| 1 | /* Copyright (c) 2017, MariaDB |
| 2 | |
| 3 | This program is free software; you can redistribute it and/or modify |
| 4 | it under the terms of the GNU General Public License as published by |
| 5 | the Free Software Foundation; version 2 of the License. |
| 6 | |
| 7 | This program is distributed in the hope that it will be useful, |
| 8 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 10 | GNU General Public License for more details. |
| 11 | |
| 12 | You should have received a copy of the GNU General Public License |
| 13 | along with this program; if not, write to the Free Software |
| 14 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ |
| 15 | |
| 16 | #ifndef SQL_TVC_INCLUDED |
| 17 | #define SQL_TVC_INCLUDED |
| 18 | #include "sql_type.h" |
| 19 | |
| 20 | typedef List<Item> List_item; |
| 21 | class select_result; |
| 22 | class Explain_select; |
| 23 | class Explain_query; |
| 24 | class Item_func_in; |
| 25 | class st_select_lex_unit; |
| 26 | typedef class st_select_lex SELECT_LEX; |
| 27 | |
| 28 | /** |
| 29 | @class table_value_constr |
| 30 | @brief Definition of a Table Value Construction(TVC) |
| 31 | |
| 32 | It contains a list of lists of values which this TVC is defined by and |
| 33 | reference on SELECT where this TVC is defined. |
| 34 | */ |
| 35 | class table_value_constr : public Sql_alloc |
| 36 | { |
| 37 | public: |
| 38 | List<List_item> lists_of_values; |
| 39 | select_result *result; |
| 40 | SELECT_LEX *select_lex; |
| 41 | |
| 42 | enum { QEP_NOT_PRESENT_YET, QEP_AVAILABLE} have_query_plan; |
| 43 | |
| 44 | Explain_select *explain; |
| 45 | ulonglong select_options; |
| 46 | |
| 47 | table_value_constr(List<List_item> tvc_values, SELECT_LEX *sl, |
| 48 | ulonglong select_options_arg) : |
| 49 | lists_of_values(tvc_values), result(0), select_lex(sl), |
| 50 | have_query_plan(QEP_NOT_PRESENT_YET), explain(0), |
| 51 | select_options(select_options_arg) |
| 52 | { }; |
| 53 | |
| 54 | bool prepare(THD *thd_arg, SELECT_LEX *sl, |
| 55 | select_result *tmp_result, |
| 56 | st_select_lex_unit *unit_arg); |
| 57 | |
| 58 | int save_explain_data_intern(THD *thd_arg, |
| 59 | Explain_query *output); |
| 60 | bool optimize(THD *thd_arg); |
| 61 | bool exec(SELECT_LEX *sl); |
| 62 | |
| 63 | void print(THD *thd_arg, String *str, enum_query_type query_type); |
| 64 | }; |
| 65 | #endif /* SQL_TVC_INCLUDED */ |
| 66 | |