From 71fa413c165e644f8f1433356f95fed12579fe3e Mon Sep 17 00:00:00 2001 From: Monty Date: Mon, 8 May 2017 02:44:55 +0300 Subject: MDEV-10139 Support for SEQUENCE objects - SETVAL(sequence_name, next_value, is_used, round) - ALTER SEQUENCE, including RESTART WITH Other things: - Added handler::extra() option HA_EXTRA_PREPARE_FOR_ALTER_TABLE to signal ha_sequence() that it should allow write_row statments. - ALTER ONLINE TABLE now works with SEQUENCE:s --- sql/sql_lex.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'sql/sql_lex.cc') diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 3c8f088d196..8cabe795d21 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -6404,7 +6404,6 @@ Item *LEX::create_item_func_nextval(THD *thd, Table_ident *table_ident) MDL_SHARED_WRITE))) return NULL; return new (thd->mem_root) Item_func_nextval(thd, table); - } @@ -6442,6 +6441,21 @@ Item *LEX::create_item_func_lastval(THD *thd, } +Item *LEX::create_item_func_setval(THD *thd, Table_ident *table_ident, + longlong nextval, ulonglong round, + bool is_used) +{ + TABLE_LIST *table; + if (!(table= current_select->add_table_to_list(thd, table_ident, 0, + TL_OPTION_SEQUENCE, + TL_WRITE_ALLOW_WRITE, + MDL_SHARED_WRITE))) + return NULL; + return new (thd->mem_root) Item_func_setval(thd, table, nextval, round, + is_used); +} + + Item *LEX::create_item_ident(THD *thd, const LEX_CSTRING *a, const LEX_CSTRING *b, -- cgit v1.2.1 From fba7fbbc5c7bb1d05488108a29b854ee8ef0066a Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Wed, 17 May 2017 12:21:39 +0400 Subject: MDEV-9397 Split field.cc:calc_pack_length() into virtual methods in Type_handler - Adding new virtual methods in Type_handler: * Column_definition_prepare_stage1() * Column_definition_prepare_stage2() * calc_pack_length() - Using new methods to remove type specific code in: * Global function calc_pack_length() * Column_definition::prepare_create_field() * The loop body mysql_prepare_create_table() * Column_definition::sp_prepare_create_field() --- sql/sql_lex.cc | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'sql/sql_lex.cc') diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 8cabe795d21..febd0931e48 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -5407,13 +5407,8 @@ sp_variable *LEX::sp_add_for_loop_variable(THD *thd, const LEX_CSTRING *name, spcont->declare_var_boundary(1); spvar->field_def.field_name= spvar->name; spvar->field_def.set_handler(&type_handler_longlong); - /* - The below is a simplified version of what - Column_definition::prepare_create_field() does for a LONGLONG field. - */ - spvar->field_def.pack_flag= (FIELDFLAG_NUMBER | - f_settype((uint) MYSQL_TYPE_LONGLONG)); - + type_handler_longlong.Column_definition_prepare_stage2(&spvar->field_def, + NULL, HA_CAN_GEOMETRY); if (!value && !(value= new (thd->mem_root) Item_null(thd))) return NULL; -- cgit v1.2.1