unittest/scripts/js_devapi/validation/mysqlx_collection_find_prepared.js (1,526 lines of code) (raw):
//@<PROTOCOL> First execution is normal
>>>> SEND Mysqlx.Crud.Find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
}
//@<OUT> First execution is normal
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"age": 17,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> Second execution prepares statement and executes it
~>>>> SEND Mysqlx.Crud.Find {
//@<PROTOCOL> Second execution prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 1
stmt {
type: FIND
find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 1
}
//@<OUT> Second execution prepares statement and executes it
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"age": 17,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> Third execution uses prepared statement
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> Third execution uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 1
}
//@<OUT> Third execution uses prepared statement
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"age": 17,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> fields() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 1
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
alias: "name"
}
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
}
//@<OUT> fields() changes statement, back to normal execution
{
"age": 18,
"name": "george"
}
{
"age": 17,
"name": "james"
}
{
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> second execution after fields(), prepares statement and executes it
~>>>> SEND Mysqlx.Crud.Find {
//@<PROTOCOL> second execution after fields(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 2
stmt {
type: FIND
find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
alias: "name"
}
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 2
}
//@<OUT> second execution after fields(), prepares statement and executes it
{
"age": 18,
"name": "george"
}
{
"age": 17,
"name": "james"
}
{
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> third execution after fields(), uses prepared statement
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> third execution after fields(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 2
}
//@<OUT> third execution after fields(), uses prepared statement
{
"age": 18,
"name": "george"
}
{
"age": 17,
"name": "james"
}
{
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> sort() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 2
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
alias: "name"
}
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
order {
expr {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
direction: ASC
}
}
//@<OUT> sort() changes statement, back to normal execution
{
"age": 17,
"name": "james"
}
{
"age": 18,
"name": "george"
}
{
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> second execution after sort(), prepares statement and executes it
~>>>> SEND Mysqlx.Crud.Find {
//@<PROTOCOL> second execution after sort(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 3
stmt {
type: FIND
find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
alias: "name"
}
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
order {
expr {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
direction: ASC
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 3
}
//@<OUT> second execution after sort(), prepares statement and executes it
{
"age": 17,
"name": "james"
}
{
"age": 18,
"name": "george"
}
{
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> third execution after sort(), uses prepared statement
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> third execution after sort(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 3
}
//@<OUT> third execution after sort(), uses prepared statement
{
"age": 17,
"name": "james"
}
{
"age": 18,
"name": "george"
}
{
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> limit() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 3
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
alias: "name"
}
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
limit {
row_count: 2
offset: 0
}
order {
expr {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
direction: ASC
}
}
//@<OUT> limit() changes statement, back to normal execution
{
"age": 17,
"name": "james"
}
{
"age": 18,
"name": "george"
}
2 documents in set ([[*]] sec)
//@<PROTOCOL> second execution after limit(), prepares statement and executes it
~>>>> SEND Mysqlx.Crud.Find {
//@<PROTOCOL> second execution after limit(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 4
stmt {
type: FIND
find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
alias: "name"
}
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
order {
expr {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
direction: ASC
}
limit_expr {
row_count {
type: PLACEHOLDER
position: 0
}
offset {
type: PLACEHOLDER
position: 1
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 4
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 2
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 0
}
}
}
//@<OUT> second execution after limit(), prepares statement and executes it
{
"age": 17,
"name": "james"
}
{
"age": 18,
"name": "george"
}
2 documents in set ([[*]] sec)
//@<PROTOCOL> third execution after limit(), uses prepared statement
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> third execution after limit(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 4
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 2
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 0
}
}
}
//@<OUT> third execution after limit(), uses prepared statement
{
"age": 17,
"name": "james"
}
{
"age": 18,
"name": "george"
}
2 documents in set ([[*]] sec)
//@<PROTOCOL> offset() does not change the statement, uses prepared one
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 4
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 2
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 1
}
}
}
//@<OUT> offset() does not change the statement, uses prepared one
{
"age": 18,
"name": "george"
}
{
"age": 18,
"name": "luke"
}
2 documents in set ([[*]] sec)
//@<PROTOCOL> lockExclusive() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 4
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
alias: "name"
}
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
limit {
row_count: 2
offset: 1
}
order {
expr {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
direction: ASC
}
locking: EXCLUSIVE_LOCK
}
//@<OUT> lockExclusive() changes statement, back to normal execution
{
"age": 18,
"name": "george"
}
{
"age": 18,
"name": "luke"
}
2 documents in set ([[*]] sec)
//@<PROTOCOL> second execution after lockExclusive(), prepares statement and executes it
~>>>> SEND Mysqlx.Crud.Find {
//@<PROTOCOL> second execution after lockExclusive(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 5
stmt {
type: FIND
find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
alias: "name"
}
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
order {
expr {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
direction: ASC
}
locking: EXCLUSIVE_LOCK
limit_expr {
row_count {
type: PLACEHOLDER
position: 0
}
offset {
type: PLACEHOLDER
position: 1
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 5
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 2
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 1
}
}
}
//@<OUT> second execution after lockExclusive(), prepares statement and executes it
{
"age": 18,
"name": "george"
}
{
"age": 18,
"name": "luke"
}
2 documents in set ([[*]] sec)
//@<PROTOCOL> third execution after lockExclusive(), uses prepared statement
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> third execution after lockExclusive(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 5
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 2
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 1
}
}
}
//@<OUT> third execution after lockExclusive(), uses prepared statement
{
"age": 18,
"name": "george"
}
{
"age": 18,
"name": "luke"
}
2 documents in set ([[*]] sec)
//@<PROTOCOL> creates statement to test lockShared()
>>>> SEND Mysqlx.Crud.Find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
}
//@<OUT> creates statement to test lockShared()
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"age": 17,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> prepares statement to test lockShared()
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 6
stmt {
type: FIND
find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 6
}
//@<OUT> prepares statement to test lockShared()
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"age": 17,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> lockShared() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 6
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
locking: SHARED_LOCK
}
//@<OUT> lockShared() changes statement, back to normal execution
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"age": 17,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> second execution after lockShared(), prepares statement and executes it
~>>>> SEND Mysqlx.Crud.Find {
//@<PROTOCOL> second execution after lockShared(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 7
stmt {
type: FIND
find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
locking: SHARED_LOCK
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 7
}
//@<OUT> second execution after lockShared(), prepares statement and executes it
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"age": 17,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> third execution after lockShared(), uses prepared statement
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> third execution after lockShared(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 7
}
//@<OUT> third execution after lockShared(), uses prepared statement
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"age": 17,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> creates statement with aggregate function to test having()
>>>> SEND Mysqlx.Crud.Find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
projection {
source {
type: FUNC_CALL
function_call {
name {
name: "count"
}
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
}
}
alias: "count(age)"
}
grouping {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
}
//@<OUT> creates statement with aggregate function to test having()
{
"age": 18,
"count(age)": 2
}
{
"age": 17,
"count(age)": 1
}
2 documents in set ([[*]] sec)
//@<PROTOCOL> prepares statement with aggregate function to test having()
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 8
stmt {
type: FIND
find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
projection {
source {
type: FUNC_CALL
function_call {
name {
name: "count"
}
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
}
}
alias: "count(age)"
}
grouping {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 8
}
//@<OUT> prepares statement with aggregate function to test having()
{
"age": 18,
"count(age)": 2
}
{
"age": 17,
"count(age)": 1
}
2 documents in set ([[*]] sec)
//@<PROTOCOL> having() changes statement, back to normal execution
>>>> SEND Mysqlx.Prepare.Deallocate {
stmt_id: 8
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Crud.Find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
projection {
source {
type: FUNC_CALL
function_call {
name {
name: "count"
}
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
}
}
alias: "count(age)"
}
grouping {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
grouping_criteria {
type: OPERATOR
operator {
name: ">"
param {
type: FUNC_CALL
function_call {
name {
name: "count"
}
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
}
}
param {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
}
}
}
//@<OUT> having() changes statement, back to normal execution
{
"age": 18,
"count(age)": 2
}
1 document in set ([[*]] sec)
//@<PROTOCOL> second execution after having(), prepares statement and executes it
~>>>> SEND Mysqlx.Crud.Find {
//@<PROTOCOL> second execution after having(), prepares statement and executes it
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 9
stmt {
type: FIND
find {
collection {
name: "test_collection"
schema: "prepared_stmt"
}
data_model: DOCUMENT
projection {
source {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
alias: "age"
}
projection {
source {
type: FUNC_CALL
function_call {
name {
name: "count"
}
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
}
}
alias: "count(age)"
}
grouping {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
grouping_criteria {
type: OPERATOR
operator {
name: ">"
param {
type: FUNC_CALL
function_call {
name {
name: "count"
}
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "age"
}
}
}
}
}
param {
type: LITERAL
literal {
type: V_UINT
v_unsigned_int: 1
}
}
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 9
}
//@<OUT> second execution after having(), prepares statement and executes it
{
"age": 18,
"count(age)": 2
}
1 document in set ([[*]] sec)
//@<PROTOCOL> third execution after having(), uses prepared statement
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> third execution after having(), uses prepared statement
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 9
}
//@<OUT> third execution after having(), uses prepared statement
{
"age": 18,
"count(age)": 2
}
1 document in set ([[*]] sec)
//@<PROTOCOL> creates statement to test no changes when reusing bind(), limit() and offset()
>>>> SEND Mysqlx.Crud.Find {
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: 3
offset: 0
}
args {
type: V_STRING
v_string {
value: "%"
}
}
}
//@<OUT> creates statement to test no changes when reusing bind(), limit() and offset()
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"age": 17,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> prepares statement to test no changes when reusing bind(), limit() and offset()
>>>> SEND Mysqlx.Prepare.Prepare {
stmt_id: 10
stmt {
type: FIND
find {
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_expr {
row_count {
type: PLACEHOLDER
position: 1
}
offset {
type: PLACEHOLDER
position: 2
}
}
}
}
}
<<<< RECEIVE Mysqlx.Ok {
}
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 10
args {
type: SCALAR
scalar {
type: V_STRING
v_string {
value: "%"
}
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 3
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 0
}
}
}
//@<OUT> prepares statement to test no changes when reusing bind(), limit() and offset()
{
"_id": "001",
"age": 18,
"name": "george"
}
{
"_id": "002",
"age": 17,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
3 documents in set ([[*]] sec)
//@<PROTOCOL> Reusing statement with bind() using g%
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> Reusing statement with bind() using g%
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 10
args {
type: SCALAR
scalar {
type: V_STRING
v_string {
value: "g%"
}
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 3
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 0
}
}
}
//@<OUT> Reusing statement with bind() using g%
{
"_id": "001",
"age": 18,
"name": "george"
}
1 document in set ([[*]] sec)
//@<PROTOCOL> Reusing statement with bind() using j%
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> Reusing statement with bind() using j%
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 10
args {
type: SCALAR
scalar {
type: V_STRING
v_string {
value: "j%"
}
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 3
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 0
}
}
}
//@<OUT> Reusing statement with bind() using j%
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<OUT> Reusing statement with bind() using j%
{
"_id": "002",
"age": 17,
"name": "james"
}
1 document in set ([[*]] sec)
//@<PROTOCOL> Reusing statement with bind() using l%
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 10
args {
type: SCALAR
scalar {
type: V_STRING
v_string {
value: "l%"
}
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 3
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 0
}
}
}
//@<OUT> Reusing statement with bind() using l%
{
"_id": "003",
"age": 18,
"name": "luke"
}
1 document in set ([[*]] sec)
//@<PROTOCOL> Reusing statement with new limit()
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> Reusing statement with new limit()
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 10
args {
type: SCALAR
scalar {
type: V_STRING
v_string {
value: "%"
}
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 1
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 0
}
}
}
//@<OUT> Reusing statement with new limit()
{
"_id": "001",
"age": 18,
"name": "george"
}
1 document in set ([[*]] sec)
//@<PROTOCOL> Reusing statement with new offset()
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> Reusing statement with new offset()
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 10
args {
type: SCALAR
scalar {
type: V_STRING
v_string {
value: "%"
}
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 1
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 1
}
}
}
//@<OUT> Reusing statement with new offset()
{
"_id": "002",
"age": 17,
"name": "james"
}
1 document in set ([[*]] sec)
//@<PROTOCOL> Reusing statement with new limit() and offset()
~>>>> SEND Mysqlx.Prepare.Prepare {
//@<PROTOCOL> Reusing statement with new limit() and offset()
>>>> SEND Mysqlx.Prepare.Execute {
stmt_id: 10
args {
type: SCALAR
scalar {
type: V_STRING
v_string {
value: "%"
}
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 2
}
}
args {
type: SCALAR
scalar {
type: V_UINT
v_unsigned_int: 1
}
}
}
//@<OUT> Reusing statement with new limit() and offset()
{
"_id": "002",
"age": 17,
"name": "james"
}
{
"_id": "003",
"age": 18,
"name": "luke"
}
2 documents in set ([[*]] sec)