diff options
author | Sergei Golubchik <sergii@pisem.net> | 2013-04-09 15:49:48 +0200 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2013-04-09 15:49:48 +0200 |
commit | 9594107fb8ce4c691c0cbb5891eef5add6ee105f (patch) | |
tree | cffc621b0ba6adfae9b88195ee31915b9d48c815 /sql | |
parent | 5f69c8a59480569eb275169630f91763fceacc0f (diff) | |
download | mariadb-git-9594107fb8ce4c691c0cbb5891eef5add6ee105f.tar.gz |
cleanups
Diffstat (limited to 'sql')
-rw-r--r-- | sql/datadict.cc | 25 | ||||
-rw-r--r-- | sql/datadict.h | 3 | ||||
-rw-r--r-- | sql/sql_truncate.cc | 13 | ||||
-rw-r--r-- | sql/unireg.cc | 22 | ||||
-rw-r--r-- | sql/unireg.h | 2 |
5 files changed, 30 insertions, 35 deletions
diff --git a/sql/datadict.cc b/sql/datadict.cc index c228784d578..15419c4f577 100644 --- a/sql/datadict.cc +++ b/sql/datadict.cc @@ -158,26 +158,35 @@ bool dd_check_storage_engine_flag(THD *thd, @param thd Thread context. @param db Name of the database to which the table belongs to. @param name Table name. + @param path For temporary tables only - path to table files. + Otherwise NULL (the path is calculated from db and table names). @retval FALSE Success. @retval TRUE Error. */ -bool dd_recreate_table(THD *thd, const char *db, const char *table_name) +bool dd_recreate_table(THD *thd, const char *db, const char *table_name, + const char *path) { bool error= TRUE; HA_CREATE_INFO create_info; - char path[FN_REFLEN + 1]; + char path_buf[FN_REFLEN + 1]; DBUG_ENTER("dd_recreate_table"); - /* There should be a exclusive metadata lock on the table. */ - DBUG_ASSERT(thd->mdl_context.is_lock_owner(MDL_key::TABLE, db, table_name, - MDL_EXCLUSIVE)); - memset(&create_info, 0, sizeof(create_info)); - /* Create a path to the table, but without a extension. */ - build_table_filename(path, sizeof(path) - 1, db, table_name, "", 0); + if (path) + create_info.options|= HA_LEX_CREATE_TMP_TABLE; + else + { + build_table_filename(path_buf, sizeof(path_buf) - 1, + db, table_name, "", 0); + path= path_buf; + + /* There should be a exclusive metadata lock on the table. */ + DBUG_ASSERT(thd->mdl_context.is_lock_owner(MDL_key::TABLE, db, table_name, + MDL_EXCLUSIVE)); + } /* Attempt to reconstruct the table. */ error= ha_create_table(thd, path, db, table_name, &create_info); diff --git a/sql/datadict.h b/sql/datadict.h index f852b02f52c..9c625e6434c 100644 --- a/sql/datadict.h +++ b/sql/datadict.h @@ -36,6 +36,7 @@ bool dd_check_storage_engine_flag(THD *thd, const char *db, const char *table_name, uint32 flag, bool *yes_no); -bool dd_recreate_table(THD *thd, const char *db, const char *table_name); +bool dd_recreate_table(THD *thd, const char *db, const char *table_name, + const char *path = NULL); #endif // DATADICT_INCLUDED diff --git a/sql/sql_truncate.cc b/sql/sql_truncate.cc index 041bc178a0d..0e97de5a6aa 100644 --- a/sql/sql_truncate.cc +++ b/sql/sql_truncate.cc @@ -258,25 +258,16 @@ static bool recreate_temporary_table(THD *thd, TABLE *table) { bool error= TRUE; TABLE_SHARE *share= table->s; - HA_CREATE_INFO create_info; handlerton *table_type= table->s->db_type(); DBUG_ENTER("recreate_temporary_table"); - memset(&create_info, 0, sizeof(create_info)); - create_info.options|= HA_LEX_CREATE_TMP_TABLE; - table->file->info(HA_STATUS_AUTO | HA_STATUS_NO_LOCK); /* Don't free share. */ close_temporary_table(thd, table, FALSE, FALSE); - /* - We must use share->normalized_path.str since for temporary tables it - differs from what dd_recreate_table() would generate based - on table and schema names. - */ - ha_create_table(thd, share->normalized_path.str, share->db.str, - share->table_name.str, &create_info); + dd_recreate_table(thd, share->db.str, share->table_name.str, + share->normalized_path.str); if (open_table_uncached(thd, share->path.str, share->db.str, share->table_name.str, TRUE)) diff --git a/sql/unireg.cc b/sql/unireg.cc index 60d419808ef..eeaa8fc747f 100644 --- a/sql/unireg.cc +++ b/sql/unireg.cc @@ -49,11 +49,9 @@ static bool pack_header(uchar *forminfo,enum legacy_db_type table_type, static uint get_interval_id(uint *,List<Create_field> &, Create_field *); static bool pack_fields(File file, List<Create_field> &create_fields, ulong data_offset); -static bool make_empty_rec(THD *thd, int file, enum legacy_db_type table_type, - uint table_options, +static bool make_empty_rec(THD *thd, int file, uint table_options, List<Create_field> &create_fields, - uint reclength, ulong data_offset, - handler *handler); + uint reclength, ulong data_offset); /** An interceptor to hijack ER_TOO_MANY_FIELDS error from @@ -102,8 +100,8 @@ handle_condition(THD *, create_fields Fields to create keys number of keys to create key_info Keys to create - db_file Handler to use. May be zero, in which case we use - create_info->db_type + db_file Handler to use. + RETURN false ok true error @@ -317,9 +315,8 @@ bool mysql_create_frm(THD *thd, const char *file_name, mysql_file_seek(file, (ulong) uint2korr(fileinfo+6) + (ulong) key_buff_length, MY_SEEK_SET, MYF(0)); - if (make_empty_rec(thd,file,ha_legacy_type(create_info->db_type), - create_info->table_options, - create_fields,reclength, data_offset, db_file)) + if (make_empty_rec(thd, file, create_info->table_options, + create_fields, reclength, data_offset)) goto err; int2store(buff, create_info->connect_string.length); @@ -1064,12 +1061,9 @@ static bool pack_fields(File file, List<Create_field> &create_fields, /* save an empty record on start of formfile */ -static bool make_empty_rec(THD *thd, File file,enum legacy_db_type table_type, - uint table_options, +static bool make_empty_rec(THD *thd, File file, uint table_options, List<Create_field> &create_fields, - uint reclength, - ulong data_offset, - handler *handler) + uint reclength, ulong data_offset) { int error= 0; Field::utype type; diff --git a/sql/unireg.h b/sql/unireg.h index 702637b0736..46ff166a2b3 100644 --- a/sql/unireg.h +++ b/sql/unireg.h @@ -86,7 +86,7 @@ #define READ_ALL 1 /* openfrm: Read all parameters */ #define CHANGE_FRM 2 /* openfrm: open .frm as O_RDWR */ #define READ_KEYINFO 4 /* L{s nyckeldata fr}n filen */ -#define EXTRA_RECORD 8 /* Reservera plats f|r extra record */ +#define EXTRA_RECORD 8 /* Reserve space for an extra record */ #define DONT_OPEN_TABLES 8 /* Don't open database-files (frd) */ #define DONT_OPEN_MASTER_REG 16 /* Don't open first reg-file (prt) */ #define EXTRA_LONG_RECORD 16 /* Plats f|r dubbel s|k-record */ |