forked from qt-creator/qt-creator
Sqlite: Dont compile Utf-16 support
We don't support it anyway. Change-Id: I35fa859f3c9d7389e3d00d584832a814acb39c80 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -53,7 +53,7 @@ DEFINES += SQLITE_THREADSAFE=2 SQLITE_ENABLE_FTS5 \
|
|||||||
SQLITE_OMIT_DEPRECATED SQLITE_OMIT_DECLTYPE \
|
SQLITE_OMIT_DEPRECATED SQLITE_OMIT_DECLTYPE \
|
||||||
SQLITE_MAX_EXPR_DEPTH=0 SQLITE_OMIT_SHARED_CACHE SQLITE_USE_ALLOCA \
|
SQLITE_MAX_EXPR_DEPTH=0 SQLITE_OMIT_SHARED_CACHE SQLITE_USE_ALLOCA \
|
||||||
SQLITE_ENABLE_MEMORY_MANAGEMENT SQLITE_ENABLE_NULL_TRIM SQLITE_OMIT_EXPLAIN \
|
SQLITE_ENABLE_MEMORY_MANAGEMENT SQLITE_ENABLE_NULL_TRIM SQLITE_OMIT_EXPLAIN \
|
||||||
SQLITE_OMIT_LOAD_EXTENSION
|
SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_UTF16
|
||||||
|
|
||||||
OTHER_FILES += README.md
|
OTHER_FILES += README.md
|
||||||
|
|
||||||
|
|||||||
@@ -147,17 +147,6 @@ int BaseStatement::columnCount() const
|
|||||||
return m_columnCount;
|
return m_columnCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils::SmallStringVector BaseStatement::columnNames() const
|
|
||||||
{
|
|
||||||
Utils::SmallStringVector columnNames;
|
|
||||||
int columnCount = BaseStatement::columnCount();
|
|
||||||
columnNames.reserve(std::size_t(columnCount));
|
|
||||||
for (int columnIndex = 0; columnIndex < columnCount; columnIndex++)
|
|
||||||
columnNames.emplace_back(sqlite3_column_origin_name(m_compiledStatement.get(), columnIndex));
|
|
||||||
|
|
||||||
return columnNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BaseStatement::bind(int index, NullValue)
|
void BaseStatement::bind(int index, NullValue)
|
||||||
{
|
{
|
||||||
int resultCode = sqlite3_bind_null(m_compiledStatement.get(), index);
|
int resultCode = sqlite3_bind_null(m_compiledStatement.get(), index);
|
||||||
@@ -259,11 +248,6 @@ sqlite3 *BaseStatement::sqliteDatabaseHandle() const
|
|||||||
return m_database.backend().sqliteDatabaseHandle();
|
return m_database.backend().sqliteDatabaseHandle();
|
||||||
}
|
}
|
||||||
|
|
||||||
TextEncoding BaseStatement::databaseTextEncoding()
|
|
||||||
{
|
|
||||||
return m_database.backend().textEncoding();
|
|
||||||
}
|
|
||||||
|
|
||||||
void BaseStatement::checkForStepError(int resultCode) const
|
void BaseStatement::checkForStepError(int resultCode) const
|
||||||
{
|
{
|
||||||
switch (resultCode) {
|
switch (resultCode) {
|
||||||
|
|||||||
@@ -72,7 +72,6 @@ public:
|
|||||||
template<typename Type>
|
template<typename Type>
|
||||||
Type fetchValue(int column) const;
|
Type fetchValue(int column) const;
|
||||||
int columnCount() const;
|
int columnCount() const;
|
||||||
Utils::SmallStringVector columnNames() const;
|
|
||||||
|
|
||||||
void bind(int index, NullValue);
|
void bind(int index, NullValue);
|
||||||
void bind(int index, int fetchValue);
|
void bind(int index, int fetchValue);
|
||||||
@@ -97,7 +96,6 @@ public:
|
|||||||
void waitForUnlockNotify() const;
|
void waitForUnlockNotify() const;
|
||||||
|
|
||||||
sqlite3 *sqliteDatabaseHandle() const;
|
sqlite3 *sqliteDatabaseHandle() const;
|
||||||
TextEncoding databaseTextEncoding();
|
|
||||||
|
|
||||||
[[noreturn]] void checkForStepError(int resultCode) const;
|
[[noreturn]] void checkForStepError(int resultCode) const;
|
||||||
[[noreturn]] void checkForResetError(int resultCode) const;
|
[[noreturn]] void checkForResetError(int resultCode) const;
|
||||||
|
|||||||
@@ -40,9 +40,8 @@
|
|||||||
namespace Sqlite {
|
namespace Sqlite {
|
||||||
|
|
||||||
DatabaseBackend::DatabaseBackend(Database &database)
|
DatabaseBackend::DatabaseBackend(Database &database)
|
||||||
: m_database(database),
|
: m_database(database)
|
||||||
m_databaseHandle(nullptr),
|
, m_databaseHandle(nullptr)
|
||||||
m_cachedTextEncoding(Utf8)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,8 +101,6 @@ void DatabaseBackend::open(Utils::SmallStringView databaseFilePath, OpenMode mod
|
|||||||
nullptr);
|
nullptr);
|
||||||
|
|
||||||
checkDatabaseCouldBeOpened(resultCode);
|
checkDatabaseCouldBeOpened(resultCode);
|
||||||
|
|
||||||
cacheTextEncoding();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sqlite3 *DatabaseBackend::sqliteDatabaseHandle() const
|
sqlite3 *DatabaseBackend::sqliteDatabaseHandle() const
|
||||||
@@ -135,24 +132,6 @@ JournalMode DatabaseBackend::journalMode()
|
|||||||
return pragmaToJournalMode(pragmaValue("journal_mode"));
|
return pragmaToJournalMode(pragmaValue("journal_mode"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatabaseBackend::setTextEncoding(TextEncoding textEncoding)
|
|
||||||
{
|
|
||||||
setPragmaValue("encoding", textEncodingToPragma(textEncoding));
|
|
||||||
cacheTextEncoding();
|
|
||||||
}
|
|
||||||
|
|
||||||
TextEncoding DatabaseBackend::textEncoding()
|
|
||||||
{
|
|
||||||
return m_cachedTextEncoding;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Utils::SmallStringVector DatabaseBackend::columnNames(Utils::SmallStringView tableName)
|
|
||||||
{
|
|
||||||
ReadWriteStatement statement("SELECT * FROM " + tableName, m_database);
|
|
||||||
return statement.columnNames();
|
|
||||||
}
|
|
||||||
|
|
||||||
int DatabaseBackend::changesCount() const
|
int DatabaseBackend::changesCount() const
|
||||||
{
|
{
|
||||||
return sqlite3_changes(sqliteDatabaseHandle());
|
return sqlite3_changes(sqliteDatabaseHandle());
|
||||||
@@ -232,11 +211,6 @@ int DatabaseBackend::busyHandlerCallback(void *, int counter)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatabaseBackend::cacheTextEncoding()
|
|
||||||
{
|
|
||||||
m_cachedTextEncoding = pragmaToTextEncoding(pragmaValue("encoding"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void DatabaseBackend::checkForOpenDatabaseWhichCanBeClosed()
|
void DatabaseBackend::checkForOpenDatabaseWhichCanBeClosed()
|
||||||
{
|
{
|
||||||
if (m_databaseHandle == nullptr)
|
if (m_databaseHandle == nullptr)
|
||||||
@@ -365,23 +339,6 @@ JournalMode DatabaseBackend::pragmaToJournalMode(Utils::SmallStringView pragma)
|
|||||||
return static_cast<JournalMode>(index);
|
return static_cast<JournalMode>(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Utils::SmallStringView textEncodingStrings[] = {"UTF-8", "UTF-16le", "UTF-16be"};
|
|
||||||
|
|
||||||
Utils::SmallStringView DatabaseBackend::textEncodingToPragma(TextEncoding textEncoding)
|
|
||||||
{
|
|
||||||
return textEncodingStrings[textEncoding];
|
|
||||||
}
|
|
||||||
|
|
||||||
TextEncoding DatabaseBackend::pragmaToTextEncoding(Utils::SmallStringView pragma)
|
|
||||||
{
|
|
||||||
int index = indexOfPragma(pragma, textEncodingStrings);
|
|
||||||
|
|
||||||
if (index < 0)
|
|
||||||
throwExceptionStatic("SqliteDatabaseBackend::pragmaToTextEncoding: pragma can't be transformed in a text encoding enumeration!");
|
|
||||||
|
|
||||||
return static_cast<TextEncoding>(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
int DatabaseBackend::openMode(OpenMode mode)
|
int DatabaseBackend::openMode(OpenMode mode)
|
||||||
{
|
{
|
||||||
int sqliteMode = SQLITE_OPEN_CREATE;
|
int sqliteMode = SQLITE_OPEN_CREATE;
|
||||||
|
|||||||
@@ -68,9 +68,6 @@ public:
|
|||||||
void setJournalMode(JournalMode journalMode);
|
void setJournalMode(JournalMode journalMode);
|
||||||
JournalMode journalMode();
|
JournalMode journalMode();
|
||||||
|
|
||||||
void setTextEncoding(TextEncoding textEncoding);
|
|
||||||
TextEncoding textEncoding();
|
|
||||||
|
|
||||||
Utils::SmallStringVector columnNames(Utils::SmallStringView tableName);
|
Utils::SmallStringVector columnNames(Utils::SmallStringView tableName);
|
||||||
|
|
||||||
int changesCount() const;
|
int changesCount() const;
|
||||||
@@ -103,8 +100,6 @@ protected:
|
|||||||
void registerRankingFunction();
|
void registerRankingFunction();
|
||||||
static int busyHandlerCallback(void*, int counter);
|
static int busyHandlerCallback(void*, int counter);
|
||||||
|
|
||||||
void cacheTextEncoding();
|
|
||||||
|
|
||||||
void checkForOpenDatabaseWhichCanBeClosed();
|
void checkForOpenDatabaseWhichCanBeClosed();
|
||||||
void checkDatabaseClosing(int resultCode);
|
void checkDatabaseClosing(int resultCode);
|
||||||
void checkCanOpenDatabase(Utils::SmallStringView databaseFilePath);
|
void checkCanOpenDatabase(Utils::SmallStringView databaseFilePath);
|
||||||
@@ -121,9 +116,6 @@ protected:
|
|||||||
|
|
||||||
static Utils::SmallStringView journalModeToPragma(JournalMode journalMode);
|
static Utils::SmallStringView journalModeToPragma(JournalMode journalMode);
|
||||||
static JournalMode pragmaToJournalMode(Utils::SmallStringView pragma);
|
static JournalMode pragmaToJournalMode(Utils::SmallStringView pragma);
|
||||||
Utils::SmallStringView textEncodingToPragma(TextEncoding textEncoding);
|
|
||||||
static TextEncoding pragmaToTextEncoding(Utils::SmallStringView pragma);
|
|
||||||
|
|
||||||
|
|
||||||
Q_NORETURN static void throwExceptionStatic(const char *whatHasHappens);
|
Q_NORETURN static void throwExceptionStatic(const char *whatHasHappens);
|
||||||
[[noreturn]] void throwException(const char *whatHasHappens) const;
|
[[noreturn]] void throwException(const char *whatHasHappens) const;
|
||||||
@@ -133,7 +125,6 @@ protected:
|
|||||||
private:
|
private:
|
||||||
Database &m_database;
|
Database &m_database;
|
||||||
sqlite3 *m_databaseHandle;
|
sqlite3 *m_databaseHandle;
|
||||||
TextEncoding m_cachedTextEncoding;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Sqlite
|
} // namespace Sqlite
|
||||||
|
|||||||
@@ -71,19 +71,6 @@ enum class OpenMode : char
|
|||||||
ReadWrite
|
ReadWrite
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TextEncoding : char
|
|
||||||
{
|
|
||||||
Utf8,
|
|
||||||
Utf16le,
|
|
||||||
Utf16be,
|
|
||||||
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
|
|
||||||
Utf16 = Utf16le
|
|
||||||
#else
|
|
||||||
Utf16 = Utf16be
|
|
||||||
#endif
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
enum class ChangeType : int { Delete = 9, Insert = 18, Update = 23 };
|
enum class ChangeType : int { Delete = 9, Insert = 18, Update = 23 };
|
||||||
|
|
||||||
} // namespace Sqlite
|
} // namespace Sqlite
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ using Sqlite::ColumnType;
|
|||||||
using Sqlite::ConstraintType;
|
using Sqlite::ConstraintType;
|
||||||
using Sqlite::JournalMode;
|
using Sqlite::JournalMode;
|
||||||
using Sqlite::OpenMode;
|
using Sqlite::OpenMode;
|
||||||
using Sqlite::TextEncoding;
|
|
||||||
using Sqlite::Exception;
|
using Sqlite::Exception;
|
||||||
using Sqlite::WriteStatement;
|
using Sqlite::WriteStatement;
|
||||||
|
|
||||||
@@ -111,49 +110,6 @@ TEST_F(SqliteDatabaseBackend, PersistJournalMode)
|
|||||||
ASSERT_THAT(databaseBackend.journalMode(), JournalMode::Persist);
|
ASSERT_THAT(databaseBackend.journalMode(), JournalMode::Persist);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SqliteDatabaseBackend, DefaultTextEncoding)
|
|
||||||
{
|
|
||||||
ASSERT_THAT(databaseBackend.textEncoding(), TextEncoding::Utf8);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(SqliteDatabaseBackend, Utf16TextEncoding)
|
|
||||||
{
|
|
||||||
databaseBackend.setTextEncoding(TextEncoding::Utf16);
|
|
||||||
|
|
||||||
ASSERT_THAT(databaseBackend.textEncoding(), TextEncoding::Utf16);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(SqliteDatabaseBackend, Utf16beTextEncoding)
|
|
||||||
{
|
|
||||||
databaseBackend.setTextEncoding(TextEncoding::Utf16be);
|
|
||||||
|
|
||||||
ASSERT_THAT(databaseBackend.textEncoding(),TextEncoding::Utf16be);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(SqliteDatabaseBackend, Utf16leTextEncoding)
|
|
||||||
{
|
|
||||||
databaseBackend.setTextEncoding(TextEncoding::Utf16le);
|
|
||||||
|
|
||||||
ASSERT_THAT(databaseBackend.textEncoding(), TextEncoding::Utf16le);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(SqliteDatabaseBackend, Utf8TextEncoding)
|
|
||||||
{
|
|
||||||
databaseBackend.setTextEncoding(TextEncoding::Utf8);
|
|
||||||
|
|
||||||
ASSERT_THAT(databaseBackend.textEncoding(), TextEncoding::Utf8);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(SqliteDatabaseBackend, TextEncodingCannotBeChangedAfterTouchingDatabase)
|
|
||||||
{
|
|
||||||
databaseBackend.setJournalMode(JournalMode::Memory);
|
|
||||||
|
|
||||||
databaseBackend.execute("CREATE TABLE text(name, number)");
|
|
||||||
|
|
||||||
ASSERT_THROW(databaseBackend.setTextEncoding(TextEncoding::Utf16),
|
|
||||||
Sqlite::PragmaValueNotSet);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(SqliteDatabaseBackend, OpenModeReadOnly)
|
TEST_F(SqliteDatabaseBackend, OpenModeReadOnly)
|
||||||
{
|
{
|
||||||
auto mode = Backend::openMode(OpenMode::ReadOnly);
|
auto mode = Backend::openMode(OpenMode::ReadOnly);
|
||||||
|
|||||||
@@ -223,15 +223,6 @@ TEST_F(SqliteStatement, ToStringValue)
|
|||||||
ASSERT_THAT(ReadStatement::toValue<Utils::SmallString>("SELECT name FROM test WHERE name='foo'", database), "foo");
|
ASSERT_THAT(ReadStatement::toValue<Utils::SmallString>("SELECT name FROM test WHERE name='foo'", database), "foo");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SqliteStatement, ColumnNames)
|
|
||||||
{
|
|
||||||
SqliteTestStatement statement("SELECT name, number FROM test", database);
|
|
||||||
|
|
||||||
auto columnNames = statement.columnNames();
|
|
||||||
|
|
||||||
ASSERT_THAT(columnNames, ElementsAre("name", "number"));
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_F(SqliteStatement, BindNull)
|
TEST_F(SqliteStatement, BindNull)
|
||||||
{
|
{
|
||||||
database.execute("INSERT INTO test VALUES (NULL, 323, 344)");
|
database.execute("INSERT INTO test VALUES (NULL, 323, 344)");
|
||||||
|
|||||||
Reference in New Issue
Block a user