@@ -198,13 +198,18 @@ bool QgsBackgroundCachedSharedData::createCache()
198
198
if ( mDistinctSelect )
199
199
cacheFields.append ( QgsField ( QgsBackgroundCachedFeatureIteratorConstants::FIELD_MD5, QVariant::String, QStringLiteral ( " string" ) ) );
200
200
201
+ const auto logMessageWithReason = [this ]( const QString & reason )
202
+ {
203
+ QgsMessageLog::logMessage ( QStringLiteral ( " %1: %2" ).arg ( QObject::tr ( " Cannot create temporary SpatiaLite cache." ) ).arg ( reason ), mComponentTranslated );
204
+ };
205
+
201
206
// Creating a SpatiaLite database can be quite slow on some file systems
202
207
// so we create a GDAL in-memory file, and then copy it on
203
208
// the file system.
204
209
GDALDriverH hDrv = GDALGetDriverByName ( " SQLite" );
205
210
if ( !hDrv )
206
211
{
207
- QgsMessageLog::logMessage ( QObject::tr ( " Cannot create temporary SpatiaLite cache. " ), mComponentTranslated );
212
+ logMessageWithReason ( QStringLiteral ( " GDAL SQLite driver not available " ) );
208
213
return false ;
209
214
}
210
215
QString vsimemFilename;
@@ -215,7 +220,7 @@ bool QgsBackgroundCachedSharedData::createCache()
215
220
GDALDatasetH hDS = GDALCreate ( hDrv, vsimemFilename.toUtf8 ().constData (), 0 , 0 , 0 , GDT_Unknown, const_cast <char **>( apszOptions ) );
216
221
if ( !hDS )
217
222
{
218
- QgsMessageLog::logMessage ( QObject::tr ( " Cannot create temporary SpatiaLite cache. " ), mComponentTranslated );
223
+ logMessageWithReason ( QStringLiteral ( " GDALCreate() failed: %1 " ). arg ( CPLGetLastErrorMsg () ) );
219
224
return false ;
220
225
}
221
226
GDALClose ( hDS );
@@ -224,7 +229,7 @@ bool QgsBackgroundCachedSharedData::createCache()
224
229
vsi_l_offset nLength = 0 ;
225
230
GByte *pabyData = VSIGetMemFileBuffer ( vsimemFilename.toStdString ().c_str (), &nLength, TRUE );
226
231
Q_ASSERT ( !QFile::exists ( mCacheDbname ) );
227
- VSILFILE *fp = VSIFOpenL ( mCacheDbname .toStdString ().c_str (), " wb " );
232
+ VSILFILE *fp = VSIFOpenL ( mCacheDbname .toStdString ().c_str (), " wb" );
228
233
if ( fp )
229
234
{
230
235
VSIFWriteL ( pabyData, 1 , nLength, fp );
@@ -234,7 +239,7 @@ bool QgsBackgroundCachedSharedData::createCache()
234
239
else
235
240
{
236
241
CPLFree ( pabyData );
237
- QgsMessageLog::logMessage ( QObject::tr ( " Cannot create temporary SpatiaLite cache " ), mComponentTranslated );
242
+ logMessageWithReason ( QStringLiteral ( " Cannot copy file to %1: %2 " ). arg ( mCacheDbname ). arg ( CPLGetLastErrorMsg () ) );
238
243
return false ;
239
244
}
240
245
@@ -245,6 +250,7 @@ bool QgsBackgroundCachedSharedData::createCache()
245
250
spatialite_database_unique_ptr database;
246
251
bool ret = true ;
247
252
int rc = database.open ( mCacheDbname );
253
+ QString failedSql;
248
254
if ( rc == SQLITE_OK )
249
255
{
250
256
QString sql;
@@ -277,6 +283,7 @@ bool QgsBackgroundCachedSharedData::createCache()
277
283
if ( rc != SQLITE_OK )
278
284
{
279
285
QgsDebugMsg ( QStringLiteral ( " %1 failed" ).arg ( sql ) );
286
+ if ( failedSql.isEmpty () ) failedSql = sql;
280
287
ret = false ;
281
288
}
282
289
@@ -285,6 +292,7 @@ bool QgsBackgroundCachedSharedData::createCache()
285
292
if ( rc != SQLITE_OK )
286
293
{
287
294
QgsDebugMsg ( QStringLiteral ( " %1 failed" ).arg ( sql ) );
295
+ if ( failedSql.isEmpty () ) failedSql = sql;
288
296
ret = false ;
289
297
}
290
298
@@ -293,6 +301,7 @@ bool QgsBackgroundCachedSharedData::createCache()
293
301
if ( rc != SQLITE_OK )
294
302
{
295
303
QgsDebugMsg ( QStringLiteral ( " %1 failed" ).arg ( sql ) );
304
+ if ( failedSql.isEmpty () ) failedSql = sql;
296
305
ret = false ;
297
306
}
298
307
@@ -304,6 +313,7 @@ bool QgsBackgroundCachedSharedData::createCache()
304
313
if ( rc != SQLITE_OK )
305
314
{
306
315
QgsDebugMsg ( QStringLiteral ( " %1 failed" ).arg ( sql ) );
316
+ if ( failedSql.isEmpty () ) failedSql = sql;
307
317
ret = false ;
308
318
}
309
319
@@ -314,6 +324,7 @@ bool QgsBackgroundCachedSharedData::createCache()
314
324
if ( rc != SQLITE_OK )
315
325
{
316
326
QgsDebugMsg ( QStringLiteral ( " %1 failed" ).arg ( sql ) );
327
+ if ( failedSql.isEmpty () ) failedSql = sql;
317
328
ret = false ;
318
329
}
319
330
}
@@ -326,7 +337,7 @@ bool QgsBackgroundCachedSharedData::createCache()
326
337
}
327
338
if ( !ret )
328
339
{
329
- QgsMessageLog::logMessage ( QObject::tr ( " Cannot create temporary SpatiaLite cache " ), mComponentTranslated );
340
+ logMessageWithReason ( QStringLiteral ( " SQL request %1 failed " ). arg ( failedSql ) );
330
341
return false ;
331
342
}
332
343
0 commit comments