|
17 | 17 |
|
18 | 18 | #include <spatialite.h>
|
19 | 19 |
|
| 20 | +#include <QStringList> |
20 | 21 | #include <QXmlStreamReader>
|
21 | 22 |
|
22 | 23 |
|
@@ -134,14 +135,30 @@ bool QgsOSMXmlImport::createIndexes()
|
134 | 135 |
|
135 | 136 | bool QgsOSMXmlImport::createDatabase()
|
136 | 137 | {
|
| 138 | + char **results; |
| 139 | + int rows, columns; |
137 | 140 | if ( sqlite3_open_v2( mDbFileName.toUtf8().data(), &mDatabase, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0 ) != SQLITE_OK )
|
138 | 141 | return false;
|
139 | 142 |
|
| 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 | + |
140 | 157 | const char* sqlInitStatements[] =
|
141 | 158 | {
|
142 | 159 | "PRAGMA cache_size = 100000", // TODO!!!
|
143 | 160 | "PRAGMA synchronous = OFF", // TODO!!!
|
144 |
| - "SELECT InitSpatialMetadata()", |
| 161 | + above41 ? "SELECT InitSpatialMetadata(1)" : "SELECT InitSpatialMetadata()", |
145 | 162 | "CREATE TABLE nodes ( id INTEGER PRIMARY KEY, lat REAL, lon REAL )",
|
146 | 163 | "CREATE TABLE nodes_tags ( id INTEGER, k TEXT, v TEXT )",
|
147 | 164 | "CREATE TABLE ways ( id INTEGER PRIMARY KEY )",
|
|
0 commit comments