List:Commits« Previous MessageNext Message »
From:Alexander Nozdrin Date:November 26 2008 10:52am
Subject:bzr commit into mysql-6.0-runtime branch (alik:2771)
View as plain text  
#At file:///mnt/raid/alik/MySQL/bzr/wl4264/6.0-alik-wl4264.1/

 2771 Alexander Nozdrin	2008-11-26
      Introduce Database_item_obj, polishing.
modified:
  sql/si_objects.cc

=== modified file 'sql/si_objects.cc'
--- a/sql/si_objects.cc	2008-11-26 10:18:43 +0000
+++ b/sql/si_objects.cc	2008-11-26 10:52:30 +0000
@@ -373,7 +373,7 @@ class Abstract_obj : public Obj
 {
 public:
   virtual inline const String *get_name() const    { return &m_id; }
-  virtual inline const String *get_db_name() const { return &m_db_name; }
+  virtual inline const String *get_db_name() const { return NULL; }
 
 public:
   /**
@@ -429,10 +429,9 @@ protected:
 protected:
   /* These attributes are to be used only for serialization. */
   String m_id; //< identify object
-  String m_db_name;
 
 protected:
-  Abstract_obj(LEX_STRING db_name, LEX_STRING id);
+  Abstract_obj(LEX_STRING id);
 
   virtual ~Abstract_obj();
 
@@ -443,15 +442,10 @@ private:
 
 ///////////////////////////////////////////////////////////////////////////
 
-Abstract_obj::Abstract_obj(LEX_STRING db_name, LEX_STRING id)
+Abstract_obj::Abstract_obj(LEX_STRING id)
 {
   init_sql_alloc(&m_mem_root, ALLOC_ROOT_MIN_BLOCK_SIZE, 0);
 
-  if (db_name.str && db_name.length)
-    m_db_name.copy(db_name.str, db_name.length, system_charset_info);
-  else
-    m_db_name.length(0);
-
   if (id.str && id.length)
     m_id.copy(id.str, id.length, system_charset_info);
   else
@@ -635,14 +629,52 @@ bool Abstract_obj::do_deserialize(In_str
 class Database_obj : public Abstract_obj
 {
 public:
-  Database_obj(const Ed_row &ed_row);
-  Database_obj(LEX_STRING db_name);
+  Database_obj(const Ed_row &ed_row)
+    : Abstract_obj(ed_row[0] /* database name */)
+  { }
+
+  Database_obj(LEX_STRING db_name)
+    : Abstract_obj(db_name)
+  { }
+
+public:
+  virtual inline const String *get_db_name() const { return get_name(); }
 
 private:
   virtual bool do_serialize(THD *thd, Out_stream &out_stream);
 };
 
 ///////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
+
+/**
+  @class Database_item_obj
+
+  This class is a base class for all classes representing objects, which
+  belong to a Database.
+*/
+
+class Database_item_obj : public Abstract_obj
+{
+public:
+  Database_item_obj(LEX_STRING db_name, LEX_STRING object_name)
+    : Abstract_obj(object_name)
+  {
+    if (db_name.str && db_name.length)
+      m_db_name.copy(db_name.str, db_name.length, system_charset_info);
+    else
+      m_db_name.length(0);
+  }
+
+public:
+  virtual inline const String *get_db_name() const { return &m_db_name; }
+
+protected:
+  String m_db_name;
+};
+
+///////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
 
 /**
   @class Table_obj
@@ -651,17 +683,24 @@ private:
   capture of the creation data.
 */
 
-class Table_obj : public Abstract_obj
+class Table_obj : public Database_item_obj
 {
 public:
-  Table_obj(const Ed_row &ed_row);
-  Table_obj(LEX_STRING db_name, LEX_STRING table_name);
+  Table_obj(const Ed_row &ed_row)
+    : Database_item_obj(ed_row[0], /* database name */
+                        ed_row[1]) /* table name */
+  { }
+
+  Table_obj(LEX_STRING db_name, LEX_STRING table_name)
+    : Database_item_obj(db_name, table_name)
+  { }
 
 private:
   virtual bool do_serialize(THD *thd, Out_stream &out_stream);
 };
 
 ///////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
 
 /**
   @class View_obj
@@ -670,23 +709,31 @@ private:
   capture of the creation data.
 */
 
-class View_obj : public Abstract_obj
+class View_obj : public Database_item_obj
 {
 public:
-  View_obj(const Ed_row &ed_row);
-  View_obj(LEX_STRING db_name, LEX_STRING view_name);
+  View_obj(const Ed_row &ed_row)
+    : Database_item_obj(ed_row[0], /* schema name */
+                        ed_row[1]) /* view name */
+  { }
+
+  View_obj(LEX_STRING db_name, LEX_STRING view_name)
+    : Database_item_obj(db_name, view_name)
+  { }
 
 private:
   virtual bool do_serialize(THD *thd, Out_stream &out_stream);
 };
 
 ///////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
 
-class Stored_program_obj : public Abstract_obj
+class Stored_program_obj : public Database_item_obj
 {
 public:
-  Stored_program_obj(LEX_STRING db_name,
-                     LEX_STRING sp_name);
+  Stored_program_obj(LEX_STRING db_name, LEX_STRING sp_name)
+    : Database_item_obj(db_name, sp_name)
+  { }
 
 protected:
   virtual const LEX_STRING *get_type() const = 0;
@@ -700,12 +747,14 @@ private:
 };
 
 ///////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
 
 class Stored_routine_obj : public Stored_program_obj
 {
 public:
-  Stored_routine_obj(LEX_STRING db_name,
-                     LEX_STRING sr_name);
+  Stored_routine_obj(LEX_STRING db_name, LEX_STRING sr_name)
+    : Stored_program_obj(db_name, sr_name)
+  { }
 
 protected:
   virtual const LEX_STRING *get_create_stmt(Ed_row *row);
@@ -713,6 +762,7 @@ protected:
 };
 
 ///////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
 
 /**
   @class Trigger_obj
@@ -727,8 +777,13 @@ private:
   static const LEX_STRING TYPE_NAME;
 
 public:
-  Trigger_obj(const Ed_row &ed_row);
-  Trigger_obj(LEX_STRING db_name, LEX_STRING trigger_name);
+  Trigger_obj(const Ed_row &ed_row)
+    : Stored_routine_obj(ed_row[0], ed_row[1])
+  { }
+
+  Trigger_obj(LEX_STRING db_name, LEX_STRING trigger_name)
+    : Stored_routine_obj(db_name, trigger_name)
+  { }
 
 private:
   virtual const LEX_STRING *get_type() const;
@@ -736,6 +791,18 @@ private:
 
 ///////////////////////////////////////////////////////////////////////////
 
+const LEX_STRING Trigger_obj::TYPE_NAME= LXS_INIT("TRIGGER");
+
+///////////////////////////////////////////////////////////////////////////
+
+const LEX_STRING *Trigger_obj::get_type() const
+{
+  return &Trigger_obj::TYPE_NAME;
+}
+
+///////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
+
 /**
   @class Stored_proc_obj
 
@@ -749,8 +816,13 @@ private:
   static const LEX_STRING TYPE_NAME;
 
 public:
-  Stored_proc_obj(const Ed_row &ed_row);
-  Stored_proc_obj(LEX_STRING db_name, LEX_STRING sp_name);
+  Stored_proc_obj(const Ed_row &ed_row)
+    : Stored_routine_obj(ed_row[0], ed_row[1])
+  { }
+
+  Stored_proc_obj(LEX_STRING db_name, LEX_STRING sp_name)
+    : Stored_routine_obj(db_name, sp_name)
+  { }
 
 private:
   virtual const LEX_STRING *get_type() const;
@@ -758,6 +830,18 @@ private:
 
 ///////////////////////////////////////////////////////////////////////////
 
+const LEX_STRING Stored_proc_obj::TYPE_NAME= LXS_INIT("PROCEDURE");
+
+///////////////////////////////////////////////////////////////////////////
+
+const LEX_STRING *Stored_proc_obj::get_type() const
+{
+  return &Stored_proc_obj::TYPE_NAME;
+}
+
+///////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
+
 /**
   @class Stored_func_obj
 
@@ -771,8 +855,13 @@ private:
   static const LEX_STRING TYPE_NAME;
 
 public:
-  Stored_func_obj(const Ed_row &ed_row);
-  Stored_func_obj(LEX_STRING db_name, LEX_STRING sf_name);
+  Stored_func_obj(const Ed_row &ed_row)
+    : Stored_routine_obj(ed_row[0], ed_row[1])
+  { }
+
+  Stored_func_obj(LEX_STRING db_name, LEX_STRING sf_name)
+    : Stored_routine_obj(db_name, sf_name)
+  { }
 
 private:
   virtual const LEX_STRING *get_type() const;
@@ -780,6 +869,18 @@ private:
 
 ///////////////////////////////////////////////////////////////////////////
 
+const LEX_STRING Stored_func_obj::TYPE_NAME= LXS_INIT("FUNCTION");
+
+///////////////////////////////////////////////////////////////////////////
+
+const LEX_STRING *Stored_func_obj::get_type() const
+{
+  return &Stored_func_obj::TYPE_NAME;
+}
+
+///////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
+
 #ifdef HAVE_EVENT_SCHEDULER
 
 /**
@@ -795,8 +896,13 @@ private:
   static const LEX_STRING TYPE_NAME;
 
 public:
-  Event_obj(const Ed_row &ed_row);
-  Event_obj(LEX_STRING db_name, LEX_STRING event_name);
+  Event_obj(const Ed_row &ed_row)
+    : Stored_program_obj(ed_row[0], ed_row[1])
+  { }
+
+  Event_obj(LEX_STRING db_name, LEX_STRING event_name)
+    : Stored_program_obj(db_name, event_name)
+  { }
 
 private:
   virtual const LEX_STRING *get_type() const;
@@ -804,9 +910,28 @@ private:
   virtual void dump_header(Ed_row *row, Out_stream &out_stream);
 };
 
+///////////////////////////////////////////////////////////////////////////
+
+const LEX_STRING Event_obj::TYPE_NAME= LXS_INIT("EVENT");
+
+///////////////////////////////////////////////////////////////////////////
+
+const LEX_STRING *Event_obj::get_type() const
+{
+  return &Event_obj::TYPE_NAME;
+}
+
+///////////////////////////////////////////////////////////////////////////
+
+const LEX_STRING *Event_obj::get_create_stmt(Ed_row *row)
+{
+  return row->get_column(3);
+}
+
 #endif // HAVE_EVENT_SCHEDULER
 
 ///////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
 
 /**
   @class Tablespace_obj
@@ -826,8 +951,6 @@ public:
   Tablespace_obj(LEX_STRING ts_name);
 
 public:
-  virtual inline const String *get_db_name() const { return NULL; }
-
   const String *get_description();
 
 public:
@@ -847,6 +970,7 @@ private:
 };
 
 ///////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////
 
 /**
   @class Grant_obj
@@ -868,8 +992,6 @@ public:
   virtual bool do_deserialize(In_stream *is);
 
 public:
-  virtual inline const String *get_db_name() const { return NULL; }
-
   inline const String *get_user_name() const { return &m_user_name; }
   inline const String *get_grant_info() const { return &m_grant_info; }
 
@@ -1231,16 +1353,6 @@ create<View_base_view_iterator>(THD *thd
                                 const String *view_name);
 
 ///////////////////////////////////////////////////////////////////////////
-
-Database_obj::Database_obj(const Ed_row &ed_row)
-  : Abstract_obj(ed_row[0], /* database name */ ed_row[0] /* database name */)
-{ }
-
-
-Database_obj::Database_obj(LEX_STRING db_name)
-  : Abstract_obj(db_name, db_name)
-{ }
-
 ///////////////////////////////////////////////////////////////////////////
 
 /**
@@ -1265,12 +1377,12 @@ bool Database_obj::do_serialize(THD *thd
 {
   DBUG_ENTER("Database_obj::do_serialize");
   DBUG_PRINT("Database_obj::do_serialize",
-             ("name: %.*s", STR(m_db_name)));
+             ("name: %.*s", STR(*get_name())));
 
-  if (is_internal_db_name(&m_db_name))
+  if (is_internal_db_name(get_name()))
   {
     DBUG_PRINT("backup",
-               (" Skipping internal database %.*s", STR(m_db_name)));
+               (" Skipping internal database %.*s", STR(*get_name())));
 
     DBUG_RETURN(TRUE);
   }
@@ -1282,7 +1394,7 @@ bool Database_obj::do_serialize(THD *thd
   {
     String_stream s_stream;
     s_stream <<
-      "SHOW CREATE DATABASE `" << &m_db_name << "`";
+      "SHOW CREATE DATABASE `" << get_name() << "`";
 
     if (run_service_interface_sql(thd, s_stream.lex_string(), &ed_result) ||
         ed_result.get_warnings().elements > 0)
@@ -1321,7 +1433,7 @@ bool Database_obj::do_serialize(THD *thd
 
   {
     String_stream s_stream;
-    s_stream << "DROP DATABASE IF EXISTS `" << &m_db_name << "`";
+    s_stream << "DROP DATABASE IF EXISTS `" << get_name() << "`";
     out_stream << s_stream;
   }
 
@@ -1333,17 +1445,6 @@ bool Database_obj::do_serialize(THD *thd
 ///////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////
 
-Table_obj::Table_obj(const Ed_row &ed_row)
-  : Abstract_obj(ed_row[0], /* database name */
-                 ed_row[1]) /* table name */
-{ }
-
-Table_obj::Table_obj(LEX_STRING db_name, LEX_STRING table_name)
-  : Abstract_obj(db_name, table_name)
-{ }
-
-///////////////////////////////////////////////////////////////////////////
-
 /**
   Serialize the object.
 
@@ -1424,17 +1525,6 @@ bool Table_obj::do_serialize(THD *thd, O
 ///////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////
 
-View_obj::View_obj(const Ed_row &ed_row)
-  : Abstract_obj(ed_row[0], /* schema name */
-                 ed_row[1]) /* view name */
-{ }
-
-View_obj::View_obj(LEX_STRING db_name, LEX_STRING view_name)
-  : Abstract_obj(db_name, view_name)
-{ }
-
-///////////////////////////////////////////////////////////////////////////
-
 static bool
 get_view_create_stmt(THD *thd,
                      View_obj *view,
@@ -1685,12 +1775,6 @@ bool View_obj::do_serialize(THD *thd, Ou
 }
 
 ///////////////////////////////////////////////////////////////////////////
-
-Stored_program_obj::
-  Stored_program_obj(LEX_STRING db_name, LEX_STRING sp_name)
-  : Abstract_obj(db_name, sp_name)
-  { }
-
 ///////////////////////////////////////////////////////////////////////////
 
 bool Stored_program_obj::do_serialize(THD *thd, Out_stream &out_stream)
@@ -1751,17 +1835,12 @@ bool Stored_program_obj::do_serialize(TH
 ///////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////
 
-Stored_routine_obj::
-Stored_routine_obj(LEX_STRING db_name, LEX_STRING sr_name)
-  : Stored_program_obj(db_name, sr_name)
-{ }
-
-
 const LEX_STRING *Stored_routine_obj::get_create_stmt(Ed_row *row)
 {
   return row->get_column(2);
 }
 
+///////////////////////////////////////////////////////////////////////////
 
 void Stored_routine_obj::dump_header(Ed_row *row, Out_stream &out_stream)
 {
@@ -1795,96 +1874,10 @@ void Stored_routine_obj::dump_header(Ed_
 }
 
 ///////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
-
-const LEX_STRING Trigger_obj::TYPE_NAME= LXS_INIT("TRIGGER");
-
-
-Trigger_obj::Trigger_obj(const Ed_row &ed_row)
-  : Stored_routine_obj(ed_row[0], ed_row[1])
-{ }
-
-
-Trigger_obj::Trigger_obj(LEX_STRING db_name, LEX_STRING trigger_name)
-  : Stored_routine_obj(db_name, trigger_name)
-{ }
-
-
-const LEX_STRING *Trigger_obj::get_type() const
-{
-  return &Trigger_obj::TYPE_NAME;
-}
-
-///////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
-
-const LEX_STRING Stored_proc_obj::TYPE_NAME= LXS_INIT("PROCEDURE");
-
-
-Stored_proc_obj::Stored_proc_obj(const Ed_row &ed_row)
-  : Stored_routine_obj(ed_row[0], ed_row[1])
-{ }
-
-
-Stored_proc_obj::Stored_proc_obj(LEX_STRING db_name, LEX_STRING sp_name)
-  : Stored_routine_obj(db_name, sp_name)
-{ }
-
-
-const LEX_STRING *Stored_proc_obj::get_type() const
-{
-  return &Stored_proc_obj::TYPE_NAME;
-}
-
-///////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
-
-const LEX_STRING Stored_func_obj::TYPE_NAME= LXS_INIT("FUNCTION");
-
-Stored_func_obj::Stored_func_obj(const Ed_row &ed_row)
-  : Stored_routine_obj(ed_row[0], ed_row[1])
-{ }
-
-
-Stored_func_obj::Stored_func_obj(LEX_STRING db_name, LEX_STRING sf_name)
-  : Stored_routine_obj(db_name, sf_name)
-{ }
-
-
-const LEX_STRING *Stored_func_obj::get_type() const
-{
-  return &Stored_func_obj::TYPE_NAME;
-}
-
-///////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef HAVE_EVENT_SCHEDULER
 
-const LEX_STRING Event_obj::TYPE_NAME= LXS_INIT("EVENT");
-
-Event_obj::Event_obj(const Ed_row &ed_row)
-  : Stored_program_obj(ed_row[0], ed_row[1])
-{ }
-
-
-Event_obj::Event_obj(LEX_STRING db_name, LEX_STRING event_name)
-  : Stored_program_obj(db_name, event_name)
-{ }
-
-
-const LEX_STRING *Event_obj::get_type() const
-{
-  return &Event_obj::TYPE_NAME;
-}
-
-
-const LEX_STRING *Event_obj::get_create_stmt(Ed_row *row)
-{
-  return row->get_column(3);
-}
-
-
 void Event_obj::dump_header(Ed_row *row, Out_stream &out_stream)
 {
   {
@@ -1933,7 +1926,7 @@ Tablespace_obj(LEX_STRING ts_name,
                LEX_STRING comment,
                LEX_STRING data_file_name,
                LEX_STRING engine)
-  : Abstract_obj(null_lex_str, ts_name)
+  : Abstract_obj(ts_name)
 {
   m_comment.copy(comment.str, comment.length, system_charset_info);
   m_data_file_name.copy(data_file_name.str, data_file_name.length,
@@ -1945,7 +1938,7 @@ Tablespace_obj(LEX_STRING ts_name,
 
 
 Tablespace_obj::Tablespace_obj(LEX_STRING ts_name)
-  : Abstract_obj(null_lex_str, ts_name)
+  : Abstract_obj(ts_name)
 {
   m_comment.length(0);
   m_data_file_name.length(0);
@@ -2058,9 +2051,10 @@ generate_unique_grant_id(const String *u
   s_stream << " " << Int_value(++id_counter);
 }
 
+/////////////////////////////////////////////////////////////////////////////
 
 Grant_obj::Grant_obj(const Ed_row &row)
-  : Abstract_obj(null_lex_str, null_lex_str)
+  : Abstract_obj(null_lex_str)
 {
   const LEX_STRING *user_name= row.get_column(0);
   const LEX_STRING *privilege_type= row.get_column(1);
@@ -2099,9 +2093,10 @@ Grant_obj::Grant_obj(const Ed_row &row)
   generate_unique_grant_id(&m_user_name, &m_id);
 }
 
+/////////////////////////////////////////////////////////////////////////////
 
 Grant_obj::Grant_obj(LEX_STRING name)
-  : Abstract_obj(null_lex_str, null_lex_str)
+  : Abstract_obj(null_lex_str)
 {
   m_user_name.length(0);
   m_grant_info.length(0);
@@ -2109,6 +2104,7 @@ Grant_obj::Grant_obj(LEX_STRING name)
   m_id.copy(name.str, name.length, system_charset_info);
 }
 
+/////////////////////////////////////////////////////////////////////////////
 
 /**
   Serialize the object.
@@ -2145,6 +2141,7 @@ bool Grant_obj::do_serialize(THD *thd, O
   DBUG_RETURN(FALSE);
 }
 
+/////////////////////////////////////////////////////////////////////////////
 
 bool Grant_obj::do_deserialize(In_stream *is)
 {

Thread
bzr commit into mysql-6.0-runtime branch (alik:2771) Alexander Nozdrin26 Nov