---
 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

Reply via email to