summaryrefslogtreecommitdiff
path: root/ext/pdo_odbc/odbc_driver.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-12-11 17:13:38 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-12-14 10:43:28 +0100
commit2d51c203f09551323ed595514e03ab206fd93129 (patch)
tree5069c1608f092ee57d312d28b1b9d4064abd0c62 /ext/pdo_odbc/odbc_driver.c
parentc288b5294bb0e13ad2904a3ec79265f727baaea3 (diff)
downloadphp-git-2d51c203f09551323ed595514e03ab206fd93129.tar.gz
PDO: Store/pass query_string as zend_string
Rather than storing char* + size_t, use a zend_string*. Also avoid various copies of the query string.
Diffstat (limited to 'ext/pdo_odbc/odbc_driver.c')
-rw-r--r--ext/pdo_odbc/odbc_driver.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/ext/pdo_odbc/odbc_driver.c b/ext/pdo_odbc/odbc_driver.c
index 1729cf0fef..123d86e2cf 100644
--- a/ext/pdo_odbc/odbc_driver.c
+++ b/ext/pdo_odbc/odbc_driver.c
@@ -138,15 +138,14 @@ static int odbc_handle_closer(pdo_dbh_t *dbh)
return 0;
}
-static int odbc_handle_preparer(pdo_dbh_t *dbh, const char *sql, size_t sql_len, pdo_stmt_t *stmt, zval *driver_options)
+static int odbc_handle_preparer(pdo_dbh_t *dbh, zend_string *sql, pdo_stmt_t *stmt, zval *driver_options)
{
RETCODE rc;
pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data;
pdo_odbc_stmt *S = ecalloc(1, sizeof(*S));
enum pdo_cursor_type cursor_type = PDO_CURSOR_FWDONLY;
int ret;
- char *nsql = NULL;
- size_t nsql_len = 0;
+ zend_string *nsql = NULL;
S->H = H;
S->assume_utf8 = H->assume_utf8;
@@ -154,7 +153,7 @@ static int odbc_handle_preparer(pdo_dbh_t *dbh, const char *sql, size_t sql_len,
/* before we prepare, we need to peek at the query; if it uses named parameters,
* we want PDO to rewrite them for us */
stmt->supports_placeholders = PDO_PLACEHOLDER_POSITIONAL;
- ret = pdo_parse_params(stmt, (char*)sql, sql_len, &nsql, &nsql_len);
+ ret = pdo_parse_params(stmt, sql, &nsql);
if (ret == 1) {
/* query was re-written */
@@ -171,7 +170,7 @@ static int odbc_handle_preparer(pdo_dbh_t *dbh, const char *sql, size_t sql_len,
if (rc == SQL_INVALID_HANDLE || rc == SQL_ERROR) {
efree(S);
if (nsql) {
- efree(nsql);
+ zend_string_release(nsql);
}
pdo_odbc_drv_error("SQLAllocStmt");
return 0;
@@ -186,15 +185,15 @@ static int odbc_handle_preparer(pdo_dbh_t *dbh, const char *sql, size_t sql_len,
pdo_odbc_stmt_error("SQLSetStmtAttr: SQL_ATTR_CURSOR_SCROLLABLE");
SQLFreeHandle(SQL_HANDLE_STMT, S->stmt);
if (nsql) {
- efree(nsql);
+ zend_string_release(nsql);
}
return 0;
}
}
- rc = SQLPrepare(S->stmt, (SQLCHAR *) sql, SQL_NTS);
+ rc = SQLPrepare(S->stmt, (SQLCHAR *) ZSTR_VAL(sql), SQL_NTS);
if (nsql) {
- efree(nsql);
+ zend_string_release(nsql);
}
stmt->methods = &odbc_stmt_methods;