Commit graph

330 commits

Author SHA1 Message Date
marko
0724b4b7c6 Merge changes from MySQL AB to the innodb_mysql test. 2006-09-20 10:52:02 +00:00
marko
975a6df3e3 Merge code from MySQL AB:
Make innobase_hton a pointer.
2006-09-20 09:38:09 +00:00
marko
7e894a1b88 ha_innobase::start_stmt(): Remove the check for
prebuilt->stored_select_lock_type being LOCK_X or LOCK_S.
This would cause false alarms with INSERT ... SELECT, which would use
LOCK_NONE in innodb_locks_unsafe_for_binlog mode.  (Bug #10746)
2006-09-20 08:52:00 +00:00
osku
df49c4bf60 Split long lines with [] operators better. 2006-09-20 06:41:30 +00:00
osku
c345922067 Revamp the line splits done in r763 and r764 that can now be done better,
thanks to r826.
2006-09-19 07:22:21 +00:00
marko
bda1372743 page_offset(): New function to replace many ut_align_offset(., UNIV_PAGE_SIZE)
calls.

dict_index_build_node_ptr(): Correct a typo in a comment.
2006-09-19 05:55:10 +00:00
osku
c9412da892 Remove dict_col_t::name, replace it with a packed array of column names in
dict_table_t. This saves 8-15+ bytes of memory per column on 64-bit
machines.
2006-09-19 04:36:56 +00:00
marko
c6fd683e18 Change the recently introduced ulint bit-fields to unsigned. 2006-09-18 12:02:43 +00:00
marko
f39237e200 dict_col_t: Copy the fields of "dtype_t type" directly to this structure,
so that all integer fields can be packed into 64 bits.  (Bug #20877)

dtype_t: Change the type of all bit-fields to unsigned.

dict_table_get_nth_col(), dict_table_get_sys_col_noninline(),
dict_table_get_sys_col(), dict_field_get_col(): Return const
dict_col_t*, so that changes to dict_col_t can be detected more
easily.  Add const to many dict_col_t* declarations.

dict_index_get_nth_type(): Replace with dict_index_get_nth_col().

dict_col_get_type(): Replace with dict_col_copy_type().

dict_col_get_min_size(), dict_col_get_max_size(), dict_col_get_fixed_size(),
dict_col_get_sql_null_size(): New functions.

dtype_get_at_most_n_mbchars(): Replace the parameter dtype
with the parameters prtype, mbminlen, mbmaxlen.

dtype_get_pad_char(), cmp_data_data(), cmp_data_data_slow(),
cmp_whole_field(): Replace the dtype_t* parameter with the ulint
parameters mtype, prtype.

dtype_copy(): Add a const qualifier to type2 (the one being copied from).

dtype_set_mblen(): Replaced with dtype_get_mblen().

dtype_get_fixed_size_low(), dtype_get_min_size_low(),
dtype_get_fixed_max_low(): Replace dtype_get_fixed_size(),
dtype_get_min_size(), and dtype_get_max_size().  These are used by the
dict_col_get_{fixed,min,max}_size() functions.

cmp_types_are_equal(): Replace with cmp_cols_are_equal().

dict_table_get_col_name(): Add a const qualifier parameter to the
parameter "table".

dtype_binary, dtype_binary_val: Remove.

dtype_is_fixed_size(): Remove.
2006-09-18 11:51:38 +00:00
marko
2d96f74a05 Tweak the bit-field definitions introduced since r813 to address Bug #20877.
rw_lock_t: Do not make writer_is_wait_ex a bit-field.  There are no fields
yet that could be fused to the same machine word, but we play it safe,
because the field writer_is_wait_ex may be modified by several threads
simultaneously.  Such fields should always be allocated an own machine
word.

dict_table_t: Change the type of all bit-fields to "unsigned".  Make
"space" a bit-field of 32 bits.  Move name_hash and id_hash after all
bit-fields, so that the bit-fields can be allocated together.  Do not
make autoinc_inited a bit-field, as we cannot allocate any field
from the same machine word.

dict_build_table_def_step(): Pass a local variable to
fil_create_new_single_table_tablespace() and initialize table->space
from it after the call, now that table->space is a bit-field.
2006-09-18 10:31:51 +00:00
osku
53f8a9ff47 Add dict_table_get_col_name() in preparation for getting rid of
dict_col_t::name, and use it instead of col->name everywhere.
2006-09-18 09:46:05 +00:00
marko
a78e211315 Add dict_col_get_clust_pos_noninline(), which was forgotten from r820. 2006-09-18 08:50:31 +00:00
marko
5f53f4b4f3 page_align(ptr): New utility function to replace
ut_align_down(ptr, UNIV_PAGE_SIZE) calls.
2006-09-18 07:14:41 +00:00
heikki
c6004169ea Erase the magic number in the trx sys header using a redo-logged write;
it should be redo-logged because the data structure is file-based;
this patch does not fix any bug; the original erase operation was added
in r781 to fix Valgrind Bug #20791
2006-09-15 12:43:40 +00:00
marko
7696b8dd87 Remove dict_tree_t, which should have been removed in r453.
There always was a one-to-one mapping between dict_tree_t and dict_index_t.

This saves 6 machine words per B-tree index in the data dictionary
cache plus the memory allocation overhead.  We save one mem_heap_t
object per index (15 machine words).  Considering the internal
fragmentation of the buddy allocator in mem_area_alloc(), this should
save 32 machine words per index (128 bytes on 32-bit systems and 256
bytes on 64-bit systems).  (Bug #20877)

struct dict_tree_struct, dict_tree_t: Remove.

struct dict_index_struct: Add page and lock.

dict_tree_create(): Remove.  Replace the invocation with
assignment to index->page and a call to rw_lock_create(&index->lock).

dict_tree_free(): Remove.  Replace the invocation wtih
a call to rw_lock_free(&index->lock).

dict_index_get_tree(): Remove.

dict_tree_get_space_reserve(): Rename to dict_index_get_space_reserve()
and remove the parameter, which was unused.

btr_level_list_remove(): Remove the unused parameter "tree".

Replace the occurrences of "tree" with "index" in names of variables,
functions and data types, e.g. "dict_tree_t tree" becomes
"dict_index_t index".  Remove local variables "tree" or "index" of
functions that needed both "tree" and "index".
2006-09-15 11:04:01 +00:00
osku
b00733ad90 Make dict_index_find_cols() always succeed. 2006-09-15 07:37:10 +00:00
osku
a65244ad75 The code base was reindented in r763 and automatic .emacs indentation
settings introduced. Some problems were found, so from this commit on one
additional indentation rule is introduced:

 (add-to-list 'c-offsets-alist '(arglist-intro . +))

Note that fixing some of the unfortunate line-splits done in r764 will be
done in a future change.
2006-09-15 07:32:15 +00:00
sunny
4bbef222f6 row_search_for_mysql(): Skip setting the next-key lock on an already
delete-marked record in a clustered index where the search criteria is 
unique, within the same transaction (Bug #13544).
2006-09-15 06:09:20 +00:00
marko
0bedf4d9b4 Reduce the size of btr_search_t from 13 machine words to 7. This
structure is reserved for every index in the data dictionary cache.
(Bug #20877)

We could shrink the structure further to three 32-bit words or two
64-bit words by turning the remaining fields to bit-fields.
Unfortunately, the fields are not protected by any mutex, and thus we
would better keep each field aligned to a machine word.

btr_search_t, buf_block_t: Rename "ulint side" to "ibool left_side".
Remove BTR_SEARCH_LEFT_SIDE and BTR_SEARCH_RIGHT_SIDE, and also rename
some local variables and function parameters from "ulint side" to
"ibool left_side".

btr_search_t: Remove the unused fields last_search, n_direction, direction,
and modify_clock.  Remove the unused constants BTR_SEA_NO_DIRECTION,
BTR_SEA_LEFT, BTR_SEA_RIGHT, and BTR_SEA_SAME_REC.

btr_search_t: Remove magic_n unless #defined UNIV_DEBUG.  Turn an assertion
about the magic number into a debug assertion.
2006-09-14 20:42:46 +00:00
marko
adcb90a013 Minor cleanup related to Bug #20877.
btr_print_recursive(): Replace tree->tree_indexes with tree->index.
This should have been done in r453.

univ.i: Add UNIV_BTR_PRINT.

rw_lock_t: Reduce writer_is_wait_ex to a bit and move it close to
other bitfields.  Change the types to unsigned, in case ulint or ibool
bitfields will not work.
2006-09-14 20:37:15 +00:00
marko
5df36be646 Turn ha_innobase::build_template() from a non-static member function
to a static plain function.
2006-09-14 13:10:46 +00:00
marko
b6540f6b72 dict_table_t: Rename the integer field max_row_size
to the Boolean field big_rows.  (Bug #20877)

BIG_ROW_SIZE: Move the definition from row0sel.c to dict_table_add_to_cache().
2006-09-14 12:06:43 +00:00
marko
9ac21cdea4 Remove dict_col_t::clust_pos.
dict_col_get_clust_pos(): Add parameter clust_index.  Replace the
look-up with a linear search of all columns in the clustered index.

row_upd_index_replace_new_col_vals(): Compute clust_index outside
the loops.  Compute clust_pos outside the inner loop.

row_upd_changes_ord_field_binary(), row_upd_changes_first_fields_binary():
Compute clust_index outside the loops.  Declare the auxiliary variables
inside the loop scope.
2006-09-14 11:51:34 +00:00
marko
4a1c7668d2 dict_col_t: Reduce ord_part to one bit.
dict_index_add_to_cache(): Instead of incrementing ord_part, set it.

dict_index_remove_from_cache(): Do not touch ord_part.

dtype_t: Reduce mbminlen from 3 to 2 bits.

row_upd(): Add a UNIV_LIKELY hint around node->in_mysql_interface.
2006-09-14 11:49:09 +00:00
marko
e50acec9be Remove dict_col_t::hash, dict_col_t::table,
dict_sys->col_hash, and DICT_POOL_PER_COL_HASH.  (Bug #20877)

The col->table pointer was only needed for maintaining a hash table of
all defined columns in all tables.  The hash table was only looked up
in dict_index_find_cols().  Removing the col->hash and col->table
pointers reduces the size of a table column by two machine words
(usually 8 or 16 bytes).

dict_col_add_to_cache(), dict_col_reposition_in_cache(),
dict_col_remove_from_cache(): Remove.  These only updated dict_sys->col_hash.

dict_index_find_cols(): Use a linear search instead of the hash table.
The time complexity is affected, but this function is only invoked by
dict_index_add_to_cache(), and we only search the columns of a single
table (typically at most a few dozen) as opposed to all columns of all
tables.
2006-09-14 11:46:47 +00:00
osku
18df0db041 btr0pcur.h: Change FIXME to TODO. 2006-09-14 09:19:41 +00:00
osku
8b68f259d9 Remove more remnants of mixed indexes. 2006-09-14 09:07:54 +00:00
marko
70b2db6a4e dict_index_t: Remove tree_indexes. It should have been removed in r453
when the list in dict_tree_t was replaced with the pointer tree_index.
2006-09-13 18:41:13 +00:00
marko
e9d8c5e88a mysql_declare_plugin(innobase): Initialize the fields
reserved1 (apparently the system variables) and
reserved2 (apparently the configuration options).
2006-09-13 11:35:34 +00:00
marko
0245fe4a31 Reduce the size of the data dictionary cache. (Bug #20877)
dtype_t: Remove unused field "prec", which was supposed to be used for
the precision of decimal columns in stand-alone InnoDB.

dtype_get_prec(): Remove.

dtype_set(), dict_mem_table_add_col(): Remove parameter "prec".

dtype_t: Turn all fields (mtype, prtype, len, mbminlen, mbmaxlen, len)
into bit-fields.

dict_table_t, dict_index_t, dict_tree_t: Omit magic_n from non-debug builds.

dict_col_t: Turn ind, clust_pos, and ord_part into bit-fields.

Replace the default clust_pos value ULINT_UNDEFINED with
REC_MAX_N_FIELDS and replace all references to clust_pos with calls to
the accessor function dict_col_get_clust_pos().

dict_field_t: Turn prefix_len and fixed_len into bit-fields.

dict_tree_t: Remove pad[64].

dict_table_t: Turn the fields ibd_file_missing, tablespace_discarded,
cached, flags, stat_initialized, and autoinc_inited into bit-fields.
Remove does_not_fit_in_memory from non-debug builds.

dict_index_t: Turn the fields trx_id_offset, n_user_defined_cols,
n_uniq, n_def, n_fields, n_nullable, and cached into bit-fields.

dict_foreign_struct: Turn n_fields and type into bit-fields.

rw_lock_t: Turn cline, last_s_line, and last_x_line into bit-fields.
Omit level unless #defined UNIV_SYNC_DEBUG.

Move REC_MAX_N_FIELDS (and REC_MAX_HEAP_NO and REC_MAX_N_OWNED)
from rem0rec.c to rem0types.h, as they are needed in dict0dict.ic.
dict_col_get_clust_pos(): Map REC_MAX_N_FIELDS to ULINT_UNDEFINED.
2006-09-12 14:06:46 +00:00
marko
db256d897e Merge code cleanup from MySQL AB:
ChangeSet
  2006/09/07 08:23:58-07:00 brian@zim.(none) 
  Moves Innodb handler to the Innodb storage directory.

storage/innobase/handler/ha_innodb.cc
  2006/09/07 08:23:53-07:00 brian@zim.(none) +2 -3
  Adjusted include files, also disabled replication code which was not
  being used.

ChangeSet
  2006/09/07 12:34:12-07:00 brian@zim.(none) 
  Fix for a compile problem in Windows. 

storage/innobase/handler/ha_innodb.cc
  2006/09/07 12:34:10-07:00 brian@zim.(none) +0 -28
  Removed some dead code (Marko approved)
2006-09-11 08:58:43 +00:00
marko
7cf4bf45b9 Move ha_innodb.cc and ha_innodb.h from sql to storage/innobase/handler.
This was submitted by Marko to MySQL AB and merged to the MySQL tree by
Brian Aker in the following two changesets:

ChangeSet
  2006/09/07 08:23:58-07:00 brian@zim.(none) 
  Moves Innodb handler to the Innodb storage directory.

ChangeSet
  2006/09/07 16:17:16-07:00 brian@zim.(none) 
  Warning fixes for Windows, and an include fix for Windows for Innodb.

storage/innobase/CMakeLists.txt
  2006/09/07 16:17:13-07:00 brian@zim.(none) +6 -1
  Fixed includes for Windows
2006-09-11 08:51:46 +00:00
marko
8a1caecc70 On data tuples being updated or inserted (but not searched for),
set type->len to the prefix_len of the index column, if it is a prefix index.
This should prevent bugs similar to Bug #21638 from occurring.

dict_index_copy_types(): Set type->len to prefix_len if prefix_len != 0.

row_build_index_entry(): Set type->len to prefix_len if prefix_len != 0,
also when the column in the tuple is SQL NULL, because the type information
may be used for interpreting other records during btr_page_reorganize().
2006-09-06 09:23:47 +00:00
marko
11a7abc0bd Merge changes to the "innodb_mysql" test from MySQL AB 2006-09-05 19:29:18 +00:00
marko
8ac86bd8fd Merge change from MySQL AB:
ChangeSet
  2006/08/23 15:12:42-07:00 brian@zim.(none) 
  This is a cleanup of warnings that windows is complaining about. 

sql/ha_innodb.cc
  2006/08/23 15:12:39-07:00 brian@zim.(none) +0 -1
  Removed unused variables
2006-09-05 19:25:38 +00:00
marko
0fe7bd013e Merge changes from MySQL AB to the innodb_mysql test files. 2006-09-05 12:18:27 +00:00
marko
63b8ede669 ibuf_entry_build(): Write prefix_len to the insert buffer instead of type->len
when prefix_len is specified.  Otherwise, btr_page_reorganize() during
insert buffer merge would fail on ROW_FORMAT=COMPACT tables.  (Bug #21638)
2006-09-05 11:43:42 +00:00
marko
b6a2a33908 setup.sh: Do not bail out if BUILD/compile-innodb* exist already. 2006-09-04 19:18:52 +00:00
marko
97a199b35a Merge code from MySQL AB:
ChangeSet
  2006/08/25 13:31:15-07:00 brian@zim.(none) 
  Cleanup of unused variables.

sql/ha_innodb.h
  2006/08/25 13:31:11-07:00 brian@zim.(none) +0 -6
  Unused variable
2006-09-04 10:48:23 +00:00
marko
489ada03ec Merge code from MySQL AB:
ChangeSet
  2006/08/22 16:24:12-07:00 brian@zim.(none) 
  This changest:
  Plugins now when compiled or not compiled work correctly with status variables. 
  Status variables from plugins now set their own names (removed bit where plugin name was pre-appended this broke Innodb and Cluster)
  A few Makefile cleanups. 

sql/ha_innodb.cc
  2006/08/22 16:24:08-07:00 brian@zim.(none) +16 -6
  Cleanup to make status variables directly in engine
2006-09-04 10:45:05 +00:00
marko
2570bfa1bd ha_innodb.cc: Adjust the comment related to r784. Apparently it was
changed after review on the MySQL side.
2006-09-04 10:40:43 +00:00
marko
0af6b4a259 Merge a patch from MySQL AB:
ChangeSet@1.2288, 2006-08-29 15:35:05+02:00, guilhem@gbichot3.local +2 -0
  Fix for BUG#20866 "show table status on innodb raises assertion"
  and its duplicate BUG#19057 "Test 'rpl_row_func003' fails on SuSE SLES9 x86".
  It was an assertion failure, only in debug builds, not present
  in released versions (nothing to document).
  It happened when doing SHOW TABLE STATUS on an InnoDB table
  having an auto_increment column, right after creating the table.

  sql/ha_innodb.cc@1.288, 2006-08-29 15:35:02+02:00, guilhem@gbichot3.local +7 -1
    Before a val_() calls on a Field object, if that field was not marked
    for read, we need to mark it. This is explained here:
    ChangeSet 1.2119.601.1 2006/06/04 18:52:22 monty@mysql.com
    quoting the changeset's comment:
    
      - If a handler needs to call Field->val() or Field->store() on columns
        that are not used in the query, one should install a temporary
        all-columns-used map while doing so. For this, we provide the following
        functions:
      
        my_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->read_set);
        field->val();
        dbug_tmp_restore_column_map(table->read_set, old_map);
      
        and similar for the write map:
      
        my_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->write_set);
        field->val();
        dbug_tmp_restore_column_map(table->write_set, old_map);
      
        If this is not done, you will sooner or later hit a DBUG_ASSERT
        in the field store() / val() functions.
        (For not DBUG binaries, the dbug_tmp_restore_column_map() and
        dbug_tmp_restore_column_map() are inline dummy functions and should
        be optimized away be the compiler).
    
    Note that I verified that the bug didn't exist in non-debug builds.
2006-09-01 08:29:44 +00:00
marko
cc69e94438 Revert the hunk on ha_innobase::innobase_read_and_init_auto_inc()
that was accidentally committed in r782.
2006-09-01 08:19:47 +00:00
heikki
085c36edfe Fix bug #21784 of a crash in DROP TABLE with concurrent queries on the table 2006-08-31 19:52:25 +00:00
heikki
9b2777b49c Remove Valgrind warning of Bug #20791 : in new database creation, we read
the doublewrite buffer magic number from uninitialized memory; the code
worked because it was extremely unlikely that the memory would contain the
magic number.
2006-08-31 19:19:22 +00:00
osku
5d2ce495bb Add a warning comment above the place where we set srv_main_thread_op_info
to "waiting for server activity" that mentions that this string should not
be changed.
2006-08-31 11:01:15 +00:00
marko
5abd7f4e89 Remove unused code.
univ.i: Do not #define YYDEBUG, because it is only useful for debugging
the grammar of the Bison-generated InnoDB SQL parser.

row_build(): Remove type==ROW_COPY_ALSO_EXTERNALS, because it is never
passed.
2006-08-31 10:47:31 +00:00
marko
21e8ab69ea compile-innodb, compile-innodb-debug:
Replace max-no-ndb compilation flags with --with-plugin=innobase.
2006-08-31 09:36:45 +00:00
marko
9b91572ffc Adapt the InnoDB build scripts to r772.
setup.sh: Create symbolic links to the build scripts instead of copying them.
2006-08-31 07:26:30 +00:00
marko
71cdd575f7 Merge changes from MySQL AB:
ChangeSet
  2006/08/23 13:59:16-07:00 brian@zim.(none) 
  This patch removes need for a innodb to have its own configure. 

univ.i: Replace ../ib_config.h with config.h.

Makefile.i, Makefile.am: Change directory paths.

configure.in: Delete.

plug.in: New file, included from the top-level configure.in.

setup.sh: Replace configure.in with plug.in.
2006-08-30 20:29:01 +00:00