From 1c4f1f61c81fbbcb7d2d873f7d0c112dc16a7dd8 Mon Sep 17 00:00:00 2001 From: Roland Bock Date: Sat, 4 Feb 2023 09:05:04 +0100 Subject: [PATCH] Allow TRIM to be used with sub selects --- include/sqlpp11/trim.h | 2 +- tests/core/serialize/CMakeLists.txt | 1 + tests/core/serialize/Lower.cpp | 2 +- tests/core/serialize/Trim.cpp | 45 +++++++++++++++++++++++++++++ tests/core/serialize/Upper.cpp | 2 +- 5 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 tests/core/serialize/Trim.cpp diff --git a/include/sqlpp11/trim.h b/include/sqlpp11/trim.h index 8c46d6b3..9f8eac74 100644 --- a/include/sqlpp11/trim.h +++ b/include/sqlpp11/trim.h @@ -83,7 +83,7 @@ namespace sqlpp Context& serialize(const trim_t& t, Context& context) { context << "TRIM("; - serialize(t._expr, context); + serialize_operand(t._expr, context); context << ")"; return context; } diff --git a/tests/core/serialize/CMakeLists.txt b/tests/core/serialize/CMakeLists.txt index 4aacac5e..8ee4c4ee 100644 --- a/tests/core/serialize/CMakeLists.txt +++ b/tests/core/serialize/CMakeLists.txt @@ -40,6 +40,7 @@ set(test_files Over.cpp Sum.cpp TableAlias.cpp + Trim.cpp Upper.cpp Where.cpp ParameterizedVerbatim.cpp diff --git a/tests/core/serialize/Lower.cpp b/tests/core/serialize/Lower.cpp index 859d774c..b76c4cb4 100644 --- a/tests/core/serialize/Lower.cpp +++ b/tests/core/serialize/Lower.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2023, Roland Bock + * Copyright (c) 2023, Roland Bock * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, diff --git a/tests/core/serialize/Trim.cpp b/tests/core/serialize/Trim.cpp new file mode 100644 index 00000000..d68afb12 --- /dev/null +++ b/tests/core/serialize/Trim.cpp @@ -0,0 +1,45 @@ +/* + * 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 Trim(int, char* []) +{ + const auto bar = test::TabBar{}; + + // Single column. + compare(__LINE__, trim(bar.beta), "TRIM(tab_bar.beta)"); + + // Expression. + // Note that the inner parens aren't necessary. + compare(__LINE__, trim(bar.beta + "suffix"), "TRIM((tab_bar.beta||'suffix'))"); + + // With sub select. + compare(__LINE__, trim(select(sqlpp::value("something").as(sqlpp::alias::a))), "TRIM((SELECT 'something' AS a))"); + + return 0; +} diff --git a/tests/core/serialize/Upper.cpp b/tests/core/serialize/Upper.cpp index 47db0659..6498d272 100644 --- a/tests/core/serialize/Upper.cpp +++ b/tests/core/serialize/Upper.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023-2023, Roland Bock + * Copyright (c) 2023, Roland Bock * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification,