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]

Reply via email to