338 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			338 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
########### ../t/crud_rpl.test                               #########
 | 
						|
##                                                                   #
 | 
						|
## This test aims to run crud message on replication setup.          #
 | 
						|
## Test runs following message on master and checks data on slave    #
 | 
						|
##  - create_collection message                                      #
 | 
						|
##  - Insert message                                                 #
 | 
						|
##  - create_collection_index                                        #
 | 
						|
##  - update message                                                 #
 | 
						|
##  - delete message                                                 #
 | 
						|
#######################################################################
 | 
						|
 | 
						|
 | 
						|
--source include/master-slave.inc
 | 
						|
--source include/count_sessions.inc
 | 
						|
--source include/xplugin_create_user.inc
 | 
						|
 | 
						|
 | 
						|
# Use master connection
 | 
						|
--connection master
 | 
						|
 | 
						|
--source include/xplugin_preamble.inc
 | 
						|
--source ../include/have_performance_schema_events_waits_history.inc
 | 
						|
call mtr.add_suppression("Error parsing message of type 12: args");
 | 
						|
call mtr.add_suppression("Error handling message: args");
 | 
						|
 | 
						|
## Test starts here
 | 
						|
--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
 | 
						|
-->sql
 | 
						|
#-- "Creating database for testcase"
 | 
						|
DROP DATABASE IF EXISTS xplugintest;
 | 
						|
CREATE DATABASE xplugintest;
 | 
						|
USE xplugintest;
 | 
						|
CREATE TABLE table1 ( _id INT PRIMARY KEY, doc JSON ) ;
 | 
						|
-->endsql
 | 
						|
 | 
						|
#-- "Create table table2 in xplugintest "
 | 
						|
 | 
						|
Mysqlx.Sql.StmtExecute {
 | 
						|
  stmt: "create_collection"
 | 
						|
  args {
 | 
						|
    type: SCALAR
 | 
						|
    scalar {
 | 
						|
      type: V_STRING
 | 
						|
      v_string {
 | 
						|
        value: "xplugintest"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  args {
 | 
						|
    type: SCALAR
 | 
						|
    scalar {
 | 
						|
      type: V_STRING
 | 
						|
      v_string {
 | 
						|
        value: "table2"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  namespace: "xplugin"
 | 
						|
}
 | 
						|
-->recvresult
 | 
						|
 | 
						|
-->echo Insert multiple rows into a Document column
 | 
						|
Mysqlx.Crud.Insert {
 | 
						|
  collection {
 | 
						|
    name: "table2"
 | 
						|
    schema: "xplugintest"
 | 
						|
  }
 | 
						|
  data_model: DOCUMENT
 | 
						|
  row {
 | 
						|
    field {
 | 
						|
      type: LITERAL
 | 
						|
      literal {
 | 
						|
        type: V_STRING
 | 
						|
        v_string {
 | 
						|
          value: "\n{\n         \"_id\": \"1\",\n         \"name\": \"Omar Bras\", \"id\": \"1\"\n}"
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  row {
 | 
						|
    field {
 | 
						|
      type: LITERAL
 | 
						|
      literal {
 | 
						|
        type: V_STRING
 | 
						|
        v_string {
 | 
						|
          value: "\n{\n         \"_id\": \"2\",\n         \"name\": \"Omar Mex\", \"id\": \"2\"\n}"
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
-->recvresult
 | 
						|
-->sql
 | 
						|
SELECT * FROM xplugintest.table2;
 | 
						|
-->endsql
 | 
						|
 | 
						|
 | 
						|
#-- "Index with  unique(true), index column NOT NULL (true)"
 | 
						|
Mysqlx.Sql.StmtExecute {
 | 
						|
  stmt: "create_collection_index"
 | 
						|
  args {
 | 
						|
    type: SCALAR
 | 
						|
    scalar {
 | 
						|
      type: V_STRING
 | 
						|
      v_string {
 | 
						|
        value: "xplugintest"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  args {
 | 
						|
    type: SCALAR
 | 
						|
    scalar {
 | 
						|
      type: V_STRING
 | 
						|
      v_string {
 | 
						|
        value: "table2"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  args {
 | 
						|
    type: SCALAR
 | 
						|
    scalar {
 | 
						|
      type: V_STRING
 | 
						|
      v_string {
 | 
						|
        value: "name_index"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  args {
 | 
						|
    type: SCALAR
 | 
						|
    scalar {
 | 
						|
      type: V_BOOL
 | 
						|
      v_bool: true
 | 
						|
    }
 | 
						|
  }
 | 
						|
  args {
 | 
						|
    type: SCALAR
 | 
						|
    scalar {
 | 
						|
      type: V_STRING
 | 
						|
      v_string {
 | 
						|
        value: "$.name"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  args {
 | 
						|
    type: SCALAR
 | 
						|
    scalar {
 | 
						|
      type: V_STRING
 | 
						|
      v_string {
 | 
						|
        value: "TEXT(50)"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  args {
 | 
						|
    type: SCALAR
 | 
						|
    scalar {
 | 
						|
      type: V_BOOL
 | 
						|
      v_bool: true
 | 
						|
    }
 | 
						|
  }
 | 
						|
  namespace: "xplugin"
 | 
						|
}
 | 
						|
-->recvresult
 | 
						|
-->sql
 | 
						|
SHOW CREATE TABLE xplugintest.table2;
 | 
						|
SELECT * FROM xplugintest.table2;
 | 
						|
-->endsql
 | 
						|
 | 
						|
 | 
						|
-->echo Update decimal value with a corner value plus 1
 | 
						|
Mysqlx.Crud.Update {
 | 
						|
  collection {
 | 
						|
    name: "table2"
 | 
						|
    schema: "xplugintest"
 | 
						|
  }
 | 
						|
  data_model: DOCUMENT
 | 
						|
  criteria {
 | 
						|
    type: OPERATOR
 | 
						|
    operator {
 | 
						|
      name: "=="
 | 
						|
      param {
 | 
						|
        type: IDENT identifier { name: "_id" }
 | 
						|
      }
 | 
						|
      param {
 | 
						|
        type: LITERAL
 | 
						|
        literal {
 | 
						|
               type: V_SINT
 | 
						|
               v_signed_int: 2
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  operation {
 | 
						|
    source {
 | 
						|
      document_path {
 | 
						|
        type: MEMBER
 | 
						|
        value: "name"
 | 
						|
      }
 | 
						|
    }
 | 
						|
    operation: ITEM_SET
 | 
						|
    value {
 | 
						|
      type: LITERAL
 | 
						|
      literal {
 | 
						|
          type: V_STRING
 | 
						|
          v_string {
 | 
						|
            value: "\"Omar Argentina\""
 | 
						|
          }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
-->recvresult
 | 
						|
 | 
						|
 | 
						|
-->sql
 | 
						|
SHOW CREATE TABLE xplugintest.table2;
 | 
						|
SELECT JSON_EXTRACT(doc,'$.name') FROM xplugintest.table2;
 | 
						|
SELECT * FROM xplugintest.table2;
 | 
						|
-->endsql
 | 
						|
 | 
						|
-->echo Delete with == operator
 | 
						|
Mysqlx.Crud.Delete {
 | 
						|
  collection {
 | 
						|
    name: "table2"
 | 
						|
    schema: "xplugintest"
 | 
						|
  }
 | 
						|
  data_model: DOCUMENT
 | 
						|
  criteria {
 | 
						|
    type: OPERATOR
 | 
						|
    operator {
 | 
						|
      name: "=="
 | 
						|
      param {
 | 
						|
        type: IDENT identifier { name: "_id" }
 | 
						|
      }
 | 
						|
      param {
 | 
						|
        type: LITERAL
 | 
						|
        literal {
 | 
						|
                type: V_SINT
 | 
						|
                v_signed_int: 2
 | 
						|
              }
 | 
						|
         }
 | 
						|
      }
 | 
						|
   }
 | 
						|
}
 | 
						|
-->recvresult
 | 
						|
 | 
						|
-->sql
 | 
						|
SELECT JSON_EXTRACT(doc,'$.name') FROM xplugintest.table2;
 | 
						|
SELECT * FROM xplugintest.table2;
 | 
						|
-->endsql
 | 
						|
 | 
						|
 | 
						|
Mysqlx.Crud.Insert {
 | 
						|
  collection {
 | 
						|
    name: "table2"
 | 
						|
    schema: "xplugintest"
 | 
						|
  }
 | 
						|
  data_model: DOCUMENT
 | 
						|
  row {
 | 
						|
    field {
 | 
						|
      type: LITERAL
 | 
						|
      literal {
 | 
						|
        type: V_STRING
 | 
						|
        v_string {
 | 
						|
          value: "\n{\n         \"_id\": \"3\",\n         \"name\": \"Omar Peru\", \"id\": \"3\"\n}"
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
-->recvresult
 | 
						|
 | 
						|
# Insert fail due to non unique _id doc member
 | 
						|
Mysqlx.Crud.Insert {
 | 
						|
  collection {
 | 
						|
    name: "table2"
 | 
						|
    schema: "xplugintest"
 | 
						|
  }
 | 
						|
  data_model: DOCUMENT
 | 
						|
  row {
 | 
						|
    field {
 | 
						|
      type: LITERAL
 | 
						|
      literal {
 | 
						|
        type: V_STRING
 | 
						|
        v_string {
 | 
						|
          value: "\n{\n         \"_id\": \"1\",\n         \"name\": \"Omar Colombia\", \"id\": \"3\"\n}"
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
# Error
 | 
						|
-->expecterror 5116
 | 
						|
-->recvresult
 | 
						|
 | 
						|
-->sql
 | 
						|
SELECT * FROM xplugintest.table2;
 | 
						|
-->endsql
 | 
						|
 | 
						|
# Insert into table1
 | 
						|
-->sql
 | 
						|
INSERT INTO xplugintest.table1 VALUES (1,'{"a":["x", "y"]}'), (2,'{"b":["x", "y"]}');
 | 
						|
-->endsql
 | 
						|
-->expecterror 1062
 | 
						|
-->sql
 | 
						|
INSERT INTO xplugintest.table1 VALUES (3,'{"c":["x", "y"]}'), (2,'{"d":["x", "y"]}');
 | 
						|
SELECT * FROM xplugintest.table1 ;
 | 
						|
UPDATE xplugintest.table1 SET doc= '{"m":["x", "y"]}' WHERE _id=1;
 | 
						|
SELECT * FROM xplugintest.table1 ;
 | 
						|
-->endsql
 | 
						|
 | 
						|
EOF
 | 
						|
 | 
						|
 | 
						|
 | 
						|
--exec $MYSQLXTEST -u x_root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
 | 
						|
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp
 | 
						|
 | 
						|
--source include/sync_slave_sql_with_master.inc
 | 
						|
#-- connection slave
 | 
						|
--echo # Connection:slave - Row with value 2 is expected on slave.
 | 
						|
USE xplugintest;
 | 
						|
SHOW CREATE TABLE xplugintest.table2;
 | 
						|
SELECT * FROM xplugintest.table2;
 | 
						|
SELECT * FROM xplugintest.table1;
 | 
						|
--let $diff_tables= master:xplugintest.table1, slave:xplugintest.table1
 | 
						|
--let $diff_tables= master:xplugintest.table2, slave:xplugintest.table2
 | 
						|
--source include/diff_tables.inc
 | 
						|
 | 
						|
## Cleanup
 | 
						|
-- connection master
 | 
						|
DROP DATABASE IF EXISTS xplugintest;
 | 
						|
 | 
						|
--source include/xplugin_drop_user.inc
 | 
						|
--source include/wait_until_count_sessions.inc
 | 
						|
--source include/sync_slave_sql_with_master.inc
 | 
						|
--source include/rpl_end.inc
 | 
						|
 |