40
42
#include <drizzled/parser.h>
41
43
#include <drizzled/session.h>
42
44
#include <drizzled/alter_column.h>
43
#include <drizzled/alter_drop.h>
44
45
#include <drizzled/alter_info.h>
46
#include <drizzled/message/alter_table.pb.h>
45
47
#include <drizzled/item/subselect.h>
48
#include <drizzled/table_ident.h>
49
#include <drizzled/var.h>
50
#include <drizzled/system_variables.h>
51
#include <drizzled/lex_input_stream.h>
52
#include <drizzled/show.h>
47
54
int yylex(union ParserType *yylval, drizzled::Session *session);
123
130
unsigned long ulong_num;
124
131
uint64_t ulonglong_number;
125
132
int64_t longlong_number;
126
drizzled::LEX_STRING lex_str;
127
drizzled::LEX_STRING *lex_str_ptr;
133
drizzled::lex_string_t lex_str;
134
drizzled::lex_string_t *lex_str_ptr;
128
135
drizzled::LEX_SYMBOL symbol;
129
136
drizzled::Table_ident *table;
137
const char* simple_string;
131
138
drizzled::Item *item;
132
139
drizzled::Item_num *item_num;
133
140
drizzled::List<drizzled::Item> *item_list;
144
151
drizzled::ha_rkey_function ha_rkey_mode;
145
152
drizzled::enum_tx_isolation tx_isolation;
146
153
drizzled::Cast_target cast_type;
147
const drizzled::CHARSET_INFO *charset;
154
const drizzled::charset_info_st *charset;
148
155
drizzled::thr_lock_type lock_type;
149
156
drizzled::interval_type interval, interval_time_st;
150
157
drizzled::type::timestamp_t date_time_type;
151
158
drizzled::Select_Lex *select_lex;
152
159
drizzled::chooser_compare_func_creator boolfunc2creator;
153
drizzled::st_lex *lex;
154
161
drizzled::index_hint_type index_hint;
155
162
drizzled::enum_filetype filetype;
156
drizzled::ha_build_method build_method;
157
163
drizzled::message::Table::ForeignKeyConstraint::ForeignKeyOption m_fk_option;
158
164
drizzled::execute_string_t execute_string;
977
988
opt_create_database_options:
979
| default_collation_schema {}
980
| opt_database_custom_options {}
990
| default_collation_schema
991
| default_collation_schema opt_database_custom_options
992
| default_collation_schema ',' opt_database_custom_options
993
| opt_database_custom_options
983
996
opt_database_custom_options:
984
997
custom_database_option
998
| custom_database_option opt_database_custom_options
985
999
| custom_database_option ',' opt_database_custom_options
991
1005
statement::CreateSchema *statement= (statement::CreateSchema *)Lex.statement;
992
statement->schema_message.mutable_engine()->add_options()->set_name($1.str);
1006
statement->schema_message.mutable_engine()->add_options()->set_name($1.data());
994
| REPLICATE opt_equal TRUE_SYM
1008
| REPLICATE '=' TRUE_SYM
996
1010
parser::buildReplicationOption(&Lex, true);
998
| REPLICATE opt_equal FALSE_SYM
1012
| REPLICATE '=' FALSE_SYM
1000
1014
parser::buildReplicationOption(&Lex, false);
1002
| ident_or_text equal ident_or_text
1004
parser::buildSchemaOption(&Lex, $1.str, $3);
1006
| ident_or_text equal ulonglong_num
1008
parser::buildSchemaOption(&Lex, $1.str, $3);
1016
| DEFINER TEXT_STRING_sys
1018
parser::buildSchemaDefiner(&Lex, identifier::User($2));
1020
| DEFINER CURRENT_USER optional_braces
1022
parser::buildSchemaDefiner(&Lex, *session->user());
1024
| ident_or_text '=' ident_or_text
1026
parser::buildSchemaOption(&Lex, $1.data(), $3);
1028
| ident_or_text '=' ulonglong_num
1030
parser::buildSchemaOption(&Lex, $1.data(), $3);
1038
1060
custom_engine_option;
1040
1062
custom_engine_option:
1041
ENGINE_SYM equal ident_or_text
1063
ENGINE_SYM '=' ident_or_text
1043
Lex.table()->mutable_engine()->set_name($3.str);
1065
Lex.table()->mutable_engine()->set_name($3.data());
1045
1067
| COMMENT_SYM opt_equal TEXT_STRING_sys
1047
Lex.table()->mutable_options()->set_comment($3.str);
1069
Lex.table()->mutable_options()->set_comment($3.data());
1049
1071
| AUTO_INC opt_equal ulonglong_num
1051
1073
Lex.table()->mutable_options()->set_auto_increment_value($3);
1053
| REPLICATE opt_equal TRUE_SYM
1075
| REPLICATE '=' TRUE_SYM
1055
1077
message::set_is_replicated(*Lex.table(), true);
1057
| REPLICATE opt_equal FALSE_SYM
1079
| REPLICATE '=' FALSE_SYM
1059
1081
message::set_is_replicated(*Lex.table(), false);
1061
| ROW_FORMAT_SYM equal row_format_or_text
1083
| DEFINER TEXT_STRING_sys
1085
message::set_definer(*Lex.table(), identifier::User($2));
1087
| DEFINER CURRENT_USER optional_braces
1089
message::set_definer(*Lex.table(), *session->user());
1091
| ROW_FORMAT_SYM '=' row_format_or_text
1063
1093
parser::buildEngineOption(&Lex, "ROW_FORMAT", $3);
1065
| FILE_SYM equal TEXT_STRING_sys
1095
| FILE_SYM '=' TEXT_STRING_sys
1067
1097
parser::buildEngineOption(&Lex, "FILE", $3);
1069
| ident_or_text equal engine_option_value
1071
parser::buildEngineOption(&Lex, $1.str, $3);
1073
| ident_or_text equal ulonglong_num
1075
parser::buildEngineOption(&Lex, $1.str, $3);
1099
| ident_or_text '=' engine_option_value
1101
parser::buildEngineOption(&Lex, $1.data(), $3);
1103
| ident_or_text '=' ulonglong_num
1105
parser::buildEngineOption(&Lex, $1.data(), $3);
1077
1108
| default_collation
1116
charset_name_or_default:
1122
opt_default charset opt_equal charset_name_or_default
1080
1126
default_collation:
1081
1127
opt_default COLLATE_SYM opt_equal collation_name_or_default
1142
1187
| opt_constraint constraint_key_type opt_ident key_alg
1143
1188
'(' key_list ')' key_options
1145
parser::buildKey(&Lex, $2, $3.str ? $3 : $1);
1190
parser::buildKey(&Lex, $2, $3.data() ? $3 : $1);
1147
1192
| opt_constraint FOREIGN KEY_SYM opt_ident '(' key_list ')' references
1149
parser::buildForeignKey(&Lex, $1.str ? $1 : $4, $8);
1194
parser::buildForeignKey(&Lex, $1.data() ? $1 : $4, $8);
1151
1196
| constraint opt_check_constraint
1184
1229
field_def opt_attribute_comment
1186
statement::CreateTable *statement= (statement::CreateTable *)Lex.statement;
1231
statement::CreateTable *statement= (statement::CreateTable*)Lex.statement;
1188
1233
if (Lex.field())
1190
Lex.field()->set_name($1.str);
1235
Lex.field()->set_name($1.data());
1193
if (add_field_to_list(Lex.session, &$1, (enum enum_field_types) $3,
1238
if (add_field_to_list(Lex.session, $1, (enum_field_types) $3,
1194
1239
Lex.length, Lex.dec, Lex.type,
1195
1240
statement->column_format,
1196
1241
statement->default_value, statement->on_update_value,
1197
&statement->comment,
1198
1243
statement->change, &Lex.interval_list, Lex.charset))
1199
1244
DRIZZLE_YYABORT;
1229
1274
| varchar '(' NUM ')' opt_attribute_string
1231
$$= parser::buildVarcharColumn(&Lex, $3.str);
1276
$$= parser::buildVarcharColumn(&Lex, $3.data());
1233
1278
| TEXT_SYM opt_attribute_string
1235
1280
$$=DRIZZLE_TYPE_BLOB;
1236
Lex.length=(char*) 0; /* use default length */
1281
Lex.length= NULL; /* use default length */
1238
1283
if (Lex.field())
1239
1284
Lex.field()->set_type(message::Table::Field::BLOB);
1530
1579
| DEFAULT NOW_SYM optional_braces
1532
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1581
statement::AlterTable *statement= (statement::AlterTable*)Lex.statement;
1534
1583
statement->default_value= new Item_func_now_local();
1535
1584
statement->alter_info.flags.set(ALTER_COLUMN_DEFAULT);
1537
1586
| DEFAULT date_literal
1539
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1588
statement::AlterTable *statement= (statement::AlterTable*)Lex.statement;
1541
1590
statement->default_value=$2;
1542
1591
statement->alter_info.flags.set(ALTER_COLUMN_DEFAULT);
1544
1593
| ON UPDATE_SYM NOW_SYM optional_braces
1546
((statement::AlterTable *)Lex.statement)->on_update_value= new Item_func_now_local();
1595
((statement::AlterTable*)Lex.statement)->on_update_value= new Item_func_now_local();
1548
1597
| opt_attribute_index
1553
1602
/* empty */ { }
1554
1603
| COMMENT_SYM TEXT_STRING_sys
1556
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1605
statement::AlterTable *statement= (statement::AlterTable*)Lex.statement;
1557
1606
statement->comment= $2;
1559
1608
if (Lex.field())
1560
Lex.field()->set_comment($2.str);
1609
Lex.field()->set_comment($2.data());
1564
1613
collation_name:
1567
if (!($$=get_charset_by_name($1.str)))
1616
if (!($$=get_charset_by_name($1.data())))
1569
my_error(ER_UNKNOWN_COLLATION, MYF(0), $1.str);
1618
my_error(ER_UNKNOWN_COLLATION, MYF(0), $1.data());
1570
1619
DRIZZLE_YYABORT;
1613
1662
opt_match_clause:
1615
{ ((statement::CreateTable *)Lex.statement)->fk_match_option= drizzled::message::Table::ForeignKeyConstraint::MATCH_UNDEFINED; }
1664
{ ((statement::CreateTable*)Lex.statement)->fk_match_option= drizzled::message::Table::ForeignKeyConstraint::MATCH_UNDEFINED; }
1617
{ ((statement::CreateTable *)Lex.statement)->fk_match_option= drizzled::message::Table::ForeignKeyConstraint::MATCH_FULL; }
1666
{ ((statement::CreateTable*)Lex.statement)->fk_match_option= drizzled::message::Table::ForeignKeyConstraint::MATCH_FULL; }
1618
1667
| MATCH PARTIAL
1619
{ ((statement::CreateTable *)Lex.statement)->fk_match_option= drizzled::message::Table::ForeignKeyConstraint::MATCH_PARTIAL; }
1668
{ ((statement::CreateTable*)Lex.statement)->fk_match_option= drizzled::message::Table::ForeignKeyConstraint::MATCH_PARTIAL; }
1620
1669
| MATCH SIMPLE_SYM
1621
{ ((statement::CreateTable *)Lex.statement)->fk_match_option= drizzled::message::Table::ForeignKeyConstraint::MATCH_SIMPLE; }
1670
{ ((statement::CreateTable*)Lex.statement)->fk_match_option= drizzled::message::Table::ForeignKeyConstraint::MATCH_SIMPLE; }
1624
1673
opt_on_update_delete:
1627
((statement::CreateTable *)Lex.statement)->fk_update_opt= drizzled::message::Table::ForeignKeyConstraint::OPTION_UNDEF;
1628
((statement::CreateTable *)Lex.statement)->fk_delete_opt= drizzled::message::Table::ForeignKeyConstraint::OPTION_UNDEF;
1676
((statement::CreateTable*)Lex.statement)->fk_update_opt= drizzled::message::Table::ForeignKeyConstraint::OPTION_UNDEF;
1677
((statement::CreateTable*)Lex.statement)->fk_delete_opt= drizzled::message::Table::ForeignKeyConstraint::OPTION_UNDEF;
1630
1679
| ON UPDATE_SYM delete_option
1632
((statement::CreateTable *)Lex.statement)->fk_update_opt= $3;
1633
((statement::CreateTable *)Lex.statement)->fk_delete_opt= drizzled::message::Table::ForeignKeyConstraint::OPTION_UNDEF;
1681
((statement::CreateTable*)Lex.statement)->fk_update_opt= $3;
1682
((statement::CreateTable*)Lex.statement)->fk_delete_opt= drizzled::message::Table::ForeignKeyConstraint::OPTION_UNDEF;
1635
1684
| ON DELETE_SYM delete_option
1637
((statement::CreateTable *)Lex.statement)->fk_update_opt= drizzled::message::Table::ForeignKeyConstraint::OPTION_UNDEF;
1638
((statement::CreateTable *)Lex.statement)->fk_delete_opt= $3;
1686
((statement::CreateTable*)Lex.statement)->fk_update_opt= drizzled::message::Table::ForeignKeyConstraint::OPTION_UNDEF;
1687
((statement::CreateTable*)Lex.statement)->fk_delete_opt= $3;
1640
1689
| ON UPDATE_SYM delete_option
1641
1690
ON DELETE_SYM delete_option
1742
1791
ident { $$=new Key_part_spec($1, 0); }
1743
1792
| ident '(' NUM ')'
1745
int key_part_len= atoi($3.str);
1794
int key_part_len= atoi($3.data());
1746
1795
if (!key_part_len)
1748
my_error(ER_KEY_PART_0, MYF(0), $1.str);
1797
my_error(ER_KEY_PART_0, MYF(0), $1.data());
1750
1799
$$=new Key_part_spec($1, (uint) key_part_len);
1755
/* empty */ { $$= null_lex_str; }
1804
/* empty */ { $$= null_lex_string(); }
1756
1805
| field_ident { $$= $1; }
1760
/* empty */ { $$= null_lex_str; }
1809
/* empty */ { $$= null_lex_string(); }
1761
1810
| '.' ident { $$= $2; }
1773
1822
ALTER_SYM build_method opt_ignore TABLE_SYM table_ident
1775
statement::AlterTable *statement= new statement::AlterTable(YYSession, $5, $2);
1824
statement::AlterTable *statement= new statement::AlterTable(YYSession, $5);
1776
1825
Lex.statement= statement;
1777
1826
Lex.duplicates= DUP_ERROR;
1778
1827
if (not Lex.select_lex.add_table_to_list(YYSession, $5, NULL, TL_OPTION_UPDATING))
1803
1857
| DISCARD TABLESPACE
1805
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1806
statement->alter_info.tablespace_op= DISCARD_TABLESPACE;
1859
message::AlterTable::AlterTableOperation *alter_operation;
1860
alter_operation= Lex.alter_table()->add_operations();
1861
alter_operation->set_operation(message::AlterTable::AlterTableOperation::DISCARD_TABLESPACE);
1808
1863
| IMPORT TABLESPACE
1810
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1811
statement->alter_info.tablespace_op= IMPORT_TABLESPACE;
1865
message::AlterTable::AlterTableOperation *alter_operation;
1866
alter_operation= Lex.alter_table()->add_operations();
1867
alter_operation->set_operation(message::AlterTable::AlterTableOperation::IMPORT_TABLESPACE);
1883
1939
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1885
if (add_field_to_list(Lex.session,&$3,
1941
if (add_field_to_list(Lex.session, $3,
1886
1942
(enum enum_field_types) $5,
1887
1943
Lex.length, Lex.dec, Lex.type,
1888
1944
statement->column_format,
1889
1945
statement->default_value,
1890
1946
statement->on_update_value,
1891
&statement->comment,
1892
$3.str, &Lex.interval_list, Lex.charset))
1948
$3.data(), &Lex.interval_list, Lex.charset))
1893
1949
DRIZZLE_YYABORT;
1898
1954
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1900
statement->alter_info.drop_list.push_back(AlterDrop(AlterDrop::COLUMN, $3.str));
1901
1956
statement->alter_info.flags.set(ALTER_DROP_COLUMN);
1957
message::AlterTable::AlterTableOperation *operation;
1958
operation= Lex.alter_table()->add_operations();
1959
operation->set_operation(message::AlterTable::AlterTableOperation::DROP_COLUMN);
1960
operation->set_drop_name($3.data());
1903
1962
| DROP FOREIGN KEY_SYM opt_ident
1905
parser::buildAddAlterDropIndex(&Lex, $4.str, true);
1964
parser::buildAddAlterDropIndex(&Lex, $4.data(), true);
1907
1966
| DROP PRIMARY_SYM KEY_SYM
1911
1970
| DROP key_or_index field_ident
1913
parser::buildAddAlterDropIndex(&Lex, $3.str);
1972
parser::buildAddAlterDropIndex(&Lex, $3.data());
1915
1974
| DISABLE_SYM KEYS
1917
1976
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1919
statement->alter_info.keys_onoff= DISABLE;
1920
1978
statement->alter_info.flags.set(ALTER_KEYS_ONOFF);
1980
message::AlterTable::AlterKeysOnOff *alter_keys_operation;
1981
alter_keys_operation= Lex.alter_table()->mutable_alter_keys_onoff();
1982
alter_keys_operation->set_enable(false);
1922
1984
| ENABLE_SYM KEYS
1924
1986
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1926
statement->alter_info.keys_onoff= ENABLE;
1927
1988
statement->alter_info.flags.set(ALTER_KEYS_ONOFF);
1989
message::AlterTable::AlterKeysOnOff *alter_keys_operation;
1990
alter_keys_operation= Lex.alter_table()->mutable_alter_keys_onoff();
1991
alter_keys_operation->set_enable(true);
1929
1993
| ALTER_SYM opt_column field_ident SET_SYM DEFAULT signed_literal
1931
1995
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1933
statement->alter_info.alter_list.push_back(AlterColumn($3.str,$6));
1997
statement->alter_info.alter_list.push_back(AlterColumn($3.data(),$6));
1934
1998
statement->alter_info.flags.set(ALTER_COLUMN_DEFAULT);
1936
2000
| ALTER_SYM opt_column field_ident DROP DEFAULT
1938
2002
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1940
statement->alter_info.alter_list.push_back(AlterColumn($3.str, (Item*) 0));
2004
statement->alter_info.alter_list.push_back(AlterColumn($3.data(), NULL));
1941
2005
statement->alter_info.flags.set(ALTER_COLUMN_DEFAULT);
1943
2007
| RENAME opt_to table_ident
1945
2009
statement::AlterTable *statement= (statement::AlterTable *)Lex.statement;
1948
Lex.select_lex.db=$3->db.str;
1949
if (Lex.select_lex.db == NULL &&
1950
Lex.copy_db_to(&Lex.select_lex.db, &dummy))
2010
Lex.select_lex.db= $3->db.data();
2011
if (not Lex.select_lex.db)
2013
str_ref db = Lex.session->copy_db_to();
2016
Lex.select_lex.db = db.data();
1955
if (check_table_name($3->table.str,$3->table.length))
2019
if (check_table_name($3->table))
1957
my_error(ER_WRONG_TABLE_NAME, MYF(0), $3->table.str);
2021
my_error(ER_WRONG_TABLE_NAME, MYF(0), $3->table.data());
1958
2022
DRIZZLE_YYABORT;
1961
2025
Lex.name= $3->table;
1962
2026
statement->alter_info.flags.set(ALTER_RENAME);
2028
message::AlterTable::RenameTable *rename_operation;
2029
rename_operation= Lex.alter_table()->mutable_rename();
2030
rename_operation->set_to_schema(Lex.select_lex.db);
2031
rename_operation->set_to_name(Lex.name.data());
1964
2033
| CONVERT_SYM TO_SYM collation_name_or_default
2265
if (YYSession->add_item_to_list( new Item_field(&YYSession->lex().current_select->context, NULL, NULL, "*")))
2268
(YYSession->lex().current_select->with_wild)++;
2334
YYSession->add_item_to_list( new Item_field(&YYSession->lex().current_select->context, NULL, NULL, "*"));
2335
YYSession->lex().current_select->with_wild++;
2273
2340
remember_name table_wild remember_end
2275
if (YYSession->add_item_to_list($2))
2342
YYSession->add_item_to_list($2);
2278
2344
| remember_name expr remember_end select_alias
2280
2346
assert($1 < $3);
2282
if (YYSession->add_item_to_list($2))
2348
YYSession->add_item_to_list($2);
2287
2352
$2->is_autogenerated_name= false;
2288
$2->set_name($4.str, $4.length, system_charset_info);
2353
$2->set_name($4.data(), $4.size(), system_charset_info);
2290
2355
else if (!$2->name)
2299
2364
Lex_input_stream *lip= YYSession->m_lip;
2300
$$= (char*) lip->get_cpp_tok_start();
2365
$$= lip->get_cpp_tok_start();
2306
2371
Lex_input_stream *lip= YYSession->m_lip;
2307
$$= (char*) lip->get_cpp_tok_end();
2372
$$= lip->get_cpp_tok_end();
2312
/* empty */ { $$=null_lex_str;}
2377
/* empty */ { $$= null_lex_string();}
2313
2378
| AS ident { $$=$2; }
2314
2379
| AS TEXT_STRING_sys { $$=$2; }
2315
2380
| ident { $$=$1; }
2807
2870
| ADDDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')'
2808
2871
{ $$= new (YYSession->mem_root) Item_date_add_interval($3, $6, $7, 0); }
2872
| CURTIME optional_braces
2874
$$= new (YYSession->mem_root) Item_func_curtime_local();
2875
Lex.setCacheable(false);
2809
2877
| CURDATE optional_braces
2811
2879
$$= new (YYSession->mem_root) Item_func_curdate_local();
2892
2960
{ $$= new (YYSession->mem_root) Item_date_add_interval($7,$5,$3,0); }
2893
2961
| TIMESTAMP_DIFF '(' interval_time_stamp ',' expr ',' expr ')'
2894
2962
{ $$= new (YYSession->mem_root) Item_func_timestamp_diff($5,$7,$3); }
2963
| UTC_TIME_SYM optional_braces
2965
$$= new (YYSession->mem_root) Item_func_curtime_utc();
2966
Lex.setCacheable(false);
2895
2968
| UTC_DATE_SYM optional_braces
2897
2970
$$= new (YYSession->mem_root) Item_func_curdate_utc();
2948
3021
| IF '(' expr ',' expr ',' expr ')'
2949
{ $$= new (YYSession->mem_root) Item_func_if($3,$5,$7); }
3023
$$= new (YYSession->mem_root) Item_func_if($3,$5,$7);
2950
3025
| KILL_SYM kill_option '(' expr ')'
2952
3027
List<Item> *args= new (YYSession->mem_root) List<Item>;
3034
3116
This will be revised with WL#2128 (SQL PATH)
3036
builder= find_native_function_builder($1);
3118
if (Create_func* builder= find_native_function_builder($1))
3039
3120
item= builder->create(YYSession, $1, $4);
3122
else if (const plugin::Function* udf= $<udf>3) /* Retrieving the result of service::Function::get */
3043
/* Retrieving the result of service::Function::get */
3044
const plugin::Function *udf= $<udf>3;
3047
item= Create_udf_func::s_singleton.create(YYSession, udf, $4);
3049
/* fix for bug 250065, from Andrew Garner <muzazzi@gmail.com> */
3050
my_error(ER_SP_DOES_NOT_EXIST, MYF(0), "FUNCTION", $1.str);
3124
item= Create_udf_func::s_singleton.create(YYSession, udf, $4);
3128
/* fix for bug 250065, from Andrew Garner <muzazzi@gmail.com> */
3129
my_error(ER_SP_DOES_NOT_EXIST, MYF(0), "FUNCTION", $1.data());
3056
3134
DRIZZLE_YYABORT;
3086
3164
because the syntax will not allow having an explicit name here.
3087
3165
See WL#1017 re. udf attributes.
3091
3169
$2->is_autogenerated_name= false;
3092
$2->set_name($4.str, $4.length, system_charset_info);
3170
$2->set_name($4.data(), $4.size(), system_charset_info);
3095
3173
$2->set_name($1, (uint) ($3 - $1), YYSession->charset());
3103
3181
| AVG_SYM '(' DISTINCT in_sum_expr ')'
3104
3182
{ $$=new Item_sum_avg_distinct($4); }
3105
3183
| COUNT_SYM '(' opt_all '*' ')'
3106
{ $$=new Item_sum_count(new Item_int((int32_t) 0L,1)); }
3184
{ $$=new Item_sum_count(new Item_int(0, 1)); }
3107
3185
| COUNT_SYM '(' in_sum_expr ')'
3108
3186
{ $$=new Item_sum_count($3); }
3109
3187
| COUNT_SYM '(' DISTINCT
3235
3311
{ $$=ITEM_CAST_BOOLEAN; Lex.charset= &my_charset_bin; Lex.dec= 0; }
3237
{ $$=ITEM_CAST_SIGNED; Lex.charset= NULL; Lex.dec=Lex.length= (char*)0; }
3313
{ $$=ITEM_CAST_SIGNED; Lex.charset= NULL; Lex.dec=Lex.length= NULL; }
3238
3314
| SIGNED_SYM INT_SYM
3239
{ $$=ITEM_CAST_SIGNED; Lex.charset= NULL; Lex.dec=Lex.length= (char*)0; }
3315
{ $$=ITEM_CAST_SIGNED; Lex.charset= NULL; Lex.dec=Lex.length= NULL; }
3241
{ $$=ITEM_CAST_SIGNED; Lex.charset= NULL; Lex.dec=Lex.length= (char*)0; }
3317
{ $$=ITEM_CAST_SIGNED; Lex.charset= NULL; Lex.dec=Lex.length= NULL; }
3243
{ $$=ITEM_CAST_UNSIGNED; Lex.charset= NULL; Lex.dec=Lex.length= (char*)0; }
3319
{ $$=ITEM_CAST_UNSIGNED; Lex.charset= NULL; Lex.dec=Lex.length= NULL; }
3244
3320
| UNSIGNED_SYM INT_SYM
3245
{ $$=ITEM_CAST_UNSIGNED; Lex.charset= NULL; Lex.dec=Lex.length= (char*)0; }
3321
{ $$=ITEM_CAST_UNSIGNED; Lex.charset= NULL; Lex.dec=Lex.length= NULL; }
3246
3322
| CHAR_SYM opt_len
3247
3323
{ $$=ITEM_CAST_CHAR; Lex.dec= 0; }
3249
{ $$=ITEM_CAST_DATE; Lex.charset= NULL; Lex.dec=Lex.length= (char*)0; }
3325
{ $$=ITEM_CAST_DATE; Lex.charset= NULL; Lex.dec=Lex.length= NULL; }
3251
{ $$=ITEM_CAST_TIME; Lex.charset= NULL; Lex.dec=Lex.length= (char*)0; }
3327
{ $$=ITEM_CAST_TIME; Lex.charset= NULL; Lex.dec=Lex.length= NULL; }
3253
{ $$=ITEM_CAST_DATETIME; Lex.charset= NULL; Lex.dec=Lex.length= (char*)0; }
3329
{ $$=ITEM_CAST_DATETIME; Lex.charset= NULL; Lex.dec=Lex.length= NULL; }
3254
3330
| DECIMAL_SYM float_options
3255
3331
{ $$=ITEM_CAST_DECIMAL; Lex.charset= NULL; }
3359
3435
DRIZZLE_YYABORT_UNLESS($1 && $3);
3360
3436
DRIZZLE_YYABORT_UNLESS( not Lex.is_cross );
3361
3437
/* Change the current name resolution context to a local context. */
3362
if (push_new_name_resolution_context(YYSession, $1, $3))
3438
push_new_name_resolution_context(*YYSession, *$1, *$3);
3364
3439
Lex.current_select->parsing_place= IN_ON;
3375
3450
DRIZZLE_YYABORT_UNLESS($1 && $3);
3376
3451
/* Change the current name resolution context to a local context. */
3377
if (push_new_name_resolution_context(YYSession, $1, $3))
3452
push_new_name_resolution_context(*YYSession, *$1, *$3);
3379
3453
Lex.current_select->parsing_place= IN_ON;
3405
3479
DRIZZLE_YYABORT_UNLESS($1 && $5);
3406
3480
/* Change the current name resolution context to a local context. */
3407
if (push_new_name_resolution_context(YYSession, $1, $5))
3481
push_new_name_resolution_context(*YYSession, *$1, *$5);
3409
3482
Lex.current_select->parsing_place= IN_ON;
3441
3514
DRIZZLE_YYABORT_UNLESS($1 && $5);
3442
3515
/* Change the current name resolution context to a local context. */
3443
if (push_new_name_resolution_context(YYSession, $1, $5))
3516
push_new_name_resolution_context(*YYSession, *$1, *$5);
3445
3517
Lex.current_select->parsing_place= IN_ON;
3638
3709
select_derived:
3641
if ($1->init_nested_join(Lex.session))
3712
$1->init_nested_join(*Lex.session);
3644
3714
derived_table_list
3646
3716
/* for normal joins, $3 != NULL and end_nested_join() != NULL,
3647
3717
for derived tables, both must equal NULL */
3649
if (!($$= $1->end_nested_join(Lex.session)) && $3)
3719
if (!($$= $1->end_nested_join()) && $3)
3650
3720
DRIZZLE_YYABORT;
3751
3821
opt_key_usage_list:
3752
/* empty */ { Lex.current_select->add_index_hint(YYSession, NULL, 0); }
3822
/* empty */ { Lex.current_select->add_index_hint(YYSession, NULL); }
3753
3823
| key_usage_list {}
3756
3826
key_usage_element:
3758
{ Lex.current_select->add_index_hint(YYSession, $1.str, $1.length); }
3828
{ Lex.current_select->add_index_hint(YYSession, $1.data()); }
3760
{ Lex.current_select->add_index_hint(YYSession, (char *)"PRIMARY", 7); }
3830
{ Lex.current_select->add_index_hint(YYSession, "PRIMARY"); }
3763
3833
key_usage_list:
3771
if (!($$= new List<String>))
3773
$$->push_back(new (YYSession->mem_root)
3774
String((const char *) $1.str, $1.length,
3775
system_charset_info));
3841
$$= new List<String>;
3842
$$->push_back(new (YYSession->mem_root) String($1.data(), $1.size(), system_charset_info));
3777
3844
| using_list ',' ident
3779
$1->push_back(new (YYSession->mem_root)
3780
String((const char *) $3.str, $3.length,
3781
system_charset_info));
3846
$1->push_back(new (YYSession->mem_root) String($3.data(), $3.size(), system_charset_info));
3905
3970
group_list ',' order_ident order_dir
3906
{ if (YYSession->add_group_to_list($3,(bool) $4)) DRIZZLE_YYABORT; }
3971
{ YYSession->add_group_to_list($3,(bool) $4); }
3907
3972
| order_ident order_dir
3908
{ if (YYSession->add_group_to_list($1,(bool) $2)) DRIZZLE_YYABORT; }
3973
{ YYSession->add_group_to_list($1,(bool) $2); }
3973
4037
order_list ',' order_ident order_dir
3975
if (YYSession->add_order_to_list($3,(bool) $4))
4039
YYSession->add_order_to_list($3,(bool) $4);
3978
4041
| order_ident order_dir
3980
if (YYSession->add_order_to_list($1,(bool) $2))
4043
YYSession->add_order_to_list($1,(bool) $2);
4035
ULONGLONG_NUM { $$= new Item_uint($1.str, $1.length); }
4036
| LONG_NUM { $$= new Item_uint($1.str, $1.length); }
4037
| NUM { $$= new Item_uint($1.str, $1.length); }
4097
ULONGLONG_NUM { $$= new Item_uint($1.data(), $1.size()); }
4098
| LONG_NUM { $$= new Item_uint($1.data(), $1.size()); }
4099
| NUM { $$= new Item_uint($1.data(), $1.size()); }
4040
4102
delete_limit_clause:
4054
NUM { int error; $$= (unsigned long) internal::my_strtoll10($1.str, (char**) 0, &error); }
4055
| HEX_NUM { $$= (unsigned long) strtol($1.str, (char**) 0, 16); }
4056
| LONG_NUM { int error; $$= (unsigned long) internal::my_strtoll10($1.str, (char**) 0, &error); }
4057
| ULONGLONG_NUM { int error; $$= (unsigned long) internal::my_strtoll10($1.str, (char**) 0, &error); }
4058
| DECIMAL_NUM { int error; $$= (unsigned long) internal::my_strtoll10($1.str, (char**) 0, &error); }
4059
| FLOAT_NUM { int error; $$= (unsigned long) internal::my_strtoll10($1.str, (char**) 0, &error); }
4116
NUM { int error; $$= (unsigned long) internal::my_strtoll10($1.data(), NULL, &error); }
4117
| HEX_NUM { $$= (unsigned long) strtol($1.data(), NULL, 16); }
4118
| LONG_NUM { int error; $$= (unsigned long) internal::my_strtoll10($1.data(), NULL, &error); }
4119
| ULONGLONG_NUM { int error; $$= (unsigned long) internal::my_strtoll10($1.data(), NULL, &error); }
4120
| DECIMAL_NUM { int error; $$= (unsigned long) internal::my_strtoll10($1.data(), NULL, &error); }
4121
| FLOAT_NUM { int error; $$= (unsigned long) internal::my_strtoll10($1.data(), NULL, &error); }
4063
NUM { int error; $$= (uint64_t) internal::my_strtoll10($1.str, (char**) 0, &error); }
4064
| ULONGLONG_NUM { int error; $$= (uint64_t) internal::my_strtoll10($1.str, (char**) 0, &error); }
4065
| LONG_NUM { int error; $$= (uint64_t) internal::my_strtoll10($1.str, (char**) 0, &error); }
4066
| DECIMAL_NUM { int error; $$= (uint64_t) internal::my_strtoll10($1.str, (char**) 0, &error); }
4067
| FLOAT_NUM { int error; $$= (uint64_t) internal::my_strtoll10($1.str, (char**) 0, &error); }
4125
NUM { int error; $$= (uint64_t) internal::my_strtoll10($1.data(), NULL, &error); }
4126
| ULONGLONG_NUM { int error; $$= (uint64_t) internal::my_strtoll10($1.data(), NULL, &error); }
4127
| LONG_NUM { int error; $$= (uint64_t) internal::my_strtoll10($1.data(), NULL, &error); }
4128
| DECIMAL_NUM { int error; $$= (uint64_t) internal::my_strtoll10($1.data(), NULL, &error); }
4129
| FLOAT_NUM { int error; $$= (uint64_t) internal::my_strtoll10($1.data(), NULL, &error); }
4070
4132
select_var_list_init:
4072
if (not Lex.describe && (not (Lex.result= new select_dumpvar())))
4134
if (not Lex.describe)
4135
Lex.result= new select_dumpvar;
4075
4137
select_var_list
4109
4171
OUTFILE TEXT_STRING_filesystem
4111
4173
Lex.setCacheable(false);
4112
if (!(Lex.exchange= new file_exchange($2.str, 0)) ||
4113
!(Lex.result= new select_export(Lex.exchange)))
4174
Lex.exchange= new file_exchange($2.data(), 0);
4175
Lex.result= new select_export(Lex.exchange);
4116
4177
opt_field_term opt_line_term
4117
4178
| DUMPFILE TEXT_STRING_filesystem
4150
4209
statement::DropIndex *statement= new statement::DropIndex(YYSession);
4151
4210
Lex.statement= statement;
4152
4211
statement->alter_info.flags.set(ALTER_DROP_INDEX);
4153
statement->alter_info.build_method= $2;
4154
statement->alter_info.drop_list.push_back(AlterDrop(AlterDrop::KEY, $4.str));
4155
4213
if (not Lex.current_select->add_table_to_list(Lex.session, $6, NULL,
4156
4214
TL_OPTION_UPDATING))
4157
4215
DRIZZLE_YYABORT;
4217
message::AlterTable::AlterTableOperation *operation;
4218
operation= Lex.alter_table()->add_operations();
4219
operation->set_operation(message::AlterTable::AlterTableOperation::DROP_KEY);
4220
operation->set_drop_name($4.data());
4159
4223
| DROP DATABASE if_exists schema_name
4444
4501
init_select(&Lex);
4445
4502
Lex.lock_option= TL_WRITE_DEFAULT;
4446
4503
Lex.select_lex.init_order();
4448
if (!Lex.current_select->add_table_to_list(YYSession, $4, NULL, TL_OPTION_UPDATING,
4504
Lex.current_select->add_table_to_list(YYSession, $4, NULL, TL_OPTION_UPDATING, Lex.lock_option);
4452
4506
where_clause opt_order_clause
4453
4507
delete_limit_clause {}
4877
4925
TEXT_STRING_literal
4879
$$ = new Item_string($1.str, $1.length, YYSession->variables.getCollation());
4927
$$ = new Item_string($1.data(), $1.size(), YYSession->variables.getCollation());
4881
4929
| text_literal TEXT_STRING_literal
4883
((Item_string*) $1)->append($2.str, $2.length);
4931
((Item_string*) $1)->append($2);
4888
4936
TEXT_STRING_literal
4890
$$= new (YYSession->mem_root) String($1.str,
4892
YYSession->variables.getCollation());
4938
$$= new (YYSession->mem_root) String($1.data(), $1.size(), YYSession->variables.getCollation());
4896
Item *tmp= new Item_hex_string($1.str, $1.length);
4942
Item *tmp= new Item_hex_string($1);
4898
4944
it is OK only emulate fix_fields, because we need only
4899
4945
value of constant
4902
tmp->quick_fix_field(), tmp->val_str((String*) 0) :
4947
$$= tmp ? tmp->quick_fix_field(), tmp->val_str(NULL) : NULL;
4907
Item *tmp= new Item_bin_string($1.str, $1.length);
4951
Item *tmp= new Item_bin_string($1);
4909
4953
it is OK only emulate fix_fields, because we need only
4910
4954
value of constant
4912
$$= tmp ? tmp->quick_fix_field(), tmp->val_str((String*) 0) :
4956
$$= tmp ? tmp->quick_fix_field(), tmp->val_str(NULL) : NULL;
4935
4978
| FALSE_SYM { $$= new drizzled::item::False(); }
4936
4979
| TRUE_SYM { $$= new drizzled::item::True(); }
4937
| HEX_NUM { $$ = new Item_hex_string($1.str, $1.length);}
4938
| BIN_NUM { $$= new Item_bin_string($1.str, $1.length); }
4980
| HEX_NUM { $$ = new Item_hex_string($1);}
4981
| BIN_NUM { $$= new Item_bin_string($1); }
4939
4982
| DATE_SYM text_literal { $$ = $2; }
4940
4983
| TIMESTAMP_SYM text_literal { $$ = $2; }
4943
4986
integer_literal:
4944
4987
text_literal { $$ = $1; }
4945
| HEX_NUM { $$ = new Item_hex_string($1.str, $1.length);}
4946
| BIN_NUM { $$= new Item_bin_string($1.str, $1.length); }
4988
| HEX_NUM { $$ = new Item_hex_string($1);}
4989
| BIN_NUM { $$= new Item_bin_string($1); }
4947
4990
| NUM_literal { $$ = $1; }
4993
$$ = new Item_int($1.str, (int64_t) internal::my_strtoll10($1.str, NULL, &error), $1.length);
5036
$$ = new Item_int($1.data(), internal::my_strtoll10($1.data(), NULL, &error), $1.size());
4998
$$ = new Item_int($1.str, (int64_t) internal::my_strtoll10($1.str, NULL, &error), $1.length);
5041
$$ = new Item_int($1.data(), internal::my_strtoll10($1.data(), NULL, &error), $1.size());
5000
5043
| ULONGLONG_NUM
5001
{ $$ = new Item_uint($1.str, $1.length); }
5044
{ $$ = new Item_uint($1.data(), $1.size()); }
5004
$$= new Item_decimal($1.str, $1.length, YYSession->charset());
5047
$$= new Item_decimal($1.data(), $1.size(), YYSession->charset());
5005
5048
if (YYSession->is_error())
5007
5050
DRIZZLE_YYABORT;
5052
5095
simple_ident_q:
5053
5096
ident '.' ident
5055
$$= parser::buildIdent(&Lex, NULL_LEX_STRING, $1, $3);
5098
$$= parser::buildIdent(&Lex, null_lex_string(), $1, $3);
5057
5100
| '.' ident '.' ident
5059
$$= parser::buildIdent(&Lex, NULL_LEX_STRING, $2, $4);
5102
$$= parser::buildIdent(&Lex, null_lex_string(), $2, $4);
5061
5104
| ident '.' ident '.' ident
5122
const CHARSET_INFO * const cs= system_charset_info;
5165
const charset_info_st * const cs= system_charset_info;
5123
5166
int dummy_error;
5124
uint32_t wlen= cs->cset->well_formed_len(cs, $1.str,
5126
$1.length, &dummy_error);
5127
if (wlen < $1.length)
5167
uint32_t wlen= cs->cset->well_formed_len(*cs, $1, $1.size(), &dummy_error);
5168
if (wlen < $1.size())
5129
my_error(ER_INVALID_CHARACTER_STRING, MYF(0),
5130
cs->csname, $1.str + wlen);
5170
my_error(ER_INVALID_CHARACTER_STRING, MYF(0), cs->csname, $1.data() + wlen);
5131
5171
DRIZZLE_YYABORT;
5408
5448
Lex.option_type= $1;
5410
Lex.var_list.push_back(SetVarPtr(new set_var(Lex.option_type, $2.var, &$2.base_name, $4)));
5450
Lex.var_list.push_back(SetVarPtr(new set_var(Lex.option_type, $2.var, $2.base_name, $4)));
5413
5453
| option_type TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types
5415
5455
Lex.option_type= $1;
5416
Lex.var_list.push_back(SetVarPtr(new set_var(Lex.option_type,
5417
find_sys_var("tx_isolation"),
5419
new Item_int((int32_t)
5456
Lex.var_list.push_back(SetVarPtr(new set_var(Lex.option_type, find_sys_var("tx_isolation"), str_ref(), new Item_int((int32_t) $5))));
5472
5507
set_expr_or_default:
5473
5508
expr { $$=$1; }
5474
5509
| DEFAULT { $$=0; }
5475
| ON { $$=new Item_string("ON", 2, system_charset_info); }
5476
| ALL { $$=new Item_string("ALL", 3, system_charset_info); }
5477
| BINARY { $$=new Item_string("binary", 6, system_charset_info); }
5510
| ON { $$=new Item_string(str_ref("ON"), system_charset_info); }
5511
| ALL { $$=new Item_string(str_ref("ALL"), system_charset_info); }
5512
| BINARY { $$=new Item_string(str_ref("binary"), system_charset_info); }
5480
5515
table_or_tables: