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_MAX_EXPR_DEPTH=0 SQLITE_OMIT_SHARED_CACHE SQLITE_USE_ALLOCA \
|
||||
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
|
||||
|
||||
|
||||
@@ -147,17 +147,6 @@ int BaseStatement::columnCount() const
|
||||
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)
|
||||
{
|
||||
int resultCode = sqlite3_bind_null(m_compiledStatement.get(), index);
|
||||
@@ -259,11 +248,6 @@ sqlite3 *BaseStatement::sqliteDatabaseHandle() const
|
||||
return m_database.backend().sqliteDatabaseHandle();
|
||||
}
|
||||
|
||||
TextEncoding BaseStatement::databaseTextEncoding()
|
||||
{
|
||||
return m_database.backend().textEncoding();
|
||||
}
|
||||
|
||||
void BaseStatement::checkForStepError(int resultCode) const
|
||||
{
|
||||
switch (resultCode) {
|
||||
|
||||
@@ -72,7 +72,6 @@ public:
|
||||
template<typename Type>
|
||||
Type fetchValue(int column) const;
|
||||
int columnCount() const;
|
||||
Utils::SmallStringVector columnNames() const;
|
||||
|
||||
void bind(int index, NullValue);
|
||||
void bind(int index, int fetchValue);
|
||||
@@ -97,7 +96,6 @@ public:
|
||||
void waitForUnlockNotify() const;
|
||||
|
||||
sqlite3 *sqliteDatabaseHandle() const;
|
||||
TextEncoding databaseTextEncoding();
|
||||
|
||||
[[noreturn]] void checkForStepError(int resultCode) const;
|
||||
[[noreturn]] void checkForResetError(int resultCode) const;
|
||||
|
||||
@@ -40,9 +40,8 @@
|
||||
namespace Sqlite {
|
||||
|
||||
DatabaseBackend::DatabaseBackend(Database &database)
|
||||
: m_database(database),
|
||||
m_databaseHandle(nullptr),
|
||||
m_cachedTextEncoding(Utf8)
|
||||
: m_database(database)
|
||||
, m_databaseHandle(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -102,8 +101,6 @@ void DatabaseBackend::open(Utils::SmallStringView databaseFilePath, OpenMode mod
|
||||
nullptr);
|
||||
|
||||
checkDatabaseCouldBeOpened(resultCode);
|
||||
|
||||
cacheTextEncoding();
|
||||
}
|
||||
|
||||
sqlite3 *DatabaseBackend::sqliteDatabaseHandle() const
|
||||
@@ -135,24 +132,6 @@ JournalMode DatabaseBackend::journalMode()
|
||||
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
|
||||
{
|
||||
return sqlite3_changes(sqliteDatabaseHandle());
|
||||
@@ -232,11 +211,6 @@ int DatabaseBackend::busyHandlerCallback(void *, int counter)
|
||||
return true;
|
||||
}
|
||||
|
||||
void DatabaseBackend::cacheTextEncoding()
|
||||
{
|
||||
m_cachedTextEncoding = pragmaToTextEncoding(pragmaValue("encoding"));
|
||||
}
|
||||
|
||||
void DatabaseBackend::checkForOpenDatabaseWhichCanBeClosed()
|
||||
{
|
||||
if (m_databaseHandle == nullptr)
|
||||
@@ -365,23 +339,6 @@ JournalMode DatabaseBackend::pragmaToJournalMode(Utils::SmallStringView pragma)
|
||||
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 sqliteMode = SQLITE_OPEN_CREATE;
|
||||
|
||||
@@ -68,9 +68,6 @@ public:
|
||||
void setJournalMode(JournalMode journalMode);
|
||||
JournalMode journalMode();
|
||||
|
||||
void setTextEncoding(TextEncoding textEncoding);
|
||||
TextEncoding textEncoding();
|
||||
|
||||
Utils::SmallStringVector columnNames(Utils::SmallStringView tableName);
|
||||
|
||||
int changesCount() const;
|
||||
@@ -103,8 +100,6 @@ protected:
|
||||
void registerRankingFunction();
|
||||
static int busyHandlerCallback(void*, int counter);
|
||||
|
||||
void cacheTextEncoding();
|
||||
|
||||
void checkForOpenDatabaseWhichCanBeClosed();
|
||||
void checkDatabaseClosing(int resultCode);
|
||||
void checkCanOpenDatabase(Utils::SmallStringView databaseFilePath);
|
||||
@@ -121,9 +116,6 @@ protected:
|
||||
|
||||
static Utils::SmallStringView journalModeToPragma(JournalMode journalMode);
|
||||
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);
|
||||
[[noreturn]] void throwException(const char *whatHasHappens) const;
|
||||
@@ -133,7 +125,6 @@ protected:
|
||||
private:
|
||||
Database &m_database;
|
||||
sqlite3 *m_databaseHandle;
|
||||
TextEncoding m_cachedTextEncoding;
|
||||
};
|
||||
|
||||
} // namespace Sqlite
|
||||
|
||||
@@ -71,19 +71,6 @@ enum class OpenMode : char
|
||||
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 };
|
||||
|
||||
} // namespace Sqlite
|
||||
|
||||
@@ -42,7 +42,6 @@ using Sqlite::ColumnType;
|
||||
using Sqlite::ConstraintType;
|
||||
using Sqlite::JournalMode;
|
||||
using Sqlite::OpenMode;
|
||||
using Sqlite::TextEncoding;
|
||||
using Sqlite::Exception;
|
||||
using Sqlite::WriteStatement;
|
||||
|
||||
@@ -111,49 +110,6 @@ TEST_F(SqliteDatabaseBackend, PersistJournalMode)
|
||||
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)
|
||||
{
|
||||
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");
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
database.execute("INSERT INTO test VALUES (NULL, 323, 344)");
|
||||
|
||||
Reference in New Issue
Block a user