List:Commits« Previous MessageNext Message »
From:pharvey Date:August 10 2006 4:38pm
Subject:Connector/ODBC 5 commit: r482 - trunk/MYSQLPlus/MYSQLPlusLib
View as plain text  
Modified:
   trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp
   trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.h
   trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp
Log:
- implemented SQLTablePrivileges feature (needs post-build tests)

Modified: trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-08-10 14:15:52 UTC (rev 481)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-08-10 16:38:25 UTC (rev 482)
@@ -1115,6 +1115,87 @@
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
+SQLRETURN MResultPlus::doTablePrivileges( const QString &stringCatalog, const QString
&, const QString &stringTableFilter )
+{
+    MYODBCDbgEnter();
+
+    /* create empty resultset */
+    MDescriptor *pDescriptor;
+
+    doClear();
+    getDiagnostic()->setRowCount( 0 );
+
+    pDescriptor = getImpRowDesc();
+    pDescriptor->doAppend( SQL_VARCHAR, "TABLE_CAT", SQL_NULLABLE );
+    pDescriptor->doAppend( SQL_VARCHAR, "TABLE_SCHEM", SQL_NULLABLE );
+    pDescriptor->doAppend( SQL_VARCHAR, "TABLE_NAME", SQL_NO_NULLS );
+    pDescriptor->doAppend( SQL_VARCHAR, "GRANTOR", SQL_NULLABLE );
+    pDescriptor->doAppend( SQL_VARCHAR, "GRANTEE", SQL_NO_NULLS );
+    pDescriptor->doAppend( SQL_VARCHAR, "PRIVILEGE", SQL_NO_NULLS );
+    pDescriptor->doAppend( SQL_VARCHAR, "IS_GRANTABLE", SQL_NULLABLE );
+
+    {
+        QString     stringStatement;
+        MYSQL_RES * pResult = NULL;
+        MYSQL_ROW   pRow;
+
+        stringStatement = "SELECT   TABLE_SCHEMA AS TABLE_CAT, "
+                          "         TABLE_NAME, "
+                          "         GRANTEE, "
+                          "         PRIVILEGE_TYPE AS PRIVILEGE, "
+                          "         IS_GRANTABLE "
+                          "FROM     INFORMATION_SCHEMA.TABLE_PRIVILEGES "
+                          "WHERE    TABLE_SCHEMA =    '" + stringCatalog + "' AND "
+                          "         TABLE_NAME   LIKE '" + stringTableFilter + "' "
+                          "ORDER BY TABLE_CAT, TABLE_NAME, PRIVILEGE, GRANTEE";
+
+        if ( mysql_query( getMySQL(), stringStatement.toUtf8().data() ) )
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_errno( getMySQL() ), mysql_error( getMySQL() ) ) );
+
+        pResult = mysql_use_result( getMySQL() );
+        if ( !pResult )
+            MYODBCDbgReturn( getDiagnostic()->doAppend( MDiagnostic::DIA_HY000,
mysql_errno( getMySQL() ), mysql_error( getMySQL() ) ) );
+
+        while ( pRow = mysql_fetch_row( pResult ) )
+        {
+            doAppendTablePrivileges( pRow[0],    // catalog - we put MySQL schema in here
+                                     pRow[1],    // table name
+                                     pRow[2],    // grantee
+                                     pRow[3],    // privilege 
+                                     pRow[4] );  // is grantable 
+        }
+
+        mysql_free_result( pResult ); 
+    }
+
+    /*!
+        \internal ODBC RULE
+
+        When SQLExecute, SQLExecDirect, SQLBulkOperations, SQLSetPos, or SQLMoreResults
is called, the SQL_DIAG_ROW_COUNT 
+        field of the diagnostic data structure is set to the row count, and the row count
is cached in an implementation-dependent 
+        way. SQLRowCount returns the cached row count value. The cached row count value
is valid until the statement handle is set 
+        back to the prepared or allocated state, the statement is reexecuted, or
SQLCloseCursor is called. Note that if a function 
+        has been called since the SQL_DIAG_ROW_COUNT field was set, the value returned by
SQLRowCount might be different from the 
+        value in the SQL_DIAG_ROW_COUNT field because the SQL_DIAG_ROW_COUNT field is
reset to 0 by any function call.                
+
+        \internal MYODBC RULE
+
+        Wet set SQL_DIAG_ROW_COUNT when any result set is requested - for example we also
set SQL_DIAG_ROW_COUNT for catalog
+        functions.
+    */
+    qulonglong nRows = -1;
+    if ( !SQL_SUCCEEDED( getRows( &nRows ) ) )
+        getDiagnostic()->setRowCount( -1 );
+    else
+        getDiagnostic()->setRowCount( nRows );
+
+    /* we should be at last record so next will make us eof and a subsequent next will be
first record */
+    setState( STATE_EXECUTED );
+    doNext();
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+
 BOOLEAN MResultPlus::isValidRow()
 {
     BOOLEAN b;
@@ -2771,4 +2852,24 @@
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
+SQLRETURN MResultPlus::doAppendTablePrivileges( const QVariant &variantCatalog,
+                                                const QVariant &variantTable,
+                                                const QVariant &variantGrantee,
+                                                const QVariant &variantPrivilege,
+                                                const QVariant &variantIsGrantable )
+{
+    MYODBCDbgEnter();
 
+    doAppend();
+
+    setData( 1, variantCatalog );
+    setData( 2, "" );
+    setData( 3, variantTable );
+    /*       4 = null */
+    setData( 5, variantGrantee );
+    setData( 6, variantPrivilege );
+    setData( 7, variantIsGrantable );
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+

Modified: trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.h
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-08-10 14:15:52 UTC (rev 481)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-08-10 16:38:25 UTC (rev 482)
@@ -76,7 +76,8 @@
     SQLRETURN doSpecialColumns( SQLSMALLINT nIdentifierType, const QString
&stringCatalog, const QString &stringSchema, const QString &stringTable,
SQLSMALLINT nScope, SQLSMALLINT nNullable );
     SQLRETURN doStatistics( const QString &stringCatalog, const QString
&stringSchema, const QString &stringTable, SQLUSMALLINT nUnique, SQLUSMALLINT
nReserved );
     SQLRETURN doTables( const QString &stringCatalogFilter, const QString
&stringSchemaFilter, const QString &stringTableFilter, const QString
&stringTableTypeFilter );
-    SQLRETURN doProcedures( const QString &stringCatalogFilter, const QString
&stringSchemaFilter, const QString &stringProcedureFilter );
+    SQLRETURN doProcedures( const QString &stringCatalog, const QString
&stringSchemaFilter, const QString &stringProcedureFilter );
+    SQLRETURN doTablePrivileges( const QString &stringCatalog, const QString
&stringSchemaFilter, const QString &stringTableFilter );
 
     /* isers */
     BOOLEAN isValidRow();
@@ -231,6 +232,11 @@
                                   const QVariant &variantProcedure,
                                   const QVariant &variantRemarks,
                                   const QVariant &variantType );
+    SQLRETURN doAppendTablePrivileges( const QVariant &variantCatalog,
+                                       const QVariant &variantTable,
+                                       const QVariant &variantGrantee,
+                                       const QVariant &variantPrivilege,
+                                       const QVariant &variantIsGrantable );
 };
 
 #endif

Modified: trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp	2006-08-10 14:15:52 UTC (rev 481)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MStatement.cpp	2006-08-10 16:38:25 UTC (rev 482)
@@ -4493,7 +4493,7 @@
     /* generate result */
     MResultPlus *pResult = new MResultPlus( this );
 
-    nReturn = pResult->doTablePrivileges( stringCatalog, stringSchema, stringProcedure
);
+    nReturn = pResult->doTablePrivileges( stringCatalog, stringSchema, stringTable );
     if ( !SQL_SUCCEEDED( nReturn ) )
     {
         delete pResult;

Thread
Connector/ODBC 5 commit: r482 - trunk/MYSQLPlus/MYSQLPlusLibpharvey10 Aug