Tag: cws_src680_sqlite User: aklitzing Date: 2006/08/18 15:48:29 Modified: dba/connectivity/source/drivers/sqlite3/sqDatabaseMetaData.cxx
Log: * getSchema() added * getPrimaryKeys() added but disabled because of segfault * behaviour of getColumn() corrected File Changes: Directory: /dba/connectivity/source/drivers/sqlite3/ ==================================================== File [changed]: sqDatabaseMetaData.cxx Url: http://dba.openoffice.org/source/browse/dba/connectivity/source/drivers/sqlite3/sqDatabaseMetaData.cxx?r1=1.1.2.3&r2=1.1.2.4 Delta lines: +73 -16 --------------------- --- sqDatabaseMetaData.cxx 18 Aug 2006 19:05:16 -0000 1.1.2.3 +++ sqDatabaseMetaData.cxx 18 Aug 2006 22:48:26 -0000 1.1.2.4 @@ -4,9 +4,9 @@ * * $RCSfile: sqDatabaseMetaData.cxx,v $ * - * $Revision: 1.1.2.3 $ + * $Revision: 1.1.2.4 $ * - * last change: $Author: aklitzing $ $Date: 2006/08/18 19:05:16 $ + * last change: $Author: aklitzing $ $Date: 2006/08/18 22:48:26 $ * * Original contributor: André Klitzing * @@ -870,6 +870,29 @@ ODatabaseMetaDataResultSet *pResultSet = new ODatabaseMetaDataResultSet(); Reference<XResultSet> xResultSet = pResultSet; pResultSet->setSchemasMap(); + ODatabaseMetaDataResultSet::ORows rRows; + + sqDB* db = m_pConnection->getDB(); + sqQueryPrepared* query = db->getQuery("pragma database_list"); + + // pragma database_list + // index[0] - Number + // index[1] - Database-Name + // index[2] - Filename of database + + for (query->execute(); !query->isDone(); query->nextRow()) + { + ::rtl::OUString name = ::rtl::OUString::createFromAscii(query->getText(1)); + if(!name.compareTo(::rtl::OUString::createFromAscii("temp"), 4)) // do not add the temporary database of SQLite + { + ODatabaseMetaDataResultSet::ORow aRow(1); + aRow.push_back(new ORowSetValueDecorator(name)); + rRows.push_back(aRow); + } + } + db->free(query); + + pResultSet->setRows(rRows); return xResultSet; } // ------------------------------------------------------------------------- @@ -937,28 +960,30 @@ for(query->execute(); !query->isDone(); query->nextRow()) { - const char* tmp; // to avoid stack-usage + const char* tmp = query->getText(1); // to avoid stack-usage + if(!columnNamePattern.equalsAscii("%") && (tmp == 0 || !columnNamePattern.equalsAscii(tmp))) + continue; + bool nullable = query->getInteger(3) != 99; // 99 means NOT NULL - see above ODatabaseMetaDataResultSet::ORow aRow(1); // CATALOG - aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii(""))); + aRow.push_back(new ORowSetValueDecorator()); // SCHEMA - aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii(""))); //!< \todo maybe it is possible to add here 'main' or the attached databases + aRow.push_back(new ORowSetValueDecorator()); //!< \todo maybe it is possible to add here 'main' or the attached databases // TABLE_NAME aRow.push_back(new ORowSetValueDecorator(tableNamePattern)); // COLUMN_NAME - tmp = query->getText(1); - if (tmp == 0) + if (tmp == 0) // tmp = query->getText(1); --> see above aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); else aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii(tmp))); // DATA_TYPE - aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::valueOf(getColumns_ColType(query->getText(2)), 10))); + aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::valueOf( getColumns_ColType(query->getText(2) )))); // TYPE_NAME tmp = query->getText(2); @@ -978,12 +1003,12 @@ // NULLABLE aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii(nullable ? "NULLABLE" : "NO_NULLS"))); // REMARKS - aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii(""))); + aRow.push_back(new ORowSetValueDecorator()); // COLUMN_DEF tmp = query->getText(4); if (query->isNull(4)) - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); + aRow.push_back(new ORowSetValueDecorator()); else aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii(tmp))); @@ -994,7 +1019,7 @@ // CHAR_OCTET_LENGTH aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii("65535"))); // ORDINAL_POSITION - aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::valueOf((sal_Int32) (query->getInteger(0) + 1), 10))); + aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::valueOf((sal_Int32) (query->getInteger(0) + 1)))); // IS_NULLABLE aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii(nullable ? "YES" : "NO"))); @@ -1105,14 +1130,46 @@ return xResultSet; } // ------------------------------------------------------------------------- -//! \todo ausprogrammieren Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys( const Any& catalog, const ::rtl::OUString& schema, const ::rtl::OUString& table ) throw(SQLException, RuntimeException) { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(); - Reference< XResultSet > xRef = pResult; - pResult->setPrimaryKeysMap(); - return xRef; + ::osl::MutexGuard aGuard(m_aMutex); + ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet(); + Reference< XResultSet > xResultSet = pResultSet; + pResultSet->setPrimaryKeysMap();/* + ODatabaseMetaDataResultSet::ORows rRows; + + const char* tablename = ::rtl::OUStringToOString(table, RTL_TEXTENCODING_UTF8).getStr(); + sqDB* db = m_pConnection->getDB(); + + sqQueryPrepared* query = db->getQuery(::rtl::OString("pragma table_info(%q)"), tablename); + + sal_Int32 key_seq=0; //!< \todo needs to be replaced with 'pragma index_list()' and 'pragma index_info()' + for (query->execute(); !query->isDone(); query->nextRow()) + { + if(query->getInteger(5) == 1) // this column is part of the primary key + { + ODatabaseMetaDataResultSet::ORow aRow(6); + // TABLE_CATALOG + aRow.push_back(new ORowSetValueDecorator()); + // TABLE_SCHEMA + aRow.push_back(new ORowSetValueDecorator(schema)); + // TABLE_NAME + aRow.push_back(new ORowSetValueDecorator(table)); + // COLUMN_NAME + aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::createFromAscii(query->getText(1)))); + // KEY_SEQ + aRow.push_back(new ORowSetValueDecorator(::rtl::OUString::valueOf(key_seq++, 10))); + // PK_NAME + aRow.push_back(new ORowSetValueDecorator()); + + rRows.push_back(aRow); + } + } + db->free(query); + + pResultSet->setRows(rRows);*/ + return xResultSet; } // ------------------------------------------------------------------------- Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo( --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
