From: Carlos G.A. <car...@ho...> - 2002-08-09 08:41:46
|
Hello: I made the implementation for SQLTablePrivileges, here is the code ( I will made the implementation for SQLColumnPrivileges as soon as possible .. :)) ): Main.cpp ///// SQLTablePrivileges ///// RETCODE SQL_API SQLTablePrivileges ( HSTMT arg0, UCHAR * arg1, SWORD arg2, UCHAR * arg3, SWORD arg4, UCHAR * arg5, SWORD arg6) { /* notYetImplemented("SQLTablePrivileges called\n"); return(SQL_SUCCESS); */ TRACE ("SQLTablePrivileges"); return ((OdbcStatement*) arg0)->sqlTablePrivileges (arg1,arg2,arg3,arg4,arg5,arg6); } OdbcStatement.h New declaration: RETCODE sqlTablePrivileges (SQLCHAR* catalog, int catLength, SQLCHAR* schema, int schemaLength, SQLCHAR*table, int tableLength); OdbcStatement.cpp New implementation: RETCODE OdbcStatement::sqlTablePrivileges(SQLCHAR * catalog, int catLength, SQLCHAR * schema, int schemaLength, SQLCHAR * table, int tableLength) { clearErrors(); releaseStatement(); char temp [1024], *p = temp; const char *cat = getString (&p, catalog, catLength, NULL); const char *scheme = getString (&p, schema, schemaLength, NULL); const char *tbl = getString (&p, table, tableLength, NULL); try { DatabaseMetaData *metaData = connection->getMetaData(); setResultSet (metaData->getTablePrivileges (cat, scheme, tbl)); } catch (SQLException &exception) { postError ("HY000", exception); return SQL_ERROR; } return sqlSuccess(); } IscDbc project: IscDatabaseMetadata.cpp Nw include: #include "IscTablePrivilegesResultSet.h" Modified the definition of IscDatabaseMetaData::getTablePrivileges ResultSet* IscDatabaseMetaData::getTablePrivileges(const char* catalog, const char* schemaPattern, const char* tableNamePattern) { IscTablePrivilegesResultSet *resultSet = new IscTablePrivilegesResultSet (this); try { resultSet->getTablePrivileges (catalog, schemaPattern, tableNamePattern); } catch (...) { delete resultSet; throw; } return resultSet; } Two new files : IscTablePrivilegesResultSet.h /* * * The contents of this file are subject to the Initial * Developer's Public License Version 1.0 (the "License"); * you may not use this file except in compliance with the * License. You may obtain a copy of the License at * http://www.ibphoenix.com/idpl.html. * * Software distributed under the License is distributed on * an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either * express or implied. See the License for the specific * language governing rights and limitations under the License. * * * The Original Code was created by James A. Starkey for IBPhoenix. * * Copyright (c) 1999, 2000, 2001 James A. Starkey * All Rights Reserved. */ // IscTablePrivilegesResultSet.h: interface for the IscTablePrivilegesResultSet class. // ///////////////////////////////////////////////////////////////////////////////////////// #if !defined(AFX_ISCTABLEPRIVILEGESRESULTSET_H__6C3E2AB7_229F_11D4_98DF_0000C01D2301__INCLUDED_) #define AFX_ISCTABLEPRIVILEGESRESULTSET_H__6C3E2AB7_229F_11D4_98DF_0000C01D2301__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include "IscMetaDataResultSet.h" class IscTablePrivilegesResultSet : public IscMetaDataResultSet { public: virtual bool next(); void getTablePrivileges(const char * catalog, const char * schemaPattern, const char * tableNamePattern); IscTablePrivilegesResultSet(IscDatabaseMetaData *metaData); virtual ~IscTablePrivilegesResultSet(); typedef IscMetaDataResultSet Parent; virtual int getColumnDisplaySize(int index); virtual int getColumnType(int index); virtual int getColumnPrecision(int index); }; #endif // !defined(AFX_ISCTABLESRESULTSET_H__6C3E2AB7_229F_11D4_98DF_0000C01D2301__INCLUDED_) IscTablePrivilegesResultSet.cpp /* * * The contents of this file are subject to the Initial * Developer's Public License Version 1.0 (the "License"); * you may not use this file except in compliance with the * License. You may obtain a copy of the License at * http://www.ibphoenix.com/idpl.html. * * Software distributed under the License is distributed on * an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either * express or implied. See the License for the specific * language governing rights and limitations under the License. * * * The Original Code was created by James A. Starkey for IBPhoenix. * * Copyright (c) 1999, 2000, 2001 James A. Starkey * All Rights Reserved. */ // IscTablePrivilegesResultSet.cpp: implementation of the IscTablePrivilegesResultSet class. // ///////////////////////////////////////////////////////////////////////////////////////////////// #include <stdio.h> #include <string.h> #include "IscDbc.h" #include "IscTablePrivilegesResultSet.h" #include "IscConnection.h" #include "IscDatabaseMetaData.h" #include "IscResultSet.h" #include "IscPreparedStatement.h" #include "IscBlob.h" #define TABLE_TYPE 4 ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// IscTablePrivilegesResultSet::IscTablePrivilegesResultSet(IscDatabaseMetaData *metaData) : IscMetaDataResultSet(metaData) { resultSet = NULL; } IscTablePrivilegesResultSet::~IscTablePrivilegesResultSet() { if (resultSet) resultSet->release(); } void IscTablePrivilegesResultSet::getTablePrivileges(const char * catalog, const char * schemaPattern, const char * tableNamePattern) { JString sql = "select NULL as table_cat," "NULL as table_schem," "tbl.rdb$relation_name as table_name," "usp.rdb$grantor as grantor," "usp.rdb$user as grantee," "usp.rdb$privilege as privilege," "usp.rdb$grant_option as isgrantable " "from rdb$relations tbl, rdb$user_privileges usp\n" " where tbl.rdb$relation_name = usp.rdb$relation_name\n"; if (tableNamePattern) sql += expandPattern (" and tbl.rdb$relation_name %s '%s'", tableNamePattern); sql += " order by tbl.rdb$relation_name, usp.rdb$privilege, usp.rdb$user"; prepareStatement (sql); numberColumns = 7; } bool IscTablePrivilegesResultSet::next() { if (!resultSet->next()) return false; const char *privilege = resultSet->getString(6); switch ( *privilege ) { case 'S': resultSet->setValue( 6, "SELECT" ); break; case 'I': resultSet->setValue( 6, "INSERT" ); break; case 'U': resultSet->setValue( 6, "UPDATE" ); break; case 'D': resultSet->setValue( 6, "DELETE" ); break; case 'R': resultSet->setValue( 6, "REFERENCES" ); break; } return true; } int IscTablePrivilegesResultSet::getColumnDisplaySize(int index) { switch (index) { case TABLE_TYPE: // change from blob to text return 128; } return Parent::getColumnDisplaySize (index); } int IscTablePrivilegesResultSet::getColumnType(int index) { switch (index) { case TABLE_TYPE: // change from blob to text return JDBC_VARCHAR; } return Parent::getColumnType (index); } int IscTablePrivilegesResultSet::getColumnPrecision(int index) { switch (index) { case TABLE_TYPE: // change from blob to text return 128; } return Parent::getPrecision (index); } Best Regards Carlos Guzmán Álvarez Vigo-España _________________________________________________________________ MSN Fotos: la forma más fácil de compartir e imprimir fotos. http://photos.msn.es/support/worldwide.aspx |