1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-11 01:42:22 +03:00

Merge recent trunk enhancements into the jsonb branch, and especially the

finer-grain characterization of JSON function properties.

FossilOrigin-Name: 72393b003f9f8675e4a124dddd09607b5b34ddefe56716b283c68c0982fb3d96
This commit is contained in:
drh
2023-11-08 17:11:13 +00:00
47 changed files with 2468 additions and 3227 deletions

View File

@@ -5859,37 +5859,43 @@ static sqlite3_module jsonTreeModule = {
void sqlite3RegisterJsonFunctions(void){
#ifndef SQLITE_OMIT_JSON
static FuncDef aJsonFunc[] = {
JFUNCTION(json, 1, 0, jsonRemoveFunc),
JFUNCTION(jsonb, 1, JSON_BLOB, jsonbFunc),
JFUNCTION(json_array, -1, 0, jsonArrayFunc),
JFUNCTION(jsonb_array, -1, JSON_BLOB, jsonArrayFunc),
JFUNCTION(json_array_length, 1, 0, jsonArrayLengthFunc),
JFUNCTION(json_array_length, 2, 0, jsonArrayLengthFunc),
JFUNCTION(json_error_position,1, 0, jsonErrorFunc),
JFUNCTION(json_extract, -1, 0, jsonExtractFunc),
JFUNCTION(jsonb_extract, -1, JSON_BLOB, jsonExtractFunc),
JFUNCTION(->, 2, JSON_JSON, jsonExtractFunc),
JFUNCTION(->>, 2, JSON_SQL, jsonExtractFunc),
JFUNCTION(json_insert, -1, 0, jsonSetFunc),
JFUNCTION(jsonb_insert, -1, JSON_BLOB, jsonSetFunc),
JFUNCTION(json_object, -1, 0, jsonObjectFunc),
JFUNCTION(jsonb_object, -1, JSON_BLOB, jsonObjectFunc),
JFUNCTION(json_patch, 2, 0, jsonPatchFunc),
JFUNCTION(jsonb_patch, 2, JSON_BLOB, jsonPatchFunc),
JFUNCTION(json_quote, 1, 0, jsonQuoteFunc),
JFUNCTION(json_remove, -1, 0, jsonRemoveFunc),
JFUNCTION(jsonb_remove, -1, JSON_BLOB, jsonRemoveFunc),
JFUNCTION(json_replace, -1, 0, jsonReplaceFunc),
JFUNCTION(jsonb_replace, -1, JSON_BLOB, jsonReplaceFunc),
JFUNCTION(json_set, -1, JSON_ISSET, jsonSetFunc),
JFUNCTION(jsonb_set, -1, JSON_ISSET|JSON_BLOB, jsonSetFunc),
JFUNCTION(json_type, 1, 0, jsonTypeFunc),
JFUNCTION(json_type, 2, 0, jsonTypeFunc),
JFUNCTION(json_valid, 1, 0, jsonValidFunc),
/* Might return JSON text (subtype J) */
/* | */
/* Uses cache ------, | ,---- Returns JSONB */
/* | | | */
/* Number of arguments ---, | | | ,--- Flags */
/* | | | | | */
JFUNCTION(json, 1, 1, 1, 0, 0, jsonRemoveFunc),
JFUNCTION(jsonb, 1, 1, 0, 1, 0, jsonbFunc),
JFUNCTION(json_array, -1, 0, 1, 0, 0, jsonArrayFunc),
JFUNCTION(jsonb_array, -1, 0, 0, 1, 0, jsonArrayFunc),
JFUNCTION(json_array_length, 1, 1, 0, 0, 0, jsonArrayLengthFunc),
JFUNCTION(json_array_length, 2, 1, 0, 0, 0, jsonArrayLengthFunc),
JFUNCTION(json_error_position,1, 1, 0, 0, 0, jsonErrorFunc),
JFUNCTION(json_extract, -1, 1, 1, 0, 0, jsonExtractFunc),
JFUNCTION(jsonb_extract, -1, 1, 0, 1, 0, jsonExtractFunc),
JFUNCTION(->, 2, 1, 1, 0, JSON_JSON, jsonExtractFunc),
JFUNCTION(->>, 2, 1, 0, 0, JSON_SQL, jsonExtractFunc),
JFUNCTION(json_insert, -1, 1, 1, 0, 0, jsonSetFunc),
JFUNCTION(jsonb_insert, -1, 1, 0, 1, 0, jsonSetFunc),
JFUNCTION(json_object, -1, 0, 1, 0, 0, jsonObjectFunc),
JFUNCTION(jsonb_object, -1, 0, 0, 1, 0, jsonObjectFunc),
JFUNCTION(json_patch, 2, 1, 1, 0, 0, jsonPatchFunc),
JFUNCTION(jsonb_patch, 2, 1, 0, 1, 0, jsonPatchFunc),
JFUNCTION(json_quote, 1, 0, 1, 0, 0, jsonQuoteFunc),
JFUNCTION(json_remove, -1, 1, 1, 0, 0, jsonRemoveFunc),
JFUNCTION(jsonb_remove, -1, 1, 0, 1, 0, jsonRemoveFunc),
JFUNCTION(json_replace, -1, 1, 1, 0, 0, jsonReplaceFunc),
JFUNCTION(jsonb_replace, -1, 1, 0, 1, 0, jsonReplaceFunc),
JFUNCTION(json_set, -1, 1, 1, 0, JSON_ISSET, jsonSetFunc),
JFUNCTION(jsonb_set, -1, 1, 0, 1, JSON_ISSET, jsonSetFunc),
JFUNCTION(json_type, 1, 1, 0, 0, 0, jsonTypeFunc),
JFUNCTION(json_type, 2, 1, 0, 0, 0, jsonTypeFunc),
JFUNCTION(json_valid, 1, 1, 0, 0, 0, jsonValidFunc),
#if SQLITE_DEBUG
JFUNCTION(json_parse, 1, 0, jsonParseFunc),
JFUNCTION(json_test1, 1, 0, jsonTest1Func),
JFUNCTION(jsonb_test2, 1, 0, jsonbTest2),
JFUNCTION(json_parse, 1, 1, 0, 0, 0, jsonParseFunc),
JFUNCTION(json_test1, 1, 1, 0, 0, 0, jsonTest1Func),
JFUNCTION(jsonb_test2, 1, 1, 0, 1, 0, jsonbTest2),
#endif
WAGGREGATE(json_group_array, 1, 0, 0,
jsonArrayStep, jsonArrayFinal, jsonArrayValue, jsonGroupInverse,