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

574 lines
14 KiB
Plaintext

## Using Mysqlx::Expr::OBJECT in collection
########### ../t/crud_doc_expr_array.test #############
### #
### This test runs aims to run ARRAY expresion statement #
### variant with mysqlxtest client. #
### Test covers #
### - INSERT statements #
### - FIND statements #
### - UPDATE statements #
### #
##################################################################
#
--echo =============================================
--echo CRUD DOC ARRAY EXPRESIONS SCENARIOS
--echo =============================================
--echo
--echo ================================================================================
--echo PREAMBLE
--echo ================================================================================
--source include/xplugin_preamble.inc
--source include/xplugin_create_user.inc
## Test starts here
--echo ================================================================================
--echo TEST START
--echo ================================================================================
--write_file $MYSQL_TMP_DIR/crud_doc_expr_array.tmp
## Test data
-->sql
DROP SCHEMA IF EXISTS xtest;
CREATE SCHEMA xtest;
-->endsql
-->stmtadmin create_collection {"schema":"xtest", "name":"xcoll"}
-->recvresult
-->echo Inserting array into collection
Mysqlx.Crud.Insert {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
row {
field {
type: OBJECT object {
fld {
key: "_id"
value {
type: LITERAL literal { type: V_OCTETS v_octets {value:"1"} }
}
}
fld {
key: "first"
value { type: LITERAL literal { type: V_OCTETS v_octets {value:"ten"} } }
}
fld {
key: "second"
value { type: LITERAL literal { type: V_OCTETS v_octets {value:"twenty"} } }
}
fld {
key: "third"
value { type: LITERAL literal { type: V_OCTETS v_octets {value:"thirty"} } }
}
fld {
key: "units"
value {
type: ARRAY array {
value {type: LITERAL literal { type: V_SINT v_signed_int: 1 } }
value {type: LITERAL literal { type: V_SINT v_signed_int: 2 } }
value {type: LITERAL literal { type: V_SINT v_signed_int: 3 } }
value {type: LITERAL literal { type: V_SINT v_signed_int: 4 } }
value {type: LITERAL literal { type: V_SINT v_signed_int: 5 } }
}
}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
SELECT * FROM xtest.xcoll;
-->endsql
-->echo Inserting array into collection with all the datatypes
Mysqlx.Crud.Insert {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
row {
field {
type: OBJECT object {
fld {
key: "_id"
value {
type: LITERAL literal { type: V_OCTETS v_octets {value:"2"} }
}
}
fld {
key: "first"
value { type: LITERAL literal { type: V_STRING v_string {value: "ten again" } } }
}
fld {
key: "second"
value { type: LITERAL literal { type: V_STRING v_string {value: "twenty again" } } }
}
fld {
key: "third"
value { type: LITERAL literal { type: V_STRING v_string {value: "thirty again" } } }
}
fld {
key: "units"
value {
type: ARRAY array {
value {type: LITERAL literal { type: V_SINT v_signed_int: 1 } }
value {type: LITERAL literal { type: V_UINT v_unsigned_int: 2 } }
value {type: LITERAL literal { type: V_DOUBLE v_double: 3.13 } }
value {type: LITERAL literal { type: V_FLOAT v_float: 4.34 } }
value {type: LITERAL literal { type: V_BOOL v_bool: true } }
value {type: LITERAL literal { type: V_NULL } }
value {type: LITERAL literal { type: V_STRING v_string{ value: "extrainfo" } } }
}
}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
SELECT * FROM xtest.xcoll;
-->endsql
-->echo Selecting array from collection
Mysqlx.Crud.Find {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
projection {
source {
type: OBJECT object {
fld {
key: "dozens"
value {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "first" } } }
value { type: IDENT identifier { document_path { type: MEMBER value: "second" } } }
value { type: IDENT identifier { document_path { type: MEMBER value: "third" } } }
}
}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->echo Selecting array from collection
Mysqlx.Crud.Find {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
projection {
source {
type: OBJECT object {
fld {
key: "UnitArray"
value {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "units" } } }
}
}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->echo Selecting a value not available from collection to get null values
Mysqlx.Crud.Find {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
projection {
source {
type: OBJECT object {
fld {
key: "UnitArray"
value {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "notavailable" } } }
}
}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->echo Selecting array from collection with alias
Mysqlx.Crud.Find {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
projection {
alias: "dozens"
source {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "first" } } }
value { type: IDENT identifier { document_path { type: MEMBER value: "second" } } }
value { type: IDENT identifier { document_path { type: MEMBER value: "third" } } }
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->echo Selecting array from collection with alias
Mysqlx.Crud.Find {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
projection {
alias: "UnitArray"
source {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "units" } } }
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->echo Selecting a value not available from collection to get null values with alias
Mysqlx.Crud.Find {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
projection {
alias: "UnitArray_Null"
source {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "notavailable" } } }
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
use xtest;
select * from xcoll;
-->endsql
-->echo Selecting array with sub-array from collection with alias
Mysqlx.Crud.Find {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
projection {
alias: "numbers"
source {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "first" } } }
value {
type: ARRAY array {
value {
type: IDENT identifier {
document_path { type: MEMBER value: "units" }
document_path { type: ARRAY_INDEX index: 0 }
}
}
value {
type: IDENT identifier {
document_path { type: MEMBER value: "units" }
document_path { type: ARRAY_INDEX index: 2 }
}
}
}
}
value { type: IDENT identifier { document_path { type: MEMBER value: "second" } } }
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->echo Selecting array with sub-array including null values from collection with alias
Mysqlx.Crud.Find {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
projection {
alias: "Array_SubArray_Null"
source {
type: ARRAY array {
value {
type: ARRAY array {
value {
type: IDENT identifier {
document_path { type: MEMBER value: "units" }
document_path { type: ARRAY_INDEX index: 1 }
}
}
value {
type: IDENT identifier {
document_path { type: MEMBER value: "units" }
document_path { type: ARRAY_INDEX index: 5 }
}
}
}
}
value {
type: ARRAY array {
value {
type: IDENT identifier {
document_path { type: MEMBER value: "units" }
document_path { type: ARRAY_INDEX index: 2 }
}
}
value {
type: IDENT identifier {
document_path { type: MEMBER value: "units" }
document_path { type: ARRAY_INDEX index: 5 }
}
}
}
}
value {
type: ARRAY array {
value {
type: IDENT identifier {
document_path { type: MEMBER value: "units" }
document_path { type: ARRAY_INDEX index: 3 }
}
}
value {
type: IDENT identifier {
document_path { type: MEMBER value: "units" }
document_path { type: ARRAY_INDEX index: 5 }
}
}
}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->echo Updating collection by array
Mysqlx.Crud.Update {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
operation {
source {
document_path { type: MEMBER value: "dozens" }
}
operation: ITEM_SET
value {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "first" } } }
value { type: IDENT identifier { document_path { type: MEMBER value: "second" } } }
value { type: IDENT identifier { document_path { type: MEMBER value: "third" } } }
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
SELECT * FROM xtest.xcoll;
-->endsql
-->echo Updating collection by array with null values
Mysqlx.Crud.Update {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
operation {
source {
document_path { type: MEMBER value: "NewArray" }
}
operation: ITEM_SET
value {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "units" } } }
value { type: IDENT identifier { document_path { type: MEMBER value: "dozens" } } }
value { type: IDENT identifier { document_path { type: MEMBER value: "first" } } }
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
SELECT * FROM xtest.xcoll;
-->endsql
-->echo Updating collection by array in a current member value
Mysqlx.Crud.Update {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
operation {
source {
document_path { type: MEMBER value: "second" }
}
operation: ITEM_REPLACE
value {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "units" } } }
value { type: IDENT identifier { document_path { type: MEMBER value: "dozens" } } }
value { type: IDENT identifier { document_path { type: MEMBER value: "first" } } }
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
SELECT * FROM xtest.xcoll;
-->endsql
-->echo Updating collection by appending an array in a current array member value
Mysqlx.Crud.Update {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
operation {
source {
document_path { type: MEMBER value: "second" }
}
operation: ARRAY_APPEND
value {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "units" } } }
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
SELECT * FROM xtest.xcoll;
-->endsql
-->echo Updating collection by inserting an array in a current array member value using == criteria
Mysqlx.Crud.Update {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "=="
param {
type: IDENT
identifier {
name: "_id"
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"2"}
}
}
}
}
operation {
source {
document_path { type: MEMBER value: "second" }
document_path {type: ARRAY_INDEX index: 0}
}
operation: ARRAY_INSERT
value {
type: ARRAY array {
value { type: IDENT identifier { document_path { type: MEMBER value: "units" } } }
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
SELECT * FROM xtest.xcoll;
-->endsql
-->echo Error: empty array
Mysqlx.Crud.Find {
collection {
name: "xcoll"
schema: "xtest"
}
data_model: DOCUMENT
projection {
source {
type: ARRAY array { }
}
}
}
-->recverror 5120
## Cleanup
-->echo ================================================================================
-->echo CLEAN UP
-->echo ================================================================================
-->sql
drop schema if exists xtest;
-->endsql
EOF
--exec $MYSQLXTEST -ux_root --password='' --file=$MYSQL_TMP_DIR/crud_doc_expr_array.tmp 2>&1
## Cleanup
--remove_file $MYSQL_TMP_DIR/crud_doc_expr_array.tmp
--source include/xplugin_drop_user.inc