23#ifndef TABLE_FUNCTION_INCLUDED
24#define TABLE_FUNCTION_INCLUDED
75 const char *table_alias);
94 assert(i < table->s->fields);
317#define MAX_NESTED_PATH 16
321 std::array<JT_data_source, MAX_NESTED_PATH>
m_jds;
348 const char *
func_name()
const override {
return "json_table"; }
356 bool init()
override;
448 const Item *default_string);
Create_field is a description a field/column that may or may not exists in a table.
Definition: create_field.h:50
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:850
JT_data_source is used as a data source.
Definition: table_function.h:203
Json_wrapper_vector v
Vector of found values.
Definition: table_function.h:206
Json_wrapper_vector::iterator it
Iterator for vector above.
Definition: table_function.h:208
void cleanup()
Definition: table_function.cc:768
bool producing_records
true <=> NESTED PATH associated with this element is producing records.
Definition: table_function.h:218
Json_wrapper jdata
JSON data to seek columns' paths in.
Definition: table_function.h:210
JT_data_source()
Definition: table_function.h:220
uint m_rowid
Current m_rowid, used for ORDINALITY columns.
Definition: table_function.h:212
A JSON path expression.
Definition: json_path.h:356
Column description for JSON_TABLE function.
Definition: table_function.h:235
Json_wrapper m_default_empty_json
Parsed JSON for default value of ON MISSING clause.
Definition: table_function.h:246
Item * m_default_empty_string
Default value string for ON EMPTY clause.
Definition: table_function.h:244
List< Json_table_column > * m_nested_columns
List of nested columns, valid only for NESTED PATH.
Definition: table_function.h:252
Item * m_default_error_string
Default value string for ON ERROR clause.
Definition: table_function.h:248
Item * m_path_string
Nested path.
Definition: table_function.h:254
Json_on_response_type m_on_empty
Type of ON EMPTY clause.
Definition: table_function.h:242
Json_table_column(enum_jt_column col_type, Item *path, Json_on_response_type on_err, Item *error_default, Json_on_response_type on_miss, Item *missing_default)
Definition: table_function.h:273
JT_data_source * m_jds_elt
An element in table function's data source array.
Definition: table_function.h:258
Json_wrapper m_default_error_json
Parsed JSON string for ON ERROR clause.
Definition: table_function.h:250
Json_table_column(Item *path, List< Json_table_column > *cols)
Definition: table_function.h:282
bool fill_column(Table_function_json *table_function, jt_skip_reason *skip)
Fill a json table column.
Definition: table_function.cc:330
~Json_table_column()
Definition: table_function.cc:484
Json_on_response_type m_on_error
Type of ON ERROR clause.
Definition: table_function.h:240
int m_field_idx
Index of field in the result table.
Definition: table_function.h:269
enum_jt_column m_jtc_type
Column type.
Definition: table_function.h:238
Json_table_column * m_prev_nested
Previous sibling NESTED PATH.
Definition: table_function.h:267
Json_path m_path_json
parsed nested path
Definition: table_function.h:256
Json_table_column * m_next_nested
Next sibling NESTED PATH.
Definition: table_function.h:265
void cleanup()
Definition: table_function.h:287
Json_table_column(enum_jt_column type)
Definition: table_function.h:272
JT_data_source * m_child_jds_elt
Element in table function's data source array to feed data to child nodes.
Definition: table_function.h:263
Abstraction for accessing JSON values irrespective of whether they are (started out as) binary JSON v...
Definition: json_dom.h:1160
Definition: sql_list.h:433
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:425
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:166
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:33
Definition: table_function.h:319
Table_function_json(const char *alias, Item *a, List< Json_table_column > *cols)
Definition: table_function.cc:98
List< Json_table_column > * m_columns
Tree of COLUMN clauses.
Definition: table_function.h:325
List< Create_field > * get_field_list() override
Return list of fields to create result table from.
Definition: table_function.cc:113
~Table_function_json() override
Definition: table_function.h:340
bool walk(Item_processor processor, enum_walk walk, uchar *arg) override
Definition: table_function.cc:107
bool fill_result_table() override
Execute table function.
Definition: table_function.cc:602
std::array< JT_data_source, MAX_NESTED_PATH > m_jds
Array of JSON Data Source for each NESTED PATH clause.
Definition: table_function.h:321
void do_cleanup() override
Definition: table_function.cc:761
List< Json_table_column > m_vt_list
List of fields for tmp table creation.
Definition: table_function.h:323
const char * func_name() const override
Returns function's name.
Definition: table_function.h:348
void set_subtree_to_null(Json_table_column *root, Json_table_column **last)
A helper function which sets all columns under given NESTED PATH column to nullptr.
Definition: table_function.cc:313
bool init() override
Initialize the table function before creation of result table.
Definition: table_function.cc:292
const char * m_table_alias
JSON_TABLE's alias, for error reporting.
Definition: table_function.h:329
bool print(const THD *thd, String *str, enum_query_type query_type) const override
JSON_TABLE printout.
Definition: table_function.cc:750
bool is_source_parsed
Whether source data has been parsed.
Definition: table_function.h:332
Item * source
JSON_TABLE's data source expression.
Definition: table_function.h:334
bool do_init_args() override
Check whether given default values can be saved to fields.
Definition: table_function.cc:231
table_map used_tables() override
Return table_map of tables used by function's data source.
Definition: table_function.cc:759
Mem_root_array< Json_table_column * > m_all_columns
Array of all columns - the flattened tree above.
Definition: table_function.h:327
bool fill_json_table()
Fill the result table.
Definition: table_function.cc:546
bool init_json_table_col_lists(uint *nest_idx, Json_table_column *parent)
Initialize columns and lists for json table.
Definition: table_function.cc:118
Class representing a table function.
Definition: table_function.h:52
Field * get_field(uint i)
Returns a field with given index.
Definition: table_function.h:93
void destroy()
Destroy table function object after all executions are complete.
Definition: table_function.h:156
bool write_row()
Write current record to the result table and handle overflow to disk.
Definition: table_function.cc:69
virtual const char * func_name() const =0
Returns table function's name.
void empty_table()
Delete all rows in the table.
Definition: table_function.cc:82
bool create_result_table(THD *thd, ulonglong options, const char *table_alias)
Create, but not instantiate the result table.
Definition: table_function.cc:60
virtual table_map used_tables()
Return table_map of tables used by the function.
Definition: table_function.h:134
virtual ~Table_function()=default
Table_function()
Definition: table_function.h:60
virtual void do_cleanup()
Definition: table_function.h:174
virtual bool init()=0
Initialize table function.
virtual bool print(const THD *thd, String *str, enum_query_type query_type) const =0
Print table function.
virtual bool walk(Item_processor processor, enum_walk walk, uchar *arg)=0
virtual bool do_init_args()=0
Initialize table function's arguments.
virtual List< Create_field > * get_field_list()=0
Get the list of fields to create the result table.
virtual bool init_args()
Initialize table function after the result table has been created.
Definition: table_function.cc:87
void default_row()
Set the default row.
Definition: table_function.h:105
bool inited
Whether the table function was already initialized.
Definition: table_function.h:57
void cleanup()
Clean up table function after one execution.
Definition: table_function.h:151
TABLE * table
Table function's result table.
Definition: table_function.h:55
virtual bool fill_result_table()=0
Execute the table function - fill the result table.
bool setup_table_function(THD *thd)
Setup a table function to use materialization.
Definition: sql_derived.cc:916
enum_query_type
Query type constants (usable as bitmap flags).
Definition: enum_query_type.h:30
Fido Client Authentication nullptr
Definition: fido_client_plugin.cc:221
This file contains interface support for the JSON path abstraction.
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:55
unsigned char uchar
Definition: my_inttypes.h:51
uint16_t uint16
Definition: my_inttypes.h:64
uint64_t table_map
Definition: my_table_map.h:29
static char * path
Definition: mysqldump.cc:133
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1054
static size_t skip(size_t pos_start, size_t match_len)
Definition: uri.cc:81
Definition: options.cc:48
PSI_memory_key key_memory_JSON
Definition: psi_memory_key.cc:52
required string type
Definition: replication_group_member_actions.proto:33
File containing constants that can be used throughout the server.
enum_walk
Enumeration for {Item,Query_block[_UNIT],Table_function}walk.
Definition: sql_const.h:286
bool(Item::*)(unsigned char *) Item_processor
Processor type for {Item,Query_block[_UNIT],Table_function}walk.
Definition: sql_const.h:304
Field ** field
Definition: table.h:1434
Json_on_response_type
Types of ON EMPTY/ON ERROR clauses for JSON_TABLE and JSON_VALUE.
Definition: table_function.h:191
enum_jt_column
Type of columns for JSON_TABLE function.
Definition: table_function.h:182
jt_skip_reason
Reason for skipping a NESTED PATH.
Definition: table_function.h:228
@ JTS_EOD
Definition: table_function.h:230
@ JTS_SIBLING
Definition: table_function.h:231
@ JTS_NONE
Definition: table_function.h:229
void print_on_empty_or_error(const THD *thd, String *str, enum_query_type query_type, bool on_empty, Json_on_response_type response_type, const Item *default_string)
Print ON EMPTY or ON ERROR clauses.
Definition: table_function.cc:640
unsigned int uint
Definition: uca9-dump.cc:74