[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