diff options
author | unknown <monty@mysql.com> | 2005-11-05 01:32:55 +0200 |
---|---|---|
committer | unknown <monty@mysql.com> | 2005-11-05 01:32:55 +0200 |
commit | 2361720c981fc2eb27bc97c1ea7e043b634ffae1 (patch) | |
tree | 4a7b533b6da471261f5c13c46e4e9f256ec63a0c /sql/sql_yacc.yy | |
parent | a3db4abe8b5ecad27adaff3baa78a913d0b84f10 (diff) | |
parent | d4a7867a9ee0a44c8c943c75b5eb15e450ac61a7 (diff) | |
download | mariadb-git-2361720c981fc2eb27bc97c1ea7e043b634ffae1.tar.gz |
Merge mysql.com:/home/my/mysql-5.0
into mysql.com:/home/my/mysql-5.1
BUILD/FINISH.sh:
Auto merged
BitKeeper/deleted/.del-makefilewin.i~5c8479dcb8a455b2:
Auto merged
BitKeeper/deleted/.del-makefilewin~13888739357b3025:
Auto merged
BitKeeper/deleted/.del-makefilewin~14f24a4a173e2fcd:
Auto merged
BitKeeper/deleted/.del-makefilewin~15e9e5c9e8fa870b:
Auto merged
BitKeeper/deleted/.del-makefilewin~1c53f31b88dd36e:
Auto merged
BitKeeper/deleted/.del-makefilewin~1dbc058d76ebf1db:
Auto merged
BitKeeper/deleted/.del-makefilewin~2e0407fe123f8365:
Auto merged
BitKeeper/deleted/.del-makefilewin~2fc379bd4065c995:
Auto merged
BitKeeper/deleted/.del-makefilewin~389ee2dcf79afb79:
Auto merged
BitKeeper/deleted/.del-makefilewin~4d139e182457e553:
Auto merged
BitKeeper/deleted/.del-makefilewin~5104767c73775697:
Auto merged
BitKeeper/deleted/.del-makefilewin~608ed49dcd88e0f7:
Auto merged
BitKeeper/deleted/.del-makefilewin~63acd666293282a:
Auto merged
BitKeeper/deleted/.del-makefilewin~6ba64863bce3d0b8:
Auto merged
BitKeeper/deleted/.del-makefilewin~72a64128bacce71b:
Auto merged
BitKeeper/deleted/.del-makefilewin~78000390c783b1c5:
Auto merged
BitKeeper/deleted/.del-makefilewin~7a9d7d5a42bbfaf5:
Auto merged
Makefile.am:
Auto merged
BitKeeper/deleted/.del-makefilewin~a40ea12eebdd6ef0:
Auto merged
BitKeeper/deleted/.del-makefilewin~aeea7c82f21f7cf5:
Auto merged
BitKeeper/deleted/.del-makefilewin~b643e38d8da389ac:
Auto merged
BitKeeper/deleted/.del-makefilewin~c7b621c745e5de95:
Auto merged
BitKeeper/deleted/.del-makefilewin~c8273a47b90f52bb:
Auto merged
BitKeeper/deleted/.del-makefilewin~d1a9d1f7d33fcb73:
Auto merged
BitKeeper/deleted/.del-makefilewin~d37b6b303348c871:
Auto merged
BitKeeper/deleted/.del-makefilewin~d90f35fdc3f2ee5f:
Auto merged
BitKeeper/deleted/.del-makefilewin~dc4b8ad5ea53bd:
Auto merged
BitKeeper/deleted/.del-makefilewin~dea10ec1c94f7be:
Auto merged
BitKeeper/deleted/.del-makefilewin~ef3a208fa0e9b0db:
Auto merged
BitKeeper/deleted/.del-makefilewin~f1e3b890aa1c9ea3:
Auto merged
BitKeeper/deleted/.del-makefilewin~f4b7b99a887b7de:
Auto merged
BitKeeper/deleted/.del-makefilewin~fdda94ad32fa9e34:
Auto merged
BitKeeper/deleted/.del-my_cnf~977f69858affc57b:
Auto merged
BitKeeper/etc/config:
Auto merged
VC++Files/libmysqld/libmysqld.dsp:
Auto merged
VC++Files/sql/mysqld.dsp:
Auto merged
client/mysqltest.c:
Auto merged
include/Makefile.am:
Auto merged
include/base64.h:
Auto merged
include/my_base.h:
Auto merged
include/mysql_com.h:
Auto merged
libmysqld/Makefile.am:
Auto merged
mysql-test/mysql-test-run.pl:
Auto merged
mysql-test/mysql-test-run.sh:
Auto merged
mysql-test/r/ndb_basic.result:
Auto merged
mysql-test/r/ndb_condition_pushdown.result:
Auto merged
mysql-test/t/alter_table.test:
Auto merged
mysql-test/t/disabled.def:
Auto merged
mysql-test/t/query_cache.test:
Auto merged
mysys/Makefile.am:
Auto merged
mysys/base64.c:
Auto merged
scripts/make_win_src_distribution.sh:
Auto merged
scripts/mysql_create_system_tables.sh:
Auto merged
scripts/mysql_fix_privilege_tables.sql:
Auto merged
sql/Makefile.am:
Auto merged
sql/field.cc:
Auto merged
sql/field.h:
Auto merged
sql/ha_berkeley.cc:
Auto merged
sql/ha_berkeley.h:
Auto merged
sql/ha_federated.cc:
Auto merged
sql/ha_innodb.cc:
Auto merged
sql/ha_myisam.cc:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/handler.h:
Auto merged
sql/item.cc:
Auto merged
sql/item_subselect.cc:
Auto merged
sql/log.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/mysqld.cc:
Auto merged
sql/opt_range.cc:
Auto merged
sql/repl_failsafe.cc:
Auto merged
sql/slave.cc:
Auto merged
sql/slave.h:
Auto merged
sql/sp.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_cache.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_delete.cc:
Auto merged
sql/sql_help.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_load.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_select.h:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/table.h:
Auto merged
storage/heap/_check.c:
Auto merged
storage/heap/hp_create.c:
Auto merged
storage/innobase/include/Makefile.am:
Auto merged
storage/innobase/include/rem0rec.h:
Auto merged
storage/innobase/include/rem0rec.ic:
Auto merged
storage/innobase/row/row0ins.c:
Auto merged
storage/innobase/row/row0upd.c:
Auto merged
storage/myisam/mi_check.c:
Auto merged
storage/myisam/mi_delete.c:
Auto merged
storage/myisam/mi_rkey.c:
Auto merged
storage/myisam/mi_rnext_same.c:
Auto merged
storage/myisam/mi_search.c:
Auto merged
storage/myisam/mi_write.c:
Auto merged
storage/myisam/myisamchk.c:
Auto merged
storage/myisam/myisamdef.h:
Auto merged
storage/myisam/sort.c:
Auto merged
storage/myisammrg/myrg_queue.c:
Auto merged
storage/ndb/config/type_util.mk.am:
Auto merged
storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp:
Auto merged
storage/ndb/include/mgmapi/mgmapi_config_parameters.h:
Auto merged
storage/ndb/include/mgmapi/ndbd_exit_codes.h:
Auto merged
storage/ndb/include/transporter/TransporterCallback.hpp:
Auto merged
storage/ndb/src/common/mgmcommon/IPCConfig.cpp:
Auto merged
storage/ndb/src/common/transporter/SHM_Transporter.cpp:
Auto merged
storage/ndb/src/common/transporter/SHM_Transporter.hpp:
Auto merged
storage/ndb/src/common/transporter/SHM_Transporter.unix.cpp:
Auto merged
storage/ndb/src/common/transporter/SHM_Transporter.win32.cpp:
Auto merged
storage/ndb/src/common/transporter/Transporter.hpp:
Auto merged
storage/ndb/src/common/transporter/TransporterRegistry.cpp:
Auto merged
storage/ndb/src/common/util/Makefile.am:
Auto merged
storage/ndb/src/common/util/Parser.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
Auto merged
storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
Auto merged
storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp:
Auto merged
storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp:
Auto merged
storage/ndb/src/kernel/error/ndbd_exit_codes.c:
Auto merged
storage/ndb/src/kernel/vm/FastScheduler.cpp:
Auto merged
storage/ndb/src/kernel/vm/TransporterCallback.cpp:
Auto merged
storage/ndb/src/kernel/vm/VMSignal.hpp:
Auto merged
storage/ndb/src/mgmapi/mgmapi.cpp:
Auto merged
storage/ndb/src/mgmsrv/ConfigInfo.cpp:
Auto merged
storage/ndb/src/mgmsrv/InitConfigFileParser.cpp:
Auto merged
storage/ndb/src/mgmsrv/MgmtSrvr.cpp:
Auto merged
storage/ndb/src/mgmsrv/MgmtSrvr.hpp:
Auto merged
storage/ndb/src/mgmsrv/Services.cpp:
Auto merged
storage/ndb/src/ndbapi/TransporterFacade.cpp:
Auto merged
storage/ndb/test/ndbapi/testBackup.cpp:
Auto merged
storage/ndb/test/ndbapi/testOperations.cpp:
Auto merged
storage/ndb/test/src/HugoCalculator.cpp:
Auto merged
storage/ndb/tools/ndb_condig.cpp:
Auto merged
strings/ctype-big5.c:
Auto merged
strings/ctype-ucs2.c:
Auto merged
support-files/mysql.spec.sh:
Auto merged
BUILD/SETUP.sh:
manual merge
configure.in:
manual merge
mysql-test/r/alter_table.result:
manual merge
sql/handler.cc:
manual merge
sql/mysql_priv.h:
manual merge
sql/records.cc:
manual merge
sql/share/errmsg.txt:
manual merge
sql/sql_table.cc:
manual merge
Fix labels
sql/sql_update.cc:
manual merge
sql/table.cc:
manual merge
sql/unireg.cc:
manual merge
storage/ndb/config/type_ndbapi.mk.am:
manual merge
Diffstat (limited to 'sql/sql_yacc.yy')
-rw-r--r-- | sql/sql_yacc.yy | 96 |
1 files changed, 77 insertions, 19 deletions
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 77c1a37e16e..e6c0216ef3a 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -670,7 +670,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); %token YEAR_SYM %token ZEROFILL -%left JOIN_SYM +%left JOIN_SYM INNER_SYM STRAIGHT_JOIN CROSS LEFT RIGHT /* A dummy token to force the priority of table_ref production in a join. */ %left TABLE_REF_PRIORITY %left SET_VAR @@ -1279,6 +1279,7 @@ create: THD *thd= YYTHD; LEX *lex= thd->lex; lex->sql_command= SQLCOM_CREATE_VIEW; + lex->create_view_start= thd->query; /* first table in list is target VIEW name */ if (!lex->select_lex.add_table_to_list(thd, $7, NULL, 0)) YYABORT; @@ -3169,9 +3170,21 @@ create_table_option: | CHECKSUM_SYM opt_equal ulong_num { Lex->create_info.table_options|= $3 ? HA_OPTION_CHECKSUM : HA_OPTION_NO_CHECKSUM; Lex->create_info.used_fields|= HA_CREATE_USED_CHECKSUM; } | DELAY_KEY_WRITE_SYM opt_equal ulong_num { Lex->create_info.table_options|= $3 ? HA_OPTION_DELAY_KEY_WRITE : HA_OPTION_NO_DELAY_KEY_WRITE; Lex->create_info.used_fields|= HA_CREATE_USED_DELAY_KEY_WRITE; } | ROW_FORMAT_SYM opt_equal row_types { Lex->create_info.row_type= $3; Lex->create_info.used_fields|= HA_CREATE_USED_ROW_FORMAT; } - | RAID_TYPE opt_equal raid_types { Lex->create_info.raid_type= $3; Lex->create_info.used_fields|= HA_CREATE_USED_RAID;} - | RAID_CHUNKS opt_equal ulong_num { Lex->create_info.raid_chunks= $3; Lex->create_info.used_fields|= HA_CREATE_USED_RAID;} - | RAID_CHUNKSIZE opt_equal ulong_num { Lex->create_info.raid_chunksize= $3*RAID_BLOCK_SIZE; Lex->create_info.used_fields|= HA_CREATE_USED_RAID;} + | RAID_TYPE opt_equal raid_types + { + my_error(ER_WARN_DEPRECATED_SYNTAX, MYF(0), "RAID_TYPE", "PARTITION"); + YYABORT; + } + | RAID_CHUNKS opt_equal ulong_num + { + my_error(ER_WARN_DEPRECATED_SYNTAX, MYF(0), "RAID_CHUNKS", "PARTITION"); + YYABORT; + } + | RAID_CHUNKSIZE opt_equal ulong_num + { + my_error(ER_WARN_DEPRECATED_SYNTAX, MYF(0), "RAID_CHUNKSIZE", "PARTITION"); + YYABORT; + } | UNION_SYM opt_equal '(' table_list ')' { /* Move the union list to the merge_list */ @@ -3469,7 +3482,9 @@ type: spatial_type: GEOMETRY_SYM { $$= Field::GEOM_GEOMETRY; } | GEOMETRYCOLLECTION { $$= Field::GEOM_GEOMETRYCOLLECTION; } - | POINT_SYM { $$= Field::GEOM_POINT; } + | POINT_SYM { Lex->length= (char*)"21"; + $$= Field::GEOM_POINT; + } | MULTIPOINT { $$= Field::GEOM_MULTIPOINT; } | LINESTRING { $$= Field::GEOM_LINESTRING; } | MULTILINESTRING { $$= Field::GEOM_MULTILINESTRING; } @@ -3925,6 +3940,7 @@ alter: THD *thd= YYTHD; LEX *lex= thd->lex; lex->sql_command= SQLCOM_CREATE_VIEW; + lex->create_view_start= thd->query; lex->create_view_mode= VIEW_ALTER; /* first table in list is target VIEW name */ lex->select_lex.add_table_to_list(thd, $6, NULL, 0); @@ -4905,9 +4921,9 @@ predicate: { $$= new Item_func_eq(new Item_func_soundex($1), new Item_func_soundex($4)); } | bit_expr LIKE simple_expr opt_escape - { $$= new Item_func_like($1,$3,$4); } + { $$= new Item_func_like($1,$3,$4,Lex->escape_used); } | bit_expr not LIKE simple_expr opt_escape - { $$= new Item_func_not(new Item_func_like($1,$4,$5)); } + { $$= new Item_func_not(new Item_func_like($1,$4,$5, Lex->escape_used)); } | bit_expr REGEXP bit_expr { $$= new Item_func_regex($1,$3); } | bit_expr not REGEXP bit_expr { $$= negate_expression(YYTHD, new Item_func_regex($1,$4)); } @@ -5127,6 +5143,8 @@ simple_expr: { $$= new Item_func_atan($3,$5); } | CHAR_SYM '(' expr_list ')' { $$= new Item_func_char(*$3); } + | CHAR_SYM '(' expr_list USING charset_name ')' + { $$= new Item_func_char(*$3, $5); } | CHARSET '(' expr ')' { $$= new Item_func_charset($3); } | COALESCE '(' expr_list ')' @@ -5814,14 +5832,22 @@ derived_table_list: } ; +/* + Notice that JOIN is a left-associative operation, and it must be parsed + as such, that is, the parser must process first the left join operand + then the right one. Such order of processing ensures that the parser + produces correct join trees which is essential for semantic analysis + and subsequent optimization phases. +*/ join_table: +/* INNER JOIN variants */ /* - Evaluate production 'table_ref' before 'normal_join' so that - [INNER | CROSS] JOIN is properly nested as other left-associative - joins. + Use %prec to evaluate production 'table_ref' before 'normal_join' + so that [INNER | CROSS] JOIN is properly nested as other + left-associative joins. */ table_ref %prec TABLE_REF_PRIORITY normal_join table_ref - { YYERROR_UNLESS($1 && ($$=$3)); } + { YYERROR_UNLESS($1 && ($$=$3)); } | table_ref STRAIGHT_JOIN table_factor { YYERROR_UNLESS($1 && ($$=$3)); $3->straight=1; } | table_ref normal_join table_ref @@ -5863,6 +5889,13 @@ join_table: } '(' using_list ')' { add_join_natural($1,$3,$7); $$=$3; } + | table_ref NATURAL JOIN_SYM table_factor + { + YYERROR_UNLESS($1 && ($$=$4)); + add_join_natural($1,$4,NULL); + } + +/* LEFT JOIN variants */ | table_ref LEFT opt_outer JOIN_SYM table_ref ON { @@ -5894,6 +5927,8 @@ join_table: $6->outer_join|=JOIN_TYPE_LEFT; $$=$6; } + +/* RIGHT JOIN variants */ | table_ref RIGHT opt_outer JOIN_SYM table_ref ON { @@ -5931,10 +5966,7 @@ join_table: LEX *lex= Lex; if (!($$= lex->current_select->convert_right_join())) YYABORT; - } - | table_ref NATURAL JOIN_SYM table_factor - { YYERROR_UNLESS($1 && ($$=$4)); add_join_natural($1,$4,NULL); }; - + }; normal_join: JOIN_SYM {} @@ -6267,10 +6299,14 @@ having_clause: ; opt_escape: - ESCAPE_SYM simple_expr { $$= $2; } + ESCAPE_SYM simple_expr + { + Lex->escape_used= TRUE; + $$= $2; + } | /* empty */ { - + Lex->escape_used= FALSE; $$= ((YYTHD->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES) ? new Item_string("", 0, &my_charset_latin1) : new Item_string("\\", 1, &my_charset_latin1)); @@ -8594,6 +8630,18 @@ option_value: $2= $2 ? $2: global_system_variables.character_set_client; lex->var_list.push_back(new set_var_collation_client($2,thd->variables.collation_database,$2)); } + | NAMES_SYM equal expr + { + LEX *lex= Lex; + sp_pcontext *spc= lex->spcont; + LEX_STRING names; + + names.str= (char *)"names"; + names.length= 5; + if (spc && spc->find_pvar(&names)) + my_error(ER_SP_BAD_VAR_SHADOW, MYF(0), names.str); + YYABORT; + } | NAMES_SYM charset_name_or_default opt_collate { LEX *lex= Lex; @@ -8611,6 +8659,17 @@ option_value: { THD *thd=YYTHD; LEX_USER *user; + LEX *lex= Lex; + sp_pcontext *spc= lex->spcont; + LEX_STRING pw; + + pw.str= (char *)"password"; + pw.length= 8; + if (spc && spc->find_pvar(&pw)) + { + my_error(ER_SP_BAD_VAR_SHADOW, MYF(0), pw.str); + YYABORT; + } if (!(user=(LEX_USER*) thd->alloc(sizeof(LEX_USER)))) YYABORT; user->host=null_lex_str; @@ -9569,8 +9628,7 @@ view_user: (LEX_USER*) thd->alloc(sizeof(st_lex_user)))) YYABORT; view_user->user = $3; view_user->host=$5; - if (strchr(view_user->host.str, wild_many) || - strchr(view_user->host.str, wild_one)) + if (view_user->host.length == 0) { my_error(ER_NO_VIEW_USER, MYF(0)); YYABORT; |