From: kevin.lewis Date: March 18 2011 3:48pm Subject: bzr push into mysql-trunk-innodb branch (kevin.lewis:3547 to 3548) WL#5744 List-Archive: http://lists.mysql.com/commits/133338 Message-Id: <20110318154853.ED244D228B0@kevin-lewis-macbook.local> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3548 kevin.lewis@stripped 2011-03-18 RB://621-Part 1 of the changes in RB://595. These changes are a pre-requisite for WL#5744-Support various page sizes. The main change here is the separation of the DICT_TF2_TEMPORARY flag from table->flags to a new flag variable called table->flags2. Now, table->flags maps fully to SYS_TABLES.TYPE and table->flags2 maps to SYS_TABLES.MIX_LEN. No changes are made to the on-disk structure of SYS_TABLES. Other related changes: * Some of the extra work to account for the DICT_TF2_TEMPORARY bit being at position 7 in table->flags is no longer needed. * dict_mem_table_create() passes flags2. * SYS_TABLES.MIX_LEN was/is only checked for flags2 if SYS_TABLES.N_COLS had the high order bit set. The code now refers to this bit as DICT_N_COLS_COMPACT instead of 0x80000000. * #define DICT_TF_BIT_MASK (~(~0 << DICT_TF_BITS)) makes the code easier to read when checking only the known bits in table->flags. modified: storage/innobase/dict/dict0boot.c storage/innobase/dict/dict0crea.c storage/innobase/dict/dict0dict.c storage/innobase/dict/dict0load.c storage/innobase/dict/dict0mem.c storage/innobase/fil/fil0fil.c storage/innobase/handler/ha_innodb.cc storage/innobase/ibuf/ibuf0ibuf.c storage/innobase/include/dict0mem.h storage/innobase/mtr/mtr0log.c storage/innobase/page/page0zip.c storage/innobase/pars/pars0pars.c storage/innobase/row/row0merge.c storage/innobase/row/row0mysql.c 3547 Vasil Dimov 2011-03-18 Remove excess code, the variable is not used after being assigned. modified: storage/innobase/row/row0mysql.c === modified file 'storage/innobase/dict/dict0boot.c' --- a/storage/innobase/dict/dict0boot.c revid:vasil.dimov@stripped +++ b/storage/innobase/dict/dict0boot.c revid:kevin.lewis@stripped @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -283,7 +283,7 @@ dict_boot(void) /* Insert into the dictionary cache the descriptions of the basic system tables */ /*-------------------------*/ - table = dict_mem_table_create("SYS_TABLES", DICT_HDR_SPACE, 8, 0); + table = dict_mem_table_create("SYS_TABLES", DICT_HDR_SPACE, 8, 0, 0); dict_mem_table_add_col(table, heap, "NAME", DATA_BINARY, 0, 0); dict_mem_table_add_col(table, heap, "ID", DATA_BINARY, 0, 0); @@ -335,7 +335,7 @@ dict_boot(void) ut_a(error == DB_SUCCESS); /*-------------------------*/ - table = dict_mem_table_create("SYS_COLUMNS", DICT_HDR_SPACE, 7, 0); + table = dict_mem_table_create("SYS_COLUMNS", DICT_HDR_SPACE, 7, 0, 0); dict_mem_table_add_col(table, heap, "TABLE_ID", DATA_BINARY, 0, 0); dict_mem_table_add_col(table, heap, "POS", DATA_INT, 0, 4); @@ -367,7 +367,7 @@ dict_boot(void) ut_a(error == DB_SUCCESS); /*-------------------------*/ - table = dict_mem_table_create("SYS_INDEXES", DICT_HDR_SPACE, 7, 0); + table = dict_mem_table_create("SYS_INDEXES", DICT_HDR_SPACE, 7, 0, 0); dict_mem_table_add_col(table, heap, "TABLE_ID", DATA_BINARY, 0, 0); dict_mem_table_add_col(table, heap, "ID", DATA_BINARY, 0, 0); @@ -413,7 +413,7 @@ dict_boot(void) ut_a(error == DB_SUCCESS); /*-------------------------*/ - table = dict_mem_table_create("SYS_FIELDS", DICT_HDR_SPACE, 3, 0); + table = dict_mem_table_create("SYS_FIELDS", DICT_HDR_SPACE, 3, 0, 0); dict_mem_table_add_col(table, heap, "INDEX_ID", DATA_BINARY, 0, 0); dict_mem_table_add_col(table, heap, "POS", DATA_INT, 0, 4); === modified file 'storage/innobase/dict/dict0crea.c' --- a/storage/innobase/dict/dict0crea.c revid:vasil.dimov@stripped +++ b/storage/innobase/dict/dict0crea.c revid:kevin.lewis@stripped @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -97,13 +97,13 @@ dict_create_sys_tables_tuple( dfield = dtuple_get_nth_field(entry, 3/*TYPE*/); ptr = mem_heap_alloc(heap, 4); - if (table->flags & (~DICT_TF_COMPACT & ~(~0 << DICT_TF_BITS))) { + if (table->flags & ~DICT_TF_COMPACT) { ut_a(table->flags & DICT_TF_COMPACT); ut_a(dict_table_get_format(table) >= DICT_TF_FORMAT_ZIP); ut_a((table->flags & DICT_TF_ZSSIZE_MASK) <= (DICT_TF_ZSSIZE_MAX << DICT_TF_ZSSIZE_SHIFT)); - ut_a(!(table->flags & (~0 << DICT_TF2_BITS))); - mach_write_to_4(ptr, table->flags & ~(~0 << DICT_TF_BITS)); + ut_a(!(table->flags & ~DICT_TF_BIT_MASK)); + mach_write_to_4(ptr, table->flags & DICT_TF_BIT_MASK); } else { mach_write_to_4(ptr, DICT_TABLE_ORDINARY); } @@ -120,7 +120,9 @@ dict_create_sys_tables_tuple( dfield = dtuple_get_nth_field(entry, 5/*MIX_LEN*/); ptr = mem_heap_alloc(heap, 4); - mach_write_to_4(ptr, table->flags >> DICT_TF2_SHIFT); + /* Be sure all non-used bits are zero. */ + ut_a(!(table->flags2 & ~DICT_TF2_BIT_MASK)); + mach_write_to_4(ptr, table->flags2); dfield_set_data(dfield, ptr, 4); /* 8: CLUSTER_NAME ---------------------*/ @@ -291,7 +293,8 @@ dict_build_table_def_step( ut_ad(!dict_table_zip_size(table) || dict_table_get_format(table) >= DICT_TF_FORMAT_ZIP); - flags = table->flags & ~(~0 << DICT_TF_BITS); + flags = table->flags; + ut_a(!(flags & ~DICT_TF_BIT_MASK)); error = fil_create_new_single_table_tablespace( space, path_or_name, is_path, flags == DICT_TF_COMPACT ? 0 : flags, @@ -309,8 +312,10 @@ dict_build_table_def_step( mtr_commit(&mtr); } else { - /* Create in the system tablespace: disallow new features */ - table->flags &= (~0 << DICT_TF_BITS) | DICT_TF_COMPACT; + /* Create in the system tablespace: disallow Barracuda + features by keeping only the first bit which says whether + the row format is redundant or compact */ + table->flags &= DICT_TF_COMPACT; } row = dict_create_sys_tables_tuple(table, node->heap); === modified file 'storage/innobase/dict/dict0dict.c' --- a/storage/innobase/dict/dict0dict.c revid:vasil.dimov@stripped +++ b/storage/innobase/dict/dict0dict.c revid:kevin.lewis@stripped @@ -5085,7 +5085,7 @@ dict_ind_init(void) dict_table_t* table; /* create dummy table and index for REDUNDANT infimum and supremum */ - table = dict_mem_table_create("SYS_DUMMY1", DICT_HDR_SPACE, 1, 0); + table = dict_mem_table_create("SYS_DUMMY1", DICT_HDR_SPACE, 1, 0, 0); dict_mem_table_add_col(table, NULL, NULL, DATA_CHAR, DATA_ENGLISH | DATA_NOT_NULL, 8); @@ -5097,7 +5097,8 @@ dict_ind_init(void) /* create dummy table and index for COMPACT infimum and supremum */ table = dict_mem_table_create("SYS_DUMMY2", - DICT_HDR_SPACE, 1, DICT_TF_COMPACT); + DICT_HDR_SPACE, 1, + DICT_TF_COMPACT, 0); dict_mem_table_add_col(table, NULL, NULL, DATA_CHAR, DATA_ENGLISH | DATA_NOT_NULL, 8); dict_ind_compact = dict_mem_index_create("SYS_DUMMY2", "SYS_DUMMY2", === modified file 'storage/innobase/dict/dict0load.c' --- a/storage/innobase/dict/dict0load.c revid:vasil.dimov@stripped +++ b/storage/innobase/dict/dict0load.c revid:kevin.lewis@stripped @@ -605,7 +605,7 @@ dict_sys_tables_get_flags( field = rec_get_nth_field_old(rec, 4/*N_COLS*/, &len); n_cols = mach_read_from_4(field); - if (UNIV_UNLIKELY(!(n_cols & 0x80000000UL))) { + if (UNIV_UNLIKELY(!(n_cols & DICT_N_COLS_COMPACT))) { /* New file formats require ROW_FORMAT=COMPACT. */ return(ULINT_UNDEFINED); } @@ -632,7 +632,7 @@ dict_sys_tables_get_flags( return(ULINT_UNDEFINED); } - if (UNIV_UNLIKELY(flags & (~0 << DICT_TF_BITS))) { + if (UNIV_UNLIKELY(flags & ~DICT_TF_BIT_MASK)) { /* Some unused bits are set. */ return(ULINT_UNDEFINED); } @@ -746,7 +746,7 @@ loop: ibool is_temp; field = rec_get_nth_field_old(rec, 4, &len); - if (0x80000000UL & mach_read_from_4(field)) { + if (mach_read_from_4(field) & DICT_N_COLS_COMPACT) { /* ROW_FORMAT=COMPACT: read the is_temp flag from SYS_TABLES.MIX_LEN. */ field = rec_get_nth_field_old(rec, 7, &len); @@ -1485,7 +1485,8 @@ dict_load_table_low( ulint len; ulint space; ulint n_cols; - ulint flags; + ulint flags = 0; + ulint flags2 = 0; if (UNIV_UNLIKELY(rec_get_deleted_flag(rec, 0))) { return("delete-marked record in SYS_TABLES"); @@ -1567,27 +1568,22 @@ err_len: (ulong) flags); return("incorrect flags in SYS_TABLES"); } - } else { - flags = 0; } /* The high-order bit of N_COLS is the "compact format" flag. For tables in that format, MIX_LEN may hold additional flags. */ - if (n_cols & 0x80000000UL) { - ulint flags2; - + if (n_cols & DICT_N_COLS_COMPACT) { flags |= DICT_TF_COMPACT; - field = rec_get_nth_field_old(rec, 7, &len); + field = rec_get_nth_field_old(rec, 7/*MIX_LEN*/, &len); if (UNIV_UNLIKELY(len != 4)) { - goto err_len; } flags2 = mach_read_from_4(field); - if (flags2 & (~0 << (DICT_TF2_BITS - DICT_TF2_SHIFT))) { + if (flags2 & ~DICT_TF2_BIT_MASK) { ut_print_timestamp(stderr); fputs(" InnoDB: Warning: table ", stderr); ut_print_filename(stderr, name); @@ -1596,15 +1592,13 @@ err_len: " has unknown flags %lx.\n", (ulong) flags2); - flags2 &= ~(~0 << (DICT_TF2_BITS - DICT_TF2_SHIFT)); + flags2 &= DICT_TF2_BIT_MASK; } - - flags |= flags2 << DICT_TF2_SHIFT; } /* See if the tablespace is available. */ - *table = dict_mem_table_create(name, space, n_cols & ~0x80000000UL, - flags); + *table = dict_mem_table_create( + name, space, n_cols & ~DICT_N_COLS_COMPACT, flags, flags2); field = rec_get_nth_field_old(rec, 3/*ID*/, &len); ut_ad(len == 8); /* this was checked earlier */ @@ -1707,11 +1701,10 @@ err_exit: /* The system tablespace is always available. */ } else if (!fil_space_for_table_exists_in_mem( table->space, name, - (table->flags >> DICT_TF2_SHIFT) - & DICT_TF2_TEMPORARY, + table->flags2 & DICT_TF2_TEMPORARY, FALSE, FALSE)) { - if (table->flags & (DICT_TF2_TEMPORARY << DICT_TF2_SHIFT)) { + if (table->flags2 & DICT_TF2_TEMPORARY) { /* Do not bother to retry opening temporary tables. */ table->ibd_file_missing = TRUE; } else { @@ -1727,7 +1720,7 @@ err_exit: if (!fil_open_single_table_tablespace( TRUE, table->space, table->flags == DICT_TF_COMPACT ? 0 : - table->flags & ~(~0 << DICT_TF_BITS), name)) { + table->flags, name)) { /* We failed to find a sensible tablespace file */ === modified file 'storage/innobase/dict/dict0mem.c' --- a/storage/innobase/dict/dict0mem.c revid:vasil.dimov@stripped +++ b/storage/innobase/dict/dict0mem.c revid:kevin.lewis@stripped @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -63,13 +63,15 @@ dict_mem_table_create( ignored if the table is made a member of a cluster */ ulint n_cols, /*!< in: number of columns */ - ulint flags) /*!< in: table flags */ + ulint flags, /*!< in: table flags */ + ulint flags2) /*!< in: table flags2 */ { dict_table_t* table; mem_heap_t* heap; ut_ad(name); - ut_a(!(flags & (~0 << DICT_TF2_BITS))); + ut_a(!(flags & ~DICT_TF_BIT_MASK)); + ut_a(!(flags2 & ~DICT_TF2_BIT_MASK)); heap = mem_heap_create(DICT_HEAP_SIZE); @@ -78,6 +80,7 @@ dict_mem_table_create( table->heap = heap; table->flags = (unsigned int) flags; + table->flags2 = (unsigned int) flags2; table->name = ut_malloc(strlen(name) + 1); memcpy(table->name, name, strlen(name) + 1); table->space = (unsigned int) space; === modified file 'storage/innobase/fil/fil0fil.c' --- a/storage/innobase/fil/fil0fil.c revid:vasil.dimov@stripped +++ b/storage/innobase/fil/fil0fil.c revid:kevin.lewis@stripped @@ -1153,13 +1153,11 @@ fil_space_create( fil_space_t* space; /* The tablespace flags (FSP_SPACE_FLAGS) should be 0 for - ROW_FORMAT=COMPACT - ((table->flags & ~(~0 << DICT_TF_BITS)) == DICT_TF_COMPACT) and + ROW_FORMAT=COMPACT (table->flags == DICT_TF_COMPACT) and ROW_FORMAT=REDUNDANT (table->flags == 0). For any other - format, the tablespace flags should equal - (table->flags & ~(~0 << DICT_TF_BITS)). */ + format, the tablespace flags should equal table->flags. */ ut_a(flags != DICT_TF_COMPACT); - ut_a(!(flags & (~0UL << DICT_TF_BITS))); + ut_a(!(flags & ~DICT_TF_BIT_MASK)); try_again: /*printf( @@ -2697,13 +2695,11 @@ fil_create_new_single_table_tablespace( ut_a(space_id < SRV_LOG_SPACE_FIRST_ID); ut_a(size >= FIL_IBD_FILE_INITIAL_SIZE); /* The tablespace flags (FSP_SPACE_FLAGS) should be 0 for - ROW_FORMAT=COMPACT - ((table->flags & ~(~0 << DICT_TF_BITS)) == DICT_TF_COMPACT) and + ROW_FORMAT=COMPACT (table->flags == DICT_TF_COMPACT) and ROW_FORMAT=REDUNDANT (table->flags == 0). For any other - format, the tablespace flags should equal - (table->flags & ~(~0 << DICT_TF_BITS)). */ + format, the tablespace flags should equal table->flags. */ ut_a(flags != DICT_TF_COMPACT); - ut_a(!(flags & (~0UL << DICT_TF_BITS))); + ut_a(!(flags & ~DICT_TF_BIT_MASK)); path = fil_make_ibd_name(tablename, is_temp); @@ -3072,13 +3068,11 @@ fil_open_single_table_tablespace( filepath = fil_make_ibd_name(name, FALSE); /* The tablespace flags (FSP_SPACE_FLAGS) should be 0 for - ROW_FORMAT=COMPACT - ((table->flags & ~(~0 << DICT_TF_BITS)) == DICT_TF_COMPACT) and + ROW_FORMAT=COMPACT (table->flags == DICT_TF_COMPACT) and ROW_FORMAT=REDUNDANT (table->flags == 0). For any other - format, the tablespace flags should equal - (table->flags & ~(~0 << DICT_TF_BITS)). */ + format, the tablespace flags should equal table->flags. */ ut_a(flags != DICT_TF_COMPACT); - ut_a(!(flags & (~0UL << DICT_TF_BITS))); + ut_a(!(flags & ~DICT_TF_BIT_MASK)); file = os_file_create_simple_no_error_handling( innodb_file_data_key, filepath, OS_FILE_OPEN, @@ -3131,8 +3125,7 @@ fil_open_single_table_tablespace( ut_free(buf2); - if (UNIV_UNLIKELY(space_id != id - || space_flags != (flags & ~(~0 << DICT_TF_BITS)))) { + if (UNIV_UNLIKELY(space_id != id || space_flags != flags)) { ut_print_timestamp(stderr); fputs(" InnoDB: Error: tablespace id and flags in file ", === modified file 'storage/innobase/handler/ha_innodb.cc' --- a/storage/innobase/handler/ha_innodb.cc revid:vasil.dimov@stripped +++ b/storage/innobase/handler/ha_innodb.cc revid:kevin.lewis@stripped @@ -6668,7 +6668,8 @@ create_table_def( an .ibd file for it (no .ibd extension in the path, though); otherwise this is NULL */ - ulint flags) /*!< in: table flags */ + ulint flags, /*!< in: table flags */ + ulint flags2) /*!< in: table flags2 */ { Field* field; dict_table_t* table; @@ -6708,7 +6709,7 @@ create_table_def( /* We pass 0 as the space id, and determine at a lower level the space id where to store the table */ - table = dict_mem_table_create(table_name, 0, n_cols, flags); + table = dict_mem_table_create(table_name, 0, n_cols, flags, flags2); if (path_of_temp_table) { table->dir_path_of_temp_table = @@ -7183,7 +7184,8 @@ ha_innobase::create( char norm_name[FN_REFLEN]; THD* thd = ha_thd(); ib_int64_t auto_inc_value; - ulint flags; + ulint flags = 0; + ulint flags2 = 0; /* Cache the value of innodb_file_format, in case it is modified by another thread while the table is being created. */ const ulint file_format = srv_file_format; @@ -7253,8 +7255,6 @@ ha_innobase::create( /* Create the table definition in InnoDB */ - flags = 0; - /* Validate create options if innodb_strict_mode is set. */ if (!create_options_are_valid(thd, form, create_info)) { error = ER_ILLEGAL_HA_CREATE_OPTION; @@ -7407,12 +7407,12 @@ ha_innobase::create( } if (create_info->options & HA_LEX_CREATE_TMP_TABLE) { - flags |= DICT_TF2_TEMPORARY << DICT_TF2_SHIFT; + flags2 |= DICT_TF2_TEMPORARY; } error = create_table_def(trx, form, norm_name, create_info->options & HA_LEX_CREATE_TMP_TABLE ? name2 : NULL, - flags); + flags, flags2); if (error) { goto cleanup; === modified file 'storage/innobase/ibuf/ibuf0ibuf.c' --- a/storage/innobase/ibuf/ibuf0ibuf.c revid:vasil.dimov@stripped +++ b/storage/innobase/ibuf/ibuf0ibuf.c revid:kevin.lewis@stripped @@ -573,7 +573,7 @@ ibuf_init_at_db_start(void) heap = mem_heap_create(450); /* Use old-style record format for the insert buffer. */ - table = dict_mem_table_create(IBUF_TABLE_NAME, IBUF_SPACE_ID, 1, 0); + table = dict_mem_table_create(IBUF_TABLE_NAME, IBUF_SPACE_ID, 1, 0, 0); dict_mem_table_add_col(table, heap, "DUMMY_COLUMN", DATA_BINARY, 0, 0); @@ -1515,7 +1515,7 @@ ibuf_dummy_index_create( table = dict_mem_table_create("IBUF_DUMMY", DICT_HDR_SPACE, n, - comp ? DICT_TF_COMPACT : 0); + comp ? DICT_TF_COMPACT : 0, 0); index = dict_mem_index_create("IBUF_DUMMY", "IBUF_DUMMY", DICT_HDR_SPACE, 0, n); === modified file 'storage/innobase/include/dict0mem.h' --- a/storage/innobase/include/dict0mem.h revid:vasil.dimov@stripped +++ b/storage/innobase/include/dict0mem.h revid:kevin.lewis@stripped @@ -83,6 +83,8 @@ combination of types */ #define DICT_TF_FORMAT_MASK \ ((~(~0 << (DICT_TF_BITS - DICT_TF_FORMAT_SHIFT))) << DICT_TF_FORMAT_SHIFT) #define DICT_TF_FORMAT_51 0 /*!< InnoDB/MySQL up to 5.1 */ +#define DICT_N_COLS_COMPACT 0x80000000UL /*!< Set if ROW_FORMAT!=REDUNDANT */ + #define DICT_TF_FORMAT_ZIP 1 /*!< InnoDB plugin for 5.1: compressed tables, new BLOB treatment */ @@ -97,23 +99,22 @@ combination of types */ #if (1 << (DICT_TF_BITS - DICT_TF_FORMAT_SHIFT)) <= DICT_TF_FORMAT_MAX # error "DICT_TF_BITS is insufficient for DICT_TF_FORMAT_MAX" #endif +/** Valid table flag bits */ +#define DICT_TF_BIT_MASK (~(~0 << DICT_TF_BITS)) /* @} */ -/** @brief Additional table flags. +/** @brief Table Flags set number 2. These flags will be stored in SYS_TABLES.MIX_LEN. All unused flags will be written as 0. The column may contain garbage for tables created with old versions of InnoDB that only implemented ROW_FORMAT=REDUNDANT. */ /* @{ */ -#define DICT_TF2_SHIFT DICT_TF_BITS - /*!< Shift value for - table->flags. */ -#define DICT_TF2_TEMPORARY 1 /*!< TRUE for tables from - CREATE TEMPORARY TABLE. */ -#define DICT_TF2_BITS (DICT_TF2_SHIFT + 1) - /*!< Total number of bits - in table->flags. */ +/** Total number of bits in table->flags2. */ +#define DICT_TF2_BITS 1 +#define DICT_TF2_BIT_MASK ~(~0 << DICT_TF2_BITS) + +#define DICT_TF2_TEMPORARY (1<<0) /*!< 1 if CREATE TEMPORARY TABLE */ /* @} */ /** Tables could be chained together with Foreign key constraint. When @@ -145,7 +146,8 @@ dict_mem_table_create( is ignored if the table is made a member of a cluster */ ulint n_cols, /*!< in: number of columns */ - ulint flags); /*!< in: table flags */ + ulint flags, /*!< in: table flags */ + ulint flags2); /*!< in: table flags2 */ /****************************************************************//** Free a table memory object. */ UNIV_INTERN @@ -486,7 +488,8 @@ struct dict_table_struct{ unsigned space:32; /*!< space where the clustered index of the table is placed */ - unsigned flags:DICT_TF2_BITS;/*!< DICT_TF_COMPACT, ... */ + unsigned flags:DICT_TF_BITS; /*!< DICT_TF_... */ + unsigned flags2:DICT_TF2_BITS; /*!< DICT_TF2_... */ unsigned ibd_file_missing:1; /*!< TRUE if this is in a single-table tablespace and the .ibd file is missing; then === modified file 'storage/innobase/mtr/mtr0log.c' --- a/storage/innobase/mtr/mtr0log.c revid:vasil.dimov@stripped +++ b/storage/innobase/mtr/mtr0log.c revid:kevin.lewis@stripped @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -563,7 +563,7 @@ mlog_parse_index( n = n_uniq = 1; } table = dict_mem_table_create("LOG_DUMMY", DICT_HDR_SPACE, n, - comp ? DICT_TF_COMPACT : 0); + comp ? DICT_TF_COMPACT : 0, 0); ind = dict_mem_index_create("LOG_DUMMY", "LOG_DUMMY", DICT_HDR_SPACE, 0, n); ind->table = table; === modified file 'storage/innobase/page/page0zip.c' --- a/storage/innobase/page/page0zip.c revid:vasil.dimov@stripped +++ b/storage/innobase/page/page0zip.c revid:kevin.lewis@stripped @@ -1516,7 +1516,7 @@ page_zip_fields_decode( } table = dict_mem_table_create("ZIP_DUMMY", DICT_HDR_SPACE, n, - DICT_TF_COMPACT); + DICT_TF_COMPACT, 0); index = dict_mem_index_create("ZIP_DUMMY", "ZIP_DUMMY", DICT_HDR_SPACE, 0, n); index->table = table; === modified file 'storage/innobase/pars/pars0pars.c' --- a/storage/innobase/pars/pars0pars.c revid:vasil.dimov@stripped +++ b/storage/innobase/pars/pars0pars.c revid:kevin.lewis@stripped @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -1629,7 +1629,7 @@ pars_create_table( /* As the InnoDB SQL parser is for internal use only, for creating some system tables, this function will only create tables in the old (not compact) record format. */ - table = dict_mem_table_create(table_sym->name, 0, n_cols, 0); + table = dict_mem_table_create(table_sym->name, 0, n_cols, 0, 0); #ifdef UNIV_DEBUG if (not_fit_in_memory != NULL) { === modified file 'storage/innobase/row/row0merge.c' --- a/storage/innobase/row/row0merge.c revid:vasil.dimov@stripped +++ b/storage/innobase/row/row0merge.c revid:kevin.lewis@stripped @@ -2295,7 +2295,8 @@ row_merge_create_temporary_table( ut_ad(table); ut_ad(mutex_own(&dict_sys->mutex)); - new_table = dict_mem_table_create(table_name, 0, n_cols, table->flags); + new_table = dict_mem_table_create( + table_name, 0, n_cols, table->flags, table->flags2); for (i = 0; i < n_cols; i++) { const dict_col_t* col; === modified file 'storage/innobase/row/row0mysql.c' --- a/storage/innobase/row/row0mysql.c revid:vasil.dimov@stripped +++ b/storage/innobase/row/row0mysql.c revid:kevin.lewis@stripped @@ -3416,8 +3416,7 @@ check_next_foreign: is_temp = TRUE; } else { name_or_path = name; - is_temp = (table->flags >> DICT_TF2_SHIFT) - & DICT_TF2_TEMPORARY; + is_temp = table->flags2 & DICT_TF2_TEMPORARY; } dict_table_remove_from_cache(table); @@ -3552,15 +3551,19 @@ row_mysql_drop_temp_tables(void) break; } + /* The high order bit of N_COLS is set unless + ROW_FORMAT=REDUNDANT. */ rec = btr_pcur_get_rec(&pcur); field = rec_get_nth_field_old(rec, 4/*N_COLS*/, &len); - if (len != 4 || !(mach_read_from_4(field) & 0x80000000UL)) { + if (len != 4 + || !(mach_read_from_4(field) & DICT_N_COLS_COMPACT)) { continue; } - /* Because this is not a ROW_FORMAT=REDUNDANT table, - the is_temp flag is valid. Examine it. */ - + /* Older versions of InnoDB, which only supported tables + in ROW_FORMAT=REDUNDANT could write garbage to + SYS_TABLES.MIX_LEN, where we now store the is_temp flag. + Above, we assumed is_temp=0 if ROW_FORMAT=REDUNDANT. */ field = rec_get_nth_field_old(rec, 7/*MIX_LEN*/, &len); if (len != 4 || !(mach_read_from_4(field) & DICT_TF2_TEMPORARY)) { No bundle (reason: useless for push emails).