config root man

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

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/t/create_drop_collection_crud.test

########### ../t/create_drop_collection_crud.test            #########
##                                                                   #
## This test runs aims to run CREATE/DROP statement                  #
## with mysqlxtest client.                                           #
## Test covers                                                       #
##  - Create collection with crud calls                              #
##    - plain create table                                           #
##    - create table in different database with same name            #
##    - change parameters order of create collection                 #
##    - alter and verify table created using xmessage                #
##    - Access denied for user has restricted access                 #
##    - insert rejected when docc column does not have _id key       #
##      required for table table created using create_collection     #
##  Negative case                                                    #
##    - xmessage with empty args                                     #
##    - xmessage with more than required args , invalid args type    #
##    - try create table with existing name                          #
##  - Drop collection                                                #
#     - drop table created using xmessage and sql                    #
#     - negative : drop non existing table                           #
##                                                                   #
#######################################################################



--source ../include/xplugin_preamble.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;
DROP DATABASE IF EXISTS xplugintest_1;
CREATE DATABASE xplugintest;
CREATE DATABASE xplugintest_1;
USE xplugintest;
CREATE TABLE table1 ( _id INT , 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

-- "Create same name table table2 in xplugintest1 "
Mysqlx.Sql.StmtExecute {
  stmt: "create_collection"
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "xplugintest_1"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "table2"
      }
    }
  }
  namespace: "xplugin"
}
-->recvresult

-- "Verify created tables"
-->sql
SHOW TABLES;
SHOW CREATE TABLE table1;
SHOW CREATE TABLE table2;
SHOW CREATE TABLE xplugintest_1.table2;

INSERT INTO table2 (doc) VALUES ('{"a":1,"_id":[100,200]}');
SELECT * FROM table2;
-- "Alter document table created with crud"
ALTER TABLE table2 ADD COLUMN col1 INT ;
SELECT * FROM table2;
SHOW CREATE TABLE table1;
SHOW CREATE TABLE table2;

-- "_id column value generated from doc column"
INSERT INTO table2 (doc,col1) VALUES ('{"a":2,"_id":[300,400]}',300);
SELECT * FROM table2;
-- "_id is null as _id is not provided as key in json doc"
-- "Insert is rejected as _id can not be null"
-->endsql
-->expecterror ER_BAD_NULL_ERROR
-->sql
INSERT INTO table2 (doc,col1) VALUES ('{"a":3,"b":[400,400]}',400);
SELECT * FROM table2;
-->endsql
-- "Try insert using insert crud"
-- "Insert is rejected as _id can not be null"
Mysqlx.Crud.Insert {
  collection {
    name: "table2"
    schema: "xplugintest"
  }
  data_model: DOCUMENT
  row {
    field {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "{\"a\":3,\"b\":[500,500]}"
        }
      }
    }
  }
}
## error
-->recv
-->sql
SELECT * FROM table2;
ALTER TABLE table2 DROP COLUMN _id;
INSERT INTO table2 (doc,col1) VALUES ('{"a":4,"b":[400,400]}',400);
-->endsql
-- "Now insert go through as we dropped _id column "
Mysqlx.Crud.Insert {
  collection {
    name: "table2"
    schema: "xplugintest"
  }
  data_model: DOCUMENT
  row {
    field {
      type: LITERAL
      literal {
        type: V_STRING
        v_string {
          value: "{\"a\":5,\"b\":[500,500]}"
        }
      }
    }
  }
}
-->recvresult
-->sql
SELECT * FROM table2;
SHOW CREATE TABLE table2;

-->endsql

-- "Drop table"
-->sql
DROP TABLE table2;
-->endsql

-- "Change order namespace , stmt "
Mysqlx.Sql.StmtExecute {
  namespace: "xplugin"
  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"
      }
    }
  }
}
-->recvresult
-- "Show table"
-->sql
SHOW CREATE TABLE table2;
CREATE TABLE table2_tmp ( col1 INT);
-->endsql
-- "Drop table created using create_collection message"
Mysqlx.Sql.StmtExecute {
  stmt: "drop_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

-- "Drop table created using sql"
Mysqlx.Sql.StmtExecute {
  stmt: "drop_collection"
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "xplugintest"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "table2_tmp"
      }
    }
  }
  namespace: "xplugin"
}
-->recv

-->expecterror ER_NO_SUCH_TABLE
-->sql
SHOW CREATE TABLE table2;
-->endsql
-- "Try to drop same table again"
Mysqlx.Sql.StmtExecute {
  stmt: "drop_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"
}
## reuslt
-->recv

-- "Try drop table from unkown database"
Mysqlx.Sql.StmtExecute {
  stmt: "drop_collection"
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "xplugintest_non_existing"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "table2"
      }
    }
  }
  namespace: "xplugin"
}
-->recv

-- "Incorrect args to drop_collection"
Mysqlx.Sql.StmtExecute {
  stmt: "drop_collection"
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "xplugintest"
      }
    }
  }
  namespace: "xplugin"
}
-->recv

-- "Invalid arg type"
Mysqlx.Sql.StmtExecute {
  stmt: "drop_collection"
  args {
    type: OBJECT
    scalar {
      type: V_STRING
      v_string {
        value: "xplugintest"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "table2"
      }
    }
  }
  namespace: "xplugin"
}
-->recv



EOF

--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp


--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
-- "Create table using namespace=sql "
Mysqlx.Sql.StmtExecute {
  namespace: "sql"
  stmt: "create table xplugintest.table_sql ( doc JSON ) "
}
-->recvresult
-- "show table & drop it"
-->sql
SHOW CREATE TABLE xplugintest.table_sql;
INSERT INTO xplugintest.table_sql (doc) VALUES ('{"_id":"200"}');
SELECT * FROM xplugintest.table_sql;
DROP TABLE xplugintest.table_sql;
-->endsql
EOF

--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp


--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
-- "Create table when user has no priviledge"
-- "step 1 - create user1 with limied access"
-->sql
CREATE USER 'user1'@'localhost' identified by '';
GRANT USAGE ON *.* TO 'user1'@'localhost';
CREATE DATABASE xplugintest_user_access;
-->endsql
EOF
--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp

--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
-- "step 2 - try to create table using user1"
Mysqlx.Sql.StmtExecute {
  namespace: "xplugin"
  stmt: "create_collection"
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "xplugintest_user_access"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "table1"
      }
    }
  }
}
## Error
-->expecterror ER_TABLEACCESS_DENIED_ERROR
-->recvresult

-- "show table "
-->expecterror ER_TABLEACCESS_DENIED_ERROR
-->sql
SHOW CREATE TABLE xplugintest_user_access.table1;
-->endsql
EOF
--exec $MYSQLXTEST -u user1 --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp

--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
-- "step 3 - clean user and database"
-->expecterror ER_NO_SUCH_TABLE
-->sql
SHOW CREATE TABLE xplugintest_user_access.table1;
DROP USER 'user1'@'localhost';
DROP DATABASE xplugintest_user_access;
-->endsql
EOF
--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp



--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
-- "Negative cases"
-- "1 empty args"
Mysqlx.Sql.StmtExecute {
  namespace: "xplugin"
  stmt: "create_collection"
  args {
  }
  args {
  }
}
## error
-->expecterror ER_X_INVALID_NAMESPACE
-->recvresult
EOF
--error 1
--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp >$MYSQL_TMP_DIR/mysqlx-out.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp
--remove_file $MYSQL_TMP_DIR/mysqlx-out.tmp

--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
-- "2 more than two args"
Mysqlx.Sql.StmtExecute {
  namespace: "xplugin"
  stmt: "create_collection"
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "xplugintest"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "table3"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "table4"
      }
    }
  }
}
-->expecterror ER_X_CMD_NUM_ARGUMENTS
-->recvresult
EOF

--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp

--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
-- "3 invalid namespace "
Mysqlx.Sql.StmtExecute {
  namespace: "Invalid"
  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"
      }
    }
  }
}
## error
-->expecterror ER_X_INVALID_NAMESPACE
-->recvresult
EOF

--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp


--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
-- "Non existing database "
Mysqlx.Sql.StmtExecute {
  namespace: "xplugin"
  stmt: "create_collection"
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "non_existing"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "table2"
      }
    }
  }
}
## error
-->expecterror ER_BAD_DB_ERROR
-->recvresult
EOF

--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp  2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp

--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
-- "NULL Table name "
Mysqlx.Sql.StmtExecute {
  namespace: "xplugin"
  stmt: "create_collection"
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "xplugintest"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_NULL
    }
  }
}
## error
-->expecterror ER_X_CMD_ARGUMENT_TYPE
-->recvresult
EOF

--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp



--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
-- "Invaild parameter in args"
Mysqlx.Sql.StmtExecute {
  namespace: "xplugin"
  stmt: "create_collection"
  args {
    type: OBJECT
    scalar {
      type: V_STRING
      v_string {
        value: "xplugintest"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "table3"
      }
    }
  }
}
## error
-->expecterror ER_X_CMD_ARGUMENT_TYPE
-->recvresult
EOF

--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp

--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
-- "Create table with existing name"
Mysqlx.Sql.StmtExecute {
  namespace: "xplugin"
  stmt: "create_collection"
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "xplugintest"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "table1"
      }
    }
  }
}
## error
-->expecterror ER_TABLE_EXISTS_ERROR
-->recvresult
EOF

--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp



--write_file $MYSQL_TMP_DIR/mysqlx-in.tmp
## Cleanup
-->sql
DROP DATABASE IF EXISTS xplugintest;
DROP DATABASE IF EXISTS xplugintest_1;
-->endsql
EOF

--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp


# Try run create in parallel from two mysqlxtest
# input file include xmessage and sql for create
perl;
 my $dir = $ENV{'MYSQL_TMP_DIR'};
 open ( OUTPUT, ">$dir/mysqlx-in.tmp") ;
 $message = <<"END_MESSAGE";
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: "table_name"
      }
    }
  }
  namespace: "xplugin"
}
END_MESSAGE

 print OUTPUT "-->sql\n";
 print OUTPUT "CREATE DATABASE IF NOT EXISTS xplugintest;\n";
 print OUTPUT "USE xplugintest;\n";
 print OUTPUT "CREATE TABLE IF NOT EXISTS test_table ( col1 INT );\n";

 print OUTPUT "-->endsql\n";
 for ($i=1;$i<=30;$i++) {
    if ($i%5 == 0) {
       print OUTPUT "-->expecterror ER_SUCCESS,ER_TABLE_EXISTS_ERROR\n";
       print OUTPUT "-->sql\n";
       print OUTPUT "CREATE TABLE tab_".$i." (_id VARCHAR(32) GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(doc, '$._id'))) STORED NOT NULL,doc JSON ); ". "\n";
       print OUTPUT "-->endsql\n";
    }else {
       $str = $message;
       $replace = "tab_".$i;
       $find = "table_name";
       $str =~ s/$find/$replace/g;
       print OUTPUT "$str\n";
       print OUTPUT "-->expecterror ER_SUCCESS,ER_TABLE_EXISTS_ERROR\n";
       print OUTPUT "-->recvresult\n";
    }
 }
 print OUTPUT "-->sql\n";
 print OUTPUT "INSERT INTO xplugintest.test_table VALUES (1);\n";
 print OUTPUT "-->endsql\n";
 close (OUTPUT);
EOF
--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp >$MYSQL_TMP_DIR/mysqlx-out.tmp 2>&1 &
--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp >$MYSQL_TMP_DIR/mysqlx-out2.tmp 2>&1
let $wait_condition= select count(*)=2 from xplugintest.test_table;
--source include/wait_condition.inc
DROP DATABASE xplugintest;
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp
--remove_file $MYSQL_TMP_DIR/mysqlx-out2.tmp
--remove_file $MYSQL_TMP_DIR/mysqlx-out.tmp


perl;
 my $dir = $ENV{'MYSQL_TMP_DIR'};
 open ( OUTPUT, ">$dir/mysqlx-in.tmp") ;
 $message = <<"END_MESSAGE";
Mysqlx.Sql.StmtExecute {
  stmt: "ensure_collection"
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "xplugintest"
      }
    }
  }
  args {
    type: SCALAR
    scalar {
      type: V_STRING
      v_string {
        value: "table_name"
      }
    }
  }
  namespace: "xplugin"
}
END_MESSAGE

 print OUTPUT "-->sql\n";
 print OUTPUT "CREATE DATABASE IF NOT EXISTS xplugintest;\n";
 print OUTPUT "USE xplugintest;\n";
 print OUTPUT "CREATE TABLE IF NOT EXISTS test_table ( col1 INT );\n";

 print OUTPUT "-->endsql\n";
 for ($i=1;$i<=30;$i++) {
    if ($i%5 == 0) {
       print OUTPUT "-->expecterror ER_SUCCESS,ER_TABLE_EXISTS_ERROR\n";
       print OUTPUT "-->sql\n";
       print OUTPUT "CREATE TABLE tab_".$i." (_id VARCHAR(32) GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(doc, '$._id'))) STORED NOT NULL,doc JSON ); ". "\n";
       print OUTPUT "-->endsql\n";
    }else {
       $str = $message;
       $replace = "tab_".$i;
       $find = "table_name";
       $str =~ s/$find/$replace/g;
       print OUTPUT "$str\n";
       print OUTPUT "-->expecterror ER_SUCCESS,ER_TABLE_EXISTS_ERROR\n";
       print OUTPUT "-->recvresult\n";
    }
 }
 print OUTPUT "-->sql\n";
 print OUTPUT "INSERT INTO xplugintest.test_table VALUES (1);\n";
 print OUTPUT "-->endsql\n";
 close (OUTPUT);
EOF
--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp >$MYSQL_TMP_DIR/mysqlx-out.tmp 2>&1 &
--exec $MYSQLXTEST -u root --password='' --file=$MYSQL_TMP_DIR/mysqlx-in.tmp >$MYSQL_TMP_DIR/mysqlx-out2.tmp 2>&1
let $wait_condition= select count(*)=2 from xplugintest.test_table;
--source include/wait_condition.inc
DROP DATABASE xplugintest;
--remove_file $MYSQL_TMP_DIR/mysqlx-in.tmp
--remove_file $MYSQL_TMP_DIR/mysqlx-out2.tmp
--remove_file $MYSQL_TMP_DIR/mysqlx-out.tmp

#
## Postamble
UNINSTALL PLUGIN mysqlx;


Man Man