|
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
|