List:Commits« Previous MessageNext Message »
From:jwinstead Date:August 24 2007 9:45pm
Subject:Connector/ODBC 3.51 commit: r684 - 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_catalog.c
Log:
Implement SQLColumnPrivilegesW(). No test, because this function is broken
as implemented.


Modified: branches/guffert/driver/ansi.c
===================================================================
--- branches/guffert/driver/ansi.c	2007-08-24 19:03:44 UTC (rev 683)
+++ branches/guffert/driver/ansi.c	2007-08-24 19:45:26 UTC (rev 684)
@@ -171,6 +171,69 @@
 
 
 SQLRETURN SQL_API
+SQLColumnPrivileges(SQLHSTMT hstmt,
+                    SQLCHAR *catalog, SQLSMALLINT catalog_len,
+                    SQLCHAR *schema, SQLSMALLINT schema_len,
+                    SQLCHAR *table, SQLSMALLINT table_len,
+                    SQLCHAR *column, SQLSMALLINT column_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 (column)
+    {
+      column= sqlchar_as_sqlchar(dbc->ansi_charset_info, dbc->cxn_charset_info,
+                                 column, &len, &errors);
+      column_len= (SQLSMALLINT)len;
+      len= SQL_NTS;
+    }
+  }
+
+  rc= MySQLColumnPrivileges(hstmt, catalog, catalog_len, schema, schema_len,
+                            table, table_len, column, column_len);
+
+  if (dbc->ansi_charset_info->number != dbc->cxn_charset_info->number)
+  {
+    x_free(catalog);
+    x_free(schema);
+    x_free(table);
+    x_free(column);
+  }
+
+  return rc;
+}
+
+
+SQLRETURN SQL_API
 SQLConnect(SQLHDBC hdbc, SQLCHAR *dsn, SQLSMALLINT dsn_len,
            SQLCHAR *user, SQLSMALLINT user_len,
            SQLCHAR *auth, SQLSMALLINT auth_len)
@@ -787,17 +850,6 @@
 
 
 SQLRETURN SQL_API
-SQLColumnPrivileges(SQLHSTMT hstmt,
-                    SQLCHAR *catalog, SQLSMALLINT catalog_len,
-                    SQLCHAR *schema, SQLSMALLINT schema_len,
-                    SQLCHAR *table, SQLSMALLINT table_len,
-                    SQLCHAR *column, SQLSMALLINT column_len)
-{
-  NOT_IMPLEMENTED;
-}
-
-
-SQLRETURN SQL_API
 SQLColumns(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 19:03:44 UTC (rev 683)
+++ branches/guffert/driver/catalog.c	2007-08-24 19:45:26 UTC (rev 684)
@@ -1298,19 +1298,14 @@
 }
 
 
-/*
-****************************************************************************
-SQLColumnPrivileges
-****************************************************************************
-*/
 
 /*
   @type    : internal
   @purpose : returns a column privileges result, NULL on error
 */
-static MYSQL_RES *mysql_list_column_priv(MYSQL *mysql, 
+static MYSQL_RES *mysql_list_column_priv(MYSQL *mysql,
                                          const char *qualifier,
-                                         const char *table, 
+                                         const char *table,
                                          const char *column)
 {
     char buff[255+3*NAME_LEN+1];
@@ -1333,12 +1328,13 @@
     return mysql_store_result(mysql);
 }
 
-char *SQLCOLUMNS_priv_values[]= 
+
+char *SQLCOLUMNS_priv_values[]=
 {
     NULL,"",NULL,NULL,NULL,NULL,NULL,NULL
 };
 
-#if MYSQL_VERSION_ID >= 40100
+
 MYSQL_FIELD SQLCOLUMNS_priv_fields[]=
 {
     {"TABLE_CAT",     NullS,"MySQL_Catalog",NullS,NullS,NullS,NullS,NAME_LEN,0,
0,0,0,0,0,0,0, 0,0,0,MYSQL_TYPE_VAR_STRING},
@@ -1349,43 +1345,21 @@
     {"GRANTEE",       NullS,"MySQL_Catalog",NullS,NullS,NullS,NullS,NAME_LEN,NAME_LEN,
0,0,0,0,0,0,0, NOT_NULL_FLAG,0,0,MYSQL_TYPE_VAR_STRING},
     {"PRIVILEGE",     NullS,"MySQL_Catalog",NullS,NullS,NullS,NullS,NAME_LEN,NAME_LEN,
0,0,0,0,0,0,0, NOT_NULL_FLAG,0,0,MYSQL_TYPE_VAR_STRING},
     {"IS_GRANTABLE",  NullS,"MySQL_Catalog",NullS,NullS,NullS,NullS,NAME_LEN,0,
0,0,0,0,0,0,0, 0,0,0,MYSQL_TYPE_VAR_STRING},
-};                                                           
-#else
-MYSQL_FIELD SQLCOLUMNS_priv_fields[]=
-{
-    {"TABLE_CAT",    
"MySQL_Catalog",NullS,NullS,NullS,NAME_LEN,0,0,0,MYSQL_TYPE_VAR_STRING},
-    {"TABLE_SCHEM",  
"MySQL_Catalog",NullS,NullS,NullS,NAME_LEN,0,0,0,MYSQL_TYPE_VAR_STRING},
-    {"TABLE_NAME",   
"MySQL_Catalog",NullS,NullS,NullS,NAME_LEN,NAME_LEN,NOT_NULL_FLAG,0,MYSQL_TYPE_VAR_STRING},
-    {"COLUMN_NAME",  
"MySQL_Catalog",NullS,NullS,NullS,NAME_LEN,NAME_LEN,NOT_NULL_FLAG,0,MYSQL_TYPE_VAR_STRING},
-    {"GRANTOR",      
"MySQL_Catalog",NullS,NullS,NullS,NAME_LEN,0,0,0,MYSQL_TYPE_VAR_STRING},
-    {"GRANTEE",      
"MySQL_Catalog",NullS,NullS,NullS,NAME_LEN,NAME_LEN,NOT_NULL_FLAG,0,MYSQL_TYPE_VAR_STRING},
-    {"PRIVILEGE",    
"MySQL_Catalog",NullS,NullS,NullS,NAME_LEN,NAME_LEN,NOT_NULL_FLAG,0,MYSQL_TYPE_VAR_STRING},
-    {"IS_GRANTABLE", 
"MySQL_Catalog",NullS,NullS,NullS,NAME_LEN,0,0,0,MYSQL_TYPE_VAR_STRING},
 };
-#endif
 
+
 const uint SQLCOLUMNS_PRIV_FIELDS= array_elements(SQLCOLUMNS_priv_values);
 
-/*
-  @type    : ODBC 1.0 API
-  @purpose : returns a list of columns and associated privileges for the
-             specified table. The driver returns the information as a result
-             set on the specified StatementHandle.
-*/
 
-SQLRETURN SQL_API SQLColumnPrivileges(SQLHSTMT hstmt,
-                                      SQLCHAR FAR *szTableQualifier,
-                                      SQLSMALLINT cbTableQualifier,
-                                      SQLCHAR FAR *szTableOwner
-                                       __attribute__((unused)),
-                                      SQLSMALLINT cbTableOwner
-                                       __attribute__((unused)),
-                                      SQLCHAR FAR *szTableName,
-                                      SQLSMALLINT cbTableName,
-                                      SQLCHAR FAR *szColumnName,
-                                      SQLSMALLINT cbColumnName)
-{ 
-    STMT FAR *stmt=(STMT FAR*) hstmt;
+SQLRETURN SQL_API
+MySQLColumnPrivileges(SQLHSTMT hstmt,
+                      SQLCHAR *szTableQualifier, SQLSMALLINT cbTableQualifier,
+                      SQLCHAR *szTableOwner __attribute__((unused)),
+                      SQLSMALLINT cbTableOwner __attribute__((unused)),
+                      SQLCHAR *szTableName, SQLSMALLINT cbTableName,
+                      SQLCHAR *szColumnName, SQLSMALLINT cbColumnName)
+{
+    STMT *stmt=(STMT *) hstmt;
     char     Qualifier_buff[NAME_LEN+1],Table_buff[NAME_LEN+1],
     Column_buff[NAME_LEN+1],
     *TableQualifier,*TableName, *ColumnName;
@@ -1452,11 +1426,12 @@
             data+= SQLCOLUMNS_PRIV_FIELDS;
         }
     }
-    stmt->result->row_count= row_count;  
+    stmt->result->row_count= row_count;
     mysql_link_fields(stmt,SQLCOLUMNS_priv_fields,SQLCOLUMNS_PRIV_FIELDS);
     return SQL_SUCCESS;
 }
 
+
 /*
 ****************************************************************************
 SQLSpecialColumns

Modified: branches/guffert/driver/driver.def
===================================================================
--- branches/guffert/driver/driver.def	2007-08-24 19:03:44 UTC (rev 683)
+++ branches/guffert/driver/driver.def	2007-08-24 19:45:26 UTC (rev 684)
@@ -108,6 +108,7 @@
 ;SQLGetDescRec
 SQLColAttributeW
 SQLColAttributesW
+SQLColumnPrivilegesW
 SQLCloseCursor
 SQLConnectW
 SQLDescribeColW

Modified: branches/guffert/driver/driver.h
===================================================================
--- branches/guffert/driver/driver.h	2007-08-24 19:03:44 UTC (rev 683)
+++ branches/guffert/driver/driver.h	2007-08-24 19:45:26 UTC (rev 684)
@@ -397,6 +397,13 @@
 SQLRETURN SQL_API MySQLColAttribute(SQLHSTMT hstmt, SQLUSMALLINT column,
                                     SQLUSMALLINT attrib, SQLCHAR **char_attr,
                                     SQLLEN *num_attr);
+SQLRETURN SQL_API MySQLColumnPrivileges(SQLHSTMT hstmt,
+                                        SQLCHAR *catalog,
+                                        SQLSMALLINT catalog_len,
+                                        SQLCHAR *schema, SQLSMALLINT schema_len,
+                                        SQLCHAR *table, SQLSMALLINT table_len,
+                                        SQLCHAR *column,
+                                        SQLSMALLINT column_len);
 SQLRETURN SQL_API MySQLConnect(SQLHDBC hdbc, SQLCHAR *szDSN, SQLSMALLINT cbDSN,
                                SQLCHAR *szUID, SQLSMALLINT cbUID,
                                SQLCHAR *szAuth, SQLSMALLINT cbAuth);

Modified: branches/guffert/driver/unicode.c
===================================================================
--- branches/guffert/driver/unicode.c	2007-08-24 19:03:44 UTC (rev 683)
+++ branches/guffert/driver/unicode.c	2007-08-24 19:45:26 UTC (rev 684)
@@ -366,6 +366,47 @@
 
 
 SQLRETURN SQL_API
+SQLColumnPrivilegesW(SQLHSTMT hstmt,
+                     SQLWCHAR *catalog, SQLSMALLINT catalog_len,
+                     SQLWCHAR *schema, SQLSMALLINT schema_len,
+                     SQLWCHAR *table, SQLSMALLINT table_len,
+                     SQLWCHAR *column, SQLSMALLINT column_len)
+{
+  SQLRETURN rc;
+  SQLCHAR *catalog8, *schema8, *table8, *column8;
+  DBC *dbc= ((STMT *)hstmt)->dbc;
+  SQLINTEGER len= SQL_NTS;;
+  uint errors= 0;
+
+  catalog8= sqlwchar_as_sqlchar(dbc->ansi_charset_info, catalog, &len,
&errors);
+  catalog_len= (SQLSMALLINT)len;
+  len= SQL_NTS;
+
+  schema8= sqlwchar_as_sqlchar(dbc->ansi_charset_info, schema, &len, &errors);
+  schema_len= (SQLSMALLINT)len;
+  len= SQL_NTS;
+
+  table8= sqlwchar_as_sqlchar(dbc->ansi_charset_info, table, &len, &errors);
+  table_len= (SQLSMALLINT)len;
+  len= SQL_NTS;
+
+  column8= sqlwchar_as_sqlchar(dbc->ansi_charset_info, column, &len, &errors);
+  column_len= (SQLSMALLINT)len;
+  len= SQL_NTS;
+
+  rc= MySQLColumnPrivileges(hstmt, catalog8, catalog_len, schema8, schema_len,
+                            table8, table_len, column8, column_len);
+
+  x_free(catalog8);
+  x_free(schema8);
+  x_free(table8);
+  x_free(column8);
+
+  return rc;
+}
+
+
+SQLRETURN SQL_API
 SQLConnectW(SQLHDBC hdbc, SQLWCHAR *dsn, SQLSMALLINT dsn_len_in,
             SQLWCHAR *user, SQLSMALLINT user_len_in,
             SQLWCHAR *auth, SQLSMALLINT auth_len_in)
@@ -949,36 +990,6 @@
 
 
 SQLRETURN SQL_API
-SQLColAttributeW(SQLHSTMT hstmt, SQLUSMALLINT column,
-                 SQLUSMALLINT field, SQLPOINTER char_attr,
-                 SQLSMALLINT char_attr_max, SQLSMALLINT *char_attr_len,
-                 SQLPOINTER num_attr) /* SHould be SQLLEN * */
-{
-  NOT_IMPLEMENTED;
-}
-
-
-SQLRETURN SQL_API
-SQLColAttributesW(SQLHSTMT hstmt, SQLUSMALLINT column, SQLUSMALLINT type,
-                  SQLPOINTER char_attr, SQLSMALLINT char_attr_max,
-                  SQLSMALLINT *char_attr_len, SQLLEN *num_attr)
-{
-  NOT_IMPLEMENTED;
-}
-
-
-SQLRETURN SQL_API
-SQLColumnPrivilegesW(SQLHSTMT hstmt,
-                     SQLWCHAR *catalog, SQLSMALLINT catalog_len,
-                     SQLWCHAR *schema, SQLSMALLINT schema_len,
-                     SQLWCHAR *table, SQLSMALLINT table_len,
-                     SQLWCHAR *column, SQLSMALLINT column_len)
-{
-  NOT_IMPLEMENTED;
-}
-
-
-SQLRETURN SQL_API
 SQLColumnsW(SQLHSTMT hstmt,
             SQLWCHAR *catalog, SQLSMALLINT catalog_len,
             SQLWCHAR *schema, SQLSMALLINT schema_len,

Modified: branches/guffert/test/my_catalog.c
===================================================================
--- branches/guffert/test/my_catalog.c	2007-08-24 19:03:44 UTC (rev 683)
+++ branches/guffert/test/my_catalog.c	2007-08-24 19:45:26 UTC (rev 684)
@@ -38,8 +38,7 @@
     rc = SQLFreeStmt(hstmt,SQL_CLOSE);
     mystmt(hstmt,rc);
 
-    rc =
SQLColumns(hstmt,NULL,SQL_NTS,NULL,SQL_NTS,"my_column_null",SQL_NTS,NULL,SQL_NTS);
-    mystmt(hstmt,rc);
+    ok_stmt(hstmt,
SQLColumns(hstmt,NULL,SQL_NTS,NULL,SQL_NTS,"my_column_null",SQL_NTS,NULL,SQL_NTS));
 
     myassert(2 == my_print_non_format_result(hstmt));
 
@@ -67,8 +66,7 @@
     rc = SQLFreeStmt(hstmt,SQL_CLOSE);
     mystmt(hstmt,rc);
 
-    rc = SQLColumns(hstmt,NULL,0,NULL,0,"my_drop_table",SQL_NTS,NULL,0);
-    mystmt(hstmt,rc);
+    ok_stmt(hstmt, SQLColumns(hstmt,NULL,0,NULL,0,"my_drop_table",SQL_NTS,NULL,0));
 
     myassert(1 == my_print_non_format_result(hstmt));
 
@@ -97,8 +95,7 @@
     SQLExecDirect(hstmt, "DROP DATABASE my_all_db_test3",   SQL_NTS);
     SQLExecDirect(hstmt, "DROP DATABASE my_all_db_test4",   SQL_NTS);
 
-    rc = SQLTables(hstmt,"%",1,NULL,0,NULL,0,NULL,0);
-    mystmt(hstmt,rc);
+    ok_stmt(hstmt, SQLTables(hstmt,"%",1,NULL,0,NULL,0,NULL,0));
 
     nrows = my_print_non_format_result(hstmt);
     rc = SQLFreeStmt(hstmt, SQL_CLOSE);
@@ -245,7 +242,7 @@
                                      NULL, SQL_NTS, NULL, SQL_NTS,
                                      "test_colprev1", SQL_NTS, NULL, SQL_NTS));
 
-  assert(4 == my_print_non_format_result(hstmt));
+  is(4 == my_print_non_format_result(hstmt));
 
   ok_stmt(hstmt, SQLFreeStmt(hstmt, SQL_CLOSE));
 
@@ -364,8 +361,7 @@
     rc = SQLExecDirect(hstmt,"create table t_catalog(a tinyint, b char(4))",SQL_NTS);
     mystmt(hstmt,rc);
 
-    rc = SQLColumns(hstmt,NULL,0,NULL,0,"t_catalog",9,NULL,0);
-    mystmt(hstmt,rc);
+    ok_stmt(hstmt, SQLColumns(hstmt,NULL,0,NULL,0,"t_catalog",9,NULL,0));
 
     rc = SQLNumResultCols(hstmt, &ncols);
     mystmt(hstmt,rc);
@@ -430,14 +426,9 @@
     rc = SQLFreeStmt(hstmt,SQL_CLOSE);
     mystmt(hstmt,rc);
 
-    rc = SQLSpecialColumns(hstmt,
-                          SQL_BEST_ROWID,
-                          NULL,0,
-                          NULL,0,
-                          "tmysql_specialcols",SQL_NTS,
-                          SQL_SCOPE_SESSION,
-                          SQL_NULLABLE);
-    mystmt(hstmt,rc);
+    ok_stmt(hstmt, SQLSpecialColumns(hstmt, SQL_BEST_ROWID, NULL,0, NULL,0,
+                                     "tmysql_specialcols",SQL_NTS,
+                                     SQL_SCOPE_SESSION, SQL_NULLABLE));
 
     myresult(hstmt);
 
@@ -588,8 +579,7 @@
 
    SQLFreeStmt(hstmt, SQL_CLOSE);
 
-   rc = SQLTables(hstmt,NULL,0,NULL,0,NULL,0,"'TABLE'",SQL_NTS);
-   mystmt(hstmt,rc);
+   ok_stmt(hstmt, SQLTables(hstmt,NULL,0,NULL,0,NULL,0,"'TABLE'",SQL_NTS));
 
    rc = SQLNumResultCols(hstmt,&ColumnCount);
    mystmt(hstmt,rc);
@@ -713,8 +703,7 @@
 {
     SQLRETURN r;
 
-    r  = SQLTables(hstmt,NULL,0,NULL,0,NULL,0,NULL,0);
-    mystmt(hstmt,r);
+    ok_stmt(hstmt, SQLTables(hstmt,NULL,0,NULL,0,NULL,0,NULL,0));
 
     myresult(hstmt);
 

Thread
Connector/ODBC 3.51 commit: r684 - in branches/guffert: driver testjwinstead24 Aug