List:Commits« Previous MessageNext Message »
From:Chris Powers Date:August 25 2008 9:13pm
Subject:Re: bzr commit into mysql-6.0-sea branch (svoj:2693) WL#4515
View as plain text  
Sergey,

A few comments on the Falcon changes:

1. Please add a comments indicated below in TableSpaceManger.

2. I see that StorageHandler::getTableSpaceFilesInfo() is called from 
within StorageInterface::fill_is_tables().

Information Schema callback functions were originally defined as static 
methods in NfsPluginHandler. These methods are instantiated at load time 
and protect Falcon from premature calls from the server by checking that 
StorageHandler is available before invoking the internal methods.

Does StorageInterface::fill_is_table() provide the same protection?


Sergey Vojtovich wrote:
> #At bzr+ssh://bk-internal.mysql.com/bzrroot/server/mysql-6.0-sea
> 
>  2693 Sergey Vojtovich	2008-08-25
>       WL#4515 - Falcon: fill INFORMATION_SCHEMA.FILES
>       
>       Fill I_S.FILES with information about Falcon data files. Remove
>       I_S.FALCON_TABLESPACE_FILES. Make backup use I_S.FILES instead of
>       I_S.FALCON_TABLESPACE_FILES.
> modified:
>   mysql-test/suite/funcs_1/r/is_columns_is_falcon.result
>   mysql-test/suite/funcs_1/r/is_tables_is_falcon.result
>   sql/backup/kernel.cc
>   sql/handler.h
>   sql/si_objects.cc
>   sql/si_objects.h
>   storage/falcon/TableSpaceManager.cpp
>   storage/falcon/ha_falcon.cpp
>   storage/falcon/ha_falcon.h
> 
> per-file messages:
>   mysql-test/suite/funcs_1/r/is_columns_is_falcon.result
>     Updated test result: there is no I_S.FALCON_TABLESPACE_FILES anymore.
>   mysql-test/suite/funcs_1/r/is_tables_is_falcon.result
>     Updated test result: there is no I_S.FALCON_TABLESPACE_FILES anymore.
>   sql/backup/kernel.cc
>     As tablespaces are identified by name + engine pair,
>     is_tablespace() now accepts tablespace object instead of tablespace name.
>   sql/handler.h
>     Removed enum entry for I_S.FALCON_TABLESPACE_FILES.
>   sql/si_objects.cc
>     Extended TablespaceObj with methods/variables that get/set tablespace storage
> engine name.
>     
>     Simplified InformationSchemaIterator::prepare_is_table(). With
>     this patch all I_S tables can be accessed via get_schema_table().
>     That is there is no need for extra code to handle tables.
>     
>     Initialize engine name in TablespaceObj constructor.
>     
>     TablespaceObj::materialize() now extracts storage engine from
>     serialization string.
>     
>     In TablespaceObj::build_serialization() create serialization
>     string using storage engine name.
>     
>     Rewritten find_tablespace_schema_row(), so it uses I_S.FILES instead of
> I_S.FALCON_TABLESPACE_FILES and identifies tablespace by name + engine pair.
>     
>     Rewritten get_tablespace_from_schema(), so it identifies tablespace by name +
> engine pair.
>     
>     get_tablespace_for_table() now attempts to get tablespace name
>     with all engines (not only Falcon). Also it identifies tablespace
>     by name + engine pair.
>     
>     Rewritten tablespace_exists() and is_tablespace(), so they idenetify tablespace
> by name + engine pair.
>   sql/si_objects.h
>     As tablespaces are identified by name + engine pair,
>     is_tablespace() now accepts tablespace object instead of tablespace name.
>   storage/falcon/TableSpaceManager.cpp
>     Reuse I_S.FALCON_TABLESPACE_FILES code to fill I_S.FILES
>     and fill fields properly.
>     
>     Also added comments for fields in I_S.TABLESPACES.
>   storage/falcon/ha_falcon.cpp
>     Removed I_S.FALCON_TABLESPACE_FILES code.
>     Added code to fill I_S.FILES.
>   storage/falcon/ha_falcon.h
>     Removed I_S.FALCON_TABLESPACE_FILES code.
> === modified file 'mysql-test/suite/funcs_1/r/is_columns_is_falcon.result'
> --- a/mysql-test/suite/funcs_1/r/is_columns_is_falcon.result	2008-08-07 12:58:45
> +0000
> +++ b/mysql-test/suite/funcs_1/r/is_columns_is_falcon.result	2008-08-25 10:16:17
> +0000
> @@ -41,10 +41,6 @@ NULL	information_schema	FALCON_TABLES	PA
> 
> NULL	information_schema	FALCON_TABLES	SCHEMA_NAME	1		NO	varchar	127	508	NULL	NULL	utf8	utf8_general_ci	varchar(127)			select		Default	Default
> 
> NULL	information_schema	FALCON_TABLES	TABLESPACE	4		NO	varchar	127	508	NULL	NULL	utf8	utf8_general_ci	varchar(127)			select		Default	Default
> 
> NULL	information_schema	FALCON_TABLES	TABLE_NAME	2		NO	varchar	127	508	NULL	NULL	utf8	utf8_general_ci	varchar(127)			select		Default	Default
>
> -NULL	information_schema	FALCON_TABLESPACE_FILES	FILE_ID	3	0	NO	int	NULL	NULL	10	0	NULL	NULL	int(127)			select		Default	Default
>
> -NULL	information_schema	FALCON_TABLESPACE_FILES	FILE_NAME	4		NO	varchar	127	508	NULL	NULL	utf8	utf8_general_ci	varchar(127)			select		Default	Default
>
> -NULL	information_schema	FALCON_TABLESPACE_FILES	TABLESPACE_NAME	1		NO	varchar	127	508	NULL	NULL	utf8	utf8_general_ci	varchar(127)			select		Default	Default
>
> -NULL	information_schema	FALCON_TABLESPACE_FILES	TYPE	2		NO	varchar	127	508	NULL	NULL	utf8	utf8_general_ci	varchar(127)			select		Default	Default
> 
> NULL	information_schema	FALCON_TABLESPACE_IO	BUFFERS	3	0	NO	int	NULL	NULL	10	0	NULL	NULL	int(4)			select		Default	Default
> 
> NULL	information_schema	FALCON_TABLESPACE_IO	FAKES	7	0	NO	int	NULL	NULL	10	0	NULL	NULL	int(4)			select		Default	Default
> 
> NULL	information_schema	FALCON_TABLESPACE_IO	LOGICAL_READS	6	0	NO	int	NULL	NULL	10	0	NULL	NULL	int(4)			select		Default	Default
> @@ -163,10 +159,6 @@ NULL	information_schema	FALCON_SYSTEM_ME
> 
> 4.0000	information_schema	FALCON_TABLES	PARTITION	varchar	127	508	utf8	utf8_general_ci	varchar(127)
> 
> 4.0000	information_schema	FALCON_TABLES	TABLESPACE	varchar	127	508	utf8	utf8_general_ci	varchar(127)
> 
> 4.0000	information_schema	FALCON_TABLES	INTERNAL_NAME	varchar	127	508	utf8	utf8_general_ci	varchar(127)
>
> -4.0000	information_schema	FALCON_TABLESPACE_FILES	TABLESPACE_NAME	varchar	127	508	utf8	utf8_general_ci	varchar(127)
>
> -4.0000	information_schema	FALCON_TABLESPACE_FILES	TYPE	varchar	127	508	utf8	utf8_general_ci	varchar(127)
>
> -NULL	information_schema	FALCON_TABLESPACE_FILES	FILE_ID	int	NULL	NULL	NULL	NULL	int(127)
>
> -4.0000	information_schema	FALCON_TABLESPACE_FILES	FILE_NAME	varchar	127	508	utf8	utf8_general_ci	varchar(127)
> 
> 4.0000	information_schema	FALCON_TABLESPACE_IO	TABLESPACE	varchar	120	480	utf8	utf8_general_ci	varchar(120)
> 
> NULL	information_schema	FALCON_TABLESPACE_IO	PAGE_SIZE	int	NULL	NULL	NULL	NULL	int(4)
>  NULL	information_schema	FALCON_TABLESPACE_IO	BUFFERS	int	NULL	NULL	NULL	NULL	int(4)
> 
> === modified file 'mysql-test/suite/funcs_1/r/is_tables_is_falcon.result'
> --- a/mysql-test/suite/funcs_1/r/is_tables_is_falcon.result	2008-08-07 12:58:45
> +0000
> +++ b/mysql-test/suite/funcs_1/r/is_tables_is_falcon.result	2008-08-25 10:16:17
> +0000
> @@ -176,29 +176,6 @@ user_comment	
>  Separator	-----------------------------------------------------
>  TABLE_CATALOG	NULL
>  TABLE_SCHEMA	information_schema
> -TABLE_NAME	FALCON_TABLESPACE_FILES
> -TABLE_TYPE	SYSTEM VIEW
> -ENGINE	MEMORY
> -VERSION	10
> -ROW_FORMAT	Fixed
> -TABLE_ROWS	#TBLR#
> -AVG_ROW_LENGTH	#ARL#
> -DATA_LENGTH	#DL#
> -MAX_DATA_LENGTH	#MDL#
> -INDEX_LENGTH	#IL#
> -DATA_FREE	#DF#
> -AUTO_INCREMENT	NULL
> -CREATE_TIME	#CRT#
> -UPDATE_TIME	#UT#
> -CHECK_TIME	#CT#
> -TABLE_COLLATION	utf8_general_ci
> -CHECKSUM	NULL
> -CREATE_OPTIONS	#CO#
> -TABLE_COMMENT	#TC#
> -user_comment	
> -Separator	-----------------------------------------------------
> -TABLE_CATALOG	NULL
> -TABLE_SCHEMA	information_schema
>  TABLE_NAME	FALCON_TABLESPACE_IO
>  TABLE_TYPE	SYSTEM VIEW
>  ENGINE	MEMORY
> @@ -469,29 +446,6 @@ user_comment	
>  Separator	-----------------------------------------------------
>  TABLE_CATALOG	NULL
>  TABLE_SCHEMA	information_schema
> -TABLE_NAME	FALCON_TABLESPACE_FILES
> -TABLE_TYPE	SYSTEM VIEW
> -ENGINE	MEMORY
> -VERSION	10
> -ROW_FORMAT	Fixed
> -TABLE_ROWS	#TBLR#
> -AVG_ROW_LENGTH	#ARL#
> -DATA_LENGTH	#DL#
> -MAX_DATA_LENGTH	#MDL#
> -INDEX_LENGTH	#IL#
> -DATA_FREE	#DF#
> -AUTO_INCREMENT	NULL
> -CREATE_TIME	#CRT#
> -UPDATE_TIME	#UT#
> -CHECK_TIME	#CT#
> -TABLE_COLLATION	utf8_general_ci
> -CHECKSUM	NULL
> -CREATE_OPTIONS	#CO#
> -TABLE_COMMENT	#TC#
> -user_comment	
> -Separator	-----------------------------------------------------
> -TABLE_CATALOG	NULL
> -TABLE_SCHEMA	information_schema
>  TABLE_NAME	FALCON_TABLESPACE_IO
>  TABLE_TYPE	SYSTEM VIEW
>  ENGINE	MEMORY
> 
> === modified file 'sql/backup/kernel.cc'
> --- a/sql/backup/kernel.cc	2008-07-19 03:03:39 +0000
> +++ b/sql/backup/kernel.cc	2008-08-25 10:16:17 +0000
> @@ -1663,7 +1663,7 @@ int bcat_create_item(st_bstream_image_he
>        this and cancel restore process.
>      */ 
>  
> -    Obj *ts= obs::is_tablespace(thd, sobj->get_name()); 
> +    Obj *ts= obs::is_tablespace(thd, sobj); 
>  
>      if (ts)
>      {
> 
> === modified file 'sql/handler.h'
> --- a/sql/handler.h	2008-08-07 12:58:45 +0000
> +++ b/sql/handler.h	2008-08-25 10:16:17 +0000
> @@ -612,8 +612,7 @@ enum enum_schema_tables
>    SCH_TRIGGERS,
>    SCH_USER_PRIVILEGES,
>    SCH_VARIABLES,
> -  SCH_VIEWS,
> -  SCH_FALCON_TABLESPACE_FILES
> +  SCH_VIEWS
>  };
>  
>  typedef struct st_table TABLE;
> 
> === modified file 'sql/si_objects.cc'
> --- a/sql/si_objects.cc	2008-08-07 12:58:45 +0000
> +++ b/sql/si_objects.cc	2008-08-25 10:16:17 +0000
> @@ -738,17 +738,24 @@ public:
>    const String* get_comments()
>    { return &m_comments; }
>  
> +  const String* get_engine()
> +  { return &m_engine; }
> +
>    void set_datafile(const String *df)
>    { m_datafile.copy(*df); }
>  
>    void set_comments(const String *c)
>    { m_comments.copy(*c); }
>  
> +  void set_engine(const String *engine)
> +  { m_engine.copy(*engine); }
> +
>  private:
>    // These attributes are to be used only for serialization.
>    String m_ts_name;
>    String m_datafile;
>    String m_comments;
> +  String m_engine;
>  
>    // Drop is not supported by this object.
>    bool drop(THD *thd)
> @@ -1037,32 +1044,8 @@ bool InformationSchemaIterator::prepare_
>    enum_schema_tables is_table_idx,
>    List<LEX_STRING> db_list)
>  {
> -  ST_SCHEMA_TABLE *st;
> -  /*
> -    The falcon schema table does not conform to the older SHOW 
> -    style fill methods nor does it use a wildcard condition.
> -  */
> -  switch (is_table_idx) {
> -    case SCH_TABLESPACES:
> -    {
> -      st= find_schema_table(thd, "TABLESPACES");
> -      *is_table= open_schema_table(thd, st, NULL);
> -      break;
> -    }
> -    case SCH_FALCON_TABLESPACE_FILES:
> -    {
> -      st= find_schema_table(thd, "FALCON_TABLESPACE_FILES");
> -      *is_table= open_schema_table(thd, st, NULL);
> -      break;
> -    }
> -    default:
> -    {
> -      st= get_schema_table(is_table_idx);
> -      *is_table= open_schema_table(thd, st, &db_list);
> -      break;
> -    }
> -  }
> -  if (!*is_table)
> +  ST_SCHEMA_TABLE *st= get_schema_table(is_table_idx);
> +  if (!(*is_table= open_schema_table(thd, st, &db_list)))
>      return TRUE;
>  
>    *ha= (*is_table)->file;
> @@ -2463,6 +2446,7 @@ TablespaceObj::TablespaceObj(const Strin
>    m_ts_name.copy(*ts_name);
>    m_datafile.length(0);
>    m_comments.length(0);
> +  m_engine.length(0);
>  }
>  
>  /**
> @@ -2490,6 +2474,7 @@ bool TablespaceObj::do_serialize(THD *th
>    Materialize the serialization string.
>  
>    This method saves serialization string into a member variable.
> +  Also extracts tablespace engine name from serialization string.
>  
>    @param[in]  serialization_version   version number of this interface
>    @param[in]  serialization           the string from serialize()
> @@ -2505,6 +2490,11 @@ bool TablespaceObj::materialize(uint ser
>  {
>    DBUG_ENTER("TablespaceObj::materialize()");
>    m_create_stmt.copy(*serialization);
> +  /* Extract engine from create statement */
> +  String tmp_str= String("=", 1, system_charset_info);
> +  int pos= m_create_stmt.strrstr(tmp_str, m_create_stmt.length());
> +  m_engine.copy(m_create_stmt.ptr() + pos + 1, m_create_stmt.length() - pos - 1,
> +                system_charset_info);
>    DBUG_RETURN(FALSE);
>  }
>  
> @@ -2558,7 +2548,8 @@ const String *TablespaceObj::build_seria
>      m_create_stmt.append("' COMMENT = '");
>      m_create_stmt.append(m_comments);
>    }
> -  m_create_stmt.append("' ENGINE=FALCON");
> +  m_create_stmt.append("' ENGINE=");
> +  m_create_stmt.append(m_engine);
>    DBUG_RETURN(&m_create_stmt);
>  }
>  
> @@ -2750,6 +2741,7 @@ bool check_db_existence(const String *db
>    @param[in]     thd           Thread context
>    @param[in]     is_table_idx  The information schema to search
>    @param[in]     ts_name       The name of the tablespace to find
> +  @param[in]     ts_engine     Engine of the tablespace to find
>    @param[out]    datafile      The datafile for the tablespace
>    @param[out]    comments      The comments for the tablespace
>    
> @@ -2759,16 +2751,16 @@ bool check_db_existence(const String *db
>  static bool find_tablespace_schema_row(THD *thd,
>                                         enum_schema_tables is_table_idx,
>                                         const String *ts_name,
> +                                       const String *ts_engine,
>                                         String *datafile,
>                                         String *comments)
>  {
> -  int ret= 0;
>    TABLE *is_table;
>    handler *ha;
>    my_bitmap_map *orig_col;
>    LEX_STRING lex_ts_name;
> -  String found_ts_name;
> -  bool retval= FALSE;
> +  String found_ts_name, found_ts_engine;
> +  bool retval= TRUE;
>    String data;
>    List<LEX_STRING> ts_list;
>    DBUG_ENTER("obs::find_tablespace_schema_row()");
> @@ -2784,66 +2776,66 @@ static bool find_tablespace_schema_row(T
>        thd, &is_table, &ha, &orig_col, is_table_idx, ts_list))
>      DBUG_RETURN(TRUE);
>  
> -  /*
> -    Now read from the IS table.
> -  */
> -  if (ha->rnd_next(is_table->record[0]))
> -  {
> -    retval= TRUE;
> -    goto end;
> -  }
> -
> -  /*    
> -    Attempt to locate the row in the tablespaces table.
> -    If found, proceed to the retrieving the data.
> -  */
> - 
> is_table->field[IS_TABLESPACES_TABLESPACE_NAME]->val_str(&found_ts_name);
> -  while (!ret && found_ts_name.length() &&
> -    (strncasecmp(found_ts_name.ptr(), ts_name->ptr(), 
> -     ts_name->length()) != 0))
> -  {
> -    ret= ha->rnd_next(is_table->record[0]);
> -    found_ts_name.length(0); // reset the length of the string
> -    if (!ret)
> -     
> is_table->field[IS_TABLESPACES_TABLESPACE_NAME]->val_str(&found_ts_name);
> -  }
> -  if (ret || (found_ts_name.length() == 0))
> -  {
> -    retval= TRUE;
> -    goto end;
> -  }
> -
> -  /*
> -    TS name is in col IS_TABLESPACES_TABLESPACE_NAME in TABLESPACES
> -    TS comment is in col IS_TABLESPACES_TABLESPACE_COMMENT in TABLESPACES
> -    TS datafile is in col 3 in FALCON_TABLESPACE_FILES
> -  */
> +  /* Locate the row in the schema table and retrive the data. */
>    switch (is_table_idx) {
> -    case SCH_TABLESPACES:
> +  case SCH_TABLESPACES:
> +    while (!ha->rnd_next(is_table->record[0]))
>      {
> -      is_table->field[IS_TABLESPACES_TABLESPACE_COMMENT]->val_str(&data);
> -      comments->copy(data);
> -      break;
> -    }
> -    case SCH_FALCON_TABLESPACE_FILES:
> -    {
> -      is_table->field[3]->val_str(&data);
> -      datafile->copy(data);
> -      break;
> +     
> is_table->field[IS_TABLESPACES_TABLESPACE_NAME]->val_str(&found_ts_name);
> +      is_table->field[IS_TABLESPACES_ENGINE]->val_str(&found_ts_engine);
> +      if (found_ts_name.length() && found_ts_engine.length() &&
> +          !my_strnncoll(system_charset_info, (const uchar*) found_ts_name.ptr(),
> +                        found_ts_name.length(), (const uchar*) ts_name->ptr(),
> +                        ts_name->length()) &&
> +          !my_strnncoll(system_charset_info,
> +                        (const uchar*) found_ts_engine.ptr(),
> +                        found_ts_engine.length(),
> +                        (const uchar*) ts_engine->ptr(),
> ts_engine->length()))
> +      {
> +        retval= FALSE;
> +       
> is_table->field[IS_TABLESPACES_TABLESPACE_COMMENT]->val_str(&data);
> +        comments->copy(data);
> +        DBUG_PRINT("find_tablespace_schema_row", (" Found tablespace %s",
> +                   found_ts_name.ptr()));
> +        break;
> +      }
> +      found_ts_name.length(0);
> +      found_ts_engine.length(0);
>      }
> -    default:
> +    break;
> +  case SCH_FILES:
> +    while (!ha->rnd_next(is_table->record[0]))
>      {
> -      retval= TRUE;  //error
> -      goto end;
> +      is_table->field[IS_FILES_TABLESPACE_NAME]->val_str(&found_ts_name);
> +      is_table->field[IS_FILES_ENGINE]->val_str(&found_ts_engine);
> +      if (found_ts_name.length() && found_ts_engine.length() &&
> +          !my_strnncoll(system_charset_info, (const uchar*) found_ts_name.ptr(),
> +                        found_ts_name.length(), (const uchar*) ts_name->ptr(),
> +                        ts_name->length()) &&
> +          !my_strnncoll(system_charset_info,
> +                        (const uchar*) found_ts_engine.ptr(),
> +                        found_ts_engine.length(),
> +                        (const uchar*) ts_engine->ptr(),
> ts_engine->length()))
> +      {
> +        retval= FALSE;
> +        is_table->field[IS_FILES_FILE_NAME]->val_str(&data);
> +        datafile->copy(data);
> +        DBUG_PRINT("find_tablespace_schema_row", (" Found tablespace %s",
> +                   found_ts_name.ptr()));
> +        break;
> +      }
> +      found_ts_name.length(0);
> +      found_ts_engine.length(0);
>      }
> +    break;
> +  default:
> +    DBUG_ASSERT(0);
> +    break;
>    }
> -  DBUG_PRINT("find_tablespace_schema_row", (" Found tablespace %s", 
> -    found_ts_name.ptr()));
>  
>    /*
>      Cleanup
>    */
> -end:
>    ha->ha_rnd_end();
>  
>    dbug_tmp_restore_column_map(is_table->read_set, orig_col);
> @@ -2860,6 +2852,7 @@ end:
>    @param[in]     thd           Thread context.
>    @param[out]    TablespaceObj A pointer to a new tablespace object
>    @param[in]     ts_name       The name of the tablespace to find
> +  @param[in]     ts_engine     Engine of the tablespace to find
>    
>    @note Caller is responsible for destroying the tablespace object.
>  
> @@ -2868,7 +2861,8 @@ end:
>  */
>  static bool get_tablespace_from_schema(THD *thd,
>                                         TablespaceObj **ts, 
> -                                       const String *ts_name)
> +                                       const String *ts_name,
> +                                       const String *ts_engine)
>  {
>    String datafile;
>    String comments;
> @@ -2878,14 +2872,14 @@ static bool get_tablespace_from_schema(T
>      Locate the row in TABLESPACES and get the comments.
>    */
>    if (find_tablespace_schema_row(thd, SCH_TABLESPACES, 
> -      ts_name, &datafile, &comments))
> +      ts_name, ts_engine, &datafile, &comments))
>      DBUG_RETURN(TRUE);
>  
>    /*
> -    Locate the row in FALCON_TABLESPACE_FILES and get the datafile.
> +    Locate the row in FILES and get the datafile.
>    */
> -  if (find_tablespace_schema_row(thd, SCH_FALCON_TABLESPACE_FILES, 
> -      ts_name, &datafile, &comments))
> +  if (find_tablespace_schema_row(thd, SCH_FILES, 
> +      ts_name, ts_engine, &datafile, &comments))
>      DBUG_RETURN(TRUE);
>  
>    /*
> @@ -2901,6 +2895,7 @@ static bool get_tablespace_from_schema(T
>    *ts= ts_local;
>    ts_local->set_datafile(&datafile);
>    ts_local->set_comments(&comments);
> +  ts_local->set_engine(ts_engine);
>  
>    DBUG_RETURN(FALSE);
>  }
> @@ -2925,9 +2920,8 @@ Obj *get_tablespace_for_table(THD *thd, 
>  {
>    TablespaceObj *ts= NULL;
>    char path[FN_REFLEN];
> -  String ts_name;
> -  bool get_ts= FALSE;
> -  const char *ts_name_str;
> +  String ts_name, ts_engine;
> +  const char *ts_name_str= NULL;
>    DBUG_ENTER("obs::get_tablespace_for_table()");
>    DBUG_PRINT("obs::get_tablespace_for_table", ("name: %s.%s", 
>               db_name->ptr(), tbl_name->ptr()));
> @@ -2937,6 +2931,7 @@ Obj *get_tablespace_for_table(THD *thd, 
>  
>    build_table_filename(path, sizeof(path), db, name, "", 0);
>    ts_name.length(0);
> +  ts_engine.length(0);
>  
>    TABLE *table= open_temporary_table(thd, path, db, name,
>                      FALSE /* don't link to thd->temporary_tables */,
> @@ -2944,12 +2939,12 @@ Obj *get_tablespace_for_table(THD *thd, 
>  
>    if (table)
>    {
> -    get_ts= (table->s->db_type()->db_type == DB_TYPE_FALCON
> -        && (ts_name_str= table->file->get_tablespace_name()));
> -    if (get_ts)
> +    if ((ts_name_str= table->file->get_tablespace_name()))
>      {
>        ts_name.append(ts_name_str);
>        ts_name.set_charset(system_charset_info);
> +      ts_engine.append(table->file->engine_name()->str);
> +      ts_engine.set_charset(system_charset_info);
>      }
>      intern_close_table(table);
>      my_free(table, MYF(0));
> @@ -2960,8 +2955,8 @@ Obj *get_tablespace_for_table(THD *thd, 
>    /*
>      Now open the information_schema table and get the tablespace information.
>    */
> -  if (get_ts)
> -    get_tablespace_from_schema(thd, &ts, &ts_name);
> +  if (ts_name_str)
> +    get_tablespace_from_schema(thd, &ts, &ts_name, &ts_engine);
>  end:
>    DBUG_RETURN(ts);
>  }
> @@ -2982,10 +2977,11 @@ end:
>  bool tablespace_exists(THD *thd,
>                         Obj *ts)
>  {
> -  TablespaceObj *other_ts= NULL;
> +  TablespaceObj *other_ts= NULL, *this_ts= static_cast<TablespaceObj*>(ts);
>    bool retval= FALSE;
>    DBUG_ENTER("obs::tablespace_exists()");
> -  get_tablespace_from_schema(thd, &other_ts, ts->get_name());
> +  get_tablespace_from_schema(thd, &other_ts, this_ts->get_name(),
> +                             this_ts->get_engine());
>    if (!other_ts)
>      DBUG_RETURN(retval);
>    retval= (my_strcasecmp(system_charset_info, 
> @@ -3001,18 +2997,18 @@ bool tablespace_exists(THD *thd,
>    This method determines if the tablespace referenced by name exists on the
>    system. Returns a TablespaceObj if it exists or NULL if it doesn't.
>  
> -  @param[in]  ts_name  The Tablspace name to compare.
> +  @param[in]  Obj  The TablspaceObj pointer to compare.
>    
>    @note Caller is responsible for destroying the tablespace object.
>  
>    @returns the tablespace if found or NULL if not found
>  */
> -Obj *is_tablespace(THD *thd,
> -                   const String *ts_name)
> +Obj *is_tablespace(THD *thd, Obj *ts)
>  {
> -  TablespaceObj *other_ts= NULL;
> +  TablespaceObj *other_ts= NULL, *this_ts= static_cast<TablespaceObj*>(ts);
>    DBUG_ENTER("obs::is_tablespace()");
> -  get_tablespace_from_schema(thd, &other_ts, ts_name);
> +  get_tablespace_from_schema(thd, &other_ts, this_ts->get_name(),
> +                             this_ts->get_engine());
>    DBUG_RETURN(other_ts);
>  }
>  
> 
> === modified file 'sql/si_objects.h'
> --- a/sql/si_objects.h	2008-07-05 08:41:26 +0000
> +++ b/sql/si_objects.h	2008-08-25 10:16:17 +0000
> @@ -541,8 +541,7 @@ bool tablespace_exists(THD *thd,
>    This method determines if the tablespace referenced by name exists on the
>    system. Returns a TablespaceObj if it exists or NULL if it doesn't.
>  */
> -Obj *is_tablespace(THD *thd,
> -                   const String *ts_name);
> +Obj *is_tablespace(THD *thd, Obj *ts);
>  
>  /*
>    This method returns a description of the tablespace useful for communicating
> 
> === modified file 'storage/falcon/TableSpaceManager.cpp'
> --- a/storage/falcon/TableSpaceManager.cpp	2008-08-07 12:58:45 +0000
> +++ b/storage/falcon/TableSpaceManager.cpp	2008-08-25 10:16:17 +0000
> @@ -518,17 +518,26 @@ void TableSpaceManager::getTableSpaceInf
>  		


Please add a line comment indicating the column for 
infoTable->putString(0,1 and 2)


>  	while (resultSet->next())
>  		{
> -		infoTable->putString(0, resultSet->getString(1));					// tablespace name
> +		// TABLESPACE_NAME NOT NULL
> +		infoTable->putString(0, resultSet->getString(1));
> +		// ENGINE NOT NULL
>  		infoTable->putString(1, "Falcon");
> +		// TABLESPACE_TYPE (based upon name)
>  		infoTable->setNotNull(2);
> -		infoTable->putString(2, tableSpaceType(resultSet->getString(1)));	// type
> based upon name
> +		infoTable->putString(2, tableSpaceType(resultSet->getString(1)));
> +		// LOGFILE_GROUP_NAME
>  		infoTable->setNull(3);
> +		// EXTENT_SIZE
>  		infoTable->setNull(4);
> +		// AUTOEXTEND_SIZE
>  		infoTable->setNull(5);
> +		// MAXIMUM_SIZE
>  		infoTable->setNull(6);
> +		// NODEGROUP_ID
>  		infoTable->setNull(7);
> +		// TABLESPACE_COMMENT
>  		infoTable->setNotNull(8);
> -		infoTable->putString(8, resultSet->getString(2));					// comment
> +		infoTable->putString(8, resultSet->getString(2));
>  		infoTable->putRecord();
>  		}
>  }
> @@ -541,10 +550,46 @@ void TableSpaceManager::getTableSpaceFil
>  
>  	while (resultSet->next())
>  		{
> -		infoTable->putString(0, resultSet->getString(1));					// tablespace name
> -		infoTable->putString(1, tableSpaceType(resultSet->getString(1)));	// type
> based upon name
> -		infoTable->putInt(2, 1);											// file id (unused for now)
> -		infoTable->putString(3, resultSet->getString(2));					// file name
> +		infoTable->putInt(0, 0);		// FILE_ID NOT NULL, unused for now
> +		infoTable->setNotNull(1);		// FILE_NAME
> +		infoTable->putString(1, resultSet->getString(2));
> +		infoTable->putString(2, "DATAFILE");	// FILE_TYPE NOT NULL
> +		infoTable->setNotNull(3);		// TABLESPACE_NAME
> +		infoTable->putString(3, resultSet->getString(1));
> +		infoTable->setNull(4);			// TABLE_CATALOG
> +		infoTable->setNull(5);			// TABLE_SCHEMA
> +		infoTable->setNull(6);			// TABLE_NAME
> +		infoTable->setNull(7);			// LOGFILE_GROUP_NAME
> +		infoTable->setNull(8);			// LOGFILE_GROUP_NUMBER
> +		infoTable->putString(9, "Falcon");	// ENGINE NOT NULL
> +		infoTable->setNull(10);			// FULLTEXT_KEYS
> +		infoTable->setNull(11);			// DELETED_ROWS
> +		infoTable->setNull(12);			// UPDATE_COUNT
> +		infoTable->setNull(13);			// FREE_EXTENTS
> +		infoTable->setNull(14);			// TOTAL_EXTENTS
> +		infoTable->putInt(15, 0);		// EXTENT_SIZE NOT NULL
> +		infoTable->setNull(16);			// INITIAL_SIZE
> +		infoTable->setNull(17);			// MAXIMUM_SIZE
> +		infoTable->setNull(18);			// AUTOEXTEND_SIZE
> +		infoTable->setNull(19);			// CREATION_TIME
> +		infoTable->setNull(20);			// LAST_UPDATE_TIME
> +		infoTable->setNull(21);			// LAST_ACCESS_TIME
> +		infoTable->setNull(22);			// RECOVER_TIME
> +		infoTable->setNull(23);			// TRANSACTION_COUNTER
> +		infoTable->setNull(24);			// VERSION
> +		infoTable->setNull(25);			// ROW_FORMAT
> +		infoTable->setNull(26);			// TABLE_ROWS
> +		infoTable->setNull(27);			// AVG_ROW_LENGTH
> +		infoTable->setNull(28);			// DATA_LENGTH
> +		infoTable->setNull(29);			// MAX_DATA_LENGTH
> +		infoTable->setNull(30);			// INDEX_LENGTH
> +		infoTable->setNull(31);			// DATA_FREE
> +		infoTable->setNull(32);			// CREATE_TIME
> +		infoTable->setNull(33);			// UPDATE_TIME
> +		infoTable->setNull(34);			// CHECK_TIME
> +		infoTable->setNull(35);			// CHECKSUM
> +		infoTable->putString(36, "NORMAL");	// STATUS NOT NULL
> +		infoTable->setNull(37);			// EXTRA
>  		infoTable->putRecord();
>  		}
>  }
> 
> === modified file 'storage/falcon/ha_falcon.cpp'
> --- a/storage/falcon/ha_falcon.cpp	2008-08-07 12:58:45 +0000
> +++ b/storage/falcon/ha_falcon.cpp	2008-08-25 10:16:17 +0000
> @@ -2104,6 +2104,9 @@ int StorageInterface::fill_is_table(hand
>  		case SCH_TABLESPACES:
>  			storageHandler->getTableSpaceInfo(&infoTable);
>  			break;
> +		case SCH_FILES:
> +			storageHandler->getTableSpaceFilesInfo(&infoTable);
> +			break;
>  		default:
>  			return 0;
>  		}
> @@ -3186,47 +3189,6 @@ int NfsPluginHandler::deinitTableSpaceIO
>  
>  //*****************************************************************************
>  //
> -// FALCON_TABLESPACE_FILES
> -//
> -//*****************************************************************************
> -
> -int NfsPluginHandler::getTableSpaceFilesInfo(THD *thd, TABLE_LIST *tables, COND
> *cond)
> -{
> -	InfoTableImpl infoTableSpace(thd, tables, system_charset_info);
> -
> -	if (storageHandler)
> -		storageHandler->getTableSpaceFilesInfo(&infoTableSpace);
> -
> -	return infoTableSpace.error;
> -}
> -
> -ST_FIELD_INFO tableSpaceFilesFieldInfo[]=
> -{
> -	{"TABLESPACE_NAME",	127, MYSQL_TYPE_STRING,		0, 0, "TableSpace Name",
> SKIP_OPEN_TABLE},
> -	{"TYPE",			127, MYSQL_TYPE_STRING,		0, 0, "Type", SKIP_OPEN_TABLE},
> -	{"FILE_ID",			127, MYSQL_TYPE_LONG,		0, 0, "File ID", SKIP_OPEN_TABLE},
> -	{"FILE_NAME",		127, MYSQL_TYPE_STRING,		0, 0, "File Name", SKIP_OPEN_TABLE},
> -	{0,					0, MYSQL_TYPE_STRING,		0, 0, 0, SKIP_OPEN_TABLE}
> -};
> -
> -int NfsPluginHandler::initTableSpaceFilesInfo(void *p)
> -{
> -	DBUG_ENTER("initTableSpaceFilesInfo");
> -	ST_SCHEMA_TABLE *schema = (ST_SCHEMA_TABLE *)p;
> -	schema->fields_info = tableSpaceFilesFieldInfo;
> -	schema->fill_table = NfsPluginHandler::getTableSpaceFilesInfo;
> -
> -	DBUG_RETURN(0);
> -}
> -
> -int NfsPluginHandler::deinitTableSpaceFilesInfo(void *p)
> -{
> -	DBUG_ENTER("deinitTableSpaceFilesInfo");
> -	DBUG_RETURN(0);
> -}
> -
> -//*****************************************************************************
> -//
>  // FALCON_TABLES
>  //
>  //*****************************************************************************
> @@ -3679,7 +3641,6 @@ static st_mysql_information_schema falco
>  static st_mysql_information_schema falcon_transaction_summary	=	{
> MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
>  static st_mysql_information_schema falcon_syncobjects			=	{
> MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
>  static st_mysql_information_schema falcon_serial_log_info		=	{
> MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
> -static st_mysql_information_schema falcon_tablespace_files		=	{
> MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
>  static st_mysql_information_schema falcon_tables				=	{
> MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
>  static st_mysql_information_schema falcon_version				=	{
> MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION};
>  
> @@ -3851,21 +3812,6 @@ mysql_declare_plugin(falcon)
>  
>  	{
>  	MYSQL_INFORMATION_SCHEMA_PLUGIN,
> -	&falcon_tablespace_files,
> -	"FALCON_TABLESPACE_FILES",
> -	"MySQL AB",
> -	"Falcon TableSpace Files.",
> -	PLUGIN_LICENSE_GPL,
> -	NfsPluginHandler::initTableSpaceFilesInfo,	/* plugin init */
> -	NfsPluginHandler::deinitTableSpaceFilesInfo,/* plugin deinit */
> -	0x0005,
> -	NULL,										/* status variables */
> -	NULL,										/* system variables */
> -	NULL										/* config options   */
> -	},
> -	
> -	{
> -	MYSQL_INFORMATION_SCHEMA_PLUGIN,
>  	&falcon_tables,
>  	"FALCON_TABLES",
>  	"MySQL AB",
> 
> === modified file 'storage/falcon/ha_falcon.h'
> --- a/storage/falcon/ha_falcon.h	2008-08-07 12:58:45 +0000
> +++ b/storage/falcon/ha_falcon.h	2008-08-25 10:16:17 +0000
> @@ -247,10 +247,6 @@ public:
>  	static int initSyncInfo(void *p);
>  	static int deinitSyncInfo(void *p);
>  
> -	static int getTableSpaceFilesInfo(THD *thd, TABLE_LIST *tables, COND *cond);
> -	static int initTableSpaceFilesInfo(void *p);
> -	static int deinitTableSpaceFilesInfo(void *p);
> -	
>  	static int getTablesInfo(THD *thd, TABLE_LIST *tables, COND *cond);
>  	static int initTablesInfo(void *p);
>  	static int deinitTablesInfo(void *p);
> 
> 
Thread
bzr commit into mysql-6.0-sea branch (svoj:2693) WL#4515Sergey Vojtovich25 Aug
  • RE: bzr commit into mysql-6.0-sea branch (svoj:2693) WL#4515Chuck Bell25 Aug
  • Re: bzr commit into mysql-6.0-sea branch (svoj:2693) WL#4515Chris Powers25 Aug
Re: bzr commit into mysql-6.0-sea branch (svoj:2693) WL#4515Chris Powers26 Aug