From 2dbddc565086b488c643b3bee7371da45b4e5815 Mon Sep 17 00:00:00 2001 From: Roland Bock Date: Sun, 22 Sep 2024 10:33:12 +0200 Subject: [PATCH] Add serialize tests for insert --- tests/core/serialize/clause/CMakeLists.txt | 1 + tests/core/serialize/clause/insert.cpp | 59 ++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 tests/core/serialize/clause/insert.cpp diff --git a/tests/core/serialize/clause/CMakeLists.txt b/tests/core/serialize/clause/CMakeLists.txt index 9ae32bf5..6316b62b 100644 --- a/tests/core/serialize/clause/CMakeLists.txt +++ b/tests/core/serialize/clause/CMakeLists.txt @@ -30,6 +30,7 @@ function(create_test name) endfunction() create_test(group_by) +create_test(insert) create_test(insert_columns) create_test(insert_default_values) create_test(insert_set) diff --git a/tests/core/serialize/clause/insert.cpp b/tests/core/serialize/clause/insert.cpp new file mode 100644 index 00000000..88a372bf --- /dev/null +++ b/tests/core/serialize/clause/insert.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2024, Roland Bock + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "Sample.h" +#include "../compare.h" +#include + +SQLPP_CREATE_NAME_TAG(v); + +int main(int, char* []) +{ + const auto val = sqlpp::value(17); + const auto expr = sqlpp::value(17) + 4; + + const auto foo = test::TabFoo{}; + + // Without values. + SQLPP_COMPARE(insert_into(foo), "INSERT INTO tab_foo"); + + // Default values. + SQLPP_COMPARE(insert_into(foo).default_values(), "INSERT INTO tab_foo DEFAULT VALUES"); + + // Single row with "SET". + SQLPP_COMPARE(insert_into(foo).set(foo.id = 17, foo.boolN = sqlpp::nullopt, foo.textNnD = "cake"), "INSERT INTO tab_foo (id, bool_n, text_nn_d) VALUES(17, NULL, 'cake')"); + + // Multiple rows with columns and values. + { + auto i = insert_into(foo).columns(foo.id, foo.boolN, foo.textNnD); + i.add_values(foo.id = sqlpp::default_value, foo.boolN = sqlpp::default_value, foo.textNnD = "cheese"); + i.add_values(foo.id = 17, foo.boolN = sqlpp::nullopt, foo.textNnD = "cake"); + SQLPP_COMPARE(i, "INSERT INTO tab_foo (id, bool_n, text_nn_d) VALUES (DEFAULT, DEFAULT, 'cheese'), (17, NULL, 'cake')"); + } + +#warning: need to add type tests, including executability + + return 0; +}