List:Commits« Previous MessageNext Message »
From:pharvey Date:August 11 2006 10:47am
Subject:Connector/ODBC 5 commit: r487 - trunk/MYSQLPlus/MYSQLPlusLib
View as plain text  
Modified:
   trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp
   trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.h
Log:
- added support for SQLColumnPrivileges (needs post-build tests)

Modified: trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-08-11 10:37:16 UTC (rev 486)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.cpp	2006-08-11 10:46:58 UTC (rev 487)
@@ -1196,6 +1196,90 @@
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
+SQLRETURN MResultPlus::doColumnPrivileges( const QString &stringCatalog, const
QString &, const QString &stringTableFilter, const QString
&stringColumnFilter )
+{
+    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, "COLUMN_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, "
+                          "         COLUMN_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, COLUMN_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 ) )
+        {
+            doAppendColumnPrivileges( pRow[0],    // catalog - we put MySQL schema in
here
+                                      pRow[1],    // table name
+                                      pRow[2],    // column name
+                                      pRow[3],    // grantee
+                                      pRow[4],    // privilege 
+                                      pRow[5] );  // 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;
@@ -2873,3 +2957,27 @@
     MYODBCDbgReturn( SQL_SUCCESS );
 }
 
+SQLRETURN MResultPlus::doAppendColumnPrivileges( const QVariant &variantCatalog,
+                                                 const QVariant &variantTable,
+                                                 const QVariant &variantColumn,
+                                                 const QVariant &variantGrantee,
+                                                 const QVariant &variantPrivilege,
+                                                 const QVariant &variantIsGrantable )
+{
+    MYODBCDbgEnter();
+
+    doAppend();
+
+    setData( 1, variantCatalog );
+    setData( 2, "" );
+    setData( 3, variantTable );
+    setData( 4, variantColumn );
+    /*       5 = null */
+    setData( 6, variantGrantee );
+    setData( 7, variantPrivilege );
+    setData( 8, variantIsGrantable );
+
+    MYODBCDbgReturn( SQL_SUCCESS );
+}
+
+

Modified: trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.h
===================================================================
--- trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-08-11 10:37:16 UTC (rev 486)
+++ trunk/MYSQLPlus/MYSQLPlusLib/MResultPlus.h	2006-08-11 10:46:58 UTC (rev 487)
@@ -78,6 +78,7 @@
     SQLRETURN doTables( const QString &stringCatalogFilter, const QString
&stringSchemaFilter, const QString &stringTableFilter, const QString
&stringTableTypeFilter );
     SQLRETURN doProcedures( const QString &stringCatalog, const QString
&stringSchemaFilter, const QString &stringProcedureFilter );
     SQLRETURN doTablePrivileges( const QString &stringCatalog, const QString
&stringSchemaFilter, const QString &stringTableFilter );
+    SQLRETURN doColumnPrivileges( const QString &stringCatalog, const QString
&stringSchemaFilter, const QString &stringTableFilter, const QString
&stringColumnFilter );
 
     /* isers */
     BOOLEAN isValidRow();
@@ -237,6 +238,12 @@
                                        const QVariant &variantGrantee,
                                        const QVariant &variantPrivilege,
                                        const QVariant &variantIsGrantable );
+    SQLRETURN doAppendColumnPrivileges( const QVariant &variantCatalog,
+                                        const QVariant &variantTable,
+                                        const QVariant &variantColumn,
+                                        const QVariant &variantGrantee,
+                                        const QVariant &variantPrivilege,
+                                        const QVariant &variantIsGrantable );
 };
 
 #endif

Thread
Connector/ODBC 5 commit: r487 - trunk/MYSQLPlus/MYSQLPlusLibpharvey11 Aug