Skip to content

Commit e04b426

Browse files
committedOct 13, 2013
spatialite: run InitSpatialMetadata(1) on SL >= 4.1 (fixes #8340)
1 parent 9b372f5 commit e04b426

File tree

1 file changed

+27
-18
lines changed

1 file changed

+27
-18
lines changed
 

‎src/providers/spatialite/qgsspatialiteprovider.cpp

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5087,37 +5087,46 @@ QGISEXTERN QgsVectorLayerImport::ImportError createEmptyLayer(
50875087
static bool initializeSpatialMetadata( sqlite3 *sqlite_handle, QString& errCause )
50885088
{
50895089
// attempting to perform self-initialization for a newly created DB
5090-
int ret;
5091-
char sql[1024];
5092-
char *errMsg = NULL;
5093-
int count = 0;
5094-
int i;
5095-
char **results;
5096-
int rows;
5097-
int columns;
5098-
5099-
if ( sqlite_handle == NULL )
5090+
if ( !sqlite_handle )
51005091
return false;
5092+
51015093
// checking if this DB is really empty
5102-
strcpy( sql, "SELECT Count(*) from sqlite_master" );
5103-
ret = sqlite3_get_table( sqlite_handle, sql, &results, &rows, &columns, NULL );
5094+
char **results;
5095+
int rows, columns;
5096+
int ret = sqlite3_get_table( sqlite_handle, "select count(*) from sqlite_master", &results, &rows, &columns, NULL );
51045097
if ( ret != SQLITE_OK )
51055098
return false;
5106-
if ( rows < 1 )
5107-
;
5108-
else
5099+
5100+
int count = 0;
5101+
if ( rows >= 1 )
51095102
{
5110-
for ( i = 1; i <= rows; i++ )
5103+
for ( int i = 1; i <= rows; i++ )
51115104
count = atoi( results[( i * columns ) + 0] );
51125105
}
5106+
51135107
sqlite3_free_table( results );
51145108

51155109
if ( count > 0 )
51165110
return false;
51175111

5112+
bool above41 = false;
5113+
ret = sqlite3_get_table( sqlite_handle, "select spatialite_version()", &results, &rows, &columns, NULL );
5114+
if ( ret == SQLITE_OK && rows == 1 && columns == 1 )
5115+
{
5116+
QString version = QString::fromUtf8( results[1] );
5117+
QStringList parts = version.split( " ", QString::SkipEmptyParts );
5118+
if ( parts.size() >= 1 )
5119+
{
5120+
QStringList verparts = parts[0].split( ".", QString::SkipEmptyParts );
5121+
above41 = verparts.size() >= 2 && ( verparts[0].toInt() > 4 || ( verparts[0].toInt() == 4 && verparts[1].toInt() >= 1 ) );
5122+
}
5123+
}
5124+
5125+
sqlite3_free_table( results );
5126+
51185127
// all right, it's empty: proceding to initialize
5119-
strcpy( sql, "SELECT InitSpatialMetadata()" );
5120-
ret = sqlite3_exec( sqlite_handle, sql, NULL, NULL, &errMsg );
5128+
char *errMsg = 0;
5129+
ret = sqlite3_exec( sqlite_handle, above41 ? "SELECT InitSpatialMetadata(1)" : "SELECT InitSpatialMetadata()", NULL, NULL, &errMsg );
51215130
if ( ret != SQLITE_OK )
51225131
{
51235132
errCause = QObject::tr( "Unable to initialize SpatialMetadata:\n" );

0 commit comments

Comments
 (0)
Please sign in to comment.