[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    koffice/kexi/kexidb
From:       Jaroslaw Staniek <js () iidea ! pl>
Date:       2004-11-02 14:41:54
Message-ID: 20041102144154.2526E16BD7 () office ! kde ! org
[Download RAW message or body]

CVS commit by staniek: 

KexiDB
- DriverBehaviour: SELECT_1_SUBQUERY_SUPPORTED added, 
  used in Connection::resultExists() 
   --this fixes mysql (and probably pgsql)


  M +8 -1      connection.cpp   1.106
  M +1 -0      driver.cpp   1.33
  M +4 -0      driver_p.h   1.15
  M +1 -0      drivers/sqlite/sqliteconnection.cpp   1.23
  M +1 -0      drivers/sqlite/sqlitedriver.cpp   1.21


--- koffice/kexi/kexidb/connection.cpp  #1.105:1.106
@@ -1782,5 +1782,12 @@ bool Connection::resultExists(const QStr
 {
         KexiDB::Cursor *cursor;
+        //optimization
+        if (m_driver->beh->SELECT_1_SUBQUERY_SUPPORTED) {
+                //this is at least for sqlite
         m_sql = QString("SELECT 1 FROM (") + sql + ") LIMIT 1"; // is this safe?;
+        }
+        else {
+                m_sql = sql + " LIMIT 1"; //not always safe!
+        }
         if (!(cursor = executeQuery( m_sql ))) {
                 KexiDBDbg << "Connection::querySingleRecord(): !executeQuery()" << endl;

--- koffice/kexi/kexidb/driver.cpp  #1.32:1.33
@@ -90,4 +90,5 @@ DriverBehaviour::DriverBehaviour()
         , USING_DATABASE_REQUIRED_TO_CONNECT(true)
         , _1ST_ROW_READ_AHEAD_REQUIRED_TO_KNOW_IF_THE_RESULT_IS_EMPTY(false)
+        , SELECT_1_SUBQUERY_SUPPORTED(false)
 {
 }

--- koffice/kexi/kexidb/driver_p.h  #1.14:1.15
@@ -105,4 +105,8 @@ class KEXI_DB_EXPORT DriverBehaviour
          The flag is used in Cursor::open(). By default this flag is false. */
         bool _1ST_ROW_READ_AHEAD_REQUIRED_TO_KNOW_IF_THE_RESULT_IS_EMPTY : 1;
+
+        /*! True if "SELECT 1 from (subquery)" is supported. False by default.
+         Used in Connection::resultExists() for optimization. It's set to true for SQLite driver. */
+        bool SELECT_1_SUBQUERY_SUPPORTED : 1;
 };
 

--- koffice/kexi/kexidb/drivers/sqlite/sqliteconnection.cpp  #1.22:1.23
@@ -122,4 +122,5 @@ bool SQLiteConnection::drv_createDatabas
 bool SQLiteConnection::drv_useDatabase( const QString &/*dbName*/ )
 {
+        KexiDBDrvDbg << "drv_useDatabase(): " << m_data->fileName() << endl;
 #ifdef SQLITE2
         d->data = sqlite_open( QFile::encodeName( m_data->fileName() ), 0/*mode: unused*/, 

--- koffice/kexi/kexidb/drivers/sqlite/sqlitedriver.cpp  #1.20:1.21
@@ -62,4 +62,5 @@ SQLiteDriver::SQLiteDriver( QObject *par
         beh->_1ST_ROW_READ_AHEAD_REQUIRED_TO_KNOW_IF_THE_RESULT_IS_EMPTY=true;
         beh->QUOTATION_MARKS_FOR_IDENTIFIER='"';
+        beh->SELECT_1_SUBQUERY_SUPPORTED = true;
 
         //predefined properties


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic