From acf532942293c1db8361ce40b8d424f1a6980a89 Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Tue, 9 Jun 2020 17:31:06 +0200 Subject: [PATCH] Sqlite: Fix null handling Most of it is only silencing a warning but one is fixing a faulty test. So writing null values should now be working. Change-Id: If702e1fc8176a9e0ae82a5589c719d567929202b Reviewed-by: hjk Reviewed-by: Tim Jenssen --- src/libs/sqlite/createtablesqlstatementbuilder.cpp | 2 ++ src/libs/sqlite/sqlitebasestatement.cpp | 3 +++ src/libs/sqlite/sqlitevalue.h | 4 ++++ tests/unit/unittest/gtest-creator-printing.cpp | 3 +++ tests/unit/unittest/sqlitestatement-test.cpp | 1 + 5 files changed, 13 insertions(+) diff --git a/src/libs/sqlite/createtablesqlstatementbuilder.cpp b/src/libs/sqlite/createtablesqlstatementbuilder.cpp index 2ea93d2bcdd..07008a9a1da 100644 --- a/src/libs/sqlite/createtablesqlstatementbuilder.cpp +++ b/src/libs/sqlite/createtablesqlstatementbuilder.cpp @@ -192,6 +192,8 @@ public: columnDefinitionString.append(defaultValue.value.toStringView()); columnDefinitionString.append("'"); break; + default: + break; } } diff --git a/src/libs/sqlite/sqlitebasestatement.cpp b/src/libs/sqlite/sqlitebasestatement.cpp index f8dadeb425b..ce22ece5262 100644 --- a/src/libs/sqlite/sqlitebasestatement.cpp +++ b/src/libs/sqlite/sqlitebasestatement.cpp @@ -214,6 +214,9 @@ void BaseStatement::bind(int index, const Value &value) case ValueType::String: bind(index, value.toStringView()); break; + case ValueType::Null: + bind(index, NullValue{}); + break; } } diff --git a/src/libs/sqlite/sqlitevalue.h b/src/libs/sqlite/sqlitevalue.h index a57ad7aa120..934db37642e 100644 --- a/src/libs/sqlite/sqlitevalue.h +++ b/src/libs/sqlite/sqlitevalue.h @@ -102,6 +102,8 @@ public: return QVariant(toFloat()); case ValueType::String: return QVariant(QString(toStringView())); + case ValueType::Null: + break; } return {}; @@ -281,6 +283,8 @@ public: return first.toFloat() == second.toFloat(); case ValueType::String: return first.toStringView() == second.toStringView(); + case ValueType::Null: + return false; } return false; diff --git a/tests/unit/unittest/gtest-creator-printing.cpp b/tests/unit/unittest/gtest-creator-printing.cpp index eab506e3447..039e01bb875 100644 --- a/tests/unit/unittest/gtest-creator-printing.cpp +++ b/tests/unit/unittest/gtest-creator-printing.cpp @@ -320,6 +320,9 @@ std::ostream &operator<<(std::ostream &out, const Value &value) case Sqlite::ValueType::String: out << "\"" << value.toStringView() << "\""; break; + case Sqlite::ValueType::Null: + out << "null"; + break; } return out << ")"; diff --git a/tests/unit/unittest/sqlitestatement-test.cpp b/tests/unit/unittest/sqlitestatement-test.cpp index a7dd5d5f9ba..cc264bf90f5 100644 --- a/tests/unit/unittest/sqlitestatement-test.cpp +++ b/tests/unit/unittest/sqlitestatement-test.cpp @@ -388,6 +388,7 @@ TEST_F(SqliteStatement, WritePointerValues) TEST_F(SqliteStatement, WriteNullValues) { WriteStatement statement("UPDATE test SET name=?, number=? WHERE rowid=?", database); + statement.write(1, 1, 1); statement.write(Sqlite::NullValue{}, Sqlite::Value{}, 1);