Commit graph

189 commits

Author SHA1 Message Date
calvin
3ce609c736 branches/5.1: Fix bug#35537 - Innodb doesn't increment handler_update
and handler_delete

Add the calls to ha_statistic_increment() in ha_innobase::delete_row()
and ha_innobase::update_row().
2008-04-24 11:32:30 +00:00
calvin
ffce3a3a5e branches/5.1: Fix bug#29507 TRUNCATE shows to many rows effected
In InnoDB, the row count is only a rough estimate used by SQL
optimization. InnoDB is now return row count 0 for TRUNCATE operation.
2008-04-24 11:25:30 +00:00
vasil
14b6a9631a branches/5.1:
Change the fix for Bug#32440 to show bytes instead of kilobytes in
INFORMATION_SCHEMA.TABLES.DATA_FREE.

Suggested by:	Domas Mituzas <domas@mysql.com>
Approved by:	Heikki
2008-04-23 15:08:06 +00:00
marko
94b5f4dc1b branches/5.1: ha_innobase::check_if_incompatible_data(): Check
HA_CREATE_USED_ROW_FORMAT before comparing row_type.  Previously,
the comparison was incorrectly guarded by the presence of an
AUTO_INCREMENT attribute.
2008-03-17 08:23:03 +00:00
vasil
b7986bd8ca branches/5.1:
Merge changes from MySQL AB.
2008-03-11 16:50:50 +00:00
sunny
b657301e96 branches/5.1: Change the InnoDB autoinc type to ulint64. For this added a
new typedef to univ.i (ib_ulonglong). Added checks for overflow and removed
the assertion where it crashed previously, since the type has now changed
to unsigned, it doesn't make sense to check for < 0. Added new tests, to
check for overflow, for the different INT types supported for both
signed and unsigned.

Fixes Bug# 34335
2008-03-05 20:23:39 +00:00
sunny
1e130ba621 branches/5.1: Fix Bug# 34920. We need to use/inherit the passed in autoinc
counter for ALTER TABLE statements too.
2008-03-03 22:50:15 +00:00
vasil
613bcee7ca branches/5.1:
Fix Bug#34053:
* In CREATE TABLE and DROP TABLE check whether the table in question is one
  of the magic innodb_monitor tables and whether the user has enough rights
  to mess with it before doing anything else.
* Implement a mysql-test testcase.

Approved by:	Heikki
2008-02-07 12:02:06 +00:00
vasil
4a71a09282 branches/5.1:
Rename the user visible parameter innodb-use-adaptive-hash-indexes to
innodb-adaptive-hash-index so that it is in sync with MySQL 5.0.

Suggested by:	Heikki
Approved by:	Heikki
2008-02-05 13:29:30 +00:00
vasil
81db7e57d2 branches/5.1:
Fix formatting of the autoinc-lock-mode command line parameter.

Old view (./mysqld --help --verbose):

  --innodb-autoinc-lock-mode=#
                      The AUTOINC lock modes supported by InnoDB:
  0 => Old
                      style AUTOINC locking (for backward compatibility)
  1 =>
                      New style AUTOINC locking
  2 => No AUTOINC locking
                      (unsafe for SBR)

New view:

  --innodb-autoinc-lock-mode=#
                      The AUTOINC lock modes supported by InnoDB:
                      0 => Old style AUTOINC locking (for backward
                      compatibility)
                      1 => New style AUTOINC locking
                      2 => No AUTOINC locking (unsafe for SBR)

Looks like these strings are "automatically" wrapped by MySQL in the
following way:
* newlines (\n) in the string are ignored
* newline separator (\n) is inserted every 57 or so characters.
* lots of white space is appended to each inserted new line.

Approved by:	Heikki
2008-01-16 13:50:51 +00:00
inaam
3fdcdee8fe branches/5.1: bug#33349
Introduce retry/sleep logic as a workaround for a transient bug
where ::open fails for partitioned tables randomly if we are using
one file per table.


Reviewed by: Heikki
2008-01-15 03:22:37 +00:00
vasil
2cc5d98c6f branches/5.1:
Merge r2177 from trunk/:

Fix Bug#29157 "UPDATE, changed rows incorrect":

Return HA_ERR_RECORD_IS_THE_SAME from ha_innobase::update_row() if no
columns were updated.
2007-12-13 14:05:51 +00:00
vasil
203168fee2 branches/5.1:
Merge r2166:2168 from trunk/:

Bug#32440:

Put information about the free space in a tablespace in
INFORMATION_SCHEMA.TABLES.DATA_FREE. This information was previously
available in INFORMATION_SCHEMA.TABLES.TABLE_COMMENT, but MySQL has
removed it from there recently.

The stored value is in kilobytes.

This can be considered as a permanent workaround to
http://bugs.mysql.com/32440. "Workaround" becasue that bug is about the
data missing from TABLE_COMMENT and this is actually not solved.
2007-12-11 14:12:10 +00:00
marko
2883a914f3 convert_error_code_to_mysql(): Do not call thd_mark_transaction_to_rollback()
when thd is NULL.
2007-11-30 12:20:56 +00:00
marko
da72864792 Revert the changes that were reverted in r2144 to get a source tree that
is an exact match of a MySQL BitKeeper tree.

Apply r2116:
------------------------------------------------------------------------
r2116 | vasil | 2007-11-23 19:10:17 +0200 (pe, 23 marras 2007) | 6 lines

Set trx->mysql_query_str to NULL at transaction commit.
It could be a problem if someone looks at it after that because MySQL may
have free()d it then.

Approved by:    Heikki (via IM)
------------------------------------------------------------------------

innodb.test, innodb.result:
Add some tests that were apparently accidentally removed in
ChangeSet@1.2598.2.6  2007-11-06 15:42:58-07:00  tsmith@hindu.god
Apply snapshot innodb-5.1-ss1989

ha_innodb.cc: Add a decorative comment.
2007-11-30 12:02:40 +00:00
marko
5f8a93a6e1 Make our 5.1 tree an exact copy of the MySQL source tree.
Revert r2116:
------------------------------------------------------------------------
r2116 | vasil | 2007-11-23 19:10:17 +0200 (pe, 23 marras 2007) | 6 lines

Set trx->mysql_query_str to NULL at transaction commit.
It could be a problem if someone looks at it after that because MySQL may
have free()d it then.

Approved by:    Heikki (via IM)
------------------------------------------------------------------------

innodb.test, innodb.result:
Remove some tests that were apparently accidentally removed in
ChangeSet@1.2598.2.6  2007-11-06 15:42:58-07:00  tsmith@hindu.god
Apply snapshot innodb-5.1-ss1989

ha_innodb.cc: Remove a decorative comment.

This tree should be an exact match of the following MySQL source tree:

bk://mysql.bkbits.net/mysql-5.1
ROOTKEY=3985cf0cwNRCED_XNSCA7RvkLPer2Q
TIPKEY=47447c7cTrSPx22mH8PXNmurrycaaw

bkf changes | head

ChangeSet@1.2634.1.2, 2007-11-21 19:42:50+01:00, df@pippilotta.erinye.com +1 -0
  Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build
  into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build
  MERGE: 1.1810.3425.2

ChangeSet@1.1810.3425.2, 2007-11-21 19:41:13+01:00, df@pippilotta.erinye.com +1 -0
  add wrong warning to suppression file

ChangeSet@1.2634.1.1, 2007-11-21 19:33:27+01:00, df@pippilotta.erinye.com +1 -0
  Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build
  into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build
  MERGE: 1.1810.3425.1

ChangeSet@1.1810.3425.1, 2007-11-21 18:11:08+01:00, df@pippilotta.erinye.com +1 -0
  ignore readline warnings

ChangeSet@1.2635, 2007-11-21 15:06:38+01:00, mleich@five.local.lan +6 -0
  Merge five.local.lan:/work/merge/mysql-5.0-build-30418
  into  five.local.lan:/work/merge/mysql-5.1-build-31610
  MERGE: 1.1810.3284.72
2007-11-30 11:45:26 +00:00
marko
5330e1515d ha_innobase::get_auto_increment(): Add a comment that was accidentally
removed in r2137, when merging a change from MySQL AB.
2007-11-30 11:41:22 +00:00
marko
d8f1f78e8d Merge a change from MySQL AB:
ChangeSet@1.2598.6.1  2007-11-07 12:59:22-07:00  tsmith@hindu.god

Cast away compiler warning on Windows.

ha_innodb.cc:

Cast away a compiler warning; some functions return ulong or ulint for
errors, and some use int.  Let's hope these all fit in an int.
2007-11-30 09:52:49 +00:00
marko
4cf68d69de Merge a change from MySQL AB:
ChangeSet@1.2528.116.44  2007-09-12 18:16:50-07:00  antony@xiphis.org

Changes for pushbuild test runs and VSC compile warnings

ha_innodb.cc:

resolve a VSC++ typecast compile warning.
2007-11-30 09:44:34 +00:00
marko
d247fe38c3 Merge a change from MySQL AB:
ChangeSet@1.2528.116.43  2007-09-12 13:35:39-07:00  antony@xiphis.org

undo unneccessary change to ha_innodb.cc
remove 'drop database' from new tests.

ha_innodb.cc:

undo unneccessary edits.
2007-11-30 09:43:06 +00:00
marko
52e26fc38d Merge a change from MySQL AB:
ChangeSet@1.2528.116.42  2007-09-08 20:26:12-07:00  antony@xiphis.org

Bug#30919
  "Rows not deleted from innodb partitioned tables if
  --innodb_autoinc_lock_mode=0"

  Due to a previous bugfix which initializes a previously uninitialized
  variable, ha_partition::get_auto_increment() may fail to operate
  correctly when the storage engine reports that it is only reserving
  one value and one or more partitions have a different 'next-value'.
  Currently, only affects Innodb's new-style auto-increment code which
  reserves larger blocks of values and has less inter-thread contention.

ha_innodb.cc:
Bug30919
  Only set *first_value if it is less than autoinc value. This allows
  a higher value to be hinted when operating as a partitioned table.
2007-11-30 09:40:20 +00:00
marko
204964b702 Merge a change from MySQL AB:
ChangeSet@1.2528.116.40  2007-09-08 11:19:35-07:00  acurtis@xiphis.org

Bug#30907
  "Regression: "--innodb_autoinc_lock_mode=0" (off) not same as older releases"
Bug#28430
  "Failure in replication of innodb partitioned tables on row/mixed format"
Bug#30888
  "Innodb table + stored procedure + row deletion = server crash"

  Apply Oracle patch from Sunny
  Include tests cases by Omer
  Ensure that innobase_read_and_init_auto performs table autoinc lock when
  lock_mode = 0
  No need for "if" guard around row_unlock_table_autoinc_for_mysql() because
  it already performs same check.
  Make autoinc_lock_mode variable read-only for duration of running
  mysqld process.

ha_innodb.cc:
Bug30907/28430
  "Regression: "--innodb_autoinc_lock_mode=0" (off) not same as older releases"
  "Failure in replication of innodb partitioned tables on row/mixed format"
  Apply Oracle patch from Sunny
  Ensure that innobase_read_and_init_auto performs table autoinc lock when
  lock_mode = 0
  No need for "if" guard around row_unlock_table_autoinc_for_mysql() because
  it already performs same check.
  Make autoinc_lock_mode variable read-only for duration of running
  mysqld process.
2007-11-30 09:36:27 +00:00
marko
faabd6de9e Merge a change from MySQL AB:
ChangeSet@1.2528.24.43  2007-08-02 02:22:31-06:00  tsmith@hindu.god

Post-merge fix, add InnoDB compatibility hook (defined for
InnoDB only), thd_mark_transaction_to_rollback().
2007-11-30 09:25:46 +00:00
marko
f52b8888e4 convert_search_mode_to_innobase(): Add the missing case label
HA_READ_MBR_EQUAL that was forgotten in r2088.
2007-11-16 13:03:21 +00:00
marko
5b53daeb9d Remove the unused function innobase_convert_from_filename() that was
inadvertently added in r590.
2007-11-16 12:59:33 +00:00
vasil
6c6208ac94 Non-functional change: convert the switch in convert_search_mode_to_innobase()
to the InnoDB coding style.
2007-11-14 13:15:24 +00:00
vasil
eddb125877 Fix Bug#32125 (http://bugs.mysql.com/32125)
"Database crash due to ha_innodb.cc:3896: ulint convert_search_mode_to_innobase":

When unknown find_flag is encountered in convert_search_mode_to_innobase()
do not call assert(0); instead queue a MySQL error using my_error() and
return the error code PAGE_CUR_UNSUPP. Change the functions that call
convert_search_mode_to_innobase() to handle that error code by "canceling"
execution and returning appropriate error code further upstream.

Approved by:	Heikki (via IM)
2007-11-14 12:49:24 +00:00
sunny
2eec90cf46 Remove ut_print_timestamp(), this should have been removed when the following
changes were made by MySQL.

	ChangeSet@1.1810.467.1  2005-08-11 19:19:20+03:00  jani@omakaista.fi

Fix error message so that it conforms to "  InnoDB: Error: ...".
2007-10-25 01:17:40 +00:00
marko
491d106832 Use "InnoDB:" prefix in error messages. 2007-10-24 11:35:23 +00:00
sunny
e501f63f14 Suppress printing of deadlock errors while reading the autoinc value.
DB_DEADLOCK errors are part of normal processing and excessive printing
of these error messages could be disconcerting for users.
2007-10-17 11:44:41 +00:00
sunny
e89155b32f Bug fix: The problem was that when write_row() attempted to update the max
autoinc value, and if it was rolled back because of a deadlock, the 
deadlock error (transaction rollback) was not being propagated back to MySQL.
2007-10-16 11:08:35 +00:00
sunny
1a4b717f6e Prevent loading of tables that have unsupported features most notably
FTS indexes.
2007-10-12 16:40:42 +00:00
marko
b44b2ae51d Merge a change from MySQL AB:
ChangeSet@1.2560  2007-09-21 10:15:16+02:00  gkodinov@local

ha_innodb.cc: fixed type conversion warnings revealed by bug 30639
2007-09-24 11:28:51 +00:00
marko
16566e237c Merge a change from MySQL AB:
ChangeSet@1.2528.115.30  2007-08-28 10:17:15-06:00  tsmith@hindu.god

Fix another compiler warning on Windows in InnoDB.

ha_innodb.cc:

Fix compiler warning: ::get_auto_increment takes a ulonglong
for nb_desired_values, but InnoDB's trx struct stores it as
a ulint (unsigned long).  Probably harmless, as a single
statement won't be asking for more than 2^32 rows.
2007-09-24 11:26:57 +00:00
marko
f0d11fca62 Merge changes from MySQL AB:
ChangeSet@1.2528.115.25  2007-08-27 18:18:14-06:00  tsmith@hindu.god

Fix some Windows compiler warnings.

dict0mem.c: Fix compiler warning with a cast.

ha_innodb.cc: Change type to fix a compiler warning.
2007-09-24 11:23:24 +00:00
vasil
2ee633f8eb Revert r1850 as MySQL did not approve the addition.
log for r1850:

Implement this feature request:
http://bugs.mysql.com/30706

* Add a function that returns the number of microseconds since
  epoch - ut_time_us().

* Add (innodb|innobase|srv)_replication_delay MySQL config parameter.

* Add UT_WAIT_FOR() macro that waits for a specified condition to occur
  until a timeout elapses.

* Using all of the above, handle the replication thread specially in
  srv_conc_enter_innodb().
2007-09-20 14:37:03 +00:00
vasil
8785af49a3 Implement this feature request:
http://bugs.mysql.com/30706

* Add a function that returns the number of microseconds since
  epoch - ut_time_us().

* Add (innodb|innobase|srv)_replication_delay MySQL config parameter.

* Add UT_WAIT_FOR() macro that waits for a specified condition to occur
  until a timeout elapses.

* Using all of the above, handle the replication thread specially in
  srv_conc_enter_innodb().

Approved by:	Heikki
2007-09-17 18:15:44 +00:00
vasil
ac6d4693c0 Add config option innodb_use_adaptive_hash_indexes to enable/disable
adaptive hash indexes. It is enabled by default (no change in default
behavior).

Approved by:	Marko
2007-09-14 08:19:48 +00:00
sunny
18e0aaa3a4 Add /*== ... === */ decoration that was missing around some auto-inc functions.
Add a missing comment, fix the length of a decoration.  Initialize the *value
out parameter in ha_innobase::innobase_get_auto_increment().
2007-09-10 20:26:01 +00:00
sunny
4678dfac36 Add assertion to enforce check of an implicit invariant and add comment about
retry of autoinc read semantics. We always reread the table's autoinc counter
after attempting to initialize it i.e., we want to guarantee that a read of
autoinc valus that is returned to the caller is always covered by the
AUTOINC locking mechanism.
2007-09-09 22:41:42 +00:00
sunny
73fd262210 Fix two bugs:
Bug# 30907: We don't rely on *first_value to be 0 when checking whether
get_auto_increment() has been invoked for the first time in a multi-row
INSERT. We instead use trx_t::n_autoinc_rows. Initialize trx::n_autoinc_rows
inside ha_innobase::start_stmt() too.

Bug# 30888: While adding code for the low level read of the AUTOINC value
from the index, the case for MEDIUM ints which are 3 bytes was missed
triggering an assertion.
2007-09-08 20:40:10 +00:00
marko
520d554ba5 ha_innobase::external_lock(): Update prebuilt->mysql_has_locked and
trx->n_mysql_tables_in_use only after row_lock_table_for_mysql()
returns DB_SUCCESS.  A timeout on LOCK TABLES would lead to an
inconsistent state, which would cause trx_free() to print a warning.

This was later reported as Bug #31444.
2007-09-05 13:02:36 +00:00
marko
b1663422e2 Move the prototype of innobase_print_identifier() from ut0ut.c to
ha_prototypes.h.  Enclose the definitions in ha_prototypes.h in
#ifndef UNIV_HOTBACKUP.
2007-08-31 06:39:46 +00:00
sunny
028c933bb8 We check whether the AUTOINC sub-system has been initialized (first) by
holding the AUTOINC mutex and if initialization is required then we
initialize using our normal procedure. This change is related to Bug#27950.
2007-08-23 03:40:42 +00:00
sunny
d1d15b3e1e Add a table level counter that tracks the number of AUTOINC locks that are
pending and/or granted on a table. We peek at this value to determine whether
a transaction doing a simple INSERT in innodb_autoinc_lock_mode = 1, needs to
acquire the AUTOINC lock or not. This change is related to Bug# 16979.
2007-08-23 03:37:37 +00:00
marko
4ca60264a7 Remove some code from ha_innodb.cc that was already enclosed in #if 0.
The code was related to replication and group commit, and it was
unreachable already as of MySQL 5.0.

Approved by Heikki
2007-08-22 11:36:55 +00:00
sunny
2a9014d545 Add variable "innodb_autoinc_lock_mode" to control the behavior of the
AUTOINC locking. There are three modes, 0 for backward compatibility, 1 for the
new style locking (default, safe for statement-based replication) and
2 for no AUTOINC locking (unsafe for statement-based replication).
2007-08-20 21:48:16 +00:00
marko
487677d01b Merge r1264 from branches/zip: Avoid memory fragmentation when
adding column definitions to tables.

dict_mem_table_add_col(): Add the parameter "heap" for temporary memory
allocation.  Allow it and "name" to be NULL.  These parameters are NULL
when creating dummy indexes.

dict_add_col_name(): Remove calls to ut_malloc() and ut_free().

dict_table_get_col_name(): Allow table->col_names to be NULL.

dict_table_add_system_columns(), dict_table_add_to_cache():
Add the parameter "heap".
---
Additional changes that had to be merged from branches/zip:

dict_table_add_system_columns(): New function, factored out from
dict_table_add_to_cache().

mlog_parse_index(): Add some consistency checks, and make use of
dict_table_add_system_columns().
2007-08-15 12:41:46 +00:00
marko
f3a8c1a641 Replace mysql_byte with uchar and remove the #define mysql_byte from
ha_innodb.cc.  This cleanup was made possible as of r1550:

Merge changes from MySQL AB:

ChangeSet@2007-05-10 12:59:39+03:00, monty@mysql.com 
  WL#3817: Simplify string / memory area types and make things more consistent
  (first part)
  
  The following type conversions was done:
  
  - Changed byte to uchar
...
2007-08-15 12:29:46 +00:00
marko
1646ac7555 check_trx_exists(): Remove a redundant function call and assignment that
was added by someone at MySQL.
2007-07-31 18:46:55 +00:00