polardbxengine/mysql-test/suite/x/t/delete_crud_o.test

1162 lines
23 KiB
Plaintext

########### ../t/delete_crud_o.test ###########
### #
### This test runs aims to run DELETE operation statements #
### variant with mysqlxtest client for Table and Document data models. #
### Test covers #
### - delete with different operators #
### - delete multiple rows #
### - status variable Mysqlx_crud_delete for number of Delete #
### requests received #
### #
########################################################################
#
--echo ==============================================
--echo CRUD DELETE SCENARIOS
--echo ==============================================
--echo
## Preamble
--echo ================================================================================
--echo PREAMBLE
--echo ================================================================================
--source include/xplugin_preamble.inc
create user deletecruduser@localhost identified by 'deletecruduser';
grant all on *.* to deletecruduser@localhost;
## TEST STARTS HERE
--echo ================================================================================
--echo TEST START
--echo ================================================================================
--write_file $MYSQL_TMP_DIR/mysqlx-delete_sql.tmp
-->sql
DROP SCHEMA if EXISTS mysqlxplugin;
CREATE SCHEMA mysqlxplugin DEFAULT CHARSET='utf8';
USE mysqlxplugin;
CREATE TABLE categories (
CategoryID int NOT NULL AUTO_INCREMENT,
CategoryName varchar(100),
CategoryDescription varchar(200),
CategoryIMEI tinyint,
CategoryDecimal decimal(5,2),
PRIMARY key (CategoryID)
);
INSERT INTO categories(CategoryID, CategoryName, CategoryDescription, CategoryIMEI, CategoryDecimal)
VALUES
(1,'Sports','Sports related category',1,235.15),
(2,'Entertaiment','Entertaiment related category',2,235.15),
(3, 'Home','Home related category',3,235.15),
(4, 'Kitchen','Kitchen related category',4,235.15),
(5, 'Garden','Garden related category',5,535.15),
(6, 'Toys','Toys related category',6,635.15);
CREATE TABLE extracategoryinfo (
extracategoryinfoID int NOT NULL AUTO_INCREMENT,
CategoryID int NOT NULL,
MainParentCategoryName varchar(100),
PRIMARY key (extracategoryinfoID)
);
INSERT INTO extracategoryinfo(extracategoryinfoID, CategoryID, MainParentCategoryName)
VALUES
(1,1,'People'),
(2,2,'People'),
(3,2,'House'),
(4,3,'House'),
(5,1,'People'),
(6,2,'People'),
(7,2,'House'),
(8,3,'House'),
(9,1,'People'),
(10,2,'House');
## SQL safe updates as 1 will allow to delete only when you use a key column in the wehere clause
SET SQL_SAFE_UPDATES = 1;
SHOW STATUS like 'Mysqlx_crud_delete';
-->endsql
-->sql
select * from mysqlxplugin.extracategoryinfo;
-->endsql
-->echo Delete with In, && operators
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "&&"
param {
type: OPERATOR
operator {
name: "in"
param {
type: IDENT
identifier {
name: "extracategoryinfoID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 3
}
}
}
}
param {
type: OPERATOR
operator {
name: "=="
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 2
}
}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin.extracategoryinfo;
SHOW STATUS like 'Mysqlx_crud_delete';
-->endsql
-->echo Delete with == operator
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "=="
param {
type: IDENT
identifier {
name: "extracategoryinfoID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin.extracategoryinfo;
SHOW STATUS like 'Mysqlx_crud_delete';
-->endsql
-->echo Error 1175 expected because of the safe mode = 1
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "=="
param {
type: IDENT
identifier {
name: "MainParentCategoryName"
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"People"}
}
}
}
}
}
#-- Mysqlx.Error
-->recv
-->echo Error 1175 expected because of the safe mode = 1
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "||"
param {
type: OPERATOR
operator {
name: "in"
param {
type: IDENT
identifier {
name: "MainParentCategoryName"
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"House"}
}
}
}
}
param {
type: OPERATOR
operator {
name: "in"
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 4
}
}
}
}
}
}
}
#-- Mysqlx.Error
-->recv
-->echo Error 1175 expected because of the safe mode = 1
Mysqlx.Crud.Delete {
collection {
name: "categories"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "=="
param {
type: IDENT
identifier {
name: "CategoryIMEI"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
}
}
#-- Mysqlx.Error
-->recv
-->sql
select * from mysqlxplugin.extracategoryinfo;
-->endsql
EOF
--exec $MYSQLXTEST -u deletecruduser --password='deletecruduser' --file=$MYSQL_TMP_DIR/mysqlx-delete_sql.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-delete_sql.tmp
--echo .
--echo #---------- START TEST WITH SAFE MODE OFF ----------#
--echo .
## ******************************************
## 2. Start test with safe mode off |
## |
## ******************************************
--write_file $MYSQL_TMP_DIR/mysqlx-delete_sql_safemode_0.tmp
-->sql
USE mysqlxplugin;
## SQL safe updates as 0 will allow to delete without the need to use a key column
SET SQL_SAFE_UPDATES = 0;
select * from mysqlxplugin.extracategoryinfo;
-->endsql
-->echo Delete all
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "mysqlxplugin"
}
data_model: TABLE
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin.extracategoryinfo;
-->endsql
-->sql
INSERT INTO extracategoryinfo(extracategoryinfoID, CategoryID, MainParentCategoryName)
VALUES
(1,1,'People'),
(2,2,'People'),
(3,2,'House'),
(4,3,'House'),
(5,1,'People'),
(6,2,'People2'),
(7,2,'House2'),
(8,3,'House2'),
(9,9,'People2'),
(10,10,'House2'),
(11,11,'House3'),
(12,12,'House4'),
(13,13,'House5'),
(14,14,'House6');
-->endsql
-->sql
select * from mysqlxplugin.extracategoryinfo;
-->endsql
-->echo Delete works ok because of the safe mode = 0
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "=="
param {
type: IDENT
identifier {
name: "MainParentCategoryName"
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"People"}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin.extracategoryinfo;
SHOW STATUS like 'Mysqlx_crud_delete';
-->endsql
-->echo Delete with || operator and in
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "||"
param {
type: OPERATOR
operator {
name: "in"
param {
type: IDENT
identifier {
name: "MainParentCategoryName"
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"House"}
}
}
}
}
param {
type: OPERATOR
operator {
name: "in"
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 4
}
}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin.extracategoryinfo;
SHOW STATUS like 'Mysqlx_crud_delete';
-->endsql
-->echo Delete with || operator and not in
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "||"
param {
type: OPERATOR
operator {
name: "not_in"
param {
type: IDENT
identifier {
name: "MainParentCategoryName"
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"House"}
}
}
}
}
param {
type: OPERATOR
operator {
name: "in"
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 8
}
}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin.extracategoryinfo;
select * from mysqlxplugin.categories;
SHOW STATUS like 'Mysqlx_crud_delete';
-->endsql
-->echo Delete with != operator
Mysqlx.Crud.Delete {
collection {
name: "categories"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "!="
param {
type: IDENT
identifier {
name: "CategoryIMEI"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 1
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin.categories;
select * from mysqlxplugin.extracategoryinfo;
INSERT INTO extracategoryinfo(extracategoryinfoID, CategoryID, MainParentCategoryName)
VALUES
(9,9,'People'),
(10,10,'People'),
(11,11,'People'),
(12,12,'House'),
(13,13,'House'),
(14,14,'House');
select * from mysqlxplugin.extracategoryinfo;
-->endsql
-->echo Delete with > and < operators
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "&&"
param {
type: OPERATOR
operator {
name: "<"
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 11
}
}
}
}
param {
type: OPERATOR
operator {
name: ">"
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 9
}
}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin.extracategoryinfo;
SHOW STATUS like 'Mysqlx_crud_delete';
-->endsql
-->echo Delete with >= and <= operators
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "&&"
param {
type: OPERATOR
operator {
name: "<="
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 14
}
}
}
}
param {
type: OPERATOR
operator {
name: ">="
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 13
}
}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin.extracategoryinfo;
SHOW STATUS like 'Mysqlx_crud_delete';
-->endsql
-->echo Delete with wrong Schema
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "noavailableschema"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "&&"
param {
type: OPERATOR
operator {
name: "<="
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 14
}
}
}
}
param {
type: OPERATOR
operator {
name: ">="
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 13
}
}
}
}
}
}
}
#-- Mysqlx.Error
-->recv
-->echo Delete with wrong Table
Mysqlx.Crud.Delete {
collection {
name: "notavailabletable"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "&&"
param {
type: OPERATOR
operator {
name: "<="
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 14
}
}
}
}
param {
type: OPERATOR
operator {
name: ">="
param {
type: IDENT
identifier {
name: "CategoryID"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 13
}
}
}
}
}
}
}
#-- Mysqlx.Error
-->recv
-->echo Delete with wrong Column
Mysqlx.Crud.Delete {
collection {
name: "extracategoryinfo"
schema: "mysqlxplugin"
}
data_model: TABLE
criteria {
type: OPERATOR
operator {
name: "&&"
param {
type: OPERATOR
operator {
name: "<="
param {
type: IDENT
identifier {
name: "notavailablecolumn"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 14
}
}
}
}
param {
type: OPERATOR
operator {
name: ">="
param {
type: IDENT
identifier {
name: "notavailablecolumn"
}
}
param {
type: LITERAL
literal {
type: V_SINT
v_signed_int: 13
}
}
}
}
}
}
}
#-- Mysqlx.Error
-->recv
EOF
--exec $MYSQLXTEST -u deletecruduser --password='deletecruduser' --file=$MYSQL_TMP_DIR/mysqlx-delete_sql_safemode_0.tmp 2>&1
--remove_file $MYSQL_TMP_DIR/mysqlx-delete_sql_safemode_0.tmp
## ******************************************
## 3. Delete Collection Statements |
## |
## ******************************************
--echo .
--echo #---------- START COLLECTION TESTING----------#
--echo .
CREATE SCHEMA mysqlxplugin_coll;
--write_file $MYSQL_TMP_DIR/mysqlx-delete_collection_CRUD.tmp
-->stmtadmin create_collection {"schema":"mysqlxplugin_coll","name":"main_collection"}
-->recvresult
-->sql
insert into mysqlxplugin_coll.main_collection (doc) values ('{"_id": "1", "name": "Omar", "Last_Name":"Andrei"}');
insert into mysqlxplugin_coll.main_collection (doc) values ('{"_id": "2", "name": "Alfonso", "Last_Name":"Pavluchenko"}');
insert into mysqlxplugin_coll.main_collection (doc) values ('{"_id": "3", "name": "Rodrigo", "Last_Name":"Kernel"}');
insert into mysqlxplugin_coll.main_collection (doc) values ('{"_id": "4", "name": "Omar", "Last_Name":"Kerball"}');
insert into mysqlxplugin_coll.main_collection (doc) values ('{"_id": "5", "name": "Omar", "Last_Name":"Lopez"}');
insert into mysqlxplugin_coll.main_collection (doc) values ('{"_id": "6", "name": "Javier", "Last_Name":"Torres"}');
select * from mysqlxplugin_coll.main_collection;
-->endsql
-->echo Delete collection rows with in Operator and based in ID
Mysqlx.Crud.Delete {
collection {
name: "main_collection"
schema: "mysqlxplugin_coll"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "in"
param {
type: IDENT identifier { name: "_id" }
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"1"}
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"3"}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin_coll.main_collection;
-->endsql
-->echo Delete collection row with == Operator
Mysqlx.Crud.Delete {
collection {
name: "main_collection"
schema: "mysqlxplugin_coll"
}
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_OCTETS
v_octets {value:"Pavluchenko"}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin_coll.main_collection;
-->endsql
-->echo Delete collection row with != Operator
Mysqlx.Crud.Delete {
collection {
name: "main_collection"
schema: "mysqlxplugin_coll"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "!="
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "name"
}
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"Omar"}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin_coll.main_collection;
-->endsql
-->echo Delete collection row with not in Operator
Mysqlx.Crud.Delete {
collection {
name: "main_collection"
schema: "mysqlxplugin_coll"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "not_in"
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "Last_Name"
}
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"Lopez"}
}
}
}
}
}
#-- Mysqlx.Sql.StmtExecuteOk
-->recvresult
-->sql
select * from mysqlxplugin_coll.main_collection;
-->endsql
-->echo Delete collection wrong schema
Mysqlx.Crud.Delete {
collection {
name: "main_collection"
schema: "not_available_schema"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "not_in"
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "Last_Name"
}
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"Lopez"}
}
}
}
}
}
#-- Mysqlx.Error
-->recv
-->echo Delete collection wrong collection
Mysqlx.Crud.Delete {
collection {
name: "not_available_collection"
schema: "mysqlxplugin_coll"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "not_in"
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "Last_Name"
}
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"Lopez"}
}
}
}
}
}
#-- Mysqlx.Error
-->recv
-->echo Delete collection wrong member
Mysqlx.Crud.Delete {
collection {
name: "main_collection"
schema: "mysqlxplugin_coll"
}
data_model: DOCUMENT
criteria {
type: OPERATOR
operator {
name: "=="
param {
type: IDENT
identifier {
document_path {
type: MEMBER
value: "notavailablemember"
}
}
}
param {
type: LITERAL
literal {
type: V_OCTETS
v_octets {value:"Lopez"}
}
}
}
}
}
#-- No rows affected
-->recvresult
## Cleanup
-->echo ================================================================================
-->echo CLEAN UP
-->echo ================================================================================
-->sql
DROP USER deletecruduser@localhost;
SET SQL_SAFE_UPDATES = 1;
-->endsql
EOF
--exec $MYSQLXTEST -u deletecruduser --password='deletecruduser' --file=$MYSQL_TMP_DIR/mysqlx-delete_collection_CRUD.tmp 2>&1
## Cleanup
--remove_file $MYSQL_TMP_DIR/mysqlx-delete_collection_CRUD.tmp
DROP SCHEMA if EXISTS mysqlxplugin;
DROP SCHEMA if EXISTS mysqlxplugin_coll;