MySQL 9.1.0
Source Code Documentation
item_json_func.h
Go to the documentation of this file.
1#ifndef ITEM_JSON_FUNC_INCLUDED
2#define ITEM_JSON_FUNC_INCLUDED
3
4/* Copyright (c) 2015, 2024, Oracle and/or its affiliates.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License, version 2.0,
8 as published by the Free Software Foundation.
9
10 This program is designed to work with certain software (including
11 but not limited to OpenSSL) that is licensed under separate terms,
12 as designated in a particular file or component or in included license
13 documentation. The authors of MySQL hereby grant you an additional
14 permission to link the program and your derivative works with the
15 separately licensed software that they have either included with
16 the program or referenced in the documentation.
17
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License, version 2.0, for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
26
27#include <assert.h>
28#include <sys/types.h>
29
30#include <cstdint>
31#include <memory>
32#include <utility> // std::forward
33
34#include "field_types.h"
35#include "my_alloc.h"
36#include "my_inttypes.h"
37#include "my_table_map.h"
38#include "my_time.h"
41#include "mysql_com.h"
42#include "mysql_time.h"
43#include "prealloced_array.h" // Prealloced_array
45#include "sql-common/json_path.h" // Json_path
46#include "sql-common/json_schema.h" //Json_schema_validator_holder
47#include "sql/enum_query_type.h"
48#include "sql/field.h"
49#include "sql/item.h"
50#include "sql/item_cmpfunc.h"
51#include "sql/item_func.h"
52#include "sql/item_strfunc.h" // Item_str_func
53#include "sql/mem_root_array.h" // Mem_root_array
54#include "sql/parse_location.h" // POS
55#include "sql/psi_memory_key.h" // key_memory_JSON
56#include "sql_string.h"
57
58class Json_array;
60class Json_dom;
61class Json_object;
64class Json_wrapper;
65class PT_item_list;
66class THD;
67class my_decimal;
68enum Cast_target : unsigned char;
69enum class Json_on_response_type : uint16;
70enum class enum_json_diff_status;
71
72struct Cast_type;
73struct TABLE;
74
75/** For use by JSON_CONTAINS_PATH() and JSON_SEARCH() */
82};
83
84/**
85 Path cache for JSON functions. Caches parsed path
86 objects for arguments which are string literals.
87 Maintains a vector of path objects and an array of
88 ints which map path argument numbers to slots in
89 the array.
90*/
92 private:
93 /// Holder for path strings.
95
96 /// List of paths.
98
99 /// Enum that tells the status of a cell in m_paths.
100 enum class enum_path_status : uint8 {
103 OK_NULL,
104 };
105
106 /// Struct that points to a cell in m_paths and tells its status.
107 struct Path_cell {
109 size_t m_index = 0;
110 };
111
112 /// Map argument indexes to indexes into m_paths.
114
115 public:
116 Json_path_cache(THD *thd, uint size);
118
119 /**
120 Parse a path expression if necessary. Does nothing if the path
121 expression is constant and it has already been parsed. Assumes that
122 we've already verified that the path expression is not null. Raises an
123 error if the path expression is syntactically incorrect. Raises an
124 error if the path expression contains wildcard tokens but is not
125 supposed to. Otherwise puts the parsed path onto the
126 path vector.
127
128 @param[in] thd THD handle
129 @param[in] args Array of args to a JSON function
130 @param[in] arg_idx Index of the path_expression in args
131 @param[in] forbid_wildcards True if the path shouldn't contain * or **
132
133 @returns false on success (valid path or NULL), true on error
134 */
135 bool parse_and_cache_path(const THD *thd, Item **args, uint arg_idx,
136 bool forbid_wildcards);
137
138 /**
139 Return an already parsed path expression.
140
141 @param[in] arg_idx Index of the path_expression in the JSON function args
142
143 @returns the already parsed path, possibly NULL
144 */
145 const Json_path *get_path(uint arg_idx) const;
146
147 /**
148 Reset the cache for re-use when a statement is re-executed.
149 */
150 void reset_cache();
151};
152
153/* JSON function support */
154
155/**
156 Base class for all item functions that a return JSON value
157*/
158class Item_json_func : public Item_func {
159 /// Can this function type be used in partial update?
160 virtual bool can_use_in_partial_update() const { return false; }
161
162 protected:
163 /// String used when reading JSON binary values or JSON text values.
165 /// String used for converting JSON text values to utf8mb4 charset.
167 /// String used for converting a JSON value to text in val_str().
169
170 // Cache for constant path expressions
172
173 /**
174 Target column for partial update, if this function is used in an
175 update statement and partial update can be used.
176 */
178
179 public:
180 /**
181 Construct an Item_json_func instance.
182 @param thd THD handle
183 @param parent_args arguments to forward to Item_func's constructor
184 */
185 template <typename... Args>
186 Item_json_func(THD *thd, Args &&...parent_args)
187 : Item_func(std::forward<Args>(parent_args)...),
188 m_path_cache(thd, arg_count) {
190 }
191
192 bool resolve_type(THD *) override {
193 if (reject_vector_args()) return true;
194 set_nullable(true);
195 return false;
196 }
197 enum Item_result result_type() const override { return STRING_RESULT; }
198 String *val_str(String *arg) override;
199 bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override;
200 bool get_time(MYSQL_TIME *ltime) override;
201 longlong val_int() override;
202 double val_real() override;
203 my_decimal *val_decimal(my_decimal *decimal_value) override;
204
205 void cleanup() override;
206
207 Item_result cast_to_int_type() const override { return INT_RESULT; }
208
209 /**
210 Does this function call support partial update of the given JSON column?
211
212 JSON_SET, JSON_REPLACE and JSON_REMOVE support partial update of a JSON
213 column if the JSON column is the first argument of the function call, or if
214 the first argument is a sequence of nested JSON_SET, JSON_REPLACE and
215 JSON_REMOVE calls in which the JSON column is the first argument of the
216 inner function call.
217
218 For example, this expression can be used to partially update column
219 `json_col`:
220
221 JSON_SET(JSON_REPLACE(json_col, path1, val1), path2, val2)
222 */
223 bool supports_partial_update(const Field_json *field) const override;
224
225 /**
226 Mark this expression as used in partial update. Should only be
227 called if #supports_partial_update returns true.
228 */
229 void mark_for_partial_update(const Field_json *field);
230};
231
232bool sql_scalar_to_json(Item *arg, const char *calling_function, String *value,
233 String *tmp, Json_wrapper *wr,
234 Json_scalar_holder *scalar, bool scalar_string);
235
236/**
237 Return the JSON value of the argument in a wrapper.
238
239 Handles arguments with type JSON, including array objects (which do
240 not report type JSON but rather the type of individual elements).
241
242 Does not handle literals.
243 See also get_json_wrapper.
244
245 @param[in] arg the argument
246 @param[in,out] result the JSON value wrapper
247 @param[out] has_value true if argument was handled, false otherwise
248 undefined when error
249*/
250bool json_value(Item *arg, Json_wrapper *result, bool *has_value);
251
252/**
253 Return the JSON value of the argument in a wrapper. Abstracts whether
254 the value comes from a field or a function or a valid JSON text.
255
256 @param[in] args the arguments
257 @param[in] arg_idx the argument index
258 @param[out] str the string buffer
259 @param[in] func_name the name of the function we are executing
260 @param[out] wrapper the JSON value wrapper
261 @returns false if we found a value or NULL, true if not.
262*/
263bool get_json_wrapper(Item **args, uint arg_idx, String *str,
264 const char *func_name, Json_wrapper *wrapper);
265
266/**
267 Convert Json values or MySQL values to JSON.
268
269 @param[in] args arguments to function
270 @param[in] arg_idx the index of the argument to process
271 @param[in] calling_function name of the calling function
272 @param[in,out] value working area (if the returned Json_wrapper points
273 to a binary value rather than a DOM, this string
274 will end up holding the binary representation, and
275 it must stay alive until the wrapper is destroyed
276 or converted from binary to DOM)
277 @param[in,out] tmp temporary scratch space for converting strings to
278 the correct charset; only used if accept_string is
279 true and conversion is needed
280 @param[in,out] wr the result wrapper
281 @param[in,out] scalar pointer to pre-allocated memory that can be
282 borrowed by the result wrapper if the result is a
283 scalar. If the pointer is NULL, memory for a
284 scalar result will be allocated on the heap.
285 @param[in] accept_string
286 if true, accept MySQL strings as JSON strings
287 by converting them to UTF8, else emit an error
288 @returns false if we found a value or NULL, true otherwise
289*/
290bool get_json_atom_wrapper(Item **args, uint arg_idx,
291 const char *calling_function, String *value,
292 String *tmp, Json_wrapper *wr,
293 Json_scalar_holder *scalar, bool accept_string);
294
295/**
296 Check a non-empty val for character set. If it has character set
297 my_charset_binary, signal error and return false. Else, try to convert to
298 my_charset_utf8mb4_bin. If this fails, signal error and return true, else
299 return false.
300
301 @param[in] val the string to be checked
302 @param[in,out] buf buffer to hold the converted string
303 @param[out] resptr the resulting, possibly converted string,
304 only set if no error
305 @param[out] reslength the length of resptr
306 @param[in] require_string
307 If true, give error messages if binary string. If we
308 see a conversion error (space), we give error
309 notwithstanding this parameter value
310
311 @returns True if the string could not be converted. False on success.
312*/
313bool ensure_utf8mb4(const String &val, String *buf, const char **resptr,
314 size_t *reslength, bool require_string);
315
316/**
317 Represents the JSON function JSON_VALID( <value> )
318*/
321
322 public:
323 Item_func_json_valid(const POS &pos, Item *a) : Item_int_func(pos, a) {}
324
325 const char *func_name() const override { return "json_valid"; }
326 enum Functype functype() const override { return JSON_VALID_FUNC; }
327
328 bool is_bool_func() const override { return true; }
329
330 longlong val_int() override;
331
332 bool resolve_type(THD *thd) override {
333 if (reject_vector_args()) return true;
334 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_JSON)) return true;
335 set_nullable(true);
336 return false;
337 }
338};
339
340/**
341 Represents the JSON function JSON_SCHEMA_VALID( <json schema>, <json doc> )
342*/
344 public:
345 Item_func_json_schema_valid(const POS &pos, Item *a, Item *b);
347
348 const char *func_name() const override { return "json_schema_valid"; }
349 enum Functype functype() const override { return JSON_SCHEMA_VALID_FUNC; }
350
351 bool val_bool() override;
352
353 longlong val_int() override { return val_bool() ? 1 : 0; }
354
355 bool fix_fields(THD *, Item **) override;
356
357 void cleanup() override;
358
359 private:
361};
362
363/**
364 Represents the JSON function
365 JSON_SCHEMA_VALIDATION_REPORT( <json schema>, <json doc> )
366*/
368 public:
370 PT_item_list *a);
372
373 const char *func_name() const override {
374 return "json_schema_validation_report";
375 }
376
377 enum Functype functype() const override {
379 }
380
381 bool val_json(Json_wrapper *wr) override;
382
383 bool resolve_type(THD *thd) override {
384 if (reject_vector_args()) return true;
385 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_JSON)) return true;
386 set_nullable(true);
387 return false;
388 }
389
390 bool fix_fields(THD *, Item **) override;
391
392 void cleanup() override;
393
394 private:
396};
397
398/**
399 Represents the JSON function JSON_CONTAINS()
400*/
404
405 public:
407 : Item_int_func(pos, a), m_path_cache(thd, arg_count) {}
408
409 const char *func_name() const override { return "json_contains"; }
410 enum Functype functype() const override { return JSON_CONTAINS; }
411 optimize_type select_optimize(const THD *) override { return OPTIMIZE_KEY; }
412 bool gc_subst_analyzer(uchar **) override { return true; }
413
414 bool is_bool_func() const override { return true; }
415
416 longlong val_int() override;
417
418 bool resolve_type(THD *thd) override {
419 if (reject_vector_args()) return true;
420 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_JSON)) return true;
421 if (param_type_is_default(thd, 1, 3)) return true;
422 set_nullable(true);
423 return false;
424 }
425
426 /** Cleanup between executions of the statement */
427 void cleanup() override;
428
430 return (arg == args[0] || arg == args[1]) ? CACHE_JSON_VALUE : CACHE_NONE;
431 }
432};
433
434/**
435 Represents the JSON function JSON_CONTAINS_PATH()
436*/
440
441 // Cache for constant path expressions
443
444 public:
446 : Item_int_func(pos, a),
448 m_path_cache(thd, arg_count) {}
449
450 const char *func_name() const override { return "json_contains_path"; }
451 enum Functype functype() const override { return JSON_CONTAINS_PATH_FUNC; }
452
453 bool is_bool_func() const override { return true; }
454
455 longlong val_int() override;
456
457 bool resolve_type(THD *thd) override {
458 if (reject_vector_args()) return true;
459 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_JSON)) return true;
460 if (param_type_is_default(thd, 1, -1)) return true;
461 set_nullable(true);
462 return false;
463 }
464
465 /** Cleanup between executions of the statement */
466 void cleanup() override;
467
469 return (arg == args[0]) ? CACHE_JSON_VALUE : CACHE_NONE;
470 }
471};
472
473/**
474 Represents the JSON function JSON_TYPE
475*/
478
479 public:
480 Item_func_json_type(const POS &pos, Item *a) : Item_str_func(pos, a) {}
481
482 const char *func_name() const override { return "json_type"; }
483 enum Functype functype() const override { return JSON_TYPE_FUNC; }
484
485 bool resolve_type(THD *) override;
486
487 String *val_str(String *) override;
488};
489
490/**
491 Represents a "CAST( <value> AS JSON )" coercion.
492*/
493class Item_typecast_json final : public Item_json_func {
495
496 public:
497 Item_typecast_json(THD *thd, const POS &pos, Item *a)
498 : Item_json_func(thd, pos, a) {}
499
500 bool resolve_type(THD *thd) override {
501 if (reject_vector_args()) return true;
502 if (Item_json_func::resolve_type(thd)) return true;
503 return args[0]->propagate_type(thd, MYSQL_TYPE_JSON, false, true);
504 }
505
506 void print(const THD *thd, String *str,
507 enum_query_type query_type) const override;
508 const char *func_name() const override { return "cast_as_json"; }
509 const char *cast_type() const { return "json"; }
510 bool val_json(Json_wrapper *wr) override;
511};
512
513/**
514 Represents the JSON function JSON_LENGTH()
515*/
518
519 public:
520 Item_func_json_length(const POS &pos, Item *doc) : Item_int_func(pos, doc) {}
521
522 bool resolve_type(THD *thd) override {
523 if (reject_vector_args()) return true;
524 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_JSON)) return true;
525 if (param_type_is_default(thd, 1, 2)) return true;
526 set_nullable(true);
527 return false;
528 }
529
530 const char *func_name() const override { return "json_length"; }
531 enum Functype functype() const override { return JSON_LENGTH_FUNC; }
532
533 longlong val_int() override;
534};
535
536/**
537 Represents the JSON function JSON_DEPTH()
538*/
541
542 public:
543 Item_func_json_depth(const POS &pos, Item *a) : Item_int_func(pos, a) {}
544
545 const char *func_name() const override { return "json_depth"; }
546 enum Functype functype() const override { return JSON_DEPTH_FUNC; }
547
548 bool resolve_type(THD *thd) override {
549 if (reject_vector_args()) return true;
550 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_JSON)) return true;
551 set_nullable(true);
552 return false;
553 }
554
555 longlong val_int() override;
556};
557
558/**
559 Represents the JSON function JSON_KEYS()
560*/
563
564 public:
565 Item_func_json_keys(THD *thd, const POS &pos, Item *a)
566 : Item_json_func(thd, pos, a) {}
567
568 Item_func_json_keys(THD *thd, const POS &pos, Item *a, Item *b)
569 : Item_json_func(thd, pos, a, b) {}
570
571 const char *func_name() const override { return "json_keys"; }
572
573 bool resolve_type(THD *thd) override {
574 if (reject_vector_args()) return true;
575 if (Item_json_func::resolve_type(thd)) return true;
576 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_JSON)) return true;
577 if (param_type_is_default(thd, 1, 2)) return true;
578 return false;
579 }
580
581 bool val_json(Json_wrapper *wr) override;
582};
583
584/**
585 Represents the JSON function JSON_EXTRACT()
586*/
589
590 public:
592 : Item_json_func(thd, pos, a) {}
593
594 Item_func_json_extract(THD *thd, const POS &pos, Item *a, Item *b)
595 : Item_json_func(thd, pos, a, b) {}
596
597 const char *func_name() const override { return "json_extract"; }
598 enum Functype functype() const override { return JSON_EXTRACT_FUNC; }
599
600 bool resolve_type(THD *thd) override {
601 if (reject_vector_args()) return true;
602 if (Item_json_func::resolve_type(thd)) return true;
603 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_JSON)) return true;
604 if (param_type_is_default(thd, 1, -1)) return true;
605 return false;
606 }
607
608 bool val_json(Json_wrapper *wr) override;
609
610 bool eq(const Item *item) const override;
611};
612
613/// Base class for all the functions that take a JSON document as the first
614/// argument and one of more pairs of a JSON path and a value to insert into the
615/// JSON document, and returns the modified JSON document.
617 protected:
618 template <typename... Args>
619 explicit Item_func_modify_json_in_path(Args &&...parent_args)
620 : Item_json_func(std::forward<Args>(parent_args)...) {
621 // The function does not necessarily return NULL when an argument is NULL.
622 // It returns NULL only if the first argument is NULL, or if one of the JSON
623 // path arguments is null. The set of tables for which the function is
624 // null-rejecting, is calculated in resolve_type() and possibly updated in
625 // update_used_tables().
626 null_on_null = false;
627 }
629
630 public:
631 bool resolve_type(THD *thd) final;
632 void update_used_tables() final;
633
634 private:
635 /// Calculates the set of tables to return from not_used_tables(). The
636 /// returned value is cached by resolve_type() and update_used_tables().
638};
639
640/**
641 Represents the JSON function JSON_ARRAY_APPEND()
642*/
644 public:
646 : Item_func_modify_json_in_path(thd, pos, a) {}
647
648 const char *func_name() const override { return "json_array_append"; }
649
650 bool val_json(Json_wrapper *wr) override;
651};
652
653/**
654 Represents the JSON function JSON_INSERT()
655*/
657 public:
659 : Item_func_modify_json_in_path(thd, pos, a) {}
660
661 const char *func_name() const override { return "json_insert"; }
662
663 bool val_json(Json_wrapper *wr) override;
664};
665
666/**
667 Represents the JSON function JSON_ARRAY_INSERT()
668*/
670 public:
672 : Item_func_modify_json_in_path(thd, pos, a) {}
673
674 const char *func_name() const override { return "json_array_insert"; }
675
676 bool val_json(Json_wrapper *wr) override;
677};
678
679/**
680 Common base class for JSON_SET() and JSON_REPLACE().
681*/
683 /// True if this is JSON_SET, false if it is JSON_REPLACE.
684 const bool m_json_set;
686 bool can_use_in_partial_update() const override { return true; }
687
688 protected:
689 template <typename... Args>
690 explicit Item_func_json_set_replace(bool json_set, Args &&...parent_args)
691 : Item_func_modify_json_in_path(std::forward<Args>(parent_args)...),
692 m_json_set(json_set),
693 m_path(key_memory_JSON) {}
694
695 public:
696 bool val_json(Json_wrapper *wr) override;
697};
698
699/**
700 Represents the JSON function JSON_SET()
701*/
703 public:
704 template <typename... Args>
705 explicit Item_func_json_set(Args &&...parent_args)
706 : Item_func_json_set_replace(true, std::forward<Args>(parent_args)...) {}
707
708 const char *func_name() const override { return "json_set"; }
709};
710
711/**
712 Represents the JSON function JSON_REPLACE()
713*/
715 public:
716 template <typename... Args>
717 explicit Item_func_json_replace(Args &&...parent_args)
718 : Item_func_json_set_replace(false, std::forward<Args>(parent_args)...) {}
719
720 const char *func_name() const override { return "json_replace"; }
721};
722
723/**
724 Represents the JSON function JSON_ARRAY()
725*/
727 public:
728 template <typename... Args>
729 explicit Item_func_json_array(Args &&...parent_args)
730 : Item_json_func(std::forward<Args>(parent_args)...) {
731 // Does not return NULL on NULL input. A NULL argument is interpreted as the
732 // JSON null literal.
733 null_on_null = false;
734 }
735
736 const char *func_name() const override { return "json_array"; }
737 enum Functype functype() const override { return JSON_ARRAY_FUNC; }
738
739 bool resolve_type(THD *thd) override {
740 if (Item_json_func::resolve_type(thd)) return true;
741 if (param_type_is_default(thd, 0, -1)) return true;
742 return false;
743 }
744
745 bool val_json(Json_wrapper *wr) override;
746};
747
748/**
749 Represents the JSON function JSON_OBJECT()
750*/
753
754 public:
756 : Item_json_func(thd, pos, a) {
757 // Does not return NULL on NULL input. If a key argument is NULL, an error
758 // is raised. If a value argument is NULL, it is interpreted as the JSON
759 // null literal.
760 null_on_null = false;
761 }
762
763 const char *func_name() const override { return "json_object"; }
764 enum Functype functype() const override { return JSON_OBJECT_FUNC; }
765
766 bool resolve_type(THD *thd) override {
767 if (Item_json_func::resolve_type(thd)) return true;
768 if (param_type_is_default(thd, 0, -1)) return true;
769 return false;
770 }
771
772 bool val_json(Json_wrapper *wr) override;
773};
774
775/**
776 Represents the JSON function JSON_SEARCH()
777*/
781
782 // LIKE machinery
785
786 public:
787 /**
788 Construct a JSON_SEARCH() node.
789
790 @param parent_args arguments to pass to Item_json_func's constructor
791 */
792 template <typename... Args>
793 Item_func_json_search(Args &&...parent_args)
794 : Item_json_func(std::forward<Args>(parent_args)...),
795 m_cached_ooa(ooa_uninitialized) {}
796
797 const char *func_name() const override { return "json_search"; }
798
799 enum Functype functype() const override { return JSON_SEARCH_FUNC; }
800
801 bool val_json(Json_wrapper *wr) override;
802
803 /**
804 Bind logic for the JSON_SEARCH() node.
805 */
806 bool fix_fields(THD *, Item **) override;
807
808 bool resolve_type(THD *thd) override {
809 if (Item_json_func::resolve_type(thd)) return true;
810 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_JSON)) return true;
811 if (param_type_is_default(thd, 1, -1)) return true;
812 return false;
813 }
814
815 void cleanup() override;
816};
817
818/**
819 Represents the JSON function JSON_REMOVE()
820*/
823 bool can_use_in_partial_update() const override { return true; }
824
825 public:
826 template <typename... Args>
827 Item_func_json_remove(Args &&...parent_args)
828 : Item_json_func(std::forward<Args>(parent_args)...) {}
829
830 const char *func_name() const override { return "json_remove"; }
831
832 bool resolve_type(THD *thd) override {
833 if (Item_json_func::resolve_type(thd)) return true;
834 if (param_type_is_default(thd, 0, 1, MYSQL_TYPE_JSON)) return true;
835 if (param_type_is_default(thd, 1, -1)) return true;
836 return false;
837 }
838
839 bool val_json(Json_wrapper *wr) override;
840};
841
842/**
843 Represents the JSON function JSON_MERGE_PRESERVE.
844*/
846 public:
848 : Item_json_func(thd, pos, a) {}
849
850 const char *func_name() const override { return "json_merge_preserve"; }
851
852 bool resolve_type(THD *thd) override {
853 if (Item_json_func::resolve_type(thd)) return true;
854 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_JSON)) return true;
855 return false;
856 }
857
858 bool val_json(Json_wrapper *wr) override;
859};
860
861/**
862 Represents the JSON function JSON_MERGE. It is a deprecated alias
863 for JSON_MERGE_PRESERVE.
864*/
866 public:
867 Item_func_json_merge(THD *thd, const POS &pos, PT_item_list *a);
868
869 bool is_deprecated() const override { return true; }
870};
871
872/**
873 Represents the JSON function JSON_MERGE_PATCH.
874*/
876 public:
878 : Item_json_func(thd, pos, a) {}
879
880 const char *func_name() const override { return "json_merge_patch"; }
881
882 bool resolve_type(THD *thd) override {
883 if (Item_json_func::resolve_type(thd)) return true;
884 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_JSON)) return true;
885 return false;
886 }
887
888 bool val_json(Json_wrapper *wr) override;
889};
890
891/**
892 Represents the JSON function JSON_QUOTE()
893*/
896
897 public:
899 : Item_str_func(pos, a) {}
900
901 const char *func_name() const override { return "json_quote"; }
902
903 enum Functype functype() const override { return JSON_QUOTE_FUNC; }
904
905 bool resolve_type(THD *thd) override {
906 if (reject_vector_args()) return true;
907 if (param_type_is_default(thd, 0, -1)) return true;
908 set_nullable(true);
909
910 /*
911 Any interior character could be replaced by a 6 character
912 escape sequence. Plus we will add 2 framing quote characters.
913 */
914 const uint32 max_char_length = (6 * args[0]->max_char_length()) + 2;
916 return false;
917 }
918
919 String *val_str(String *tmpspace) override;
920};
921
922/**
923 Represents the JSON function JSON_UNQUOTE()
924*/
928
929 public:
931 : Item_str_func(pos, a) {}
932
933 Item_func_json_unquote(const POS &pos, Item *a) : Item_str_func(pos, a) {}
934
935 const char *func_name() const override { return "json_unquote"; }
936
937 enum Functype functype() const override { return JSON_UNQUOTE_FUNC; }
938
939 bool resolve_type(THD *thd) override {
940 if (reject_vector_args()) return true;
941 if (param_type_is_default(thd, 0, -1)) return true;
942 set_nullable(true);
944 return false;
945 }
946
947 String *val_str(String *str) override;
948};
949
950/**
951 Represents the JSON_PRETTY function.
952*/
954 public:
955 Item_func_json_pretty(const POS &pos, Item *a) : Item_str_func(pos, a) {}
956
957 const char *func_name() const override { return "json_pretty"; }
958
959 enum Functype functype() const override { return JSON_PRETTY_FUNC; }
960
961 bool resolve_type(THD *thd) override {
962 if (reject_vector_args()) return true;
963 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_JSON)) return true;
965 return false;
966 }
967
968 String *val_str(String *str) override;
969};
970
971/**
972 Class that represents the function JSON_STORAGE_SIZE.
973*/
975 public:
977 : Item_int_func(pos, a) {}
978 const char *func_name() const override { return "json_storage_size"; }
979 enum Functype functype() const override { return JSON_STORAGE_SIZE_FUNC; }
980
981 bool resolve_type(THD *thd) override {
982 if (reject_vector_args()) return true;
983 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_JSON)) return true;
984 if (Item_int_func::resolve_type(thd)) return true;
985 set_nullable(true);
986 return false;
987 }
988
989 longlong val_int() override;
990};
991
992/**
993 Class that represents the function JSON_STORAGE_FREE.
994*/
996 public:
998 : Item_int_func(pos, a) {}
999 const char *func_name() const override { return "json_storage_free"; }
1000 enum Functype functype() const override { return JSON_STORAGE_FREE_FUNC; }
1001
1002 bool resolve_type(THD *thd) override {
1003 if (reject_vector_args()) return true;
1004 if (param_type_is_default(thd, 0, -1, MYSQL_TYPE_JSON)) return true;
1005 return false;
1006 }
1007
1008 longlong val_int() override;
1009};
1010
1011/**
1012 Class that represents CAST(<expr> AS <type> ARRAY)
1013*/
1014
1015class Item_func_array_cast final : public Item_func {
1016 /// Type to cast to
1018 /**
1019 Whether use of CAST(.. AS .. ARRAY) is allowed
1020
1021 Currently use of CAST(.. AS .. ARRAY) is limited only to CREATE
1022 TABLE/INDEX. In all other cases an error is thrown. This flag is set to
1023 true only for allowed cases to ensure allowed function usage.
1024 */
1025 bool m_is_allowed{false};
1026
1027 /**
1028 An array used by #save_in_field_inner() to store the result of an array cast
1029 operation. It is cached in the Item in order to avoid the need for
1030 reallocation on each row.
1031 */
1033
1034 protected:
1035 void add_json_info(Json_object *obj) override;
1036
1037 public:
1038 Item_func_array_cast(const POS &pos, Item *a, Cast_target type, uint len_arg,
1039 uint dec_arg, const CHARSET_INFO *cs_arg);
1041 const char *func_name() const override { return "cast_as_array"; }
1042 enum Functype functype() const override { return TYPECAST_FUNC; }
1043 bool returns_array() const override { return true; }
1044 bool val_json(Json_wrapper *wr) override;
1045 void print(const THD *thd, String *str,
1046 enum_query_type query_type) const override;
1047 enum Item_result result_type() const override;
1048 bool resolve_type(THD *) override;
1049 Field *tmp_table_field(TABLE *table) override;
1050 bool fix_fields(THD *thd, Item **ref) override;
1051 void cleanup() override;
1052 void allow_array_cast() override { m_is_allowed = true; }
1054 bool no_conversions) override;
1055 // Regular val_x() funcs shouldn't be called
1056 /* purecov: begin inspected */
1057 longlong val_int() override {
1058 assert(false);
1059 return 0;
1060 }
1061 String *val_str(String *) override {
1062 assert(false);
1063 return nullptr;
1064 }
1066 assert(false);
1067 return nullptr;
1068 }
1069 double val_real() override {
1070 assert(false);
1071 return 0;
1072 }
1074 assert(false);
1075 return true;
1076 }
1077 bool get_time(MYSQL_TIME *) override {
1078 assert(false);
1079 return true;
1080 }
1081 /* purecov: end */
1082};
1083
1085 public:
1087 : Item_bool_func(pos, a, b) {}
1088 const char *func_name() const override { return "json_overlaps"; }
1089 enum Functype functype() const override { return JSON_OVERLAPS; }
1090 bool gc_subst_analyzer(uchar **) override { return true; }
1091 optimize_type select_optimize(const THD *) override { return OPTIMIZE_KEY; }
1092 longlong val_int() override;
1093 Item *key_item() const override;
1095 return (arg == args[0] || arg == args[1]) ? CACHE_JSON_VALUE : CACHE_NONE;
1096 }
1097};
1098
1100 public:
1101 Item_func_member_of(const POS &pos, Item *a, Item *b)
1102 : Item_bool_func(pos, a, b) {}
1103 const char *func_name() const override { return "member of"; }
1104 enum Functype functype() const override { return MEMBER_OF_FUNC; }
1105 bool resolve_type(THD *thd) override {
1106 if (reject_vector_args()) return true;
1107 if (param_type_is_default(thd, 0, 2, MYSQL_TYPE_JSON)) return true;
1109 return false;
1110 }
1111 bool gc_subst_analyzer(uchar **) override { return true; }
1112 optimize_type select_optimize(const THD *) override { return OPTIMIZE_KEY; }
1113 longlong val_int() override;
1114 void print(const THD *thd, String *str,
1115 enum_query_type query_type) const override;
1116 Item *key_item() const override { return args[1]; }
1118 return (arg == args[1]) ? CACHE_JSON_VALUE
1119 : ((arg == args[0]) ? CACHE_JSON_ATOM : CACHE_NONE);
1120 }
1121};
1122
1123/**
1124 Class implementing the JSON_VALUE function.
1125
1126 Functionality-wise it's a combination of CAST, JSON_UNQUOTE and JSON_EXTRACT,
1127 but with additional functionality for flexible handling of empty values and
1128 conversion errors.
1129*/
1130class Item_func_json_value final : public Item_func {
1131 public:
1132 Item_func_json_value(const POS &pos, Item *arg, Item *path,
1133 const Cast_type &cast_type, unsigned length,
1134 unsigned precision, Json_on_response_type on_empty_type,
1135 Item *on_empty_default,
1136 Json_on_response_type on_error_type,
1137 Item *on_error_default);
1139 const char *func_name() const override { return "json_value"; }
1140 enum Functype functype() const override { return JSON_VALUE_FUNC; }
1141 enum Item_result result_type() const override;
1142 bool resolve_type(THD *) override;
1143 bool fix_fields(THD *thd, Item **ref) override;
1144 void print(const THD *thd, String *str,
1145 enum_query_type query_type) const override;
1146 bool eq_specific(const Item *item) const override;
1147 bool val_json(Json_wrapper *wr) override;
1148 String *val_str(String *buffer) override;
1149 double val_real() override;
1150 longlong val_int() override;
1151 my_decimal *val_decimal(my_decimal *value) override;
1152 bool get_date(MYSQL_TIME *ltime, my_time_flags_t flags) override;
1153 bool get_time(MYSQL_TIME *ltime) override;
1154 Json_on_response_type on_empty_response_type() const;
1155 Json_on_response_type on_error_response_type() const;
1156
1157 private:
1158 /// Represents a default value given in JSON_VALUE's DEFAULT xxx ON EMPTY or
1159 /// DEFAULT xxx ON ERROR clause.
1160 struct Default_value;
1161
1162 /// Parsed path.
1164 /// Type of the ON EMPTY clause.
1166 /// Type of the ON ERROR clause.
1168 /// The default value for ON EMPTY (if not ERROR or NULL ON EMPTY).
1170 /// The default value for ON EMPTY (if not ERROR or NULL ON EMPTY).
1172 /// The target data type.
1174
1175 /**
1176 Creates a Json_value_default object representing the default value given in
1177 a DEFAULT xxx ON EMPTY clause or a DEFAULT xxx ON ERROR clause.
1178
1179 @param thd the current session
1180 @param item the Item that represents the default value expression
1181 @return a pointer to the created object on success, nullptr on error
1182 */
1183 unique_ptr_destroy_only<Default_value> create_json_value_default(THD *thd,
1184 Item *item);
1185
1186 /**
1187 Extracts the JSON value at the given path.
1188
1189 @param[out] json the extracted JSON value, if the path matched exactly
1190 one value; empty otherwise
1191 @param[out] return_default the default value to return if a
1192 DEFAULT ... ON EMPTY or DEFAULT ... ON ERROR clause was invoked,
1193 or nullptr if no DEFAULT clause was invoked
1194 @return true if an error was raised, false otherwise
1195 */
1196 bool extract_json_value(Json_wrapper *json,
1197 const Default_value **return_default);
1198
1199 /// Implements val_int() for RETURNING SIGNED and RETURNING UNSIGNED.
1200 int64_t extract_integer_value();
1201 /// Implements val_int() for RETURNING YEAR
1202 int64_t extract_year_value();
1203 /// Implements get_date() for RETURNING DATE.
1204 bool extract_date_value(MYSQL_TIME *ltime);
1205 /// Implements get_time() for RETURNING TIME.
1206 bool extract_time_value(MYSQL_TIME *ltime);
1207 /// Implements get_date() for RETURNING DATETIME.
1208 bool extract_datetime_value(MYSQL_TIME *ltime);
1209 /// Implements val_decimal() for RETURNING DECIMAL.
1210 my_decimal *extract_decimal_value(my_decimal *value);
1211 /// Implements val_str() for RETURNING CHAR and RETURNING BINARY.
1212 String *extract_string_value(String *buffer);
1213 /// Implements val_real() for RETURNING FLOAT/REAL/DOUBLE.
1214 double extract_real_value();
1215};
1216
1217/**
1218 Turn a GEOMETRY value into a JSON value per the GeoJSON specification
1219 revision 1.0. This method is implemented in item_geofunc.cc.
1220
1221 @param[in,out] wr The wrapper to be stuffed with the JSON value.
1222 @param[in] swkb The source GEOMETRY value.
1223 @param[in] calling_function Name of user-invoked function (for errors)
1224 @param[in] max_decimal_digits See the user documentation for ST_AsGeoJSON.
1225 @param[in] add_bounding_box See the user documentation for ST_AsGeoJSON.
1226 @param[in] add_short_crs_urn See the user documentation for ST_AsGeoJSON.
1227 @param[in] add_long_crs_urn See the user documentation for ST_AsGeoJSON.
1228 @param[in,out] geometry_srid Spatial Reference System Identifier to be filled
1229 in.
1230
1231 @return false if the conversion succeeds, true otherwise
1232*/
1233bool geometry_to_json(Json_wrapper *wr, String *swkb,
1234 const char *calling_function, int max_decimal_digits,
1235 bool add_bounding_box, bool add_short_crs_urn,
1236 bool add_long_crs_urn, uint32 *geometry_srid);
1237
1238/**
1239 Convert a value represented with an Item to a JSON value
1240
1241 @param[in] item the input value, may be any data type
1242 @param[in] func_name for error reporting
1243 @param[in,out] wr the result wrapper for the JSON value
1244
1245 @return false if success, true if error
1246*/
1247bool convert_value_to_json(Item *item, const char *func_name, Json_wrapper *wr);
1248/**
1249 Convert JSON values or MySQL values to JSON. Converts SQL NULL
1250 to the JSON null literal.
1251
1252 @param[in] args arguments to function
1253 @param[in] arg_idx the index of the argument to process
1254 @param[in] calling_function name of the calling function
1255 @param[in,out] value working area (if the returned Json_wrapper points
1256 to a binary value rather than a DOM, this string
1257 will end up holding the binary representation, and
1258 it must stay alive until the wrapper is destroyed
1259 or converted from binary to DOM)
1260 @param[in,out] tmp temporary scratch space for converting strings to
1261 the correct charset; only used if accept_string is
1262 true and conversion is needed
1263 @param[in,out] wr the result wrapper
1264 @returns false if we found a value or NULL, true otherwise
1265*/
1266bool get_atom_null_as_null(Item **args, uint arg_idx,
1267 const char *calling_function, String *value,
1268 String *tmp, Json_wrapper *wr);
1269
1270/**
1271 Gets a JSON object member name from an Item. An error is raised if
1272 the Item evaluates to NULL, or if it cannot be converted to a
1273 utf8mb4 string.
1274
1275 @param[in] thd THD handle
1276 @param[in] arg_item An argument Item
1277 @param[out] value Where to materialize the arg_item's string value
1278 @param[out] utf8_res Buffer for use by ensure_utf8mb4.
1279 @param[out] safep String pointer after any relevant conversion
1280 @param[out] safe_length Corresponding string length
1281
1282 @returns true if the Item is not a utf8mb4 string
1283*/
1284bool get_json_object_member_name(const THD *thd, Item *arg_item, String *value,
1285 String *utf8_res, const char **safep,
1286 size_t *safe_length);
1287using Json_dom_ptr = std::unique_ptr<Json_dom>;
1288
1289bool parse_json(const String &res, Json_dom_ptr *dom, bool require_str_or_json,
1290 const JsonParseErrorHandler &error_handler,
1291 const JsonErrorHandler &depth_handler);
1292
1293/**
1294 Apply a sequence of JSON diffs to the value stored in a JSON column.
1295
1296 @param field the column to update
1297 @param diffs the diffs to apply
1298 @return an enum_json_diff_status value that tells if the diffs were
1299 applied successfully
1300 */
1302 const Json_diff_vector *diffs);
1303
1304bool save_json_to_field(THD *thd, Field *field, const Json_wrapper *w,
1305 bool no_error);
1306#endif /* ITEM_JSON_FUNC_INCLUDED */
A field that stores a JSON value.
Definition: field.h:4062
Definition: field.h:577
Definition: item_cmpfunc.h:294
Class that represents CAST(<expr> AS <type> ARRAY)
Definition: item_json_func.h:1015
unique_ptr_destroy_only< Json_array > m_result_array
An array used by save_in_field_inner() to store the result of an array cast operation.
Definition: item_json_func.h:1032
bool get_time(MYSQL_TIME *) override
Definition: item_json_func.h:1077
void allow_array_cast() override
A helper function to ensure proper usage of CAST(.
Definition: item_json_func.h:1052
const char * func_name() const override
Definition: item_json_func.h:1041
longlong val_int() override
Definition: item_json_func.h:1057
bool returns_array() const override
Whether the item returns array of its data type.
Definition: item_json_func.h:1043
bool get_date(MYSQL_TIME *, my_time_flags_t) override
Definition: item_json_func.h:1073
my_decimal * val_decimal(my_decimal *) override
Definition: item_json_func.h:1065
enum Functype functype() const override
Definition: item_json_func.h:1042
double val_real() override
Definition: item_json_func.h:1069
~Item_func_array_cast() override
Cast_target cast_type
Type to cast to.
Definition: item_json_func.h:1017
String * val_str(String *) override
Definition: item_json_func.h:1061
Represents the JSON function JSON_ARRAY_APPEND()
Definition: item_json_func.h:643
Item_func_json_array_append(THD *thd, const POS &pos, PT_item_list *a)
Definition: item_json_func.h:645
const char * func_name() const override
Definition: item_json_func.h:648
Represents the JSON function JSON_ARRAY_INSERT()
Definition: item_json_func.h:669
Item_func_json_array_insert(THD *thd, const POS &pos, PT_item_list *a)
Definition: item_json_func.h:671
const char * func_name() const override
Definition: item_json_func.h:674
Represents the JSON function JSON_ARRAY()
Definition: item_json_func.h:726
enum Functype functype() const override
Definition: item_json_func.h:737
Item_func_json_array(Args &&...parent_args)
Definition: item_json_func.h:729
const char * func_name() const override
Definition: item_json_func.h:736
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:739
Represents the JSON function JSON_CONTAINS_PATH()
Definition: item_json_func.h:437
void cleanup() override
Cleanup between executions of the statement.
Definition: item_json_func.cc:906
bool is_bool_func() const override
Definition: item_json_func.h:453
longlong val_int() override
Definition: item_json_func.cc:913
Json_path_cache m_path_cache
Definition: item_json_func.h:442
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:457
enum Functype functype() const override
Definition: item_json_func.h:451
String m_doc_value
Definition: item_json_func.h:438
Item_func_json_contains_path(THD *thd, const POS &pos, PT_item_list *a)
Definition: item_json_func.h:445
const char * func_name() const override
Definition: item_json_func.h:450
enum_const_item_cache can_cache_json_arg(Item *arg) override
Whether an arg of a JSON function can be cached to avoid repetitive string->JSON conversion.
Definition: item_json_func.h:468
enum_one_or_all_type m_cached_ooa
Definition: item_json_func.h:439
Represents the JSON function JSON_CONTAINS()
Definition: item_json_func.h:401
bool gc_subst_analyzer(uchar **) override
Analyzer function for GC substitution.
Definition: item_json_func.h:412
optimize_type select_optimize(const THD *) override
Definition: item_json_func.h:411
Item_func_json_contains(THD *thd, const POS &pos, PT_item_list *a)
Definition: item_json_func.h:406
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:418
longlong val_int() override
Definition: item_json_func.cc:848
String m_doc_value
Definition: item_json_func.h:402
enum Functype functype() const override
Definition: item_json_func.h:410
Json_path_cache m_path_cache
Definition: item_json_func.h:403
enum_const_item_cache can_cache_json_arg(Item *arg) override
Whether an arg of a JSON function can be cached to avoid repetitive string->JSON conversion.
Definition: item_json_func.h:429
void cleanup() override
Cleanup between executions of the statement.
Definition: item_json_func.cc:842
const char * func_name() const override
Definition: item_json_func.h:409
bool is_bool_func() const override
Definition: item_json_func.h:414
Represents the JSON function JSON_DEPTH()
Definition: item_json_func.h:539
enum Functype functype() const override
Definition: item_json_func.h:546
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:548
longlong val_int() override
Definition: item_json_func.cc:1550
String m_doc_value
Definition: item_json_func.h:540
const char * func_name() const override
Definition: item_json_func.h:545
Item_func_json_depth(const POS &pos, Item *a)
Definition: item_json_func.h:543
Represents the JSON function JSON_EXTRACT()
Definition: item_json_func.h:587
const char * func_name() const override
Definition: item_json_func.h:597
bool eq(const Item *item) const override
Compare this item with another item for equality.
Definition: item_json_func.cc:1697
enum Functype functype() const override
Definition: item_json_func.h:598
Item_func_json_extract(THD *thd, const POS &pos, PT_item_list *a)
Definition: item_json_func.h:591
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:600
bool val_json(Json_wrapper *wr) override
Get a JSON value from an Item.
Definition: item_json_func.cc:1630
Item_func_json_extract(THD *thd, const POS &pos, Item *a, Item *b)
Definition: item_json_func.h:594
String m_doc_value
Definition: item_json_func.h:588
Represents the JSON function JSON_INSERT()
Definition: item_json_func.h:656
Item_func_json_insert(THD *thd, const POS &pos, PT_item_list *a)
Definition: item_json_func.h:658
const char * func_name() const override
Definition: item_json_func.h:661
Represents the JSON function JSON_KEYS()
Definition: item_json_func.h:561
bool val_json(Json_wrapper *wr) override
Get a JSON value from an Item.
Definition: item_json_func.cc:1571
String m_doc_value
Definition: item_json_func.h:562
Item_func_json_keys(THD *thd, const POS &pos, Item *a, Item *b)
Definition: item_json_func.h:568
Item_func_json_keys(THD *thd, const POS &pos, Item *a)
Definition: item_json_func.h:565
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:573
const char * func_name() const override
Definition: item_json_func.h:571
Represents the JSON function JSON_LENGTH()
Definition: item_json_func.h:516
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:522
Item_func_json_length(const POS &pos, Item *doc)
Definition: item_json_func.h:520
longlong val_int() override
Definition: item_json_func.cc:1526
String m_doc_value
Definition: item_json_func.h:517
enum Functype functype() const override
Definition: item_json_func.h:531
const char * func_name() const override
Definition: item_json_func.h:530
Represents the JSON function JSON_MERGE_PATCH.
Definition: item_json_func.h:875
Item_func_json_merge_patch(THD *thd, const POS &pos, PT_item_list *a)
Definition: item_json_func.h:877
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:882
const char * func_name() const override
Definition: item_json_func.h:880
Represents the JSON function JSON_MERGE_PRESERVE.
Definition: item_json_func.h:845
const char * func_name() const override
Definition: item_json_func.h:850
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:852
Item_func_json_merge_preserve(THD *thd, const POS &pos, PT_item_list *a)
Definition: item_json_func.h:847
Represents the JSON function JSON_MERGE.
Definition: item_json_func.h:865
bool is_deprecated() const override
Definition: item_json_func.h:869
Definition: item_json_func.h:1084
bool gc_subst_analyzer(uchar **) override
Analyzer function for GC substitution.
Definition: item_json_func.h:1090
enum Functype functype() const override
Definition: item_json_func.h:1089
const char * func_name() const override
Definition: item_json_func.h:1088
Item_func_json_overlaps(const POS &pos, Item *a, Item *b)
Definition: item_json_func.h:1086
optimize_type select_optimize(const THD *) override
Definition: item_json_func.h:1091
enum_const_item_cache can_cache_json_arg(Item *arg) override
Whether an arg of a JSON function can be cached to avoid repetitive string->JSON conversion.
Definition: item_json_func.h:1094
Represents the JSON_PRETTY function.
Definition: item_json_func.h:953
const char * func_name() const override
Definition: item_json_func.h:957
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:961
enum Functype functype() const override
Definition: item_json_func.h:959
Item_func_json_pretty(const POS &pos, Item *a)
Definition: item_json_func.h:955
Represents the JSON function JSON_QUOTE()
Definition: item_json_func.h:894
enum Functype functype() const override
Definition: item_json_func.h:903
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:905
String m_value
Definition: item_json_func.h:895
Item_func_json_quote(const POS &pos, PT_item_list *a)
Definition: item_json_func.h:898
const char * func_name() const override
Definition: item_json_func.h:901
Represents the JSON function JSON_REMOVE()
Definition: item_json_func.h:821
Item_func_json_remove(Args &&...parent_args)
Definition: item_json_func.h:827
const char * func_name() const override
Definition: item_json_func.h:830
bool can_use_in_partial_update() const override
Can this function type be used in partial update?
Definition: item_json_func.h:823
String m_doc_value
Definition: item_json_func.h:822
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:832
Represents the JSON function JSON_REPLACE()
Definition: item_json_func.h:714
Item_func_json_replace(Args &&...parent_args)
Definition: item_json_func.h:717
const char * func_name() const override
Definition: item_json_func.h:720
Represents the JSON function JSON_OBJECT()
Definition: item_json_func.h:751
String tmp_key_value
Definition: item_json_func.h:752
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:766
enum Functype functype() const override
Definition: item_json_func.h:764
Item_func_json_row_object(THD *thd, const POS &pos, PT_item_list *a)
Definition: item_json_func.h:755
const char * func_name() const override
Definition: item_json_func.h:763
Represents the JSON function JSON_SCHEMA_VALID( <json schema>, <json doc> )
Definition: item_json_func.h:343
Item_func_json_schema_valid(const POS &pos, Item *a, Item *b)
Definition: item_json_func.cc:682
bool val_bool() override
Definition: item_json_func.cc:745
bool fix_fields(THD *, Item **) override
Definition: item_json_func.cc:669
longlong val_int() override
Definition: item_json_func.h:353
Json_schema_validator m_cached_schema_validator
Definition: item_json_func.h:360
enum Functype functype() const override
Definition: item_json_func.h:349
const char * func_name() const override
Definition: item_json_func.h:348
~Item_func_json_schema_valid() override
void cleanup() override
Called for every Item after use (preparation and execution).
Definition: item_json_func.cc:680
Represents the JSON function JSON_SCHEMA_VALIDATION_REPORT( <json schema>, <json doc> )
Definition: item_json_func.h:367
const char * func_name() const override
Definition: item_json_func.h:373
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:383
Json_schema_validator m_cached_schema_validator
Definition: item_json_func.h:395
void cleanup() override
JSON_*() support methods.
Definition: item_json_func.cc:784
bool val_json(Json_wrapper *wr) override
Get a JSON value from an Item.
Definition: item_json_func.cc:796
bool fix_fields(THD *, Item **) override
Definition: item_json_func.cc:773
Item_func_json_schema_validation_report(THD *thd, const POS &pos, PT_item_list *a)
Definition: item_json_func.cc:789
enum Functype functype() const override
Definition: item_json_func.h:377
Represents the JSON function JSON_SEARCH()
Definition: item_json_func.h:778
String m_doc_value
Definition: item_json_func.h:779
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:808
enum_one_or_all_type m_cached_ooa
Definition: item_json_func.h:780
Item_func_like * m_like_node
Definition: item_json_func.h:784
Item_func_json_search(Args &&...parent_args)
Construct a JSON_SEARCH() node.
Definition: item_json_func.h:793
enum Functype functype() const override
Definition: item_json_func.h:799
const char * func_name() const override
Definition: item_json_func.h:797
Item_string * m_source_string_item
Definition: item_json_func.h:783
Common base class for JSON_SET() and JSON_REPLACE().
Definition: item_json_func.h:682
Item_func_json_set_replace(bool json_set, Args &&...parent_args)
Definition: item_json_func.h:690
const bool m_json_set
True if this is JSON_SET, false if it is JSON_REPLACE.
Definition: item_json_func.h:684
Json_path_clone m_path
Definition: item_json_func.h:685
bool can_use_in_partial_update() const override
Can this function type be used in partial update?
Definition: item_json_func.h:686
Represents the JSON function JSON_SET()
Definition: item_json_func.h:702
Item_func_json_set(Args &&...parent_args)
Definition: item_json_func.h:705
const char * func_name() const override
Definition: item_json_func.h:708
Class that represents the function JSON_STORAGE_FREE.
Definition: item_json_func.h:995
enum Functype functype() const override
Definition: item_json_func.h:1000
Item_func_json_storage_free(const POS &pos, Item *a)
Definition: item_json_func.h:997
const char * func_name() const override
Definition: item_json_func.h:999
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:1002
Class that represents the function JSON_STORAGE_SIZE.
Definition: item_json_func.h:974
Item_func_json_storage_size(const POS &pos, Item *a)
Definition: item_json_func.h:976
const char * func_name() const override
Definition: item_json_func.h:978
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:981
enum Functype functype() const override
Definition: item_json_func.h:979
Represents the JSON function JSON_TYPE.
Definition: item_json_func.h:476
const char * func_name() const override
Definition: item_json_func.h:482
String * val_str(String *) override
Definition: item_json_func.cc:1051
String m_value
Definition: item_json_func.h:477
Item_func_json_type(const POS &pos, Item *a)
Definition: item_json_func.h:480
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.cc:1042
enum Functype functype() const override
Definition: item_json_func.h:483
Represents the JSON function JSON_UNQUOTE()
Definition: item_json_func.h:925
String m_value
Definition: item_json_func.h:926
const char * func_name() const override
Definition: item_json_func.h:935
Item_func_json_unquote(const POS &pos, Item *a)
Definition: item_json_func.h:933
Item_func_json_unquote(const POS &pos, PT_item_list *a)
Definition: item_json_func.h:930
enum Functype functype() const override
Definition: item_json_func.h:937
String m_conversion_buffer
Definition: item_json_func.h:927
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:939
Represents the JSON function JSON_VALID( <value> )
Definition: item_json_func.h:319
const char * func_name() const override
Definition: item_json_func.h:325
Item_func_json_valid(const POS &pos, Item *a)
Definition: item_json_func.h:323
longlong val_int() override
Definition: item_json_func.cc:624
enum Functype functype() const override
Definition: item_json_func.h:326
bool is_bool_func() const override
Definition: item_json_func.h:328
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:332
String m_value
Definition: item_json_func.h:320
Class implementing the JSON_VALUE function.
Definition: item_json_func.h:1130
enum Functype functype() const override
Definition: item_json_func.h:1140
unique_ptr_destroy_only< Default_value > m_default_error
The default value for ON EMPTY (if not ERROR or NULL ON EMPTY).
Definition: item_json_func.h:1171
~Item_func_json_value() override
Json_on_response_type m_on_error
Type of the ON ERROR clause.
Definition: item_json_func.h:1167
Cast_target m_cast_target
The target data type.
Definition: item_json_func.h:1173
unique_ptr_destroy_only< Default_value > m_default_empty
The default value for ON EMPTY (if not ERROR or NULL ON EMPTY).
Definition: item_json_func.h:1169
const char * func_name() const override
Definition: item_json_func.h:1139
Json_on_response_type m_on_empty
Type of the ON EMPTY clause.
Definition: item_json_func.h:1165
Json_path m_path_json
Parsed path.
Definition: item_json_func.h:1160
Definition: item_cmpfunc.h:2365
Definition: item_json_func.h:1099
enum_const_item_cache can_cache_json_arg(Item *arg) override
Whether an arg of a JSON function can be cached to avoid repetitive string->JSON conversion.
Definition: item_json_func.h:1117
Item_func_member_of(const POS &pos, Item *a, Item *b)
Definition: item_json_func.h:1101
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:1105
enum Functype functype() const override
Definition: item_json_func.h:1104
bool gc_subst_analyzer(uchar **) override
Analyzer function for GC substitution.
Definition: item_json_func.h:1111
Item * key_item() const override
Definition: item_json_func.h:1116
optimize_type select_optimize(const THD *) override
Definition: item_json_func.h:1112
const char * func_name() const override
Definition: item_json_func.h:1103
Base class for all the functions that take a JSON document as the first argument and one of more pair...
Definition: item_json_func.h:616
void update_used_tables() final
Updates used tables, not null tables information and accumulates properties up the item tree,...
Definition: item_json_func.cc:1744
String m_doc_value
Definition: item_json_func.h:628
Item_func_modify_json_in_path(Args &&...parent_args)
Definition: item_json_func.h:619
table_map calculate_not_null_tables() const
Calculates the set of tables to return from not_used_tables().
Definition: item_json_func.cc:1749
bool resolve_type(THD *thd) final
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.cc:1731
Definition: item_func.h:100
Item ** args
Array of pointers to arguments.
Definition: item_func.h:107
bool reject_vector_args()
Definition: item_func.cc:1596
Functype
Definition: item_func.h:209
@ JSON_VALUE_FUNC
Definition: item_func.h:353
@ JSON_SCHEMA_VALIDATION_REPORT_FUNC
Definition: item_func.h:355
@ JSON_STORAGE_SIZE_FUNC
Definition: item_func.h:351
@ JSON_SEARCH_FUNC
Definition: item_func.h:354
@ JSON_STORAGE_FREE_FUNC
Definition: item_func.h:352
@ JSON_CONTAINS
Definition: item_func.h:327
@ JSON_VALID_FUNC
Definition: item_func.h:346
@ JSON_UNQUOTE_FUNC
Definition: item_func.h:329
@ JSON_CONTAINS_PATH_FUNC
Definition: item_func.h:350
@ JSON_ARRAY_FUNC
Definition: item_func.h:345
@ JSON_SCHEMA_VALID_FUNC
Definition: item_func.h:356
@ JSON_DEPTH_FUNC
Definition: item_func.h:342
@ JSON_QUOTE_FUNC
Definition: item_func.h:349
@ JSON_OBJECT_FUNC
Definition: item_func.h:344
@ JSON_TYPE_FUNC
Definition: item_func.h:347
@ JSON_PRETTY_FUNC
Definition: item_func.h:348
@ JSON_EXTRACT_FUNC
Definition: item_func.h:343
@ MEMBER_OF_FUNC
Definition: item_func.h:330
@ TYPECAST_FUNC
Definition: item_func.h:258
@ JSON_OVERLAPS
Definition: item_func.h:328
@ JSON_LENGTH_FUNC
Definition: item_func.h:341
virtual bool eq_specific(const Item *) const
Provide a more specific equality check for a function.
Definition: item_func.h:534
optimize_type
Definition: item_func.h:358
@ OPTIMIZE_KEY
Definition: item_func.h:360
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_func.h:717
virtual const char * func_name() const =0
enum Type type() const override
Definition: item_func.h:365
virtual Item * key_item() const
Definition: item_func.h:537
bool param_type_is_default(THD *thd, uint start, uint end, uint step, enum_field_types def)
For arguments of this Item_func ("args" array), in range [start, start+step, start+2*step,...
Definition: item_func.cc:528
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_func.cc:748
bool fix_fields(THD *, Item **ref) override
Definition: item_func.cc:406
uint arg_count
How many arguments in 'args'.
Definition: item_func.h:130
Field * tmp_table_field(TABLE *t_arg) override
Definition: item_func.cc:793
bool null_on_null
Affects how to determine that NULL argument implies a NULL function return.
Definition: item_func.h:186
Definition: item_func.h:1020
Base class for all item functions that a return JSON value.
Definition: item_json_func.h:158
void mark_for_partial_update(const Field_json *field)
Mark this expression as used in partial update.
Definition: item_json_func.cc:2081
Item_json_func(THD *thd, Args &&...parent_args)
Construct an Item_json_func instance.
Definition: item_json_func.h:186
String m_conversion_buffer
String used for converting JSON text values to utf8mb4 charset.
Definition: item_json_func.h:166
longlong val_int() override
Definition: item_json_func.cc:1128
Item_result cast_to_int_type() const override
Definition: item_json_func.h:207
String m_value
String used when reading JSON binary values or JSON text values.
Definition: item_json_func.h:164
virtual bool can_use_in_partial_update() const
Can this function type be used in partial update?
Definition: item_json_func.h:160
bool get_date(MYSQL_TIME *ltime, my_time_flags_t fuzzydate) override
Definition: item_json_func.cc:1105
bool resolve_type(THD *) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:192
bool get_time(MYSQL_TIME *ltime) override
Definition: item_json_func.cc:1117
String * val_str(String *arg) override
Definition: item_json_func.cc:1090
my_decimal * val_decimal(my_decimal *decimal_value) override
Definition: item_json_func.cc:1150
enum Item_result result_type() const override
Definition: item_json_func.h:197
String m_string_buffer
String used for converting a JSON value to text in val_str().
Definition: item_json_func.h:168
bool supports_partial_update(const Field_json *field) const override
Does this function call support partial update of the given JSON column?
Definition: item_json_func.cc:2098
Json_path_cache m_path_cache
Definition: item_json_func.h:171
const Field_json * m_partial_update_column
Target column for partial update, if this function is used in an update statement and partial update ...
Definition: item_json_func.h:177
double val_real() override
Definition: item_json_func.cc:1137
void cleanup() override
JSON_*() support methods.
Definition: item_json_func.cc:618
Definition: item_strfunc.h:76
Definition: item.h:5459
Represents a "CAST( <value> AS JSON )" coercion.
Definition: item_json_func.h:493
bool val_json(Json_wrapper *wr) override
Get a JSON value from an Item.
Definition: item_json_func.cc:1470
const char * cast_type() const
Definition: item_json_func.h:509
void print(const THD *thd, String *str, enum_query_type query_type) const override
This method is used for to:
Definition: item_json_func.cc:1517
Item_json_func super
Definition: item_json_func.h:494
const char * func_name() const override
Definition: item_json_func.h:508
bool resolve_type(THD *thd) override
Resolve type-related information for this item, such as result field type, maximum size,...
Definition: item_json_func.h:500
Item_typecast_json(THD *thd, const POS &pos, Item *a)
Definition: item_json_func.h:497
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:930
uint32 max_char_length() const
Definition: item.h:3369
void set_nullable(bool nullable)
Definition: item.h:3687
virtual bool propagate_type(THD *thd, const Type_properties &type)
Propagate data type specifications into parameters and user variables.
Definition: item.h:1314
virtual type_conversion_status save_in_field_inner(Field *field, bool no_conversions)
Helper function which does all of the work for save_in_field(Field*, bool), except some error checkin...
Definition: item.cc:6779
virtual bool val_json(Json_wrapper *result)
Get a JSON value from an Item.
Definition: item.h:2094
enum_const_item_cache
How to cache constant JSON data.
Definition: item.h:998
@ CACHE_NONE
Don't cache.
Definition: item.h:1000
@ CACHE_JSON_VALUE
Source data is a JSON string, parse and cache result.
Definition: item.h:1002
@ CACHE_JSON_ATOM
Source data is SQL scalar, convert and cache result.
Definition: item.h:1004
void set_data_type_json()
Set the data type of the Item to be JSON.
Definition: item.h:1764
void set_data_type_string(uint32 max_l)
Set the Item to be variable length string.
Definition: item.h:1600
virtual void mark_json_as_scalar()
For Items with data type JSON, mark that a string argument is treated as a scalar JSON value.
Definition: item.h:1355
Represents a JSON array container, i.e.
Definition: json_dom.h:513
Vector of logical diffs describing changes to a JSON column.
Definition: json_diff.h:141
JSON DOM abstract base class.
Definition: json_dom.h:172
Represents a JSON container value of type "object" (ECMA), type J_OBJECT here.
Definition: json_dom.h:367
Path cache for JSON functions.
Definition: item_json_func.h:91
Json_path_cache(THD *thd, uint size)
Json_path_cache.
Definition: item_json_func.cc:554
const Json_path * get_path(uint arg_idx) const
Return an already parsed path expression.
Definition: item_json_func.cc:599
void reset_cache()
Reset the cache for re-use when a statement is re-executed.
Definition: item_json_func.cc:609
enum_path_status
Enum that tells the status of a cell in m_paths.
Definition: item_json_func.h:100
Prealloced_array< Json_path, 8 > m_paths
List of paths.
Definition: item_json_func.h:97
Mem_root_array< Path_cell > m_arg_idx_to_vector_idx
Map argument indexes to indexes into m_paths.
Definition: item_json_func.h:113
String m_path_value
Holder for path strings.
Definition: item_json_func.h:94
bool parse_and_cache_path(const THD *thd, Item **args, uint arg_idx, bool forbid_wildcards)
Parse a path expression if necessary.
Definition: item_json_func.cc:561
A lightweight path expression.
Definition: json_path.h:444
A JSON path expression.
Definition: json_path.h:350
A class that is capable of holding objects of any sub-type of Json_scalar.
Definition: json_dom.h:1883
This is just a facade to the Json_schema_validator and it is used to hide the dependency on the rapid...
Definition: json_schema.h:155
Abstraction for accessing JSON values irrespective of whether they are (started out as) binary JSON v...
Definition: json_dom.h:1150
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:426
Wrapper class for an Item list head, used to allocate Item lists in the parser in a context-independe...
Definition: parse_tree_helpers.h:105
virtual void add_json_info(Json_object *json_obj)
Add all the node-specific json fields.
Definition: parse_tree_node_base.h:303
A typesafe replacement for DYNAMIC_ARRAY.
Definition: prealloced_array.h:71
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:167
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
my_decimal class limits 'decimal_t' type to what we need in MySQL.
Definition: my_decimal.h:96
enum_query_type
Query type constants (usable as bitmap flags).
Definition: enum_query_type.h:31
This file contains the field type.
@ MYSQL_TYPE_JSON
Definition: field_types.h:80
Cast_target
Definition: item_create.h:56
static int flags[50]
Definition: hp_test1.cc:40
bool json_value(Item *arg, Json_wrapper *result, bool *has_value)
Return the JSON value of the argument in a wrapper.
Definition: item_json_func.cc:983
enum_json_diff_status apply_json_diffs(Field_json *field, const Json_diff_vector *diffs)
Apply a sequence of JSON diffs to the value stored in a JSON column.
Definition: item_json_func.cc:158
bool geometry_to_json(Json_wrapper *wr, String *swkb, const char *calling_function, int max_decimal_digits, bool add_bounding_box, bool add_short_crs_urn, bool add_long_crs_urn, uint32 *geometry_srid)
Turn a GEOMETRY value into a JSON value per the GeoJSON specification revision 1.0.
Definition: item_geofunc.cc:2331
bool ensure_utf8mb4(const String &val, String *buf, const char **resptr, size_t *reslength, bool require_string)
Check a non-empty val for character set.
Definition: item_json_func.cc:82
bool save_json_to_field(THD *thd, Field *field, const Json_wrapper *w, bool no_error)
Save JSON to a given field.
Definition: item_json_func.cc:3830
bool get_json_atom_wrapper(Item **args, uint arg_idx, const char *calling_function, String *value, String *tmp, Json_wrapper *wr, Json_scalar_holder *scalar, bool accept_string)
Convert Json values or MySQL values to JSON.
Definition: item_json_func.cc:1399
bool get_json_wrapper(Item **args, uint arg_idx, String *str, const char *func_name, Json_wrapper *wrapper)
Return the JSON value of the argument in a wrapper.
Definition: item_json_func.cc:1003
bool get_json_object_member_name(const THD *thd, Item *arg_item, String *value, String *utf8_res, const char **safep, size_t *safe_length)
Gets a JSON object member name from an Item.
Definition: item_json_func.cc:317
bool parse_json(const String &res, Json_dom_ptr *dom, bool require_str_or_json, const JsonParseErrorHandler &error_handler, const JsonErrorHandler &depth_handler)
Parse a JSON dom out of an argument to a JSON function.
Definition: item_json_func.cc:133
bool sql_scalar_to_json(Item *arg, const char *calling_function, String *value, String *tmp, Json_wrapper *wr, Json_scalar_holder *scalar, bool scalar_string)
Get a JSON value from an SQL scalar value.
Definition: item_json_func.cc:1205
bool get_atom_null_as_null(Item **args, uint arg_idx, const char *calling_function, String *value, String *tmp, Json_wrapper *wr)
Convert JSON values or MySQL values to JSON.
Definition: item_json_func.cc:1456
bool convert_value_to_json(Item *item, const char *func_name, Json_wrapper *wr)
Convert a value represented with an Item to a JSON value.
enum_one_or_all_type
For use by JSON_CONTAINS_PATH() and JSON_SEARCH()
Definition: item_json_func.h:76
@ ooa_null
Definition: item_json_func.h:79
@ ooa_one
Definition: item_json_func.h:77
@ ooa_all
Definition: item_json_func.h:78
@ ooa_uninitialized
Definition: item_json_func.h:81
@ ooa_error
Definition: item_json_func.h:80
enum_json_diff_status
The result of applying JSON diffs on a JSON value using apply_json_diff().
Definition: json_diff.h:264
std::unique_ptr< Json_dom > Json_dom_ptr
Definition: json_dom.h:64
std::function< void()> JsonErrorHandler
Definition: json_error_handler.h:36
std::function< void(const char *parse_err, size_t err_offset)> JsonParseErrorHandler
Definition: json_error_handler.h:35
This file contains interface support for the JSON path abstraction.
Functions for validating a string against a JSON Schema.
A better implementation of the UNIX ctype(3) library.
MYSQL_STRINGS_EXPORT CHARSET_INFO my_charset_utf8mb4_bin
Definition: ctype-utf8.cc:7822
This file follows Google coding style, except for the name MEM_ROOT (which is kept for historical rea...
std::unique_ptr< T, Destroy_only< T > > unique_ptr_destroy_only
std::unique_ptr, but only destroying.
Definition: my_alloc.h:480
Some integer typedefs for easier portability.
uint8_t uint8
Definition: my_inttypes.h:63
unsigned char uchar
Definition: my_inttypes.h:52
long long int longlong
Definition: my_inttypes.h:55
uint16_t uint16
Definition: my_inttypes.h:65
uint32_t uint32
Definition: my_inttypes.h:67
uint64_t table_map
Definition: my_table_map.h:30
Interface for low level time utilities.
unsigned int my_time_flags_t
Flags to str_to_datetime and number_to_datetime.
Definition: my_time.h:94
Common definition between mysql server & client.
#define MAX_BLOB_WIDTH
Default width for blob in bytes.
Definition: mysql_com.h:906
Time declarations shared between the server and client API: you should not add anything to this heade...
static char * path
Definition: mysqldump.cc:149
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1105
static PFS_engine_table_share_proxy table
Definition: pfs.cc:61
Definition: buf0block_hint.cc:30
PT & ref(PT *tp)
Definition: tablespace_impl.cc:359
bool length(const dd::Spatial_reference_system *srs, const Geometry *g1, double *length, bool *null) noexcept
Computes the length of linestrings and multilinestrings.
Definition: length.cc:76
size_t size(const char *const c)
Definition: base64.h:46
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:418
Definition: gcs_xcom_synode.h:64
PSI_memory_key key_memory_JSON
Definition: psi_memory_key.cc:53
type_conversion_status
Status when storing a value in a field or converting from one datatype to another.
Definition: field.h:204
Our own string classes, used pervasively throughout the executor.
Definition: m_ctype.h:421
Definition: parser_yystype.h:182
Definition: item_json_func.cc:3955
Struct that points to a cell in m_paths and tells its status.
Definition: item_json_func.h:107
size_t m_index
Definition: item_json_func.h:109
enum_path_status m_status
Definition: item_json_func.h:108
Definition: mysql_time.h:82
Bison "location" class.
Definition: parse_location.h:43
Definition: table.h:1421
Definition: result.h:30
Json_on_response_type
Types of ON EMPTY/ON ERROR clauses for JSON_TABLE and JSON_VALUE.
Definition: table_function.h:192
Item_result
Type of the user defined function return slot and arguments.
Definition: udf_registration_types.h:39
@ STRING_RESULT
not valid for UDFs
Definition: udf_registration_types.h:41
@ INT_RESULT
double
Definition: udf_registration_types.h:43