1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-24 19:42:23 +03:00
Commit Graph

205 Commits

Author SHA1 Message Date
edc478847b Merge 11.0 into 11.1 2023-11-24 15:58:35 +02:00
5b6134b040 Merge 10.11 into 11.0 2023-11-24 11:20:56 +02:00
583a745299 Merge 10.6 into 10.11 2023-11-21 10:23:11 +02:00
0ead203111 Merge 10.5 into 10.6 2023-11-21 09:18:31 +02:00
8bbf6697cf MDEV-24784 JSON_ARRAYAGG charset issue
set the proper charset for a temporary result
2023-11-19 13:24:27 +01:00
0427c4739e Merge tag '11.1' into 11.2
MariaDB 11.1.3 release
2023-11-14 18:28:37 +01:00
59fd0e6aa0 Merge branch '11.1' into mariadb-11.1.3 2023-11-14 10:14:07 +01:00
644a6b1035 Merge branch '11.0' into mariadb-11.0.4 2023-11-14 09:21:35 +01:00
0f5613a25f Merge branch '11.0' into 11.1 2023-11-08 18:03:08 +01:00
04d9a46c41 Merge branch '10.6' into 10.10 2023-11-08 16:23:30 +01:00
b83c379420 Merge branch '10.5' into 10.6 2023-11-08 15:57:05 +01:00
6cfd2ba397 Merge branch '10.4' into 10.5 2023-11-08 12:59:00 +01:00
9cc179cc7e MDEV-32007: JSON_VALUE and JSON_EXTRACT doesn't handle dash (-)
as first character in key

Analysis:
While parsing the path, if '-' is encountered as a part of the key,
the state of the parser changes to error. Hence NULL is returned eventually.

Fix:
If '-' encountered as part of the key, change the state appropriately to
continue scanning the key.
2023-11-03 01:10:40 +05:30
5d3e14d780 MDEV-31599: Assertion `0' failed in Item_param::can_return_value
from Item::val_json, UBSAN: member access within null pointer of
type 'struct String' in sql/item_jsonfunc.cc

Analysis:
The first argument of json_schema_valid() needs to be a constant.
Fix:
Parse the schema if the item is constant otherwise set it to return null.
2023-11-02 19:05:11 +05:30
5c5123dfe0 MDEV-31411: JSON_ARRAY_INTERSECT/JSON_OBJECT_FILTER_KEYS should fetch
data from a table similar to other JSON functions

Analysis:
Since we are fetching values for every row ( because we are running SELECT
for all rows of a table ), correct value can be only obtained at the time of
calling val_int() because it is called to get value for each row.
Fix:
Set up hash for each row instead of doing it during fixing fields.
2023-11-02 18:37:40 +05:30
d594f1e531 Removing MDEV-27871 because it is not a bug
Part 1
2023-10-13 14:09:22 +02:00
18ddde4826 Merge branch '11.1' into 11.2 2023-08-18 00:59:16 +02:00
f5fae75652 Merge branch '11.0' into 11.1 2023-08-09 08:25:14 +02:00
34a8e78581 Merge branch '10.6' into 10.9 2023-08-04 08:01:06 +02:00
6bf8483cac Merge branch '10.5' into 10.6 2023-08-01 15:08:52 +02:00
f291c3df2c Merge branch '10.4' into 10.5 2023-07-27 15:43:21 +02:00
49088c914b MDEV-26182: Implement JSON_INTERSECT()
The idea is to have simple functions that the user can combine to produce
the exact result one wants, whether the user wants JSON object that has
common keys with another JSON object, or same key/value pair etc. So
making simpler function helps here.

We accomplish this by making three separate functions.
1) JSON_OBJECT_FILTER_KEYS(Obj, Arr_keys):
Put keys ( which are basically strings ) in hash, go over the object and
get key one by one. If the key is present in the hash,
add the key-value pair to result.

2) JSON_OBJECT_TO_ARRAY(Obj) : Create a string variable, Go over the json
object, and add each key value pair as an array into the result.

3) JSON_ARRAY_INTERSECT(arr1, arr2) :
Go over one of the json and add each item of the array
in hash (after normalizing each item). Go over the second array,
search the normalized item one by one in the hash. If item is found,
add it to the result.

Implementation Idea: Holyfoot ( Alexey Botchkov)
Author: tanruixiang and Rucha Deodhar
2023-07-24 12:11:36 +05:30
15a7b6c0b7 MDEV-30145: JSON_TABLE: allow to retrieve the key when iterating on JSON
objects

Idea behind implementation:
We get the json object specified by the json path. Then, transform it into
key-value pairs by going over the json. Get each key-value pair
one-by-one and return the result.
2023-07-24 12:11:36 +05:30
f52954ef42 Merge commit '10.4' into 10.5 2023-07-20 11:54:52 +02:00
23e252aef2 MDEV-23187 misses resetting collation connection
MDEV-23187 misses resetting collation connection causing test failures for
10.5+ bugs.
2023-07-05 16:35:01 +05:30
3883eb63dc Merge 11.0 into 11.1 2023-06-08 14:09:21 +03:00
cbabb95915 Merge branch '11.0' into 11.1 2023-06-05 20:15:15 +02:00
b7b8a9ee43 MDEV-23187: Assorted assertion failures in json_find_path with certain
collations

Fix by Alexey Botchkov

The 'value_len' is calculated wrong for the multibyte charsets. In the
read_strn() function we get the length of the string with the final ' " '
character. So have to subtract it's length from the value_len. And the
length of '1' isn't correct for the ucs2 charset (must be 2).
2023-05-16 01:52:16 +05:30
3b34454c9d MDEV-23187: Assorted assertion failures in json_find_path with certain
collations

Analysis:
When we have negative index, the value in array_counter[] array is going to
be -1 at some point ( because in case of negative index in json path, the
initial value for a path with negative index is -<size_of_array>, and as we
move forward in array while parsing it and finding path, this value
increments). Since SKIPPED_STEP_MARK, is maximum uint value, it gets
compared to some int value in the array and eventually equates to -1
and messes with path.
Fix:
Make SKIPPED_STEP_MARK maximum of INT32.
2023-05-15 12:17:30 +05:30
4e5b771e98 MDEV-30677: Incorrect result for "SELECT JSON_SCHEMA_VALID('{}', NULL)"
Analysis: null_value is not set if any one of the arguments is NULL. So it
returns 1.
Fix: when either argument is NULL, set null_value to true, so that null can
be returned
2023-05-03 12:33:11 +05:30
97675570ca MDEV-30689: JSON_SCHEMA_VALID for type=array return 1 for any string that
starts with '['

Analysis:
When type is non-scalar and the json document has syntax error
then it is not detected during validating type. And Since other validate
functions take const argument, the error state is not stored eventually.
Fix:
After we run out of all schemas (in case of no error during validation) from
the schema list, go over the json document until there is error in parsing
or json doc has ended.
2023-05-03 12:31:45 +05:30
d8997f875e Merge 10.8 into 10.9 2023-04-28 13:39:33 +03:00
7d967423fe MDEV-31147 json_normalize does not work correctly with MSAN build
json_normalize_number(): Avoid accessing str past str_len.
The function would seem to work incorrectly when some digits are
not followed by a decimal point (.) or an exponent (E or e).
2023-04-28 12:15:45 +03:00
7321c71aa1 MDEV-31032: UBSAN|downcast of address X which does not point to an
object of type 'Item_string' in sql/json_schema.cc

Analysis: make_string_literal() returns pointer of type
Item_basic_constant which is converted to pointer of type Item_string. Now,
Item_string is base class of Item_basic_constant, so the error about
downcasting.
Fix: using constructor of Item_string type directly instead of
downcasting would be more appropriate.
2023-04-26 15:15:47 +05:30
4b67ff3b25 MDEV-30705: JSON_SCHEMA_VALID: schema with multipleOf for big value
always return 1

Analysis: Implementation used double to store value. longlong is better
choice
Fix: Use longlong for multiple_of and the value to store it and num_flag to
check for decimals.
2023-04-26 11:00:09 +05:30
2c4c7c8b02 MDEV-30704: JSON_SCHEMA_VALID: multipleOf must be greater than zero
Analysis: multipleOf must be strictly greater then 0. However the
implementation only disallowed values strcitly less than 0
Fix: check if value is less than or equal to 0 instead of less than 0 and
return true.
Also fixed the incorrect return value for some other keywords.
2023-04-26 11:00:09 +05:30
dffd1679ba MDEV-30703: JSON_SCHEMA_VALID : Enum array must have at least one value
Analysis: Current implementation does not check the number of elements in
the enum array and whether they are unique or not.
Fix: Add a counter that counts number of elements and before inserting the
element in the enum hash check whether it exists.
2023-04-26 11:00:09 +05:30
d555f38af8 MDEV-30690: Server crashed on function JSON_SCHEMA_VALID with incorrect
input json schema

Analysis: In case of syntax error while scanning json schema, true is
returned inspite of it being wanring and not error.
Fix: return true instead of false.
2023-04-26 11:00:09 +05:30
1c25b5c026 MDEV-30977: Additional key values are not validating properly when using
unevaluatedProperties with properties declared in subschemas

Analysis:
When a key fails to validate for "properties" when "properties" is being
treated as alternate schema, it needs to fall back on alternate schema
for "properites" itself ("unevaluatedProperties" in context of the bug).
But that doesn't happen and we end up returning false (=validated)
Fix:
When "properties" fails to validate as an alternate schema, fall back on
alternate schema for "properties" itself.
2023-04-26 11:00:08 +05:30
ee41fa38fc MDEV-30995: JSON_SCHEMA_VALID is not validating case sensitive when using
regex

Analysis:
When initializing Regexp_processor_pcre object, we set the PCRE2_CASELESS
flag which is responsible for case insensitive comparison.
Fix:
Unset the flag after initializing.
2023-04-26 11:00:08 +05:30
8939e21dc5 MDEV-30795: JSON_SCHEMA_VALID bugs mentioned in comment
comment 2)
Analysis:
flag to check unique gets reset every time. Hence unique values cannot be
correctly checked
Fix:
do not reset the flag that checks unique for null, true and false
values.

comment 3)
Analysis:
current implementation checks for appropriate value but does not
return true.
Fix:
return true on error

comment 4)
Analysis:
Current implementation did not check for value type for values
inside required array.
Fix:
Check values inside required array
2023-04-26 11:00:08 +05:30
358b8495f5 MDEV-27128: Implement JSON Schema Validation FUNCTION
Implementation:
Implementation is made according to json schema validation draft 2020

JSON schema basically has same structure as that of json object, consisting
of key-value pairs. So it can be parsed in the same manner as
any json object.

However, none of the keywords are mandatory, so making guess about the
json value type based only on the keywords would be incorrect.
Hence we need separate objects denoting each keyword.

So during create_object_and_handle_keyword() we create appropriate objects
based on the keywords and validate each of them individually on the json
document by calling respective validate() function if the type matches.
If any of them fails, return false, else return true.
2023-04-26 11:00:08 +05:30
44281b88f3 Merge 10.8 into 10.9 2023-04-14 11:32:36 +03:00
5bada1246d Merge 10.5 into 10.6 2023-04-11 16:15:19 +03:00
ac5a534a4c Merge remote-tracking branch '10.4' into 10.5 2023-03-31 21:32:41 +02:00
0d55914d96 Merge 10.8 into 10.9 2023-02-16 10:25:34 +02:00
96a3b11d13 Merge 10.5 into 10.6 2023-02-14 15:23:23 +02:00
a80eb9832e MDEV-24538: JSON_LENGTH does not return error upon wrong number of parameters 2023-02-14 12:03:28 +11:00
badf6de171 MDEV-30412: JSON_OBJECTAGG doesn't escape double quote in key 2023-02-14 11:55:11 +11:00
08d4968404 Merge branch '10.8' into 10.9 2023-01-18 16:39:11 +01:00