2005/5/9

     
 

ODBCDatabaseMetaData.h

artefaktur
// -*- mode:C++; tab-width:2; c-basic-offset:2; indent-tabs-mode:nil -*- 
//
// Copyright (C) 2000-2005 by Roger Rene Kommer / artefaktur, Kassel, Germany.
// 
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public License (LGPL).
// 
// 
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the 
// License ACDK-FreeLicense document enclosed in the distribution
// for more for more details.
// This file is part of the Artefaktur Component Development Kit:
//                         ACDK
// 
// Please refer to
// - http://www.acdk.de
// - http://www.artefaktur.com
// - http://acdk.sourceforge.net
// for more information.
// 
// $Header: /cvsroot/acdk/acdk/acdk_sql_odbc/src/acdk/sql/odbc/ODBCDatabaseMetaData.h,v 1.7 2005/02/05 10:45:31 kommer Exp $
#ifndef acdk_sqlodbc_DatabaseMetaData_h
#define acdk_sqlodbc_DatabaseMetaData_h

#include "odbc.h"
#include "ODBCResultSet.h"

#include <acdk/sql/DatabaseMetaData.h>
#include <acdk/lang/UnsupportedOperationException.h>

namespace acdk {
namespace sql {
namespace odbc {

using namespace acdk::lang;

ACDK_DECL_CLASS(ODBCDatabaseMetaData);

class ACDK_SQL_ODBC_PUBLIC ODBCDatabaseMetaData
: extends ::acdk::lang::Object, implements ::acdk::sql::DatabaseMetaData
{
  ACDK_WITH_METAINFO(ODBCDatabaseMetaData)
public:
  virtual bool allProceduresAreCallable() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_ACCESSIBLE_PROCEDURES)->equals("Y") == true; }
  virtual bool allTablesAreSelectable() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_ACCESSIBLE_TABLES)->equals("Y") == true; }
  virtual RString getURL() THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual RString getUserName() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_USER_NAME); }
  virtual bool isReadOnly() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_DATA_SOURCE_READ_ONLY)->equals("Y"); }
  virtual bool nullsAreSortedHigh() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_NULL_COLLATION) == SQL_NC_HIGH; }
  virtual bool nullsAreSortedLow() THROWS1(::acdk::sql::RSQLException) {  return getShortInfo(SQL_NULL_COLLATION) == SQL_NC_LOW; }
  virtual bool nullsAreSortedAtStart() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_NULL_COLLATION) == SQL_NC_START;  }
  virtual bool nullsAreSortedAtEnd() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_NULL_COLLATION) == SQL_NC_END; }
  virtual RString getDatabaseProductName() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_DBMS_NAME); }
  virtual RString getDatabaseProductVersion() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_DBMS_VER);  }
  virtual RString getDriverName() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_DRIVER_NAME); }
  virtual RString getDriverVersion() THROWS1(::acdk::sql::RSQLException) {  return getStringInfo(SQL_DRIVER_VER);  }
  virtual int getDriverMajorVersion() { THROW0(UnsupportedOperationException); return Nil; }
  virtual int getDriverMinorVersion() { THROW0(UnsupportedOperationException); return Nil; }

  virtual bool usesLocalFiles() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_FILE_USAGE) != SQL_FILE_NOT_SUPPORTED; }
  virtual bool usesLocalFilePerTable() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_FILE_USAGE) == SQL_FILE_TABLE;  }

  virtual bool supportsMixedCaseIdentifiers() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_IDENTIFIER_CASE) == SQL_IC_SENSITIVE;   }
  virtual bool storesUpperCaseIdentifiers() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_IDENTIFIER_CASE) == SQL_IC_UPPER; }
  virtual bool storesLowerCaseIdentifiers() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_IDENTIFIER_CASE) == SQL_IC_LOWER; }
  virtual bool storesMixedCaseIdentifiers() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_IDENTIFIER_CASE) == SQL_IC_LOWER; }

  virtual bool supportsMixedCaseQuotedIdentifiers() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_QUOTED_IDENTIFIER_CASE) == SQL_IC_SENSITIVE; }
  virtual bool storesUpperCaseQuotedIdentifiers() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_QUOTED_IDENTIFIER_CASE) == SQL_IC_UPPER; }
  virtual bool storesLowerCaseQuotedIdentifiers() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_QUOTED_IDENTIFIER_CASE) == SQL_IC_LOWER; }
  virtual bool storesMixedCaseQuotedIdentifiers() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_QUOTED_IDENTIFIER_CASE) == SQL_IC_SENSITIVE;  }
  virtual RString getIdentiferQuoteString() THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual RString getSQLKeywords() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_KEYWORDS); }
  virtual RString getNumericFunctions() THROWS1(::acdk::sql::RSQLException);
  virtual RString getStringFunctions() THROWS1(::acdk::sql::RSQLException);
  virtual RString getSystemFunctions() THROWS1(::acdk::sql::RSQLException);
  virtual RString getDateTimeFunctions() THROWS1(::acdk::sql::RSQLException);
  virtual RString getSearchStringEscape() THROWS1(::acdk::sql::RSQLException) {  return getStringInfo(SQL_SEARCH_PATTERN_ESCAPE);  }
  virtual RString getExtraNameCharacters() THROWS1(::acdk::sql::RSQLException) {  return getStringInfo(SQL_SPECIAL_CHARACTERS);  }

  virtual bool supportsAlterTableWithAddColumn() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_ALTER_TABLE) & SQL_AT_ADD_COLUMN; }
  virtual bool supportsAlterTableWithDropColumn() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_ALTER_TABLE) & SQL_AT_DROP_COLUMN; }
  virtual bool supportsColumnAliasing() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_COLUMN_ALIAS)->equals("Y"); }
  virtual bool nullPlusNonNullIsNull() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_CONCAT_NULL_BEHAVIOR) == SQL_CB_NULL; }
  
  virtual bool supportsConvert() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_CONVERT_FUNCTIONS) & SQL_FN_CVT_CONVERT; }
  /**
    @param fromType is SQLType
    @param toType is SQLType
  */
  virtual bool supportsConvert(int fromType, int toType) THROWS1(::acdk::sql::RSQLException);
  virtual bool supportsTableCorrelationNames() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_CORRELATION_NAME) != SQL_CN_NONE; }
  virtual bool supportsDifferentTableCorrelationNames() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_CORRELATION_NAME) != SQL_CN_DIFFERENT; }
  virtual bool supportsExpressionsInOrderBy() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_EXPRESSIONS_IN_ORDERBY)->equals("Y") == true; }
  virtual bool supportsOrderByUnrelated() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_ORDER_BY_COLUMNS_IN_SELECT)->equals("Y") == true; }
  virtual bool supportsGroupBy() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_GROUP_BY) != SQL_GB_NOT_SUPPORTED; }
  virtual bool supportsGroupByUnrelated() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_GROUP_BY) == SQL_GB_NO_RELATION; }
  virtual bool supportsGroupByBeyondSelect() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_GROUP_BY) == SQL_GB_GROUP_BY_CONTAINS_SELECT; }
  
  virtual bool supportsLikeEscapeClause() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_LIKE_ESCAPE_CLAUSE)->equals("Y") == true; }
  virtual bool supportsMultipleResultSets() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_MULT_RESULT_SETS)->equals("Y") == true; }
  virtual bool supportsMultipleTransactions() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_MULTIPLE_ACTIVE_TXN)->equals("Y") == true; }
  virtual bool supportsNonNullableColumns() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_NON_NULLABLE_COLUMNS) == SQL_NNC_NON_NULL; }
  virtual bool supportsMinimumSQLGrammar() THROWS1(::acdk::sql::RSQLException) { return true; }
  virtual bool supportsCoreSQLGrammar() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_ODBC_SQL_CONFORMANCE) != SQL_OSC_MINIMUM; }
  virtual bool supportsExtendedSQLGrammar() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_ODBC_SQL_CONFORMANCE) == SQL_OSC_EXTENDED; }
  virtual bool supportsANSI92EntryLevelSQL() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SQL_CONFORMANCE) & SQL_SC_SQL92_ENTRY; }
  virtual bool supportsANSI92IntermediateSQL() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SQL_CONFORMANCE) & SQL_SC_SQL92_INTERMEDIATE; }
  virtual bool supportsANSI92FullSQL() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SQL_CONFORMANCE) & SQL_SC_SQL92_FULL; }
  virtual bool supportsIntegrityEnhancementFacility() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_ODBC_SQL_OPT_IEF)->equals("Y") == true; ; }
  virtual bool supportsOuterJoins() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_OJ_CAPABILITIES) & (SQL_OJ_LEFT | SQL_OJ_RIGHT | SQL_OJ_FULL | SQL_OJ_NESTED); }
  virtual bool supportsFullOuterJoins() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_OJ_CAPABILITIES) & (SQL_OJ_FULL | SQL_OJ_NESTED); }
  virtual bool supportsLimitedOuterJoins() THROWS1(::acdk::sql::RSQLException) { return supportsFullOuterJoins() == false &&  supportsFullOuterJoins(); }
  virtual RString getSchemaTerm() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_SCHEMA_TERM); }
  virtual RString getProcedureTerm() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_PROCEDURE_TERM); }
  virtual RString getCatalogTerm() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_CATALOG_TERM); }
  virtual bool isCatalogAtStart() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_CATALOG_LOCATION) == SQL_QL_START; }
  virtual RString getCatalogSeparator() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_CATALOG_NAME_SEPARATOR); }
  virtual bool supportsSchemasInDataManipulation() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SCHEMA_USAGE) & SQL_SU_DML_STATEMENTS; }
  virtual bool supportsSchemasInProcedureCalls() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SCHEMA_USAGE) & SQL_SU_PROCEDURE_INVOCATION;  }
  virtual bool supportsSchemasInTableDefinitions() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SCHEMA_USAGE) & SQL_SU_TABLE_DEFINITION;  }
  virtual bool supportsSchemasInIndexDefinitions() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SCHEMA_USAGE) & SQL_SU_INDEX_DEFINITION; }
  virtual bool supportsSchemasInPrivilegeDefinitions() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SCHEMA_USAGE) & SQL_SU_PRIVILEGE_DEFINITION;  }
  virtual bool supportsCatalogsInDataManipulation() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_CATALOG_USAGE) & SQL_CU_DML_STATEMENTS;  }
  virtual bool supportsCatalogsInProcedureCalls() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_CATALOG_USAGE) & SQL_CU_PROCEDURE_INVOCATION; }
  virtual bool supportsCatalogsInTableDefinitions() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_CATALOG_USAGE) & SQL_CU_TABLE_DEFINITION; }
  virtual bool supportsCatalogsInIndexDefinitions() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_CATALOG_USAGE) & SQL_CU_INDEX_DEFINITION; }
  virtual bool supportsCatalogInPrivilegeDefinitions() THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool supportsPositionedDelete() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_POSITIONED_STATEMENTS) & SQL_PS_POSITIONED_DELETE; }
  virtual bool supportsPositionedUpdate() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_POSITIONED_STATEMENTS) & SQL_PS_POSITIONED_UPDATE; }
  virtual bool supportsSelectForUpdate() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_POSITIONED_STATEMENTS) & SQL_PS_SELECT_FOR_UPDATE; }
  
  virtual bool supportsStoredProcedures() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_PROCEDURES)->equals("Y") == true; }
  virtual bool supportsSubqueriesInComparisons() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SUBQUERIES) & SQL_SQ_COMPARISON; }
  virtual bool supportsSubqueriesInExists() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SUBQUERIES) & SQL_SQ_EXISTS; }
  virtual bool supportsSubqueriesInIns() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SUBQUERIES) & SQL_SQ_IN; }
  virtual bool supportsSubqueriesInQuantifieds() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SUBQUERIES) & SQL_SQ_QUANTIFIED; }
  virtual bool supportsCorrelatedSubqueries() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_SUBQUERIES) & SQL_SQ_CORRELATED_SUBQUERIES;  }

  virtual bool supportsUnion() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_UNION) & SQL_U_UNION;  }
  virtual bool supportsUnionAll() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_UNION) & (SQL_U_UNION | SQL_U_UNION_ALL); }
  virtual bool supportsOpenCursorsAcrossCommit() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_CURSOR_COMMIT_BEHAVIOR) == SQL_CB_PRESERVE; }
  virtual bool supportsOpenCursorsAcrossRollback() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_CURSOR_ROLLBACK_BEHAVIOR) == SQL_CB_PRESERVE; }
  virtual bool supportsOpenStatementsAcrossCommit() THROWS1(::acdk::sql::RSQLException) { return supportsOpenCursorsAcrossCommit(); }
  virtual bool supportsOpenStatementsAcrossRollback() THROWS1(::acdk::sql::RSQLException) { return supportsOpenCursorsAcrossRollback(); }
  
  virtual int getMaxBinaryLiteralLength() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_BINARY_LITERAL_LEN); }
  virtual int getMaxCharLiteralLength() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_CHAR_LITERAL_LEN); }
  virtual int getMaxColumnNameLength() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_COLUMN_NAME_LEN);  }
  virtual int getMaxColumnsInGroupBy() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_COLUMNS_IN_GROUP_BY);  }
  virtual int getMaxColumnsInIndex() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_COLUMNS_IN_INDEX);  }
  virtual int getMaxColumnsInOrderBy() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_COLUMNS_IN_ORDER_BY);  }
  virtual int getMaxColumnsInSelect() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_COLUMNS_IN_SELECT);  }
  virtual int getMaxColumnsInTable() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_COLUMNS_IN_TABLE);  }
  virtual int getMaxConnections() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_MAX_DRIVER_CONNECTIONS);  }
  virtual int getMaxCursorNameLength() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_MAX_CURSOR_NAME_LEN);  }
  virtual int getMaxIndexLength() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_INDEX_SIZE);  }
  
  virtual int getMaxSchemaNameLength() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_SCHEMA_NAME_LEN); }
  virtual int getMaxProcedureNameLength() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_MAX_PROCEDURE_NAME_LEN); }
  virtual int getMaxCatalogNameLength() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_MAX_CATALOG_NAME_LEN); }
  virtual int getMaxRowSize() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_ROW_SIZE); }
  virtual bool doesMaxRowSizeIncludeBlobs() THROWS1(::acdk::sql::RSQLException) { return getStringInfo(SQL_MAX_ROW_SIZE_INCLUDES_LONG)->equals("Y") == true; }
  
  virtual int getMaxStatementLength() THROWS1(::acdk::sql::RSQLException) { return getIntInfo(SQL_MAX_STATEMENT_LEN);  }
  virtual int getMaxStatements() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_MAX_CONCURRENT_ACTIVITIES); }
  virtual int getMaxTableNameLength() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_MAX_TABLE_NAME_LEN); }

  virtual int getMaxTablesInSelect() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_MAX_TABLES_IN_SELECT); }
  virtual int getMaxTableUserLength() THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException);  return Nil; }

  virtual int getDefaultTransactionIsolation() THROWS1(::acdk::sql::RSQLException);
  virtual bool supportsTransactions() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_TXN_CAPABLE) != SQL_TC_NONE; }
  virtual bool supportsTransactionIsolationLevel(int level) THROWS1(::acdk::sql::RSQLException);

  virtual bool supportsDataDefinitionAndDataManipulationTransactions() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_TXN_CAPABLE) == SQL_TC_ALL; }
  virtual bool supportsDataManipulationTransactionsOnly() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_TXN_CAPABLE) == SQL_TC_DML;  }
  virtual bool dataDefinitionCausesTransactionCommit() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_TXN_CAPABLE) == SQL_TC_DDL_COMMIT; }
  virtual bool dataDefinitionIgnoredInTransactions() THROWS1(::acdk::sql::RSQLException) { return getShortInfo(SQL_TXN_CAPABLE) == SQL_TC_DDL_IGNORE; }
  
  virtual ::acdk::sql::RResultSet getProcedures(INP(RString) catalog, INP(RString) schemaPattern, INP(RString) namePattern) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getProcedureColumns(INP(RString) catalog, INP(RString) schemaPattern, INP(RString) namePattern, INP(RString) columnPattern) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getTables(INP(RString) catalog, INP(RString) schemaPattern, INP(RString) namePattern) THROWS1(::acdk::sql::RSQLException);
  virtual ::acdk::sql::RResultSet getSchemas() THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getCatalogs() THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getTableTypes() THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getColumns(INP(RString) catalog, INP(RString) schemaPattern, INP(RString) namePattern,  INP(RString) columnPattern) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getColumnPrivileges(INP(RString) catalog, INP(RString) schema, INP(RString) table,  INP(RString) columnPattern) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getTablePrivileges(INP(RString) catalog, INP(RString) schema, INP(RString) table) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getBestRowIdentifier(INP(RString) catalog, INP(RString) schema, INP(RString) table, int scope, bool nullable) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getVersionColumns(INP(RString) catalog, INP(RString) schema, INP(RString) table) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getPrimaryKeys(INP(RString) catalog, INP(RString) schema, INP(RString) table) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getImportedKeys(INP(RString) catalog, INP(RString) schema, INP(RString) table) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getExportedKeys(INP(RString) catalog, INP(RString) schema, INP(RString) table) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getCrossReference(INP(RString) primCatalog, INP(RString) primSchema, INP(RString) primTable, INP(RString) forCatalog, INP(RString) forSchema, INP(RString) forTable)  THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getTypeInfo() THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getIndexInfo(INP(RString) catalog, INP(RString) schema, INP(RString) table, bool unique, bool approx) THROWS1(::acdk::sql::RSQLException)  { THROW0(UnsupportedOperationException); return Nil; }

  virtual bool supportsResultType(int type) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool supportsResultSetConcurrency(int type, int concur) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool ownUpdatesAreVisible(int type) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool ownDeletesAreVisible(int type) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool ownInsertsAreVisible(int type) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool othersUpdatesAreVisible(int type) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool othersDeletesAreVisible(int type) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool othersInsertsAreVisible(int type) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool updatesAreDetected(int type) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool deletesAreDetected(int type) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool insertsAreDetected(int type) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual bool supportsBatchUpdates() THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RResultSet getUDTs(INP(RString) catalog, INP(RString) schema, INP(RString) typePattern, INP(RintArray) types) THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  virtual ::acdk::sql::RConnection getConnection() THROWS1(::acdk::sql::RSQLException) { THROW0(UnsupportedOperationException); return Nil; }
  ODBCDatabaseMetaData(RODBCConnection conn) : _conn(conn) { }
  ~ODBCDatabaseMetaData() { }
protected:
  RString getStringInfo(int code) THROWS1(::acdk::sql::RSQLException);
  short getShortInfo(int code) THROWS1(::acdk::sql::RSQLException);
  int getIntInfo(int code) THROWS1(::acdk::sql::RSQLException);
private:
  RODBCConnection _conn;
};

} // odbc
} // sql
} // acdk
#endif //acdk_sqlodbc_DatabaseMetaData_h