polardbxengine/mysql-test/suite/x/t/crud_cont_in_expr.test

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