From db1596c8b14aca00938c7b301db377f6355a5127 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 17 Apr 2015 16:09:35 +0200 Subject: [PATCH 1/2] migrate SQLAllocStmt for ODBC 3.0 compliance --- ext/odbc/php_odbc.c | 26 +++++++++++++------------- ext/odbc/php_odbc_includes.h | 2 ++ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index 0606eba2a4d..6945b50f7e6 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -1181,7 +1181,7 @@ PHP_FUNCTION(odbc_prepare) result->numparams = 0; - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -1609,7 +1609,7 @@ PHP_FUNCTION(odbc_exec) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); efree(result); @@ -3110,7 +3110,7 @@ PHP_FUNCTION(odbc_tables) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3177,7 +3177,7 @@ PHP_FUNCTION(odbc_columns) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3247,7 +3247,7 @@ PHP_FUNCTION(odbc_columnprivileges) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3323,7 +3323,7 @@ PHP_FUNCTION(odbc_foreignkeys) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3389,7 +3389,7 @@ PHP_FUNCTION(odbc_gettypeinfo) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3446,7 +3446,7 @@ PHP_FUNCTION(odbc_primarykeys) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3512,7 +3512,7 @@ PHP_FUNCTION(odbc_procedurecolumns) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3579,7 +3579,7 @@ PHP_FUNCTION(odbc_procedures) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3647,7 +3647,7 @@ PHP_FUNCTION(odbc_specialcolumns) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3716,7 +3716,7 @@ PHP_FUNCTION(odbc_statistics) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); @@ -3779,7 +3779,7 @@ PHP_FUNCTION(odbc_tableprivileges) result = (odbc_result *)ecalloc(1, sizeof(odbc_result)); - rc = SQLAllocStmt(conn->hdbc, &(result->stmt)); + rc = PHP_ODBC_SQLALLOCSTMT(conn->hdbc, &(result->stmt)); if (rc == SQL_INVALID_HANDLE) { efree(result); php_error_docref(NULL TSRMLS_CC, E_WARNING, "SQLAllocStmt error 'Invalid Handle'"); diff --git a/ext/odbc/php_odbc_includes.h b/ext/odbc/php_odbc_includes.h index 5f0c205977d..5b61fc3d1ec 100644 --- a/ext/odbc/php_odbc_includes.h +++ b/ext/odbc/php_odbc_includes.h @@ -283,12 +283,14 @@ void odbc_sql_error(ODBC_SQL_ERROR_PARAMS); #define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR || x == SQL_WLONGVARCHAR) #define PHP_ODBC_SQLCOLATTRIBUTE SQLColAttribute +#define PHP_ODBC_SQLALLOCSTMT(hdbc, phstmt) SQLAllocHandle(SQL_HANDLE_STMT, hdbc, phstmt) #define PHP_ODBC_DESC_BASE_COLUMN_NAME SQL_DESC_BASE_COLUMN_NAME #else #define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR) #define PHP_ODBC_SQLCOLATTRIBUTE SQLColAttributes +#define PHP_ODBC_SQLALLOCSTMT SQLAllocStmt #define PHP_ODBC_DESC_BASE_COLUMN_NAME SQL_COLUMN_NAME #endif From e09febb286b08a0a7bdbd8a63435eac8963906c4 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 17 Apr 2015 17:10:46 +0200 Subject: [PATCH 2/2] fix column name attribute with ODBC 3.0 --- ext/odbc/php_odbc.c | 2 +- ext/odbc/php_odbc_includes.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index 6945b50f7e6..231e8144f9a 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -960,7 +960,7 @@ int odbc_bindcols(odbc_result *result TSRMLS_DC) charextraalloc = 0; colfieldid = SQL_COLUMN_DISPLAY_SIZE; - rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), PHP_ODBC_DESC_BASE_COLUMN_NAME, + rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), PHP_ODBC_SQL_DESC_NAME, result->values[i].name, sizeof(result->values[i].name), &colnamelen, 0); rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), SQL_COLUMN_TYPE, NULL, 0, NULL, &result->values[i].coltype); diff --git a/ext/odbc/php_odbc_includes.h b/ext/odbc/php_odbc_includes.h index 5b61fc3d1ec..07fe07e7a2c 100644 --- a/ext/odbc/php_odbc_includes.h +++ b/ext/odbc/php_odbc_includes.h @@ -285,14 +285,14 @@ void odbc_sql_error(ODBC_SQL_ERROR_PARAMS); #define PHP_ODBC_SQLCOLATTRIBUTE SQLColAttribute #define PHP_ODBC_SQLALLOCSTMT(hdbc, phstmt) SQLAllocHandle(SQL_HANDLE_STMT, hdbc, phstmt) -#define PHP_ODBC_DESC_BASE_COLUMN_NAME SQL_DESC_BASE_COLUMN_NAME +#define PHP_ODBC_SQL_DESC_NAME SQL_DESC_NAME #else #define IS_SQL_LONG(x) (x == SQL_LONGVARBINARY || x == SQL_LONGVARCHAR) #define PHP_ODBC_SQLCOLATTRIBUTE SQLColAttributes #define PHP_ODBC_SQLALLOCSTMT SQLAllocStmt -#define PHP_ODBC_DESC_BASE_COLUMN_NAME SQL_COLUMN_NAME +#define PHP_ODBC_SQL_DESC_NAME SQL_COLUMN_NAME #endif #define IS_SQL_BINARY(x) (x == SQL_BINARY || x == SQL_VARBINARY || x == SQL_LONGVARBINARY)