List:Commits« Previous MessageNext Message »
From:jwinstead Date:August 24 2007 11:20pm
Subject:Connector/ODBC 3.51 commit: r686 - in branches/guffert: driver test
View as plain text  
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 testjwinstead25 Aug