Commit graph

219 commits

Author SHA1 Message Date
sunny
2016ae3262 branches/5.1: Fix Bug#42714 AUTO_INCREMENT errors in 5.1.31. There are two
changes to the autoinc handling.

1. To fix the immediate problem from the bug report, we must ensure that the
   value written to the table is always less than the max value stored in
   dict_table_t.

2. The second related change is that according to MySQL documentation when
   the offset is greater than the increment, we should ignore the offset.
2009-02-25 03:32:01 +00:00
calvin
2560a78eeb branches/5.1: minor non-functional changes. 2009-02-11 23:34:27 +00:00
sunny
5f580c47f8 branches/5.1: Add the ULL suffix otherwise there is an overflow. 2009-02-03 20:06:52 +00:00
sunny
64076dc477 branches/5.1: In the last round of AUTOINC cleanup we assumed that AUTOINC
is only defined for integer columns. This caused an assertion failure when
we checked for the maximum value of a column type. We now calculate the
max value for floating-point autoinc columns too.

Fix Bug#42400 - InnoDB autoinc code can't handle floating-point columns
rb://84 and Mantis issue://162
2009-01-29 14:01:36 +00:00
vasil
3f5355a0e1 branches/5.1:
Merge a change from MySQL:

  ------------------------------------------------------------
  revno: 2646.161.4
  committer: Tatiana A. Nurnberg <azundris@mysql.com>
  branch nick: 51-31177v2
  timestamp: Mon 2009-01-12 06:32:49 +0100
  message:
    Bug#31177: Server variables can't be set to their current values
    
    Bounds-checks and blocksize corrections were applied to user-input,
    but constants in the server were trusted implicitly. If these values
    did not actually meet the requirements, the user could not set change
    a variable, then set it back to the (wonky) factory default or maximum
    by explicitly specifying it (SET <var>=<value> vs SET <var>=DEFAULT).
    
    Now checks also apply to the server's presets. Wonky values and maxima
    get corrected at startup. Consequently all non-offsetted values the user
    sees are valid, and users can set the variable to that exact value if
    they so desire.
2009-01-26 15:26:25 +00:00
marko
d32440100b branches/5.1: Make
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
a true replacement of SET GLOBAL INNODB_LOCKS_UNSAFE_FOR_BINLOG=1.
This fixes an error that was introduced in r370, causing
semi-consistent read not to not unlock rows in READ COMMITTED mode.
(Bug #41671, Issue #146)

rb://67 approved by Heikki Tuuri
2008-12-22 14:05:19 +00:00
marko
7f5f09d63a branches/5.1: When converting a record to MySQL format, copy the default
column values for columns that are SQL NULL.  This addresses failures in
row-based replication (Bug #39648).

row_prebuilt_t: Add default_rec, for the default values of the columns in
MySQL format.

row_sel_store_mysql_rec(): Use prebuilt->default_rec instead of
padding columns.

rb://64 approved by Heikki Tuuri
2008-12-18 13:33:36 +00:00
inaam
9b4f5f6f9f branches/5.1:
Fix Bug#40760 "set global innodb_thread_concurrency = 0;" is not safe

The config param innodb_thread_concurrency is dynamically set and is
read when a thread enters/exits innodb. If the value is changed between
the enter and exit time the behaviour becomes erratic.
The fix is not to use srv_thread_concurrency when exiting, instead use
the flag trx->declared_to_be_inside_innodb.

rb://57

Approved by: Marko
2008-11-24 20:06:50 +00:00
calvin
fff52da321 branches/5.1: fix bug#40386: Not flushing query cache after truncate
ha_statistics.records can not be 0 unless the table is empty, set to
1 instead. The original problem of bug#29507 is fixed in the server.

Additional test was done with the fix of bug#29507 in the server.

Approved by: Heikki (on IM)
2008-11-14 18:31:48 +00:00
vasil
fd5bac6715 branches/5.1:
Fix Bug#38189 innodb_stats_on_metadata missing

Make the variable innodb_stats_on_metadata visible to the users and
also settable at runtime. Previously it was only "visible" as a command
line startup option to mysqld.

Approved by:	Marko (https://svn.innodb.com/rb/r/36)
2008-10-28 10:10:25 +00:00
sunny
4ef075b54b branches/5.1: Backport changes from branches/zip r2725
Simplify the autoinc initialization code. This removes the
non-determinism related to reading the table's autoinc value for the first
time. This change has also reduced the sizeof dict_table_t by sizeof(ibool)
bytes because we don't need the dict_table_t::autoinc_inited field anymore.

Bug#39830 Table autoinc value not updated on first insert.
Bug#35498 Cannot get table test/table1 auto-inccounter value in ::info
Bug#36411 Failed to read auto-increment value from storage engine" in 5.1.24 auto-inc
rb://16
2008-10-23 04:30:32 +00:00
sunny
a37b1be6df branches/5.1: Backport r2724 from branches/zip
Check column value against the col max value before updating the table's
global autoinc counter value. This is part of simplifying the AUTOINC
sub-system. We extract the type info from MySQL data structures at runtime.

This fixes Bug#37788 InnoDB Plugin: AUTO_INCREMENT wrong for compressed tables
2008-10-22 21:42:24 +00:00
sunny
2e84d822af branches/5.1: Return the actual error code encountered when allocating
a new autoinc value. The change in behavior (bug) was introduced in 5.1.22
when we introduced the new AUTOINC locking model.

rb://31

Bug#40224 New AUTOINC changes mask reporting of deadlock/timeout errors
2008-10-22 08:01:18 +00:00
vasil
06683f69d4 branches/5.1:
In ha_innobase::info():

Replace sql_print_warning() which prints to mysqld error log with
push_warning_printf() which sends the error message to the client.

Suggested by:	Marko, Sunny, Michael
Objected by:	Inaam
2008-10-21 06:08:30 +00:00
vasil
efadb7ce97 branches/5.1:
Non-functional change: use a single tab instead of 12 spaces between
variable type and variable name.
2008-10-20 10:09:01 +00:00
marko
60bc29b7c4 branches/5.1: ha_innobase::delete_all_rows(): In response to a user asking
<http://forums.innodb.com/read.php?4,215,215> why DELETE FROM t is not
mapped to TRUNCATE TABLE t as it is in MyISAM, note in a comment that
DELETE is transactional while TRUNCATE is not.
2008-10-09 06:53:09 +00:00
sunny
5ad03895b3 branches/5.1: This bug has always existed but was masked by other errors. The
fix for bug# 38839 triggered this bug. When the offset and increment are > 1
we need to calculate the next value taking into consideration the two
variables. Previously we simply assumed they were 1 particularly offset was
never used. MySQL does its own calculation and that's probably why it seemed
to work in the past. We would return what we thought was the correct next
value and then MySQL would recalculate the actual value from that and return
it to the caller (e.g., handler::write_row()). Several new tests have been
added that try and catch some edge cases. The tests exposed a wrap around
error in MySQL next value calculation which was filed as bug#39828. The tests
will need to be updated once MySQL fix that bug.

One good side effect of this fix is that dict_table_t size has been
reduced by 8 bytes because we have moved the autoinc_increment field to
the row_prebuilt_t structure. See review-board for a detailed discussion.

rb://3
2008-10-03 22:48:04 +00:00
sunny
717ad60f18 branches/5.1: We need to send the messages to the client because
handler::get_auto_increment() doesn't allow a way to return the
specific error for why it failed.

rb://18
2008-10-03 22:08:23 +00:00
vasil
78e5879137 branches/5.1:
Print a warning if an attempt is made to get the free space for a table
whose .ibd file is missing or the tablespace has been discarded. This is a
followup to r2719.

Suggested by:	Inaam
2008-10-03 15:52:39 +00:00
vasil
859c2873fc branches/5.1:
Fix Bug#39438 Testcase for Bug#39436 crashes on 5.1 in fil_space_get_latch

In ha_innobase::info() - do not try to get the free space for a tablespace
which has been discarded with ALTER TABLE ... DISCARD TABLESPACE or if the
.ibd file is missing for some other reason.

ibd_file_missing and tablespace_discarded are manipulated only in
row_discard_tablespace_for_mysql() and in row_import_tablespace_for_mysql()
and the manipulation is protected/surrounded by
row_mysql_lock_data_dictionary()/row_mysql_unlock_data_dictionary() thus we
do the same in ha_innobase::info() when checking the values of those members
to avoid race conditions. I have tested the code-path with UNIV_DEBUG and
UNIV_SYNC_DEBUG.

Looks like it is not possible to avoid mysqld printing warnings in the
mysql-test case and thus this test innodb_bug39438 must be added to the
list of exceptional test cases that are allowed to print warnings. For this,
the following patch must be applied to the mysql source tree:

  --- cut ---
  === modified file 'mysql-test/lib/mtr_report.pl'
  --- mysql-test/lib/mtr_report.pl	2008-08-12 10:26:23 +0000
  +++ mysql-test/lib/mtr_report.pl	2008-10-01 11:57:41 +0000
  @@ -412,7 +412,10 @@
   
                   # When trying to set lower_case_table_names = 2
                   # on a case sensitive file system. Bug#37402.
  -                /lower_case_table_names was set to 2, even though your the file system '.*' is case sensitive.  Now setting lower_case_table_names to 0 to avoid future problems./
  +                /lower_case_table_names was set to 2, even though your the file system '.*' is case sensitive.  Now setting lower_case_table_names to 0 to avoid future problems./ or
  +
  +                # this test is expected to print warnings
  +                ($testname eq 'main.innodb_bug39438')
   		)
               {
                 next;                       # Skip these lines
  
  --- cut ---

The mysql-test is currently somewhat disabled (see inside
innodb_bug39438.test), after the above patch has been applied to the mysql
source tree, the test can be enabled.

rb://20

Reviewed by:	Inaam, Calvin
Approved by:	Heikki
2008-10-03 14:17:28 +00:00
sunny
8a92f6fe2c branches/5.1: Since handler::get_auto_increment() doesn't allow us
to return the cause of failure we have to inform MySQL using the
sql_print_warning() function to return the cause for autoinc failure.
Previously we simply printed the error code, this patch prints the
text string representing the following two error codes:

DB_LOCK_WAIT_TIMEOUT
DB_DEADLOCK.

Bug#35498 Cannot get table test/table1 auto-inccounter value in ::info

Approved by Marko.
2008-09-30 07:41:56 +00:00
inaam
e085881474 branches/5.1 bug#39483 InnoDB hang on adaptive hash because of out
of order ::open() call by MySQL

Forward port of r2629

Under some conditions MySQL calls ::open with search_latch leading
to a deadlock as we try to acquire dict_sys->mutex inside ::open
breaking the latching order. The fix is to release search_latch.

Reviewed by: Heikki
2008-09-16 15:11:26 +00:00
sunny
0e039a4caf branches/5.1: Fix for MySQL Bug#38839. Reset the statement level last
value field in prebuilt. This field tracks the last value in an autoincrement
interval. We use this value to check whether we need to update a table's
AUTOINC counter, if the value written to a table is less than this value
then we avoid updating the table's AUTOINC value in order to reduce
mutex contention. If it's not reset (e.g., after a DELETE statement) then
there is the possibility of missing updates to the table's AUTOINC counter
resulting in a subsequent duplicate row error message under certain 
conditions (see the test case for details).

Bug #38839 - auto increment does not work properly with InnoDB after update
2008-08-23 21:19:05 +00:00
marko
06be45c3d1 branches/5.1: Identify SELECT statements by thd_sql_command() == SQLCOM_SELECT
instead of parsing the query string.  This fixes MySQL Bug #37885 without
us having to implement lexical analysis of SQL comments in yet another place.

thd_is_select(): A new predicate.

row_search_for_mysql(): Use thd_is_select().

Approved by Heikki.
2008-08-21 12:25:05 +00:00
vasil
d34b47d7dc branches/5.1:
Fix Bug#38185 ha_innobase::info can hold locks even when called with HA_STATUS_NO_LOCK

The fix is to call fsp_get_available_space_in_free_extents() from
ha_innobase::info() only if HA_STATUS_NO_LOCK is not present in the flag
*AND*
change get_schema_tables_record() in MySQL's sql/sql_show.cc to call
::info() *without* HA_STATUS_NO_LOCK whenever a user issues SELECT FROM
information_schema.tables;

Without the change to sql/sql_show.cc this patch would lead to Bug#32440
resurfacing. I.e. delete_length would never be updated in ::info() and
will remain 0 forever, resulting in the free space not being shown
anywhere.

This is the change to sql/sql_show.cc for reference, it needs to be
committed to the MySQL repo before or at the same time with this change
to ha_innodb.cc:

 --- patch begins here ---
 --- sql/sql_show.cc.orig	2008-07-23 09:32:14.000000000 +0300
 +++ sql/sql_show.cc	2008-07-23 09:32:19.000000000 +0300
 @@ -3549,8 +3549,7 @@ static int get_schema_tables_record(THD 
  
      if(file)
      {
 -      file->info(HA_STATUS_VARIABLE | HA_STATUS_TIME | HA_STATUS_AUTO |
 -                 HA_STATUS_NO_LOCK);
 +      file->info(HA_STATUS_VARIABLE | HA_STATUS_TIME | HA_STATUS_AUTO);
        enum row_type row_type = file->get_row_type();
        switch (row_type) {
        case ROW_TYPE_NOT_USED:
 --- patch ends here ---

Approved by:	Heikki
2008-07-25 13:24:23 +00:00
sunny
c4eb6c1758 branches/5.1: Add test cases and fix a bug where the last AUTOINC cached value
was not reset to 0 when the table was truncated.

Bug #37531 : After truncate, auto_increment behaves incorrectly for InnoDB
2008-06-26 12:55:43 +00:00
sunny
a52e6545aa branches/5.1: Fix for Bug#35602, "Failed to read auto-increment value from
storage engine". The test for REPLACE was an error of ommission since it's
classified as a simple INSERT. For REPLACE statements we don't acquire
the special AUTOINC lock for AUTOINC_NEW_STYLE_LOCKING with this fix.
2008-05-28 08:18:35 +00:00
calvin
05f84037e7 branches/5.1:
Fix Bug#11894 innodb_file_per_table crashes w/ Windows .sym symbolic
link hack

The crash was due to un-handled error 3 (path not found). In the case
of file per table, change the call to os_file_handle_error_no_exit()
from os_file_handle_error(). Also, checks for full path pattern during
table create (Windows only), which is used in symbolic link and temp
table creation.

Approved by:	Heikki
2008-05-19 21:37:14 +00:00
vasil
461cc69ce7 branches/5.1:
Fix Bug#36600 SHOW STATUS takes a lot of CPU in buf_get_latched_pages_number

by removing the Innodb_buffer_pool_pages_latched variable from
SHOW STATUS output in non-UNIV_DEBUG compilation.
 
Approved by:	Heikki
2008-05-19 13:59:42 +00:00
vasil
b970909eca branches/5.1:
Merge change from MySQL:

  ChangeSet@1.2563, 2008-03-18 19:42:04+04:00, gluh@mysql.com +1 -0
    Bug#35406 5.1-opt crashes on select from I_S.REFERENTIAL_CONSTRAINTS
    added intialization of f_key_info.referenced_key_name for the case when
    referenced table is dropped
2008-04-30 15:04:36 +00:00
calvin
ed668cc164 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
6ac1930117 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
0b9ab341a8 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
cbf6c76a44 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
713f8b7093 branches/5.1:
Merge changes from MySQL AB.
2008-03-11 16:50:50 +00:00
sunny
e89ab3bf1d 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
101643c67d 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
5b92c4ecb8 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
0178566370 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
7f016e0c92 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
29e369621b 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
7f682c9665 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
b284fbc7f8 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
cac20a3ae6 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
cd51e62255 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
39d58ce475 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
3ace59363f 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
34e17c7f73 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
45579db460 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
9e014647e8 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