unittest/scripts/js_devapi/validation/mysqlx_collection_modify_prepared.js (3,212 lines of code) (raw):
//@<PROTOCOL> First execution is normal
>>>> SEND Mysqlx.Crud.Update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
}
//@<OUT> First execution is normal
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"age": 18,
"name": "george",
"grade": 1
}
{
"_id": "002",
"age": 17,
"name": "james",
"grade": 1
}
{
"_id": "003",
"age": 18,
"name": "luke",
"grade": 1
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> Second execution prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 1
stmt {
type: UPDATE
update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 1
}
//@<OUT> Second execution prepares statement and executes it
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"age": 18,
"name": "george",
"grade": 1
}
{
"_id": "002",
"age": 17,
"name": "james",
"grade": 1
}
{
"_id": "003",
"age": 18,
"name": "luke",
"grade": 1
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> Third execution uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 1
}
//@<OUT> Third execution uses prepared statement
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"age": 18,
"name": "george",
"grade": 1
}
{
"_id": "002",
"age": 17,
"name": "james",
"grade": 1
}
{
"_id": "003",
"age": 18,
"name": "luke",
"grade": 1
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> set() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 1
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
}
//@<OUT> set() changes statement, back to normal execution
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"age": 18,
"name": "george",
"grade": 1,
"group": "A"
}
{
"_id": "002",
"age": 17,
"name": "james",
"grade": 1,
"group": "A"
}
{
"_id": "003",
"age": 18,
"name": "luke",
"grade": 1,
"group": "A"
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> second execution after set(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 2
stmt {
type: UPDATE
update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 2
}
//@<OUT> second execution after set(), prepares statement and executes it
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"age": 18,
"name": "george",
"grade": 1,
"group": "A"
}
{
"_id": "002",
"age": 17,
"name": "james",
"grade": 1,
"group": "A"
}
{
"_id": "003",
"age": 18,
"name": "luke",
"grade": 1,
"group": "A"
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> third execution after set(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 2
}
//@<OUT> third execution after set(), uses prepared statement
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"age": 18,
"name": "george",
"grade": 1,
"group": "A"
}
{
"_id": "002",
"age": 17,
"name": "james",
"grade": 1,
"group": "A"
}
{
"_id": "003",
"age": 18,
"name": "luke",
"grade": 1,
"group": "A"
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> unset() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 2
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
}
//@<OUT> unset() changes statement, back to normal execution
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A"
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A"
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A"
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> second execution after unset(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 3
stmt {
type: UPDATE
update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 3
}
//@<OUT> second execution after unset(), prepares statement and executes it
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A"
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A"
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A"
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> third execution after unset(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 3
}
//@<OUT> third execution after unset(), uses prepared statement
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A"
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A"
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A"
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> patch() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 3
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
operation {
source {
}
operation: MERGE_PATCH
value {
type: OBJECT
object {
fld {
key: "grades"
value {
type: ARRAY
array {
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "B"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "C"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "D"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "E"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "F"
}
}
}
}
}
}
}
}
}
}
//@<OUT> patch() changes statement, back to normal execution
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"B",
"C",
"D",
"E",
"F"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> second execution after patch(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 4
stmt {
type: UPDATE
update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
operation {
source {
}
operation: MERGE_PATCH
value {
type: OBJECT
object {
fld {
key: "grades"
value {
type: ARRAY
array {
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "B"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "C"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "D"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "E"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "F"
}
}
}
}
}
}
}
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 4
}
//@<OUT> second execution after patch(), prepares statement and executes it
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"B",
"C",
"D",
"E",
"F"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> third execution after patch(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 4
}
//@<OUT> third execution after patch(), uses prepared statement
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"B",
"C",
"D",
"E",
"F"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> arrayInsert() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 4
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
operation {
source {
}
operation: MERGE_PATCH
value {
type: OBJECT
object {
fld {
key: "grades"
value {
type: ARRAY
array {
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "B"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "C"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "D"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "E"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "F"
}
}
}
}
}
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
document_path {
type: ARRAY_INDEX
index: 1
}
}
operation: ARRAY_INSERT
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A+"
}
}
}
}
}
//@<OUT> arrayInsert() changes statement, back to normal execution
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> second execution after arrayInsert(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 5
stmt {
type: UPDATE
update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
operation {
source {
}
operation: MERGE_PATCH
value {
type: OBJECT
object {
fld {
key: "grades"
value {
type: ARRAY
array {
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "B"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "C"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "D"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "E"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "F"
}
}
}
}
}
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
document_path {
type: ARRAY_INDEX
index: 1
}
}
operation: ARRAY_INSERT
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A+"
}
}
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 5
}
//@<OUT> second execution after arrayInsert(), prepares statement and executes it
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> third execution after arrayInsert(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 5
}
//@<OUT> third execution after arrayInsert(), uses prepared statement
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> arrayAppend() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 5
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
operation {
source {
}
operation: MERGE_PATCH
value {
type: OBJECT
object {
fld {
key: "grades"
value {
type: ARRAY
array {
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "B"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "C"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "D"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "E"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "F"
}
}
}
}
}
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
document_path {
type: ARRAY_INDEX
index: 1
}
}
operation: ARRAY_INSERT
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A+"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
}
operation: ARRAY_APPEND
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "G"
}
}
}
}
}
//@<OUT> arrayAppend() changes statement, back to normal execution
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> second execution after arrayAppend(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 6
stmt {
type: UPDATE
update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
operation {
source {
}
operation: MERGE_PATCH
value {
type: OBJECT
object {
fld {
key: "grades"
value {
type: ARRAY
array {
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "B"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "C"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "D"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "E"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "F"
}
}
}
}
}
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
document_path {
type: ARRAY_INDEX
index: 1
}
}
operation: ARRAY_INSERT
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A+"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
}
operation: ARRAY_APPEND
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "G"
}
}
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 6
}
//@<OUT> second execution after arrayAppend(), prepares statement and executes it
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> third execution after arrayAppend(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 6
}
//@<OUT> third execution after arrayAppend(), uses prepared statement
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> sort() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 6
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
order {
expr {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
direction: DESC
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
operation {
source {
}
operation: MERGE_PATCH
value {
type: OBJECT
object {
fld {
key: "grades"
value {
type: ARRAY
array {
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "B"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "C"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "D"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "E"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "F"
}
}
}
}
}
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
document_path {
type: ARRAY_INDEX
index: 1
}
}
operation: ARRAY_INSERT
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A+"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
}
operation: ARRAY_APPEND
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "G"
}
}
}
}
}
//@<OUT> sort() changes statement, back to normal execution
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> second execution after sort(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 7
stmt {
type: UPDATE
update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
order {
expr {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
direction: DESC
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
operation {
source {
}
operation: MERGE_PATCH
value {
type: OBJECT
object {
fld {
key: "grades"
value {
type: ARRAY
array {
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "B"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "C"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "D"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "E"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "F"
}
}
}
}
}
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
document_path {
type: ARRAY_INDEX
index: 1
}
}
operation: ARRAY_INSERT
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A+"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
}
operation: ARRAY_APPEND
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "G"
}
}
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 7
}
//@<OUT> second execution after sort(), prepares statement and executes it
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> third execution after sort(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 7
}
//@<OUT> third execution after sort(), uses prepared statement
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
{
"_id": "001",
"name": "george",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
3 documents in set ([[*]] sec)
Query OK, 3 items affected ([[*]] sec)
Rows matched: 3 Changed: 3 Warnings: 0
//@<PROTOCOL> limit() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 7
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
limit {
row_count: 2
}
order {
expr {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
direction: DESC
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
operation {
source {
}
operation: MERGE_PATCH
value {
type: OBJECT
object {
fld {
key: "grades"
value {
type: ARRAY
array {
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "B"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "C"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "D"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "E"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "F"
}
}
}
}
}
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
document_path {
type: ARRAY_INDEX
index: 1
}
}
operation: ARRAY_INSERT
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A+"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
}
operation: ARRAY_APPEND
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "G"
}
}
}
}
}
//@<OUT> limit() changes statement, back to normal execution
Query OK, 2 items affected ([[*]] sec)
Rows matched: 2 Changed: 2 Warnings: 0
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
3 documents in set ([[*]] sec)
Query OK, 2 items affected ([[*]] sec)
Rows matched: 3 Changed: 2 Warnings: 0
//@<PROTOCOL> second execution after limit(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 8
stmt {
type: UPDATE
update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
order {
expr {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
direction: DESC
}
operation {
source {
document_path {
type: MEMBER
value: "grade"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "group"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_REMOVE
}
operation {
source {
}
operation: MERGE_PATCH
value {
type: OBJECT
object {
fld {
key: "grades"
value {
type: ARRAY
array {
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "B"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "C"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "D"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "E"
}
}
}
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "F"
}
}
}
}
}
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
document_path {
type: ARRAY_INDEX
index: 1
}
}
operation: ARRAY_INSERT
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "A+"
}
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "grades"
}
}
operation: ARRAY_APPEND
value {
type: LITERAL
literal {
type: V_STRING
v_string {
value: "G"
}
}
}
}
limit_expr {
row_count {
type: PLACEHOLDER
position: 0
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 8
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 2
}
}
}
//@<OUT> second execution after limit(), prepares statement and executes it
Query OK, 2 items affected ([[*]] sec)
Rows matched: 2 Changed: 2 Warnings: 0
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
3 documents in set ([[*]] sec)
Query OK, 2 items affected ([[*]] sec)
Rows matched: 3 Changed: 2 Warnings: 0
//@<PROTOCOL> third execution after limit(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 8
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 2
}
}
}
//@<OUT> third execution after limit(), uses prepared statement
Query OK, 2 items affected ([[*]] sec)
Rows matched: 2 Changed: 2 Warnings: 0
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"name": "james",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
{
"_id": "003",
"name": "luke",
"grade": 1,
"group": "A",
"grades": [
"A",
"A+",
"B",
"C",
"D",
"E",
"F",
"G"
]
}
3 documents in set ([[*]] sec)
Query OK, 2 items affected ([[*]] sec)
Rows matched: 3 Changed: 2 Warnings: 0
//@<PROTOCOL> prepares statement to test no changes when reusing bind() and limit()
>>>> SEND Mysqlx.Crud.Update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "like"
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
param {
type: PLACEHOLDER
position: 0
}
}
}
limit {
row_count: 1
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 19
}
}
}
args {
type: V_STRING
v_string {
value: "g%"
}
}
}
//@<OUT> prepares statement to test no changes when reusing bind() and limit()
Query OK, 1 item affected ([[*]] sec)
Rows matched: 1 Changed: 1 Warnings: 0
{
"_id": "001",
"age": 19,
"name": "george"
}
{
"_id": "002",
"age": 18,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> Reusing statement with bind() using j%
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 9
stmt {
type: UPDATE
update {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "like"
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
param {
type: PLACEHOLDER
position: 0
}
}
}
operation {
source {
document_path {
type: MEMBER
value: "age"
}
}
operation: ITEM_SET
value {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 19
}
}
}
limit_expr {
row_count {
type: PLACEHOLDER
position: 1
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 9
args {
type: SCALAR
scalar {
type: V_STRING
v_string {
value: "j%"
}
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 1
}
}
}
//@<OUT> Reusing statement with bind() using j%
Query OK, 1 item affected ([[*]] sec)
Rows matched: 1 Changed: 1 Warnings: 0
{
"_id": "001",
"age": 19,
"name": "george"
}
{
"_id": "002",
"age": 19,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> Reusing statement with new limit()
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 9
args {
type: SCALAR
scalar {
type: V_STRING
v_string {
value: "%"
}
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 2
}
}
}
//@<OUT> Reusing statement with new limit()
Query OK, 2 items affected ([[*]] sec)
Rows matched: 2 Changed: 0 Warnings: 0
{
"_id": "001",
"age": 19,
"name": "george"
}
{
"_id": "002",
"age": 19,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)