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 test | jwinstead | 24 Aug |