summaryrefslogtreecommitdiffstats
path: root/sql/sql_tvc.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_tvc.h')
-rw-r--r--sql/sql_tvc.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/sql/sql_tvc.h b/sql/sql_tvc.h
new file mode 100644
index 00000000..710557f7
--- /dev/null
+++ b/sql/sql_tvc.h
@@ -0,0 +1,76 @@
+/* Copyright (c) 2017, MariaDB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef SQL_TVC_INCLUDED
+#define SQL_TVC_INCLUDED
+#include "sql_type.h"
+
+typedef List<Item> List_item;
+typedef bool (Item::*Item_processor) (void *arg);
+class select_result;
+class Explain_select;
+class Explain_query;
+class Item_func_in;
+class st_select_lex_unit;
+typedef class st_select_lex SELECT_LEX;
+class Type_holder;
+
+/**
+ @class table_value_constr
+ @brief Definition of a Table Value Construction(TVC)
+
+ It contains a list of lists of values which this TVC is defined by and
+ reference on SELECT where this TVC is defined.
+*/
+class table_value_constr : public Sql_alloc
+{
+public:
+ List<List_item> lists_of_values;
+ select_result *result;
+ SELECT_LEX *select_lex;
+ Type_holder *type_holders;
+
+ enum { QEP_NOT_PRESENT_YET, QEP_AVAILABLE} have_query_plan;
+
+ Explain_select *explain;
+ ulonglong select_options;
+
+ table_value_constr(List<List_item> tvc_values, SELECT_LEX *sl,
+ ulonglong select_options_arg) :
+ lists_of_values(tvc_values), result(0), select_lex(sl), type_holders(0),
+ have_query_plan(QEP_NOT_PRESENT_YET), explain(0),
+ select_options(select_options_arg)
+ { };
+
+ ha_rows get_records() { return lists_of_values.elements; }
+
+ bool prepare(THD *thd_arg, SELECT_LEX *sl,
+ select_result *tmp_result,
+ st_select_lex_unit *unit_arg);
+
+ bool to_be_wrapped_as_with_tail();
+
+ int save_explain_data_intern(THD *thd_arg,
+ Explain_query *output);
+ bool optimize(THD *thd_arg);
+ bool exec(SELECT_LEX *sl);
+
+ void print(THD *thd_arg, String *str, enum_query_type query_type);
+ bool walk_values(Item_processor processor, bool walk_subquery, void *arg);
+};
+
+st_select_lex *wrap_tvc_with_tail(THD *thd, st_select_lex *tvc_sl);
+
+#endif /* SQL_TVC_INCLUDED */