File indexing completed on 2025-08-03 08:22:07
0001
0002 #include <TError.h>
0003 #include <TString.h>
0004 #include <RDBC/TSQLDriverManager.h>
0005 #include <RDBC/TSQLConnection.h>
0006 #include <RDBC/TSQLDatabaseMetaData.h>
0007 #include <RDBC/TSQLResultSet.h>
0008 #include <RDBC/TSQLResultSetMetaData.h>
0009 #include <RDBC/TSQLPreparedStatement.h>
0010 #include <RDBC/TSQLCallableStatement.h>
0011 #include <RDBC/TSQLTypes.h>
0012 #include <string>
0013 extern "C" {
0014 #include <stdlib.h>
0015 };
0016
0017
0018
0019
0020
0021
0022
0023
0024 Int_t RDBCTestMetaData(const Text_t* dsn, const Text_t* schema,
0025 const Text_t* usr="",
0026 const Text_t* pwd="")
0027 {
0028
0029 TSQLConnection* myConnection = NULL;
0030 if(usr!="" && pwd !=""){
0031 if(getenv("VERBOSE"))
0032 printf( "connecting with: dsn= %s usr=%s pwd=%s\n",dsn,usr,pwd);
0033 myConnection = TSQLDriverManager::GetConnection( dsn, usr, pwd );
0034 } else{
0035 if(getenv("VERBOSE"))
0036 printf( "connecting with: dsn= %s \n",dsn);
0037 myConnection = TSQLDriverManager::GetConnection( dsn );
0038 }
0039
0040 if(!myConnection) {
0041
0042 printf( "failed to connect: dsn= %s usr=%s pwd=%s\n",dsn,usr,pwd);
0043 printf("exiting...\n");
0044 return -1;
0045 }else
0046 printf("connected!!!\n");
0047
0048 TSQLDatabaseMetaData *md = myConnection->GetMetaData();
0049
0050
0051
0052
0053
0054
0055
0056 TString schm=schema;
0057 TString catalog=schema;
0058 TString tab_pattern="";
0059 TString tab_type="TABLE";
0060 TString tableName="";
0061 TSQLResultSet *rs = md->GetTables(catalog,schm,tab_pattern,tab_type);
0062 while(rs->Next()){
0063 tableName = rs->GetString(3);
0064 printf("%s\n",tableName.Data());
0065 }
0066
0067 printf("Bool_t AllProceduresAreCallable():%d\n",
0068 md->AllProceduresAreCallable());
0069 printf("Bool_t AllTablesAreSelectable():%d\n",
0070 md->AllTablesAreSelectable());
0071 printf("TString GetUserName():%s\n", md->GetUserName().Data());
0072 printf("Bool_t IsReadOnly():%d\n", md->IsReadOnly());
0073 printf("Bool_t NullsAreSortedHigh():%d\n", md->NullsAreSortedHigh());
0074 printf("Bool_t NullsAreSortedLow():%d\n", md->NullsAreSortedLow());
0075 printf("Bool_t NullsAreSortedAtStart():%d\n", md->NullsAreSortedAtStart());
0076 printf("Bool_t NullsAreSortedAtEnd():%d\n", md->NullsAreSortedAtEnd());
0077 printf("TString GetDatabaseProductName():%s\n",
0078 md->GetDatabaseProductName().Data());
0079 printf("TString GetDatabaseProductVersion():%s\n",
0080 md->GetDatabaseProductVersion().Data());
0081 printf("TString GetDriverName():%s\n", md->GetDriverName().Data());
0082 printf("TString GetDriverVersion():%s\n", md->GetDriverVersion().Data());
0083 printf("Int_t GetDriverMajorVersion():%d\n", md->GetDriverMajorVersion());
0084 printf("Int_t GetDriverMinorVersion():%d\n", md->GetDriverMinorVersion());
0085 printf("Bool_t UsesLocalFiles():%d\n", md->UsesLocalFiles());
0086 printf("Bool_t UsesLocalFilePerTable():%d\n", md->UsesLocalFilePerTable());
0087 printf("Bool_t SupportsMixedCaseIdentifiers():%d\n",
0088 md->SupportsMixedCaseIdentifiers());
0089 printf("Bool_t StoresUpperCaseIdentifiers():%d\n",
0090 md->StoresUpperCaseIdentifiers());
0091 printf("Bool_t StoresLowerCaseIdentifiers():%d\n",
0092 md->StoresLowerCaseIdentifiers());
0093 printf("Bool_t StoresMixedCaseIdentifiers():%d\n",
0094 md->StoresMixedCaseIdentifiers());
0095 printf("Bool_t SupportsMixedCaseQuotedIdentifiers():%d\n",
0096 md->SupportsMixedCaseQuotedIdentifiers());
0097 printf("Bool_t StoresUpperCaseQuotedIdentifiers():%d\n",
0098 md->StoresUpperCaseQuotedIdentifiers());
0099 printf("Bool_t StoresLowerCaseQuotedIdentifiers():%d\n",
0100 md->StoresLowerCaseQuotedIdentifiers());
0101 printf("Bool_t StoresMixedCaseQuotedIdentifiers():%d\n",
0102 md->StoresMixedCaseQuotedIdentifiers());
0103 printf("TString GetIdentifierQuoteString():%s\n",
0104 md->GetIdentifierQuoteString().Data());
0105 printf("TString GetSQLKeywords():%s\n",
0106 md->GetSQLKeywords().Data());
0107 printf("TString GetNumericFunctions():%s\n",
0108 md->GetNumericFunctions().Data());
0109 printf("TString GetStringFunctions():%s\n",
0110 md->GetStringFunctions().Data());
0111 printf("TString GetSystemFunctions():%s\n",
0112 md->GetSystemFunctions().Data());
0113 printf("TString GetTimeDateFunctions():%s\n",
0114 md->GetTimeDateFunctions().Data());
0115 printf("TString GetSearchStringEscape():%s\n",
0116 md->GetSearchStringEscape().Data());
0117 printf("TString GetExtraNameCharacters():%s\n",
0118 md->GetExtraNameCharacters().Data());
0119 printf("Bool_t SupportsAlterTableWithAddColumn():%d\n",
0120 md->SupportsAlterTableWithAddColumn());
0121 printf("Bool_t SupportsAlterTableWithDropColumn():%d\n",
0122 md->SupportsAlterTableWithDropColumn());
0123 printf("Bool_t SupportsColumnAliasing():%d\n",
0124 md->SupportsColumnAliasing());
0125 printf("Bool_t NullPlusNonNullIsNull():%d\n",
0126 md->NullPlusNonNullIsNull());
0127 printf("Bool_t SupportsConvert():%d\n", md->SupportsConvert());
0128
0129 printf("Bool_t SupportsTableCorrelationNames():%d\n",
0130 md->SupportsTableCorrelationNames());
0131 printf("Bool_t SupportsDifferentTableCorrelationNames():%d\n",
0132 md->SupportsDifferentTableCorrelationNames());
0133 printf("Bool_t SupportsExpressionsInOrderBy():%d\n",
0134 md->SupportsExpressionsInOrderBy());
0135 printf("Bool_t SupportsOrderByUnrelated():%d\n",
0136 md->SupportsOrderByUnrelated());
0137 printf("Bool_t SupportsGroupBy():%d\n",
0138 md->SupportsGroupBy());
0139 printf("Bool_t SupportsGroupByUnrelated():%d\n",
0140 md->SupportsGroupByUnrelated());
0141 printf("Bool_t SupportsGroupByBeyondSelect():%d\n",
0142 md->SupportsGroupByBeyondSelect());
0143 printf("Bool_t SupportsLikeEscapeClause():%d\n",
0144 md->SupportsLikeEscapeClause());
0145 printf("Bool_t SupportsMultipleResultSets():%d\n",
0146 md->SupportsMultipleResultSets());
0147 printf("Bool_t SupportsMultipleTransactions():%d\n",
0148 md->SupportsMultipleTransactions());
0149 printf("Bool_t SupportsNonNullableColumns():%d\n",
0150 md->SupportsNonNullableColumns());
0151 printf("Bool_t SupportsMinimumSQLGrammar():%d\n",
0152 md->SupportsMinimumSQLGrammar());
0153 printf("Bool_t SupportsCoreSQLGrammar():%d\n",
0154 md->SupportsCoreSQLGrammar());
0155 printf("Bool_t SupportsExtendedSQLGrammar():%d\n",
0156 md->SupportsExtendedSQLGrammar());
0157 printf("Bool_t SupportsANSI92EntryLevelSQL():%d\n",
0158 md->SupportsANSI92EntryLevelSQL());
0159 printf("Bool_t SupportsANSI92IntermediateSQL():%d\n",
0160 md->SupportsANSI92IntermediateSQL());
0161 printf("Bool_t SupportsANSI92FullSQL():%d\n",
0162 md->SupportsANSI92FullSQL());
0163 printf("Bool_t SupportsIntegrityEnhancementFacility():%d\n",
0164 md->SupportsIntegrityEnhancementFacility());
0165 printf("Bool_t SupportsOuterJoins():%d\n",
0166 md->SupportsOuterJoins());
0167 printf("Bool_t SupportsFullOuterJoins():%d\n",
0168 md->SupportsFullOuterJoins());
0169 printf("Bool_t SupportsLimitedOuterJoins():%d\n",
0170 md->SupportsLimitedOuterJoins());
0171 printf("TString GetSchemaTerm():%s\n",
0172 md->GetSchemaTerm().Data());
0173 printf("TString GetTableTerm():%s\n",
0174 md->GetTableTerm().Data());
0175 printf("TString GetProcedureTerm():%s\n",
0176 md->GetProcedureTerm().Data());
0177 printf("TString GetCatalogTerm():%s\n",
0178 md->GetCatalogTerm().Data());
0179 printf("Bool_t IsCatalogAtStart():%d\n",
0180 md->IsCatalogAtStart());
0181 printf("TString GetCatalogSeparator():%s\n",
0182 md->GetCatalogSeparator().Data());
0183 printf("Bool_t SupportsSchemasInDataManipulation():%d\n",
0184 md->SupportsSchemasInDataManipulation());
0185 printf("Bool_t SupportsSchemasInProcedureCalls():%d\n",
0186 md->SupportsSchemasInProcedureCalls());
0187 printf("Bool_t SupportsSchemasInTableDefinitions():%d\n",
0188 md->SupportsSchemasInTableDefinitions());
0189 printf("Bool_t SupportsSchemasInIndexDefinitions():%d\n",
0190 md->SupportsSchemasInIndexDefinitions());
0191 printf("Bool_t SupportsSchemasInPrivilegeDefinitions():%d\n",
0192 md->SupportsSchemasInPrivilegeDefinitions());
0193 printf("Bool_t SupportsCatalogsInDataManipulation():%d\n",
0194 md->SupportsCatalogsInDataManipulation());
0195 printf("Bool_t SupportsCatalogsInProcedureCalls():%d\n",
0196 md->SupportsCatalogsInProcedureCalls());
0197 printf("Bool_t SupportsCatalogsInTableDefinitions():%d\n",
0198 md->SupportsCatalogsInTableDefinitions());
0199 printf("Bool_t SupportsCatalogsInIndexDefinitions():%d\n",
0200 md->SupportsCatalogsInIndexDefinitions());
0201 printf("Bool_t SupportsCatalogsInPrivilegeDefinitions():%d\n",
0202 md->SupportsCatalogsInPrivilegeDefinitions());
0203 printf("Bool_t SupportsPositionedDelete():%d\n",
0204 md->SupportsPositionedDelete());
0205 printf("Bool_t SupportsPositionedUpdate():%d\n",
0206 md->SupportsPositionedUpdate());
0207 printf("Bool_t SupportsSelectForUpdate():%d\n",
0208 md->SupportsSelectForUpdate());
0209 printf("Bool_t SupportsStoredProcedures():%d\n",
0210 md->SupportsStoredProcedures());
0211 printf("Bool_t SupportsSubqueriesInComparisons():%d\n",
0212 md->SupportsSubqueriesInComparisons());
0213 printf("Bool_t SupportsSubqueriesInExists():%d\n",
0214 md->SupportsSubqueriesInExists());
0215 printf("Bool_t SupportsSubqueriesInIns():%d\n",
0216 md->SupportsSubqueriesInIns());
0217 printf("Bool_t SupportsSubqueriesInQuantifieds():%d\n",
0218 md->SupportsSubqueriesInQuantifieds());
0219 printf("Bool_t SupportsCorrelatedSubqueries():%d\n",
0220 md->SupportsCorrelatedSubqueries());
0221 printf("Bool_t SupportsUnion():%d\n",
0222 md->SupportsUnion());
0223 printf("Bool_t SupportsUnionAll():%d\n",
0224 md->SupportsUnionAll());
0225 printf("Bool_t SupportsOpenCursorsAcrossRollback():%d\n",
0226 md->SupportsOpenCursorsAcrossRollback());
0227 printf("Bool_t SupportsOpenStatementsAcrossCommit():%d\n",
0228 md->SupportsOpenStatementsAcrossCommit());
0229 printf("Bool_t SupportsOpenStatementsAcrossRollback():%d\n",
0230 md->SupportsOpenStatementsAcrossRollback());
0231 printf("Int_t GetMaxBinaryLiteralLength():%d\n",
0232 md->GetMaxBinaryLiteralLength());
0233 printf("Int_t GetMaxCharLiteralLength():%d\n",
0234 md->GetMaxCharLiteralLength());
0235 printf("Int_t GetMaxColumnNameLength():%d\n",
0236 md->GetMaxColumnNameLength());
0237 printf("Int_t GetMaxColumnsInGroupBy():%d\n",
0238 md->GetMaxColumnsInGroupBy());
0239 printf("Int_t GetMaxColumnsInIndex():%d\n",
0240 md->GetMaxColumnsInIndex());
0241 printf("Int_t GetMaxColumnsInOrderBy():%d\n",
0242 md->GetMaxColumnsInOrderBy());
0243 printf("Int_t GetMaxColumnsInSelect():%d\n",
0244 md->GetMaxColumnsInSelect());
0245 printf("Int_t GetMaxColumnsInTable():%d\n",
0246 md->GetMaxColumnsInTable());
0247 printf("Int_t GetMaxConnections():%d\n",
0248 md->GetMaxConnections());
0249 printf("Int_t GetMaxCursorNameLength():%d\n",
0250 md->GetMaxCursorNameLength());
0251 printf("Int_t GetMaxIndexLength():%d\n",
0252 md->GetMaxIndexLength());
0253 printf("Int_t GetMaxSchemaNameLength():%d\n",
0254 md->GetMaxSchemaNameLength());
0255 printf("Int_t GetMaxProcedureNameLength():%d\n",
0256 md->GetMaxProcedureNameLength());
0257 printf("Int_t GetMaxCatalogNameLength():%d\n",
0258 md->GetMaxCatalogNameLength());
0259 printf("Int_t GetMaxRowSize():%d\n", md->GetMaxRowSize());
0260 printf("Bool_t DoesMaxRowSizeIncludeBlobs():%d\n",
0261 md->DoesMaxRowSizeIncludeBlobs());
0262 printf("Int_t GetMaxStatementLength():%d\n",
0263 md->GetMaxStatementLength());
0264 printf("Int_t GetMaxStatements():%d\n",
0265 md->GetMaxStatements());
0266 printf("Int_t GetMaxTableNameLength():%d\n",
0267 md->GetMaxTableNameLength());
0268 printf("Int_t GetMaxTablesInSelect():%d\n",
0269 md->GetMaxTablesInSelect());
0270 printf("Int_t GetMaxUserNameLength():%d\n",
0271 md->GetMaxUserNameLength());
0272 printf("Int_t GetDefaultTransactionIsolation():%d\n",
0273 md->GetDefaultTransactionIsolation());
0274 printf("Bool_t SupportsTransactions():%d\n",
0275 md->SupportsTransactions());
0276
0277 printf("Bool_t SupportsDataDefinitionAndDataManipulationTransactions():%d\n",
0278 md->SupportsDataDefinitionAndDataManipulationTransactions());
0279
0280 printf("Bool_t SupportsDataManipulationTransactionsOnly():%d\n",
0281 md->SupportsDataManipulationTransactionsOnly());
0282 printf("Bool_t DataDefinitionCausesTransactionCommit():%d\n",
0283 md->DataDefinitionCausesTransactionCommit());
0284 printf("Bool_t DataDefinitionIgnoredInTransactions():%d\n",
0285 md->DataDefinitionIgnoredInTransactions());
0286
0287 printf("looking at columns of %s\n",tableName.Data());
0288 TString query = "select * from ";
0289 query += tableName + " where 1=0;";
0290 TSQLStatement* stmt = myConnection->CreateStatement();
0291 TSQLResultSet *rs2 =stmt->ExecuteQuery( query);
0292
0293 TSQLResultSetMetaData *rsmd = rs2->GetMetaData();
0294 int numCols = rsmd->GetColumnCount();
0295
0296 for(int i=1; i<= numCols; i++)
0297 {
0298
0299 printf( "col name= '%s' type = '%s' \n",
0300 rsmd->GetColumnName(i).Data(),
0301 rsmd->GetColumnTypeName(i).Data() );
0302
0303 }
0304
0305
0306 myConnection->Close();
0307 return 0;
0308 }
0309
0310
0311 void Catch(TSQLException* e)
0312 {
0313
0314
0315 TString str = e->GetMessage();
0316 printf("SQL Error: %s\n",str.Data());
0317 }
0318
0319
0320
0321 #ifdef STANDALONE
0322
0323 #include <TROOT.h>
0324 #include <TSystem.h>
0325 #include <iostream>
0326
0327
0328
0329 TROOT root("RDBCTestMetaData","Test RDBC TSQLDriverManager and TSQLConnection");
0330
0331 int main(int argc, char **argv)
0332 {
0333
0334 gSystem->Load("libRDBC");
0335 Int_t ret = -1;
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345 if(argc != 3 && argc != 5){
0346 printf ("usage: RDBCTestMetaData dsn schema [usr] [password]\n");
0347 return ret;
0348 }
0349
0350
0351 if(argc==3)
0352 ret=RDBCTestMetaData(argv[1],argv[2]);
0353 if(argc==5)
0354 ret=RDBCTestMetaData(argv[1],argv[2],argv[3], argv[4]);
0355
0356 return ret;
0357 }
0358 #endif