forked from qt-creator/qt-creator
Sqlite: Default column type to None
None has no type affinity. So it will not try to convert types to other types like Numeric will do. Change-Id: I5362a6d071459594619485b8b8a37b3f5ed12db6 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -248,7 +248,9 @@ void CreateTableSqlStatementBuilder::bindColumnDefinitionsAndTableConstraints()
|
||||
columnDefinitionStrings.reserve(m_columns.size());
|
||||
|
||||
for (const Column &column : m_columns) {
|
||||
Utils::SmallString columnDefinitionString = {column.name, " ", column.typeString()};
|
||||
Utils::SmallString columnDefinitionString = {column.name,
|
||||
SqlStatementBuilder::columnTypeToString(
|
||||
column.type)};
|
||||
|
||||
ContraintsVisiter visiter{columnDefinitionString};
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ public:
|
||||
|
||||
Column(Utils::SmallStringView tableName,
|
||||
Utils::SmallStringView name,
|
||||
ColumnType type,
|
||||
ColumnType type = ColumnType::None,
|
||||
Constraints &&constraints = {})
|
||||
: constraints(std::move(constraints))
|
||||
, name(name)
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
namespace Sqlite {
|
||||
|
||||
enum class ColumnType : char { Numeric, Integer, Real, Text, Blob, None };
|
||||
enum class ColumnType : char { None, Numeric, Integer, Real, Text, Blob };
|
||||
|
||||
enum class ConstraintType : char { NoConstraint, PrimaryKey, Unique, ForeignKey };
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ public:
|
||||
}
|
||||
|
||||
Column &addColumn(Utils::SmallStringView name,
|
||||
ColumnType type = ColumnType::Numeric,
|
||||
ColumnType type = ColumnType::None,
|
||||
Constraints &&constraints = {})
|
||||
{
|
||||
m_sqliteColumns.emplace_back(m_tableName, name, type, std::move(constraints));
|
||||
|
||||
@@ -179,12 +179,18 @@ bool SqlStatementBuilder::isBuild() const
|
||||
Utils::SmallString SqlStatementBuilder::columnTypeToString(ColumnType columnType)
|
||||
{
|
||||
switch (columnType) {
|
||||
case ColumnType::Numeric: return "NUMERIC";
|
||||
case ColumnType::Integer: return "INTEGER";
|
||||
case ColumnType::Real: return "REAL";
|
||||
case ColumnType::Text: return "TEXT";
|
||||
case ColumnType::Blob: return "BLOB";
|
||||
case ColumnType::None: return {};
|
||||
case ColumnType::Numeric:
|
||||
return " NUMERIC";
|
||||
case ColumnType::Integer:
|
||||
return " INTEGER";
|
||||
case ColumnType::Real:
|
||||
return " REAL";
|
||||
case ColumnType::Text:
|
||||
return " TEXT";
|
||||
case ColumnType::Blob:
|
||||
return " BLOB";
|
||||
case ColumnType::None:
|
||||
return {};
|
||||
}
|
||||
|
||||
Q_UNREACHABLE();
|
||||
|
||||
@@ -93,7 +93,9 @@ TEST_F(SqliteTable, InitializeTable)
|
||||
table.addColumn("name");
|
||||
table.addColumn("value");
|
||||
|
||||
EXPECT_CALL(databaseMock, execute(Eq("CREATE TEMPORARY TABLE IF NOT EXISTS testTable(name NUMERIC, value NUMERIC) WITHOUT ROWID")));
|
||||
EXPECT_CALL(databaseMock,
|
||||
execute(Eq(
|
||||
"CREATE TEMPORARY TABLE IF NOT EXISTS testTable(name, value) WITHOUT ROWID")));
|
||||
|
||||
table.initialize(databaseMock);
|
||||
}
|
||||
@@ -107,7 +109,7 @@ TEST_F(SqliteTable, InitializeTableWithIndex)
|
||||
table.addIndex({column});
|
||||
table.addIndex({column2});
|
||||
|
||||
EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE testTable(name NUMERIC, value NUMERIC)")));
|
||||
EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE testTable(name, value)")));
|
||||
EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_testTable_name ON testTable(name)")));
|
||||
EXPECT_CALL(databaseMock, execute(Eq("CREATE INDEX IF NOT EXISTS index_testTable_value ON testTable(value)")));
|
||||
|
||||
@@ -299,9 +301,7 @@ TEST_F(SqliteTable, AddPrimaryTableContraint)
|
||||
const auto &nameColumn = table.addColumn("name");
|
||||
table.addPrimaryKeyContraint({idColumn, nameColumn});
|
||||
|
||||
EXPECT_CALL(databaseMock,
|
||||
execute(
|
||||
Eq("CREATE TABLE testTable(id NUMERIC, name NUMERIC, PRIMARY KEY(id, name))")));
|
||||
EXPECT_CALL(databaseMock, execute(Eq("CREATE TABLE testTable(id, name, PRIMARY KEY(id, name))")));
|
||||
|
||||
table.initialize(databaseMock);
|
||||
}
|
||||
|
||||
@@ -137,11 +137,11 @@ TEST(SqlStatementBuilder, ClearBinding)
|
||||
|
||||
TEST(SqlStatementBuilder, ColumnType)
|
||||
{
|
||||
ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Numeric), "NUMERIC");
|
||||
ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Integer), "INTEGER");
|
||||
ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Real), "REAL");
|
||||
ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Text), "TEXT");
|
||||
ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Blob), "BLOB");
|
||||
ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Numeric), " NUMERIC");
|
||||
ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Integer), " INTEGER");
|
||||
ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Real), " REAL");
|
||||
ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Text), " TEXT");
|
||||
ASSERT_THAT(SqlStatementBuilder::columnTypeToString(ColumnType::Blob), " BLOB");
|
||||
ASSERT_TRUE(SqlStatementBuilder::columnTypeToString(ColumnType::None).isEmpty());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user