Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsspatialiteutils.h 3 : : ------------------- 4 : : begin : Nov, 2017 5 : : copyright : (C) 2017 by Matthias Kuhn 6 : : email : matthias@opengis.ch 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : #ifndef QGSSPATIALITEUTILS_H 19 : : #define QGSSPATIALITEUTILS_H 20 : : 21 : : #define SIP_NO_FILE 22 : : 23 : : #include "qgis_core.h" 24 : : #include "qgssqliteutils.h" 25 : : #include <functional> 26 : : 27 : : /** 28 : : * \ingroup core 29 : : * 30 : : * \brief Closes a spatialite database. 31 : : * 32 : : * \since QGIS 3.0 33 : : */ 34 : 26 : struct CORE_EXPORT QgsSpatialiteCloser 35 : : { 36 : : 37 : : /** 38 : : * Closes an spatialite \a database. 39 : : */ 40 : : void operator()( sqlite3 *database ); 41 : : 42 : : /** 43 : : * Keep track of the spatialite context. Set in open(_v2) 44 : : */ 45 : 26 : void *mSpatialiteContext = nullptr; 46 : : }; 47 : : 48 : : /** 49 : : * \ingroup core 50 : : * 51 : : * \brief Unique pointer for spatialite databases, which automatically closes 52 : : * the database when the pointer goes out of scope or is reset. 53 : : * 54 : : * \since QGIS 3.0 55 : : */ 56 : 65 : class CORE_EXPORT spatialite_database_unique_ptr : public std::unique_ptr< sqlite3, QgsSpatialiteCloser> 57 : : { 58 : : public: 59 : : 60 : : /** 61 : : * Opens the database at the specified file \a path. 62 : : * 63 : : * Returns the sqlite error code, or SQLITE_OK if open was successful. 64 : : */ 65 : : int open( const QString &path ); 66 : : 67 : : /** 68 : : * Will close the connection and set the internal pointer to NULLPTR. 69 : : */ 70 : : void reset(); 71 : : 72 : : /** 73 : : * It is not allowed to set an arbitrary sqlite3 handle on this object. 74 : : * 75 : : * A dedicated spatialite context (connection) is created when calling open or 76 : : * open_v2. This context needs to be kept together with the handle, hence it is 77 : : * not allowed to reset to a handle with missing context. 78 : : */ 79 : : void reset( sqlite3 *handle ) = delete; 80 : : 81 : : /** 82 : : * Opens the database at the specified file \a path. 83 : : * 84 : : * Returns the sqlite error code, or SQLITE_OK if open was successful. 85 : : */ 86 : : int open_v2( const QString &path, int flags, const char *zVfs ); 87 : : 88 : : /** 89 : : * Returns the most recent error message encountered by the database. 90 : : */ 91 : : QString errorMessage() const; 92 : : 93 : : /** 94 : : * Prepares a \a sql statement, returning the result. The \a resultCode 95 : : * argument will be filled with the sqlite3 result code. 96 : : */ 97 : : sqlite3_statement_unique_ptr prepare( const QString &sql, int &resultCode ); 98 : : }; 99 : : 100 : : #endif // QGSSPATIALITEUTILS_H