---
drizzled/alter_info.h | 1 +
drizzled/message/table.proto | 4 ++++
drizzled/sql_yacc.yy | 6 ++++++
drizzled/statement/create_table.cc | 8 ++++++++
drizzled/statement/create_table.h | 1 +
drizzled/table_proto_write.cc | 10 +++++++++-
6 files changed, 29 insertions(+), 1 deletion(-)
Index: drizzled/alter_info.h
===================================================================
--- drizzled/alter_info.h.orig 2009-11-04 15:20:38.644166479 +1100
+++ drizzled/alter_info.h 2009-11-04 15:20:41.774165708 +1100
@@ -81,6 +81,7 @@ public:
List<AlterColumn> alter_list;
List<Key> key_list;
List<CreateField> create_list;
+ drizzled::message::AlterTable alter_proto;
std::bitset<32> flags;
enum enum_enable_or_disable keys_onoff;
enum tablespace_op_type tablespace_op;
Index: drizzled/message/table.proto
===================================================================
--- drizzled/message/table.proto.orig 2009-11-04 15:20:38.654151550 +1100
+++ drizzled/message/table.proto 2009-11-04 15:20:41.774165708 +1100
@@ -195,3 +195,7 @@ message Table {
optional TableOptions options = 9;
optional TableStats stats = 10;
}
+
+message AlterTable {
+ repeated Table.Field added_field = 1;
+}
\ No newline at end of file
Index: drizzled/sql_yacc.yy
===================================================================
--- drizzled/sql_yacc.yy.orig 2009-11-04 15:20:39.894186348 +1100
+++ drizzled/sql_yacc.yy 2009-11-04 15:20:41.824167400 +1100
@@ -1543,6 +1543,10 @@ field_spec:
statement->comment= null_lex_str;
lex->charset=NULL;
statement->column_format= COLUMN_FORMAT_TYPE_DEFAULT;
+
+ message::AlterTable &alter_proto=
+ ((statement::CreateTable
*)Lex->statement)->alter_info.alter_proto;
+ statement->current_proto_field= alter_proto.add_added_field();
}
field_def
{
@@ -1555,6 +1559,8 @@ field_spec:
&statement->comment,
statement->change, &lex->interval_list,
lex->charset))
DRIZZLE_YYABORT;
+
+ statement->current_proto_field= NULL;
}
;
field_def:
Index: drizzled/statement/create_table.cc
===================================================================
--- drizzled/statement/create_table.cc.orig 2009-11-04 15:20:38.674155984
+1100
+++ drizzled/statement/create_table.cc 2009-11-04 15:20:41.874172866 +1100
@@ -189,6 +189,14 @@ bool statement::CreateTable::execute()
}
else
{
+
+ for(int i=0; i < alter_info.alter_proto.added_field_size(); i++)
+ {
+ message::Table::Field *f= create_table_proto.add_field();
+
+ *f= alter_info.alter_proto.added_field(i);
+ }
+
res= mysql_create_table(session,
create_table->db,
create_table->table_name,
Index: drizzled/statement/create_table.h
===================================================================
--- drizzled/statement/create_table.h.orig 2009-11-04 15:20:38.694169639
+1100
+++ drizzled/statement/create_table.h 2009-11-04 15:20:41.914202550 +1100
@@ -42,6 +42,7 @@ public:
bool execute();
drizzled::message::Table create_table_proto;
+ drizzled::message::Table::Field *current_proto_field;
HA_CREATE_INFO create_info;
AlterInfo alter_info;
KEY_CREATE_INFO key_create_info;
Index: drizzled/table_proto_write.cc
===================================================================
--- drizzled/table_proto_write.cc.orig 2009-11-04 15:20:39.944170094 +1100
+++ drizzled/table_proto_write.cc 2009-11-04 15:20:41.954171401 +1100
@@ -54,11 +54,17 @@ int fill_table_proto(message::Table *tab
assert(strcmp(table_proto->name().c_str(),table_name)==0);
+ int field_number= 0;
+ bool use_existing_fields= table_proto->field_size() > 0;
while ((field_arg= it++))
{
message::Table::Field *attribute;
- attribute= table_proto->add_field();
+ if (use_existing_fields)
+ attribute= table_proto->mutable_field(field_number++);
+ else
+ attribute= table_proto->add_field();
+
attribute->set_name(field_arg->field_name);
if(! (field_arg->flags & NOT_NULL_FLAG))
@@ -302,6 +308,8 @@ int fill_table_proto(message::Table *tab
}
+ assert(! use_existing_fields || (field_number == table_proto->field_size()));
+
switch(create_info->row_type)
{
case ROW_TYPE_DEFAULT:
--
Stewart Smith
_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help : https://help.launchpad.net/ListHelp