Skip to content

Commit 4d5d26a

Browse files
committed
Merge pull request #1399 from giohappy/fix_osm_initspatialmetadata
Fix #9693 (Make OSM DB metadata initialization in transaction)
2 parents 7f21918 + 8c67cdf commit 4d5d26a

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

src/analysis/openstreetmap/qgsosmimport.cpp

+18-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include <spatialite.h>
1919

20+
#include <QStringList>
2021
#include <QXmlStreamReader>
2122

2223

@@ -134,14 +135,30 @@ bool QgsOSMXmlImport::createIndexes()
134135

135136
bool QgsOSMXmlImport::createDatabase()
136137
{
138+
char **results;
139+
int rows, columns;
137140
if ( sqlite3_open_v2( mDbFileName.toUtf8().data(), &mDatabase, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0 ) != SQLITE_OK )
138141
return false;
139142

143+
bool above41 = false;
144+
int ret = sqlite3_get_table( mDatabase, "select spatialite_version()", &results, &rows, &columns, NULL );
145+
if ( ret == SQLITE_OK && rows == 1 && columns == 1 )
146+
{
147+
QString version = QString::fromUtf8( results[1] );
148+
QStringList parts = version.split( " ", QString::SkipEmptyParts );
149+
if ( parts.size() >= 1 )
150+
{
151+
QStringList verparts = parts[0].split( ".", QString::SkipEmptyParts );
152+
above41 = verparts.size() >= 2 && ( verparts[0].toInt() > 4 || ( verparts[0].toInt() == 4 && verparts[1].toInt() >= 1 ) );
153+
}
154+
}
155+
sqlite3_free_table( results );
156+
140157
const char* sqlInitStatements[] =
141158
{
142159
"PRAGMA cache_size = 100000", // TODO!!!
143160
"PRAGMA synchronous = OFF", // TODO!!!
144-
"SELECT InitSpatialMetadata()",
161+
above41 ? "SELECT InitSpatialMetadata(1)" : "SELECT InitSpatialMetadata()",
145162
"CREATE TABLE nodes ( id INTEGER PRIMARY KEY, lat REAL, lon REAL )",
146163
"CREATE TABLE nodes_tags ( id INTEGER, k TEXT, v TEXT )",
147164
"CREATE TABLE ways ( id INTEGER PRIMARY KEY )",

0 commit comments

Comments
 (0)