Commit 7e4f1e90 authored by unknown's avatar unknown

Now table and database inhirited a character set from a level above at CREATE time

Some optimization to reduce rules number in sql_yacc.yy


mysql-test/r/create.result:
  Now table and database inhirited a character set from a level above at CREATE time
mysql-test/r/fulltext.result:
  Now table and database inhirited a character set from a level above at CREATE time
mysql-test/r/innodb.result:
  Now table and database inhirited a character set from a level above at CREATE time
mysql-test/r/merge.result:
  Now table and database inhirited a character set from a level above at CREATE time
mysql-test/r/show_check.result:
  Now table and database inhirited a character set from a level above at CREATE time
mysql-test/r/symlink.result:
  Now table and database inhirited a character set from a level above at CREATE time
mysql-test/r/type_enum.result:
  Now table and database inhirited a character set from a level above at CREATE time
mysql-test/r/type_set.result:
  Now table and database inhirited a character set from a level above at CREATE time
sql/sql_yacc.yy:
  Now table and database inhirited a character set from a level above at CREATE time
  Some optimization to reduce rules number
parent c6d7ac6a
...@@ -150,5 +150,5 @@ t1 CREATE TABLE `t1` ( ...@@ -150,5 +150,5 @@ t1 CREATE TABLE `t1` (
KEY `b_29` (`b`), KEY `b_29` (`b`),
KEY `b_30` (`b`), KEY `b_30` (`b`),
KEY `b_31` (`b`) KEY `b_31` (`b`)
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
drop table t1; drop table t1;
...@@ -139,7 +139,7 @@ t2 CREATE TABLE `t2` ( ...@@ -139,7 +139,7 @@ t2 CREATE TABLE `t2` (
`inhalt` text character set latin1, `inhalt` text character set latin1,
KEY `tig` (`ticket`), KEY `tig` (`ticket`),
FULLTEXT KEY `tix` (`inhalt`) FULLTEXT KEY `tix` (`inhalt`)
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
select * from t2 where MATCH inhalt AGAINST (NULL); select * from t2 where MATCH inhalt AGAINST (NULL);
ticket inhalt ticket inhalt
select * from t2 where MATCH inhalt AGAINST ('foobar'); select * from t2 where MATCH inhalt AGAINST ('foobar');
......
...@@ -807,7 +807,7 @@ Table Create Table ...@@ -807,7 +807,7 @@ Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` char(20) character set latin1 default NULL, `a` char(20) character set latin1 default NULL,
KEY `a` (`a`) KEY `a` (`a`)
) TYPE=InnoDB ) TYPE=InnoDB CHARSET=latin1
drop table t1; drop table t1;
create temporary table t1 (a int not null auto_increment, primary key(a)) type=innodb; create temporary table t1 (a int not null auto_increment, primary key(a)) type=innodb;
insert into t1 values (NULL),(NULL),(NULL); insert into t1 values (NULL),(NULL),(NULL);
......
...@@ -174,7 +174,7 @@ t3 CREATE TABLE `t3` ( ...@@ -174,7 +174,7 @@ t3 CREATE TABLE `t3` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
`b` char(20) character set latin1 default NULL, `b` char(20) character set latin1 default NULL,
KEY `a` (`a`) KEY `a` (`a`)
) TYPE=MRG_MyISAM UNION=(t1,t2) ) TYPE=MRG_MyISAM CHARSET=latin1 UNION=(t1,t2)
create table t4 (a int not null, b char(10), key(a)) type=MERGE UNION=(t1,t2); create table t4 (a int not null, b char(10), key(a)) type=MERGE UNION=(t1,t2);
select * from t4; select * from t4;
Can't open file: 't4.MRG'. (errno: 143) Can't open file: 't4.MRG'. (errno: 143)
...@@ -249,14 +249,14 @@ t3 CREATE TABLE `t3` ( ...@@ -249,14 +249,14 @@ t3 CREATE TABLE `t3` (
`incr` int(11) NOT NULL default '0', `incr` int(11) NOT NULL default '0',
`othr` int(11) NOT NULL default '0', `othr` int(11) NOT NULL default '0',
PRIMARY KEY (`incr`) PRIMARY KEY (`incr`)
) TYPE=MRG_MyISAM UNION=(t1,t2) ) TYPE=MRG_MyISAM CHARSET=latin1 UNION=(t1,t2)
alter table t3 drop primary key; alter table t3 drop primary key;
show create table t3; show create table t3;
Table Create Table Table Create Table
t3 CREATE TABLE `t3` ( t3 CREATE TABLE `t3` (
`incr` int(11) NOT NULL default '0', `incr` int(11) NOT NULL default '0',
`othr` int(11) NOT NULL default '0' `othr` int(11) NOT NULL default '0'
) TYPE=MRG_MyISAM UNION=(t1,t2) ) TYPE=MRG_MyISAM CHARSET=latin1 UNION=(t1,t2)
drop table t3,t2,t1; drop table t3,t2,t1;
create table t1 (a int not null) type=merge; create table t1 (a int not null) type=merge;
select * from t1; select * from t1;
...@@ -287,28 +287,28 @@ t3 CREATE TABLE `t3` ( ...@@ -287,28 +287,28 @@ t3 CREATE TABLE `t3` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
`b` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0',
KEY `a` (`a`,`b`) KEY `a` (`a`,`b`)
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
show create table t4; show create table t4;
Table Create Table Table Create Table
t4 CREATE TABLE `t4` ( t4 CREATE TABLE `t4` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
`b` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0',
KEY `a` (`a`,`b`) KEY `a` (`a`,`b`)
) TYPE=MRG_MyISAM UNION=(t1,t2) ) TYPE=MRG_MyISAM CHARSET=latin1 UNION=(t1,t2)
show create table t5; show create table t5;
Table Create Table Table Create Table
t5 CREATE TABLE `t5` ( t5 CREATE TABLE `t5` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
`b` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0',
KEY `a` (`a`,`b`) KEY `a` (`a`,`b`)
) TYPE=MRG_MyISAM INSERT_METHOD=FIRST UNION=(t1,t2) ) TYPE=MRG_MyISAM CHARSET=latin1 INSERT_METHOD=FIRST UNION=(t1,t2)
show create table t6; show create table t6;
Table Create Table Table Create Table
t6 CREATE TABLE `t6` ( t6 CREATE TABLE `t6` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
`b` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0',
KEY `a` (`a`,`b`) KEY `a` (`a`,`b`)
) TYPE=MRG_MyISAM INSERT_METHOD=LAST UNION=(t1,t2) ) TYPE=MRG_MyISAM CHARSET=latin1 INSERT_METHOD=LAST UNION=(t1,t2)
insert into t1 values (1,1),(1,2),(1,3),(1,4); insert into t1 values (1,1),(1,2),(1,3),(1,4);
insert into t2 values (2,1),(2,2),(2,3),(2,4); insert into t2 values (2,1),(2,2),(2,3),(2,4);
select * from t3 order by b,a limit 3; select * from t3 order by b,a limit 3;
...@@ -373,7 +373,7 @@ t4 CREATE TABLE `t4` ( ...@@ -373,7 +373,7 @@ t4 CREATE TABLE `t4` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
`b` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0',
KEY `a` (`a`,`b`) KEY `a` (`a`,`b`)
) TYPE=MRG_MyISAM UNION=(t1,t2,t3) ) TYPE=MRG_MyISAM CHARSET=latin1 UNION=(t1,t2,t3)
select * from t4 order by a,b; select * from t4 order by a,b;
a b a b
1 1 1 1
...@@ -399,7 +399,7 @@ t4 CREATE TABLE `t4` ( ...@@ -399,7 +399,7 @@ t4 CREATE TABLE `t4` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
`b` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0',
KEY `a` (`a`,`b`) KEY `a` (`a`,`b`)
) TYPE=MRG_MyISAM INSERT_METHOD=FIRST UNION=(t1,t2,t3) ) TYPE=MRG_MyISAM CHARSET=latin1 INSERT_METHOD=FIRST UNION=(t1,t2,t3)
insert into t4 values (4,1),(4,2); insert into t4 values (4,1),(4,2);
select * from t1 order by a,b; select * from t1 order by a,b;
a b a b
......
...@@ -77,13 +77,13 @@ show create table t1; ...@@ -77,13 +77,13 @@ show create table t1;
Table Create Table Table Create Table
t1 CREATE TEMPORARY TABLE `t1` ( t1 CREATE TEMPORARY TABLE `t1` (
`a` int(11) NOT NULL default '0' `a` int(11) NOT NULL default '0'
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
alter table t1 rename t2; alter table t1 rename t2;
show create table t2; show create table t2;
Table Create Table Table Create Table
t2 CREATE TEMPORARY TABLE `t2` ( t2 CREATE TEMPORARY TABLE `t2` (
`a` int(11) NOT NULL default '0' `a` int(11) NOT NULL default '0'
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
drop table t2; drop table t2;
create table t1 ( create table t1 (
test_set set( 'val1', 'val2', 'val3' ) not null default '', test_set set( 'val1', 'val2', 'val3' ) not null default '',
...@@ -96,7 +96,7 @@ t1 CREATE TABLE `t1` ( ...@@ -96,7 +96,7 @@ t1 CREATE TABLE `t1` (
`test_set` set('val1','val2','val3') NOT NULL default '', `test_set` set('val1','val2','val3') NOT NULL default '',
`name` char(20) character set latin1 default 'O''Brien' COMMENT 'O''Brien as default', `name` char(20) character set latin1 default 'O''Brien' COMMENT 'O''Brien as default',
`c` int(11) NOT NULL default '0' COMMENT 'int column' `c` int(11) NOT NULL default '0' COMMENT 'int column'
) TYPE=MyISAM COMMENT='it''s a table' ) TYPE=MyISAM CHARSET=latin1 COMMENT='it''s a table'
show full columns from t1; show full columns from t1;
Field Type Null Key Default Extra Privileges Comment Field Type Null Key Default Extra Privileges Comment
test_set set('val1','val2','val3') select,insert,update,references test_set set('val1','val2','val3') select,insert,update,references
...@@ -109,7 +109,7 @@ Table Create Table ...@@ -109,7 +109,7 @@ Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
UNIQUE KEY `aa` (`a`) UNIQUE KEY `aa` (`a`)
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
drop table t1; drop table t1;
create table t1 (a int not null, primary key (a)); create table t1 (a int not null, primary key (a));
show create table t1; show create table t1;
...@@ -117,7 +117,7 @@ Table Create Table ...@@ -117,7 +117,7 @@ Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
PRIMARY KEY (`a`) PRIMARY KEY (`a`)
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
drop table t1; drop table t1;
flush tables; flush tables;
show open tables; show open tables;
...@@ -135,7 +135,7 @@ t1 CREATE TABLE `t1` ( ...@@ -135,7 +135,7 @@ t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
`b` char(10) character set latin1 default NULL, `b` char(10) character set latin1 default NULL,
KEY `b` (`b`) KEY `b` (`b`)
) TYPE=MyISAM MIN_ROWS=10 MAX_ROWS=100 AVG_ROW_LENGTH=10 PACK_KEYS=1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED COMMENT='test' ) TYPE=MyISAM CHARSET=latin1 MIN_ROWS=10 MAX_ROWS=100 AVG_ROW_LENGTH=10 PACK_KEYS=1 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=FIXED COMMENT='test'
alter table t1 MAX_ROWS=200 ROW_FORMAT=dynamic PACK_KEYS=0; alter table t1 MAX_ROWS=200 ROW_FORMAT=dynamic PACK_KEYS=0;
show create table t1; show create table t1;
Table Create Table Table Create Table
...@@ -143,7 +143,7 @@ t1 CREATE TABLE `t1` ( ...@@ -143,7 +143,7 @@ t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
`b` varchar(10) character set latin1 default NULL, `b` varchar(10) character set latin1 default NULL,
KEY `b` (`b`) KEY `b` (`b`)
) TYPE=MyISAM MIN_ROWS=10 MAX_ROWS=200 AVG_ROW_LENGTH=10 PACK_KEYS=0 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='test' ) TYPE=MyISAM CHARSET=latin1 MIN_ROWS=10 MAX_ROWS=200 AVG_ROW_LENGTH=10 PACK_KEYS=0 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='test'
ALTER TABLE t1 AVG_ROW_LENGTH=0 CHECKSUM=0 COMMENT="" MIN_ROWS=0 MAX_ROWS=0 PACK_KEYS=DEFAULT DELAY_KEY_WRITE=0 ROW_FORMAT=default; ALTER TABLE t1 AVG_ROW_LENGTH=0 CHECKSUM=0 COMMENT="" MIN_ROWS=0 MAX_ROWS=0 PACK_KEYS=DEFAULT DELAY_KEY_WRITE=0 ROW_FORMAT=default;
show create table t1; show create table t1;
Table Create Table Table Create Table
...@@ -151,7 +151,7 @@ t1 CREATE TABLE `t1` ( ...@@ -151,7 +151,7 @@ t1 CREATE TABLE `t1` (
`a` int(11) NOT NULL default '0', `a` int(11) NOT NULL default '0',
`b` varchar(10) character set latin1 default NULL, `b` varchar(10) character set latin1 default NULL,
KEY `b` (`b`) KEY `b` (`b`)
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
drop table t1; drop table t1;
create table t1 (a decimal(9,2), b decimal (9,0), e double(9,2), f double(5,0), h float(3,2), i float(3,0)); create table t1 (a decimal(9,2), b decimal (9,0), e double(9,2), f double(5,0), h float(3,2), i float(3,0));
show columns from t1; show columns from t1;
......
...@@ -39,7 +39,7 @@ t9 CREATE TABLE `t9` ( ...@@ -39,7 +39,7 @@ t9 CREATE TABLE `t9` (
`b` char(16) character set latin1 NOT NULL default '', `b` char(16) character set latin1 NOT NULL default '',
`c` int(11) NOT NULL default '0', `c` int(11) NOT NULL default '0',
PRIMARY KEY (`a`) PRIMARY KEY (`a`)
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
alter table t9 rename t8, add column d int not null; alter table t9 rename t8, add column d int not null;
alter table t8 rename t7; alter table t8 rename t7;
rename table t7 to t9; rename table t7 to t9;
...@@ -61,5 +61,5 @@ t9 CREATE TABLE `t9` ( ...@@ -61,5 +61,5 @@ t9 CREATE TABLE `t9` (
`c` int(11) NOT NULL default '0', `c` int(11) NOT NULL default '0',
`d` int(11) NOT NULL default '0', `d` int(11) NOT NULL default '0',
PRIMARY KEY (`a`) PRIMARY KEY (`a`)
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
drop database test_mysqltest; drop database test_mysqltest;
...@@ -1627,12 +1627,12 @@ show create table t1; ...@@ -1627,12 +1627,12 @@ show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` enum('','a','b') NOT NULL default '' `a` enum('','a','b') NOT NULL default ''
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
drop table t1; drop table t1;
create table t1 (a enum (' ','a','b ') not null default 'b '); create table t1 (a enum (' ','a','b ') not null default 'b ');
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` enum('','a','b') NOT NULL default 'b' `a` enum('','a','b') NOT NULL default 'b'
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
drop table t1; drop table t1;
...@@ -3,12 +3,12 @@ show create table t1; ...@@ -3,12 +3,12 @@ show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` set('','a','b') NOT NULL default '' `a` set('','a','b') NOT NULL default ''
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
drop table t1; drop table t1;
create table t1 (a set (' ','a','b ') not null default 'b '); create table t1 (a set (' ','a','b ') not null default 'b ');
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`a` set('','a','b') NOT NULL default 'b' `a` set('','a','b') NOT NULL default 'b'
) TYPE=MyISAM ) TYPE=MyISAM CHARSET=latin1
drop table t1; drop table t1;
...@@ -67,6 +67,7 @@ inline Item *or_or_concat(Item* A, Item* B) ...@@ -67,6 +67,7 @@ inline Item *or_or_concat(Item* A, Item* B)
interval_type interval; interval_type interval;
LEX_USER *lex_user; LEX_USER *lex_user;
enum Item_udftype udf_type; enum Item_udftype udf_type;
CHARSET_INFO *charset;
} }
%{ %{
...@@ -600,6 +601,11 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -600,6 +601,11 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%type <lex_user> user grant_user %type <lex_user> user grant_user
%type <charset>
charset_name
charset_name_or_default
opt_db_default_character_set
%type <NONE> %type <NONE>
query verb_clause create change select do drop insert replace insert2 query verb_clause create change select do drop insert replace insert2
insert_values update delete truncate rename insert_values update delete truncate rename
...@@ -758,6 +764,7 @@ master_def: ...@@ -758,6 +764,7 @@ master_def:
create: create:
CREATE opt_table_options TABLE_SYM opt_if_not_exists table_ident CREATE opt_table_options TABLE_SYM opt_if_not_exists table_ident
{ {
THD *thd=current_thd;
LEX *lex=Lex; LEX *lex=Lex;
lex->sql_command= SQLCOM_CREATE_TABLE; lex->sql_command= SQLCOM_CREATE_TABLE;
if (!add_table_to_list($5, if (!add_table_to_list($5,
...@@ -771,7 +778,7 @@ create: ...@@ -771,7 +778,7 @@ create:
bzero((char*) &lex->create_info,sizeof(lex->create_info)); bzero((char*) &lex->create_info,sizeof(lex->create_info));
lex->create_info.options=$2 | $4; lex->create_info.options=$2 | $4;
lex->create_info.db_type= default_table_type; lex->create_info.db_type= default_table_type;
lex->create_info.table_charset=NULL; lex->create_info.table_charset=thd->db_charset?thd->db_charset:default_charset_info;
} }
create2 create2
...@@ -793,13 +800,13 @@ create: ...@@ -793,13 +800,13 @@ create:
lex->key_list.push_back(new Key($2,$4.str, $5, lex->col_list)); lex->key_list.push_back(new Key($2,$4.str, $5, lex->col_list));
lex->col_list.empty(); lex->col_list.empty();
} }
| CREATE DATABASE opt_if_not_exists ident default_charset | CREATE DATABASE opt_if_not_exists ident opt_db_default_character_set
{ {
LEX *lex=Lex; LEX *lex=Lex;
lex->sql_command=SQLCOM_CREATE_DB; lex->sql_command=SQLCOM_CREATE_DB;
lex->name=$4.str; lex->name=$4.str;
lex->create_info.options=$3; lex->create_info.options=$3;
lex->create_info.table_charset=lex->charset; lex->create_info.table_charset=$5;
} }
| CREATE udf_func_type UDF_SYM ident | CREATE udf_func_type UDF_SYM ident
{ {
...@@ -886,9 +893,9 @@ create_table_option: ...@@ -886,9 +893,9 @@ create_table_option:
table_list->next=0; table_list->next=0;
lex->create_info.used_fields|= HA_CREATE_USED_UNION; lex->create_info.used_fields|= HA_CREATE_USED_UNION;
} }
| CHARSET EQ charset_or_nocharset | CHARSET EQ charset_name_or_default
{ {
Lex->create_info.table_charset=Lex->charset; Lex->create_info.table_charset= $3;
Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET; Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET;
} }
| INSERT_METHOD EQ merge_insert_types { Lex->create_info.merge_insert_method= $3; Lex->create_info.used_fields|= HA_CREATE_USED_INSERT_METHOD;} | INSERT_METHOD EQ merge_insert_types { Lex->create_info.merge_insert_method= $3; Lex->create_info.used_fields|= HA_CREATE_USED_INSERT_METHOD;}
...@@ -996,7 +1003,7 @@ type: ...@@ -996,7 +1003,7 @@ type:
$$=FIELD_TYPE_TINY; } $$=FIELD_TYPE_TINY; }
| BOOL_SYM { Lex->length=(char*) "1"; | BOOL_SYM { Lex->length=(char*) "1";
$$=FIELD_TYPE_TINY; } $$=FIELD_TYPE_TINY; }
| char '(' NUM ')' opt_binary { Lex->length=$3.str; | char '(' NUM ')' opt_binary { Lex->length=$3.str;
$$=FIELD_TYPE_STRING; } $$=FIELD_TYPE_STRING; }
| char opt_binary { Lex->length=(char*) "1"; | char opt_binary { Lex->length=(char*) "1";
$$=FIELD_TYPE_STRING; } $$=FIELD_TYPE_STRING; }
...@@ -1125,28 +1132,28 @@ attribute: ...@@ -1125,28 +1132,28 @@ attribute:
| UNIQUE_SYM KEY_SYM { Lex->type|= UNIQUE_KEY_FLAG; } | UNIQUE_SYM KEY_SYM { Lex->type|= UNIQUE_KEY_FLAG; }
| COMMENT_SYM text_literal { Lex->comment= $2; }; | COMMENT_SYM text_literal { Lex->comment= $2; };
charset: charset_name:
ident ident
{ {
if (!(Lex->charset=get_charset_by_name($1.str,MYF(0)))) if (!($$=get_charset_by_name($1.str,MYF(0))))
{ {
net_printf(&current_thd->net,ER_UNKNOWN_CHARACTER_SET,$1.str); net_printf(&current_thd->net,ER_UNKNOWN_CHARACTER_SET,$1.str);
YYABORT; YYABORT;
} }
}; };
charset_or_nocharset: charset_name_or_default:
charset charset_name { $$=$1; }
| DEFAULT {Lex->charset=NULL; } | DEFAULT { $$=NULL; } ;
opt_binary: opt_db_default_character_set:
/* empty */ { Lex->charset=NULL; } /* empty */ { $$=default_charset_info; }
| BINARY { Lex->type|=BINARY_FLAG; Lex->charset=NULL; } | DEFAULT CHAR_SYM SET charset_name_or_default { $$=$4; };
| CHAR_SYM SET charset {/* charset is already in Lex->charset */} ;
default_charset: opt_binary:
/* empty */ { Lex->charset=NULL; } /* empty */ { Lex->charset=NULL; }
| DEFAULT CHAR_SYM SET charset_or_nocharset ; | BINARY { Lex->type|=BINARY_FLAG; Lex->charset=NULL; }
| CHAR_SYM SET charset_name { Lex->charset=$3; } ;
references: references:
REFERENCES table_ident REFERENCES table_ident
...@@ -1247,6 +1254,7 @@ string_list: ...@@ -1247,6 +1254,7 @@ string_list:
alter: alter:
ALTER opt_ignore TABLE_SYM table_ident ALTER opt_ignore TABLE_SYM table_ident
{ {
THD *thd=current_thd;
LEX *lex=Lex; LEX *lex=Lex;
lex->sql_command = SQLCOM_ALTER_TABLE; lex->sql_command = SQLCOM_ALTER_TABLE;
lex->name=0; lex->name=0;
...@@ -1264,20 +1272,20 @@ alter: ...@@ -1264,20 +1272,20 @@ alter:
lex->select->db=lex->name=0; lex->select->db=lex->name=0;
bzero((char*) &lex->create_info,sizeof(lex->create_info)); bzero((char*) &lex->create_info,sizeof(lex->create_info));
lex->create_info.db_type= DB_TYPE_DEFAULT; lex->create_info.db_type= DB_TYPE_DEFAULT;
lex->create_info.table_charset=thd->db_charset?thd->db_charset:default_charset_info;
lex->create_info.row_type= ROW_TYPE_NOT_USED; lex->create_info.row_type= ROW_TYPE_NOT_USED;
lex->create_info.table_charset=NULL;
lex->alter_keys_onoff=LEAVE_AS_IS; lex->alter_keys_onoff=LEAVE_AS_IS;
lex->simple_alter=1; lex->simple_alter=1;
} }
alter_list; alter_list;
| ALTER DATABASE ident default_charset | ALTER DATABASE ident opt_db_default_character_set
{ {
LEX *lex=Lex; LEX *lex=Lex;
lex->sql_command=SQLCOM_ALTER_DB; lex->sql_command=SQLCOM_ALTER_DB;
lex->name=$3.str; lex->name=$3.str;
lex->create_info.table_charset=lex->charset; lex->create_info.table_charset=$4;
} };
alter_list: alter_list:
...@@ -1660,15 +1668,8 @@ expr_expr: ...@@ -1660,15 +1668,8 @@ expr_expr:
{ $$= new Item_date_add_interval($1,$4,$5,0); } { $$= new Item_date_add_interval($1,$4,$5,0); }
| expr '-' INTERVAL_SYM expr interval | expr '-' INTERVAL_SYM expr interval
{ $$= new Item_date_add_interval($1,$4,$5,1); } { $$= new Item_date_add_interval($1,$4,$5,1); }
| expr COLLATE_SYM ident | expr COLLATE_SYM charset_name
{ { $$= new Item_func_set_collation($1,$3); };
if (!(Lex->charset=get_charset_by_name($3.str,MYF(0))))
{
net_printf(&current_thd->net,ER_UNKNOWN_CHARACTER_SET,$3.str);
YYABORT;
}
$$= new Item_func_set_collation($1,Lex->charset);
};
/* expressions that begin with 'expr' that do NOT follow IN_SYM */ /* expressions that begin with 'expr' that do NOT follow IN_SYM */
no_in_expr: no_in_expr:
...@@ -1783,12 +1784,10 @@ simple_expr: ...@@ -1783,12 +1784,10 @@ simple_expr:
| CASE_SYM opt_expr WHEN_SYM when_list opt_else END | CASE_SYM opt_expr WHEN_SYM when_list opt_else END
{ $$= new Item_func_case(* $4, $2, $5 ); } { $$= new Item_func_case(* $4, $2, $5 ); }
| CONVERT_SYM '(' expr ',' cast_type ')' { $$= create_func_cast($3, $5); } | CONVERT_SYM '(' expr ',' cast_type ')' { $$= create_func_cast($3, $5); }
| CONVERT_SYM '(' expr USING charset ')' | CONVERT_SYM '(' expr USING charset_name ')'
{ $$= new Item_func_conv_charset($3,Lex->charset); } { $$= new Item_func_conv_charset($3,$5); }
| CONVERT_SYM '(' expr ',' expr ',' expr ')' | CONVERT_SYM '(' expr ',' expr ',' expr ')'
{ { $$= new Item_func_conv_charset3($3,$7,$5); }
$$= new Item_func_conv_charset3($3,$7,$5);
}
| FUNC_ARG0 '(' ')' | FUNC_ARG0 '(' ')'
{ $$= ((Item*(*)(void))($1.symbol->create_func))();} { $$= ((Item*(*)(void))($1.symbol->create_func))();}
| FUNC_ARG1 '(' expr ')' | FUNC_ARG1 '(' expr ')'
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment