From 50965c5d4f4fc6100dcaca1c1be56cb4e6d7d77c Mon Sep 17 00:00:00 2001 From: "serg@infomag.ape.relarn.ru" <> Date: Mon, 21 Aug 2000 15:35:27 +0400 Subject: [PATCH] sql_yacc.yy => CREATE TABLE (... COLLECTION ... ) syntax --- sql/item_func.h | 3 +- sql/sql_parse.cc | 80 ++++++++++++++++++++++++------------------------ sql/sql_yacc.yy | 71 +++++++++++++++++++++--------------------- 3 files changed, 77 insertions(+), 77 deletions(-) diff --git a/sql/item_func.h b/sql/item_func.h index 0e99673ead2..efee77c7be2 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -829,7 +829,7 @@ public: }; -/* SerG: for fulltext search */ +/* for fulltext search */ #include class Item_func_match :public Item_real_func @@ -855,4 +855,3 @@ public: double val(); longlong val_int() { return val()!=0.0; } }; - diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 3d903acbfbf..f86595cd0f7 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1,15 +1,15 @@ /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -172,7 +172,7 @@ check_connections(THD *thd) if (!thd->host) // If TCP/IP connection { char ip[17]; - + if (vio_peer_addr(net->vio,ip)) return (ER_BAD_HOST_ERROR); if (!(thd->ip = my_strdup(ip,MYF(0)))) @@ -182,7 +182,7 @@ check_connections(THD *thd) if (!strcmp(thd->ip,"127.0.0.1")) { if (!(thd->host=my_strdup("localhost",MYF(0)))) - return (ER_OUT_OF_RESOURCES); + return (ER_OUT_OF_RESOURCES); } else #endif @@ -501,7 +501,7 @@ int mysql_table_dump(THD* thd, char* db, char* tbl_name, int fd) table_list->lock_type = TL_READ_NO_INSERT; table_list->next = 0; remove_escape(table_list->real_name); - + if(!(table=open_ltable(thd, table_list, TL_READ_NO_INSERT))) DBUG_RETURN(1); @@ -521,12 +521,12 @@ int mysql_table_dump(THD* thd, char* db, char* tbl_name, int fd) error = table->file->dump(thd,fd); if(error) my_error(ER_GET_ERRNO, MYF(0)); - + err: - + close_thread_tables(thd); - - DBUG_RETURN(error); + + DBUG_RETURN(error); } @@ -594,7 +594,7 @@ bool do_command(THD *thd) tbl_name[tbl_len] = 0; if(mysql_table_dump(thd, db, tbl_name, -1)) send_error(&thd->net); // dump to NET - + break; } case COM_CHANGE_USER: @@ -714,7 +714,7 @@ bool do_command(THD *thd) if(check_access(thd, FILE_ACL, any_db)) break; mysql_log.write(command, 0); - + ulong pos; ushort flags; pos = uint4korr(packet + 1); @@ -951,7 +951,7 @@ mysql_execute_command(void) break; } case SQLCOM_LOAD_MASTER_TABLE: - + if (!tables->db) tables->db=thd->db; if (check_access(thd,CREATE_ACL,tables->db,&tables->grant.privilege)) @@ -984,11 +984,11 @@ mysql_execute_command(void) // this way we make sure that when we are done, we are clean break; } - + res = 0; send_ok(&thd->net); break; - + case SQLCOM_CREATE_TABLE: #ifdef DEMO_VERSION send_error(&thd->net,ER_NOT_ALLOWED_COMMAND); @@ -1083,7 +1083,7 @@ mysql_execute_command(void) case SQLCOM_SLAVE_STOP: stop_slave(thd); break; - + case SQLCOM_ALTER_TABLE: #if defined(DONT_ALLOW_SHOW_COMMANDS) @@ -1132,7 +1132,7 @@ mysql_execute_command(void) break; } #endif - case SQLCOM_SHOW_CREATE: + case SQLCOM_SHOW_CREATE: /* SerG:show */ { if(! tables->db) tables->db = thd->db; @@ -1141,7 +1141,7 @@ mysql_execute_command(void) send_error(&thd->net,ER_NO_DB_ERROR); /* purecov: inspected */ goto error; /* purecov: inspected */ } - res = mysqld_show_create(thd, tables); + res = mysqld_show_create(thd, tables); break; } case SQLCOM_REPAIR: @@ -1389,7 +1389,7 @@ mysql_execute_command(void) break; } #endif - case SQLCOM_SHOW_FIELDS: + case SQLCOM_SHOW_FIELDS: /* SerG:show */ #ifdef DONT_ALLOW_SHOW_COMMANDS send_error(&thd->net,ER_NOT_ALLOWED_COMMAND); /* purecov: inspected */ DBUG_VOID_RETURN; @@ -1415,7 +1415,7 @@ mysql_execute_command(void) break; } #endif - case SQLCOM_SHOW_KEYS: + case SQLCOM_SHOW_KEYS: /* SerG:show */ #ifdef DONT_ALLOW_SHOW_COMMANDS send_error(&thd->net,ER_NOT_ALLOWED_COMMAND); /* purecov: inspected */ DBUG_VOID_RETURN; @@ -1478,7 +1478,7 @@ mysql_execute_command(void) if (org_options & OPTION_AUTO_COMMIT) { /* We changed to auto_commit mode */ - thd->options&= ~OPTION_BEGIN; + thd->options&= ~OPTION_BEGIN; thd->server_status|= SERVER_STATUS_AUTOCOMMIT; if (ha_commit(thd)) { @@ -1487,7 +1487,7 @@ mysql_execute_command(void) } } else - thd->server_status&= ~SERVER_STATUS_AUTOCOMMIT; + thd->server_status&= ~SERVER_STATUS_AUTOCOMMIT; } send_ok(&thd->net); break; @@ -2367,7 +2367,7 @@ bool reload_acl_and_cache(uint options) reset_master(); if (options & REFRESH_SLAVE) reset_slave(); - + return result; } @@ -2440,7 +2440,7 @@ static int start_slave(THD* thd , bool net_report) if(!slave_running) if(master_host) { - pthread_t hThread; + pthread_t hThread; if(pthread_create(&hThread, &connection_attrib, handle_slave, 0)) { err = "cannot create slave thread"; @@ -2455,7 +2455,7 @@ static int start_slave(THD* thd , bool net_report) if(err) { if(net_report) send_error(net, 0, err); - return 1; + return 1; } else if(net_report) send_ok(net); @@ -2468,10 +2468,10 @@ static int stop_slave(THD* thd, bool net_report ) if(!thd) thd = current_thd; NET* net = &thd->net; const char* err = 0; - + if(check_access(thd, PROCESS_ACL, any_db)) return 1; - + pthread_mutex_lock(&LOCK_slave); if (slave_running) { @@ -2484,10 +2484,10 @@ static int stop_slave(THD* thd, bool net_report ) } else err = "Slave is not running"; - + pthread_mutex_unlock(&LOCK_slave); thd->proc_info = 0; - + if(err) { if(net_report) send_error(net, 0, err); @@ -2504,15 +2504,15 @@ static void reset_slave() MY_STAT stat_area; char fname[FN_REFLEN]; bool slave_was_running = slave_running; - + if(slave_running) stop_slave(0,0); - + fn_format(fname, master_info_file, mysql_data_home, "", 4+16+32); if(my_stat(fname, &stat_area, MYF(0))) if(my_delete(fname, MYF(MY_WME))) return; - + if(slave_was_running) start_slave(0,0); } @@ -2532,7 +2532,7 @@ static int change_master(THD* thd) pthread_mutex_unlock(&LOCK_slave); thd->proc_info = "changing master"; LEX_MASTER_INFO* lex_mi = &thd->lex.mi; - + pthread_mutex_lock(&glob_mi.lock); if((lex_mi->host || lex_mi->port) && !lex_mi->log_file_name && !lex_mi->pos) { @@ -2546,7 +2546,7 @@ static int change_master(THD* thd) sizeof(glob_mi.log_file_name)); if(lex_mi->pos) glob_mi.pos = lex_mi->pos; - + if(lex_mi->host) strmake(glob_mi.host, lex_mi->host, sizeof(glob_mi.host)); if(lex_mi->user) @@ -2557,14 +2557,14 @@ static int change_master(THD* thd) glob_mi.port = lex_mi->port; if(lex_mi->connect_retry) glob_mi.connect_retry = lex_mi->connect_retry; - + flush_master_info(&glob_mi); pthread_mutex_unlock(&glob_mi.lock); thd->proc_info = "starting slave"; if(slave_was_running) start_slave(0,0); thd->proc_info = 0; - + send_ok(&thd->net); return 0; } @@ -2602,9 +2602,9 @@ static void reset_master() strmov(strcend(tmp,'.'),"-bin"); opt_bin_logname=tmp; } - + mysql_bin_log.open(opt_bin_logname,LOG_BIN); - + } int show_binlog_info(THD* thd) @@ -2615,12 +2615,12 @@ int show_binlog_info(THD* thd) field_list.push_back(new Item_empty_string("Position",20)); field_list.push_back(new Item_empty_string("Binlog_do_db",20)); field_list.push_back(new Item_empty_string("Binlog_ignore_db",20)); - + if(send_fields(thd, field_list, 1)) DBUG_RETURN(-1); String* packet = &thd->packet; packet->length(0); - + if(mysql_bin_log.is_open()) { LOG_INFO li; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 3028990fc95..84d83442743 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1,15 +1,15 @@ /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -25,7 +25,7 @@ #include "sql_acl.h" #include "lex_symbol.h" #include - + extern void yyerror(const char*); int yylex(void *yylval); @@ -451,7 +451,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); literal text_literal insert_ident group_ident order_ident simple_ident select_item2 expr opt_expr opt_else sum_expr in_sum_expr table_wild opt_pad no_in_expr expr_expr simple_expr no_and_expr - using_list + using_list %type expr_list udf_expr_list when_list ident_list @@ -545,7 +545,7 @@ verb_clause: | rollback | select | set - | slave + | slave | show | unlock | update @@ -554,7 +554,7 @@ verb_clause: /* change master */ change: - CHANGE MASTER_SYM TO_SYM + CHANGE MASTER_SYM TO_SYM { LEX *lex = Lex; lex->sql_command = SQLCOM_CHANGE_MASTER; @@ -565,7 +565,7 @@ master_defs: master_def | master_defs ',' master_def - + master_def: MASTER_HOST_SYM EQ TEXT_STRING { @@ -601,9 +601,9 @@ master_def: { Lex->mi.connect_retry = $3; } - - + + /* create a table */ create: @@ -611,7 +611,7 @@ create: { LEX *lex=Lex; lex->sql_command= SQLCOM_CREATE_TABLE; - if (!add_table_to_list($5, + if (!add_table_to_list($5, ($2 & HA_LEX_CREATE_TMP_TABLE ? &tmp_table_alias : (LEX_STRING*) 0))) YYABORT; @@ -675,7 +675,7 @@ create: } create2: - '(' field_list ')' opt_create_table_options create3 {} + '(' field_list ')' opt_create_table_options create3 {} | opt_create_table_options create3 {} create3: @@ -687,18 +687,18 @@ create3: select_options select_item_list opt_select_from {} opt_table_options: - /* empty */ { $$= 0; } + /* empty */ { $$= 0; } | table_options { $$= $1;} table_options: table_option { $$=$1; } | table_option table_options { $$= $1 | $2 } - + table_option: TEMPORARY { $$=HA_LEX_CREATE_TMP_TABLE; } opt_if_not_exists: - /* empty */ { $$= 0; } + /* empty */ { $$= 0; } | IF NOT EXISTS { $$=HA_LEX_CREATE_IF_NOT_EXISTS; } opt_create_table_options: @@ -720,7 +720,7 @@ create_table_option: | PACK_KEYS_SYM EQ ULONG_NUM { Lex->create_info.table_options|= $3 ? HA_OPTION_PACK_KEYS : HA_OPTION_NO_PACK_KEYS; } | CHECKSUM_SYM EQ ULONG_NUM { Lex->create_info.table_options|= $3 ? HA_OPTION_CHECKSUM : HA_OPTION_NO_CHECKSUM; } | DELAY_KEY_WRITE_SYM EQ ULONG_NUM { Lex->create_info.table_options|= $3 ? HA_OPTION_DELAY_KEY_WRITE : HA_OPTION_NO_DELAY_KEY_WRITE; } - | ROW_FORMAT_SYM EQ row_types { Lex->create_info.row_type= $3; } + | ROW_FORMAT_SYM EQ row_types { Lex->create_info.row_type= $3; } | RAID_TYPE EQ raid_types { Lex->create_info.raid_type= $3; Lex->create_info.used_fields|= HA_CREATE_USED_RAID;} | RAID_CHUNKS EQ ULONG_NUM { Lex->create_info.raid_chunks= $3; Lex->create_info.used_fields|= HA_CREATE_USED_RAID;} | RAID_CHUNKSIZE EQ ULONG_NUM { Lex->create_info.raid_chunksize= $3*RAID_BLOCK_SIZE; Lex->create_info.used_fields|= HA_CREATE_USED_RAID;} @@ -862,7 +862,7 @@ char: CHAR_SYM {} | NCHAR_SYM {} | NATIONAL_SYM CHAR_SYM {} - + varchar: char VARYING {} | VARCHAR {} @@ -961,6 +961,7 @@ delete_option: key_type: opt_constraint PRIMARY_SYM KEY_SYM { $$= Key::PRIMARY; } | key_or_index { $$= Key::MULTIPLE; } + | COLLECTION { $$= Key::FULLTEXT; } | opt_constraint UNIQUE_SYM { $$= Key::UNIQUE; } | opt_constraint UNIQUE_SYM key_or_index { $$= Key::UNIQUE; } @@ -1091,7 +1092,7 @@ slave: Lex->sql_command = SQLCOM_SLAVE_STOP; Lex->type = 0; }; - + repair: REPAIR table_or_tables { @@ -1119,7 +1120,7 @@ analyze: } check: - CHECK_SYM table_or_tables + CHECK_SYM table_or_tables { Lex->sql_command = SQLCOM_CHECK; Lex->check_opt.init(); @@ -1216,7 +1217,7 @@ select_alias: optional_braces: /* empty */ {} | '(' ')' {} - + /* all possible expressions */ expr: expr_expr {$$ = $1; } | simple_expr {$$ = $1; } @@ -1358,7 +1359,7 @@ simple_expr: (Item_func_match *)($$=new Item_func_match(*$2,$5))); } | BINARY expr %prec NEG { $$= new Item_func_binary($2); } | 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 ) } | FUNC_ARG0 '(' ')' { $$= ((Item*(*)(void))($1.symbol->create_func))();} | FUNC_ARG1 '(' expr ')' @@ -1552,7 +1553,7 @@ simple_expr: { $$= new Item_func_yearweek($3, $5); } | BENCHMARK_SYM '(' ULONG_NUM ',' expr ')' { $$=new Item_func_benchmark($3,$5); } - | EXTRACT_SYM '(' interval FROM expr ')' + | EXTRACT_SYM '(' interval FROM expr ')' { $$=new Item_extract( $3, $5); } udf_expr_list: @@ -1623,12 +1624,12 @@ when_list: { $$= Lex->when_list.pop(); } when_list2: - expr THEN_SYM expr + expr THEN_SYM expr { Lex->when_list.head()->push_back($1); Lex->when_list.head()->push_back($3); } - | when_list2 WHEN_SYM expr THEN_SYM expr + | when_list2 WHEN_SYM expr THEN_SYM expr { Lex->when_list.head()->push_back($3); Lex->when_list.head()->push_back($5); @@ -2091,11 +2092,11 @@ show_param: | MASTER_SYM STATUS_SYM { Lex->sql_command = SQLCOM_SHOW_MASTER_STAT; - } + } | SLAVE STATUS_SYM { Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT; - } + } opt_db: /* empty */ { $$= 0; } @@ -2144,8 +2145,8 @@ flush_option: | PRIVILEGES { Lex->type|= REFRESH_GRANT; } | LOGS_SYM { Lex->type|= REFRESH_LOG; } | STATUS_SYM { Lex->type|= REFRESH_STATUS; } - | SLAVE { Lex->type|= REFRESH_SLAVE; } - | MASTER_SYM { Lex->type|= REFRESH_MASTER; } + | SLAVE { Lex->type|= REFRESH_SLAVE; } + | MASTER_SYM { Lex->type|= REFRESH_MASTER; } /* kill threads */ @@ -2178,13 +2179,13 @@ load: LOAD DATA_SYM opt_low_priority opt_local INFILE TEXT_STRING YYABORT; } | - LOAD TABLE_SYM table_ident FROM MASTER_SYM + LOAD TABLE_SYM table_ident FROM MASTER_SYM { Lex->sql_command = SQLCOM_LOAD_MASTER_TABLE; if (!add_table_to_list($3,NULL)) YYABORT; - - } + + } opt_local: /* empty */ { $$=0;} @@ -2307,7 +2308,7 @@ ident: ident_or_text: ident { $$=$1;} - | TEXT_STRING { $$=$1;} + | TEXT_STRING { $$=$1;} | LEX_HOSTNAME { $$=$1;} user: @@ -2390,10 +2391,10 @@ keyword: | PROCESSLIST_SYM {} | QUICK {} | RAID_0_SYM {} - | RAID_CHUNKS {} - | RAID_CHUNKSIZE {} + | RAID_CHUNKS {} + | RAID_CHUNKSIZE {} | RAID_STRIPED_SYM {} - | RAID_TYPE {} + | RAID_TYPE {} | RELOAD {} | REPAIR {} | ROLLBACK_SYM {}