diff options
author | Olivier Bertrand <bertrandop@gmail.com> | 2013-11-11 13:00:39 +0100 |
---|---|---|
committer | Olivier Bertrand <bertrandop@gmail.com> | 2013-11-11 13:00:39 +0100 |
commit | eca84a9b1837304ce4be50994ef7077b31ccf50c (patch) | |
tree | 93b406318c6add4f93cf93ee9fb96fd15cea970f /storage/connect/mysql-test | |
parent | e5c589a8da02211e3b0ac9ad8a785c4669b63fda (diff) | |
download | mariadb-git-eca84a9b1837304ce4be50994ef7077b31ccf50c.tar.gz |
- Add (limited) support for UPDATE and DELETE to ODBC tables
(also provide the possibility to issue NOTE warnings)
modified:
storage/connect/connect.cc
storage/connect/ha_connect.cc
storage/connect/ha_connect.h
storage/connect/odbconn.cpp
storage/connect/odbconn.h
storage/connect/plgdbsem.h
storage/connect/tabodbc.cpp
storage/connect/tabodbc.h
- Return proper error number when modifying read only tables
modified:
storage/connect/connect.cc
storage/connect/ha_connect.cc
storage/connect/ha_connect.h
storage/connect/mysql-test/connect/r/bin.result
storage/connect/mysql-test/connect/r/csv.result
storage/connect/mysql-test/connect/r/dbf.result
storage/connect/mysql-test/connect/r/fix.result
storage/connect/mysql-test/connect/r/ini.result
storage/connect/mysql-test/connect/r/vec.result
storage/connect/mysql-test/connect/t/bin.test
storage/connect/mysql-test/connect/t/csv.test
storage/connect/mysql-test/connect/t/dbf.test
storage/connect/mysql-test/connect/t/fix.test
storage/connect/mysql-test/connect/t/ini.test
storage/connect/mysql-test/connect/t/vec.test
storage/connect/table.cpp
storage/connect/taboccur.cpp
storage/connect/tabpivot.cpp
storage/connect/tabutil.cpp
storage/connect/tabwmi.cpp
storage/connect/tabxcl.cpp
Diffstat (limited to 'storage/connect/mysql-test')
-rw-r--r-- | storage/connect/mysql-test/connect/r/bin.result | 4 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/r/csv.result | 10 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/r/dbf.result | 8 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/r/fix.result | 8 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/r/ini.result | 8 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/r/vec.result | 8 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/t/bin.test | 154 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/t/csv.test | 370 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/t/dbf.test | 1018 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/t/fix.test | 216 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/t/ini.test | 312 | ||||
-rw-r--r-- | storage/connect/mysql-test/connect/t/vec.test | 160 |
12 files changed, 1138 insertions, 1138 deletions
diff --git a/storage/connect/mysql-test/connect/r/bin.result b/storage/connect/mysql-test/connect/r/bin.result index c64b270b538..10deb54cb2e 100644 --- a/storage/connect/mysql-test/connect/r/bin.result +++ b/storage/connect/mysql-test/connect/r/bin.result @@ -48,7 +48,7 @@ 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 READONLY=Yes FILE_NAME='Testbal.dat'; INSERT INTO t1 VALUES (7777,'BILL','1973-06-30',4444,5555.555,777); -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only ALTER TABLE t1 READONLY=NO; Warnings: Warning 1105 The current version of CONNECT did not check what you changed in ALTER. Use at your own risk @@ -84,7 +84,7 @@ t1 CREATE TABLE `t1` ( `dept` int(4) NOT NULL `FIELD_FORMAT`='S' ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`=BIN `FILE_NAME`='Testbal.dat' `READONLY`=YES INSERT INTO t1 VALUES (7777,'BILL','1973-06-30',4444,5555.555,777); -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only DROP TABLE t1; # # Testing that the underlying file is created diff --git a/storage/connect/mysql-test/connect/r/csv.result b/storage/connect/mysql-test/connect/r/csv.result index b2498326edb..94fd95a5d83 100644 --- a/storage/connect/mysql-test/connect/r/csv.result +++ b/storage/connect/mysql-test/connect/r/csv.result @@ -50,13 +50,13 @@ children SMALLINT(2) NOT NULL ) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='people.csv' HEADER=1 SEP_CHAR=';' QUOTED=1 READONLY=yes; INSERT INTO t1 VALUES ('BILL','1973-06-30',5); -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only UPDATE t1 SET children=6 WHERE name='BILL'; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only DELETE FROM t1 WHERE name='BILL'; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only TRUNCATE TABLE t1; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only SELECT * FROM t1; name birth children Archibald 2001-05-17 3 @@ -90,7 +90,7 @@ t1 CREATE TABLE `t1` ( `children` smallint(2) NOT NULL ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`=CSV `FILE_NAME`='people.csv' `HEADER`=1 `SEP_CHAR`=';' `QUOTED`=1 `READONLY`=1 INSERT INTO t1 VALUES ('BILL','1973-06-30',5); -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only SELECT * FROM t1; name birth children Archibald 2001-05-17 3 diff --git a/storage/connect/mysql-test/connect/r/dbf.result b/storage/connect/mysql-test/connect/r/dbf.result index cbe4f4db620..c7bb5739e75 100644 --- a/storage/connect/mysql-test/connect/r/dbf.result +++ b/storage/connect/mysql-test/connect/r/dbf.result @@ -77,13 +77,13 @@ t1 CREATE TABLE `t1` ( `a` int(11) NOT NULL ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`=DBF `FILE_NAME`='t1.dbf' `READONLY`=Yes INSERT INTO t1 VALUES (30); -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only UPDATE t1 SET a=30 WHERE a=10; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only DELETE FROM t1 WHERE a=10; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only TRUNCATE TABLE t1; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only ALTER TABLE t1 READONLY=NO; Warnings: Warning 1105 The current version of CONNECT did not check what you changed in ALTER. Use at your own risk diff --git a/storage/connect/mysql-test/connect/r/fix.result b/storage/connect/mysql-test/connect/r/fix.result index c8f51abe961..c218561c3aa 100644 --- a/storage/connect/mysql-test/connect/r/fix.result +++ b/storage/connect/mysql-test/connect/r/fix.result @@ -30,13 +30,13 @@ t1 CREATE TABLE `t1` ( `id` int(11) NOT NULL ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`=FIX `FILE_NAME`='t1.txt' `READONLY`=1 INSERT INTO t1 VALUES (20); -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only UPDATE t1 SET id=20 WHERE id=10; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only DELETE FROM t1 WHERE id=10; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only TRUNCATE TABLE t1; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only ALTER TABLE t1 READONLY=0; Warnings: Warning 1105 The current version of CONNECT did not check what you changed in ALTER. Use at your own risk diff --git a/storage/connect/mysql-test/connect/r/ini.result b/storage/connect/mysql-test/connect/r/ini.result index 83ba98fbd84..fa03435323e 100644 --- a/storage/connect/mysql-test/connect/r/ini.result +++ b/storage/connect/mysql-test/connect/r/ini.result @@ -194,13 +194,13 @@ t1 CREATE TABLE `t1` ( `c2` char(60) DEFAULT NULL ) ENGINE=CONNECT DEFAULT CHARSET=latin1 `TABLE_TYPE`=INI `FILE_NAME`='t1.ini' `READONLY`=1 INSERT INTO t1 VALUES ('US',40); -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only UPDATE t1 SET c2=20 WHERE c2=10; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only DELETE FROM t1 WHERE c2=10; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only TRUNCATE TABLE t1; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only ALTER TABLE t1 READONLY=0; Warnings: Warning 1105 The current version of CONNECT did not check what you changed in ALTER. Use at your own risk diff --git a/storage/connect/mysql-test/connect/r/vec.result b/storage/connect/mysql-test/connect/r/vec.result index 65513dc07db..926c0f2f4c6 100644 --- a/storage/connect/mysql-test/connect/r/vec.result +++ b/storage/connect/mysql-test/connect/r/vec.result @@ -103,13 +103,13 @@ t1 CREATE TABLE `t1` ( `b` char(10) NOT NULL ) ENGINE=CONNECT DEFAULT CHARSET=latin1 MAX_ROWS=10 `TABLE_TYPE`=VEC `FILE_NAME`='t1vec' `READONLY`=yes INSERT INTO t1 VALUES (4,'test04'); -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only UPDATE t1 SET b='test04' WHERE a=3; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only DELETE FROM t1 WHERE a=3; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only TRUNCATE TABLE t1; -ERROR HY000: Got error 174 'Cannot modify this read/only protected table' from CONNECT +ERROR HY000: Table 't1' is read only ALTER TABLE t1 READONLY=no; Warnings: Warning 1105 The current version of CONNECT did not check what you changed in ALTER. Use at your own risk diff --git a/storage/connect/mysql-test/connect/t/bin.test b/storage/connect/mysql-test/connect/t/bin.test index a9dab32987e..6ef0ffc75ec 100644 --- a/storage/connect/mysql-test/connect/t/bin.test +++ b/storage/connect/mysql-test/connect/t/bin.test @@ -1,77 +1,77 @@ -let $MYSQLD_DATADIR= `select @@datadir`; - ---copy_file $MTR_SUITE_DIR/std_data/Testbal.dat $MYSQLD_DATADIR/test/Testbal.dat - ---echo # ---echo # Testing errors ---echo # -CREATE TABLE t1 -( - ID INT NOT NULL -) Engine=CONNECT TABLE_TYPE=BIN FILE_NAME='nonexistent.txt'; ---replace_regex /on .*test.nonexistent.txt/on DATADIR\/test\/nonexistent.txt/ -# TODO: check why this is needed for Windows ---replace_result Open(rt) Open(rb) -SELECT * FROM t1; -DROP TABLE t1; - -SET time_zone='+00:00'; -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'; -SELECT * FROM t1; - ---error ER_GET_ERRMSG -INSERT INTO t1 VALUES (55555,'RONALD','1980-02-26','3333',4444.44,555); -INSERT INTO t1 VALUES (5555,'RONALD','1980-02-26','3333',4444.44,555); -SELECT * FROM t1; - -DROP TABLE t1; - ---echo # ---echo # Testing READONLY tables ---echo # -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 READONLY=Yes FILE_NAME='Testbal.dat'; ---error ER_GET_ERRMSG -INSERT INTO t1 VALUES (7777,'BILL','1973-06-30',4444,5555.555,777); -ALTER TABLE t1 READONLY=NO; -SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES (7777,'BILL','1973-06-30',4444,5555.555,777); -SELECT * FROM t1; -ALTER TABLE t1 READONLY=YES; -SHOW CREATE TABLE t1; ---error ER_GET_ERRMSG -INSERT INTO t1 VALUES (7777,'BILL','1973-06-30',4444,5555.555,777); -DROP TABLE t1; - - ---echo # ---echo # Testing that the underlying file is created ---echo # -CREATE TABLE t1 -( - c CHAR(4) NOT NULL FIELD_FORMAT='C' -) ENGINE=CONNECT TABLE_TYPE=BIN FILE_NAME='bin2.dat'; -INSERT INTO t1 VALUES (10),(20),(300),(4000); -SELECT * FROM t1; -DROP TABLE t1; - -# -# Clean up -# ---remove_file $MYSQLD_DATADIR/test/Testbal.dat ---remove_file $MYSQLD_DATADIR/test/bin2.dat +let $MYSQLD_DATADIR= `select @@datadir`;
+
+--copy_file $MTR_SUITE_DIR/std_data/Testbal.dat $MYSQLD_DATADIR/test/Testbal.dat
+
+--echo #
+--echo # Testing errors
+--echo #
+CREATE TABLE t1
+(
+ ID INT NOT NULL
+) Engine=CONNECT TABLE_TYPE=BIN FILE_NAME='nonexistent.txt';
+--replace_regex /on .*test.nonexistent.txt/on DATADIR\/test\/nonexistent.txt/
+# TODO: check why this is needed for Windows
+--replace_result Open(rt) Open(rb)
+SELECT * FROM t1;
+DROP TABLE t1;
+
+SET time_zone='+00:00';
+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';
+SELECT * FROM t1;
+
+--error ER_GET_ERRMSG
+INSERT INTO t1 VALUES (55555,'RONALD','1980-02-26','3333',4444.44,555);
+INSERT INTO t1 VALUES (5555,'RONALD','1980-02-26','3333',4444.44,555);
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+--echo #
+--echo # Testing READONLY tables
+--echo #
+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 READONLY=Yes FILE_NAME='Testbal.dat';
+--error ER_OPEN_AS_READONLY
+INSERT INTO t1 VALUES (7777,'BILL','1973-06-30',4444,5555.555,777);
+ALTER TABLE t1 READONLY=NO;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (7777,'BILL','1973-06-30',4444,5555.555,777);
+SELECT * FROM t1;
+ALTER TABLE t1 READONLY=YES;
+SHOW CREATE TABLE t1;
+--error ER_OPEN_AS_READONLY
+INSERT INTO t1 VALUES (7777,'BILL','1973-06-30',4444,5555.555,777);
+DROP TABLE t1;
+
+
+--echo #
+--echo # Testing that the underlying file is created
+--echo #
+CREATE TABLE t1
+(
+ c CHAR(4) NOT NULL FIELD_FORMAT='C'
+) ENGINE=CONNECT TABLE_TYPE=BIN FILE_NAME='bin2.dat';
+INSERT INTO t1 VALUES (10),(20),(300),(4000);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+#
+# Clean up
+#
+--remove_file $MYSQLD_DATADIR/test/Testbal.dat
+--remove_file $MYSQLD_DATADIR/test/bin2.dat
diff --git a/storage/connect/mysql-test/connect/t/csv.test b/storage/connect/mysql-test/connect/t/csv.test index 685ac434df7..a21686d8a08 100644 --- a/storage/connect/mysql-test/connect/t/csv.test +++ b/storage/connect/mysql-test/connect/t/csv.test @@ -1,185 +1,185 @@ -let $MYSQLD_DATADIR= `select @@datadir`; - ---copy_file $MTR_SUITE_DIR/std_data/people.csv $MYSQLD_DATADIR/test/people.csv - -SET NAMES utf8; - ---echo # ---echo # Testing errors ---echo # -CREATE TABLE t1 -( - ID INT NOT NULL -) Engine=CONNECT TABLE_TYPE=CSV FILE_NAME='nonexistent.txt'; ---replace_regex /on .*test.nonexistent.txt/on DATADIR\/test\/nonexistent.txt/ -# TODO: check why this is needed for Windows ---replace_result Open(rt) Open(rb) -SELECT * FROM t1; -DROP TABLE t1; - ---echo # ---echo # Testing examples from the manual ---echo # -CREATE TABLE t1 -( - name CHAR(12) NOT NULL, - birth DATE NOT NULL DATE_FORMAT='DD/MM/YY', - children SMALLINT(2) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='people.csv' - HEADER=1 SEP_CHAR=';' QUOTED=1; -SELECT * FROM t1; -INSERT INTO t1 VALUES ('RONALD','1980-02-26',4); -SELECT * FROM t1; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/people.csv ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/people.csv'),'\r\n','\n'); - ---echo # ---echo # Testing READONLY tables ---echo # -CREATE TABLE t1 -( - name CHAR(12) NOT NULL, - birth DATE NOT NULL DATE_FORMAT='DD/MM/YY', - children SMALLINT(2) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='people.csv' - HEADER=1 SEP_CHAR=';' QUOTED=1 READONLY=yes; ---error ER_GET_ERRMSG -INSERT INTO t1 VALUES ('BILL','1973-06-30',5); ---error ER_GET_ERRMSG -UPDATE t1 SET children=6 WHERE name='BILL'; ---error ER_GET_ERRMSG -DELETE FROM t1 WHERE name='BILL'; ---error ER_GET_ERRMSG -TRUNCATE TABLE t1; -SELECT * FROM t1; -ALTER TABLE t1 READONLY=no; -SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES ('BILL','1973-06-30',5); -SELECT * FROM t1; -ALTER TABLE t1 READONLY=1; -SHOW CREATE TABLE t1; ---error ER_GET_ERRMSG -INSERT INTO t1 VALUES ('BILL','1973-06-30',5); -SELECT * FROM t1; -DROP TABLE t1; - - ---echo # ---echo # Testing that the underlying file is created ---echo # -CREATE TABLE t1 -( - c1 CHAR(12) NOT NULL, - c2 CHAR(12) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='tmp.csv' - HEADER=1 SEP_CHAR=',' QUOTED=1; -INSERT INTO t1 VALUES (10,10),(20,20),(300,300),(4000,4000), ('a b','c d'); -SELECT * FROM t1; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/tmp.csv ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/tmp.csv'),'\r\n','\n'); - ---echo # ---echo # Creating a CSV table from a MyISAM table ---echo # -CREATE TABLE t1 (a VARCHAR(10) NOT NULL, b INT NOT NULL) ENGINE=MyISAM; -INSERT INTO t1 VALUES ('test1',1), ('test2',2); -CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t2.csv' - AS SELECT * FROM t1; -SELECT * FROM t2; -DROP TABLE t2; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/t2.csv ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t2.csv'),'\r\n','\n'); ---remove_file $MYSQLD_DATADIR/test/t2.csv - ---echo # ---echo # Testing international data ---echo # -CREATE TABLE t1 -( - c1 CHAR(12) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv' - CHARSET=utf8; -INSERT INTO t1 VALUES ('á'); -SELECT * FROM t1; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.csv ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n')); ---remove_file $MYSQLD_DATADIR/test/t1.csv - -CREATE TABLE t1 -( - c1 CHAR(12) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv' - CHARSET=utf8 DATA_CHARSET=latin1; -INSERT INTO t1 VALUES ('á'); -SELECT * FROM t1; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.csv ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n')); ---remove_file $MYSQLD_DATADIR/test/t1.csv - -CREATE TABLE t1 -( - c1 CHAR(12) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv'; -INSERT INTO t1 VALUES ('á'); -SELECT * FROM t1; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.csv ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n')); ---remove_file $MYSQLD_DATADIR/test/t1.csv - -CREATE TABLE t1 -( - c1 CHAR(12) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv' - CHARSET=latin1; -INSERT INTO t1 VALUES ('á'); -SELECT * FROM t1; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.csv ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n')); ---remove_file $MYSQLD_DATADIR/test/t1.csv - -CREATE TABLE t1 -( - c1 CHAR(12) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv' - CHARSET=latin1 DATA_CHARSET=utf8; -INSERT INTO t1 VALUES ('á'); -SELECT * FROM t1; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.csv ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n')); ---remove_file $MYSQLD_DATADIR/test/t1.csv - -CREATE TABLE t1 -( - c1 CHAR(12) CHARACTER SET latin1 NOT NULL, - c2 CHAR(12) CHARACTER SET utf8 NOT NULL -) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv'; -INSERT INTO t1 VALUES ('á','á'); -SELECT * FROM t1; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.csv ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n')); ---remove_file $MYSQLD_DATADIR/test/t1.csv - - -# -# Clean up -# ---remove_file $MYSQLD_DATADIR/test/people.csv ---remove_file $MYSQLD_DATADIR/test/tmp.csv +let $MYSQLD_DATADIR= `select @@datadir`;
+
+--copy_file $MTR_SUITE_DIR/std_data/people.csv $MYSQLD_DATADIR/test/people.csv
+
+SET NAMES utf8;
+
+--echo #
+--echo # Testing errors
+--echo #
+CREATE TABLE t1
+(
+ ID INT NOT NULL
+) Engine=CONNECT TABLE_TYPE=CSV FILE_NAME='nonexistent.txt';
+--replace_regex /on .*test.nonexistent.txt/on DATADIR\/test\/nonexistent.txt/
+# TODO: check why this is needed for Windows
+--replace_result Open(rt) Open(rb)
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # Testing examples from the manual
+--echo #
+CREATE TABLE t1
+(
+ name CHAR(12) NOT NULL,
+ birth DATE NOT NULL DATE_FORMAT='DD/MM/YY',
+ children SMALLINT(2) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='people.csv'
+ HEADER=1 SEP_CHAR=';' QUOTED=1;
+SELECT * FROM t1;
+INSERT INTO t1 VALUES ('RONALD','1980-02-26',4);
+SELECT * FROM t1;
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/people.csv
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/people.csv'),'\r\n','\n');
+
+--echo #
+--echo # Testing READONLY tables
+--echo #
+CREATE TABLE t1
+(
+ name CHAR(12) NOT NULL,
+ birth DATE NOT NULL DATE_FORMAT='DD/MM/YY',
+ children SMALLINT(2) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='people.csv'
+ HEADER=1 SEP_CHAR=';' QUOTED=1 READONLY=yes;
+--error ER_OPEN_AS_READONLY
+INSERT INTO t1 VALUES ('BILL','1973-06-30',5);
+--error ER_OPEN_AS_READONLY
+UPDATE t1 SET children=6 WHERE name='BILL';
+--error ER_OPEN_AS_READONLY
+DELETE FROM t1 WHERE name='BILL';
+--error ER_OPEN_AS_READONLY
+TRUNCATE TABLE t1;
+SELECT * FROM t1;
+ALTER TABLE t1 READONLY=no;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('BILL','1973-06-30',5);
+SELECT * FROM t1;
+ALTER TABLE t1 READONLY=1;
+SHOW CREATE TABLE t1;
+--error ER_OPEN_AS_READONLY
+INSERT INTO t1 VALUES ('BILL','1973-06-30',5);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Testing that the underlying file is created
+--echo #
+CREATE TABLE t1
+(
+ c1 CHAR(12) NOT NULL,
+ c2 CHAR(12) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='tmp.csv'
+ HEADER=1 SEP_CHAR=',' QUOTED=1;
+INSERT INTO t1 VALUES (10,10),(20,20),(300,300),(4000,4000), ('a b','c d');
+SELECT * FROM t1;
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/tmp.csv
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/tmp.csv'),'\r\n','\n');
+
+--echo #
+--echo # Creating a CSV table from a MyISAM table
+--echo #
+CREATE TABLE t1 (a VARCHAR(10) NOT NULL, b INT NOT NULL) ENGINE=MyISAM;
+INSERT INTO t1 VALUES ('test1',1), ('test2',2);
+CREATE TABLE t2 ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t2.csv'
+ AS SELECT * FROM t1;
+SELECT * FROM t2;
+DROP TABLE t2;
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t2.csv
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t2.csv'),'\r\n','\n');
+--remove_file $MYSQLD_DATADIR/test/t2.csv
+
+--echo #
+--echo # Testing international data
+--echo #
+CREATE TABLE t1
+(
+ c1 CHAR(12) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv'
+ CHARSET=utf8;
+INSERT INTO t1 VALUES ('á');
+SELECT * FROM t1;
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.csv
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n'));
+--remove_file $MYSQLD_DATADIR/test/t1.csv
+
+CREATE TABLE t1
+(
+ c1 CHAR(12) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv'
+ CHARSET=utf8 DATA_CHARSET=latin1;
+INSERT INTO t1 VALUES ('á');
+SELECT * FROM t1;
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.csv
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n'));
+--remove_file $MYSQLD_DATADIR/test/t1.csv
+
+CREATE TABLE t1
+(
+ c1 CHAR(12) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv';
+INSERT INTO t1 VALUES ('á');
+SELECT * FROM t1;
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.csv
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n'));
+--remove_file $MYSQLD_DATADIR/test/t1.csv
+
+CREATE TABLE t1
+(
+ c1 CHAR(12) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv'
+ CHARSET=latin1;
+INSERT INTO t1 VALUES ('á');
+SELECT * FROM t1;
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.csv
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n'));
+--remove_file $MYSQLD_DATADIR/test/t1.csv
+
+CREATE TABLE t1
+(
+ c1 CHAR(12) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv'
+ CHARSET=latin1 DATA_CHARSET=utf8;
+INSERT INTO t1 VALUES ('á');
+SELECT * FROM t1;
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.csv
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n'));
+--remove_file $MYSQLD_DATADIR/test/t1.csv
+
+CREATE TABLE t1
+(
+ c1 CHAR(12) CHARACTER SET latin1 NOT NULL,
+ c2 CHAR(12) CHARACTER SET utf8 NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=CSV FILE_NAME='t1.csv';
+INSERT INTO t1 VALUES ('á','á');
+SELECT * FROM t1;
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.csv
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT HEX(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.csv'),'\r\n','\n'));
+--remove_file $MYSQLD_DATADIR/test/t1.csv
+
+
+#
+# Clean up
+#
+--remove_file $MYSQLD_DATADIR/test/people.csv
+--remove_file $MYSQLD_DATADIR/test/tmp.csv
diff --git a/storage/connect/mysql-test/connect/t/dbf.test b/storage/connect/mysql-test/connect/t/dbf.test index b9a1b6e2183..3fd30f98f20 100644 --- a/storage/connect/mysql-test/connect/t/dbf.test +++ b/storage/connect/mysql-test/connect/t/dbf.test @@ -1,509 +1,509 @@ -let $MYSQLD_DATADIR= `select @@datadir`; - ---echo # ---echo # Testing errors ---echo # -CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -SHOW CREATE TABLE t1; ---replace_regex /on .*test.t1.dbf/on DATADIR\/test\/t1.dbf/ -SELECT * FROM t1; -DROP TABLE t1; - ---replace_regex /Cannot open .*test.t1.dbf/Cannot open DATADIR\/test\/t1.dbf/ ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; ---replace_regex /Cannot open .*test.t1.dbf/Cannot open DATADIR\/test\/t1.dbf/ -SHOW WARNINGS; - - -DELIMITER //; -CREATE PROCEDURE test.dbf_field(in fieldno INT, in content BLOB) DETERMINISTIC -BEGIN - SELECT '---'; - SELECT fieldno AS `FieldN`; - SELECT TRIM(TRAILING 0x00 FROM LEFT(content, 10)) AS `Name`; - SELECT SUBSTRING(content, 12, 1) AS `Type`; - SELECT CONV(HEX(REVERSE(SUBSTRING(content,13,4))),16,10) AS `Offset`; - SELECT CONV(HEX(REVERSE(SUBSTRING(content,17,1))),16,10) AS `Length`; - SELECT CONV(HEX(REVERSE(SUBSTRING(content,18,1))),16,10) AS `Dec`; - SELECT HEX(REVERSE(SUBSTRING(content,19,1))) AS `Flags`; --- SELECT CONV(HEX(REVERSE(SUBSTRING(content,20,4))),16,10) AS `Next`; --- SELECT CONV(HEX(REVERSE(SUBSTRING(content,24,4))),16,10) AS `Step`; -END// - -CREATE PROCEDURE test.dbf_header(in fname VARCHAR(1024)) DETERMINISTIC -BEGIN - DECLARE content BLOB; - DECLARE offset INT; - DECLARE fieldno INT; - SELECT '--------'; - SELECT LOAD_FILE(fname) INTO content; - SELECT LENGTH(content) AS FileSize; - SELECT HEX(LEFT(content, 1)) AS DBF_Version; - SELECT CONV(HEX(REVERSE(SUBSTRING(content,5,4))),16,10) AS NRecords; - SELECT CONV(HEX(REVERSE(SUBSTRING(content,9,2))),16,10) AS FirstRecPos; - SELECT CONV(HEX(REVERSE(SUBSTRING(content,11,2))),16,10) AS RecLength; - SELECT HEX(REVERSE(SUBSTRING(content,29,2))) AS TableFlags; - SELECT HEX(REVERSE(SUBSTRING(content,30,1))) AS CodePageMark; - SET offset=33; - SET fieldno=0; - WHILE SUBSTR(content, offset, 1) <> 0x0D AND offset + 32 < LENGTH(content) DO - CALL dbf_field(fieldno, SUBSTRING(content, offset, 32)); - SET offset=offset + 32; - SET fieldno=fieldno + 1; - END WHILE; - SELECT '--------'; -END// -DELIMITER ;// - - ---echo # ---echo # Testing READONLY tables ---echo # -CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES (10),(20); -SELECT * FROM t1; -ALTER TABLE t1 READONLY=Yes; -SHOW CREATE TABLE t1; ---error ER_GET_ERRMSG -INSERT INTO t1 VALUES (30); ---error ER_GET_ERRMSG -UPDATE t1 SET a=30 WHERE a=10; ---error ER_GET_ERRMSG -DELETE FROM t1 WHERE a=10; ---error ER_GET_ERRMSG -TRUNCATE TABLE t1; -ALTER TABLE t1 READONLY=NO; -SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES (30); -SELECT * FROM t1; -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - - ---echo # ---echo # This SQL script crashed (dbf01.sql) ---echo # -CREATE TABLE t1 -( - a int(11) NOT NULL, - b char(10) NOT NULL, - c varchar(10) NOT NULL -) ENGINE=CONNECT table_type=DBF file_name='t1.dbf'; -INSERT INTO t1 VALUES (1,'1','1'); -INSERT INTO t1 VALUES (2,'2','2'); -SELECT * FROM t1; -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - - ---echo # ---echo # Testing that table options in lower case and mixed case are understood: ---echo # -CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT table_type=dbf file_name='t1.dbf'; -SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES (10); -SELECT * FROM t1; -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf -CREATE TABLE t1 (a CHAR(10) NOT NULL) ENGINE=CONNECT Table_Type=dbf File_Name='t1.dbf'; -SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES ('test'); -SELECT * FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.dbf ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - - -# -# TODO: this creates DBF record with length=32, which looks wrong -# ---echo # ---echo # Testing multiple columns ---echo # -CREATE TABLE t1 -( - a INT NOT NULL, - b CHAR(10) NOT NULL, - c VARCHAR(10) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -INSERT INTO t1 VALUES (1,'1','1'); -INSERT INTO t1 VALUES (2,'2','2'); -SELECT * FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.dbf ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - - ---echo # ---echo # Testing long column name ---echo # ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 -( - a012345678901234567890123456789 INT NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; - ---echo # ---echo # Testing 2 columns with long names (12) ---echo # ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 -( - a0123456789a INT NOT NULL, - b0123456789b INT NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t02x11.dbf'; - ---echo # ---echo # Testing 2 columns with long names (11) ---echo # ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 -( - a012345678a INT NOT NULL, - b012345678b INT NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t02x12.dbf'; - ---echo # ---echo # Testing 2 columns name length 10 (maximum possible length) ---echo # -CREATE TABLE t1 -( - a01234567a INT NOT NULL, - b01234567b INT NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t02x13.dbf'; -SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES (1,2); -SELECT * FROM t1; -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t02x13.dbf - - ---echo # ---echo # Testing BIGINT ---echo # -CREATE TABLE t1 -( - a bigint NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -INSERT INTO t1 VALUES (0x7FFFFFFFFFFFFFFF); -INSERT INTO t1 VALUES (-0x8000000000000000); -SELECT * FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.dbf ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - - ---echo # ---echo # Testing TINYINT ---echo # -CREATE TABLE t1 -( - a TINYINT NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -INSERT INTO t1 VALUES (123); -SELECT * FROM t1; -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - - ---echo # ---echo # Testing SMALLINT ---echo # -CREATE TABLE t1 -( - a SMALLINT NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -INSERT INTO t1 VALUES (0x7FFF); -INSERT INTO t1 VALUES (-0x8000); -SELECT * FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.dbf ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - - ---echo # ---echo # Testing VARCHAR ---echo # -CREATE TABLE t1 -( - a VARCHAR(255) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -INSERT INTO t1 VALUES (REPEAT('a',255)); -SELECT LENGTH(a) FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.dbf ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - - ---echo # ---echo # Testing too long CHAR ---echo # All columns longer than 255 bytes should be rejected ---echo # ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 -( - a CHAR(86) CHARACTER SET utf8 NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; ---error ER_UNKNOWN_ERROR - - ---echo # ---echo # Testing too long VARCHAR ---echo # All columns longer than 255 bytes should be rejected ---echo # ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 -( - a VARCHAR(256) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 -( - a VARCHAR(86) CHARACTER SET utf8 NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 -( - a VARCHAR(64000) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; - - ---echo # ---echo # Testing BLOB ---echo # ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 -( - a BLOB -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 -( - a TINYBLOB -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 -( - a MEDIUMBLOB -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; ---error ER_UNKNOWN_ERROR -CREATE TABLE t1 -( - a LONGBLOB -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; - - -# TODO: utf8 does not work -#--echo # -#--echo # Testing varchar with utf8 -#--echo # -#SET NAMES utf8; -#CREATE TABLE t1 -#( -# a VARCHAR(10) CHARACTER SET utf8 -#) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -#INSERT INTO t1 VALUES (REPEAT(_ucs2 0x00DF,10)); -#SELECT * FROM t1; -#DROP TABLE IF EXISTS t1; -#--remove_file $MYSQLD_DATADIR/test/t1.dbf - - ---echo # ---echo # Testing DATE ---echo # -CREATE TABLE t1 -( - a DATE NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -INSERT INTO t1 VALUES ('2001-01-01'); -SELECT * FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.dbf ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - - - ---echo # ---echo # Testing FLOAT ---echo # -CREATE TABLE t1 -( - a FLOAT(12,4) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -INSERT INTO t1 VALUES (123); -SELECT * FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.dbf ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf -# -# TODO: this return error: -# Got error 122 'Value 123.0000000000 too long for column a of length 12' -# from CONNECT -# -#CREATE TABLE t1 -#( -# a FLOAT NOT NULL -#) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -#--error ER_GET_ERRMSG - why this error? -#INSERT INTO t1 VALUES (123); -#SELECT * FROM t1; -#DROP TABLE IF EXISTS t1; -#--remove_file $MYSQLD_DATADIR/test/t1.dbf - - -# -# TODO: this creates a column of type 'D' (date), which is wrong -# -#--echo # -#--echo # Testing DATETIME -#--echo # -#CREATE TABLE t1 -#( -# a DATETIME NOT NULL -#) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -#INSERT INTO t1 VALUES ('2013-02-01'); -#SELECT * FROM t1; -#DROP TABLE t1; -#--remove_file $MYSQLD_DATADIR/test/t1.dbf - - -# -# TODO: this creates a column of type 'D' (date), which is wrong -# -#--echo # -#--echo # Testing TIMESTAMP -#--echo # -#CREATE TABLE t1 -#( -# a TIMESTAMP -#) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -#INSERT INTO t1 VALUES ('2013-02-01'); -#SELECT * FROM t1; -#DROP TABLE t1; -#--remove_file $MYSQLD_DATADIR/test/t1.dbf - - ---echo # ---echo # Testing double ---echo # -CREATE TABLE t1 -( - a DOUBLE(20,5) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -INSERT INTO t1 VALUES (123); -INSERT INTO t1 VALUES (123456789.12345); -SELECT * FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.dbf ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results -DROP TABLE IF EXISTS t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - - -# TODO: -# Testing with no FILE_NAME specified -# Currently it returns: -# ERROR 1296 (HY000): Got error 174 'Open(a+) error 21 -# on /opt/mariadb-5.5/data/: Is a directory' from CONNECT -#CREATE TABLE t1 (a INT) ENGINE=CONNECT TABLE_TYPE=DBF; - ---echo # ---echo # Testing ALTER ---echo # -CREATE TABLE t1 -( - a VARCHAR(10) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -INSERT INTO t1 VALUES ('10'); -SELECT * FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.dbf ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results -ALTER TABLE t1 MODIFY a VARCHAR(10) NOT NULL; -SHOW CREATE TABLE t1; -SELECT * FROM t1; ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results -ALTER TABLE t1 MODIFY a INT(10) NOT NULL; -SHOW CREATE TABLE t1; -SELECT * FROM t1; ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results - -# TODO: this does not work on Windows -#ALTER TABLE t1 MODIFY a INT(8) NOT NULL; -#SHOW CREATE TABLE t1; -#--error ER_GET_ERRMSG -#SELECT * FROM t1; -#--vertical_results -#--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -#eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); -#--horizontal_results -DROP TABLE IF EXISTS t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - - ---echo # ---echo # Testing NULL ---echo # -# TODO: NULLs should probably change to DEFAULT and produce a warning -CREATE TABLE t1 -( - c1 VARCHAR(10) NOT NULL, - c2 VARCHAR(10) NOT NULL DEFAULT 'def', - i1 INT NOT NULL, - i2 INT NOT NULL DEFAULT 123 -) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf'; -INSERT INTO t1 VALUES ('10','10',10,10); -#INSERT INTO t1 VALUES (NULL,NULL,NULL,NULL); -INSERT INTO t1(c1,i1) VALUES ('20',20); -INSERT INTO t1 VALUES ('30',DEFAULT,30,DEFAULT); -SELECT * FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.dbf ---vertical_results ---replace_result $MYSQLD_DATADIR MYSQLD_DATADIR -eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf'); ---horizontal_results -DROP TABLE IF EXISTS t1; ---remove_file $MYSQLD_DATADIR/test/t1.dbf - -DROP PROCEDURE test.dbf_field; -DROP PROCEDURE test.dbf_header; +let $MYSQLD_DATADIR= `select @@datadir`;
+
+--echo #
+--echo # Testing errors
+--echo #
+CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+SHOW CREATE TABLE t1;
+--replace_regex /on .*test.t1.dbf/on DATADIR\/test\/t1.dbf/
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--replace_regex /Cannot open .*test.t1.dbf/Cannot open DATADIR\/test\/t1.dbf/
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1 ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+--replace_regex /Cannot open .*test.t1.dbf/Cannot open DATADIR\/test\/t1.dbf/
+SHOW WARNINGS;
+
+
+DELIMITER //;
+CREATE PROCEDURE test.dbf_field(in fieldno INT, in content BLOB) DETERMINISTIC
+BEGIN
+ SELECT '---';
+ SELECT fieldno AS `FieldN`;
+ SELECT TRIM(TRAILING 0x00 FROM LEFT(content, 10)) AS `Name`;
+ SELECT SUBSTRING(content, 12, 1) AS `Type`;
+ SELECT CONV(HEX(REVERSE(SUBSTRING(content,13,4))),16,10) AS `Offset`;
+ SELECT CONV(HEX(REVERSE(SUBSTRING(content,17,1))),16,10) AS `Length`;
+ SELECT CONV(HEX(REVERSE(SUBSTRING(content,18,1))),16,10) AS `Dec`;
+ SELECT HEX(REVERSE(SUBSTRING(content,19,1))) AS `Flags`;
+-- SELECT CONV(HEX(REVERSE(SUBSTRING(content,20,4))),16,10) AS `Next`;
+-- SELECT CONV(HEX(REVERSE(SUBSTRING(content,24,4))),16,10) AS `Step`;
+END//
+
+CREATE PROCEDURE test.dbf_header(in fname VARCHAR(1024)) DETERMINISTIC
+BEGIN
+ DECLARE content BLOB;
+ DECLARE offset INT;
+ DECLARE fieldno INT;
+ SELECT '--------';
+ SELECT LOAD_FILE(fname) INTO content;
+ SELECT LENGTH(content) AS FileSize;
+ SELECT HEX(LEFT(content, 1)) AS DBF_Version;
+ SELECT CONV(HEX(REVERSE(SUBSTRING(content,5,4))),16,10) AS NRecords;
+ SELECT CONV(HEX(REVERSE(SUBSTRING(content,9,2))),16,10) AS FirstRecPos;
+ SELECT CONV(HEX(REVERSE(SUBSTRING(content,11,2))),16,10) AS RecLength;
+ SELECT HEX(REVERSE(SUBSTRING(content,29,2))) AS TableFlags;
+ SELECT HEX(REVERSE(SUBSTRING(content,30,1))) AS CodePageMark;
+ SET offset=33;
+ SET fieldno=0;
+ WHILE SUBSTR(content, offset, 1) <> 0x0D AND offset + 32 < LENGTH(content) DO
+ CALL dbf_field(fieldno, SUBSTRING(content, offset, 32));
+ SET offset=offset + 32;
+ SET fieldno=fieldno + 1;
+ END WHILE;
+ SELECT '--------';
+END//
+DELIMITER ;//
+
+
+--echo #
+--echo # Testing READONLY tables
+--echo #
+CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (10),(20);
+SELECT * FROM t1;
+ALTER TABLE t1 READONLY=Yes;
+SHOW CREATE TABLE t1;
+--error ER_OPEN_AS_READONLY
+INSERT INTO t1 VALUES (30);
+--error ER_OPEN_AS_READONLY
+UPDATE t1 SET a=30 WHERE a=10;
+--error ER_OPEN_AS_READONLY
+DELETE FROM t1 WHERE a=10;
+--error ER_OPEN_AS_READONLY
+TRUNCATE TABLE t1;
+ALTER TABLE t1 READONLY=NO;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (30);
+SELECT * FROM t1;
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+--echo #
+--echo # This SQL script crashed (dbf01.sql)
+--echo #
+CREATE TABLE t1
+(
+ a int(11) NOT NULL,
+ b char(10) NOT NULL,
+ c varchar(10) NOT NULL
+) ENGINE=CONNECT table_type=DBF file_name='t1.dbf';
+INSERT INTO t1 VALUES (1,'1','1');
+INSERT INTO t1 VALUES (2,'2','2');
+SELECT * FROM t1;
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+--echo #
+--echo # Testing that table options in lower case and mixed case are understood:
+--echo #
+CREATE TABLE t1 (a INT NOT NULL) ENGINE=CONNECT table_type=dbf file_name='t1.dbf';
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (10);
+SELECT * FROM t1;
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+CREATE TABLE t1 (a CHAR(10) NOT NULL) ENGINE=CONNECT Table_Type=dbf File_Name='t1.dbf';
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('test');
+SELECT * FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.dbf
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+#
+# TODO: this creates DBF record with length=32, which looks wrong
+#
+--echo #
+--echo # Testing multiple columns
+--echo #
+CREATE TABLE t1
+(
+ a INT NOT NULL,
+ b CHAR(10) NOT NULL,
+ c VARCHAR(10) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+INSERT INTO t1 VALUES (1,'1','1');
+INSERT INTO t1 VALUES (2,'2','2');
+SELECT * FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.dbf
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+--echo #
+--echo # Testing long column name
+--echo #
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1
+(
+ a012345678901234567890123456789 INT NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+
+--echo #
+--echo # Testing 2 columns with long names (12)
+--echo #
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1
+(
+ a0123456789a INT NOT NULL,
+ b0123456789b INT NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t02x11.dbf';
+
+--echo #
+--echo # Testing 2 columns with long names (11)
+--echo #
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1
+(
+ a012345678a INT NOT NULL,
+ b012345678b INT NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t02x12.dbf';
+
+--echo #
+--echo # Testing 2 columns name length 10 (maximum possible length)
+--echo #
+CREATE TABLE t1
+(
+ a01234567a INT NOT NULL,
+ b01234567b INT NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t02x13.dbf';
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (1,2);
+SELECT * FROM t1;
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t02x13.dbf
+
+
+--echo #
+--echo # Testing BIGINT
+--echo #
+CREATE TABLE t1
+(
+ a bigint NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+INSERT INTO t1 VALUES (0x7FFFFFFFFFFFFFFF);
+INSERT INTO t1 VALUES (-0x8000000000000000);
+SELECT * FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.dbf
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+--echo #
+--echo # Testing TINYINT
+--echo #
+CREATE TABLE t1
+(
+ a TINYINT NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+INSERT INTO t1 VALUES (123);
+SELECT * FROM t1;
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+--echo #
+--echo # Testing SMALLINT
+--echo #
+CREATE TABLE t1
+(
+ a SMALLINT NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+INSERT INTO t1 VALUES (0x7FFF);
+INSERT INTO t1 VALUES (-0x8000);
+SELECT * FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.dbf
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+--echo #
+--echo # Testing VARCHAR
+--echo #
+CREATE TABLE t1
+(
+ a VARCHAR(255) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+INSERT INTO t1 VALUES (REPEAT('a',255));
+SELECT LENGTH(a) FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.dbf
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+--echo #
+--echo # Testing too long CHAR
+--echo # All columns longer than 255 bytes should be rejected
+--echo #
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1
+(
+ a CHAR(86) CHARACTER SET utf8 NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+--error ER_UNKNOWN_ERROR
+
+
+--echo #
+--echo # Testing too long VARCHAR
+--echo # All columns longer than 255 bytes should be rejected
+--echo #
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1
+(
+ a VARCHAR(256) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1
+(
+ a VARCHAR(86) CHARACTER SET utf8 NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1
+(
+ a VARCHAR(64000) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+
+
+--echo #
+--echo # Testing BLOB
+--echo #
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1
+(
+ a BLOB
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1
+(
+ a TINYBLOB
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1
+(
+ a MEDIUMBLOB
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+--error ER_UNKNOWN_ERROR
+CREATE TABLE t1
+(
+ a LONGBLOB
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+
+
+# TODO: utf8 does not work
+#--echo #
+#--echo # Testing varchar with utf8
+#--echo #
+#SET NAMES utf8;
+#CREATE TABLE t1
+#(
+# a VARCHAR(10) CHARACTER SET utf8
+#) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+#INSERT INTO t1 VALUES (REPEAT(_ucs2 0x00DF,10));
+#SELECT * FROM t1;
+#DROP TABLE IF EXISTS t1;
+#--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+--echo #
+--echo # Testing DATE
+--echo #
+CREATE TABLE t1
+(
+ a DATE NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+INSERT INTO t1 VALUES ('2001-01-01');
+SELECT * FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.dbf
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+
+--echo #
+--echo # Testing FLOAT
+--echo #
+CREATE TABLE t1
+(
+ a FLOAT(12,4) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+INSERT INTO t1 VALUES (123);
+SELECT * FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.dbf
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+#
+# TODO: this return error:
+# Got error 122 'Value 123.0000000000 too long for column a of length 12'
+# from CONNECT
+#
+#CREATE TABLE t1
+#(
+# a FLOAT NOT NULL
+#) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+#--error ER_GET_ERRMSG - why this error?
+#INSERT INTO t1 VALUES (123);
+#SELECT * FROM t1;
+#DROP TABLE IF EXISTS t1;
+#--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+#
+# TODO: this creates a column of type 'D' (date), which is wrong
+#
+#--echo #
+#--echo # Testing DATETIME
+#--echo #
+#CREATE TABLE t1
+#(
+# a DATETIME NOT NULL
+#) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+#INSERT INTO t1 VALUES ('2013-02-01');
+#SELECT * FROM t1;
+#DROP TABLE t1;
+#--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+#
+# TODO: this creates a column of type 'D' (date), which is wrong
+#
+#--echo #
+#--echo # Testing TIMESTAMP
+#--echo #
+#CREATE TABLE t1
+#(
+# a TIMESTAMP
+#) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+#INSERT INTO t1 VALUES ('2013-02-01');
+#SELECT * FROM t1;
+#DROP TABLE t1;
+#--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+--echo #
+--echo # Testing double
+--echo #
+CREATE TABLE t1
+(
+ a DOUBLE(20,5) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+INSERT INTO t1 VALUES (123);
+INSERT INTO t1 VALUES (123456789.12345);
+SELECT * FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.dbf
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+DROP TABLE IF EXISTS t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+# TODO:
+# Testing with no FILE_NAME specified
+# Currently it returns:
+# ERROR 1296 (HY000): Got error 174 'Open(a+) error 21
+# on /opt/mariadb-5.5/data/: Is a directory' from CONNECT
+#CREATE TABLE t1 (a INT) ENGINE=CONNECT TABLE_TYPE=DBF;
+
+--echo #
+--echo # Testing ALTER
+--echo #
+CREATE TABLE t1
+(
+ a VARCHAR(10) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+INSERT INTO t1 VALUES ('10');
+SELECT * FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.dbf
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+ALTER TABLE t1 MODIFY a VARCHAR(10) NOT NULL;
+SHOW CREATE TABLE t1;
+SELECT * FROM t1;
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+ALTER TABLE t1 MODIFY a INT(10) NOT NULL;
+SHOW CREATE TABLE t1;
+SELECT * FROM t1;
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+
+# TODO: this does not work on Windows
+#ALTER TABLE t1 MODIFY a INT(8) NOT NULL;
+#SHOW CREATE TABLE t1;
+#--error ER_GET_ERRMSG
+#SELECT * FROM t1;
+#--vertical_results
+#--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+#eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+#--horizontal_results
+DROP TABLE IF EXISTS t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+
+--echo #
+--echo # Testing NULL
+--echo #
+# TODO: NULLs should probably change to DEFAULT and produce a warning
+CREATE TABLE t1
+(
+ c1 VARCHAR(10) NOT NULL,
+ c2 VARCHAR(10) NOT NULL DEFAULT 'def',
+ i1 INT NOT NULL,
+ i2 INT NOT NULL DEFAULT 123
+) ENGINE=CONNECT TABLE_TYPE=DBF FILE_NAME='t1.dbf';
+INSERT INTO t1 VALUES ('10','10',10,10);
+#INSERT INTO t1 VALUES (NULL,NULL,NULL,NULL);
+INSERT INTO t1(c1,i1) VALUES ('20',20);
+INSERT INTO t1 VALUES ('30',DEFAULT,30,DEFAULT);
+SELECT * FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.dbf
+--vertical_results
+--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
+eval CALL dbf_header('$MYSQLD_DATADIR/test/t1.dbf');
+--horizontal_results
+DROP TABLE IF EXISTS t1;
+--remove_file $MYSQLD_DATADIR/test/t1.dbf
+
+DROP PROCEDURE test.dbf_field;
+DROP PROCEDURE test.dbf_header;
diff --git a/storage/connect/mysql-test/connect/t/fix.test b/storage/connect/mysql-test/connect/t/fix.test index c3cec55a217..15e642a85fd 100644 --- a/storage/connect/mysql-test/connect/t/fix.test +++ b/storage/connect/mysql-test/connect/t/fix.test @@ -1,108 +1,108 @@ -let $MYSQLD_DATADIR= `select @@datadir`; - ---copy_file $MTR_SUITE_DIR/std_data/dept.dat $MYSQLD_DATADIR/test/dept.dat ---copy_file $MTR_SUITE_DIR/std_data/boys.txt $MYSQLD_DATADIR/test/boys.txt ---copy_file $MTR_SUITE_DIR/std_data/boyswin.txt $MYSQLD_DATADIR/test/boyswin.txt - ---echo # ---echo # Testing errors ---echo # -CREATE TABLE t1 -( - ID INT NOT NULL -) Engine=CONNECT TABLE_TYPE=DOS FILE_NAME='nonexistent.txt'; ---replace_regex /on .*test.nonexistent.txt/on DATADIR\/test\/nonexistent.txt/ -# TODO: check why this is needed for Windows ---replace_result Open(rt) Open(rb) -SELECT * FROM t1; -DROP TABLE t1; - ---echo # ---echo # Testing READONLY tables ---echo # -CREATE TABLE t1 -( - id INT NOT NULL -) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='t1.txt'; -INSERT INTO t1 VALUES (10); -SELECT * FROM t1; -ALTER TABLE t1 READONLY=1; -SHOW CREATE TABLE t1; ---error ER_GET_ERRMSG -INSERT INTO t1 VALUES (20); ---error ER_GET_ERRMSG -UPDATE t1 SET id=20 WHERE id=10; ---error ER_GET_ERRMSG -DELETE FROM t1 WHERE id=10; ---error ER_GET_ERRMSG -TRUNCATE TABLE t1; -ALTER TABLE t1 READONLY=0; -SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES (20); -SELECT * FROM t1; -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.txt - - ---echo # ---echo # Testing manual examples ---echo # -CREATE TABLE t1 -( - number CHAR(4) not null, - location CHAR(15) NOT NULL flag=5, - director CHAR(5) NOT NULL flag=20, - function CHAR(12) NOT NULL flag=26, - name CHAR(22) NOT NULL flag=38 -) ENGINE=CONNECT TABLE_TYPE=DOS FILE_NAME='dept.dat'; -SELECT * FROM t1; -DROP TABLE t1; - -CREATE TABLE t1 -( - name char(12) not null, - city char(12) not null, - birth date not null date_format='DD/MM/YYYY', - hired date not null date_format='DD/MM/YYYY' flag=36 -) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='boys.txt' ENDING=1; -SELECT * FROM t1; -DROP TABLE t1; - -CREATE TABLE t1 -( - name char(12) not null, - city char(12) not null, - birth date not null date_format='DD/MM/YYYY', - hired date not null date_format='DD/MM/YYYY' flag=36 -) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='boys.txt' LRECL=47 ENDING=1; -SELECT * FROM t1; -DROP TABLE t1; - - -CREATE TABLE t1 -( - name char(12) not null, - city char(12) not null, - birth date not null date_format='DD/MM/YYYY', - hired date not null date_format='DD/MM/YYYY' flag=36 -) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='boyswin.txt' ENDING=2; -SELECT * FROM t1; -DROP TABLE t1; - -CREATE TABLE t1 -( - name char(12) not null, - city char(12) not null, - birth date not null date_format='DD/MM/YYYY', - hired date not null date_format='DD/MM/YYYY' flag=36 -) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='boyswin.txt' LRECL=47 ENDING=2; -SELECT * FROM t1; -DROP TABLE t1; - - -# -# Clean up -# ---remove_file $MYSQLD_DATADIR/test/dept.dat ---remove_file $MYSQLD_DATADIR/test/boys.txt ---remove_file $MYSQLD_DATADIR/test/boyswin.txt +let $MYSQLD_DATADIR= `select @@datadir`;
+
+--copy_file $MTR_SUITE_DIR/std_data/dept.dat $MYSQLD_DATADIR/test/dept.dat
+--copy_file $MTR_SUITE_DIR/std_data/boys.txt $MYSQLD_DATADIR/test/boys.txt
+--copy_file $MTR_SUITE_DIR/std_data/boyswin.txt $MYSQLD_DATADIR/test/boyswin.txt
+
+--echo #
+--echo # Testing errors
+--echo #
+CREATE TABLE t1
+(
+ ID INT NOT NULL
+) Engine=CONNECT TABLE_TYPE=DOS FILE_NAME='nonexistent.txt';
+--replace_regex /on .*test.nonexistent.txt/on DATADIR\/test\/nonexistent.txt/
+# TODO: check why this is needed for Windows
+--replace_result Open(rt) Open(rb)
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # Testing READONLY tables
+--echo #
+CREATE TABLE t1
+(
+ id INT NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='t1.txt';
+INSERT INTO t1 VALUES (10);
+SELECT * FROM t1;
+ALTER TABLE t1 READONLY=1;
+SHOW CREATE TABLE t1;
+--error ER_OPEN_AS_READONLY
+INSERT INTO t1 VALUES (20);
+--error ER_OPEN_AS_READONLY
+UPDATE t1 SET id=20 WHERE id=10;
+--error ER_OPEN_AS_READONLY
+DELETE FROM t1 WHERE id=10;
+--error ER_OPEN_AS_READONLY
+TRUNCATE TABLE t1;
+ALTER TABLE t1 READONLY=0;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (20);
+SELECT * FROM t1;
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.txt
+
+
+--echo #
+--echo # Testing manual examples
+--echo #
+CREATE TABLE t1
+(
+ number CHAR(4) not null,
+ location CHAR(15) NOT NULL flag=5,
+ director CHAR(5) NOT NULL flag=20,
+ function CHAR(12) NOT NULL flag=26,
+ name CHAR(22) NOT NULL flag=38
+) ENGINE=CONNECT TABLE_TYPE=DOS FILE_NAME='dept.dat';
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1
+(
+ name char(12) not null,
+ city char(12) not null,
+ birth date not null date_format='DD/MM/YYYY',
+ hired date not null date_format='DD/MM/YYYY' flag=36
+) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='boys.txt' ENDING=1;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1
+(
+ name char(12) not null,
+ city char(12) not null,
+ birth date not null date_format='DD/MM/YYYY',
+ hired date not null date_format='DD/MM/YYYY' flag=36
+) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='boys.txt' LRECL=47 ENDING=1;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+CREATE TABLE t1
+(
+ name char(12) not null,
+ city char(12) not null,
+ birth date not null date_format='DD/MM/YYYY',
+ hired date not null date_format='DD/MM/YYYY' flag=36
+) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='boyswin.txt' ENDING=2;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+CREATE TABLE t1
+(
+ name char(12) not null,
+ city char(12) not null,
+ birth date not null date_format='DD/MM/YYYY',
+ hired date not null date_format='DD/MM/YYYY' flag=36
+) ENGINE=CONNECT TABLE_TYPE=FIX FILE_NAME='boyswin.txt' LRECL=47 ENDING=2;
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+#
+# Clean up
+#
+--remove_file $MYSQLD_DATADIR/test/dept.dat
+--remove_file $MYSQLD_DATADIR/test/boys.txt
+--remove_file $MYSQLD_DATADIR/test/boyswin.txt
diff --git a/storage/connect/mysql-test/connect/t/ini.test b/storage/connect/mysql-test/connect/t/ini.test index 0d23142ac9e..dd3b84e4699 100644 --- a/storage/connect/mysql-test/connect/t/ini.test +++ b/storage/connect/mysql-test/connect/t/ini.test @@ -1,156 +1,156 @@ -let $MYSQLD_DATADIR= `select @@datadir`; - ---copy_file $MTR_SUITE_DIR/std_data/contact.ini $MYSQLD_DATADIR/test/contact.ini - ---echo # ---echo # Testing errors ---echo # -CREATE TABLE t1 -( - ID INT -) Engine=CONNECT TABLE_TYPE=INI FILE_NAME='nonexistent.txt'; ---replace_regex /on .*test.nonexistent.txt/on DATADIR\/test\/nonexistent.txt/ -# TODO: check why this is needed for Windows ---replace_result Open(rt) Open(rb) -SELECT * FROM t1; -DROP TABLE t1; - ---echo # ---echo # Testing examples from the manual ---echo # - -CREATE TABLE t1 -( - contact CHAR(16) flag=1, - name CHAR(20), - forename CHAR(32), - hired date date_format='DD/MM/YYYY', - address CHAR(64), - city CHAR(20), - zipcode CHAR(8), - tel CHAR(16) -) ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='contact.ini'; -SELECT contact, name, hired, city, tel FROM t1; - -UPDATE t1 SET forename= 'Harry' where contact='UK1'; -SELECT * FROM t1 WHERE contact='UK1'; -INSERT INTO t1 (contact,forename) VALUES ('UK1','Harrison'); -SELECT * FROM t1 WHERE contact='UK1'; -INSERT INTO t1 (contact,forename) VALUES ('UK2','John'); -SELECT * FROM t1 WHERE contact='UK2'; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/contact.ini ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/contact.ini'),'\r\n','\n'),'\n\n','\n'); - -CREATE TABLE t1 -( - section CHAR(16) flag=1, - keyname CHAR(16) flag=2, - value CHAR(32) -) ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='contact.ini' - OPTION_LIST='Layout=Row'; -UPDATE t1 SET value='Paul' WHERE section='UK2' AND keyname='forename'; -SELECT * FROM t1; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/contact.ini ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/contact.ini'),'\r\n','\n'),'\n\n','\n'); - - ---echo # ---echo # Testing that the underlying file is created ---echo # -CREATE TABLE t1 -( - contact CHAR(12) NOT NULL flag=1, - c2 CHAR(12) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='tmp.ini'; -INSERT INTO t1 VALUES (10,10),(20,20),(300,300),(4000,4000), ('a b','c d'); -SELECT * FROM t1; -DROP TABLE t1; ---chmod 0777 $MYSQLD_DATADIR/test/tmp.ini ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/tmp.ini'),'\r\n','\n'),'\n\n','\n'); - - ---echo # ---echo # Testing bad table ---echo # -CREATE TABLE t1 -( - id INT -) ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='t1.ini'; ---error ER_GET_ERRMSG -INSERT INTO t1 VALUES (10); -SELECT * FROM t1; -DROP TABLE t1; - - ---echo # ---echo # Testing READONLY tables ---echo # -CREATE TABLE t1 -( - contact CHAR(10) flag=1, - c2 CHAR(60) -) ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='t1.ini'; -INSERT INTO t1 VALUES ('UK',10),('FR',20),('RU',30); -SELECT * FROM t1; -ALTER TABLE t1 READONLY=1; -SHOW CREATE TABLE t1; ---error ER_GET_ERRMSG -INSERT INTO t1 VALUES ('US',40); ---error ER_GET_ERRMSG -UPDATE t1 SET c2=20 WHERE c2=10; ---error ER_GET_ERRMSG -DELETE FROM t1 WHERE c2=10; ---error ER_GET_ERRMSG -TRUNCATE TABLE t1; -ALTER TABLE t1 READONLY=0; -SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES ('US',40); -SELECT * FROM t1; -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1.ini - - -# -# Clean up -# ---remove_file $MYSQLD_DATADIR/test/contact.ini ---remove_file $MYSQLD_DATADIR/test/tmp.ini - - ---echo # ---echo # Bug: TABLE_TYPE=ini does not clear memory between CREATE TABLEs ---echo # -CREATE TABLE t1 (sec CHAR(10) NOT NULL FLAG=1, val CHAR(10) NOT NULL) -ENGINE=CONNECT TABLE_TYPE=INI; -INSERT INTO t1 VALUES ('sec1','val1'),('sec2','val2'); -SELECT sec AS s, val AS v FROM t1; -DROP TABLE t1; -CREATE TABLE t1 (sec2 CHAR(10) NOT NULL FLAG=1, val2 CHAR(10) NOT NULL) -ENGINE=CONNECT TABLE_TYPE=INI; -INSERT INTO t1 VALUES ('sec1','val11'),('sec2','val22'); -SELECT sec2 AS s, val2 AS v FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.ini ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.ini'),'\r\n','\n'),'\n\n','\n'); -DROP TABLE t1; - -CREATE TABLE t1 (sec CHAR(10) NOT NULL FLAG=1, val CHAR(10) NOT NULL) -ENGINE=CONNECT TABLE_TYPE=INI; -CREATE TABLE t2 (sec CHAR(10) NOT NULL FLAG=1, val CHAR(10) NOT NULL) -ENGINE=CONNECT TABLE_TYPE=INI; -INSERT INTO t1 VALUES('1sec1','1val1'),('1sec2','1val2'); -INSERT INTO t2 VALUES('2sec1','2val1'),('2sec2','2val2'); -SELECT sec AS s, val AS v FROM t1; ---chmod 0777 $MYSQLD_DATADIR/test/t1.ini ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.ini'),'\r\n','\n'),'\n\n','\n'); -SELECT sec AS s, val AS v FROM t2; ---chmod 0777 $MYSQLD_DATADIR/test/t2.ini ---replace_result $MYSQLD_DATADIR DATADIR ---eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t2.ini'),'\r\n','\n'),'\n\n','\n'); -DROP TABLE t1, t2; +let $MYSQLD_DATADIR= `select @@datadir`;
+
+--copy_file $MTR_SUITE_DIR/std_data/contact.ini $MYSQLD_DATADIR/test/contact.ini
+
+--echo #
+--echo # Testing errors
+--echo #
+CREATE TABLE t1
+(
+ ID INT
+) Engine=CONNECT TABLE_TYPE=INI FILE_NAME='nonexistent.txt';
+--replace_regex /on .*test.nonexistent.txt/on DATADIR\/test\/nonexistent.txt/
+# TODO: check why this is needed for Windows
+--replace_result Open(rt) Open(rb)
+SELECT * FROM t1;
+DROP TABLE t1;
+
+--echo #
+--echo # Testing examples from the manual
+--echo #
+
+CREATE TABLE t1
+(
+ contact CHAR(16) flag=1,
+ name CHAR(20),
+ forename CHAR(32),
+ hired date date_format='DD/MM/YYYY',
+ address CHAR(64),
+ city CHAR(20),
+ zipcode CHAR(8),
+ tel CHAR(16)
+) ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='contact.ini';
+SELECT contact, name, hired, city, tel FROM t1;
+
+UPDATE t1 SET forename= 'Harry' where contact='UK1';
+SELECT * FROM t1 WHERE contact='UK1';
+INSERT INTO t1 (contact,forename) VALUES ('UK1','Harrison');
+SELECT * FROM t1 WHERE contact='UK1';
+INSERT INTO t1 (contact,forename) VALUES ('UK2','John');
+SELECT * FROM t1 WHERE contact='UK2';
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/contact.ini
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/contact.ini'),'\r\n','\n'),'\n\n','\n');
+
+CREATE TABLE t1
+(
+ section CHAR(16) flag=1,
+ keyname CHAR(16) flag=2,
+ value CHAR(32)
+) ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='contact.ini'
+ OPTION_LIST='Layout=Row';
+UPDATE t1 SET value='Paul' WHERE section='UK2' AND keyname='forename';
+SELECT * FROM t1;
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/contact.ini
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/contact.ini'),'\r\n','\n'),'\n\n','\n');
+
+
+--echo #
+--echo # Testing that the underlying file is created
+--echo #
+CREATE TABLE t1
+(
+ contact CHAR(12) NOT NULL flag=1,
+ c2 CHAR(12) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='tmp.ini';
+INSERT INTO t1 VALUES (10,10),(20,20),(300,300),(4000,4000), ('a b','c d');
+SELECT * FROM t1;
+DROP TABLE t1;
+--chmod 0777 $MYSQLD_DATADIR/test/tmp.ini
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/tmp.ini'),'\r\n','\n'),'\n\n','\n');
+
+
+--echo #
+--echo # Testing bad table
+--echo #
+CREATE TABLE t1
+(
+ id INT
+) ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='t1.ini';
+--error ER_GET_ERRMSG
+INSERT INTO t1 VALUES (10);
+SELECT * FROM t1;
+DROP TABLE t1;
+
+
+--echo #
+--echo # Testing READONLY tables
+--echo #
+CREATE TABLE t1
+(
+ contact CHAR(10) flag=1,
+ c2 CHAR(60)
+) ENGINE=CONNECT TABLE_TYPE=INI FILE_NAME='t1.ini';
+INSERT INTO t1 VALUES ('UK',10),('FR',20),('RU',30);
+SELECT * FROM t1;
+ALTER TABLE t1 READONLY=1;
+SHOW CREATE TABLE t1;
+--error ER_OPEN_AS_READONLY
+INSERT INTO t1 VALUES ('US',40);
+--error ER_OPEN_AS_READONLY
+UPDATE t1 SET c2=20 WHERE c2=10;
+--error ER_OPEN_AS_READONLY
+DELETE FROM t1 WHERE c2=10;
+--error ER_OPEN_AS_READONLY
+TRUNCATE TABLE t1;
+ALTER TABLE t1 READONLY=0;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES ('US',40);
+SELECT * FROM t1;
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1.ini
+
+
+#
+# Clean up
+#
+--remove_file $MYSQLD_DATADIR/test/contact.ini
+--remove_file $MYSQLD_DATADIR/test/tmp.ini
+
+
+--echo #
+--echo # Bug: TABLE_TYPE=ini does not clear memory between CREATE TABLEs
+--echo #
+CREATE TABLE t1 (sec CHAR(10) NOT NULL FLAG=1, val CHAR(10) NOT NULL)
+ENGINE=CONNECT TABLE_TYPE=INI;
+INSERT INTO t1 VALUES ('sec1','val1'),('sec2','val2');
+SELECT sec AS s, val AS v FROM t1;
+DROP TABLE t1;
+CREATE TABLE t1 (sec2 CHAR(10) NOT NULL FLAG=1, val2 CHAR(10) NOT NULL)
+ENGINE=CONNECT TABLE_TYPE=INI;
+INSERT INTO t1 VALUES ('sec1','val11'),('sec2','val22');
+SELECT sec2 AS s, val2 AS v FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.ini
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.ini'),'\r\n','\n'),'\n\n','\n');
+DROP TABLE t1;
+
+CREATE TABLE t1 (sec CHAR(10) NOT NULL FLAG=1, val CHAR(10) NOT NULL)
+ENGINE=CONNECT TABLE_TYPE=INI;
+CREATE TABLE t2 (sec CHAR(10) NOT NULL FLAG=1, val CHAR(10) NOT NULL)
+ENGINE=CONNECT TABLE_TYPE=INI;
+INSERT INTO t1 VALUES('1sec1','1val1'),('1sec2','1val2');
+INSERT INTO t2 VALUES('2sec1','2val1'),('2sec2','2val2');
+SELECT sec AS s, val AS v FROM t1;
+--chmod 0777 $MYSQLD_DATADIR/test/t1.ini
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t1.ini'),'\r\n','\n'),'\n\n','\n');
+SELECT sec AS s, val AS v FROM t2;
+--chmod 0777 $MYSQLD_DATADIR/test/t2.ini
+--replace_result $MYSQLD_DATADIR DATADIR
+--eval SELECT REPLACE(REPLACE(LOAD_FILE('$MYSQLD_DATADIR/test/t2.ini'),'\r\n','\n'),'\n\n','\n');
+DROP TABLE t1, t2;
diff --git a/storage/connect/mysql-test/connect/t/vec.test b/storage/connect/mysql-test/connect/t/vec.test index ee504e9925a..aca78987a97 100644 --- a/storage/connect/mysql-test/connect/t/vec.test +++ b/storage/connect/mysql-test/connect/t/vec.test @@ -1,80 +1,80 @@ -let $MYSQLD_DATADIR= `select @@datadir`; - -CREATE TABLE dir1 ( - spath VARCHAR(256) NOT NULL flag=1, - fname VARCHAR(256) NOT NULL, - ftype CHAR(4) NOT NULL, - size DOUBLE(12,0) NOT NULL flag=5 -) ENGINE=CONNECT TABLE_TYPE=DIR FILE_NAME='*vec*'; - - -CREATE TABLE t1 -( - a INT NOT NULL, - b CHAR(10) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=VEC FILE_NAME='t1vec'; -SHOW CREATE TABLE t1; -# Testing SELECT on empty file ---replace_regex /Open.rb. error 2 on .*\/test\/t1vec/Open(rb) error 2 on DATADIR\/test\/t1vec/ -SELECT * FROM t1; -INSERT INTO t1 VALUES (0,'test01'), (1,'test01'), (2,'test02'), (3,'test03'); -SELECT * FROM t1; -SELECT a FROM t1; -SELECT b FROM t1; ---replace_result $MYSQLD_DATADIR DATADIR/ -SELECT fname, ftype, size FROM dir1 ORDER BY fname, ftype; -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1vec1 ---remove_file $MYSQLD_DATADIR/test/t1vec2 - - -CREATE TABLE t1 -( - a INT NOT NULL, - b CHAR(10) NOT NULL -) ENGINE=CONNECT TABLE_TYPE=VEC FILE_NAME='t1vec' MAX_ROWS=10; -SHOW CREATE TABLE t1; -# Testing SELECTs on empty file ---replace_regex /Open.rb. error 2 on .*\/test\/t1vec/Open(rb) error 2 on DATADIR\/test\/t1vec/ -SELECT * FROM t1; ---replace_regex /Open.rb. error 2 on .*\/test\/t1vec/Open(rb) error 2 on DATADIR\/test\/t1vec/ -SELECT a FROM t1; ---replace_regex /Open.rb. error 2 on .*\/test\/t1vec/Open(rb) error 2 on DATADIR\/test\/t1vec/ -SELECT b FROM t1; -INSERT INTO t1 VALUES (0,'test01'), (1,'test01'), (2,'test02'), (3,'test03'); -SELECT * FROM t1; -SELECT a FROM t1; -SELECT b FROM t1; ---replace_result $MYSQLD_DATADIR DATADIR/ -SELECT fname, ftype, size FROM dir1 ORDER BY fname, ftype; ---echo # ---echo # Testing READONLY ---echo # -ALTER TABLE t1 READONLY=yes; -SHOW CREATE TABLE t1; ---error ER_GET_ERRMSG -INSERT INTO t1 VALUES (4,'test04'); ---error ER_GET_ERRMSG -UPDATE t1 SET b='test04' WHERE a=3; ---error ER_GET_ERRMSG -DELETE FROM t1 WHERE a=3; ---error ER_GET_ERRMSG -TRUNCATE TABLE t1; -ALTER TABLE t1 READONLY=no; -SHOW CREATE TABLE t1; -INSERT INTO t1 VALUES (4,'test04'); -UPDATE t1 SET b='test04a' WHERE a=4; -DELETE FROM t1 WHERE a=0; -SELECT * FROM t1; -TRUNCATE TABLE t1; -SELECT fname, ftype, size FROM dir1 ORDER BY fname, ftype; -SELECT * FROM t1; -DROP TABLE t1; ---remove_file $MYSQLD_DATADIR/test/t1vec ---remove_file $MYSQLD_DATADIR/test/t1vec.blk - - ---echo # ---echo # Clean up ---echo # -DROP TABLE dir1; +let $MYSQLD_DATADIR= `select @@datadir`;
+
+CREATE TABLE dir1 (
+ spath VARCHAR(256) NOT NULL flag=1,
+ fname VARCHAR(256) NOT NULL,
+ ftype CHAR(4) NOT NULL,
+ size DOUBLE(12,0) NOT NULL flag=5
+) ENGINE=CONNECT TABLE_TYPE=DIR FILE_NAME='*vec*';
+
+
+CREATE TABLE t1
+(
+ a INT NOT NULL,
+ b CHAR(10) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=VEC FILE_NAME='t1vec';
+SHOW CREATE TABLE t1;
+# Testing SELECT on empty file
+--replace_regex /Open.rb. error 2 on .*\/test\/t1vec/Open(rb) error 2 on DATADIR\/test\/t1vec/
+SELECT * FROM t1;
+INSERT INTO t1 VALUES (0,'test01'), (1,'test01'), (2,'test02'), (3,'test03');
+SELECT * FROM t1;
+SELECT a FROM t1;
+SELECT b FROM t1;
+--replace_result $MYSQLD_DATADIR DATADIR/
+SELECT fname, ftype, size FROM dir1 ORDER BY fname, ftype;
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1vec1
+--remove_file $MYSQLD_DATADIR/test/t1vec2
+
+
+CREATE TABLE t1
+(
+ a INT NOT NULL,
+ b CHAR(10) NOT NULL
+) ENGINE=CONNECT TABLE_TYPE=VEC FILE_NAME='t1vec' MAX_ROWS=10;
+SHOW CREATE TABLE t1;
+# Testing SELECTs on empty file
+--replace_regex /Open.rb. error 2 on .*\/test\/t1vec/Open(rb) error 2 on DATADIR\/test\/t1vec/
+SELECT * FROM t1;
+--replace_regex /Open.rb. error 2 on .*\/test\/t1vec/Open(rb) error 2 on DATADIR\/test\/t1vec/
+SELECT a FROM t1;
+--replace_regex /Open.rb. error 2 on .*\/test\/t1vec/Open(rb) error 2 on DATADIR\/test\/t1vec/
+SELECT b FROM t1;
+INSERT INTO t1 VALUES (0,'test01'), (1,'test01'), (2,'test02'), (3,'test03');
+SELECT * FROM t1;
+SELECT a FROM t1;
+SELECT b FROM t1;
+--replace_result $MYSQLD_DATADIR DATADIR/
+SELECT fname, ftype, size FROM dir1 ORDER BY fname, ftype;
+--echo #
+--echo # Testing READONLY
+--echo #
+ALTER TABLE t1 READONLY=yes;
+SHOW CREATE TABLE t1;
+--error ER_OPEN_AS_READONLY
+INSERT INTO t1 VALUES (4,'test04');
+--error ER_OPEN_AS_READONLY
+UPDATE t1 SET b='test04' WHERE a=3;
+--error ER_OPEN_AS_READONLY
+DELETE FROM t1 WHERE a=3;
+--error ER_OPEN_AS_READONLY
+TRUNCATE TABLE t1;
+ALTER TABLE t1 READONLY=no;
+SHOW CREATE TABLE t1;
+INSERT INTO t1 VALUES (4,'test04');
+UPDATE t1 SET b='test04a' WHERE a=4;
+DELETE FROM t1 WHERE a=0;
+SELECT * FROM t1;
+TRUNCATE TABLE t1;
+SELECT fname, ftype, size FROM dir1 ORDER BY fname, ftype;
+SELECT * FROM t1;
+DROP TABLE t1;
+--remove_file $MYSQLD_DATADIR/test/t1vec
+--remove_file $MYSQLD_DATADIR/test/t1vec.blk
+
+
+--echo #
+--echo # Clean up
+--echo #
+DROP TABLE dir1;
|