27using namespace Qt::StringLiterals;
30#include <spatialite.h>
34#ifdef SPATIALITE_PRINT_ALL_SQL
38static int trace_callback(
unsigned,
void *ctx,
void *p,
void * )
40 sqlite3_stmt *stmt = ( sqlite3_stmt * )p;
41 char *sql = sqlite3_expanded_sql( stmt );
42 qDebug() <<
"SPATIALITE" << QThread::currentThreadId() << (
sqlite3 * ) ctx << sql;
52 auto &deleter = get_deleter();
53 deleter.mSpatialiteContext = spatialite_alloc_connection();
57 const int result = sqlite3_open( path.toUtf8(), &database );
58 std::unique_ptr< sqlite3, QgsSpatialiteCloser>::reset( database );
61 if ( result == SQLITE_OK )
62 spatialite_init_ex( database, deleter.mSpatialiteContext, 0 );
70 std::unique_ptr< sqlite3, QgsSpatialiteCloser>::reset();
76 auto &deleter = get_deleter();
77 deleter.mSpatialiteContext = spatialite_alloc_connection();
81 const int result = sqlite3_open_v2( path.toUtf8(), &database, flags, zVfs );
82 std::unique_ptr< sqlite3, QgsSpatialiteCloser>::reset( database );
85 if ( result == SQLITE_OK )
86 spatialite_init_ex( database, deleter.mSpatialiteContext, 0 );
89#ifdef SPATIALITE_PRINT_ALL_SQL
104 return QString( sqlite3_errmsg( get() ) );
109 sqlite3_stmt *preparedStatement =
nullptr;
110 const char *tail =
nullptr;
111 const QByteArray sqlUtf8 = sql.toUtf8();
112 resultCode = sqlite3_prepare( get(), sqlUtf8, sqlUtf8.length(), &preparedStatement, &tail );
114 s.reset( preparedStatement );
120 const int res = sqlite3_close_v2( handle );
121 if ( res != SQLITE_OK )
123 QgsDebugError( u
"sqlite3_close_v2() failed: %1"_s.arg( res ) );
126#ifdef HAVE_SPATIALITE
int open(const QString &path)
Opens the database at the specified file path.
sqlite3_statement_unique_ptr prepare(const QString &sql, int &resultCode)
Prepares a sql statement, returning the result.
int open_v2(const QString &path, int flags, const char *zVfs)
Opens the database at the specified file path.
QString errorMessage() const
Returns the most recent error message encountered by the database.
void reset()
Will close the connection and set the internal pointer to nullptr.
Unique pointer for sqlite3 prepared statements, which automatically finalizes the statement when the ...
#define QgsDebugError(str)
void operator()(sqlite3 *database)
Closes an spatialite database.
void * mSpatialiteContext
Keep track of the spatialite context.