diff options
Diffstat (limited to 'ext/pdo_odbc/odbc_driver.c')
-rw-r--r-- | ext/pdo_odbc/odbc_driver.c | 78 |
1 files changed, 41 insertions, 37 deletions
diff --git a/ext/pdo_odbc/odbc_driver.c b/ext/pdo_odbc/odbc_driver.c index 76b981e2c2..790ee87851 100644 --- a/ext/pdo_odbc/odbc_driver.c +++ b/ext/pdo_odbc/odbc_driver.c @@ -27,7 +27,7 @@ #include "php_pdo_odbc_int.h" #include "zend_exceptions.h" -static int pdo_odbc_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info) +static void pdo_odbc_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info) { pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data; pdo_odbc_errinfo *einfo = &H->einfo; @@ -47,8 +47,6 @@ static int pdo_odbc_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *inf add_next_index_long(info, einfo->last_error); add_next_index_str(info, message); add_next_index_string(info, einfo->last_state); - - return 1; } @@ -120,7 +118,7 @@ void pdo_odbc_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, PDO_ODBC_HSTMT statement, } /* }}} */ -static int odbc_handle_closer(pdo_dbh_t *dbh) +static void odbc_handle_closer(pdo_dbh_t *dbh) { pdo_odbc_db_handle *H = (pdo_odbc_db_handle*)dbh->driver_data; @@ -134,19 +132,16 @@ static int odbc_handle_closer(pdo_dbh_t *dbh) H->env = NULL; pefree(H, dbh->is_persistent); dbh->driver_data = NULL; - - 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 bool 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 +149,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 */ @@ -163,7 +158,7 @@ static int odbc_handle_preparer(pdo_dbh_t *dbh, const char *sql, size_t sql_len, /* couldn't grok it */ strcpy(dbh->error_code, stmt->error_code); efree(S); - return 0; + return false; } rc = SQLAllocHandle(SQL_HANDLE_STMT, H->dbc, &S->stmt); @@ -171,10 +166,10 @@ 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; + return false; } stmt->driver_data = S; @@ -186,15 +181,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; + return false; } } - 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; @@ -212,12 +207,12 @@ static int odbc_handle_preparer(pdo_dbh_t *dbh, const char *sql, size_t sql_len, } if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { - return 0; + return false; } - return 1; + return true; } -static zend_long odbc_handle_doer(pdo_dbh_t *dbh, const char *sql, size_t sql_len) +static zend_long odbc_handle_doer(pdo_dbh_t *dbh, const zend_string *sql) { pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data; RETCODE rc; @@ -230,7 +225,7 @@ static zend_long odbc_handle_doer(pdo_dbh_t *dbh, const char *sql, size_t sql_le return -1; } - rc = SQLExecDirect(stmt, (SQLCHAR *) sql, sql_len); + rc = SQLExecDirect(stmt, (SQLCHAR *) ZSTR_VAL(sql), ZSTR_LEN(sql)); if (rc == SQL_NO_DATA) { /* If SQLExecDirect executes a searched update or delete statement that @@ -267,7 +262,7 @@ static int odbc_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, size_t unquo } */ -static int odbc_handle_begin(pdo_dbh_t *dbh) +static bool odbc_handle_begin(pdo_dbh_t *dbh) { if (dbh->auto_commit) { /* we need to disable auto-commit now, to be able to initiate a transaction */ @@ -277,13 +272,13 @@ static int odbc_handle_begin(pdo_dbh_t *dbh) rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_IS_INTEGER); if (rc != SQL_SUCCESS) { pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = OFF"); - return 0; + return false; } } - return 1; + return true; } -static int odbc_handle_commit(pdo_dbh_t *dbh) +static bool odbc_handle_commit(pdo_dbh_t *dbh) { pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data; RETCODE rc; @@ -294,7 +289,7 @@ static int odbc_handle_commit(pdo_dbh_t *dbh) pdo_odbc_drv_error("SQLEndTran: Commit"); if (rc != SQL_SUCCESS_WITH_INFO) { - return 0; + return false; } } @@ -303,13 +298,13 @@ static int odbc_handle_commit(pdo_dbh_t *dbh) rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, SQL_IS_INTEGER); if (rc != SQL_SUCCESS) { pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = ON"); - return 0; + return false; } } - return 1; + return true; } -static int odbc_handle_rollback(pdo_dbh_t *dbh) +static bool odbc_handle_rollback(pdo_dbh_t *dbh) { pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data; RETCODE rc; @@ -320,7 +315,7 @@ static int odbc_handle_rollback(pdo_dbh_t *dbh) pdo_odbc_drv_error("SQLEndTran: Rollback"); if (rc != SQL_SUCCESS_WITH_INFO) { - return 0; + return false; } } if (dbh->auto_commit && H->dbc) { @@ -328,25 +323,30 @@ static int odbc_handle_rollback(pdo_dbh_t *dbh) rc = SQLSetConnectAttr(H->dbc, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_ON, SQL_IS_INTEGER); if (rc != SQL_SUCCESS) { pdo_odbc_drv_error("SQLSetConnectAttr AUTOCOMMIT = ON"); - return 0; + return false; } } - return 1; + return true; } -static int odbc_handle_set_attr(pdo_dbh_t *dbh, zend_long attr, zval *val) +static bool odbc_handle_set_attr(pdo_dbh_t *dbh, zend_long attr, zval *val) { pdo_odbc_db_handle *H = (pdo_odbc_db_handle *)dbh->driver_data; + bool bval; + switch (attr) { case PDO_ODBC_ATTR_ASSUME_UTF8: - H->assume_utf8 = zval_is_true(val); - return 1; + if (!pdo_get_bool_param(&bval, val)) { + return false; + } + H->assume_utf8 = bval; + return true; default: strcpy(H->einfo.last_err_msg, "Unknown Attribute"); H->einfo.what = "setAttribute"; strcpy(H->einfo.last_state, "IM001"); - return 0; + return false; } } @@ -384,7 +384,11 @@ static const struct pdo_dbh_methods odbc_methods = { NULL, /* last id */ pdo_odbc_fetch_error_func, odbc_handle_get_attr, /* get attr */ - NULL, /* check_liveness */ + NULL, /* check_liveness */ + NULL, /* get_driver_methods */ + NULL, /* request_shutdown */ + NULL, /* in transaction, use PDO's internal tracking mechanism */ + NULL /* get_gc */ }; static int pdo_odbc_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */ |