From 64d16bfee0f004b0bda33e769b4150fb4da3d181 Mon Sep 17 00:00:00 2001 From: Roland Bock Date: Sun, 5 Feb 2023 09:31:30 +0100 Subject: [PATCH] Cleanup parens for ANY and SOME --- include/sqlpp11/any.h | 5 ++-- include/sqlpp11/some.h | 5 ++-- tests/core/serialize/Any.cpp | 39 +++++++++++++++++++++++++++++ tests/core/serialize/CMakeLists.txt | 2 ++ tests/core/serialize/Exists.cpp | 2 ++ tests/core/serialize/Some.cpp | 39 +++++++++++++++++++++++++++++ 6 files changed, 86 insertions(+), 6 deletions(-) create mode 100644 tests/core/serialize/Any.cpp create mode 100644 tests/core/serialize/Some.cpp diff --git a/include/sqlpp11/any.h b/include/sqlpp11/any.h index d0ea8b1c..0535f644 100644 --- a/include/sqlpp11/any.h +++ b/include/sqlpp11/any.h @@ -55,9 +55,8 @@ namespace sqlpp template Context& serialize(const any_t& t, Context& context) { - context << "SOME("; - serialize(t._select, context); - context << ")"; + context << "SOME"; + serialize_operand(t._select, context); return context; } diff --git a/tests/core/serialize/Any.cpp b/tests/core/serialize/Any.cpp new file mode 100644 index 00000000..807b2a08 --- /dev/null +++ b/tests/core/serialize/Any.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023, 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 Any(int, char* []) +{ + const auto bar = test::TabBar{}; + + // With sub select. + compare(__LINE__, any(select(bar.alpha).from(bar).where(bar.alpha > 17)), "ANY(SELECT tab_bar.alpha FROM tab_bar WHERE (tab_bar.alpha>17))"); + compare(__LINE__, bar.delta == any(select(bar.alpha).from(bar).where(bar.alpha > 17)), "(tab_bar.delta=ANY(SELECT tab_bar.alpha FROM tab_bar WHERE (tab_bar.alpha>17)))"); + + return 0; +} diff --git a/tests/core/serialize/CMakeLists.txt b/tests/core/serialize/CMakeLists.txt index 0411902b..0b98e9ce 100644 --- a/tests/core/serialize/CMakeLists.txt +++ b/tests/core/serialize/CMakeLists.txt @@ -23,6 +23,7 @@ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. set(test_files + Any.cpp As.cpp Avg.cpp Blob.cpp @@ -41,6 +42,7 @@ set(test_files Min.cpp Operator.cpp Over.cpp + Some.cpp Sum.cpp TableAlias.cpp Trim.cpp diff --git a/tests/core/serialize/Exists.cpp b/tests/core/serialize/Exists.cpp index 6d40f724..531206d1 100644 --- a/tests/core/serialize/Exists.cpp +++ b/tests/core/serialize/Exists.cpp @@ -33,6 +33,8 @@ int Exists(int, char* []) // With sub select. compare(__LINE__, exists(select(bar.alpha).from(bar).where(bar.alpha > 17)), "EXISTS(SELECT tab_bar.alpha FROM tab_bar WHERE (tab_bar.alpha>17))"); + compare(__LINE__, bar.beta == "" and exists(select(bar.alpha).from(bar).where(bar.alpha > 17)), + "((tab_bar.beta='') AND EXISTS(SELECT tab_bar.alpha FROM tab_bar WHERE (tab_bar.alpha>17)))"); return 0; } diff --git a/tests/core/serialize/Some.cpp b/tests/core/serialize/Some.cpp new file mode 100644 index 00000000..0d0bd7e4 --- /dev/null +++ b/tests/core/serialize/Some.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023, 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 Some(int, char* []) +{ + const auto bar = test::TabBar{}; + + // With sub select. + compare(__LINE__, some(select(bar.alpha).from(bar).where(bar.alpha > 17)), "SOME(SELECT tab_bar.alpha FROM tab_bar WHERE (tab_bar.alpha>17))"); + compare(__LINE__, bar.delta == some(select(bar.alpha).from(bar).where(bar.alpha > 17)), "(tab_bar.delta=SOME(SELECT tab_bar.alpha FROM tab_bar WHERE (tab_bar.alpha>17)))"); + + return 0; +}