[QGIS Commit] r10529 - in trunk/qgis/src: core providers/spatialite

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sat Apr 11 13:27:13 EDT 2009


Author: esseffe
Date: 2009-04-11 13:27:13 -0400 (Sat, 11 Apr 2009)
New Revision: 10529

Modified:
   trunk/qgis/src/core/CMakeLists.txt
   trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp
Log:
spatialite data provider - fixup


Modified: trunk/qgis/src/core/CMakeLists.txt
===================================================================
--- trunk/qgis/src/core/CMakeLists.txt	2009-04-11 10:35:28 UTC (rev 10528)
+++ trunk/qgis/src/core/CMakeLists.txt	2009-04-11 17:27:13 UTC (rev 10529)
@@ -117,6 +117,15 @@
     ADD_DEFINITIONS(-DDLL_EXPORT)
   ENDIF (WIN32)
 
+#
+# sqlite3 requires some extraflags to be defined
+# in order to support:
+# - huge database > 2 GB
+# - RTree Spatial Index
+#
+  ADD_DEFINITIONS(-D_LARGE_FILE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1)
+  ADD_DEFINITIONS(-DSQLITE_ENABLE_RTREE=1)
+
   SET(QGIS_CORE_SRCS
     ${QGIS_CORE_SRCS}
     spatialite/sqlite3.c

Modified: trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp
===================================================================
--- trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp	2009-04-11 10:35:28 UTC (rev 10528)
+++ trunk/qgis/src/providers/spatialite/qgsspatialiteprovider.cpp	2009-04-11 17:27:13 UTC (rev 10529)
@@ -128,13 +128,15 @@
   char *errMsg = NULL;
   QString pkName;
   int pkCount = 0;
+  char xSql[1024];
 
   attributeFields.clear();
   primaryKey.clear();
 
   QString sql = QString( "PRAGMA table_info(%1)" ).arg( quotedValue( mTableName ) );
 
-  ret = sqlite3_get_table( sqliteHandle, sql.toUtf8(), &results, &rows, &columns, &errMsg );
+  strcpy(xSql, sql.toUtf8().constData());
+  ret = sqlite3_get_table( sqliteHandle, xSql, &results, &rows, &columns, &errMsg );
   if ( ret != SQLITE_OK )
     goto error;
   if ( rows < 1 )
@@ -208,6 +210,8 @@
 bool QgsSpatiaLiteProvider::featureAtId( int featureId, QgsFeature & feature, bool fetchGeometry, QgsAttributeList fetchAttributes )
 {
   sqlite3_stmt *stmt = NULL;
+  char xSql[1024];
+  char geomName[128];
 
   QString sql = "SELECT ROWID";
   for ( QgsAttributeList::const_iterator it = fetchAttributes.constBegin(); it != fetchAttributes.constEnd(); ++it )
@@ -223,7 +227,7 @@
   }
   sql += QString( " FROM %1 WHERE ROWID = %2" ).arg( quotedValue( mTableName ) ).arg( featureId );
 
-  QByteArray xSql = sql.toUtf8();
+  strcpy(xSql, sql.toUtf8().constData());
   if ( sqlite3_prepare_v2( sqliteHandle, xSql, strlen( xSql ), &stmt, NULL ) != SQLITE_OK )
   {
     // some error occurred
@@ -304,7 +308,7 @@
         if ( mFetchGeom )
         {
           QString geoCol = QString( "AsBinary(%1)" ).arg( geometryColumn );
-          QByteArray geomName = geoCol.toUtf8();
+          strcpy(geomName, geoCol.toUtf8().constData());
           if ( strcasecmp( geomName, sqlite3_column_name( stmt, ic ) ) == 0 )
           {
             if ( sqlite3_column_type( stmt, ic ) == SQLITE_BLOB )
@@ -342,6 +346,9 @@
 
 bool QgsSpatiaLiteProvider::nextFeature( QgsFeature & feature )
 {
+  char xSql[1024];
+  char geomName[128];
+
   feature.setValid( false );
   if ( !valid )
   {
@@ -427,7 +434,7 @@
         if ( mFetchGeom )
         {
           QString geoCol = QString( "AsBinary(%1)" ).arg( geometryColumn );
-          QByteArray geomName = geoCol.toUtf8();
+          strcpy(geomName, geoCol.toUtf8().constData());
           if ( strcasecmp( geomName, sqlite3_column_name( sqliteStatement, ic ) ) == 0 )
           {
             if ( sqlite3_column_type( sqliteStatement, ic ) == SQLITE_BLOB )
@@ -467,6 +474,8 @@
 void QgsSpatiaLiteProvider::select( QgsAttributeList fetchAttributes, QgsRectangle rect, bool fetchGeometry, bool useIntersect )
 {
 // preparing the SQL statement
+  char xSql[1024];
+
   if ( !valid )
   {
     QgsLogger::critical( "Read attempt on an invalid SpatiaLite data source" );
@@ -545,7 +554,7 @@
 
   mFetchGeom = fetchGeometry;
   mAttributesToFetch = fetchAttributes;
-  QByteArray xSql = sql.toUtf8();
+  strcpy(xSql, sql.toUtf8().constData());
   if ( sqlite3_prepare_v2( sqliteHandle, xSql, strlen( xSql ), &sqliteStatement, NULL ) != SQLITE_OK )
   {
     // some error occurred
@@ -645,13 +654,15 @@
   int columns;
   char *errMsg = NULL;
   QString minValue;
+  char xSql[1024];
 
   // get the field name
   const QgsField & fld = field( index );
 
   QString sql = QString( "SELECT Min(%1) FROM %2" ).arg( fld.name() ).arg( quotedValue( mTableName ) );
 
-  ret = sqlite3_get_table( sqliteHandle, sql.toUtf8(), &results, &rows, &columns, &errMsg );
+  strcpy(xSql, sql.toUtf8().constData());
+  ret = sqlite3_get_table( sqliteHandle, xSql, &results, &rows, &columns, &errMsg );
   if ( ret != SQLITE_OK )
     goto error;
   if ( rows < 1 )
@@ -698,13 +709,15 @@
   int columns;
   char *errMsg = NULL;
   QString maxValue;
+  char xSql[1024];
 
   // get the field name
   const QgsField & fld = field( index );
 
   QString sql = QString( "SELECT Max(%1) FROM %2" ).arg( fld.name() ).arg( quotedValue( mTableName ) );
 
-  ret = sqlite3_get_table( sqliteHandle, sql.toUtf8(), &results, &rows, &columns, &errMsg );
+  strcpy(xSql, sql.toUtf8().constData());
+  ret = sqlite3_get_table( sqliteHandle, xSql, &results, &rows, &columns, &errMsg );
   if ( ret != SQLITE_OK )
     goto error;
   if ( rows < 1 )
@@ -748,6 +761,7 @@
   char *errMsg = NULL;
   QString sql;
   QString txt;
+  char xSql[1024];
 
   uniqueValues.clear();
 
@@ -757,7 +771,7 @@
   sql = QString( "SELECT DISTINCT %1 FROM %2 ORDER BY %1" ).arg( fld.name() ).arg( quotedValue( mTableName ) );
 
   // SQLite prepared statement
-  QByteArray xSql = sql.toUtf8();
+  strcpy(xSql, sql.toUtf8().constData());
   if ( sqlite3_prepare_v2( sqliteHandle, xSql, strlen( xSql ), &stmt, NULL ) != SQLITE_OK )
   {
     // some error occurred
@@ -833,14 +847,14 @@
   QString sql;
   QString values;
   int ia;
-  QByteArray xSql;
+  char xSql[1024];
 
   if ( flist.size() == 0 )
     return true;
   const QgsAttributeMap & attributevec = flist[0].attributeMap();
 
-  sql = "BEGIN";
-  int ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+  strcpy(xSql, "BEGIN");
+  int ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
   if ( ret != SQLITE_OK )
   {
     // some error occurred
@@ -879,7 +893,7 @@
   sql += ")";
 
   // SQLite prepared statement
-  xSql = sql.toUtf8();
+  strcpy(xSql, sql.toUtf8().constData());
   if ( sqlite3_prepare_v2( sqliteHandle, xSql, strlen( xSql ), &stmt, NULL ) != SQLITE_OK )
   {
     // some error occurred
@@ -938,8 +952,10 @@
         // binding a TEXT value
         QString txt = it->toString();
         int len = txt.length();
-        QByteArray vl = txt.toUtf8();
+        char *vl = new char [len];
+        strcpy(vl, txt.toUtf8().constData());
         sqlite3_bind_text( stmt, ++ia, vl, len, SQLITE_TRANSIENT );
+        delete [] vl;
       }
       else
       {
@@ -965,8 +981,8 @@
   }
   sqlite3_finalize( stmt );
 
-  sql = "COMMIT";
-  ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+  strcpy(xSql, "COMMIT");
+  ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
   if ( ret != SQLITE_OK )
   {
     // some error occurred
@@ -988,8 +1004,8 @@
   if ( toCommit == true )
   {
     // ROLLBACK after some previous error
-    sql = "ROLLBACK";
-    sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, NULL );
+    strcpy(xSql, "ROLLBACK");
+    sqlite3_exec( sqliteHandle, xSql, NULL, NULL, NULL );
   }
 
   return false;
@@ -1001,10 +1017,10 @@
   char *errMsg = NULL;
   bool toCommit = false;
   QString sql;
-  QByteArray xSql;
+  char xSql[1024];
 
-  sql = "BEGIN";
-  int ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+  strcpy(xSql, "BEGIN");
+  int ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
   if ( ret != SQLITE_OK )
   {
     // some error occurred
@@ -1015,7 +1031,7 @@
   sql = QString( "DELETE FROM %1 WHERE ROWID = ?" ).arg( quotedValue( mTableName ) );
 
   // SQLite prepared statement
-  xSql = sql.toUtf8();
+  strcpy(xSql, sql.toUtf8().constData());
   if ( sqlite3_prepare_v2( sqliteHandle, xSql, strlen( xSql ), &stmt, NULL ) != SQLITE_OK )
   {
     // some error occurred
@@ -1050,8 +1066,8 @@
   }
   sqlite3_finalize( stmt );
 
-  sql = "COMMIT";
-  ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+  strcpy(xSql, "COMMIT");
+  ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
   if ( ret != SQLITE_OK )
   {
     // some error occurred
@@ -1074,8 +1090,8 @@
   if ( toCommit == true )
   {
     // ROLLBACK after some previous error
-    sql = "ROLLBACK";
-    sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, NULL );
+    strcpy(xSql, "ROLLBACK");
+    sqlite3_exec( sqliteHandle, xSql, NULL, NULL, NULL );
   }
 
   return false;
@@ -1086,9 +1102,10 @@
   char *errMsg = NULL;
   bool toCommit = false;
   QString sql;
+  char xSql[1024];
 
-  sql = "BEGIN";
-  int ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+  strcpy(xSql, "BEGIN");
+  int ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
   if ( ret != SQLITE_OK )
   {
     // some error occurred
@@ -1099,7 +1116,8 @@
   for ( QgsNewAttributesMap::const_iterator iter = name.begin(); iter != name.end(); ++iter )
   {
     sql = QString( "ALTER TABLE %1 ADD COLUMN %2 %3" ).arg( quotedValue( mTableName ) ).arg( quotedValue( iter.key() ) ).arg( iter.value() );
-    ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+    strcpy(xSql, sql.toUtf8().constData());
+    ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
     if ( ret != SQLITE_OK )
     {
       // some error occurred
@@ -1107,8 +1125,8 @@
     }
   }
 
-  sql = "COMMIT";
-  ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+  strcpy(xSql, "COMMIT");
+  ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
   if ( ret != SQLITE_OK )
   {
     // some error occurred
@@ -1131,8 +1149,8 @@
   if ( toCommit == true )
   {
     // ROLLBACK after some previous error
-    sql = "ROLLBACK";
-    sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, NULL );
+    strcpy(xSql, "ROLLBACK");
+    sqlite3_exec( sqliteHandle, xSql, NULL, NULL, NULL );
   }
 
   return false;
@@ -1143,9 +1161,10 @@
   char *errMsg = NULL;
   bool toCommit = false;
   QString sql;
+  char xSql[1024];
 
-  sql = "BEGIN";
-  int ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+  strcpy(xSql, "BEGIN");
+  int ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
   if ( ret != SQLITE_OK )
   {
     // some error occurred
@@ -1180,7 +1199,8 @@
     }
     sql += QString( " WHERE ROWID=%1" ).arg( fid );
 
-    ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+    strcpy(xSql, sql.toUtf8().constData());
+    ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
     if ( ret != SQLITE_OK )
     {
       // some error occurred
@@ -1188,8 +1208,8 @@
     }
   }
 
-  sql = "COMMIT";
-  ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+  strcpy(xSql, "COMMIT");
+  ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
   if ( ret != SQLITE_OK )
   {
     // some error occurred
@@ -1212,8 +1232,8 @@
   if ( toCommit == true )
   {
     // ROLLBACK after some previous error
-    sql = "ROLLBACK";
-    sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, NULL );
+    strcpy(xSql, "ROLLBACK");
+    sqlite3_exec( sqliteHandle, xSql, NULL, NULL, NULL );
   }
 
   return false;
@@ -1225,10 +1245,10 @@
   char *errMsg = NULL;
   bool toCommit = false;
   QString sql;
-  QByteArray xSql;
+  char xSql[1024];
 
-  sql = "BEGIN";
-  int ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+  strcpy(xSql, "BEGIN");
+  int ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
   if ( ret != SQLITE_OK )
   {
     // some error occurred
@@ -1241,7 +1261,7 @@
     arg( quotedValue( mTableName ) ).arg( quotedValue( geometryColumn ) ).arg( mSrid );
 
   // SQLite prepared statement
-  xSql = sql.toUtf8();
+  strcpy(xSql, sql.toUtf8().constData());
   if ( sqlite3_prepare_v2( sqliteHandle, xSql, strlen( xSql ), &stmt, NULL ) != SQLITE_OK )
   {
     // some error occurred
@@ -1284,8 +1304,8 @@
   }
   sqlite3_finalize( stmt );
 
-  sql = "COMMIT";
-  ret = sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, &errMsg );
+  strcpy(xSql, "COMMIT");
+  ret = sqlite3_exec( sqliteHandle, xSql, NULL, NULL, &errMsg );
   if ( ret != SQLITE_OK )
   {
     // some error occurred
@@ -1307,8 +1327,8 @@
   if ( toCommit == true )
   {
     // ROLLBACK after some previous error
-    sql = "ROLLBACK";
-    sqlite3_exec( sqliteHandle, sql.toUtf8(), NULL, NULL, NULL );
+    strcpy(xSql, "ROLLBACK");
+    sqlite3_exec( sqliteHandle, xSql, NULL, NULL, NULL );
   }
 
   return false;
@@ -1349,7 +1369,7 @@
   }
 
   QgsDebugMsg( QString( "New sqlite connection for " ) + dbPath );
-  strcpy( path, dbPath.toUtf8() );
+  strcpy( path, dbPath.toUtf8().constData() );
   if ( sqlite3_open_v2( path, &sqlite_handle, SQLITE_OPEN_READWRITE, NULL ) )
   {
     // failure
@@ -1418,12 +1438,14 @@
   int rows;
   int columns;
   char *errMsg = NULL;
+  char xSql[1024];
 
   QString sql = QString( "SELECT type, srid, spatial_index_enabled FROM geometry_columns"
                          " WHERE f_table_name=%1 and f_geometry_column=%2" ).arg( quotedValue( mTableName ) ).
                 arg( quotedValue( geometryColumn ) );
 
-  ret = sqlite3_get_table( sqliteHandle, sql.toUtf8(), &results, &rows, &columns, &errMsg );
+  strcpy(xSql, sql.toUtf8().constData());
+  ret = sqlite3_get_table( sqliteHandle, xSql, &results, &rows, &columns, &errMsg );
   if ( ret != SQLITE_OK )
     goto error;
   if ( rows < 1 )
@@ -1479,7 +1501,8 @@
 
   sql = QString( "SELECT proj4text FROM spatial_ref_sys WHERE srid=%1" ).arg( mSrid );
 
-  ret = sqlite3_get_table( sqliteHandle, sql.toUtf8(), &results, &rows, &columns, &errMsg );
+  strcpy(xSql, sql.toUtf8().constData());
+  ret = sqlite3_get_table( sqliteHandle, xSql, &results, &rows, &columns, &errMsg );
   if ( ret != SQLITE_OK )
     goto error;
   if ( rows < 1 )
@@ -1515,11 +1538,13 @@
   int rows;
   int columns;
   char *errMsg = NULL;
+  char xSql[1024];
 
   QString sql = QString( "SELECT Min(MbrMinX(%1)), Min(MbrMinY(%1)), "
                          "Max(MbrMaxX(%1)), Max(MbrMaxY(%1)), Count(*) " "FROM %2" ).arg( geometryColumn ).arg( quotedValue( mTableName ) );
 
-  ret = sqlite3_get_table( sqliteHandle, sql.toUtf8(), &results, &rows, &columns, &errMsg );
+  strcpy(xSql, sql.toUtf8().constData());
+  ret = sqlite3_get_table( sqliteHandle, xSql, &results, &rows, &columns, &errMsg );
   if ( ret != SQLITE_OK )
     goto error;
   if ( rows < 1 )



More information about the QGIS-commit mailing list