1
0
mirror of https://github.com/MariaDB/server.git synced 2025-05-29 21:42:28 +03:00
mariadb/mysql-test/t/create.test
unknown bee5d9d462 Simplified 'wrong xxx name' error messages by introducing 'general' ER_WRONG_NAME error
Cleaned up (and disabled part of) date/time/datetime format patch. One can't anymore change default read/write date/time/formats.
This is becasue the non standard datetime formats can't be compared as strings and MySQL does still a lot of datetime comparisons as strings
Changed flag argument to str_to_TIME() and get_date() from bool to uint
Removed THD from str_to_xxxx functions and Item class.
Fixed core dump when doing --print-defaults
Move some common string functions to strfunc.cc
Dates as strings are now of type my_charset_bin instead of default_charset()
Introduce IDENT_QUOTED to not have to create an extra copy of simple identifiers (all chars < 128)
Removed xxx_FORMAT_TYPE enums and replaced them with the old TIMESTAMP_xxx enums
Renamed some TIMESTAMP_xxx enums to more appropriate names
Use defines instead of integers for date/time/datetime string lengths
Added to build system and use the new my_strtoll10() function.



BUILD/compile-pentium-valgrind-max:
  Remove double printing of warning
VC++Files/libmysqld/libmysqld.dsp:
  Added strfunc.cc
VC++Files/sql/mysqld.dsp:
  Added strfunc.cc
VC++Files/sql/mysqldmax.dsp:
  Added strfunc.cc
VC++Files/strings/strings.dsp:
  added my_strtoll10.c
include/m_ctype.h:
  Removed MY_LEX_FOUND_IDENT (not used)
include/m_string.h:
  Added my_strtoll10()
include/mysqld_error.h:
  simplified 'wrong xxx name' error messages
include/sql_state.h:
  simplified 'wrong xxx name' error messages
libmysqld/Makefile.am:
  Added strfunc.cc
mysql-test/mysql-test-run.sh:
  Simplified some options
  changed $@ to "$@" in an attempt to handle options with space (Didn't succeed;  Problem will disappear when mysql-test-run is rewritten in C)
mysql-test/r/ctype_latin1_de.result:
  Added new tests
mysql-test/r/ctype_recoding.result:
  Extended tests
mysql-test/r/date_formats.result:
  Cleaned up tests
  Disabled some tests that can't yet be run
mysql-test/r/func_compress.result:
  New error message
mysql-test/r/rpl_temporary.result:
  Added new test
mysql-test/t/create.test:
  Changed error numbers
mysql-test/t/ctype_latin1_de.test:
  New tests
mysql-test/t/ctype_recoding.test:
  Extended tests
mysql-test/t/date_formats-master.opt:
  Removed datetime_format as we can't handle options with space in mysql-test-run
mysql-test/t/date_formats.test:
  Cleaned up tests
  Disabled some tests that can't yet be run
mysql-test/t/rpl_temporary.test:
  Added testing of open temporary table on slave shutdown
mysql-test/t/symlink.test:
  Fixed error numbers
mysys/default.c:
  Fixed core dump when doing --print-defaults
sql/Makefile.am:
  Added strfunc.cc
sql/derror.cc:
  Fixed compiler warning
sql/field.cc:
  Changed argument to str_to_TIME() from bool to uint
  Removed THD argument from str_to_TIME()
  Moved find_enum() and find_set() to strfunc.cc
sql/field.h:
  Changed type of last argument to get_date() to be able to handle more options
sql/init.cc:
  Remove not used variable dayord
sql/item.cc:
  Changed type of last argument to get_date() to be able to handle more options
  Removed THD* element from item.
  Don't use make_date_time() to generate date/time/datetimes
sql/item.h:
  Changed type of last argument to get_date() to be able to handle more options
  Removed THD* from Item
sql/item_create.cc:
  Indentation cleanup
sql/item_func.cc:
  Use new find_type()
sql/item_func.h:
  Changed type of last argument to get_date() to be able to handle more options
sql/item_strfunc.h:
  space change
sql/item_timefunc.cc:
  Changed month_names[] to be easier to use
  Moved check_names[] to strfunc.cc
  Added back old make_datetime() function
  Optimized extract_date_time()
  Use my_strtoll10() insetad of my_strntoll()
  Optimized make_date_time()
  Replaced short variable names with long ones.
  Use new functions make_time(), make_date() and make_datetime()
  Dates as strings are now of type my_charset_bin instead of default_charset()
  Changed Item_func_str_to_date() to by default return a date.
sql/item_timefunc.h:
  Changed charset for date string from default_charset() to my_charset_bin
  Changed type of last argument to get_date() to be able to handle more options
  Use defines instead of integers for date/time/datetime string lengths
sql/mysql_priv.h:
  Fixed/added new prototypes
sql/mysqld.cc:
  Removed opt_datetime_format_names
  Cleaned up handling of date_time format handling. (Fixed core dump when mysqld had error on startup)
  Removed some unnecessary double init of collation variables
sql/protocol.cc:
  Changed back protocol functions to always return dates in ISO format
sql/set_var.cc:
  Added variables time_format, date_format and datetime_format
  This had to be recoded becasue checking was done in 'update' method and not in 'check' method.
sql/set_var.h:
  Removed class sys_var_datetime_format() as this defined a variable (which doesn't work) instead of updating a variable
sql/share/czech/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/danish/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/dutch/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/english/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/estonian/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/french/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/german/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/greek/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/hungarian/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/italian/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/japanese/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/korean/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/norwegian-ny/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/norwegian/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/polish/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/portuguese/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/romanian/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/russian/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/serbian/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/slovak/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/spanish/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/swedish/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/share/ukrainian/errmsg.txt:
  simplified 'wrong xxx name' error messages
sql/sql_base.cc:
  Use new find_type()
sql/sql_class.cc:
  Allocate/free date_time format variables
sql/sql_class.h:
  Define datetime_format variables
sql/sql_db.cc:
  Use new ER_WRONG_NAME error
sql/sql_lex.cc:
  Change lex to generate IDENT_QUOTED for quoted identifiers or identifers that are using characters > 128.
  This enabled us to not have to copy and convert the identifier to utf8 for simpe identifiers
sql/sql_parse.cc:
  Use new ER_WRONG_NAME error
  Use new find_type() function
sql/sql_prepare.cc:
  Use new defines
sql/sql_table.cc:
  Use new ER_WRONG_NAME error
sql/sql_yacc.yy:
  Don't copy and convert simple identifiers to utf8.
  Replace __FORMAT_TYPE defines with TIMESTAMP... defines
sql/structs.h:
  Renamed DATETIME_FORMAT to DATE_TIME format to indicate that it's for date/time/datetime formats
  Renamed WRONT_TIMESTAMP_FULL to TIMESTAMP_DATETIME_ERROR and TIMESTAMP_FULL to TIMESTAMP_DATETIME
  Added KNOWN_DATE_TIME_FORMAT struct for Item_func_get_format
sql/time.cc:
  Prepare str_to_TIME and str_to_time() for general date/time handling
  Removed THD from str_to... functions
  Renamed date/time/datetime functions to use 'date_time' instead of 'datetime'
  Added functions to make and copy DATE_TIME_FORMAT's
  Added trivial functions 'make_time()', 'make_date()' and 'make_datetime()'
strings/Makefile.am:
  Added my_strtoll10()
strings/ctype-bin.c:
  Cleared upper part of binary state map to be able to easily identify simple identifiers
strings/my_vsnprintf.c:
  F
2003-11-03 14:01:59 +02:00

341 lines
8.6 KiB
Plaintext

#
# Check some special create statements.
#
--disable_warnings
drop table if exists t1,t2,t3;
--enable_warnings
create table t1 (b char(0));
insert into t1 values (""),(null);
select * from t1;
drop table if exists t1;
create table t1 (b char(0) not null);
create table if not exists t1 (b char(0) not null);
insert into t1 values (""),(null);
select * from t1;
drop table t1;
create table t1 (a int not null auto_increment,primary key (a)) type=heap;
drop table t1;
#
# Test of some CREATE TABLE'S that should fail
#
--error 1146
create table t2 type=heap select * from t1;
--error 1146
create table t2 select auto+1 from t1;
drop table if exists t1,t2;
--error 1167
create table t1 (b char(0) not null, index(b));
--error 1163
create table t1 (a int not null,b text) type=heap;
drop table if exists t1;
--error 1075
create table t1 (ordid int(8) not null auto_increment, ord varchar(50) not null, primary key (ord,ordid)) type=heap;
-- error 1044,1
create table not_existing_database.test (a int);
--error 1279
create table `a/a` (a int);
--error 1279
create table `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa int);
--error 1059
create table a (`aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` int);
#
# test of dummy table names
#
create table 1ea10 (1a20 int,1e int);
insert into 1ea10 values(1,1);
select 1ea10.1a20,1e+ 1e+10 from 1ea10;
drop table 1ea10;
create table t1 (t1.index int);
drop table t1;
drop database if exists test_$1;
create database test_$1;
create table test_$1.$test1 (a$1 int, $b int, c$ int);
insert into test_$1.$test1 values (1,2,3);
select a$1, $b, c$ from test_$1.$test1;
create table test_$1.test2$ (a int);
drop table test_$1.test2$;
drop database test_$1;
--error 1279
create table `` (a int);
--error 1279
drop table if exists ``;
--error 1279
create table t1 (`` int);
--error 1279
create table t1 (i int, index `` (i));
#
# Test of CREATE ... SELECT with indexes
#
create table t1 (a int auto_increment not null primary key, B CHAR(20));
insert into t1 (b) values ("hello"),("my"),("world");
create table t2 (key (b)) select * from t1;
explain select * from t2 where b="world";
select * from t2 where b="world";
drop table t1,t2;
#
# Test types after CREATE ... SELECT
#
create table t1(x varchar(50) );
create table t2 select x from t1 where 1=2;
describe t1;
describe t2;
drop table t2;
create table t2 select now() as a , curtime() as b, curdate() as c , 1+1 as d , 1.0 + 1 as e , 33333333333333333 + 3 as f;
describe t2;
drop table t2;
create table t2 select CAST("2001-12-29" AS DATE) as d, CAST("20:45:11" AS TIME) as t, CAST("2001-12-29 20:45:11" AS DATETIME) as dt;
describe t2;
drop table t1,t2;
#
# Test of CREATE ... SELECT with duplicate fields
#
create table t1 (a tinyint);
create table t2 (a int) select * from t1;
describe t1;
describe t2;
drop table if exists t2;
--error 1060
create table t2 (a int, a float) select * from t1;
drop table if exists t2;
--error 1060
create table t2 (a int) select a as b, a+1 as b from t1;
drop table if exists t2;
--error 1060
create table t2 (b int) select a as b, a+1 as b from t1;
drop table if exists t1,t2;
#
# Test CREATE ... SELECT when insert fails
#
CREATE TABLE t1 (a int not null);
INSERT INTO t1 values (1),(2),(1);
--error 1062
CREATE TABLE t2 (primary key(a)) SELECT * FROM t1;
--error 1146
SELECT * from t2;
DROP TABLE t1;
DROP TABLE IF EXISTS t2;
#
# Test of primary key with 32 index
#
create table t1 (a int not null, b int, primary key(a), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b), key (b));
show create table t1;
drop table t1;
create table t1 select if(1,'1','0'), month("2002-08-02");
drop table t1;
create table t1 select if('2002'='2002','Y','N');
select * from t1;
drop table if exists t1;
#
# Test default table type
#
SET SESSION table_type="heap";
SELECT @@table_type;
CREATE TABLE t1 (a int not null);
show create table t1;
drop table t1;
# Test what happens when using a non existing table type
SET SESSION table_type="gemini";
SELECT @@table_type;
CREATE TABLE t1 (a int not null);
show create table t1;
SET SESSION table_type=default;
drop table t1;
#
# ISO requires that primary keys are implicitly NOT NULL
#
create table t1 ( k1 varchar(2), k2 int, primary key(k1,k2));
insert into t1 values ("a", 1), ("b", 2);
--error 1048
insert into t1 values ("c", NULL);
--error 1048
insert into t1 values (NULL, 3);
--error 1048
insert into t1 values (NULL, NULL);
drop table t1;
#
# Bug # 801
#
create table t1 select x'4132';
drop table t1;
#
# bug #1434
#
create table t1 select 1,2,3;
create table if not exists t1 select 1,2;
--error 1136
create table if not exists t1 select 1,2,3,4;
create table if not exists t1 select 1;
select * from t1;
drop table t1;
create table t1 select 1,2,3;
create table if not exists t1 select 1,2;
--error 1136
create table if not exists t1 select 1,2,3,4;
create table if not exists t1 select 1;
select * from t1;
drop table t1;
#
# Test create table if not exists with duplicate key error
#
create table t1 (a int not null, b int, primary key (a));
insert into t1 values (1,1);
create table if not exists t1 select 2;
select * from t1;
create table if not exists t1 select 3 as 'a',4 as 'b';
--error 1062
create table if not exists t1 select 3 as 'a',3 as 'b';
select * from t1;
drop table t1;
#
# Test create with foreign keys
#
create table t1 (a int, key(a));
create table t2 (b int, foreign key(b) references t1(a), key(b));
drop table if exists t1,t2;
#
# Test for CREATE TABLE .. LIKE ..
#
create table t1(id int not null, name char(20));
insert into t1 values(10,'mysql'),(20,'monty- the creator');
create table t2(id int not null);
insert into t2 values(10),(20);
create table t3 like t1;
show create table t3;
select * from t3;
create table if not exists t3 like t1;
select @@warning_count;
create temporary table t3 like t2;
show create table t3;
select * from t3;
drop table t3;
show create table t3;
select * from t3;
drop table t2, t3;
drop database if exists test_$1;
create database test_$1;
create table test_$1.t3 like t1;
create temporary table t3 like test_$1.t3;
show create table t3;
create table t2 like t3;
show create table t2;
select * from t2;
create table t3 like t1;
--error 1050
create table t3 like test_$1.t3;
--error 1044,1
create table non_existing_database.t1 like t1;
--error 1051
create table t3 like non_existing_table;
--error 1050
create temporary table t3 like t1;
--error 1279
create table t3 like `a/a`;
drop table t1, t2, t3;
drop table t3;
drop database test_$1;
#
# Test default table type
#
SET SESSION table_type="heap";
SELECT @@table_type;
CREATE TABLE t1 (a int not null);
show create table t1;
drop table t1;
# Test what happens when using a non existing table type
SET SESSION table_type="gemini";
SELECT @@table_type;
CREATE TABLE t1 (a int not null);
show create table t1;
SET SESSION table_type=default;
drop table t1;
#
# Test types of data for create select with functions
#
create table t1(a int,b int,c int unsigned,d date,e char,f datetime,g time,h blob);
insert into t1(a)values(1);
insert into t1(a,b,c,d,e,f,g,h)
values(2,-2,2,'1825-12-14','a','2003-1-1 3:2:1','4:3:2','binary data');
select * from t1;
select a,
ifnull(b,cast(-7 as signed)) as b,
ifnull(c,cast(7 as unsigned)) as c,
ifnull(d,cast('2000-01-01' as date)) as d,
ifnull(e,cast('b' as char)) as e,
ifnull(f,cast('2000-01-01' as datetime)) as f,
ifnull(g,cast('5:4:3' as time)) as g,
ifnull(h,cast('yet another binary data' as binary)) as h,
addtime(cast('1:0:0' as time),cast('1:0:0' as time)) as dd
from t1;
create table t2
select
a,
ifnull(b,cast(-7 as signed)) as b,
ifnull(c,cast(7 as unsigned)) as c,
ifnull(d,cast('2000-01-01' as date)) as d,
ifnull(e,cast('b' as char)) as e,
ifnull(f,cast('2000-01-01' as datetime)) as f,
ifnull(g,cast('5:4:3' as time)) as g,
ifnull(h,cast('yet another binary data' as binary)) as h,
addtime(cast('1:0:0' as time),cast('1:0:0' as time)) as dd
from t1;
explain t2;
select * from t2;
drop table t1, t2;
#
# Bug #1209
#
--disable_warnings
drop database if exists test_$1;
--enable_warnings
create database test_$1;
use test_$1;
select database();
drop database test_$1;
select database();
# Connect without a database
connect (user4,localhost,mysqltest_1,,*NO-ONE*);
select database();