416 lines
20 KiB
Plaintext
416 lines
20 KiB
Plaintext
## Varius tests related to cont_in operator
|
|
|
|
## Preamble
|
|
--source include/xplugin_preamble.inc
|
|
--source include/xplugin_create_user.inc
|
|
|
|
## Test starts here
|
|
--let $xtest_file= $MYSQL_TMP_DIR/crud_cont_in_expr.tmp
|
|
--write_file $xtest_file
|
|
#-->quiet
|
|
|
|
-->macro Cont_in %PARAM0% %PARAM1% %ERROR%
|
|
Mysqlx.Crud.Find {
|
|
collection { name: "xtable" schema: "xtest" }
|
|
data_model: TABLE
|
|
projection {
|
|
alias: "cont_in"
|
|
source {
|
|
type: OPERATOR operator {
|
|
name: "cont_in"
|
|
param { %PARAM0% }
|
|
param { %PARAM1% }
|
|
}
|
|
}
|
|
}
|
|
projection {
|
|
alias: "not_cont_in"
|
|
source {
|
|
type: OPERATOR operator {
|
|
name: "not_cont_in"
|
|
param { %PARAM0% }
|
|
param { %PARAM1% }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->expecterror %ERROR%
|
|
-->recvresult
|
|
-->endmacro
|
|
|
|
# literal and array
|
|
|
|
-->macro Cont_in_literal %POSITIVE% %NEGATIVE% %WHERE%
|
|
-->callmacro Cont_in %POSITIVE% %WHERE% ER_SUCCESS
|
|
-->callmacro Cont_in %NEGATIVE% %WHERE% ER_SUCCESS
|
|
-->endmacro
|
|
|
|
-->varlet %LITERAL% type: LITERAL literal
|
|
-->varlet %V_SINT% type: V_SINT v_signed_int
|
|
-->varlet %V_BOOL% type: V_BOOL v_bool
|
|
-->varlet %V_STRING% type: V_STRING v_string
|
|
-->varlet %V_OCTETS% type: V_OCTETS v_octets
|
|
-->varlet %ARRAY% type: ARRAY array
|
|
-->varlet %IDENT% type: IDENT identifier
|
|
-->varlet %MEMBER% type: MEMBER value
|
|
-->varlet %OBJECT% type: OBJECT object
|
|
-->varlet %OPERATOR% type: OPERATOR operator
|
|
-->varlet %FUNC_CALL% type: FUNC_CALL function_call
|
|
-->varlet %DOCUMENT_PATH% name: 'doc' document_path
|
|
|
|
|
|
-->varlet %LITERAL_10% %LITERAL% {%V_SINT%: 10}
|
|
-->varlet %LITERAL_20% %LITERAL% {%V_SINT%: 20}
|
|
-->varlet %LITERAL_30% %LITERAL% {%V_SINT%: 30}
|
|
-->varlet %LITERAL_40% %LITERAL% {%V_SINT%: 40}
|
|
|
|
-->varlet %LITERAL_TRUE% %LITERAL% {%V_BOOL%: true}
|
|
-->varlet %LITERAL_FALSE% %LITERAL% {%V_BOOL%: false}
|
|
-->varlet %LITERAL_NULL% %LITERAL% {type: V_NULL}
|
|
|
|
-->varlet %LITERAL_RED% %LITERAL% {%V_STRING% {value:'red'}}
|
|
-->varlet %LITERAL_GREEN% %LITERAL% {%V_STRING% {value:'green'}}
|
|
-->varlet %LITERAL_BLUE% %LITERAL% {%V_STRING% {value:'blue'}}
|
|
-->varlet %LITERAL_WHITE% %LITERAL% {%V_STRING% {value:'white'}}
|
|
|
|
-->varlet %LITERAL_APPLE% %LITERAL% {%V_OCTETS% {value:'apple' content_type:0}}
|
|
-->varlet %LITERAL_PEAR% %LITERAL% {%V_OCTETS% {value:'pear' content_type:0}}
|
|
-->varlet %LITERAL_PLUM% %LITERAL% {%V_OCTETS% {value:'plum' content_type:0}}
|
|
-->varlet %LITERAL_BANANA% %LITERAL% {%V_OCTETS% {value:'banana' content_type:0}}
|
|
|
|
-->varlet %LITERAL_ARRAY_10_20_30% %ARRAY% {value {%LITERAL_10%} value {%LITERAL_20%} value {%LITERAL_30%}}
|
|
-->varlet %LITERAL_ARRAY_RED_GREEN_BLUE% %ARRAY% {value {%LITERAL_RED%} value {%LITERAL_GREEN%} value {%LITERAL_BLUE%}}
|
|
-->varlet %LITERAL_ARRAY_TRUE_FALSE% %ARRAY% {value {%LITERAL_TRUE%} value {%LITERAL_FALSE%}}
|
|
-->varlet %LITERAL_ARRAY_APPLE_PEAR_PLUM% %ARRAY% {value {%LITERAL_APPLE%} value {%LITERAL_PEAR%} value {%LITERAL_PLUM%}}
|
|
|
|
|
|
-->title -Numeric literal in numeric literal
|
|
-->callmacro Cont_in_literal %LITERAL_10% %LITERAL_40% %LITERAL_10%
|
|
|
|
-->title -Numeric literal in literal array
|
|
-->callmacro Cont_in_literal %LITERAL_10% %LITERAL_40% %LITERAL_ARRAY_10_20_30%
|
|
|
|
-->title -Bool literal in literal array
|
|
-->callmacro Cont_in_literal %LITERAL_TRUE% %LITERAL_40% %LITERAL_ARRAY_TRUE_FALSE%
|
|
|
|
-->title -String literal in string literal
|
|
-->callmacro Cont_in_literal %LITERAL_BLUE% %LITERAL_WHITE% %LITERAL_BLUE%
|
|
|
|
-->title -String literal in literal array
|
|
-->callmacro Cont_in_literal %LITERAL_BLUE% %LITERAL_WHITE% %LITERAL_ARRAY_RED_GREEN_BLUE%
|
|
|
|
-->title -Plain octets literal in literal array
|
|
-->callmacro Cont_in_literal %LITERAL_PEAR% %LITERAL_BANANA% %LITERAL_ARRAY_APPLE_PEAR_PLUM%
|
|
|
|
-->title -Plain octets literal in literal octets
|
|
-->callmacro Cont_in_literal %LITERAL_PEAR% %LITERAL_BANANA% %LITERAL_PEAR%
|
|
|
|
-->title -Literal bool literal in literal bool
|
|
-->callmacro Cont_in_literal %LITERAL_TRUE% %LITERAL_FALSE% %LITERAL_TRUE%
|
|
|
|
|
|
-->varlet %JSON_OCTETS_ARRAY_10_20_30% %LITERAL% {%V_OCTETS% {value:'[10, 20, 30]' content_type:2}}
|
|
-->varlet %JSON_OCTETS_ARRAY_RED_GREEN_BLUE% %LITERAL% {%V_OCTETS% {value:'["red", "green", "blue"]' content_type:2}}
|
|
-->varlet %JSON_OCTETS_ARRAY_TRUE_FALSE% %LITERAL% {%V_OCTETS% {value:'[true, false]' content_type:2}}
|
|
|
|
-->title -Numeric literal in json octets array
|
|
-->callmacro Cont_in_literal %LITERAL_10% %LITERAL_40% %JSON_OCTETS_ARRAY_10_20_30%
|
|
|
|
-->title -Bool literal in json octets array
|
|
-->callmacro Cont_in_literal %LITERAL_TRUE% %LITERAL_10% %JSON_OCTETS_ARRAY_TRUE_FALSE%
|
|
|
|
-->title -String literal in json octets array
|
|
-->callmacro Cont_in_literal %LITERAL_BLUE% %LITERAL_WHITE% %JSON_OCTETS_ARRAY_RED_GREEN_BLUE%
|
|
|
|
|
|
-->varlet %MEMBER_SCALAR_10% %IDENT% {%DOCUMENT_PATH% {%MEMBER%: 'scalar_10'}}
|
|
-->varlet %MEMBER_SCALAR_40% %IDENT% {%DOCUMENT_PATH% {%MEMBER%: 'scalar_40'}}
|
|
-->varlet %MEMBER_SCALAR_TRUE% %IDENT% {%DOCUMENT_PATH% {%MEMBER%: 'scalar_true'}}
|
|
-->varlet %MEMBER_SCALAR_RED% %IDENT% {%DOCUMENT_PATH% {%MEMBER%: 'scalar_red'}}
|
|
-->varlet %MEMBER_SCALAR_BANANA% %IDENT% {%DOCUMENT_PATH% {%MEMBER%: 'scalar_banana'}}
|
|
|
|
-->title -Numeric literal in member
|
|
-->callmacro Cont_in_literal %LITERAL_10% %LITERAL_20% %MEMBER_SCALAR_10%
|
|
-->title -Numeric member in literal scalar
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_10% %MEMBER_SCALAR_40% %LITERAL_10%
|
|
-->title -Numeric member in literal array
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_10% %MEMBER_SCALAR_40% %LITERAL_ARRAY_10_20_30%
|
|
-->title -Numeric member in json octets array
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_10% %MEMBER_SCALAR_40% %JSON_OCTETS_ARRAY_10_20_30%
|
|
|
|
-->title -Bool literal in member
|
|
-->callmacro Cont_in_literal %LITERAL_TRUE% %LITERAL_FALSE% %MEMBER_SCALAR_TRUE%
|
|
-->title -Bool member in literal scalar
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_TRUE% %MEMBER_SCALAR_40% %LITERAL_TRUE%
|
|
-->title -Bool member in literal array
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_TRUE% %MEMBER_SCALAR_40% %LITERAL_ARRAY_TRUE_FALSE%
|
|
-->title -Bool member in json octets array
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_TRUE% %MEMBER_SCALAR_40% %JSON_OCTETS_ARRAY_TRUE_FALSE%
|
|
|
|
-->title -String literal in member
|
|
-->callmacro Cont_in_literal %LITERAL_RED% %LITERAL_WHITE% %MEMBER_SCALAR_RED%
|
|
-->title -String member in literal scalar
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_RED% %MEMBER_SCALAR_BANANA% %LITERAL_RED%
|
|
-->title -String member in literal array
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_RED% %MEMBER_SCALAR_BANANA% %LITERAL_ARRAY_RED_GREEN_BLUE%
|
|
-->title -String member in json octets array
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_RED% %MEMBER_SCALAR_BANANA% %JSON_OCTETS_ARRAY_RED_GREEN_BLUE%
|
|
|
|
-->title -Plain octets literal in member
|
|
-->callmacro Cont_in_literal %LITERAL_BANANA% %LITERAL_PEAR% %MEMBER_SCALAR_BANANA%
|
|
-->title -String member in plain octets literal
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_RED% %MEMBER_SCALAR_BANANA% %LITERAL_RED%
|
|
|
|
|
|
-->varlet %MEMBER_ARRAY_10_20_30% %IDENT% {%DOCUMENT_PATH% {%MEMBER%: 'array_10_20_30'}}
|
|
-->varlet %MEMBER_ARRAY_RED_GREEN_PEAR% %IDENT% {%DOCUMENT_PATH% {%MEMBER%: 'array_red_green_pear'}}
|
|
-->varlet %MEMBER_ARRAY_TRUE_FALSE% %IDENT% {%DOCUMENT_PATH% {%MEMBER%: 'array_true_false'}}
|
|
|
|
-->title -Numeric literal in member array
|
|
-->callmacro Cont_in_literal %LITERAL_10% %LITERAL_40% %MEMBER_ARRAY_10_20_30%
|
|
-->title -Numeric member in member array
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_10% %MEMBER_SCALAR_40% %MEMBER_ARRAY_10_20_30%
|
|
|
|
-->title -Bool literal in member array
|
|
-->callmacro Cont_in_literal %LITERAL_FALSE% %LITERAL_10% %MEMBER_ARRAY_TRUE_FALSE%
|
|
-->title -Bool member in member array
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_TRUE% %MEMBER_SCALAR_40% %MEMBER_ARRAY_TRUE_FALSE%
|
|
|
|
-->title -String literal in member array
|
|
-->callmacro Cont_in_literal %LITERAL_RED% %LITERAL_WHITE% %MEMBER_ARRAY_RED_GREEN_PEAR%
|
|
-->title -String member in member array
|
|
-->callmacro Cont_in_literal %MEMBER_SCALAR_RED% %MEMBER_SCALAR_BANANA% %MEMBER_ARRAY_RED_GREEN_PEAR%
|
|
|
|
-->title -Plain octets literal in member array
|
|
-->callmacro Cont_in_literal %LITERAL_PEAR% %LITERAL_BANANA% %MEMBER_ARRAY_RED_GREEN_PEAR%
|
|
|
|
|
|
# objects
|
|
|
|
-->varlet %LITERAL_OBJECT_SCALAR_10% %OBJECT% {fld {key:'scalar_10' value {%LITERAL_10%}}}
|
|
-->varlet %LITERAL_OBJECT_SCALAR_BLUE% %OBJECT% {fld {key:'scalar_blue' value {%LITERAL_BLUE%}}}
|
|
-->varlet %JSON_OCTETS_OBJECT_SCALAR_10% %LITERAL% {%V_OCTETS% {value:'{"scalar_10":10}' content_type:2}}
|
|
-->varlet %JSON_OCTETS_OBJECT_SCALAR_BLUE% %LITERAL% {%V_OCTETS% {value:'{"scalar_blue":"blue"}' content_type:2}}
|
|
|
|
-->title -Json octets object in literal object
|
|
-->callmacro Cont_in_literal %JSON_OCTETS_OBJECT_SCALAR_10% %JSON_OCTETS_OBJECT_SCALAR_BLUE% %LITERAL_OBJECT_SCALAR_10%
|
|
-->title -Literal object in json octets object
|
|
-->callmacro Cont_in_literal %LITERAL_OBJECT_SCALAR_10% %LITERAL_OBJECT_SCALAR_BLUE% %JSON_OCTETS_OBJECT_SCALAR_10%
|
|
|
|
-->varlet %LITERAL_ARRAY_30_OBJECT_SCALAR_10_WHITE% %ARRAY% {value {%LITERAL_30%} value {%LITERAL_OBJECT_SCALAR_10%} value {%LITERAL_WHITE%}}
|
|
|
|
-->title -Json octets object in literal array
|
|
-->callmacro Cont_in_literal %JSON_OCTETS_OBJECT_SCALAR_10% %JSON_OCTETS_OBJECT_SCALAR_BLUE% %LITERAL_ARRAY_30_OBJECT_SCALAR_10_WHITE%
|
|
-->title -Literal object in literal array
|
|
-->callmacro Cont_in_literal %LITERAL_OBJECT_SCALAR_10% %LITERAL_OBJECT_SCALAR_BLUE% %LITERAL_ARRAY_30_OBJECT_SCALAR_10_WHITE%
|
|
|
|
|
|
-->varlet %DOCUMENT_ROOT% %IDENT% {%DOCUMENT_PATH% {type: MEMBER}}
|
|
|
|
-->title -Literal object in document
|
|
-->callmacro Cont_in_literal %LITERAL_OBJECT_SCALAR_10% %LITERAL_OBJECT_SCALAR_BLUE% %DOCUMENT_ROOT%
|
|
-->title -Json octets object in document
|
|
-->callmacro Cont_in_literal %JSON_OCTETS_OBJECT_SCALAR_10% %JSON_OCTETS_OBJECT_SCALAR_BLUE% %DOCUMENT_ROOT%
|
|
|
|
|
|
-->varlet %MEMBER_OBJECT_SCALAR_10% %IDENT% {%DOCUMENT_PATH% {%MEMBER%: 'object_scalar_10'}}
|
|
-->varlet %MEMBER_OBJECT_SCALAR_RED% %IDENT% {%DOCUMENT_PATH% {%MEMBER%: 'object_scalar_red'}}
|
|
|
|
-->title -Literal object in member object
|
|
-->callmacro Cont_in_literal %LITERAL_OBJECT_SCALAR_10% %LITERAL_OBJECT_SCALAR_BLUE% %MEMBER_OBJECT_SCALAR_10%
|
|
-->title -Json octets object in member object
|
|
-->callmacro Cont_in_literal %JSON_OCTETS_OBJECT_SCALAR_10% %JSON_OCTETS_OBJECT_SCALAR_BLUE% %MEMBER_OBJECT_SCALAR_10%
|
|
|
|
-->title -Member object in literal object
|
|
-->callmacro Cont_in_literal %MEMBER_OBJECT_SCALAR_10% %MEMBER_OBJECT_SCALAR_RED% %LITERAL_OBJECT_SCALAR_10%
|
|
-->title -Member object in json octets object
|
|
-->callmacro Cont_in_literal %MEMBER_OBJECT_SCALAR_10% %MEMBER_OBJECT_SCALAR_RED% %JSON_OCTETS_OBJECT_SCALAR_10%
|
|
-->title -Member object in literal array
|
|
-->callmacro Cont_in_literal %MEMBER_OBJECT_SCALAR_10% %MEMBER_OBJECT_SCALAR_RED% %LITERAL_ARRAY_30_OBJECT_SCALAR_10_WHITE%
|
|
|
|
|
|
# operators
|
|
|
|
-->varlet %ADD_OPERATOR% %OPERATOR% {name: '+' param{ %LITERAL_10%} param{ %LITERAL_20%} }
|
|
-->varlet %CAST_TO_JSON_OPERATOR% %OPERATOR% {name: 'cast' param{%ADD_OPERATOR%} param{%LITERAL% {%V_OCTETS% {value:'JSON'}}}}
|
|
-->varlet %CAST_TO_UINT_OPERATOR% %OPERATOR% {name: 'cast' param{%ADD_OPERATOR%} param{%LITERAL% {%V_OCTETS% {value:'UNSIGNED INTEGER'}}}}
|
|
|
|
-->title -op+ directly to cont_in in literal array
|
|
-->callmacro Cont_in %ADD_OPERATOR% %LITERAL_ARRAY_10_20_30% ER_X_EXPR_BAD_VALUE
|
|
-->title -op+ casted to uint in literal array
|
|
-->callmacro Cont_in %CAST_TO_UINT_OPERATOR% %LITERAL_ARRAY_10_20_30% ER_X_EXPR_BAD_VALUE
|
|
-->title -literal uint in op+ casted to uint
|
|
-->callmacro Cont_in %LITERAL_30% %CAST_TO_UINT_OPERATOR% ER_X_EXPR_BAD_VALUE
|
|
-->title -op+ casted to json in literal array
|
|
-->callmacro Cont_in %CAST_TO_JSON_OPERATOR% %LITERAL_ARRAY_10_20_30% ER_SUCCESS
|
|
-->title -literal uint in op+ casted to json
|
|
-->callmacro Cont_in %LITERAL_30% %CAST_TO_JSON_OPERATOR% ER_SUCCESS
|
|
|
|
|
|
# null
|
|
-->varlet %LITERAL_ARRAY_10_NULL_30% %ARRAY% {value {%LITERAL_10%} value {%LITERAL_NULL%} value {%LITERAL_30%}}
|
|
-->varlet %LITERAL_OBJECT_SCALAR_NULL% %OBJECT% {fld {key:'scalar_null' value {%LITERAL_NULL%}}}
|
|
|
|
-->title -Literal NULL literal in literal NULL
|
|
-->callmacro Cont_in %LITERAL_NULL% %LITERAL_10% ER_SUCCESS
|
|
-->callmacro Cont_in %LITERAL_10% %LITERAL_NULL% ER_SUCCESS
|
|
-->title -literal NULL in literal array
|
|
-->callmacro Cont_in %LITERAL_NULL% %LITERAL_ARRAY_10_20_30% ER_SUCCESS
|
|
-->callmacro Cont_in %LITERAL_NULL% %LITERAL_ARRAY_10_NULL_30% ER_SUCCESS
|
|
-->title -literal NULL in literal object
|
|
-->callmacro Cont_in %LITERAL_NULL% %LITERAL_OBJECT_SCALAR_10% ER_SUCCESS
|
|
-->callmacro Cont_in %LITERAL_NULL% %LITERAL_OBJECT_SCALAR_NULL% ER_SUCCESS
|
|
-->title -literal NULL in member object
|
|
-->callmacro Cont_in %LITERAL_NULL% %MEMBER_OBJECT_SCALAR_10% ER_SUCCESS
|
|
-->title -literal NULL in root document
|
|
-->callmacro Cont_in %LITERAL_NULL% %DOCUMENT_ROOT% ER_SUCCESS
|
|
|
|
|
|
# function
|
|
|
|
-->varlet %FUNCTION_CONCAT% %FUNC_CALL% {name{name: 'concat'} param{%LITERAL_RED%} param{%LITERAL_GREEN%}}
|
|
-->varlet %FUNCTION_QUOTE_CONCAT% %FUNC_CALL% {name{name: 'json_quote'} param{%FUNCTION_CONCAT%}}
|
|
|
|
-->title -Function concat in string literal
|
|
-->callmacro Cont_in %FUNCTION_CONCAT% %LITERAL_RED% ER_X_EXPR_BAD_VALUE
|
|
-->title -String literal in function concat
|
|
-->callmacro Cont_in %LITERAL_RED% %FUNCTION_CONCAT% ER_X_EXPR_BAD_VALUE
|
|
-->title -Quoted function concat in string literal
|
|
-->callmacro Cont_in %FUNCTION_QUOTE_CONCAT% %LITERAL_RED% ER_SUCCESS
|
|
-->title -String literal in quoted function concat
|
|
-->callmacro Cont_in %LITERAL_RED% %FUNCTION_QUOTE_CONCAT% ER_SUCCESS
|
|
|
|
|
|
-->title -JSON_ARRAY - Create JSON array
|
|
-->varlet %FUNCTION_JSON_ARRAY% %FUNC_CALL% {name{name: 'json_array'} param{%LITERAL_10%} param{%LITERAL_RED%} param{%LITERAL_TRUE%}}
|
|
-->callmacro Cont_in %LITERAL_RED% %FUNCTION_JSON_ARRAY% ER_SUCCESS
|
|
|
|
-->title -JSON_ARRAY_APPEND - Append data to JSON document
|
|
-->varlet %ROOT_POINT% %LITERAL% {%V_OCTETS% {value:'$'}}
|
|
-->varlet %FUNCTION_JSON_ARRAY_APPEND% %FUNC_CALL% {name{name: 'json_array_append'} param{%LITERAL_ARRAY_10_20_30%} param{%ROOT_POINT%} param{%LITERAL_RED%}}
|
|
-->callmacro Cont_in %LITERAL_RED% %FUNCTION_JSON_ARRAY_APPEND% ER_SUCCESS
|
|
|
|
-->title -JSON_ARRAY_INSERT - Insert into JSON array
|
|
-->varlet %ARRAY_POINT% %LITERAL% {%V_OCTETS% {value:'$[1]'}}
|
|
-->varlet %FUNCTION_JSON_ARRAY_INSERT% %FUNC_CALL% {name{name: 'json_array_insert'} param{%LITERAL_ARRAY_10_20_30%} param{%ARRAY_POINT%} param{%LITERAL_RED%}}
|
|
-->callmacro Cont_in %LITERAL_RED% %FUNCTION_JSON_ARRAY_INSERT% ER_SUCCESS
|
|
|
|
-->title -JSON_CONTAINS - Whether JSON document contains specific object at path
|
|
-->varlet %FUNCTION_JSON_CONTAINS% %FUNC_CALL% {name{name: 'json_contains'} param{%LITERAL_ARRAY_10_20_30%} param{%LITERAL_RED%}}
|
|
-->callmacro Cont_in %LITERAL_RED% %FUNCTION_JSON_CONTAINS% ER_X_EXPR_BAD_VALUE
|
|
|
|
-->title -JSON_CONTAINS_PATH - Whether JSON document contains any data at path
|
|
-->varlet %FUNCTION_JSON_CONTAINS_PATH% %FUNC_CALL% {name{name: 'json_contains_path'} param{%LITERAL_ARRAY_10_20_30%} param{%ARRAY_POINT%}}
|
|
-->callmacro Cont_in %LITERAL_RED% %FUNCTION_JSON_CONTAINS_PATH% ER_X_EXPR_BAD_VALUE
|
|
|
|
-->title -JSON_DEPTH - Maximum depth of JSON document
|
|
-->varlet %FUNCTION_JSON_DEPTH% %FUNC_CALL% {name{name: 'json_depth'} param{%LITERAL_ARRAY_10_20_30%}}
|
|
-->callmacro Cont_in %LITERAL_RED% %FUNCTION_JSON_DEPTH% ER_X_EXPR_BAD_VALUE
|
|
|
|
-->title -JSON_EXTRACT - Return data from JSON document
|
|
-->varlet %FUNCTION_JSON_EXTRACT% %FUNC_CALL% {name{name: 'json_extract'} param{%LITERAL_ARRAY_30_OBJECT_SCALAR_10_WHITE%} param{%ARRAY_POINT%}}
|
|
-->callmacro Cont_in %LITERAL_OBJECT_SCALAR_10% %FUNCTION_JSON_EXTRACT% ER_SUCCESS
|
|
|
|
-->title -JSON_INSERT - Insert data into JSON document
|
|
-->varlet %SCALAR_10_POINT% %LITERAL% {%V_OCTETS% {value:'$.scalar_10'}}
|
|
-->varlet %FUNCTION_JSON_INSERT% %FUNC_CALL% {name{name: 'json_insert'} param{%LITERAL_OBJECT_SCALAR_BLUE%} param{%SCALAR_10_POINT%}, param{%LITERAL_10%}}
|
|
-->callmacro Cont_in %LITERAL_OBJECT_SCALAR_10% %FUNCTION_JSON_INSERT% ER_SUCCESS
|
|
|
|
-->title -JSON_KEYS - Array of keys from JSON document
|
|
-->varlet %KEY_SCALAR_10% %LITERAL% {%V_OCTETS% {value:'scalar_10'}}
|
|
-->varlet %FUNCTION_JSON_KEYS% %FUNC_CALL% {name{name: 'json_keys'} param{%DOCUMENT_ROOT%}}
|
|
-->callmacro Cont_in %KEY_SCALAR_10% %FUNCTION_JSON_KEYS% ER_SUCCESS
|
|
|
|
-->title -JSON_LENGTH - Number of elements in JSON document
|
|
-->varlet %FUNCTION_JSON_LENGTH% %FUNC_CALL% {name{name: 'json_length'} param{%DOCUMENT_ROOT%}}
|
|
-->callmacro Cont_in %LITERAL_10% %FUNCTION_JSON_LENGTH% ER_X_EXPR_BAD_VALUE
|
|
|
|
-->title -JSON_MERGE - Merge JSON documents
|
|
-->varlet %FUNCTION_JSON_MERGE% %FUNC_CALL% {name{name: 'json_merge'} param{%LITERAL_OBJECT_SCALAR_10%} param{%LITERAL_OBJECT_SCALAR_BLUE%}}
|
|
-->callmacro Cont_in %LITERAL_OBJECT_SCALAR_BLUE% %FUNCTION_JSON_MERGE% ER_SUCCESS
|
|
|
|
-->title -JSON_OBJECT - Create JSON object
|
|
-->varlet %FUNCTION_JSON_OBJECT% %FUNC_CALL% {name{name: 'json_object'} param{%KEY_SCALAR_10%} param{%LITERAL_10%}}
|
|
-->callmacro Cont_in %LITERAL_OBJECT_SCALAR_10% %FUNCTION_JSON_OBJECT% ER_SUCCESS
|
|
|
|
-->title -JSON_QUOTE - Quote JSON document
|
|
-->varlet %FUNCTION_JSON_QUOTE% %FUNC_CALL% {name{name: 'json_quote'} param{%LITERAL_RED%}}
|
|
-->callmacro Cont_in %FUNCTION_JSON_QUOTE% %LITERAL_ARRAY_RED_GREEN_BLUE% ER_SUCCESS
|
|
|
|
-->title -JSON_REMOVE - Remove data from JSON document
|
|
-->varlet %FUNCTION_JSON_REMOVE% %FUNC_CALL% {name{name: 'json_remove'} param{%LITERAL_ARRAY_10_20_30%} param{%ARRAY_POINT%}}
|
|
-->callmacro Cont_in %LITERAL_20% %FUNCTION_JSON_REMOVE% ER_SUCCESS
|
|
|
|
-->title -JSON_REPLACE - Replace values in JSON document
|
|
-->varlet %FUNCTION_JSON_REPLACE% %FUNC_CALL% {name{name: 'json_replace'} param{%LITERAL_ARRAY_10_20_30%} param{%ARRAY_POINT%} param{%LITERAL_40%}}
|
|
-->callmacro Cont_in %LITERAL_40% %FUNCTION_JSON_REPLACE% ER_SUCCESS
|
|
|
|
-->title -JSON_SEARCH - Path to value within JSON document
|
|
-->varlet %FUNCTION_JSON_SEARCH% %FUNC_CALL% {name{name: 'json_search'} param{%LITERAL_ARRAY_RED_GREEN_BLUE%} param{%LITERAL% {%V_OCTETS% {value:'one'}}} param{%LITERAL_GREEN%}}
|
|
-->callmacro Cont_in %ARRAY_POINT% %FUNCTION_JSON_SEARCH% ER_SUCCESS
|
|
|
|
-->title -JSON_SET - Insert data into JSON document
|
|
-->varlet %FUNCTION_JSON_SET% %FUNC_CALL% {name{name: 'json_set'} param{%LITERAL_OBJECT_SCALAR_BLUE%} param{%SCALAR_10_POINT%} param{%LITERAL_10%}}
|
|
-->callmacro Cont_in %LITERAL_OBJECT_SCALAR_10% %FUNCTION_JSON_SET% ER_SUCCESS
|
|
|
|
-->title -JSON_TYPE - Type of JSON value
|
|
-->varlet %FUNCTION_JSON_TYPE% %FUNC_CALL% {name{name: 'json_type'} param{%LITERAL_OBJECT_SCALAR_BLUE%}}
|
|
-->callmacro Cont_in %FUNCTION_JSON_TYPE% %LITERAL_ARRAY_RED_GREEN_BLUE% ER_X_EXPR_BAD_VALUE
|
|
|
|
-->title -JSON_UNQUOTE - Unquote JSON value
|
|
-->varlet %FUNCTION_JSON_UNQUOTE% %FUNC_CALL% {name{name: 'json_unquote'} param{%MEMBER_SCALAR_RED%}}
|
|
-->callmacro Cont_in %FUNCTION_JSON_UNQUOTE% %LITERAL_ARRAY_RED_GREEN_BLUE% ER_X_EXPR_BAD_VALUE
|
|
|
|
-->title -JSON_VALID - Whether JSON value is valid
|
|
-->varlet %FUNCTION_JSON_VALID% %FUNC_CALL% {name{name: 'json_valid'} param{%LITERAL_OBJECT_SCALAR_BLUE%}}
|
|
-->callmacro Cont_in %FUNCTION_JSON_VALID% %LITERAL_ARRAY_10_20_30% ER_X_EXPR_BAD_VALUE
|
|
|
|
# parameters
|
|
|
|
-->macro Cont_in_params %PARAMS% %ERROR%
|
|
Mysqlx.Crud.Find {
|
|
collection { name: "xtable" schema: "xtest" }
|
|
data_model: TABLE
|
|
projection {
|
|
alias: "cont_in"
|
|
source {
|
|
type: OPERATOR operator {
|
|
name: "cont_in"
|
|
%PARAMS%
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->expecterror %ERROR%
|
|
-->recvresult
|
|
-->endmacro
|
|
|
|
-->title -Number of parameters
|
|
-->callmacro Cont_in_params ER_X_EXPR_BAD_NUM_ARGS
|
|
-->callmacro Cont_in_params param{ %LITERAL_10%} ER_X_EXPR_BAD_NUM_ARGS
|
|
-->callmacro Cont_in_params param{ %LITERAL_10%} param{ %LITERAL_20%} ER_SUCCESS
|
|
-->callmacro Cont_in_params param{ %LITERAL_10%} param{ %LITERAL_20%} param{ %LITERAL_30%} ER_X_EXPR_BAD_NUM_ARGS
|
|
|
|
EOF
|
|
|
|
CREATE SCHEMA xtest;
|
|
CREATE TABLE xtest.xtable (doc JSON);
|
|
INSERT INTO xtest.xtable (doc) VALUES
|
|
('{"scalar_10":10,
|
|
"scalar_40":40,
|
|
"scalar_red":"red",
|
|
"scalar_banana":"banana",
|
|
"scalar_true":true,
|
|
"array_10_20_30":[10,20,30],
|
|
"array_red_green_pear":["red","green","pear"],
|
|
"array_true_false":[true, false],
|
|
"object_scalar_10":{"scalar_10":10},
|
|
"object_scalar_red":{"scalar_red":"red"}}');
|
|
|
|
--exec $MYSQLXTEST -ux_root --password='' --file=$xtest_file 2>&1
|
|
|
|
## Cleanup
|
|
DROP SCHEMA IF EXISTS xtest;
|
|
--remove_file $xtest_file
|
|
--source include/xplugin_drop_user.inc
|