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 SQLTablesW()
Modified: branches/guffert/driver/ansi.c
===================================================================
--- branches/guffert/driver/ansi.c 2007-08-24 22:50:38 UTC (rev 685)
+++ branches/guffert/driver/ansi.c 2007-08-24 23:20:14 UTC (rev 686)
@@ -901,7 +901,69 @@
return MySQLSetStmtAttr(hstmt, attribute, value, value_len);
}
+SQLRETURN SQL_API
+SQLTables(SQLHSTMT hstmt,
+ SQLCHAR *catalog, SQLSMALLINT catalog_len,
+ SQLCHAR *schema, SQLSMALLINT schema_len,
+ SQLCHAR *table, SQLSMALLINT table_len,
+ SQLCHAR *type, SQLSMALLINT type_len)
+{
+ 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;
+ }
+
+ if (type)
+ {
+ type= sqlchar_as_sqlchar(dbc->ansi_charset_info, dbc->cxn_charset_info,
+ type, &len, &errors);
+ type_len= (SQLSMALLINT)len;
+ len= SQL_NTS;
+ }
+ }
+
+ rc= MySQLTables(hstmt, catalog, catalog_len, schema, schema_len,
+ table, table_len, type, type_len);
+
+ if (dbc->ansi_charset_info->number != dbc->cxn_charset_info->number)
+ {
+ x_free(catalog);
+ x_free(schema);
+ x_free(table);
+ x_free(type);
+ }
+
+ return rc;
+}
+
+
#ifdef NOT_IMPLEMENTED_YET
SQLRETURN SQL_API
SQLBrowseConnect(SQLHDBC hdbc, SQLCHAR *in, SQLSMALLINT in_len,
@@ -1019,13 +1081,4 @@
}
-SQLRETURN SQL_API
-SQLTables(SQLHSTMT hstmt,
- SQLCHAR *catalog, SQLSMALLINT catalog_len,
- SQLCHAR *schema, SQLSMALLINT schema_len,
- SQLCHAR *table, SQLSMALLINT table_len,
- SQLCHAR *type, SQLSMALLINT type_len)
-{
- NOT_IMPLEMENTED;
-}
#endif
Modified: branches/guffert/driver/catalog.c
===================================================================
--- branches/guffert/driver/catalog.c 2007-08-24 22:50:38 UTC (rev 685)
+++ branches/guffert/driver/catalog.c 2007-08-24 23:20:14 UTC (rev 686)
@@ -312,7 +312,6 @@
{NULL,NULL,NULL,"VIEW",NULL},
};
-#if MYSQL_VERSION_ID >= 40100
MYSQL_FIELD SQLTABLES_fields[]=
{
{"TABLE_CAT", NullS,"Catalog",NullS,NullS,NullS,NullS,NAME_LEN,0, 0,0,0,0,0,0,0,
0,0,0,MYSQL_TYPE_VAR_STRING},
@@ -321,28 +320,15 @@
{"TABLE_TYPE", NullS,"Catalog",NullS,NullS,NullS,NullS,NAME_LEN,5, 0,0,0,0,0,0,0,
0,0,0,MYSQL_TYPE_VAR_STRING},
{"REMARKS", NullS,"Catalog",NullS,NullS,NullS,NullS,NAME_LEN,11, 0,0,0,0,0,0,0,
0,0,0,MYSQL_TYPE_VAR_STRING}
};
-#else
-MYSQL_FIELD SQLTABLES_fields[]=
-{
- {"TABLE_CAT", "Catalog",NullS,NullS,NullS,NAME_LEN,0,0,0,MYSQL_TYPE_VAR_STRING},
- {"TABLE_SCHEM", "Catalog",NullS,NullS,NullS,NAME_LEN,0,0,0,MYSQL_TYPE_VAR_STRING},
- {"TABLE_NAME",
"Catalog",NullS,NullS,NullS,NAME_LEN,NAME_LEN,0,0,MYSQL_TYPE_VAR_STRING},
- {"TABLE_TYPE", "Catalog",NullS,NullS,NullS,NAME_LEN,5,0,0,MYSQL_TYPE_VAR_STRING},
- {"REMARKS", "Catalog",NullS,NullS,NullS,NAME_LEN,11,0,0,MYSQL_TYPE_VAR_STRING}
-};
-#endif
const uint SQLTABLES_FIELDS= array_elements(SQLTABLES_values);
-SQLRETURN SQL_API SQLTables(SQLHSTMT hstmt,
- SQLCHAR FAR *szTableQualifier,
- SQLSMALLINT cbTableQualifier,
- SQLCHAR FAR *szTableOwner,
- SQLSMALLINT cbTableOwner,
- SQLCHAR FAR *szTableName,
- SQLSMALLINT cbTableName,
- SQLCHAR FAR *szTableType,
- SQLSMALLINT cbTableType)
+SQLRETURN SQL_API
+MySQLTables(SQLHSTMT hstmt,
+ SQLCHAR *szTableQualifier, SQLSMALLINT cbTableQualifier,
+ SQLCHAR *szTableOwner, SQLSMALLINT cbTableOwner,
+ SQLCHAR *szTableName, SQLSMALLINT cbTableName,
+ SQLCHAR *szTableType, SQLSMALLINT cbTableType)
{
char Qualifier_buff[NAME_LEN+1],
Owner_buff[NAME_LEN+1],
Modified: branches/guffert/driver/driver.def
===================================================================
--- branches/guffert/driver/driver.def 2007-08-24 22:50:38 UTC (rev 685)
+++ branches/guffert/driver/driver.def 2007-08-24 23:20:14 UTC (rev 686)
@@ -129,7 +129,7 @@
SQLSetConnectOptionW
SQLSetCursorNameW
SQLSetStmtAttrW
-
+SQLTablesW
;
DllMain
LoadByOrdinal
Modified: branches/guffert/driver/driver.h
===================================================================
--- branches/guffert/driver/driver.h 2007-08-24 22:50:38 UTC (rev 685)
+++ branches/guffert/driver/driver.h 2007-08-24 23:20:14 UTC (rev 686)
@@ -447,5 +447,10 @@
SQLSMALLINT len);
SQLRETURN SQL_API MySQLSetStmtAttr(SQLHSTMT hstmt, SQLINTEGER attribute,
SQLPOINTER value, SQLINTEGER len);
+SQLRETURN SQL_API MySQLTables(SQLHSTMT hstmt,
+ SQLCHAR *catalog, SQLSMALLINT catalog_len,
+ SQLCHAR *schema, SQLSMALLINT schema_len,
+ SQLCHAR *table, SQLSMALLINT table_len,
+ SQLCHAR *type, SQLSMALLINT type_len);
#endif /* __MYODBC3_H__ */
Modified: branches/guffert/driver/unicode.c
===================================================================
--- branches/guffert/driver/unicode.c 2007-08-24 22:50:38 UTC (rev 685)
+++ branches/guffert/driver/unicode.c 2007-08-24 23:20:14 UTC (rev 686)
@@ -1021,6 +1021,47 @@
}
+SQLRETURN SQL_API
+SQLTablesW(SQLHSTMT hstmt,
+ SQLWCHAR *catalog, SQLSMALLINT catalog_len,
+ SQLWCHAR *schema, SQLSMALLINT schema_len,
+ SQLWCHAR *table, SQLSMALLINT table_len,
+ SQLWCHAR *type, SQLSMALLINT type_len)
+{
+ SQLRETURN rc;
+ SQLCHAR *catalog8, *schema8, *table8, *type8;
+ 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;
+
+ type8= sqlwchar_as_sqlchar(dbc->cxn_charset_info, type, &len, &errors);
+ type_len= (SQLSMALLINT)len;
+ len= SQL_NTS;
+
+ rc= MySQLTables(hstmt, catalog8, catalog_len, schema8, schema_len,
+ table8, table_len, type8, type_len);
+
+ x_free(catalog8);
+ x_free(schema8);
+ x_free(table8);
+ x_free(type8);
+
+ return rc;
+}
+
+
#ifdef NOT_IMPLEMENTED_YET
SQLRETURN SQL_API
SQLBrowseConnectW(SQLHDBC hdbc, SQLWCHAR *in, SQLSMALLINT in_len,
@@ -1137,15 +1178,4 @@
{
NOT_IMPLEMENTED;
}
-
-
-SQLRETURN SQL_API
-SQLTablesW(SQLHSTMT hstmt,
- SQLWCHAR *catalog, SQLSMALLINT catalog_len,
- SQLWCHAR *schema, SQLSMALLINT schema_len,
- SQLWCHAR *table, SQLSMALLINT table_len,
- SQLWCHAR *type, SQLSMALLINT type_len)
-{
- NOT_IMPLEMENTED;
-}
#endif
Modified: branches/guffert/test/my_unicode.c
===================================================================
--- branches/guffert/test/my_unicode.c 2007-08-24 22:50:38 UTC (rev 685)
+++ branches/guffert/test/my_unicode.c 2007-08-24 23:20:14 UTC (rev 686)
@@ -713,6 +713,49 @@
}
+DECLARE_TEST(sqltables)
+{
+ 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_stmt(hstmt1, SQLExecDirectW(hstmt1,
+ W(L"DROP TABLE IF EXISTS t_a\u00e3g"),
+ SQL_NTS));
+ ok_stmt(hstmt1, SQLExecDirectW(hstmt1,
+ W(L"CREATE TABLE t_a\u00e3g (a INT)"),
+ SQL_NTS));
+
+ ok_stmt(hstmt1, SQLTablesW(hstmt1, NULL, 0, NULL, 0,
+ W(L"t_a\u00e3g"), SQL_NTS,
+ NULL, 0));
+
+ ok_stmt(hstmt1, SQLFetch(hstmt1));
+
+ is_wstr(my_fetch_wstr(hstmt1, wbuff, 3), L"t_a\u00e3g", 6);
+
+ expect_stmt(hstmt1, SQLFetch(hstmt1), SQL_NO_DATA_FOUND);
+
+ ok_stmt(hstmt1, SQLFreeStmt(hstmt1, SQL_CLOSE));
+
+ ok_stmt(hstmt1, SQLExecDirectW(hstmt1,
+ W(L"DROP TABLE IF EXISTS t_a\u00e3g"),
+ SQL_NTS));
+
+ 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)
@@ -728,6 +771,7 @@
ADD_TEST(sqlgetdiagrec)
ADD_TEST(sqlgetdiagfield)
ADD_TEST(sqlcolumns)
+ ADD_TEST(sqltables)
END_TESTS
| Thread |
|---|
| • Connector/ODBC 3.51 commit: r686 - in branches/guffert: driver test | jwinstead | 25 Aug |