From 1e9910b12f53b6bb6507cd6615c9f3fa7612ad27 Mon Sep 17 00:00:00 2001 From: rbock Date: Tue, 17 Feb 2015 08:03:19 +0100 Subject: [PATCH] Replaced node tuple by node type vector --- include/sqlpp11/alias.h | 2 +- include/sqlpp11/any.h | 2 +- include/sqlpp11/assignment.h | 2 +- include/sqlpp11/avg.h | 2 +- include/sqlpp11/boolean_expression.h | 2 +- include/sqlpp11/column.h | 2 +- include/sqlpp11/concat.h | 2 +- include/sqlpp11/count.h | 2 +- include/sqlpp11/cte.h | 6 ++-- include/sqlpp11/custom_query.h | 2 +- include/sqlpp11/default_value.h | 2 +- include/sqlpp11/detail/type_vector.h | 41 ++++++++++++++++++++++++++ include/sqlpp11/exists.h | 2 +- include/sqlpp11/expression.h | 10 +++---- include/sqlpp11/extra_tables.h | 4 +-- include/sqlpp11/field_spec.h | 2 +- include/sqlpp11/from.h | 4 +-- include/sqlpp11/functions.h | 2 +- include/sqlpp11/group_by.h | 4 +-- include/sqlpp11/having.h | 4 +-- include/sqlpp11/in.h | 2 +- include/sqlpp11/insert_value.h | 2 +- include/sqlpp11/insert_value_list.h | 8 ++--- include/sqlpp11/into.h | 4 +-- include/sqlpp11/is_not_null.h | 2 +- include/sqlpp11/is_null.h | 2 +- include/sqlpp11/join.h | 2 +- include/sqlpp11/like.h | 2 +- include/sqlpp11/limit.h | 6 ++-- include/sqlpp11/max.h | 2 +- include/sqlpp11/min.h | 2 +- include/sqlpp11/multi_column.h | 4 +-- include/sqlpp11/noop.h | 2 +- include/sqlpp11/not_in.h | 2 +- include/sqlpp11/null.h | 2 +- include/sqlpp11/offset.h | 6 ++-- include/sqlpp11/on.h | 2 +- include/sqlpp11/order_by.h | 4 +-- include/sqlpp11/parameter.h | 2 +- include/sqlpp11/prepared_execute.h | 2 +- include/sqlpp11/prepared_insert.h | 2 +- include/sqlpp11/prepared_remove.h | 2 +- include/sqlpp11/prepared_select.h | 2 +- include/sqlpp11/prepared_update.h | 2 +- include/sqlpp11/result_field_methods.h | 2 +- include/sqlpp11/result_row.h | 2 +- include/sqlpp11/rhs_wrap.h | 2 +- include/sqlpp11/select_column_list.h | 4 +-- include/sqlpp11/select_flag_list.h | 4 +-- include/sqlpp11/select_flags.h | 6 ++-- include/sqlpp11/select_pseudo_table.h | 2 +- include/sqlpp11/simple_column.h | 2 +- include/sqlpp11/single_table.h | 4 +-- include/sqlpp11/some.h | 2 +- include/sqlpp11/sort_order.h | 2 +- include/sqlpp11/statement.h | 6 ++-- include/sqlpp11/sum.h | 2 +- include/sqlpp11/table.h | 2 +- include/sqlpp11/table_alias.h | 2 +- include/sqlpp11/tvin.h | 4 +-- include/sqlpp11/type_traits.h | 9 +++--- include/sqlpp11/union.h | 4 +-- include/sqlpp11/update_list.h | 4 +-- include/sqlpp11/using.h | 4 +-- include/sqlpp11/value_or_null.h | 2 +- include/sqlpp11/verbatim.h | 2 +- include/sqlpp11/verbatim_table.h | 2 +- include/sqlpp11/where.h | 6 ++-- include/sqlpp11/with.h | 4 +-- include/sqlpp11/wrap_operand.h | 8 ++--- 70 files changed, 151 insertions(+), 109 deletions(-) create mode 100644 include/sqlpp11/detail/type_vector.h diff --git a/include/sqlpp11/alias.h b/include/sqlpp11/alias.h index ecebe23b..013d2e6f 100644 --- a/include/sqlpp11/alias.h +++ b/include/sqlpp11/alias.h @@ -36,7 +36,7 @@ namespace sqlpp struct expression_alias_t { using _traits = make_traits, tag::is_selectable, tag::is_alias>; - using _nodes = std::tuple; + using _nodes = detail::type_vector; static_assert(is_expression_t::value, "invalid argument for an expression alias"); static_assert(not is_alias_t::value, "cannot create an alias of an alias"); diff --git a/include/sqlpp11/any.h b/include/sqlpp11/any.h index 2c876397..8585de1d 100644 --- a/include/sqlpp11/any.h +++ b/include/sqlpp11/any.h @@ -37,7 +37,7 @@ namespace sqlpp struct any_t { using _traits = make_traits, tag::is_multi_expression>; - using _nodes = std::tuple; struct _alias_t { diff --git a/include/sqlpp11/assignment.h b/include/sqlpp11/assignment.h index 1496a0e1..4c405d6b 100644 --- a/include/sqlpp11/assignment.h +++ b/include/sqlpp11/assignment.h @@ -41,7 +41,7 @@ namespace sqlpp struct assignment_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _lhs_t = Lhs; using _rhs_t = rhs_wrap_t, trivial_value_is_null_t<_lhs_t>::value>; diff --git a/include/sqlpp11/avg.h b/include/sqlpp11/avg.h index d184ccb4..d332cf33 100644 --- a/include/sqlpp11/avg.h +++ b/include/sqlpp11/avg.h @@ -38,7 +38,7 @@ namespace sqlpp public alias_operators> { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; static_assert(is_noop::value or std::is_same::value, "avg() used with flag other than 'distinct'"); static_assert(is_numeric_t::value, "avg() requires a value expression as argument"); diff --git a/include/sqlpp11/boolean_expression.h b/include/sqlpp11/boolean_expression.h index cc72e846..73ee01ff 100644 --- a/include/sqlpp11/boolean_expression.h +++ b/include/sqlpp11/boolean_expression.h @@ -36,7 +36,7 @@ namespace sqlpp struct boolean_expression_t: public expression_operators, boolean> { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; template boolean_expression_t(Expr expr): diff --git a/include/sqlpp11/column.h b/include/sqlpp11/column.h index 495e70c7..8a6911bc 100644 --- a/include/sqlpp11/column.h +++ b/include/sqlpp11/column.h @@ -52,7 +52,7 @@ namespace sqlpp using _tags = detail::make_joined_set_t, typename ColumnSpec::_traits::_tags>; }; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _required_tables = detail::type_set; using _can_be_null = column_spec_can_be_null_t; diff --git a/include/sqlpp11/concat.h b/include/sqlpp11/concat.h index 24ebb046..bc0ac76b 100644 --- a/include/sqlpp11/concat.h +++ b/include/sqlpp11/concat.h @@ -42,7 +42,7 @@ namespace sqlpp public alias_operators> { using _traits = make_traits, tag::is_expression, tag::is_selectable>; - using _nodes = std::tuple; + using _nodes = detail::type_vector; static_assert(sizeof...(Args) > 0, "concat requires two arguments at least"); static_assert(logic::all_t::value, is_text_t::value...>::value, "at least one non-text argument detected in concat()"); diff --git a/include/sqlpp11/count.h b/include/sqlpp11/count.h index 63c5f4c7..f2801f98 100644 --- a/include/sqlpp11/count.h +++ b/include/sqlpp11/count.h @@ -40,7 +40,7 @@ namespace sqlpp { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _can_be_null = std::false_type; static_assert(is_noop::value or std::is_same::value, "count() used with flag other than 'distinct'"); diff --git a/include/sqlpp11/cte.h b/include/sqlpp11/cte.h index 64ca2d66..376b262d 100644 --- a/include/sqlpp11/cte.h +++ b/include/sqlpp11/cte.h @@ -43,7 +43,7 @@ namespace sqlpp template struct cte_union_t { - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _required_ctes = detail::make_joined_set_t, required_ctes_of>; using _parameters = detail::make_parameter_tuple_t, parameters_of>; @@ -132,7 +132,7 @@ namespace sqlpp struct cte_t: public member_t, column_t>>... { using _traits = make_traits; // FIXME: is table? really? - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _required_ctes = detail::make_joined_set_t, detail::type_set>; using _parameters = parameters_of; @@ -220,7 +220,7 @@ namespace sqlpp struct cte_ref_t { using _traits = make_traits; // FIXME: is table? really? - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _required_ctes = detail::make_type_set_t; using _provided_tables = detail::type_set; diff --git a/include/sqlpp11/custom_query.h b/include/sqlpp11/custom_query.h index e9ecc0a9..792be16a 100644 --- a/include/sqlpp11/custom_query.h +++ b/include/sqlpp11/custom_query.h @@ -54,7 +54,7 @@ namespace sqlpp { using _methods_t = typename detail::custom_parts_t::_result_methods_t; using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _parameter_check = typename std::conditional>::value == 0, consistent_t, assert_no_parameters_t>::type; diff --git a/include/sqlpp11/default_value.h b/include/sqlpp11/default_value.h index be4ff565..1a71442a 100644 --- a/include/sqlpp11/default_value.h +++ b/include/sqlpp11/default_value.h @@ -34,7 +34,7 @@ namespace sqlpp struct default_value_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; static constexpr bool _is_trivial() { return false; } }; diff --git a/include/sqlpp11/detail/type_vector.h b/include/sqlpp11/detail/type_vector.h new file mode 100644 index 00000000..06e41d25 --- /dev/null +++ b/include/sqlpp11/detail/type_vector.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2013-2015, 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. + */ + +#ifndef SQLPP_DETAIL_TYPE_VECTOR_H +#define SQLPP_DETAIL_TYPE_VECTOR_H + +namespace sqlpp +{ + namespace detail + { + template + struct type_vector + {}; + } +} + + +#endif diff --git a/include/sqlpp11/exists.h b/include/sqlpp11/exists.h index d1699a06..be72191f 100644 --- a/include/sqlpp11/exists.h +++ b/include/sqlpp11/exists.h @@ -38,7 +38,7 @@ namespace sqlpp public alias_operators> { using _traits = make_traits; - using _nodes = std::tuple; static_assert(is_select_t
; + using _nodes = detail::type_vector
; using _data_t = into_data_t; @@ -108,7 +108,7 @@ namespace sqlpp struct no_into_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = no_data_t; diff --git a/include/sqlpp11/is_not_null.h b/include/sqlpp11/is_not_null.h index ea34a892..78e49123 100644 --- a/include/sqlpp11/is_not_null.h +++ b/include/sqlpp11/is_not_null.h @@ -40,7 +40,7 @@ namespace sqlpp public alias_operators> { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; struct _alias_t { diff --git a/include/sqlpp11/is_null.h b/include/sqlpp11/is_null.h index fd788374..0a798067 100644 --- a/include/sqlpp11/is_null.h +++ b/include/sqlpp11/is_null.h @@ -40,7 +40,7 @@ namespace sqlpp public alias_operators> { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; struct _alias_t { diff --git a/include/sqlpp11/join.h b/include/sqlpp11/join.h index 46eadd48..8e2578d6 100644 --- a/include/sqlpp11/join.h +++ b/include/sqlpp11/join.h @@ -66,7 +66,7 @@ namespace sqlpp struct join_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _can_be_null = std::false_type; static_assert(is_table_t::value, "lhs argument for join() has to be a table or join"); diff --git a/include/sqlpp11/like.h b/include/sqlpp11/like.h index b8ea9952..02adeba0 100644 --- a/include/sqlpp11/like.h +++ b/include/sqlpp11/like.h @@ -40,7 +40,7 @@ namespace sqlpp public alias_operators> { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; struct _alias_t { diff --git a/include/sqlpp11/limit.h b/include/sqlpp11/limit.h index 013ff092..c740c8dc 100644 --- a/include/sqlpp11/limit.h +++ b/include/sqlpp11/limit.h @@ -55,7 +55,7 @@ namespace sqlpp struct limit_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; // Data using _data_t = limit_data_t; @@ -118,7 +118,7 @@ namespace sqlpp struct dynamic_limit_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = dynamic_limit_data_t; @@ -163,7 +163,7 @@ namespace sqlpp struct no_limit_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = no_data_t; diff --git a/include/sqlpp11/max.h b/include/sqlpp11/max.h index 6dfcb593..c497a56d 100644 --- a/include/sqlpp11/max.h +++ b/include/sqlpp11/max.h @@ -38,7 +38,7 @@ namespace sqlpp public alias_operators> { using _traits = make_traits, tag::is_expression, tag::is_selectable>; - using _nodes = std::tuple; + using _nodes = detail::type_vector; struct _alias_t { diff --git a/include/sqlpp11/min.h b/include/sqlpp11/min.h index f19a7e6f..95649823 100644 --- a/include/sqlpp11/min.h +++ b/include/sqlpp11/min.h @@ -38,7 +38,7 @@ namespace sqlpp public alias_operators> { using _traits = make_traits, tag::is_expression, tag::is_selectable>; - using _nodes = std::tuple; + using _nodes = detail::type_vector; struct _alias_t { diff --git a/include/sqlpp11/multi_column.h b/include/sqlpp11/multi_column.h index 2e3ab96a..8147d3c2 100644 --- a/include/sqlpp11/multi_column.h +++ b/include/sqlpp11/multi_column.h @@ -42,7 +42,7 @@ namespace sqlpp struct multi_column_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; static_assert(logic::all_t::value...>::value, "multi_column parameters need to be named expressions"); @@ -73,7 +73,7 @@ namespace sqlpp struct multi_column_alias_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; static_assert(logic::all_t::value...>::value, "multi_column parameters need to be named expressions"); diff --git a/include/sqlpp11/noop.h b/include/sqlpp11/noop.h index 8fd7ec86..0a023b80 100644 --- a/include/sqlpp11/noop.h +++ b/include/sqlpp11/noop.h @@ -37,7 +37,7 @@ namespace sqlpp struct noop { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; struct _alias_t {}; diff --git a/include/sqlpp11/not_in.h b/include/sqlpp11/not_in.h index fdf4ac44..cddfc119 100644 --- a/include/sqlpp11/not_in.h +++ b/include/sqlpp11/not_in.h @@ -41,7 +41,7 @@ namespace sqlpp public alias_operators> { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; static_assert(sizeof...(Args) > 0, "not_in() requires at least one argument"); diff --git a/include/sqlpp11/null.h b/include/sqlpp11/null.h index 2a705bb5..9b01b69e 100644 --- a/include/sqlpp11/null.h +++ b/include/sqlpp11/null.h @@ -34,7 +34,7 @@ namespace sqlpp struct null_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; }; template diff --git a/include/sqlpp11/offset.h b/include/sqlpp11/offset.h index 28e4d565..bb9b1406 100644 --- a/include/sqlpp11/offset.h +++ b/include/sqlpp11/offset.h @@ -55,7 +55,7 @@ namespace sqlpp struct offset_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; static_assert(is_integral_t::value, "offset requires an integral value or integral parameter"); @@ -120,7 +120,7 @@ namespace sqlpp struct dynamic_offset_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = dynamic_offset_data_t; @@ -177,7 +177,7 @@ namespace sqlpp struct no_offset_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = no_data_t; diff --git a/include/sqlpp11/on.h b/include/sqlpp11/on.h index db959026..81cff460 100644 --- a/include/sqlpp11/on.h +++ b/include/sqlpp11/on.h @@ -38,7 +38,7 @@ namespace sqlpp struct on_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _is_dynamic = is_database; diff --git a/include/sqlpp11/order_by.h b/include/sqlpp11/order_by.h index bdd2c312..bc85d708 100644 --- a/include/sqlpp11/order_by.h +++ b/include/sqlpp11/order_by.h @@ -71,7 +71,7 @@ namespace sqlpp struct order_by_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _is_dynamic = is_database; @@ -141,7 +141,7 @@ namespace sqlpp struct no_order_by_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = no_data_t; diff --git a/include/sqlpp11/parameter.h b/include/sqlpp11/parameter.h index 0acbba76..d0542a64 100644 --- a/include/sqlpp11/parameter.h +++ b/include/sqlpp11/parameter.h @@ -39,7 +39,7 @@ namespace sqlpp { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _parameters = std::tuple; using _can_be_null = std::true_type; diff --git a/include/sqlpp11/prepared_execute.h b/include/sqlpp11/prepared_execute.h index 56f935d6..7027bbc0 100644 --- a/include/sqlpp11/prepared_execute.h +++ b/include/sqlpp11/prepared_execute.h @@ -37,7 +37,7 @@ namespace sqlpp struct prepared_execute_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _parameter_list_t = make_parameter_list_t; using _prepared_statement_t = typename Db::_prepared_statement_t; diff --git a/include/sqlpp11/prepared_insert.h b/include/sqlpp11/prepared_insert.h index a44b2214..416b46de 100644 --- a/include/sqlpp11/prepared_insert.h +++ b/include/sqlpp11/prepared_insert.h @@ -37,7 +37,7 @@ namespace sqlpp struct prepared_insert_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _parameter_list_t = make_parameter_list_t; using _prepared_statement_t = typename Db::_prepared_statement_t; diff --git a/include/sqlpp11/prepared_remove.h b/include/sqlpp11/prepared_remove.h index 0c67cd61..3d75c9e0 100644 --- a/include/sqlpp11/prepared_remove.h +++ b/include/sqlpp11/prepared_remove.h @@ -37,7 +37,7 @@ namespace sqlpp struct prepared_remove_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _parameter_list_t = make_parameter_list_t; using _prepared_statement_t = typename Db::_prepared_statement_t; diff --git a/include/sqlpp11/prepared_select.h b/include/sqlpp11/prepared_select.h index 112586f7..5d5893f5 100644 --- a/include/sqlpp11/prepared_select.h +++ b/include/sqlpp11/prepared_select.h @@ -37,7 +37,7 @@ namespace sqlpp struct prepared_select_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _result_row_t = typename Statement::template _result_row_t; using _parameter_list_t = make_parameter_list_t; diff --git a/include/sqlpp11/prepared_update.h b/include/sqlpp11/prepared_update.h index c9190188..cac4af4b 100644 --- a/include/sqlpp11/prepared_update.h +++ b/include/sqlpp11/prepared_update.h @@ -37,7 +37,7 @@ namespace sqlpp struct prepared_update_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _parameter_list_t = make_parameter_list_t; using _prepared_statement_t = typename Db::_prepared_statement_t; diff --git a/include/sqlpp11/result_field_methods.h b/include/sqlpp11/result_field_methods.h index 2e7ec984..850d1f43 100644 --- a/include/sqlpp11/result_field_methods.h +++ b/include/sqlpp11/result_field_methods.h @@ -81,7 +81,7 @@ namespace sqlpp tag::is_expression, tag_if>; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _can_be_null = column_spec_can_be_null_t<_field_spec_t>; }; diff --git a/include/sqlpp11/result_row.h b/include/sqlpp11/result_row.h index f814037e..02924a01 100644 --- a/include/sqlpp11/result_row.h +++ b/include/sqlpp11/result_row.h @@ -185,7 +185,7 @@ namespace sqlpp struct _field_spec_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; struct _alias_t {}; }; diff --git a/include/sqlpp11/rhs_wrap.h b/include/sqlpp11/rhs_wrap.h index 54c1e114..d48f6c22 100644 --- a/include/sqlpp11/rhs_wrap.h +++ b/include/sqlpp11/rhs_wrap.h @@ -118,7 +118,7 @@ namespace sqlpp struct rhs_wrap_t { using _traits = typename Expr::_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; rhs_wrap_t(Expr expr): _expr(expr) diff --git a/include/sqlpp11/select_column_list.h b/include/sqlpp11/select_column_list.h index ea38d3a5..0a5b5e74 100644 --- a/include/sqlpp11/select_column_list.h +++ b/include/sqlpp11/select_column_list.h @@ -164,7 +164,7 @@ namespace sqlpp struct select_column_list_t { using _traits = typename detail::select_traits::_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _alias_t = typename detail::select_traits::_alias_t; @@ -353,7 +353,7 @@ namespace sqlpp struct no_select_column_list_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; struct _alias_t {}; diff --git a/include/sqlpp11/select_flag_list.h b/include/sqlpp11/select_flag_list.h index 1c3f84bf..1cd4fc5f 100644 --- a/include/sqlpp11/select_flag_list.h +++ b/include/sqlpp11/select_flag_list.h @@ -60,7 +60,7 @@ namespace sqlpp struct select_flag_list_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _is_dynamic = is_database; @@ -128,7 +128,7 @@ namespace sqlpp struct no_select_flag_list_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = no_data_t; diff --git a/include/sqlpp11/select_flags.h b/include/sqlpp11/select_flags.h index 65a75fb5..c9210486 100644 --- a/include/sqlpp11/select_flags.h +++ b/include/sqlpp11/select_flags.h @@ -38,7 +38,7 @@ namespace sqlpp struct all_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; }; static constexpr all_t all = {}; @@ -57,7 +57,7 @@ namespace sqlpp struct distinct_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; }; static constexpr distinct_t distinct = {}; @@ -76,7 +76,7 @@ namespace sqlpp struct straight_join_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; }; static constexpr straight_join_t straight_join = {}; diff --git a/include/sqlpp11/select_pseudo_table.h b/include/sqlpp11/select_pseudo_table.h index 5953ad30..2f027dd0 100644 --- a/include/sqlpp11/select_pseudo_table.h +++ b/include/sqlpp11/select_pseudo_table.h @@ -58,7 +58,7 @@ namespace sqlpp NamedExpr...>, select_column_spec_t...> { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; select_pseudo_table_t(Select select): _select(select) diff --git a/include/sqlpp11/simple_column.h b/include/sqlpp11/simple_column.h index 26e7062f..c5442a61 100644 --- a/include/sqlpp11/simple_column.h +++ b/include/sqlpp11/simple_column.h @@ -39,7 +39,7 @@ namespace sqlpp _column_t _column; using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; }; template diff --git a/include/sqlpp11/single_table.h b/include/sqlpp11/single_table.h index c22c1aa4..dc9b7798 100644 --- a/include/sqlpp11/single_table.h +++ b/include/sqlpp11/single_table.h @@ -58,7 +58,7 @@ namespace sqlpp struct single_table_t { using _traits = make_traits; - using _nodes = std::tuple
; + using _nodes = detail::type_vector
; static_assert(is_table_t
::value, "argument has to be a table"); static_assert(required_tables_of
::size::value == 0, "table depends on another table"); @@ -99,7 +99,7 @@ namespace sqlpp struct no_single_table_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = no_data_t; diff --git a/include/sqlpp11/some.h b/include/sqlpp11/some.h index 9747ebcb..1800e974 100644 --- a/include/sqlpp11/some.h +++ b/include/sqlpp11/some.h @@ -37,7 +37,7 @@ namespace sqlpp struct some_t { using _traits = make_traits, tag::is_multi_expression>; - using _nodes = std::tuple; struct _alias_t { diff --git a/include/sqlpp11/sort_order.h b/include/sqlpp11/sort_order.h index 546ff4f1..1dea7449 100644 --- a/include/sqlpp11/sort_order.h +++ b/include/sqlpp11/sort_order.h @@ -42,7 +42,7 @@ namespace sqlpp struct sort_order_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; Expression _expression; }; diff --git a/include/sqlpp11/statement.h b/include/sqlpp11/statement.h index 59ef4a8f..ac47c2c4 100644 --- a/include/sqlpp11/statement.h +++ b/include/sqlpp11/statement.h @@ -148,7 +148,7 @@ namespace sqlpp using _traits = make_traits<_value_type, tag_if::value>>; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _can_be_null = logic::any_t< can_be_null_t<_result_type_provider>::value, detail::make_intersect_set_t< @@ -201,7 +201,7 @@ namespace sqlpp tag_if::value>, tag_if::value>::value>, tag::requires_braces>; - using _nodes = std::tuple<_policies_t>; + using _nodes = detail::type_vector<_policies_t>; using _used_outer_tables = typename _policies_t::_all_provided_outer_tables; using _alias_t = typename _result_type_provider::_alias_t; @@ -275,7 +275,7 @@ namespace sqlpp struct statement_name_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = NameData; diff --git a/include/sqlpp11/sum.h b/include/sqlpp11/sum.h index e23f6fb9..b766d2e3 100644 --- a/include/sqlpp11/sum.h +++ b/include/sqlpp11/sum.h @@ -38,7 +38,7 @@ namespace sqlpp public alias_operators> { using _traits = make_traits, tag::is_expression, tag::is_selectable>; - using _nodes = std::tuple; + using _nodes = detail::type_vector; static_assert(is_noop::value or std::is_same::value, "sum() used with flag other than 'distinct'"); static_assert(is_numeric_t::value, "sum() requires a numeric expression as argument"); diff --git a/include/sqlpp11/table.h b/include/sqlpp11/table.h index 06b2aa93..a7a22b65 100644 --- a/include/sqlpp11/table.h +++ b/include/sqlpp11/table.h @@ -46,7 +46,7 @@ namespace sqlpp { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _provided_tables = detail::type_set
; static_assert(sizeof...(ColumnSpec), "at least one column required per table"); diff --git a/include/sqlpp11/table_alias.h b/include/sqlpp11/table_alias.h index 44277b71..2452ec6c 100644 --- a/include/sqlpp11/table_alias.h +++ b/include/sqlpp11/table_alias.h @@ -42,7 +42,7 @@ namespace sqlpp //FIXME: Need to add join functionality using _traits = make_traits, tag::is_table, tag::is_alias, tag_if::value>>; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _required_ctes = required_ctes_of
; using _provided_tables = detail::type_set; diff --git a/include/sqlpp11/tvin.h b/include/sqlpp11/tvin.h index c5c1ad7d..9c4b3c1a 100644 --- a/include/sqlpp11/tvin.h +++ b/include/sqlpp11/tvin.h @@ -40,7 +40,7 @@ namespace sqlpp struct tvin_arg_t { using _traits = make_traits, tag::is_expression>; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _operand_t = Operand; @@ -102,7 +102,7 @@ namespace sqlpp struct tvin_t { using _traits = make_traits, tag::is_expression>; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _operand_t = Operand; diff --git a/include/sqlpp11/type_traits.h b/include/sqlpp11/type_traits.h index 2a897c4b..763381a5 100644 --- a/include/sqlpp11/type_traits.h +++ b/include/sqlpp11/type_traits.h @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -179,7 +180,7 @@ namespace sqlpp using type = typename T::_##trait;\ };\ template\ - struct trait##_of_impl, void>\ + struct trait##_of_impl, void>\ {\ using type = detail::make_joined_set_t::type...>;\ };\ @@ -208,7 +209,7 @@ namespace sqlpp using type = typename T::_##trait;\ };\ template\ - struct trait##_impl, void>\ + struct trait##_impl, void>\ {\ using type = logic::any_t::type::value...>;\ };\ @@ -232,7 +233,7 @@ namespace sqlpp using type = typename T::_parameters; }; template - struct parameters_of_impl, void> + struct parameters_of_impl, void> { using type = detail::make_parameter_tuple_t::type...>; }; @@ -255,7 +256,7 @@ namespace sqlpp struct aggregate_function { - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _contains_aggregate_function = std::true_type; }; diff --git a/include/sqlpp11/union.h b/include/sqlpp11/union.h index 22023b32..199c0aa8 100644 --- a/include/sqlpp11/union.h +++ b/include/sqlpp11/union.h @@ -66,7 +66,7 @@ namespace sqlpp struct union_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _alias_t = struct{}; @@ -114,7 +114,7 @@ namespace sqlpp struct no_union_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = no_data_t; diff --git a/include/sqlpp11/update_list.h b/include/sqlpp11/update_list.h index 324a8284..d2e3cd9e 100644 --- a/include/sqlpp11/update_list.h +++ b/include/sqlpp11/update_list.h @@ -68,7 +68,7 @@ namespace sqlpp struct update_list_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _is_dynamic = is_database; // Data @@ -153,7 +153,7 @@ namespace sqlpp struct no_update_list_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = no_data_t; diff --git a/include/sqlpp11/using.h b/include/sqlpp11/using.h index 7f8b78fd..10018e14 100644 --- a/include/sqlpp11/using.h +++ b/include/sqlpp11/using.h @@ -58,7 +58,7 @@ namespace sqlpp struct using_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _is_dynamic = is_database; @@ -121,7 +121,7 @@ namespace sqlpp struct no_using_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = no_data_t; diff --git a/include/sqlpp11/value_or_null.h b/include/sqlpp11/value_or_null.h index 8c78c698..ab8fb6a7 100644 --- a/include/sqlpp11/value_or_null.h +++ b/include/sqlpp11/value_or_null.h @@ -51,7 +51,7 @@ namespace sqlpp using _cpp_value_type = typename ValueType::_cpp_value_type; using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; value_or_null_t(_cpp_value_type value): _value(value), diff --git a/include/sqlpp11/verbatim.h b/include/sqlpp11/verbatim.h index b65ec3d8..63ef533e 100644 --- a/include/sqlpp11/verbatim.h +++ b/include/sqlpp11/verbatim.h @@ -39,7 +39,7 @@ namespace sqlpp public alias_operators> { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _can_be_null = std::true_type; // since we do not know what's going on inside the verbatim, we assume it can be null verbatim_t(std::string verbatim): _verbatim(verbatim) {} diff --git a/include/sqlpp11/verbatim_table.h b/include/sqlpp11/verbatim_table.h index 2b23e761..9247d3a6 100644 --- a/include/sqlpp11/verbatim_table.h +++ b/include/sqlpp11/verbatim_table.h @@ -50,7 +50,7 @@ namespace sqlpp struct verbatim_table_t: public table_t { - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; struct _alias_t { diff --git a/include/sqlpp11/where.h b/include/sqlpp11/where.h index a8145c06..e3828696 100644 --- a/include/sqlpp11/where.h +++ b/include/sqlpp11/where.h @@ -71,7 +71,7 @@ namespace sqlpp struct where_t { using _traits = make_traits; - using _nodes = std::tuple; + using _nodes = detail::type_vector; using _is_dynamic = is_database; @@ -149,7 +149,7 @@ namespace sqlpp struct where_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = where_data_t; @@ -198,7 +198,7 @@ namespace sqlpp struct no_where_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = no_data_t; diff --git a/include/sqlpp11/with.h b/include/sqlpp11/with.h index e736f561..efbc9b48 100644 --- a/include/sqlpp11/with.h +++ b/include/sqlpp11/with.h @@ -66,7 +66,7 @@ namespace sqlpp struct with_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _provided_ctes = detail::make_joined_set_t...>; // with provides common table expressions using _parameters = detail::make_parameter_tuple_t...>; @@ -108,7 +108,7 @@ namespace sqlpp struct no_with_t { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; // Data using _data_t = no_data_t; diff --git a/include/sqlpp11/wrap_operand.h b/include/sqlpp11/wrap_operand.h index 7cbdcb9f..f8a4fc77 100644 --- a/include/sqlpp11/wrap_operand.h +++ b/include/sqlpp11/wrap_operand.h @@ -43,7 +43,7 @@ namespace sqlpp struct boolean_operand: public alias_operators { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _value_t = bool; @@ -82,7 +82,7 @@ namespace sqlpp struct integral_operand: public alias_operators { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _value_t = int64_t; @@ -122,7 +122,7 @@ namespace sqlpp struct floating_point_operand: public alias_operators { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _value_t = double; @@ -161,7 +161,7 @@ namespace sqlpp struct text_operand: public alias_operators { using _traits = make_traits; - using _nodes = std::tuple<>; + using _nodes = detail::type_vector<>; using _value_t = std::string;