diff --git a/include/sqlpp11/core/clause/single_table.h b/include/sqlpp11/core/clause/single_table.h index f795f2cd..8891107a 100644 --- a/include/sqlpp11/core/clause/single_table.h +++ b/include/sqlpp11/core/clause/single_table.h @@ -122,7 +122,7 @@ namespace sqlpp template auto single_table(Table table) const -> _new_statement_t, single_table_t> { - return _single_table_impl(check_update_table_t
{}, table); + return _single_table_impl(check_update_table_t
{}, std::move(table)); } private: @@ -149,8 +149,8 @@ namespace sqlpp } template - auto single_table(T&& t) -> decltype(statement_t().single_table(std::forward(t))) + auto single_table(T t) -> decltype(statement_t().single_table(t)) { - return statement_t().single_table(std::forward(t)); + return statement_t().single_table(std::move(t)); } } // namespace sqlpp diff --git a/include/sqlpp11/core/clause/using.h b/include/sqlpp11/core/clause/using.h index 6e23eec3..949aac80 100644 --- a/include/sqlpp11/core/clause/using.h +++ b/include/sqlpp11/core/clause/using.h @@ -140,4 +140,5 @@ namespace sqlpp { return " USING " + tuple_to_sql_string(context, t._tables, tuple_operand{", "}); } +#warning: Move this to postgresql as neither mysql nor sqlite support it, I think? } // namespace sqlpp diff --git a/tests/core/serialize/clause/CMakeLists.txt b/tests/core/serialize/clause/CMakeLists.txt index 14b99ff7..40397fc2 100644 --- a/tests/core/serialize/clause/CMakeLists.txt +++ b/tests/core/serialize/clause/CMakeLists.txt @@ -43,7 +43,9 @@ create_test(order_by) create_test(select) create_test(select_columns) create_test(select_flags) +create_test(single_table) create_test(union) +create_test(update) create_test(update_set) create_test(where) diff --git a/tests/core/serialize/clause/single_table.cpp b/tests/core/serialize/clause/single_table.cpp new file mode 100644 index 00000000..04193ce6 --- /dev/null +++ b/tests/core/serialize/clause/single_table.cpp @@ -0,0 +1,38 @@ +/* + * 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 + +int main() +{ + const auto foo = test::TabFoo{}; + + // Single table + SQLPP_COMPARE(single_table(foo), " tab_foo"); + + return 0; +} diff --git a/tests/core/serialize/clause/update.cpp b/tests/core/serialize/clause/update.cpp new file mode 100644 index 00000000..c8ab2c66 --- /dev/null +++ b/tests/core/serialize/clause/update.cpp @@ -0,0 +1,44 @@ +/* + * 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 + +int main(int, char* []) +{ + const auto foo = test::TabFoo{}; + + // Update all. + SQLPP_COMPARE(update(foo).set(foo.id = 7).unconditionally(), "UPDATE tab_foo SET id = 7"); + + // Update some. + SQLPP_COMPARE(update(foo) + .set(sqlpp::dynamic(true, foo.id = 7), sqlpp::dynamic(false, foo.textNnD = "cheesecake")) + .where(foo.id > 17), + "UPDATE tab_foo SET id = 7 WHERE tab_foo.id > 17"); + + return 0; +}