Commit graph

674 commits

Author SHA1 Message Date
marko
0d6bfcb547 branches/zip: Fix a memory leak in fast index creation.
ha_innobase::add_index(): Add assertions about !trx->sync_cb and
!trx->dict_redo_list.  Remove a bogus comment.  Replace
row_lock_table_for_merge() with row_merge_lock_table().

row_merge_lock_table(): Renamed from row_lock_table_for_merge()
and moved from row0mysql.c to row0merge.c.  Always lock the table in
the mode LOCK_X.  Call que_graph_free() in order not to leak memory.
2007-08-21 12:10:14 +00:00
marko
dd08a134c1 branches/zip: mem_heap_free_heap_top(): Declare the memory
freed with UNIV_MEM_FREE().  Before this change, the memory
freed by mem_heap_empty() was not completely flagged free
in UNIV_DEBUG_VALGRIND builds.  After this change, Valgrind
will hopefully catch all errors caught by UNIV_MEM_DEBUG.
2007-08-21 09:48:33 +00:00
marko
d71b5e6a5d branches/zip: ha_innobase::add_index(): Remove the mem_heap_empty() call.
The index[] array that is allocated from the heap is still live.
2007-08-21 09:42:20 +00:00
marko
2d8aa553da branches/zip: dict_foreign_eval_sql(): Print foreign->id as a table name
(in the database.id format).  This should have been changed in r1570.
2007-08-21 08:34:50 +00:00
marko
2d74f90890 branches/zip: innodb-index.test: Add tests for creating or dropping
FOREIGN KEY constraints.  At the moment, MySQL will rebuild the entire
table and indexes when such constraints are added or removed, even though
the constraints do not affect the storage format of the data.
2007-08-21 06:40:46 +00:00
marko
9d5af49407 branches/zip: row_merge_read(): Call os_file_read_no_error_handling()
instead of os_file_read().  Display some fault diagnostics.
2007-08-20 12:33:27 +00:00
marko
bbe0043055 branches/zip: Preserve FOREIGN KEY constraints when creating a PRIMARY KEY.
innodb-index.test: Add some test cases for FOREIGN KEY constraints.

row_merge_rename_tables(): New function,
adapted from row_rename_table_for_mysql().

ha_innobase::add_index(): Use row_merge_rename_tables().
2007-08-20 11:40:00 +00:00
marko
3cc236235f branches/zip: row_rename_table_for_mysql(): Rely on the diagnostic
printout of dict_table_rename_in_cache().  Correct the comment about
the SQL parser.  This function does not drop any table.
2007-08-20 09:45:27 +00:00
marko
a2565facc8 branches/zip: dict_table_rename_in_cache(): Improve the diagnostic printout
for the error cases.  Avoid copying the old table->name; the string will
remain valid in table->heap.
2007-08-20 09:43:30 +00:00
marko
9ab3abd6ef branches/zip: Refuse fast index creation if newraw or innodb_force_recovery
have been set.

ha_innobase::add_index(), ha_innobase::prepare_drop_index(),
ha_innobase::final_drop_index(): Return HA_ERR_WRONG_COMMAND if
newraw or innodb_force_recovery have been set.
2007-08-20 09:13:26 +00:00
marko
061b72f106 branches/zip: Add const qualifiers to the upd_t* parameters of some functions. 2007-08-20 06:59:22 +00:00
marko
12ed008d04 branches/zip: Use mem_heap_zalloc() when initializing
dict_table_t, dict_index_t, and dict_foreign_t.
2007-08-20 06:58:37 +00:00
marko
d723dbfab5 branches/zip: ha_innobase::write_row(): Remove an unreachable break statement. 2007-08-20 06:54:31 +00:00
marko
e1c3be5e03 branches/zip: Rename mem_heap_calloc() and mem_calloc() to
mem_heap_zalloc() and mem_zalloc(), because calloc() in the C runtime
library takes two size parameters, not one.

mem_heap_zalloc(): Add debug assertions.  Document that the return value
is never NULL.
2007-08-16 13:25:56 +00:00
marko
1bbbcbfef4 branches/zip: Fix bugs in the creation or dropping of the clustered index
(PRIMARY KEY or UNIQUE INDEX on NOT NULL columns).

innodb-index.test: Remove the --replace_regex directives.  Replace correct
values to the "Duplicate entry" messages.  This will cause the test to
fail until we somehow return the duplicate key values to MySQL.
Add test cases for creating or dropping UNIQUE INDEX or PRIMARY KEY.

innobase_copy_index_def(): Allow the function to copy a clustered index
definition to a secondary one (UNIQUE INDEX).

innobase_create_key_def(): Check the NOT NULL flag from the correct
place.  Copy the clustered index if it is a UNIQUE INDEX.

ha_innobase::prepare_drop_index(): Refuse to drop the clustered index.
2007-08-16 13:13:25 +00:00
marko
62295123ee branches/zip: Minor cleanup.
ha_innobase::add_index(), ha_innobase::prepare_drop_index():
Remove the redundant thd_test_options() calls.
The options are tested in check_trx_exists().

ha_innobase::prepare_drop_index(): key cannot be NULL; remove the tests.
Move the condition for checking foreign keys outside of the loop.
Remove the redundant error log printout about foreign key dependency.
2007-08-16 09:19:48 +00:00
marko
31ba41df9f branches/zip: Remove redundant type casts. Change the parameter type
of ut_strcmp() from const void* to const char*.
2007-08-16 09:09:08 +00:00
marko
786188281d branches/zip: dict0mem.h: Minor cleanup.
Remove the unused constant DICT_NOT_READY.
Make dict_index_t::type a bit-field, and move it next to other bit-fields.
Add a const qualifier to dict_index_t::name.
2007-08-16 08:48:29 +00:00
marko
c67c3b90a4 branches/zip: Remove the error code DB_CANNOT_DROP_FOREIGN_INDEX.
It was only set by ha_innobase::prepare_drop_index(), which can return
the appropriate MySQL error code (HA_ERR_DROP_INDEX_FK) directly.

ha_innobase::add_index(): Correct the function comment.

ha_innobase::prepare_drop_index(): Correct the function comment.
Return MySQL error codes directly.

ha_innobase::final_drop_index(): Correct the function comment.
2007-08-15 15:49:58 +00:00
marko
a0f9faf6c6 branches/zip: row_mysql_handle_errors(): Replace the if-else with
switch-case.
2007-08-15 15:35:48 +00:00
marko
6fe4dd01b0 branches/zip: Performance improvement:
row_merge_buf_add(): Add a prefetch instruction to row->fields.
Eliminate a variable from the copying loop, and move the termination
condition to the end of the loop.

row_merge_build_indexes(): Remove the second call to
trx_start_if_not_started().
2007-08-15 11:54:15 +00:00
marko
9be35934d7 branches/zip: Minor cleanup.
trx_t: Change the type of error_info from void* to const dict_index_t*.

trx_get_error_info(): Add const qualifier to trx_t*.  Make this an
inline function.
2007-08-15 06:53:34 +00:00
marko
d7efcf2d28 branches/zip: Fix two mistakes made in r1414
(merging branches/fast-index-creation):

row_truncate_table_for_mysql(), row_drop_table_for_mysql_no_commit():
Let ut_print_name() output to ef instead of stderr.
2007-08-13 17:15:31 +00:00
marko
2c660584ba branches/zip: ha_innobase::add_index(): Do not merely check for a
key name "PRIMARY".  If the table has a generated clustered index,
also check for a UNIQUE INDEX containing no NULL columns.

innobase_create_index_def(): Add the parameter key_primary.

innobase_create_key_def(): Check if the first index is a UNIQUE index
consisting of NOT NULL columns.

Fixing this bug revealed another one: FOREIGN KEY constraints
will be lost when a PRIMARY KEY is created.  This is the reason why
innodb.test will fail.
2007-08-13 16:34:00 +00:00
marko
7279ef6b4d branches/zip: ha_innobase::change_active_index(): Write to the error log
when the index could not be found.
2007-08-13 16:05:23 +00:00
marko
3c680f7c44 branches/zip: Add some const qualifiers to dict_index_t* and dict_table_t*.
innobase_create_key_def(), row_table_got_default_clust_index(),
row_get_mysql_key_number_for_index(): Add a const qualifier.

dict_table_get_first_index(), dict_table_get_next_index(): Define
as a const-preserving macro.  Preserve the old function for UNIV_DEBUG,
but add a const qualifier to the parameter and cast away the constness.
2007-08-13 15:57:28 +00:00
marko
cf2cce5dfd branches/zip: Use mem_calloc and mem_heap_calloc when possible.
row_ext_create(): After a memset() inside UNIV_DEBUG, flag the memory
uninitialized with UNIV_MEM_ALLOC().
2007-08-13 14:07:59 +00:00
marko
635d049d13 branches/zip: row_rename_table_for_mysql(): Change the return type to ulint
and simplify error handling.
2007-08-13 12:46:13 +00:00
marko
b4e60c0544 branches/zip: ha_innobase::add_index(): Remove the unused variable new_unique. 2007-08-13 12:23:21 +00:00
marko
06096043ce branches/zip: ha_innobase::add_index(): Fix an ut_ad() assertion that
was broken in r1685.
2007-08-13 07:37:53 +00:00
marko
56c41b1386 branches/zip: Add changes that accidentally omitted from r1698:
innodb-index.test, innodb-index.result: Add a test for creating
a PRIMARY KEY on a column that contains a NULL value.
2007-08-10 15:53:19 +00:00
marko
99fbb51034 branches/zip: When creating a PRIMARY KEY, flag all its columns NOT NULL.
row_merge_create_temporary_table(): Add the parameter index_defs.

DB_PRIMARY_KEY_IS_NULL: New error code, mapped to ER_PRIMARY_CANT_HAVE_NULL.

row_merge_read_clustered_index(): Replace the parameter "table" with the
two parameters "old_table" and "new_table".  Detect NULL values of columns
that are supposed to be NOT NULL.

row_merge_col_prtype(): New auxiliary function, used by
row_merge_create_temporary_table() to flag NOT NULL any columns
contained in an added PRIMARY KEY.
2007-08-10 15:52:09 +00:00
marko
1d99fcc5c1 branches/zip: Minor cleanup.
innobase_copy_index_field_def(): Remove parameter heap.  The field->name
will not be deallocated before the copied index has been added to the
data dictionary cache.

innobase_copy_index_def(): Add const qualifier to dict_index_t*.
Add an assertion !dict_index_is_clust(index).

ha_innobase::add_index(): Add the missing user_thd parameter to the
convert_error_code_to_mysql() call that was forgotten from r1686.

merge_index_field_struct: Add const qualifier to field_name.

merge_index_def_struct: Add const qualifier to name.

row_merge_build_indexes(): Improve the function comment.

row_merge_drop_table(): Remove bogus assertion ut_a(table->to_be_dropped).
2007-08-10 15:22:47 +00:00
marko
47337b3e2e branches/zip: ha_innobase::add_index(): Convert the error code before
goto err_exit.  The error handling should be rewritten.  Many of the
error messages contain parameters, but this code is only returning
the error number to MySQL.
2007-08-08 14:23:14 +00:00
marko
748fa3d693 branches/zip: innobase_check_index_keys(): return 0 instead of DB_SUCCESS,
as documented.  Do not translate the error code.

This function is still broken; we should probably use my_error() for
reporting errors.
2007-08-08 13:57:04 +00:00
marko
35b5f6f129 branches/zip: convert_error_code_to_mysql(): replace if-else with switch-case 2007-08-08 13:43:44 +00:00
marko
a4bc32b857 branches/zip: Resolve an error number collision in db0err.h.
The code for DB_CANNOT_DROP_FOREIGN_INDEX should have been
renumbered in r1494 (Merge revisions 1402:1493 from trunk).
2007-08-08 13:13:01 +00:00
marko
16c72f9fb5 branches/zip: Add const qualifiers to some dict_table_t* accessor functions. 2007-08-08 09:01:46 +00:00
marko
e011cc2f57 branches/zip: merge_index_field_struct: Remove the unused field col_type. 2007-08-08 08:49:33 +00:00
marko
3e7e12c595 branches/zip: Fix memory management errors in row_merge_buf_t.
row_merge_buf_create_low(): Swap the parameters max_tuples and buf_size,
because the callers had them swapped.  Add debug assertions about
these parameters.

row_merge_buf_empty(): Return the emptied buffer.  In some cases, the
buffer may be relocated.
2007-08-03 11:49:51 +00:00
marko
c157205e38 branches/zip: ha_innobase::add_index(): When creating a clustered index,
do not release and relock the data dictionary during initial preparations.
2007-08-03 11:42:37 +00:00
marko
a691de4bb2 branches/zip: row_undo_dictionary(): For TRX_UNDO_INDEX_CREATE_REC,
the index may be NULL when unfinished transactions are rolled back
after crash recovery.
2007-08-03 10:53:08 +00:00
marko
a5a74334aa branches/zip: trx_sys_init_at_db_start(): Initialize trx_dummy_sess
before calling trx_lists_init_at_db_start().  This was broken in r1594.
2007-08-03 10:17:50 +00:00
marko
1dbd4148e6 branches/zip: Fix errors made in r1672. 2007-08-03 07:35:05 +00:00
marko
a3566c2c2d branches/zip: Add const qualifiers to the functions that read MySQL data.
row_mysql_read_true_varchar(), row_mysql_read_blob_ref(),
row_mysql_store_col_in_innobase_format(),
row_sel_convert_mysql_key_to_innobase(): Add const qualifiers.

row_sel_convert_mysql_key_to_innobase(): Document that the first parameter
is in/out.
2007-08-03 07:09:29 +00:00
marko
11665dc32a branches/zip: Ensure that the dictionary updates are atomic by keeping
the data dictionary locked across the operations.

dict_table_decrement_handle_count(), row_prebuilt_free(): Add the flag
dict_locked, to prevent the acquisition of dict_sys->mutex.

innobase_rename_table(): Rename commit_flag to lock_and_commit,
and do not acquire dict_sys->mutex or flush the log unless the flag is set.
Remove bogus comment about utility threads, because the threads will
be waken up by the upper-level function ha_innobase::rename_table().

ha_innobase::add_index(): After creating a primary key, hold dict_sys->mutex
across all dictionary operations.
2007-08-02 10:55:25 +00:00
marko
fd6f7e4dea branches/zip: row_merge_create_temporary_table(): Correct a bogus ut_ad(). 2007-08-02 09:46:28 +00:00
marko
39c5ae17ce branches/zip: innodb-index.test: Replace numeric error codes with
symbolic ones.
2007-08-01 13:00:16 +00:00
marko
cd73e0c602 branches/zip: Declare schema_table_store_record(), because MySQL strangely
does not declare it unless MYSQL_SERVER is defined.
2007-08-01 11:49:19 +00:00
marko
d662c3c656 branches/zip: Merge 1575:1664 from trunk. 2007-08-01 11:18:43 +00:00