summaryrefslogtreecommitdiff
path: root/storage/connect/mysql-test
diff options
context:
space:
mode:
authorOlivier Bertrand <bertrandop@gmail.com>2015-07-16 11:05:20 +0200
committerOlivier Bertrand <bertrandop@gmail.com>2015-07-16 11:05:20 +0200
commita392c79552f1a728426b6664f434fe818a894e03 (patch)
tree0cc937900bf939288af13cf2c3acffdf016fa319 /storage/connect/mysql-test
parent3a9a3b98b729b9095e6f24ff0595299ad2b3d24a (diff)
downloadmariadb-git-a392c79552f1a728426b6664f434fe818a894e03.tar.gz
Fix and Enhance remote indexing:
- Apply to ODBC tables as well as MYSQL tables - Fix and enhance the CheckCond routine Make ReadKey and MakeKeyWhere handle all conditions modified: storage/connect/.gitattributes modified: storage/connect/.gitignore modified: storage/connect/connect.cc modified: storage/connect/connect.h modified: storage/connect/ha_connect.cc modified: storage/connect/ha_connect.h modified: storage/connect/mycat.cc modified: storage/connect/tabmysql.cpp modified: storage/connect/tabmysql.h modified: storage/connect/tabodbc.cpp modified: storage/connect/tabodbc.h modified: storage/connect/xobject.cpp modified: storage/connect/xobject.h modified: storage/connect/xtable.h Add some new tests: storage/connect/mysql-test/connect/r/endian.result storage/connect/mysql-test/connect/r/mysql_index.result storage/connect/mysql-test/connect/t/endian.test storage/connect/mysql-test/connect/t/mysql_index.test
Diffstat (limited to 'storage/connect/mysql-test')
-rw-r--r--storage/connect/mysql-test/connect/r/endian.result105
-rw-r--r--storage/connect/mysql-test/connect/r/mysql_index.result114
-rw-r--r--storage/connect/mysql-test/connect/t/endian.test88
-rw-r--r--storage/connect/mysql-test/connect/t/mysql_index.test66
4 files changed, 373 insertions, 0 deletions
diff --git a/storage/connect/mysql-test/connect/r/endian.result b/storage/connect/mysql-test/connect/r/endian.result
new file mode 100644
index 00000000000..a4c81e43b6b
--- /dev/null
+++ b/storage/connect/mysql-test/connect/r/endian.result
@@ -0,0 +1,105 @@
+SET time_zone='+00:00';
+#
+# Testing little endian table
+#
+CREATE TABLE t1
+(
+fig INT(4) NOT NULL FIELD_FORMAT='C',
+name CHAR(10) NOT NULL,
+birth DATE NOT NULL FIELD_FORMAT='L',
+id CHAR(5) NOT NULL FIELD_FORMAT='L2',
+salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='LF',
+dept INT(4) NOT NULL FIELD_FORMAT='L2'
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.dat';
+SELECT * FROM t1;
+fig name birth id salary dept
+5500 ARCHIBALD 1980-01-25 3789 4380.50 318
+123 OLIVER 1953-08-10 23456 3400.68 2158
+3123 FOO 2002-07-23 888 0.00 318
+INSERT INTO t1 VALUES (5555,'RONALD','1980-02-26','3333',4444.44,555);
+SELECT * FROM t1;
+fig name birth id salary dept
+5500 ARCHIBALD 1980-01-25 3789 4380.50 318
+123 OLIVER 1953-08-10 23456 3400.68 2158
+3123 FOO 2002-07-23 888 0.00 318
+5555 RONALD 1980-02-26 3333 4444.44 555
+DROP TABLE t1;
+CREATE TABLE t1
+(
+fig INT(4) NOT NULL FIELD_FORMAT='C',
+name CHAR(10) NOT NULL,
+birth DATE NOT NULL,
+id CHAR(5) NOT NULL FIELD_FORMAT='S',
+salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='F',
+dept INT(4) NOT NULL FIELD_FORMAT='S'
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.dat' OPTION_LIST='Endian=Little';
+SELECT * FROM t1;
+fig name birth id salary dept
+5500 ARCHIBALD 1980-01-25 3789 4380.50 318
+123 OLIVER 1953-08-10 23456 3400.68 2158
+3123 FOO 2002-07-23 888 0.00 318
+5555 RONALD 1980-02-26 3333 4444.44 555
+#
+# Testing big endian table
+#
+CREATE TABLE t2 (
+fig INT(4) NOT NULL FIELD_FORMAT='C',
+name CHAR(10) NOT NULL,
+birth DATE NOT NULL FIELD_FORMAT='B',
+id CHAR(5) NOT NULL FIELD_FORMAT='BS',
+salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='BF',
+dept INT(4) NOT NULL FIELD_FORMAT='B2'
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.bin';
+INSERT INTO t2 SELECT * FROM t1;
+SELECT * FROM t2;
+fig name birth id salary dept
+5500 ARCHIBALD 1980-01-25 3789 4380.50 318
+123 OLIVER 1953-08-10 23456 3400.68 2158
+3123 FOO 2002-07-23 888 0.00 318
+5555 RONALD 1980-02-26 3333 4444.44 555
+DROP TABLE t2;
+CREATE TABLE t2 (
+fig INT(4) NOT NULL FIELD_FORMAT='C',
+name CHAR(10) NOT NULL,
+birth DATE NOT NULL,
+id CHAR(5) NOT NULL FIELD_FORMAT='S',
+salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='F',
+dept INT(4) NOT NULL FIELD_FORMAT='2'
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.bin' OPTION_LIST='Endian=Big';
+SELECT * FROM t2;
+fig name birth id salary dept
+5500 ARCHIBALD 1980-01-25 3789 4380.50 318
+123 OLIVER 1953-08-10 23456 3400.68 2158
+3123 FOO 2002-07-23 888 0.00 318
+5555 RONALD 1980-02-26 3333 4444.44 555
+DROP TABLE t2;
+CREATE TABLE t2 (
+fig CHAR(4) NOT NULL,
+name CHAR(10) NOT NULL,
+birth DATE NOT NULL,
+id SMALLINT(5) NOT NULL,
+salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='F',
+dept SMALLINT(4) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.bin' OPTION_LIST='Endian=Big';
+SELECT * FROM t2;
+fig name birth id salary dept
+5500 ARCHIBALD 1980-01-25 3789 4380.50 318
+123 OLIVER 1953-08-10 23456 3400.68 2158
+3123 FOO 2002-07-23 888 0.00 318
+5555 RONALD 1980-02-26 3333 4444.44 555
+DROP TABLE t2;
+CREATE TABLE t2 (
+fig INT(4) NOT NULL FIELD_FORMAT='C',
+name CHAR(10) NOT NULL,
+birth DATE NOT NULL FIELD_FORMAT='B',
+id CHAR(5) NOT NULL FIELD_FORMAT='BS',
+salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='BF',
+dept SMALLINT(4) NOT NULL FIELD_FORMAT='B'
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.bin';
+SELECT * FROM t2;
+fig name birth id salary dept
+5500 ARCHIBALD 1980-01-25 3789 4380.50 318
+123 OLIVER 1953-08-10 23456 3400.68 2158
+3123 FOO 2002-07-23 888 0.00 318
+5555 RONALD 1980-02-26 3333 4444.44 555
+DROP TABLE t1, t2;
diff --git a/storage/connect/mysql-test/connect/r/mysql_index.result b/storage/connect/mysql-test/connect/r/mysql_index.result
new file mode 100644
index 00000000000..4ebf10802ae
--- /dev/null
+++ b/storage/connect/mysql-test/connect/r/mysql_index.result
@@ -0,0 +1,114 @@
+#
+# Make remote table
+#
+CREATE TABLE t1 (
+id int(11) NOT NULL,
+msg char(100) DEFAULT NULL,
+PRIMARY KEY (id)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+INSERT INTO t1 VALUES(1,'Un'),(3,'Trois'),(5,'Cinq');
+INSERT INTO t1 VALUES(2,'Two'),(4,'Four'),(6,'Six');
+SELECT * FROM t1;
+id msg
+1 Un
+3 Trois
+5 Cinq
+2 Two
+4 Four
+6 Six
+#
+# Make local MYSQL table with indexed id column
+#
+CREATE TABLE t2 (
+id int(11) NOT NULL,
+msg char(100) DEFAULT NULL,
+PRIMARY KEY (id)
+) ENGINE=CONNECT DEFAULT CHARSET=latin1 TABLE_TYPE=MYSQL TABNAME=t1;
+#
+# Testing SELECT, etc.
+#
+SELECT * FROM t2;
+id msg
+1 Un
+3 Trois
+5 Cinq
+2 Two
+4 Four
+6 Six
+SELECT * FROM t2 WHERE id = 3;
+id msg
+3 Trois
+SELECT * FROM t2 WHERE id IN (2,4);
+id msg
+2 Two
+4 Four
+SELECT * FROM t2 WHERE id IN (2,4) AND msg = 'Two';
+id msg
+2 Two
+SELECT * FROM t2 WHERE id > 3;
+id msg
+5 Cinq
+4 Four
+6 Six
+SELECT * FROM t2 WHERE id >= 3;
+id msg
+3 Trois
+5 Cinq
+4 Four
+6 Six
+SELECT * FROM t2 WHERE id < 3;
+id msg
+1 Un
+2 Two
+SELECT * FROM t2 WHERE id < 3 OR id > 4;
+id msg
+1 Un
+2 Two
+5 Cinq
+6 Six
+SELECT * FROM t2 WHERE id <= 3;
+id msg
+1 Un
+2 Two
+3 Trois
+SELECT * FROM t2 WHERE id BETWEEN 3 AND 5;
+id msg
+3 Trois
+4 Four
+5 Cinq
+SELECT * FROM t2 WHERE id > 2 AND id < 6;
+id msg
+3 Trois
+4 Four
+5 Cinq
+SELECT * FROM t2 ORDER BY id;
+id msg
+1 Un
+2 Two
+3 Trois
+4 Four
+5 Cinq
+6 Six
+UPDATE t2 SET msg = 'Five' WHERE id = 5;
+Warnings:
+Note 1105 t1: 1 affected rows
+SELECT * FROM t2;
+id msg
+1 Un
+3 Trois
+5 Five
+2 Two
+4 Four
+6 Six
+DELETE FROM t2 WHERE id = 4;
+Warnings:
+Note 1105 t1: 1 affected rows
+SELECT * FROM t2;
+id msg
+1 Un
+3 Trois
+5 Five
+2 Two
+6 Six
+DROP TABLE t2;
+DROP TABLE t1;
diff --git a/storage/connect/mysql-test/connect/t/endian.test b/storage/connect/mysql-test/connect/t/endian.test
new file mode 100644
index 00000000000..e5f4a24f52d
--- /dev/null
+++ b/storage/connect/mysql-test/connect/t/endian.test
@@ -0,0 +1,88 @@
+let $MYSQLD_DATADIR= `select @@datadir`;
+
+--copy_file $MTR_SUITE_DIR/std_data/Testbal.dat $MYSQLD_DATADIR/test/Testbal.dat
+
+SET time_zone='+00:00';
+
+--echo #
+--echo # Testing little endian table
+--echo #
+CREATE TABLE t1
+(
+ fig INT(4) NOT NULL FIELD_FORMAT='C',
+ name CHAR(10) NOT NULL,
+ birth DATE NOT NULL FIELD_FORMAT='L',
+ id CHAR(5) NOT NULL FIELD_FORMAT='L2',
+ salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='LF',
+ dept INT(4) NOT NULL FIELD_FORMAT='L2'
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.dat';
+SELECT * FROM t1;
+INSERT INTO t1 VALUES (5555,'RONALD','1980-02-26','3333',4444.44,555);
+SELECT * FROM t1;
+
+DROP TABLE t1;
+CREATE TABLE t1
+(
+ fig INT(4) NOT NULL FIELD_FORMAT='C',
+ name CHAR(10) NOT NULL,
+ birth DATE NOT NULL,
+ id CHAR(5) NOT NULL FIELD_FORMAT='S',
+ salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='F',
+ dept INT(4) NOT NULL FIELD_FORMAT='S'
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.dat' OPTION_LIST='Endian=Little';
+SELECT * FROM t1;
+
+--echo #
+--echo # Testing big endian table
+--echo #
+CREATE TABLE t2 (
+ fig INT(4) NOT NULL FIELD_FORMAT='C',
+ name CHAR(10) NOT NULL,
+ birth DATE NOT NULL FIELD_FORMAT='B',
+ id CHAR(5) NOT NULL FIELD_FORMAT='BS',
+ salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='BF',
+ dept INT(4) NOT NULL FIELD_FORMAT='B2'
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.bin';
+INSERT INTO t2 SELECT * FROM t1;
+SELECT * FROM t2;
+
+DROP TABLE t2;
+CREATE TABLE t2 (
+ fig INT(4) NOT NULL FIELD_FORMAT='C',
+ name CHAR(10) NOT NULL,
+ birth DATE NOT NULL,
+ id CHAR(5) NOT NULL FIELD_FORMAT='S',
+ salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='F',
+ dept INT(4) NOT NULL FIELD_FORMAT='2'
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.bin' OPTION_LIST='Endian=Big';
+SELECT * FROM t2;
+
+DROP TABLE t2;
+CREATE TABLE t2 (
+ fig CHAR(4) NOT NULL,
+ name CHAR(10) NOT NULL,
+ birth DATE NOT NULL,
+ id SMALLINT(5) NOT NULL,
+ salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='F',
+ dept SMALLINT(4) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.bin' OPTION_LIST='Endian=Big';
+SELECT * FROM t2;
+
+DROP TABLE t2;
+CREATE TABLE t2 (
+ fig INT(4) NOT NULL FIELD_FORMAT='C',
+ name CHAR(10) NOT NULL,
+ birth DATE NOT NULL FIELD_FORMAT='B',
+ id CHAR(5) NOT NULL FIELD_FORMAT='BS',
+ salary DOUBLE(9,2) NOT NULL DEFAULT 0.00 FIELD_FORMAT='BF',
+ dept SMALLINT(4) NOT NULL FIELD_FORMAT='B'
+) ENGINE=CONNECT TABLE_TYPE=BIN BLOCK_SIZE=5 FILE_NAME='Testbal.bin';
+SELECT * FROM t2;
+
+DROP TABLE t1, t2;
+
+#
+# Clean up
+#
+--remove_file $MYSQLD_DATADIR/test/Testbal.dat
+--remove_file $MYSQLD_DATADIR/test/Testbal.bin
diff --git a/storage/connect/mysql-test/connect/t/mysql_index.test b/storage/connect/mysql-test/connect/t/mysql_index.test
new file mode 100644
index 00000000000..9a162b4d8e3
--- /dev/null
+++ b/storage/connect/mysql-test/connect/t/mysql_index.test
@@ -0,0 +1,66 @@
+-- source include/not_embedded.inc
+
+#
+# TODO: consider a possibility to run this test
+# against some remote MySQL server
+#
+
+let $PORT= `select @@port`;
+
+--disable_query_log
+--replace_result $PORT PORT
+--error 0,ER_UNKNOWN_ERROR
+--eval CREATE TABLE t1 (a INT) ENGINE=CONNECT TABLE_TYPE=MYSQL TABNAME='tx1' OPTION_LIST='host=localhost,user=root,port=$PORT'
+if (!`SELECT count(*) FROM INFORMATION_SCHEMA.TABLES
+ WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'
+ AND ENGINE='CONNECT'
+ AND CREATE_OPTIONS LIKE '%`table_type`=MySQL%'`)
+{
+ Skip Need MySQL support;
+}
+DROP TABLE t1;
+--enable_query_log
+
+--echo #
+--echo # Make remote table
+--echo #
+CREATE TABLE t1 (
+ id int(11) NOT NULL,
+ msg char(100) DEFAULT NULL,
+ PRIMARY KEY (id)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+INSERT INTO t1 VALUES(1,'Un'),(3,'Trois'),(5,'Cinq');
+INSERT INTO t1 VALUES(2,'Two'),(4,'Four'),(6,'Six');
+SELECT * FROM t1;
+
+--echo #
+--echo # Make local MYSQL table with indexed id column
+--echo #
+CREATE TABLE t2 (
+ id int(11) NOT NULL,
+ msg char(100) DEFAULT NULL,
+ PRIMARY KEY (id)
+) ENGINE=CONNECT DEFAULT CHARSET=latin1 TABLE_TYPE=MYSQL TABNAME=t1;
+
+--echo #
+--echo # Testing SELECT, etc.
+--echo #
+SELECT * FROM t2;
+SELECT * FROM t2 WHERE id = 3;
+SELECT * FROM t2 WHERE id IN (2,4);
+SELECT * FROM t2 WHERE id IN (2,4) AND msg = 'Two';
+SELECT * FROM t2 WHERE id > 3;
+SELECT * FROM t2 WHERE id >= 3;
+SELECT * FROM t2 WHERE id < 3;
+SELECT * FROM t2 WHERE id < 3 OR id > 4;
+SELECT * FROM t2 WHERE id <= 3;
+SELECT * FROM t2 WHERE id BETWEEN 3 AND 5;
+SELECT * FROM t2 WHERE id > 2 AND id < 6;
+SELECT * FROM t2 ORDER BY id;
+UPDATE t2 SET msg = 'Five' WHERE id = 5;
+SELECT * FROM t2;
+DELETE FROM t2 WHERE id = 4;
+SELECT * FROM t2;
+
+DROP TABLE t2;
+DROP TABLE t1;