1172 lines
22 KiB
Plaintext
1172 lines
22 KiB
Plaintext
########### ../t/update_crud_arrayinsert_o.test #############
|
|
### #
|
|
### This test runs aims to run UPDATE ARRAY_INSERT operation statement #
|
|
### variant with mysqlxtest client. #
|
|
### Test covers #
|
|
### - update with different operators #
|
|
### - update multiple rows #
|
|
### - update with rollback transaction #
|
|
### - update insert with different array indexes #
|
|
### #
|
|
########################################################################
|
|
#
|
|
|
|
--echo =============================================
|
|
--echo CRUD UPDATE ARRAY_INSERT SCENARIOS
|
|
--echo =============================================
|
|
--echo
|
|
|
|
--echo ================================================================================
|
|
--echo PREAMBLE
|
|
--echo ================================================================================
|
|
--replace_regex /\.dll/.so/
|
|
--source include/xplugin_preamble.inc
|
|
create user updatearrayinsert@localhost identified by 'updatearrayinsert';
|
|
grant all on *.* to updatearrayinsert@localhost;
|
|
CREATE SCHEMA mysqlxcoll;
|
|
|
|
## TEST STARTS HERE
|
|
--echo ================================================================================
|
|
--echo TEST START
|
|
--echo ================================================================================
|
|
|
|
--write_file $MYSQL_TMP_DIR/mysqlx-update_collection_arrayinsert.tmp
|
|
|
|
-->stmtadmin create_collection {"schema":"mysqlxcoll","name":"maincoll"}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
SET SQL_SAFE_UPDATES = 0;
|
|
USE mysqlxcoll;
|
|
INSERT INTO maincoll (doc) values ('{"_id": "1", "name": ["Victor"], "last_name": ["Otero"],"amount": [4.99]}');
|
|
INSERT INTO maincoll (doc) values ('{"_id": "2", "name": ["Gonzalo"], "last_name": ["Chrystens"],"amount": [120.57]}');
|
|
INSERT INTO maincoll (doc) values ('{"_id": "3", "name": ["Abraham"], "last_name": ["Vega"],"amount": [74.56]}');
|
|
INSERT INTO maincoll (doc) values ('{"_id": "4", "name": ["Jennifer"], "last_name": ["Leon"],"amount": [387.14]}');
|
|
INSERT INTO maincoll (doc) values ('{"_id": "5", "name": ["Jhonny"], "last_name": ["Test"],"amount": [125.45]}');
|
|
-->endsql
|
|
|
|
-->echo Update insert String value into Array using == Operator for criteria
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"1"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'name'}
|
|
document_path {type: ARRAY_INDEX index: 0}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_STRING v_string { value: "Victor_Extra_Name" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update a valid collection with == operator and for Quotes
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"1"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'name'}
|
|
document_path {type: ARRAY_INDEX index: 0}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_STRING v_string { value: "\"VictorArrayInsert\"" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update a valid collection with string value and > operator for multiple docs
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: ">"
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"3"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'last_name'}
|
|
document_path {type: ARRAY_INDEX index: 0}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_STRING v_string { value: "extra_last_name" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update a valid collection with string value and < operator for multiple docs
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "<"
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"2"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'last_name'}
|
|
document_path {type: ARRAY_INDEX index: 0}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_STRING v_string { value: "extra_last_name_2" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update a valid collection with string value and <= operator for multiple docs
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "<="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"2"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'last_name'}
|
|
document_path {type: ARRAY_INDEX index: 0}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_STRING v_string { value: "extra_last_name_3" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update a valid collection with string value and >= operator for multiple docs
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: ">="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"3"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 0}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_DOUBLE v_double: 257.52
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update a valid collection with string value and != operator for multiple docs
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "!="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"4"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 0}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_DOUBLE v_double: 546.12
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update array insert a Double
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"3"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 1}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_DOUBLE v_double: 6.2564
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update array insert a Float
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"3"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 0}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_FLOAT v_float: 356.859
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update array insert a NULL
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"2"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 0}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_NULL
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update array insert in different index values
|
|
-->echo array index equal to 1
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"2"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 1}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_DOUBLE v_double: 1.00
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo array index equal to 2
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"2"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 2}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_DOUBLE v_double: 2.00
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo array index equal to 3
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"2"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 3}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_DOUBLE v_double: 3.00
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo array index equal to 4
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"2"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 4}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_DOUBLE v_double: 4.00
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update array insert a String into a only numbers member
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"2"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 5}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_STRING v_string { value: "Index_5" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update array insert a number into a only String member
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"1"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'name'}
|
|
document_path {type: ARRAY_INDEX index: 3}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_UINT v_unsigned_int: 253
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update with order clause update last _id in desc order (_id = 5)
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "!="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"0"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
limit {
|
|
row_count: 1
|
|
}
|
|
order {
|
|
expr {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
direction: DESC
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 0}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_DOUBLE v_double: 1234.567
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update with order clause update first two _id in asc order (_id = 1,2)
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "!="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"0"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
limit {
|
|
row_count: 2
|
|
}
|
|
order {
|
|
expr {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
direction: ASC
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 0}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_DOUBLE v_double: 9876.543
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
START TRANSACTION;
|
|
-->endsql
|
|
|
|
-->echo Update transaction rollback
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"1"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'name'}
|
|
document_path {type: ARRAY_INDEX index: 3}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_STRING v_string { value: "i_must_be_rollback" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
ROLLBACK;
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update transaction commit
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"1"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'name'}
|
|
document_path {type: ARRAY_INDEX index: 3}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_STRING v_string { value: "i_must_be_commited" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
COMMIT;
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Update with non existing doc member
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"1"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'iamnotadoc'
|
|
document_path {type: MEMBER value: 'i_donot_exists'}
|
|
document_path {type: ARRAY_INDEX index: 3}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_STRING v_string { value: "Test" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->expecterror 1054
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
-->echo Invalid type of update for Document
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"1"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'name'}
|
|
document_path {type: ARRAY_INDEX index: 3}
|
|
}
|
|
operation: SET
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_STRING v_string { value: "Test" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->expecterror 5052
|
|
-->recvresult
|
|
|
|
-->echo Update array insert with an index value out of range
|
|
Mysqlx.Crud.Update {
|
|
collection {
|
|
name: "maincoll"
|
|
schema: "mysqlxcoll"
|
|
}
|
|
data_model: TABLE
|
|
criteria {
|
|
type: OPERATOR
|
|
operator {
|
|
name: "=="
|
|
param {
|
|
type: IDENT
|
|
identifier {
|
|
name: "_id"
|
|
}
|
|
}
|
|
param {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_OCTETS
|
|
v_octets {value:"2"}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
operation {
|
|
source {
|
|
name: 'doc'
|
|
document_path {type: MEMBER value: 'amount'}
|
|
document_path {type: ARRAY_INDEX index: 9999999}
|
|
}
|
|
operation: ARRAY_INSERT
|
|
value {
|
|
type: LITERAL
|
|
literal {
|
|
type: V_DOUBLE v_double: 20.00
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-->recvresult
|
|
|
|
-->sql
|
|
select * from maincoll;
|
|
-->endsql
|
|
|
|
## Cleanup
|
|
-->echo ================================================================================
|
|
-->echo CLEAN UP
|
|
-->echo ================================================================================
|
|
-->sql
|
|
DROP USER updatearrayinsert@localhost;
|
|
SET SQL_SAFE_UPDATES = 1;
|
|
-->endsql
|
|
EOF
|
|
|
|
--exec $MYSQLXTEST -u updatearrayinsert --password='updatearrayinsert' --file=$MYSQL_TMP_DIR/mysqlx-update_collection_arrayinsert.tmp 2>&1
|
|
|
|
## Cleanup
|
|
DROP SCHEMA if EXISTS mysqlxcoll;
|
|
--remove_file $MYSQL_TMP_DIR/mysqlx-update_collection_arrayinsert.tmp
|
|
|