polardbxengine/mysql-test/suite/x/include/test_flow_resultset_crud_do...

290 lines
6.1 KiB
PHP

--write_file $MYSQL_TMP_DIR/resultset.xpl
-->import assert_messages.macro
-->import assert_notices.macro
-->import crud_insert.macro
-->echo
-->echo
-->echo ## Test setup
-->macro Insert_doc %COLL% %DOC%
callmacro Insert_one
DOCUMENT %COLL%
type: LITERAL literal{type: V_OCTETS v_octets{value:%DOC% content_type:2}}
ER_SUCCESS;
-->endmacro
DROP TABLE IF EXISTS xtest.coll;
stmtadmin create_collection {"schema":"xtest","name":"coll"};
recvresult;
callmacro Insert_doc coll '{"_id": "1", "name":"first", "prio":1}';
callmacro Insert_doc coll '{"_id": "2", "name":"second", "prio":2}';
callmacro Insert_doc coll '{"_id": "3", "name":"third", "prio":1}';
callmacro Insert_doc coll '{"_id": "5", "name":"fifth", "prio":4}';
##
## Execution of SQL through X Protocol can generate flow
## described by following UML flow:
##
## ...
## loop has more resultsets or not at end of fetch
## group resultset
## loop has more columns
## server --> client: ColumnMetaData
## end
## loop has more rows
## server --> client: Row
## end
## end
## alt has more resultsets
## server --> client: FetchDoneMoreResultsets
## end
## end
## loop has more OUT-paramsets or not at end of fetch
## server --> client: FetchDoneMoreOutParams
## group resultset
## loop has more columns
## server --> client: ColumnMetaData
## end
## loop has more rows
## server --> client: Row
## end
## end
## end
## alt at end of all resultsets
## server --> client: FetchDone
## else cursor is opened
## server --> client: FetchSuspended
## end
## ...
##
## Following suite is going to ensure that all CRUD
## executions work according to this flow.
##
## Test case description:
-->echo
-->echo
-->echo ## I. Validate simple resultsets for CRUD messages
-->echo #
-->echo # 1. Assert resultset for CRUD-delete message
-->echo # 2. Assert resultset for CRUD-update message
-->echo # 3. Assert resultset for CRUD-create message (doc with id)
-->echo # 4. Assert resultset for CRUD-create message (doc without id)
-->echo # 5. Assert resultset for CRUD-read message
-->echo
-->echo ## II. Validate simple resultset with warnings
-->echo #
-->echo # 1. Assert one resultsets for select queries
-->echo
-->echo #
-->echo # I.1
Mysqlx.Crud.Delete {
collection {
name: "coll"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "=="
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {
value: "fifth"
}
}
}
}
}
}
-->callmacro Assert_notice_session_state ROWS_AFFECTED v_unsigned_int:1
-->callmacro Assert_message Mysqlx.Sql.StmtExecuteOk
-->echo
-->echo #
-->echo # I.2
Mysqlx.Crud.Update {
collection {
name: "coll"
}
data_model: DOCUMENT
operation {
source {
document_path {
type: MEMBER
value: "prio"
}
}
operation: ITEM_SET
value {
type: OPERATOR
operator {
name: "-"
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "prio"
}
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
}
}
}
-->callmacro Assert_notice_session_state PRODUCED_MESSAGE type: V_STRING
-->callmacro Assert_notice_session_state ROWS_AFFECTED v_unsigned_int:3
-->callmacro Assert_message Mysqlx.Sql.StmtExecuteOk
-->echo
-->echo #
-->echo # I.3
Mysqlx.Crud.Insert {
collection {
name: "coll"
schema: "xtest"
}
data_model: DOCUMENT
row {
field {
type: LITERAL
literal {
type: V_OCTETS
v_octets {
value: "{\"_id\": \"6\", \"name\":\"sixth\", \"prio\":3}"
content_type: 2
}
}
}
}
upsert: false
}
-->callmacro Assert_notice_session_state ROWS_AFFECTED v_unsigned_int:1
-->callmacro Assert_message Mysqlx.Sql.StmtExecuteOk
-->echo
-->echo #
-->echo # I.4
Mysqlx.Crud.Insert {
collection {
name: "coll"
schema: "xtest"
}
data_model: DOCUMENT
row {
field {
type: LITERAL
literal {
type: V_OCTETS
v_octets {
value: "{\"name\":\"sixth\", \"prio\":3}"
content_type: 2
}
}
}
}
upsert: false
}
-->callmacro Assert_notice_session_state ROWS_AFFECTED v_unsigned_int:1
-->callmacro Assert_notice_session_state GENERATED_DOCUMENT_IDS type: V_OCTETS
-->callmacro Assert_message Mysqlx.Sql.StmtExecuteOk
-->echo
-->echo #
-->echo # I.5
Mysqlx.Crud.Find {
collection {
name: "coll"
}
data_model: DOCUMENT
projection {
alias:"name"
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
}
}
-->callmacro Assert_metadata BYTES "doc"
-->callmacro Assert_rows 5
-->callmacro Assert_message Mysqlx.Resultset.FetchDone
-->callmacro Assert_message Mysqlx.Sql.StmtExecuteOk
-->echo
-->echo #
-->echo # II.1
Mysqlx.Crud.Find {
collection {
name: "coll"
}
data_model: DOCUMENT
projection {
alias:"name"
source {
type: OPERATOR
operator {
name: "/"
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "prio"
}
}
}
}
}
}
}
-->callmacro Assert_metadata BYTES "doc"
-->callmacro Assert_rows 5
-->callmacro Assert_message Mysqlx.Resultset.FetchDone
## ER_DIVISION_BY_ZERO == 1365
-->callmacro Assert_notice_warning WARNING 1365
-->callmacro Assert_notice_warning WARNING 1365
-->callmacro Assert_message Mysqlx.Sql.StmtExecuteOk
EOF
CREATE SCHEMA IF NOT EXISTS xtest;
USE xtest;