1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_connectivity.hxx" 26 #include "NDatabaseMetaData.hxx" 27 #include <com/sun/star/sdbc/DataType.hpp> 28 #include <com/sun/star/sdbc/ResultSetType.hpp> 29 #include <com/sun/star/sdbc/ResultSetConcurrency.hpp> 30 #include <com/sun/star/sdbc/TransactionIsolation.hpp> 31 #include <connectivity/dbexception.hxx> 32 #include <connectivity/FValue.hxx> 33 #include <com/sun/star/sdbc/ColumnValue.hpp> 34 #include <com/sun/star/sdbc/ColumnSearch.hpp> 35 36 #include <vector> 37 #include <string.h> 38 #include "EApi.h" 39 40 #if OSL_DEBUG_LEVEL > 0 41 # define OUtoCStr( x ) ( ::rtl::OUStringToOString ( (x), RTL_TEXTENCODING_ASCII_US).getStr()) 42 #else /* OSL_DEBUG_LEVEL */ 43 # define OUtoCStr( x ) ("dummy") 44 #endif /* OSL_DEBUG_LEVEL */ 45 46 using namespace connectivity::evoab; 47 using namespace connectivity; 48 using namespace com::sun::star::uno; 49 using namespace com::sun::star::lang; 50 using namespace com::sun::star::beans; 51 using namespace com::sun::star::sdbc; 52 using namespace com::sun::star::sdbcx; 53 54 55 namespace connectivity 56 { 57 namespace evoab 58 { 59 static sal_Int32 const s_nCOLUMN_SIZE = 256; 60 static sal_Int32 const s_nDECIMAL_DIGITS = 0; 61 static sal_Int32 const s_nNULLABLE = 1; 62 static sal_Int32 const s_nCHAR_OCTET_LENGTH = 65535; 63 64 static ColumnProperty **pFields=NULL; 65 static guint nFields = 0; 66 67 static const char *pBlackList[] = 68 { 69 "id", 70 "list-show-addresses", 71 "address-label-home", 72 "address-label-work", 73 "address-label-other" 74 }; 75 76 const SplitEvoColumns* get_evo_addr() 77 { 78 static const SplitEvoColumns evo_addr[] = { 79 {"addr-line1",DEFAULT_ADDR_LINE1},{"addr-line2",DEFAULT_ADDR_LINE2},{"city",DEFAULT_CITY},{"state",DEFAULT_STATE},{"country",DEFAULT_COUNTRY},{"zip",DEFAULT_ZIP}, 80 {"work-addr-line1",WORK_ADDR_LINE1},{"work-addr-line2",WORK_ADDR_LINE2},{"work-city",WORK_CITY},{"work-state",WORK_STATE},{"work-country",WORK_COUNTRY},{"work-zip",WORK_ZIP}, 81 {"home-addr-line1",HOME_ADDR_LINE1},{"home-addr-line2",HOME_ADDR_LINE2},{"home-addr-City",HOME_CITY},{"home-state",HOME_STATE},{"home-country",HOME_COUNTRY},{"home-zip",HOME_ZIP}, 82 {"other-addr-line1",OTHER_ADDR_LINE1},{"other-addr-line2",OTHER_ADDR_LINE2},{"other-addr-city",OTHER_CITY},{"other-addr-state",OTHER_STATE},{"other-addr-country",OTHER_COUNTRY},{"other-addr-zip",OTHER_ZIP} 83 }; 84 return evo_addr; 85 } 86 87 static void 88 splitColumn (ColumnProperty **pToBeFields) 89 { 90 const SplitEvoColumns* evo_addr( get_evo_addr() ); 91 for (int i = 0; i < OTHER_ZIP; i++) 92 { 93 pToBeFields[nFields] = g_new0(ColumnProperty,1); 94 pToBeFields[nFields]->bIsSplittedValue = true; 95 pToBeFields[nFields]->pField = g_param_spec_ref(g_param_spec_string (evo_addr[i].pColumnName,evo_addr[i].pColumnName,"",NULL,G_PARAM_WRITABLE)); 96 nFields++; 97 } 98 } 99 100 static void 101 initFields() 102 { 103 if( !pFields ) 104 { 105 ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); 106 if( !pFields ) 107 { 108 guint nProps; 109 ColumnProperty **pToBeFields; 110 GParamSpec **pProps; 111 nFields = 0; 112 pProps = g_object_class_list_properties 113 ( (GObjectClass *) g_type_class_ref( E_TYPE_CONTACT ), 114 &nProps ); 115 pToBeFields = g_new0(ColumnProperty *, (nProps + OTHER_ZIP)/* new column(s)*/ ); 116 for ( guint i = 0; i < nProps; i++ ) 117 { 118 switch (pProps[i]->value_type) 119 { 120 case G_TYPE_STRING: 121 case G_TYPE_BOOLEAN: 122 { 123 bool bAdd = true; 124 const char *pName = g_param_spec_get_name( pProps[i] ); 125 for (unsigned int j = 0; j < G_N_ELEMENTS( pBlackList ); j++ ) 126 { 127 if( !strcmp( pBlackList[j], pName ) ) 128 { 129 bAdd = false; 130 break; 131 } 132 } 133 if( bAdd ) 134 { 135 pToBeFields[nFields]= g_new0(ColumnProperty,1); 136 pToBeFields[nFields]->bIsSplittedValue=false; 137 pToBeFields[ nFields++ ]->pField = g_param_spec_ref( pProps[i] ); 138 } 139 break; 140 } 141 default: 142 break; 143 } 144 } 145 146 splitColumn(pToBeFields); 147 pFields = pToBeFields; 148 } 149 } 150 } 151 152 153 guint 154 getFieldCount() 155 { 156 initFields(); 157 return nFields; 158 } 159 160 const ColumnProperty * 161 getField(guint n) 162 { 163 initFields(); 164 if( n < nFields ) 165 return pFields[n]; 166 else 167 return NULL; 168 } 169 170 GType 171 getGFieldType( guint nCol ) 172 { 173 initFields(); 174 175 sal_Int32 nType = G_TYPE_STRING; 176 if ( nCol < nFields ) 177 return ((GParamSpec *)pFields[nCol]->pField)->value_type; 178 return nType; 179 } 180 181 sal_Int32 182 getFieldType( guint nCol ) 183 { 184 sal_Int32 nType = getGFieldType( nCol ); 185 return nType == G_TYPE_STRING ? DataType::VARCHAR : DataType::BIT; 186 } 187 188 guint findEvoabField(const rtl::OUString& aColName) 189 { 190 guint nRet = (guint)-1; 191 sal_Bool bFound = sal_False; 192 initFields(); 193 for (guint i=0;(i < nFields) && !bFound;i++) 194 { 195 rtl::OUString aName = getFieldName(i); 196 if (aName == aColName) 197 { 198 nRet = i; 199 bFound = sal_True; 200 } 201 } 202 return nRet; 203 } 204 205 rtl::OUString 206 getFieldTypeName( guint nCol ) 207 { 208 switch( getFieldType( nCol ) ) 209 { 210 case DataType::BIT: 211 return ::rtl::OUString::createFromAscii( "BIT" ); 212 case DataType::VARCHAR: 213 return ::rtl::OUString::createFromAscii( "VARCHAR" ); 214 default: 215 break; 216 } 217 return ::rtl::OUString(); 218 } 219 220 rtl::OUString 221 getFieldName( guint nCol ) 222 { 223 const GParamSpec *pSpec = getField( nCol )->pField; 224 rtl::OUString aName; 225 initFields(); 226 227 if( pSpec ) 228 aName = rtl::OStringToOUString( g_param_spec_get_name( ( GParamSpec * )pSpec ), 229 RTL_TEXTENCODING_UTF8 ); 230 aName = aName.replace( '-', '_' ); 231 return aName; 232 } 233 234 void 235 free_column_resources() 236 { 237 for (int i=nFields-1;i > 0;i--) 238 { 239 if (pFields && pFields[i] ) 240 { 241 if (pFields[i]->pField) 242 g_param_spec_unref(pFields[i]->pField); 243 g_free(pFields[i]); 244 } 245 } 246 if(pFields) 247 { 248 g_free(pFields); 249 pFields=NULL; 250 } 251 252 } 253 254 255 } 256 } 257 258 259 OEvoabDatabaseMetaData::OEvoabDatabaseMetaData(OEvoabConnection* _pCon) 260 : ::connectivity::ODatabaseMetaDataBase(_pCon, _pCon->getConnectionInfo()) 261 ,m_pConnection(_pCon) 262 { 263 OSL_ENSURE(m_pConnection,"OEvoabDatabaseMetaData::OEvoabDatabaseMetaData: No connection set!"); 264 } 265 OEvoabDatabaseMetaData::~OEvoabDatabaseMetaData() 266 { 267 } 268 269 // ------------------------------------------------------------------------- 270 ODatabaseMetaDataResultSet::ORows& OEvoabDatabaseMetaData::getColumnRows( const ::rtl::OUString& columnNamePattern ) 271 { 272 static ODatabaseMetaDataResultSet::ORows aRows; 273 ODatabaseMetaDataResultSet::ORow aRow(19); 274 aRows.clear(); 275 276 // **************************************************** 277 // Some entries in a row never change, so set them now 278 // **************************************************** 279 280 // Catalog 281 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("")); 282 // Schema 283 aRow[2] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("")); 284 // COLUMN_SIZE 285 aRow[7] = new ORowSetValueDecorator(s_nCOLUMN_SIZE); 286 // BUFFER_LENGTH, not used 287 aRow[8] = ODatabaseMetaDataResultSet::getEmptyValue(); 288 // DECIMAL_DIGITS. 289 aRow[9] = new ORowSetValueDecorator(s_nDECIMAL_DIGITS); 290 // NUM_PREC_RADIX 291 aRow[10] = new ORowSetValueDecorator((sal_Int32)10); 292 // NULLABLE 293 aRow[11] = new ORowSetValueDecorator(s_nNULLABLE); 294 // REMARKS 295 aRow[12] = ODatabaseMetaDataResultSet::getEmptyValue(); 296 // COULUMN_DEF, not used 297 aRow[13] = ODatabaseMetaDataResultSet::getEmptyValue(); 298 // SQL_DATA_TYPE, not used 299 aRow[14] = ODatabaseMetaDataResultSet::getEmptyValue(); 300 // SQL_DATETIME_SUB, not used 301 aRow[15] = ODatabaseMetaDataResultSet::getEmptyValue(); 302 // CHAR_OCTET_LENGTH, refer to [5] 303 aRow[16] = new ORowSetValueDecorator(s_nCHAR_OCTET_LENGTH); 304 // IS_NULLABLE 305 aRow[18] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii( "YES" )); 306 307 308 aRow[3] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii( "TABLE" )); 309 ::osl::MutexGuard aGuard( m_aMutex ); 310 311 initFields(); 312 for (sal_Int32 i = 0; i < (sal_Int32) nFields; i++) 313 { 314 if( match( columnNamePattern, getFieldName( i ), '\0' ) ) 315 { 316 aRow[5] = new ORowSetValueDecorator( static_cast<sal_Int16>( getFieldType( i ) ) ); 317 aRow[6] = new ORowSetValueDecorator( getFieldTypeName( i ) ); 318 319 OSL_TRACE( "ColumnName = '%s'", g_param_spec_get_name( pFields[i]->pField ) ); 320 // COLUMN_NAME 321 aRow[4] = new ORowSetValueDecorator( getFieldName( i ) ); 322 // ORDINAL_POSITION 323 aRow[17] = new ORowSetValueDecorator( i ); 324 aRows.push_back( aRow ); 325 } 326 } 327 328 return aRows ; 329 } 330 // ------------------------------------------------------------------------- 331 ::rtl::OUString OEvoabDatabaseMetaData::impl_getCatalogSeparator_throw( ) 332 { 333 return ::rtl::OUString(); 334 } 335 // ------------------------------------------------------------------------- 336 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxBinaryLiteralLength( ) throw(SQLException, RuntimeException) 337 { 338 return 0;// 0 means no limit 339 } 340 // ------------------------------------------------------------------------- 341 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxRowSize( ) throw(SQLException, RuntimeException) 342 { 343 return 0;// 0 means no limit 344 } 345 // ------------------------------------------------------------------------- 346 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxCatalogNameLength( ) throw(SQLException, RuntimeException) 347 { 348 return 0;// 0 means no limit 349 } 350 // ------------------------------------------------------------------------- 351 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxCharLiteralLength( ) throw(SQLException, RuntimeException) 352 { 353 return 0;// 0 means no limit 354 } 355 // ------------------------------------------------------------------------- 356 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxColumnNameLength( ) throw(SQLException, RuntimeException) 357 { 358 return 0;// 0 means no limit 359 } 360 // ------------------------------------------------------------------------- 361 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxColumnsInIndex( ) throw(SQLException, RuntimeException) 362 { 363 return 0;// 0 means no limit 364 } 365 // ------------------------------------------------------------------------- 366 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxCursorNameLength( ) throw(SQLException, RuntimeException) 367 { 368 return 0;// 0 means no limit 369 } 370 // ------------------------------------------------------------------------- 371 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxConnections( ) throw(SQLException, RuntimeException) 372 { 373 return 0;// 0 means no limit 374 } 375 // ------------------------------------------------------------------------- 376 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxColumnsInTable( ) throw(SQLException, RuntimeException) 377 { 378 return 0;// 0 means no limit 379 } 380 // ------------------------------------------------------------------------- 381 sal_Int32 OEvoabDatabaseMetaData::impl_getMaxStatements_throw( ) 382 { 383 return 0;// 0 means no limit 384 } 385 // ------------------------------------------------------------------------- 386 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxTableNameLength( ) throw(SQLException, RuntimeException) 387 { 388 return 0;// 0 means no limit 389 } 390 // ------------------------------------------------------------------------- 391 sal_Int32 OEvoabDatabaseMetaData::impl_getMaxTablesInSelect_throw( ) 392 { 393 // We only support a single table 394 return 1; 395 } 396 // ------------------------------------------------------------------------- 397 // ------------------------------------------------------------------------- 398 sal_Bool SAL_CALL OEvoabDatabaseMetaData::doesMaxRowSizeIncludeBlobs( ) throw(SQLException, RuntimeException) 399 { 400 return sal_False; 401 } 402 // ------------------------------------------------------------------------- 403 sal_Bool SAL_CALL OEvoabDatabaseMetaData::storesLowerCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) 404 { 405 return sal_False; 406 } 407 // ------------------------------------------------------------------------- 408 sal_Bool SAL_CALL OEvoabDatabaseMetaData::storesLowerCaseIdentifiers( ) throw(SQLException, RuntimeException) 409 { 410 return sal_False; 411 } 412 // ------------------------------------------------------------------------- 413 sal_Bool OEvoabDatabaseMetaData::impl_storesMixedCaseQuotedIdentifiers_throw( ) 414 { 415 return sal_False; 416 } 417 // ------------------------------------------------------------------------- 418 sal_Bool SAL_CALL OEvoabDatabaseMetaData::storesMixedCaseIdentifiers( ) throw(SQLException, RuntimeException) 419 { 420 return sal_False; 421 } 422 // ------------------------------------------------------------------------- 423 sal_Bool SAL_CALL OEvoabDatabaseMetaData::storesUpperCaseQuotedIdentifiers( ) throw(SQLException, RuntimeException) 424 { 425 return sal_False; 426 } 427 // ------------------------------------------------------------------------- 428 sal_Bool SAL_CALL OEvoabDatabaseMetaData::storesUpperCaseIdentifiers( ) throw(SQLException, RuntimeException) 429 { 430 return sal_False; 431 } 432 // ------------------------------------------------------------------------- 433 sal_Bool OEvoabDatabaseMetaData::impl_supportsAlterTableWithAddColumn_throw( ) 434 { 435 return sal_False; 436 } 437 // ------------------------------------------------------------------------- 438 sal_Bool OEvoabDatabaseMetaData::impl_supportsAlterTableWithDropColumn_throw( ) 439 { 440 return sal_False; 441 } 442 // ------------------------------------------------------------------------- 443 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxIndexLength( ) throw(SQLException, RuntimeException) 444 { 445 return 0;// 0 means no limit 446 } 447 // ------------------------------------------------------------------------- 448 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsNonNullableColumns( ) throw(SQLException, RuntimeException) 449 { 450 return sal_False; 451 } 452 // ------------------------------------------------------------------------- 453 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getCatalogTerm( ) throw(SQLException, RuntimeException) 454 { 455 ::rtl::OUString aVal; 456 return aVal; 457 } 458 // ------------------------------------------------------------------------- 459 ::rtl::OUString OEvoabDatabaseMetaData::impl_getIdentifierQuoteString_throw( ) 460 { 461 // normally this is " 462 ::rtl::OUString aVal = ::rtl::OUString::createFromAscii("\""); 463 return aVal; 464 } 465 // ------------------------------------------------------------------------- 466 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getExtraNameCharacters( ) throw(SQLException, RuntimeException) 467 { 468 ::rtl::OUString aVal; 469 return aVal; 470 } 471 // ------------------------------------------------------------------------- 472 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsDifferentTableCorrelationNames( ) throw(SQLException, RuntimeException) 473 { 474 return sal_False; 475 } 476 // ------------------------------------------------------------------------- 477 sal_Bool OEvoabDatabaseMetaData::impl_isCatalogAtStart_throw( ) 478 { 479 sal_Bool bValue = sal_False; 480 return bValue; 481 } 482 // ------------------------------------------------------------------------- 483 sal_Bool SAL_CALL OEvoabDatabaseMetaData::dataDefinitionIgnoredInTransactions( ) throw(SQLException, RuntimeException) 484 { 485 return sal_True; 486 } 487 // ------------------------------------------------------------------------- 488 sal_Bool SAL_CALL OEvoabDatabaseMetaData::dataDefinitionCausesTransactionCommit( ) throw(SQLException, RuntimeException) 489 { 490 return sal_True; 491 } 492 // ------------------------------------------------------------------------- 493 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsDataManipulationTransactionsOnly( ) throw(SQLException, RuntimeException) 494 { 495 return sal_True; 496 } 497 // ------------------------------------------------------------------------- 498 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsDataDefinitionAndDataManipulationTransactions( ) throw(SQLException, RuntimeException) 499 { 500 return sal_True; 501 } 502 // ------------------------------------------------------------------------- 503 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsPositionedDelete( ) throw(SQLException, RuntimeException) 504 { 505 return sal_False; 506 } 507 // ------------------------------------------------------------------------- 508 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsPositionedUpdate( ) throw(SQLException, RuntimeException) 509 { 510 return sal_False; 511 } 512 // ------------------------------------------------------------------------- 513 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsOpenStatementsAcrossRollback( ) throw(SQLException, RuntimeException) 514 { 515 return sal_False; 516 } 517 // ------------------------------------------------------------------------- 518 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsOpenStatementsAcrossCommit( ) throw(SQLException, RuntimeException) 519 { 520 return sal_False; 521 } 522 // ------------------------------------------------------------------------- 523 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsOpenCursorsAcrossCommit( ) throw(SQLException, RuntimeException) 524 { 525 return sal_False; 526 } 527 // ------------------------------------------------------------------------- 528 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsOpenCursorsAcrossRollback( ) throw(SQLException, RuntimeException) 529 { 530 return sal_False; 531 } 532 // ------------------------------------------------------------------------- 533 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsTransactionIsolationLevel( sal_Int32 /*level*/ ) throw(SQLException, RuntimeException) 534 { 535 return sal_False; 536 } 537 // ------------------------------------------------------------------------- 538 sal_Bool OEvoabDatabaseMetaData::impl_supportsSchemasInDataManipulation_throw( ) 539 { 540 return sal_False; 541 } 542 // ------------------------------------------------------------------------- 543 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsANSI92FullSQL( ) throw(SQLException, RuntimeException) 544 { 545 return sal_False; 546 } 547 // ------------------------------------------------------------------------- 548 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsANSI92EntryLevelSQL( ) throw(SQLException, RuntimeException) 549 { 550 return sal_True; // should be supported at least 551 } 552 // ------------------------------------------------------------------------- 553 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsIntegrityEnhancementFacility( ) throw(SQLException, RuntimeException) 554 { 555 return sal_False; 556 } 557 // ------------------------------------------------------------------------- 558 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsSchemasInIndexDefinitions( ) throw(SQLException, RuntimeException) 559 { 560 return sal_False; 561 } 562 // ------------------------------------------------------------------------- 563 sal_Bool OEvoabDatabaseMetaData::impl_supportsSchemasInTableDefinitions_throw( ) 564 { 565 return sal_False; 566 } 567 // ------------------------------------------------------------------------- 568 sal_Bool OEvoabDatabaseMetaData::impl_supportsCatalogsInTableDefinitions_throw( ) 569 { 570 return sal_False; 571 } 572 // ------------------------------------------------------------------------- 573 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsCatalogsInIndexDefinitions( ) throw(SQLException, RuntimeException) 574 { 575 return sal_False; 576 } 577 // ------------------------------------------------------------------------- 578 sal_Bool OEvoabDatabaseMetaData::impl_supportsCatalogsInDataManipulation_throw( ) 579 { 580 return sal_False; 581 } 582 // ------------------------------------------------------------------------- 583 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsOuterJoins( ) throw(SQLException, RuntimeException) 584 { 585 return sal_False; 586 } 587 // ------------------------------------------------------------------------- 588 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxStatementLength( ) throw(SQLException, RuntimeException) 589 { 590 return 0;// 0 means no limit 591 } 592 // ------------------------------------------------------------------------- 593 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxProcedureNameLength( ) throw(SQLException, RuntimeException) 594 { 595 return 0;// 0 means no limit 596 } 597 // ------------------------------------------------------------------------- 598 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxSchemaNameLength( ) throw(SQLException, RuntimeException) 599 { 600 return 0;// 0 means no limit 601 } 602 // ------------------------------------------------------------------------- 603 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsTransactions( ) throw(SQLException, RuntimeException) 604 { 605 return sal_False; 606 } 607 // ------------------------------------------------------------------------- 608 sal_Bool SAL_CALL OEvoabDatabaseMetaData::allProceduresAreCallable( ) throw(SQLException, RuntimeException) 609 { 610 return sal_False; 611 } 612 // ------------------------------------------------------------------------- 613 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsStoredProcedures( ) throw(SQLException, RuntimeException) 614 { 615 return sal_False; 616 } 617 // ------------------------------------------------------------------------- 618 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsSelectForUpdate( ) throw(SQLException, RuntimeException) 619 { 620 return sal_False; 621 } 622 // ------------------------------------------------------------------------- 623 sal_Bool SAL_CALL OEvoabDatabaseMetaData::allTablesAreSelectable( ) throw(SQLException, RuntimeException) 624 { 625 // We allow you to select from any table. 626 return sal_True; 627 } 628 // ------------------------------------------------------------------------- 629 sal_Bool SAL_CALL OEvoabDatabaseMetaData::isReadOnly( ) throw(SQLException, RuntimeException) 630 { 631 // For now definately read-only, no support for update/delete 632 return sal_True; 633 } 634 // ------------------------------------------------------------------------- 635 sal_Bool SAL_CALL OEvoabDatabaseMetaData::usesLocalFiles( ) throw(SQLException, RuntimeException) 636 { 637 return sal_False; 638 } 639 // ------------------------------------------------------------------------- 640 sal_Bool SAL_CALL OEvoabDatabaseMetaData::usesLocalFilePerTable( ) throw(SQLException, RuntimeException) 641 { 642 return sal_False; 643 } 644 // ------------------------------------------------------------------------- 645 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsTypeConversion( ) throw(SQLException, RuntimeException) 646 { 647 return sal_False; 648 } 649 // ------------------------------------------------------------------------- 650 sal_Bool SAL_CALL OEvoabDatabaseMetaData::nullPlusNonNullIsNull( ) throw(SQLException, RuntimeException) 651 { 652 return sal_False; 653 } 654 // ------------------------------------------------------------------------- 655 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsColumnAliasing( ) throw(SQLException, RuntimeException) 656 { 657 // todo add Support for this. 658 return sal_False; 659 } 660 // ------------------------------------------------------------------------- 661 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsTableCorrelationNames( ) throw(SQLException, RuntimeException) 662 { 663 return sal_False; 664 } 665 // ------------------------------------------------------------------------- 666 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsConvert( sal_Int32 /*fromType*/, sal_Int32 /*toType*/ ) throw(SQLException, RuntimeException) 667 { 668 return sal_False; 669 } 670 // ------------------------------------------------------------------------- 671 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsExpressionsInOrderBy( ) throw(SQLException, RuntimeException) 672 { 673 return sal_False; 674 } 675 // ------------------------------------------------------------------------- 676 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsGroupBy( ) throw(SQLException, RuntimeException) 677 { 678 return sal_False; 679 } 680 // ------------------------------------------------------------------------- 681 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsGroupByBeyondSelect( ) throw(SQLException, RuntimeException) 682 { 683 return sal_False; 684 } 685 // ------------------------------------------------------------------------- 686 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsGroupByUnrelated( ) throw(SQLException, RuntimeException) 687 { 688 return sal_False; 689 } 690 // ------------------------------------------------------------------------- 691 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsMultipleTransactions( ) throw(SQLException, RuntimeException) 692 { 693 return sal_False; 694 } 695 // ------------------------------------------------------------------------- 696 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsMultipleResultSets( ) throw(SQLException, RuntimeException) 697 { 698 return sal_False; 699 } 700 // ------------------------------------------------------------------------- 701 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsLikeEscapeClause( ) throw(SQLException, RuntimeException) 702 { 703 return sal_False; 704 } 705 // ------------------------------------------------------------------------- 706 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsOrderByUnrelated( ) throw(SQLException, RuntimeException) 707 { 708 return sal_False; 709 } 710 // ------------------------------------------------------------------------- 711 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsUnion( ) throw(SQLException, RuntimeException) 712 { 713 return sal_False; 714 } 715 // ------------------------------------------------------------------------- 716 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsUnionAll( ) throw(SQLException, RuntimeException) 717 { 718 return sal_False; 719 } 720 // ------------------------------------------------------------------------- 721 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsMixedCaseIdentifiers( ) throw(SQLException, RuntimeException) 722 { 723 return sal_False; 724 } 725 // ------------------------------------------------------------------------- 726 sal_Bool OEvoabDatabaseMetaData::impl_supportsMixedCaseQuotedIdentifiers_throw( ) 727 { 728 // Any case may be used 729 return sal_True; 730 } 731 // ------------------------------------------------------------------------- 732 sal_Bool SAL_CALL OEvoabDatabaseMetaData::nullsAreSortedAtEnd( ) throw(SQLException, RuntimeException) 733 { 734 return sal_False; 735 } 736 // ------------------------------------------------------------------------- 737 sal_Bool SAL_CALL OEvoabDatabaseMetaData::nullsAreSortedAtStart( ) throw(SQLException, RuntimeException) 738 { 739 return sal_True; 740 } 741 // ------------------------------------------------------------------------- 742 sal_Bool SAL_CALL OEvoabDatabaseMetaData::nullsAreSortedHigh( ) throw(SQLException, RuntimeException) 743 { 744 return sal_False; 745 } 746 // ------------------------------------------------------------------------- 747 sal_Bool SAL_CALL OEvoabDatabaseMetaData::nullsAreSortedLow( ) throw(SQLException, RuntimeException) 748 { 749 return sal_True; 750 } 751 // ------------------------------------------------------------------------- 752 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsSchemasInProcedureCalls( ) throw(SQLException, RuntimeException) 753 { 754 return sal_False; 755 } 756 // ------------------------------------------------------------------------- 757 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsSchemasInPrivilegeDefinitions( ) throw(SQLException, RuntimeException) 758 { 759 return sal_False; 760 } 761 // ------------------------------------------------------------------------- 762 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsCatalogsInProcedureCalls( ) throw(SQLException, RuntimeException) 763 { 764 return sal_False; 765 } 766 // ------------------------------------------------------------------------- 767 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsCatalogsInPrivilegeDefinitions( ) throw(SQLException, RuntimeException) 768 { 769 return sal_False; 770 } 771 // ------------------------------------------------------------------------- 772 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsCorrelatedSubqueries( ) throw(SQLException, RuntimeException) 773 { 774 return sal_False; 775 } 776 // ------------------------------------------------------------------------- 777 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsSubqueriesInComparisons( ) throw(SQLException, RuntimeException) 778 { 779 return sal_False; 780 } 781 // ------------------------------------------------------------------------- 782 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsSubqueriesInExists( ) throw(SQLException, RuntimeException) 783 { 784 return sal_False; 785 } 786 // ------------------------------------------------------------------------- 787 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsSubqueriesInIns( ) throw(SQLException, RuntimeException) 788 { 789 return sal_False; 790 } 791 // ------------------------------------------------------------------------- 792 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsSubqueriesInQuantifieds( ) throw(SQLException, RuntimeException) 793 { 794 return sal_False; 795 } 796 // ------------------------------------------------------------------------- 797 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsANSI92IntermediateSQL( ) throw(SQLException, RuntimeException) 798 { 799 return sal_False; 800 } 801 // ------------------------------------------------------------------------- 802 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getURL( ) throw(SQLException, RuntimeException) 803 { 804 ::osl::MutexGuard aGuard( m_aMutex ); 805 806 return m_pConnection->getURL(); 807 } 808 // ------------------------------------------------------------------------- 809 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getUserName( ) throw(SQLException, RuntimeException) 810 { 811 ::rtl::OUString aValue; 812 return aValue; 813 } 814 // ------------------------------------------------------------------------- 815 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getDriverName( ) throw(SQLException, RuntimeException) 816 { 817 ::rtl::OUString aValue; 818 return aValue; 819 } 820 // ------------------------------------------------------------------------- 821 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getDriverVersion() throw(SQLException, RuntimeException) 822 { 823 ::rtl::OUString aValue = ::rtl::OUString::valueOf((sal_Int32)1); 824 return aValue; 825 } 826 // ------------------------------------------------------------------------- 827 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getDatabaseProductVersion( ) throw(SQLException, RuntimeException) 828 { 829 ::rtl::OUString aValue = ::rtl::OUString::valueOf((sal_Int32)0); 830 return aValue; 831 } 832 // ------------------------------------------------------------------------- 833 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getDatabaseProductName( ) throw(SQLException, RuntimeException) 834 { 835 ::rtl::OUString aValue; 836 return aValue; 837 } 838 // ------------------------------------------------------------------------- 839 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getProcedureTerm( ) throw(SQLException, RuntimeException) 840 { 841 ::rtl::OUString aValue; 842 return aValue; 843 } 844 // ------------------------------------------------------------------------- 845 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getSchemaTerm( ) throw(SQLException, RuntimeException) 846 { 847 ::rtl::OUString aValue; 848 return aValue; 849 } 850 // ------------------------------------------------------------------------- 851 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getDriverMajorVersion( ) throw(RuntimeException) 852 { 853 return 1; 854 } 855 // ------------------------------------------------------------------------- 856 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getDefaultTransactionIsolation( ) throw(SQLException, RuntimeException) 857 { 858 return TransactionIsolation::NONE; 859 } 860 // ------------------------------------------------------------------------- 861 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getDriverMinorVersion( ) throw(RuntimeException) 862 { 863 return 0; 864 } 865 // ------------------------------------------------------------------------- 866 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getSQLKeywords( ) throw(SQLException, RuntimeException) 867 { 868 ::rtl::OUString aValue; 869 return aValue; 870 } 871 // ------------------------------------------------------------------------- 872 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getSearchStringEscape( ) throw(SQLException, RuntimeException) 873 { 874 ::rtl::OUString aValue; 875 return aValue; 876 } 877 // ------------------------------------------------------------------------- 878 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getStringFunctions( ) throw(SQLException, RuntimeException) 879 { 880 return ::rtl::OUString(); 881 } 882 // ------------------------------------------------------------------------- 883 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getTimeDateFunctions( ) throw(SQLException, RuntimeException) 884 { 885 return ::rtl::OUString(); 886 } 887 // ------------------------------------------------------------------------- 888 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getSystemFunctions( ) throw(SQLException, RuntimeException) 889 { 890 return ::rtl::OUString(); 891 } 892 // ------------------------------------------------------------------------- 893 ::rtl::OUString SAL_CALL OEvoabDatabaseMetaData::getNumericFunctions( ) throw(SQLException, RuntimeException) 894 { 895 return ::rtl::OUString(); 896 } 897 // ------------------------------------------------------------------------- 898 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsExtendedSQLGrammar( ) throw(SQLException, RuntimeException) 899 { 900 return sal_False; 901 } 902 // ------------------------------------------------------------------------- 903 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsCoreSQLGrammar( ) throw(SQLException, RuntimeException) 904 { 905 return sal_False; 906 } 907 // ------------------------------------------------------------------------- 908 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsMinimumSQLGrammar( ) throw(SQLException, RuntimeException) 909 { 910 return sal_True; 911 } 912 // ------------------------------------------------------------------------- 913 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsFullOuterJoins( ) throw(SQLException, RuntimeException) 914 { 915 return sal_False; 916 } 917 // ------------------------------------------------------------------------- 918 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsLimitedOuterJoins( ) throw(SQLException, RuntimeException) 919 { 920 return sal_False; 921 } 922 // ------------------------------------------------------------------------- 923 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxColumnsInGroupBy( ) throw(SQLException, RuntimeException) 924 { 925 return 0;// 0 means no limit 926 } 927 // ------------------------------------------------------------------------- 928 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxColumnsInOrderBy( ) throw(SQLException, RuntimeException) 929 { 930 return 0;// 0 means no limit 931 } 932 // ------------------------------------------------------------------------- 933 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxColumnsInSelect( ) throw(SQLException, RuntimeException) 934 { 935 return 0;// 0 means no limit 936 } 937 // ------------------------------------------------------------------------- 938 sal_Int32 SAL_CALL OEvoabDatabaseMetaData::getMaxUserNameLength( ) throw(SQLException, RuntimeException) 939 { 940 return 0;// 0 means no limit 941 } 942 // ------------------------------------------------------------------------- 943 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsResultSetType( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException) 944 { 945 return sal_False; 946 } 947 // ------------------------------------------------------------------------- 948 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsResultSetConcurrency( sal_Int32 /*setType*/, sal_Int32 /*concurrency*/ ) throw(SQLException, RuntimeException) 949 { 950 return sal_False; 951 } 952 // ------------------------------------------------------------------------- 953 sal_Bool SAL_CALL OEvoabDatabaseMetaData::ownUpdatesAreVisible( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException) 954 { 955 return sal_False; 956 } 957 // ------------------------------------------------------------------------- 958 sal_Bool SAL_CALL OEvoabDatabaseMetaData::ownDeletesAreVisible( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException) 959 { 960 return sal_False; 961 } 962 // ------------------------------------------------------------------------- 963 sal_Bool SAL_CALL OEvoabDatabaseMetaData::ownInsertsAreVisible( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException) 964 { 965 return sal_False; 966 } 967 // ------------------------------------------------------------------------- 968 sal_Bool SAL_CALL OEvoabDatabaseMetaData::othersUpdatesAreVisible( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException) 969 { 970 return sal_False; 971 } 972 // ------------------------------------------------------------------------- 973 sal_Bool SAL_CALL OEvoabDatabaseMetaData::othersDeletesAreVisible( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException) 974 { 975 return sal_False; 976 } 977 // ------------------------------------------------------------------------- 978 sal_Bool SAL_CALL OEvoabDatabaseMetaData::othersInsertsAreVisible( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException) 979 { 980 return sal_False; 981 } 982 // ------------------------------------------------------------------------- 983 sal_Bool SAL_CALL OEvoabDatabaseMetaData::updatesAreDetected( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException) 984 { 985 return sal_False; 986 } 987 // ------------------------------------------------------------------------- 988 sal_Bool SAL_CALL OEvoabDatabaseMetaData::deletesAreDetected( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException) 989 { 990 return sal_False; 991 } 992 // ------------------------------------------------------------------------- 993 sal_Bool SAL_CALL OEvoabDatabaseMetaData::insertsAreDetected( sal_Int32 /*setType*/ ) throw(SQLException, RuntimeException) 994 { 995 return sal_False; 996 } 997 // ------------------------------------------------------------------------- 998 sal_Bool SAL_CALL OEvoabDatabaseMetaData::supportsBatchUpdates( ) throw(SQLException, RuntimeException) 999 { 1000 return sal_False; 1001 } 1002 // ------------------------------------------------------------------------- 1003 // here follow all methods which return a resultset 1004 // the first methods is an example implementation how to use this resultset 1005 // of course you could implement it on your and you should do this because 1006 // the general way is more memory expensive 1007 // ------------------------------------------------------------------------- 1008 Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTableTypes( ) throw(SQLException, RuntimeException) 1009 { 1010 /* Dont need to change as evoab driver supports only table */ 1011 1012 // there exists no possibility to get table types so we have to check 1013 static ::rtl::OUString sTableTypes[] = 1014 { 1015 ::rtl::OUString::createFromAscii("TABLE"), 1016 // Currently we only support a 'TABLE' nothing more complex 1017 }; 1018 ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTableTypes); 1019 Reference< XResultSet > xRef = pResult; 1020 1021 // here we fill the rows which should be visible when ask for data from the resultset returned here 1022 sal_Int32 nSize = sizeof(sTableTypes) / sizeof(::rtl::OUString); 1023 ODatabaseMetaDataResultSet::ORows aRows; 1024 for(sal_Int32 i=0;i < nSize;++i) 1025 { 1026 ODatabaseMetaDataResultSet::ORow aRow; 1027 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); 1028 aRow.push_back(new ORowSetValueDecorator(sTableTypes[i])); 1029 1030 // bound row 1031 aRows.push_back(aRow); 1032 } 1033 // here we set the rows at the resultset 1034 pResult->setRows(aRows); 1035 return xRef; 1036 } 1037 // ------------------------------------------------------------------------- 1038 Reference< XResultSet > OEvoabDatabaseMetaData::impl_getTypeInfo_throw( ) 1039 { 1040 /* 1041 * Return the proper type information required by evo driver 1042 */ 1043 1044 ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTypeInfo); 1045 1046 Reference< XResultSet > xResultSet = pResultSet; 1047 static ODatabaseMetaDataResultSet::ORows aRows; 1048 1049 if(aRows.empty()) 1050 { 1051 ODatabaseMetaDataResultSet::ORow aRow; 1052 aRow.reserve(19); 1053 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); 1054 aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii("VARCHAR"))); 1055 aRow.push_back(new ORowSetValueDecorator(DataType::VARCHAR)); 1056 aRow.push_back(new ORowSetValueDecorator((sal_Int32)s_nCHAR_OCTET_LENGTH)); 1057 aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); 1058 aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); 1059 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); 1060 // aRow.push_back(new ORowSetValueDecorator((sal_Int32)ColumnValue::NULLABLE)); 1061 aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); 1062 aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); 1063 aRow.push_back(new ORowSetValueDecorator((sal_Int32)ColumnSearch::FULL)); 1064 aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); 1065 aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); 1066 aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); 1067 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); 1068 aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); 1069 aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); 1070 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); 1071 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); 1072 aRow.push_back(new ORowSetValueDecorator((sal_Int32)10)); 1073 1074 aRows.push_back(aRow); 1075 1076 aRow[1] = new ORowSetValueDecorator(::rtl::OUString::createFromAscii("VARCHAR")); 1077 aRow[2] = new ORowSetValueDecorator(DataType::VARCHAR); 1078 aRow[3] = new ORowSetValueDecorator((sal_Int32)65535); 1079 aRows.push_back(aRow); 1080 } 1081 pResultSet->setRows(aRows); 1082 return xResultSet; 1083 } 1084 // ------------------------------------------------------------------------- 1085 Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getColumns( 1086 const Any& /*catalog*/, const ::rtl::OUString& /*schemaPattern*/, const ::rtl::OUString& /*tableNamePattern*/, 1087 const ::rtl::OUString& columnNamePattern ) throw(SQLException, RuntimeException) 1088 { 1089 // this returns an empty resultset where the column-names are already set 1090 // in special the metadata of the resultset already returns the right columns 1091 ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eColumns ); 1092 Reference< XResultSet > xResultSet = pResultSet; 1093 pResultSet->setRows( getColumnRows( columnNamePattern ) ); 1094 return xResultSet; 1095 } 1096 // ------------------------------------------------------------------------- 1097 Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTables( 1098 const Any& /*catalog*/, const ::rtl::OUString& /*schemaPattern*/, 1099 const ::rtl::OUString& /*tableNamePattern*/, const Sequence< ::rtl::OUString >& types ) throw(SQLException, RuntimeException) 1100 { 1101 ::osl::MutexGuard aGuard( m_aMutex ); 1102 1103 ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTableTypes); 1104 Reference< XResultSet > xRef = pResult; 1105 1106 // check if any type is given 1107 // when no types are given then we have to return all tables e.g. TABLE 1108 1109 const ::rtl::OUString aTable(::rtl::OUString::createFromAscii("TABLE")); 1110 1111 sal_Bool bTableFound = sal_True; 1112 sal_Int32 nLength = types.getLength(); 1113 if(nLength) 1114 { 1115 bTableFound = sal_False; 1116 1117 const ::rtl::OUString* pBegin = types.getConstArray(); 1118 const ::rtl::OUString* pEnd = pBegin + nLength; 1119 for(;pBegin != pEnd;++pBegin) 1120 { 1121 if(*pBegin == aTable) 1122 { 1123 bTableFound = sal_True; 1124 break; 1125 } 1126 } 1127 } 1128 if(!bTableFound) 1129 return xRef; 1130 1131 ODatabaseMetaDataResultSet::ORows aRows; 1132 1133 ESourceList *pSourceList; 1134 if( !e_book_get_addressbooks (&pSourceList, NULL) ) 1135 pSourceList = NULL; 1136 1137 GSList *g; 1138 for( g = e_source_list_peek_groups( pSourceList ); g; g = g->next) 1139 { 1140 GSList *s; 1141 const char *p = e_source_group_peek_base_uri(E_SOURCE_GROUP(g->data)); 1142 1143 switch (m_pConnection->getSDBCAddressType()) { 1144 case SDBCAddress::EVO_GWISE: 1145 if (0==strncmp( "groupwise://", p, 11 )) 1146 break; 1147 else 1148 continue; 1149 case SDBCAddress::EVO_LOCAL: 1150 if (0==strncmp( "file://", p, 6 )) 1151 break; 1152 else 1153 continue; 1154 case SDBCAddress::EVO_LDAP: 1155 if (0==strncmp( "ldap://", p, 6 )) 1156 break; 1157 else 1158 continue; 1159 case SDBCAddress::Unknown: 1160 break; 1161 } 1162 for (s = e_source_group_peek_sources (E_SOURCE_GROUP (g->data)); s; s = s->next) 1163 { 1164 ESource *pSource = E_SOURCE (s->data); 1165 1166 rtl::OUString aName = rtl::OStringToOUString( e_source_peek_name( pSource ), 1167 RTL_TEXTENCODING_UTF8 ); 1168 1169 ODatabaseMetaDataResultSet::ORow aRow(3); 1170 aRow.reserve(6); 1171 aRow.push_back(new ORowSetValueDecorator(aName)); 1172 aRow.push_back(new ORowSetValueDecorator(aTable)); 1173 aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); 1174 aRows.push_back(aRow); 1175 } 1176 } 1177 1178 pResult->setRows(aRows); 1179 1180 return xRef; 1181 } 1182 // ------------------------------------------------------------------------- 1183 Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getUDTs( const Any& /*catalog*/, const ::rtl::OUString& /*schemaPattern*/, const ::rtl::OUString& /*typeNamePattern*/, const Sequence< sal_Int32 >& /*types*/ ) throw(SQLException, RuntimeException) 1184 { 1185 ::dbtools::throwFeatureNotImplementedException( "XDatabaseMetaDaza::getUDTs", *this ); 1186 return NULL; 1187 } 1188 // ----------------------------------------------------------------------------- 1189