config root man

Current Path : /home/usr.opt/mysql57/mysql-test/suite/x/r/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //home/usr.opt/mysql57/mysql-test/suite/x/r/update_crud_o.result

==============================================
CRUD UPDATE SCENARIOS
==============================================

================================================================================
PREAMBLE
================================================================================
install plugin mysqlx soname "mysqlx.so";
call mtr.add_suppression("Plugin mysqlx reported: .Failed at SSL configuration: .SSL context is not usable without certificate and private key..");
call mtr.add_suppression("Plugin mysqlx reported: .SSL_CTX_load_verify_locations failed.");
create user updatecruduser@localhost identified by 'updatecruduser';
grant all on *.* to updatecruduser@localhost;
================================================================================
TEST START
================================================================================
RUN DROP SCHEMA if EXISTS mysqlxplugin

0 rows affected
RUN CREATE SCHEMA mysqlxplugin DEFAULT CHARSET='utf8'

1 rows affected
RUN USE mysqlxplugin

0 rows affected
RUN CREATE TABLE categories (
 CategoryID int NOT NULL AUTO_INCREMENT,
 CategoryName varchar(100),
 CategoryDescription varchar(200),
 CategoryIMEI tinyint,	  
 CategoryDecimal decimal(5,2),
 CategoryBool bit(1),
 PRIMARY key (CategoryID)
 )

0 rows affected
RUN INSERT INTO categories(CategoryID, CategoryName, CategoryDescription, CategoryIMEI, CategoryDecimal,CategoryBool)
 VALUES
 (1,'Sports','Sports related category',1,235.15,true),
 (2,'Entertaiment','Entertaiment related category',2,235.15,false),
 (3, 'Home','Home related category',3,235.15,true),
 (4, 'Kitchen','Kitchen related category',4,235.15,false),
 (5, 'Garden','Garden related category',5,535.15,true),
 (6, 'Toys','Toys related category',6,635.15,false)

6 rows affected
last insert id: 6
Records: 6  Duplicates: 0  Warnings: 0
RUN SET SQL_SAFE_UPDATES = 1

0 rows affected
RUN SHOW STATUS like 'Mysqlx_crud_update'
Variable_name	Value
Mysqlx_crud_update	0
0 rows affected
Update varchar with where based in key column 
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "=="
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 1
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryName"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "SportsUpdate"
        }
      }
    }
  }
}


1 rows affected
Rows matched: 1  Changed: 1  Warnings: 0
RUN select * from mysqlxplugin.categories where CategoryID=1
CategoryID	CategoryName	CategoryDescription	CategoryIMEI	CategoryDecimal	CategoryBool
1	SportsUpdate	Sports related category	1	235.15	1
0 rows affected
RUN SHOW STATUS like 'Mysqlx_crud_update'
Variable_name	Value
Mysqlx_crud_update	1
0 rows affected
Update Tiny Int with where based in key column
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "=="
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 1
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryIMEI"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_SINT
        v_signed_int: 110
      }
    }
  }
}


1 rows affected
Rows matched: 1  Changed: 1  Warnings: 0
RUN select * from mysqlxplugin.categories where CategoryID=1
CategoryID	CategoryName	CategoryDescription	CategoryIMEI	CategoryDecimal	CategoryBool
1	SportsUpdate	Sports related category	110	235.15	1
0 rows affected
RUN SHOW STATUS like 'Mysqlx_crud_update'
Variable_name	Value
Mysqlx_crud_update	2
0 rows affected
Update Decimal with where based in key column
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "=="
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 1
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryDecimal"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: 613.57
      }
    }
  }
}


1 rows affected
Rows matched: 1  Changed: 1  Warnings: 0
RUN select * from mysqlxplugin.categories where CategoryID in (1,2)
CategoryID	CategoryName	CategoryDescription	CategoryIMEI	CategoryDecimal	CategoryBool
1	SportsUpdate	Sports related category	110	613.57	1
2	Entertaiment	Entertaiment related category	2	235.15	0
0 rows affected
RUN SHOW STATUS like 'Mysqlx_crud_update'
Variable_name	Value
Mysqlx_crud_update	3
0 rows affected
Update with Quotes value
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "=="
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 2
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryDescription"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "\"Quotes\""
        }
      }
    }
  }
}


1 rows affected
Rows matched: 1  Changed: 1  Warnings: 0
RUN select * from mysqlxplugin.categories where CategoryID=2
CategoryID	CategoryName	CategoryDescription	CategoryIMEI	CategoryDecimal	CategoryBool
2	Entertaiment	"Quotes"	2	235.15	0
0 rows affected
RUN SHOW STATUS like 'Mysqlx_crud_update'
Variable_name	Value
Mysqlx_crud_update	4
0 rows affected
Update with NULL value
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "=="
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 2
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryName"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_NULL
      }
    }
  }
}


1 rows affected
Rows matched: 1  Changed: 1  Warnings: 0
RUN select * from mysqlxplugin.categories where CategoryID in (2,3)
CategoryID	CategoryName	CategoryDescription	CategoryIMEI	CategoryDecimal	CategoryBool
2	null	"Quotes"	2	235.15	0
3	Home	Home related category	3	235.15	1
0 rows affected
RUN SHOW STATUS like 'Mysqlx_crud_update'
Variable_name	Value
Mysqlx_crud_update	5
0 rows affected
Update with Corner decimal value and != operator
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "!="
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 2
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryDecimal"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: 999.99
      }
    }
  }
}


5 rows affected
Rows matched: 5  Changed: 5  Warnings: 0
RUN select * from mysqlxplugin.categories where CategoryID != 2
CategoryID	CategoryName	CategoryDescription	CategoryIMEI	CategoryDecimal	CategoryBool
1	SportsUpdate	Sports related category	110	999.99	1
3	Home	Home related category	3	999.99	1
4	Kitchen	Kitchen related category	4	999.99	0
5	Garden	Garden related category	5	999.99	1
6	Toys	Toys related category	6	999.99	0
0 rows affected
RUN SHOW STATUS like 'Mysqlx_crud_update'
Variable_name	Value
Mysqlx_crud_update	6
0 rows affected
Update with Corner decimal value and "in" operator
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "in"
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 3
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 4
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryDecimal"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: -999.99
      }
    }
  }
}


2 rows affected
Rows matched: 2  Changed: 2  Warnings: 0
RUN select * from mysqlxplugin.categories where CategoryID in (3,4)
CategoryID	CategoryName	CategoryDescription	CategoryIMEI	CategoryDecimal	CategoryBool
3	Home	Home related category	3	-999.99	1
4	Kitchen	Kitchen related category	4	-999.99	0
0 rows affected
RUN SHOW STATUS like 'Mysqlx_crud_update'
Variable_name	Value
Mysqlx_crud_update	7
0 rows affected
Update with Corner decimal value and != operator
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "!="
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 2
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryIMEI"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: 127
      }
    }
  }
}


5 rows affected
Rows matched: 5  Changed: 5  Warnings: 0
RUN select * from mysqlxplugin.categories where CategoryID != 2
CategoryID	CategoryName	CategoryDescription	CategoryIMEI	CategoryDecimal	CategoryBool
1	SportsUpdate	Sports related category	127	999.99	1
3	Home	Home related category	127	-999.99	1
4	Kitchen	Kitchen related category	127	-999.99	0
5	Garden	Garden related category	127	999.99	1
6	Toys	Toys related category	127	999.99	0
0 rows affected
RUN SHOW STATUS like 'Mysqlx_crud_update'
Variable_name	Value
Mysqlx_crud_update	8
0 rows affected
Update with Corner decimal value and "in" operator
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "in"
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 4
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 5
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryIMEI"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: -128
      }
    }
  }
}


2 rows affected
Rows matched: 2  Changed: 2  Warnings: 0
RUN select * from mysqlxplugin.categories where CategoryID in (4,5)
CategoryID	CategoryName	CategoryDescription	CategoryIMEI	CategoryDecimal	CategoryBool
4	Kitchen	Kitchen related category	-128	-999.99	0
5	Garden	Garden related category	-128	999.99	1
0 rows affected
RUN SHOW STATUS like 'Mysqlx_crud_update'
Variable_name	Value
Mysqlx_crud_update	9
0 rows affected
Mysqlx.Ok {
  msg: "bye!"
}
ok
.
#---------- TEST WITH SAFE MODE OFF ----------#
.
RUN USE mysqlxplugin

0 rows affected
RUN SET SQL_SAFE_UPDATES = 0

0 rows affected
Update with wrong schema name
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "noschemalikethis"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "in"
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 4
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 5
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryIMEI"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: 101
      }
    }
  }
}

Mysqlx.Error {
  severity: ERROR
  code: 1146
  msg: "Table \'noschemalikethis.categories\' doesn\'t exist"
  sql_state: "42S02"
}

Update with wrong table name
send Mysqlx.Crud.Update {
  collection {
    name: "notablelikethis"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "in"
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 4
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 5
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryIMEI"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: 101.02
      }
    }
  }
}

Mysqlx.Error {
  severity: ERROR
  code: 1146
  msg: "Table \'mysqlxplugin.notablelikethis\' doesn\'t exist"
  sql_state: "42S02"
}

Update with wrong column name
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "in"
      param {
        type: IDENT
        identifier {
          name: "nocolumnname"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 4
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 5
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryIMEI"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: 101
      }
    }
  }
}

Mysqlx.Error {
  severity: ERROR
  code: 1054
  msg: "Unknown column \'nocolumnname\' in \'where clause\'"
  sql_state: "42S22"
}

Update decimal value with a corner value plus 1
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "=="
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 4
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryDecimal"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: 1000
      }
    }
  }
}

Got expected error: Out of range value for column 'CategoryDecimal' at row 1 (code 1264)
Update tiny int value with a corner value plus 1
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "=="
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 4
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryIMEI"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: -129
      }
    }
  }
}

Got expected error: Out of range value for column 'CategoryIMEI' at row 1 (code 1264)
Update multiple column
RUN select * from mysqlxplugin.categories where CategoryID=4
CategoryID	CategoryName	CategoryDescription	CategoryIMEI	CategoryDecimal	CategoryBool
4	Kitchen	Kitchen related category	-128	-999.99	0
0 rows affected
send Mysqlx.Crud.Update {
  collection {
    name: "categories"
    schema: "mysqlxplugin"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "=="
      param {
        type: IDENT
        identifier {
          name: "CategoryID"
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_SINT
          v_signed_int: 4
        }
      }
    }
  }
  operation {
    source {
      name: "CategoryIMEI"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: -99
      }
    }
  }
  operation {
    source {
      name: "CategoryDecimal"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_DOUBLE
        v_double: 501.11
      }
    }
  }
}


1 rows affected
Rows matched: 1  Changed: 1  Warnings: 0
RUN select * from mysqlxplugin.categories where CategoryID=4
CategoryID	CategoryName	CategoryDescription	CategoryIMEI	CategoryDecimal	CategoryBool
4	Kitchen	Kitchen related category	-99	501.11	0
0 rows affected
Mysqlx.Ok {
  msg: "bye!"
}
ok
RUN SET SQL_SAFE_UPDATES = 0

0 rows affected
RUN DROP SCHEMA if EXISTS mysqlxcoll

0 rows affected
RUN CREATE SCHEMA mysqlxcoll

1 rows affected
RUN USE mysqlxcoll

0 rows affected
RUN CREATE TABLE maincoll (doc JSON, _id VARCHAR(32) NOT NULL PRIMARY KEY)

0 rows affected
RUN INSERT INTO maincoll (doc, _id) values ('{"_id": "1", "name": "Victor", "last_name": "Otero","amount": 4.99}',json_unquote(json_extract(doc, '$._id')))

1 rows affected
RUN INSERT INTO maincoll (doc, _id) values ('{"_id": "2", "name": "Gonzalo", "last_name": "Chrystens","amount": 120.57}',json_unquote(json_extract(doc, '$._id')))

1 rows affected
RUN INSERT INTO maincoll (doc, _id) values ('{"_id": "3", "name": "Abraham", "last_name": "Vega","amount": 74.56}',json_unquote(json_extract(doc, '$._id')))

1 rows affected
RUN INSERT INTO maincoll (doc, _id) values ('{"_id": "4", "name": "Jennifer", "last_name": "Leon","amount": 387.14}',json_unquote(json_extract(doc, '$._id')))

1 rows affected
RUN INSERT INTO maincoll (doc, _id) values ('{"_id": "5", "name": "Jhonny", "last_name": "Test","amount": 125.45}',json_unquote(json_extract(doc, '$._id')))

1 rows affected
Update a valid collection with string value and > operator for multiple docs
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: ">"
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "_id"
          }
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_OCTETS
          v_octets {
            value: "3"
          }
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "name"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "\"xtest_>\""
        }
      }
    }
  }
}


2 rows affected
Rows matched: 2  Changed: 2  Warnings: 0
RUN select * from maincoll
doc	_id
{"_id": "1", "name": "Victor", "amount": 4.99, "last_name": "Otero"}	1
{"_id": "2", "name": "Gonzalo", "amount": 120.57, "last_name": "Chrystens"}	2
{"_id": "3", "name": "Abraham", "amount": 74.56, "last_name": "Vega"}	3
{"_id": "4", "name": "\"xtest_>\"", "amount": 387.14, "last_name": "Leon"}	4
{"_id": "5", "name": "\"xtest_>\"", "amount": 125.45, "last_name": "Test"}	5
0 rows affected
Update a valid collection with string value and > operator for multiple docs
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: "<"
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "_id"
          }
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_OCTETS
          v_octets {
            value: "3"
          }
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "name"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "\"xtest_<\""
        }
      }
    }
  }
}


2 rows affected
Rows matched: 2  Changed: 2  Warnings: 0
RUN select * from maincoll
doc	_id
{"_id": "1", "name": "\"xtest_<\"", "amount": 4.99, "last_name": "Otero"}	1
{"_id": "2", "name": "\"xtest_<\"", "amount": 120.57, "last_name": "Chrystens"}	2
{"_id": "3", "name": "Abraham", "amount": 74.56, "last_name": "Vega"}	3
{"_id": "4", "name": "\"xtest_>\"", "amount": 387.14, "last_name": "Leon"}	4
{"_id": "5", "name": "\"xtest_>\"", "amount": 125.45, "last_name": "Test"}	5
0 rows affected
Update a valid collection with string value and <= operator for multiple docs
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: "<="
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "_id"
          }
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_OCTETS
          v_octets {
            value: "3"
          }
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "name"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "\"xtest_<=\""
        }
      }
    }
  }
}


3 rows affected
Rows matched: 3  Changed: 3  Warnings: 0
RUN select * from maincoll
doc	_id
{"_id": "1", "name": "\"xtest_<=\"", "amount": 4.99, "last_name": "Otero"}	1
{"_id": "2", "name": "\"xtest_<=\"", "amount": 120.57, "last_name": "Chrystens"}	2
{"_id": "3", "name": "\"xtest_<=\"", "amount": 74.56, "last_name": "Vega"}	3
{"_id": "4", "name": "\"xtest_>\"", "amount": 387.14, "last_name": "Leon"}	4
{"_id": "5", "name": "\"xtest_>\"", "amount": 125.45, "last_name": "Test"}	5
0 rows affected
Update a valid collection with string value and >= operator for multiple docs
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: ">="
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "_id"
          }
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_OCTETS
          v_octets {
            value: "4"
          }
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "name"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "\"xtest_>=\""
        }
      }
    }
  }
}


2 rows affected
Rows matched: 2  Changed: 2  Warnings: 0
RUN select * from maincoll
doc	_id
{"_id": "1", "name": "\"xtest_<=\"", "amount": 4.99, "last_name": "Otero"}	1
{"_id": "2", "name": "\"xtest_<=\"", "amount": 120.57, "last_name": "Chrystens"}	2
{"_id": "3", "name": "\"xtest_<=\"", "amount": 74.56, "last_name": "Vega"}	3
{"_id": "4", "name": "\"xtest_>=\"", "amount": 387.14, "last_name": "Leon"}	4
{"_id": "5", "name": "\"xtest_>=\"", "amount": 125.45, "last_name": "Test"}	5
0 rows affected
Update a valid collection with string value and != operator for multiple docs
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: "!="
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "_id"
          }
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_OCTETS
          v_octets {
            value: "2"
          }
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "last_name"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "\"xtest_!=\""
        }
      }
    }
  }
}


4 rows affected
Rows matched: 4  Changed: 4  Warnings: 0
RUN select * from maincoll
doc	_id
{"_id": "1", "name": "\"xtest_<=\"", "amount": 4.99, "last_name": "\"xtest_!=\""}	1
{"_id": "2", "name": "\"xtest_<=\"", "amount": 120.57, "last_name": "Chrystens"}	2
{"_id": "3", "name": "\"xtest_<=\"", "amount": 74.56, "last_name": "\"xtest_!=\""}	3
{"_id": "4", "name": "\"xtest_>=\"", "amount": 387.14, "last_name": "\"xtest_!=\""}	4
{"_id": "5", "name": "\"xtest_>=\"", "amount": 125.45, "last_name": "\"xtest_!=\""}	5
0 rows affected
Update order clause update last _id in desc order (_id = 5)
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: "!="
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "_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 {
      document_path {
        type: MEMBER
        value: "last_name"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "\"Limit1OrderDesc\""
        }
      }
    }
  }
}


1 rows affected
Rows matched: 1  Changed: 1  Warnings: 0
RUN select * from maincoll
doc	_id
{"_id": "1", "name": "\"xtest_<=\"", "amount": 4.99, "last_name": "\"xtest_!=\""}	1
{"_id": "2", "name": "\"xtest_<=\"", "amount": 120.57, "last_name": "Chrystens"}	2
{"_id": "3", "name": "\"xtest_<=\"", "amount": 74.56, "last_name": "\"xtest_!=\""}	3
{"_id": "4", "name": "\"xtest_>=\"", "amount": 387.14, "last_name": "\"xtest_!=\""}	4
{"_id": "5", "name": "\"xtest_>=\"", "amount": 125.45, "last_name": "\"Limit1OrderDesc\""}	5
0 rows affected
Update with order clause update first two _id in asc order (_id = 1,2)
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: "!="
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "_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 {
      document_path {
        type: MEMBER
        value: "last_name"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "\"Limit2OrderAsc\""
        }
      }
    }
  }
}


2 rows affected
Rows matched: 2  Changed: 2  Warnings: 0
RUN select * from maincoll
doc	_id
{"_id": "1", "name": "\"xtest_<=\"", "amount": 4.99, "last_name": "\"Limit2OrderAsc\""}	1
{"_id": "2", "name": "\"xtest_<=\"", "amount": 120.57, "last_name": "\"Limit2OrderAsc\""}	2
{"_id": "3", "name": "\"xtest_<=\"", "amount": 74.56, "last_name": "\"xtest_!=\""}	3
{"_id": "4", "name": "\"xtest_>=\"", "amount": 387.14, "last_name": "\"xtest_!=\""}	4
{"_id": "5", "name": "\"xtest_>=\"", "amount": 125.45, "last_name": "\"Limit1OrderDesc\""}	5
0 rows affected
Invalid type of update for Document
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: ">"
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "_id"
          }
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_OCTETS
          v_octets {
            value: "3"
          }
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "name"
      }
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "xtest"
        }
      }
    }
  }
}

Got expected error: Invalid type of update operation for document (code 5051)
Update multiple column + transaction
RUN START TRANSACTION

0 rows affected
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: ">"
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "_id"
          }
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_OCTETS
          v_octets {
            value: "3"
          }
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "name"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "name_mul_update_save_a"
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "last_name"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "last_name_mul_update_save_a"
        }
      }
    }
  }
}


2 rows affected
Rows matched: 2  Changed: 2  Warnings: 0
RUN SELECT * FROM mysqlxcoll.maincoll where _id > 3
doc	_id
{"_id": "4", "name": "name_mul_update_save_a", "amount": 387.14, "last_name": "last_name_mul_update_save_a"}	4
{"_id": "5", "name": "name_mul_update_save_a", "amount": 125.45, "last_name": "last_name_mul_update_save_a"}	5
0 rows affected
RUN SAVEPOINT A

0 rows affected
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: ">"
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "_id"
          }
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_OCTETS
          v_octets {
            value: "3"
          }
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "name"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "name_mul_update_save_b"
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "last_name"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "last_name_mul_update_save_b"
        }
      }
    }
  }
}


2 rows affected
Rows matched: 2  Changed: 2  Warnings: 0
RUN SELECT * FROM mysqlxcoll.maincoll where _id > 3
doc	_id
{"_id": "4", "name": "name_mul_update_save_b", "amount": 387.14, "last_name": "last_name_mul_update_save_b"}	4
{"_id": "5", "name": "name_mul_update_save_b", "amount": 125.45, "last_name": "last_name_mul_update_save_b"}	5
0 rows affected
RUN ROLLBACK TO SAVEPOINT A

0 rows affected
RUN COMMIT

0 rows affected
RUN SELECT * FROM mysqlxcoll.maincoll where _id > 3
doc	_id
{"_id": "4", "name": "name_mul_update_save_a", "amount": 387.14, "last_name": "last_name_mul_update_save_a"}	4
{"_id": "5", "name": "name_mul_update_save_a", "amount": 125.45, "last_name": "last_name_mul_update_save_a"}	5
0 rows affected
document member _id is immutable
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: "=="
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "last_name"
          }
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_STRING
          v_string {
            value: "Chrystens"
          }
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "_id"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_OCTETS
        v_octets {
          value: "11"
        }
      }
    }
  }
}

Got expected error: Forbidden update operation on '$._id' member (code 5053)
RUN SELECT * FROM mysqlxcoll.maincoll
doc	_id
{"_id": "1", "name": "\"xtest_<=\"", "amount": 4.99, "last_name": "\"Limit2OrderAsc\""}	1
{"_id": "2", "name": "\"xtest_<=\"", "amount": 120.57, "last_name": "\"Limit2OrderAsc\""}	2
{"_id": "3", "name": "\"xtest_<=\"", "amount": 74.56, "last_name": "\"xtest_!=\""}	3
{"_id": "4", "name": "name_mul_update_save_a", "amount": 387.14, "last_name": "last_name_mul_update_save_a"}	4
{"_id": "5", "name": "name_mul_update_save_a", "amount": 125.45, "last_name": "last_name_mul_update_save_a"}	5
0 rows affected
document member _id is immutable but _id column can be updated
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: TABLE
  criteria {
    type: OPERATOR
    operator {
      name: "=="
      param {
        type: IDENT
        identifier {
          document_path {
            type: MEMBER
            value: "last_name"
          }
        }
      }
      param {
        type: LITERAL
        literal {
          type: V_STRING
          v_string {
            value: "Chrystens"
          }
        }
      }
    }
  }
  operation {
    source {
      name: "_id"
    }
    operation: SET
    value {
      type: LITERAL
      literal {
        type: V_OCTETS
        v_octets {
          value: "11"
        }
      }
    }
  }
}


0 rows affected
Rows matched: 0  Changed: 0  Warnings: 0
RUN SELECT * FROM mysqlxcoll.maincoll
doc	_id
{"_id": "1", "name": "\"xtest_<=\"", "amount": 4.99, "last_name": "\"Limit2OrderAsc\""}	1
{"_id": "2", "name": "\"xtest_<=\"", "amount": 120.57, "last_name": "\"Limit2OrderAsc\""}	2
{"_id": "3", "name": "\"xtest_<=\"", "amount": 74.56, "last_name": "\"xtest_!=\""}	3
{"_id": "4", "name": "name_mul_update_save_a", "amount": 387.14, "last_name": "last_name_mul_update_save_a"}	4
{"_id": "5", "name": "name_mul_update_save_a", "amount": 125.45, "last_name": "last_name_mul_update_save_a"}	5
0 rows affected
Update using multiple condition
send Mysqlx.Crud.Update {
  collection {
    name: "maincoll"
    schema: "mysqlxcoll"
  }
  data_model: DOCUMENT
  criteria {
    type: OPERATOR
    operator {
      name: "&&"
      param {
        type: OPERATOR
        operator {
          name: ">="
          param {
            type: IDENT
            identifier {
              document_path {
                type: MEMBER
                value: "_id"
              }
            }
          }
          param {
            type: LITERAL
            literal {
              type: V_SINT
              v_signed_int: 4
            }
          }
        }
      }
      param {
        type: OPERATOR
        operator {
          name: "=="
          param {
            type: IDENT
            identifier {
              name: "_id"
            }
          }
          param {
            type: LITERAL
            literal {
              type: V_SINT
              v_signed_int: 4
            }
          }
        }
      }
    }
  }
  operation {
    source {
      document_path {
        type: MEMBER
        value: "amount"
      }
    }
    operation: ITEM_SET
    value {
      type: LITERAL
      literal {
        type: V_OCTETS
        v_octets {
          value: "444"
        }
      }
    }
  }
}


1 rows affected
Rows matched: 1  Changed: 1  Warnings: 0
RUN SELECT * FROM mysqlxcoll.maincoll
doc	_id
{"_id": "1", "name": "\"xtest_<=\"", "amount": 4.99, "last_name": "\"Limit2OrderAsc\""}	1
{"_id": "2", "name": "\"xtest_<=\"", "amount": 120.57, "last_name": "\"Limit2OrderAsc\""}	2
{"_id": "3", "name": "\"xtest_<=\"", "amount": 74.56, "last_name": "\"xtest_!=\""}	3
{"_id": "4", "name": "name_mul_update_save_a", "amount": "444", "last_name": "last_name_mul_update_save_a"}	4
{"_id": "5", "name": "name_mul_update_save_a", "amount": 125.45, "last_name": "last_name_mul_update_save_a"}	5
0 rows affected
================================================================================
CLEAN UP
================================================================================
RUN DROP SCHEMA if EXISTS mysqlxplugin

1 rows affected
RUN DROP SCHEMA if EXISTS mysqlxcoll

1 rows affected
RUN DROP USER updatecruduser@localhost

0 rows affected
RUN SET SQL_SAFE_UPDATES = 1

0 rows affected
Mysqlx.Ok {
  msg: "bye!"
}
ok
================================================================================
POSTAMBLE
================================================================================
uninstall plugin mysqlx;

Man Man