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