Commit graph

938 commits

Author SHA1 Message Date
vasil
a3417d902d branches/zip:
* Change terminology:
  wait lock -> requested lock
  waited lock -> blocking lock
  new: requesting transaction (the trx what owns the requested lock)
  new: blocking transaction (the trx that owns the blocking lock)

* Add transaction ids to INFORMATION_SCHEMA.INNODB_LOCK_WAITS. This is
  somewhat redundant because transaction ids can be found in INNODB_LOCKS
  (which can be joined with INNODB_LOCK_WAITS) but would help users to
  write shorter joins (one table less) in some cases where they want to
  find which transaction is blocking which.

Suggested by:	Ken
Approved by:	Heikki
2007-11-29 13:47:09 +00:00
marko
445924b53a branches/zip: row_ext_create(): Remove unused variables that were added
in r2131.
2007-11-29 12:54:43 +00:00
marko
c15cbd7dcb branches/zip: row_ext_create(): Remove the UNIV_INLINE that should
have been removed in r2131.
2007-11-29 12:52:49 +00:00
marko
ab7b4937cb branches/zip: row_ext: Fetch the BLOB prefixes already at row_ext_create().
Only add indexed BLOBs to row_ext.

trx_undo_rec_get_partial_row(): Move the BLOB fetching to row_ext_create().

row_build(): Pass only those BLOBs to row_ext_create() that are referenced by
ordering columns of some indexes, similar to trx_undo_rec_get_partial_row().

row_ext_create(): Add the parameter "tuple".  Move the implementation
from row0ext.ic to row0ext.c.

row_ext_lookup_ith(), row_ext_lookup(): Return a const pointer.  Remove
the parameters "field" and "f_len".  Make the row_ext_t* parameter const.

row_ext_t: Remove the field zip_size.

field_ref_zero[]: Declare in btr0types.h instead of btr0cur.h.

row_ext_lookup_low(): Rename to row_ext_cache_fill() and change the
signature.
2007-11-29 12:47:18 +00:00
marko
a5bd2496ac branches/zip: Clean up after r2129:
univ.i: Do not define UNIV_DEBUG, UNIV_ZIP_DEBUG.

btr_cur_del_unmark_for_ibuf(): Use the same comment in both btr0cur.c and
btr0cur.h.  Wrap long lines.
2007-11-29 12:36:53 +00:00
sunny
5cab01e91c branches/zip: Fix a bug where the zipped page and the uncompressed page
contents end up with conflicting versions of a record's state. The zipped
page record was not being marked as "(un)deleted" because we were not
passing the zipped page contents to the (un)delete function, which first
(un)delete marks the uncompressed version and then based on whether
page_zip is NULL or not (un)delete marks the record in the compressed page.
2007-11-29 12:23:48 +00:00
marko
d5c04aae8e branches/zip: ha_innobase::final_drop_index(): Allocate a separate transaction
for dropping the index trees, and set the dictionary operation flag, similar
to what ha_innobase::add_index() does.  This should ensure correct crash
recovery.
2007-11-29 10:34:55 +00:00
marko
27f7818005 branches/zip: trx_undo_rec_get_partial_row(): Set up the row_ext cache
only for those externally stored columns that occur in the ordering columns
of indexes.  Prefetch the prefixes of those columns, because the clustered
index record and the BLOBs may have been deleted by the time when the
purge thread needs to read the BLOB prefixes.

row_ext_create(): Add the debug assertion ut_ad(ut_is_2pow(zip_size)).
2007-11-29 10:07:47 +00:00
marko
0eb1f4f6ba branches/zip: Remove the warnings about pointer targets differing
in signedness that were introduced in r2114.

row_upd_index_replace_new_col_vals_index_pos(),
row_upd_index_replace_new_col_vals(): Declare "data" as const byte*
instead of const char*, and add casts to the dtype_get_at_most_n_mbchars()
calls.
2007-11-29 09:04:42 +00:00
marko
7a1d5d91b7 branches/zip: Fix a bug that was introduced in r2123.
buf_block_is_uncompressed(): Check that the pointer is aligned.  Use the
C modulus operator % instead of ut_align_offset(), because sizeof(buf_block_t)
is not guaranteed to be a power of 2.
2007-11-28 13:45:22 +00:00
marko
0ef4026b1d branches/zip: row_vers_impl_x_locked_off_kernel(): In follow-up to r2119,
assert ut_a(entry) instead of playing it safe.
2007-11-28 13:09:50 +00:00
marko
f6a5cc1d47 branches/zip: buf_page_get_gen(): Note that the guessed block may also
point to a buffer pool chunk that has been released when resizing the
buffer pool.

buf_block_is_uncompressed(): Check that the pointer is aligned.  Thanks
to this check, it is safe to pass an arbitrary pointer as a guess
to buf_page_get_gen().
2007-11-28 11:31:12 +00:00
marko
247d1449d1 branches/zip: Minor cleanup.
buf_page_get_release_on_io(): Removed this unused function.

ibuf_build_entry_from_ibuf_rec(): Justify why it is not necessary to
add system columns to the dummy table pointed to by the dummy secondary index.

page_zip_rec_set_deleted(): Add a page_zip_validate() assertion.
2007-11-28 11:22:25 +00:00
vasil
69a8cc07a9 branches/zip:
Add the transaction's weight to information_schema.innodb_trx table.

Suggested by:	Ken
Approved by:	Heikki
2007-11-28 07:07:23 +00:00
marko
95f1b15a5f branches/zip: lock_sec_rec_some_has_impl_off_kernel(): Make the function
static.  It is only called from lock0lock.c.
2007-11-27 09:20:40 +00:00
marko
ab8f5e79ad branches/zip: In purge, avoid dereferencing unset BLOB pointers of freshly
inserted, uncommitted clustered index records when determining if a
secondary index record that contains a column prefix of an externally
stored column is referencing the clustered index record.

field_ref_zero[]: A BLOB pointer full of zero, for use in comparisons.

btr_copy_externally_stored_field_prefix(): Assert that the BLOB pointer is set.

row_ext_lookup_ith(), row_ext_lookup(), row_ext_lookup_low(): Document
that field_ref_zero is returned when the BLOB cannot be fetched.

row_ext_lookup_low(): Return field_ref_zero and *len = 0 when the
BLOB pointer is unset.

row_build_index_entry(): Return NULL when a needed BLOB pointer cannot
be dereferenced (row_ext_lookup returns field_ref_zero).  Check the
return value for NULL in callers.

row_vers_impl_x_locked_off_kernel(): Avoid comparisons when
row_build_index_entry() returns NULL.

row_vers_old_has_index_entry(): Ignore records for which
row_build_index_entry() returns NULL.  The entry should never be NULL
in rollback, but it may be NULL in purge.

row_merge_buf_add(): Assert that row_ext_lookup() does not return
field_ref_zero.  The table will be locked during index creation.
2007-11-27 09:11:45 +00:00
marko
d08281b601 branches/zip: btr_cur_pessimistic_insert(): When calling
btr_cur_optimistic_insert(), pass big_rec to it, so that
the field references of externally stored columns (BLOB pointers)
will not be left uninitialized after a successful optimistic insert.
This bug was spotted by Sunny.
2007-11-27 07:57:03 +00:00
vasil
7750d0e8d5 branches/zip: Merge 2093:2116 from trunk. 2007-11-23 17:12:35 +00:00
marko
855ccbd407 branches/zip: Correct mistakes made in r2114.
row_upd_index_replace_new_col_vals(): Declare fetch_ext.

row_upd_index_replace_new_col_vals_index_pos(): Add a type conversion
to the initialization expression of fetch_ext, to avoid a warning about
comparison between signed and unsigned.
2007-11-23 12:51:29 +00:00
marko
a7135ea369 branches/zip: Fix a bug in the updates of index records that contain a
column prefix of an externally stored column.

row_upd_ext_fetch(): New function.

row_upd_index_replace_new_col_vals(),
row_upd_index_replace_new_col_vals_index_pos(): Fetch prefixes of
externally stored columns when they are needed for column prefix
indexes.  For memory allocation, add the parameter ext_heap.  Avoid
repeating the inner loop after finding a  matching upd_field->field_no.
2007-11-23 12:40:19 +00:00
marko
2080273eac branches/zip: row_ext_create(), row_ext_lookup(): Clarify that the
column numbers are relative to the InnoDB table object, or numbers
returned by dict_col_get_no().  This will have to be ensured in
all calling code.
2007-11-22 14:09:19 +00:00
marko
1fef36acae branches/zip: dict_col_get_clust_pos(): Split a debug assertion, and
make use of dict_index_is_clust().
2007-11-22 10:29:02 +00:00
marko
3882df89fe branches/zip: row_ext_create(), row_ext_lookup(): Clarify that the column
numbers are relative to the clustered index record.
2007-11-22 10:22:44 +00:00
marko
dd69101354 branches/zip: btr_store_big_rec_extern_fields(),
btr_free_externally_stored_field(): Add some page type assertions
that were suggested by Sunny.
2007-11-22 10:02:50 +00:00
vasil
860bc11276 branches/zip:
Fix the size of the static buffer for lock_table and lock_index.
I was not realizing that NAME_LEN contains the mbmaxlen multiplier and thus
a quote, when converted to 2 quotes, will take 2 bytes while there are 3
bytes reserved.

Spotted by:	Marko
Pointyhat to:	Vasil
2007-11-21 17:15:27 +00:00
vasil
193d01e327 branches/zip:
Add C test for innobase_convert_name() in addition to the mysql-test one.
2007-11-21 17:02:46 +00:00
marko
a05f34d3fe branches/zip: When writing an externally stored column to the undo log,
set the "external storage" flag.  When parsing the undo log, do not
misinterpret a SQL NULL column for externally stored.

These bugs were spotted by Heikki and Sunny.

trx_undo_page_report_modify(): Set the UNIV_EXTERN_STORAGE_FIELD flag
when needed.

trx_undo_rec_get_partial_row(): Check for len == UNIV_SQL_NULL.
2007-11-21 13:08:15 +00:00
vasil
28383dde67 branches/zip:
Fix a bug where the static buffer for innodb_locks.lock_table may not
have enough space.

Pointyhat to:	Marko
2007-11-21 12:11:04 +00:00
vasil
84979e4341 branches/zip:
Bugfix1: Set innodb_locks.lock_index to NOT NULL.
If a column in INFORMATION_SCHEMA table has the flag
MY_I_S_MAYBE_NULL and it is not explicitly marked as NOT NULL
with the method ::set_notnull() then it is always rendered as
NULL by MySQL.

Bugfix2: Avoid crashes if lock_index is NULL. It is NULL for table
level locks.

Pointyhat to:	Marko
2007-11-21 12:01:36 +00:00
vasil
f268295c2b branches/zip:
Non-functional change:
Fix consistency of the sizeof() operator with the rest of i_s.cc

Pointyhat to:	Marko
2007-11-21 11:44:36 +00:00
vasil
2140d5956a branches/zip:
Move test that depends on ucs2 to a separate file that is disabled if
ucs2 is not compiled in.
2007-11-21 11:23:05 +00:00
vasil
a5f81a6054 branches/zip:
Move common SQL commands to an .inc file.
2007-11-21 10:47:08 +00:00
vasil
f5ff7acb2e branches/zip:
Synchronize the utf8 and ucs2 tests.
2007-11-21 10:18:22 +00:00
marko
afccd4afd2 branches/zip: INFORMATION_SCHEMA.INNODB_LOCKS: Quote lock_table, lock_index.
innodb_information_schema.test. Add tests that display most columns from
INFORMATION_SCHEMA.INNODB_LOCKS.  Test that quoting of table names works
and respects SQL_MODE='ANSI_QUOTES'.

innobase_print_identifier(): Remove.

innobase_convert_identifier(): New function,
based on innobase_print_identifier().

innobase_convert_name(): New function, similar to ut_print_namel(), but
using a memory buffer.

ut_print_namel(): Use innobase_convert_name().

fill_innodb_locks_from_cache(): Convert lock_table and lock_index by
calling innobase_convert_name().
2007-11-21 08:46:11 +00:00
marko
3e2b5b654e branches/zip: ut_fold_binary(): Adjust a bogus debug assertion. 2007-11-21 08:00:14 +00:00
vasil
bda6490d67 branches/zip:
Convert INFORMATION_SCHEMA tables' names to upper case so that they are
consistent with other INFORMATION_SCHEMA tables.

 mysql> show tables;
 +---------------------------------------+
 | Tables_in_information_schema          |
 +---------------------------------------+
 | CHARACTER_SETS                        | 
 | COLLATIONS                            | 
 | COLLATION_CHARACTER_SET_APPLICABILITY | 
 | COLUMNS                               | 
 | COLUMN_PRIVILEGES                     | 
 | ENGINES                               | 
 | EVENTS                                | 
 | FILES                                 | 
 | GLOBAL_STATUS                         | 
 | GLOBAL_VARIABLES                      | 
 | KEY_COLUMN_USAGE                      | 
 | PARTITIONS                            | 
 | PLUGINS                               | 
 | PROCESSLIST                           | 
 | REFERENTIAL_CONSTRAINTS               | 
 | ROUTINES                              | 
 | SCHEMATA                              | 
 | SCHEMA_PRIVILEGES                     | 
 | SESSION_STATUS                        | 
 | SESSION_VARIABLES                     | 
 | STATISTICS                            | 
 | TABLES                                | 
 | TABLE_CONSTRAINTS                     | 
 | TABLE_PRIVILEGES                      | 
 | TRIGGERS                              | 
 | USER_PRIVILEGES                       | 
 | VIEWS                                 | 
 | innodb_zip_reset                      | 
 | innodb_trx                            | 
 | innodb_locks                          | 
 | innodb_lock_waits                     | 
 | innodb_zip                            | 
 +---------------------------------------+
2007-11-21 07:38:56 +00:00
marko
1656f17211 branches/zip: trx_undo_rec_get_partial_row(): When reading an externally
stored column, subtract UNIV_EXTERN_STORAGE_FIELD from the length of
the field.
2007-11-16 15:50:36 +00:00
marko
a7344bc8e1 branches/zip: Merge 2015:2093 from trunk. 2007-11-16 13:57:27 +00:00
vasil
f72d0e66d8 branches/zip:
Implement a limit on the memory used by the INNODB_TRX, INNODB_LOCKS and
INNODB_LOCK_WAITS tables. The maximum allowed memory is defined with the
macro TRX_I_S_MEM_LIMIT.

Approved by:	Marko (via IM)
2007-11-16 13:12:13 +00:00
marko
e63bbb3fa0 branches/zip: Introduce the function page_zip_fail_func() and
the wrapper macro page_zip_fail() for displaying error messages.
When the error output is enabled (at compile-time), a breakpoint
may be set in page_zip_fail_func to easily debug all decompression
errors in the context where they occur.
2007-11-15 10:56:34 +00:00
vasil
83e20f9030 branches/zip:
Remove unnecessary code. Environment variables are passed to children anyway,
no need to export them.

Approved by:	Sunny (via IM)
2007-11-13 09:31:54 +00:00
vasil
669ec871c4 branches/zip:
Fix typos in comment.
2007-11-13 07:41:34 +00:00
sunny
2d366a4520 branches/zip: Minor fix, remove the constant, calculate the length of
string dynamically.
2007-11-12 23:40:36 +00:00
sunny
be9e4416c2 branches/zip: Change directory to one level up if export.sh script run from
within the scripts/ directory, so that the relative paths work. This change
was required because the script was moved from the top-level directory to
its sub-directory scripts/.
2007-11-12 23:28:59 +00:00
sunny
cd0161863e branches/zip: Add plugin build scripts, move export.sh to the scripts/ directory 2007-11-12 23:19:06 +00:00
marko
c6cc947efe branches/zip: btr_cur_pessimistic_insert(): For clarity,
use return(DB_...) instead of assigning err = DB_... when possible.
2007-11-09 15:38:48 +00:00
marko
6a8a9ea8ad branches/zip: Undo r2079 and fix the cause of uninitialized data bytes
in page_zip_decompress().

page_zip_decompress_clust(), page_zip_decompress_clust_ext(): Zero-fill
the columns DB_TRX_ID and DB_ROLL_PTR on the uncompressed page.
2007-11-09 15:32:37 +00:00
marko
c908c4e1db branches/zip: page_zip_decompress(): Note that the uncompressed page
may contain uninitialized bytes when the space of a deleted record
is reused by a shorter record.
2007-11-09 12:09:29 +00:00
marko
fa98a47052 branches/zip: Remove __attribute__((warn_unused_result)), because it does
not work in GCC 3.3.  It was useful during the development of zip compression,
when some placeholder code ignored the return values of some functions.
2007-11-09 09:41:21 +00:00
vasil
bae2063ac0 branches/zip:
Add the query in information_schema.innodb_trx.trx_query. Add it even
though it is available in information_schema.processlist.info to make
inconsistencies between those two tables obvious.

It is rather confusting to see a transaction shown in innodb_trx and
innodb_locks that holds a lock on one table and the corresponding query
in processlist executing INSERT on another table. We do not want users
to contact us asking to explain that. It is caused by the fact that the
data for innodb_* tables and processlist is fetched at different time.

Approved by:	Marko
2007-11-07 20:38:07 +00:00