Modified:
branches/guffert/driver/ansi.c
branches/guffert/driver/catalog.c
branches/guffert/driver/driver.def
branches/guffert/driver/driver.h
branches/guffert/driver/unicode.c
branches/guffert/test/my_unicode.c
Log:
Implement SQLSpecialColumnsW()
Modified: branches/guffert/driver/ansi.c
===================================================================
--- branches/guffert/driver/ansi.c 2007-08-24 23:20:14 UTC (rev 686)
+++ branches/guffert/driver/ansi.c 2007-08-24 23:30:41 UTC (rev 687)
@@ -901,7 +901,62 @@
return MySQLSetStmtAttr(hstmt, attribute, value, value_len);
}
+
SQLRETURN SQL_API
+SQLSpecialColumns(SQLHSTMT hstmt, SQLUSMALLINT type,
+ SQLCHAR *catalog, SQLSMALLINT catalog_len,
+ SQLCHAR *schema, SQLSMALLINT schema_len,
+ SQLCHAR *table, SQLSMALLINT table_len,
+ SQLUSMALLINT scope, SQLUSMALLINT nullable)
+{
+ SQLRETURN rc;
+ DBC *dbc= ((STMT *)hstmt)->dbc;
+
+ if (dbc->ansi_charset_info->number != dbc->cxn_charset_info->number)
+ {
+ SQLINTEGER len= SQL_NTS;
+ uint errors= 0;
+
+ if (catalog)
+ {
+ catalog= sqlchar_as_sqlchar(dbc->ansi_charset_info, dbc->cxn_charset_info,
+ catalog, &len, &errors);
+ catalog_len= (SQLSMALLINT)len;
+ len= SQL_NTS;
+ }
+
+ if (schema)
+ {
+ schema= sqlchar_as_sqlchar(dbc->ansi_charset_info, dbc->cxn_charset_info,
+ schema, &len, &errors);
+ schema_len= (SQLSMALLINT)len;
+ len= SQL_NTS;
+ }
+
+ if (table)
+ {
+ table= sqlchar_as_sqlchar(dbc->ansi_charset_info, dbc->cxn_charset_info,
+ table, &len, &errors);
+ table_len= (SQLSMALLINT)len;
+ len= SQL_NTS;
+ }
+ }
+
+ rc= MySQLSpecialColumns(hstmt, type, catalog, catalog_len, schema, schema_len,
+ table, table_len, scope, nullable);
+
+ if (dbc->ansi_charset_info->number != dbc->cxn_charset_info->number)
+ {
+ x_free(catalog);
+ x_free(schema);
+ x_free(table);
+ }
+
+ return rc;
+}
+
+
+SQLRETURN SQL_API
SQLTables(SQLHSTMT hstmt,
SQLCHAR *catalog, SQLSMALLINT catalog_len,
SQLCHAR *schema, SQLSMALLINT schema_len,
@@ -1050,17 +1105,6 @@
SQLRETURN SQL_API
-SQLSpecialColumns(SQLHSTMT hstmt, SQLUSMALLINT type,
- SQLCHAR *catalog, SQLSMALLINT catalog_len,
- SQLCHAR *schema, SQLSMALLINT schema_len,
- SQLCHAR *table, SQLSMALLINT table_len,
- SQLUSMALLINT scope, SQLUSMALLINT nullable)
-{
- NOT_IMPLEMENTED;
-}
-
-
-SQLRETURN SQL_API
SQLStatistics(SQLHSTMT hstmt,
SQLCHAR *catalog, SQLSMALLINT catalog_len,
SQLCHAR *schema, SQLSMALLINT schema_len,
Modified: branches/guffert/driver/catalog.c
===================================================================
--- branches/guffert/driver/catalog.c 2007-08-24 23:20:14 UTC (rev 686)
+++ branches/guffert/driver/catalog.c 2007-08-24 23:30:41 UTC (rev 687)
@@ -1384,7 +1384,6 @@
****************************************************************************
*/
-#if MYSQL_VERSION_ID >= 40100
MYSQL_FIELD SQLSPECIALCOLUMNS_fields[]=
{
{"SCOPE", NullS,"MySQL_SpecialColumns",NullS,NullS,NullS,NullS,5,5,
0,0,0,0,0,0,0, NOT_NULL_FLAG,0,0,MYSQL_TYPE_SHORT},
@@ -1396,19 +1395,6 @@
{"DECIMAL_DIGITS",NullS,"MySQL_SpecialColumns",NullS,NullS,NullS,NullS,3,3,
0,0,0,0,0,0,0, 0,0,0,MYSQL_TYPE_SHORT},
{"PSEUDO_COLUMN", NullS,"MySQL_SpecialColumns",NullS,NullS,NullS,NullS,3,3,
0,0,0,0,0,0,0, 0,0,0,MYSQL_TYPE_SHORT}
};
-#else
-MYSQL_FIELD SQLSPECIALCOLUMNS_fields[]=
-{
- {"SCOPE",
"MySQL_SpecialColumns",NullS,NullS,NullS,5,5,NOT_NULL_FLAG,0,MYSQL_TYPE_SHORT},
- {"COLUMN_NAME",
"MySQL_SpecialColumns",NullS,NullS,NullS,NAME_LEN,NAME_LEN,NOT_NULL_FLAG,0,MYSQL_TYPE_VAR_STRING},
- {"DATA_TYPE",
"MySQL_SpecialColumns",NullS,NullS,NullS,5,5,NOT_NULL_FLAG,0,MYSQL_TYPE_SHORT},
- {"TYPE_NAME",
"MySQL_SpecialColumns",NullS,NullS,NullS,20,20,NOT_NULL_FLAG,0,MYSQL_TYPE_VAR_STRING},
- {"COLUMN_SIZE", "MySQL_SpecialColumns",NullS,NullS,NullS,7,7,0,0,MYSQL_TYPE_LONG},
- {"BUFFER_LENGTH", "MySQL_SpecialColumns",NullS,NullS,NullS,7,7,0,0,MYSQL_TYPE_LONG},
- {"DECIMAL_DIGITS","MySQL_SpecialColumns",NullS,NullS,NullS,3,3,0,0,MYSQL_TYPE_SHORT},
- {"PSEUDO_COLUMN", "MySQL_SpecialColumns",NullS,NullS,NullS,3,3,0,0,MYSQL_TYPE_SHORT}
-};
-#endif
char *SQLSPECIALCOLUMNS_values[]= {
0,NULL,0,NULL,0,0,0,0
@@ -1427,22 +1413,16 @@
row is updated by a transaction
*/
-SQLRETURN SQL_API SQLSpecialColumns(SQLHSTMT hstmt,
- SQLUSMALLINT fColType,
- SQLCHAR FAR *szTableQualifier,
- SQLSMALLINT cbTableQualifier,
- SQLCHAR FAR *szTableOwner
- __attribute__((unused)),
- SQLSMALLINT cbTableOwner
- __attribute__((unused)),
- SQLCHAR FAR *szTableName,
- SQLSMALLINT cbTableName,
- SQLUSMALLINT fScope
- __attribute__((unused)),
- SQLUSMALLINT fNullable
- __attribute__((unused)))
-{
- STMT FAR *stmt=(STMT FAR*) hstmt;
+SQLRETURN SQL_API
+MySQLSpecialColumns(SQLHSTMT hstmt, SQLUSMALLINT fColType,
+ SQLCHAR *szTableQualifier, SQLSMALLINT cbTableQualifier,
+ SQLCHAR *szTableOwner __attribute__((unused)),
+ SQLSMALLINT cbTableOwner __attribute__((unused)),
+ SQLCHAR *szTableName, SQLSMALLINT cbTableName,
+ SQLUSMALLINT fScope __attribute__((unused)),
+ SQLUSMALLINT fNullable __attribute__((unused)))
+{
+ STMT *stmt=(STMT *) hstmt;
char buff[80];
char **row;
MYSQL_RES *result;
@@ -1601,6 +1581,7 @@
return SQL_SUCCESS;
}
+
/*
****************************************************************************
SQLPrimaryKeys
Modified: branches/guffert/driver/driver.def
===================================================================
--- branches/guffert/driver/driver.def 2007-08-24 23:20:14 UTC (rev 686)
+++ branches/guffert/driver/driver.def 2007-08-24 23:30:41 UTC (rev 687)
@@ -129,6 +129,7 @@
SQLSetConnectOptionW
SQLSetCursorNameW
SQLSetStmtAttrW
+SQLSpecialColumnsW
SQLTablesW
;
DllMain
Modified: branches/guffert/driver/driver.h
===================================================================
--- branches/guffert/driver/driver.h 2007-08-24 23:20:14 UTC (rev 686)
+++ branches/guffert/driver/driver.h 2007-08-24 23:30:41 UTC (rev 687)
@@ -447,6 +447,12 @@
SQLSMALLINT len);
SQLRETURN SQL_API MySQLSetStmtAttr(SQLHSTMT hstmt, SQLINTEGER attribute,
SQLPOINTER value, SQLINTEGER len);
+SQLRETURN SQL_API MySQLSpecialColumns(SQLHSTMT hstmt, SQLUSMALLINT type,
+ SQLCHAR *catalog, SQLSMALLINT catalog_len,
+ SQLCHAR *schema, SQLSMALLINT schema_len,
+ SQLCHAR *table, SQLSMALLINT table_len,
+ SQLUSMALLINT scope,
+ SQLUSMALLINT nullable);
SQLRETURN SQL_API MySQLTables(SQLHSTMT hstmt,
SQLCHAR *catalog, SQLSMALLINT catalog_len,
SQLCHAR *schema, SQLSMALLINT schema_len,
Modified: branches/guffert/driver/unicode.c
===================================================================
--- branches/guffert/driver/unicode.c 2007-08-24 23:20:14 UTC (rev 686)
+++ branches/guffert/driver/unicode.c 2007-08-24 23:30:41 UTC (rev 687)
@@ -1022,6 +1022,43 @@
SQLRETURN SQL_API
+SQLSpecialColumnsW(SQLHSTMT hstmt, SQLUSMALLINT type,
+ SQLWCHAR *catalog, SQLSMALLINT catalog_len,
+ SQLWCHAR *schema, SQLSMALLINT schema_len,
+ SQLWCHAR *table, SQLSMALLINT table_len,
+ SQLUSMALLINT scope, SQLUSMALLINT nullable)
+{
+ SQLRETURN rc;
+ SQLCHAR *catalog8, *schema8, *table8;
+ DBC *dbc= ((STMT *)hstmt)->dbc;
+ SQLINTEGER len= SQL_NTS;;
+ uint errors= 0;
+
+ catalog8= sqlwchar_as_sqlchar(dbc->cxn_charset_info, catalog, &len,
&errors);
+ catalog_len= (SQLSMALLINT)len;
+ len= SQL_NTS;
+
+ schema8= sqlwchar_as_sqlchar(dbc->cxn_charset_info, schema, &len, &errors);
+ schema_len= (SQLSMALLINT)len;
+ len= SQL_NTS;
+
+ table8= sqlwchar_as_sqlchar(dbc->cxn_charset_info, table, &len, &errors);
+ table_len= (SQLSMALLINT)len;
+ len= SQL_NTS;
+
+ rc= MySQLSpecialColumns(hstmt, type, catalog8, catalog_len,
+ schema8, schema_len, table8, table_len,
+ scope, nullable);
+
+ x_free(catalog8);
+ x_free(schema8);
+ x_free(table8);
+
+ return rc;
+}
+
+
+SQLRETURN SQL_API
SQLTablesW(SQLHSTMT hstmt,
SQLWCHAR *catalog, SQLSMALLINT catalog_len,
SQLWCHAR *schema, SQLSMALLINT schema_len,
@@ -1149,17 +1186,6 @@
SQLRETURN SQL_API
-SQLSpecialColumnsW(SQLHSTMT hstmt, SQLUSMALLINT type,
- SQLWCHAR *catalog, SQLSMALLINT catalog_len,
- SQLWCHAR *schema, SQLSMALLINT schema_len,
- SQLWCHAR *table, SQLSMALLINT table_len,
- SQLUSMALLINT scope, SQLUSMALLINT nullable)
-{
- NOT_IMPLEMENTED;
-}
-
-
-SQLRETURN SQL_API
SQLStatisticsW(SQLHSTMT hstmt,
SQLWCHAR *catalog, SQLSMALLINT catalog_len,
SQLWCHAR *schema, SQLSMALLINT schema_len,
Modified: branches/guffert/test/my_unicode.c
===================================================================
--- branches/guffert/test/my_unicode.c 2007-08-24 23:20:14 UTC (rev 686)
+++ branches/guffert/test/my_unicode.c 2007-08-24 23:30:41 UTC (rev 687)
@@ -756,6 +756,46 @@
}
+DECLARE_TEST(sqlspecialcolumns)
+{
+ HDBC hdbc1;
+ HSTMT hstmt1;
+ SQLWCHAR wbuff[40];
+
+ ok_env(henv, SQLAllocConnect(henv, &hdbc1));
+ ok_con(hdbc1, SQLConnectW(hdbc1, W(L"myodbc3"), SQL_NTS, W(L"root"), SQL_NTS,
+ W(L""), SQL_NTS));
+
+ ok_con(hdbc1, SQLAllocStmt(hdbc1, &hstmt1));
+
+ ok_sql(hstmt1, "DROP TABLE IF EXISTS t_spec");
+ ok_stmt(hstmt1,
+ SQLExecDirectW(hstmt1,
+ W(L"CREATE TABLE t_spec (a\u00e3g INT PRIMARY KEY)"),
+ SQL_NTS));
+
+ ok_stmt(hstmt1, SQLSpecialColumnsW(hstmt1, SQL_BEST_ROWID, NULL, 0, NULL, 0,
+ W(L"t_spec"), SQL_NTS, SQL_SCOPE_SESSION,
+ SQL_NULLABLE));
+
+ ok_stmt(hstmt1, SQLFetch(hstmt1));
+
+ is_wstr(my_fetch_wstr(hstmt1, wbuff, 2), L"a\u00e3g", 4);
+
+ expect_stmt(hstmt1, SQLFetch(hstmt1), SQL_NO_DATA_FOUND);
+
+ ok_stmt(hstmt1, SQLFreeStmt(hstmt1, SQL_CLOSE));
+
+ ok_sql(hstmt1, "DROP TABLE IF EXISTS t_spec");
+
+ ok_stmt(hstmt1, SQLFreeStmt(hstmt1, SQL_DROP));
+ ok_con(hdbc1, SQLDisconnect(hdbc1));
+ ok_con(hdbc1, SQLFreeConnect(hdbc1));
+
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(sqlconnect)
ADD_TEST(sqlprepare)
@@ -772,6 +812,7 @@
ADD_TEST(sqlgetdiagfield)
ADD_TEST(sqlcolumns)
ADD_TEST(sqltables)
+ ADD_TEST(sqlspecialcolumns)
END_TESTS
| Thread |
|---|
| • Connector/ODBC 3.51 commit: r687 - in branches/guffert: driver test | jwinstead | 25 Aug |