-
-/********** wxDB::TablePrivileges() **********/
-bool wxDB::TablePrivileges(const char* privilege, const char *tableName,
- const char *userID, const char *tablePath)
-{
- SqlPrivilegesInfo result;
- SDWORD cbRetVal;
- RETCODE retcode;
-
- //We probably need to be able to dynamically set this based on
- //the driver type, and state. - roger gammans
- char curRole[]="public";
-
- wxString UserID;
- wxString TableName;
-
- assert(tableName && wxStrlen(tableName));
-
- if (userID)
- {
- if (!wxStrlen(userID))
- UserID = uid;
- else
- UserID = userID;
- }
- else
- UserID = "";
-
- // Oracle user names may only be in uppercase, so force
- // the name to uppercase
- // if (Dbms() == dbmsORACLE)
- // UserID = UserID.Upper();
- //
- // However we fors case-insentive compare so it shouldn't matter.
-
-
- TableName = tableName;
- // Oracle table names are uppercase only, so force
- // the name to uppercase just in case programmer forgot to do this
- if (Dbms() == dbmsORACLE)
- TableName = TableName.Upper();
-
- SQLFreeStmt(hstmt, SQL_CLOSE);
-
- retcode = SQLTablePrivileges(hstmt,
- NULL, 0, // All qualifiers
- NULL, 0, // All owners
- (UCHAR FAR *)TableName.GetData(), SQL_NTS);
-
-#ifdef DBDEBUG_CONSOLE
- fprintf(stderr ,"SQLTablePrivileges() returned %i \n",retcode);
-#endif
-/*
- retcode = SQLBindCol (hstmt, 1, SQL_C_CHAR, &result.TableQualifier, 128, &cbRetVal);
- retcode = SQLBindCol (hstmt, 2, SQL_C_CHAR, &result.TableOwner, 128, &cbRetVal);
- retcode = SQLBindCol (hstmt, 3, SQL_C_CHAR, &result.TableName, 128, &cbRetVal);
- retcode = SQLBindCol (hstmt, 4, SQL_C_CHAR, &result.Grantor, 128, &cbRetVal);
- retcode = SQLBindCol (hstmt, 5, SQL_C_CHAR, &result.Grantee, 128, &cbRetVal);
- retcode = SQLBindCol (hstmt, 6, SQL_C_CHAR, &result.Privilege, 128, &cbRetVal);
- retcode = SQLBindCol (hstmt, 7, SQL_C_CHAR, &result.Grantable, 3, &cbRetVal);
-*/
- retcode = SQLFetch(hstmt);
- while (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
- {
- GetData(1, SQL_C_CHAR, &result.TableQualifier, 128, &cbRetVal);
- GetData(2, SQL_C_CHAR, &result.TableOwner, 128, &cbRetVal);
- GetData(3, SQL_C_CHAR, &result.TableName, 128, &cbRetVal);
- GetData(4, SQL_C_CHAR, &result.Grantor, 128, &cbRetVal);
- GetData(5, SQL_C_CHAR, &result.Grantee, 128, &cbRetVal);
- GetData(6, SQL_C_CHAR, &result.Privilege, 128, &cbRetVal);
- GetData(7, SQL_C_CHAR, &result.Grantable, 3, &cbRetVal);
-
-#ifdef DBDEBUG_CONSOLE
- fprintf(stderr,"Scanning %s privilege on table %s.%s granted by %s to %s\n",
- result.Privilege,result.TableOwner,result.TableName,
- result.Grantor, result.Grantee);
-#endif
- if (UserID.IsSameAs(result.TableOwner,false))
- {
- SQLFreeStmt(hstmt, SQL_CLOSE);
- return true;
- }
- if (UserID.IsSameAs(result.Grantee,false) &&
- !strcmp(result.Privilege, privilege))
- {
- SQLFreeStmt(hstmt, SQL_CLOSE);
- return true;
- }
- if (!strcmp(result.Grantee,curRole) &&
- !strcmp(result.Privilege, privilege))
- {
- SQLFreeStmt(hstmt, SQL_CLOSE);
- return true;
- }
- retcode = SQLFetch(hstmt);
- }
-
- SQLFreeStmt(hstmt, SQL_CLOSE);
- return false;
-} // wxDB::TablePrivileges()
-
-