@@ -5087,37 +5087,46 @@ QGISEXTERN QgsVectorLayerImport::ImportError createEmptyLayer(
5087
5087
static bool initializeSpatialMetadata ( sqlite3 *sqlite_handle, QString& errCause )
5088
5088
{
5089
5089
// 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 )
5100
5091
return false ;
5092
+
5101
5093
// 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 );
5104
5097
if ( ret != SQLITE_OK )
5105
5098
return false ;
5106
- if ( rows < 1 )
5107
- ;
5108
- else
5099
+
5100
+ int count = 0 ;
5101
+ if ( rows >= 1 )
5109
5102
{
5110
- for ( i = 1 ; i <= rows; i++ )
5103
+ for ( int i = 1 ; i <= rows; i++ )
5111
5104
count = atoi ( results[( i * columns ) + 0 ] );
5112
5105
}
5106
+
5113
5107
sqlite3_free_table ( results );
5114
5108
5115
5109
if ( count > 0 )
5116
5110
return false ;
5117
5111
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
+
5118
5127
// 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 );
5121
5130
if ( ret != SQLITE_OK )
5122
5131
{
5123
5132
errCause = QObject::tr ( " Unable to initialize SpatialMetadata:\n " );
0 commit comments