From 816a8b5384922da68e043e9209b7173b8986788c Mon Sep 17 00:00:00 2001 From: Jorgen Loland Date: Tue, 28 Aug 2012 14:51:01 +0200 Subject: [PATCH 01/60] Bug#14547952: DEBUG BUILD FAILS ASSERTION IN RECORDS_IN_RANGE() ha_innobase::records_in_range(): Remove a debug assertion that prohibits an open range (full table). This assertion catches unnecessary calls to this method, but such calls are not harming correctness. --- storage/innobase/handler/ha_innodb.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 796f51d737b..df465d016e1 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -6380,7 +6380,6 @@ ha_innobase::records_in_range( void* heap2; DBUG_ENTER("records_in_range"); - DBUG_ASSERT(min_key || max_key); ut_a(prebuilt->trx == thd_to_trx(ha_thd())); From 961486e524066b29a0641edb89e36b7499dea1fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Thu, 30 Aug 2012 21:49:24 +0300 Subject: [PATCH 02/60] Bug#14547952: DEBUG BUILD FAILS ASSERTION IN RECORDS_IN_RANGE() ha_innodb::records_in_range(): Remove a debug assertion that prohibits an open range (full table). The patch by Jorgen Loland only removed the assertion from the built-in InnoDB, not from the InnoDB Plugin. --- storage/innodb_plugin/handler/ha_innodb.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/storage/innodb_plugin/handler/ha_innodb.cc b/storage/innodb_plugin/handler/ha_innodb.cc index fef49d23624..884e6513fb1 100644 --- a/storage/innodb_plugin/handler/ha_innodb.cc +++ b/storage/innodb_plugin/handler/ha_innodb.cc @@ -7438,7 +7438,6 @@ ha_innobase::records_in_range( mem_heap_t* heap; DBUG_ENTER("records_in_range"); - DBUG_ASSERT(min_key || max_key); ut_a(prebuilt->trx == thd_to_trx(ha_thd())); From d37f6298cf72130c800247913757e856b28fb67f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Thu, 30 Aug 2012 21:53:41 +0300 Subject: [PATCH 03/60] Bug#14554000 CRASH IN PAGE_REC_GET_NTH_CONST(NTH=0) DURING COMPRESSED PAGE SPLIT page_rec_get_nth_const(): Map nth==0 to the page infimum. btr_compress(adjust=TRUE): Add a debug assertion for nth>0. The cursor should never be positioned on the page infimum. btr_index_page_validate(): Add test instrumentation for checking the return values of page_rec_get_nth_const() during CHECK TABLE, and for checking that the page directory slot 0 always contains only one record, the predefined page infimum record. page_cur_delete_rec(), page_delete_rec_list_end(): Add debug assertions guarding against accessing the page slot 0. page_copy_rec_list_start(): Clarify a comment about ret_pos==0. rb:1248 approved by Jimmy Yang --- storage/innodb_plugin/ChangeLog | 6 ++++++ storage/innodb_plugin/btr/btr0btr.c | 26 ++++++++++++++++++++++++++ storage/innodb_plugin/page/page0cur.c | 1 + storage/innodb_plugin/page/page0page.c | 10 ++++++++-- 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/storage/innodb_plugin/ChangeLog b/storage/innodb_plugin/ChangeLog index 576a67a0106..4ef88e3bca1 100644 --- a/storage/innodb_plugin/ChangeLog +++ b/storage/innodb_plugin/ChangeLog @@ -1,3 +1,9 @@ +2012-08-29 The InnoDB Team + + * btr/btr0btr.c, page/page0cur.c, page/page0page.c: + Fix Bug#14554000 CRASH IN PAGE_REC_GET_NTH_CONST(NTH=0) + DURING COMPRESSED PAGE SPLIT + 2012-08-16 The InnoDB Team * btr/btr0cur.c: diff --git a/storage/innodb_plugin/btr/btr0btr.c b/storage/innodb_plugin/btr/btr0btr.c index c042fb2ff87..604c56b5e73 100644 --- a/storage/innodb_plugin/btr/btr0btr.c +++ b/storage/innodb_plugin/btr/btr0btr.c @@ -3241,6 +3241,7 @@ btr_compress( if (adjust) { nth_rec = page_rec_get_n_recs_before(btr_cur_get_rec(cursor)); + ut_ad(nth_rec > 0); } /* Decide the page to which we try to merge and which will inherit @@ -3476,6 +3477,7 @@ func_exit: mem_heap_free(heap); if (adjust) { + ut_ad(nth_rec > 0); btr_cur_position( index, page_rec_get_nth(merge_block->frame, nth_rec), @@ -3988,8 +3990,22 @@ btr_index_page_validate( { page_cur_t cur; ibool ret = TRUE; +#ifndef DBUG_OFF + ulint nth = 1; +#endif /* !DBUG_OFF */ page_cur_set_before_first(block, &cur); + + /* Directory slot 0 should only contain the infimum record. */ + DBUG_EXECUTE_IF("check_table_rec_next", + ut_a(page_rec_get_nth_const( + page_cur_get_page(&cur), 0) + == cur.rec); + ut_a(page_dir_slot_get_n_owned( + page_dir_get_nth_slot( + page_cur_get_page(&cur), 0)) + == 1);); + page_cur_move_to_next(&cur); for (;;) { @@ -4003,6 +4019,16 @@ btr_index_page_validate( return(FALSE); } + /* Verify that page_rec_get_nth_const() is correctly + retrieving each record. */ + DBUG_EXECUTE_IF("check_table_rec_next", + ut_a(cur.rec == page_rec_get_nth_const( + page_cur_get_page(&cur), + page_rec_get_n_recs_before( + cur.rec))); + ut_a(nth++ == page_rec_get_n_recs_before( + cur.rec));); + page_cur_move_to_next(&cur); } diff --git a/storage/innodb_plugin/page/page0cur.c b/storage/innodb_plugin/page/page0cur.c index 88ee6bc09a9..00fb55d169c 100644 --- a/storage/innodb_plugin/page/page0cur.c +++ b/storage/innodb_plugin/page/page0cur.c @@ -1902,6 +1902,7 @@ page_cur_delete_rec( /* Save to local variables some data associated with current_rec */ cur_slot_no = page_dir_find_owner_slot(current_rec); + ut_ad(cur_slot_no > 0); cur_dir_slot = page_dir_get_nth_slot(page, cur_slot_no); cur_n_owned = page_dir_slot_get_n_owned(cur_dir_slot); diff --git a/storage/innodb_plugin/page/page0page.c b/storage/innodb_plugin/page/page0page.c index 108c3e0805c..a85789f5c32 100644 --- a/storage/innodb_plugin/page/page0page.c +++ b/storage/innodb_plugin/page/page0page.c @@ -795,8 +795,8 @@ zip_reorganize: /* Before copying, "ret" was the predecessor of the predefined supremum record. If it was the predefined infimum record, then it would - still be the infimum. Thus, the assertion - ut_a(ret_pos > 0) would fail here. */ + still be the infimum, and we would have + ret_pos == 0. */ if (UNIV_UNLIKELY (!page_zip_reorganize(new_block, index, mtr))) { @@ -1051,6 +1051,7 @@ page_delete_rec_list_end( n_owned = rec_get_n_owned_new(rec2) - count; slot_index = page_dir_find_owner_slot(rec2); + ut_ad(slot_index > 0); slot = page_dir_get_nth_slot(page, slot_index); } else { rec_t* rec2 = rec; @@ -1066,6 +1067,7 @@ page_delete_rec_list_end( n_owned = rec_get_n_owned_old(rec2) - count; slot_index = page_dir_find_owner_slot(rec2); + ut_ad(slot_index > 0); slot = page_dir_get_nth_slot(page, slot_index); } @@ -1492,6 +1494,10 @@ page_rec_get_nth_const( ulint n_owned; const rec_t* rec; + if (nth == 0) { + return(page_get_infimum_rec(page)); + } + ut_ad(nth < UNIV_PAGE_SIZE / (REC_N_NEW_EXTRA_BYTES + 1)); for (i = 0;; i++) { From 940d7cb3bdc2817a788c9dc98f13d62962db7a35 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 31 Aug 2012 09:51:27 +0300 Subject: [PATCH 04/60] From f3a6816fe541c24f41fd8045f78e28eb1da2ce9a Mon Sep 17 00:00:00 2001 From: Annamalai Gurusami Date: Fri, 31 Aug 2012 15:42:00 +0530 Subject: [PATCH 05/60] Bug #13453036 ERROR CODE 1118: ROW SIZE TOO LARGE - EVEN THOUGH IT IS NOT. The following error message is misleading because it claims that the BLOB space is not counted. "ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs" When the ROW_FORMAT=compact or ROW_FORMAT=REDUNDANT is used, the BLOB prefix is stored inline along with the row. So the above error message is changed as follows depending on the row format used: For ROW_FORMAT=COMPRESSED or ROW_FORMAT=DYNAMIC, the error message is as follows: "ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline." For ROW_FORMAT=COMPACT or ROW_FORMAT=REDUNDANT, the error message is as follows: "ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline." rb://1252 approved by Marko Makela --- .../suite/innodb_plugin/r/innodb-index.result | 2 +- .../suite/innodb_plugin/r/innodb-zip.result | 6 +++--- .../suite/innodb_plugin/r/innodb.result | 2 +- .../innodb_plugin/r/innodb_bug53591.result | 2 +- .../suite/innodb_plugin/r/innodb_misc1.result | 2 +- storage/innodb_plugin/handler/ha_innodb.cc | 20 +++++++++++++++---- storage/innodb_plugin/include/univ.i | 18 +++++++++++++++++ 7 files changed, 41 insertions(+), 11 deletions(-) diff --git a/mysql-test/suite/innodb_plugin/r/innodb-index.result b/mysql-test/suite/innodb_plugin/r/innodb-index.result index 37bd81e5ec6..bf7c382327b 100644 --- a/mysql-test/suite/innodb_plugin/r/innodb-index.result +++ b/mysql-test/suite/innodb_plugin/r/innodb-index.result @@ -1096,7 +1096,7 @@ PRIMARY KEY (b(10), a), INDEX (c(10)) INSERT INTO bug12547647 VALUES (5,repeat('khdfo5AlOq',1900),repeat('g',7731)); COMMIT; UPDATE bug12547647 SET c = REPEAT('b',16928); -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs +ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. DROP TABLE bug12547647; SET @r=REPEAT('a',500); CREATE TABLE t1(a INT, diff --git a/mysql-test/suite/innodb_plugin/r/innodb-zip.result b/mysql-test/suite/innodb_plugin/r/innodb-zip.result index 16947bf16dc..5ee0854367a 100644 --- a/mysql-test/suite/innodb_plugin/r/innodb-zip.result +++ b/mysql-test/suite/innodb_plugin/r/innodb-zip.result @@ -125,12 +125,12 @@ CREATE TABLE t1( c TEXT NOT NULL, d TEXT NOT NULL, PRIMARY KEY (c(767),d(767))) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII; -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs +ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. CREATE TABLE t1( c TEXT NOT NULL, d TEXT NOT NULL, PRIMARY KEY (c(767),d(767))) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=2 CHARSET=ASCII; -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs +ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. CREATE TABLE t1( c TEXT NOT NULL, d TEXT NOT NULL, PRIMARY KEY (c(767),d(767))) @@ -138,7 +138,7 @@ ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4 CHARSET=ASCII; drop table t1; CREATE TABLE t1(c TEXT, PRIMARY KEY (c(440))) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII; -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs +ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. CREATE TABLE t1(c TEXT, PRIMARY KEY (c(438))) ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1 CHARSET=ASCII; INSERT INTO t1 VALUES(REPEAT('A',512)),(REPEAT('B',512)); diff --git a/mysql-test/suite/innodb_plugin/r/innodb.result b/mysql-test/suite/innodb_plugin/r/innodb.result index 9435670f42d..3d3eaae5e16 100644 --- a/mysql-test/suite/innodb_plugin/r/innodb.result +++ b/mysql-test/suite/innodb_plugin/r/innodb.result @@ -3151,7 +3151,7 @@ c21 CHAR(255), c22 CHAR(255), c23 CHAR(255), c24 CHAR(255), c25 CHAR(255), c26 CHAR(255), c27 CHAR(255), c28 CHAR(255), c29 CHAR(255), c30 CHAR(255), c31 CHAR(255), c32 CHAR(255) ) ENGINE = InnoDB; -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs +ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. DROP TABLE IF EXISTS t1; Warnings: Note 1051 Unknown table 't1' diff --git a/mysql-test/suite/innodb_plugin/r/innodb_bug53591.result b/mysql-test/suite/innodb_plugin/r/innodb_bug53591.result index 29f9d09a71c..dae9f0d64d0 100644 --- a/mysql-test/suite/innodb_plugin/r/innodb_bug53591.result +++ b/mysql-test/suite/innodb_plugin/r/innodb_bug53591.result @@ -8,7 +8,7 @@ ERROR HY000: Too big row SHOW WARNINGS; Level Code Message Error 139 Too big row -Error 1118 Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs +Error 1118 Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. Error 1030 Got error 139 from storage engine DROP TABLE bug53591; SET GLOBAL innodb_file_format=Antelope; diff --git a/mysql-test/suite/innodb_plugin/r/innodb_misc1.result b/mysql-test/suite/innodb_plugin/r/innodb_misc1.result index 5b1774c6e99..81c65c34554 100644 --- a/mysql-test/suite/innodb_plugin/r/innodb_misc1.result +++ b/mysql-test/suite/innodb_plugin/r/innodb_misc1.result @@ -774,7 +774,7 @@ c21 CHAR(255), c22 CHAR(255), c23 CHAR(255), c24 CHAR(255), c25 CHAR(255), c26 CHAR(255), c27 CHAR(255), c28 CHAR(255), c29 CHAR(255), c30 CHAR(255), c31 CHAR(255), c32 CHAR(255) ) ENGINE = InnoDB; -ERROR 42000: Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs +ERROR 42000: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. SET innodb_strict_mode=OFF; DROP TABLE IF EXISTS t1; Warnings: diff --git a/storage/innodb_plugin/handler/ha_innodb.cc b/storage/innodb_plugin/handler/ha_innodb.cc index 884e6513fb1..7e3ecce77bd 100644 --- a/storage/innodb_plugin/handler/ha_innodb.cc +++ b/storage/innodb_plugin/handler/ha_innodb.cc @@ -877,11 +877,23 @@ convert_error_code_to_mysql( case DB_TABLE_NOT_FOUND: return(HA_ERR_NO_SUCH_TABLE); - case DB_TOO_BIG_RECORD: - my_error(ER_TOO_BIG_ROWSIZE, MYF(0), - page_get_free_space_of_empty(flags - & DICT_TF_COMPACT) / 2); + case DB_TOO_BIG_RECORD: { + /* If prefix is true then a 768-byte prefix is stored + locally for BLOB fields. Refer to dict_table_get_format() */ + bool prefix = ((flags & DICT_TF_FORMAT_MASK) + >> DICT_TF_FORMAT_SHIFT) < UNIV_FORMAT_B; + my_printf_error(ER_TOO_BIG_ROWSIZE, + "Row size too large (> %lu). Changing some columns " + "to TEXT or BLOB %smay help. In current row " + "format, BLOB prefix of %d bytes is stored inline.", + MYF(0), + page_get_free_space_of_empty(flags & + DICT_TF_COMPACT) / 2, + prefix ? "or using ROW_FORMAT=DYNAMIC " + "or ROW_FORMAT=COMPRESSED ": "", + prefix ? DICT_MAX_INDEX_COL_LEN : 0); return(HA_ERR_TO_BIG_ROW); + } case DB_NO_SAVEPOINT: return(HA_ERR_NO_SAVEPOINT); diff --git a/storage/innodb_plugin/include/univ.i b/storage/innodb_plugin/include/univ.i index c3aa3d25e36..a25b2e6585c 100644 --- a/storage/innodb_plugin/include/univ.i +++ b/storage/innodb_plugin/include/univ.i @@ -267,6 +267,24 @@ management to ensure correct alignment for doubles etc. */ ======================== */ +/** There are currently two InnoDB file formats which are used to group +features with similar restrictions and dependencies. Using an enum allows +switch statements to give a compiler warning when a new one is introduced. */ +enum innodb_file_formats_enum { + /** Antelope File Format: InnoDB/MySQL up to 5.1. + This format includes REDUNDANT and COMPACT row formats */ + UNIV_FORMAT_A = 0, + + /** Barracuda File Format: Introduced in InnoDB plugin for 5.1: + This format includes COMPRESSED and DYNAMIC row formats. It + includes the ability to create secondary indexes from data that + is not on the clustered index page and the ability to store more + data off the clustered index page. */ + UNIV_FORMAT_B = 1 +}; + +typedef enum innodb_file_formats_enum innodb_file_formats_t; + /* The 2-logarithm of UNIV_PAGE_SIZE: */ #define UNIV_PAGE_SIZE_SHIFT 14 /* The universal page size of the database */ From 75516676f873b6d9aef18f6451481bc6da156fcd Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Sep 2012 11:33:05 +0530 Subject: [PATCH 06/60] From 50e8ac0b831f9cc02bdc7cbe3b465c295b453d5d Mon Sep 17 00:00:00 2001 From: Tor Didriksen Date: Wed, 5 Sep 2012 17:40:13 +0200 Subject: [PATCH 07/60] Bug#13734987 MEMORY LEAK WITH I_S/SHOW AND VIEWS WITH SUBQUERY In fill_schema_table_by_open(): free item list before restoring active arena. sql/sql_show.cc: Replaced i_s_arena.free_items with DBUG_ASSERT(i_s_arena.free_list == NULL) (there's nothing to free in that list) --- sql/sql_show.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 1b0f94ce18e..7847fe5b510 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -3164,8 +3164,9 @@ end: /* Restore original LEX value, statement's arena and THD arena values. */ lex_end(thd->lex); - if (i_s_arena.free_list) - i_s_arena.free_items(); + // Free items, before restoring backup_arena below. + DBUG_ASSERT(i_s_arena.free_list == NULL); + thd->free_items(); /* For safety reset list of open temporary tables before closing From 813b661d00123e3291530d102e2b94388f42fb0f Mon Sep 17 00:00:00 2001 From: Joerg Bruehe Date: Tue, 11 Sep 2012 12:47:32 +0200 Subject: [PATCH 08/60] Spec file change to work around cast ulonglong -> int. --- support-files/mysql.spec.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh index ee0211fd3e0..395010b3773 100644 --- a/support-files/mysql.spec.sh +++ b/support-files/mysql.spec.sh @@ -374,7 +374,7 @@ CXXFLAGS=${CXXFLAGS:-$RPM_OPT_FLAGS -felide-constructors -fno-exceptions -fno-rt # Evaluate current setting of $DEBUG if [ $DEBUG -gt 0 ] ; then OPT_COMMENT='--with-comment="%{debug_comment}"' - OPT_DEBUG='--with-debug' + OPT_DEBUG='--with-debug --enable-mysql-maintainer-mode=no' CFLAGS=`echo " $CFLAGS " | \ sed -e 's/ -O[0-9]* / /' -e 's/ -unroll2 / /' -e 's/ -ip / /' \ -e 's/^ //' -e 's/ $//'` @@ -1191,6 +1191,11 @@ fi # merging BK trees) ############################################################################## %changelog +* Tue Sep 11 2012 Joerg Bruehe + +- Disable "maintainer mode" in debug builds, there is a cast ulonglong -> int + in the sources (since 2007) that would cause builds to fail. + * Wed Sep 14 2011 Joerg Bruehe - Let the RPM capabilities ("obsoletes" etc) ensure that an upgrade may replace From 82eb2c6de05787cda48745bcf4225be7b5a9870e Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 2 Oct 2012 12:53:20 +0300 Subject: [PATCH 09/60] fixed MDEV-568: Wrong result for a hash index look-up if the index is unique and the key is NULL Check ability of index to be NULL as it made in MyISAM. UNIQUE with NULL could have several NULL entries so we have to continue even if ve have found a row. --- mysql-test/r/heap_hash.result | 19 +++++++++++++++++++ mysql-test/t/heap_hash.test | 15 +++++++++++++++ storage/heap/hp_rkey.c | 2 +- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/heap_hash.result b/mysql-test/r/heap_hash.result index bae49af462f..a0872fb09c5 100644 --- a/mysql-test/r/heap_hash.result +++ b/mysql-test/r/heap_hash.result @@ -382,3 +382,22 @@ INSERT INTO t1 VALUES('A ', 'A '); ERROR 23000: Duplicate entry 'A -A ' for key 'key1' DROP TABLE t1; End of 5.0 tests +# +# MDEV-568 (AKA LP BUG#1007981, AKA MySQL bug#44771) +# Wrong result for a hash index look-up if the index is unique and +# the key is NULL +# +CREATE TABLE t1 ( pk INT PRIMARY KEY, val INT, UNIQUE KEY USING HASH(val)) ENGINE=MEMORY; +INSERT INTO t1 VALUES (1, NULL); +INSERT INTO t1 VALUES (2, NULL); +INSERT INTO t1 VALUES (3, 1); +INSERT INTO t1 VALUES (4, NULL); +EXPLAIN SELECT * FROM t1 WHERE val IS NULL; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ref val val 5 const 1 Using where +SELECT * FROM t1 WHERE val IS NULL; +pk val +4 NULL +2 NULL +1 NULL +drop table t1; diff --git a/mysql-test/t/heap_hash.test b/mysql-test/t/heap_hash.test index 1e3491f89a9..c8efddc9958 100644 --- a/mysql-test/t/heap_hash.test +++ b/mysql-test/t/heap_hash.test @@ -284,3 +284,18 @@ INSERT INTO t1 VALUES('A ', 'A '); DROP TABLE t1; --echo End of 5.0 tests + +--echo # +--echo # MDEV-568 (AKA LP BUG#1007981, AKA MySQL bug#44771) +--echo # Wrong result for a hash index look-up if the index is unique and +--echo # the key is NULL +--echo # +CREATE TABLE t1 ( pk INT PRIMARY KEY, val INT, UNIQUE KEY USING HASH(val)) ENGINE=MEMORY; + +INSERT INTO t1 VALUES (1, NULL); +INSERT INTO t1 VALUES (2, NULL); +INSERT INTO t1 VALUES (3, 1); +INSERT INTO t1 VALUES (4, NULL); +EXPLAIN SELECT * FROM t1 WHERE val IS NULL; +SELECT * FROM t1 WHERE val IS NULL; +drop table t1; diff --git a/storage/heap/hp_rkey.c b/storage/heap/hp_rkey.c index 27d1114770e..3069b955844 100644 --- a/storage/heap/hp_rkey.c +++ b/storage/heap/hp_rkey.c @@ -63,7 +63,7 @@ int heap_rkey(HP_INFO *info, uchar *record, int inx, const uchar *key, info->update= 0; DBUG_RETURN(my_errno); } - if (!(keyinfo->flag & HA_NOSAME)) + if ((keyinfo->flag & (HA_NOSAME | HA_NULL_PART_KEY)) != HA_NOSAME) memcpy(info->lastkey, key, (size_t) keyinfo->length); } memcpy(record, pos, (size_t) share->reclength); From 72ab07c1cba0565a8ef043931610a2510a85cfd5 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 14 Oct 2012 19:29:31 +0300 Subject: [PATCH 10/60] MDEV-746: Merged mysql fix of the bug LP:1002546 & MySQL Bug#13651009. Empty result after reading const tables now works for subqueries. --- mysql-test/r/subselect.result | 111 ++++++++++++++++++++++++++++++++++ mysql-test/t/subselect.test | 77 +++++++++++++++++++++++ sql/sql_select.cc | 36 ++++++++--- 3 files changed, 214 insertions(+), 10 deletions(-) diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index f7bfd44421c..0087044c782 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -5294,4 +5294,115 @@ WHERE (col_varchar_nokey, 'x') IN col_int_nokey 1 DROP TABLE ot,it1,it2; +# +# MDEV-746 +# Bug#13651009 WRONG RESULT FROM DERIVED TABLE IF THE SUBQUERY +# HAS AN EMPTY RESULT +# +CREATE TABLE t1 ( +pk int NOT NULL, +col_int_nokey int NOT NULL, +col_int_key int NOT NULL, +col_time_key time NOT NULL, +col_varchar_key varchar(1) NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_time_key (col_time_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +CREATE TABLE t2 ( +pk int NOT NULL AUTO_INCREMENT, +col_int_nokey int NOT NULL, +col_int_key int NOT NULL, +col_time_key time NOT NULL, +col_varchar_key varchar(1) NOT NULL, +col_varchar_nokey varchar(1) NOT NULL, +PRIMARY KEY (pk), +KEY col_int_key (col_int_key), +KEY col_time_key (col_time_key), +KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; +INSERT INTO t2 VALUES (1,4,4,'00:00:00','b','b'); +SET @var2:=4, @var3:=8; + +Testcase without inner subquery +EXPLAIN SELECT @var3:=12, sq4_alias1.* +FROM t1 AS sq4_alias1 +WHERE (sq4_alias1.col_varchar_key + NULL) IS NULL OR +sq4_alias1.col_varchar_key = @var3; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +SELECT @var3:=12, sq4_alias1.* +FROM t1 AS sq4_alias1 +WHERE (sq4_alias1.col_varchar_key + NULL) IS NULL OR +sq4_alias1.col_varchar_key = @var3; +@var3:=12 pk col_int_nokey col_int_key col_time_key col_varchar_key col_varchar_nokey +SELECT @var3; +@var3 +8 +EXPLAIN SELECT * FROM ( SELECT @var3:=12, sq4_alias1.* +FROM t1 AS sq4_alias1 +WHERE (sq4_alias1.col_varchar_key + NULL) IS NULL OR +sq4_alias1.col_varchar_key = @var3 ) AS alias3; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY system NULL NULL NULL NULL 0 const row not found +2 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table +SELECT * FROM ( SELECT @var3:=12, sq4_alias1.* +FROM t1 AS sq4_alias1 +WHERE (sq4_alias1.col_varchar_key + NULL) IS NULL OR +sq4_alias1.col_varchar_key = @var3 ) AS alias3; +@var3:=12 pk col_int_nokey col_int_key col_time_key col_varchar_key col_varchar_nokey +SELECT @var3; +@var3 +8 + +Testcase with inner subquery; crashed WL#6095 +SET @var3=8; +EXPLAIN SELECT sq4_alias1.* +FROM t1 AS sq4_alias1 +WHERE (sq4_alias1.col_varchar_key , sq4_alias1.col_varchar_nokey) +NOT IN +(SELECT c_sq1_alias1.col_varchar_key AS c_sq1_field1, +c_sq1_alias1.col_varchar_nokey AS c_sq1_field2 +FROM t2 AS c_sq1_alias1 +WHERE (c_sq1_alias1.col_int_nokey != @var2 +OR c_sq1_alias1.pk != @var3)); +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +2 DEPENDENT SUBQUERY c_sq1_alias1 system PRIMARY,col_varchar_key NULL NULL NULL 1 +SELECT sq4_alias1.* +FROM t1 AS sq4_alias1 +WHERE (sq4_alias1.col_varchar_key , sq4_alias1.col_varchar_nokey) +NOT IN +(SELECT c_sq1_alias1.col_varchar_key AS c_sq1_field1, +c_sq1_alias1.col_varchar_nokey AS c_sq1_field2 +FROM t2 AS c_sq1_alias1 +WHERE (c_sq1_alias1.col_int_nokey != @var2 +OR c_sq1_alias1.pk != @var3)); +pk col_int_nokey col_int_key col_time_key col_varchar_key col_varchar_nokey +EXPLAIN SELECT * FROM ( SELECT sq4_alias1.* +FROM t1 AS sq4_alias1 +WHERE (sq4_alias1.col_varchar_key , sq4_alias1.col_varchar_nokey) +NOT IN +(SELECT c_sq1_alias1.col_varchar_key AS c_sq1_field1, +c_sq1_alias1.col_varchar_nokey AS c_sq1_field2 +FROM t2 AS c_sq1_alias1 +WHERE (c_sq1_alias1.col_int_nokey != @var2 +OR c_sq1_alias1.pk != @var3)) ) AS alias3; +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY system NULL NULL NULL NULL 0 const row not found +2 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table +3 DEPENDENT SUBQUERY c_sq1_alias1 system PRIMARY,col_varchar_key NULL NULL NULL 1 +SELECT * FROM ( SELECT sq4_alias1.* +FROM t1 AS sq4_alias1 +WHERE (sq4_alias1.col_varchar_key , sq4_alias1.col_varchar_nokey) +NOT IN +(SELECT c_sq1_alias1.col_varchar_key AS c_sq1_field1, +c_sq1_alias1.col_varchar_nokey AS c_sq1_field2 +FROM t2 AS c_sq1_alias1 +WHERE (c_sq1_alias1.col_int_nokey != @var2 +OR c_sq1_alias1.pk != @var3)) ) AS alias3; +pk col_int_nokey col_int_key col_time_key col_varchar_key col_varchar_nokey +DROP TABLE t1,t2; End of 5.2 tests diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index def42b24c73..3be57e993d5 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -4144,4 +4144,81 @@ SELECT col_int_nokey FROM ot DROP TABLE ot,it1,it2; +--echo # +--echo # MDEV-746 +--echo # Bug#13651009 WRONG RESULT FROM DERIVED TABLE IF THE SUBQUERY +--echo # HAS AN EMPTY RESULT +--echo # + +CREATE TABLE t1 ( + pk int NOT NULL, + col_int_nokey int NOT NULL, + col_int_key int NOT NULL, + col_time_key time NOT NULL, + col_varchar_key varchar(1) NOT NULL, + col_varchar_nokey varchar(1) NOT NULL, + PRIMARY KEY (pk), + KEY col_int_key (col_int_key), + KEY col_time_key (col_time_key), + KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; + +CREATE TABLE t2 ( + pk int NOT NULL AUTO_INCREMENT, + col_int_nokey int NOT NULL, + col_int_key int NOT NULL, + col_time_key time NOT NULL, + col_varchar_key varchar(1) NOT NULL, + col_varchar_nokey varchar(1) NOT NULL, + PRIMARY KEY (pk), + KEY col_int_key (col_int_key), + KEY col_time_key (col_time_key), + KEY col_varchar_key (col_varchar_key,col_int_key) +) ENGINE=MyISAM; + +INSERT INTO t2 VALUES (1,4,4,'00:00:00','b','b'); + +SET @var2:=4, @var3:=8; + +--echo +--echo Testcase without inner subquery + +let $subq= +SELECT @var3:=12, sq4_alias1.* +FROM t1 AS sq4_alias1 +WHERE (sq4_alias1.col_varchar_key + NULL) IS NULL OR + sq4_alias1.col_varchar_key = @var3; + +eval EXPLAIN $subq; +eval $subq; +SELECT @var3; + +# Now as derived table: +eval EXPLAIN SELECT * FROM ( $subq ) AS alias3; +eval SELECT * FROM ( $subq ) AS alias3; +SELECT @var3; + +--echo +--echo Testcase with inner subquery; crashed WL#6095 +SET @var3=8; +let $subq= +SELECT sq4_alias1.* +FROM t1 AS sq4_alias1 +WHERE (sq4_alias1.col_varchar_key , sq4_alias1.col_varchar_nokey) + NOT IN + (SELECT c_sq1_alias1.col_varchar_key AS c_sq1_field1, + c_sq1_alias1.col_varchar_nokey AS c_sq1_field2 + FROM t2 AS c_sq1_alias1 + WHERE (c_sq1_alias1.col_int_nokey != @var2 + OR c_sq1_alias1.pk != @var3)); + +eval EXPLAIN $subq; +eval $subq; +# Now as derived table: +eval EXPLAIN SELECT * FROM ( $subq ) AS alias3; +eval SELECT * FROM ( $subq ) AS alias3; + +DROP TABLE t1,t2; + --echo End of 5.2 tests + diff --git a/sql/sql_select.cc b/sql/sql_select.cc index c6bddbf9a28..2a6c60af85f 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1065,11 +1065,9 @@ JOIN::optimize() DBUG_RETURN(1); // error == -1 } if (const_table_map != found_const_table_map && - !(select_options & SELECT_DESCRIBE) && - (!conds || - !(conds->used_tables() & RAND_TABLE_BIT) || - select_lex->master_unit() == &thd->lex->unit)) // upper level SELECT + !(select_options & SELECT_DESCRIBE)) { + // There is at least one empty const table zero_result_cause= "no matching row in const table"; DBUG_PRINT("error",("Error: %s", zero_result_cause)); error= 0; @@ -12204,6 +12202,17 @@ int safe_index_read(JOIN_TAB *tab) } +/** + Reads content of constant table + + @param tab table + @param pos position of table in query plan + + @retval 0 ok, one row was found or one NULL-complemented row was created + @retval -1 ok, no row was found and no NULL-complemented row was created + @retval 1 error +*/ + static int join_read_const_table(JOIN_TAB *tab, POSITION *pos) { @@ -12295,6 +12304,16 @@ join_read_const_table(JOIN_TAB *tab, POSITION *pos) } +/** + Read a constant table when there is at most one matching row, using a table + scan. + + @param tab Table to read + + @retval 0 Row was found + @retval -1 Row was not found + @retval 1 Got an error (other than row not found) during read +*/ static int join_read_system(JOIN_TAB *tab) { @@ -12326,12 +12345,9 @@ join_read_system(JOIN_TAB *tab) @param tab Table to read - @retval - 0 Row was found - @retval - -1 Row was not found - @retval - 1 Got an error (other than row not found) during read + @retval 0 Row was found + @retval -1 Row was not found + @retval 1 Got an error (other than row not found) during read */ static int From 4304dbc464d425e54b0d802568838592cb625b26 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 9 Oct 2012 17:36:02 +0300 Subject: [PATCH 11/60] MDEV-616 fix (MySQL fix accepted) --- mysql-test/r/user_var.result | 38 +++++++++++++-- mysql-test/t/user_var.test | 28 +++++++++++ sql/item_func.h | 9 ++++ sql/sql_select.cc | 90 +++++++++++++++++++++++------------- 4 files changed, 130 insertions(+), 35 deletions(-) diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result index 19cb54ad2bc..fbbe6d1839e 100644 --- a/mysql-test/r/user_var.result +++ b/mysql-test/r/user_var.result @@ -348,10 +348,10 @@ select @a:=f3, count(f3) from t1 group by 1 desc; 1.5 4 select @a:=f4, count(f4) from t1 group by 1 desc; @a:=f4 count(f4) -4.6 1 -3.6 2 -2.6 1 1.6 4 +1.6 1 +1.6 2 +1.6 1 drop table t1; create table t1 (f1 int); insert into t1 values (2), (1); @@ -464,3 +464,35 @@ GROUP BY @b:=(SELECT COUNT(*) > t2.a); 1 DROP TABLE t1; End of 5.1 tests +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (0); +SELECT DISTINCT POW(COUNT(*), @a:=(SELECT 1 FROM t1 LEFT JOIN t1 AS t2 ON @a)) +AS b FROM t1 GROUP BY a; +b +1 +SELECT @a; +@a +1 +DROP TABLE t1; +CREATE TABLE t1(f1 INT, f2 INT); +INSERT INTO t1 VALUES (1,2),(2,3),(3,1); +CREATE TABLE t2(a INT); +INSERT INTO t2 VALUES (1); +SET @var=NULL; +SELECT @var:=(SELECT f2 FROM t2 WHERE @var) FROM t1 GROUP BY f1 ORDER BY f2 DESC +LIMIT 1; +@var:=(SELECT f2 FROM t2 WHERE @var) +NULL +SELECT @var; +@var +NULL +DROP TABLE t1, t2; +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (0),(1),(3); +SELECT DISTINCT POW(COUNT(distinct a), @a:=(SELECT 1 FROM t1 LEFT JOIN t1 AS t2 ON @a limit 1)) AS b FROM t1 GROUP BY a; +b +1 +SELECT @a; +@a +1 +DROP TABLE t1; diff --git a/mysql-test/t/user_var.test b/mysql-test/t/user_var.test index 2782f61994d..4e45a4ecbc5 100644 --- a/mysql-test/t/user_var.test +++ b/mysql-test/t/user_var.test @@ -377,3 +377,31 @@ GROUP BY @b:=(SELECT COUNT(*) > t2.a); DROP TABLE t1; --echo End of 5.1 tests + +# +# MDEV-616 LP BUG#1002126 +# Bug #11764371 57196: MORE FUN WITH ASSERTION: !TABLE->FILE || +# TABLE->FILE->INITED == HANDLER:: +# + +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (0); +SELECT DISTINCT POW(COUNT(*), @a:=(SELECT 1 FROM t1 LEFT JOIN t1 AS t2 ON @a)) +AS b FROM t1 GROUP BY a; +SELECT @a; +DROP TABLE t1; +CREATE TABLE t1(f1 INT, f2 INT); +INSERT INTO t1 VALUES (1,2),(2,3),(3,1); +CREATE TABLE t2(a INT); +INSERT INTO t2 VALUES (1); +SET @var=NULL; +SELECT @var:=(SELECT f2 FROM t2 WHERE @var) FROM t1 GROUP BY f1 ORDER BY f2 DESC +LIMIT 1; +SELECT @var; +DROP TABLE t1, t2; + +CREATE TABLE t1(a INT); +INSERT INTO t1 VALUES (0),(1),(3); +SELECT DISTINCT POW(COUNT(distinct a), @a:=(SELECT 1 FROM t1 LEFT JOIN t1 AS t2 ON @a limit 1)) AS b FROM t1 GROUP BY a; +SELECT @a; +DROP TABLE t1; diff --git a/sql/item_func.h b/sql/item_func.h index 27f20dac002..4a31eb2da4e 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -1441,6 +1441,15 @@ public: :Item_func(b), cached_result_type(INT_RESULT), entry(NULL), entry_thread_id(0), name(a) {} + Item_func_set_user_var(Item_func_set_user_var *item) + :Item_func(item), cached_result_type(item->cached_result_type), + entry(item->entry), entry_thread_id(item->entry_thread_id), + value(item->value), decimal_buff(item->decimal_buff), + null_item(item->null_item), save_result(item->save_result), + name(item->name) + { + //fixed= 1; + } enum Functype functype() const { return SUSERVAR_FUNC; } double val_real(); longlong val_int(); diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 2a6c60af85f..cc377500b2c 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -16237,40 +16237,66 @@ change_to_use_tmp_fields(THD *thd, Item **ref_pointer_array, res_selected_fields.empty(); res_all_fields.empty(); - uint i, border= all_fields.elements - elements; - for (i= 0; (item= it++); i++) + uint border= all_fields.elements - elements; + for (uint i= 0; (item= it++); i++) { Field *field; - - if ((item->with_sum_func && item->type() != Item::SUM_FUNC_ITEM) || - (item->type() == Item::FUNC_ITEM && - ((Item_func*)item)->functype() == Item_func::SUSERVAR_FUNC)) + if (item->with_sum_func && item->type() != Item::SUM_FUNC_ITEM) item_field= item; - else + else if (item->type() == Item::FIELD_ITEM) + item_field= item->get_tmp_table_item(thd); + else if (item->type() == Item::FUNC_ITEM && + ((Item_func*)item)->functype() == Item_func::SUSERVAR_FUNC) { - if (item->type() == Item::FIELD_ITEM) + field= item->get_tmp_table_field(); + if (field != NULL) { - item_field= item->get_tmp_table_item(thd); + /* + Replace "@:=" with "@:=". Otherwise, + we would re-evaluate , and if expression were + a subquery, this would access already-unlocked tables. + */ + Item_func_set_user_var* suv= + new Item_func_set_user_var((Item_func_set_user_var*) item); + Item_field *new_field= new Item_field(field); + if (!suv || !new_field || suv->fix_fields(thd, (Item**)&suv)) + DBUG_RETURN(true); // Fatal error + ((Item *)suv)->name= item->name; + /* + We are replacing the argument of Item_func_set_user_var after its + value has been read. The argument's null_value should be set by + now, so we must set it explicitly for the replacement argument + since the null_value may be read without any preceeding call to + val_*(). + */ + new_field->update_null_value(); + List list; + list.push_back(new_field); + suv->set_arguments(list); + item_field= suv; } - else if ((field= item->get_tmp_table_field())) - { - if (item->type() == Item::SUM_FUNC_ITEM && field->table->group) - item_field= ((Item_sum*) item)->result_item(field); - else - item_field= (Item*) new Item_field(field); - if (!item_field) - DBUG_RETURN(TRUE); // Fatal error + else + item_field= item; + } + else if ((field= item->get_tmp_table_field())) + { + if (item->type() == Item::SUM_FUNC_ITEM && field->table->group) + item_field= ((Item_sum*) item)->result_item(field); + else + item_field= (Item*) new Item_field(field); + if (!item_field) + DBUG_RETURN(true); // Fatal error - if (item->real_item()->type() != Item::FIELD_ITEM) - field->orig_table= 0; - item_field->name= item->name; - if (item->type() == Item::REF_ITEM) - { - Item_field *ifield= (Item_field *) item_field; - Item_ref *iref= (Item_ref *) item; - ifield->table_name= iref->table_name; - ifield->db_name= iref->db_name; - } + if (item->real_item()->type() != Item::FIELD_ITEM) + field->orig_table= 0; + item_field->name= item->name; + if (item->type() == Item::REF_ITEM) + { + Item_field *ifield= (Item_field *) item_field; + Item_ref *iref= (Item_ref *) item; + ifield->table_name= iref->table_name; + ifield->db_name= iref->db_name; + } #ifndef DBUG_OFF if (!item_field->name) { @@ -16282,20 +16308,20 @@ change_to_use_tmp_fields(THD *thd, Item **ref_pointer_array, item_field->name= sql_strmake(str.ptr(),str.length()); } #endif - } - else - item_field= item; } + else + item_field= item; + res_all_fields.push_back(item_field); ref_pointer_array[((i < border)? all_fields.elements-i-1 : i-border)]= item_field; } List_iterator_fast itr(res_all_fields); - for (i= 0; i < border; i++) + for (uint i= 0; i < border; i++) itr++; itr.sublist(res_selected_fields, elements); - DBUG_RETURN(FALSE); + DBUG_RETURN(false); } From 9b6fe965033aab5eb20a4f2eefa482534b15c424 Mon Sep 17 00:00:00 2001 From: Sergey Petrunya Date: Wed, 31 Oct 2012 09:34:25 +0400 Subject: [PATCH 12/60] MDEV-772, MDEV-744: Fix test-table-elimination script to work. --- sql-bench/Makefile.am | 2 ++ sql-bench/test-table-elimination.sh | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/sql-bench/Makefile.am b/sql-bench/Makefile.am index 93f9a61d9d4..bb4c30b65fe 100644 --- a/sql-bench/Makefile.am +++ b/sql-bench/Makefile.am @@ -22,6 +22,7 @@ benchdir = $(benchdir_root)/sql-bench bench_SCRIPTS = test-ATIS test-connect test-create test-insert \ test-big-tables test-select test-wisconsin \ test-alter-table test-transactions \ + test-table-elimination \ graph-compare-results \ bench-init.pl compare-results run-all-tests \ server-cfg crash-me copy-db innotest1 innotest1a \ @@ -31,6 +32,7 @@ CLEANFILES = $(bench_SCRIPTS) EXTRA_SCRIPTS = test-ATIS.sh test-connect.sh test-create.sh \ test-insert.sh test-big-tables.sh test-select.sh \ test-alter-table.sh test-wisconsin.sh \ + test-table-elimination.sh \ test-transactions.sh \ bench-init.pl.sh compare-results.sh server-cfg.sh \ run-all-tests.sh crash-me.sh copy-db.sh \ diff --git a/sql-bench/test-table-elimination.sh b/sql-bench/test-table-elimination.sh index 0dcfe975486..5b494688bec 100755 --- a/sql-bench/test-table-elimination.sh +++ b/sql-bench/test-table-elimination.sh @@ -1,4 +1,3 @@ - #!@PERL@ # Test of table elimination feature @@ -93,7 +92,7 @@ $dbh->do("create view elim_current_facts as $select_current_full_facts"); if ($opt_lock_tables) { - do_query($dbh,"LOCK TABLES elim_facts, elim_attr1, elim_attr2 WRITE"); + do_query($dbh,"LOCK TABLES elim_current_facts WRITE, elim_facts WRITE, elim_attr1 WRITE, elim_attr2 WRITE"); } if ($opt_fast && defined($server->{vacuum})) @@ -200,12 +199,14 @@ if ($opt_lock_tables) if ($opt_fast && defined($server->{vacuum})) { - $server->vacuum(0,\$dbh,["elim_facts", "elim_attr1", "elim_attr2"]); + $server->vacuum(1,\$dbh,"elim_facts"); + $server->vacuum(1,\$dbh,"elim_attr1"); + $server->vacuum(1,\$dbh,"elim_attr2"); } if ($opt_lock_tables) { - do_query($dbh,"LOCK TABLES elim_facts, elim_attr1, elim_attr2 WRITE"); + do_query($dbh,"LOCK TABLES elim_current_facts READ, elim_facts READ, elim_attr1 READ, elim_attr2 READ"); } #### From d9a682adcfef7386da167a4b67613f588d6b0219 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 31 Oct 2012 23:04:53 +0200 Subject: [PATCH 13/60] Do not build pbxt. --- storage/pbxt/plug.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage/pbxt/plug.in b/storage/pbxt/plug.in index 2d79ad61b3a..57fa292303f 100644 --- a/storage/pbxt/plug.in +++ b/storage/pbxt/plug.in @@ -1,5 +1,5 @@ MYSQL_STORAGE_ENGINE(pbxt,no, [PBXT Storage Engine], - [MVCC-based transactional engine], [max,max-no-ndb]) + [MVCC-based transactional engine], []) MYSQL_PLUGIN_STATIC(pbxt, [src/libpbxt_s.la], [src/libpbxt_s_embedded.la]) MYSQL_PLUGIN_ACTIONS(pbxt, [ # AC_CONFIG_FILES(storage/pbxt/src/Makefile) From b7ae1194e235119a48975894992f71971de37e67 Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Wed, 31 Oct 2012 23:22:32 +0200 Subject: [PATCH 14/60] Fixed MDEV-647,LP:986261 - Aria unit tests fail at ma_test2 storage/maria/ma_test2.c: Problem was that rnd() generated bigger value than allocated array --- storage/maria/ma_test2.c | 65 ++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/storage/maria/ma_test2.c b/storage/maria/ma_test2.c index 6ab8cae2915..06ee45ead1a 100644 --- a/storage/maria/ma_test2.c +++ b/storage/maria/ma_test2.c @@ -50,7 +50,7 @@ static ulong pagecache_size=8192*32; static enum data_file_type record_type= DYNAMIC_RECORD; static uint keys=MARIA_KEYS,recant=1000; -static uint16 key1[1001],key3[5000]; +static uint16 key1[1001],key3[5001]; static uchar record[300],record2[300],key[100],key2[100]; static uchar read_record[300],read_record2[300],read_record3[300]; static HA_KEYSEG glob_keyseg[MARIA_KEYS][MAX_PARTS]; @@ -222,7 +222,7 @@ int main(int argc, char *argv[]) blob_buffer=0; for (i=1000 ; i>0 ; i--) key1[i]=0; - for (i=4999 ; i>0 ; i--) key3[i]=0; + for (i=5000 ; i>0 ; i--) key3[i]=0; if (!silent) printf("- Creating maria-file\n"); @@ -280,7 +280,7 @@ int main(int argc, char *argv[]) if (key3[n3] == 1 && first_key <3 && first_key+keys >= 3) { printf("Error: Didn't get error when writing second key: '%8d'\n",n3); - goto err; + goto err2; } write_count++; key1[n1]++; key3[n3]=1; } @@ -341,7 +341,7 @@ int main(int argc, char *argv[]) key, keyinfo[0].seg[0].length)) { printf("Found wrong record when searching for key: \"%s\"\n",key); - goto err; + goto err2; } if (opt_delete == (uint) remove_count) /* While testing */ goto end; @@ -394,7 +394,7 @@ int main(int argc, char *argv[]) printf("Found wrong record when searching for key: \"%s\"; Found \"%.*s\"\n", key, keyinfo[0].seg[0].length, read_record+keyinfo[0].seg[0].start); - goto err; + goto err2; } if (use_blob) { @@ -455,7 +455,7 @@ int main(int argc, char *argv[]) if (memcmp(read_record,read_record2,reclength) != 0) { printf("maria_rsame didn't find same record\n"); - goto err; + goto err2; } info.recpos=maria_position(file); if (maria_rfirst(file,read_record2,0) || @@ -463,7 +463,7 @@ int main(int argc, char *argv[]) memcmp(read_record,read_record2,reclength) != 0) { printf("maria_rsame_with_pos didn't find same record\n"); - goto err; + goto err2; } { int skr; @@ -484,7 +484,7 @@ int main(int argc, char *argv[]) if (ant != dupp_keys) { printf("next: Found: %d keys of %d\n",ant,dupp_keys); - goto err; + goto err2; } ant=0; while (maria_rprev(file,read_record3,0) == 0 && @@ -492,7 +492,7 @@ int main(int argc, char *argv[]) if (ant != dupp_keys) { printf("prev: Found: %d records of %d\n",ant,dupp_keys); - goto err; + goto err2; } /* Check of maria_rnext_same */ @@ -504,7 +504,7 @@ int main(int argc, char *argv[]) if (ant != dupp_keys || my_errno != HA_ERR_END_OF_FILE) { printf("maria_rnext_same: Found: %d records of %d\n",ant,dupp_keys); - goto err; + goto err2; } } @@ -531,7 +531,7 @@ int main(int argc, char *argv[]) printf("Can't find last record\n"); DBUG_DUMP("record2", read_record2, reclength); DBUG_DUMP("record3", read_record3, reclength); - goto err; + goto err2; } ant=1; while (maria_rprev(file,read_record3,0) == 0 && ant < write_count+10) @@ -539,12 +539,12 @@ int main(int argc, char *argv[]) if (ant != write_count - opt_delete) { printf("prev: I found: %d records of %d\n",ant,write_count); - goto err; + goto err2; } if (bcmp(read_record,read_record3,reclength)) { printf("Can't find first record\n"); - goto err; + goto err2; } if (!silent) @@ -585,7 +585,7 @@ int main(int argc, char *argv[]) if (bcmp(read_record+start,key,(uint) i)) { puts("Didn't find right record"); - goto err; + goto err2; } } #endif @@ -605,7 +605,7 @@ int main(int argc, char *argv[]) if (ant != dupp_keys-1) { printf("next: I can only find: %d keys of %d\n",ant,dupp_keys-1); - goto err; + goto err2; } } if (dupp_keys>4) @@ -623,7 +623,7 @@ int main(int argc, char *argv[]) if (ant != dupp_keys-2) { printf("next: I can only find: %d keys of %d\n",ant,dupp_keys-2); - goto err; + goto err2; } } if (dupp_keys > 6) @@ -643,7 +643,7 @@ int main(int argc, char *argv[]) if (ant != dupp_keys-3) { printf("next: I can only find: %d keys of %d\n",ant,dupp_keys-3); - goto err; + goto err2; } if (!silent) @@ -658,7 +658,7 @@ int main(int argc, char *argv[]) if (ant != dupp_keys-4) { printf("next: I can only find: %d keys of %d\n",ant,dupp_keys-4); - goto err; + goto err2; } } @@ -687,7 +687,7 @@ int main(int argc, char *argv[]) if (i != write_count && i != write_count - opt_delete) { printf("Found wrong number of rows while scanning table\n"); - goto err; + goto err2; } if (maria_rsame_with_pos(file,read_record,0,info.recpos)) @@ -695,7 +695,7 @@ int main(int argc, char *argv[]) if (bcmp(read_record,read_record2,reclength) != 0) { printf("maria_rsame_with_pos didn't find same record\n"); - goto err; + goto err2; } for (i=min(2,keys) ; i-- > 0 ;) @@ -704,7 +704,7 @@ int main(int argc, char *argv[]) if (bcmp(read_record,read_record2,reclength) != 0) { printf("maria_rsame didn't find same record\n"); - goto err; + goto err2; } } if (!silent) @@ -731,7 +731,7 @@ int main(int argc, char *argv[]) { printf("maria_records_range returned %ld; Should be about %ld\n", (long) range_records,(long) info.records); - goto err; + goto err2; } if (verbose) { @@ -768,7 +768,7 @@ int main(int argc, char *argv[]) { printf("maria_records_range for key: %d returned %lu; Should be about %lu\n", i, (ulong) range_records, (ulong) records); - goto err; + goto err2; } if (verbose && records) { @@ -783,13 +783,13 @@ int main(int argc, char *argv[]) if (!silent) printf("- maria_info\n"); maria_status(file,&info,HA_STATUS_VARIABLE | HA_STATUS_CONST); - if (info.records != write_count-opt_delete || info.deleted > opt_delete + update - || info.keys != keys) + if (info.records != write_count-opt_delete || + info.deleted > opt_delete + update || info.keys != keys) { puts("Wrong info from maria_info"); printf("Got: records: %lu delete: %lu i_keys: %d\n", (ulong) info.records, (ulong) info.deleted, info.keys); - goto err; + goto err2; } if (verbose) { @@ -828,7 +828,7 @@ int main(int argc, char *argv[]) printf("scan with cache: I can only find: %d records of %d\n", ant,write_count-opt_delete); maria_scan_end(file); - goto err; + goto err2; } if (maria_extra(file,HA_EXTRA_NO_CACHE,0)) { @@ -848,7 +848,7 @@ int main(int argc, char *argv[]) printf("scan with cache: I can only find: %d records of %d\n", ant,write_count-opt_delete); maria_scan_end(file); - goto err; + goto err2; } maria_scan_end(file); @@ -872,7 +872,7 @@ int main(int argc, char *argv[]) { printf("maria_rrnd didn't advance filepointer; old: %ld, new: %ld\n", (long) lastpos, (long) info.recpos); - goto err; + goto err2; } lastpos=info.recpos; if (error == 0) @@ -897,7 +897,7 @@ int main(int argc, char *argv[]) printf("Found blob with wrong info at %ld\n",(long) lastpos); maria_scan_end(file); my_errno= 0; - goto err; + goto err2; } } } @@ -920,7 +920,7 @@ int main(int argc, char *argv[]) printf("Deleted only %d of %d records (%d parts)\n",opt_delete,write_count, found_parts); maria_scan_end(file); - goto err; + goto err2; } if (testflag == 6) goto end; @@ -1021,10 +1021,11 @@ reads: %10lu\n", return(0); err: printf("got error: %d when using MARIA-database\n",my_errno); +err2: if (file) { if (maria_commit(file)) - goto err; + printf("got error: %d when using MARIA-database\n",my_errno); VOID(maria_close(file)); } maria_end(); From fb90c36284cab73c37355310bed33609fabf8aa2 Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Wed, 31 Oct 2012 23:49:51 +0200 Subject: [PATCH 15/60] Fixed MDEV-612, LP:1010759 - Valgrind error ha_maria::check_if_incompatible_data on mysql-test/r/partition.result: Added test case mysql-test/t/partition.test: Added test case sql/ha_partition.cc: Removed printing of not initialized variable storage/maria/ha_maria.cc: Don't copy variables that are not initialized --- mysql-test/r/partition.result | 6 ++++++ mysql-test/t/partition.test | 8 ++++++++ sql/ha_partition.cc | 4 ++-- storage/maria/ha_maria.cc | 7 ++++--- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result index 49fe208d9bd..316921a5814 100644 --- a/mysql-test/r/partition.result +++ b/mysql-test/r/partition.result @@ -2246,4 +2246,10 @@ HAVING b > geomfromtext("") ); 1 DROP TABLE t1; + +MDEV-612 Valgrind error in ha_maria::check_if_incompatible_data + +CREATE TABLE t1 (a INT, b INT, KEY(a)) ENGINE=Aria PARTITION BY KEY(a) PARTITIONS 2; +ALTER TABLE t1 ADD KEY (b); +drop table t1; End of 5.1 tests diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test index 831271c68bb..66dea7340b5 100644 --- a/mysql-test/t/partition.test +++ b/mysql-test/t/partition.test @@ -2267,4 +2267,12 @@ SELECT 1 FROM t1 WHERE b < SOME DROP TABLE t1; +--echo +--echo MDEV-612 Valgrind error in ha_maria::check_if_incompatible_data +--echo + +CREATE TABLE t1 (a INT, b INT, KEY(a)) ENGINE=Aria PARTITION BY KEY(a) PARTITIONS 2; +ALTER TABLE t1 ADD KEY (b); +drop table t1; + --echo End of 5.1 tests diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 9d6e82b0356..aafa2448d85 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -4347,8 +4347,8 @@ int ha_partition::common_index_read(uchar *buf, bool have_start_key) DBUG_ENTER("ha_partition::common_index_read"); LINT_INIT(key_len); /* used if have_start_key==TRUE */ - DBUG_PRINT("info", ("m_ordered %u m_ordered_scan_ong %u have_start_key %u", - m_ordered, m_ordered_scan_ongoing, have_start_key)); + DBUG_PRINT("info", ("m_ordered: %u have_start_key: %u", + m_ordered, have_start_key)); if (have_start_key) { diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc index 09df4c9e03b..8b1fe4d05b3 100644 --- a/storage/maria/ha_maria.cc +++ b/storage/maria/ha_maria.cc @@ -2343,9 +2343,10 @@ int ha_maria::info(uint flag, my_bool lock_table_share) errkey= maria_info.errkey; my_store_ptr(dup_ref, ref_length, maria_info.dup_key_pos); } - /* Faster to always update, than to do it based on flag */ - stats.update_time= maria_info.update_time; - stats.auto_increment_value= maria_info.auto_increment; + if (flag & HA_STATUS_TIME) + stats.update_time= maria_info.update_time; + if (flag & HA_STATUS_AUTO) + stats.auto_increment_value= maria_info.auto_increment; return 0; } From ee052c3e14e5ece64c1fbc79bf1abb06d7483c0d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 1 Nov 2012 00:06:09 +0200 Subject: [PATCH 16/60] Fix of non-deterministic results. --- mysql-test/r/user_var.result | 4 ++-- mysql-test/t/user_var.test | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result index fbbe6d1839e..0f79e30bfd1 100644 --- a/mysql-test/r/user_var.result +++ b/mysql-test/r/user_var.result @@ -348,10 +348,10 @@ select @a:=f3, count(f3) from t1 group by 1 desc; 1.5 4 select @a:=f4, count(f4) from t1 group by 1 desc; @a:=f4 count(f4) -1.6 4 +1.6 1 1.6 1 1.6 2 -1.6 1 +1.6 4 drop table t1; create table t1 (f1 int); insert into t1 values (2), (1); diff --git a/mysql-test/t/user_var.test b/mysql-test/t/user_var.test index 4e45a4ecbc5..d902563647e 100644 --- a/mysql-test/t/user_var.test +++ b/mysql-test/t/user_var.test @@ -235,6 +235,7 @@ select @a:=f1, count(f1) from t1 group by 1 desc; select @a:=f1, count(f1) from t1 group by 1 asc; select @a:=f2, count(f2) from t1 group by 1 desc; select @a:=f3, count(f3) from t1 group by 1 desc; +--sorted_result select @a:=f4, count(f4) from t1 group by 1 desc; drop table t1; From 1d812468d588580b4f5f44d1ecd30c77cb2758b0 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 1 Nov 2012 15:16:42 +0100 Subject: [PATCH 17/60] Updated with changes from Percona Server 5.1.66-rel14.1 tarball. --- CMakeLists.txt | 2 +- ChangeLog | 212 +- Makefile.am | 3 +- Makefile.in | 1546 +++++++------- btr/btr0btr.c | 314 ++- btr/btr0cur.c | 403 ++-- btr/btr0pcur.c | 73 +- btr/btr0sea.c | 262 ++- buf/buf0buddy.c | 2 +- buf/buf0buf.c | 324 +-- buf/buf0lru.c | 149 +- dict/dict0boot.c | 225 +- dict/dict0crea.c | 4 +- dict/dict0dict.c | 110 +- dict/dict0load.c | 8 +- fil/fil0fil.c | 116 +- fsp/fsp0fsp.c | 444 ++-- ha/ha0ha.c | 69 +- handler/ha_innodb.cc | 373 +++- handler/ha_innodb.h | 2 + handler/handler0alter.cc | 18 +- handler/i_s.cc | 2227 ++++++++++++++++++-- handler/i_s.h | 5 +- handler/innodb_patch_info.h | 51 - ibuf/ibuf0ibuf.c | 105 +- include/btr0btr.h | 59 +- include/btr0btr.ic | 10 +- include/btr0cur.h | 84 +- include/btr0cur.ic | 29 +- include/btr0pcur.h | 8 - include/btr0pcur.ic | 32 - include/btr0sea.h | 34 +- include/btr0types.h | 25 +- include/buf0buf.h | 162 +- include/buf0buf.ic | 26 +- include/buf0lru.h | 11 +- include/db0err.h | 2 + include/dict0boot.h | 20 + include/dict0dict.h | 14 +- include/dict0dict.ic | 21 +- include/dict0mem.h | 10 +- include/fil0fil.h | 22 +- include/fsp0fsp.h | 44 +- include/ha0ha.h | 23 +- include/ha0ha.ic | 54 +- include/log0log.h | 14 +- include/log0online.h | 111 + include/log0recv.h | 37 + include/mem0mem.ic | 4 - include/mtr0mtr.h | 17 +- include/mtr0mtr.ic | 7 +- include/os0file.h | 8 + include/os0sync.h | 28 +- include/page0page.h | 15 +- include/page0page.ic | 6 +- include/row0upd.ic | 6 - include/srv0srv.h | 26 + include/sync0rw.h | 3 +- include/sync0rw.ic | 5 +- include/sync0sync.h | 10 +- include/trx0purge.h | 4 +- include/trx0rec.ic | 7 +- include/trx0rseg.ic | 9 +- include/trx0sys.h | 6 + include/trx0undo.h | 57 +- include/univ.i | 37 +- include/ut0mem.h | 31 +- include/ut0rbt.h | 23 + include/ut0rnd.ic | 2 +- lock/lock0lock.c | 14 +- log/log0log.c | 126 +- log/log0online.c | 1085 ++++++++++ log/log0recv.c | 8 +- mem/mem0pool.c | 6 +- mtr/mtr0mtr.c | 4 +- mysql-test/patches/information_schema.diff | 164 +- os/os0file.c | 26 +- os/os0proc.c | 3 - page/page0cur.c | 7 +- page/page0page.c | 55 +- plug.in | 37 +- row/row0ins.c | 111 +- row/row0merge.c | 49 +- row/row0mysql.c | 108 +- row/row0purge.c | 20 +- row/row0row.c | 29 +- row/row0sel.c | 28 +- row/row0upd.c | 61 +- row/row0vers.c | 12 - scripts/install_innodb_plugins.sql | 11 +- scripts/install_innodb_plugins_win.sql | 11 +- setup.sh | 2 +- srv/srv0srv.c | 56 +- srv/srv0start.c | 24 +- sync/sync0arr.c | 5 + sync/sync0rw.c | 7 + sync/sync0sync.c | 37 +- trx/trx0purge.c | 4 +- trx/trx0rec.c | 105 +- trx/trx0sys.c | 42 +- trx/trx0trx.c | 2 + trx/trx0undo.c | 109 +- ut/ut0auxconf_atomic_pthread_t_gcc.c | 43 + ut/ut0auxconf_atomic_pthread_t_solaris.c | 54 + ut/ut0auxconf_have_gcc_atomics.c | 61 + ut/ut0auxconf_have_solaris_atomics.c | 39 + ut/ut0auxconf_pause.c | 32 + ut/ut0auxconf_sizeof_pthread_t.c | 35 + ut/ut0mem.c | 82 +- ut/ut0rbt.c | 26 +- 110 files changed, 7977 insertions(+), 2973 deletions(-) delete mode 100644 handler/innodb_patch_info.h create mode 100644 include/log0online.h create mode 100644 log/log0online.c create mode 100644 ut/ut0auxconf_atomic_pthread_t_gcc.c create mode 100644 ut/ut0auxconf_atomic_pthread_t_solaris.c create mode 100644 ut/ut0auxconf_have_gcc_atomics.c create mode 100644 ut/ut0auxconf_have_solaris_atomics.c create mode 100644 ut/ut0auxconf_pause.c create mode 100644 ut/ut0auxconf_sizeof_pthread_t.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 87318ceec78..b78ff401f08 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,7 +60,7 @@ SET(INNODB_PLUGIN_SOURCES btr/btr0btr.c btr/btr0cur.c btr/btr0pcur.c btr/btr0sea ibuf/ibuf0ibuf.c pars/lexyy.c pars/pars0grm.c pars/pars0opt.c pars/pars0pars.c pars/pars0sym.c lock/lock0lock.c lock/lock0iter.c - log/log0log.c log/log0recv.c + log/log0log.c log/log0recv.c log/log0online.c mach/mach0data.c mem/mem0mem.c mem/mem0pool.c mtr/mtr0log.c mtr/mtr0mtr.c diff --git a/ChangeLog b/ChangeLog index f873f3a24bd..4ef88e3bca1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,211 @@ +2012-08-29 The InnoDB Team + + * btr/btr0btr.c, page/page0cur.c, page/page0page.c: + Fix Bug#14554000 CRASH IN PAGE_REC_GET_NTH_CONST(NTH=0) + DURING COMPRESSED PAGE SPLIT + +2012-08-16 The InnoDB Team + + * btr/btr0cur.c: + Fix Bug#12595091 POSSIBLY INVALID ASSERTION IN + BTR_CUR_PESSIMISTIC_UPDATE() + +2012-08-16 The InnoDB Team + + * btr/btr0btr.c, btr/btr0cur.c: + Fix Bug#12845774 OPTIMISTIC INSERT/UPDATE USES WRONG HEURISTICS FOR + COMPRESSED PAGE SIZE + +2012-08-16 The InnoDB Team + + * btr/btr0cur.c, page/page0page.c: + Fix Bug#13523839 ASSERTION FAILURES ON COMPRESSED INNODB TABLES + +2012-08-07 The InnoDB Team + + * btr/btr0pcur.c, row/row0merge.c: + Fix Bug#14399148 INNODB TABLES UNDER LOAD PRODUCE DUPLICATE COPIES + OF ROWS IN QUERIES + +2012-03-15 The InnoDB Team + + * fil/fil0fil.c, ibuf/ibuf0ibuf.c, include/fil0fil.h, + lock/lock0lock.c: + Fix Bug#13825266 RACE IN LOCK_VALIDATE() WHEN ACCESSING PAGES + DIRECTLY FROM BUFFER POOL + +2012-03-15 The InnoDB Team + + * handler/ha_innodb.cc: + Fix Bug#13851171STRING OVERFLOW IN INNODB CODE FOUND BY STATIC + ANALYSIS + +2012-03-15 The InnoDB Team + + * include/sync0rw.ic: + Fix Bug#13537504 VALGRIND: COND. JUMP/MOVE DEPENDS ON + UNINITIALISED VALUES IN OS_THREAD_EQ + +2012-03-08 The InnoDB Team + + * btr/btr0pcur.c: + Fix Bug#13807811 BTR_PCUR_RESTORE_POSITION() CAN SKIP A RECORD + +2012-02-28 The InnoDB Team + + * btr/btr0btr.c, dict/dict0dict.c, include/btr0btr.h, + include/dict0dict.h, include/dict0dict.ic, include/dict0mem.h, + handler/handler0alter.cc, row/row0mysql.c: + Fix Bug#12861864 RACE CONDITION IN BTR_GET_SIZE() AND + DROP INDEX/TABLE/DATABASE + +2012-02-15 The InnoDB Team + + * btr/btr0btr.c, btr/btr0cur.c, fsp/fsp0fsp.c, ibuf/ibuf0ibuf.c, + include/btr0btr.h, include/btr0cur.h, include/btr0cur.ic, + include/buf0buf.h, include/buf0buf.ic, include/fsp0fsp.h, + include/mtr0mtr.h, include/mtr0mtr.ic, include/page0page.h, + include/page0page.ic, include/trx0rec.ic, include/trx0undo.h, + mtr/mtr0mtr.c, page/page0cur.c, page/page0page.c, row/row0ins.c, + row/row0row.c, row/row0upd.c, trx/trx0rec.c, trx/trx0sys.c, + trx/trx0undo.c: + Fix Bug#13721257 RACE CONDITION IN UPDATES OR INSERTS OF WIDE RECORDS + +2012-02-06 The InnoDB Team + + * handler/ha_innodb.cc: + Fix Bug#11754376 45976: INNODB LOST FILES FOR TEMPORARY TABLES ON + GRACEFUL SHUTDOWN + +2012-01-30 The InnoDB Team + + * fil/fil0fil.c: + Fix Bug#13636122 THE ORIGINAL TABLE MISSING WHILE EXECUTE THE + DDL 'ALTER TABLE ADD COLUMN' + +2012-01-16 The InnoDB Team + + * ibuf/ibuf0ibuf.c: + Fix Bug#13496818 ASSERTION: REC_PAGE_NO > 4 IN IBUF CONTRACTION + +2012-01-16 The InnoDB Team + + * handler/ha_innodb.cc: + Fix Bug#11765438: 58406: ISSUES WITH COPYING PARTITIONED INNODB + TABLES FROM LINUX TO WINDOWS + +2012-01-04 The InnoDB Team + + * row/row0mysql.c: + Fix Bug#12400341: INNODB CAN LEAVE ORPHAN IBD FILES AROUND + +2011-12-22 The InnoDB Team + + * row/row0sel.c: + Fix Bug#63775 Server crash on handler read next after delete record. +2011-12-21 The InnoDB Team + + * include/ut0rnd.ic: + Fix Bug#11866367:FPE WHEN SETTING INNODB_SPIN_WAIT_DELAY + +2011-12-13 The InnoDB Team + + * handler/ha_innodb.cc, innodb.test, innodb.result: + Fix Bug#13117023: InnoDB was incrementing the handler_read_key, + also the SSV::ha_read_key_count, at the wrong place. + +2011-12-10 The InnoDB Team + + * include/page0page.h, page/page0page.c: + Fix Bug#13418887 ERROR IN DIAGNOSTIC FUNCTION PAGE_REC_PRINT() + +2011-11-10 The InnoDB Team + + * handler/ha_innodb.cc, row/row0ins.c, innodb_replace.test: + Fix Bug#11759688 52020: InnoDB can still deadlock + on just INSERT...ON DUPLICATE KEY a.k.a. the reintroduction of + Bug#7975 deadlock without any locking, simple select and update + +2011-11-08 The InnoDB Team + + * btr/btr0pcur.c, include/btr0pcur.h, include/btr0pcur.ic: + Fix Bug#13358468 ASSERTION FAILURE IN BTR_PCUR_GET_BLOCK + +2011-10-27 The InnoDB Team + + * row/row0mysql.c: + Fix Bug #12884631 62146: TABLES ARE LOST FOR DDL + +2011-10-25 The InnoDB Team + + * handler/ha_innodb.cc, row/row0ins.c: + Fix Bug#13002783 PARTIALLY UNINITIALIZED CASCADE UPDATE VECTOR + +2011-10-20 The InnoDB Team + + * btr/btr0cur.c: + Fix Bug#13116045 Compilation failure using GCC 4.6.1 in btr/btr0cur.c + +2011-10-12 The InnoDB Team + + * btr/btr0cur.c, btr/btr0sea.c, buf/buf0buf.c, buf/buf0lru.c, + ha/ha0ha.c, handler/ha_innodb.cc, ibuf/ibuf0ibuf.c, include/btr0sea.h, + include/btr0types.h, include/buf0buf.h, include/ha0ha.h, + include/ha0ha.ic, include/row0upd.ic, include/sync0sync.h, + page/page0page.c, sync/sync0sync.c: + Fix Bug#13006367 62487: innodb takes 3 minutes to clean up + the adaptive hash index at shutdown + +2011-10-04 The InnoDB Team + + * include/sync0rw.h, sync/sync0rw.c: + Fix Bug#13034534 RQG TESTS FAIL ON WINDOWS WITH CRASH NEAR + RW_LOCK_DEBUG_PRINT + +2011-09-20 The InnoDB Team + + * row/row0purge.c: + Fix Bug#12963823 CRASH IN PURGE THREAD UNDER UNUSUAL CIRCUMSTANCES + +2011-09-12 The InnoDB Team + + * row/row0sel.c: + Fix Bug#12601439 CONSISTENT READ FAILURE IN COLUMN PREFIX INDEX + +2011-09-08 The InnoDB Team + + * btr/btr0cur.c, include/page0page.h, include/row0upd.ic: + Fix Bug#12948130 UNNECESSARY X-LOCKING OF ADAPTIVE HASH INDEX + +2011-09-06 The InnoDB Team + + * buf/buf0buddy.c: + Fix Bug#12950803 62294: BUF_BUDDY_RELOCATE CALLS GETTIMEOFDAY + WHILE HOLDING BUFFER POOL MUTEX + +2011-09-06 The InnoDB Team + + * include/trx0undo.h, trx/trx0rec.c, trx/trx0undo.c: + Fix Bug#12547647 UPDATE LOGGING COULD EXCEED LOG PAGE SIZE + +2011-08-29 The InnoDB Team + + * btr/btr0btr.c, btr/btr0cur.c, fsp/fsp0fsp.c, + include/btr0btr.h, include/btr0cur.h, include/fsp0fsp.h, + include/mtr0mtr.h, include/mtr0mtr.ic, mtr/mtr0mtr.c, + row/row0ins.c, row/row0row.c, row/row0upd.c, trx/trx0undo.c: + Fix Bug#12704861 Corruption after a crash during BLOB update + and other regressions from the fix of Bug#12612184 + +2011-08-15 The InnoDB Team + + * btr/btr0btr.c, btr/btr0cur.c, btr/btr0pcur.c, btr/btr0sea.c, + dict/dict0crea.c, dict/dict0dict.c, ibuf/ibuf0ibuf.c, + include/btr0btr.h, include/btr0btr.ic, include/sync0sync.h, + sync/sync0sync.c: + Fix Bug#11766591 59733: Possible deadlock when buffered changes + are to be discarded in buf_page_create() + 2011-08-08 The InnoDB Team * row/row0sel.c: @@ -165,7 +373,7 @@ 2011-01-06 The InnoDB Team * dict/dict0dict.c, handler/ha_innodb.cc, handler/i_s.cc, - include/univ.i: + include/univ.i: Fix Bug#58643 InnoDB: too long table name 2011-01-06 The InnoDB Team @@ -431,7 +639,7 @@ * handler/ha_innodb.cc, include/row0mysql.h, row/row0mysql.c: Fix Bug#53592: crash replacing duplicates into table after fast - alter table added unique key + alter table added unique key 2010-05-24 The InnoDB Team diff --git a/Makefile.am b/Makefile.am index c73eb3d4f47..93efaaaf3f1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -101,6 +101,7 @@ noinst_HEADERS= \ include/lock0types.h \ include/log0log.h \ include/log0log.ic \ + include/log0online.h \ include/log0recv.h \ include/log0recv.ic \ include/mach0data.h \ @@ -226,7 +227,6 @@ noinst_HEADERS= \ include/ut0vec.h \ include/ut0vec.ic \ include/ut0wqueue.h \ - handler/innodb_patch_info.h \ mem/mem0dbg.c EXTRA_LIBRARIES= libinnobase.a @@ -266,6 +266,7 @@ libinnobase_a_SOURCES= \ lock/lock0iter.c \ lock/lock0lock.c \ log/log0log.c \ + log/log0online.c \ log/log0recv.c \ mach/mach0data.c \ mem/mem0mem.c \ diff --git a/Makefile.in b/Makefile.in index df13d3c23f6..122c58326ec 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,8 +1,8 @@ -# Makefile.in generated by automake 1.10.2 from Makefile.am. +# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -33,11 +33,15 @@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -110,6 +114,7 @@ am_libinnobase_a_OBJECTS = libinnobase_a-btr0btr.$(OBJEXT) \ libinnobase_a-lock0iter.$(OBJEXT) \ libinnobase_a-lock0lock.$(OBJEXT) \ libinnobase_a-log0log.$(OBJEXT) \ + libinnobase_a-log0online.$(OBJEXT) \ libinnobase_a-log0recv.$(OBJEXT) \ libinnobase_a-mach0data.$(OBJEXT) \ libinnobase_a-mem0mem.$(OBJEXT) \ @@ -200,7 +205,9 @@ am__objects_1 = ha_innodb_plugin_la-btr0btr.lo \ ha_innodb_plugin_la-ibuf0ibuf.lo \ ha_innodb_plugin_la-lock0iter.lo \ ha_innodb_plugin_la-lock0lock.lo \ - ha_innodb_plugin_la-log0log.lo ha_innodb_plugin_la-log0recv.lo \ + ha_innodb_plugin_la-log0log.lo \ + ha_innodb_plugin_la-log0online.lo \ + ha_innodb_plugin_la-log0recv.lo \ ha_innodb_plugin_la-mach0data.lo \ ha_innodb_plugin_la-mem0mem.lo ha_innodb_plugin_la-mem0pool.lo \ ha_innodb_plugin_la-mtr0log.lo ha_innodb_plugin_la-mtr0mtr.lo \ @@ -241,31 +248,25 @@ am__objects_1 = ha_innodb_plugin_la-btr0btr.lo \ ha_innodb_plugin_la-ut0vec.lo ha_innodb_plugin_la-ut0wqueue.lo am_ha_innodb_plugin_la_OBJECTS = $(am__objects_1) ha_innodb_plugin_la_OBJECTS = $(am_ha_innodb_plugin_la_OBJECTS) -ha_innodb_plugin_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ - $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) \ - $(ha_innodb_plugin_la_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ +CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libinnobase_a_SOURCES) $(ha_innodb_plugin_la_SOURCES) DIST_SOURCES = $(libinnobase_a_SOURCES) $(ha_innodb_plugin_la_SOURCES) HEADERS = $(noinst_HEADERS) @@ -275,6 +276,8 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ABI_CHECK = @ABI_CHECK@ ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AM_CFLAGS = @AM_CFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ @@ -282,14 +285,23 @@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ ASFLAGS = @ASFLAGS@ +ASSEMBLER_FALSE = @ASSEMBLER_FALSE@ +ASSEMBLER_TRUE = @ASSEMBLER_TRUE@ +ASSEMBLER_sparc32_FALSE = @ASSEMBLER_sparc32_FALSE@ +ASSEMBLER_sparc32_TRUE = @ASSEMBLER_sparc32_TRUE@ +ASSEMBLER_sparc64_FALSE = @ASSEMBLER_sparc64_FALSE@ +ASSEMBLER_sparc64_TRUE = @ASSEMBLER_sparc64_TRUE@ +ASSEMBLER_x86_FALSE = @ASSEMBLER_x86_FALSE@ +ASSEMBLER_x86_TRUE = @ASSEMBLER_x86_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AVAILABLE_LANGUAGES = @AVAILABLE_LANGUAGES@ AWK = @AWK@ +BUILD_INNODB_TOOLS_FALSE = @BUILD_INNODB_TOOLS_FALSE@ +BUILD_INNODB_TOOLS_TRUE = @BUILD_INNODB_TOOLS_TRUE@ CC = @CC@ CCAS = @CCAS@ -CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ @@ -312,27 +324,33 @@ CXXFLAGS = @CXXFLAGS@ CXXLDFLAGS = @CXXLDFLAGS@ CXX_VERSION = @CXX_VERSION@ CYGPATH_W = @CYGPATH_W@ +DARWIN_MWCC_FALSE = @DARWIN_MWCC_FALSE@ +DARWIN_MWCC_TRUE = @DARWIN_MWCC_TRUE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIFF = @DIFF@ DOT_FRM_VERSION = @DOT_FRM_VERSION@ DOXYGEN = @DOXYGEN@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ DVIS = @DVIS@ +ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -FGREP = @FGREP@ +F77 = @F77@ +FFLAGS = @FFLAGS@ FIND_PROC = @FIND_PROC@ GETCONF = @GETCONF@ -GREP = @GREP@ GXX = @GXX@ +HAVE_AM_YACC_C2H_FALSE = @HAVE_AM_YACC_C2H_FALSE@ +HAVE_AM_YACC_C2H_TRUE = @HAVE_AM_YACC_C2H_TRUE@ +HAVE_NETWARE_FALSE = @HAVE_NETWARE_FALSE@ +HAVE_NETWARE_TRUE = @HAVE_NETWARE_TRUE@ +HAVE_YASSL_FALSE = @HAVE_YASSL_FALSE@ +HAVE_YASSL_TRUE = @HAVE_YASSL_TRUE@ HOSTNAME = @HOSTNAME@ INNODB_DYNAMIC_CFLAGS = @INNODB_DYNAMIC_CFLAGS@ -INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -347,7 +365,6 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_EXTRA_CCFLAGS = @LIB_EXTRA_CCFLAGS@ -LIPO = @LIPO@ LM_CFLAGS = @LM_CFLAGS@ LN = @LN@ LN_CP_F = @LN_CP_F@ @@ -358,7 +375,6 @@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ MAKE_BINARY_DISTRIBUTION_OPTIONS = @MAKE_BINARY_DISTRIBUTION_OPTIONS@ MAKE_SHELL = @MAKE_SHELL@ -MKDIR_P = @MKDIR_P@ MV = @MV@ MYSQLD_DEFAULT_SWITCHES = @MYSQLD_DEFAULT_SWITCHES@ MYSQLD_EXTRA_LDFLAGS = @MYSQLD_EXTRA_LDFLAGS@ @@ -390,14 +406,12 @@ NDB_VERSION_BUILD = @NDB_VERSION_BUILD@ NDB_VERSION_MAJOR = @NDB_VERSION_MAJOR@ NDB_VERSION_MINOR = @NDB_VERSION_MINOR@ NDB_VERSION_STATUS = @NDB_VERSION_STATUS@ +NEED_THREAD_FALSE = @NEED_THREAD_FALSE@ +NEED_THREAD_TRUE = @NEED_THREAD_TRUE@ NM = @NM@ -NMEDIT = @NMEDIT@ NOINST_LDFLAGS = @NOINST_LDFLAGS@ NON_THREADED_LIBS = @NON_THREADED_LIBS@ -OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ @@ -433,19 +447,26 @@ TARGET_LINUX = @TARGET_LINUX@ TERMCAP_LIB = @TERMCAP_LIB@ TEST_NDBCLUSTER = @TEST_NDBCLUSTER@ THREAD_LOBJECTS = @THREAD_LOBJECTS@ +THREAD_SAFE_CLIENT_FALSE = @THREAD_SAFE_CLIENT_FALSE@ +THREAD_SAFE_CLIENT_TRUE = @THREAD_SAFE_CLIENT_TRUE@ VERSION = @VERSION@ WRAPLIBS = @WRAPLIBS@ YACC = @YACC@ ZLIB_DEPS = @ZLIB_DEPS@ ZLIB_INCLUDES = @ZLIB_INCLUDES@ ZLIB_LIBS = @ZLIB_LIBS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_GETCONF = @ac_ct_GETCONF@ +ac_ct_NM = @ac_ct_NM@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -457,16 +478,12 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ -builddir = @builddir@ condition_dependent_plugin_includes = @condition_dependent_plugin_includes@ condition_dependent_plugin_links = @condition_dependent_plugin_links@ condition_dependent_plugin_modules = @condition_dependent_plugin_modules@ condition_dependent_plugin_objects = @condition_dependent_plugin_objects@ datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ docs_dirs = @docs_dirs@ -dvidir = @dvidir@ exec_prefix = @exec_prefix@ extra_docs = @extra_docs@ host = @host@ @@ -474,7 +491,6 @@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ -htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ innodb_system_libs = @innodb_system_libs@ @@ -482,9 +498,7 @@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libmysqld_dirs = @libmysqld_dirs@ -localedir = @localedir@ localstatedir = @localstatedir@ -lt_ECHO = @lt_ECHO@ man1_files = @man1_files@ man8_files = @man8_files@ man_dirs = @man_dirs@ @@ -512,7 +526,6 @@ netware_dir = @netware_dir@ oldincludedir = @oldincludedir@ openssl_includes = @openssl_includes@ openssl_libs = @openssl_libs@ -pdfdir = @pdfdir@ plugin_archive_shared_target = @plugin_archive_shared_target@ plugin_archive_static_target = @plugin_archive_static_target@ plugin_blackhole_shared_target = @plugin_blackhole_shared_target@ @@ -543,7 +556,6 @@ plugin_partition_shared_target = @plugin_partition_shared_target@ plugin_partition_static_target = @plugin_partition_static_target@ prefix = @prefix@ program_transform_name = @program_transform_name@ -psdir = @psdir@ readline_basedir = @readline_basedir@ readline_dir = @readline_dir@ readline_h_ln_cmd = @readline_h_ln_cmd@ @@ -556,7 +568,6 @@ sql_client_dirs = @sql_client_dirs@ sql_server = @sql_server@ sql_server_dirs = @sql_server_dirs@ sql_union_dirs = @sql_union_dirs@ -srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ @@ -564,9 +575,6 @@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ tools_dirs = @tools_dirs@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ uname_prog = @uname_prog@ yassl_dir = @yassl_dir@ yassl_h_ln_cmd = @yassl_h_ln_cmd@ @@ -657,6 +665,7 @@ noinst_HEADERS = \ include/lock0types.h \ include/log0log.h \ include/log0log.ic \ + include/log0online.h \ include/log0recv.h \ include/log0recv.ic \ include/mach0data.h \ @@ -821,6 +830,7 @@ libinnobase_a_SOURCES = \ lock/lock0iter.c \ lock/lock0lock.c \ log/log0log.c \ + log/log0online.c \ log/log0recv.c \ mach/mach0data.c \ mem/mem0mem.c \ @@ -901,8 +911,8 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ exit 1;; \ esac; \ done; \ @@ -935,21 +945,21 @@ libinnobase.a: $(libinnobase_a_OBJECTS) $(libinnobase_a_DEPENDENCIES) $(RANLIB) libinnobase.a install-pkgpluginLTLIBRARIES: $(pkgplugin_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(pkgplugindir)" || $(MKDIR_P) "$(DESTDIR)$(pkgplugindir)" + test -z "$(pkgplugindir)" || $(mkdir_p) "$(DESTDIR)$(pkgplugindir)" @list='$(pkgplugin_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkgpluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkgplugindir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(pkgpluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkgplugindir)/$$f"; \ + echo " $(LIBTOOL) --mode=install $(pkgpluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(pkgplugindir)/$$f'"; \ + $(LIBTOOL) --mode=install $(pkgpluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(pkgplugindir)/$$f"; \ else :; fi; \ done uninstall-pkgpluginLTLIBRARIES: @$(NORMAL_UNINSTALL) - @list='$(pkgplugin_LTLIBRARIES)'; for p in $$list; do \ + @set -x; list='$(pkgplugin_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgplugindir)/$$p'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgplugindir)/$$p"; \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(pkgplugindir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(pkgplugindir)/$$p"; \ done clean-pkgpluginLTLIBRARIES: @@ -961,7 +971,7 @@ clean-pkgpluginLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done ha_innodb_plugin.la: $(ha_innodb_plugin_la_OBJECTS) $(ha_innodb_plugin_la_DEPENDENCIES) - $(ha_innodb_plugin_la_LINK) $(ha_innodb_plugin_la_OBJECTS) $(ha_innodb_plugin_la_LIBADD) $(LIBS) + $(CXXLINK) $(ha_innodb_plugin_la_LDFLAGS) $(ha_innodb_plugin_la_OBJECTS) $(ha_innodb_plugin_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -1003,6 +1013,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ha_innodb_plugin_la-lock0iter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ha_innodb_plugin_la-lock0lock.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ha_innodb_plugin_la-log0log.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ha_innodb_plugin_la-log0online.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ha_innodb_plugin_la-log0recv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ha_innodb_plugin_la-mach0data.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ha_innodb_plugin_la-mem0mem.Plo@am__quote@ @@ -1096,6 +1107,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinnobase_a-lock0iter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinnobase_a-lock0lock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinnobase_a-log0log.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinnobase_a-log0online.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinnobase_a-log0recv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinnobase_a-mach0data.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinnobase_a-mem0mem.Po@am__quote@ @@ -1157,1999 +1169,2020 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libinnobase_a-ut0wqueue.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< libinnobase_a-btr0btr.o: btr/btr0btr.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0btr.o -MD -MP -MF $(DEPDIR)/libinnobase_a-btr0btr.Tpo -c -o libinnobase_a-btr0btr.o `test -f 'btr/btr0btr.c' || echo '$(srcdir)/'`btr/btr0btr.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-btr0btr.Tpo $(DEPDIR)/libinnobase_a-btr0btr.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0btr.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-btr0btr.Tpo" -c -o libinnobase_a-btr0btr.o `test -f 'btr/btr0btr.c' || echo '$(srcdir)/'`btr/btr0btr.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-btr0btr.Tpo" "$(DEPDIR)/libinnobase_a-btr0btr.Po"; else rm -f "$(DEPDIR)/libinnobase_a-btr0btr.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0btr.c' object='libinnobase_a-btr0btr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-btr0btr.o `test -f 'btr/btr0btr.c' || echo '$(srcdir)/'`btr/btr0btr.c libinnobase_a-btr0btr.obj: btr/btr0btr.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0btr.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-btr0btr.Tpo -c -o libinnobase_a-btr0btr.obj `if test -f 'btr/btr0btr.c'; then $(CYGPATH_W) 'btr/btr0btr.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0btr.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-btr0btr.Tpo $(DEPDIR)/libinnobase_a-btr0btr.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0btr.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-btr0btr.Tpo" -c -o libinnobase_a-btr0btr.obj `if test -f 'btr/btr0btr.c'; then $(CYGPATH_W) 'btr/btr0btr.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0btr.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-btr0btr.Tpo" "$(DEPDIR)/libinnobase_a-btr0btr.Po"; else rm -f "$(DEPDIR)/libinnobase_a-btr0btr.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0btr.c' object='libinnobase_a-btr0btr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-btr0btr.obj `if test -f 'btr/btr0btr.c'; then $(CYGPATH_W) 'btr/btr0btr.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0btr.c'; fi` libinnobase_a-btr0cur.o: btr/btr0cur.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0cur.o -MD -MP -MF $(DEPDIR)/libinnobase_a-btr0cur.Tpo -c -o libinnobase_a-btr0cur.o `test -f 'btr/btr0cur.c' || echo '$(srcdir)/'`btr/btr0cur.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-btr0cur.Tpo $(DEPDIR)/libinnobase_a-btr0cur.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0cur.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-btr0cur.Tpo" -c -o libinnobase_a-btr0cur.o `test -f 'btr/btr0cur.c' || echo '$(srcdir)/'`btr/btr0cur.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-btr0cur.Tpo" "$(DEPDIR)/libinnobase_a-btr0cur.Po"; else rm -f "$(DEPDIR)/libinnobase_a-btr0cur.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0cur.c' object='libinnobase_a-btr0cur.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-btr0cur.o `test -f 'btr/btr0cur.c' || echo '$(srcdir)/'`btr/btr0cur.c libinnobase_a-btr0cur.obj: btr/btr0cur.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0cur.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-btr0cur.Tpo -c -o libinnobase_a-btr0cur.obj `if test -f 'btr/btr0cur.c'; then $(CYGPATH_W) 'btr/btr0cur.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0cur.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-btr0cur.Tpo $(DEPDIR)/libinnobase_a-btr0cur.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0cur.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-btr0cur.Tpo" -c -o libinnobase_a-btr0cur.obj `if test -f 'btr/btr0cur.c'; then $(CYGPATH_W) 'btr/btr0cur.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0cur.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-btr0cur.Tpo" "$(DEPDIR)/libinnobase_a-btr0cur.Po"; else rm -f "$(DEPDIR)/libinnobase_a-btr0cur.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0cur.c' object='libinnobase_a-btr0cur.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-btr0cur.obj `if test -f 'btr/btr0cur.c'; then $(CYGPATH_W) 'btr/btr0cur.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0cur.c'; fi` libinnobase_a-btr0pcur.o: btr/btr0pcur.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0pcur.o -MD -MP -MF $(DEPDIR)/libinnobase_a-btr0pcur.Tpo -c -o libinnobase_a-btr0pcur.o `test -f 'btr/btr0pcur.c' || echo '$(srcdir)/'`btr/btr0pcur.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-btr0pcur.Tpo $(DEPDIR)/libinnobase_a-btr0pcur.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0pcur.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-btr0pcur.Tpo" -c -o libinnobase_a-btr0pcur.o `test -f 'btr/btr0pcur.c' || echo '$(srcdir)/'`btr/btr0pcur.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-btr0pcur.Tpo" "$(DEPDIR)/libinnobase_a-btr0pcur.Po"; else rm -f "$(DEPDIR)/libinnobase_a-btr0pcur.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0pcur.c' object='libinnobase_a-btr0pcur.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-btr0pcur.o `test -f 'btr/btr0pcur.c' || echo '$(srcdir)/'`btr/btr0pcur.c libinnobase_a-btr0pcur.obj: btr/btr0pcur.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0pcur.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-btr0pcur.Tpo -c -o libinnobase_a-btr0pcur.obj `if test -f 'btr/btr0pcur.c'; then $(CYGPATH_W) 'btr/btr0pcur.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0pcur.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-btr0pcur.Tpo $(DEPDIR)/libinnobase_a-btr0pcur.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0pcur.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-btr0pcur.Tpo" -c -o libinnobase_a-btr0pcur.obj `if test -f 'btr/btr0pcur.c'; then $(CYGPATH_W) 'btr/btr0pcur.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0pcur.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-btr0pcur.Tpo" "$(DEPDIR)/libinnobase_a-btr0pcur.Po"; else rm -f "$(DEPDIR)/libinnobase_a-btr0pcur.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0pcur.c' object='libinnobase_a-btr0pcur.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-btr0pcur.obj `if test -f 'btr/btr0pcur.c'; then $(CYGPATH_W) 'btr/btr0pcur.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0pcur.c'; fi` libinnobase_a-btr0sea.o: btr/btr0sea.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0sea.o -MD -MP -MF $(DEPDIR)/libinnobase_a-btr0sea.Tpo -c -o libinnobase_a-btr0sea.o `test -f 'btr/btr0sea.c' || echo '$(srcdir)/'`btr/btr0sea.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-btr0sea.Tpo $(DEPDIR)/libinnobase_a-btr0sea.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0sea.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-btr0sea.Tpo" -c -o libinnobase_a-btr0sea.o `test -f 'btr/btr0sea.c' || echo '$(srcdir)/'`btr/btr0sea.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-btr0sea.Tpo" "$(DEPDIR)/libinnobase_a-btr0sea.Po"; else rm -f "$(DEPDIR)/libinnobase_a-btr0sea.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0sea.c' object='libinnobase_a-btr0sea.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-btr0sea.o `test -f 'btr/btr0sea.c' || echo '$(srcdir)/'`btr/btr0sea.c libinnobase_a-btr0sea.obj: btr/btr0sea.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0sea.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-btr0sea.Tpo -c -o libinnobase_a-btr0sea.obj `if test -f 'btr/btr0sea.c'; then $(CYGPATH_W) 'btr/btr0sea.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0sea.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-btr0sea.Tpo $(DEPDIR)/libinnobase_a-btr0sea.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-btr0sea.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-btr0sea.Tpo" -c -o libinnobase_a-btr0sea.obj `if test -f 'btr/btr0sea.c'; then $(CYGPATH_W) 'btr/btr0sea.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0sea.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-btr0sea.Tpo" "$(DEPDIR)/libinnobase_a-btr0sea.Po"; else rm -f "$(DEPDIR)/libinnobase_a-btr0sea.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0sea.c' object='libinnobase_a-btr0sea.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-btr0sea.obj `if test -f 'btr/btr0sea.c'; then $(CYGPATH_W) 'btr/btr0sea.c'; else $(CYGPATH_W) '$(srcdir)/btr/btr0sea.c'; fi` libinnobase_a-buf0buddy.o: buf/buf0buddy.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0buddy.o -MD -MP -MF $(DEPDIR)/libinnobase_a-buf0buddy.Tpo -c -o libinnobase_a-buf0buddy.o `test -f 'buf/buf0buddy.c' || echo '$(srcdir)/'`buf/buf0buddy.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-buf0buddy.Tpo $(DEPDIR)/libinnobase_a-buf0buddy.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0buddy.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-buf0buddy.Tpo" -c -o libinnobase_a-buf0buddy.o `test -f 'buf/buf0buddy.c' || echo '$(srcdir)/'`buf/buf0buddy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-buf0buddy.Tpo" "$(DEPDIR)/libinnobase_a-buf0buddy.Po"; else rm -f "$(DEPDIR)/libinnobase_a-buf0buddy.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0buddy.c' object='libinnobase_a-buf0buddy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-buf0buddy.o `test -f 'buf/buf0buddy.c' || echo '$(srcdir)/'`buf/buf0buddy.c libinnobase_a-buf0buddy.obj: buf/buf0buddy.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0buddy.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-buf0buddy.Tpo -c -o libinnobase_a-buf0buddy.obj `if test -f 'buf/buf0buddy.c'; then $(CYGPATH_W) 'buf/buf0buddy.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0buddy.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-buf0buddy.Tpo $(DEPDIR)/libinnobase_a-buf0buddy.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0buddy.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-buf0buddy.Tpo" -c -o libinnobase_a-buf0buddy.obj `if test -f 'buf/buf0buddy.c'; then $(CYGPATH_W) 'buf/buf0buddy.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0buddy.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-buf0buddy.Tpo" "$(DEPDIR)/libinnobase_a-buf0buddy.Po"; else rm -f "$(DEPDIR)/libinnobase_a-buf0buddy.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0buddy.c' object='libinnobase_a-buf0buddy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-buf0buddy.obj `if test -f 'buf/buf0buddy.c'; then $(CYGPATH_W) 'buf/buf0buddy.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0buddy.c'; fi` libinnobase_a-buf0buf.o: buf/buf0buf.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0buf.o -MD -MP -MF $(DEPDIR)/libinnobase_a-buf0buf.Tpo -c -o libinnobase_a-buf0buf.o `test -f 'buf/buf0buf.c' || echo '$(srcdir)/'`buf/buf0buf.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-buf0buf.Tpo $(DEPDIR)/libinnobase_a-buf0buf.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0buf.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-buf0buf.Tpo" -c -o libinnobase_a-buf0buf.o `test -f 'buf/buf0buf.c' || echo '$(srcdir)/'`buf/buf0buf.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-buf0buf.Tpo" "$(DEPDIR)/libinnobase_a-buf0buf.Po"; else rm -f "$(DEPDIR)/libinnobase_a-buf0buf.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0buf.c' object='libinnobase_a-buf0buf.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-buf0buf.o `test -f 'buf/buf0buf.c' || echo '$(srcdir)/'`buf/buf0buf.c libinnobase_a-buf0buf.obj: buf/buf0buf.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0buf.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-buf0buf.Tpo -c -o libinnobase_a-buf0buf.obj `if test -f 'buf/buf0buf.c'; then $(CYGPATH_W) 'buf/buf0buf.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0buf.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-buf0buf.Tpo $(DEPDIR)/libinnobase_a-buf0buf.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0buf.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-buf0buf.Tpo" -c -o libinnobase_a-buf0buf.obj `if test -f 'buf/buf0buf.c'; then $(CYGPATH_W) 'buf/buf0buf.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0buf.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-buf0buf.Tpo" "$(DEPDIR)/libinnobase_a-buf0buf.Po"; else rm -f "$(DEPDIR)/libinnobase_a-buf0buf.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0buf.c' object='libinnobase_a-buf0buf.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-buf0buf.obj `if test -f 'buf/buf0buf.c'; then $(CYGPATH_W) 'buf/buf0buf.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0buf.c'; fi` libinnobase_a-buf0flu.o: buf/buf0flu.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0flu.o -MD -MP -MF $(DEPDIR)/libinnobase_a-buf0flu.Tpo -c -o libinnobase_a-buf0flu.o `test -f 'buf/buf0flu.c' || echo '$(srcdir)/'`buf/buf0flu.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-buf0flu.Tpo $(DEPDIR)/libinnobase_a-buf0flu.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0flu.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-buf0flu.Tpo" -c -o libinnobase_a-buf0flu.o `test -f 'buf/buf0flu.c' || echo '$(srcdir)/'`buf/buf0flu.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-buf0flu.Tpo" "$(DEPDIR)/libinnobase_a-buf0flu.Po"; else rm -f "$(DEPDIR)/libinnobase_a-buf0flu.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0flu.c' object='libinnobase_a-buf0flu.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-buf0flu.o `test -f 'buf/buf0flu.c' || echo '$(srcdir)/'`buf/buf0flu.c libinnobase_a-buf0flu.obj: buf/buf0flu.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0flu.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-buf0flu.Tpo -c -o libinnobase_a-buf0flu.obj `if test -f 'buf/buf0flu.c'; then $(CYGPATH_W) 'buf/buf0flu.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0flu.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-buf0flu.Tpo $(DEPDIR)/libinnobase_a-buf0flu.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0flu.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-buf0flu.Tpo" -c -o libinnobase_a-buf0flu.obj `if test -f 'buf/buf0flu.c'; then $(CYGPATH_W) 'buf/buf0flu.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0flu.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-buf0flu.Tpo" "$(DEPDIR)/libinnobase_a-buf0flu.Po"; else rm -f "$(DEPDIR)/libinnobase_a-buf0flu.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0flu.c' object='libinnobase_a-buf0flu.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-buf0flu.obj `if test -f 'buf/buf0flu.c'; then $(CYGPATH_W) 'buf/buf0flu.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0flu.c'; fi` libinnobase_a-buf0lru.o: buf/buf0lru.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0lru.o -MD -MP -MF $(DEPDIR)/libinnobase_a-buf0lru.Tpo -c -o libinnobase_a-buf0lru.o `test -f 'buf/buf0lru.c' || echo '$(srcdir)/'`buf/buf0lru.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-buf0lru.Tpo $(DEPDIR)/libinnobase_a-buf0lru.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0lru.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-buf0lru.Tpo" -c -o libinnobase_a-buf0lru.o `test -f 'buf/buf0lru.c' || echo '$(srcdir)/'`buf/buf0lru.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-buf0lru.Tpo" "$(DEPDIR)/libinnobase_a-buf0lru.Po"; else rm -f "$(DEPDIR)/libinnobase_a-buf0lru.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0lru.c' object='libinnobase_a-buf0lru.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-buf0lru.o `test -f 'buf/buf0lru.c' || echo '$(srcdir)/'`buf/buf0lru.c libinnobase_a-buf0lru.obj: buf/buf0lru.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0lru.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-buf0lru.Tpo -c -o libinnobase_a-buf0lru.obj `if test -f 'buf/buf0lru.c'; then $(CYGPATH_W) 'buf/buf0lru.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0lru.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-buf0lru.Tpo $(DEPDIR)/libinnobase_a-buf0lru.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0lru.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-buf0lru.Tpo" -c -o libinnobase_a-buf0lru.obj `if test -f 'buf/buf0lru.c'; then $(CYGPATH_W) 'buf/buf0lru.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0lru.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-buf0lru.Tpo" "$(DEPDIR)/libinnobase_a-buf0lru.Po"; else rm -f "$(DEPDIR)/libinnobase_a-buf0lru.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0lru.c' object='libinnobase_a-buf0lru.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-buf0lru.obj `if test -f 'buf/buf0lru.c'; then $(CYGPATH_W) 'buf/buf0lru.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0lru.c'; fi` libinnobase_a-buf0rea.o: buf/buf0rea.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0rea.o -MD -MP -MF $(DEPDIR)/libinnobase_a-buf0rea.Tpo -c -o libinnobase_a-buf0rea.o `test -f 'buf/buf0rea.c' || echo '$(srcdir)/'`buf/buf0rea.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-buf0rea.Tpo $(DEPDIR)/libinnobase_a-buf0rea.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0rea.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-buf0rea.Tpo" -c -o libinnobase_a-buf0rea.o `test -f 'buf/buf0rea.c' || echo '$(srcdir)/'`buf/buf0rea.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-buf0rea.Tpo" "$(DEPDIR)/libinnobase_a-buf0rea.Po"; else rm -f "$(DEPDIR)/libinnobase_a-buf0rea.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0rea.c' object='libinnobase_a-buf0rea.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-buf0rea.o `test -f 'buf/buf0rea.c' || echo '$(srcdir)/'`buf/buf0rea.c libinnobase_a-buf0rea.obj: buf/buf0rea.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0rea.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-buf0rea.Tpo -c -o libinnobase_a-buf0rea.obj `if test -f 'buf/buf0rea.c'; then $(CYGPATH_W) 'buf/buf0rea.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0rea.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-buf0rea.Tpo $(DEPDIR)/libinnobase_a-buf0rea.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-buf0rea.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-buf0rea.Tpo" -c -o libinnobase_a-buf0rea.obj `if test -f 'buf/buf0rea.c'; then $(CYGPATH_W) 'buf/buf0rea.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0rea.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-buf0rea.Tpo" "$(DEPDIR)/libinnobase_a-buf0rea.Po"; else rm -f "$(DEPDIR)/libinnobase_a-buf0rea.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0rea.c' object='libinnobase_a-buf0rea.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-buf0rea.obj `if test -f 'buf/buf0rea.c'; then $(CYGPATH_W) 'buf/buf0rea.c'; else $(CYGPATH_W) '$(srcdir)/buf/buf0rea.c'; fi` libinnobase_a-data0data.o: data/data0data.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-data0data.o -MD -MP -MF $(DEPDIR)/libinnobase_a-data0data.Tpo -c -o libinnobase_a-data0data.o `test -f 'data/data0data.c' || echo '$(srcdir)/'`data/data0data.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-data0data.Tpo $(DEPDIR)/libinnobase_a-data0data.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-data0data.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-data0data.Tpo" -c -o libinnobase_a-data0data.o `test -f 'data/data0data.c' || echo '$(srcdir)/'`data/data0data.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-data0data.Tpo" "$(DEPDIR)/libinnobase_a-data0data.Po"; else rm -f "$(DEPDIR)/libinnobase_a-data0data.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='data/data0data.c' object='libinnobase_a-data0data.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-data0data.o `test -f 'data/data0data.c' || echo '$(srcdir)/'`data/data0data.c libinnobase_a-data0data.obj: data/data0data.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-data0data.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-data0data.Tpo -c -o libinnobase_a-data0data.obj `if test -f 'data/data0data.c'; then $(CYGPATH_W) 'data/data0data.c'; else $(CYGPATH_W) '$(srcdir)/data/data0data.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-data0data.Tpo $(DEPDIR)/libinnobase_a-data0data.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-data0data.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-data0data.Tpo" -c -o libinnobase_a-data0data.obj `if test -f 'data/data0data.c'; then $(CYGPATH_W) 'data/data0data.c'; else $(CYGPATH_W) '$(srcdir)/data/data0data.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-data0data.Tpo" "$(DEPDIR)/libinnobase_a-data0data.Po"; else rm -f "$(DEPDIR)/libinnobase_a-data0data.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='data/data0data.c' object='libinnobase_a-data0data.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-data0data.obj `if test -f 'data/data0data.c'; then $(CYGPATH_W) 'data/data0data.c'; else $(CYGPATH_W) '$(srcdir)/data/data0data.c'; fi` libinnobase_a-data0type.o: data/data0type.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-data0type.o -MD -MP -MF $(DEPDIR)/libinnobase_a-data0type.Tpo -c -o libinnobase_a-data0type.o `test -f 'data/data0type.c' || echo '$(srcdir)/'`data/data0type.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-data0type.Tpo $(DEPDIR)/libinnobase_a-data0type.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-data0type.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-data0type.Tpo" -c -o libinnobase_a-data0type.o `test -f 'data/data0type.c' || echo '$(srcdir)/'`data/data0type.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-data0type.Tpo" "$(DEPDIR)/libinnobase_a-data0type.Po"; else rm -f "$(DEPDIR)/libinnobase_a-data0type.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='data/data0type.c' object='libinnobase_a-data0type.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-data0type.o `test -f 'data/data0type.c' || echo '$(srcdir)/'`data/data0type.c libinnobase_a-data0type.obj: data/data0type.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-data0type.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-data0type.Tpo -c -o libinnobase_a-data0type.obj `if test -f 'data/data0type.c'; then $(CYGPATH_W) 'data/data0type.c'; else $(CYGPATH_W) '$(srcdir)/data/data0type.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-data0type.Tpo $(DEPDIR)/libinnobase_a-data0type.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-data0type.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-data0type.Tpo" -c -o libinnobase_a-data0type.obj `if test -f 'data/data0type.c'; then $(CYGPATH_W) 'data/data0type.c'; else $(CYGPATH_W) '$(srcdir)/data/data0type.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-data0type.Tpo" "$(DEPDIR)/libinnobase_a-data0type.Po"; else rm -f "$(DEPDIR)/libinnobase_a-data0type.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='data/data0type.c' object='libinnobase_a-data0type.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-data0type.obj `if test -f 'data/data0type.c'; then $(CYGPATH_W) 'data/data0type.c'; else $(CYGPATH_W) '$(srcdir)/data/data0type.c'; fi` libinnobase_a-dict0boot.o: dict/dict0boot.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0boot.o -MD -MP -MF $(DEPDIR)/libinnobase_a-dict0boot.Tpo -c -o libinnobase_a-dict0boot.o `test -f 'dict/dict0boot.c' || echo '$(srcdir)/'`dict/dict0boot.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dict0boot.Tpo $(DEPDIR)/libinnobase_a-dict0boot.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0boot.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-dict0boot.Tpo" -c -o libinnobase_a-dict0boot.o `test -f 'dict/dict0boot.c' || echo '$(srcdir)/'`dict/dict0boot.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dict0boot.Tpo" "$(DEPDIR)/libinnobase_a-dict0boot.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dict0boot.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0boot.c' object='libinnobase_a-dict0boot.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dict0boot.o `test -f 'dict/dict0boot.c' || echo '$(srcdir)/'`dict/dict0boot.c libinnobase_a-dict0boot.obj: dict/dict0boot.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0boot.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-dict0boot.Tpo -c -o libinnobase_a-dict0boot.obj `if test -f 'dict/dict0boot.c'; then $(CYGPATH_W) 'dict/dict0boot.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0boot.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dict0boot.Tpo $(DEPDIR)/libinnobase_a-dict0boot.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0boot.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-dict0boot.Tpo" -c -o libinnobase_a-dict0boot.obj `if test -f 'dict/dict0boot.c'; then $(CYGPATH_W) 'dict/dict0boot.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0boot.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dict0boot.Tpo" "$(DEPDIR)/libinnobase_a-dict0boot.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dict0boot.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0boot.c' object='libinnobase_a-dict0boot.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dict0boot.obj `if test -f 'dict/dict0boot.c'; then $(CYGPATH_W) 'dict/dict0boot.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0boot.c'; fi` libinnobase_a-dict0crea.o: dict/dict0crea.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0crea.o -MD -MP -MF $(DEPDIR)/libinnobase_a-dict0crea.Tpo -c -o libinnobase_a-dict0crea.o `test -f 'dict/dict0crea.c' || echo '$(srcdir)/'`dict/dict0crea.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dict0crea.Tpo $(DEPDIR)/libinnobase_a-dict0crea.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0crea.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-dict0crea.Tpo" -c -o libinnobase_a-dict0crea.o `test -f 'dict/dict0crea.c' || echo '$(srcdir)/'`dict/dict0crea.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dict0crea.Tpo" "$(DEPDIR)/libinnobase_a-dict0crea.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dict0crea.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0crea.c' object='libinnobase_a-dict0crea.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dict0crea.o `test -f 'dict/dict0crea.c' || echo '$(srcdir)/'`dict/dict0crea.c libinnobase_a-dict0crea.obj: dict/dict0crea.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0crea.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-dict0crea.Tpo -c -o libinnobase_a-dict0crea.obj `if test -f 'dict/dict0crea.c'; then $(CYGPATH_W) 'dict/dict0crea.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0crea.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dict0crea.Tpo $(DEPDIR)/libinnobase_a-dict0crea.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0crea.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-dict0crea.Tpo" -c -o libinnobase_a-dict0crea.obj `if test -f 'dict/dict0crea.c'; then $(CYGPATH_W) 'dict/dict0crea.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0crea.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dict0crea.Tpo" "$(DEPDIR)/libinnobase_a-dict0crea.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dict0crea.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0crea.c' object='libinnobase_a-dict0crea.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dict0crea.obj `if test -f 'dict/dict0crea.c'; then $(CYGPATH_W) 'dict/dict0crea.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0crea.c'; fi` libinnobase_a-dict0dict.o: dict/dict0dict.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0dict.o -MD -MP -MF $(DEPDIR)/libinnobase_a-dict0dict.Tpo -c -o libinnobase_a-dict0dict.o `test -f 'dict/dict0dict.c' || echo '$(srcdir)/'`dict/dict0dict.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dict0dict.Tpo $(DEPDIR)/libinnobase_a-dict0dict.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0dict.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-dict0dict.Tpo" -c -o libinnobase_a-dict0dict.o `test -f 'dict/dict0dict.c' || echo '$(srcdir)/'`dict/dict0dict.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dict0dict.Tpo" "$(DEPDIR)/libinnobase_a-dict0dict.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dict0dict.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0dict.c' object='libinnobase_a-dict0dict.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dict0dict.o `test -f 'dict/dict0dict.c' || echo '$(srcdir)/'`dict/dict0dict.c libinnobase_a-dict0dict.obj: dict/dict0dict.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0dict.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-dict0dict.Tpo -c -o libinnobase_a-dict0dict.obj `if test -f 'dict/dict0dict.c'; then $(CYGPATH_W) 'dict/dict0dict.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0dict.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dict0dict.Tpo $(DEPDIR)/libinnobase_a-dict0dict.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0dict.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-dict0dict.Tpo" -c -o libinnobase_a-dict0dict.obj `if test -f 'dict/dict0dict.c'; then $(CYGPATH_W) 'dict/dict0dict.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0dict.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dict0dict.Tpo" "$(DEPDIR)/libinnobase_a-dict0dict.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dict0dict.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0dict.c' object='libinnobase_a-dict0dict.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dict0dict.obj `if test -f 'dict/dict0dict.c'; then $(CYGPATH_W) 'dict/dict0dict.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0dict.c'; fi` libinnobase_a-dict0load.o: dict/dict0load.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0load.o -MD -MP -MF $(DEPDIR)/libinnobase_a-dict0load.Tpo -c -o libinnobase_a-dict0load.o `test -f 'dict/dict0load.c' || echo '$(srcdir)/'`dict/dict0load.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dict0load.Tpo $(DEPDIR)/libinnobase_a-dict0load.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0load.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-dict0load.Tpo" -c -o libinnobase_a-dict0load.o `test -f 'dict/dict0load.c' || echo '$(srcdir)/'`dict/dict0load.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dict0load.Tpo" "$(DEPDIR)/libinnobase_a-dict0load.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dict0load.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0load.c' object='libinnobase_a-dict0load.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dict0load.o `test -f 'dict/dict0load.c' || echo '$(srcdir)/'`dict/dict0load.c libinnobase_a-dict0load.obj: dict/dict0load.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0load.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-dict0load.Tpo -c -o libinnobase_a-dict0load.obj `if test -f 'dict/dict0load.c'; then $(CYGPATH_W) 'dict/dict0load.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0load.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dict0load.Tpo $(DEPDIR)/libinnobase_a-dict0load.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0load.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-dict0load.Tpo" -c -o libinnobase_a-dict0load.obj `if test -f 'dict/dict0load.c'; then $(CYGPATH_W) 'dict/dict0load.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0load.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dict0load.Tpo" "$(DEPDIR)/libinnobase_a-dict0load.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dict0load.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0load.c' object='libinnobase_a-dict0load.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dict0load.obj `if test -f 'dict/dict0load.c'; then $(CYGPATH_W) 'dict/dict0load.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0load.c'; fi` libinnobase_a-dict0mem.o: dict/dict0mem.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0mem.o -MD -MP -MF $(DEPDIR)/libinnobase_a-dict0mem.Tpo -c -o libinnobase_a-dict0mem.o `test -f 'dict/dict0mem.c' || echo '$(srcdir)/'`dict/dict0mem.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dict0mem.Tpo $(DEPDIR)/libinnobase_a-dict0mem.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0mem.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-dict0mem.Tpo" -c -o libinnobase_a-dict0mem.o `test -f 'dict/dict0mem.c' || echo '$(srcdir)/'`dict/dict0mem.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dict0mem.Tpo" "$(DEPDIR)/libinnobase_a-dict0mem.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dict0mem.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0mem.c' object='libinnobase_a-dict0mem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dict0mem.o `test -f 'dict/dict0mem.c' || echo '$(srcdir)/'`dict/dict0mem.c libinnobase_a-dict0mem.obj: dict/dict0mem.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0mem.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-dict0mem.Tpo -c -o libinnobase_a-dict0mem.obj `if test -f 'dict/dict0mem.c'; then $(CYGPATH_W) 'dict/dict0mem.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0mem.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dict0mem.Tpo $(DEPDIR)/libinnobase_a-dict0mem.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dict0mem.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-dict0mem.Tpo" -c -o libinnobase_a-dict0mem.obj `if test -f 'dict/dict0mem.c'; then $(CYGPATH_W) 'dict/dict0mem.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0mem.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dict0mem.Tpo" "$(DEPDIR)/libinnobase_a-dict0mem.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dict0mem.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0mem.c' object='libinnobase_a-dict0mem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dict0mem.obj `if test -f 'dict/dict0mem.c'; then $(CYGPATH_W) 'dict/dict0mem.c'; else $(CYGPATH_W) '$(srcdir)/dict/dict0mem.c'; fi` libinnobase_a-dyn0dyn.o: dyn/dyn0dyn.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dyn0dyn.o -MD -MP -MF $(DEPDIR)/libinnobase_a-dyn0dyn.Tpo -c -o libinnobase_a-dyn0dyn.o `test -f 'dyn/dyn0dyn.c' || echo '$(srcdir)/'`dyn/dyn0dyn.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dyn0dyn.Tpo $(DEPDIR)/libinnobase_a-dyn0dyn.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dyn0dyn.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-dyn0dyn.Tpo" -c -o libinnobase_a-dyn0dyn.o `test -f 'dyn/dyn0dyn.c' || echo '$(srcdir)/'`dyn/dyn0dyn.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dyn0dyn.Tpo" "$(DEPDIR)/libinnobase_a-dyn0dyn.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dyn0dyn.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dyn/dyn0dyn.c' object='libinnobase_a-dyn0dyn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dyn0dyn.o `test -f 'dyn/dyn0dyn.c' || echo '$(srcdir)/'`dyn/dyn0dyn.c libinnobase_a-dyn0dyn.obj: dyn/dyn0dyn.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dyn0dyn.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-dyn0dyn.Tpo -c -o libinnobase_a-dyn0dyn.obj `if test -f 'dyn/dyn0dyn.c'; then $(CYGPATH_W) 'dyn/dyn0dyn.c'; else $(CYGPATH_W) '$(srcdir)/dyn/dyn0dyn.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-dyn0dyn.Tpo $(DEPDIR)/libinnobase_a-dyn0dyn.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-dyn0dyn.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-dyn0dyn.Tpo" -c -o libinnobase_a-dyn0dyn.obj `if test -f 'dyn/dyn0dyn.c'; then $(CYGPATH_W) 'dyn/dyn0dyn.c'; else $(CYGPATH_W) '$(srcdir)/dyn/dyn0dyn.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-dyn0dyn.Tpo" "$(DEPDIR)/libinnobase_a-dyn0dyn.Po"; else rm -f "$(DEPDIR)/libinnobase_a-dyn0dyn.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dyn/dyn0dyn.c' object='libinnobase_a-dyn0dyn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-dyn0dyn.obj `if test -f 'dyn/dyn0dyn.c'; then $(CYGPATH_W) 'dyn/dyn0dyn.c'; else $(CYGPATH_W) '$(srcdir)/dyn/dyn0dyn.c'; fi` libinnobase_a-eval0eval.o: eval/eval0eval.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-eval0eval.o -MD -MP -MF $(DEPDIR)/libinnobase_a-eval0eval.Tpo -c -o libinnobase_a-eval0eval.o `test -f 'eval/eval0eval.c' || echo '$(srcdir)/'`eval/eval0eval.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-eval0eval.Tpo $(DEPDIR)/libinnobase_a-eval0eval.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-eval0eval.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-eval0eval.Tpo" -c -o libinnobase_a-eval0eval.o `test -f 'eval/eval0eval.c' || echo '$(srcdir)/'`eval/eval0eval.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-eval0eval.Tpo" "$(DEPDIR)/libinnobase_a-eval0eval.Po"; else rm -f "$(DEPDIR)/libinnobase_a-eval0eval.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eval/eval0eval.c' object='libinnobase_a-eval0eval.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-eval0eval.o `test -f 'eval/eval0eval.c' || echo '$(srcdir)/'`eval/eval0eval.c libinnobase_a-eval0eval.obj: eval/eval0eval.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-eval0eval.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-eval0eval.Tpo -c -o libinnobase_a-eval0eval.obj `if test -f 'eval/eval0eval.c'; then $(CYGPATH_W) 'eval/eval0eval.c'; else $(CYGPATH_W) '$(srcdir)/eval/eval0eval.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-eval0eval.Tpo $(DEPDIR)/libinnobase_a-eval0eval.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-eval0eval.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-eval0eval.Tpo" -c -o libinnobase_a-eval0eval.obj `if test -f 'eval/eval0eval.c'; then $(CYGPATH_W) 'eval/eval0eval.c'; else $(CYGPATH_W) '$(srcdir)/eval/eval0eval.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-eval0eval.Tpo" "$(DEPDIR)/libinnobase_a-eval0eval.Po"; else rm -f "$(DEPDIR)/libinnobase_a-eval0eval.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eval/eval0eval.c' object='libinnobase_a-eval0eval.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-eval0eval.obj `if test -f 'eval/eval0eval.c'; then $(CYGPATH_W) 'eval/eval0eval.c'; else $(CYGPATH_W) '$(srcdir)/eval/eval0eval.c'; fi` libinnobase_a-eval0proc.o: eval/eval0proc.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-eval0proc.o -MD -MP -MF $(DEPDIR)/libinnobase_a-eval0proc.Tpo -c -o libinnobase_a-eval0proc.o `test -f 'eval/eval0proc.c' || echo '$(srcdir)/'`eval/eval0proc.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-eval0proc.Tpo $(DEPDIR)/libinnobase_a-eval0proc.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-eval0proc.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-eval0proc.Tpo" -c -o libinnobase_a-eval0proc.o `test -f 'eval/eval0proc.c' || echo '$(srcdir)/'`eval/eval0proc.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-eval0proc.Tpo" "$(DEPDIR)/libinnobase_a-eval0proc.Po"; else rm -f "$(DEPDIR)/libinnobase_a-eval0proc.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eval/eval0proc.c' object='libinnobase_a-eval0proc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-eval0proc.o `test -f 'eval/eval0proc.c' || echo '$(srcdir)/'`eval/eval0proc.c libinnobase_a-eval0proc.obj: eval/eval0proc.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-eval0proc.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-eval0proc.Tpo -c -o libinnobase_a-eval0proc.obj `if test -f 'eval/eval0proc.c'; then $(CYGPATH_W) 'eval/eval0proc.c'; else $(CYGPATH_W) '$(srcdir)/eval/eval0proc.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-eval0proc.Tpo $(DEPDIR)/libinnobase_a-eval0proc.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-eval0proc.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-eval0proc.Tpo" -c -o libinnobase_a-eval0proc.obj `if test -f 'eval/eval0proc.c'; then $(CYGPATH_W) 'eval/eval0proc.c'; else $(CYGPATH_W) '$(srcdir)/eval/eval0proc.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-eval0proc.Tpo" "$(DEPDIR)/libinnobase_a-eval0proc.Po"; else rm -f "$(DEPDIR)/libinnobase_a-eval0proc.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eval/eval0proc.c' object='libinnobase_a-eval0proc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-eval0proc.obj `if test -f 'eval/eval0proc.c'; then $(CYGPATH_W) 'eval/eval0proc.c'; else $(CYGPATH_W) '$(srcdir)/eval/eval0proc.c'; fi` libinnobase_a-fil0fil.o: fil/fil0fil.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fil0fil.o -MD -MP -MF $(DEPDIR)/libinnobase_a-fil0fil.Tpo -c -o libinnobase_a-fil0fil.o `test -f 'fil/fil0fil.c' || echo '$(srcdir)/'`fil/fil0fil.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-fil0fil.Tpo $(DEPDIR)/libinnobase_a-fil0fil.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fil0fil.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-fil0fil.Tpo" -c -o libinnobase_a-fil0fil.o `test -f 'fil/fil0fil.c' || echo '$(srcdir)/'`fil/fil0fil.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-fil0fil.Tpo" "$(DEPDIR)/libinnobase_a-fil0fil.Po"; else rm -f "$(DEPDIR)/libinnobase_a-fil0fil.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fil/fil0fil.c' object='libinnobase_a-fil0fil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-fil0fil.o `test -f 'fil/fil0fil.c' || echo '$(srcdir)/'`fil/fil0fil.c libinnobase_a-fil0fil.obj: fil/fil0fil.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fil0fil.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-fil0fil.Tpo -c -o libinnobase_a-fil0fil.obj `if test -f 'fil/fil0fil.c'; then $(CYGPATH_W) 'fil/fil0fil.c'; else $(CYGPATH_W) '$(srcdir)/fil/fil0fil.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-fil0fil.Tpo $(DEPDIR)/libinnobase_a-fil0fil.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fil0fil.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-fil0fil.Tpo" -c -o libinnobase_a-fil0fil.obj `if test -f 'fil/fil0fil.c'; then $(CYGPATH_W) 'fil/fil0fil.c'; else $(CYGPATH_W) '$(srcdir)/fil/fil0fil.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-fil0fil.Tpo" "$(DEPDIR)/libinnobase_a-fil0fil.Po"; else rm -f "$(DEPDIR)/libinnobase_a-fil0fil.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fil/fil0fil.c' object='libinnobase_a-fil0fil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-fil0fil.obj `if test -f 'fil/fil0fil.c'; then $(CYGPATH_W) 'fil/fil0fil.c'; else $(CYGPATH_W) '$(srcdir)/fil/fil0fil.c'; fi` libinnobase_a-fsp0fsp.o: fsp/fsp0fsp.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fsp0fsp.o -MD -MP -MF $(DEPDIR)/libinnobase_a-fsp0fsp.Tpo -c -o libinnobase_a-fsp0fsp.o `test -f 'fsp/fsp0fsp.c' || echo '$(srcdir)/'`fsp/fsp0fsp.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-fsp0fsp.Tpo $(DEPDIR)/libinnobase_a-fsp0fsp.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fsp0fsp.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-fsp0fsp.Tpo" -c -o libinnobase_a-fsp0fsp.o `test -f 'fsp/fsp0fsp.c' || echo '$(srcdir)/'`fsp/fsp0fsp.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-fsp0fsp.Tpo" "$(DEPDIR)/libinnobase_a-fsp0fsp.Po"; else rm -f "$(DEPDIR)/libinnobase_a-fsp0fsp.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsp/fsp0fsp.c' object='libinnobase_a-fsp0fsp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-fsp0fsp.o `test -f 'fsp/fsp0fsp.c' || echo '$(srcdir)/'`fsp/fsp0fsp.c libinnobase_a-fsp0fsp.obj: fsp/fsp0fsp.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fsp0fsp.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-fsp0fsp.Tpo -c -o libinnobase_a-fsp0fsp.obj `if test -f 'fsp/fsp0fsp.c'; then $(CYGPATH_W) 'fsp/fsp0fsp.c'; else $(CYGPATH_W) '$(srcdir)/fsp/fsp0fsp.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-fsp0fsp.Tpo $(DEPDIR)/libinnobase_a-fsp0fsp.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fsp0fsp.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-fsp0fsp.Tpo" -c -o libinnobase_a-fsp0fsp.obj `if test -f 'fsp/fsp0fsp.c'; then $(CYGPATH_W) 'fsp/fsp0fsp.c'; else $(CYGPATH_W) '$(srcdir)/fsp/fsp0fsp.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-fsp0fsp.Tpo" "$(DEPDIR)/libinnobase_a-fsp0fsp.Po"; else rm -f "$(DEPDIR)/libinnobase_a-fsp0fsp.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsp/fsp0fsp.c' object='libinnobase_a-fsp0fsp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-fsp0fsp.obj `if test -f 'fsp/fsp0fsp.c'; then $(CYGPATH_W) 'fsp/fsp0fsp.c'; else $(CYGPATH_W) '$(srcdir)/fsp/fsp0fsp.c'; fi` libinnobase_a-fut0fut.o: fut/fut0fut.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fut0fut.o -MD -MP -MF $(DEPDIR)/libinnobase_a-fut0fut.Tpo -c -o libinnobase_a-fut0fut.o `test -f 'fut/fut0fut.c' || echo '$(srcdir)/'`fut/fut0fut.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-fut0fut.Tpo $(DEPDIR)/libinnobase_a-fut0fut.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fut0fut.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-fut0fut.Tpo" -c -o libinnobase_a-fut0fut.o `test -f 'fut/fut0fut.c' || echo '$(srcdir)/'`fut/fut0fut.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-fut0fut.Tpo" "$(DEPDIR)/libinnobase_a-fut0fut.Po"; else rm -f "$(DEPDIR)/libinnobase_a-fut0fut.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fut/fut0fut.c' object='libinnobase_a-fut0fut.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-fut0fut.o `test -f 'fut/fut0fut.c' || echo '$(srcdir)/'`fut/fut0fut.c libinnobase_a-fut0fut.obj: fut/fut0fut.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fut0fut.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-fut0fut.Tpo -c -o libinnobase_a-fut0fut.obj `if test -f 'fut/fut0fut.c'; then $(CYGPATH_W) 'fut/fut0fut.c'; else $(CYGPATH_W) '$(srcdir)/fut/fut0fut.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-fut0fut.Tpo $(DEPDIR)/libinnobase_a-fut0fut.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fut0fut.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-fut0fut.Tpo" -c -o libinnobase_a-fut0fut.obj `if test -f 'fut/fut0fut.c'; then $(CYGPATH_W) 'fut/fut0fut.c'; else $(CYGPATH_W) '$(srcdir)/fut/fut0fut.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-fut0fut.Tpo" "$(DEPDIR)/libinnobase_a-fut0fut.Po"; else rm -f "$(DEPDIR)/libinnobase_a-fut0fut.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fut/fut0fut.c' object='libinnobase_a-fut0fut.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-fut0fut.obj `if test -f 'fut/fut0fut.c'; then $(CYGPATH_W) 'fut/fut0fut.c'; else $(CYGPATH_W) '$(srcdir)/fut/fut0fut.c'; fi` libinnobase_a-fut0lst.o: fut/fut0lst.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fut0lst.o -MD -MP -MF $(DEPDIR)/libinnobase_a-fut0lst.Tpo -c -o libinnobase_a-fut0lst.o `test -f 'fut/fut0lst.c' || echo '$(srcdir)/'`fut/fut0lst.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-fut0lst.Tpo $(DEPDIR)/libinnobase_a-fut0lst.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fut0lst.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-fut0lst.Tpo" -c -o libinnobase_a-fut0lst.o `test -f 'fut/fut0lst.c' || echo '$(srcdir)/'`fut/fut0lst.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-fut0lst.Tpo" "$(DEPDIR)/libinnobase_a-fut0lst.Po"; else rm -f "$(DEPDIR)/libinnobase_a-fut0lst.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fut/fut0lst.c' object='libinnobase_a-fut0lst.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-fut0lst.o `test -f 'fut/fut0lst.c' || echo '$(srcdir)/'`fut/fut0lst.c libinnobase_a-fut0lst.obj: fut/fut0lst.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fut0lst.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-fut0lst.Tpo -c -o libinnobase_a-fut0lst.obj `if test -f 'fut/fut0lst.c'; then $(CYGPATH_W) 'fut/fut0lst.c'; else $(CYGPATH_W) '$(srcdir)/fut/fut0lst.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-fut0lst.Tpo $(DEPDIR)/libinnobase_a-fut0lst.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-fut0lst.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-fut0lst.Tpo" -c -o libinnobase_a-fut0lst.obj `if test -f 'fut/fut0lst.c'; then $(CYGPATH_W) 'fut/fut0lst.c'; else $(CYGPATH_W) '$(srcdir)/fut/fut0lst.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-fut0lst.Tpo" "$(DEPDIR)/libinnobase_a-fut0lst.Po"; else rm -f "$(DEPDIR)/libinnobase_a-fut0lst.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fut/fut0lst.c' object='libinnobase_a-fut0lst.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-fut0lst.obj `if test -f 'fut/fut0lst.c'; then $(CYGPATH_W) 'fut/fut0lst.c'; else $(CYGPATH_W) '$(srcdir)/fut/fut0lst.c'; fi` libinnobase_a-ha0ha.o: ha/ha0ha.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ha0ha.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ha0ha.Tpo -c -o libinnobase_a-ha0ha.o `test -f 'ha/ha0ha.c' || echo '$(srcdir)/'`ha/ha0ha.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ha0ha.Tpo $(DEPDIR)/libinnobase_a-ha0ha.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ha0ha.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ha0ha.Tpo" -c -o libinnobase_a-ha0ha.o `test -f 'ha/ha0ha.c' || echo '$(srcdir)/'`ha/ha0ha.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ha0ha.Tpo" "$(DEPDIR)/libinnobase_a-ha0ha.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ha0ha.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ha/ha0ha.c' object='libinnobase_a-ha0ha.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ha0ha.o `test -f 'ha/ha0ha.c' || echo '$(srcdir)/'`ha/ha0ha.c libinnobase_a-ha0ha.obj: ha/ha0ha.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ha0ha.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ha0ha.Tpo -c -o libinnobase_a-ha0ha.obj `if test -f 'ha/ha0ha.c'; then $(CYGPATH_W) 'ha/ha0ha.c'; else $(CYGPATH_W) '$(srcdir)/ha/ha0ha.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ha0ha.Tpo $(DEPDIR)/libinnobase_a-ha0ha.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ha0ha.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ha0ha.Tpo" -c -o libinnobase_a-ha0ha.obj `if test -f 'ha/ha0ha.c'; then $(CYGPATH_W) 'ha/ha0ha.c'; else $(CYGPATH_W) '$(srcdir)/ha/ha0ha.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ha0ha.Tpo" "$(DEPDIR)/libinnobase_a-ha0ha.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ha0ha.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ha/ha0ha.c' object='libinnobase_a-ha0ha.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ha0ha.obj `if test -f 'ha/ha0ha.c'; then $(CYGPATH_W) 'ha/ha0ha.c'; else $(CYGPATH_W) '$(srcdir)/ha/ha0ha.c'; fi` libinnobase_a-ha0storage.o: ha/ha0storage.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ha0storage.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ha0storage.Tpo -c -o libinnobase_a-ha0storage.o `test -f 'ha/ha0storage.c' || echo '$(srcdir)/'`ha/ha0storage.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ha0storage.Tpo $(DEPDIR)/libinnobase_a-ha0storage.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ha0storage.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ha0storage.Tpo" -c -o libinnobase_a-ha0storage.o `test -f 'ha/ha0storage.c' || echo '$(srcdir)/'`ha/ha0storage.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ha0storage.Tpo" "$(DEPDIR)/libinnobase_a-ha0storage.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ha0storage.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ha/ha0storage.c' object='libinnobase_a-ha0storage.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ha0storage.o `test -f 'ha/ha0storage.c' || echo '$(srcdir)/'`ha/ha0storage.c libinnobase_a-ha0storage.obj: ha/ha0storage.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ha0storage.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ha0storage.Tpo -c -o libinnobase_a-ha0storage.obj `if test -f 'ha/ha0storage.c'; then $(CYGPATH_W) 'ha/ha0storage.c'; else $(CYGPATH_W) '$(srcdir)/ha/ha0storage.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ha0storage.Tpo $(DEPDIR)/libinnobase_a-ha0storage.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ha0storage.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ha0storage.Tpo" -c -o libinnobase_a-ha0storage.obj `if test -f 'ha/ha0storage.c'; then $(CYGPATH_W) 'ha/ha0storage.c'; else $(CYGPATH_W) '$(srcdir)/ha/ha0storage.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ha0storage.Tpo" "$(DEPDIR)/libinnobase_a-ha0storage.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ha0storage.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ha/ha0storage.c' object='libinnobase_a-ha0storage.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ha0storage.obj `if test -f 'ha/ha0storage.c'; then $(CYGPATH_W) 'ha/ha0storage.c'; else $(CYGPATH_W) '$(srcdir)/ha/ha0storage.c'; fi` libinnobase_a-hash0hash.o: ha/hash0hash.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-hash0hash.o -MD -MP -MF $(DEPDIR)/libinnobase_a-hash0hash.Tpo -c -o libinnobase_a-hash0hash.o `test -f 'ha/hash0hash.c' || echo '$(srcdir)/'`ha/hash0hash.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-hash0hash.Tpo $(DEPDIR)/libinnobase_a-hash0hash.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-hash0hash.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-hash0hash.Tpo" -c -o libinnobase_a-hash0hash.o `test -f 'ha/hash0hash.c' || echo '$(srcdir)/'`ha/hash0hash.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-hash0hash.Tpo" "$(DEPDIR)/libinnobase_a-hash0hash.Po"; else rm -f "$(DEPDIR)/libinnobase_a-hash0hash.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ha/hash0hash.c' object='libinnobase_a-hash0hash.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-hash0hash.o `test -f 'ha/hash0hash.c' || echo '$(srcdir)/'`ha/hash0hash.c libinnobase_a-hash0hash.obj: ha/hash0hash.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-hash0hash.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-hash0hash.Tpo -c -o libinnobase_a-hash0hash.obj `if test -f 'ha/hash0hash.c'; then $(CYGPATH_W) 'ha/hash0hash.c'; else $(CYGPATH_W) '$(srcdir)/ha/hash0hash.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-hash0hash.Tpo $(DEPDIR)/libinnobase_a-hash0hash.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-hash0hash.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-hash0hash.Tpo" -c -o libinnobase_a-hash0hash.obj `if test -f 'ha/hash0hash.c'; then $(CYGPATH_W) 'ha/hash0hash.c'; else $(CYGPATH_W) '$(srcdir)/ha/hash0hash.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-hash0hash.Tpo" "$(DEPDIR)/libinnobase_a-hash0hash.Po"; else rm -f "$(DEPDIR)/libinnobase_a-hash0hash.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ha/hash0hash.c' object='libinnobase_a-hash0hash.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-hash0hash.obj `if test -f 'ha/hash0hash.c'; then $(CYGPATH_W) 'ha/hash0hash.c'; else $(CYGPATH_W) '$(srcdir)/ha/hash0hash.c'; fi` libinnobase_a-ibuf0ibuf.o: ibuf/ibuf0ibuf.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ibuf0ibuf.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ibuf0ibuf.Tpo -c -o libinnobase_a-ibuf0ibuf.o `test -f 'ibuf/ibuf0ibuf.c' || echo '$(srcdir)/'`ibuf/ibuf0ibuf.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ibuf0ibuf.Tpo $(DEPDIR)/libinnobase_a-ibuf0ibuf.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ibuf0ibuf.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ibuf0ibuf.Tpo" -c -o libinnobase_a-ibuf0ibuf.o `test -f 'ibuf/ibuf0ibuf.c' || echo '$(srcdir)/'`ibuf/ibuf0ibuf.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ibuf0ibuf.Tpo" "$(DEPDIR)/libinnobase_a-ibuf0ibuf.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ibuf0ibuf.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ibuf/ibuf0ibuf.c' object='libinnobase_a-ibuf0ibuf.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ibuf0ibuf.o `test -f 'ibuf/ibuf0ibuf.c' || echo '$(srcdir)/'`ibuf/ibuf0ibuf.c libinnobase_a-ibuf0ibuf.obj: ibuf/ibuf0ibuf.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ibuf0ibuf.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ibuf0ibuf.Tpo -c -o libinnobase_a-ibuf0ibuf.obj `if test -f 'ibuf/ibuf0ibuf.c'; then $(CYGPATH_W) 'ibuf/ibuf0ibuf.c'; else $(CYGPATH_W) '$(srcdir)/ibuf/ibuf0ibuf.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ibuf0ibuf.Tpo $(DEPDIR)/libinnobase_a-ibuf0ibuf.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ibuf0ibuf.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ibuf0ibuf.Tpo" -c -o libinnobase_a-ibuf0ibuf.obj `if test -f 'ibuf/ibuf0ibuf.c'; then $(CYGPATH_W) 'ibuf/ibuf0ibuf.c'; else $(CYGPATH_W) '$(srcdir)/ibuf/ibuf0ibuf.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ibuf0ibuf.Tpo" "$(DEPDIR)/libinnobase_a-ibuf0ibuf.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ibuf0ibuf.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ibuf/ibuf0ibuf.c' object='libinnobase_a-ibuf0ibuf.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ibuf0ibuf.obj `if test -f 'ibuf/ibuf0ibuf.c'; then $(CYGPATH_W) 'ibuf/ibuf0ibuf.c'; else $(CYGPATH_W) '$(srcdir)/ibuf/ibuf0ibuf.c'; fi` libinnobase_a-lock0iter.o: lock/lock0iter.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lock0iter.o -MD -MP -MF $(DEPDIR)/libinnobase_a-lock0iter.Tpo -c -o libinnobase_a-lock0iter.o `test -f 'lock/lock0iter.c' || echo '$(srcdir)/'`lock/lock0iter.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-lock0iter.Tpo $(DEPDIR)/libinnobase_a-lock0iter.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lock0iter.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-lock0iter.Tpo" -c -o libinnobase_a-lock0iter.o `test -f 'lock/lock0iter.c' || echo '$(srcdir)/'`lock/lock0iter.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-lock0iter.Tpo" "$(DEPDIR)/libinnobase_a-lock0iter.Po"; else rm -f "$(DEPDIR)/libinnobase_a-lock0iter.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lock/lock0iter.c' object='libinnobase_a-lock0iter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-lock0iter.o `test -f 'lock/lock0iter.c' || echo '$(srcdir)/'`lock/lock0iter.c libinnobase_a-lock0iter.obj: lock/lock0iter.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lock0iter.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-lock0iter.Tpo -c -o libinnobase_a-lock0iter.obj `if test -f 'lock/lock0iter.c'; then $(CYGPATH_W) 'lock/lock0iter.c'; else $(CYGPATH_W) '$(srcdir)/lock/lock0iter.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-lock0iter.Tpo $(DEPDIR)/libinnobase_a-lock0iter.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lock0iter.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-lock0iter.Tpo" -c -o libinnobase_a-lock0iter.obj `if test -f 'lock/lock0iter.c'; then $(CYGPATH_W) 'lock/lock0iter.c'; else $(CYGPATH_W) '$(srcdir)/lock/lock0iter.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-lock0iter.Tpo" "$(DEPDIR)/libinnobase_a-lock0iter.Po"; else rm -f "$(DEPDIR)/libinnobase_a-lock0iter.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lock/lock0iter.c' object='libinnobase_a-lock0iter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-lock0iter.obj `if test -f 'lock/lock0iter.c'; then $(CYGPATH_W) 'lock/lock0iter.c'; else $(CYGPATH_W) '$(srcdir)/lock/lock0iter.c'; fi` libinnobase_a-lock0lock.o: lock/lock0lock.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lock0lock.o -MD -MP -MF $(DEPDIR)/libinnobase_a-lock0lock.Tpo -c -o libinnobase_a-lock0lock.o `test -f 'lock/lock0lock.c' || echo '$(srcdir)/'`lock/lock0lock.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-lock0lock.Tpo $(DEPDIR)/libinnobase_a-lock0lock.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lock0lock.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-lock0lock.Tpo" -c -o libinnobase_a-lock0lock.o `test -f 'lock/lock0lock.c' || echo '$(srcdir)/'`lock/lock0lock.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-lock0lock.Tpo" "$(DEPDIR)/libinnobase_a-lock0lock.Po"; else rm -f "$(DEPDIR)/libinnobase_a-lock0lock.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lock/lock0lock.c' object='libinnobase_a-lock0lock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-lock0lock.o `test -f 'lock/lock0lock.c' || echo '$(srcdir)/'`lock/lock0lock.c libinnobase_a-lock0lock.obj: lock/lock0lock.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lock0lock.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-lock0lock.Tpo -c -o libinnobase_a-lock0lock.obj `if test -f 'lock/lock0lock.c'; then $(CYGPATH_W) 'lock/lock0lock.c'; else $(CYGPATH_W) '$(srcdir)/lock/lock0lock.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-lock0lock.Tpo $(DEPDIR)/libinnobase_a-lock0lock.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lock0lock.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-lock0lock.Tpo" -c -o libinnobase_a-lock0lock.obj `if test -f 'lock/lock0lock.c'; then $(CYGPATH_W) 'lock/lock0lock.c'; else $(CYGPATH_W) '$(srcdir)/lock/lock0lock.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-lock0lock.Tpo" "$(DEPDIR)/libinnobase_a-lock0lock.Po"; else rm -f "$(DEPDIR)/libinnobase_a-lock0lock.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lock/lock0lock.c' object='libinnobase_a-lock0lock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-lock0lock.obj `if test -f 'lock/lock0lock.c'; then $(CYGPATH_W) 'lock/lock0lock.c'; else $(CYGPATH_W) '$(srcdir)/lock/lock0lock.c'; fi` libinnobase_a-log0log.o: log/log0log.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-log0log.o -MD -MP -MF $(DEPDIR)/libinnobase_a-log0log.Tpo -c -o libinnobase_a-log0log.o `test -f 'log/log0log.c' || echo '$(srcdir)/'`log/log0log.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-log0log.Tpo $(DEPDIR)/libinnobase_a-log0log.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-log0log.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-log0log.Tpo" -c -o libinnobase_a-log0log.o `test -f 'log/log0log.c' || echo '$(srcdir)/'`log/log0log.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-log0log.Tpo" "$(DEPDIR)/libinnobase_a-log0log.Po"; else rm -f "$(DEPDIR)/libinnobase_a-log0log.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='log/log0log.c' object='libinnobase_a-log0log.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-log0log.o `test -f 'log/log0log.c' || echo '$(srcdir)/'`log/log0log.c libinnobase_a-log0log.obj: log/log0log.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-log0log.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-log0log.Tpo -c -o libinnobase_a-log0log.obj `if test -f 'log/log0log.c'; then $(CYGPATH_W) 'log/log0log.c'; else $(CYGPATH_W) '$(srcdir)/log/log0log.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-log0log.Tpo $(DEPDIR)/libinnobase_a-log0log.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-log0log.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-log0log.Tpo" -c -o libinnobase_a-log0log.obj `if test -f 'log/log0log.c'; then $(CYGPATH_W) 'log/log0log.c'; else $(CYGPATH_W) '$(srcdir)/log/log0log.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-log0log.Tpo" "$(DEPDIR)/libinnobase_a-log0log.Po"; else rm -f "$(DEPDIR)/libinnobase_a-log0log.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='log/log0log.c' object='libinnobase_a-log0log.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-log0log.obj `if test -f 'log/log0log.c'; then $(CYGPATH_W) 'log/log0log.c'; else $(CYGPATH_W) '$(srcdir)/log/log0log.c'; fi` +libinnobase_a-log0online.o: log/log0online.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-log0online.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-log0online.Tpo" -c -o libinnobase_a-log0online.o `test -f 'log/log0online.c' || echo '$(srcdir)/'`log/log0online.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-log0online.Tpo" "$(DEPDIR)/libinnobase_a-log0online.Po"; else rm -f "$(DEPDIR)/libinnobase_a-log0online.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='log/log0online.c' object='libinnobase_a-log0online.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-log0online.o `test -f 'log/log0online.c' || echo '$(srcdir)/'`log/log0online.c + +libinnobase_a-log0online.obj: log/log0online.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-log0online.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-log0online.Tpo" -c -o libinnobase_a-log0online.obj `if test -f 'log/log0online.c'; then $(CYGPATH_W) 'log/log0online.c'; else $(CYGPATH_W) '$(srcdir)/log/log0online.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-log0online.Tpo" "$(DEPDIR)/libinnobase_a-log0online.Po"; else rm -f "$(DEPDIR)/libinnobase_a-log0online.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='log/log0online.c' object='libinnobase_a-log0online.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-log0online.obj `if test -f 'log/log0online.c'; then $(CYGPATH_W) 'log/log0online.c'; else $(CYGPATH_W) '$(srcdir)/log/log0online.c'; fi` + libinnobase_a-log0recv.o: log/log0recv.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-log0recv.o -MD -MP -MF $(DEPDIR)/libinnobase_a-log0recv.Tpo -c -o libinnobase_a-log0recv.o `test -f 'log/log0recv.c' || echo '$(srcdir)/'`log/log0recv.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-log0recv.Tpo $(DEPDIR)/libinnobase_a-log0recv.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-log0recv.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-log0recv.Tpo" -c -o libinnobase_a-log0recv.o `test -f 'log/log0recv.c' || echo '$(srcdir)/'`log/log0recv.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-log0recv.Tpo" "$(DEPDIR)/libinnobase_a-log0recv.Po"; else rm -f "$(DEPDIR)/libinnobase_a-log0recv.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='log/log0recv.c' object='libinnobase_a-log0recv.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-log0recv.o `test -f 'log/log0recv.c' || echo '$(srcdir)/'`log/log0recv.c libinnobase_a-log0recv.obj: log/log0recv.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-log0recv.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-log0recv.Tpo -c -o libinnobase_a-log0recv.obj `if test -f 'log/log0recv.c'; then $(CYGPATH_W) 'log/log0recv.c'; else $(CYGPATH_W) '$(srcdir)/log/log0recv.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-log0recv.Tpo $(DEPDIR)/libinnobase_a-log0recv.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-log0recv.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-log0recv.Tpo" -c -o libinnobase_a-log0recv.obj `if test -f 'log/log0recv.c'; then $(CYGPATH_W) 'log/log0recv.c'; else $(CYGPATH_W) '$(srcdir)/log/log0recv.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-log0recv.Tpo" "$(DEPDIR)/libinnobase_a-log0recv.Po"; else rm -f "$(DEPDIR)/libinnobase_a-log0recv.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='log/log0recv.c' object='libinnobase_a-log0recv.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-log0recv.obj `if test -f 'log/log0recv.c'; then $(CYGPATH_W) 'log/log0recv.c'; else $(CYGPATH_W) '$(srcdir)/log/log0recv.c'; fi` libinnobase_a-mach0data.o: mach/mach0data.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mach0data.o -MD -MP -MF $(DEPDIR)/libinnobase_a-mach0data.Tpo -c -o libinnobase_a-mach0data.o `test -f 'mach/mach0data.c' || echo '$(srcdir)/'`mach/mach0data.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mach0data.Tpo $(DEPDIR)/libinnobase_a-mach0data.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mach0data.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-mach0data.Tpo" -c -o libinnobase_a-mach0data.o `test -f 'mach/mach0data.c' || echo '$(srcdir)/'`mach/mach0data.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mach0data.Tpo" "$(DEPDIR)/libinnobase_a-mach0data.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mach0data.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mach/mach0data.c' object='libinnobase_a-mach0data.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-mach0data.o `test -f 'mach/mach0data.c' || echo '$(srcdir)/'`mach/mach0data.c libinnobase_a-mach0data.obj: mach/mach0data.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mach0data.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-mach0data.Tpo -c -o libinnobase_a-mach0data.obj `if test -f 'mach/mach0data.c'; then $(CYGPATH_W) 'mach/mach0data.c'; else $(CYGPATH_W) '$(srcdir)/mach/mach0data.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mach0data.Tpo $(DEPDIR)/libinnobase_a-mach0data.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mach0data.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-mach0data.Tpo" -c -o libinnobase_a-mach0data.obj `if test -f 'mach/mach0data.c'; then $(CYGPATH_W) 'mach/mach0data.c'; else $(CYGPATH_W) '$(srcdir)/mach/mach0data.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mach0data.Tpo" "$(DEPDIR)/libinnobase_a-mach0data.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mach0data.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mach/mach0data.c' object='libinnobase_a-mach0data.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-mach0data.obj `if test -f 'mach/mach0data.c'; then $(CYGPATH_W) 'mach/mach0data.c'; else $(CYGPATH_W) '$(srcdir)/mach/mach0data.c'; fi` libinnobase_a-mem0mem.o: mem/mem0mem.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mem0mem.o -MD -MP -MF $(DEPDIR)/libinnobase_a-mem0mem.Tpo -c -o libinnobase_a-mem0mem.o `test -f 'mem/mem0mem.c' || echo '$(srcdir)/'`mem/mem0mem.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mem0mem.Tpo $(DEPDIR)/libinnobase_a-mem0mem.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mem0mem.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-mem0mem.Tpo" -c -o libinnobase_a-mem0mem.o `test -f 'mem/mem0mem.c' || echo '$(srcdir)/'`mem/mem0mem.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mem0mem.Tpo" "$(DEPDIR)/libinnobase_a-mem0mem.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mem0mem.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mem/mem0mem.c' object='libinnobase_a-mem0mem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-mem0mem.o `test -f 'mem/mem0mem.c' || echo '$(srcdir)/'`mem/mem0mem.c libinnobase_a-mem0mem.obj: mem/mem0mem.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mem0mem.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-mem0mem.Tpo -c -o libinnobase_a-mem0mem.obj `if test -f 'mem/mem0mem.c'; then $(CYGPATH_W) 'mem/mem0mem.c'; else $(CYGPATH_W) '$(srcdir)/mem/mem0mem.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mem0mem.Tpo $(DEPDIR)/libinnobase_a-mem0mem.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mem0mem.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-mem0mem.Tpo" -c -o libinnobase_a-mem0mem.obj `if test -f 'mem/mem0mem.c'; then $(CYGPATH_W) 'mem/mem0mem.c'; else $(CYGPATH_W) '$(srcdir)/mem/mem0mem.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mem0mem.Tpo" "$(DEPDIR)/libinnobase_a-mem0mem.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mem0mem.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mem/mem0mem.c' object='libinnobase_a-mem0mem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-mem0mem.obj `if test -f 'mem/mem0mem.c'; then $(CYGPATH_W) 'mem/mem0mem.c'; else $(CYGPATH_W) '$(srcdir)/mem/mem0mem.c'; fi` libinnobase_a-mem0pool.o: mem/mem0pool.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mem0pool.o -MD -MP -MF $(DEPDIR)/libinnobase_a-mem0pool.Tpo -c -o libinnobase_a-mem0pool.o `test -f 'mem/mem0pool.c' || echo '$(srcdir)/'`mem/mem0pool.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mem0pool.Tpo $(DEPDIR)/libinnobase_a-mem0pool.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mem0pool.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-mem0pool.Tpo" -c -o libinnobase_a-mem0pool.o `test -f 'mem/mem0pool.c' || echo '$(srcdir)/'`mem/mem0pool.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mem0pool.Tpo" "$(DEPDIR)/libinnobase_a-mem0pool.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mem0pool.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mem/mem0pool.c' object='libinnobase_a-mem0pool.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-mem0pool.o `test -f 'mem/mem0pool.c' || echo '$(srcdir)/'`mem/mem0pool.c libinnobase_a-mem0pool.obj: mem/mem0pool.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mem0pool.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-mem0pool.Tpo -c -o libinnobase_a-mem0pool.obj `if test -f 'mem/mem0pool.c'; then $(CYGPATH_W) 'mem/mem0pool.c'; else $(CYGPATH_W) '$(srcdir)/mem/mem0pool.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mem0pool.Tpo $(DEPDIR)/libinnobase_a-mem0pool.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mem0pool.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-mem0pool.Tpo" -c -o libinnobase_a-mem0pool.obj `if test -f 'mem/mem0pool.c'; then $(CYGPATH_W) 'mem/mem0pool.c'; else $(CYGPATH_W) '$(srcdir)/mem/mem0pool.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mem0pool.Tpo" "$(DEPDIR)/libinnobase_a-mem0pool.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mem0pool.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mem/mem0pool.c' object='libinnobase_a-mem0pool.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-mem0pool.obj `if test -f 'mem/mem0pool.c'; then $(CYGPATH_W) 'mem/mem0pool.c'; else $(CYGPATH_W) '$(srcdir)/mem/mem0pool.c'; fi` libinnobase_a-mtr0log.o: mtr/mtr0log.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mtr0log.o -MD -MP -MF $(DEPDIR)/libinnobase_a-mtr0log.Tpo -c -o libinnobase_a-mtr0log.o `test -f 'mtr/mtr0log.c' || echo '$(srcdir)/'`mtr/mtr0log.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mtr0log.Tpo $(DEPDIR)/libinnobase_a-mtr0log.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mtr0log.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-mtr0log.Tpo" -c -o libinnobase_a-mtr0log.o `test -f 'mtr/mtr0log.c' || echo '$(srcdir)/'`mtr/mtr0log.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mtr0log.Tpo" "$(DEPDIR)/libinnobase_a-mtr0log.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mtr0log.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mtr/mtr0log.c' object='libinnobase_a-mtr0log.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-mtr0log.o `test -f 'mtr/mtr0log.c' || echo '$(srcdir)/'`mtr/mtr0log.c libinnobase_a-mtr0log.obj: mtr/mtr0log.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mtr0log.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-mtr0log.Tpo -c -o libinnobase_a-mtr0log.obj `if test -f 'mtr/mtr0log.c'; then $(CYGPATH_W) 'mtr/mtr0log.c'; else $(CYGPATH_W) '$(srcdir)/mtr/mtr0log.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mtr0log.Tpo $(DEPDIR)/libinnobase_a-mtr0log.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mtr0log.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-mtr0log.Tpo" -c -o libinnobase_a-mtr0log.obj `if test -f 'mtr/mtr0log.c'; then $(CYGPATH_W) 'mtr/mtr0log.c'; else $(CYGPATH_W) '$(srcdir)/mtr/mtr0log.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mtr0log.Tpo" "$(DEPDIR)/libinnobase_a-mtr0log.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mtr0log.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mtr/mtr0log.c' object='libinnobase_a-mtr0log.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-mtr0log.obj `if test -f 'mtr/mtr0log.c'; then $(CYGPATH_W) 'mtr/mtr0log.c'; else $(CYGPATH_W) '$(srcdir)/mtr/mtr0log.c'; fi` libinnobase_a-mtr0mtr.o: mtr/mtr0mtr.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mtr0mtr.o -MD -MP -MF $(DEPDIR)/libinnobase_a-mtr0mtr.Tpo -c -o libinnobase_a-mtr0mtr.o `test -f 'mtr/mtr0mtr.c' || echo '$(srcdir)/'`mtr/mtr0mtr.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mtr0mtr.Tpo $(DEPDIR)/libinnobase_a-mtr0mtr.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mtr0mtr.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-mtr0mtr.Tpo" -c -o libinnobase_a-mtr0mtr.o `test -f 'mtr/mtr0mtr.c' || echo '$(srcdir)/'`mtr/mtr0mtr.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mtr0mtr.Tpo" "$(DEPDIR)/libinnobase_a-mtr0mtr.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mtr0mtr.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mtr/mtr0mtr.c' object='libinnobase_a-mtr0mtr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-mtr0mtr.o `test -f 'mtr/mtr0mtr.c' || echo '$(srcdir)/'`mtr/mtr0mtr.c libinnobase_a-mtr0mtr.obj: mtr/mtr0mtr.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mtr0mtr.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-mtr0mtr.Tpo -c -o libinnobase_a-mtr0mtr.obj `if test -f 'mtr/mtr0mtr.c'; then $(CYGPATH_W) 'mtr/mtr0mtr.c'; else $(CYGPATH_W) '$(srcdir)/mtr/mtr0mtr.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mtr0mtr.Tpo $(DEPDIR)/libinnobase_a-mtr0mtr.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-mtr0mtr.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-mtr0mtr.Tpo" -c -o libinnobase_a-mtr0mtr.obj `if test -f 'mtr/mtr0mtr.c'; then $(CYGPATH_W) 'mtr/mtr0mtr.c'; else $(CYGPATH_W) '$(srcdir)/mtr/mtr0mtr.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mtr0mtr.Tpo" "$(DEPDIR)/libinnobase_a-mtr0mtr.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mtr0mtr.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mtr/mtr0mtr.c' object='libinnobase_a-mtr0mtr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-mtr0mtr.obj `if test -f 'mtr/mtr0mtr.c'; then $(CYGPATH_W) 'mtr/mtr0mtr.c'; else $(CYGPATH_W) '$(srcdir)/mtr/mtr0mtr.c'; fi` libinnobase_a-os0file.o: os/os0file.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0file.o -MD -MP -MF $(DEPDIR)/libinnobase_a-os0file.Tpo -c -o libinnobase_a-os0file.o `test -f 'os/os0file.c' || echo '$(srcdir)/'`os/os0file.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-os0file.Tpo $(DEPDIR)/libinnobase_a-os0file.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0file.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-os0file.Tpo" -c -o libinnobase_a-os0file.o `test -f 'os/os0file.c' || echo '$(srcdir)/'`os/os0file.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-os0file.Tpo" "$(DEPDIR)/libinnobase_a-os0file.Po"; else rm -f "$(DEPDIR)/libinnobase_a-os0file.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0file.c' object='libinnobase_a-os0file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-os0file.o `test -f 'os/os0file.c' || echo '$(srcdir)/'`os/os0file.c libinnobase_a-os0file.obj: os/os0file.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0file.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-os0file.Tpo -c -o libinnobase_a-os0file.obj `if test -f 'os/os0file.c'; then $(CYGPATH_W) 'os/os0file.c'; else $(CYGPATH_W) '$(srcdir)/os/os0file.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-os0file.Tpo $(DEPDIR)/libinnobase_a-os0file.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0file.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-os0file.Tpo" -c -o libinnobase_a-os0file.obj `if test -f 'os/os0file.c'; then $(CYGPATH_W) 'os/os0file.c'; else $(CYGPATH_W) '$(srcdir)/os/os0file.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-os0file.Tpo" "$(DEPDIR)/libinnobase_a-os0file.Po"; else rm -f "$(DEPDIR)/libinnobase_a-os0file.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0file.c' object='libinnobase_a-os0file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-os0file.obj `if test -f 'os/os0file.c'; then $(CYGPATH_W) 'os/os0file.c'; else $(CYGPATH_W) '$(srcdir)/os/os0file.c'; fi` libinnobase_a-os0proc.o: os/os0proc.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0proc.o -MD -MP -MF $(DEPDIR)/libinnobase_a-os0proc.Tpo -c -o libinnobase_a-os0proc.o `test -f 'os/os0proc.c' || echo '$(srcdir)/'`os/os0proc.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-os0proc.Tpo $(DEPDIR)/libinnobase_a-os0proc.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0proc.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-os0proc.Tpo" -c -o libinnobase_a-os0proc.o `test -f 'os/os0proc.c' || echo '$(srcdir)/'`os/os0proc.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-os0proc.Tpo" "$(DEPDIR)/libinnobase_a-os0proc.Po"; else rm -f "$(DEPDIR)/libinnobase_a-os0proc.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0proc.c' object='libinnobase_a-os0proc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-os0proc.o `test -f 'os/os0proc.c' || echo '$(srcdir)/'`os/os0proc.c libinnobase_a-os0proc.obj: os/os0proc.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0proc.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-os0proc.Tpo -c -o libinnobase_a-os0proc.obj `if test -f 'os/os0proc.c'; then $(CYGPATH_W) 'os/os0proc.c'; else $(CYGPATH_W) '$(srcdir)/os/os0proc.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-os0proc.Tpo $(DEPDIR)/libinnobase_a-os0proc.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0proc.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-os0proc.Tpo" -c -o libinnobase_a-os0proc.obj `if test -f 'os/os0proc.c'; then $(CYGPATH_W) 'os/os0proc.c'; else $(CYGPATH_W) '$(srcdir)/os/os0proc.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-os0proc.Tpo" "$(DEPDIR)/libinnobase_a-os0proc.Po"; else rm -f "$(DEPDIR)/libinnobase_a-os0proc.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0proc.c' object='libinnobase_a-os0proc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-os0proc.obj `if test -f 'os/os0proc.c'; then $(CYGPATH_W) 'os/os0proc.c'; else $(CYGPATH_W) '$(srcdir)/os/os0proc.c'; fi` libinnobase_a-os0sync.o: os/os0sync.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0sync.o -MD -MP -MF $(DEPDIR)/libinnobase_a-os0sync.Tpo -c -o libinnobase_a-os0sync.o `test -f 'os/os0sync.c' || echo '$(srcdir)/'`os/os0sync.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-os0sync.Tpo $(DEPDIR)/libinnobase_a-os0sync.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0sync.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-os0sync.Tpo" -c -o libinnobase_a-os0sync.o `test -f 'os/os0sync.c' || echo '$(srcdir)/'`os/os0sync.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-os0sync.Tpo" "$(DEPDIR)/libinnobase_a-os0sync.Po"; else rm -f "$(DEPDIR)/libinnobase_a-os0sync.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0sync.c' object='libinnobase_a-os0sync.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-os0sync.o `test -f 'os/os0sync.c' || echo '$(srcdir)/'`os/os0sync.c libinnobase_a-os0sync.obj: os/os0sync.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0sync.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-os0sync.Tpo -c -o libinnobase_a-os0sync.obj `if test -f 'os/os0sync.c'; then $(CYGPATH_W) 'os/os0sync.c'; else $(CYGPATH_W) '$(srcdir)/os/os0sync.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-os0sync.Tpo $(DEPDIR)/libinnobase_a-os0sync.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0sync.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-os0sync.Tpo" -c -o libinnobase_a-os0sync.obj `if test -f 'os/os0sync.c'; then $(CYGPATH_W) 'os/os0sync.c'; else $(CYGPATH_W) '$(srcdir)/os/os0sync.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-os0sync.Tpo" "$(DEPDIR)/libinnobase_a-os0sync.Po"; else rm -f "$(DEPDIR)/libinnobase_a-os0sync.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0sync.c' object='libinnobase_a-os0sync.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-os0sync.obj `if test -f 'os/os0sync.c'; then $(CYGPATH_W) 'os/os0sync.c'; else $(CYGPATH_W) '$(srcdir)/os/os0sync.c'; fi` libinnobase_a-os0thread.o: os/os0thread.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0thread.o -MD -MP -MF $(DEPDIR)/libinnobase_a-os0thread.Tpo -c -o libinnobase_a-os0thread.o `test -f 'os/os0thread.c' || echo '$(srcdir)/'`os/os0thread.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-os0thread.Tpo $(DEPDIR)/libinnobase_a-os0thread.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0thread.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-os0thread.Tpo" -c -o libinnobase_a-os0thread.o `test -f 'os/os0thread.c' || echo '$(srcdir)/'`os/os0thread.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-os0thread.Tpo" "$(DEPDIR)/libinnobase_a-os0thread.Po"; else rm -f "$(DEPDIR)/libinnobase_a-os0thread.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0thread.c' object='libinnobase_a-os0thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-os0thread.o `test -f 'os/os0thread.c' || echo '$(srcdir)/'`os/os0thread.c libinnobase_a-os0thread.obj: os/os0thread.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0thread.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-os0thread.Tpo -c -o libinnobase_a-os0thread.obj `if test -f 'os/os0thread.c'; then $(CYGPATH_W) 'os/os0thread.c'; else $(CYGPATH_W) '$(srcdir)/os/os0thread.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-os0thread.Tpo $(DEPDIR)/libinnobase_a-os0thread.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-os0thread.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-os0thread.Tpo" -c -o libinnobase_a-os0thread.obj `if test -f 'os/os0thread.c'; then $(CYGPATH_W) 'os/os0thread.c'; else $(CYGPATH_W) '$(srcdir)/os/os0thread.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-os0thread.Tpo" "$(DEPDIR)/libinnobase_a-os0thread.Po"; else rm -f "$(DEPDIR)/libinnobase_a-os0thread.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0thread.c' object='libinnobase_a-os0thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-os0thread.obj `if test -f 'os/os0thread.c'; then $(CYGPATH_W) 'os/os0thread.c'; else $(CYGPATH_W) '$(srcdir)/os/os0thread.c'; fi` libinnobase_a-page0cur.o: page/page0cur.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0cur.o -MD -MP -MF $(DEPDIR)/libinnobase_a-page0cur.Tpo -c -o libinnobase_a-page0cur.o `test -f 'page/page0cur.c' || echo '$(srcdir)/'`page/page0cur.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-page0cur.Tpo $(DEPDIR)/libinnobase_a-page0cur.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0cur.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-page0cur.Tpo" -c -o libinnobase_a-page0cur.o `test -f 'page/page0cur.c' || echo '$(srcdir)/'`page/page0cur.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-page0cur.Tpo" "$(DEPDIR)/libinnobase_a-page0cur.Po"; else rm -f "$(DEPDIR)/libinnobase_a-page0cur.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='page/page0cur.c' object='libinnobase_a-page0cur.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-page0cur.o `test -f 'page/page0cur.c' || echo '$(srcdir)/'`page/page0cur.c libinnobase_a-page0cur.obj: page/page0cur.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0cur.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-page0cur.Tpo -c -o libinnobase_a-page0cur.obj `if test -f 'page/page0cur.c'; then $(CYGPATH_W) 'page/page0cur.c'; else $(CYGPATH_W) '$(srcdir)/page/page0cur.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-page0cur.Tpo $(DEPDIR)/libinnobase_a-page0cur.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0cur.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-page0cur.Tpo" -c -o libinnobase_a-page0cur.obj `if test -f 'page/page0cur.c'; then $(CYGPATH_W) 'page/page0cur.c'; else $(CYGPATH_W) '$(srcdir)/page/page0cur.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-page0cur.Tpo" "$(DEPDIR)/libinnobase_a-page0cur.Po"; else rm -f "$(DEPDIR)/libinnobase_a-page0cur.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='page/page0cur.c' object='libinnobase_a-page0cur.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-page0cur.obj `if test -f 'page/page0cur.c'; then $(CYGPATH_W) 'page/page0cur.c'; else $(CYGPATH_W) '$(srcdir)/page/page0cur.c'; fi` libinnobase_a-page0page.o: page/page0page.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0page.o -MD -MP -MF $(DEPDIR)/libinnobase_a-page0page.Tpo -c -o libinnobase_a-page0page.o `test -f 'page/page0page.c' || echo '$(srcdir)/'`page/page0page.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-page0page.Tpo $(DEPDIR)/libinnobase_a-page0page.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0page.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-page0page.Tpo" -c -o libinnobase_a-page0page.o `test -f 'page/page0page.c' || echo '$(srcdir)/'`page/page0page.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-page0page.Tpo" "$(DEPDIR)/libinnobase_a-page0page.Po"; else rm -f "$(DEPDIR)/libinnobase_a-page0page.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='page/page0page.c' object='libinnobase_a-page0page.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-page0page.o `test -f 'page/page0page.c' || echo '$(srcdir)/'`page/page0page.c libinnobase_a-page0page.obj: page/page0page.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0page.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-page0page.Tpo -c -o libinnobase_a-page0page.obj `if test -f 'page/page0page.c'; then $(CYGPATH_W) 'page/page0page.c'; else $(CYGPATH_W) '$(srcdir)/page/page0page.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-page0page.Tpo $(DEPDIR)/libinnobase_a-page0page.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0page.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-page0page.Tpo" -c -o libinnobase_a-page0page.obj `if test -f 'page/page0page.c'; then $(CYGPATH_W) 'page/page0page.c'; else $(CYGPATH_W) '$(srcdir)/page/page0page.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-page0page.Tpo" "$(DEPDIR)/libinnobase_a-page0page.Po"; else rm -f "$(DEPDIR)/libinnobase_a-page0page.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='page/page0page.c' object='libinnobase_a-page0page.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-page0page.obj `if test -f 'page/page0page.c'; then $(CYGPATH_W) 'page/page0page.c'; else $(CYGPATH_W) '$(srcdir)/page/page0page.c'; fi` libinnobase_a-page0zip.o: page/page0zip.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0zip.o -MD -MP -MF $(DEPDIR)/libinnobase_a-page0zip.Tpo -c -o libinnobase_a-page0zip.o `test -f 'page/page0zip.c' || echo '$(srcdir)/'`page/page0zip.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-page0zip.Tpo $(DEPDIR)/libinnobase_a-page0zip.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0zip.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-page0zip.Tpo" -c -o libinnobase_a-page0zip.o `test -f 'page/page0zip.c' || echo '$(srcdir)/'`page/page0zip.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-page0zip.Tpo" "$(DEPDIR)/libinnobase_a-page0zip.Po"; else rm -f "$(DEPDIR)/libinnobase_a-page0zip.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='page/page0zip.c' object='libinnobase_a-page0zip.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-page0zip.o `test -f 'page/page0zip.c' || echo '$(srcdir)/'`page/page0zip.c libinnobase_a-page0zip.obj: page/page0zip.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0zip.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-page0zip.Tpo -c -o libinnobase_a-page0zip.obj `if test -f 'page/page0zip.c'; then $(CYGPATH_W) 'page/page0zip.c'; else $(CYGPATH_W) '$(srcdir)/page/page0zip.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-page0zip.Tpo $(DEPDIR)/libinnobase_a-page0zip.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-page0zip.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-page0zip.Tpo" -c -o libinnobase_a-page0zip.obj `if test -f 'page/page0zip.c'; then $(CYGPATH_W) 'page/page0zip.c'; else $(CYGPATH_W) '$(srcdir)/page/page0zip.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-page0zip.Tpo" "$(DEPDIR)/libinnobase_a-page0zip.Po"; else rm -f "$(DEPDIR)/libinnobase_a-page0zip.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='page/page0zip.c' object='libinnobase_a-page0zip.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-page0zip.obj `if test -f 'page/page0zip.c'; then $(CYGPATH_W) 'page/page0zip.c'; else $(CYGPATH_W) '$(srcdir)/page/page0zip.c'; fi` libinnobase_a-lexyy.o: pars/lexyy.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lexyy.o -MD -MP -MF $(DEPDIR)/libinnobase_a-lexyy.Tpo -c -o libinnobase_a-lexyy.o `test -f 'pars/lexyy.c' || echo '$(srcdir)/'`pars/lexyy.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-lexyy.Tpo $(DEPDIR)/libinnobase_a-lexyy.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lexyy.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-lexyy.Tpo" -c -o libinnobase_a-lexyy.o `test -f 'pars/lexyy.c' || echo '$(srcdir)/'`pars/lexyy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-lexyy.Tpo" "$(DEPDIR)/libinnobase_a-lexyy.Po"; else rm -f "$(DEPDIR)/libinnobase_a-lexyy.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/lexyy.c' object='libinnobase_a-lexyy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-lexyy.o `test -f 'pars/lexyy.c' || echo '$(srcdir)/'`pars/lexyy.c libinnobase_a-lexyy.obj: pars/lexyy.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lexyy.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-lexyy.Tpo -c -o libinnobase_a-lexyy.obj `if test -f 'pars/lexyy.c'; then $(CYGPATH_W) 'pars/lexyy.c'; else $(CYGPATH_W) '$(srcdir)/pars/lexyy.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-lexyy.Tpo $(DEPDIR)/libinnobase_a-lexyy.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-lexyy.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-lexyy.Tpo" -c -o libinnobase_a-lexyy.obj `if test -f 'pars/lexyy.c'; then $(CYGPATH_W) 'pars/lexyy.c'; else $(CYGPATH_W) '$(srcdir)/pars/lexyy.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-lexyy.Tpo" "$(DEPDIR)/libinnobase_a-lexyy.Po"; else rm -f "$(DEPDIR)/libinnobase_a-lexyy.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/lexyy.c' object='libinnobase_a-lexyy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-lexyy.obj `if test -f 'pars/lexyy.c'; then $(CYGPATH_W) 'pars/lexyy.c'; else $(CYGPATH_W) '$(srcdir)/pars/lexyy.c'; fi` libinnobase_a-pars0grm.o: pars/pars0grm.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0grm.o -MD -MP -MF $(DEPDIR)/libinnobase_a-pars0grm.Tpo -c -o libinnobase_a-pars0grm.o `test -f 'pars/pars0grm.c' || echo '$(srcdir)/'`pars/pars0grm.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-pars0grm.Tpo $(DEPDIR)/libinnobase_a-pars0grm.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0grm.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-pars0grm.Tpo" -c -o libinnobase_a-pars0grm.o `test -f 'pars/pars0grm.c' || echo '$(srcdir)/'`pars/pars0grm.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-pars0grm.Tpo" "$(DEPDIR)/libinnobase_a-pars0grm.Po"; else rm -f "$(DEPDIR)/libinnobase_a-pars0grm.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0grm.c' object='libinnobase_a-pars0grm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-pars0grm.o `test -f 'pars/pars0grm.c' || echo '$(srcdir)/'`pars/pars0grm.c libinnobase_a-pars0grm.obj: pars/pars0grm.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0grm.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-pars0grm.Tpo -c -o libinnobase_a-pars0grm.obj `if test -f 'pars/pars0grm.c'; then $(CYGPATH_W) 'pars/pars0grm.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0grm.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-pars0grm.Tpo $(DEPDIR)/libinnobase_a-pars0grm.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0grm.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-pars0grm.Tpo" -c -o libinnobase_a-pars0grm.obj `if test -f 'pars/pars0grm.c'; then $(CYGPATH_W) 'pars/pars0grm.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0grm.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-pars0grm.Tpo" "$(DEPDIR)/libinnobase_a-pars0grm.Po"; else rm -f "$(DEPDIR)/libinnobase_a-pars0grm.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0grm.c' object='libinnobase_a-pars0grm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-pars0grm.obj `if test -f 'pars/pars0grm.c'; then $(CYGPATH_W) 'pars/pars0grm.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0grm.c'; fi` libinnobase_a-pars0opt.o: pars/pars0opt.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0opt.o -MD -MP -MF $(DEPDIR)/libinnobase_a-pars0opt.Tpo -c -o libinnobase_a-pars0opt.o `test -f 'pars/pars0opt.c' || echo '$(srcdir)/'`pars/pars0opt.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-pars0opt.Tpo $(DEPDIR)/libinnobase_a-pars0opt.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0opt.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-pars0opt.Tpo" -c -o libinnobase_a-pars0opt.o `test -f 'pars/pars0opt.c' || echo '$(srcdir)/'`pars/pars0opt.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-pars0opt.Tpo" "$(DEPDIR)/libinnobase_a-pars0opt.Po"; else rm -f "$(DEPDIR)/libinnobase_a-pars0opt.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0opt.c' object='libinnobase_a-pars0opt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-pars0opt.o `test -f 'pars/pars0opt.c' || echo '$(srcdir)/'`pars/pars0opt.c libinnobase_a-pars0opt.obj: pars/pars0opt.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0opt.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-pars0opt.Tpo -c -o libinnobase_a-pars0opt.obj `if test -f 'pars/pars0opt.c'; then $(CYGPATH_W) 'pars/pars0opt.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0opt.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-pars0opt.Tpo $(DEPDIR)/libinnobase_a-pars0opt.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0opt.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-pars0opt.Tpo" -c -o libinnobase_a-pars0opt.obj `if test -f 'pars/pars0opt.c'; then $(CYGPATH_W) 'pars/pars0opt.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0opt.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-pars0opt.Tpo" "$(DEPDIR)/libinnobase_a-pars0opt.Po"; else rm -f "$(DEPDIR)/libinnobase_a-pars0opt.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0opt.c' object='libinnobase_a-pars0opt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-pars0opt.obj `if test -f 'pars/pars0opt.c'; then $(CYGPATH_W) 'pars/pars0opt.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0opt.c'; fi` libinnobase_a-pars0pars.o: pars/pars0pars.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0pars.o -MD -MP -MF $(DEPDIR)/libinnobase_a-pars0pars.Tpo -c -o libinnobase_a-pars0pars.o `test -f 'pars/pars0pars.c' || echo '$(srcdir)/'`pars/pars0pars.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-pars0pars.Tpo $(DEPDIR)/libinnobase_a-pars0pars.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0pars.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-pars0pars.Tpo" -c -o libinnobase_a-pars0pars.o `test -f 'pars/pars0pars.c' || echo '$(srcdir)/'`pars/pars0pars.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-pars0pars.Tpo" "$(DEPDIR)/libinnobase_a-pars0pars.Po"; else rm -f "$(DEPDIR)/libinnobase_a-pars0pars.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0pars.c' object='libinnobase_a-pars0pars.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-pars0pars.o `test -f 'pars/pars0pars.c' || echo '$(srcdir)/'`pars/pars0pars.c libinnobase_a-pars0pars.obj: pars/pars0pars.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0pars.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-pars0pars.Tpo -c -o libinnobase_a-pars0pars.obj `if test -f 'pars/pars0pars.c'; then $(CYGPATH_W) 'pars/pars0pars.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0pars.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-pars0pars.Tpo $(DEPDIR)/libinnobase_a-pars0pars.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0pars.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-pars0pars.Tpo" -c -o libinnobase_a-pars0pars.obj `if test -f 'pars/pars0pars.c'; then $(CYGPATH_W) 'pars/pars0pars.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0pars.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-pars0pars.Tpo" "$(DEPDIR)/libinnobase_a-pars0pars.Po"; else rm -f "$(DEPDIR)/libinnobase_a-pars0pars.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0pars.c' object='libinnobase_a-pars0pars.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-pars0pars.obj `if test -f 'pars/pars0pars.c'; then $(CYGPATH_W) 'pars/pars0pars.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0pars.c'; fi` libinnobase_a-pars0sym.o: pars/pars0sym.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0sym.o -MD -MP -MF $(DEPDIR)/libinnobase_a-pars0sym.Tpo -c -o libinnobase_a-pars0sym.o `test -f 'pars/pars0sym.c' || echo '$(srcdir)/'`pars/pars0sym.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-pars0sym.Tpo $(DEPDIR)/libinnobase_a-pars0sym.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0sym.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-pars0sym.Tpo" -c -o libinnobase_a-pars0sym.o `test -f 'pars/pars0sym.c' || echo '$(srcdir)/'`pars/pars0sym.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-pars0sym.Tpo" "$(DEPDIR)/libinnobase_a-pars0sym.Po"; else rm -f "$(DEPDIR)/libinnobase_a-pars0sym.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0sym.c' object='libinnobase_a-pars0sym.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-pars0sym.o `test -f 'pars/pars0sym.c' || echo '$(srcdir)/'`pars/pars0sym.c libinnobase_a-pars0sym.obj: pars/pars0sym.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0sym.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-pars0sym.Tpo -c -o libinnobase_a-pars0sym.obj `if test -f 'pars/pars0sym.c'; then $(CYGPATH_W) 'pars/pars0sym.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0sym.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-pars0sym.Tpo $(DEPDIR)/libinnobase_a-pars0sym.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-pars0sym.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-pars0sym.Tpo" -c -o libinnobase_a-pars0sym.obj `if test -f 'pars/pars0sym.c'; then $(CYGPATH_W) 'pars/pars0sym.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0sym.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-pars0sym.Tpo" "$(DEPDIR)/libinnobase_a-pars0sym.Po"; else rm -f "$(DEPDIR)/libinnobase_a-pars0sym.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0sym.c' object='libinnobase_a-pars0sym.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-pars0sym.obj `if test -f 'pars/pars0sym.c'; then $(CYGPATH_W) 'pars/pars0sym.c'; else $(CYGPATH_W) '$(srcdir)/pars/pars0sym.c'; fi` libinnobase_a-que0que.o: que/que0que.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-que0que.o -MD -MP -MF $(DEPDIR)/libinnobase_a-que0que.Tpo -c -o libinnobase_a-que0que.o `test -f 'que/que0que.c' || echo '$(srcdir)/'`que/que0que.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-que0que.Tpo $(DEPDIR)/libinnobase_a-que0que.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-que0que.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-que0que.Tpo" -c -o libinnobase_a-que0que.o `test -f 'que/que0que.c' || echo '$(srcdir)/'`que/que0que.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-que0que.Tpo" "$(DEPDIR)/libinnobase_a-que0que.Po"; else rm -f "$(DEPDIR)/libinnobase_a-que0que.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='que/que0que.c' object='libinnobase_a-que0que.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-que0que.o `test -f 'que/que0que.c' || echo '$(srcdir)/'`que/que0que.c libinnobase_a-que0que.obj: que/que0que.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-que0que.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-que0que.Tpo -c -o libinnobase_a-que0que.obj `if test -f 'que/que0que.c'; then $(CYGPATH_W) 'que/que0que.c'; else $(CYGPATH_W) '$(srcdir)/que/que0que.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-que0que.Tpo $(DEPDIR)/libinnobase_a-que0que.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-que0que.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-que0que.Tpo" -c -o libinnobase_a-que0que.obj `if test -f 'que/que0que.c'; then $(CYGPATH_W) 'que/que0que.c'; else $(CYGPATH_W) '$(srcdir)/que/que0que.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-que0que.Tpo" "$(DEPDIR)/libinnobase_a-que0que.Po"; else rm -f "$(DEPDIR)/libinnobase_a-que0que.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='que/que0que.c' object='libinnobase_a-que0que.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-que0que.obj `if test -f 'que/que0que.c'; then $(CYGPATH_W) 'que/que0que.c'; else $(CYGPATH_W) '$(srcdir)/que/que0que.c'; fi` libinnobase_a-read0read.o: read/read0read.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-read0read.o -MD -MP -MF $(DEPDIR)/libinnobase_a-read0read.Tpo -c -o libinnobase_a-read0read.o `test -f 'read/read0read.c' || echo '$(srcdir)/'`read/read0read.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-read0read.Tpo $(DEPDIR)/libinnobase_a-read0read.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-read0read.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-read0read.Tpo" -c -o libinnobase_a-read0read.o `test -f 'read/read0read.c' || echo '$(srcdir)/'`read/read0read.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-read0read.Tpo" "$(DEPDIR)/libinnobase_a-read0read.Po"; else rm -f "$(DEPDIR)/libinnobase_a-read0read.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='read/read0read.c' object='libinnobase_a-read0read.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-read0read.o `test -f 'read/read0read.c' || echo '$(srcdir)/'`read/read0read.c libinnobase_a-read0read.obj: read/read0read.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-read0read.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-read0read.Tpo -c -o libinnobase_a-read0read.obj `if test -f 'read/read0read.c'; then $(CYGPATH_W) 'read/read0read.c'; else $(CYGPATH_W) '$(srcdir)/read/read0read.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-read0read.Tpo $(DEPDIR)/libinnobase_a-read0read.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-read0read.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-read0read.Tpo" -c -o libinnobase_a-read0read.obj `if test -f 'read/read0read.c'; then $(CYGPATH_W) 'read/read0read.c'; else $(CYGPATH_W) '$(srcdir)/read/read0read.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-read0read.Tpo" "$(DEPDIR)/libinnobase_a-read0read.Po"; else rm -f "$(DEPDIR)/libinnobase_a-read0read.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='read/read0read.c' object='libinnobase_a-read0read.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-read0read.obj `if test -f 'read/read0read.c'; then $(CYGPATH_W) 'read/read0read.c'; else $(CYGPATH_W) '$(srcdir)/read/read0read.c'; fi` libinnobase_a-rem0cmp.o: rem/rem0cmp.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-rem0cmp.o -MD -MP -MF $(DEPDIR)/libinnobase_a-rem0cmp.Tpo -c -o libinnobase_a-rem0cmp.o `test -f 'rem/rem0cmp.c' || echo '$(srcdir)/'`rem/rem0cmp.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-rem0cmp.Tpo $(DEPDIR)/libinnobase_a-rem0cmp.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-rem0cmp.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-rem0cmp.Tpo" -c -o libinnobase_a-rem0cmp.o `test -f 'rem/rem0cmp.c' || echo '$(srcdir)/'`rem/rem0cmp.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-rem0cmp.Tpo" "$(DEPDIR)/libinnobase_a-rem0cmp.Po"; else rm -f "$(DEPDIR)/libinnobase_a-rem0cmp.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rem/rem0cmp.c' object='libinnobase_a-rem0cmp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-rem0cmp.o `test -f 'rem/rem0cmp.c' || echo '$(srcdir)/'`rem/rem0cmp.c libinnobase_a-rem0cmp.obj: rem/rem0cmp.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-rem0cmp.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-rem0cmp.Tpo -c -o libinnobase_a-rem0cmp.obj `if test -f 'rem/rem0cmp.c'; then $(CYGPATH_W) 'rem/rem0cmp.c'; else $(CYGPATH_W) '$(srcdir)/rem/rem0cmp.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-rem0cmp.Tpo $(DEPDIR)/libinnobase_a-rem0cmp.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-rem0cmp.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-rem0cmp.Tpo" -c -o libinnobase_a-rem0cmp.obj `if test -f 'rem/rem0cmp.c'; then $(CYGPATH_W) 'rem/rem0cmp.c'; else $(CYGPATH_W) '$(srcdir)/rem/rem0cmp.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-rem0cmp.Tpo" "$(DEPDIR)/libinnobase_a-rem0cmp.Po"; else rm -f "$(DEPDIR)/libinnobase_a-rem0cmp.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rem/rem0cmp.c' object='libinnobase_a-rem0cmp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-rem0cmp.obj `if test -f 'rem/rem0cmp.c'; then $(CYGPATH_W) 'rem/rem0cmp.c'; else $(CYGPATH_W) '$(srcdir)/rem/rem0cmp.c'; fi` libinnobase_a-rem0rec.o: rem/rem0rec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-rem0rec.o -MD -MP -MF $(DEPDIR)/libinnobase_a-rem0rec.Tpo -c -o libinnobase_a-rem0rec.o `test -f 'rem/rem0rec.c' || echo '$(srcdir)/'`rem/rem0rec.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-rem0rec.Tpo $(DEPDIR)/libinnobase_a-rem0rec.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-rem0rec.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-rem0rec.Tpo" -c -o libinnobase_a-rem0rec.o `test -f 'rem/rem0rec.c' || echo '$(srcdir)/'`rem/rem0rec.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-rem0rec.Tpo" "$(DEPDIR)/libinnobase_a-rem0rec.Po"; else rm -f "$(DEPDIR)/libinnobase_a-rem0rec.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rem/rem0rec.c' object='libinnobase_a-rem0rec.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-rem0rec.o `test -f 'rem/rem0rec.c' || echo '$(srcdir)/'`rem/rem0rec.c libinnobase_a-rem0rec.obj: rem/rem0rec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-rem0rec.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-rem0rec.Tpo -c -o libinnobase_a-rem0rec.obj `if test -f 'rem/rem0rec.c'; then $(CYGPATH_W) 'rem/rem0rec.c'; else $(CYGPATH_W) '$(srcdir)/rem/rem0rec.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-rem0rec.Tpo $(DEPDIR)/libinnobase_a-rem0rec.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-rem0rec.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-rem0rec.Tpo" -c -o libinnobase_a-rem0rec.obj `if test -f 'rem/rem0rec.c'; then $(CYGPATH_W) 'rem/rem0rec.c'; else $(CYGPATH_W) '$(srcdir)/rem/rem0rec.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-rem0rec.Tpo" "$(DEPDIR)/libinnobase_a-rem0rec.Po"; else rm -f "$(DEPDIR)/libinnobase_a-rem0rec.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rem/rem0rec.c' object='libinnobase_a-rem0rec.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-rem0rec.obj `if test -f 'rem/rem0rec.c'; then $(CYGPATH_W) 'rem/rem0rec.c'; else $(CYGPATH_W) '$(srcdir)/rem/rem0rec.c'; fi` libinnobase_a-row0ext.o: row/row0ext.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0ext.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0ext.Tpo -c -o libinnobase_a-row0ext.o `test -f 'row/row0ext.c' || echo '$(srcdir)/'`row/row0ext.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0ext.Tpo $(DEPDIR)/libinnobase_a-row0ext.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0ext.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0ext.Tpo" -c -o libinnobase_a-row0ext.o `test -f 'row/row0ext.c' || echo '$(srcdir)/'`row/row0ext.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0ext.Tpo" "$(DEPDIR)/libinnobase_a-row0ext.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0ext.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0ext.c' object='libinnobase_a-row0ext.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0ext.o `test -f 'row/row0ext.c' || echo '$(srcdir)/'`row/row0ext.c libinnobase_a-row0ext.obj: row/row0ext.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0ext.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0ext.Tpo -c -o libinnobase_a-row0ext.obj `if test -f 'row/row0ext.c'; then $(CYGPATH_W) 'row/row0ext.c'; else $(CYGPATH_W) '$(srcdir)/row/row0ext.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0ext.Tpo $(DEPDIR)/libinnobase_a-row0ext.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0ext.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0ext.Tpo" -c -o libinnobase_a-row0ext.obj `if test -f 'row/row0ext.c'; then $(CYGPATH_W) 'row/row0ext.c'; else $(CYGPATH_W) '$(srcdir)/row/row0ext.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0ext.Tpo" "$(DEPDIR)/libinnobase_a-row0ext.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0ext.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0ext.c' object='libinnobase_a-row0ext.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0ext.obj `if test -f 'row/row0ext.c'; then $(CYGPATH_W) 'row/row0ext.c'; else $(CYGPATH_W) '$(srcdir)/row/row0ext.c'; fi` libinnobase_a-row0ins.o: row/row0ins.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0ins.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0ins.Tpo -c -o libinnobase_a-row0ins.o `test -f 'row/row0ins.c' || echo '$(srcdir)/'`row/row0ins.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0ins.Tpo $(DEPDIR)/libinnobase_a-row0ins.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0ins.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0ins.Tpo" -c -o libinnobase_a-row0ins.o `test -f 'row/row0ins.c' || echo '$(srcdir)/'`row/row0ins.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0ins.Tpo" "$(DEPDIR)/libinnobase_a-row0ins.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0ins.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0ins.c' object='libinnobase_a-row0ins.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0ins.o `test -f 'row/row0ins.c' || echo '$(srcdir)/'`row/row0ins.c libinnobase_a-row0ins.obj: row/row0ins.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0ins.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0ins.Tpo -c -o libinnobase_a-row0ins.obj `if test -f 'row/row0ins.c'; then $(CYGPATH_W) 'row/row0ins.c'; else $(CYGPATH_W) '$(srcdir)/row/row0ins.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0ins.Tpo $(DEPDIR)/libinnobase_a-row0ins.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0ins.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0ins.Tpo" -c -o libinnobase_a-row0ins.obj `if test -f 'row/row0ins.c'; then $(CYGPATH_W) 'row/row0ins.c'; else $(CYGPATH_W) '$(srcdir)/row/row0ins.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0ins.Tpo" "$(DEPDIR)/libinnobase_a-row0ins.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0ins.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0ins.c' object='libinnobase_a-row0ins.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0ins.obj `if test -f 'row/row0ins.c'; then $(CYGPATH_W) 'row/row0ins.c'; else $(CYGPATH_W) '$(srcdir)/row/row0ins.c'; fi` libinnobase_a-row0merge.o: row/row0merge.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0merge.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0merge.Tpo -c -o libinnobase_a-row0merge.o `test -f 'row/row0merge.c' || echo '$(srcdir)/'`row/row0merge.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0merge.Tpo $(DEPDIR)/libinnobase_a-row0merge.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0merge.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0merge.Tpo" -c -o libinnobase_a-row0merge.o `test -f 'row/row0merge.c' || echo '$(srcdir)/'`row/row0merge.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0merge.Tpo" "$(DEPDIR)/libinnobase_a-row0merge.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0merge.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0merge.c' object='libinnobase_a-row0merge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0merge.o `test -f 'row/row0merge.c' || echo '$(srcdir)/'`row/row0merge.c libinnobase_a-row0merge.obj: row/row0merge.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0merge.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0merge.Tpo -c -o libinnobase_a-row0merge.obj `if test -f 'row/row0merge.c'; then $(CYGPATH_W) 'row/row0merge.c'; else $(CYGPATH_W) '$(srcdir)/row/row0merge.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0merge.Tpo $(DEPDIR)/libinnobase_a-row0merge.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0merge.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0merge.Tpo" -c -o libinnobase_a-row0merge.obj `if test -f 'row/row0merge.c'; then $(CYGPATH_W) 'row/row0merge.c'; else $(CYGPATH_W) '$(srcdir)/row/row0merge.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0merge.Tpo" "$(DEPDIR)/libinnobase_a-row0merge.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0merge.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0merge.c' object='libinnobase_a-row0merge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0merge.obj `if test -f 'row/row0merge.c'; then $(CYGPATH_W) 'row/row0merge.c'; else $(CYGPATH_W) '$(srcdir)/row/row0merge.c'; fi` libinnobase_a-row0mysql.o: row/row0mysql.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0mysql.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0mysql.Tpo -c -o libinnobase_a-row0mysql.o `test -f 'row/row0mysql.c' || echo '$(srcdir)/'`row/row0mysql.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0mysql.Tpo $(DEPDIR)/libinnobase_a-row0mysql.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0mysql.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0mysql.Tpo" -c -o libinnobase_a-row0mysql.o `test -f 'row/row0mysql.c' || echo '$(srcdir)/'`row/row0mysql.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0mysql.Tpo" "$(DEPDIR)/libinnobase_a-row0mysql.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0mysql.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0mysql.c' object='libinnobase_a-row0mysql.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0mysql.o `test -f 'row/row0mysql.c' || echo '$(srcdir)/'`row/row0mysql.c libinnobase_a-row0mysql.obj: row/row0mysql.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0mysql.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0mysql.Tpo -c -o libinnobase_a-row0mysql.obj `if test -f 'row/row0mysql.c'; then $(CYGPATH_W) 'row/row0mysql.c'; else $(CYGPATH_W) '$(srcdir)/row/row0mysql.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0mysql.Tpo $(DEPDIR)/libinnobase_a-row0mysql.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0mysql.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0mysql.Tpo" -c -o libinnobase_a-row0mysql.obj `if test -f 'row/row0mysql.c'; then $(CYGPATH_W) 'row/row0mysql.c'; else $(CYGPATH_W) '$(srcdir)/row/row0mysql.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0mysql.Tpo" "$(DEPDIR)/libinnobase_a-row0mysql.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0mysql.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0mysql.c' object='libinnobase_a-row0mysql.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0mysql.obj `if test -f 'row/row0mysql.c'; then $(CYGPATH_W) 'row/row0mysql.c'; else $(CYGPATH_W) '$(srcdir)/row/row0mysql.c'; fi` libinnobase_a-row0purge.o: row/row0purge.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0purge.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0purge.Tpo -c -o libinnobase_a-row0purge.o `test -f 'row/row0purge.c' || echo '$(srcdir)/'`row/row0purge.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0purge.Tpo $(DEPDIR)/libinnobase_a-row0purge.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0purge.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0purge.Tpo" -c -o libinnobase_a-row0purge.o `test -f 'row/row0purge.c' || echo '$(srcdir)/'`row/row0purge.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0purge.Tpo" "$(DEPDIR)/libinnobase_a-row0purge.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0purge.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0purge.c' object='libinnobase_a-row0purge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0purge.o `test -f 'row/row0purge.c' || echo '$(srcdir)/'`row/row0purge.c libinnobase_a-row0purge.obj: row/row0purge.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0purge.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0purge.Tpo -c -o libinnobase_a-row0purge.obj `if test -f 'row/row0purge.c'; then $(CYGPATH_W) 'row/row0purge.c'; else $(CYGPATH_W) '$(srcdir)/row/row0purge.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0purge.Tpo $(DEPDIR)/libinnobase_a-row0purge.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0purge.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0purge.Tpo" -c -o libinnobase_a-row0purge.obj `if test -f 'row/row0purge.c'; then $(CYGPATH_W) 'row/row0purge.c'; else $(CYGPATH_W) '$(srcdir)/row/row0purge.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0purge.Tpo" "$(DEPDIR)/libinnobase_a-row0purge.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0purge.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0purge.c' object='libinnobase_a-row0purge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0purge.obj `if test -f 'row/row0purge.c'; then $(CYGPATH_W) 'row/row0purge.c'; else $(CYGPATH_W) '$(srcdir)/row/row0purge.c'; fi` libinnobase_a-row0row.o: row/row0row.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0row.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0row.Tpo -c -o libinnobase_a-row0row.o `test -f 'row/row0row.c' || echo '$(srcdir)/'`row/row0row.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0row.Tpo $(DEPDIR)/libinnobase_a-row0row.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0row.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0row.Tpo" -c -o libinnobase_a-row0row.o `test -f 'row/row0row.c' || echo '$(srcdir)/'`row/row0row.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0row.Tpo" "$(DEPDIR)/libinnobase_a-row0row.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0row.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0row.c' object='libinnobase_a-row0row.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0row.o `test -f 'row/row0row.c' || echo '$(srcdir)/'`row/row0row.c libinnobase_a-row0row.obj: row/row0row.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0row.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0row.Tpo -c -o libinnobase_a-row0row.obj `if test -f 'row/row0row.c'; then $(CYGPATH_W) 'row/row0row.c'; else $(CYGPATH_W) '$(srcdir)/row/row0row.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0row.Tpo $(DEPDIR)/libinnobase_a-row0row.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0row.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0row.Tpo" -c -o libinnobase_a-row0row.obj `if test -f 'row/row0row.c'; then $(CYGPATH_W) 'row/row0row.c'; else $(CYGPATH_W) '$(srcdir)/row/row0row.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0row.Tpo" "$(DEPDIR)/libinnobase_a-row0row.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0row.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0row.c' object='libinnobase_a-row0row.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0row.obj `if test -f 'row/row0row.c'; then $(CYGPATH_W) 'row/row0row.c'; else $(CYGPATH_W) '$(srcdir)/row/row0row.c'; fi` libinnobase_a-row0sel.o: row/row0sel.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0sel.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0sel.Tpo -c -o libinnobase_a-row0sel.o `test -f 'row/row0sel.c' || echo '$(srcdir)/'`row/row0sel.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0sel.Tpo $(DEPDIR)/libinnobase_a-row0sel.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0sel.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0sel.Tpo" -c -o libinnobase_a-row0sel.o `test -f 'row/row0sel.c' || echo '$(srcdir)/'`row/row0sel.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0sel.Tpo" "$(DEPDIR)/libinnobase_a-row0sel.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0sel.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0sel.c' object='libinnobase_a-row0sel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0sel.o `test -f 'row/row0sel.c' || echo '$(srcdir)/'`row/row0sel.c libinnobase_a-row0sel.obj: row/row0sel.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0sel.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0sel.Tpo -c -o libinnobase_a-row0sel.obj `if test -f 'row/row0sel.c'; then $(CYGPATH_W) 'row/row0sel.c'; else $(CYGPATH_W) '$(srcdir)/row/row0sel.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0sel.Tpo $(DEPDIR)/libinnobase_a-row0sel.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0sel.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0sel.Tpo" -c -o libinnobase_a-row0sel.obj `if test -f 'row/row0sel.c'; then $(CYGPATH_W) 'row/row0sel.c'; else $(CYGPATH_W) '$(srcdir)/row/row0sel.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0sel.Tpo" "$(DEPDIR)/libinnobase_a-row0sel.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0sel.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0sel.c' object='libinnobase_a-row0sel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0sel.obj `if test -f 'row/row0sel.c'; then $(CYGPATH_W) 'row/row0sel.c'; else $(CYGPATH_W) '$(srcdir)/row/row0sel.c'; fi` libinnobase_a-row0uins.o: row/row0uins.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0uins.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0uins.Tpo -c -o libinnobase_a-row0uins.o `test -f 'row/row0uins.c' || echo '$(srcdir)/'`row/row0uins.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0uins.Tpo $(DEPDIR)/libinnobase_a-row0uins.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0uins.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0uins.Tpo" -c -o libinnobase_a-row0uins.o `test -f 'row/row0uins.c' || echo '$(srcdir)/'`row/row0uins.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0uins.Tpo" "$(DEPDIR)/libinnobase_a-row0uins.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0uins.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0uins.c' object='libinnobase_a-row0uins.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0uins.o `test -f 'row/row0uins.c' || echo '$(srcdir)/'`row/row0uins.c libinnobase_a-row0uins.obj: row/row0uins.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0uins.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0uins.Tpo -c -o libinnobase_a-row0uins.obj `if test -f 'row/row0uins.c'; then $(CYGPATH_W) 'row/row0uins.c'; else $(CYGPATH_W) '$(srcdir)/row/row0uins.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0uins.Tpo $(DEPDIR)/libinnobase_a-row0uins.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0uins.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0uins.Tpo" -c -o libinnobase_a-row0uins.obj `if test -f 'row/row0uins.c'; then $(CYGPATH_W) 'row/row0uins.c'; else $(CYGPATH_W) '$(srcdir)/row/row0uins.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0uins.Tpo" "$(DEPDIR)/libinnobase_a-row0uins.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0uins.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0uins.c' object='libinnobase_a-row0uins.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0uins.obj `if test -f 'row/row0uins.c'; then $(CYGPATH_W) 'row/row0uins.c'; else $(CYGPATH_W) '$(srcdir)/row/row0uins.c'; fi` libinnobase_a-row0umod.o: row/row0umod.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0umod.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0umod.Tpo -c -o libinnobase_a-row0umod.o `test -f 'row/row0umod.c' || echo '$(srcdir)/'`row/row0umod.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0umod.Tpo $(DEPDIR)/libinnobase_a-row0umod.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0umod.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0umod.Tpo" -c -o libinnobase_a-row0umod.o `test -f 'row/row0umod.c' || echo '$(srcdir)/'`row/row0umod.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0umod.Tpo" "$(DEPDIR)/libinnobase_a-row0umod.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0umod.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0umod.c' object='libinnobase_a-row0umod.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0umod.o `test -f 'row/row0umod.c' || echo '$(srcdir)/'`row/row0umod.c libinnobase_a-row0umod.obj: row/row0umod.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0umod.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0umod.Tpo -c -o libinnobase_a-row0umod.obj `if test -f 'row/row0umod.c'; then $(CYGPATH_W) 'row/row0umod.c'; else $(CYGPATH_W) '$(srcdir)/row/row0umod.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0umod.Tpo $(DEPDIR)/libinnobase_a-row0umod.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0umod.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0umod.Tpo" -c -o libinnobase_a-row0umod.obj `if test -f 'row/row0umod.c'; then $(CYGPATH_W) 'row/row0umod.c'; else $(CYGPATH_W) '$(srcdir)/row/row0umod.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0umod.Tpo" "$(DEPDIR)/libinnobase_a-row0umod.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0umod.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0umod.c' object='libinnobase_a-row0umod.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0umod.obj `if test -f 'row/row0umod.c'; then $(CYGPATH_W) 'row/row0umod.c'; else $(CYGPATH_W) '$(srcdir)/row/row0umod.c'; fi` libinnobase_a-row0undo.o: row/row0undo.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0undo.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0undo.Tpo -c -o libinnobase_a-row0undo.o `test -f 'row/row0undo.c' || echo '$(srcdir)/'`row/row0undo.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0undo.Tpo $(DEPDIR)/libinnobase_a-row0undo.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0undo.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0undo.Tpo" -c -o libinnobase_a-row0undo.o `test -f 'row/row0undo.c' || echo '$(srcdir)/'`row/row0undo.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0undo.Tpo" "$(DEPDIR)/libinnobase_a-row0undo.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0undo.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0undo.c' object='libinnobase_a-row0undo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0undo.o `test -f 'row/row0undo.c' || echo '$(srcdir)/'`row/row0undo.c libinnobase_a-row0undo.obj: row/row0undo.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0undo.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0undo.Tpo -c -o libinnobase_a-row0undo.obj `if test -f 'row/row0undo.c'; then $(CYGPATH_W) 'row/row0undo.c'; else $(CYGPATH_W) '$(srcdir)/row/row0undo.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0undo.Tpo $(DEPDIR)/libinnobase_a-row0undo.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0undo.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0undo.Tpo" -c -o libinnobase_a-row0undo.obj `if test -f 'row/row0undo.c'; then $(CYGPATH_W) 'row/row0undo.c'; else $(CYGPATH_W) '$(srcdir)/row/row0undo.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0undo.Tpo" "$(DEPDIR)/libinnobase_a-row0undo.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0undo.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0undo.c' object='libinnobase_a-row0undo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0undo.obj `if test -f 'row/row0undo.c'; then $(CYGPATH_W) 'row/row0undo.c'; else $(CYGPATH_W) '$(srcdir)/row/row0undo.c'; fi` libinnobase_a-row0upd.o: row/row0upd.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0upd.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0upd.Tpo -c -o libinnobase_a-row0upd.o `test -f 'row/row0upd.c' || echo '$(srcdir)/'`row/row0upd.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0upd.Tpo $(DEPDIR)/libinnobase_a-row0upd.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0upd.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0upd.Tpo" -c -o libinnobase_a-row0upd.o `test -f 'row/row0upd.c' || echo '$(srcdir)/'`row/row0upd.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0upd.Tpo" "$(DEPDIR)/libinnobase_a-row0upd.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0upd.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0upd.c' object='libinnobase_a-row0upd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0upd.o `test -f 'row/row0upd.c' || echo '$(srcdir)/'`row/row0upd.c libinnobase_a-row0upd.obj: row/row0upd.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0upd.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0upd.Tpo -c -o libinnobase_a-row0upd.obj `if test -f 'row/row0upd.c'; then $(CYGPATH_W) 'row/row0upd.c'; else $(CYGPATH_W) '$(srcdir)/row/row0upd.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0upd.Tpo $(DEPDIR)/libinnobase_a-row0upd.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0upd.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0upd.Tpo" -c -o libinnobase_a-row0upd.obj `if test -f 'row/row0upd.c'; then $(CYGPATH_W) 'row/row0upd.c'; else $(CYGPATH_W) '$(srcdir)/row/row0upd.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0upd.Tpo" "$(DEPDIR)/libinnobase_a-row0upd.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0upd.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0upd.c' object='libinnobase_a-row0upd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0upd.obj `if test -f 'row/row0upd.c'; then $(CYGPATH_W) 'row/row0upd.c'; else $(CYGPATH_W) '$(srcdir)/row/row0upd.c'; fi` libinnobase_a-row0vers.o: row/row0vers.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0vers.o -MD -MP -MF $(DEPDIR)/libinnobase_a-row0vers.Tpo -c -o libinnobase_a-row0vers.o `test -f 'row/row0vers.c' || echo '$(srcdir)/'`row/row0vers.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0vers.Tpo $(DEPDIR)/libinnobase_a-row0vers.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0vers.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0vers.Tpo" -c -o libinnobase_a-row0vers.o `test -f 'row/row0vers.c' || echo '$(srcdir)/'`row/row0vers.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0vers.Tpo" "$(DEPDIR)/libinnobase_a-row0vers.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0vers.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0vers.c' object='libinnobase_a-row0vers.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0vers.o `test -f 'row/row0vers.c' || echo '$(srcdir)/'`row/row0vers.c libinnobase_a-row0vers.obj: row/row0vers.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0vers.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-row0vers.Tpo -c -o libinnobase_a-row0vers.obj `if test -f 'row/row0vers.c'; then $(CYGPATH_W) 'row/row0vers.c'; else $(CYGPATH_W) '$(srcdir)/row/row0vers.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-row0vers.Tpo $(DEPDIR)/libinnobase_a-row0vers.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-row0vers.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-row0vers.Tpo" -c -o libinnobase_a-row0vers.obj `if test -f 'row/row0vers.c'; then $(CYGPATH_W) 'row/row0vers.c'; else $(CYGPATH_W) '$(srcdir)/row/row0vers.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-row0vers.Tpo" "$(DEPDIR)/libinnobase_a-row0vers.Po"; else rm -f "$(DEPDIR)/libinnobase_a-row0vers.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0vers.c' object='libinnobase_a-row0vers.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-row0vers.obj `if test -f 'row/row0vers.c'; then $(CYGPATH_W) 'row/row0vers.c'; else $(CYGPATH_W) '$(srcdir)/row/row0vers.c'; fi` libinnobase_a-srv0que.o: srv/srv0que.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0que.o -MD -MP -MF $(DEPDIR)/libinnobase_a-srv0que.Tpo -c -o libinnobase_a-srv0que.o `test -f 'srv/srv0que.c' || echo '$(srcdir)/'`srv/srv0que.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-srv0que.Tpo $(DEPDIR)/libinnobase_a-srv0que.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0que.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-srv0que.Tpo" -c -o libinnobase_a-srv0que.o `test -f 'srv/srv0que.c' || echo '$(srcdir)/'`srv/srv0que.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-srv0que.Tpo" "$(DEPDIR)/libinnobase_a-srv0que.Po"; else rm -f "$(DEPDIR)/libinnobase_a-srv0que.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='srv/srv0que.c' object='libinnobase_a-srv0que.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-srv0que.o `test -f 'srv/srv0que.c' || echo '$(srcdir)/'`srv/srv0que.c libinnobase_a-srv0que.obj: srv/srv0que.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0que.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-srv0que.Tpo -c -o libinnobase_a-srv0que.obj `if test -f 'srv/srv0que.c'; then $(CYGPATH_W) 'srv/srv0que.c'; else $(CYGPATH_W) '$(srcdir)/srv/srv0que.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-srv0que.Tpo $(DEPDIR)/libinnobase_a-srv0que.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0que.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-srv0que.Tpo" -c -o libinnobase_a-srv0que.obj `if test -f 'srv/srv0que.c'; then $(CYGPATH_W) 'srv/srv0que.c'; else $(CYGPATH_W) '$(srcdir)/srv/srv0que.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-srv0que.Tpo" "$(DEPDIR)/libinnobase_a-srv0que.Po"; else rm -f "$(DEPDIR)/libinnobase_a-srv0que.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='srv/srv0que.c' object='libinnobase_a-srv0que.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-srv0que.obj `if test -f 'srv/srv0que.c'; then $(CYGPATH_W) 'srv/srv0que.c'; else $(CYGPATH_W) '$(srcdir)/srv/srv0que.c'; fi` libinnobase_a-srv0srv.o: srv/srv0srv.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0srv.o -MD -MP -MF $(DEPDIR)/libinnobase_a-srv0srv.Tpo -c -o libinnobase_a-srv0srv.o `test -f 'srv/srv0srv.c' || echo '$(srcdir)/'`srv/srv0srv.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-srv0srv.Tpo $(DEPDIR)/libinnobase_a-srv0srv.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0srv.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-srv0srv.Tpo" -c -o libinnobase_a-srv0srv.o `test -f 'srv/srv0srv.c' || echo '$(srcdir)/'`srv/srv0srv.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-srv0srv.Tpo" "$(DEPDIR)/libinnobase_a-srv0srv.Po"; else rm -f "$(DEPDIR)/libinnobase_a-srv0srv.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='srv/srv0srv.c' object='libinnobase_a-srv0srv.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-srv0srv.o `test -f 'srv/srv0srv.c' || echo '$(srcdir)/'`srv/srv0srv.c libinnobase_a-srv0srv.obj: srv/srv0srv.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0srv.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-srv0srv.Tpo -c -o libinnobase_a-srv0srv.obj `if test -f 'srv/srv0srv.c'; then $(CYGPATH_W) 'srv/srv0srv.c'; else $(CYGPATH_W) '$(srcdir)/srv/srv0srv.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-srv0srv.Tpo $(DEPDIR)/libinnobase_a-srv0srv.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0srv.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-srv0srv.Tpo" -c -o libinnobase_a-srv0srv.obj `if test -f 'srv/srv0srv.c'; then $(CYGPATH_W) 'srv/srv0srv.c'; else $(CYGPATH_W) '$(srcdir)/srv/srv0srv.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-srv0srv.Tpo" "$(DEPDIR)/libinnobase_a-srv0srv.Po"; else rm -f "$(DEPDIR)/libinnobase_a-srv0srv.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='srv/srv0srv.c' object='libinnobase_a-srv0srv.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-srv0srv.obj `if test -f 'srv/srv0srv.c'; then $(CYGPATH_W) 'srv/srv0srv.c'; else $(CYGPATH_W) '$(srcdir)/srv/srv0srv.c'; fi` libinnobase_a-srv0start.o: srv/srv0start.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0start.o -MD -MP -MF $(DEPDIR)/libinnobase_a-srv0start.Tpo -c -o libinnobase_a-srv0start.o `test -f 'srv/srv0start.c' || echo '$(srcdir)/'`srv/srv0start.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-srv0start.Tpo $(DEPDIR)/libinnobase_a-srv0start.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0start.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-srv0start.Tpo" -c -o libinnobase_a-srv0start.o `test -f 'srv/srv0start.c' || echo '$(srcdir)/'`srv/srv0start.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-srv0start.Tpo" "$(DEPDIR)/libinnobase_a-srv0start.Po"; else rm -f "$(DEPDIR)/libinnobase_a-srv0start.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='srv/srv0start.c' object='libinnobase_a-srv0start.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-srv0start.o `test -f 'srv/srv0start.c' || echo '$(srcdir)/'`srv/srv0start.c libinnobase_a-srv0start.obj: srv/srv0start.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0start.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-srv0start.Tpo -c -o libinnobase_a-srv0start.obj `if test -f 'srv/srv0start.c'; then $(CYGPATH_W) 'srv/srv0start.c'; else $(CYGPATH_W) '$(srcdir)/srv/srv0start.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-srv0start.Tpo $(DEPDIR)/libinnobase_a-srv0start.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-srv0start.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-srv0start.Tpo" -c -o libinnobase_a-srv0start.obj `if test -f 'srv/srv0start.c'; then $(CYGPATH_W) 'srv/srv0start.c'; else $(CYGPATH_W) '$(srcdir)/srv/srv0start.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-srv0start.Tpo" "$(DEPDIR)/libinnobase_a-srv0start.Po"; else rm -f "$(DEPDIR)/libinnobase_a-srv0start.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='srv/srv0start.c' object='libinnobase_a-srv0start.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-srv0start.obj `if test -f 'srv/srv0start.c'; then $(CYGPATH_W) 'srv/srv0start.c'; else $(CYGPATH_W) '$(srcdir)/srv/srv0start.c'; fi` libinnobase_a-sync0arr.o: sync/sync0arr.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0arr.o -MD -MP -MF $(DEPDIR)/libinnobase_a-sync0arr.Tpo -c -o libinnobase_a-sync0arr.o `test -f 'sync/sync0arr.c' || echo '$(srcdir)/'`sync/sync0arr.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-sync0arr.Tpo $(DEPDIR)/libinnobase_a-sync0arr.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0arr.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-sync0arr.Tpo" -c -o libinnobase_a-sync0arr.o `test -f 'sync/sync0arr.c' || echo '$(srcdir)/'`sync/sync0arr.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-sync0arr.Tpo" "$(DEPDIR)/libinnobase_a-sync0arr.Po"; else rm -f "$(DEPDIR)/libinnobase_a-sync0arr.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sync/sync0arr.c' object='libinnobase_a-sync0arr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-sync0arr.o `test -f 'sync/sync0arr.c' || echo '$(srcdir)/'`sync/sync0arr.c libinnobase_a-sync0arr.obj: sync/sync0arr.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0arr.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-sync0arr.Tpo -c -o libinnobase_a-sync0arr.obj `if test -f 'sync/sync0arr.c'; then $(CYGPATH_W) 'sync/sync0arr.c'; else $(CYGPATH_W) '$(srcdir)/sync/sync0arr.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-sync0arr.Tpo $(DEPDIR)/libinnobase_a-sync0arr.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0arr.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-sync0arr.Tpo" -c -o libinnobase_a-sync0arr.obj `if test -f 'sync/sync0arr.c'; then $(CYGPATH_W) 'sync/sync0arr.c'; else $(CYGPATH_W) '$(srcdir)/sync/sync0arr.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-sync0arr.Tpo" "$(DEPDIR)/libinnobase_a-sync0arr.Po"; else rm -f "$(DEPDIR)/libinnobase_a-sync0arr.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sync/sync0arr.c' object='libinnobase_a-sync0arr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-sync0arr.obj `if test -f 'sync/sync0arr.c'; then $(CYGPATH_W) 'sync/sync0arr.c'; else $(CYGPATH_W) '$(srcdir)/sync/sync0arr.c'; fi` libinnobase_a-sync0rw.o: sync/sync0rw.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0rw.o -MD -MP -MF $(DEPDIR)/libinnobase_a-sync0rw.Tpo -c -o libinnobase_a-sync0rw.o `test -f 'sync/sync0rw.c' || echo '$(srcdir)/'`sync/sync0rw.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-sync0rw.Tpo $(DEPDIR)/libinnobase_a-sync0rw.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0rw.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-sync0rw.Tpo" -c -o libinnobase_a-sync0rw.o `test -f 'sync/sync0rw.c' || echo '$(srcdir)/'`sync/sync0rw.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-sync0rw.Tpo" "$(DEPDIR)/libinnobase_a-sync0rw.Po"; else rm -f "$(DEPDIR)/libinnobase_a-sync0rw.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sync/sync0rw.c' object='libinnobase_a-sync0rw.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-sync0rw.o `test -f 'sync/sync0rw.c' || echo '$(srcdir)/'`sync/sync0rw.c libinnobase_a-sync0rw.obj: sync/sync0rw.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0rw.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-sync0rw.Tpo -c -o libinnobase_a-sync0rw.obj `if test -f 'sync/sync0rw.c'; then $(CYGPATH_W) 'sync/sync0rw.c'; else $(CYGPATH_W) '$(srcdir)/sync/sync0rw.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-sync0rw.Tpo $(DEPDIR)/libinnobase_a-sync0rw.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0rw.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-sync0rw.Tpo" -c -o libinnobase_a-sync0rw.obj `if test -f 'sync/sync0rw.c'; then $(CYGPATH_W) 'sync/sync0rw.c'; else $(CYGPATH_W) '$(srcdir)/sync/sync0rw.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-sync0rw.Tpo" "$(DEPDIR)/libinnobase_a-sync0rw.Po"; else rm -f "$(DEPDIR)/libinnobase_a-sync0rw.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sync/sync0rw.c' object='libinnobase_a-sync0rw.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-sync0rw.obj `if test -f 'sync/sync0rw.c'; then $(CYGPATH_W) 'sync/sync0rw.c'; else $(CYGPATH_W) '$(srcdir)/sync/sync0rw.c'; fi` libinnobase_a-sync0sync.o: sync/sync0sync.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0sync.o -MD -MP -MF $(DEPDIR)/libinnobase_a-sync0sync.Tpo -c -o libinnobase_a-sync0sync.o `test -f 'sync/sync0sync.c' || echo '$(srcdir)/'`sync/sync0sync.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-sync0sync.Tpo $(DEPDIR)/libinnobase_a-sync0sync.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0sync.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-sync0sync.Tpo" -c -o libinnobase_a-sync0sync.o `test -f 'sync/sync0sync.c' || echo '$(srcdir)/'`sync/sync0sync.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-sync0sync.Tpo" "$(DEPDIR)/libinnobase_a-sync0sync.Po"; else rm -f "$(DEPDIR)/libinnobase_a-sync0sync.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sync/sync0sync.c' object='libinnobase_a-sync0sync.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-sync0sync.o `test -f 'sync/sync0sync.c' || echo '$(srcdir)/'`sync/sync0sync.c libinnobase_a-sync0sync.obj: sync/sync0sync.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0sync.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-sync0sync.Tpo -c -o libinnobase_a-sync0sync.obj `if test -f 'sync/sync0sync.c'; then $(CYGPATH_W) 'sync/sync0sync.c'; else $(CYGPATH_W) '$(srcdir)/sync/sync0sync.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-sync0sync.Tpo $(DEPDIR)/libinnobase_a-sync0sync.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-sync0sync.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-sync0sync.Tpo" -c -o libinnobase_a-sync0sync.obj `if test -f 'sync/sync0sync.c'; then $(CYGPATH_W) 'sync/sync0sync.c'; else $(CYGPATH_W) '$(srcdir)/sync/sync0sync.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-sync0sync.Tpo" "$(DEPDIR)/libinnobase_a-sync0sync.Po"; else rm -f "$(DEPDIR)/libinnobase_a-sync0sync.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sync/sync0sync.c' object='libinnobase_a-sync0sync.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-sync0sync.obj `if test -f 'sync/sync0sync.c'; then $(CYGPATH_W) 'sync/sync0sync.c'; else $(CYGPATH_W) '$(srcdir)/sync/sync0sync.c'; fi` libinnobase_a-thr0loc.o: thr/thr0loc.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-thr0loc.o -MD -MP -MF $(DEPDIR)/libinnobase_a-thr0loc.Tpo -c -o libinnobase_a-thr0loc.o `test -f 'thr/thr0loc.c' || echo '$(srcdir)/'`thr/thr0loc.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-thr0loc.Tpo $(DEPDIR)/libinnobase_a-thr0loc.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-thr0loc.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-thr0loc.Tpo" -c -o libinnobase_a-thr0loc.o `test -f 'thr/thr0loc.c' || echo '$(srcdir)/'`thr/thr0loc.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-thr0loc.Tpo" "$(DEPDIR)/libinnobase_a-thr0loc.Po"; else rm -f "$(DEPDIR)/libinnobase_a-thr0loc.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='thr/thr0loc.c' object='libinnobase_a-thr0loc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-thr0loc.o `test -f 'thr/thr0loc.c' || echo '$(srcdir)/'`thr/thr0loc.c libinnobase_a-thr0loc.obj: thr/thr0loc.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-thr0loc.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-thr0loc.Tpo -c -o libinnobase_a-thr0loc.obj `if test -f 'thr/thr0loc.c'; then $(CYGPATH_W) 'thr/thr0loc.c'; else $(CYGPATH_W) '$(srcdir)/thr/thr0loc.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-thr0loc.Tpo $(DEPDIR)/libinnobase_a-thr0loc.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-thr0loc.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-thr0loc.Tpo" -c -o libinnobase_a-thr0loc.obj `if test -f 'thr/thr0loc.c'; then $(CYGPATH_W) 'thr/thr0loc.c'; else $(CYGPATH_W) '$(srcdir)/thr/thr0loc.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-thr0loc.Tpo" "$(DEPDIR)/libinnobase_a-thr0loc.Po"; else rm -f "$(DEPDIR)/libinnobase_a-thr0loc.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='thr/thr0loc.c' object='libinnobase_a-thr0loc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-thr0loc.obj `if test -f 'thr/thr0loc.c'; then $(CYGPATH_W) 'thr/thr0loc.c'; else $(CYGPATH_W) '$(srcdir)/thr/thr0loc.c'; fi` libinnobase_a-trx0i_s.o: trx/trx0i_s.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0i_s.o -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0i_s.Tpo -c -o libinnobase_a-trx0i_s.o `test -f 'trx/trx0i_s.c' || echo '$(srcdir)/'`trx/trx0i_s.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0i_s.Tpo $(DEPDIR)/libinnobase_a-trx0i_s.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0i_s.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0i_s.Tpo" -c -o libinnobase_a-trx0i_s.o `test -f 'trx/trx0i_s.c' || echo '$(srcdir)/'`trx/trx0i_s.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0i_s.Tpo" "$(DEPDIR)/libinnobase_a-trx0i_s.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0i_s.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0i_s.c' object='libinnobase_a-trx0i_s.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0i_s.o `test -f 'trx/trx0i_s.c' || echo '$(srcdir)/'`trx/trx0i_s.c libinnobase_a-trx0i_s.obj: trx/trx0i_s.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0i_s.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0i_s.Tpo -c -o libinnobase_a-trx0i_s.obj `if test -f 'trx/trx0i_s.c'; then $(CYGPATH_W) 'trx/trx0i_s.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0i_s.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0i_s.Tpo $(DEPDIR)/libinnobase_a-trx0i_s.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0i_s.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0i_s.Tpo" -c -o libinnobase_a-trx0i_s.obj `if test -f 'trx/trx0i_s.c'; then $(CYGPATH_W) 'trx/trx0i_s.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0i_s.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0i_s.Tpo" "$(DEPDIR)/libinnobase_a-trx0i_s.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0i_s.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0i_s.c' object='libinnobase_a-trx0i_s.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0i_s.obj `if test -f 'trx/trx0i_s.c'; then $(CYGPATH_W) 'trx/trx0i_s.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0i_s.c'; fi` libinnobase_a-trx0purge.o: trx/trx0purge.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0purge.o -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0purge.Tpo -c -o libinnobase_a-trx0purge.o `test -f 'trx/trx0purge.c' || echo '$(srcdir)/'`trx/trx0purge.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0purge.Tpo $(DEPDIR)/libinnobase_a-trx0purge.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0purge.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0purge.Tpo" -c -o libinnobase_a-trx0purge.o `test -f 'trx/trx0purge.c' || echo '$(srcdir)/'`trx/trx0purge.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0purge.Tpo" "$(DEPDIR)/libinnobase_a-trx0purge.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0purge.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0purge.c' object='libinnobase_a-trx0purge.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0purge.o `test -f 'trx/trx0purge.c' || echo '$(srcdir)/'`trx/trx0purge.c libinnobase_a-trx0purge.obj: trx/trx0purge.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0purge.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0purge.Tpo -c -o libinnobase_a-trx0purge.obj `if test -f 'trx/trx0purge.c'; then $(CYGPATH_W) 'trx/trx0purge.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0purge.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0purge.Tpo $(DEPDIR)/libinnobase_a-trx0purge.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0purge.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0purge.Tpo" -c -o libinnobase_a-trx0purge.obj `if test -f 'trx/trx0purge.c'; then $(CYGPATH_W) 'trx/trx0purge.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0purge.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0purge.Tpo" "$(DEPDIR)/libinnobase_a-trx0purge.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0purge.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0purge.c' object='libinnobase_a-trx0purge.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0purge.obj `if test -f 'trx/trx0purge.c'; then $(CYGPATH_W) 'trx/trx0purge.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0purge.c'; fi` libinnobase_a-trx0rec.o: trx/trx0rec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0rec.o -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0rec.Tpo -c -o libinnobase_a-trx0rec.o `test -f 'trx/trx0rec.c' || echo '$(srcdir)/'`trx/trx0rec.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0rec.Tpo $(DEPDIR)/libinnobase_a-trx0rec.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0rec.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0rec.Tpo" -c -o libinnobase_a-trx0rec.o `test -f 'trx/trx0rec.c' || echo '$(srcdir)/'`trx/trx0rec.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0rec.Tpo" "$(DEPDIR)/libinnobase_a-trx0rec.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0rec.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0rec.c' object='libinnobase_a-trx0rec.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0rec.o `test -f 'trx/trx0rec.c' || echo '$(srcdir)/'`trx/trx0rec.c libinnobase_a-trx0rec.obj: trx/trx0rec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0rec.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0rec.Tpo -c -o libinnobase_a-trx0rec.obj `if test -f 'trx/trx0rec.c'; then $(CYGPATH_W) 'trx/trx0rec.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0rec.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0rec.Tpo $(DEPDIR)/libinnobase_a-trx0rec.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0rec.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0rec.Tpo" -c -o libinnobase_a-trx0rec.obj `if test -f 'trx/trx0rec.c'; then $(CYGPATH_W) 'trx/trx0rec.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0rec.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0rec.Tpo" "$(DEPDIR)/libinnobase_a-trx0rec.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0rec.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0rec.c' object='libinnobase_a-trx0rec.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0rec.obj `if test -f 'trx/trx0rec.c'; then $(CYGPATH_W) 'trx/trx0rec.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0rec.c'; fi` libinnobase_a-trx0roll.o: trx/trx0roll.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0roll.o -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0roll.Tpo -c -o libinnobase_a-trx0roll.o `test -f 'trx/trx0roll.c' || echo '$(srcdir)/'`trx/trx0roll.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0roll.Tpo $(DEPDIR)/libinnobase_a-trx0roll.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0roll.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0roll.Tpo" -c -o libinnobase_a-trx0roll.o `test -f 'trx/trx0roll.c' || echo '$(srcdir)/'`trx/trx0roll.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0roll.Tpo" "$(DEPDIR)/libinnobase_a-trx0roll.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0roll.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0roll.c' object='libinnobase_a-trx0roll.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0roll.o `test -f 'trx/trx0roll.c' || echo '$(srcdir)/'`trx/trx0roll.c libinnobase_a-trx0roll.obj: trx/trx0roll.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0roll.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0roll.Tpo -c -o libinnobase_a-trx0roll.obj `if test -f 'trx/trx0roll.c'; then $(CYGPATH_W) 'trx/trx0roll.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0roll.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0roll.Tpo $(DEPDIR)/libinnobase_a-trx0roll.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0roll.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0roll.Tpo" -c -o libinnobase_a-trx0roll.obj `if test -f 'trx/trx0roll.c'; then $(CYGPATH_W) 'trx/trx0roll.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0roll.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0roll.Tpo" "$(DEPDIR)/libinnobase_a-trx0roll.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0roll.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0roll.c' object='libinnobase_a-trx0roll.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0roll.obj `if test -f 'trx/trx0roll.c'; then $(CYGPATH_W) 'trx/trx0roll.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0roll.c'; fi` libinnobase_a-trx0rseg.o: trx/trx0rseg.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0rseg.o -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0rseg.Tpo -c -o libinnobase_a-trx0rseg.o `test -f 'trx/trx0rseg.c' || echo '$(srcdir)/'`trx/trx0rseg.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0rseg.Tpo $(DEPDIR)/libinnobase_a-trx0rseg.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0rseg.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0rseg.Tpo" -c -o libinnobase_a-trx0rseg.o `test -f 'trx/trx0rseg.c' || echo '$(srcdir)/'`trx/trx0rseg.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0rseg.Tpo" "$(DEPDIR)/libinnobase_a-trx0rseg.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0rseg.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0rseg.c' object='libinnobase_a-trx0rseg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0rseg.o `test -f 'trx/trx0rseg.c' || echo '$(srcdir)/'`trx/trx0rseg.c libinnobase_a-trx0rseg.obj: trx/trx0rseg.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0rseg.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0rseg.Tpo -c -o libinnobase_a-trx0rseg.obj `if test -f 'trx/trx0rseg.c'; then $(CYGPATH_W) 'trx/trx0rseg.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0rseg.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0rseg.Tpo $(DEPDIR)/libinnobase_a-trx0rseg.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0rseg.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0rseg.Tpo" -c -o libinnobase_a-trx0rseg.obj `if test -f 'trx/trx0rseg.c'; then $(CYGPATH_W) 'trx/trx0rseg.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0rseg.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0rseg.Tpo" "$(DEPDIR)/libinnobase_a-trx0rseg.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0rseg.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0rseg.c' object='libinnobase_a-trx0rseg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0rseg.obj `if test -f 'trx/trx0rseg.c'; then $(CYGPATH_W) 'trx/trx0rseg.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0rseg.c'; fi` libinnobase_a-trx0sys.o: trx/trx0sys.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0sys.o -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0sys.Tpo -c -o libinnobase_a-trx0sys.o `test -f 'trx/trx0sys.c' || echo '$(srcdir)/'`trx/trx0sys.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0sys.Tpo $(DEPDIR)/libinnobase_a-trx0sys.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0sys.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0sys.Tpo" -c -o libinnobase_a-trx0sys.o `test -f 'trx/trx0sys.c' || echo '$(srcdir)/'`trx/trx0sys.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0sys.Tpo" "$(DEPDIR)/libinnobase_a-trx0sys.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0sys.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0sys.c' object='libinnobase_a-trx0sys.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0sys.o `test -f 'trx/trx0sys.c' || echo '$(srcdir)/'`trx/trx0sys.c libinnobase_a-trx0sys.obj: trx/trx0sys.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0sys.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0sys.Tpo -c -o libinnobase_a-trx0sys.obj `if test -f 'trx/trx0sys.c'; then $(CYGPATH_W) 'trx/trx0sys.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0sys.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0sys.Tpo $(DEPDIR)/libinnobase_a-trx0sys.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0sys.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0sys.Tpo" -c -o libinnobase_a-trx0sys.obj `if test -f 'trx/trx0sys.c'; then $(CYGPATH_W) 'trx/trx0sys.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0sys.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0sys.Tpo" "$(DEPDIR)/libinnobase_a-trx0sys.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0sys.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0sys.c' object='libinnobase_a-trx0sys.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0sys.obj `if test -f 'trx/trx0sys.c'; then $(CYGPATH_W) 'trx/trx0sys.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0sys.c'; fi` libinnobase_a-trx0trx.o: trx/trx0trx.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0trx.o -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0trx.Tpo -c -o libinnobase_a-trx0trx.o `test -f 'trx/trx0trx.c' || echo '$(srcdir)/'`trx/trx0trx.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0trx.Tpo $(DEPDIR)/libinnobase_a-trx0trx.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0trx.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0trx.Tpo" -c -o libinnobase_a-trx0trx.o `test -f 'trx/trx0trx.c' || echo '$(srcdir)/'`trx/trx0trx.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0trx.Tpo" "$(DEPDIR)/libinnobase_a-trx0trx.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0trx.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0trx.c' object='libinnobase_a-trx0trx.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0trx.o `test -f 'trx/trx0trx.c' || echo '$(srcdir)/'`trx/trx0trx.c libinnobase_a-trx0trx.obj: trx/trx0trx.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0trx.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0trx.Tpo -c -o libinnobase_a-trx0trx.obj `if test -f 'trx/trx0trx.c'; then $(CYGPATH_W) 'trx/trx0trx.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0trx.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0trx.Tpo $(DEPDIR)/libinnobase_a-trx0trx.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0trx.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0trx.Tpo" -c -o libinnobase_a-trx0trx.obj `if test -f 'trx/trx0trx.c'; then $(CYGPATH_W) 'trx/trx0trx.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0trx.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0trx.Tpo" "$(DEPDIR)/libinnobase_a-trx0trx.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0trx.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0trx.c' object='libinnobase_a-trx0trx.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0trx.obj `if test -f 'trx/trx0trx.c'; then $(CYGPATH_W) 'trx/trx0trx.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0trx.c'; fi` libinnobase_a-trx0undo.o: trx/trx0undo.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0undo.o -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0undo.Tpo -c -o libinnobase_a-trx0undo.o `test -f 'trx/trx0undo.c' || echo '$(srcdir)/'`trx/trx0undo.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0undo.Tpo $(DEPDIR)/libinnobase_a-trx0undo.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0undo.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0undo.Tpo" -c -o libinnobase_a-trx0undo.o `test -f 'trx/trx0undo.c' || echo '$(srcdir)/'`trx/trx0undo.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0undo.Tpo" "$(DEPDIR)/libinnobase_a-trx0undo.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0undo.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0undo.c' object='libinnobase_a-trx0undo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0undo.o `test -f 'trx/trx0undo.c' || echo '$(srcdir)/'`trx/trx0undo.c libinnobase_a-trx0undo.obj: trx/trx0undo.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0undo.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-trx0undo.Tpo -c -o libinnobase_a-trx0undo.obj `if test -f 'trx/trx0undo.c'; then $(CYGPATH_W) 'trx/trx0undo.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0undo.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-trx0undo.Tpo $(DEPDIR)/libinnobase_a-trx0undo.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-trx0undo.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-trx0undo.Tpo" -c -o libinnobase_a-trx0undo.obj `if test -f 'trx/trx0undo.c'; then $(CYGPATH_W) 'trx/trx0undo.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0undo.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-trx0undo.Tpo" "$(DEPDIR)/libinnobase_a-trx0undo.Po"; else rm -f "$(DEPDIR)/libinnobase_a-trx0undo.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0undo.c' object='libinnobase_a-trx0undo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-trx0undo.obj `if test -f 'trx/trx0undo.c'; then $(CYGPATH_W) 'trx/trx0undo.c'; else $(CYGPATH_W) '$(srcdir)/trx/trx0undo.c'; fi` libinnobase_a-usr0sess.o: usr/usr0sess.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-usr0sess.o -MD -MP -MF $(DEPDIR)/libinnobase_a-usr0sess.Tpo -c -o libinnobase_a-usr0sess.o `test -f 'usr/usr0sess.c' || echo '$(srcdir)/'`usr/usr0sess.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-usr0sess.Tpo $(DEPDIR)/libinnobase_a-usr0sess.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-usr0sess.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-usr0sess.Tpo" -c -o libinnobase_a-usr0sess.o `test -f 'usr/usr0sess.c' || echo '$(srcdir)/'`usr/usr0sess.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-usr0sess.Tpo" "$(DEPDIR)/libinnobase_a-usr0sess.Po"; else rm -f "$(DEPDIR)/libinnobase_a-usr0sess.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='usr/usr0sess.c' object='libinnobase_a-usr0sess.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-usr0sess.o `test -f 'usr/usr0sess.c' || echo '$(srcdir)/'`usr/usr0sess.c libinnobase_a-usr0sess.obj: usr/usr0sess.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-usr0sess.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-usr0sess.Tpo -c -o libinnobase_a-usr0sess.obj `if test -f 'usr/usr0sess.c'; then $(CYGPATH_W) 'usr/usr0sess.c'; else $(CYGPATH_W) '$(srcdir)/usr/usr0sess.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-usr0sess.Tpo $(DEPDIR)/libinnobase_a-usr0sess.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-usr0sess.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-usr0sess.Tpo" -c -o libinnobase_a-usr0sess.obj `if test -f 'usr/usr0sess.c'; then $(CYGPATH_W) 'usr/usr0sess.c'; else $(CYGPATH_W) '$(srcdir)/usr/usr0sess.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-usr0sess.Tpo" "$(DEPDIR)/libinnobase_a-usr0sess.Po"; else rm -f "$(DEPDIR)/libinnobase_a-usr0sess.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='usr/usr0sess.c' object='libinnobase_a-usr0sess.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-usr0sess.obj `if test -f 'usr/usr0sess.c'; then $(CYGPATH_W) 'usr/usr0sess.c'; else $(CYGPATH_W) '$(srcdir)/usr/usr0sess.c'; fi` libinnobase_a-ut0byte.o: ut/ut0byte.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0byte.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0byte.Tpo -c -o libinnobase_a-ut0byte.o `test -f 'ut/ut0byte.c' || echo '$(srcdir)/'`ut/ut0byte.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0byte.Tpo $(DEPDIR)/libinnobase_a-ut0byte.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0byte.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0byte.Tpo" -c -o libinnobase_a-ut0byte.o `test -f 'ut/ut0byte.c' || echo '$(srcdir)/'`ut/ut0byte.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0byte.Tpo" "$(DEPDIR)/libinnobase_a-ut0byte.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0byte.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0byte.c' object='libinnobase_a-ut0byte.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0byte.o `test -f 'ut/ut0byte.c' || echo '$(srcdir)/'`ut/ut0byte.c libinnobase_a-ut0byte.obj: ut/ut0byte.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0byte.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0byte.Tpo -c -o libinnobase_a-ut0byte.obj `if test -f 'ut/ut0byte.c'; then $(CYGPATH_W) 'ut/ut0byte.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0byte.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0byte.Tpo $(DEPDIR)/libinnobase_a-ut0byte.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0byte.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0byte.Tpo" -c -o libinnobase_a-ut0byte.obj `if test -f 'ut/ut0byte.c'; then $(CYGPATH_W) 'ut/ut0byte.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0byte.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0byte.Tpo" "$(DEPDIR)/libinnobase_a-ut0byte.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0byte.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0byte.c' object='libinnobase_a-ut0byte.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0byte.obj `if test -f 'ut/ut0byte.c'; then $(CYGPATH_W) 'ut/ut0byte.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0byte.c'; fi` libinnobase_a-ut0dbg.o: ut/ut0dbg.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0dbg.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0dbg.Tpo -c -o libinnobase_a-ut0dbg.o `test -f 'ut/ut0dbg.c' || echo '$(srcdir)/'`ut/ut0dbg.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0dbg.Tpo $(DEPDIR)/libinnobase_a-ut0dbg.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0dbg.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0dbg.Tpo" -c -o libinnobase_a-ut0dbg.o `test -f 'ut/ut0dbg.c' || echo '$(srcdir)/'`ut/ut0dbg.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0dbg.Tpo" "$(DEPDIR)/libinnobase_a-ut0dbg.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0dbg.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0dbg.c' object='libinnobase_a-ut0dbg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0dbg.o `test -f 'ut/ut0dbg.c' || echo '$(srcdir)/'`ut/ut0dbg.c libinnobase_a-ut0dbg.obj: ut/ut0dbg.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0dbg.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0dbg.Tpo -c -o libinnobase_a-ut0dbg.obj `if test -f 'ut/ut0dbg.c'; then $(CYGPATH_W) 'ut/ut0dbg.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0dbg.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0dbg.Tpo $(DEPDIR)/libinnobase_a-ut0dbg.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0dbg.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0dbg.Tpo" -c -o libinnobase_a-ut0dbg.obj `if test -f 'ut/ut0dbg.c'; then $(CYGPATH_W) 'ut/ut0dbg.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0dbg.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0dbg.Tpo" "$(DEPDIR)/libinnobase_a-ut0dbg.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0dbg.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0dbg.c' object='libinnobase_a-ut0dbg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0dbg.obj `if test -f 'ut/ut0dbg.c'; then $(CYGPATH_W) 'ut/ut0dbg.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0dbg.c'; fi` libinnobase_a-ut0list.o: ut/ut0list.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0list.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0list.Tpo -c -o libinnobase_a-ut0list.o `test -f 'ut/ut0list.c' || echo '$(srcdir)/'`ut/ut0list.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0list.Tpo $(DEPDIR)/libinnobase_a-ut0list.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0list.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0list.Tpo" -c -o libinnobase_a-ut0list.o `test -f 'ut/ut0list.c' || echo '$(srcdir)/'`ut/ut0list.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0list.Tpo" "$(DEPDIR)/libinnobase_a-ut0list.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0list.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0list.c' object='libinnobase_a-ut0list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0list.o `test -f 'ut/ut0list.c' || echo '$(srcdir)/'`ut/ut0list.c libinnobase_a-ut0list.obj: ut/ut0list.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0list.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0list.Tpo -c -o libinnobase_a-ut0list.obj `if test -f 'ut/ut0list.c'; then $(CYGPATH_W) 'ut/ut0list.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0list.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0list.Tpo $(DEPDIR)/libinnobase_a-ut0list.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0list.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0list.Tpo" -c -o libinnobase_a-ut0list.obj `if test -f 'ut/ut0list.c'; then $(CYGPATH_W) 'ut/ut0list.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0list.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0list.Tpo" "$(DEPDIR)/libinnobase_a-ut0list.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0list.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0list.c' object='libinnobase_a-ut0list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0list.obj `if test -f 'ut/ut0list.c'; then $(CYGPATH_W) 'ut/ut0list.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0list.c'; fi` libinnobase_a-ut0mem.o: ut/ut0mem.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0mem.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0mem.Tpo -c -o libinnobase_a-ut0mem.o `test -f 'ut/ut0mem.c' || echo '$(srcdir)/'`ut/ut0mem.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0mem.Tpo $(DEPDIR)/libinnobase_a-ut0mem.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0mem.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0mem.Tpo" -c -o libinnobase_a-ut0mem.o `test -f 'ut/ut0mem.c' || echo '$(srcdir)/'`ut/ut0mem.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0mem.Tpo" "$(DEPDIR)/libinnobase_a-ut0mem.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0mem.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0mem.c' object='libinnobase_a-ut0mem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0mem.o `test -f 'ut/ut0mem.c' || echo '$(srcdir)/'`ut/ut0mem.c libinnobase_a-ut0mem.obj: ut/ut0mem.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0mem.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0mem.Tpo -c -o libinnobase_a-ut0mem.obj `if test -f 'ut/ut0mem.c'; then $(CYGPATH_W) 'ut/ut0mem.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0mem.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0mem.Tpo $(DEPDIR)/libinnobase_a-ut0mem.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0mem.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0mem.Tpo" -c -o libinnobase_a-ut0mem.obj `if test -f 'ut/ut0mem.c'; then $(CYGPATH_W) 'ut/ut0mem.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0mem.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0mem.Tpo" "$(DEPDIR)/libinnobase_a-ut0mem.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0mem.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0mem.c' object='libinnobase_a-ut0mem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0mem.obj `if test -f 'ut/ut0mem.c'; then $(CYGPATH_W) 'ut/ut0mem.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0mem.c'; fi` libinnobase_a-ut0rbt.o: ut/ut0rbt.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0rbt.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0rbt.Tpo -c -o libinnobase_a-ut0rbt.o `test -f 'ut/ut0rbt.c' || echo '$(srcdir)/'`ut/ut0rbt.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0rbt.Tpo $(DEPDIR)/libinnobase_a-ut0rbt.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0rbt.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0rbt.Tpo" -c -o libinnobase_a-ut0rbt.o `test -f 'ut/ut0rbt.c' || echo '$(srcdir)/'`ut/ut0rbt.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0rbt.Tpo" "$(DEPDIR)/libinnobase_a-ut0rbt.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0rbt.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0rbt.c' object='libinnobase_a-ut0rbt.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0rbt.o `test -f 'ut/ut0rbt.c' || echo '$(srcdir)/'`ut/ut0rbt.c libinnobase_a-ut0rbt.obj: ut/ut0rbt.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0rbt.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0rbt.Tpo -c -o libinnobase_a-ut0rbt.obj `if test -f 'ut/ut0rbt.c'; then $(CYGPATH_W) 'ut/ut0rbt.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0rbt.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0rbt.Tpo $(DEPDIR)/libinnobase_a-ut0rbt.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0rbt.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0rbt.Tpo" -c -o libinnobase_a-ut0rbt.obj `if test -f 'ut/ut0rbt.c'; then $(CYGPATH_W) 'ut/ut0rbt.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0rbt.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0rbt.Tpo" "$(DEPDIR)/libinnobase_a-ut0rbt.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0rbt.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0rbt.c' object='libinnobase_a-ut0rbt.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0rbt.obj `if test -f 'ut/ut0rbt.c'; then $(CYGPATH_W) 'ut/ut0rbt.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0rbt.c'; fi` libinnobase_a-ut0rnd.o: ut/ut0rnd.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0rnd.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0rnd.Tpo -c -o libinnobase_a-ut0rnd.o `test -f 'ut/ut0rnd.c' || echo '$(srcdir)/'`ut/ut0rnd.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0rnd.Tpo $(DEPDIR)/libinnobase_a-ut0rnd.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0rnd.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0rnd.Tpo" -c -o libinnobase_a-ut0rnd.o `test -f 'ut/ut0rnd.c' || echo '$(srcdir)/'`ut/ut0rnd.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0rnd.Tpo" "$(DEPDIR)/libinnobase_a-ut0rnd.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0rnd.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0rnd.c' object='libinnobase_a-ut0rnd.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0rnd.o `test -f 'ut/ut0rnd.c' || echo '$(srcdir)/'`ut/ut0rnd.c libinnobase_a-ut0rnd.obj: ut/ut0rnd.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0rnd.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0rnd.Tpo -c -o libinnobase_a-ut0rnd.obj `if test -f 'ut/ut0rnd.c'; then $(CYGPATH_W) 'ut/ut0rnd.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0rnd.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0rnd.Tpo $(DEPDIR)/libinnobase_a-ut0rnd.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0rnd.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0rnd.Tpo" -c -o libinnobase_a-ut0rnd.obj `if test -f 'ut/ut0rnd.c'; then $(CYGPATH_W) 'ut/ut0rnd.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0rnd.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0rnd.Tpo" "$(DEPDIR)/libinnobase_a-ut0rnd.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0rnd.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0rnd.c' object='libinnobase_a-ut0rnd.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0rnd.obj `if test -f 'ut/ut0rnd.c'; then $(CYGPATH_W) 'ut/ut0rnd.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0rnd.c'; fi` libinnobase_a-ut0ut.o: ut/ut0ut.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0ut.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0ut.Tpo -c -o libinnobase_a-ut0ut.o `test -f 'ut/ut0ut.c' || echo '$(srcdir)/'`ut/ut0ut.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0ut.Tpo $(DEPDIR)/libinnobase_a-ut0ut.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0ut.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0ut.Tpo" -c -o libinnobase_a-ut0ut.o `test -f 'ut/ut0ut.c' || echo '$(srcdir)/'`ut/ut0ut.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0ut.Tpo" "$(DEPDIR)/libinnobase_a-ut0ut.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0ut.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0ut.c' object='libinnobase_a-ut0ut.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0ut.o `test -f 'ut/ut0ut.c' || echo '$(srcdir)/'`ut/ut0ut.c libinnobase_a-ut0ut.obj: ut/ut0ut.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0ut.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0ut.Tpo -c -o libinnobase_a-ut0ut.obj `if test -f 'ut/ut0ut.c'; then $(CYGPATH_W) 'ut/ut0ut.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0ut.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0ut.Tpo $(DEPDIR)/libinnobase_a-ut0ut.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0ut.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0ut.Tpo" -c -o libinnobase_a-ut0ut.obj `if test -f 'ut/ut0ut.c'; then $(CYGPATH_W) 'ut/ut0ut.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0ut.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0ut.Tpo" "$(DEPDIR)/libinnobase_a-ut0ut.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0ut.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0ut.c' object='libinnobase_a-ut0ut.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0ut.obj `if test -f 'ut/ut0ut.c'; then $(CYGPATH_W) 'ut/ut0ut.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0ut.c'; fi` libinnobase_a-ut0vec.o: ut/ut0vec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0vec.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0vec.Tpo -c -o libinnobase_a-ut0vec.o `test -f 'ut/ut0vec.c' || echo '$(srcdir)/'`ut/ut0vec.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0vec.Tpo $(DEPDIR)/libinnobase_a-ut0vec.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0vec.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0vec.Tpo" -c -o libinnobase_a-ut0vec.o `test -f 'ut/ut0vec.c' || echo '$(srcdir)/'`ut/ut0vec.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0vec.Tpo" "$(DEPDIR)/libinnobase_a-ut0vec.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0vec.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0vec.c' object='libinnobase_a-ut0vec.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0vec.o `test -f 'ut/ut0vec.c' || echo '$(srcdir)/'`ut/ut0vec.c libinnobase_a-ut0vec.obj: ut/ut0vec.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0vec.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0vec.Tpo -c -o libinnobase_a-ut0vec.obj `if test -f 'ut/ut0vec.c'; then $(CYGPATH_W) 'ut/ut0vec.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0vec.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0vec.Tpo $(DEPDIR)/libinnobase_a-ut0vec.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0vec.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0vec.Tpo" -c -o libinnobase_a-ut0vec.obj `if test -f 'ut/ut0vec.c'; then $(CYGPATH_W) 'ut/ut0vec.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0vec.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0vec.Tpo" "$(DEPDIR)/libinnobase_a-ut0vec.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0vec.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0vec.c' object='libinnobase_a-ut0vec.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0vec.obj `if test -f 'ut/ut0vec.c'; then $(CYGPATH_W) 'ut/ut0vec.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0vec.c'; fi` libinnobase_a-ut0wqueue.o: ut/ut0wqueue.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0wqueue.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0wqueue.Tpo -c -o libinnobase_a-ut0wqueue.o `test -f 'ut/ut0wqueue.c' || echo '$(srcdir)/'`ut/ut0wqueue.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0wqueue.Tpo $(DEPDIR)/libinnobase_a-ut0wqueue.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0wqueue.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0wqueue.Tpo" -c -o libinnobase_a-ut0wqueue.o `test -f 'ut/ut0wqueue.c' || echo '$(srcdir)/'`ut/ut0wqueue.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0wqueue.Tpo" "$(DEPDIR)/libinnobase_a-ut0wqueue.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0wqueue.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0wqueue.c' object='libinnobase_a-ut0wqueue.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0wqueue.o `test -f 'ut/ut0wqueue.c' || echo '$(srcdir)/'`ut/ut0wqueue.c libinnobase_a-ut0wqueue.obj: ut/ut0wqueue.c -@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0wqueue.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ut0wqueue.Tpo -c -o libinnobase_a-ut0wqueue.obj `if test -f 'ut/ut0wqueue.c'; then $(CYGPATH_W) 'ut/ut0wqueue.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0wqueue.c'; fi` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ut0wqueue.Tpo $(DEPDIR)/libinnobase_a-ut0wqueue.Po +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -MT libinnobase_a-ut0wqueue.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ut0wqueue.Tpo" -c -o libinnobase_a-ut0wqueue.obj `if test -f 'ut/ut0wqueue.c'; then $(CYGPATH_W) 'ut/ut0wqueue.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0wqueue.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ut0wqueue.Tpo" "$(DEPDIR)/libinnobase_a-ut0wqueue.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ut0wqueue.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0wqueue.c' object='libinnobase_a-ut0wqueue.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CFLAGS) $(CFLAGS) -c -o libinnobase_a-ut0wqueue.obj `if test -f 'ut/ut0wqueue.c'; then $(CYGPATH_W) 'ut/ut0wqueue.c'; else $(CYGPATH_W) '$(srcdir)/ut/ut0wqueue.c'; fi` ha_innodb_plugin_la-btr0btr.lo: btr/btr0btr.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-btr0btr.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-btr0btr.Tpo -c -o ha_innodb_plugin_la-btr0btr.lo `test -f 'btr/btr0btr.c' || echo '$(srcdir)/'`btr/btr0btr.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-btr0btr.Tpo $(DEPDIR)/ha_innodb_plugin_la-btr0btr.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-btr0btr.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-btr0btr.Tpo" -c -o ha_innodb_plugin_la-btr0btr.lo `test -f 'btr/btr0btr.c' || echo '$(srcdir)/'`btr/btr0btr.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-btr0btr.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-btr0btr.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-btr0btr.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0btr.c' object='ha_innodb_plugin_la-btr0btr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-btr0btr.lo `test -f 'btr/btr0btr.c' || echo '$(srcdir)/'`btr/btr0btr.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-btr0btr.lo `test -f 'btr/btr0btr.c' || echo '$(srcdir)/'`btr/btr0btr.c ha_innodb_plugin_la-btr0cur.lo: btr/btr0cur.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-btr0cur.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-btr0cur.Tpo -c -o ha_innodb_plugin_la-btr0cur.lo `test -f 'btr/btr0cur.c' || echo '$(srcdir)/'`btr/btr0cur.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-btr0cur.Tpo $(DEPDIR)/ha_innodb_plugin_la-btr0cur.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-btr0cur.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-btr0cur.Tpo" -c -o ha_innodb_plugin_la-btr0cur.lo `test -f 'btr/btr0cur.c' || echo '$(srcdir)/'`btr/btr0cur.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-btr0cur.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-btr0cur.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-btr0cur.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0cur.c' object='ha_innodb_plugin_la-btr0cur.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-btr0cur.lo `test -f 'btr/btr0cur.c' || echo '$(srcdir)/'`btr/btr0cur.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-btr0cur.lo `test -f 'btr/btr0cur.c' || echo '$(srcdir)/'`btr/btr0cur.c ha_innodb_plugin_la-btr0pcur.lo: btr/btr0pcur.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-btr0pcur.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-btr0pcur.Tpo -c -o ha_innodb_plugin_la-btr0pcur.lo `test -f 'btr/btr0pcur.c' || echo '$(srcdir)/'`btr/btr0pcur.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-btr0pcur.Tpo $(DEPDIR)/ha_innodb_plugin_la-btr0pcur.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-btr0pcur.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-btr0pcur.Tpo" -c -o ha_innodb_plugin_la-btr0pcur.lo `test -f 'btr/btr0pcur.c' || echo '$(srcdir)/'`btr/btr0pcur.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-btr0pcur.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-btr0pcur.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-btr0pcur.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0pcur.c' object='ha_innodb_plugin_la-btr0pcur.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-btr0pcur.lo `test -f 'btr/btr0pcur.c' || echo '$(srcdir)/'`btr/btr0pcur.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-btr0pcur.lo `test -f 'btr/btr0pcur.c' || echo '$(srcdir)/'`btr/btr0pcur.c ha_innodb_plugin_la-btr0sea.lo: btr/btr0sea.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-btr0sea.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-btr0sea.Tpo -c -o ha_innodb_plugin_la-btr0sea.lo `test -f 'btr/btr0sea.c' || echo '$(srcdir)/'`btr/btr0sea.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-btr0sea.Tpo $(DEPDIR)/ha_innodb_plugin_la-btr0sea.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-btr0sea.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-btr0sea.Tpo" -c -o ha_innodb_plugin_la-btr0sea.lo `test -f 'btr/btr0sea.c' || echo '$(srcdir)/'`btr/btr0sea.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-btr0sea.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-btr0sea.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-btr0sea.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='btr/btr0sea.c' object='ha_innodb_plugin_la-btr0sea.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-btr0sea.lo `test -f 'btr/btr0sea.c' || echo '$(srcdir)/'`btr/btr0sea.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-btr0sea.lo `test -f 'btr/btr0sea.c' || echo '$(srcdir)/'`btr/btr0sea.c ha_innodb_plugin_la-buf0buddy.lo: buf/buf0buddy.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-buf0buddy.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-buf0buddy.Tpo -c -o ha_innodb_plugin_la-buf0buddy.lo `test -f 'buf/buf0buddy.c' || echo '$(srcdir)/'`buf/buf0buddy.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-buf0buddy.Tpo $(DEPDIR)/ha_innodb_plugin_la-buf0buddy.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-buf0buddy.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-buf0buddy.Tpo" -c -o ha_innodb_plugin_la-buf0buddy.lo `test -f 'buf/buf0buddy.c' || echo '$(srcdir)/'`buf/buf0buddy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-buf0buddy.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-buf0buddy.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-buf0buddy.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0buddy.c' object='ha_innodb_plugin_la-buf0buddy.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-buf0buddy.lo `test -f 'buf/buf0buddy.c' || echo '$(srcdir)/'`buf/buf0buddy.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-buf0buddy.lo `test -f 'buf/buf0buddy.c' || echo '$(srcdir)/'`buf/buf0buddy.c ha_innodb_plugin_la-buf0buf.lo: buf/buf0buf.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-buf0buf.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-buf0buf.Tpo -c -o ha_innodb_plugin_la-buf0buf.lo `test -f 'buf/buf0buf.c' || echo '$(srcdir)/'`buf/buf0buf.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-buf0buf.Tpo $(DEPDIR)/ha_innodb_plugin_la-buf0buf.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-buf0buf.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-buf0buf.Tpo" -c -o ha_innodb_plugin_la-buf0buf.lo `test -f 'buf/buf0buf.c' || echo '$(srcdir)/'`buf/buf0buf.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-buf0buf.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-buf0buf.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-buf0buf.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0buf.c' object='ha_innodb_plugin_la-buf0buf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-buf0buf.lo `test -f 'buf/buf0buf.c' || echo '$(srcdir)/'`buf/buf0buf.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-buf0buf.lo `test -f 'buf/buf0buf.c' || echo '$(srcdir)/'`buf/buf0buf.c ha_innodb_plugin_la-buf0flu.lo: buf/buf0flu.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-buf0flu.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-buf0flu.Tpo -c -o ha_innodb_plugin_la-buf0flu.lo `test -f 'buf/buf0flu.c' || echo '$(srcdir)/'`buf/buf0flu.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-buf0flu.Tpo $(DEPDIR)/ha_innodb_plugin_la-buf0flu.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-buf0flu.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-buf0flu.Tpo" -c -o ha_innodb_plugin_la-buf0flu.lo `test -f 'buf/buf0flu.c' || echo '$(srcdir)/'`buf/buf0flu.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-buf0flu.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-buf0flu.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-buf0flu.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0flu.c' object='ha_innodb_plugin_la-buf0flu.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-buf0flu.lo `test -f 'buf/buf0flu.c' || echo '$(srcdir)/'`buf/buf0flu.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-buf0flu.lo `test -f 'buf/buf0flu.c' || echo '$(srcdir)/'`buf/buf0flu.c ha_innodb_plugin_la-buf0lru.lo: buf/buf0lru.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-buf0lru.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-buf0lru.Tpo -c -o ha_innodb_plugin_la-buf0lru.lo `test -f 'buf/buf0lru.c' || echo '$(srcdir)/'`buf/buf0lru.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-buf0lru.Tpo $(DEPDIR)/ha_innodb_plugin_la-buf0lru.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-buf0lru.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-buf0lru.Tpo" -c -o ha_innodb_plugin_la-buf0lru.lo `test -f 'buf/buf0lru.c' || echo '$(srcdir)/'`buf/buf0lru.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-buf0lru.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-buf0lru.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-buf0lru.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0lru.c' object='ha_innodb_plugin_la-buf0lru.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-buf0lru.lo `test -f 'buf/buf0lru.c' || echo '$(srcdir)/'`buf/buf0lru.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-buf0lru.lo `test -f 'buf/buf0lru.c' || echo '$(srcdir)/'`buf/buf0lru.c ha_innodb_plugin_la-buf0rea.lo: buf/buf0rea.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-buf0rea.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-buf0rea.Tpo -c -o ha_innodb_plugin_la-buf0rea.lo `test -f 'buf/buf0rea.c' || echo '$(srcdir)/'`buf/buf0rea.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-buf0rea.Tpo $(DEPDIR)/ha_innodb_plugin_la-buf0rea.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-buf0rea.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-buf0rea.Tpo" -c -o ha_innodb_plugin_la-buf0rea.lo `test -f 'buf/buf0rea.c' || echo '$(srcdir)/'`buf/buf0rea.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-buf0rea.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-buf0rea.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-buf0rea.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='buf/buf0rea.c' object='ha_innodb_plugin_la-buf0rea.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-buf0rea.lo `test -f 'buf/buf0rea.c' || echo '$(srcdir)/'`buf/buf0rea.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-buf0rea.lo `test -f 'buf/buf0rea.c' || echo '$(srcdir)/'`buf/buf0rea.c ha_innodb_plugin_la-data0data.lo: data/data0data.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-data0data.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-data0data.Tpo -c -o ha_innodb_plugin_la-data0data.lo `test -f 'data/data0data.c' || echo '$(srcdir)/'`data/data0data.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-data0data.Tpo $(DEPDIR)/ha_innodb_plugin_la-data0data.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-data0data.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-data0data.Tpo" -c -o ha_innodb_plugin_la-data0data.lo `test -f 'data/data0data.c' || echo '$(srcdir)/'`data/data0data.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-data0data.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-data0data.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-data0data.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='data/data0data.c' object='ha_innodb_plugin_la-data0data.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-data0data.lo `test -f 'data/data0data.c' || echo '$(srcdir)/'`data/data0data.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-data0data.lo `test -f 'data/data0data.c' || echo '$(srcdir)/'`data/data0data.c ha_innodb_plugin_la-data0type.lo: data/data0type.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-data0type.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-data0type.Tpo -c -o ha_innodb_plugin_la-data0type.lo `test -f 'data/data0type.c' || echo '$(srcdir)/'`data/data0type.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-data0type.Tpo $(DEPDIR)/ha_innodb_plugin_la-data0type.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-data0type.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-data0type.Tpo" -c -o ha_innodb_plugin_la-data0type.lo `test -f 'data/data0type.c' || echo '$(srcdir)/'`data/data0type.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-data0type.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-data0type.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-data0type.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='data/data0type.c' object='ha_innodb_plugin_la-data0type.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-data0type.lo `test -f 'data/data0type.c' || echo '$(srcdir)/'`data/data0type.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-data0type.lo `test -f 'data/data0type.c' || echo '$(srcdir)/'`data/data0type.c ha_innodb_plugin_la-dict0boot.lo: dict/dict0boot.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dict0boot.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-dict0boot.Tpo -c -o ha_innodb_plugin_la-dict0boot.lo `test -f 'dict/dict0boot.c' || echo '$(srcdir)/'`dict/dict0boot.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-dict0boot.Tpo $(DEPDIR)/ha_innodb_plugin_la-dict0boot.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dict0boot.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-dict0boot.Tpo" -c -o ha_innodb_plugin_la-dict0boot.lo `test -f 'dict/dict0boot.c' || echo '$(srcdir)/'`dict/dict0boot.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-dict0boot.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-dict0boot.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-dict0boot.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0boot.c' object='ha_innodb_plugin_la-dict0boot.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dict0boot.lo `test -f 'dict/dict0boot.c' || echo '$(srcdir)/'`dict/dict0boot.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dict0boot.lo `test -f 'dict/dict0boot.c' || echo '$(srcdir)/'`dict/dict0boot.c ha_innodb_plugin_la-dict0crea.lo: dict/dict0crea.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dict0crea.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-dict0crea.Tpo -c -o ha_innodb_plugin_la-dict0crea.lo `test -f 'dict/dict0crea.c' || echo '$(srcdir)/'`dict/dict0crea.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-dict0crea.Tpo $(DEPDIR)/ha_innodb_plugin_la-dict0crea.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dict0crea.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-dict0crea.Tpo" -c -o ha_innodb_plugin_la-dict0crea.lo `test -f 'dict/dict0crea.c' || echo '$(srcdir)/'`dict/dict0crea.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-dict0crea.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-dict0crea.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-dict0crea.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0crea.c' object='ha_innodb_plugin_la-dict0crea.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dict0crea.lo `test -f 'dict/dict0crea.c' || echo '$(srcdir)/'`dict/dict0crea.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dict0crea.lo `test -f 'dict/dict0crea.c' || echo '$(srcdir)/'`dict/dict0crea.c ha_innodb_plugin_la-dict0dict.lo: dict/dict0dict.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dict0dict.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-dict0dict.Tpo -c -o ha_innodb_plugin_la-dict0dict.lo `test -f 'dict/dict0dict.c' || echo '$(srcdir)/'`dict/dict0dict.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-dict0dict.Tpo $(DEPDIR)/ha_innodb_plugin_la-dict0dict.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dict0dict.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-dict0dict.Tpo" -c -o ha_innodb_plugin_la-dict0dict.lo `test -f 'dict/dict0dict.c' || echo '$(srcdir)/'`dict/dict0dict.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-dict0dict.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-dict0dict.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-dict0dict.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0dict.c' object='ha_innodb_plugin_la-dict0dict.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dict0dict.lo `test -f 'dict/dict0dict.c' || echo '$(srcdir)/'`dict/dict0dict.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dict0dict.lo `test -f 'dict/dict0dict.c' || echo '$(srcdir)/'`dict/dict0dict.c ha_innodb_plugin_la-dict0load.lo: dict/dict0load.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dict0load.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-dict0load.Tpo -c -o ha_innodb_plugin_la-dict0load.lo `test -f 'dict/dict0load.c' || echo '$(srcdir)/'`dict/dict0load.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-dict0load.Tpo $(DEPDIR)/ha_innodb_plugin_la-dict0load.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dict0load.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-dict0load.Tpo" -c -o ha_innodb_plugin_la-dict0load.lo `test -f 'dict/dict0load.c' || echo '$(srcdir)/'`dict/dict0load.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-dict0load.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-dict0load.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-dict0load.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0load.c' object='ha_innodb_plugin_la-dict0load.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dict0load.lo `test -f 'dict/dict0load.c' || echo '$(srcdir)/'`dict/dict0load.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dict0load.lo `test -f 'dict/dict0load.c' || echo '$(srcdir)/'`dict/dict0load.c ha_innodb_plugin_la-dict0mem.lo: dict/dict0mem.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dict0mem.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-dict0mem.Tpo -c -o ha_innodb_plugin_la-dict0mem.lo `test -f 'dict/dict0mem.c' || echo '$(srcdir)/'`dict/dict0mem.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-dict0mem.Tpo $(DEPDIR)/ha_innodb_plugin_la-dict0mem.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dict0mem.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-dict0mem.Tpo" -c -o ha_innodb_plugin_la-dict0mem.lo `test -f 'dict/dict0mem.c' || echo '$(srcdir)/'`dict/dict0mem.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-dict0mem.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-dict0mem.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-dict0mem.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dict/dict0mem.c' object='ha_innodb_plugin_la-dict0mem.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dict0mem.lo `test -f 'dict/dict0mem.c' || echo '$(srcdir)/'`dict/dict0mem.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dict0mem.lo `test -f 'dict/dict0mem.c' || echo '$(srcdir)/'`dict/dict0mem.c ha_innodb_plugin_la-dyn0dyn.lo: dyn/dyn0dyn.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dyn0dyn.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-dyn0dyn.Tpo -c -o ha_innodb_plugin_la-dyn0dyn.lo `test -f 'dyn/dyn0dyn.c' || echo '$(srcdir)/'`dyn/dyn0dyn.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-dyn0dyn.Tpo $(DEPDIR)/ha_innodb_plugin_la-dyn0dyn.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-dyn0dyn.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-dyn0dyn.Tpo" -c -o ha_innodb_plugin_la-dyn0dyn.lo `test -f 'dyn/dyn0dyn.c' || echo '$(srcdir)/'`dyn/dyn0dyn.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-dyn0dyn.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-dyn0dyn.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-dyn0dyn.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dyn/dyn0dyn.c' object='ha_innodb_plugin_la-dyn0dyn.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dyn0dyn.lo `test -f 'dyn/dyn0dyn.c' || echo '$(srcdir)/'`dyn/dyn0dyn.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-dyn0dyn.lo `test -f 'dyn/dyn0dyn.c' || echo '$(srcdir)/'`dyn/dyn0dyn.c ha_innodb_plugin_la-eval0eval.lo: eval/eval0eval.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-eval0eval.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-eval0eval.Tpo -c -o ha_innodb_plugin_la-eval0eval.lo `test -f 'eval/eval0eval.c' || echo '$(srcdir)/'`eval/eval0eval.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-eval0eval.Tpo $(DEPDIR)/ha_innodb_plugin_la-eval0eval.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-eval0eval.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-eval0eval.Tpo" -c -o ha_innodb_plugin_la-eval0eval.lo `test -f 'eval/eval0eval.c' || echo '$(srcdir)/'`eval/eval0eval.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-eval0eval.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-eval0eval.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-eval0eval.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eval/eval0eval.c' object='ha_innodb_plugin_la-eval0eval.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-eval0eval.lo `test -f 'eval/eval0eval.c' || echo '$(srcdir)/'`eval/eval0eval.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-eval0eval.lo `test -f 'eval/eval0eval.c' || echo '$(srcdir)/'`eval/eval0eval.c ha_innodb_plugin_la-eval0proc.lo: eval/eval0proc.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-eval0proc.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-eval0proc.Tpo -c -o ha_innodb_plugin_la-eval0proc.lo `test -f 'eval/eval0proc.c' || echo '$(srcdir)/'`eval/eval0proc.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-eval0proc.Tpo $(DEPDIR)/ha_innodb_plugin_la-eval0proc.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-eval0proc.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-eval0proc.Tpo" -c -o ha_innodb_plugin_la-eval0proc.lo `test -f 'eval/eval0proc.c' || echo '$(srcdir)/'`eval/eval0proc.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-eval0proc.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-eval0proc.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-eval0proc.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eval/eval0proc.c' object='ha_innodb_plugin_la-eval0proc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-eval0proc.lo `test -f 'eval/eval0proc.c' || echo '$(srcdir)/'`eval/eval0proc.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-eval0proc.lo `test -f 'eval/eval0proc.c' || echo '$(srcdir)/'`eval/eval0proc.c ha_innodb_plugin_la-fil0fil.lo: fil/fil0fil.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-fil0fil.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-fil0fil.Tpo -c -o ha_innodb_plugin_la-fil0fil.lo `test -f 'fil/fil0fil.c' || echo '$(srcdir)/'`fil/fil0fil.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-fil0fil.Tpo $(DEPDIR)/ha_innodb_plugin_la-fil0fil.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-fil0fil.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-fil0fil.Tpo" -c -o ha_innodb_plugin_la-fil0fil.lo `test -f 'fil/fil0fil.c' || echo '$(srcdir)/'`fil/fil0fil.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-fil0fil.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-fil0fil.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-fil0fil.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fil/fil0fil.c' object='ha_innodb_plugin_la-fil0fil.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-fil0fil.lo `test -f 'fil/fil0fil.c' || echo '$(srcdir)/'`fil/fil0fil.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-fil0fil.lo `test -f 'fil/fil0fil.c' || echo '$(srcdir)/'`fil/fil0fil.c ha_innodb_plugin_la-fsp0fsp.lo: fsp/fsp0fsp.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-fsp0fsp.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-fsp0fsp.Tpo -c -o ha_innodb_plugin_la-fsp0fsp.lo `test -f 'fsp/fsp0fsp.c' || echo '$(srcdir)/'`fsp/fsp0fsp.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-fsp0fsp.Tpo $(DEPDIR)/ha_innodb_plugin_la-fsp0fsp.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-fsp0fsp.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-fsp0fsp.Tpo" -c -o ha_innodb_plugin_la-fsp0fsp.lo `test -f 'fsp/fsp0fsp.c' || echo '$(srcdir)/'`fsp/fsp0fsp.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-fsp0fsp.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-fsp0fsp.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-fsp0fsp.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsp/fsp0fsp.c' object='ha_innodb_plugin_la-fsp0fsp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-fsp0fsp.lo `test -f 'fsp/fsp0fsp.c' || echo '$(srcdir)/'`fsp/fsp0fsp.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-fsp0fsp.lo `test -f 'fsp/fsp0fsp.c' || echo '$(srcdir)/'`fsp/fsp0fsp.c ha_innodb_plugin_la-fut0fut.lo: fut/fut0fut.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-fut0fut.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-fut0fut.Tpo -c -o ha_innodb_plugin_la-fut0fut.lo `test -f 'fut/fut0fut.c' || echo '$(srcdir)/'`fut/fut0fut.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-fut0fut.Tpo $(DEPDIR)/ha_innodb_plugin_la-fut0fut.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-fut0fut.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-fut0fut.Tpo" -c -o ha_innodb_plugin_la-fut0fut.lo `test -f 'fut/fut0fut.c' || echo '$(srcdir)/'`fut/fut0fut.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-fut0fut.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-fut0fut.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-fut0fut.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fut/fut0fut.c' object='ha_innodb_plugin_la-fut0fut.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-fut0fut.lo `test -f 'fut/fut0fut.c' || echo '$(srcdir)/'`fut/fut0fut.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-fut0fut.lo `test -f 'fut/fut0fut.c' || echo '$(srcdir)/'`fut/fut0fut.c ha_innodb_plugin_la-fut0lst.lo: fut/fut0lst.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-fut0lst.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-fut0lst.Tpo -c -o ha_innodb_plugin_la-fut0lst.lo `test -f 'fut/fut0lst.c' || echo '$(srcdir)/'`fut/fut0lst.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-fut0lst.Tpo $(DEPDIR)/ha_innodb_plugin_la-fut0lst.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-fut0lst.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-fut0lst.Tpo" -c -o ha_innodb_plugin_la-fut0lst.lo `test -f 'fut/fut0lst.c' || echo '$(srcdir)/'`fut/fut0lst.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-fut0lst.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-fut0lst.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-fut0lst.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fut/fut0lst.c' object='ha_innodb_plugin_la-fut0lst.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-fut0lst.lo `test -f 'fut/fut0lst.c' || echo '$(srcdir)/'`fut/fut0lst.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-fut0lst.lo `test -f 'fut/fut0lst.c' || echo '$(srcdir)/'`fut/fut0lst.c ha_innodb_plugin_la-ha0ha.lo: ha/ha0ha.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ha0ha.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ha0ha.Tpo -c -o ha_innodb_plugin_la-ha0ha.lo `test -f 'ha/ha0ha.c' || echo '$(srcdir)/'`ha/ha0ha.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ha0ha.Tpo $(DEPDIR)/ha_innodb_plugin_la-ha0ha.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ha0ha.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ha0ha.Tpo" -c -o ha_innodb_plugin_la-ha0ha.lo `test -f 'ha/ha0ha.c' || echo '$(srcdir)/'`ha/ha0ha.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ha0ha.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ha0ha.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ha0ha.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ha/ha0ha.c' object='ha_innodb_plugin_la-ha0ha.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ha0ha.lo `test -f 'ha/ha0ha.c' || echo '$(srcdir)/'`ha/ha0ha.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ha0ha.lo `test -f 'ha/ha0ha.c' || echo '$(srcdir)/'`ha/ha0ha.c ha_innodb_plugin_la-ha0storage.lo: ha/ha0storage.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ha0storage.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ha0storage.Tpo -c -o ha_innodb_plugin_la-ha0storage.lo `test -f 'ha/ha0storage.c' || echo '$(srcdir)/'`ha/ha0storage.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ha0storage.Tpo $(DEPDIR)/ha_innodb_plugin_la-ha0storage.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ha0storage.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ha0storage.Tpo" -c -o ha_innodb_plugin_la-ha0storage.lo `test -f 'ha/ha0storage.c' || echo '$(srcdir)/'`ha/ha0storage.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ha0storage.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ha0storage.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ha0storage.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ha/ha0storage.c' object='ha_innodb_plugin_la-ha0storage.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ha0storage.lo `test -f 'ha/ha0storage.c' || echo '$(srcdir)/'`ha/ha0storage.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ha0storage.lo `test -f 'ha/ha0storage.c' || echo '$(srcdir)/'`ha/ha0storage.c ha_innodb_plugin_la-hash0hash.lo: ha/hash0hash.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-hash0hash.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-hash0hash.Tpo -c -o ha_innodb_plugin_la-hash0hash.lo `test -f 'ha/hash0hash.c' || echo '$(srcdir)/'`ha/hash0hash.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-hash0hash.Tpo $(DEPDIR)/ha_innodb_plugin_la-hash0hash.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-hash0hash.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-hash0hash.Tpo" -c -o ha_innodb_plugin_la-hash0hash.lo `test -f 'ha/hash0hash.c' || echo '$(srcdir)/'`ha/hash0hash.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-hash0hash.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-hash0hash.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-hash0hash.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ha/hash0hash.c' object='ha_innodb_plugin_la-hash0hash.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-hash0hash.lo `test -f 'ha/hash0hash.c' || echo '$(srcdir)/'`ha/hash0hash.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-hash0hash.lo `test -f 'ha/hash0hash.c' || echo '$(srcdir)/'`ha/hash0hash.c ha_innodb_plugin_la-ibuf0ibuf.lo: ibuf/ibuf0ibuf.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ibuf0ibuf.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ibuf0ibuf.Tpo -c -o ha_innodb_plugin_la-ibuf0ibuf.lo `test -f 'ibuf/ibuf0ibuf.c' || echo '$(srcdir)/'`ibuf/ibuf0ibuf.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ibuf0ibuf.Tpo $(DEPDIR)/ha_innodb_plugin_la-ibuf0ibuf.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ibuf0ibuf.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ibuf0ibuf.Tpo" -c -o ha_innodb_plugin_la-ibuf0ibuf.lo `test -f 'ibuf/ibuf0ibuf.c' || echo '$(srcdir)/'`ibuf/ibuf0ibuf.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ibuf0ibuf.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ibuf0ibuf.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ibuf0ibuf.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ibuf/ibuf0ibuf.c' object='ha_innodb_plugin_la-ibuf0ibuf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ibuf0ibuf.lo `test -f 'ibuf/ibuf0ibuf.c' || echo '$(srcdir)/'`ibuf/ibuf0ibuf.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ibuf0ibuf.lo `test -f 'ibuf/ibuf0ibuf.c' || echo '$(srcdir)/'`ibuf/ibuf0ibuf.c ha_innodb_plugin_la-lock0iter.lo: lock/lock0iter.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-lock0iter.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-lock0iter.Tpo -c -o ha_innodb_plugin_la-lock0iter.lo `test -f 'lock/lock0iter.c' || echo '$(srcdir)/'`lock/lock0iter.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-lock0iter.Tpo $(DEPDIR)/ha_innodb_plugin_la-lock0iter.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-lock0iter.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-lock0iter.Tpo" -c -o ha_innodb_plugin_la-lock0iter.lo `test -f 'lock/lock0iter.c' || echo '$(srcdir)/'`lock/lock0iter.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-lock0iter.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-lock0iter.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-lock0iter.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lock/lock0iter.c' object='ha_innodb_plugin_la-lock0iter.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-lock0iter.lo `test -f 'lock/lock0iter.c' || echo '$(srcdir)/'`lock/lock0iter.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-lock0iter.lo `test -f 'lock/lock0iter.c' || echo '$(srcdir)/'`lock/lock0iter.c ha_innodb_plugin_la-lock0lock.lo: lock/lock0lock.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-lock0lock.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-lock0lock.Tpo -c -o ha_innodb_plugin_la-lock0lock.lo `test -f 'lock/lock0lock.c' || echo '$(srcdir)/'`lock/lock0lock.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-lock0lock.Tpo $(DEPDIR)/ha_innodb_plugin_la-lock0lock.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-lock0lock.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-lock0lock.Tpo" -c -o ha_innodb_plugin_la-lock0lock.lo `test -f 'lock/lock0lock.c' || echo '$(srcdir)/'`lock/lock0lock.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-lock0lock.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-lock0lock.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-lock0lock.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lock/lock0lock.c' object='ha_innodb_plugin_la-lock0lock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-lock0lock.lo `test -f 'lock/lock0lock.c' || echo '$(srcdir)/'`lock/lock0lock.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-lock0lock.lo `test -f 'lock/lock0lock.c' || echo '$(srcdir)/'`lock/lock0lock.c ha_innodb_plugin_la-log0log.lo: log/log0log.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-log0log.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-log0log.Tpo -c -o ha_innodb_plugin_la-log0log.lo `test -f 'log/log0log.c' || echo '$(srcdir)/'`log/log0log.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-log0log.Tpo $(DEPDIR)/ha_innodb_plugin_la-log0log.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-log0log.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-log0log.Tpo" -c -o ha_innodb_plugin_la-log0log.lo `test -f 'log/log0log.c' || echo '$(srcdir)/'`log/log0log.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-log0log.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-log0log.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-log0log.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='log/log0log.c' object='ha_innodb_plugin_la-log0log.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-log0log.lo `test -f 'log/log0log.c' || echo '$(srcdir)/'`log/log0log.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-log0log.lo `test -f 'log/log0log.c' || echo '$(srcdir)/'`log/log0log.c + +ha_innodb_plugin_la-log0online.lo: log/log0online.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-log0online.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-log0online.Tpo" -c -o ha_innodb_plugin_la-log0online.lo `test -f 'log/log0online.c' || echo '$(srcdir)/'`log/log0online.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-log0online.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-log0online.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-log0online.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='log/log0online.c' object='ha_innodb_plugin_la-log0online.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-log0online.lo `test -f 'log/log0online.c' || echo '$(srcdir)/'`log/log0online.c ha_innodb_plugin_la-log0recv.lo: log/log0recv.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-log0recv.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-log0recv.Tpo -c -o ha_innodb_plugin_la-log0recv.lo `test -f 'log/log0recv.c' || echo '$(srcdir)/'`log/log0recv.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-log0recv.Tpo $(DEPDIR)/ha_innodb_plugin_la-log0recv.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-log0recv.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-log0recv.Tpo" -c -o ha_innodb_plugin_la-log0recv.lo `test -f 'log/log0recv.c' || echo '$(srcdir)/'`log/log0recv.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-log0recv.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-log0recv.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-log0recv.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='log/log0recv.c' object='ha_innodb_plugin_la-log0recv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-log0recv.lo `test -f 'log/log0recv.c' || echo '$(srcdir)/'`log/log0recv.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-log0recv.lo `test -f 'log/log0recv.c' || echo '$(srcdir)/'`log/log0recv.c ha_innodb_plugin_la-mach0data.lo: mach/mach0data.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-mach0data.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-mach0data.Tpo -c -o ha_innodb_plugin_la-mach0data.lo `test -f 'mach/mach0data.c' || echo '$(srcdir)/'`mach/mach0data.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-mach0data.Tpo $(DEPDIR)/ha_innodb_plugin_la-mach0data.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-mach0data.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-mach0data.Tpo" -c -o ha_innodb_plugin_la-mach0data.lo `test -f 'mach/mach0data.c' || echo '$(srcdir)/'`mach/mach0data.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-mach0data.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-mach0data.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-mach0data.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mach/mach0data.c' object='ha_innodb_plugin_la-mach0data.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-mach0data.lo `test -f 'mach/mach0data.c' || echo '$(srcdir)/'`mach/mach0data.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-mach0data.lo `test -f 'mach/mach0data.c' || echo '$(srcdir)/'`mach/mach0data.c ha_innodb_plugin_la-mem0mem.lo: mem/mem0mem.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-mem0mem.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-mem0mem.Tpo -c -o ha_innodb_plugin_la-mem0mem.lo `test -f 'mem/mem0mem.c' || echo '$(srcdir)/'`mem/mem0mem.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-mem0mem.Tpo $(DEPDIR)/ha_innodb_plugin_la-mem0mem.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-mem0mem.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-mem0mem.Tpo" -c -o ha_innodb_plugin_la-mem0mem.lo `test -f 'mem/mem0mem.c' || echo '$(srcdir)/'`mem/mem0mem.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-mem0mem.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-mem0mem.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-mem0mem.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mem/mem0mem.c' object='ha_innodb_plugin_la-mem0mem.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-mem0mem.lo `test -f 'mem/mem0mem.c' || echo '$(srcdir)/'`mem/mem0mem.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-mem0mem.lo `test -f 'mem/mem0mem.c' || echo '$(srcdir)/'`mem/mem0mem.c ha_innodb_plugin_la-mem0pool.lo: mem/mem0pool.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-mem0pool.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-mem0pool.Tpo -c -o ha_innodb_plugin_la-mem0pool.lo `test -f 'mem/mem0pool.c' || echo '$(srcdir)/'`mem/mem0pool.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-mem0pool.Tpo $(DEPDIR)/ha_innodb_plugin_la-mem0pool.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-mem0pool.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-mem0pool.Tpo" -c -o ha_innodb_plugin_la-mem0pool.lo `test -f 'mem/mem0pool.c' || echo '$(srcdir)/'`mem/mem0pool.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-mem0pool.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-mem0pool.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-mem0pool.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mem/mem0pool.c' object='ha_innodb_plugin_la-mem0pool.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-mem0pool.lo `test -f 'mem/mem0pool.c' || echo '$(srcdir)/'`mem/mem0pool.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-mem0pool.lo `test -f 'mem/mem0pool.c' || echo '$(srcdir)/'`mem/mem0pool.c ha_innodb_plugin_la-mtr0log.lo: mtr/mtr0log.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-mtr0log.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-mtr0log.Tpo -c -o ha_innodb_plugin_la-mtr0log.lo `test -f 'mtr/mtr0log.c' || echo '$(srcdir)/'`mtr/mtr0log.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-mtr0log.Tpo $(DEPDIR)/ha_innodb_plugin_la-mtr0log.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-mtr0log.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-mtr0log.Tpo" -c -o ha_innodb_plugin_la-mtr0log.lo `test -f 'mtr/mtr0log.c' || echo '$(srcdir)/'`mtr/mtr0log.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-mtr0log.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-mtr0log.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-mtr0log.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mtr/mtr0log.c' object='ha_innodb_plugin_la-mtr0log.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-mtr0log.lo `test -f 'mtr/mtr0log.c' || echo '$(srcdir)/'`mtr/mtr0log.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-mtr0log.lo `test -f 'mtr/mtr0log.c' || echo '$(srcdir)/'`mtr/mtr0log.c ha_innodb_plugin_la-mtr0mtr.lo: mtr/mtr0mtr.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-mtr0mtr.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-mtr0mtr.Tpo -c -o ha_innodb_plugin_la-mtr0mtr.lo `test -f 'mtr/mtr0mtr.c' || echo '$(srcdir)/'`mtr/mtr0mtr.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-mtr0mtr.Tpo $(DEPDIR)/ha_innodb_plugin_la-mtr0mtr.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-mtr0mtr.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-mtr0mtr.Tpo" -c -o ha_innodb_plugin_la-mtr0mtr.lo `test -f 'mtr/mtr0mtr.c' || echo '$(srcdir)/'`mtr/mtr0mtr.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-mtr0mtr.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-mtr0mtr.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-mtr0mtr.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mtr/mtr0mtr.c' object='ha_innodb_plugin_la-mtr0mtr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-mtr0mtr.lo `test -f 'mtr/mtr0mtr.c' || echo '$(srcdir)/'`mtr/mtr0mtr.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-mtr0mtr.lo `test -f 'mtr/mtr0mtr.c' || echo '$(srcdir)/'`mtr/mtr0mtr.c ha_innodb_plugin_la-os0file.lo: os/os0file.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-os0file.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-os0file.Tpo -c -o ha_innodb_plugin_la-os0file.lo `test -f 'os/os0file.c' || echo '$(srcdir)/'`os/os0file.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-os0file.Tpo $(DEPDIR)/ha_innodb_plugin_la-os0file.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-os0file.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-os0file.Tpo" -c -o ha_innodb_plugin_la-os0file.lo `test -f 'os/os0file.c' || echo '$(srcdir)/'`os/os0file.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-os0file.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-os0file.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-os0file.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0file.c' object='ha_innodb_plugin_la-os0file.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-os0file.lo `test -f 'os/os0file.c' || echo '$(srcdir)/'`os/os0file.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-os0file.lo `test -f 'os/os0file.c' || echo '$(srcdir)/'`os/os0file.c ha_innodb_plugin_la-os0proc.lo: os/os0proc.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-os0proc.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-os0proc.Tpo -c -o ha_innodb_plugin_la-os0proc.lo `test -f 'os/os0proc.c' || echo '$(srcdir)/'`os/os0proc.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-os0proc.Tpo $(DEPDIR)/ha_innodb_plugin_la-os0proc.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-os0proc.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-os0proc.Tpo" -c -o ha_innodb_plugin_la-os0proc.lo `test -f 'os/os0proc.c' || echo '$(srcdir)/'`os/os0proc.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-os0proc.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-os0proc.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-os0proc.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0proc.c' object='ha_innodb_plugin_la-os0proc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-os0proc.lo `test -f 'os/os0proc.c' || echo '$(srcdir)/'`os/os0proc.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-os0proc.lo `test -f 'os/os0proc.c' || echo '$(srcdir)/'`os/os0proc.c ha_innodb_plugin_la-os0sync.lo: os/os0sync.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-os0sync.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-os0sync.Tpo -c -o ha_innodb_plugin_la-os0sync.lo `test -f 'os/os0sync.c' || echo '$(srcdir)/'`os/os0sync.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-os0sync.Tpo $(DEPDIR)/ha_innodb_plugin_la-os0sync.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-os0sync.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-os0sync.Tpo" -c -o ha_innodb_plugin_la-os0sync.lo `test -f 'os/os0sync.c' || echo '$(srcdir)/'`os/os0sync.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-os0sync.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-os0sync.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-os0sync.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0sync.c' object='ha_innodb_plugin_la-os0sync.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-os0sync.lo `test -f 'os/os0sync.c' || echo '$(srcdir)/'`os/os0sync.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-os0sync.lo `test -f 'os/os0sync.c' || echo '$(srcdir)/'`os/os0sync.c ha_innodb_plugin_la-os0thread.lo: os/os0thread.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-os0thread.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-os0thread.Tpo -c -o ha_innodb_plugin_la-os0thread.lo `test -f 'os/os0thread.c' || echo '$(srcdir)/'`os/os0thread.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-os0thread.Tpo $(DEPDIR)/ha_innodb_plugin_la-os0thread.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-os0thread.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-os0thread.Tpo" -c -o ha_innodb_plugin_la-os0thread.lo `test -f 'os/os0thread.c' || echo '$(srcdir)/'`os/os0thread.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-os0thread.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-os0thread.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-os0thread.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os/os0thread.c' object='ha_innodb_plugin_la-os0thread.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-os0thread.lo `test -f 'os/os0thread.c' || echo '$(srcdir)/'`os/os0thread.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-os0thread.lo `test -f 'os/os0thread.c' || echo '$(srcdir)/'`os/os0thread.c ha_innodb_plugin_la-page0cur.lo: page/page0cur.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-page0cur.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-page0cur.Tpo -c -o ha_innodb_plugin_la-page0cur.lo `test -f 'page/page0cur.c' || echo '$(srcdir)/'`page/page0cur.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-page0cur.Tpo $(DEPDIR)/ha_innodb_plugin_la-page0cur.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-page0cur.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-page0cur.Tpo" -c -o ha_innodb_plugin_la-page0cur.lo `test -f 'page/page0cur.c' || echo '$(srcdir)/'`page/page0cur.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-page0cur.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-page0cur.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-page0cur.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='page/page0cur.c' object='ha_innodb_plugin_la-page0cur.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-page0cur.lo `test -f 'page/page0cur.c' || echo '$(srcdir)/'`page/page0cur.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-page0cur.lo `test -f 'page/page0cur.c' || echo '$(srcdir)/'`page/page0cur.c ha_innodb_plugin_la-page0page.lo: page/page0page.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-page0page.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-page0page.Tpo -c -o ha_innodb_plugin_la-page0page.lo `test -f 'page/page0page.c' || echo '$(srcdir)/'`page/page0page.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-page0page.Tpo $(DEPDIR)/ha_innodb_plugin_la-page0page.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-page0page.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-page0page.Tpo" -c -o ha_innodb_plugin_la-page0page.lo `test -f 'page/page0page.c' || echo '$(srcdir)/'`page/page0page.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-page0page.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-page0page.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-page0page.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='page/page0page.c' object='ha_innodb_plugin_la-page0page.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-page0page.lo `test -f 'page/page0page.c' || echo '$(srcdir)/'`page/page0page.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-page0page.lo `test -f 'page/page0page.c' || echo '$(srcdir)/'`page/page0page.c ha_innodb_plugin_la-page0zip.lo: page/page0zip.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-page0zip.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-page0zip.Tpo -c -o ha_innodb_plugin_la-page0zip.lo `test -f 'page/page0zip.c' || echo '$(srcdir)/'`page/page0zip.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-page0zip.Tpo $(DEPDIR)/ha_innodb_plugin_la-page0zip.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-page0zip.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-page0zip.Tpo" -c -o ha_innodb_plugin_la-page0zip.lo `test -f 'page/page0zip.c' || echo '$(srcdir)/'`page/page0zip.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-page0zip.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-page0zip.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-page0zip.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='page/page0zip.c' object='ha_innodb_plugin_la-page0zip.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-page0zip.lo `test -f 'page/page0zip.c' || echo '$(srcdir)/'`page/page0zip.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-page0zip.lo `test -f 'page/page0zip.c' || echo '$(srcdir)/'`page/page0zip.c ha_innodb_plugin_la-lexyy.lo: pars/lexyy.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-lexyy.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-lexyy.Tpo -c -o ha_innodb_plugin_la-lexyy.lo `test -f 'pars/lexyy.c' || echo '$(srcdir)/'`pars/lexyy.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-lexyy.Tpo $(DEPDIR)/ha_innodb_plugin_la-lexyy.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-lexyy.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-lexyy.Tpo" -c -o ha_innodb_plugin_la-lexyy.lo `test -f 'pars/lexyy.c' || echo '$(srcdir)/'`pars/lexyy.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-lexyy.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-lexyy.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-lexyy.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/lexyy.c' object='ha_innodb_plugin_la-lexyy.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-lexyy.lo `test -f 'pars/lexyy.c' || echo '$(srcdir)/'`pars/lexyy.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-lexyy.lo `test -f 'pars/lexyy.c' || echo '$(srcdir)/'`pars/lexyy.c ha_innodb_plugin_la-pars0grm.lo: pars/pars0grm.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-pars0grm.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-pars0grm.Tpo -c -o ha_innodb_plugin_la-pars0grm.lo `test -f 'pars/pars0grm.c' || echo '$(srcdir)/'`pars/pars0grm.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-pars0grm.Tpo $(DEPDIR)/ha_innodb_plugin_la-pars0grm.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-pars0grm.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-pars0grm.Tpo" -c -o ha_innodb_plugin_la-pars0grm.lo `test -f 'pars/pars0grm.c' || echo '$(srcdir)/'`pars/pars0grm.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-pars0grm.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-pars0grm.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-pars0grm.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0grm.c' object='ha_innodb_plugin_la-pars0grm.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-pars0grm.lo `test -f 'pars/pars0grm.c' || echo '$(srcdir)/'`pars/pars0grm.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-pars0grm.lo `test -f 'pars/pars0grm.c' || echo '$(srcdir)/'`pars/pars0grm.c ha_innodb_plugin_la-pars0opt.lo: pars/pars0opt.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-pars0opt.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-pars0opt.Tpo -c -o ha_innodb_plugin_la-pars0opt.lo `test -f 'pars/pars0opt.c' || echo '$(srcdir)/'`pars/pars0opt.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-pars0opt.Tpo $(DEPDIR)/ha_innodb_plugin_la-pars0opt.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-pars0opt.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-pars0opt.Tpo" -c -o ha_innodb_plugin_la-pars0opt.lo `test -f 'pars/pars0opt.c' || echo '$(srcdir)/'`pars/pars0opt.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-pars0opt.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-pars0opt.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-pars0opt.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0opt.c' object='ha_innodb_plugin_la-pars0opt.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-pars0opt.lo `test -f 'pars/pars0opt.c' || echo '$(srcdir)/'`pars/pars0opt.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-pars0opt.lo `test -f 'pars/pars0opt.c' || echo '$(srcdir)/'`pars/pars0opt.c ha_innodb_plugin_la-pars0pars.lo: pars/pars0pars.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-pars0pars.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-pars0pars.Tpo -c -o ha_innodb_plugin_la-pars0pars.lo `test -f 'pars/pars0pars.c' || echo '$(srcdir)/'`pars/pars0pars.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-pars0pars.Tpo $(DEPDIR)/ha_innodb_plugin_la-pars0pars.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-pars0pars.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-pars0pars.Tpo" -c -o ha_innodb_plugin_la-pars0pars.lo `test -f 'pars/pars0pars.c' || echo '$(srcdir)/'`pars/pars0pars.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-pars0pars.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-pars0pars.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-pars0pars.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0pars.c' object='ha_innodb_plugin_la-pars0pars.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-pars0pars.lo `test -f 'pars/pars0pars.c' || echo '$(srcdir)/'`pars/pars0pars.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-pars0pars.lo `test -f 'pars/pars0pars.c' || echo '$(srcdir)/'`pars/pars0pars.c ha_innodb_plugin_la-pars0sym.lo: pars/pars0sym.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-pars0sym.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-pars0sym.Tpo -c -o ha_innodb_plugin_la-pars0sym.lo `test -f 'pars/pars0sym.c' || echo '$(srcdir)/'`pars/pars0sym.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-pars0sym.Tpo $(DEPDIR)/ha_innodb_plugin_la-pars0sym.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-pars0sym.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-pars0sym.Tpo" -c -o ha_innodb_plugin_la-pars0sym.lo `test -f 'pars/pars0sym.c' || echo '$(srcdir)/'`pars/pars0sym.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-pars0sym.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-pars0sym.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-pars0sym.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pars/pars0sym.c' object='ha_innodb_plugin_la-pars0sym.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-pars0sym.lo `test -f 'pars/pars0sym.c' || echo '$(srcdir)/'`pars/pars0sym.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-pars0sym.lo `test -f 'pars/pars0sym.c' || echo '$(srcdir)/'`pars/pars0sym.c ha_innodb_plugin_la-que0que.lo: que/que0que.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-que0que.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-que0que.Tpo -c -o ha_innodb_plugin_la-que0que.lo `test -f 'que/que0que.c' || echo '$(srcdir)/'`que/que0que.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-que0que.Tpo $(DEPDIR)/ha_innodb_plugin_la-que0que.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-que0que.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-que0que.Tpo" -c -o ha_innodb_plugin_la-que0que.lo `test -f 'que/que0que.c' || echo '$(srcdir)/'`que/que0que.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-que0que.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-que0que.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-que0que.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='que/que0que.c' object='ha_innodb_plugin_la-que0que.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-que0que.lo `test -f 'que/que0que.c' || echo '$(srcdir)/'`que/que0que.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-que0que.lo `test -f 'que/que0que.c' || echo '$(srcdir)/'`que/que0que.c ha_innodb_plugin_la-read0read.lo: read/read0read.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-read0read.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-read0read.Tpo -c -o ha_innodb_plugin_la-read0read.lo `test -f 'read/read0read.c' || echo '$(srcdir)/'`read/read0read.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-read0read.Tpo $(DEPDIR)/ha_innodb_plugin_la-read0read.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-read0read.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-read0read.Tpo" -c -o ha_innodb_plugin_la-read0read.lo `test -f 'read/read0read.c' || echo '$(srcdir)/'`read/read0read.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-read0read.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-read0read.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-read0read.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='read/read0read.c' object='ha_innodb_plugin_la-read0read.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-read0read.lo `test -f 'read/read0read.c' || echo '$(srcdir)/'`read/read0read.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-read0read.lo `test -f 'read/read0read.c' || echo '$(srcdir)/'`read/read0read.c ha_innodb_plugin_la-rem0cmp.lo: rem/rem0cmp.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-rem0cmp.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-rem0cmp.Tpo -c -o ha_innodb_plugin_la-rem0cmp.lo `test -f 'rem/rem0cmp.c' || echo '$(srcdir)/'`rem/rem0cmp.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-rem0cmp.Tpo $(DEPDIR)/ha_innodb_plugin_la-rem0cmp.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-rem0cmp.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-rem0cmp.Tpo" -c -o ha_innodb_plugin_la-rem0cmp.lo `test -f 'rem/rem0cmp.c' || echo '$(srcdir)/'`rem/rem0cmp.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-rem0cmp.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-rem0cmp.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-rem0cmp.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rem/rem0cmp.c' object='ha_innodb_plugin_la-rem0cmp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-rem0cmp.lo `test -f 'rem/rem0cmp.c' || echo '$(srcdir)/'`rem/rem0cmp.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-rem0cmp.lo `test -f 'rem/rem0cmp.c' || echo '$(srcdir)/'`rem/rem0cmp.c ha_innodb_plugin_la-rem0rec.lo: rem/rem0rec.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-rem0rec.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-rem0rec.Tpo -c -o ha_innodb_plugin_la-rem0rec.lo `test -f 'rem/rem0rec.c' || echo '$(srcdir)/'`rem/rem0rec.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-rem0rec.Tpo $(DEPDIR)/ha_innodb_plugin_la-rem0rec.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-rem0rec.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-rem0rec.Tpo" -c -o ha_innodb_plugin_la-rem0rec.lo `test -f 'rem/rem0rec.c' || echo '$(srcdir)/'`rem/rem0rec.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-rem0rec.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-rem0rec.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-rem0rec.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rem/rem0rec.c' object='ha_innodb_plugin_la-rem0rec.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-rem0rec.lo `test -f 'rem/rem0rec.c' || echo '$(srcdir)/'`rem/rem0rec.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-rem0rec.lo `test -f 'rem/rem0rec.c' || echo '$(srcdir)/'`rem/rem0rec.c ha_innodb_plugin_la-row0ext.lo: row/row0ext.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0ext.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0ext.Tpo -c -o ha_innodb_plugin_la-row0ext.lo `test -f 'row/row0ext.c' || echo '$(srcdir)/'`row/row0ext.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0ext.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0ext.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0ext.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0ext.Tpo" -c -o ha_innodb_plugin_la-row0ext.lo `test -f 'row/row0ext.c' || echo '$(srcdir)/'`row/row0ext.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0ext.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0ext.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0ext.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0ext.c' object='ha_innodb_plugin_la-row0ext.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0ext.lo `test -f 'row/row0ext.c' || echo '$(srcdir)/'`row/row0ext.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0ext.lo `test -f 'row/row0ext.c' || echo '$(srcdir)/'`row/row0ext.c ha_innodb_plugin_la-row0ins.lo: row/row0ins.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0ins.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0ins.Tpo -c -o ha_innodb_plugin_la-row0ins.lo `test -f 'row/row0ins.c' || echo '$(srcdir)/'`row/row0ins.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0ins.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0ins.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0ins.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0ins.Tpo" -c -o ha_innodb_plugin_la-row0ins.lo `test -f 'row/row0ins.c' || echo '$(srcdir)/'`row/row0ins.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0ins.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0ins.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0ins.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0ins.c' object='ha_innodb_plugin_la-row0ins.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0ins.lo `test -f 'row/row0ins.c' || echo '$(srcdir)/'`row/row0ins.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0ins.lo `test -f 'row/row0ins.c' || echo '$(srcdir)/'`row/row0ins.c ha_innodb_plugin_la-row0merge.lo: row/row0merge.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0merge.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0merge.Tpo -c -o ha_innodb_plugin_la-row0merge.lo `test -f 'row/row0merge.c' || echo '$(srcdir)/'`row/row0merge.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0merge.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0merge.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0merge.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0merge.Tpo" -c -o ha_innodb_plugin_la-row0merge.lo `test -f 'row/row0merge.c' || echo '$(srcdir)/'`row/row0merge.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0merge.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0merge.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0merge.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0merge.c' object='ha_innodb_plugin_la-row0merge.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0merge.lo `test -f 'row/row0merge.c' || echo '$(srcdir)/'`row/row0merge.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0merge.lo `test -f 'row/row0merge.c' || echo '$(srcdir)/'`row/row0merge.c ha_innodb_plugin_la-row0mysql.lo: row/row0mysql.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0mysql.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0mysql.Tpo -c -o ha_innodb_plugin_la-row0mysql.lo `test -f 'row/row0mysql.c' || echo '$(srcdir)/'`row/row0mysql.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0mysql.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0mysql.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0mysql.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0mysql.Tpo" -c -o ha_innodb_plugin_la-row0mysql.lo `test -f 'row/row0mysql.c' || echo '$(srcdir)/'`row/row0mysql.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0mysql.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0mysql.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0mysql.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0mysql.c' object='ha_innodb_plugin_la-row0mysql.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0mysql.lo `test -f 'row/row0mysql.c' || echo '$(srcdir)/'`row/row0mysql.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0mysql.lo `test -f 'row/row0mysql.c' || echo '$(srcdir)/'`row/row0mysql.c ha_innodb_plugin_la-row0purge.lo: row/row0purge.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0purge.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0purge.Tpo -c -o ha_innodb_plugin_la-row0purge.lo `test -f 'row/row0purge.c' || echo '$(srcdir)/'`row/row0purge.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0purge.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0purge.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0purge.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0purge.Tpo" -c -o ha_innodb_plugin_la-row0purge.lo `test -f 'row/row0purge.c' || echo '$(srcdir)/'`row/row0purge.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0purge.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0purge.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0purge.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0purge.c' object='ha_innodb_plugin_la-row0purge.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0purge.lo `test -f 'row/row0purge.c' || echo '$(srcdir)/'`row/row0purge.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0purge.lo `test -f 'row/row0purge.c' || echo '$(srcdir)/'`row/row0purge.c ha_innodb_plugin_la-row0row.lo: row/row0row.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0row.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0row.Tpo -c -o ha_innodb_plugin_la-row0row.lo `test -f 'row/row0row.c' || echo '$(srcdir)/'`row/row0row.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0row.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0row.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0row.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0row.Tpo" -c -o ha_innodb_plugin_la-row0row.lo `test -f 'row/row0row.c' || echo '$(srcdir)/'`row/row0row.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0row.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0row.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0row.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0row.c' object='ha_innodb_plugin_la-row0row.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0row.lo `test -f 'row/row0row.c' || echo '$(srcdir)/'`row/row0row.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0row.lo `test -f 'row/row0row.c' || echo '$(srcdir)/'`row/row0row.c ha_innodb_plugin_la-row0sel.lo: row/row0sel.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0sel.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0sel.Tpo -c -o ha_innodb_plugin_la-row0sel.lo `test -f 'row/row0sel.c' || echo '$(srcdir)/'`row/row0sel.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0sel.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0sel.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0sel.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0sel.Tpo" -c -o ha_innodb_plugin_la-row0sel.lo `test -f 'row/row0sel.c' || echo '$(srcdir)/'`row/row0sel.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0sel.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0sel.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0sel.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0sel.c' object='ha_innodb_plugin_la-row0sel.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0sel.lo `test -f 'row/row0sel.c' || echo '$(srcdir)/'`row/row0sel.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0sel.lo `test -f 'row/row0sel.c' || echo '$(srcdir)/'`row/row0sel.c ha_innodb_plugin_la-row0uins.lo: row/row0uins.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0uins.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0uins.Tpo -c -o ha_innodb_plugin_la-row0uins.lo `test -f 'row/row0uins.c' || echo '$(srcdir)/'`row/row0uins.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0uins.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0uins.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0uins.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0uins.Tpo" -c -o ha_innodb_plugin_la-row0uins.lo `test -f 'row/row0uins.c' || echo '$(srcdir)/'`row/row0uins.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0uins.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0uins.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0uins.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0uins.c' object='ha_innodb_plugin_la-row0uins.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0uins.lo `test -f 'row/row0uins.c' || echo '$(srcdir)/'`row/row0uins.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0uins.lo `test -f 'row/row0uins.c' || echo '$(srcdir)/'`row/row0uins.c ha_innodb_plugin_la-row0umod.lo: row/row0umod.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0umod.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0umod.Tpo -c -o ha_innodb_plugin_la-row0umod.lo `test -f 'row/row0umod.c' || echo '$(srcdir)/'`row/row0umod.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0umod.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0umod.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0umod.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0umod.Tpo" -c -o ha_innodb_plugin_la-row0umod.lo `test -f 'row/row0umod.c' || echo '$(srcdir)/'`row/row0umod.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0umod.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0umod.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0umod.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0umod.c' object='ha_innodb_plugin_la-row0umod.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0umod.lo `test -f 'row/row0umod.c' || echo '$(srcdir)/'`row/row0umod.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0umod.lo `test -f 'row/row0umod.c' || echo '$(srcdir)/'`row/row0umod.c ha_innodb_plugin_la-row0undo.lo: row/row0undo.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0undo.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0undo.Tpo -c -o ha_innodb_plugin_la-row0undo.lo `test -f 'row/row0undo.c' || echo '$(srcdir)/'`row/row0undo.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0undo.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0undo.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0undo.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0undo.Tpo" -c -o ha_innodb_plugin_la-row0undo.lo `test -f 'row/row0undo.c' || echo '$(srcdir)/'`row/row0undo.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0undo.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0undo.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0undo.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0undo.c' object='ha_innodb_plugin_la-row0undo.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0undo.lo `test -f 'row/row0undo.c' || echo '$(srcdir)/'`row/row0undo.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0undo.lo `test -f 'row/row0undo.c' || echo '$(srcdir)/'`row/row0undo.c ha_innodb_plugin_la-row0upd.lo: row/row0upd.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0upd.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0upd.Tpo -c -o ha_innodb_plugin_la-row0upd.lo `test -f 'row/row0upd.c' || echo '$(srcdir)/'`row/row0upd.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0upd.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0upd.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0upd.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0upd.Tpo" -c -o ha_innodb_plugin_la-row0upd.lo `test -f 'row/row0upd.c' || echo '$(srcdir)/'`row/row0upd.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0upd.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0upd.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0upd.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0upd.c' object='ha_innodb_plugin_la-row0upd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0upd.lo `test -f 'row/row0upd.c' || echo '$(srcdir)/'`row/row0upd.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0upd.lo `test -f 'row/row0upd.c' || echo '$(srcdir)/'`row/row0upd.c ha_innodb_plugin_la-row0vers.lo: row/row0vers.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0vers.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-row0vers.Tpo -c -o ha_innodb_plugin_la-row0vers.lo `test -f 'row/row0vers.c' || echo '$(srcdir)/'`row/row0vers.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-row0vers.Tpo $(DEPDIR)/ha_innodb_plugin_la-row0vers.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-row0vers.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-row0vers.Tpo" -c -o ha_innodb_plugin_la-row0vers.lo `test -f 'row/row0vers.c' || echo '$(srcdir)/'`row/row0vers.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-row0vers.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-row0vers.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-row0vers.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='row/row0vers.c' object='ha_innodb_plugin_la-row0vers.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0vers.lo `test -f 'row/row0vers.c' || echo '$(srcdir)/'`row/row0vers.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-row0vers.lo `test -f 'row/row0vers.c' || echo '$(srcdir)/'`row/row0vers.c ha_innodb_plugin_la-srv0que.lo: srv/srv0que.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-srv0que.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-srv0que.Tpo -c -o ha_innodb_plugin_la-srv0que.lo `test -f 'srv/srv0que.c' || echo '$(srcdir)/'`srv/srv0que.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-srv0que.Tpo $(DEPDIR)/ha_innodb_plugin_la-srv0que.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-srv0que.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-srv0que.Tpo" -c -o ha_innodb_plugin_la-srv0que.lo `test -f 'srv/srv0que.c' || echo '$(srcdir)/'`srv/srv0que.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-srv0que.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-srv0que.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-srv0que.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='srv/srv0que.c' object='ha_innodb_plugin_la-srv0que.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-srv0que.lo `test -f 'srv/srv0que.c' || echo '$(srcdir)/'`srv/srv0que.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-srv0que.lo `test -f 'srv/srv0que.c' || echo '$(srcdir)/'`srv/srv0que.c ha_innodb_plugin_la-srv0srv.lo: srv/srv0srv.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-srv0srv.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-srv0srv.Tpo -c -o ha_innodb_plugin_la-srv0srv.lo `test -f 'srv/srv0srv.c' || echo '$(srcdir)/'`srv/srv0srv.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-srv0srv.Tpo $(DEPDIR)/ha_innodb_plugin_la-srv0srv.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-srv0srv.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-srv0srv.Tpo" -c -o ha_innodb_plugin_la-srv0srv.lo `test -f 'srv/srv0srv.c' || echo '$(srcdir)/'`srv/srv0srv.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-srv0srv.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-srv0srv.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-srv0srv.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='srv/srv0srv.c' object='ha_innodb_plugin_la-srv0srv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-srv0srv.lo `test -f 'srv/srv0srv.c' || echo '$(srcdir)/'`srv/srv0srv.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-srv0srv.lo `test -f 'srv/srv0srv.c' || echo '$(srcdir)/'`srv/srv0srv.c ha_innodb_plugin_la-srv0start.lo: srv/srv0start.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-srv0start.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-srv0start.Tpo -c -o ha_innodb_plugin_la-srv0start.lo `test -f 'srv/srv0start.c' || echo '$(srcdir)/'`srv/srv0start.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-srv0start.Tpo $(DEPDIR)/ha_innodb_plugin_la-srv0start.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-srv0start.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-srv0start.Tpo" -c -o ha_innodb_plugin_la-srv0start.lo `test -f 'srv/srv0start.c' || echo '$(srcdir)/'`srv/srv0start.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-srv0start.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-srv0start.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-srv0start.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='srv/srv0start.c' object='ha_innodb_plugin_la-srv0start.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-srv0start.lo `test -f 'srv/srv0start.c' || echo '$(srcdir)/'`srv/srv0start.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-srv0start.lo `test -f 'srv/srv0start.c' || echo '$(srcdir)/'`srv/srv0start.c ha_innodb_plugin_la-sync0arr.lo: sync/sync0arr.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-sync0arr.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-sync0arr.Tpo -c -o ha_innodb_plugin_la-sync0arr.lo `test -f 'sync/sync0arr.c' || echo '$(srcdir)/'`sync/sync0arr.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-sync0arr.Tpo $(DEPDIR)/ha_innodb_plugin_la-sync0arr.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-sync0arr.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-sync0arr.Tpo" -c -o ha_innodb_plugin_la-sync0arr.lo `test -f 'sync/sync0arr.c' || echo '$(srcdir)/'`sync/sync0arr.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-sync0arr.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-sync0arr.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-sync0arr.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sync/sync0arr.c' object='ha_innodb_plugin_la-sync0arr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-sync0arr.lo `test -f 'sync/sync0arr.c' || echo '$(srcdir)/'`sync/sync0arr.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-sync0arr.lo `test -f 'sync/sync0arr.c' || echo '$(srcdir)/'`sync/sync0arr.c ha_innodb_plugin_la-sync0rw.lo: sync/sync0rw.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-sync0rw.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-sync0rw.Tpo -c -o ha_innodb_plugin_la-sync0rw.lo `test -f 'sync/sync0rw.c' || echo '$(srcdir)/'`sync/sync0rw.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-sync0rw.Tpo $(DEPDIR)/ha_innodb_plugin_la-sync0rw.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-sync0rw.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-sync0rw.Tpo" -c -o ha_innodb_plugin_la-sync0rw.lo `test -f 'sync/sync0rw.c' || echo '$(srcdir)/'`sync/sync0rw.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-sync0rw.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-sync0rw.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-sync0rw.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sync/sync0rw.c' object='ha_innodb_plugin_la-sync0rw.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-sync0rw.lo `test -f 'sync/sync0rw.c' || echo '$(srcdir)/'`sync/sync0rw.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-sync0rw.lo `test -f 'sync/sync0rw.c' || echo '$(srcdir)/'`sync/sync0rw.c ha_innodb_plugin_la-sync0sync.lo: sync/sync0sync.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-sync0sync.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-sync0sync.Tpo -c -o ha_innodb_plugin_la-sync0sync.lo `test -f 'sync/sync0sync.c' || echo '$(srcdir)/'`sync/sync0sync.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-sync0sync.Tpo $(DEPDIR)/ha_innodb_plugin_la-sync0sync.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-sync0sync.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-sync0sync.Tpo" -c -o ha_innodb_plugin_la-sync0sync.lo `test -f 'sync/sync0sync.c' || echo '$(srcdir)/'`sync/sync0sync.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-sync0sync.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-sync0sync.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-sync0sync.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sync/sync0sync.c' object='ha_innodb_plugin_la-sync0sync.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-sync0sync.lo `test -f 'sync/sync0sync.c' || echo '$(srcdir)/'`sync/sync0sync.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-sync0sync.lo `test -f 'sync/sync0sync.c' || echo '$(srcdir)/'`sync/sync0sync.c ha_innodb_plugin_la-thr0loc.lo: thr/thr0loc.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-thr0loc.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-thr0loc.Tpo -c -o ha_innodb_plugin_la-thr0loc.lo `test -f 'thr/thr0loc.c' || echo '$(srcdir)/'`thr/thr0loc.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-thr0loc.Tpo $(DEPDIR)/ha_innodb_plugin_la-thr0loc.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-thr0loc.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-thr0loc.Tpo" -c -o ha_innodb_plugin_la-thr0loc.lo `test -f 'thr/thr0loc.c' || echo '$(srcdir)/'`thr/thr0loc.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-thr0loc.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-thr0loc.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-thr0loc.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='thr/thr0loc.c' object='ha_innodb_plugin_la-thr0loc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-thr0loc.lo `test -f 'thr/thr0loc.c' || echo '$(srcdir)/'`thr/thr0loc.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-thr0loc.lo `test -f 'thr/thr0loc.c' || echo '$(srcdir)/'`thr/thr0loc.c ha_innodb_plugin_la-trx0i_s.lo: trx/trx0i_s.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0i_s.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-trx0i_s.Tpo -c -o ha_innodb_plugin_la-trx0i_s.lo `test -f 'trx/trx0i_s.c' || echo '$(srcdir)/'`trx/trx0i_s.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-trx0i_s.Tpo $(DEPDIR)/ha_innodb_plugin_la-trx0i_s.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0i_s.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-trx0i_s.Tpo" -c -o ha_innodb_plugin_la-trx0i_s.lo `test -f 'trx/trx0i_s.c' || echo '$(srcdir)/'`trx/trx0i_s.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-trx0i_s.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-trx0i_s.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-trx0i_s.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0i_s.c' object='ha_innodb_plugin_la-trx0i_s.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0i_s.lo `test -f 'trx/trx0i_s.c' || echo '$(srcdir)/'`trx/trx0i_s.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0i_s.lo `test -f 'trx/trx0i_s.c' || echo '$(srcdir)/'`trx/trx0i_s.c ha_innodb_plugin_la-trx0purge.lo: trx/trx0purge.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0purge.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-trx0purge.Tpo -c -o ha_innodb_plugin_la-trx0purge.lo `test -f 'trx/trx0purge.c' || echo '$(srcdir)/'`trx/trx0purge.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-trx0purge.Tpo $(DEPDIR)/ha_innodb_plugin_la-trx0purge.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0purge.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-trx0purge.Tpo" -c -o ha_innodb_plugin_la-trx0purge.lo `test -f 'trx/trx0purge.c' || echo '$(srcdir)/'`trx/trx0purge.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-trx0purge.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-trx0purge.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-trx0purge.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0purge.c' object='ha_innodb_plugin_la-trx0purge.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0purge.lo `test -f 'trx/trx0purge.c' || echo '$(srcdir)/'`trx/trx0purge.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0purge.lo `test -f 'trx/trx0purge.c' || echo '$(srcdir)/'`trx/trx0purge.c ha_innodb_plugin_la-trx0rec.lo: trx/trx0rec.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0rec.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-trx0rec.Tpo -c -o ha_innodb_plugin_la-trx0rec.lo `test -f 'trx/trx0rec.c' || echo '$(srcdir)/'`trx/trx0rec.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-trx0rec.Tpo $(DEPDIR)/ha_innodb_plugin_la-trx0rec.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0rec.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-trx0rec.Tpo" -c -o ha_innodb_plugin_la-trx0rec.lo `test -f 'trx/trx0rec.c' || echo '$(srcdir)/'`trx/trx0rec.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-trx0rec.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-trx0rec.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-trx0rec.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0rec.c' object='ha_innodb_plugin_la-trx0rec.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0rec.lo `test -f 'trx/trx0rec.c' || echo '$(srcdir)/'`trx/trx0rec.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0rec.lo `test -f 'trx/trx0rec.c' || echo '$(srcdir)/'`trx/trx0rec.c ha_innodb_plugin_la-trx0roll.lo: trx/trx0roll.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0roll.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-trx0roll.Tpo -c -o ha_innodb_plugin_la-trx0roll.lo `test -f 'trx/trx0roll.c' || echo '$(srcdir)/'`trx/trx0roll.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-trx0roll.Tpo $(DEPDIR)/ha_innodb_plugin_la-trx0roll.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0roll.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-trx0roll.Tpo" -c -o ha_innodb_plugin_la-trx0roll.lo `test -f 'trx/trx0roll.c' || echo '$(srcdir)/'`trx/trx0roll.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-trx0roll.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-trx0roll.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-trx0roll.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0roll.c' object='ha_innodb_plugin_la-trx0roll.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0roll.lo `test -f 'trx/trx0roll.c' || echo '$(srcdir)/'`trx/trx0roll.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0roll.lo `test -f 'trx/trx0roll.c' || echo '$(srcdir)/'`trx/trx0roll.c ha_innodb_plugin_la-trx0rseg.lo: trx/trx0rseg.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0rseg.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-trx0rseg.Tpo -c -o ha_innodb_plugin_la-trx0rseg.lo `test -f 'trx/trx0rseg.c' || echo '$(srcdir)/'`trx/trx0rseg.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-trx0rseg.Tpo $(DEPDIR)/ha_innodb_plugin_la-trx0rseg.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0rseg.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-trx0rseg.Tpo" -c -o ha_innodb_plugin_la-trx0rseg.lo `test -f 'trx/trx0rseg.c' || echo '$(srcdir)/'`trx/trx0rseg.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-trx0rseg.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-trx0rseg.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-trx0rseg.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0rseg.c' object='ha_innodb_plugin_la-trx0rseg.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0rseg.lo `test -f 'trx/trx0rseg.c' || echo '$(srcdir)/'`trx/trx0rseg.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0rseg.lo `test -f 'trx/trx0rseg.c' || echo '$(srcdir)/'`trx/trx0rseg.c ha_innodb_plugin_la-trx0sys.lo: trx/trx0sys.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0sys.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-trx0sys.Tpo -c -o ha_innodb_plugin_la-trx0sys.lo `test -f 'trx/trx0sys.c' || echo '$(srcdir)/'`trx/trx0sys.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-trx0sys.Tpo $(DEPDIR)/ha_innodb_plugin_la-trx0sys.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0sys.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-trx0sys.Tpo" -c -o ha_innodb_plugin_la-trx0sys.lo `test -f 'trx/trx0sys.c' || echo '$(srcdir)/'`trx/trx0sys.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-trx0sys.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-trx0sys.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-trx0sys.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0sys.c' object='ha_innodb_plugin_la-trx0sys.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0sys.lo `test -f 'trx/trx0sys.c' || echo '$(srcdir)/'`trx/trx0sys.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0sys.lo `test -f 'trx/trx0sys.c' || echo '$(srcdir)/'`trx/trx0sys.c ha_innodb_plugin_la-trx0trx.lo: trx/trx0trx.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0trx.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-trx0trx.Tpo -c -o ha_innodb_plugin_la-trx0trx.lo `test -f 'trx/trx0trx.c' || echo '$(srcdir)/'`trx/trx0trx.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-trx0trx.Tpo $(DEPDIR)/ha_innodb_plugin_la-trx0trx.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0trx.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-trx0trx.Tpo" -c -o ha_innodb_plugin_la-trx0trx.lo `test -f 'trx/trx0trx.c' || echo '$(srcdir)/'`trx/trx0trx.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-trx0trx.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-trx0trx.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-trx0trx.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0trx.c' object='ha_innodb_plugin_la-trx0trx.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0trx.lo `test -f 'trx/trx0trx.c' || echo '$(srcdir)/'`trx/trx0trx.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0trx.lo `test -f 'trx/trx0trx.c' || echo '$(srcdir)/'`trx/trx0trx.c ha_innodb_plugin_la-trx0undo.lo: trx/trx0undo.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0undo.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-trx0undo.Tpo -c -o ha_innodb_plugin_la-trx0undo.lo `test -f 'trx/trx0undo.c' || echo '$(srcdir)/'`trx/trx0undo.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-trx0undo.Tpo $(DEPDIR)/ha_innodb_plugin_la-trx0undo.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-trx0undo.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-trx0undo.Tpo" -c -o ha_innodb_plugin_la-trx0undo.lo `test -f 'trx/trx0undo.c' || echo '$(srcdir)/'`trx/trx0undo.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-trx0undo.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-trx0undo.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-trx0undo.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='trx/trx0undo.c' object='ha_innodb_plugin_la-trx0undo.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0undo.lo `test -f 'trx/trx0undo.c' || echo '$(srcdir)/'`trx/trx0undo.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-trx0undo.lo `test -f 'trx/trx0undo.c' || echo '$(srcdir)/'`trx/trx0undo.c ha_innodb_plugin_la-usr0sess.lo: usr/usr0sess.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-usr0sess.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-usr0sess.Tpo -c -o ha_innodb_plugin_la-usr0sess.lo `test -f 'usr/usr0sess.c' || echo '$(srcdir)/'`usr/usr0sess.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-usr0sess.Tpo $(DEPDIR)/ha_innodb_plugin_la-usr0sess.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-usr0sess.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-usr0sess.Tpo" -c -o ha_innodb_plugin_la-usr0sess.lo `test -f 'usr/usr0sess.c' || echo '$(srcdir)/'`usr/usr0sess.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-usr0sess.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-usr0sess.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-usr0sess.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='usr/usr0sess.c' object='ha_innodb_plugin_la-usr0sess.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-usr0sess.lo `test -f 'usr/usr0sess.c' || echo '$(srcdir)/'`usr/usr0sess.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-usr0sess.lo `test -f 'usr/usr0sess.c' || echo '$(srcdir)/'`usr/usr0sess.c ha_innodb_plugin_la-ut0byte.lo: ut/ut0byte.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0byte.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ut0byte.Tpo -c -o ha_innodb_plugin_la-ut0byte.lo `test -f 'ut/ut0byte.c' || echo '$(srcdir)/'`ut/ut0byte.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ut0byte.Tpo $(DEPDIR)/ha_innodb_plugin_la-ut0byte.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0byte.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ut0byte.Tpo" -c -o ha_innodb_plugin_la-ut0byte.lo `test -f 'ut/ut0byte.c' || echo '$(srcdir)/'`ut/ut0byte.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ut0byte.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ut0byte.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ut0byte.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0byte.c' object='ha_innodb_plugin_la-ut0byte.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0byte.lo `test -f 'ut/ut0byte.c' || echo '$(srcdir)/'`ut/ut0byte.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0byte.lo `test -f 'ut/ut0byte.c' || echo '$(srcdir)/'`ut/ut0byte.c ha_innodb_plugin_la-ut0dbg.lo: ut/ut0dbg.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0dbg.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ut0dbg.Tpo -c -o ha_innodb_plugin_la-ut0dbg.lo `test -f 'ut/ut0dbg.c' || echo '$(srcdir)/'`ut/ut0dbg.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ut0dbg.Tpo $(DEPDIR)/ha_innodb_plugin_la-ut0dbg.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0dbg.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ut0dbg.Tpo" -c -o ha_innodb_plugin_la-ut0dbg.lo `test -f 'ut/ut0dbg.c' || echo '$(srcdir)/'`ut/ut0dbg.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ut0dbg.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ut0dbg.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ut0dbg.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0dbg.c' object='ha_innodb_plugin_la-ut0dbg.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0dbg.lo `test -f 'ut/ut0dbg.c' || echo '$(srcdir)/'`ut/ut0dbg.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0dbg.lo `test -f 'ut/ut0dbg.c' || echo '$(srcdir)/'`ut/ut0dbg.c ha_innodb_plugin_la-ut0list.lo: ut/ut0list.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0list.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ut0list.Tpo -c -o ha_innodb_plugin_la-ut0list.lo `test -f 'ut/ut0list.c' || echo '$(srcdir)/'`ut/ut0list.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ut0list.Tpo $(DEPDIR)/ha_innodb_plugin_la-ut0list.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0list.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ut0list.Tpo" -c -o ha_innodb_plugin_la-ut0list.lo `test -f 'ut/ut0list.c' || echo '$(srcdir)/'`ut/ut0list.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ut0list.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ut0list.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ut0list.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0list.c' object='ha_innodb_plugin_la-ut0list.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0list.lo `test -f 'ut/ut0list.c' || echo '$(srcdir)/'`ut/ut0list.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0list.lo `test -f 'ut/ut0list.c' || echo '$(srcdir)/'`ut/ut0list.c ha_innodb_plugin_la-ut0mem.lo: ut/ut0mem.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0mem.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ut0mem.Tpo -c -o ha_innodb_plugin_la-ut0mem.lo `test -f 'ut/ut0mem.c' || echo '$(srcdir)/'`ut/ut0mem.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ut0mem.Tpo $(DEPDIR)/ha_innodb_plugin_la-ut0mem.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0mem.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ut0mem.Tpo" -c -o ha_innodb_plugin_la-ut0mem.lo `test -f 'ut/ut0mem.c' || echo '$(srcdir)/'`ut/ut0mem.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ut0mem.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ut0mem.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ut0mem.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0mem.c' object='ha_innodb_plugin_la-ut0mem.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0mem.lo `test -f 'ut/ut0mem.c' || echo '$(srcdir)/'`ut/ut0mem.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0mem.lo `test -f 'ut/ut0mem.c' || echo '$(srcdir)/'`ut/ut0mem.c ha_innodb_plugin_la-ut0rbt.lo: ut/ut0rbt.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0rbt.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ut0rbt.Tpo -c -o ha_innodb_plugin_la-ut0rbt.lo `test -f 'ut/ut0rbt.c' || echo '$(srcdir)/'`ut/ut0rbt.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ut0rbt.Tpo $(DEPDIR)/ha_innodb_plugin_la-ut0rbt.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0rbt.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ut0rbt.Tpo" -c -o ha_innodb_plugin_la-ut0rbt.lo `test -f 'ut/ut0rbt.c' || echo '$(srcdir)/'`ut/ut0rbt.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ut0rbt.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ut0rbt.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ut0rbt.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0rbt.c' object='ha_innodb_plugin_la-ut0rbt.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0rbt.lo `test -f 'ut/ut0rbt.c' || echo '$(srcdir)/'`ut/ut0rbt.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0rbt.lo `test -f 'ut/ut0rbt.c' || echo '$(srcdir)/'`ut/ut0rbt.c ha_innodb_plugin_la-ut0rnd.lo: ut/ut0rnd.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0rnd.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ut0rnd.Tpo -c -o ha_innodb_plugin_la-ut0rnd.lo `test -f 'ut/ut0rnd.c' || echo '$(srcdir)/'`ut/ut0rnd.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ut0rnd.Tpo $(DEPDIR)/ha_innodb_plugin_la-ut0rnd.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0rnd.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ut0rnd.Tpo" -c -o ha_innodb_plugin_la-ut0rnd.lo `test -f 'ut/ut0rnd.c' || echo '$(srcdir)/'`ut/ut0rnd.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ut0rnd.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ut0rnd.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ut0rnd.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0rnd.c' object='ha_innodb_plugin_la-ut0rnd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0rnd.lo `test -f 'ut/ut0rnd.c' || echo '$(srcdir)/'`ut/ut0rnd.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0rnd.lo `test -f 'ut/ut0rnd.c' || echo '$(srcdir)/'`ut/ut0rnd.c ha_innodb_plugin_la-ut0ut.lo: ut/ut0ut.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0ut.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ut0ut.Tpo -c -o ha_innodb_plugin_la-ut0ut.lo `test -f 'ut/ut0ut.c' || echo '$(srcdir)/'`ut/ut0ut.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ut0ut.Tpo $(DEPDIR)/ha_innodb_plugin_la-ut0ut.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0ut.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ut0ut.Tpo" -c -o ha_innodb_plugin_la-ut0ut.lo `test -f 'ut/ut0ut.c' || echo '$(srcdir)/'`ut/ut0ut.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ut0ut.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ut0ut.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ut0ut.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0ut.c' object='ha_innodb_plugin_la-ut0ut.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0ut.lo `test -f 'ut/ut0ut.c' || echo '$(srcdir)/'`ut/ut0ut.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0ut.lo `test -f 'ut/ut0ut.c' || echo '$(srcdir)/'`ut/ut0ut.c ha_innodb_plugin_la-ut0vec.lo: ut/ut0vec.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0vec.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ut0vec.Tpo -c -o ha_innodb_plugin_la-ut0vec.lo `test -f 'ut/ut0vec.c' || echo '$(srcdir)/'`ut/ut0vec.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ut0vec.Tpo $(DEPDIR)/ha_innodb_plugin_la-ut0vec.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0vec.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ut0vec.Tpo" -c -o ha_innodb_plugin_la-ut0vec.lo `test -f 'ut/ut0vec.c' || echo '$(srcdir)/'`ut/ut0vec.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ut0vec.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ut0vec.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ut0vec.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0vec.c' object='ha_innodb_plugin_la-ut0vec.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0vec.lo `test -f 'ut/ut0vec.c' || echo '$(srcdir)/'`ut/ut0vec.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0vec.lo `test -f 'ut/ut0vec.c' || echo '$(srcdir)/'`ut/ut0vec.c ha_innodb_plugin_la-ut0wqueue.lo: ut/ut0wqueue.c -@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0wqueue.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ut0wqueue.Tpo -c -o ha_innodb_plugin_la-ut0wqueue.lo `test -f 'ut/ut0wqueue.c' || echo '$(srcdir)/'`ut/ut0wqueue.c -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ut0wqueue.Tpo $(DEPDIR)/ha_innodb_plugin_la-ut0wqueue.Plo +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -MT ha_innodb_plugin_la-ut0wqueue.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ut0wqueue.Tpo" -c -o ha_innodb_plugin_la-ut0wqueue.lo `test -f 'ut/ut0wqueue.c' || echo '$(srcdir)/'`ut/ut0wqueue.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ut0wqueue.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ut0wqueue.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ut0wqueue.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ut/ut0wqueue.c' object='ha_innodb_plugin_la-ut0wqueue.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0wqueue.lo `test -f 'ut/ut0wqueue.c' || echo '$(srcdir)/'`ut/ut0wqueue.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CFLAGS) $(CFLAGS) -c -o ha_innodb_plugin_la-ut0wqueue.lo `test -f 'ut/ut0wqueue.c' || echo '$(srcdir)/'`ut/ut0wqueue.c .cc.o: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: -@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: -@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< libinnobase_a-ha_innodb.o: handler/ha_innodb.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-ha_innodb.o -MD -MP -MF $(DEPDIR)/libinnobase_a-ha_innodb.Tpo -c -o libinnobase_a-ha_innodb.o `test -f 'handler/ha_innodb.cc' || echo '$(srcdir)/'`handler/ha_innodb.cc -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ha_innodb.Tpo $(DEPDIR)/libinnobase_a-ha_innodb.Po +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-ha_innodb.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-ha_innodb.Tpo" -c -o libinnobase_a-ha_innodb.o `test -f 'handler/ha_innodb.cc' || echo '$(srcdir)/'`handler/ha_innodb.cc; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ha_innodb.Tpo" "$(DEPDIR)/libinnobase_a-ha_innodb.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ha_innodb.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/ha_innodb.cc' object='libinnobase_a-ha_innodb.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -c -o libinnobase_a-ha_innodb.o `test -f 'handler/ha_innodb.cc' || echo '$(srcdir)/'`handler/ha_innodb.cc libinnobase_a-ha_innodb.obj: handler/ha_innodb.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-ha_innodb.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-ha_innodb.Tpo -c -o libinnobase_a-ha_innodb.obj `if test -f 'handler/ha_innodb.cc'; then $(CYGPATH_W) 'handler/ha_innodb.cc'; else $(CYGPATH_W) '$(srcdir)/handler/ha_innodb.cc'; fi` -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libinnobase_a-ha_innodb.Tpo $(DEPDIR)/libinnobase_a-ha_innodb.Po +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-ha_innodb.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-ha_innodb.Tpo" -c -o libinnobase_a-ha_innodb.obj `if test -f 'handler/ha_innodb.cc'; then $(CYGPATH_W) 'handler/ha_innodb.cc'; else $(CYGPATH_W) '$(srcdir)/handler/ha_innodb.cc'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-ha_innodb.Tpo" "$(DEPDIR)/libinnobase_a-ha_innodb.Po"; else rm -f "$(DEPDIR)/libinnobase_a-ha_innodb.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/ha_innodb.cc' object='libinnobase_a-ha_innodb.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -c -o libinnobase_a-ha_innodb.obj `if test -f 'handler/ha_innodb.cc'; then $(CYGPATH_W) 'handler/ha_innodb.cc'; else $(CYGPATH_W) '$(srcdir)/handler/ha_innodb.cc'; fi` libinnobase_a-handler0alter.o: handler/handler0alter.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-handler0alter.o -MD -MP -MF $(DEPDIR)/libinnobase_a-handler0alter.Tpo -c -o libinnobase_a-handler0alter.o `test -f 'handler/handler0alter.cc' || echo '$(srcdir)/'`handler/handler0alter.cc -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libinnobase_a-handler0alter.Tpo $(DEPDIR)/libinnobase_a-handler0alter.Po +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-handler0alter.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-handler0alter.Tpo" -c -o libinnobase_a-handler0alter.o `test -f 'handler/handler0alter.cc' || echo '$(srcdir)/'`handler/handler0alter.cc; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-handler0alter.Tpo" "$(DEPDIR)/libinnobase_a-handler0alter.Po"; else rm -f "$(DEPDIR)/libinnobase_a-handler0alter.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/handler0alter.cc' object='libinnobase_a-handler0alter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -c -o libinnobase_a-handler0alter.o `test -f 'handler/handler0alter.cc' || echo '$(srcdir)/'`handler/handler0alter.cc libinnobase_a-handler0alter.obj: handler/handler0alter.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-handler0alter.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-handler0alter.Tpo -c -o libinnobase_a-handler0alter.obj `if test -f 'handler/handler0alter.cc'; then $(CYGPATH_W) 'handler/handler0alter.cc'; else $(CYGPATH_W) '$(srcdir)/handler/handler0alter.cc'; fi` -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libinnobase_a-handler0alter.Tpo $(DEPDIR)/libinnobase_a-handler0alter.Po +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-handler0alter.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-handler0alter.Tpo" -c -o libinnobase_a-handler0alter.obj `if test -f 'handler/handler0alter.cc'; then $(CYGPATH_W) 'handler/handler0alter.cc'; else $(CYGPATH_W) '$(srcdir)/handler/handler0alter.cc'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-handler0alter.Tpo" "$(DEPDIR)/libinnobase_a-handler0alter.Po"; else rm -f "$(DEPDIR)/libinnobase_a-handler0alter.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/handler0alter.cc' object='libinnobase_a-handler0alter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -c -o libinnobase_a-handler0alter.obj `if test -f 'handler/handler0alter.cc'; then $(CYGPATH_W) 'handler/handler0alter.cc'; else $(CYGPATH_W) '$(srcdir)/handler/handler0alter.cc'; fi` libinnobase_a-i_s.o: handler/i_s.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-i_s.o -MD -MP -MF $(DEPDIR)/libinnobase_a-i_s.Tpo -c -o libinnobase_a-i_s.o `test -f 'handler/i_s.cc' || echo '$(srcdir)/'`handler/i_s.cc -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libinnobase_a-i_s.Tpo $(DEPDIR)/libinnobase_a-i_s.Po +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-i_s.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-i_s.Tpo" -c -o libinnobase_a-i_s.o `test -f 'handler/i_s.cc' || echo '$(srcdir)/'`handler/i_s.cc; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-i_s.Tpo" "$(DEPDIR)/libinnobase_a-i_s.Po"; else rm -f "$(DEPDIR)/libinnobase_a-i_s.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/i_s.cc' object='libinnobase_a-i_s.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -c -o libinnobase_a-i_s.o `test -f 'handler/i_s.cc' || echo '$(srcdir)/'`handler/i_s.cc libinnobase_a-i_s.obj: handler/i_s.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-i_s.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-i_s.Tpo -c -o libinnobase_a-i_s.obj `if test -f 'handler/i_s.cc'; then $(CYGPATH_W) 'handler/i_s.cc'; else $(CYGPATH_W) '$(srcdir)/handler/i_s.cc'; fi` -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libinnobase_a-i_s.Tpo $(DEPDIR)/libinnobase_a-i_s.Po +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-i_s.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-i_s.Tpo" -c -o libinnobase_a-i_s.obj `if test -f 'handler/i_s.cc'; then $(CYGPATH_W) 'handler/i_s.cc'; else $(CYGPATH_W) '$(srcdir)/handler/i_s.cc'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-i_s.Tpo" "$(DEPDIR)/libinnobase_a-i_s.Po"; else rm -f "$(DEPDIR)/libinnobase_a-i_s.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/i_s.cc' object='libinnobase_a-i_s.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -c -o libinnobase_a-i_s.obj `if test -f 'handler/i_s.cc'; then $(CYGPATH_W) 'handler/i_s.cc'; else $(CYGPATH_W) '$(srcdir)/handler/i_s.cc'; fi` libinnobase_a-mysql_addons.o: handler/mysql_addons.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-mysql_addons.o -MD -MP -MF $(DEPDIR)/libinnobase_a-mysql_addons.Tpo -c -o libinnobase_a-mysql_addons.o `test -f 'handler/mysql_addons.cc' || echo '$(srcdir)/'`handler/mysql_addons.cc -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mysql_addons.Tpo $(DEPDIR)/libinnobase_a-mysql_addons.Po +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-mysql_addons.o -MD -MP -MF "$(DEPDIR)/libinnobase_a-mysql_addons.Tpo" -c -o libinnobase_a-mysql_addons.o `test -f 'handler/mysql_addons.cc' || echo '$(srcdir)/'`handler/mysql_addons.cc; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mysql_addons.Tpo" "$(DEPDIR)/libinnobase_a-mysql_addons.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mysql_addons.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/mysql_addons.cc' object='libinnobase_a-mysql_addons.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -c -o libinnobase_a-mysql_addons.o `test -f 'handler/mysql_addons.cc' || echo '$(srcdir)/'`handler/mysql_addons.cc libinnobase_a-mysql_addons.obj: handler/mysql_addons.cc -@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-mysql_addons.obj -MD -MP -MF $(DEPDIR)/libinnobase_a-mysql_addons.Tpo -c -o libinnobase_a-mysql_addons.obj `if test -f 'handler/mysql_addons.cc'; then $(CYGPATH_W) 'handler/mysql_addons.cc'; else $(CYGPATH_W) '$(srcdir)/handler/mysql_addons.cc'; fi` -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/libinnobase_a-mysql_addons.Tpo $(DEPDIR)/libinnobase_a-mysql_addons.Po +@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -MT libinnobase_a-mysql_addons.obj -MD -MP -MF "$(DEPDIR)/libinnobase_a-mysql_addons.Tpo" -c -o libinnobase_a-mysql_addons.obj `if test -f 'handler/mysql_addons.cc'; then $(CYGPATH_W) 'handler/mysql_addons.cc'; else $(CYGPATH_W) '$(srcdir)/handler/mysql_addons.cc'; fi`; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/libinnobase_a-mysql_addons.Tpo" "$(DEPDIR)/libinnobase_a-mysql_addons.Po"; else rm -f "$(DEPDIR)/libinnobase_a-mysql_addons.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/mysql_addons.cc' object='libinnobase_a-mysql_addons.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libinnobase_a_CXXFLAGS) $(CXXFLAGS) -c -o libinnobase_a-mysql_addons.obj `if test -f 'handler/mysql_addons.cc'; then $(CYGPATH_W) 'handler/mysql_addons.cc'; else $(CYGPATH_W) '$(srcdir)/handler/mysql_addons.cc'; fi` ha_innodb_plugin_la-ha_innodb.lo: handler/ha_innodb.cc -@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT ha_innodb_plugin_la-ha_innodb.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-ha_innodb.Tpo -c -o ha_innodb_plugin_la-ha_innodb.lo `test -f 'handler/ha_innodb.cc' || echo '$(srcdir)/'`handler/ha_innodb.cc -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-ha_innodb.Tpo $(DEPDIR)/ha_innodb_plugin_la-ha_innodb.Plo +@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT ha_innodb_plugin_la-ha_innodb.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-ha_innodb.Tpo" -c -o ha_innodb_plugin_la-ha_innodb.lo `test -f 'handler/ha_innodb.cc' || echo '$(srcdir)/'`handler/ha_innodb.cc; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-ha_innodb.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-ha_innodb.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-ha_innodb.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/ha_innodb.cc' object='ha_innodb_plugin_la-ha_innodb.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o ha_innodb_plugin_la-ha_innodb.lo `test -f 'handler/ha_innodb.cc' || echo '$(srcdir)/'`handler/ha_innodb.cc +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o ha_innodb_plugin_la-ha_innodb.lo `test -f 'handler/ha_innodb.cc' || echo '$(srcdir)/'`handler/ha_innodb.cc ha_innodb_plugin_la-handler0alter.lo: handler/handler0alter.cc -@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT ha_innodb_plugin_la-handler0alter.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-handler0alter.Tpo -c -o ha_innodb_plugin_la-handler0alter.lo `test -f 'handler/handler0alter.cc' || echo '$(srcdir)/'`handler/handler0alter.cc -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-handler0alter.Tpo $(DEPDIR)/ha_innodb_plugin_la-handler0alter.Plo +@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT ha_innodb_plugin_la-handler0alter.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-handler0alter.Tpo" -c -o ha_innodb_plugin_la-handler0alter.lo `test -f 'handler/handler0alter.cc' || echo '$(srcdir)/'`handler/handler0alter.cc; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-handler0alter.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-handler0alter.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-handler0alter.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/handler0alter.cc' object='ha_innodb_plugin_la-handler0alter.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o ha_innodb_plugin_la-handler0alter.lo `test -f 'handler/handler0alter.cc' || echo '$(srcdir)/'`handler/handler0alter.cc +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o ha_innodb_plugin_la-handler0alter.lo `test -f 'handler/handler0alter.cc' || echo '$(srcdir)/'`handler/handler0alter.cc ha_innodb_plugin_la-i_s.lo: handler/i_s.cc -@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT ha_innodb_plugin_la-i_s.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-i_s.Tpo -c -o ha_innodb_plugin_la-i_s.lo `test -f 'handler/i_s.cc' || echo '$(srcdir)/'`handler/i_s.cc -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-i_s.Tpo $(DEPDIR)/ha_innodb_plugin_la-i_s.Plo +@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT ha_innodb_plugin_la-i_s.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-i_s.Tpo" -c -o ha_innodb_plugin_la-i_s.lo `test -f 'handler/i_s.cc' || echo '$(srcdir)/'`handler/i_s.cc; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-i_s.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-i_s.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-i_s.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/i_s.cc' object='ha_innodb_plugin_la-i_s.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o ha_innodb_plugin_la-i_s.lo `test -f 'handler/i_s.cc' || echo '$(srcdir)/'`handler/i_s.cc +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o ha_innodb_plugin_la-i_s.lo `test -f 'handler/i_s.cc' || echo '$(srcdir)/'`handler/i_s.cc ha_innodb_plugin_la-mysql_addons.lo: handler/mysql_addons.cc -@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT ha_innodb_plugin_la-mysql_addons.lo -MD -MP -MF $(DEPDIR)/ha_innodb_plugin_la-mysql_addons.Tpo -c -o ha_innodb_plugin_la-mysql_addons.lo `test -f 'handler/mysql_addons.cc' || echo '$(srcdir)/'`handler/mysql_addons.cc -@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/ha_innodb_plugin_la-mysql_addons.Tpo $(DEPDIR)/ha_innodb_plugin_la-mysql_addons.Plo +@am__fastdepCXX_TRUE@ if $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -MT ha_innodb_plugin_la-mysql_addons.lo -MD -MP -MF "$(DEPDIR)/ha_innodb_plugin_la-mysql_addons.Tpo" -c -o ha_innodb_plugin_la-mysql_addons.lo `test -f 'handler/mysql_addons.cc' || echo '$(srcdir)/'`handler/mysql_addons.cc; \ +@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/ha_innodb_plugin_la-mysql_addons.Tpo" "$(DEPDIR)/ha_innodb_plugin_la-mysql_addons.Plo"; else rm -f "$(DEPDIR)/ha_innodb_plugin_la-mysql_addons.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='handler/mysql_addons.cc' object='ha_innodb_plugin_la-mysql_addons.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o ha_innodb_plugin_la-mysql_addons.lo `test -f 'handler/mysql_addons.cc' || echo '$(srcdir)/'`handler/mysql_addons.cc +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ha_innodb_plugin_la_CXXFLAGS) $(CXXFLAGS) -c -o ha_innodb_plugin_la-mysql_addons.lo `test -f 'handler/mysql_addons.cc' || echo '$(srcdir)/'`handler/mysql_addons.cc mostlyclean-libtool: -rm -f *.lo @@ -3157,13 +3190,17 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs +distclean-libtool: + -rm -f libtool +uninstall-info-am: + ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS @@ -3175,8 +3212,8 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ @@ -3186,12 +3223,13 @@ ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ + here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique @@ -3205,21 +3243,23 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ + $(mkdir_p) $(distdir)/handler $(distdir)/include $(distdir)/mem $(distdir)/pars + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -3235,7 +3275,7 @@ check: check-am all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(pkgplugindir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -3270,7 +3310,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags + distclean-libtool distclean-tags dvi: dvi-am @@ -3284,20 +3324,12 @@ info-am: install-data-am: install-pkgpluginLTLIBRARIES -install-dvi: install-dvi-am - install-exec-am: -install-html: install-html-am - install-info: install-info-am install-man: -install-pdf: install-pdf-am - -install-ps: install-ps-am - installcheck-am: maintainer-clean: maintainer-clean-am @@ -3318,24 +3350,20 @@ ps: ps-am ps-am: -uninstall-am: uninstall-pkgpluginLTLIBRARIES - -.MAKE: install-am install-strip +uninstall-am: uninstall-info-am uninstall-pkgpluginLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES clean-pkgpluginLTLIBRARIES \ ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-pkgpluginLTLIBRARIES install-ps install-ps-am \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-pkgpluginLTLIBRARIES \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-pkgpluginLTLIBRARIES + uninstall-info-am uninstall-pkgpluginLTLIBRARIES # Don't update the files from bitkeeper diff --git a/btr/btr0btr.c b/btr/btr0btr.c index 396ad422010..75be76b9dd1 100644 --- a/btr/btr0btr.c +++ b/btr/btr0btr.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -664,6 +664,12 @@ btr_root_fseg_validate( { ulint offset = mach_read_from_2(seg_header + FSEG_HDR_OFFSET); + if (UNIV_UNLIKELY(srv_pass_corrupt_table)) { + return (mach_read_from_4(seg_header + FSEG_HDR_SPACE) == space) + && (offset >= FIL_PAGE_DATA) + && (offset <= UNIV_PAGE_SIZE - FIL_PAGE_DATA_END); + } + ut_a(mach_read_from_4(seg_header + FSEG_HDR_SPACE) == space); ut_a(offset >= FIL_PAGE_DATA); ut_a(offset <= UNIV_PAGE_SIZE - FIL_PAGE_DATA_END); @@ -690,7 +696,8 @@ btr_root_block_get( zip_size = dict_table_zip_size(index->table); root_page_no = dict_index_get_page(index); - block = btr_block_get(space, zip_size, root_page_no, RW_X_LATCH, mtr); + block = btr_block_get(space, zip_size, root_page_no, RW_X_LATCH, + index, mtr); if (srv_pass_corrupt_table && !block) { return(0); @@ -703,6 +710,17 @@ btr_root_block_get( if (!dict_index_is_ibuf(index)) { const page_t* root = buf_block_get_frame(block); + if (UNIV_UNLIKELY(srv_pass_corrupt_table)) { + if (!btr_root_fseg_validate(FIL_PAGE_DATA + + PAGE_BTR_SEG_LEAF + + root, space)) + return(NULL); + if (!btr_root_fseg_validate(FIL_PAGE_DATA + + PAGE_BTR_SEG_TOP + + root, space)) + return(NULL); + return(block); + } ut_a(btr_root_fseg_validate(FIL_PAGE_DATA + PAGE_BTR_SEG_LEAF + root, space)); ut_a(btr_root_fseg_validate(FIL_PAGE_DATA + PAGE_BTR_SEG_TOP @@ -897,7 +915,7 @@ btr_page_alloc_for_ibuf( dict_table_zip_size(index->table), node_addr.page, RW_X_LATCH, mtr); new_page = buf_block_get_frame(new_block); - buf_block_dbg_add_level(new_block, SYNC_TREE_NODE_NEW); + buf_block_dbg_add_level(new_block, SYNC_IBUF_TREE_NODE_NEW); flst_remove(root + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST, new_page + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST_NODE, @@ -911,28 +929,31 @@ btr_page_alloc_for_ibuf( /**************************************************************//** Allocates a new file page to be used in an index tree. NOTE: we assume that the caller has made the reservation for free extents! -@return new allocated block, x-latched; NULL if out of space */ -UNIV_INTERN +@retval NULL if no page could be allocated +@retval block, rw_lock_x_lock_count(&block->lock) == 1 if allocation succeeded +(init_mtr == mtr, or the page was not previously freed in mtr) +@retval block (not allocated or initialized) otherwise */ +static __attribute__((nonnull, warn_unused_result)) buf_block_t* -btr_page_alloc( -/*===========*/ +btr_page_alloc_low( +/*===============*/ dict_index_t* index, /*!< in: index */ ulint hint_page_no, /*!< in: hint of a good page */ byte file_direction, /*!< in: direction where a possible page split is made */ ulint level, /*!< in: level where the page is placed in the tree */ - mtr_t* mtr) /*!< in: mtr */ + mtr_t* mtr, /*!< in/out: mini-transaction + for the allocation */ + mtr_t* init_mtr) /*!< in/out: mtr or another + mini-transaction in which the + page should be initialized. + If init_mtr!=mtr, but the page + is already X-latched in mtr, do + not initialize the page. */ { fseg_header_t* seg_header; page_t* root; - buf_block_t* new_block; - ulint new_page_no; - - if (dict_index_is_ibuf(index)) { - - return(btr_page_alloc_for_ibuf(index, mtr)); - } root = btr_root_get(index, mtr); @@ -946,45 +967,81 @@ btr_page_alloc( reservation for free extents, and thus we know that a page can be allocated: */ - new_page_no = fseg_alloc_free_page_general(seg_header, hint_page_no, - file_direction, TRUE, mtr); - if (new_page_no == FIL_NULL) { + return(fseg_alloc_free_page_general( + seg_header, hint_page_no, file_direction, + TRUE, mtr, init_mtr)); +} - return(NULL); +/**************************************************************//** +Allocates a new file page to be used in an index tree. NOTE: we assume +that the caller has made the reservation for free extents! +@retval NULL if no page could be allocated +@retval block, rw_lock_x_lock_count(&block->lock) == 1 if allocation succeeded +(init_mtr == mtr, or the page was not previously freed in mtr) +@retval block (not allocated or initialized) otherwise */ +UNIV_INTERN +buf_block_t* +btr_page_alloc( +/*===========*/ + dict_index_t* index, /*!< in: index */ + ulint hint_page_no, /*!< in: hint of a good page */ + byte file_direction, /*!< in: direction where a possible + page split is made */ + ulint level, /*!< in: level where the page is placed + in the tree */ + mtr_t* mtr, /*!< in/out: mini-transaction + for the allocation */ + mtr_t* init_mtr) /*!< in/out: mini-transaction + for x-latching and initializing + the page */ +{ + buf_block_t* new_block; + + if (dict_index_is_ibuf(index)) { + + return(btr_page_alloc_for_ibuf(index, mtr)); } - new_block = buf_page_get(dict_index_get_space(index), - dict_table_zip_size(index->table), - new_page_no, RW_X_LATCH, mtr); - buf_block_dbg_add_level(new_block, SYNC_TREE_NODE_NEW); + new_block = btr_page_alloc_low( + index, hint_page_no, file_direction, level, mtr, init_mtr); + + if (new_block) { + buf_block_dbg_add_level(new_block, SYNC_TREE_NODE_NEW); + } return(new_block); } /**************************************************************//** Gets the number of pages in a B-tree. -@return number of pages */ +@return number of pages, or ULINT_UNDEFINED if the index is unavailable */ UNIV_INTERN ulint btr_get_size( /*=========*/ dict_index_t* index, /*!< in: index */ - ulint flag) /*!< in: BTR_N_LEAF_PAGES or BTR_TOTAL_SIZE */ + ulint flag, /*!< in: BTR_N_LEAF_PAGES or BTR_TOTAL_SIZE */ + mtr_t* mtr) /*!< in/out: mini-transaction where index + is s-latched */ { fseg_header_t* seg_header; page_t* root; ulint n; ulint dummy; - mtr_t mtr; - mtr_start(&mtr); + ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(index), + MTR_MEMO_S_LOCK)); - mtr_s_lock(dict_index_get_lock(index), &mtr); + if (index->page == FIL_NULL + || index->to_be_dropped + || *index->name == TEMP_INDEX_PREFIX) { + return(ULINT_UNDEFINED); + } - root = btr_root_get(index, &mtr); + root = btr_root_get(index, mtr); if (srv_pass_corrupt_table && !root) { - mtr_commit(&mtr); + mtr_commit(mtr); return(0); } ut_a(root); @@ -992,22 +1049,20 @@ btr_get_size( if (flag == BTR_N_LEAF_PAGES) { seg_header = root + PAGE_HEADER + PAGE_BTR_SEG_LEAF; - fseg_n_reserved_pages(seg_header, &n, &mtr); + fseg_n_reserved_pages(seg_header, &n, mtr); } else if (flag == BTR_TOTAL_SIZE) { seg_header = root + PAGE_HEADER + PAGE_BTR_SEG_TOP; - n = fseg_n_reserved_pages(seg_header, &dummy, &mtr); + n = fseg_n_reserved_pages(seg_header, &dummy, mtr); seg_header = root + PAGE_HEADER + PAGE_BTR_SEG_LEAF; - n += fseg_n_reserved_pages(seg_header, &dummy, &mtr); + n += fseg_n_reserved_pages(seg_header, &dummy, mtr); } else { ut_error; } - mtr_commit(&mtr); - return(n); } @@ -1076,6 +1131,15 @@ btr_page_free_low( fseg_free_page(seg_header, buf_block_get_space(block), buf_block_get_page_no(block), mtr); + + /* The page was marked free in the allocation bitmap, but it + should remain buffer-fixed until mtr_commit(mtr) or until it + is explicitly freed from the mini-transaction. */ + ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX)); + /* TODO: Discard any operations on the page from the redo log + and remove the block from the flush list and the buffer pool. + This would free up buffer pool earlier and reduce writes to + both the tablespace and the redo log. */ } /**************************************************************//** @@ -1089,10 +1153,10 @@ btr_page_free( buf_block_t* block, /*!< in: block to be freed, x-latched */ mtr_t* mtr) /*!< in: mtr */ { - ulint level; - - level = btr_page_get_level(buf_block_get_frame(block), mtr); + const page_t* page = buf_block_get_frame(block); + ulint level = btr_page_get_level(page, mtr); + ut_ad(fil_page_get_type(block->frame) == FIL_PAGE_INDEX); btr_page_free_low(index, block, level, mtr); } @@ -1151,7 +1215,7 @@ btr_node_ptr_get_child( page_no = btr_node_ptr_get_child_page_no(node_ptr, offsets); return(btr_block_get(space, dict_table_zip_size(index->table), - page_no, RW_X_LATCH, mtr)); + page_no, RW_X_LATCH, index, mtr)); } /************************************************************//** @@ -1323,23 +1387,20 @@ btr_create( space, 0, IBUF_HEADER + IBUF_TREE_SEG_HEADER, mtr); - buf_block_dbg_add_level(ibuf_hdr_block, SYNC_TREE_NODE_NEW); + buf_block_dbg_add_level( + ibuf_hdr_block, SYNC_IBUF_TREE_NODE_NEW); ut_ad(buf_block_get_page_no(ibuf_hdr_block) == IBUF_HEADER_PAGE_NO); /* Allocate then the next page to the segment: it will be the tree root page */ - page_no = fseg_alloc_free_page(buf_block_get_frame( - ibuf_hdr_block) - + IBUF_HEADER - + IBUF_TREE_SEG_HEADER, - IBUF_TREE_ROOT_PAGE_NO, - FSP_UP, mtr); - ut_ad(page_no == IBUF_TREE_ROOT_PAGE_NO); - - block = buf_page_get(space, zip_size, page_no, - RW_X_LATCH, mtr); + block = fseg_alloc_free_page( + buf_block_get_frame(ibuf_hdr_block) + + IBUF_HEADER + IBUF_TREE_SEG_HEADER, + IBUF_TREE_ROOT_PAGE_NO, + FSP_UP, mtr); + ut_ad(buf_block_get_page_no(block) == IBUF_TREE_ROOT_PAGE_NO); } else { #ifdef UNIV_BLOB_DEBUG if ((type & DICT_CLUSTERED) && !index->blobs) { @@ -1360,10 +1421,9 @@ btr_create( page_no = buf_block_get_page_no(block); frame = buf_block_get_frame(block); - buf_block_dbg_add_level(block, SYNC_TREE_NODE_NEW); - if (type & DICT_IBUF) { /* It is an insert buffer tree: initialize the free list */ + buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE_NEW); ut_ad(page_no == IBUF_TREE_ROOT_PAGE_NO); @@ -1371,6 +1431,8 @@ btr_create( } else { /* It is a non-ibuf tree: create a file segment for leaf pages */ + buf_block_dbg_add_level(block, SYNC_TREE_NODE_NEW); + if (!fseg_create(space, page_no, PAGE_HEADER + PAGE_BTR_SEG_LEAF, mtr)) { /* Not enough space for new segment, free root @@ -1442,14 +1504,15 @@ btr_free_but_not_root( leaf_loop: mtr_start(&mtr); - root = btr_page_get(space, zip_size, root_page_no, RW_X_LATCH, &mtr); + root = btr_page_get(space, zip_size, root_page_no, RW_X_LATCH, + NULL, &mtr); if (srv_pass_corrupt_table && !root) { mtr_commit(&mtr); return; } ut_a(root); - + #ifdef UNIV_BTR_DEBUG ut_a(btr_root_fseg_validate(FIL_PAGE_DATA + PAGE_BTR_SEG_LEAF + root, space)); @@ -1471,7 +1534,8 @@ leaf_loop: top_loop: mtr_start(&mtr); - root = btr_page_get(space, zip_size, root_page_no, RW_X_LATCH, &mtr); + root = btr_page_get(space, zip_size, root_page_no, RW_X_LATCH, + NULL, &mtr); if (srv_pass_corrupt_table && !root) { mtr_commit(&mtr); @@ -1503,13 +1567,13 @@ btr_free_root( ulint zip_size, /*!< in: compressed page size in bytes or 0 for uncompressed pages */ ulint root_page_no, /*!< in: root page number */ - mtr_t* mtr) /*!< in: a mini-transaction which has already - been started */ + mtr_t* mtr) /*!< in/out: mini-transaction */ { buf_block_t* block; fseg_header_t* header; - block = btr_block_get(space, zip_size, root_page_no, RW_X_LATCH, mtr); + block = btr_block_get(space, zip_size, root_page_no, RW_X_LATCH, + NULL, mtr); if (srv_pass_corrupt_table && !block) { return; @@ -1805,6 +1869,7 @@ btr_root_raise_and_insert( root = btr_cur_get_page(cursor); root_block = btr_cur_get_block(cursor); root_page_zip = buf_block_get_page_zip(root_block); + ut_ad(page_get_n_recs(root) > 0); #ifdef UNIV_ZIP_DEBUG ut_a(!root_page_zip || page_zip_validate(root_page_zip, root)); #endif /* UNIV_ZIP_DEBUG */ @@ -1831,7 +1896,7 @@ btr_root_raise_and_insert( level = btr_page_get_level(root, mtr); - new_block = btr_page_alloc(index, 0, FSP_NO_DIR, level, mtr); + new_block = btr_page_alloc(index, 0, FSP_NO_DIR, level, mtr, mtr); new_page = buf_block_get_frame(new_block); new_page_zip = buf_block_get_page_zip(new_block); ut_a(!new_page_zip == !root_page_zip); @@ -2285,12 +2350,20 @@ btr_insert_on_non_leaf_level_func( BTR_CONT_MODIFY_TREE, &cursor, 0, file, line, mtr); - err = btr_cur_pessimistic_insert(BTR_NO_LOCKING_FLAG - | BTR_KEEP_SYS_FLAG - | BTR_NO_UNDO_LOG_FLAG, - &cursor, tuple, &rec, - &dummy_big_rec, 0, NULL, mtr); - ut_a(err == DB_SUCCESS); + ut_ad(cursor.flag == BTR_CUR_BINARY); + + err = btr_cur_optimistic_insert( + BTR_NO_LOCKING_FLAG | BTR_KEEP_SYS_FLAG + | BTR_NO_UNDO_LOG_FLAG, &cursor, tuple, &rec, + &dummy_big_rec, 0, NULL, mtr); + + if (err == DB_FAIL) { + err = btr_cur_pessimistic_insert( + BTR_NO_LOCKING_FLAG | BTR_KEEP_SYS_FLAG + | BTR_NO_UNDO_LOG_FLAG, + &cursor, tuple, &rec, &dummy_big_rec, 0, NULL, mtr); + ut_a(err == DB_SUCCESS); + } } /**************************************************************//** @@ -2392,9 +2465,8 @@ btr_attach_half_pages( /* Update page links of the level */ if (prev_page_no != FIL_NULL) { - buf_block_t* prev_block = btr_block_get(space, zip_size, - prev_page_no, - RW_X_LATCH, mtr); + buf_block_t* prev_block = btr_block_get( + space, zip_size, prev_page_no, RW_X_LATCH, index, mtr); #ifdef UNIV_BTR_DEBUG ut_a(page_is_comp(prev_block->frame) == page_is_comp(page)); ut_a(btr_page_get_next(prev_block->frame, mtr) @@ -2407,9 +2479,8 @@ btr_attach_half_pages( } if (next_page_no != FIL_NULL) { - buf_block_t* next_block = btr_block_get(space, zip_size, - next_page_no, - RW_X_LATCH, mtr); + buf_block_t* next_block = btr_block_get( + space, zip_size, next_page_no, RW_X_LATCH, index, mtr); #ifdef UNIV_BTR_DEBUG ut_a(page_is_comp(next_block->frame) == page_is_comp(page)); ut_a(btr_page_get_prev(next_block->frame, mtr) @@ -2569,7 +2640,7 @@ func_start: /* 2. Allocate a new page to the index */ new_block = btr_page_alloc(cursor->index, hint_page_no, direction, - btr_page_get_level(page, mtr), mtr); + btr_page_get_level(page, mtr), mtr, mtr); new_page = buf_block_get_frame(new_block); new_page_zip = buf_block_get_page_zip(new_block); btr_page_create(new_block, new_page_zip, cursor->index, @@ -2831,17 +2902,42 @@ func_exit: return(rec); } +#ifdef UNIV_SYNC_DEBUG +/*************************************************************//** +Removes a page from the level list of pages. +@param space in: space where removed +@param zip_size in: compressed page size in bytes, or 0 for uncompressed +@param page in/out: page to remove +@param index in: index tree +@param mtr in/out: mini-transaction */ +# define btr_level_list_remove(space,zip_size,page,index,mtr) \ + btr_level_list_remove_func(space,zip_size,page,index,mtr) +#else /* UNIV_SYNC_DEBUG */ +/*************************************************************//** +Removes a page from the level list of pages. +@param space in: space where removed +@param zip_size in: compressed page size in bytes, or 0 for uncompressed +@param page in/out: page to remove +@param index in: index tree +@param mtr in/out: mini-transaction */ +# define btr_level_list_remove(space,zip_size,page,index,mtr) \ + btr_level_list_remove_func(space,zip_size,page,mtr) +#endif /* UNIV_SYNC_DEBUG */ + /*************************************************************//** Removes a page from the level list of pages. */ -static +static __attribute__((nonnull)) void -btr_level_list_remove( -/*==================*/ - ulint space, /*!< in: space where removed */ - ulint zip_size,/*!< in: compressed page size in bytes - or 0 for uncompressed pages */ - page_t* page, /*!< in: page to remove */ - mtr_t* mtr) /*!< in: mtr */ +btr_level_list_remove_func( +/*=======================*/ + ulint space, /*!< in: space where removed */ + ulint zip_size,/*!< in: compressed page size in bytes + or 0 for uncompressed pages */ + page_t* page, /*!< in/out: page to remove */ +#ifdef UNIV_SYNC_DEBUG + const dict_index_t* index, /*!< in: index tree */ +#endif /* UNIV_SYNC_DEBUG */ + mtr_t* mtr) /*!< in/out: mini-transaction */ { ulint prev_page_no; ulint next_page_no; @@ -2859,7 +2955,7 @@ btr_level_list_remove( if (prev_page_no != FIL_NULL) { buf_block_t* prev_block = btr_block_get(space, zip_size, prev_page_no, - RW_X_LATCH, mtr); + RW_X_LATCH, index, mtr); page_t* prev_page = buf_block_get_frame(prev_block); #ifdef UNIV_BTR_DEBUG @@ -2876,7 +2972,7 @@ btr_level_list_remove( if (next_page_no != FIL_NULL) { buf_block_t* next_block = btr_block_get(space, zip_size, next_page_no, - RW_X_LATCH, mtr); + RW_X_LATCH, index, mtr); page_t* next_page = buf_block_get_frame(next_block); #ifdef UNIV_BTR_DEBUG @@ -3192,6 +3288,7 @@ btr_compress( if (adjust) { nth_rec = page_rec_get_n_recs_before(btr_cur_get_rec(cursor)); + ut_ad(nth_rec > 0); } /* Decide the page to which we try to merge and which will inherit @@ -3202,7 +3299,7 @@ btr_compress( if (is_left) { merge_block = btr_block_get(space, zip_size, left_page_no, - RW_X_LATCH, mtr); + RW_X_LATCH, index, mtr); merge_page = buf_block_get_frame(merge_block); #ifdef UNIV_BTR_DEBUG ut_a(btr_page_get_next(merge_page, mtr) @@ -3211,7 +3308,7 @@ btr_compress( } else if (right_page_no != FIL_NULL) { merge_block = btr_block_get(space, zip_size, right_page_no, - RW_X_LATCH, mtr); + RW_X_LATCH, index, mtr); merge_page = buf_block_get_frame(merge_block); #ifdef UNIV_BTR_DEBUG ut_a(btr_page_get_prev(merge_page, mtr) @@ -3300,7 +3397,7 @@ err_exit: btr_search_drop_page_hash_index(block); /* Remove the page from the level list */ - btr_level_list_remove(space, zip_size, page, mtr); + btr_level_list_remove(space, zip_size, page, index, mtr); btr_node_ptr_delete(index, block, mtr); lock_update_merge_left(merge_block, orig_pred, block); @@ -3357,7 +3454,7 @@ err_exit: #endif /* UNIV_BTR_DEBUG */ /* Remove the page from the level list */ - btr_level_list_remove(space, zip_size, page, mtr); + btr_level_list_remove(space, zip_size, page, index, mtr); /* Replace the address of the old child node (= page) with the address of the merge page to the right */ @@ -3427,6 +3524,7 @@ func_exit: mem_heap_free(heap); if (adjust) { + ut_ad(nth_rec > 0); btr_cur_position( index, page_rec_get_nth(merge_block->frame, nth_rec), @@ -3549,7 +3647,7 @@ btr_discard_page( if (left_page_no != FIL_NULL) { merge_block = btr_block_get(space, zip_size, left_page_no, - RW_X_LATCH, mtr); + RW_X_LATCH, index, mtr); merge_page = buf_block_get_frame(merge_block); #ifdef UNIV_BTR_DEBUG ut_a(btr_page_get_next(merge_page, mtr) @@ -3557,7 +3655,7 @@ btr_discard_page( #endif /* UNIV_BTR_DEBUG */ } else if (right_page_no != FIL_NULL) { merge_block = btr_block_get(space, zip_size, right_page_no, - RW_X_LATCH, mtr); + RW_X_LATCH, index, mtr); merge_page = buf_block_get_frame(merge_block); #ifdef UNIV_BTR_DEBUG ut_a(btr_page_get_prev(merge_page, mtr) @@ -3592,7 +3690,7 @@ btr_discard_page( btr_node_ptr_delete(index, block, mtr); /* Remove the page from the level list */ - btr_level_list_remove(space, zip_size, page, mtr); + btr_level_list_remove(space, zip_size, page, index, mtr); #ifdef UNIV_ZIP_DEBUG { page_zip_des_t* merge_page_zip @@ -3939,8 +4037,22 @@ btr_index_page_validate( { page_cur_t cur; ibool ret = TRUE; +#ifndef DBUG_OFF + ulint nth = 1; +#endif /* !DBUG_OFF */ page_cur_set_before_first(block, &cur); + + /* Directory slot 0 should only contain the infimum record. */ + DBUG_EXECUTE_IF("check_table_rec_next", + ut_a(page_rec_get_nth_const( + page_cur_get_page(&cur), 0) + == cur.rec); + ut_a(page_dir_slot_get_n_owned( + page_dir_get_nth_slot( + page_cur_get_page(&cur), 0)) + == 1);); + page_cur_move_to_next(&cur); for (;;) { @@ -3954,6 +4066,16 @@ btr_index_page_validate( return(FALSE); } + /* Verify that page_rec_get_nth_const() is correctly + retrieving each record. */ + DBUG_EXECUTE_IF("check_table_rec_next", + ut_a(cur.rec == page_rec_get_nth_const( + page_cur_get_page(&cur), + page_rec_get_n_recs_before( + cur.rec))); + ut_a(nth++ == page_rec_get_n_recs_before( + cur.rec));); + page_cur_move_to_next(&cur); } @@ -4110,7 +4232,7 @@ loop: if (right_page_no != FIL_NULL) { const rec_t* right_rec; right_block = btr_block_get(space, zip_size, right_page_no, - RW_X_LATCH, &mtr); + RW_X_LATCH, index, &mtr); right_page = buf_block_get_frame(right_block); if (UNIV_UNLIKELY(btr_page_get_prev(right_page, &mtr) != page_get_page_no(page))) { @@ -4336,7 +4458,7 @@ node_ptr_fails: mtr_start(&mtr); block = btr_block_get(space, zip_size, right_page_no, - RW_X_LATCH, &mtr); + RW_X_LATCH, index, &mtr); page = buf_block_get_frame(block); goto loop; @@ -4365,6 +4487,12 @@ btr_validate_index( mtr_x_lock(dict_index_get_lock(index), &mtr); root = btr_root_get(index, &mtr); + + if (UNIV_UNLIKELY(srv_pass_corrupt_table && !root)) { + mtr_commit(&mtr); + return(FALSE); + } + n = btr_page_get_level(root, &mtr); for (i = 0; i <= n && !trx_is_interrupted(trx); i++) { diff --git a/btr/btr0cur.c b/btr/btr0cur.c index 0a352bfded3..91f14beab96 100644 --- a/btr/btr0cur.c +++ b/btr/btr0cur.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -18,8 +18,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -238,7 +238,9 @@ btr_cur_latch_leaves( case BTR_SEARCH_LEAF: case BTR_MODIFY_LEAF: mode = latch_mode == BTR_SEARCH_LEAF ? RW_S_LATCH : RW_X_LATCH; - get_block = btr_block_get(space, zip_size, page_no, mode, mtr); + + get_block = btr_block_get( + space, zip_size, page_no, mode, cursor->index, mtr); if (srv_pass_corrupt_table && !get_block) { return; @@ -254,9 +256,9 @@ btr_cur_latch_leaves( left_page_no = btr_page_get_prev(page, mtr); if (left_page_no != FIL_NULL) { - get_block = btr_block_get(space, zip_size, - left_page_no, - RW_X_LATCH, mtr); + get_block = btr_block_get( + space, zip_size, left_page_no, + RW_X_LATCH, cursor->index, mtr); if (srv_pass_corrupt_table && !get_block) { return; @@ -271,8 +273,9 @@ btr_cur_latch_leaves( get_block->check_index_page_at_flush = TRUE; } - get_block = btr_block_get(space, zip_size, page_no, - RW_X_LATCH, mtr); + get_block = btr_block_get( + space, zip_size, page_no, + RW_X_LATCH, cursor->index, mtr); if (srv_pass_corrupt_table && !get_block) { return; @@ -286,9 +289,9 @@ btr_cur_latch_leaves( right_page_no = btr_page_get_next(page, mtr); if (right_page_no != FIL_NULL) { - get_block = btr_block_get(space, zip_size, - right_page_no, - RW_X_LATCH, mtr); + get_block = btr_block_get( + space, zip_size, right_page_no, + RW_X_LATCH, cursor->index, mtr); if (srv_pass_corrupt_table && !get_block) { return; @@ -312,8 +315,9 @@ btr_cur_latch_leaves( left_page_no = btr_page_get_prev(page, mtr); if (left_page_no != FIL_NULL) { - get_block = btr_block_get(space, zip_size, - left_page_no, mode, mtr); + get_block = btr_block_get( + space, zip_size, + left_page_no, mode, cursor->index, mtr); cursor->left_block = get_block; if (srv_pass_corrupt_table && !get_block) { @@ -329,7 +333,8 @@ btr_cur_latch_leaves( get_block->check_index_page_at_flush = TRUE; } - get_block = btr_block_get(space, zip_size, page_no, mode, mtr); + get_block = btr_block_get( + space, zip_size, page_no, mode, cursor->index, mtr); if (srv_pass_corrupt_table && !get_block) { return; @@ -419,7 +424,12 @@ btr_cur_search_to_nth_level( ut_ad(dict_index_check_search_tuple(index, tuple)); ut_ad(!dict_index_is_ibuf(index) || ibuf_inside()); ut_ad(dtuple_check_typed(tuple)); + ut_ad(index->page != FIL_NULL); + UNIV_MEM_INVALID(&cursor->up_match, sizeof cursor->up_match); + UNIV_MEM_INVALID(&cursor->up_bytes, sizeof cursor->up_bytes); + UNIV_MEM_INVALID(&cursor->low_match, sizeof cursor->low_match); + UNIV_MEM_INVALID(&cursor->low_bytes, sizeof cursor->low_bytes); #ifdef UNIV_DEBUG cursor->up_match = ULINT_UNDEFINED; cursor->low_match = ULINT_UNDEFINED; @@ -622,7 +632,9 @@ retry_page_get: ut_a(!page_zip || page_zip_validate(page_zip, page)); #endif /* UNIV_ZIP_DEBUG */ - buf_block_dbg_add_level(block, SYNC_TREE_NODE); + buf_block_dbg_add_level( + block, dict_index_is_ibuf(index) + ? SYNC_IBUF_TREE_NODE : SYNC_TREE_NODE); } ut_ad(0 == ut_dulint_cmp(index->id, @@ -680,8 +692,8 @@ retry_page_get: if (level > 0) { /* x-latch the page */ - page = btr_page_get(space, zip_size, - page_no, RW_X_LATCH, mtr); + page = btr_page_get(space, zip_size, page_no, + RW_X_LATCH, index, mtr); ut_a((ibool)!!page_is_comp(page) == dict_table_is_comp(index->table)); } @@ -1295,7 +1307,12 @@ fail_err: if (UNIV_UNLIKELY(reorg)) { ut_a(zip_size); - ut_a(*rec); + /* It's possible for rec to be NULL if the + page is compressed. This is because a + reorganized page may become incompressible. */ + if (!*rec) { + goto fail; + } } } @@ -1431,20 +1448,9 @@ btr_cur_pessimistic_insert( ut_ad((thr && thr_get_trx(thr)->fake_changes) || mtr_memo_contains(mtr, btr_cur_get_block(cursor), MTR_MEMO_PAGE_X_FIX)); - /* Try first an optimistic insert; reset the cursor flag: we do not - assume anything of how it was positioned */ - cursor->flag = BTR_CUR_BINARY; - err = btr_cur_optimistic_insert(flags, cursor, entry, rec, - big_rec, n_ext, thr, mtr); - if (err != DB_FAIL) { - - return(err); - } - - /* Retry with a pessimistic insert. Check locks and write to undo log, - if specified */ + /* Check locks and write to undo log, if specified */ err = btr_cur_ins_lock_and_undo(flags, cursor, entry, thr, mtr, &dummy_inh); @@ -1822,6 +1828,7 @@ btr_cur_update_in_place( roll_ptr_t roll_ptr = ut_dulint_zero; trx_t* trx; ulint was_delete_marked; + ibool is_hashed; mem_heap_t* heap = NULL; ulint offsets_[REC_OFFS_NORMAL_SIZE]; ulint* offsets = offsets_; @@ -1846,7 +1853,7 @@ btr_cur_update_in_place( page_zip = buf_block_get_page_zip(block); /* Check that enough space is available on the compressed page. */ - if (UNIV_LIKELY_NULL(page_zip) + if (page_zip && !btr_cur_update_alloc_zip(page_zip, block, index, rec_offs_size(offsets), FALSE, mtr)) { return(DB_ZIP_OVERFLOW); @@ -1871,7 +1878,21 @@ btr_cur_update_in_place( return(err); /* == DB_SUCCESS */ } - if (block->is_hashed) { + if (!(flags & BTR_KEEP_SYS_FLAG)) { + row_upd_rec_sys_fields(rec, NULL, + index, offsets, trx, roll_ptr); + } + + was_delete_marked = rec_get_deleted_flag( + rec, page_is_comp(buf_block_get_frame(block))); + + is_hashed = (block->index != NULL); + + if (is_hashed) { + /* TO DO: Can we skip this if none of the fields + index->search_info->curr_n_fields + are being updated? */ + /* The function row_upd_changes_ord_field_binary works only if the update vector was built for a clustered index, we must NOT call it if index is secondary */ @@ -1887,17 +1908,9 @@ btr_cur_update_in_place( rw_lock_x_lock(&btr_search_latch); } - if (!(flags & BTR_KEEP_SYS_FLAG)) { - row_upd_rec_sys_fields(rec, NULL, - index, offsets, trx, roll_ptr); - } - - was_delete_marked = rec_get_deleted_flag( - rec, page_is_comp(buf_block_get_frame(block))); - row_upd_rec_in_place(rec, index, offsets, update, page_zip); - if (block->is_hashed) { + if (is_hashed) { rw_lock_x_unlock(&btr_search_latch); } @@ -2039,7 +2052,7 @@ any_extern: ut_a(!page_zip || page_zip_validate(page_zip, page)); #endif /* UNIV_ZIP_DEBUG */ - if (UNIV_LIKELY_NULL(page_zip) + if (page_zip && !btr_cur_update_alloc_zip(page_zip, block, index, new_rec_size, TRUE, mtr)) { err = DB_ZIP_OVERFLOW; @@ -2064,8 +2077,12 @@ any_extern: goto err_exit; } - max_size = old_rec_size - + page_get_max_insert_size_after_reorganize(page, 1); + /* We do not attempt to reorganize if the page is compressed. + This is because the page may fail to compress after reorganization. */ + max_size = page_zip + ? page_get_max_insert_size(page, 1) + : (old_rec_size + + page_get_max_insert_size_after_reorganize(page, 1)); if (!(((max_size >= BTR_CUR_PAGE_REORGANIZE_LIMIT) && (max_size >= new_rec_size)) @@ -2347,7 +2364,7 @@ btr_cur_pessimistic_update( ut_ad(rec_offs_validate(rec, index, offsets)); n_ext += btr_push_update_extern_fields(new_entry, update, *heap); - if (UNIV_LIKELY_NULL(page_zip)) { + if (page_zip) { ut_ad(page_is_comp(page)); if (page_zip_rec_needs_ext( rec_get_converted_size(index, new_entry, n_ext), @@ -2433,7 +2450,12 @@ make_external: err = DB_SUCCESS; goto return_after_reservations; } else { - ut_a(optim_err != DB_UNDERFLOW); + /* If the page is compressed and it initially + compresses very well, and there is a subsequent insert + of a badly-compressing record, it is possible for + btr_cur_optimistic_update() to return DB_UNDERFLOW and + btr_cur_insert_if_possible() to return FALSE. */ + ut_a(page_zip || optim_err != DB_UNDERFLOW); /* Out of space: reset the free bits. */ if (!dict_index_is_clust(index) @@ -2461,8 +2483,10 @@ make_external: record on its page? */ was_first = page_cur_is_before_first(page_cursor); - /* The first parameter means that no lock checking and undo logging - is made in the insert */ + /* Lock checks and undo logging were already performed by + btr_cur_upd_lock_and_undo(). We do not try + btr_cur_optimistic_insert() because + btr_cur_insert_if_possible() already failed above. */ err = btr_cur_pessimistic_insert(BTR_NO_UNDO_LOG_FLAG | BTR_NO_LOCKING_FLAG @@ -2531,39 +2555,6 @@ return_after_reservations: return(err); } -/**************************************************************//** -Commits and restarts a mini-transaction so that it will retain an -x-lock on index->lock and the cursor page. */ -UNIV_INTERN -void -btr_cur_mtr_commit_and_start( -/*=========================*/ - btr_cur_t* cursor, /*!< in: cursor */ - mtr_t* mtr) /*!< in/out: mini-transaction */ -{ - buf_block_t* block; - - block = btr_cur_get_block(cursor); - - ut_ad(mtr_memo_contains(mtr, dict_index_get_lock(cursor->index), - MTR_MEMO_X_LOCK)); - ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX)); - /* Keep the locks across the mtr_commit(mtr). */ - rw_lock_x_lock(dict_index_get_lock(cursor->index)); - rw_lock_x_lock(&block->lock); - mutex_enter(&block->mutex); - buf_block_buf_fix_inc(block, __FILE__, __LINE__); - mutex_exit(&block->mutex); - /* Write out the redo log. */ - mtr_commit(mtr); - mtr_start(mtr); - /* Reassociate the locks with the mini-transaction. - They will be released on mtr_commit(mtr). */ - mtr_memo_push(mtr, dict_index_get_lock(cursor->index), - MTR_MEMO_X_LOCK); - mtr_memo_push(mtr, block, MTR_MEMO_PAGE_X_FIX); -} - /*==================== B-TREE DELETE MARK AND UNMARK ===============*/ /****************************************************************//** @@ -2670,7 +2661,8 @@ btr_cur_parse_del_mark_set_clust_rec( /* We do not need to reserve btr_search_latch, as the page is only being recovered, and there cannot be a hash index to - it. */ + it. Besides, these fields are being updated in place + and the adaptive hash index does not depend on them. */ btr_rec_set_deleted_flag(rec, page_zip, val); @@ -2755,9 +2747,9 @@ btr_cur_del_mark_set_clust_rec( return(err); } - if (block->is_hashed) { - rw_lock_x_lock(&btr_search_latch); - } + /* The btr_search_latch is not needed here, because + the adaptive hash index does not depend on the delete-mark + and the delete-mark is being updated in place. */ page_zip = buf_block_get_page_zip(block); @@ -2771,10 +2763,6 @@ btr_cur_del_mark_set_clust_rec( index, offsets, trx, roll_ptr); } - if (block->is_hashed) { - rw_lock_x_unlock(&btr_search_latch); - } - btr_cur_del_mark_set_clust_rec_log(flags, rec, index, val, trx, roll_ptr, mtr); @@ -2850,7 +2838,8 @@ btr_cur_parse_del_mark_set_sec_rec( /* We do not need to reserve btr_search_latch, as the page is only being recovered, and there cannot be a hash index to - it. */ + it. Besides, the delete-mark flag is being updated in place + and the adaptive hash index does not depend on it. */ btr_rec_set_deleted_flag(rec, page_zip, val); } @@ -2903,16 +2892,11 @@ btr_cur_del_mark_set_sec_rec( ut_ad(!!page_rec_is_comp(rec) == dict_table_is_comp(cursor->index->table)); - if (block->is_hashed) { - rw_lock_x_lock(&btr_search_latch); - } - + /* We do not need to reserve btr_search_latch, as the + delete-mark flag is being updated in place and the adaptive + hash index does not depend on it. */ btr_rec_set_deleted_flag(rec, buf_block_get_page_zip(block), val); - if (block->is_hashed) { - rw_lock_x_unlock(&btr_search_latch); - } - btr_cur_del_mark_set_sec_rec_log(rec, val, mtr); return(DB_SUCCESS); @@ -2932,8 +2916,11 @@ btr_cur_del_unmark_for_ibuf( uncompressed */ mtr_t* mtr) /*!< in: mtr */ { - /* We do not need to reserve btr_search_latch, as the page has just - been read to the buffer pool and there cannot be a hash index to it. */ + /* We do not need to reserve btr_search_latch, as the page + has just been read to the buffer pool and there cannot be + a hash index to it. Besides, the delete-mark flag is being + updated in place and the adaptive hash index does not depend + on it. */ btr_rec_set_deleted_flag(rec, page_zip, FALSE); @@ -3501,6 +3488,8 @@ btr_estimate_n_rows_in_range( n_rows = n_rows * 2; } + DBUG_EXECUTE_IF("bug14007649", return(n_rows);); + /* Do not estimate the number of rows in the range to over 1 / 2 of the estimated rows in the whole table */ @@ -3581,7 +3570,6 @@ static void btr_record_not_null_field_in_rec( /*=============================*/ - rec_t* rec, /*!< in: physical record */ ulint n_unique, /*!< in: dict_index_get_n_unique(index), number of columns uniquely determine an index entry */ @@ -3600,17 +3588,11 @@ btr_record_not_null_field_in_rec( } for (i = 0; i < n_unique; i++) { - ulint rec_len; - byte* field; - - field = rec_get_nth_field(rec, offsets, i, &rec_len); - - if (rec_len != UNIV_SQL_NULL) { - n_not_null[i]++; - } else { - /* Break if we hit the first NULL value */ + if (rec_offs_nth_sql_null(offsets, i)) { break; } + + n_not_null[i]++; } } @@ -3723,7 +3705,7 @@ btr_estimate_number_of_different_key_vals( if (n_not_null) { btr_record_not_null_field_in_rec( - rec, n_cols, offsets_rec, n_not_null); + n_cols, offsets_rec, n_not_null); } } @@ -3758,8 +3740,7 @@ btr_estimate_number_of_different_key_vals( if (n_not_null) { btr_record_not_null_field_in_rec( - next_rec, n_cols, offsets_next_rec, - n_not_null); + n_cols, offsets_next_rec, n_not_null); } total_external_size @@ -3950,10 +3931,10 @@ btr_cur_set_ownership_of_extern_field( byte_val = byte_val | BTR_EXTERN_OWNER_FLAG; } - if (UNIV_LIKELY_NULL(page_zip)) { + if (page_zip) { mach_write_to_1(data + local_len + BTR_EXTERN_LEN, byte_val); page_zip_write_blob_ptr(page_zip, rec, index, offsets, i, mtr); - } else if (UNIV_LIKELY(mtr != NULL)) { + } else if (mtr != NULL) { mlog_write_ulint(data + local_len + BTR_EXTERN_LEN, byte_val, MLOG_1BYTE, mtr); @@ -4191,9 +4172,9 @@ The fields are stored on pages allocated from leaf node file segment of the index tree. @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ UNIV_INTERN -ulint -btr_store_big_rec_extern_fields_func( -/*=================================*/ +enum db_err +btr_store_big_rec_extern_fields( +/*============================*/ dict_index_t* index, /*!< in: index of rec; the index tree MUST be X-latched */ buf_block_t* rec_block, /*!< in/out: block containing rec */ @@ -4202,38 +4183,37 @@ btr_store_big_rec_extern_fields_func( the "external storage" flags in offsets will not correspond to rec when this function returns */ -#ifdef UNIV_DEBUG - mtr_t* local_mtr, /*!< in: mtr containing the - latch to rec and to the tree */ -#endif /* UNIV_DEBUG */ -#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG - ibool update_in_place,/*! in: TRUE if the record is updated - in place (not delete+insert) */ -#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */ - const big_rec_t*big_rec_vec) /*!< in: vector containing fields + const big_rec_t*big_rec_vec, /*!< in: vector containing fields to be stored externally */ - + mtr_t* btr_mtr, /*!< in: mtr containing the + latches to the clustered index */ + enum blob_op op) /*! in: operation code */ { - ulint rec_page_no; - byte* field_ref; - ulint extern_len; - ulint store_len; - ulint page_no; - ulint space_id; - ulint zip_size; - ulint prev_page_no; - ulint hint_page_no; - ulint i; - mtr_t mtr; - mem_heap_t* heap = NULL; + ulint rec_page_no; + byte* field_ref; + ulint extern_len; + ulint store_len; + ulint page_no; + ulint space_id; + ulint zip_size; + ulint prev_page_no; + ulint hint_page_no; + ulint i; + mtr_t mtr; + mtr_t* alloc_mtr; + mem_heap_t* heap = NULL; page_zip_des_t* page_zip; - z_stream c_stream; + z_stream c_stream; + buf_block_t** freed_pages = NULL; + ulint n_freed_pages = 0; + enum db_err error = DB_SUCCESS; ut_ad(rec_offs_validate(rec, index, offsets)); ut_ad(rec_offs_any_extern(offsets)); - ut_ad(mtr_memo_contains(local_mtr, dict_index_get_lock(index), + ut_ad(btr_mtr); + ut_ad(mtr_memo_contains(btr_mtr, dict_index_get_lock(index), MTR_MEMO_X_LOCK)); - ut_ad(mtr_memo_contains(local_mtr, rec_block, MTR_MEMO_PAGE_X_FIX)); + ut_ad(mtr_memo_contains(btr_mtr, rec_block, MTR_MEMO_PAGE_X_FIX)); ut_ad(buf_block_get_frame(rec_block) == page_align(rec)); ut_a(dict_index_is_clust(index)); @@ -4246,7 +4226,7 @@ btr_store_big_rec_extern_fields_func( rec_page_no = buf_block_get_page_no(rec_block); ut_a(fil_page_get_type(page_align(rec)) == FIL_PAGE_INDEX); - if (UNIV_LIKELY_NULL(page_zip)) { + if (page_zip) { int err; /* Zlib deflate needs 128 kilobytes for the default @@ -4262,6 +4242,42 @@ btr_store_big_rec_extern_fields_func( ut_a(err == Z_OK); } + if (btr_blob_op_is_update(op)) { + /* Avoid reusing pages that have been previously freed + in btr_mtr. */ + if (btr_mtr->n_freed_pages) { + if (heap == NULL) { + heap = mem_heap_create( + btr_mtr->n_freed_pages + * sizeof *freed_pages); + } + + freed_pages = mem_heap_alloc( + heap, + btr_mtr->n_freed_pages + * sizeof *freed_pages); + n_freed_pages = 0; + } + + /* Because btr_mtr will be committed after mtr, it is + possible that the tablespace has been extended when + the B-tree record was updated or inserted, or it will + be extended while allocating pages for big_rec. + + TODO: In mtr (not btr_mtr), write a redo log record + about extending the tablespace to its current size, + and remember the current size. Whenever the tablespace + grows as pages are allocated, write further redo log + records to mtr. (Currently tablespace extension is not + covered by the redo log. If it were, the record would + only be written to btr_mtr, which is committed after + mtr.) */ + alloc_mtr = btr_mtr; + } else { + /* Use the local mtr for allocations. */ + alloc_mtr = &mtr; + } + #if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG /* All pointers to externally stored columns in the record must either be zero or they must be pointers to inherited @@ -4276,7 +4292,7 @@ btr_store_big_rec_extern_fields_func( /* Either this must be an update in place, or the BLOB must be inherited, or the BLOB pointer must be zero (will be written in this function). */ - ut_a(update_in_place + ut_a(op == BTR_STORE_UPDATE || (field_ref[BTR_EXTERN_LEN] & BTR_EXTERN_INHERITED_FLAG) || !memcmp(field_ref, field_ref_zero, BTR_EXTERN_FIELD_REF_SIZE)); @@ -4301,7 +4317,7 @@ btr_store_big_rec_extern_fields_func( prev_page_no = FIL_NULL; - if (UNIV_LIKELY_NULL(page_zip)) { + if (page_zip) { int err = deflateReset(&c_stream); ut_a(err == Z_OK); @@ -4321,18 +4337,24 @@ btr_store_big_rec_extern_fields_func( hint_page_no = prev_page_no + 1; } +alloc_another: block = btr_page_alloc(index, hint_page_no, - FSP_NO_DIR, 0, &mtr); + FSP_NO_DIR, 0, alloc_mtr, &mtr); if (UNIV_UNLIKELY(block == NULL)) { - mtr_commit(&mtr); + error = DB_OUT_OF_FILE_SPACE; + goto func_exit; + } - if (UNIV_LIKELY_NULL(page_zip)) { - deflateEnd(&c_stream); - mem_heap_free(heap); - } - - return(DB_OUT_OF_FILE_SPACE); + if (rw_lock_get_x_lock_count(&block->lock) > 1) { + /* This page must have been freed in + btr_mtr previously. Put it aside, and + allocate another page for the BLOB data. */ + ut_ad(alloc_mtr == btr_mtr); + ut_ad(btr_blob_op_is_update(op)); + ut_ad(n_freed_pages < btr_mtr->n_freed_pages); + freed_pages[n_freed_pages++] = block; + goto alloc_another; } page_no = buf_block_get_page_no(block); @@ -4349,7 +4371,7 @@ btr_store_big_rec_extern_fields_func( SYNC_EXTERN_STORAGE); prev_page = buf_block_get_frame(prev_block); - if (UNIV_LIKELY_NULL(page_zip)) { + if (page_zip) { mlog_write_ulint( prev_page + FIL_PAGE_NEXT, page_no, MLOG_4BYTES, &mtr); @@ -4366,7 +4388,7 @@ btr_store_big_rec_extern_fields_func( } - if (UNIV_LIKELY_NULL(page_zip)) { + if (page_zip) { int err; page_zip_des_t* blob_page_zip; @@ -4449,11 +4471,15 @@ btr_store_big_rec_extern_fields_func( goto next_zip_page; } - rec_block = buf_page_get(space_id, zip_size, - rec_page_no, - RW_X_LATCH, &mtr); - buf_block_dbg_add_level(rec_block, - SYNC_NO_ORDER_CHECK); + if (alloc_mtr == &mtr) { + rec_block = buf_page_get( + space_id, zip_size, + rec_page_no, + RW_X_LATCH, &mtr); + buf_block_dbg_add_level( + rec_block, + SYNC_NO_ORDER_CHECK); + } if (err == Z_STREAM_END) { mach_write_to_4(field_ref @@ -4487,7 +4513,8 @@ btr_store_big_rec_extern_fields_func( page_zip_write_blob_ptr( page_zip, rec, index, offsets, - big_rec_vec->fields[i].field_no, &mtr); + big_rec_vec->fields[i].field_no, + alloc_mtr); next_zip_page: prev_page_no = page_no; @@ -4532,19 +4559,23 @@ next_zip_page: extern_len -= store_len; - rec_block = buf_page_get(space_id, zip_size, - rec_page_no, - RW_X_LATCH, &mtr); - buf_block_dbg_add_level(rec_block, - SYNC_NO_ORDER_CHECK); + if (alloc_mtr == &mtr) { + rec_block = buf_page_get( + space_id, zip_size, + rec_page_no, + RW_X_LATCH, &mtr); + buf_block_dbg_add_level( + rec_block, + SYNC_NO_ORDER_CHECK); + } mlog_write_ulint(field_ref + BTR_EXTERN_LEN, 0, - MLOG_4BYTES, &mtr); + MLOG_4BYTES, alloc_mtr); mlog_write_ulint(field_ref + BTR_EXTERN_LEN + 4, big_rec_vec->fields[i].len - extern_len, - MLOG_4BYTES, &mtr); + MLOG_4BYTES, alloc_mtr); if (prev_page_no == FIL_NULL) { btr_blob_dbg_add_blob( @@ -4554,18 +4585,19 @@ next_zip_page: mlog_write_ulint(field_ref + BTR_EXTERN_SPACE_ID, - space_id, - MLOG_4BYTES, &mtr); + space_id, MLOG_4BYTES, + alloc_mtr); mlog_write_ulint(field_ref + BTR_EXTERN_PAGE_NO, - page_no, - MLOG_4BYTES, &mtr); + page_no, MLOG_4BYTES, + alloc_mtr); mlog_write_ulint(field_ref + BTR_EXTERN_OFFSET, FIL_PAGE_DATA, - MLOG_4BYTES, &mtr); + MLOG_4BYTES, + alloc_mtr); } prev_page_no = page_no; @@ -4579,8 +4611,23 @@ next_zip_page: } } - if (UNIV_LIKELY_NULL(page_zip)) { +func_exit: + if (page_zip) { deflateEnd(&c_stream); + } + + if (n_freed_pages) { + ulint i; + + ut_ad(alloc_mtr == btr_mtr); + ut_ad(btr_blob_op_is_update(op)); + + for (i = 0; i < n_freed_pages; i++) { + btr_page_free_low(index, freed_pages[i], 0, alloc_mtr); + } + } + + if (heap != NULL) { mem_heap_free(heap); } @@ -4601,7 +4648,7 @@ next_zip_page: ut_a(!(field_ref[BTR_EXTERN_LEN] & BTR_EXTERN_OWNER_FLAG)); } #endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */ - return(DB_SUCCESS); + return(error); } /*******************************************************************//** @@ -4806,7 +4853,7 @@ btr_free_externally_stored_field( btr_page_free_low(index, ext_block, 0, &mtr); - if (UNIV_LIKELY(page_zip != NULL)) { + if (page_zip) { mach_write_to_4(field_ref + BTR_EXTERN_PAGE_NO, next_page_no); mach_write_to_4(field_ref + BTR_EXTERN_LEN + 4, diff --git a/btr/btr0pcur.c b/btr/btr0pcur.c index 97fe06f0f5e..f5323adec91 100644 --- a/btr/btr0pcur.c +++ b/btr/btr0pcur.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -127,6 +127,8 @@ btr_pcur_store_position( ut_a(btr_page_get_next(page, mtr) == FIL_NULL); ut_a(btr_page_get_prev(page, mtr) == FIL_NULL); + ut_ad(page_is_leaf(page)); + ut_ad(page_get_page_no(page) == index->page); cursor->old_stored = BTR_PCUR_OLD_STORED; @@ -253,6 +255,8 @@ btr_pcur_restore_position_func( cursor->rel_pos == BTR_PCUR_BEFORE_FIRST_IN_TREE, index, latch_mode, btr_pcur_get_btr_cur(cursor), mtr); + cursor->latch_mode = latch_mode; + cursor->pos_state = BTR_PCUR_IS_POSITIONED; cursor->block_when_stored = btr_pcur_get_block(cursor); return(FALSE); @@ -272,8 +276,10 @@ btr_pcur_restore_position_func( file, line, mtr))) { cursor->pos_state = BTR_PCUR_IS_POSITIONED; - buf_block_dbg_add_level(btr_pcur_get_block(cursor), - SYNC_TREE_NODE); + buf_block_dbg_add_level( + btr_pcur_get_block(cursor), + dict_index_is_ibuf(index) + ? SYNC_IBUF_TREE_NODE : SYNC_TREE_NODE); if (cursor->rel_pos == BTR_PCUR_ON) { #ifdef UNIV_DEBUG @@ -315,13 +321,19 @@ btr_pcur_restore_position_func( /* Save the old search mode of the cursor */ old_mode = cursor->search_mode; - if (UNIV_LIKELY(cursor->rel_pos == BTR_PCUR_ON)) { + switch (cursor->rel_pos) { + case BTR_PCUR_ON: mode = PAGE_CUR_LE; - } else if (cursor->rel_pos == BTR_PCUR_AFTER) { + break; + case BTR_PCUR_AFTER: mode = PAGE_CUR_G; - } else { - ut_ad(cursor->rel_pos == BTR_PCUR_BEFORE); + break; + case BTR_PCUR_BEFORE: mode = PAGE_CUR_L; + break; + default: + ut_error; + mode = 0; } btr_pcur_open_with_no_init_func(index, tuple, mode, latch_mode, @@ -330,25 +342,39 @@ btr_pcur_restore_position_func( /* Restore the old search mode */ cursor->search_mode = old_mode; - if (cursor->rel_pos == BTR_PCUR_ON - && btr_pcur_is_on_user_rec(cursor) - && 0 == cmp_dtuple_rec(tuple, btr_pcur_get_rec(cursor), - rec_get_offsets( - btr_pcur_get_rec(cursor), index, - NULL, ULINT_UNDEFINED, &heap))) { + switch (cursor->rel_pos) { + case BTR_PCUR_ON: + if (btr_pcur_is_on_user_rec(cursor) + && !cmp_dtuple_rec( + tuple, btr_pcur_get_rec(cursor), + rec_get_offsets(btr_pcur_get_rec(cursor), + index, NULL, + ULINT_UNDEFINED, &heap))) { - /* We have to store the NEW value for the modify clock, since - the cursor can now be on a different page! But we can retain - the value of old_rec */ + /* We have to store the NEW value for + the modify clock, since the cursor can + now be on a different page! But we can + retain the value of old_rec */ - cursor->block_when_stored = btr_pcur_get_block(cursor); - cursor->modify_clock = buf_block_get_modify_clock( - cursor->block_when_stored); - cursor->old_stored = BTR_PCUR_OLD_STORED; + cursor->block_when_stored = + btr_pcur_get_block(cursor); + cursor->modify_clock = + buf_block_get_modify_clock( + cursor->block_when_stored); + cursor->old_stored = BTR_PCUR_OLD_STORED; - mem_heap_free(heap); + mem_heap_free(heap); - return(TRUE); + return(TRUE); + } +#ifdef UNIV_DEBUG + /* fall through */ + case BTR_PCUR_BEFORE: + case BTR_PCUR_AFTER: + break; + default: + ut_error; +#endif /* UNIV_DEBUG */ } mem_heap_free(heap); @@ -396,7 +422,8 @@ btr_pcur_move_to_next_page( ut_ad(next_page_no != FIL_NULL); next_block = btr_block_get(space, zip_size, next_page_no, - cursor->latch_mode, mtr); + cursor->latch_mode, + btr_pcur_get_btr_cur(cursor)->index, mtr); next_page = buf_block_get_frame(next_block); if (srv_pass_corrupt_table && !next_page) { diff --git a/btr/btr0sea.c b/btr/btr0sea.c index 6e6c533f4af..3d710b653c0 100644 --- a/btr/btr0sea.c +++ b/btr/btr0sea.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -44,12 +44,8 @@ Created 2/17/1996 Heikki Tuuri #include "ha0ha.h" #include "srv0srv.h" /** Flag: has the search system been enabled? -Protected by btr_search_latch and btr_search_enabled_mutex. */ +Protected by btr_search_latch. */ UNIV_INTERN char btr_search_enabled = TRUE; -UNIV_INTERN ibool btr_search_fully_disabled = FALSE; - -/** Mutex protecting btr_search_enabled */ -static mutex_t btr_search_enabled_mutex; /** A dummy variable to fool the compiler */ UNIV_INTERN ulint btr_search_this_is_zero = 0; @@ -169,7 +165,6 @@ btr_search_sys_create( btr_search_latch_temp = mem_alloc(sizeof(rw_lock_t)); rw_lock_create(&btr_search_latch, SYNC_SEARCH_SYS); - mutex_create(&btr_search_enabled_mutex, SYNC_SEARCH_SYS_CONF); btr_search_sys = mem_alloc(sizeof(btr_search_sys_t)); @@ -199,27 +194,37 @@ void btr_search_disable(void) /*====================*/ { - mutex_enter(&btr_search_enabled_mutex); + dict_table_t* table; + + mutex_enter(&dict_sys->mutex); rw_lock_x_lock(&btr_search_latch); - /* Disable access to hash index, also tell ha_insert_for_fold() - stop adding new nodes to hash index, but still allow updating - existing nodes */ btr_search_enabled = FALSE; - /* Clear all block->is_hashed flags and remove all entries - from btr_search_sys->hash_index. */ - buf_pool_drop_hash_index(); + /* Clear the index->search_info->ref_count of every index in + the data dictionary cache. */ + for (table = UT_LIST_GET_FIRST(dict_sys->table_LRU); table; + table = UT_LIST_GET_NEXT(table_LRU, table)) { - /* hash index has been cleaned up, disallow any operation to - the hash index */ - btr_search_fully_disabled = TRUE; + dict_index_t* index; - /* btr_search_enabled_mutex should guarantee this. */ - ut_ad(!btr_search_enabled); + for (index = dict_table_get_first_index(table); index; + index = dict_table_get_next_index(index)) { + + index->search_info->ref_count = 0; + } + } + + mutex_exit(&dict_sys->mutex); + + /* Set all block->index = NULL. */ + buf_pool_clear_hash_index(); + + /* Clear the adaptive hash index. */ + hash_table_clear(btr_search_sys->hash_index); + mem_heap_empty(btr_search_sys->hash_index->heap); rw_lock_x_unlock(&btr_search_latch); - mutex_exit(&btr_search_enabled_mutex); } /********************************************************************//** @@ -229,14 +234,11 @@ void btr_search_enable(void) /*====================*/ { - mutex_enter(&btr_search_enabled_mutex); rw_lock_x_lock(&btr_search_latch); btr_search_enabled = TRUE; - btr_search_fully_disabled = FALSE; rw_lock_x_unlock(&btr_search_latch); - mutex_exit(&btr_search_enabled_mutex); } /*****************************************************************//** @@ -459,7 +461,7 @@ btr_search_update_block_hash_info( && (block->n_bytes == info->n_bytes) && (block->left_side == info->left_side)) { - if ((block->is_hashed) + if ((block->index) && (block->curr_n_fields == info->n_fields) && (block->curr_n_bytes == info->n_bytes) && (block->curr_left_side == info->left_side)) { @@ -488,7 +490,7 @@ btr_search_update_block_hash_info( / BTR_SEARCH_PAGE_BUILD_LIMIT) && (info->n_hash_potential >= BTR_SEARCH_BUILD_LIMIT)) { - if ((!block->is_hashed) + if ((!block->index) || (block->n_hash_helps > 2 * page_get_n_recs(block->frame)) || (block->n_fields != block->curr_n_fields) @@ -520,9 +522,9 @@ btr_search_update_hash_ref( buf_block_t* block, /*!< in: buffer block where cursor positioned */ btr_cur_t* cursor) /*!< in: cursor */ { - ulint fold; - rec_t* rec; - dulint index_id; + dict_index_t* index; + ulint fold; + const rec_t* rec; ut_ad(cursor->flag == BTR_CUR_HASH_FAIL); #ifdef UNIV_SYNC_DEBUG @@ -533,13 +535,15 @@ btr_search_update_hash_ref( ut_ad(page_align(btr_cur_get_rec(cursor)) == buf_block_get_frame(block)); - if (!block->is_hashed) { + index = block->index; + + if (!index) { return; } - ut_a(block->index == cursor->index); - ut_a(!dict_index_is_ibuf(cursor->index)); + ut_a(index == cursor->index); + ut_a(!dict_index_is_ibuf(index)); if ((info->n_hash_potential > 0) && (block->curr_n_fields == info->n_fields) @@ -556,12 +560,11 @@ btr_search_update_hash_ref( return; } - index_id = cursor->index->id; fold = rec_fold(rec, - rec_get_offsets(rec, cursor->index, offsets_, + rec_get_offsets(rec, index, offsets_, ULINT_UNDEFINED, &heap), block->curr_n_fields, - block->curr_n_bytes, index_id); + block->curr_n_bytes, index->id); if (UNIV_LIKELY_NULL(heap)) { mem_heap_free(heap); } @@ -829,7 +832,7 @@ btr_search_guess_on_hash( mtr_t* mtr) /*!< in: mtr */ { buf_block_t* block; - rec_t* rec; + const rec_t* rec; ulint fold; dulint index_id; #ifdef notdefined @@ -837,6 +840,7 @@ btr_search_guess_on_hash( btr_pcur_t pcur; #endif ut_ad(index && info && tuple && cursor && mtr); + ut_ad(!dict_index_is_ibuf(index)); ut_ad((latch_mode == BTR_SEARCH_LEAF) || (latch_mode == BTR_MODIFY_LEAF)); @@ -914,7 +918,7 @@ btr_search_guess_on_hash( ut_ad(page_rec_is_user_rec(rec)); - btr_cur_position(index, rec, block, cursor); + btr_cur_position(index, (rec_t*) rec, block, cursor); /* Check the validity of the guess within the page */ @@ -1045,15 +1049,16 @@ btr_search_drop_page_hash_index( retry: rw_lock_s_lock(&btr_search_latch); - page = block->frame; + index = block->index; - if (UNIV_LIKELY(!block->is_hashed)) { + if (UNIV_LIKELY(!index)) { rw_lock_s_unlock(&btr_search_latch); return; } + ut_a(!dict_index_is_ibuf(index)); table = btr_search_sys->hash_index; #ifdef UNIV_SYNC_DEBUG @@ -1064,8 +1069,6 @@ retry: n_fields = block->curr_n_fields; n_bytes = block->curr_n_bytes; - index = block->index; - ut_a(!dict_index_is_ibuf(index)); /* NOTE: The fields of block must not be accessed after releasing btr_search_latch, as the index page might only @@ -1075,6 +1078,7 @@ retry: ut_a(n_fields + n_bytes > 0); + page = block->frame; n_recs = page_get_n_recs(page); /* Calculate and cache fold values into an array for fast deletion @@ -1123,7 +1127,7 @@ next_rec: rw_lock_x_lock(&btr_search_latch); - if (UNIV_UNLIKELY(!block->is_hashed)) { + if (UNIV_UNLIKELY(!block->index)) { /* Someone else has meanwhile dropped the hash index */ goto cleanup; @@ -1151,9 +1155,8 @@ next_rec: ut_a(index->search_info->ref_count > 0); index->search_info->ref_count--; - block->is_hashed = FALSE; block->index = NULL; - + cleanup: #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG if (UNIV_UNLIKELY(block->n_pointers)) { @@ -1223,7 +1226,7 @@ retry: if (buf_block_get_state(block) != BUF_BLOCK_FILE_PAGE || block->index != index - || !block->is_hashed) { + || !(block->index != NULL)) { continue; } @@ -1289,7 +1292,7 @@ next_rec: rw_lock_x_lock(&btr_search_latch); - if (UNIV_UNLIKELY(!block->is_hashed)) { + if (UNIV_UNLIKELY(!(block->index != NULL))) { goto cleanup; } @@ -1314,7 +1317,6 @@ next_rec: ut_a(index->search_info->ref_count > 0); index->search_info->ref_count--; - block->is_hashed = FALSE; block->index = NULL; cleanup: @@ -1346,8 +1348,8 @@ cleanup: } /********************************************************************//** -Drops a page hash index when a page is freed from a fseg to the file system. -Drops possible hash index if the page happens to be in the buffer pool. */ +Drops a possible page hash index when a page is evicted from the buffer pool +or freed in a file segment. */ UNIV_INTERN void btr_search_drop_page_hash_when_freed( @@ -1360,28 +1362,19 @@ btr_search_drop_page_hash_when_freed( buf_block_t* block; mtr_t mtr; - if (!buf_page_peek_if_search_hashed(space, page_no)) { - - return; - } - mtr_start(&mtr); - /* We assume that if the caller has a latch on the page, then the - caller has already dropped the hash index for the page, and we never - get here. Therefore we can acquire the s-latch to the page without - having to fear a deadlock. */ + /* If the caller has a latch on the page, then the caller must + have a x-latch on the page and it must have already dropped + the hash index for the page. Because of the x-latch that we + are possibly holding, we cannot s-latch the page, but must + (recursively) x-latch it, even though we are only reading. */ - block = buf_page_get_gen(space, zip_size, page_no, RW_S_LATCH, NULL, + block = buf_page_get_gen(space, zip_size, page_no, RW_X_LATCH, NULL, BUF_PEEK_IF_IN_POOL, __FILE__, __LINE__, &mtr); - /* Because the buffer pool mutex was released by - buf_page_peek_if_search_hashed(), it is possible that the - block was removed from the buffer pool by another thread - before buf_page_get_gen() got a chance to acquire the buffer - pool mutex again. Thus, we must check for a NULL return. */ - if (UNIV_LIKELY(block != NULL)) { + if (block && block->index) { buf_block_dbg_add_level(block, SYNC_TREE_NODE_FROM_HASH); @@ -1413,7 +1406,6 @@ btr_search_build_page_hash_index( rec_t* next_rec; ulint fold; ulint next_fold; - dulint index_id; ulint n_cached; ulint n_recs; ulint* folds; @@ -1427,9 +1419,6 @@ btr_search_build_page_hash_index( ut_ad(index); ut_a(!dict_index_is_ibuf(index)); - table = btr_search_sys->hash_index; - page = buf_block_get_frame(block); - #ifdef UNIV_SYNC_DEBUG ut_ad(!rw_lock_own(&btr_search_latch, RW_LOCK_EX)); ut_ad(rw_lock_own(&(block->lock), RW_LOCK_SHARED) @@ -1438,9 +1427,17 @@ btr_search_build_page_hash_index( rw_lock_s_lock(&btr_search_latch); - if (block->is_hashed && ((block->curr_n_fields != n_fields) - || (block->curr_n_bytes != n_bytes) - || (block->curr_left_side != left_side))) { + if (!btr_search_enabled) { + rw_lock_s_unlock(&btr_search_latch); + return; + } + + table = btr_search_sys->hash_index; + page = buf_block_get_frame(block); + + if (block->index && ((block->curr_n_fields != n_fields) + || (block->curr_n_bytes != n_bytes) + || (block->curr_left_side != left_side))) { rw_lock_s_unlock(&btr_search_latch); @@ -1477,7 +1474,7 @@ btr_search_build_page_hash_index( n_cached = 0; - index_id = btr_page_get_index_id(page); + ut_a(UT_DULINT_EQ(index->id, btr_page_get_index_id(page))); rec = page_rec_get_next(page_get_infimum_rec(page)); @@ -1492,7 +1489,7 @@ btr_search_build_page_hash_index( } } - fold = rec_fold(rec, offsets, n_fields, n_bytes, index_id); + fold = rec_fold(rec, offsets, n_fields, n_bytes, index->id); if (left_side) { @@ -1519,7 +1516,7 @@ btr_search_build_page_hash_index( offsets = rec_get_offsets(next_rec, index, offsets, n_fields + (n_bytes > 0), &heap); next_fold = rec_fold(next_rec, offsets, n_fields, - n_bytes, index_id); + n_bytes, index->id); if (fold != next_fold) { /* Insert an entry into the hash index */ @@ -1544,13 +1541,13 @@ btr_search_build_page_hash_index( rw_lock_x_lock(&btr_search_latch); - if (UNIV_UNLIKELY(btr_search_fully_disabled)) { + if (UNIV_UNLIKELY(!btr_search_enabled)) { goto exit_func; } - if (block->is_hashed && ((block->curr_n_fields != n_fields) - || (block->curr_n_bytes != n_bytes) - || (block->curr_left_side != left_side))) { + if (block->index && ((block->curr_n_fields != n_fields) + || (block->curr_n_bytes != n_bytes) + || (block->curr_left_side != left_side))) { goto exit_func; } @@ -1559,11 +1556,10 @@ btr_search_build_page_hash_index( rebuild hash index for a page that is already hashed, we have to take care not to increment the counter in that case. */ - if (!block->is_hashed) { + if (!block->index) { index->search_info->ref_count++; } - block->is_hashed = TRUE; block->n_hash_helps = 0; block->curr_n_fields = n_fields; @@ -1611,14 +1607,15 @@ btr_search_move_or_delete_hash_entries( ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX)); ut_ad(rw_lock_own(&(new_block->lock), RW_LOCK_EX)); #endif /* UNIV_SYNC_DEBUG */ - ut_a(!new_block->is_hashed || new_block->index == index); - ut_a(!block->is_hashed || block->index == index); - ut_a(!(new_block->is_hashed || block->is_hashed) - || !dict_index_is_ibuf(index)); rw_lock_s_lock(&btr_search_latch); - if (new_block->is_hashed) { + ut_a(!new_block->index || new_block->index == index); + ut_a(!block->index || block->index == index); + ut_a(!(new_block->index || block->index) + || !dict_index_is_ibuf(index)); + + if (new_block->index) { rw_lock_s_unlock(&btr_search_latch); @@ -1627,7 +1624,7 @@ btr_search_move_or_delete_hash_entries( return; } - if (block->is_hashed) { + if (block->index) { n_fields = block->curr_n_fields; n_bytes = block->curr_n_bytes; @@ -1664,42 +1661,48 @@ btr_search_update_hash_on_delete( { hash_table_t* table; buf_block_t* block; - rec_t* rec; + const rec_t* rec; ulint fold; - dulint index_id; + dict_index_t* index; ulint offsets_[REC_OFFS_NORMAL_SIZE]; mem_heap_t* heap = NULL; rec_offs_init(offsets_); - rec = btr_cur_get_rec(cursor); - block = btr_cur_get_block(cursor); #ifdef UNIV_SYNC_DEBUG ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX)); #endif /* UNIV_SYNC_DEBUG */ - if (!block->is_hashed) { + index = block->index; + + if (!index) { return; } - ut_a(block->index == cursor->index); + ut_a(index == cursor->index); ut_a(block->curr_n_fields + block->curr_n_bytes > 0); - ut_a(!dict_index_is_ibuf(cursor->index)); + ut_a(!dict_index_is_ibuf(index)); table = btr_search_sys->hash_index; - index_id = cursor->index->id; - fold = rec_fold(rec, rec_get_offsets(rec, cursor->index, offsets_, + rec = btr_cur_get_rec(cursor); + + fold = rec_fold(rec, rec_get_offsets(rec, index, offsets_, ULINT_UNDEFINED, &heap), - block->curr_n_fields, block->curr_n_bytes, index_id); + block->curr_n_fields, block->curr_n_bytes, index->id); if (UNIV_LIKELY_NULL(heap)) { mem_heap_free(heap); } + rw_lock_x_lock(&btr_search_latch); - ha_search_and_delete_if_found(table, fold, rec); + if (block->index) { + ut_a(block->index == index); + + ha_search_and_delete_if_found(table, fold, rec); + } rw_lock_x_unlock(&btr_search_latch); } @@ -1717,6 +1720,7 @@ btr_search_update_hash_node_on_insert( { hash_table_t* table; buf_block_t* block; + dict_index_t* index; rec_t* rec; rec = btr_cur_get_rec(cursor); @@ -1727,16 +1731,25 @@ btr_search_update_hash_node_on_insert( ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX)); #endif /* UNIV_SYNC_DEBUG */ - if (!block->is_hashed) { + index = block->index; + + if (!index) { return; } - ut_a(block->index == cursor->index); - ut_a(!dict_index_is_ibuf(cursor->index)); + ut_a(cursor->index == index); + ut_a(!dict_index_is_ibuf(index)); rw_lock_x_lock(&btr_search_latch); + if (!block->index) { + + goto func_exit; + } + + ut_a(block->index == index); + if ((cursor->flag == BTR_CUR_HASH) && (cursor->n_fields == block->curr_n_fields) && (cursor->n_bytes == block->curr_n_bytes) @@ -1747,6 +1760,7 @@ btr_search_update_hash_node_on_insert( ha_search_and_update_if_found(table, cursor->fold, rec, block, page_rec_get_next(rec)); +func_exit: rw_lock_x_unlock(&btr_search_latch); } else { rw_lock_x_unlock(&btr_search_latch); @@ -1768,10 +1782,10 @@ btr_search_update_hash_on_insert( { hash_table_t* table; buf_block_t* block; + dict_index_t* index; rec_t* rec; rec_t* ins_rec; rec_t* next_rec; - dulint index_id; ulint fold; ulint ins_fold; ulint next_fold = 0; /* remove warning (??? bug ???) */ @@ -1796,15 +1810,15 @@ btr_search_update_hash_on_insert( ut_ad(rw_lock_own(&(block->lock), RW_LOCK_EX)); #endif /* UNIV_SYNC_DEBUG */ - if (!block->is_hashed) { + index = block->index; + + if (!index) { return; } - ut_a(block->index == cursor->index); - ut_a(!dict_index_is_ibuf(cursor->index)); - - index_id = cursor->index->id; + ut_a(index == cursor->index); + ut_a(!dict_index_is_ibuf(index)); n_fields = block->curr_n_fields; n_bytes = block->curr_n_bytes; @@ -1813,21 +1827,21 @@ btr_search_update_hash_on_insert( ins_rec = page_rec_get_next(rec); next_rec = page_rec_get_next(ins_rec); - offsets = rec_get_offsets(ins_rec, cursor->index, offsets, + offsets = rec_get_offsets(ins_rec, index, offsets, ULINT_UNDEFINED, &heap); - ins_fold = rec_fold(ins_rec, offsets, n_fields, n_bytes, index_id); + ins_fold = rec_fold(ins_rec, offsets, n_fields, n_bytes, index->id); if (!page_rec_is_supremum(next_rec)) { - offsets = rec_get_offsets(next_rec, cursor->index, offsets, + offsets = rec_get_offsets(next_rec, index, offsets, n_fields + (n_bytes > 0), &heap); next_fold = rec_fold(next_rec, offsets, n_fields, - n_bytes, index_id); + n_bytes, index->id); } if (!page_rec_is_infimum(rec)) { - offsets = rec_get_offsets(rec, cursor->index, offsets, + offsets = rec_get_offsets(rec, index, offsets, n_fields + (n_bytes > 0), &heap); - fold = rec_fold(rec, offsets, n_fields, n_bytes, index_id); + fold = rec_fold(rec, offsets, n_fields, n_bytes, index->id); } else { if (left_side) { @@ -1835,6 +1849,10 @@ btr_search_update_hash_on_insert( locked = TRUE; + if (!btr_search_enabled) { + goto function_exit; + } + ha_insert_for_fold(table, ins_fold, block, ins_rec); } @@ -1848,6 +1866,10 @@ btr_search_update_hash_on_insert( rw_lock_x_lock(&btr_search_latch); locked = TRUE; + + if (!btr_search_enabled) { + goto function_exit; + } } if (!left_side) { @@ -1866,6 +1888,10 @@ check_next_rec: rw_lock_x_lock(&btr_search_latch); locked = TRUE; + + if (!btr_search_enabled) { + goto function_exit; + } } ha_insert_for_fold(table, ins_fold, block, ins_rec); @@ -1881,6 +1907,10 @@ check_next_rec: rw_lock_x_lock(&btr_search_latch); locked = TRUE; + + if (!btr_search_enabled) { + goto function_exit; + } } if (!left_side) { @@ -1888,7 +1918,7 @@ check_next_rec: ha_insert_for_fold(table, ins_fold, block, ins_rec); /* fputs("Hash insert for ", stderr); - dict_index_name_print(stderr, cursor->index); + dict_index_name_print(stderr, index); fprintf(stderr, " fold %lu\n", ins_fold); */ } else { @@ -1995,7 +2025,7 @@ btr_search_validate(void) + (block->curr_n_bytes > 0), &heap); - if (!block->is_hashed || node->fold + if (!block->index || node->fold != rec_fold((rec_t*)(node->data), offsets, block->curr_n_fields, @@ -2030,10 +2060,10 @@ btr_search_validate(void) rec_print_new(stderr, (rec_t*)node->data, offsets); fprintf(stderr, "\nInnoDB: on that page." - " Page mem address %p, is hashed %lu," + " Page mem address %p, is hashed %p," " n fields %lu, n bytes %lu\n" "InnoDB: side %lu\n", - (void*) page, (ulong) block->is_hashed, + (void*) page, (void*) block->index, (ulong) block->curr_n_fields, (ulong) block->curr_n_bytes, (ulong) block->curr_left_side); diff --git a/buf/buf0buddy.c b/buf/buf0buddy.c index 673d6c55efc..71d897d367c 100644 --- a/buf/buf0buddy.c +++ b/buf/buf0buddy.c @@ -354,7 +354,6 @@ buf_buddy_relocate( { buf_page_t* bpage; const ulint size = BUF_BUDDY_LOW << i; - ullint usec = ut_time_us(NULL); mutex_t* mutex; ulint space; ulint page_no; @@ -442,6 +441,7 @@ buf_buddy_relocate( if (mutex && buf_page_can_relocate(bpage)) { /* Relocate the compressed page. */ + ullint usec = ut_time_us(NULL); ut_a(bpage->zip.data == src); memcpy(dst, src, size); bpage->zip.data = dst; diff --git a/buf/buf0buf.c b/buf/buf0buf.c index 8ac3170f3ec..931ff2ea0c9 100644 --- a/buf/buf0buf.c +++ b/buf/buf0buf.c @@ -57,7 +57,9 @@ Created 11/5/1995 Heikki Tuuri /* prototypes for new functions added to ha_innodb.cc */ trx_t* innobase_get_trx(); -inline void _increment_page_get_statistics(buf_block_t* block, trx_t* trx) +static inline +void +_increment_page_get_statistics(buf_block_t* block, trx_t* trx) { ulint block_hash; ulint block_hash_byte; @@ -829,11 +831,8 @@ buf_chunk_init( for (i = chunk->size; i--; ) { buf_block_init(block, frame); + UNIV_MEM_INVALID(block->frame, UNIV_PAGE_SIZE); -#ifdef HAVE_purify - /* Wipe contents of frame to eliminate a Purify warning */ - memset(block->frame, '\0', UNIV_PAGE_SIZE); -#endif /* Add the block to the free list */ mutex_enter(&free_list_mutex); UT_LIST_ADD_LAST(free, buf_pool->free, (&block->page)); @@ -1043,6 +1042,24 @@ buf_pool_free(void) { buf_chunk_t* chunk; buf_chunk_t* chunks; + buf_page_t* bpage; + + bpage = UT_LIST_GET_LAST(buf_pool->LRU); + while (bpage != NULL) { + buf_page_t* prev_bpage = UT_LIST_GET_PREV(LRU, bpage); + enum buf_page_state state = buf_page_get_state(bpage); + + ut_ad(buf_page_in_file(bpage)); + ut_ad(bpage->in_LRU_list); + + if (state != BUF_BLOCK_FILE_PAGE) { + /* We must not have any dirty block. */ + ut_ad(state == BUF_BLOCK_ZIP_PAGE); + buf_page_free_descriptor(bpage); + } + + bpage = prev_bpage; + } chunks = buf_pool->chunks; chunk = chunks + buf_pool->n_chunks; @@ -1059,86 +1076,42 @@ buf_pool_free(void) } /********************************************************************//** -Drops the adaptive hash index. To prevent a livelock, this function -is only to be called while holding btr_search_latch and while -btr_search_enabled == FALSE. */ +Clears the adaptive hash index on all pages in the buffer pool. */ UNIV_INTERN void -buf_pool_drop_hash_index(void) -/*==========================*/ +buf_pool_clear_hash_index(void) +/*===========================*/ { - ibool released_search_latch; + buf_chunk_t* chunks = buf_pool->chunks; + buf_chunk_t* chunk = chunks + buf_pool->n_chunks; #ifdef UNIV_SYNC_DEBUG ut_ad(rw_lock_own(&btr_search_latch, RW_LOCK_EX)); #endif /* UNIV_SYNC_DEBUG */ ut_ad(!btr_search_enabled); - do { - buf_chunk_t* chunks = buf_pool->chunks; - buf_chunk_t* chunk = chunks + buf_pool->n_chunks; + while (--chunk >= chunks) { + buf_block_t* block = chunk->blocks; + ulint i = chunk->size; - released_search_latch = FALSE; + for (; i--; block++) { + dict_index_t* index = block->index; - while (--chunk >= chunks) { - buf_block_t* block = chunk->blocks; - ulint i = chunk->size; + /* We can set block->index = NULL + when we have an x-latch on btr_search_latch; + see the comment in buf0buf.h */ - for (; i--; block++) { - /* block->is_hashed cannot be modified - when we have an x-latch on btr_search_latch; - see the comment in buf0buf.h */ - - if (buf_block_get_state(block) - != BUF_BLOCK_FILE_PAGE - || !block->is_hashed) { - continue; - } - - /* To follow the latching order, we - have to release btr_search_latch - before acquiring block->latch. */ - rw_lock_x_unlock(&btr_search_latch); - /* When we release the search latch, - we must rescan all blocks, because - some may become hashed again. */ - released_search_latch = TRUE; - - rw_lock_x_lock(&block->lock); - - /* This should be guaranteed by the - callers, which will be holding - btr_search_enabled_mutex. */ - ut_ad(!btr_search_enabled); - - /* Because we did not buffer-fix the - block by calling buf_block_get_gen(), - it is possible that the block has been - allocated for some other use after - btr_search_latch was released above. - We do not care which file page the - block is mapped to. All we want to do - is to drop any hash entries referring - to the page. */ - - /* It is possible that - block->page.state != BUF_FILE_PAGE. - Even that does not matter, because - btr_search_drop_page_hash_index() will - check block->is_hashed before doing - anything. block->is_hashed can only - be set on uncompressed file pages. */ - - btr_search_drop_page_hash_index(block); - - rw_lock_x_unlock(&block->lock); - - rw_lock_x_lock(&btr_search_latch); - - ut_ad(!btr_search_enabled); + if (!index) { + /* Not hashed */ + continue; } + + block->index = NULL; +# if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG + block->n_pointers = 0; +# endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ } - } while (released_search_latch); + } } /********************************************************************//** @@ -1283,63 +1256,6 @@ buf_page_set_accessed_make_young( } } -/********************************************************************//** -Resets the check_index_page_at_flush field of a page if found in the buffer -pool. */ -UNIV_INTERN -void -buf_reset_check_index_page_at_flush( -/*================================*/ - ulint space, /*!< in: space id */ - ulint offset) /*!< in: page number */ -{ - buf_block_t* block; - - //buf_pool_mutex_enter(); - rw_lock_s_lock(&page_hash_latch); - - block = (buf_block_t*) buf_page_hash_get(space, offset); - - if (block && buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE) { - block->check_index_page_at_flush = FALSE; - } - - //buf_pool_mutex_exit(); - rw_lock_s_unlock(&page_hash_latch); -} - -/********************************************************************//** -Returns the current state of is_hashed of a page. FALSE if the page is -not in the pool. NOTE that this operation does not fix the page in the -pool if it is found there. -@return TRUE if page hash index is built in search system */ -UNIV_INTERN -ibool -buf_page_peek_if_search_hashed( -/*===========================*/ - ulint space, /*!< in: space id */ - ulint offset) /*!< in: page number */ -{ - buf_block_t* block; - ibool is_hashed; - - //buf_pool_mutex_enter(); - rw_lock_s_lock(&page_hash_latch); - - block = (buf_block_t*) buf_page_hash_get(space, offset); - - if (!block || buf_block_get_state(block) != BUF_BLOCK_FILE_PAGE) { - is_hashed = FALSE; - } else { - is_hashed = block->is_hashed; - } - - //buf_pool_mutex_exit(); - rw_lock_s_unlock(&page_hash_latch); - - return(is_hashed); -} - #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG /********************************************************************//** Sets file_page_was_freed TRUE if the page is found in the buffer pool. @@ -1623,7 +1539,6 @@ buf_block_init_low( block->index = NULL; block->n_hash_helps = 0; - block->is_hashed = FALSE; block->n_fields = 1; block->n_bytes = 0; block->left_side = TRUE; @@ -2208,6 +2123,7 @@ wait_until_unfixed: if (mode == BUF_GET_IF_IN_POOL && ibuf_debug) { /* Try to evict the block from the buffer pool, to use the insert buffer as much as possible. */ + ulint page_no = buf_block_get_page_no(block); if (buf_LRU_free_block(&block->page, TRUE, FALSE)) { //buf_pool_mutex_exit(); @@ -2216,6 +2132,18 @@ wait_until_unfixed: "innodb_change_buffering_debug evict %u %u\n", (unsigned) space, (unsigned) offset); return(NULL); + } else if (UNIV_UNLIKELY(buf_block_get_state(block) + != BUF_BLOCK_FILE_PAGE + || (buf_block_get_page_no(block) != page_no) + || (buf_block_get_space(block) != space))) { + + /* buf_LRU_free_block temporarily releases the + block mutex, and now block points to something + else. */ + mutex_exit(block_mutex); + block = NULL; + goto loop2; + } else if (buf_flush_page_try(block)) { fprintf(stderr, "innodb_change_buffering_debug flush %u %u\n", @@ -2540,7 +2468,7 @@ buf_page_get_known_nowait( ut_a(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE); #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */ #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG - ut_a(block->page.file_page_was_freed == FALSE); + ut_a(mode == BUF_KEEP_OLD || !block->page.file_page_was_freed); #endif #ifdef UNIV_IBUF_COUNT_DEBUG @@ -3155,7 +3083,6 @@ buf_page_io_complete( enum buf_io_fix io_type; const ibool uncompressed = (buf_page_get_state(bpage) == BUF_BLOCK_FILE_PAGE); - enum buf_flush flush_type; mutex_t* block_mutex; ut_a(buf_page_in_file(bpage)); @@ -3315,11 +3242,7 @@ corrupt: //buf_pool_mutex_enter(); if (io_type == BUF_IO_WRITE) { - flush_type = buf_page_get_flush_type(bpage); - /* to keep consistency at buf_LRU_insert_zip_clean() */ - //if (flush_type == BUF_FLUSH_LRU) { /* optimistic! */ - mutex_enter(&LRU_list_mutex); - //} + mutex_enter(&LRU_list_mutex); } block_mutex = buf_page_get_mutex_enter(bpage); ut_a(block_mutex); @@ -4169,6 +4092,133 @@ buf_get_free_list_len(void) return(len); } + +/*******************************************************************//** +Collect buffer pool stats information for a buffer pool. Also +record aggregated stats if there are more than one buffer pool +in the server */ +UNIV_INTERN +void +buf_stats_get_pool_info( +/*====================*/ + buf_pool_info_t* pool_info) /*!< in/out: buffer pool info + to fill */ +{ + time_t current_time; + double time_elapsed; + + buf_pool_mutex_enter(); + + pool_info->pool_size = buf_pool->curr_size; + + pool_info->lru_len = UT_LIST_GET_LEN(buf_pool->LRU); + + pool_info->old_lru_len = buf_pool->LRU_old_len; + + pool_info->free_list_len = UT_LIST_GET_LEN(buf_pool->free); + + pool_info->flush_list_len = UT_LIST_GET_LEN(buf_pool->flush_list); + + pool_info->n_pend_unzip = UT_LIST_GET_LEN(buf_pool->unzip_LRU); + + pool_info->n_pend_reads = buf_pool->n_pend_reads; + + pool_info->n_pending_flush_lru = + (buf_pool->n_flush[BUF_FLUSH_LRU] + + buf_pool->init_flush[BUF_FLUSH_LRU]); + + pool_info->n_pending_flush_list = + (buf_pool->n_flush[BUF_FLUSH_LIST] + + buf_pool->init_flush[BUF_FLUSH_LIST]); + + pool_info->n_pending_flush_single_page = + (buf_pool->n_flush[BUF_FLUSH_SINGLE_PAGE] + + buf_pool->init_flush[BUF_FLUSH_SINGLE_PAGE]); + + current_time = time(NULL); + time_elapsed = 0.001 + difftime(current_time, + buf_pool->last_printout_time); + + pool_info->n_pages_made_young = buf_pool->stat.n_pages_made_young; + + pool_info->n_pages_not_made_young = + buf_pool->stat.n_pages_not_made_young; + + pool_info->n_pages_read = buf_pool->stat.n_pages_read; + + pool_info->n_pages_created = buf_pool->stat.n_pages_created; + + pool_info->n_pages_written = buf_pool->stat.n_pages_written; + + pool_info->n_page_gets = buf_pool->stat.n_page_gets; + + pool_info->n_ra_pages_read_rnd = buf_pool->stat.n_ra_pages_read_rnd; + pool_info->n_ra_pages_read = buf_pool->stat.n_ra_pages_read; + + pool_info->n_ra_pages_evicted = buf_pool->stat.n_ra_pages_evicted; + + pool_info->page_made_young_rate = + (buf_pool->stat.n_pages_made_young + - buf_pool->old_stat.n_pages_made_young) / time_elapsed; + + pool_info->page_not_made_young_rate = + (buf_pool->stat.n_pages_not_made_young + - buf_pool->old_stat.n_pages_not_made_young) / time_elapsed; + + pool_info->pages_read_rate = + (buf_pool->stat.n_pages_read + - buf_pool->old_stat.n_pages_read) / time_elapsed; + + pool_info->pages_created_rate = + (buf_pool->stat.n_pages_created + - buf_pool->old_stat.n_pages_created) / time_elapsed; + + pool_info->pages_written_rate = + (buf_pool->stat.n_pages_written + - buf_pool->old_stat.n_pages_written) / time_elapsed; + + pool_info->n_page_get_delta = buf_pool->stat.n_page_gets + - buf_pool->old_stat.n_page_gets; + + if (pool_info->n_page_get_delta) { + pool_info->page_read_delta = buf_pool->stat.n_pages_read + - buf_pool->old_stat.n_pages_read; + + pool_info->young_making_delta = + buf_pool->stat.n_pages_made_young + - buf_pool->old_stat.n_pages_made_young; + + pool_info->not_young_making_delta = + buf_pool->stat.n_pages_not_made_young + - buf_pool->old_stat.n_pages_not_made_young; + } + pool_info->pages_readahead_rnd_rate = + (buf_pool->stat.n_ra_pages_read_rnd + - buf_pool->old_stat.n_ra_pages_read_rnd) / time_elapsed; + + + pool_info->pages_readahead_rate = + (buf_pool->stat.n_ra_pages_read + - buf_pool->old_stat.n_ra_pages_read) / time_elapsed; + + pool_info->pages_evicted_rate = + (buf_pool->stat.n_ra_pages_evicted + - buf_pool->old_stat.n_ra_pages_evicted) / time_elapsed; + + pool_info->unzip_lru_len = UT_LIST_GET_LEN(buf_pool->unzip_LRU); + + pool_info->io_sum = buf_LRU_stat_sum.io; + + pool_info->io_cur = buf_LRU_stat_cur.io; + + pool_info->unzip_sum = buf_LRU_stat_sum.unzip; + + pool_info->unzip_cur = buf_LRU_stat_cur.unzip; + + buf_refresh_io_stats(); + buf_pool_mutex_exit(); +} + #else /* !UNIV_HOTBACKUP */ /********************************************************************//** Inits a page to the buffer buf_pool, for use in ibbackup --restore. */ @@ -4199,3 +4249,5 @@ buf_page_init_for_backup_restore( } } #endif /* !UNIV_HOTBACKUP */ + + diff --git a/buf/buf0lru.c b/buf/buf0lru.c index 7f4d0ffaa2f..f12c02be73e 100644 --- a/buf/buf0lru.c +++ b/buf/buf0lru.c @@ -48,6 +48,7 @@ Created 11/5/1995 Heikki Tuuri #include "page0zip.h" #include "log0recv.h" #include "srv0srv.h" +#include "srv0start.h" /** The number of blocks from the LRU_old pointer onward, including the block pointed to, must be buf_LRU_old_ratio/BUF_LRU_OLD_RATIO_DIV @@ -292,7 +293,7 @@ next_page: //mutex_enter(&((buf_block_t*) bpage)->mutex); is_fixed = bpage->buf_fix_count > 0 - || !((buf_block_t*) bpage)->is_hashed; + || !((buf_block_t*) bpage)->index; //mutex_exit(&((buf_block_t*) bpage)->mutex); if (is_fixed) { @@ -451,7 +452,7 @@ scan_again: if (buf_page_get_state(bpage) != BUF_BLOCK_FILE_PAGE) { /* This is a compressed-only block descriptor. Do nothing. */ - } else if (((buf_block_t*) bpage)->is_hashed) { + } else if (((buf_block_t*) bpage)->index) { ulint page_no; ulint zip_size; @@ -465,7 +466,7 @@ scan_again: mutex_exit(block_mutex); /* Note that the following call will acquire - an S-latch on the page */ + and release an X-latch on the page. */ btr_search_drop_page_hash_when_freed( id, zip_size, page_no); @@ -537,7 +538,7 @@ buf_LRU_mark_space_was_deleted( for (j = chunk->size; j--; block++) { if (buf_block_get_state(block) != BUF_BLOCK_FILE_PAGE - || !block->is_hashed + || !(block->index != NULL) || buf_page_get_space(&block->page) != id) { continue; } @@ -1428,13 +1429,12 @@ buf_LRU_make_block_old( Try to free a block. If bpage is a descriptor of a compressed-only page, the descriptor object will be freed as well. -NOTE: If this function returns TRUE, it will temporarily -release buf_pool_mutex. Furthermore, the page frame will no longer be -accessible via bpage. +NOTE: This will temporarily release buf_pool_mutex. Furthermore, the +page frame will no longer be accessible via bpage. -The caller must hold buf_pool_mutex and buf_page_get_mutex(bpage) and -release these two mutexes after the call. No other -buf_page_get_mutex() may be held when calling this function. +The caller must hold buf_page_get_mutex(bpage) and release this mutex +after the call. No other buf_page_get_mutex() may be held when +calling this function. @return TRUE if freed, FALSE otherwise. */ UNIV_INTERN ibool @@ -2098,6 +2098,12 @@ func_exit: /********************************************************************//** Dump the LRU page list to the specific file. */ #define LRU_DUMP_FILE "ib_lru_dump" +#define LRU_DUMP_TEMP_FILE "ib_lru_dump.tmp" +#define LRU_OS_FILE_WRITE() \ + os_file_write(LRU_DUMP_FILE, dump_file, buffer, \ + (buffers << UNIV_PAGE_SIZE_SHIFT) & 0xFFFFFFFFUL, \ + (buffers >> (32 - UNIV_PAGE_SIZE_SHIFT)), \ + UNIV_PAGE_SIZE) UNIV_INTERN ibool @@ -2109,17 +2115,19 @@ buf_LRU_file_dump(void) byte* buffer_base = NULL; byte* buffer = NULL; buf_page_t* bpage; + buf_page_t* first_bpage; ulint buffers; ulint offset; - ibool ret = FALSE; + ulint pages_written; ulint i; + ulint total_pages; for (i = 0; i < srv_n_data_files; i++) { if (strstr(srv_data_file_names[i], LRU_DUMP_FILE) != NULL) { fprintf(stderr, " InnoDB: The name '%s' seems to be used for" - " innodb_data_file_path. Dumping LRU list is not" - " done for safeness.\n", LRU_DUMP_FILE); + " innodb_data_file_path. Dumping LRU list is" + " not done for safeness.\n", LRU_DUMP_FILE); goto end; } } @@ -2132,7 +2140,7 @@ buf_LRU_file_dump(void) goto end; } - dump_file = os_file_create(LRU_DUMP_FILE, OS_FILE_OVERWRITE, + dump_file = os_file_create(LRU_DUMP_TEMP_FILE, OS_FILE_OVERWRITE, OS_FILE_NORMAL, OS_DATA_FILE, &success); if (!success) { os_file_get_last_error(TRUE); @@ -2142,12 +2150,21 @@ buf_LRU_file_dump(void) } mutex_enter(&LRU_list_mutex); - bpage = UT_LIST_GET_LAST(buf_pool->LRU); + bpage = first_bpage = UT_LIST_GET_FIRST(buf_pool->LRU); + total_pages = UT_LIST_GET_LEN(buf_pool->LRU); - buffers = offset = 0; - while (bpage != NULL) { - if (offset == 0) { - memset(buffer, 0, UNIV_PAGE_SIZE); + buffers = offset = pages_written = 0; + while (bpage != NULL && (pages_written++ < total_pages)) { + + buf_page_t* next_bpage = UT_LIST_GET_NEXT(LRU, bpage); + + if (next_bpage == first_bpage) { + mutex_exit(&LRU_list_mutex); + success = FALSE; + fprintf(stderr, + "InnoDB: detected cycle in LRU, skipping " + "dump\n"); + goto end; } mach_write_to_4(buffer + offset * 4, bpage->space); @@ -2156,50 +2173,79 @@ buf_LRU_file_dump(void) offset++; if (offset == UNIV_PAGE_SIZE/4) { - success = os_file_write(LRU_DUMP_FILE, dump_file, buffer, - (buffers << UNIV_PAGE_SIZE_SHIFT) & 0xFFFFFFFFUL, - (buffers >> (32 - UNIV_PAGE_SIZE_SHIFT)), - UNIV_PAGE_SIZE); + mutex_t *next_block_mutex = NULL; + + if (srv_shutdown_state != SRV_SHUTDOWN_NONE) { + mutex_exit(&LRU_list_mutex); + success = FALSE; + fprintf(stderr, + " InnoDB: stopped dumping lru pages" + " because of server shutdown.\n"); + goto end; + } + + /* while writing file, release buffer pool mutex but + keep the next page fixed so we don't worry about + our list iterator becoming invalid */ + if (next_bpage) { + next_block_mutex = buf_page_get_mutex( + next_bpage); + + mutex_enter(next_block_mutex); + next_bpage->buf_fix_count++; + mutex_exit(next_block_mutex); + } + mutex_exit(&LRU_list_mutex); + + success = LRU_OS_FILE_WRITE(); + + /* grab this again here so that next_bpage + can't be purged when we drop the fix_count */ + mutex_enter(&LRU_list_mutex); + + if (next_bpage) { + mutex_enter(next_block_mutex); + next_bpage->buf_fix_count--; + mutex_exit(next_block_mutex); + } if (!success) { mutex_exit(&LRU_list_mutex); fprintf(stderr, - " InnoDB: cannot write page %lu of %s\n", + " InnoDB: cannot write page" + " %lu of %s\n", buffers, LRU_DUMP_FILE); goto end; } buffers++; offset = 0; + bpage = next_bpage; + } else { + bpage = UT_LIST_GET_NEXT(LRU, bpage); } - - bpage = UT_LIST_GET_PREV(LRU, bpage); - } + } /* while(bpage ...) */ mutex_exit(&LRU_list_mutex); - if (offset == 0) { - memset(buffer, 0, UNIV_PAGE_SIZE); - } - mach_write_to_4(buffer + offset * 4, 0xFFFFFFFFUL); offset++; mach_write_to_4(buffer + offset * 4, 0xFFFFFFFFUL); offset++; - success = os_file_write(LRU_DUMP_FILE, dump_file, buffer, - (buffers << UNIV_PAGE_SIZE_SHIFT) & 0xFFFFFFFFUL, - (buffers >> (32 - UNIV_PAGE_SIZE_SHIFT)), - UNIV_PAGE_SIZE); - if (!success) { - goto end; - } - - ret = TRUE; + success = LRU_OS_FILE_WRITE(); end: - if (dump_file != -1) + if (dump_file != -1) { + if (success) { + success = os_file_flush(dump_file, TRUE); + } os_file_close(dump_file); + } + if (success) { + success = os_file_rename(LRU_DUMP_TEMP_FILE, + LRU_DUMP_FILE); + } if (buffer_base) ut_free(buffer_base); - return(ret); + return(success); } typedef struct { @@ -2241,6 +2287,7 @@ buf_LRU_file_restore(void) dump_record_t* records = NULL; ulint size; ulint size_high; + ulint recsize = sizeof(dump_record_t); ulint length; dump_file = os_file_create_simple_no_error_handling( @@ -2248,7 +2295,15 @@ buf_LRU_file_restore(void) if (!success || !os_file_get_size(dump_file, &size, &size_high)) { os_file_get_last_error(TRUE); fprintf(stderr, - " InnoDB: cannot open %s\n", LRU_DUMP_FILE); + " InnoDB: cannot open %s," + " buffer pool preload not done\n", + LRU_DUMP_FILE); + goto end; + } + + if (size == 0 || size_high > 0 || size % recsize) { + fprintf(stderr, " InnoDB: broken LRU dump file," + " buffer pool preload not done\n"); goto end; } @@ -2332,6 +2387,14 @@ buf_LRU_file_restore(void) if (offset % 16 == 15) { os_aio_simulated_wake_handler_threads(); buf_flush_free_margin(FALSE); + /* skip loading of the rest of the file if we are + terminating anyway*/ + if (srv_shutdown_state != SRV_SHUTDOWN_NONE) { + fprintf(stderr, + " InnoDB: stopped loading LRU pages" + " because of server shutdown.\n"); + break; + } } zip_size = fil_space_get_zip_size(space_id); diff --git a/dict/dict0boot.c b/dict/dict0boot.c index 2b6a208321d..538b5f861f5 100644 --- a/dict/dict0boot.c +++ b/dict/dict0boot.c @@ -236,6 +236,166 @@ dict_hdr_create( return(TRUE); } +/*****************************************************************//** +Verifies the SYS_STATS table by scanning its clustered index. This +function may only be called at InnoDB startup time. + +@return TRUE if SYS_STATS was verified successfully */ +UNIV_INTERN +ibool +dict_verify_xtradb_sys_stats(void) +/*==============================*/ +{ + dict_index_t* sys_stats_index; + ulint saved_srv_pass_corrupt_table = srv_pass_corrupt_table; + ibool result; + + sys_stats_index = dict_table_get_first_index(dict_sys->sys_stats); + + /* Since this may be called only during server startup, avoid hitting + various asserts by using XtraDB pass_corrupt_table option. */ + srv_pass_corrupt_table = 1; + result = btr_validate_index(sys_stats_index, NULL); + srv_pass_corrupt_table = saved_srv_pass_corrupt_table; + + return result; +} + +/*****************************************************************//** +Creates the B-tree for the SYS_STATS clustered index, adds the XtraDB +mark and the id of the index to the dictionary header page. Rewrites +both passed args. */ +static +void +dict_create_xtradb_sys_stats( +/*=========================*/ + dict_hdr_t** dict_hdr, /*!< in/out: dictionary header */ + mtr_t* mtr) /*!< in/out: mtr */ +{ + ulint root_page_no; + + root_page_no = btr_create(DICT_CLUSTERED | DICT_UNIQUE, + DICT_HDR_SPACE, 0, DICT_STATS_ID, + dict_ind_redundant, mtr); + if (root_page_no == FIL_NULL) { + fprintf(stderr, "InnoDB: Warning: failed to create SYS_STATS btr.\n"); + srv_use_sys_stats_table = FALSE; + } else { + mlog_write_ulint(*dict_hdr + DICT_HDR_STATS, root_page_no, + MLOG_4BYTES, mtr); + mlog_write_dulint(*dict_hdr + DICT_HDR_XTRADB_MARK, + DICT_HDR_XTRADB_FLAG, mtr); + } + mtr_commit(mtr); + /* restart mtr */ + mtr_start(mtr); + *dict_hdr = dict_hdr_get(mtr); +} + +/*****************************************************************//** +Create the table and index structure of SYS_STATS for the dictionary +cache and add it there. If called for the first time, also support +wrong root page id injection for testing purposes. */ +static +void +dict_add_to_cache_xtradb_sys_stats( +/*===============================*/ + ibool first_time __attribute__((unused)), + /*!< in: first invocation flag. If + TRUE, optionally inject wrong root page + id */ + mem_heap_t* heap, /*!< in: memory heap for table/index + allocation */ + dict_hdr_t* dict_hdr, /*!< in: dictionary header */ + mtr_t* mtr) /*!< in: mtr */ +{ + dict_table_t* table; + dict_index_t* index; + ulint root_page_id; + ulint error; + + table = dict_mem_table_create("SYS_STATS", DICT_HDR_SPACE, 4, 0); + table->n_mysql_handles_opened = 1; /* for pin */ + + dict_mem_table_add_col(table, heap, "INDEX_ID", DATA_BINARY, 0, 0); + dict_mem_table_add_col(table, heap, "KEY_COLS", DATA_INT, 0, 4); + dict_mem_table_add_col(table, heap, "DIFF_VALS", DATA_BINARY, 0, 0); + dict_mem_table_add_col(table, heap, "NON_NULL_VALS", DATA_BINARY, 0, 0); + + /* The '+ 2' below comes from the fields DB_TRX_ID, DB_ROLL_PTR */ +#if DICT_SYS_STATS_DIFF_VALS_FIELD != 2 + 2 +#error "DICT_SYS_STATS_DIFF_VALS_FIELD != 2 + 2" +#endif +#if DICT_SYS_STATS_NON_NULL_VALS_FIELD != 3 + 2 +#error "DICT_SYS_STATS_NON_NULL_VALS_FIELD != 3 + 2" +#endif + + table->id = DICT_STATS_ID; + dict_table_add_to_cache(table, heap); + dict_sys->sys_stats = table; + mem_heap_empty(heap); + + index = dict_mem_index_create("SYS_STATS", "CLUST_IND", + DICT_HDR_SPACE, + DICT_UNIQUE | DICT_CLUSTERED, 2); + + dict_mem_index_add_field(index, "INDEX_ID", 0); + dict_mem_index_add_field(index, "KEY_COLS", 0); + + index->id = DICT_STATS_ID; + + root_page_id = mtr_read_ulint(dict_hdr + DICT_HDR_STATS, MLOG_4BYTES, + mtr); +#ifdef UNIV_DEBUG + if ((srv_sys_stats_root_page != 0) && first_time) + root_page_id = srv_sys_stats_root_page; +#endif + error = dict_index_add_to_cache(table, index, root_page_id, FALSE); + ut_a(error == DB_SUCCESS); + + mem_heap_empty(heap); +} + +/*****************************************************************//** +Discard the existing dictionary cache SYS_STATS information, create and +add it there anew. Does not touch the old SYS_STATS tablespace page +under the assumption that they are corrupted or overwritten for other +purposes. */ +UNIV_INTERN +void +dict_recreate_xtradb_sys_stats(void) +/*================================*/ +{ + mtr_t mtr; + dict_hdr_t* dict_hdr; + dict_index_t* sys_stats_clust_idx; + mem_heap_t* heap; + + heap = mem_heap_create(450); + + mutex_enter(&(dict_sys->mutex)); + + sys_stats_clust_idx = dict_table_get_first_index(dict_sys->sys_stats); + dict_index_remove_from_cache(dict_sys->sys_stats, sys_stats_clust_idx); + + dict_table_remove_from_cache(dict_sys->sys_stats); + + dict_sys->sys_stats = NULL; + + mtr_start(&mtr); + + dict_hdr = dict_hdr_get(&mtr); + + dict_create_xtradb_sys_stats(&dict_hdr, &mtr); + dict_add_to_cache_xtradb_sys_stats(FALSE, heap, dict_hdr, &mtr); + + mem_heap_free(heap); + + mtr_commit(&mtr); + + mutex_exit(&(dict_sys->mutex)); +} + /*****************************************************************//** Initializes the data dictionary memory structures when the database is started. This function is also called when the data dictionary is created. */ @@ -251,39 +411,23 @@ dict_boot(void) mtr_t mtr; ulint error; + heap = mem_heap_create(450); + mtr_start(&mtr); /* Create the hash tables etc. */ dict_init(); - heap = mem_heap_create(450); - mutex_enter(&(dict_sys->mutex)); /* Get the dictionary header */ dict_hdr = dict_hdr_get(&mtr); - if (ut_dulint_cmp(mtr_read_dulint(dict_hdr + DICT_HDR_XTRADB_MARK, &mtr), - DICT_HDR_XTRADB_FLAG) != 0) { - /* not extended yet by XtraDB, need to be extended */ - ulint root_page_no; + if (ut_dulint_cmp(mtr_read_dulint(dict_hdr + DICT_HDR_XTRADB_MARK, + &mtr), DICT_HDR_XTRADB_FLAG) != 0) { - root_page_no = btr_create(DICT_CLUSTERED | DICT_UNIQUE, - DICT_HDR_SPACE, 0, DICT_STATS_ID, - dict_ind_redundant, &mtr); - if (root_page_no == FIL_NULL) { - fprintf(stderr, "InnoDB: Warning: failed to create SYS_STATS btr.\n"); - srv_use_sys_stats_table = FALSE; - } else { - mlog_write_ulint(dict_hdr + DICT_HDR_STATS, root_page_no, - MLOG_4BYTES, &mtr); - mlog_write_dulint(dict_hdr + DICT_HDR_XTRADB_MARK, - DICT_HDR_XTRADB_FLAG, &mtr); - } - mtr_commit(&mtr); - /* restart mtr */ - mtr_start(&mtr); - dict_hdr = dict_hdr_get(&mtr); + /* not extended yet by XtraDB, need to be extended */ + dict_create_xtradb_sys_stats(&dict_hdr, &mtr); } /* Because we only write new row ids to disk-based data structure @@ -464,42 +608,7 @@ dict_boot(void) FALSE); ut_a(error == DB_SUCCESS); - /*-------------------------*/ - table = dict_mem_table_create("SYS_STATS", DICT_HDR_SPACE, 4, 0); - table->n_mysql_handles_opened = 1; /* for pin */ - - dict_mem_table_add_col(table, heap, "INDEX_ID", DATA_BINARY, 0, 0); - dict_mem_table_add_col(table, heap, "KEY_COLS", DATA_INT, 0, 4); - dict_mem_table_add_col(table, heap, "DIFF_VALS", DATA_BINARY, 0, 0); - dict_mem_table_add_col(table, heap, "NON_NULL_VALS", DATA_BINARY, 0, 0); - - /* The '+ 2' below comes from the fields DB_TRX_ID, DB_ROLL_PTR */ -#if DICT_SYS_STATS_DIFF_VALS_FIELD != 2 + 2 -#error "DICT_SYS_STATS_DIFF_VALS_FIELD != 2 + 2" -#endif -#if DICT_SYS_STATS_NON_NULL_VALS_FIELD != 3 + 2 -#error "DICT_SYS_STATS_NON_NULL_VALS_FIELD != 3 + 2" -#endif - - table->id = DICT_STATS_ID; - dict_table_add_to_cache(table, heap); - dict_sys->sys_stats = table; - mem_heap_empty(heap); - - index = dict_mem_index_create("SYS_STATS", "CLUST_IND", - DICT_HDR_SPACE, - DICT_UNIQUE | DICT_CLUSTERED, 2); - - dict_mem_index_add_field(index, "INDEX_ID", 0); - dict_mem_index_add_field(index, "KEY_COLS", 0); - - index->id = DICT_STATS_ID; - error = dict_index_add_to_cache(table, index, - mtr_read_ulint(dict_hdr - + DICT_HDR_STATS, - MLOG_4BYTES, &mtr), - FALSE); - ut_a(error == DB_SUCCESS); + dict_add_to_cache_xtradb_sys_stats(TRUE, heap, dict_hdr, &mtr); mem_heap_free(heap); diff --git a/dict/dict0crea.c b/dict/dict0crea.c index 99b9f266ddc..8e68ae0809e 100644 --- a/dict/dict0crea.c +++ b/dict/dict0crea.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -899,7 +899,7 @@ dict_truncate_index_tree( appropriate field in the SYS_INDEXES record: this mini-transaction marks the B-tree totally truncated */ - btr_block_get(space, zip_size, root_page_no, RW_X_LATCH, mtr); + btr_block_get(space, zip_size, root_page_no, RW_X_LATCH, NULL, mtr); btr_free_root(space, zip_size, root_page_no, mtr); create: diff --git a/dict/dict0dict.c b/dict/dict0dict.c index a8a1d7a11e6..65189ba2961 100644 --- a/dict/dict0dict.c +++ b/dict/dict0dict.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -24,6 +24,8 @@ Created 1/8/1996 Heikki Tuuri ***********************************************************************/ #include "dict0dict.h" +#include "m_string.h" +#include "my_sys.h" #ifdef UNIV_NONINL #include "dict0dict.ic" @@ -270,15 +272,39 @@ dict_table_stats_lock( ulint latch_mode) /*!< in: RW_S_LATCH or RW_X_LATCH */ { + rw_lock_t *want, *got; + ut_ad(table != NULL); ut_ad(table->magic_n == DICT_TABLE_MAGIC_N); switch (latch_mode) { case RW_S_LATCH: - rw_lock_s_lock(GET_TABLE_STATS_LATCH(table)); + /* Lock one of dict_table_stats_latches in S-mode. + Latch is picked using table->id. table->id might be + changed while we are waiting for lock to be grabbed */ + for (;;) { + want= GET_TABLE_STATS_LATCH(table); + rw_lock_s_lock(want); + got= GET_TABLE_STATS_LATCH(table); + if (want == got) { + break; + } + rw_lock_s_unlock(want); + } break; case RW_X_LATCH: - rw_lock_x_lock(GET_TABLE_STATS_LATCH(table)); + /* Lock one of dict_table_stats_latches in X-mode. + Latch is picked using table->id. table->id might be + changed while we are waiting for lock to be grabbed */ + for (;;) { + want= GET_TABLE_STATS_LATCH(table); + rw_lock_x_lock(want); + got= GET_TABLE_STATS_LATCH(table); + if (want == got) { + break; + } + rw_lock_x_unlock(want); + } break; case RW_NO_LATCH: /* fall through */ @@ -1164,12 +1190,21 @@ dict_table_change_id_in_cache( dict_table_t* table, /*!< in/out: table object already in cache */ dulint new_id) /*!< in: new id to set */ { + dict_table_t table_tmp; + ut_ad(table); ut_ad(mutex_own(&(dict_sys->mutex))); ut_ad(table->magic_n == DICT_TABLE_MAGIC_N); /* Remove the table from the hash table of id's */ + /* Lock is needed to prevent dict_table_stats_latches from + being leaked. dict_table_stats_lock picks one latch using + table->id. We are changing table->id below. That is why + we also should remember the old value to unlock table */ + dict_table_stats_lock(table, RW_X_LATCH); + table_tmp= *table; + HASH_DELETE(dict_table_t, id_hash, dict_sys->table_id_hash, ut_fold_dulint(table->id), table); table->id = new_id; @@ -1177,6 +1212,8 @@ dict_table_change_id_in_cache( /* Add the table back to the hash table */ HASH_INSERT(dict_table_t, id_hash, dict_sys->table_id_hash, ut_fold_dulint(table->id), table); + + dict_table_stats_unlock(&table_tmp, RW_X_LATCH); } /**********************************************************************//** @@ -1724,7 +1761,9 @@ undo_size_ok: new_index->stat_n_leaf_pages = 1; new_index->page = page_no; - rw_lock_create(&new_index->lock, SYNC_INDEX_TREE); + rw_lock_create(&new_index->lock, + dict_index_is_ibuf(index) + ? SYNC_IBUF_INDEX_TREE : SYNC_INDEX_TREE); if (!UNIV_UNLIKELY(new_index->type & DICT_UNIVERSAL)) { @@ -2338,6 +2377,8 @@ dict_foreign_free( /*==============*/ dict_foreign_t* foreign) /*!< in, own: foreign key struct */ { + ut_a(foreign->foreign_table->n_foreign_key_checks_running == 0); + mem_heap_free(foreign->heap); } @@ -4306,19 +4347,26 @@ dict_reload_statistics( heap = mem_heap_create(1000); while (index) { + mtr_t mtr; + if (table->is_corrupt) { ut_a(srv_pass_corrupt_table); mem_heap_free(heap); return(FALSE); } - size = btr_get_size(index, BTR_TOTAL_SIZE); + mtr_start(&mtr); + mtr_s_lock(dict_index_get_lock(index), &mtr); + + size = btr_get_size(index, BTR_TOTAL_SIZE, &mtr); index->stat_index_size = size; *sum_of_index_sizes += size; - size = btr_get_size(index, BTR_N_LEAF_PAGES); + size = btr_get_size(index, BTR_N_LEAF_PAGES, &mtr); + + mtr_commit(&mtr); if (size == 0) { /* The root node of the tree is a leaf */ @@ -4574,12 +4622,6 @@ next_rec: } btr_pcur_close(&pcur); mtr_commit(&mtr); - - if (rests) { - fprintf(stderr, "InnoDB: Warning: failed to store %lu stats entries" - " of %s/%s to SYS_STATS system table.\n", - rests, index->table_name, index->name); - } } /*===========================================*/ @@ -4668,16 +4710,27 @@ dict_update_statistics( (srv_force_recovery < SRV_FORCE_NO_IBUF_MERGE || (srv_force_recovery < SRV_FORCE_NO_LOG_REDO && dict_index_is_clust(index)))) { + mtr_t mtr; ulint size; - size = btr_get_size(index, BTR_TOTAL_SIZE); - index->stat_index_size = size; + mtr_start(&mtr); + mtr_s_lock(dict_index_get_lock(index), &mtr); - sum_of_index_sizes += size; + size = btr_get_size(index, BTR_TOTAL_SIZE, &mtr); - size = btr_get_size(index, BTR_N_LEAF_PAGES); + if (size != ULINT_UNDEFINED) { + sum_of_index_sizes += size; + index->stat_index_size = size; + size = btr_get_size( + index, BTR_N_LEAF_PAGES, &mtr); + } - if (size == 0) { + mtr_commit(&mtr); + + switch (size) { + case ULINT_UNDEFINED: + goto fake_statistics; + case 0: /* The root node of the tree is a leaf */ size = 1; } @@ -4694,6 +4747,7 @@ dict_update_statistics( various means, also via secondary indexes. */ ulint i; +fake_statistics: sum_of_index_sizes++; index->stat_index_size = index->stat_n_leaf_pages = 1; @@ -5334,6 +5388,28 @@ dict_table_replace_index_in_foreign_list( foreign->foreign_index = new_index; } } + + + for (foreign = UT_LIST_GET_FIRST(table->referenced_list); + foreign; + foreign = UT_LIST_GET_NEXT(referenced_list, foreign)) { + + dict_index_t* new_index; + + if (foreign->referenced_index == index) { + ut_ad(foreign->referenced_table == index->table); + + new_index = dict_foreign_find_index( + foreign->referenced_table, + foreign->referenced_col_names, + foreign->n_fields, index, + /*check_charsets=*/TRUE, /*check_null=*/FALSE); + ut_ad(new_index || !trx->check_foreigns); + ut_ad(!new_index || new_index->table == index->table); + + foreign->referenced_index = new_index; + } + } } /**********************************************************************//** diff --git a/dict/dict0load.c b/dict/dict0load.c index 64d7fad3557..015d88852e9 100644 --- a/dict/dict0load.c +++ b/dict/dict0load.c @@ -165,7 +165,7 @@ dict_print(void) monitor printout */ mutex_enter(&kernel_mutex); - srv_fatal_semaphore_wait_threshold += 7200; /* 2 hours */ + srv_fatal_semaphore_wait_threshold += SRV_SEMAPHORE_WAIT_EXTENSION; mutex_exit(&kernel_mutex); mutex_enter(&(dict_sys->mutex)); @@ -193,7 +193,7 @@ loop: /* Restore the fatal semaphore wait timeout */ mutex_enter(&kernel_mutex); - srv_fatal_semaphore_wait_threshold -= 7200; /* 2 hours */ + srv_fatal_semaphore_wait_threshold -= SRV_SEMAPHORE_WAIT_EXTENSION; mutex_exit(&kernel_mutex); return; @@ -430,7 +430,7 @@ loop: object and check that the .ibd file exists. */ fil_open_single_table_tablespace(FALSE, space_id, - flags, name); + flags, name, NULL); } mem_free(name); @@ -1023,7 +1023,7 @@ err_exit: if (!fil_open_single_table_tablespace( TRUE, space, flags == DICT_TF_COMPACT ? 0 : - flags & ~(~0 << DICT_TF_BITS), name)) { + flags & ~(~0 << DICT_TF_BITS), name, NULL)) { /* We failed to find a sensible tablespace file */ diff --git a/fil/fil0fil.c b/fil/fil0fil.c index de3f9fe2db8..0832abd7f3a 100644 --- a/fil/fil0fil.c +++ b/fil/fil0fil.c @@ -183,7 +183,7 @@ struct fil_space_struct { .ibd file of tablespace and want to stop temporarily posting of new i/o requests on the file */ - ibool stop_ibuf_merges; + ibool stop_new_ops; /*!< we set this TRUE when we start deleting a single-table tablespace */ ibool is_being_deleted; @@ -208,12 +208,13 @@ struct fil_space_struct { ulint n_pending_flushes; /*!< this is positive when flushing the tablespace to disk; dropping of the tablespace is forbidden if this is positive */ - ulint n_pending_ibuf_merges;/*!< this is positive - when merging insert buffer entries to - a page so that we may need to access - the ibuf bitmap page in the - tablespade: dropping of the tablespace - is forbidden if this is positive */ + ulint n_pending_ops;/*!< this is positive when we + have pending operations against this + tablespace. The pending operations can + be ibuf merges or lock validation code + trying to read a block. + Dropping of the tablespace is forbidden + if this is positive */ hash_node_t hash; /*!< hash chain node */ hash_node_t name_hash;/*!< hash chain the name_hash table */ #ifndef UNIV_HOTBACKUP @@ -928,11 +929,6 @@ retry: return; } - if (fil_system->n_open < fil_system->max_n_open) { - - return; - } - space = fil_space_get_by_id(space_id); if (space != NULL && space->stop_ios) { @@ -949,6 +945,25 @@ retry: mutex_exit(&fil_system->mutex); +#ifndef UNIV_HOTBACKUP + + /* Wake the i/o-handler threads to make sure pending + i/o's are performed */ + os_aio_simulated_wake_handler_threads(); + + /* The sleep here is just to give IO helper threads a + bit of time to do some work. It is not required that + all IO related to the tablespace being renamed must + be flushed here as we do fil_flush() in + fil_rename_tablespace() as well. */ + os_thread_sleep(20000); + +#endif /* UNIV_HOTBACKUP */ + + /* Flush tablespaces so that we can close modified + files in the LRU list */ + fil_flush_file_spaces(FIL_TABLESPACE); + os_thread_sleep(20000); count2++; @@ -956,6 +971,11 @@ retry: goto retry; } + if (fil_system->n_open < fil_system->max_n_open) { + + return; + } + /* If the file is already open, no need to do anything; if the space does not exist, we handle the situation in the function which called this function */ @@ -1228,7 +1248,7 @@ try_again: } space->stop_ios = FALSE; - space->stop_ibuf_merges = FALSE; + space->stop_new_ops = FALSE; space->is_being_deleted = FALSE; space->purpose = purpose; space->size = 0; @@ -1237,7 +1257,7 @@ try_again: space->n_reserved_extents = 0; space->n_pending_flushes = 0; - space->n_pending_ibuf_merges = 0; + space->n_pending_ops = 0; UT_LIST_INIT(space->chain); space->magic_n = FIL_SPACE_MAGIC_N; @@ -1840,13 +1860,12 @@ fil_read_flushed_lsn_and_arch_log_no( #ifndef UNIV_HOTBACKUP /*******************************************************************//** -Increments the count of pending insert buffer page merges, if space is not -being deleted. -@return TRUE if being deleted, and ibuf merges should be skipped */ +Increments the count of pending operation, if space is not being deleted. +@return TRUE if being deleted, and operation should be skipped */ UNIV_INTERN ibool -fil_inc_pending_ibuf_merges( -/*========================*/ +fil_inc_pending_ops( +/*================*/ ulint id) /*!< in: space id */ { fil_space_t* space; @@ -1857,18 +1876,18 @@ fil_inc_pending_ibuf_merges( if (space == NULL) { fprintf(stderr, - "InnoDB: Error: trying to do ibuf merge to a" + "InnoDB: Error: trying to do an operation on a" " dropped tablespace %lu\n", (ulong) id); } - if (space == NULL || space->stop_ibuf_merges) { + if (space == NULL || space->stop_new_ops) { mutex_exit(&fil_system->mutex); return(TRUE); } - space->n_pending_ibuf_merges++; + space->n_pending_ops++; mutex_exit(&fil_system->mutex); @@ -1876,11 +1895,11 @@ fil_inc_pending_ibuf_merges( } /*******************************************************************//** -Decrements the count of pending insert buffer page merges. */ +Decrements the count of pending operations. */ UNIV_INTERN void -fil_decr_pending_ibuf_merges( -/*=========================*/ +fil_decr_pending_ops( +/*=================*/ ulint id) /*!< in: space id */ { fil_space_t* space; @@ -1891,13 +1910,13 @@ fil_decr_pending_ibuf_merges( if (space == NULL) { fprintf(stderr, - "InnoDB: Error: decrementing ibuf merge of a" - " dropped tablespace %lu\n", + "InnoDB: Error: decrementing pending operation" + " of a dropped tablespace %lu\n", (ulong) id); } if (space != NULL) { - space->n_pending_ibuf_merges--; + space->n_pending_ops--; } mutex_exit(&fil_system->mutex); @@ -2187,15 +2206,15 @@ fil_delete_tablespace( char* path; ut_a(id != 0); -stop_ibuf_merges: +stop_new_ops: mutex_enter(&fil_system->mutex); space = fil_space_get_by_id(id); if (space != NULL) { - space->stop_ibuf_merges = TRUE; + space->stop_new_ops = TRUE; - if (space->n_pending_ibuf_merges == 0) { + if (space->n_pending_ops == 0) { mutex_exit(&fil_system->mutex); count = 0; @@ -2209,9 +2228,10 @@ stop_ibuf_merges: ut_print_filename(stderr, space->name); fprintf(stderr, ",\n" "InnoDB: but there are %lu pending" - " ibuf merges on it.\n" + " operations (most likely ibuf merges)" + " on it.\n" "InnoDB: Loop %lu.\n", - (ulong) space->n_pending_ibuf_merges, + (ulong) space->n_pending_ops, (ulong) count); } @@ -2220,7 +2240,7 @@ stop_ibuf_merges: os_thread_sleep(20000); count++; - goto stop_ibuf_merges; + goto stop_new_ops; } } @@ -2246,7 +2266,7 @@ try_again: } ut_a(space); - ut_a(space->n_pending_ibuf_merges == 0); + ut_a(space->n_pending_ops == 0); space->is_being_deleted = TRUE; @@ -2523,7 +2543,7 @@ fil_rename_tablespace( retry: count++; - if (count > 1000) { + if (!(count % 1000)) { ut_print_timestamp(stderr); fputs(" InnoDB: Warning: problems renaming ", stderr); ut_print_filename(stderr, old_name); @@ -3124,8 +3144,11 @@ fil_open_single_table_tablespace( accessing the first page of the file */ ulint id, /*!< in: space id */ ulint flags, /*!< in: tablespace flags */ - const char* name) /*!< in: table name in the + const char* name, /*!< in: table name in the databasename/tablename format */ + trx_t* trx) /*!< in: transaction. This is only used + for IMPORT TABLESPACE, must be NULL + otherwise */ { os_file_t file; char* filepath; @@ -3342,11 +3365,17 @@ skip_info: /* over write space id of all pages */ rec_offs_init(offsets_); + /* Unlock the data dictionary to not block queries + accessing other tables */ + ut_a(trx); + row_mysql_unlock_data_dictionary(trx); + fprintf(stderr, "InnoDB: Progress in %%:"); for (offset = 0; offset < free_limit_bytes; offset += zip_size ? zip_size : UNIV_PAGE_SIZE) { ibool page_is_corrupt; + ibool is_descr_page = FALSE; success = os_file_read(file, page, (ulint)(offset & 0xFFFFFFFFUL), @@ -3385,6 +3414,7 @@ skip_info: /* store as descr page */ memcpy(descr_page, page, (zip_size ? zip_size : UNIV_PAGE_SIZE)); + is_descr_page = TRUE; } else if (descr_is_corrupt) { /* unknown state of the page */ @@ -3461,7 +3491,8 @@ skip_info: } } - if (fil_page_get_type(page) == FIL_PAGE_INDEX) { + if (fil_page_get_type(page) == + FIL_PAGE_INDEX && !is_descr_page) { dulint tmp = mach_read_from_8(page + (PAGE_HEADER + PAGE_INDEX_ID)); for (i = 0; i < n_index; i++) { @@ -3543,6 +3574,9 @@ skip_write: fprintf(stderr, " done.\n"); + /* Reacquire the data dictionary lock */ + row_mysql_lock_data_dictionary(trx); + /* update SYS_INDEXES set root page */ index = dict_table_get_first_index(table); while (index) { @@ -3678,7 +3712,6 @@ func_exit: ulint page_no; ulint zip_size; ulint height; - ulint root_height = 0; rec_t* node_ptr; dict_table_t* table; dict_index_t* index; @@ -3717,7 +3750,6 @@ func_exit: if (height == ULINT_UNDEFINED) { height = btr_page_get_level(page, &mtr); - root_height = height; } if (height == 0) { @@ -3837,7 +3869,7 @@ convert_err_exit: level = btr_page_get_level(page, &mtr); - new_block = btr_page_alloc(index, 0, FSP_NO_DIR, level, &mtr); + new_block = btr_page_alloc(index, 0, FSP_NO_DIR, level, &mtr, &mtr); new_page = buf_block_get_frame(new_block); new_page_zip = buf_block_get_page_zip(new_block); btr_page_create(new_block, new_page_zip, index, level, &mtr); @@ -3885,7 +3917,7 @@ convert_err_exit: split_rec = page_get_middle_rec(page); new_block = btr_page_alloc(index, page_no + 1, FSP_UP, - btr_page_get_level(page, &mtr), &mtr); + btr_page_get_level(page, &mtr), &mtr, &mtr); new_page = buf_block_get_frame(new_block); new_page_zip = buf_block_get_page_zip(new_block); btr_page_create(new_block, new_page_zip, index, diff --git a/fsp/fsp0fsp.c b/fsp/fsp0fsp.c index c8e4f8e269c..1b437c226a7 100644 --- a/fsp/fsp0fsp.c +++ b/fsp/fsp0fsp.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -273,15 +273,13 @@ fseg_n_reserved_pages_low( /********************************************************************//** Marks a page used. The page must reside within the extents of the given segment. */ -static +static __attribute__((nonnull)) void fseg_mark_page_used( /*================*/ fseg_inode_t* seg_inode,/*!< in: segment inode */ - ulint space, /*!< in: space id */ - ulint zip_size,/*!< in: compressed page size in bytes - or 0 for uncompressed pages */ ulint page, /*!< in: page offset */ + xdes_t* descr, /* extent descriptor */ mtr_t* mtr); /*!< in: mtr */ /**********************************************************************//** Returns the first extent descriptor for a segment. We think of the extent @@ -312,28 +310,38 @@ fsp_fill_free_list( descriptor page and ibuf bitmap page; then we do not allocate more extents */ ulint space, /*!< in: space */ - fsp_header_t* header, /*!< in: space header */ - mtr_t* mtr); /*!< in: mtr */ + fsp_header_t* header, /*!< in/out: space header */ + mtr_t* mtr) /*!< in/out: mini-transaction */ + __attribute__((nonnull)); /**********************************************************************//** Allocates a single free page from a segment. This function implements the intelligent allocation strategy which tries to minimize file space fragmentation. -@return the allocated page number, FIL_NULL if no page could be allocated */ +@retval NULL if no page could be allocated +@retval block, rw_lock_x_lock_count(&block->lock) == 1 if allocation succeeded +(init_mtr == mtr, or the page was not previously freed in mtr) +@retval block (not allocated or initialized) otherwise */ static -ulint +buf_block_t* fseg_alloc_free_page_low( /*=====================*/ ulint space, /*!< in: space */ ulint zip_size,/*!< in: compressed page size in bytes or 0 for uncompressed pages */ - fseg_inode_t* seg_inode, /*!< in: segment inode */ - ulint hint, /*!< in: hint of which page would be desirable */ + fseg_inode_t* seg_inode, /*!< in/out: segment inode */ + ulint hint, /*!< in: hint of which page would be + desirable */ byte direction, /*!< in: if the new page is needed because of an index page split, and records are inserted there in order, into which direction they go alphabetically: FSP_DOWN, FSP_UP, FSP_NO_DIR */ - mtr_t* mtr); /*!< in: mtr handle */ + mtr_t* mtr, /*!< in/out: mini-transaction */ + mtr_t* init_mtr)/*!< in/out: mtr or another mini-transaction + in which the page should be initialized. + If init_mtr!=mtr, but the page is already + latched in mtr, do not initialize the page. */ + __attribute__((warn_unused_result, nonnull)); #endif /* !UNIV_HOTBACKUP */ /**********************************************************************//** @@ -703,23 +711,22 @@ xdes_calc_descriptor_index( /********************************************************************//** Gets pointer to a the extent descriptor of a page. The page where the extent -descriptor resides is x-locked. If the page offset is equal to the free limit -of the space, adds new extents from above the free limit to the space free -list, if not free limit == space size. This adding is necessary to make the -descriptor defined, as they are uninitialized above the free limit. +descriptor resides is x-locked. This function no longer extends the data +file. @return pointer to the extent descriptor, NULL if the page does not -exist in the space or if the offset exceeds the free limit */ -UNIV_INLINE +exist in the space or if the offset is >= the free limit */ +UNIV_INLINE __attribute__((nonnull, warn_unused_result)) xdes_t* xdes_get_descriptor_with_space_hdr( /*===============================*/ - fsp_header_t* sp_header,/*!< in/out: space header, x-latched */ - ulint space, /*!< in: space id */ - ulint offset, /*!< in: page offset; - if equal to the free limit, - we try to add new extents to - the space free list */ - mtr_t* mtr) /*!< in: mtr handle */ + fsp_header_t* sp_header, /*!< in/out: space header, x-latched + in mtr */ + ulint space, /*!< in: space id */ + ulint offset, /*!< in: page offset; if equal + to the free limit, we try to + add new extents to the space + free list */ + mtr_t* mtr) /*!< in/out: mini-transaction */ { ulint limit; ulint size; @@ -727,11 +734,9 @@ xdes_get_descriptor_with_space_hdr( ulint descr_page_no; page_t* descr_page; - ut_ad(mtr); ut_ad(mtr_memo_contains(mtr, fil_space_get_latch(space, NULL), MTR_MEMO_X_LOCK)); - ut_ad(mtr_memo_contains_page(mtr, sp_header, MTR_MEMO_PAGE_S_FIX) - || mtr_memo_contains_page(mtr, sp_header, MTR_MEMO_PAGE_X_FIX)); + ut_ad(mtr_memo_contains_page(mtr, sp_header, MTR_MEMO_PAGE_X_FIX)); ut_ad(page_offset(sp_header) == FSP_HEADER_OFFSET); /* Read free limit and space size */ limit = mach_read_from_4(sp_header + FSP_FREE_LIMIT); @@ -739,19 +744,10 @@ xdes_get_descriptor_with_space_hdr( zip_size = dict_table_flags_to_zip_size( mach_read_from_4(sp_header + FSP_SPACE_FLAGS)); - /* If offset is >= size or > limit, return NULL */ - - if ((offset >= size) || (offset > limit)) { - + if ((offset >= size) || (offset >= limit)) { return(NULL); } - /* If offset is == limit, fill free list of the space. */ - - if (offset == limit) { - fsp_fill_free_list(FALSE, space, sp_header, mtr); - } - descr_page_no = xdes_calc_descriptor_page(zip_size, offset); if (descr_page_no == 0) { @@ -781,7 +777,7 @@ is necessary to make the descriptor defined, as they are uninitialized above the free limit. @return pointer to the extent descriptor, NULL if the page does not exist in the space or if the offset exceeds the free limit */ -static +static __attribute__((nonnull, warn_unused_result)) xdes_t* xdes_get_descriptor( /*================*/ @@ -790,7 +786,7 @@ xdes_get_descriptor( or 0 for uncompressed pages */ ulint offset, /*!< in: page offset; if equal to the free limit, we try to add new extents to the space free list */ - mtr_t* mtr) /*!< in: mtr handle */ + mtr_t* mtr) /*!< in/out: mini-transaction */ { buf_block_t* block; fsp_header_t* sp_header; @@ -1174,14 +1170,14 @@ fsp_header_get_tablespace_size(void) Tries to extend a single-table tablespace so that a page would fit in the data file. @return TRUE if success */ -static +static __attribute__((nonnull, warn_unused_result)) ibool fsp_try_extend_data_file_with_pages( /*================================*/ ulint space, /*!< in: space */ ulint page_no, /*!< in: page number */ - fsp_header_t* header, /*!< in: space header */ - mtr_t* mtr) /*!< in: mtr */ + fsp_header_t* header, /*!< in/out: space header */ + mtr_t* mtr) /*!< in/out: mini-transaction */ { ibool success; ulint actual_size; @@ -1206,7 +1202,7 @@ fsp_try_extend_data_file_with_pages( /***********************************************************************//** Tries to extend the last data file of a tablespace if it is auto-extending. @return FALSE if not auto-extending */ -static +static __attribute__((nonnull)) ibool fsp_try_extend_data_file( /*=====================*/ @@ -1216,8 +1212,8 @@ fsp_try_extend_data_file( the actual file size rounded down to megabyte */ ulint space, /*!< in: space */ - fsp_header_t* header, /*!< in: space header */ - mtr_t* mtr) /*!< in: mtr */ + fsp_header_t* header, /*!< in/out: space header */ + mtr_t* mtr) /*!< in/out: mini-transaction */ { ulint size; ulint zip_size; @@ -1353,7 +1349,7 @@ fsp_fill_free_list( then we do not allocate more extents */ ulint space, /*!< in: space */ fsp_header_t* header, /*!< in/out: space header */ - mtr_t* mtr) /*!< in: mtr */ + mtr_t* mtr) /*!< in/out: mini-transaction */ { ulint limit; ulint size; @@ -1552,29 +1548,120 @@ fsp_alloc_free_extent( } /**********************************************************************//** -Allocates a single free page from a space. The page is marked as used. -@return the page offset, FIL_NULL if no page could be allocated */ +Allocates a single free page from a space. */ +static __attribute__((nonnull)) +void +fsp_alloc_from_free_frag( +/*=====================*/ + fsp_header_t* header, /*!< in/out: tablespace header */ + xdes_t* descr, /*!< in/out: extent descriptor */ + ulint bit, /*!< in: slot to allocate in the extent */ + mtr_t* mtr) /*!< in/out: mini-transaction */ +{ + ulint frag_n_used; + + ut_ad(xdes_get_state(descr, mtr) == XDES_FREE_FRAG); + ut_a(xdes_get_bit(descr, XDES_FREE_BIT, bit, mtr)); + xdes_set_bit(descr, XDES_FREE_BIT, bit, FALSE, mtr); + + /* Update the FRAG_N_USED field */ + frag_n_used = mtr_read_ulint(header + FSP_FRAG_N_USED, MLOG_4BYTES, + mtr); + frag_n_used++; + mlog_write_ulint(header + FSP_FRAG_N_USED, frag_n_used, MLOG_4BYTES, + mtr); + if (xdes_is_full(descr, mtr)) { + /* The fragment is full: move it to another list */ + flst_remove(header + FSP_FREE_FRAG, descr + XDES_FLST_NODE, + mtr); + xdes_set_state(descr, XDES_FULL_FRAG, mtr); + + flst_add_last(header + FSP_FULL_FRAG, descr + XDES_FLST_NODE, + mtr); + mlog_write_ulint(header + FSP_FRAG_N_USED, + frag_n_used - FSP_EXTENT_SIZE, MLOG_4BYTES, + mtr); + } +} + +/**********************************************************************//** +Gets a buffer block for an allocated page. + +NOTE: If init_mtr != mtr, the block will only be initialized if it was +not previously x-latched. It is assumed that the block has been +x-latched only by mtr, and freed in mtr in that case. + +@return block, initialized if init_mtr==mtr +or rw_lock_x_lock_count(&block->lock) == 1 */ static -ulint +buf_block_t* +fsp_page_create( +/*============*/ + ulint space, /*!< in: space id of the allocated page */ + ulint zip_size, /*!< in: compressed page size in bytes + or 0 for uncompressed pages */ + ulint page_no, /*!< in: page number of the allocated page */ + mtr_t* mtr, /*!< in: mini-transaction of the allocation */ + mtr_t* init_mtr) /*!< in: mini-transaction for initializing + the page */ +{ + buf_block_t* block + = buf_page_create(space, page_no, zip_size, init_mtr); +#ifdef UNIV_SYNC_DEBUG + ut_ad(mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX) + == rw_lock_own(&block->lock, RW_LOCK_EX)); +#endif /* UNIV_SYNC_DEBUG */ + + /* Mimic buf_page_get(), but avoid the buf_pool->page_hash lookup. */ + rw_lock_x_lock(&block->lock); + mutex_enter(&block->mutex); + buf_block_buf_fix_inc(block, __FILE__, __LINE__); + mutex_exit(&block->mutex); + mtr_memo_push(init_mtr, block, MTR_MEMO_PAGE_X_FIX); + + if (init_mtr == mtr + || rw_lock_get_x_lock_count(&block->lock) == 1) { + + /* Initialize the page, unless it was already + X-latched in mtr. (In this case, we would want to + allocate another page that has not been freed in mtr.) */ + ut_ad(init_mtr == mtr + || !mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX)); + + fsp_init_file_page(block, init_mtr); + } + + return(block); +} + +/**********************************************************************//** +Allocates a single free page from a space. The page is marked as used. +@retval NULL if no page could be allocated +@retval block, rw_lock_x_lock_count(&block->lock) == 1 if allocation succeeded +(init_mtr == mtr, or the page was not previously freed in mtr) +@retval block (not allocated or initialized) otherwise */ +static __attribute__((nonnull, warn_unused_result)) +buf_block_t* fsp_alloc_free_page( /*================*/ ulint space, /*!< in: space id */ ulint zip_size,/*!< in: compressed page size in bytes or 0 for uncompressed pages */ ulint hint, /*!< in: hint of which page would be desirable */ - mtr_t* mtr) /*!< in: mtr handle */ + mtr_t* mtr, /*!< in/out: mini-transaction */ + mtr_t* init_mtr)/*!< in/out: mini-transaction in which the + page should be initialized + (may be the same as mtr) */ { fsp_header_t* header; fil_addr_t first; xdes_t* descr; - buf_block_t* block; ulint free; - ulint frag_n_used; ulint page_no; ulint space_size; - ibool success; ut_ad(mtr); + ut_ad(init_mtr); header = fsp_get_space_header(space, zip_size, mtr); @@ -1601,7 +1688,7 @@ fsp_alloc_free_page( if (descr == NULL) { /* No free space left */ - return(FIL_NULL); + return(NULL); } xdes_set_state(descr, XDES_FREE_FRAG, mtr); @@ -1646,50 +1733,18 @@ fsp_alloc_free_page( " space size %lu. Page no %lu.\n", (ulong) space, (ulong) space_size, (ulong) page_no); - return(FIL_NULL); + return(NULL); } - success = fsp_try_extend_data_file_with_pages(space, page_no, - header, mtr); - if (!success) { + if (!fsp_try_extend_data_file_with_pages(space, page_no, + header, mtr)) { /* No disk space left */ - return(FIL_NULL); + return(NULL); } } - xdes_set_bit(descr, XDES_FREE_BIT, free, FALSE, mtr); + fsp_alloc_from_free_frag(header, descr, free, mtr); - /* Update the FRAG_N_USED field */ - frag_n_used = mtr_read_ulint(header + FSP_FRAG_N_USED, MLOG_4BYTES, - mtr); - frag_n_used++; - mlog_write_ulint(header + FSP_FRAG_N_USED, frag_n_used, MLOG_4BYTES, - mtr); - if (xdes_is_full(descr, mtr)) { - /* The fragment is full: move it to another list */ - flst_remove(header + FSP_FREE_FRAG, descr + XDES_FLST_NODE, - mtr); - xdes_set_state(descr, XDES_FULL_FRAG, mtr); - - flst_add_last(header + FSP_FULL_FRAG, descr + XDES_FLST_NODE, - mtr); - mlog_write_ulint(header + FSP_FRAG_N_USED, - frag_n_used - FSP_EXTENT_SIZE, MLOG_4BYTES, - mtr); - } - - /* Initialize the allocated page to the buffer pool, so that it can - be obtained immediately with buf_page_get without need for a disk - read. */ - - buf_page_create(space, page_no, zip_size, mtr); - - block = buf_page_get(space, zip_size, page_no, RW_X_LATCH, mtr); - buf_block_dbg_add_level(block, SYNC_FSP_PAGE); - - /* Prior contents of the page should be ignored */ - fsp_init_file_page(block, mtr); - - return(page_no); + return(fsp_page_create(space, zip_size, page_no, mtr, init_mtr)); } /**********************************************************************//** @@ -1728,6 +1783,9 @@ fsp_free_page( fputs("InnoDB: Dump of descriptor: ", stderr); ut_print_buf(stderr, ((byte*)descr) - 50, 200); putc('\n', stderr); + /* Crash in debug version, so that we get a core dump + of this corruption. */ + ut_ad(0); if (state == XDES_FREE) { /* We put here some fault tolerance: if the page @@ -1746,6 +1804,9 @@ fsp_free_page( "InnoDB: Dump of descriptor: ", (ulong) page); ut_print_buf(stderr, ((byte*)descr) - 50, 200); putc('\n', stderr); + /* Crash in debug version, so that we get a core dump + of this corruption. */ + ut_ad(0); /* We put here some fault tolerance: if the page is already free, return without doing anything! */ @@ -1780,6 +1841,8 @@ fsp_free_page( mtr); fsp_free_extent(space, zip_size, page, mtr); } + + mtr->n_freed_pages++; } /**********************************************************************//** @@ -1917,7 +1980,6 @@ fsp_alloc_seg_inode_page( fseg_inode_t* inode; buf_block_t* block; page_t* page; - ulint page_no; ulint space; ulint zip_size; ulint i; @@ -1928,15 +1990,15 @@ fsp_alloc_seg_inode_page( zip_size = dict_table_flags_to_zip_size( mach_read_from_4(FSP_SPACE_FLAGS + space_header)); - page_no = fsp_alloc_free_page(space, zip_size, 0, mtr); + block = fsp_alloc_free_page(space, zip_size, 0, mtr, mtr); - if (page_no == FIL_NULL) { + if (block == NULL) { return(FALSE); } - block = buf_page_get(space, zip_size, page_no, RW_X_LATCH, mtr); buf_block_dbg_add_level(block, SYNC_FSP_PAGE); + ut_ad(rw_lock_get_x_lock_count(&block->lock) == 1); block->check_index_page_at_flush = FALSE; @@ -2351,19 +2413,20 @@ fseg_create_general( } if (page == 0) { - page = fseg_alloc_free_page_low(space, zip_size, - inode, 0, FSP_UP, mtr); + block = fseg_alloc_free_page_low(space, zip_size, + inode, 0, FSP_UP, mtr, mtr); - if (page == FIL_NULL) { + if (block == NULL) { fsp_free_seg_inode(space, zip_size, inode, mtr); goto funct_exit; } - block = buf_page_get(space, zip_size, page, RW_X_LATCH, mtr); + ut_ad(rw_lock_get_x_lock_count(&block->lock) == 1); + header = byte_offset + buf_block_get_frame(block); - mlog_write_ulint(header - byte_offset + FIL_PAGE_TYPE, + mlog_write_ulint(buf_block_get_frame(block) + FIL_PAGE_TYPE, FIL_PAGE_TYPE_SYS, MLOG_2BYTES, mtr); } @@ -2540,8 +2603,10 @@ fseg_fill_free_list( Allocates a free extent for the segment: looks first in the free list of the segment, then tries to allocate from the space free list. NOTE that the extent returned still resides in the segment free list, it is not yet taken off it! -@return allocated extent, still placed in the segment free list, NULL -if could not be allocated */ +@retval NULL if no page could be allocated +@retval block, rw_lock_x_lock_count(&block->lock) == 1 if allocation succeeded +(init_mtr == mtr, or the page was not previously freed in mtr) +@retval block (not allocated or initialized) otherwise */ static xdes_t* fseg_alloc_free_extent( @@ -2593,22 +2658,30 @@ fseg_alloc_free_extent( Allocates a single free page from a segment. This function implements the intelligent allocation strategy which tries to minimize file space fragmentation. -@return the allocated page number, FIL_NULL if no page could be allocated */ +@retval NULL if no page could be allocated +@retval block, rw_lock_x_lock_count(&block->lock) == 1 if allocation succeeded +(init_mtr == mtr, or the page was not previously freed in mtr) +@retval block (not allocated or initialized) otherwise */ static -ulint +buf_block_t* fseg_alloc_free_page_low( /*=====================*/ ulint space, /*!< in: space */ ulint zip_size,/*!< in: compressed page size in bytes or 0 for uncompressed pages */ - fseg_inode_t* seg_inode, /*!< in: segment inode */ - ulint hint, /*!< in: hint of which page would be desirable */ + fseg_inode_t* seg_inode, /*!< in/out: segment inode */ + ulint hint, /*!< in: hint of which page would be + desirable */ byte direction, /*!< in: if the new page is needed because of an index page split, and records are inserted there in order, into which direction they go alphabetically: FSP_DOWN, FSP_UP, FSP_NO_DIR */ - mtr_t* mtr) /*!< in: mtr handle */ + mtr_t* mtr, /*!< in/out: mini-transaction */ + mtr_t* init_mtr)/*!< in/out: mtr or another mini-transaction + in which the page should be initialized. + If init_mtr!=mtr, but the page is already + latched in mtr, do not initialize the page. */ { fsp_header_t* space_header; ulint space_size; @@ -2619,7 +2692,6 @@ fseg_alloc_free_page_low( ulint ret_page; /*!< the allocated page offset, FIL_NULL if could not be allocated */ xdes_t* ret_descr; /*!< the extent of the allocated page */ - ibool frag_page_allocated = FALSE; ibool success; ulint n; @@ -2641,6 +2713,7 @@ fseg_alloc_free_page_low( if (descr == NULL) { /* Hint outside space or too high above free limit: reset hint */ + /* The file space header page is always allocated. */ hint = 0; descr = xdes_get_descriptor(space, zip_size, hint, mtr); } @@ -2652,15 +2725,19 @@ fseg_alloc_free_page_low( mtr), seg_id)) && (xdes_get_bit(descr, XDES_FREE_BIT, hint % FSP_EXTENT_SIZE, mtr) == TRUE)) { - +take_hinted_page: /* 1. We can take the hinted page =================================*/ ret_descr = descr; ret_page = hint; + /* Skip the check for extending the tablespace. If the + page hint were not within the size of the tablespace, + we would have got (descr == NULL) above and reset the hint. */ + goto got_hinted_page; /*-----------------------------------------------------------*/ - } else if ((xdes_get_state(descr, mtr) == XDES_FREE) - && ((reserved - used) < reserved / FSEG_FILLFACTOR) - && (used >= FSEG_FRAG_LIMIT)) { + } else if (xdes_get_state(descr, mtr) == XDES_FREE + && reserved - used < reserved / FSEG_FILLFACTOR + && used >= FSEG_FRAG_LIMIT) { /* 2. We allocate the free extent from space and can take ========================================================= @@ -2678,7 +2755,7 @@ fseg_alloc_free_page_low( /* Try to fill the segment free list */ fseg_fill_free_list(seg_inode, space, zip_size, hint + FSP_EXTENT_SIZE, mtr); - ret_page = hint; + goto take_hinted_page; /*-----------------------------------------------------------*/ } else if ((direction != FSP_NO_DIR) && ((reserved - used) < reserved / FSEG_FILLFACTOR) @@ -2727,7 +2804,7 @@ fseg_alloc_free_page_low( first = flst_get_first(seg_inode + FSEG_FREE, mtr); } else { ut_error; - return(FIL_NULL); + return(NULL); } ret_descr = xdes_lst_get_descriptor(space, zip_size, @@ -2739,20 +2816,23 @@ fseg_alloc_free_page_low( } else if (used < FSEG_FRAG_LIMIT) { /* 6. We allocate an individual page from the space ===================================================*/ - ret_page = fsp_alloc_free_page(space, zip_size, hint, mtr); - ret_descr = NULL; + buf_block_t* block = fsp_alloc_free_page( + space, zip_size, hint, mtr, init_mtr); - frag_page_allocated = TRUE; - - if (ret_page != FIL_NULL) { + if (block != NULL) { /* Put the page in the fragment page array of the segment */ n = fseg_find_free_frag_page_slot(seg_inode, mtr); - ut_a(n != FIL_NULL); + ut_a(n != ULINT_UNDEFINED); - fseg_set_nth_frag_page_no(seg_inode, n, ret_page, - mtr); + fseg_set_nth_frag_page_no( + seg_inode, n, buf_block_get_page_no(block), + mtr); } + + /* fsp_alloc_free_page() invoked fsp_init_file_page() + already. */ + return(block); /*-----------------------------------------------------------*/ } else { /* 7. We allocate a new extent and take its first page @@ -2770,7 +2850,7 @@ fseg_alloc_free_page_low( if (ret_page == FIL_NULL) { /* Page could not be allocated */ - return(FIL_NULL); + return(NULL); } if (space != 0) { @@ -2788,38 +2868,22 @@ fseg_alloc_free_page_low( " the space size %lu. Page no %lu.\n", (ulong) space, (ulong) space_size, (ulong) ret_page); - return(FIL_NULL); + return(NULL); } success = fsp_try_extend_data_file_with_pages( space, ret_page, space_header, mtr); if (!success) { /* No disk space left */ - return(FIL_NULL); + return(NULL); } } } - if (!frag_page_allocated) { - /* Initialize the allocated page to buffer pool, so that it - can be obtained immediately with buf_page_get without need - for a disk read */ - buf_block_t* block; - ulint zip_size = dict_table_flags_to_zip_size( - mach_read_from_4(FSP_SPACE_FLAGS + space_header)); - - block = buf_page_create(space, ret_page, zip_size, mtr); - buf_block_dbg_add_level(block, SYNC_FSP_PAGE); - - if (UNIV_UNLIKELY(block != buf_page_get(space, zip_size, - ret_page, RW_X_LATCH, - mtr))) { - ut_error; - } - - /* The prior contents of the page should be ignored */ - fsp_init_file_page(block, mtr); - +got_hinted_page: + /* ret_descr == NULL if the block was allocated from free_frag + (XDES_FREE_FRAG) */ + if (ret_descr != NULL) { /* At this point we know the extent and the page offset. The extent is still in the appropriate list (FSEG_NOT_FULL or FSEG_FREE), and the page is not yet marked as used. */ @@ -2829,25 +2893,31 @@ fseg_alloc_free_page_low( ut_ad(xdes_get_bit(ret_descr, XDES_FREE_BIT, ret_page % FSP_EXTENT_SIZE, mtr) == TRUE); - fseg_mark_page_used(seg_inode, space, zip_size, ret_page, mtr); + fseg_mark_page_used(seg_inode, ret_page, ret_descr, mtr); } - buf_reset_check_index_page_at_flush(space, ret_page); - - return(ret_page); + return(fsp_page_create( + space, dict_table_flags_to_zip_size( + mach_read_from_4(FSP_SPACE_FLAGS + + space_header)), + ret_page, mtr, init_mtr)); } /**********************************************************************//** Allocates a single free page from a segment. This function implements the intelligent allocation strategy which tries to minimize file space fragmentation. -@return allocated page offset, FIL_NULL if no page could be allocated */ +@retval NULL if no page could be allocated +@retval block, rw_lock_x_lock_count(&block->lock) == 1 if allocation succeeded +(init_mtr == mtr, or the page was not previously freed in mtr) +@retval block (not allocated or initialized) otherwise */ UNIV_INTERN -ulint +buf_block_t* fseg_alloc_free_page_general( /*=========================*/ - fseg_header_t* seg_header,/*!< in: segment header */ - ulint hint, /*!< in: hint of which page would be desirable */ + fseg_header_t* seg_header,/*!< in/out: segment header */ + ulint hint, /*!< in: hint of which page would be + desirable */ byte direction,/*!< in: if the new page is needed because of an index page split, and records are inserted there in order, into which @@ -2858,15 +2928,18 @@ fseg_alloc_free_page_general( with fsp_reserve_free_extents, then there is no need to do the check for this individual page */ - mtr_t* mtr) /*!< in: mtr handle */ + mtr_t* mtr, /*!< in/out: mini-transaction handle */ + mtr_t* init_mtr)/*!< in/out: mtr or another mini-transaction + in which the page should be initialized. + If init_mtr!=mtr, but the page is already + latched in mtr, do not initialize the page. */ { fseg_inode_t* inode; ulint space; ulint flags; ulint zip_size; rw_lock_t* latch; - ibool success; - ulint page_no; + buf_block_t* block; ulint n_reserved; space = page_get_space_id(page_align(seg_header)); @@ -2891,43 +2964,20 @@ fseg_alloc_free_page_general( inode = fseg_inode_get(seg_header, space, zip_size, mtr); - if (!has_done_reservation) { - success = fsp_reserve_free_extents(&n_reserved, space, 2, - FSP_NORMAL, mtr); - if (!success) { - return(FIL_NULL); - } + if (!has_done_reservation + && !fsp_reserve_free_extents(&n_reserved, space, 2, + FSP_NORMAL, mtr)) { + return(NULL); } - page_no = fseg_alloc_free_page_low(space, zip_size, - inode, hint, direction, mtr); + block = fseg_alloc_free_page_low(space, zip_size, + inode, hint, direction, + mtr, init_mtr); if (!has_done_reservation) { fil_space_release_free_extents(space, n_reserved); } - return(page_no); -} - -/**********************************************************************//** -Allocates a single free page from a segment. This function implements -the intelligent allocation strategy which tries to minimize file space -fragmentation. -@return allocated page offset, FIL_NULL if no page could be allocated */ -UNIV_INTERN -ulint -fseg_alloc_free_page( -/*=================*/ - fseg_header_t* seg_header,/*!< in: segment header */ - ulint hint, /*!< in: hint of which page would be desirable */ - byte direction,/*!< in: if the new page is needed because - of an index page split, and records are - inserted there in order, into which - direction they go alphabetically: FSP_DOWN, - FSP_UP, FSP_NO_DIR */ - mtr_t* mtr) /*!< in: mtr handle */ -{ - return(fseg_alloc_free_page_general(seg_header, hint, direction, - FALSE, mtr)); + return(block); } /**********************************************************************//** @@ -3249,27 +3299,21 @@ fsp_get_available_space_in_free_extents( /********************************************************************//** Marks a page used. The page must reside within the extents of the given segment. */ -static +static __attribute__((nonnull)) void fseg_mark_page_used( /*================*/ fseg_inode_t* seg_inode,/*!< in: segment inode */ - ulint space, /*!< in: space id */ - ulint zip_size,/*!< in: compressed page size in bytes - or 0 for uncompressed pages */ ulint page, /*!< in: page offset */ + xdes_t* descr, /* extent descriptor */ mtr_t* mtr) /*!< in: mtr */ { - xdes_t* descr; ulint not_full_n_used; - ut_ad(seg_inode && mtr); ut_ad(!((page_offset(seg_inode) - FSEG_ARR_OFFSET) % FSEG_INODE_SIZE)); ut_ad(mach_read_from_4(seg_inode + FSEG_MAGIC_N) == FSEG_MAGIC_N_VALUE); - descr = xdes_get_descriptor(space, zip_size, page, mtr); - ut_ad(mtr_read_ulint(seg_inode + FSEG_ID, MLOG_4BYTES, mtr) == mtr_read_ulint(descr + XDES_ID, MLOG_4BYTES, mtr)); @@ -3448,6 +3492,8 @@ crash: descr + XDES_FLST_NODE, mtr); fsp_free_extent(space, zip_size, page, mtr); } + + mtr->n_freed_pages++; } /**********************************************************************//** diff --git a/ha/ha0ha.c b/ha/ha0ha.c index 7f11917de0a..65046138275 100644 --- a/ha/ha0ha.c +++ b/ha/ha0ha.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -88,40 +88,6 @@ ha_create_func( return(table); } -/*************************************************************//** -Empties a hash table and frees the memory heaps. */ -UNIV_INTERN -void -ha_clear( -/*=====*/ - hash_table_t* table) /*!< in, own: hash table */ -{ - ulint i; - ulint n; - - ut_ad(table); - ut_ad(table->magic_n == HASH_TABLE_MAGIC_N); -#ifdef UNIV_SYNC_DEBUG - ut_ad(rw_lock_own(&btr_search_latch, RW_LOCK_EXCLUSIVE)); -#endif /* UNIV_SYNC_DEBUG */ - -#ifndef UNIV_HOTBACKUP - /* Free the memory heaps. */ - n = table->n_mutexes; - - for (i = 0; i < n; i++) { - mem_heap_free(table->heaps[i]); - } -#endif /* !UNIV_HOTBACKUP */ - - /* Clear the hash table. */ - n = hash_get_n_cells(table); - - for (i = 0; i < n; i++) { - hash_get_nth_cell(table, i)->node = NULL; - } -} - /*************************************************************//** Inserts an entry into a hash table. If an entry with the same fold number is found, its node is updated to point to the new data, and no new node @@ -140,7 +106,7 @@ ha_insert_for_fold_func( #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG buf_block_t* block, /*!< in: buffer block containing the data */ #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ - void* data) /*!< in: data, must not be NULL */ + const rec_t* data) /*!< in: data, must not be NULL */ { hash_cell_t* cell; ha_node_t* node; @@ -153,7 +119,11 @@ ha_insert_for_fold_func( #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG ut_a(block->frame == page_align(data)); #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ +#ifdef UNIV_SYNC_DEBUG + ut_ad(rw_lock_own(&btr_search_latch, RW_LOCK_EX)); +#endif /* UNIV_SYNC_DEBUG */ ASSERT_HASH_MUTEX_OWN(table, fold); + ut_ad(btr_search_enabled); hash = hash_calc_hash(fold, table); @@ -173,7 +143,6 @@ ha_insert_for_fold_func( prev_block->n_pointers--; block->n_pointers++; } - ut_ad(!btr_search_fully_disabled); # endif /* !UNIV_HOTBACKUP */ prev_node->block = block; @@ -186,13 +155,6 @@ ha_insert_for_fold_func( prev_node = prev_node->next; } - /* We are in the process of disabling hash index, do not add - new chain node */ - if (!btr_search_enabled) { - ut_ad(!btr_search_fully_disabled); - return(TRUE); - } - /* We have to allocate a new chain node */ node = mem_heap_alloc(hash_get_heap(table, fold), sizeof(ha_node_t)); @@ -250,6 +212,10 @@ ha_delete_hash_node( { ut_ad(table); ut_ad(table->magic_n == HASH_TABLE_MAGIC_N); +#ifdef UNIV_SYNC_DEBUG + ut_ad(rw_lock_own(&btr_search_latch, RW_LOCK_EX)); +#endif /* UNIV_SYNC_DEBUG */ + ut_ad(btr_search_enabled); #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG # ifndef UNIV_HOTBACKUP if (table->adaptive) { @@ -272,11 +238,11 @@ ha_search_and_update_if_found_func( /*===============================*/ hash_table_t* table, /*!< in/out: hash table */ ulint fold, /*!< in: folded value of the searched data */ - void* data, /*!< in: pointer to the data */ + const rec_t* data, /*!< in: pointer to the data */ #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG buf_block_t* new_block,/*!< in: block containing new_data */ #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ - void* new_data)/*!< in: new pointer to the data */ + const rec_t* new_data)/*!< in: new pointer to the data */ { ha_node_t* node; @@ -286,6 +252,13 @@ ha_search_and_update_if_found_func( #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG ut_a(new_block->frame == page_align(new_data)); #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ +#ifdef UNIV_SYNC_DEBUG + ut_ad(rw_lock_own(&btr_search_latch, RW_LOCK_EX)); +#endif /* UNIV_SYNC_DEBUG */ + + if (!btr_search_enabled) { + return; + } node = ha_search_with_data(table, fold, data); @@ -322,6 +295,10 @@ ha_remove_all_nodes_to_page( ut_ad(table); ut_ad(table->magic_n == HASH_TABLE_MAGIC_N); ASSERT_HASH_MUTEX_OWN(table, fold); +#ifdef UNIV_SYNC_DEBUG + ut_ad(rw_lock_own(&btr_search_latch, RW_LOCK_EX)); +#endif /* UNIV_SYNC_DEBUG */ + ut_ad(btr_search_enabled); node = ha_chain_get_first(table, fold); diff --git a/handler/ha_innodb.cc b/handler/ha_innodb.cc index def6e58c8a6..1279a3da4c1 100644 --- a/handler/ha_innodb.cc +++ b/handler/ha_innodb.cc @@ -26,8 +26,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -198,6 +198,9 @@ static my_bool innobase_rollback_on_timeout = FALSE; static my_bool innobase_create_status_file = FALSE; static my_bool innobase_stats_on_metadata = TRUE; static my_bool innobase_use_sys_stats_table = FALSE; +#ifdef UNIV_DEBUG +static ulong innobase_sys_stats_root_page = 0; +#endif static my_bool innobase_buffer_pool_shm_checksum = TRUE; static uint innobase_buffer_pool_shm_key = 0; @@ -795,6 +798,12 @@ thd_to_trx( return(*(trx_t**) thd_ha_data(thd, innodb_hton_ptr)); } +my_bool +ha_innobase::is_fake_change_enabled(THD* thd) +{ + trx_t* trx = thd_to_trx(thd); + return (trx && trx->fake_changes); +} /********************************************************************//** Call this function when mysqld passes control to the client. That is to avoid deadlocks on the adaptive hash S-latch possibly held by thd. For more @@ -941,17 +950,32 @@ convert_error_code_to_mysql( case DB_OUT_OF_FILE_SPACE: return(HA_ERR_RECORD_FILE_FULL); + case DB_TABLE_IN_FK_CHECK: + return(HA_ERR_TABLE_IN_FK_CHECK); + case DB_TABLE_IS_BEING_USED: return(HA_ERR_WRONG_COMMAND); case DB_TABLE_NOT_FOUND: return(HA_ERR_NO_SUCH_TABLE); - case DB_TOO_BIG_RECORD: - my_error(ER_TOO_BIG_ROWSIZE, MYF(0), - page_get_free_space_of_empty(flags - & DICT_TF_COMPACT) / 2); + case DB_TOO_BIG_RECORD: { + /* If prefix is true then a 768-byte prefix is stored + locally for BLOB fields. Refer to dict_table_get_format() */ + bool prefix = ((flags & DICT_TF_FORMAT_MASK) + >> DICT_TF_FORMAT_SHIFT) < UNIV_FORMAT_B; + my_printf_error(ER_TOO_BIG_ROWSIZE, + "Row size too large (> %lu). Changing some columns " + "to TEXT or BLOB %smay help. In current row " + "format, BLOB prefix of %d bytes is stored inline.", + MYF(0), + page_get_free_space_of_empty(flags & + DICT_TF_COMPACT) / 2, + prefix ? "or using ROW_FORMAT=DYNAMIC " + "or ROW_FORMAT=COMPRESSED ": "", + prefix ? DICT_MAX_INDEX_COL_LEN : 0); return(HA_ERR_TO_BIG_ROW); + } case DB_NO_SAVEPOINT: return(HA_ERR_NO_SAVEPOINT); @@ -1111,6 +1135,20 @@ innobase_get_charset( return(thd_charset((THD*) mysql_thd)); } +/**********************************************************************//** +Get the current setting of the lower_case_table_names global parameter from +mysqld.cc. We do a dirty read because for one there is no synchronization +object and secondly there is little harm in doing so even if we get a torn +read. +@return value of lower_case_table_names */ +ulint +innobase_get_lower_case_table_names(void) +/*=====================================*/ +{ + return(lower_case_table_names); +} + + /**********************************************************************//** Determines the current SQL statement. @return SQL statement string */ @@ -2363,6 +2401,10 @@ mem_free_and_error: srv_use_sys_stats_table = (ibool) innobase_use_sys_stats_table; +#ifdef UNIV_DEBUG + srv_sys_stats_root_page = innobase_sys_stats_root_page; +#endif + /* -------------- Log files ---------------------------*/ /* The default dir for log files is the datadir of MySQL */ @@ -2651,7 +2693,6 @@ skip_overwrite: /* Get the current high water mark format. */ innobase_file_format_check = (char*) trx_sys_file_format_max_get(); - btr_search_fully_disabled = (!btr_search_enabled); DBUG_RETURN(FALSE); error: DBUG_RETURN(TRUE); @@ -3381,52 +3422,140 @@ ha_innobase::primary_key_is_clustered() return(true); } +/** Always normalize table name to lower case on Windows */ +#ifdef __WIN__ +#define normalize_table_name(norm_name, name) \ + normalize_table_name_low(norm_name, name, TRUE) +#else +#define normalize_table_name(norm_name, name) \ + normalize_table_name_low(norm_name, name, FALSE) +#endif /* __WIN__ */ + /*****************************************************************//** Normalizes a table name string. A normalized name consists of the database name catenated to '/' and table name. An example: test/mytable. On Windows normalization puts both the database name and the -table name always to lower case. */ +table name always to lower case if "set_lower_case" is set to TRUE. */ static void -normalize_table_name( -/*=================*/ +normalize_table_name_low( +/*=====================*/ char* norm_name, /*!< out: normalized name as a null-terminated string */ - const char* name) /*!< in: table name string */ + const char* name, /*!< in: table name string */ + ibool set_lower_case) /*!< in: TRUE if we want to set + name to lower case */ { char* name_ptr; char* db_ptr; + ulint db_len; char* ptr; /* Scan name from the end */ - ptr = strend(name)-1; + ptr = strend(name) - 1; + /* seek to the last path separator */ while (ptr >= name && *ptr != '\\' && *ptr != '/') { ptr--; } name_ptr = ptr + 1; - DBUG_ASSERT(ptr > name); + /* skip any number of path separators */ + while (ptr >= name && (*ptr == '\\' || *ptr == '/')) { + ptr--; + } - ptr--; + DBUG_ASSERT(ptr >= name); + /* seek to the last but one path separator or one char before + the beginning of name */ + db_len = 0; while (ptr >= name && *ptr != '\\' && *ptr != '/') { ptr--; + db_len++; } db_ptr = ptr + 1; - memcpy(norm_name, db_ptr, strlen(name) + 1 - (db_ptr - name)); + memcpy(norm_name, db_ptr, db_len); - norm_name[name_ptr - db_ptr - 1] = '/'; + norm_name[db_len] = '/'; -#ifdef __WIN__ - innobase_casedn_str(norm_name); -#endif + memcpy(norm_name + db_len + 1, name_ptr, strlen(name_ptr) + 1); + + if (set_lower_case) { + innobase_casedn_str(norm_name); + } } +#if !defined(DBUG_OFF) +/********************************************************************* +Test normalize_table_name_low(). */ +static +void +test_normalize_table_name_low() +/*===========================*/ +{ + char norm_name[128]; + const char* test_data[][2] = { + /* input, expected result */ + {"./mysqltest/t1", "mysqltest/t1"}, + {"./test/#sql-842b_2", "test/#sql-842b_2"}, + {"./test/#sql-85a3_10", "test/#sql-85a3_10"}, + {"./test/#sql2-842b-2", "test/#sql2-842b-2"}, + {"./test/bug29807", "test/bug29807"}, + {"./test/foo", "test/foo"}, + {"./test/innodb_bug52663", "test/innodb_bug52663"}, + {"./test/t", "test/t"}, + {"./test/t1", "test/t1"}, + {"./test/t10", "test/t10"}, + {"/a/b/db/table", "db/table"}, + {"/a/b/db///////table", "db/table"}, + {"/a/b////db///////table", "db/table"}, + {"/var/tmp/mysqld.1/#sql842b_2_10", "mysqld.1/#sql842b_2_10"}, + {"db/table", "db/table"}, + {"ddd/t", "ddd/t"}, + {"d/ttt", "d/ttt"}, + {"d/t", "d/t"}, + {".\\mysqltest\\t1", "mysqltest/t1"}, + {".\\test\\#sql-842b_2", "test/#sql-842b_2"}, + {".\\test\\#sql-85a3_10", "test/#sql-85a3_10"}, + {".\\test\\#sql2-842b-2", "test/#sql2-842b-2"}, + {".\\test\\bug29807", "test/bug29807"}, + {".\\test\\foo", "test/foo"}, + {".\\test\\innodb_bug52663", "test/innodb_bug52663"}, + {".\\test\\t", "test/t"}, + {".\\test\\t1", "test/t1"}, + {".\\test\\t10", "test/t10"}, + {"C:\\a\\b\\db\\table", "db/table"}, + {"C:\\a\\b\\db\\\\\\\\\\\\\\table", "db/table"}, + {"C:\\a\\b\\\\\\\\db\\\\\\\\\\\\\\table", "db/table"}, + {"C:\\var\\tmp\\mysqld.1\\#sql842b_2_10", "mysqld.1/#sql842b_2_10"}, + {"db\\table", "db/table"}, + {"ddd\\t", "ddd/t"}, + {"d\\ttt", "d/ttt"}, + {"d\\t", "d/t"}, + }; + + for (size_t i = 0; i < UT_ARR_SIZE(test_data); i++) { + printf("test_normalize_table_name_low(): " + "testing \"%s\", expected \"%s\"... ", + test_data[i][0], test_data[i][1]); + + normalize_table_name_low(norm_name, test_data[i][0], FALSE); + + if (strcmp(norm_name, test_data[i][1]) == 0) { + printf("ok\n"); + } else { + printf("got \"%s\"\n", norm_name); + ut_error; + } + } +} +#endif /* !DBUG_OFF */ + /********************************************************************//** Get the upper limit of the MySQL integral and floating-point type. @return maximum allowed value for the field */ @@ -3818,6 +3947,8 @@ ha_innobase::open( THD* thd; ulint retries = 0; char* is_part = NULL; + ibool par_case_name_set = FALSE; + char par_case_name[MAX_FULL_NAME_LEN + 1]; DBUG_ENTER("ha_innobase::open"); @@ -3870,11 +4001,16 @@ ha_innobase::open( workaround for http://bugs.mysql.com/bug.php?id=33349. Look at support issue https://support.mysql.com/view.php?id=21080 for more details. */ +#ifdef __WIN__ + is_part = strstr(norm_name, "#p#"); +#else is_part = strstr(norm_name, "#P#"); +#endif /* __WIN__ */ + retry: /* Get pointer to a table object in InnoDB dictionary cache */ ib_table = dict_table_get(norm_name, TRUE); - + if (srv_pass_corrupt_table <= 1 && ib_table && ib_table->is_corrupt) { free_share(share); my_free(upd_buff, MYF(0)); @@ -3884,15 +4020,77 @@ retry: share->ib_table = ib_table; - - - - if (NULL == ib_table) { if (is_part && retries < 10) { - ++retries; - os_thread_sleep(100000); - goto retry; + /* MySQL partition engine hard codes the file name + separator as "#P#". The text case is fixed even if + lower_case_table_names is set to 1 or 2. This is true + for sub-partition names as well. InnoDB always + normalises file names to lower case on Windows, this + can potentially cause problems when copying/moving + tables between platforms. + + 1) If boot against an installation from Windows + platform, then its partition table name could + be all be in lower case in system tables. So we + will need to check lower case name when load table. + + 2) If we boot an installation from other case + sensitive platform in Windows, we might need to + check the existence of table name without lowering + case them in the system table. */ + if (innobase_get_lower_case_table_names() == 1) { + + if (!par_case_name_set) { +#ifndef __WIN__ + /* Check for the table using lower + case name, including the partition + separator "P" */ + memcpy(par_case_name, norm_name, + strlen(norm_name)); + par_case_name[strlen(norm_name)] = 0; + innobase_casedn_str(par_case_name); +#else + /* On Windows platfrom, check + whether there exists table name in + system table whose name is + not being normalized to lower case */ + normalize_table_name_low( + par_case_name, name, FALSE); +#endif + par_case_name_set = TRUE; + } + + ib_table = dict_table_get( + par_case_name, FALSE); + } + if (!ib_table) { + ++retries; + os_thread_sleep(100000); + goto retry; + } else { +#ifndef __WIN__ + sql_print_warning("Partition table %s opened " + "after converting to lower " + "case. The table may have " + "been moved from a case " + "in-sensitive file system. " + "Please recreate table in " + "the current file system\n", + norm_name); +#else + sql_print_warning("Partition table %s opened " + "after skipping the step to " + "lower case the table name. " + "The table may have been " + "moved from a case sensitive " + "file system. Please " + "recreate table in the " + "current file system\n", + norm_name); +#endif + goto table_opened; + } } if (is_part) { @@ -3923,6 +4121,8 @@ retry: DBUG_RETURN(HA_ERR_NO_SUCH_TABLE); } +table_opened: + if (ib_table->ibd_file_missing && !thd_tablespace_op(thd)) { sql_print_error("MySQL is trying to open a table handle but " "the .ibd file for\ntable %s does not exist.\n" @@ -4101,6 +4301,27 @@ retry: DBUG_RETURN(0); } +UNIV_INTERN +handler* +ha_innobase::clone( +/*===============*/ + const char* name, /*!< in: table name */ + MEM_ROOT* mem_root) /*!< in: memory context */ +{ + ha_innobase* new_handler; + + DBUG_ENTER("ha_innobase::clone"); + + new_handler = static_cast(handler::clone(name, + mem_root)); + if (new_handler) { + new_handler->prebuilt->select_lock_type + = prebuilt->select_lock_type; + } + + DBUG_RETURN(new_handler); +} + UNIV_INTERN uint ha_innobase::max_supported_key_part_length() const @@ -5193,8 +5414,7 @@ no_commit: switch (sql_command) { case SQLCOM_LOAD: - if ((trx->duplicates - & (TRX_DUP_IGNORE | TRX_DUP_REPLACE))) { + if (trx->duplicates) { goto set_max_autoinc; } @@ -5375,14 +5595,15 @@ calc_row_difference( /* The field has changed */ ufield = uvect->fields + n_changed; + UNIV_MEM_INVALID(ufield, sizeof *ufield); /* Let us use a dummy dfield to make the conversion from the MySQL column format to the InnoDB format */ - dict_col_copy_type(prebuilt->table->cols + i, - dfield_get_type(&dfield)); - if (n_len != UNIV_SQL_NULL) { + dict_col_copy_type(prebuilt->table->cols + i, + dfield_get_type(&dfield)); + buf = row_mysql_store_col_in_innobase_format( &dfield, (byte*)buf, @@ -5390,7 +5611,7 @@ calc_row_difference( new_mysql_row_col, col_pack_len, dict_table_is_comp(prebuilt->table)); - dfield_copy_data(&ufield->new_val, &dfield); + dfield_copy(&ufield->new_val, &dfield); } else { dfield_set_null(&ufield->new_val); } @@ -5477,8 +5698,7 @@ ha_innobase::update_row( && table->next_number_field && new_row == table->record[0] && thd_sql_command(user_thd) == SQLCOM_INSERT - && (trx->duplicates & (TRX_DUP_IGNORE | TRX_DUP_REPLACE)) - == TRX_DUP_IGNORE) { + && trx->duplicates) { ulonglong auto_inc; ulonglong col_max_value; @@ -5824,6 +6044,7 @@ ha_innobase::index_read( DBUG_ENTER("index_read"); ut_a(prebuilt->trx == thd_to_trx(user_thd)); + ut_ad(key_len != 0 || find_flag != HA_READ_KEY_EXACT); ha_statistic_increment(&SSV::ha_read_key_count); @@ -5860,6 +6081,7 @@ ha_innobase::index_read( (byte*) key_ptr, (ulint) key_len, prebuilt->trx); + DBUG_ASSERT(prebuilt->search_tuple->n_fields > 0); } else { /* We position the cursor to the last or the first entry in the index */ @@ -5961,7 +6183,6 @@ ha_innobase::innobase_get_index( dict_index_t* index = 0; DBUG_ENTER("innobase_get_index"); - ha_statistic_increment(&SSV::ha_read_key_count); if (keynr != MAX_KEY && table->s->keys > 0) { key = table->key_info + keynr; @@ -7000,6 +7221,8 @@ ha_innobase::create( DBUG_RETURN(HA_ERR_TO_BIG_ROW); } + ut_a(strlen(name) < sizeof(name2)); + strcpy(name2, name); normalize_table_name(norm_name, name2); @@ -7432,6 +7655,11 @@ ha_innobase::delete_table( DBUG_ENTER("ha_innobase::delete_table"); + DBUG_EXECUTE_IF( + "test_normalize_table_name_low", + test_normalize_table_name_low(); + ); + /* Strangely, MySQL passes the table name without the '.frm' extension, in contrast to ::create */ normalize_table_name(norm_name, name); @@ -7772,6 +8000,9 @@ ha_innobase::records_in_range( (const uchar*) 0), (ulint) (min_key ? min_key->length : 0), prebuilt->trx); + DBUG_ASSERT(min_key + ? range_start->n_fields > 0 + : range_start->n_fields == 0); row_sel_convert_mysql_key_to_innobase( range_end, (byte*) key_val_buff2, @@ -7780,6 +8011,9 @@ ha_innobase::records_in_range( (const uchar*) 0), (ulint) (max_key ? max_key->length : 0), prebuilt->trx); + DBUG_ASSERT(max_key + ? range_end->n_fields > 0 + : range_end->n_fields == 0); mode1 = convert_search_mode_to_innobase(min_key ? min_key->flag : HA_READ_KEY_EXACT); @@ -8501,7 +8735,7 @@ ha_innobase::check( /* Enlarge the fatal lock wait timeout during CHECK TABLE. */ mutex_enter(&kernel_mutex); - srv_fatal_semaphore_wait_threshold += 7200; /* 2 hours */ + srv_fatal_semaphore_wait_threshold += SRV_SEMAPHORE_WAIT_EXTENSION; mutex_exit(&kernel_mutex); for (index = dict_table_get_first_index(prebuilt->table); @@ -8597,7 +8831,7 @@ ha_innobase::check( /* Restore the fatal lock wait timeout after CHECK TABLE. */ mutex_enter(&kernel_mutex); - srv_fatal_semaphore_wait_threshold -= 7200; /* 2 hours */ + srv_fatal_semaphore_wait_threshold -= SRV_SEMAPHORE_WAIT_EXTENSION; mutex_exit(&kernel_mutex); prebuilt->trx->op_info = ""; @@ -8962,6 +9196,7 @@ ha_innobase::extra( break; case HA_EXTRA_RESET_STATE: reset_template(prebuilt); + thd_to_trx(ha_thd())->duplicates = 0; break; case HA_EXTRA_NO_KEYREAD: prebuilt->read_just_key = 0; @@ -8979,19 +9214,18 @@ ha_innobase::extra( parameters below. We must not invoke update_thd() either, because the calling threads may change. CAREFUL HERE, OR MEMORY CORRUPTION MAY OCCUR! */ - case HA_EXTRA_IGNORE_DUP_KEY: + case HA_EXTRA_INSERT_WITH_UPDATE: thd_to_trx(ha_thd())->duplicates |= TRX_DUP_IGNORE; break; + case HA_EXTRA_NO_IGNORE_DUP_KEY: + thd_to_trx(ha_thd())->duplicates &= ~TRX_DUP_IGNORE; + break; case HA_EXTRA_WRITE_CAN_REPLACE: thd_to_trx(ha_thd())->duplicates |= TRX_DUP_REPLACE; break; case HA_EXTRA_WRITE_CANNOT_REPLACE: thd_to_trx(ha_thd())->duplicates &= ~TRX_DUP_REPLACE; break; - case HA_EXTRA_NO_IGNORE_DUP_KEY: - thd_to_trx(ha_thd())->duplicates &= - ~(TRX_DUP_IGNORE | TRX_DUP_REPLACE); - break; default:/* Do nothing */ ; } @@ -11420,7 +11654,7 @@ static MYSQL_SYSVAR_BOOL(doublewrite, innobase_use_doublewrite, static MYSQL_SYSVAR_ULONG(io_capacity, srv_io_capacity, PLUGIN_VAR_RQCMDARG, "Number of IOPs the server can do. Tunes the background IO rate", - NULL, NULL, 200, 100, ~0L, 0); + NULL, NULL, 200, 100, ~0UL, 0); static MYSQL_SYSVAR_ULONG(fast_shutdown, innobase_fast_shutdown, PLUGIN_VAR_OPCMDARG, @@ -11508,7 +11742,7 @@ static MYSQL_SYSVAR_BOOL(adaptive_flushing, srv_adaptive_flushing, static MYSQL_SYSVAR_ULONG(max_purge_lag, srv_max_purge_lag, PLUGIN_VAR_RQCMDARG, "Desired maximum length of the purge queue (0 = no limit)", - NULL, NULL, 0, 0, ~0L, 0); + NULL, NULL, 0, 0, ~0UL, 0); static MYSQL_SYSVAR_BOOL(rollback_on_timeout, innobase_rollback_on_timeout, PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY, @@ -11550,6 +11784,13 @@ static MYSQL_SYSVAR_BOOL(use_sys_stats_table, innobase_use_sys_stats_table, "So you should use ANALYZE TABLE command intentionally.", NULL, NULL, FALSE); +#ifdef UNIV_DEBUG +static MYSQL_SYSVAR_ULONG(persistent_stats_root_page, + innobase_sys_stats_root_page, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, + "Override the SYS_STATS root page id, 0 = no override (for testing only)", + NULL, NULL, 0, 0, ULONG_MAX, 0); +#endif + static MYSQL_SYSVAR_BOOL(adaptive_hash_index, btr_search_enabled, PLUGIN_VAR_OPCMDARG, "Enable InnoDB adaptive hash index (enabled by default). " @@ -11595,7 +11836,7 @@ static MYSQL_SYSVAR_ULONG(commit_concurrency, innobase_commit_concurrency, static MYSQL_SYSVAR_ULONG(concurrency_tickets, srv_n_free_tickets_to_enter, PLUGIN_VAR_RQCMDARG, "Number of times a thread is allowed to enter InnoDB within the same SQL query after it has once got the ticket", - NULL, NULL, 500L, 1L, ~0L, 0); + NULL, NULL, 500L, 1L, ~0UL, 0); static MYSQL_SYSVAR_LONG(kill_idle_transaction, srv_kill_idle_transaction, PLUGIN_VAR_RQCMDARG, @@ -11666,12 +11907,12 @@ static MYSQL_SYSVAR_LONG(open_files, innobase_open_files, static MYSQL_SYSVAR_ULONG(sync_spin_loops, srv_n_spin_wait_rounds, PLUGIN_VAR_RQCMDARG, "Count of spin-loop rounds in InnoDB mutexes (30 by default)", - NULL, NULL, 30L, 0L, ~0L, 0); + NULL, NULL, 30L, 0L, ~0UL, 0); static MYSQL_SYSVAR_ULONG(spin_wait_delay, srv_spin_wait_delay, PLUGIN_VAR_OPCMDARG, "Maximum delay between polling for a spin lock (6 by default)", - NULL, NULL, 6L, 0L, ~0L, 0); + NULL, NULL, 6L, 0L, ~0UL, 0); static MYSQL_SYSVAR_BOOL(thread_concurrency_timer_based, innobase_thread_concurrency_timer_based, @@ -11687,7 +11928,7 @@ static MYSQL_SYSVAR_ULONG(thread_concurrency, srv_thread_concurrency, static MYSQL_SYSVAR_ULONG(thread_sleep_delay, srv_thread_sleep_delay, PLUGIN_VAR_RQCMDARG, "Time of innodb thread sleeping before joining InnoDB queue (usec). Value 0 disable a sleep", - NULL, NULL, 10000L, 0L, ~0L, 0); + NULL, NULL, 10000L, 0L, ~0UL, 0); static MYSQL_SYSVAR_STR(data_file_path, innobase_data_file_path, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, @@ -11734,6 +11975,18 @@ static MYSQL_SYSVAR_ENUM(stats_method, srv_innodb_stats_method, "NULLS_UNEQUAL and NULLS_IGNORED", NULL, NULL, SRV_STATS_NULLS_EQUAL, &innodb_stats_method_typelib); +static MYSQL_SYSVAR_BOOL(track_changed_pages, srv_track_changed_pages, + PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY, + "Track the redo log for changed pages and output a changed page bitmap", + NULL, NULL, FALSE); + +static MYSQL_SYSVAR_ULONGLONG(changed_pages_limit, srv_changed_pages_limit, + PLUGIN_VAR_RQCMDARG, + "The maximum number of rows for " + "INFORMATION_SCHEMA.INNODB_CHANGED_PAGES table, " + "0 - unlimited", + NULL, NULL, 1000000, 0, ~0ULL, 0); + #if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG static MYSQL_SYSVAR_UINT(change_buffering_debug, ibuf_debug, PLUGIN_VAR_RQCMDARG, @@ -11870,7 +12123,7 @@ static MYSQL_SYSVAR_UINT(auto_lru_dump, srv_auto_lru_dump, NULL, NULL, 0, 0, UINT_MAX32, 0); static MYSQL_SYSVAR_BOOL(blocking_lru_restore, innobase_blocking_lru_restore, - PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY, + PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY, "Block XtraDB startup process until buffer pool is full restored from a " "dump file (if present). Disabled by default.", NULL, NULL, FALSE); @@ -11889,6 +12142,13 @@ static MYSQL_SYSVAR_ULONG(lazy_drop_table, srv_lazy_drop_table, "e.g. for http://bugs.mysql.com/51325", NULL, NULL, 0, 0, 1, 0); +#ifdef UNIV_DEBUG +static MYSQL_SYSVAR_UINT(trx_rseg_n_slots_debug, trx_rseg_n_slots_debug, + PLUGIN_VAR_RQCMDARG, + "Debug flags for InnoDB to limit TRX_RSEG_N_SLOTS for trx_rsegf_undo_find_free()", + NULL, NULL, 0, 0, 1024, 0); +#endif /* UNIV_DEBUG */ + static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(page_size), MYSQL_SYSVAR(log_block_size), @@ -11942,6 +12202,9 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(stats_auto_update), MYSQL_SYSVAR(stats_update_need_lock), MYSQL_SYSVAR(use_sys_stats_table), +#ifdef UNIV_DEBUG + MYSQL_SYSVAR(persistent_stats_root_page), +#endif MYSQL_SYSVAR(stats_sample_pages), MYSQL_SYSVAR(adaptive_hash_index), MYSQL_SYSVAR(stats_method), @@ -11973,6 +12236,8 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(dict_size_limit), MYSQL_SYSVAR(use_sys_malloc), MYSQL_SYSVAR(change_buffering), + MYSQL_SYSVAR(track_changed_pages), + MYSQL_SYSVAR(changed_pages_limit), #if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG MYSQL_SYSVAR(change_buffering_debug), #endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */ @@ -11985,6 +12250,9 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(pass_corrupt_table), MYSQL_SYSVAR(lazy_drop_table), MYSQL_SYSVAR(fake_changes), +#ifdef UNIV_DEBUG + MYSQL_SYSVAR(trx_rseg_n_slots_debug), +#endif /* UNIV_DEBUG */ NULL }; @@ -12020,7 +12288,10 @@ i_s_innodb_admin_command, i_s_innodb_sys_tables, i_s_innodb_sys_indexes, i_s_innodb_sys_stats, -i_s_innodb_patches +i_s_innodb_changed_pages, +i_s_innodb_buffer_page, +i_s_innodb_buffer_page_lru, +i_s_innodb_buffer_stats mysql_declare_plugin_end; /** @brief Initialize the default value of innodb_commit_concurrency. diff --git a/handler/ha_innodb.h b/handler/ha_innodb.h index bfe7432b32d..d04fe24cf79 100644 --- a/handler/ha_innodb.h +++ b/handler/ha_innodb.h @@ -133,9 +133,11 @@ class ha_innobase: public handler const key_map* keys_to_use_for_scanning(); int open(const char *name, int mode, uint test_if_locked); + handler* clone(const char *name, MEM_ROOT *mem_root); int close(void); double scan_time(); double read_time(uint index, uint ranges, ha_rows rows); + my_bool is_fake_change_enabled(THD *thd); bool is_corrupt() const; int write_row(uchar * buf); diff --git a/handler/handler0alter.cc b/handler/handler0alter.cc index 37fddf71cbc..c746f65bf14 100644 --- a/handler/handler0alter.cc +++ b/handler/handler0alter.cc @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 2005, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -668,6 +668,10 @@ ha_innobase::add_index( DBUG_RETURN(HA_ERR_NO_SUCH_TABLE); } + if (innodb_table->tablespace_discarded) { + DBUG_RETURN(-1); + } + /* Check that index keys are sensible */ error = innobase_check_index_keys(key_info, num_of_keys, innodb_table); @@ -823,6 +827,8 @@ ha_innobase::add_index( innodb_table, indexed_table, index, num_of_idx, table); + DBUG_EXECUTE_IF("crash_innodb_add_index_after", DBUG_SUICIDE();); + error_handling: /* After an error, remove all those index definitions from the dictionary which were defined. */ @@ -1024,7 +1030,9 @@ ha_innobase::prepare_drop_index( goto func_exit; } + rw_lock_x_lock(dict_index_get_lock(index)); index->to_be_dropped = TRUE; + rw_lock_x_unlock(dict_index_get_lock(index)); } /* If FOREIGN_KEY_CHECKS = 1 you may not drop an index defined @@ -1143,7 +1151,9 @@ func_exit: = dict_table_get_first_index(prebuilt->table); do { + rw_lock_x_lock(dict_index_get_lock(index)); index->to_be_dropped = FALSE; + rw_lock_x_unlock(dict_index_get_lock(index)); index = dict_table_get_next_index(index); } while (index); } @@ -1209,7 +1219,9 @@ ha_innobase::final_drop_index( for (index = dict_table_get_first_index(prebuilt->table); index; index = dict_table_get_next_index(index)) { + rw_lock_x_lock(dict_index_get_lock(index)); index->to_be_dropped = FALSE; + rw_lock_x_unlock(dict_index_get_lock(index)); } goto func_exit; diff --git a/handler/i_s.cc b/handler/i_s.cc index f6dceb17b53..5e4a6cb0103 100644 --- a/handler/i_s.cc +++ b/handler/i_s.cc @@ -22,8 +22,15 @@ InnoDB INFORMATION SCHEMA tables interface to MySQL. Created July 18, 2007 Vasil Dimov *******************************************************/ - +#ifndef MYSQL_SERVER +#define MYSQL_SERVER /* For Item_* classes */ #include +/* Prevent influence of this definition to other headers */ +#undef MYSQL_SERVER +#else +#include +#endif //MYSQL_SERVER + #include #include @@ -32,7 +39,6 @@ Created July 18, 2007 Vasil Dimov #include #include #include "i_s.h" -#include "innodb_patch_info.h" #include extern "C" { @@ -41,6 +47,7 @@ extern "C" { #include "buf0buddy.h" /* for i_s_cmpmem */ #include "buf0buf.h" /* for buf_pool and PAGE_ZIP_MIN_SIZE */ #include "ha_prototypes.h" /* for innobase_convert_name() */ +#include "srv0srv.h" /* for srv_track_changed_pages */ #include "srv0start.h" /* for srv_was_started */ #include "btr0btr.h" /* for btr_page_get_index_id */ #include "trx0rseg.h" /* for trx_rseg_struct */ @@ -48,10 +55,91 @@ extern "C" { #include "dict0dict.h" /* for dict_sys */ #include "btr0pcur.h" #include "buf0lru.h" /* for XTRA_LRU_[DUMP/RESTORE] */ +#include "log0online.h" +#include "btr0btr.h" +#include "log0log.h" } static const char plugin_author[] = "Innobase Oy"; +/** structure associates a name string with a file page type and/or buffer +page state. */ +struct buffer_page_desc_str_struct{ + const char* type_str; /*!< String explain the page + type/state */ + ulint type_value; /*!< Page type or page state */ +}; + +typedef struct buffer_page_desc_str_struct buf_page_desc_str_t; + +/** Any states greater than FIL_PAGE_TYPE_LAST would be treated as unknown. */ +#define I_S_PAGE_TYPE_UNKNOWN (FIL_PAGE_TYPE_LAST + 1) + +/** We also define I_S_PAGE_TYPE_INDEX as the Index Page's position +in i_s_page_type[] array */ +#define I_S_PAGE_TYPE_INDEX 1 + +/** Name string for File Page Types */ +static buf_page_desc_str_t i_s_page_type[] = { + {"ALLOCATED", FIL_PAGE_TYPE_ALLOCATED}, + {"INDEX", FIL_PAGE_INDEX}, + {"UNDO_LOG", FIL_PAGE_UNDO_LOG}, + {"INODE", FIL_PAGE_INODE}, + {"IBUF_FREE_LIST", FIL_PAGE_IBUF_FREE_LIST}, + {"IBUF_BITMAP", FIL_PAGE_IBUF_BITMAP}, + {"SYSTEM", FIL_PAGE_TYPE_SYS}, + {"TRX_SYSTEM", FIL_PAGE_TYPE_TRX_SYS}, + {"FILE_SPACE_HEADER", FIL_PAGE_TYPE_FSP_HDR}, + {"EXTENT_DESCRIPTOR", FIL_PAGE_TYPE_XDES}, + {"BLOB", FIL_PAGE_TYPE_BLOB}, + {"COMPRESSED_BLOB", FIL_PAGE_TYPE_ZBLOB}, + {"COMPRESSED_BLOB2", FIL_PAGE_TYPE_ZBLOB2}, + {"UNKNOWN", I_S_PAGE_TYPE_UNKNOWN} +}; + +/* Check if we can hold all page type in a 4 bit value */ +#if I_S_PAGE_TYPE_UNKNOWN > 1<<4 +# error "i_s_page_type[] is too large" +#endif + +/** This structure defines information we will fetch from pages +currently cached in the buffer pool. It will be used to populate +table INFORMATION_SCHEMA.INNODB_BUFFER_PAGE */ +struct buffer_page_info_struct{ + ulint block_id; /*!< Buffer Pool block ID */ + unsigned space_id:32; /*!< Tablespace ID */ + unsigned page_num:32; /*!< Page number/offset */ + unsigned access_time:32; /*!< Time of first access */ + unsigned flush_type:2; /*!< Flush type */ + unsigned io_fix:2; /*!< type of pending I/O operation */ + unsigned fix_count:19; /*!< Count of how manyfold this block + is bufferfixed */ + unsigned hashed:1; /*!< Whether hash index has been + built on this page */ + unsigned is_old:1; /*!< TRUE if the block is in the old + blocks in buf_pool->LRU_old */ + unsigned freed_page_clock:31; /*!< the value of + buf_pool->freed_page_clock */ + unsigned zip_ssize:PAGE_ZIP_SSIZE_BITS; + /*!< Compressed page size */ + unsigned page_state:BUF_PAGE_STATE_BITS; /*!< Page state */ + unsigned page_type:4; /*!< Page type */ + unsigned num_recs; + /*!< Number of records on Page */ + unsigned data_size; + /*!< Sum of the sizes of the records */ + lsn_t newest_mod; /*!< Log sequence number of + the youngest modification */ + lsn_t oldest_mod; /*!< Log sequence number of + the oldest modification */ + dulint index_id; /*!< Index ID if a index page */ +}; + +typedef struct buffer_page_info_struct buf_page_info_t; + +/** maximum number of buffer page info we would cache. */ +#define MAX_BUF_INFO_CACHED 10000 + #define OK(expr) \ if ((expr) != 0) { \ DBUG_RETURN(1); \ @@ -224,168 +312,11 @@ field_store_ulint( return(ret); } -/* Fields of the dynamic table INFORMATION_SCHEMA.innodb_patches */ -static ST_FIELD_INFO innodb_patches_fields_info[] = -{ -#define IDX_PATCH_NAME 0 - {STRUCT_FLD(field_name, "name"), - STRUCT_FLD(field_length, 255), - STRUCT_FLD(field_type, MYSQL_TYPE_STRING), - STRUCT_FLD(value, 0), - STRUCT_FLD(field_flags, 0), - STRUCT_FLD(old_name, ""), - STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, - -#define IDX_PATCH_DESCR 1 - {STRUCT_FLD(field_name, "description"), - STRUCT_FLD(field_length, 255), - STRUCT_FLD(field_type, MYSQL_TYPE_STRING), - STRUCT_FLD(value, 0), - STRUCT_FLD(field_flags, 0), - STRUCT_FLD(old_name, ""), - STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, - -#define IDX_PATCH_COMMENT 2 - {STRUCT_FLD(field_name, "comment"), - STRUCT_FLD(field_length, 100), - STRUCT_FLD(field_type, MYSQL_TYPE_STRING), - STRUCT_FLD(value, 0), - STRUCT_FLD(field_flags, 0), - STRUCT_FLD(old_name, ""), - STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, - -#define IDX_PATCH_LINK 3 - {STRUCT_FLD(field_name, "link"), - STRUCT_FLD(field_length, 255), - STRUCT_FLD(field_type, MYSQL_TYPE_STRING), - STRUCT_FLD(value, 0), - STRUCT_FLD(field_flags, 0), - STRUCT_FLD(old_name, ""), - STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, - - END_OF_ST_FIELD_INFO -}; - static struct st_mysql_information_schema i_s_info = { MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION }; -/*********************************************************************** -Fill the dynamic table information_schema.innodb_patches */ -static -int -innodb_patches_fill( -/*=============*/ - /* out: 0 on success, 1 on failure */ - THD* thd, /* in: thread */ - TABLE_LIST* tables, /* in/out: tables to fill */ - COND* cond) /* in: condition (ignored) */ -{ - TABLE* table = (TABLE *) tables->table; - int status = 0; - int i; - Field** fields; - - - DBUG_ENTER("innodb_patches_fill"); - fields = table->field; - - /* deny access to non-superusers */ - if (check_global_access(thd, PROCESS_ACL)) { - - DBUG_RETURN(0); - } - - RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name); - - for (i = 0; innodb_enhancements[i].file; i++) { - - field_store_string(fields[0],innodb_enhancements[i].file); - field_store_string(fields[1],innodb_enhancements[i].name); - field_store_string(fields[2],innodb_enhancements[i].comment); - field_store_string(fields[3],innodb_enhancements[i].link); - - if (schema_table_store_record(thd, table)) { - status = 1; - break; - } - - } - - - DBUG_RETURN(status); -} - -/*********************************************************************** -Bind the dynamic table information_schema.innodb_patches. */ -static -int -innodb_patches_init( -/*=========*/ - /* out: 0 on success */ - void* p) /* in/out: table schema object */ -{ - DBUG_ENTER("innodb_patches_init"); - ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p; - - schema->fields_info = innodb_patches_fields_info; - schema->fill_table = innodb_patches_fill; - - DBUG_RETURN(0); -} - - -UNIV_INTERN struct st_mysql_plugin i_s_innodb_patches = -{ - /* the plugin type (a MYSQL_XXX_PLUGIN value) */ - /* int */ - STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN), - - /* pointer to type-specific plugin descriptor */ - /* void* */ - STRUCT_FLD(info, &i_s_info), - - /* plugin name */ - /* const char* */ - STRUCT_FLD(name, "XTRADB_ENHANCEMENTS"), - - /* plugin author (for SHOW PLUGINS) */ - /* const char* */ - STRUCT_FLD(author, "Percona"), - - /* general descriptive text (for SHOW PLUGINS) */ - /* const char* */ - STRUCT_FLD(descr, "Enhancements applied to InnoDB plugin"), - - /* the plugin license (PLUGIN_LICENSE_XXX) */ - /* int */ - STRUCT_FLD(license, PLUGIN_LICENSE_GPL), - - /* the function to invoke when plugin is loaded */ - /* int (*)(void*); */ - STRUCT_FLD(init, innodb_patches_init), - - /* the function to invoke when plugin is unloaded */ - /* int (*)(void*); */ - STRUCT_FLD(deinit, i_s_common_deinit), - - /* plugin version (for SHOW PLUGINS) */ - /* unsigned int */ - STRUCT_FLD(version, INNODB_VERSION_SHORT), - - /* struct st_mysql_show_var* */ - STRUCT_FLD(status_vars, NULL), - - /* struct st_mysql_sys_var** */ - STRUCT_FLD(system_vars, NULL), - - /* reserved for dependency checking */ - /* void* */ - STRUCT_FLD(__reserved1, NULL) -}; - - static ST_FIELD_INFO i_s_innodb_buffer_pool_pages_fields_info[] = { {STRUCT_FLD(field_name, "page_type"), @@ -768,7 +699,7 @@ i_s_innodb_buffer_pool_pages_index_fill( table->field[2]->store(block->page.offset); table->field[3]->store(page_get_n_recs(frame)); table->field[4]->store(page_get_data_size(frame)); - table->field[5]->store(block->is_hashed); + table->field[5]->store(block->index != NULL); /* is_hashed */ table->field[6]->store(block->page.access_time); table->field[7]->store(block->page.newest_modification != 0); table->field[8]->store(block->page.oldest_modification != 0); @@ -1956,6 +1887,8 @@ i_s_cmp_fill_low( DBUG_ENTER("i_s_cmp_fill_low"); + RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name); + /* deny access to non-superusers */ if (check_global_access(thd, PROCESS_ACL)) { @@ -2224,6 +2157,8 @@ i_s_cmpmem_fill_low( DBUG_ENTER("i_s_cmpmem_fill_low"); + RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name); + /* deny access to non-superusers */ if (check_global_access(thd, PROCESS_ACL)) { @@ -2512,6 +2447,8 @@ i_s_innodb_rseg_fill( DBUG_ENTER("i_s_innodb_rseg_fill"); + RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name); + /* deny access to non-superusers */ if (check_global_access(thd, PROCESS_ACL)) { @@ -2645,6 +2582,8 @@ i_s_innodb_admin_command_fill( DBUG_ENTER("i_s_innodb_admin_command_fill"); + RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name); + /* deny access to non-superusers */ if (check_global_access(thd, PROCESS_ACL)) { DBUG_RETURN(0); @@ -2902,6 +2841,8 @@ i_s_innodb_table_stats_fill( DBUG_ENTER("i_s_innodb_table_stats_fill"); + RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name); + /* deny access to non-superusers */ if (check_global_access(thd, PROCESS_ACL)) { DBUG_RETURN(0); @@ -2965,6 +2906,8 @@ i_s_innodb_index_stats_fill( DBUG_ENTER("i_s_innodb_index_stats_fill"); + RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name); + /* deny access to non-superusers */ if (check_global_access(thd, PROCESS_ACL)) { DBUG_RETURN(0); @@ -3612,6 +3555,8 @@ i_s_innodb_schema_table_fill( DBUG_ENTER("i_s_innodb_schema_table_fill"); + RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name); + /* deny access to non-superusers */ if (check_global_access(thd, PROCESS_ACL)) { DBUG_RETURN(0); @@ -3783,3 +3728,1965 @@ UNIV_INTERN struct st_mysql_plugin i_s_innodb_sys_stats = STRUCT_FLD(system_vars, NULL), STRUCT_FLD(__reserved1, NULL) }; + +static ST_FIELD_INFO i_s_innodb_changed_pages_info[] = +{ + {STRUCT_FLD(field_name, "space_id"), + STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + {STRUCT_FLD(field_name, "page_id"), + STRUCT_FLD(field_length, MY_INT32_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + {STRUCT_FLD(field_name, "start_lsn"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + {STRUCT_FLD(field_name, "end_lsn"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + END_OF_ST_FIELD_INFO +}; + +/*********************************************************************** + This function parses condition and gets upper bounds for start and end LSN's + if condition corresponds to certain pattern. + + We can't know right position to avoid scanning bitmap files from the beginning + to the lower bound. But we can stop scanning bitmap files if we reach upper bound. + + It's expected the most used queries will be like the following: + + SELECT * FROM INNODB_CHANGED_PAGES WHERE START_LSN > num1 AND start_lsn < num2; + + That's why the pattern is: + + pattern: comp | and_comp; + comp: lsn < int_num | lsn <= int_num | int_num > lsn | int_num >= lsn; + lsn: start_lsn | end_lsn; + and_comp: some_expression AND some_expression | some_expression AND and_comp; + some_expression: comp | any_other_expression; + + Suppose the condition is start_lsn < 100, this means we have to read all + blocks with start_lsn < 100. Which is equivalent to reading all the blocks + with end_lsn <= 99, or just end_lsn < 100. That's why it's enough to find + maximum lsn value, doesn't matter if this is start or end lsn and compare + it with "start_lsn" field. + + Example: + + SELECT * FROM INNODB_CHANGED_PAGES + WHERE + start_lsn > 10 AND + end_lsn <= 1111 AND + 555 > end_lsn AND + page_id = 100; + + max_lsn will be set to 555. +*/ +static +void +limit_lsn_range_from_condition( +/*===========================*/ + TABLE* table, /*!type() != Item::COND_ITEM && + cond->type() != Item::FUNC_ITEM) + return; + + switch (((Item_func*) cond)->functype()) + { + case Item_func::COND_AND_FUNC: + { + List_iterator li(*((Item_cond*) cond)-> + argument_list()); + Item *item; + while ((item= li++)) + limit_lsn_range_from_condition(table, + item, + max_lsn); + break; + } + case Item_func::LT_FUNC: + case Item_func::LE_FUNC: + case Item_func::GT_FUNC: + case Item_func::GE_FUNC: + { + Item *left; + Item *right; + Item_field *item_field; + ib_uint64_t tmp_result; + + /* + a <= b equals to b >= a that's why we just exchange + "left" and "right" in the case of ">" or ">=" + function + */ + if (((Item_func*) cond)->functype() == + Item_func::LT_FUNC || + ((Item_func*) cond)->functype() == + Item_func::LE_FUNC) + { + left = ((Item_func*) cond)->arguments()[0]; + right = ((Item_func*) cond)->arguments()[1]; + } else { + left = ((Item_func*) cond)->arguments()[1]; + right = ((Item_func*) cond)->arguments()[0]; + } + + if (!left || !right) + return; + if (left->type() != Item::FIELD_ITEM) + return; + if (right->type() != Item::INT_ITEM) + return; + + item_field = (Item_field*)left; + + if (/* START_LSN */ + table->field[2] != item_field->field && + /* END_LSN */ + table->field[3] != item_field->field) + { + return; + } + + /* Check if the current field belongs to our table */ + if (table != item_field->field->table) + return; + + tmp_result = right->val_int(); + if (tmp_result < *max_lsn) + *max_lsn = tmp_result; + + break; + } + default:; + } + +} + +/*********************************************************************** +Fill the dynamic table information_schema.innodb_changed_pages. +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_changed_pages_fill( +/*==========================*/ + THD* thd, /*!table; + log_bitmap_iterator_t i; + ib_uint64_t output_rows_num = 0UL; + ib_uint64_t max_lsn = ~0ULL; + + if (!srv_track_changed_pages) + return 0; + + if (!log_online_bitmap_iterator_init(&i)) + return 1; + + if (cond) + limit_lsn_range_from_condition(table, cond, &max_lsn); + + while(log_online_bitmap_iterator_next(&i) && + (!srv_changed_pages_limit || + output_rows_num < srv_changed_pages_limit) && + /* + There is no need to compare both start LSN and end LSN fields + with maximum value. It's enough to compare only start LSN. + Example: + + max_lsn = 100 + \\\\\\\\\\\\\\\\\\\\\\\\\|\\\\\\\\ - Query 1 + I------I I-------I I-------------I I----I + ////////////////// | - Query 2 + 1 2 3 4 + + Query 1: + SELECT * FROM INNODB_CHANGED_PAGES WHERE start_lsn < 100 + will select 1,2,3 bitmaps + Query 2: + SELECT * FROM INNODB_CHANGED_PAGES WHERE end_lsn < 100 + will select 1,2 bitmaps + + The condition start_lsn <= 100 will be false after reading + 1,2,3 bitmaps which suits for both cases. + */ + LOG_BITMAP_ITERATOR_START_LSN(i) <= max_lsn) + { + if (!LOG_BITMAP_ITERATOR_PAGE_CHANGED(i)) + continue; + + /* SPACE_ID */ + table->field[0]->store( + LOG_BITMAP_ITERATOR_SPACE_ID(i)); + /* PAGE_ID */ + table->field[1]->store( + LOG_BITMAP_ITERATOR_PAGE_NUM(i)); + /* START_LSN */ + table->field[2]->store( + LOG_BITMAP_ITERATOR_START_LSN(i)); + /* END_LSN */ + table->field[3]->store( + LOG_BITMAP_ITERATOR_END_LSN(i)); + + /* + I_S tables are in-memory tables. If bitmap file is big enough + a lot of memory can be used to store the table. But the size + of used memory can be diminished if we store only data which + corresponds to some conditions (in WHERE sql clause). Here + conditions are checked for the field values stored above. + + Conditions are checked twice. The first is here (during table + generation) and the second during query execution. Maybe it + makes sense to use some flag in THD object to avoid double + checking. + */ + if (cond && !cond->val_int()) + continue; + + if (schema_table_store_record(thd, table)) + { + log_online_bitmap_iterator_release(&i); + return 1; + } + + ++output_rows_num; + } + + log_online_bitmap_iterator_release(&i); + return 0; +} + +static +int +i_s_innodb_changed_pages_init( +/*==========================*/ + void* p) +{ + DBUG_ENTER("i_s_innodb_changed_pages_init"); + ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p; + + schema->fields_info = i_s_innodb_changed_pages_info; + schema->fill_table = i_s_innodb_changed_pages_fill; + + DBUG_RETURN(0); +} + +UNIV_INTERN struct st_mysql_plugin i_s_innodb_changed_pages = +{ + STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN), + STRUCT_FLD(info, &i_s_info), + STRUCT_FLD(name, "INNODB_CHANGED_PAGES"), + STRUCT_FLD(author, "Percona"), + STRUCT_FLD(descr, "InnoDB CHANGED_PAGES table"), + STRUCT_FLD(license, PLUGIN_LICENSE_GPL), + STRUCT_FLD(init, i_s_innodb_changed_pages_init), + STRUCT_FLD(deinit, i_s_common_deinit), + STRUCT_FLD(version, 0x0100 /* 1.0 */), + STRUCT_FLD(status_vars, NULL), + STRUCT_FLD(system_vars, NULL), + STRUCT_FLD(__reserved1, NULL) +}; + +/* Fields of the dynamic table INNODB_BUFFER_POOL_STATS. */ +static ST_FIELD_INFO i_s_innodb_buffer_stats_fields_info[] = +{ +#define IDX_BUF_STATS_POOL_SIZE 0 + {STRUCT_FLD(field_name, "POOL_SIZE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_FREE_BUFFERS 1 + {STRUCT_FLD(field_name, "FREE_BUFFERS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_LRU_LEN 2 + {STRUCT_FLD(field_name, "DATABASE_PAGES"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_OLD_LRU_LEN 3 + {STRUCT_FLD(field_name, "OLD_DATABASE_PAGES"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_FLUSH_LIST_LEN 4 + {STRUCT_FLD(field_name, "MODIFIED_DATABASE_PAGES"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PENDING_ZIP 5 + {STRUCT_FLD(field_name, "PENDING_DECOMPRESS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PENDING_READ 6 + {STRUCT_FLD(field_name, "PENDING_READS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_FLUSH_LRU 7 + {STRUCT_FLD(field_name, "PENDING_FLUSH_LRU"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_FLUSH_LIST 8 + {STRUCT_FLD(field_name, "PENDING_FLUSH_LIST"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_YOUNG 9 + {STRUCT_FLD(field_name, "PAGES_MADE_YOUNG"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_NOT_YOUNG 10 + {STRUCT_FLD(field_name, "PAGES_NOT_MADE_YOUNG"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_YOUNG_RATE 11 + {STRUCT_FLD(field_name, "PAGES_MADE_YOUNG_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_NOT_YOUNG_RATE 12 + {STRUCT_FLD(field_name, "PAGES_MADE_NOT_YOUNG_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_READ 13 + {STRUCT_FLD(field_name, "NUMBER_PAGES_READ"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_CREATED 14 + {STRUCT_FLD(field_name, "NUMBER_PAGES_CREATED"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_WRITTEN 15 + {STRUCT_FLD(field_name, "NUMBER_PAGES_WRITTEN"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_READ_RATE 16 + {STRUCT_FLD(field_name, "PAGES_READ_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_CREATE_RATE 17 + {STRUCT_FLD(field_name, "PAGES_CREATE_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_WRITTEN_RATE 18 + {STRUCT_FLD(field_name, "PAGES_WRITTEN_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_GET 19 + {STRUCT_FLD(field_name, "NUMBER_PAGES_GET"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_HIT_RATE 20 + {STRUCT_FLD(field_name, "HIT_RATE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_MADE_YOUNG_PCT 21 + {STRUCT_FLD(field_name, "YOUNG_MAKE_PER_THOUSAND_GETS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_NOT_MADE_YOUNG_PCT 22 + {STRUCT_FLD(field_name, "NOT_YOUNG_MAKE_PER_THOUSAND_GETS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_READ_AHREAD 23 + {STRUCT_FLD(field_name, "NUMBER_PAGES_READ_AHEAD"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_READ_AHEAD_EVICTED 24 + {STRUCT_FLD(field_name, "NUMBER_READ_AHEAD_EVICTED"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_READ_AHEAD_RATE 25 + {STRUCT_FLD(field_name, "READ_AHEAD_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_READ_AHEAD_EVICT_RATE 26 + {STRUCT_FLD(field_name, "READ_AHEAD_EVICTED_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_LRU_IO_SUM 27 + {STRUCT_FLD(field_name, "LRU_IO_TOTAL"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_LRU_IO_CUR 28 + {STRUCT_FLD(field_name, "LRU_IO_CURRENT"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_UNZIP_SUM 29 + {STRUCT_FLD(field_name, "UNCOMPRESS_TOTAL"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_UNZIP_CUR 30 + {STRUCT_FLD(field_name, "UNCOMPRESS_CURRENT"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + END_OF_ST_FIELD_INFO +}; + +/*******************************************************************//** +Fill Information Schema table INNODB_BUFFER_POOL_STATS for a particular +buffer pool +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_stats_fill( +/*==================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + const buf_pool_info_t* info) /*!< in: buffer pool + information */ +{ + TABLE* table; + Field** fields; + + DBUG_ENTER("i_s_innodb_stats_fill"); + + table = tables->table; + + fields = table->field; + + OK(fields[IDX_BUF_STATS_POOL_SIZE]->store(info->pool_size)); + + OK(fields[IDX_BUF_STATS_LRU_LEN]->store(info->lru_len)); + + OK(fields[IDX_BUF_STATS_OLD_LRU_LEN]->store(info->old_lru_len)); + + OK(fields[IDX_BUF_STATS_FREE_BUFFERS]->store(info->free_list_len)); + + OK(fields[IDX_BUF_STATS_FLUSH_LIST_LEN]->store( + info->flush_list_len)); + + OK(fields[IDX_BUF_STATS_PENDING_ZIP]->store(info->n_pend_unzip)); + + OK(fields[IDX_BUF_STATS_PENDING_READ]->store(info->n_pend_reads)); + + OK(fields[IDX_BUF_STATS_FLUSH_LRU]->store(info->n_pending_flush_lru)); + + OK(fields[IDX_BUF_STATS_FLUSH_LIST]->store(info->n_pending_flush_list)); + + OK(fields[IDX_BUF_STATS_PAGE_YOUNG]->store(info->n_pages_made_young)); + + OK(fields[IDX_BUF_STATS_PAGE_NOT_YOUNG]->store( + info->n_pages_not_made_young)); + + OK(fields[IDX_BUF_STATS_PAGE_YOUNG_RATE]->store( + info->page_made_young_rate)); + + OK(fields[IDX_BUF_STATS_PAGE_NOT_YOUNG_RATE]->store( + info->page_not_made_young_rate)); + + OK(fields[IDX_BUF_STATS_PAGE_READ]->store(info->n_pages_read)); + + OK(fields[IDX_BUF_STATS_PAGE_CREATED]->store(info->n_pages_created)); + + OK(fields[IDX_BUF_STATS_PAGE_WRITTEN]->store(info->n_pages_written)); + + OK(fields[IDX_BUF_STATS_GET]->store(info->n_page_gets)); + + OK(fields[IDX_BUF_STATS_PAGE_READ_RATE]->store(info->pages_read_rate)); + + OK(fields[IDX_BUF_STATS_PAGE_CREATE_RATE]->store(info->pages_created_rate)); + + OK(fields[IDX_BUF_STATS_PAGE_WRITTEN_RATE]->store(info->pages_written_rate)); + + if (info->n_page_get_delta) { + OK(fields[IDX_BUF_STATS_HIT_RATE]->store( + 1000 - (1000 * info->page_read_delta + / info->n_page_get_delta))); + + OK(fields[IDX_BUF_STATS_MADE_YOUNG_PCT]->store( + 1000 * info->young_making_delta + / info->n_page_get_delta)); + + OK(fields[IDX_BUF_STATS_NOT_MADE_YOUNG_PCT]->store( + 1000 * info->not_young_making_delta + / info->n_page_get_delta)); + } else { + OK(fields[IDX_BUF_STATS_HIT_RATE]->store(0)); + OK(fields[IDX_BUF_STATS_MADE_YOUNG_PCT]->store(0)); + OK(fields[IDX_BUF_STATS_NOT_MADE_YOUNG_PCT]->store(0)); + } + + OK(fields[IDX_BUF_STATS_READ_AHREAD]->store(info->n_ra_pages_read)); + + OK(fields[IDX_BUF_STATS_READ_AHEAD_EVICTED]->store( + info->n_ra_pages_evicted)); + + OK(fields[IDX_BUF_STATS_READ_AHEAD_RATE]->store( + info->pages_readahead_rate)); + + OK(fields[IDX_BUF_STATS_READ_AHEAD_EVICT_RATE]->store( + info->pages_evicted_rate)); + + OK(fields[IDX_BUF_STATS_LRU_IO_SUM]->store(info->io_sum)); + + OK(fields[IDX_BUF_STATS_LRU_IO_CUR]->store(info->io_cur)); + + OK(fields[IDX_BUF_STATS_UNZIP_SUM]->store(info->unzip_sum)); + + OK(fields[IDX_BUF_STATS_UNZIP_CUR]->store( info->unzip_cur)); + + DBUG_RETURN(schema_table_store_record(thd, table)); +} + +/*******************************************************************//** +This is the function that loops through each buffer pool and fetch buffer +pool stats to information schema table: I_S_INNODB_BUFFER_POOL_STATS +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_stats_fill_table( +/*===============================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + Item* ) /*!< in: condition (ignored) */ +{ + int status = 0; + buf_pool_info_t* pool_info; + + DBUG_ENTER("i_s_innodb_buffer_fill_general"); + + /* Only allow the PROCESS privilege holder to access the stats */ + if (check_global_access(thd, PROCESS_ACL)) { + DBUG_RETURN(0); + } + + pool_info = (buf_pool_info_t*) mem_zalloc(sizeof *pool_info); + + /* Fetch individual buffer pool info */ + buf_stats_get_pool_info(pool_info); + status = i_s_innodb_stats_fill(thd, tables, pool_info); + + mem_free(pool_info); + + DBUG_RETURN(status); +} + +/*******************************************************************//** +Bind the dynamic table INFORMATION_SCHEMA.INNODB_BUFFER_POOL_STATS. +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_pool_stats_init( +/*==============================*/ + void* p) /*!< in/out: table schema object */ +{ + ST_SCHEMA_TABLE* schema; + + DBUG_ENTER("i_s_innodb_buffer_pool_stats_init"); + + schema = reinterpret_cast(p); + + schema->fields_info = i_s_innodb_buffer_stats_fields_info; + schema->fill_table = i_s_innodb_buffer_stats_fill_table; + + DBUG_RETURN(0); +} + +UNIV_INTERN struct st_mysql_plugin i_s_innodb_buffer_stats = +{ + /* the plugin type (a MYSQL_XXX_PLUGIN value) */ + /* int */ + STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN), + + /* pointer to type-specific plugin descriptor */ + /* void* */ + STRUCT_FLD(info, &i_s_info), + + /* plugin name */ + /* const char* */ + STRUCT_FLD(name, "INNODB_BUFFER_POOL_STATS"), + + /* plugin author (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(author, plugin_author), + + /* general descriptive text (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(descr, "InnoDB Buffer Pool Statistics Information "), + + /* the plugin license (PLUGIN_LICENSE_XXX) */ + /* int */ + STRUCT_FLD(license, PLUGIN_LICENSE_GPL), + + /* the function to invoke when plugin is loaded */ + /* int (*)(void*); */ + STRUCT_FLD(init, i_s_innodb_buffer_pool_stats_init), + + /* the function to invoke when plugin is unloaded */ + /* int (*)(void*); */ + STRUCT_FLD(deinit, i_s_common_deinit), + + /* plugin version (for SHOW PLUGINS) */ + /* unsigned int */ + STRUCT_FLD(version, INNODB_VERSION_SHORT), + + /* struct st_mysql_show_var* */ + STRUCT_FLD(status_vars, NULL), + + /* struct st_mysql_sys_var** */ + STRUCT_FLD(system_vars, NULL), + + /* reserved for dependency checking */ + /* void* */ + STRUCT_FLD(__reserved1, NULL), +}; + +/* Fields of the dynamic table INNODB_BUFFER_POOL_PAGE. */ +static ST_FIELD_INFO i_s_innodb_buffer_page_fields_info[] = +{ +#define IDX_BUFFER_BLOCK_ID 0 + {STRUCT_FLD(field_name, "BLOCK_ID"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_SPACE 1 + {STRUCT_FLD(field_name, "SPACE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_NUM 2 + {STRUCT_FLD(field_name, "PAGE_NUMBER"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_TYPE 3 + {STRUCT_FLD(field_name, "PAGE_TYPE"), + STRUCT_FLD(field_length, 64), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_FLUSH_TYPE 4 + {STRUCT_FLD(field_name, "FLUSH_TYPE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_FIX_COUNT 5 + {STRUCT_FLD(field_name, "FIX_COUNT"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_HASHED 6 + {STRUCT_FLD(field_name, "IS_HASHED"), + STRUCT_FLD(field_length, 3), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_NEWEST_MOD 7 + {STRUCT_FLD(field_name, "NEWEST_MODIFICATION"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_OLDEST_MOD 8 + {STRUCT_FLD(field_name, "OLDEST_MODIFICATION"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_ACCESS_TIME 9 + {STRUCT_FLD(field_name, "ACCESS_TIME"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_TABLE_NAME 10 + {STRUCT_FLD(field_name, "TABLE_NAME"), + STRUCT_FLD(field_length, 1024), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_INDEX_NAME 11 + {STRUCT_FLD(field_name, "INDEX_NAME"), + STRUCT_FLD(field_length, 1024), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_NUM_RECS 12 + {STRUCT_FLD(field_name, "NUMBER_RECORDS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_DATA_SIZE 13 + {STRUCT_FLD(field_name, "DATA_SIZE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_ZIP_SIZE 14 + {STRUCT_FLD(field_name, "COMPRESSED_SIZE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_STATE 15 + {STRUCT_FLD(field_name, "PAGE_STATE"), + STRUCT_FLD(field_length, 64), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_IO_FIX 16 + {STRUCT_FLD(field_name, "IO_FIX"), + STRUCT_FLD(field_length, 64), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_IS_OLD 17 + {STRUCT_FLD(field_name, "IS_OLD"), + STRUCT_FLD(field_length, 3), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_FREE_CLOCK 18 + {STRUCT_FLD(field_name, "FREE_PAGE_CLOCK"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + END_OF_ST_FIELD_INFO +}; + +/*******************************************************************//** +Fill Information Schema table INNODB_BUFFER_PAGE with information +cached in the buf_page_info_t array +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_page_fill( +/*========================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + const buf_page_info_t* info_array, /*!< in: array cached page + info */ + ulint num_page, /*!< in: number of page info + cached */ + mem_heap_t* heap) /*!< in: temp heap memory */ +{ + TABLE* table; + Field** fields; + + DBUG_ENTER("i_s_innodb_buffer_page_fill"); + + table = tables->table; + + fields = table->field; + + /* Iterate through the cached array and fill the I_S table rows */ + for (ulint i = 0; i < num_page; i++) { + const buf_page_info_t* page_info; + const char* table_name; + const char* index_name; + const char* state_str; + enum buf_page_state state; + + page_info = info_array + i; + + table_name = NULL; + index_name = NULL; + state_str = NULL; + + OK(fields[IDX_BUFFER_BLOCK_ID]->store(page_info->block_id)); + + OK(fields[IDX_BUFFER_PAGE_SPACE]->store(page_info->space_id)); + + OK(fields[IDX_BUFFER_PAGE_NUM]->store(page_info->page_num)); + + OK(field_store_string( + fields[IDX_BUFFER_PAGE_TYPE], + i_s_page_type[page_info->page_type].type_str)); + + OK(fields[IDX_BUFFER_PAGE_FLUSH_TYPE]->store( + page_info->flush_type)); + + OK(fields[IDX_BUFFER_PAGE_FIX_COUNT]->store( + page_info->fix_count)); + + if (page_info->hashed) { + OK(field_store_string( + fields[IDX_BUFFER_PAGE_HASHED], "YES")); + } else { + OK(field_store_string( + fields[IDX_BUFFER_PAGE_HASHED], "NO")); + } + + OK(fields[IDX_BUFFER_PAGE_NEWEST_MOD]->store( + (longlong) page_info->newest_mod, true)); + + OK(fields[IDX_BUFFER_PAGE_OLDEST_MOD]->store( + (longlong) page_info->oldest_mod, true)); + + OK(fields[IDX_BUFFER_PAGE_ACCESS_TIME]->store( + page_info->access_time)); + + /* If this is an index page, fetch the index name + and table name */ + if (page_info->page_type == I_S_PAGE_TYPE_INDEX) { + const dict_index_t* index; + + mutex_enter(&dict_sys->mutex); + index = dict_index_get_if_in_cache_low( + page_info->index_id); + + /* Copy the index/table name under mutex. We + do not want to hold the InnoDB mutex while + filling the IS table */ + if (index) { + const char* name_ptr = index->name; + + if (name_ptr[0] == TEMP_INDEX_PREFIX) { + name_ptr++; + } + + index_name = mem_heap_strdup(heap, name_ptr); + + table_name = mem_heap_strdup(heap, + index->table_name); + + } + + mutex_exit(&dict_sys->mutex); + } + + OK(field_store_string( + fields[IDX_BUFFER_PAGE_TABLE_NAME], table_name)); + + OK(field_store_string( + fields[IDX_BUFFER_PAGE_INDEX_NAME], index_name)); + + OK(fields[IDX_BUFFER_PAGE_NUM_RECS]->store( + page_info->num_recs)); + + OK(fields[IDX_BUFFER_PAGE_DATA_SIZE]->store( + page_info->data_size)); + + OK(fields[IDX_BUFFER_PAGE_ZIP_SIZE]->store( + page_info->zip_ssize + ? (PAGE_ZIP_MIN_SIZE >> 1) << page_info->zip_ssize + : 0)); + +#if BUF_PAGE_STATE_BITS > 3 +# error "BUF_PAGE_STATE_BITS > 3, please ensure that all 1<(page_info->page_state); + + switch (state) { + /* First three states are for compression pages and + are not states we would get as we scan pages through + buffer blocks */ + case BUF_BLOCK_ZIP_FREE: + case BUF_BLOCK_ZIP_PAGE: + case BUF_BLOCK_ZIP_DIRTY: + state_str = NULL; + break; + case BUF_BLOCK_NOT_USED: + state_str = "NOT_USED"; + break; + case BUF_BLOCK_READY_FOR_USE: + state_str = "READY_FOR_USE"; + break; + case BUF_BLOCK_FILE_PAGE: + state_str = "FILE_PAGE"; + break; + case BUF_BLOCK_MEMORY: + state_str = "MEMORY"; + break; + case BUF_BLOCK_REMOVE_HASH: + state_str = "REMOVE_HASH"; + break; + }; + + OK(field_store_string(fields[IDX_BUFFER_PAGE_STATE], + state_str)); + + switch (page_info->io_fix) { + case BUF_IO_NONE: + OK(field_store_string(fields[IDX_BUFFER_PAGE_IO_FIX], + "IO_NONE")); + break; + case BUF_IO_READ: + OK(field_store_string(fields[IDX_BUFFER_PAGE_IO_FIX], + "IO_READ")); + break; + case BUF_IO_WRITE: + OK(field_store_string(fields[IDX_BUFFER_PAGE_IO_FIX], + "IO_WRITE")); + break; + } + + OK(field_store_string(fields[IDX_BUFFER_PAGE_IS_OLD], + (page_info->is_old) ? "YES" : "NO")); + + OK(fields[IDX_BUFFER_PAGE_FREE_CLOCK]->store( + page_info->freed_page_clock)); + + if (schema_table_store_record(thd, table)) { + DBUG_RETURN(1); + } + } + + DBUG_RETURN(0); +} + +/*******************************************************************//** +Set appropriate page type to a buf_page_info_t structure */ +static +void +i_s_innodb_set_page_type( +/*=====================*/ + buf_page_info_t*page_info, /*!< in/out: structure to fill with + scanned info */ + ulint page_type, /*!< in: page type */ + const byte* frame) /*!< in: buffer frame */ +{ + if (page_type == FIL_PAGE_INDEX) { + const page_t* page = (const page_t*) frame; + + /* FIL_PAGE_INDEX is a bit special, its value + is defined as 17855, so we cannot use FIL_PAGE_INDEX + to index into i_s_page_type[] array, its array index + in the i_s_page_type[] array is I_S_PAGE_TYPE_INDEX + (1) */ + page_info->page_type = I_S_PAGE_TYPE_INDEX; + + page_info->index_id = btr_page_get_index_id(page); + + page_info->data_size = (ulint)(page_header_get_field( + page, PAGE_HEAP_TOP) - (page_is_comp(page) + ? PAGE_NEW_SUPREMUM_END + : PAGE_OLD_SUPREMUM_END) + - page_header_get_field(page, PAGE_GARBAGE)); + + page_info->num_recs = page_get_n_recs(page); + } else if (page_type >= I_S_PAGE_TYPE_UNKNOWN) { + /* Encountered an unknown page type */ + page_info->page_type = I_S_PAGE_TYPE_UNKNOWN; + } else { + /* Make sure we get the right index into the + i_s_page_type[] array */ + ut_a(page_type == i_s_page_type[page_type].type_value); + + page_info->page_type = page_type; + } + + if (page_info->page_type == FIL_PAGE_TYPE_ZBLOB + || page_info->page_type == FIL_PAGE_TYPE_ZBLOB2) { + page_info->page_num = mach_read_from_4( + frame + FIL_PAGE_OFFSET); + page_info->space_id = mach_read_from_4( + frame + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); + } +} + +/*******************************************************************//** +Scans pages in the buffer cache, and collect their general information +into the buf_page_info_t array which is zero-filled. So any fields +that are not initialized in the function will default to 0 */ +static +void +i_s_innodb_buffer_page_get_info( +/*============================*/ + const buf_page_t*bpage, /*!< in: buffer pool page to scan */ + ulint pos, /*!< in: buffer block position in + buffer pool or in the LRU list */ + buf_page_info_t*page_info) /*!< in: zero filled info structure; + out: structure filled with scanned + info */ +{ + page_info->block_id = pos; + + page_info->page_state = buf_page_get_state(bpage); + + /* Only fetch information for buffers that map to a tablespace, + that is, buffer page with state BUF_BLOCK_ZIP_PAGE, + BUF_BLOCK_ZIP_DIRTY or BUF_BLOCK_FILE_PAGE */ + if (buf_page_in_file(bpage)) { + const byte* frame; + ulint page_type; + + page_info->space_id = buf_page_get_space(bpage); + + page_info->page_num = buf_page_get_page_no(bpage); + + page_info->flush_type = bpage->flush_type; + + page_info->fix_count = bpage->buf_fix_count; + + page_info->newest_mod = bpage->newest_modification; + + page_info->oldest_mod = bpage->oldest_modification; + + page_info->access_time = bpage->access_time; + + page_info->zip_ssize = bpage->zip.ssize; + + page_info->io_fix = bpage->io_fix; + + page_info->is_old = bpage->old; + + page_info->freed_page_clock = bpage->freed_page_clock; + + if (page_info->page_state == BUF_BLOCK_FILE_PAGE) { + const buf_block_t*block; + + block = reinterpret_cast(bpage); + frame = block->frame; + page_info->hashed = (block->index != NULL); + } else { + ut_ad(page_info->zip_ssize); + frame = bpage->zip.data; + } + + page_type = fil_page_get_type(frame); + + i_s_innodb_set_page_type(page_info, page_type, frame); + } else { + page_info->page_type = I_S_PAGE_TYPE_UNKNOWN; + } +} + +/*******************************************************************//** +This is the function that goes through each block of the buffer pool +and fetch information to information schema tables: INNODB_BUFFER_PAGE. +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_fill_buffer_pool( +/*========================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables) /*!< in/out: tables to fill */ +{ + int status = 0; + mem_heap_t* heap; + + DBUG_ENTER("i_s_innodb_fill_buffer_pool"); + + heap = mem_heap_create(10000); + + /* Go through each chunk of buffer pool. Currently, we only + have one single chunk for each buffer pool */ + for (ulint n = 0; n < buf_pool->n_chunks; n++) { + const buf_block_t* block; + ulint n_blocks; + buf_page_info_t* info_buffer; + ulint num_page; + ulint mem_size; + ulint chunk_size; + ulint num_to_process = 0; + ulint block_id = 0; + mutex_t* block_mutex; + + /* Get buffer block of the nth chunk */ + block = buf_get_nth_chunk_block(buf_pool, n, &chunk_size); + num_page = 0; + + while (chunk_size > 0) { + /* we cache maximum MAX_BUF_INFO_CACHED number of + buffer page info */ + num_to_process = ut_min(chunk_size, + MAX_BUF_INFO_CACHED); + + mem_size = num_to_process * sizeof(buf_page_info_t); + + /* For each chunk, we'll pre-allocate information + structures to cache the page information read from + the buffer pool. Doing so before obtain any mutex */ + info_buffer = (buf_page_info_t*) mem_heap_zalloc( + heap, mem_size); + + /* Obtain appropriate mutexes. Since this is diagnostic + buffer pool info printout, we are not required to + preserve the overall consistency, so we can + release mutex periodically */ + buf_pool_mutex_enter(); + + /* GO through each block in the chunk */ + for (n_blocks = num_to_process; n_blocks--; block++) { + block_mutex = buf_page_get_mutex_enter(&block->page); + i_s_innodb_buffer_page_get_info( + &block->page, block_id, + info_buffer + num_page); + mutex_exit(block_mutex); + block_id++; + num_page++; + } + + buf_pool_mutex_exit(); + + /* Fill in information schema table with information + just collected from the buffer chunk scan */ + status = i_s_innodb_buffer_page_fill( + thd, tables, info_buffer, + num_page, heap); + + /* If something goes wrong, break and return */ + if (status) { + break; + } + + mem_heap_empty(heap); + chunk_size -= num_to_process; + num_page = 0; + } + } + + mem_heap_free(heap); + + DBUG_RETURN(status); +} + +/*******************************************************************//** +Fill page information for pages in InnoDB buffer pool to the +dynamic table INFORMATION_SCHEMA.INNODB_BUFFER_PAGE +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_page_fill_table( +/*==============================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + Item* ) /*!< in: condition (ignored) */ +{ + int status = 0; + + DBUG_ENTER("i_s_innodb_buffer_page_fill_table"); + + /* deny access to user without PROCESS privilege */ + if (check_global_access(thd, PROCESS_ACL)) { + DBUG_RETURN(0); + } + + /* Fetch information from pages in this buffer pool, + and fill the corresponding I_S table */ + status = i_s_innodb_fill_buffer_pool(thd, tables); + + DBUG_RETURN(status); +} + +/*******************************************************************//** +Bind the dynamic table INFORMATION_SCHEMA.INNODB_BUFFER_PAGE. +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_page_init( +/*========================*/ + void* p) /*!< in/out: table schema object */ +{ + ST_SCHEMA_TABLE* schema; + + DBUG_ENTER("i_s_innodb_buffer_page_init"); + + schema = reinterpret_cast(p); + + schema->fields_info = i_s_innodb_buffer_page_fields_info; + schema->fill_table = i_s_innodb_buffer_page_fill_table; + + DBUG_RETURN(0); +} + +UNIV_INTERN struct st_mysql_plugin i_s_innodb_buffer_page = +{ + /* the plugin type (a MYSQL_XXX_PLUGIN value) */ + /* int */ + STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN), + + /* pointer to type-specific plugin descriptor */ + /* void* */ + STRUCT_FLD(info, &i_s_info), + + /* plugin name */ + /* const char* */ + STRUCT_FLD(name, "INNODB_BUFFER_PAGE"), + + /* plugin author (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(author, plugin_author), + + /* general descriptive text (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(descr, "InnoDB Buffer Page Information"), + + /* the plugin license (PLUGIN_LICENSE_XXX) */ + /* int */ + STRUCT_FLD(license, PLUGIN_LICENSE_GPL), + + /* the function to invoke when plugin is loaded */ + /* int (*)(void*); */ + STRUCT_FLD(init, i_s_innodb_buffer_page_init), + + /* the function to invoke when plugin is unloaded */ + /* int (*)(void*); */ + STRUCT_FLD(deinit, i_s_common_deinit), + + /* plugin version (for SHOW PLUGINS) */ + /* unsigned int */ + STRUCT_FLD(version, INNODB_VERSION_SHORT), + + /* struct st_mysql_show_var* */ + STRUCT_FLD(status_vars, NULL), + + /* struct st_mysql_sys_var** */ + STRUCT_FLD(system_vars, NULL), + + /* reserved for dependency checking */ + /* void* */ + STRUCT_FLD(__reserved1, NULL), +}; + +static ST_FIELD_INFO i_s_innodb_buf_page_lru_fields_info[] = +{ +#define IDX_BUF_LRU_POS 0 + {STRUCT_FLD(field_name, "LRU_POSITION"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_SPACE 1 + {STRUCT_FLD(field_name, "SPACE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_NUM 2 + {STRUCT_FLD(field_name, "PAGE_NUMBER"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_TYPE 3 + {STRUCT_FLD(field_name, "PAGE_TYPE"), + STRUCT_FLD(field_length, 64), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_FLUSH_TYPE 4 + {STRUCT_FLD(field_name, "FLUSH_TYPE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_FIX_COUNT 5 + {STRUCT_FLD(field_name, "FIX_COUNT"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_HASHED 6 + {STRUCT_FLD(field_name, "IS_HASHED"), + STRUCT_FLD(field_length, 3), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_NEWEST_MOD 7 + {STRUCT_FLD(field_name, "NEWEST_MODIFICATION"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_OLDEST_MOD 8 + {STRUCT_FLD(field_name, "OLDEST_MODIFICATION"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_ACCESS_TIME 9 + {STRUCT_FLD(field_name, "ACCESS_TIME"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_TABLE_NAME 10 + {STRUCT_FLD(field_name, "TABLE_NAME"), + STRUCT_FLD(field_length, 1024), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_INDEX_NAME 11 + {STRUCT_FLD(field_name, "INDEX_NAME"), + STRUCT_FLD(field_length, 1024), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_NUM_RECS 12 + {STRUCT_FLD(field_name, "NUMBER_RECORDS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_DATA_SIZE 13 + {STRUCT_FLD(field_name, "DATA_SIZE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_ZIP_SIZE 14 + {STRUCT_FLD(field_name, "COMPRESSED_SIZE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_STATE 15 + {STRUCT_FLD(field_name, "COMPRESSED"), + STRUCT_FLD(field_length, 3), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_IO_FIX 16 + {STRUCT_FLD(field_name, "IO_FIX"), + STRUCT_FLD(field_length, 64), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_IS_OLD 17 + {STRUCT_FLD(field_name, "IS_OLD"), + STRUCT_FLD(field_length, 3), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_FREE_CLOCK 18 + {STRUCT_FLD(field_name, "FREE_PAGE_CLOCK"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + END_OF_ST_FIELD_INFO +}; + +/*******************************************************************//** +Fill Information Schema table INNODB_BUFFER_PAGE_LRU with information +cached in the buf_page_info_t array +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buf_page_lru_fill( +/*=========================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + const buf_page_info_t* info_array, /*!< in: array cached page + info */ + ulint num_page) /*!< in: number of page info + cached */ +{ + TABLE* table; + Field** fields; + mem_heap_t* heap; + + DBUG_ENTER("i_s_innodb_buf_page_lru_fill"); + + table = tables->table; + + fields = table->field; + + heap = mem_heap_create(1000); + + /* Iterate through the cached array and fill the I_S table rows */ + for (ulint i = 0; i < num_page; i++) { + const buf_page_info_t* page_info; + const char* table_name; + const char* index_name; + const char* state_str; + enum buf_page_state state; + + table_name = NULL; + index_name = NULL; + state_str = NULL; + + page_info = info_array + i; + + OK(fields[IDX_BUF_LRU_POS]->store(page_info->block_id)); + + OK(fields[IDX_BUF_LRU_PAGE_SPACE]->store(page_info->space_id)); + + OK(fields[IDX_BUF_LRU_PAGE_NUM]->store(page_info->page_num)); + + OK(field_store_string( + fields[IDX_BUF_LRU_PAGE_TYPE], + i_s_page_type[page_info->page_type].type_str)); + + OK(fields[IDX_BUF_LRU_PAGE_FLUSH_TYPE]->store( + page_info->flush_type)); + + OK(fields[IDX_BUF_LRU_PAGE_FIX_COUNT]->store( + page_info->fix_count)); + + if (page_info->hashed) { + OK(field_store_string( + fields[IDX_BUF_LRU_PAGE_HASHED], "YES")); + } else { + OK(field_store_string( + fields[IDX_BUF_LRU_PAGE_HASHED], "NO")); + } + + OK(fields[IDX_BUF_LRU_PAGE_NEWEST_MOD]->store( + page_info->newest_mod, true)); + + OK(fields[IDX_BUF_LRU_PAGE_OLDEST_MOD]->store( + page_info->oldest_mod, true)); + + OK(fields[IDX_BUF_LRU_PAGE_ACCESS_TIME]->store( + page_info->access_time)); + + /* If this is an index page, fetch the index name + and table name */ + if (page_info->page_type == I_S_PAGE_TYPE_INDEX) { + const dict_index_t* index; + + mutex_enter(&dict_sys->mutex); + index = dict_index_get_if_in_cache_low( + page_info->index_id); + + /* Copy the index/table name under mutex. We + do not want to hold the InnoDB mutex while + filling the IS table */ + if (index) { + const char* name_ptr = index->name; + + if (name_ptr[0] == TEMP_INDEX_PREFIX) { + name_ptr++; + } + + index_name = mem_heap_strdup(heap, name_ptr); + + table_name = mem_heap_strdup(heap, + index->table_name); + } + + mutex_exit(&dict_sys->mutex); + } + + OK(field_store_string( + fields[IDX_BUF_LRU_PAGE_TABLE_NAME], table_name)); + + OK(field_store_string( + fields[IDX_BUF_LRU_PAGE_INDEX_NAME], index_name)); + OK(fields[IDX_BUF_LRU_PAGE_NUM_RECS]->store( + page_info->num_recs)); + + OK(fields[IDX_BUF_LRU_PAGE_DATA_SIZE]->store( + page_info->data_size)); + + OK(fields[IDX_BUF_LRU_PAGE_ZIP_SIZE]->store( + page_info->zip_ssize ? + 512 << page_info->zip_ssize : 0)); + + state = static_cast(page_info->page_state); + + switch (state) { + /* Compressed page */ + case BUF_BLOCK_ZIP_PAGE: + case BUF_BLOCK_ZIP_DIRTY: + state_str = "YES"; + break; + /* Uncompressed page */ + case BUF_BLOCK_FILE_PAGE: + state_str = "NO"; + break; + /* We should not see following states */ + case BUF_BLOCK_ZIP_FREE: + case BUF_BLOCK_READY_FOR_USE: + case BUF_BLOCK_NOT_USED: + case BUF_BLOCK_MEMORY: + case BUF_BLOCK_REMOVE_HASH: + state_str = NULL; + break; + }; + + OK(field_store_string(fields[IDX_BUF_LRU_PAGE_STATE], + state_str)); + + switch (page_info->io_fix) { + case BUF_IO_NONE: + OK(field_store_string(fields[IDX_BUF_LRU_PAGE_IO_FIX], + "IO_NONE")); + break; + case BUF_IO_READ: + OK(field_store_string(fields[IDX_BUF_LRU_PAGE_IO_FIX], + "IO_READ")); + break; + case BUF_IO_WRITE: + OK(field_store_string(fields[IDX_BUF_LRU_PAGE_IO_FIX], + "IO_WRITE")); + break; + } + + OK(field_store_string(fields[IDX_BUF_LRU_PAGE_IS_OLD], + (page_info->is_old) ? "YES" : "NO")); + + OK(fields[IDX_BUF_LRU_PAGE_FREE_CLOCK]->store( + page_info->freed_page_clock)); + + if (schema_table_store_record(thd, table)) { + mem_heap_free(heap); + DBUG_RETURN(1); + } + + mem_heap_empty(heap); + } + + mem_heap_free(heap); + + DBUG_RETURN(0); +} + +/*******************************************************************//** +This is the function that goes through buffer pool's LRU list +and fetch information to INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU. +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_fill_buffer_lru( +/*=======================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables) /*!< in/out: tables to fill */ +{ + int status = 0; + buf_page_info_t* info_buffer; + ulint lru_pos = 0; + const buf_page_t* bpage; + ulint lru_len; + mutex_t* block_mutex; + + DBUG_ENTER("i_s_innodb_fill_buffer_lru"); + + /* Obtain buf_pool mutex before allocate info_buffer, since + UT_LIST_GET_LEN(buf_pool->LRU) could change */ + mutex_enter(&LRU_list_mutex); + + lru_len = UT_LIST_GET_LEN(buf_pool->LRU); + + /* Print error message if malloc fail */ + info_buffer = (buf_page_info_t*) my_malloc( + lru_len * sizeof *info_buffer, MYF(MY_WME)); + + if (!info_buffer) { + status = 1; + goto exit; + } + + memset(info_buffer, 0, lru_len * sizeof *info_buffer); + + /* Walk through Pool's LRU list and print the buffer page + information */ + bpage = UT_LIST_GET_LAST(buf_pool->LRU); + + while (bpage != NULL) { + block_mutex = buf_page_get_mutex_enter(bpage); + /* Use the same function that collect buffer info for + INNODB_BUFFER_PAGE to get buffer page info */ + i_s_innodb_buffer_page_get_info(bpage, lru_pos, + (info_buffer + lru_pos)); + + bpage = UT_LIST_GET_PREV(LRU, bpage); + mutex_exit(block_mutex); + + lru_pos++; + } + + ut_ad(lru_pos == lru_len); + ut_ad(lru_pos == UT_LIST_GET_LEN(buf_pool->LRU)); + +exit: + mutex_exit(&LRU_list_mutex); + + if (info_buffer) { + status = i_s_innodb_buf_page_lru_fill( + thd, tables, info_buffer, lru_len); + + my_free(info_buffer, MYF(MY_ALLOW_ZERO_PTR)); + } + + DBUG_RETURN(status); +} + +/*******************************************************************//** +Fill page information for pages in InnoDB buffer pool to the +dynamic table INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buf_page_lru_fill_table( +/*===============================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + Item* ) /*!< in: condition (ignored) */ +{ + int status = 0; + + DBUG_ENTER("i_s_innodb_buf_page_lru_fill_table"); + + /* deny access to any users that do not hold PROCESS_ACL */ + if (check_global_access(thd, PROCESS_ACL)) { + DBUG_RETURN(0); + } + + /* Fetch information from pages in this buffer pool's LRU list, + and fill the corresponding I_S table */ + status = i_s_innodb_fill_buffer_lru(thd, tables); + + DBUG_RETURN(status); +} + +/*******************************************************************//** +Bind the dynamic table INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU. +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_page_lru_init( +/*============================*/ + void* p) /*!< in/out: table schema object */ +{ + ST_SCHEMA_TABLE* schema; + + DBUG_ENTER("i_s_innodb_buffer_page_lru_init"); + + schema = reinterpret_cast(p); + + schema->fields_info = i_s_innodb_buf_page_lru_fields_info; + schema->fill_table = i_s_innodb_buf_page_lru_fill_table; + + DBUG_RETURN(0); +} + +UNIV_INTERN struct st_mysql_plugin i_s_innodb_buffer_page_lru = +{ + /* the plugin type (a MYSQL_XXX_PLUGIN value) */ + /* int */ + STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN), + + /* pointer to type-specific plugin descriptor */ + /* void* */ + STRUCT_FLD(info, &i_s_info), + + /* plugin name */ + /* const char* */ + STRUCT_FLD(name, "INNODB_BUFFER_PAGE_LRU"), + + /* plugin author (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(author, plugin_author), + + /* general descriptive text (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(descr, "InnoDB Buffer Page in LRU"), + + /* the plugin license (PLUGIN_LICENSE_XXX) */ + /* int */ + STRUCT_FLD(license, PLUGIN_LICENSE_GPL), + + /* the function to invoke when plugin is loaded */ + /* int (*)(void*); */ + STRUCT_FLD(init, i_s_innodb_buffer_page_lru_init), + + /* the function to invoke when plugin is unloaded */ + /* int (*)(void*); */ + STRUCT_FLD(deinit, i_s_common_deinit), + + /* plugin version (for SHOW PLUGINS) */ + /* unsigned int */ + STRUCT_FLD(version, INNODB_VERSION_SHORT), + + /* struct st_mysql_show_var* */ + STRUCT_FLD(status_vars, NULL), + + /* struct st_mysql_sys_var** */ + STRUCT_FLD(system_vars, NULL), + + /* reserved for dependency checking */ + /* void* */ + STRUCT_FLD(__reserved1, NULL), +}; diff --git a/handler/i_s.h b/handler/i_s.h index 3905fdc7b06..7585994543f 100644 --- a/handler/i_s.h +++ b/handler/i_s.h @@ -36,7 +36,6 @@ extern struct st_mysql_plugin i_s_innodb_cmp; extern struct st_mysql_plugin i_s_innodb_cmp_reset; extern struct st_mysql_plugin i_s_innodb_cmpmem; extern struct st_mysql_plugin i_s_innodb_cmpmem_reset; -extern struct st_mysql_plugin i_s_innodb_patches; extern struct st_mysql_plugin i_s_innodb_rseg; extern struct st_mysql_plugin i_s_innodb_table_stats; extern struct st_mysql_plugin i_s_innodb_index_stats; @@ -44,5 +43,9 @@ extern struct st_mysql_plugin i_s_innodb_admin_command; extern struct st_mysql_plugin i_s_innodb_sys_tables; extern struct st_mysql_plugin i_s_innodb_sys_indexes; extern struct st_mysql_plugin i_s_innodb_sys_stats; +extern struct st_mysql_plugin i_s_innodb_changed_pages; +extern struct st_mysql_plugin i_s_innodb_buffer_page; +extern struct st_mysql_plugin i_s_innodb_buffer_page_lru; +extern struct st_mysql_plugin i_s_innodb_buffer_stats; #endif /* i_s_h */ diff --git a/handler/innodb_patch_info.h b/handler/innodb_patch_info.h deleted file mode 100644 index 38b97411340..00000000000 --- a/handler/innodb_patch_info.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2002-2006 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifdef USE_PRAGMA_INTERFACE -#pragma interface /* gcc class implementation */ -#endif - -struct innodb_enhancement { - const char *file; - const char *name; - const char *comment; - const char *link; -}innodb_enhancements[] = { -{"xtradb_show_enhancements","I_S.XTRADB_ENHANCEMENTS","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_show_status","Improvements to SHOW INNODB STATUS","Memory information and lock info fixes","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_io","Improvements to InnoDB IO","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_opt_lru_count","Fix of buffer_pool mutex","Decreases contention on buffer_pool mutex on LRU operations","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_buffer_pool_pages","Information of buffer pool content","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_expand_undo_slots","expandable maximum number of undo slots","from 1024 (default) to about 4000","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_extra_rseg","allow to create extra rollback segments","When create new db, the new parameter allows to create more rollback segments","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_overwrite_relay_log_info","overwrite relay-log.info when slave recovery","Building as plugin, it is not used.","http://www.percona.com/docs/wiki/percona-xtradb:innodb_overwrite_relay_log_info"}, -{"innodb_thread_concurrency_timer_based","use InnoDB timer based concurrency throttling (backport from MySQL 5.4.0)","",""}, -{"innodb_expand_import","convert .ibd file automatically when import tablespace","the files are generated by xtrabackup export mode.","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_dict_size_limit","Limit dictionary cache size","Variable innodb_dict_size_limit in bytes","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_split_buf_pool_mutex","More fix of buffer_pool mutex","Spliting buf_pool_mutex and optimizing based on innodb_opt_lru_count","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_stats","Additional features about InnoDB statistics/optimizer","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_recovery_patches","Bugfixes and adjustments about recovery process","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_purge_thread","Enable to use purge devoted thread","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_admin_command_base","XtraDB specific command interface through i_s","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_show_lock_name","Show mutex/lock name instead of crated file/line","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_extend_slow","Extended statistics in slow.log","It is InnoDB-part only. It needs to patch also to mysqld.","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_lru_dump_restore","Dump and restore command for content of buffer pool","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_separate_doublewrite","Add option 'innodb_doublewrite_file' to separate doublewrite dedicated tablespace","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_pass_corrupt_table","Treat tables as corrupt instead of crash, when meet corrupt blocks","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_fast_checksum","Using the checksum on 32bit-unit calculation","incompatible for unpatched ver.","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_files_extend","allow >4GB transaction log files, and can vary universal page size of datafiles","incompatible for unpatched ver.","http://www.percona.com/docs/wiki/percona-xtradb"}, -{"innodb_sys_tables_sys_indexes","Expose InnoDB SYS_TABLES and SYS_INDEXES schema tables","","http://www.percona.com/docs/wiki/percona-xtradb"}, -{NULL, NULL, NULL, NULL} -}; diff --git a/ibuf/ibuf0ibuf.c b/ibuf/ibuf0ibuf.c index 64dc9a5591d..e47794d2db1 100644 --- a/ibuf/ibuf0ibuf.c +++ b/ibuf/ibuf0ibuf.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1997, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -356,7 +356,7 @@ ibuf_tree_root_get( block = buf_page_get( IBUF_SPACE_ID, 0, FSP_IBUF_TREE_ROOT_PAGE_NO, RW_X_LATCH, mtr); - buf_block_dbg_add_level(block, SYNC_TREE_NODE); + buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE); return(buf_block_get_frame(block)); } @@ -498,7 +498,7 @@ ibuf_init_at_db_start(void) block = buf_page_get( IBUF_SPACE_ID, 0, FSP_IBUF_TREE_ROOT_PAGE_NO, RW_X_LATCH, &mtr); - buf_block_dbg_add_level(block, SYNC_TREE_NODE); + buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE); root = buf_block_get_frame(block); } @@ -1725,14 +1725,14 @@ ulint ibuf_add_free_page(void) /*====================*/ { - mtr_t mtr; - page_t* header_page; - ulint flags; - ulint zip_size; - ulint page_no; - page_t* page; - page_t* root; - page_t* bitmap_page; + mtr_t mtr; + page_t* header_page; + ulint flags; + ulint zip_size; + buf_block_t* block; + page_t* page; + page_t* root; + page_t* bitmap_page; mtr_start(&mtr); @@ -1753,34 +1753,24 @@ ibuf_add_free_page(void) of a deadlock. This is the reason why we created a special ibuf header page apart from the ibuf tree. */ - page_no = fseg_alloc_free_page( + block = fseg_alloc_free_page( header_page + IBUF_HEADER + IBUF_TREE_SEG_HEADER, 0, FSP_UP, &mtr); - if (page_no == FIL_NULL) { + if (block == NULL) { mtr_commit(&mtr); return(DB_STRONG_FAIL); } - { - buf_block_t* block; - - block = buf_page_get( - IBUF_SPACE_ID, 0, page_no, RW_X_LATCH, &mtr); - - buf_block_dbg_add_level(block, SYNC_TREE_NODE_NEW); - - - page = buf_block_get_frame(block); - } - + ut_ad(rw_lock_get_x_lock_count(&block->lock) == 1); ibuf_enter(); - mutex_enter(&ibuf_mutex); - root = ibuf_tree_root_get(&mtr); + buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE_NEW); + page = buf_block_get_frame(block); + /* Add the page to the free list and update the ibuf size data */ flst_add_last(root + PAGE_HEADER + PAGE_BTR_IBUF_FREE_LIST, @@ -1796,10 +1786,11 @@ ibuf_add_free_page(void) (level 2 page) */ bitmap_page = ibuf_bitmap_get_map_page( - IBUF_SPACE_ID, page_no, zip_size, &mtr); + IBUF_SPACE_ID, buf_block_get_page_no(block), zip_size, &mtr); ibuf_bitmap_page_set_bits( - bitmap_page, page_no, zip_size, IBUF_BITMAP_IBUF, TRUE, &mtr); + bitmap_page, buf_block_get_page_no(block), zip_size, + IBUF_BITMAP_IBUF, TRUE, &mtr); mtr_commit(&mtr); @@ -1900,8 +1891,7 @@ ibuf_remove_free_page(void) block = buf_page_get( IBUF_SPACE_ID, 0, page_no, RW_X_LATCH, &mtr); - buf_block_dbg_add_level(block, SYNC_TREE_NODE); - + buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE); page = buf_block_get_frame(block); } @@ -2095,7 +2085,15 @@ ibuf_get_merge_page_nos( } else { rec_page_no = ibuf_rec_get_page_no(rec); rec_space_id = ibuf_rec_get_space(rec); - ut_ad(rec_page_no > IBUF_TREE_ROOT_PAGE_NO); + /* In the system tablespace, the smallest + possible secondary index leaf page number is + bigger than IBUF_TREE_ROOT_PAGE_NO (4). In + other tablespaces, the clustered index tree is + created at page 3, which makes page 4 the + smallest possible secondary index leaf page + (and that only after DROP INDEX). */ + ut_ad(rec_page_no + > IBUF_TREE_ROOT_PAGE_NO - (rec_space_id != 0)); } #ifdef UNIV_IBUF_DEBUG @@ -2413,7 +2411,7 @@ ibuf_get_volume_buffered( block = buf_page_get( IBUF_SPACE_ID, 0, prev_page_no, RW_X_LATCH, mtr); - buf_block_dbg_add_level(block, SYNC_TREE_NODE); + buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE); prev_page = buf_block_get_frame(block); @@ -2487,7 +2485,7 @@ count_later: block = buf_page_get( IBUF_SPACE_ID, 0, next_page_no, RW_X_LATCH, mtr); - buf_block_dbg_add_level(block, SYNC_TREE_NODE); + buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE); next_page = buf_block_get_frame(block); @@ -2761,11 +2759,19 @@ ibuf_insert_low( root = ibuf_tree_root_get(&mtr); - err = btr_cur_pessimistic_insert(BTR_NO_LOCKING_FLAG - | BTR_NO_UNDO_LOG_FLAG, - cursor, - ibuf_entry, &ins_rec, - &dummy_big_rec, 0, thr, &mtr); + err = btr_cur_optimistic_insert( + BTR_NO_LOCKING_FLAG | BTR_NO_UNDO_LOG_FLAG, + cursor, ibuf_entry, &ins_rec, + &dummy_big_rec, 0, thr, &mtr); + + if (err == DB_FAIL) { + err = btr_cur_pessimistic_insert( + BTR_NO_LOCKING_FLAG + | BTR_NO_UNDO_LOG_FLAG, + cursor, ibuf_entry, &ins_rec, + &dummy_big_rec, 0, thr, &mtr); + } + if (err == DB_SUCCESS) { /* Update the page max trx id field */ page_update_max_trx_id(btr_cur_get_block(cursor), NULL, @@ -2980,7 +2986,7 @@ ibuf_insert_to_index_page( ut_ad(ibuf_inside()); ut_ad(dtuple_check_typed(entry)); - ut_ad(!buf_block_align(page)->is_hashed); + ut_ad(!buf_block_align(page)->index); if (UNIV_UNLIKELY(dict_table_is_comp(index->table) != (ibool)!!page_is_comp(page))) { @@ -3255,6 +3261,7 @@ ibuf_merge_or_delete_for_page( ut_ad(!block || buf_block_get_space(block) == space); ut_ad(!block || buf_block_get_page_no(block) == page_no); ut_ad(!block || buf_block_get_zip_size(block) == zip_size); + ut_ad(!block || buf_block_get_io_fix(block) == BUF_IO_READ); if (srv_force_recovery >= SRV_FORCE_NO_IBUF_MERGE || trx_sys_hdr_page(space, page_no)) { @@ -3289,7 +3296,7 @@ ibuf_merge_or_delete_for_page( function. When the counter is > 0, that prevents tablespace from being dropped. */ - tablespace_being_deleted = fil_inc_pending_ibuf_merges(space); + tablespace_being_deleted = fil_inc_pending_ops(space); if (UNIV_UNLIKELY(tablespace_being_deleted)) { /* Do not try to read the bitmap page from space; @@ -3313,7 +3320,7 @@ ibuf_merge_or_delete_for_page( mtr_commit(&mtr); if (!tablespace_being_deleted) { - fil_decr_pending_ibuf_merges(space); + fil_decr_pending_ops(space); } return; @@ -3410,7 +3417,13 @@ loop: ut_a(success); - buf_block_dbg_add_level(block, SYNC_TREE_NODE); + /* This is a user page (secondary index leaf page), + but we pretend that it is a change buffer page in + order to obey the latching order. This should be OK, + because buffered changes are applied immediately while + the block is io-fixed. Other threads must not try to + latch an io-fixed block. */ + buf_block_dbg_add_level(block, SYNC_IBUF_TREE_NODE); } /* Position pcur in the insert buffer at the first entry for this @@ -3539,7 +3552,7 @@ reset_bit: if (update_ibuf_bitmap && !tablespace_being_deleted) { - fil_decr_pending_ibuf_merges(space); + fil_decr_pending_ops(space); } ibuf_exit(); diff --git a/include/btr0btr.h b/include/btr0btr.h index 1fe40965c0f..827f81eab97 100644 --- a/include/btr0btr.h +++ b/include/btr0btr.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -188,26 +188,45 @@ btr_block_get_func( ulint mode, /*!< in: latch mode */ const char* file, /*!< in: file name */ ulint line, /*!< in: line where called */ - mtr_t* mtr) /*!< in/out: mtr */ - __attribute__((nonnull)); +# ifdef UNIV_SYNC_DEBUG + const dict_index_t* index, /*!< in: index tree, may be NULL + if it is not an insert buffer tree */ +# endif /* UNIV_SYNC_DEBUG */ + mtr_t* mtr); /*!< in/out: mini-transaction */ +# ifdef UNIV_SYNC_DEBUG /** Gets a buffer page and declares its latching order level. @param space tablespace identifier @param zip_size compressed page size in bytes or 0 for uncompressed pages @param page_no page number @param mode latch mode +@param index index tree, may be NULL if not the insert buffer tree @param mtr mini-transaction handle @return the block descriptor */ -# define btr_block_get(space,zip_size,page_no,mode,mtr) \ - btr_block_get_func(space,zip_size,page_no,mode,__FILE__,__LINE__,mtr) +# define btr_block_get(space,zip_size,page_no,mode,index,mtr) \ + btr_block_get_func(space,zip_size,page_no,mode, \ + __FILE__,__LINE__,index,mtr) +# else /* UNIV_SYNC_DEBUG */ /** Gets a buffer page and declares its latching order level. @param space tablespace identifier @param zip_size compressed page size in bytes or 0 for uncompressed pages @param page_no page number @param mode latch mode +@param idx index tree, may be NULL if not the insert buffer tree +@param mtr mini-transaction handle +@return the block descriptor */ +# define btr_block_get(space,zip_size,page_no,mode,idx,mtr) \ + btr_block_get_func(space,zip_size,page_no,mode,__FILE__,__LINE__,mtr) +# endif /* UNIV_SYNC_DEBUG */ +/** Gets a buffer page and declares its latching order level. +@param space tablespace identifier +@param zip_size compressed page size in bytes or 0 for uncompressed pages +@param page_no page number +@param mode latch mode +@param idx index tree, may be NULL if not the insert buffer tree @param mtr mini-transaction handle @return the uncompressed page frame */ -# define btr_page_get(space,zip_size,page_no,mode,mtr) \ - buf_block_get_frame(btr_block_get(space,zip_size,page_no,mode,mtr)) +# define btr_page_get(space,zip_size,page_no,mode,idx,mtr) \ + buf_block_get_frame(btr_block_get(space,zip_size,page_no,mode,idx,mtr)) /**************************************************************//** Sets the index id field of a page. */ UNIV_INLINE @@ -378,8 +397,7 @@ btr_free_root( ulint zip_size, /*!< in: compressed page size in bytes or 0 for uncompressed pages */ ulint root_page_no, /*!< in: root page number */ - mtr_t* mtr); /*!< in: a mini-transaction which has already - been started */ + mtr_t* mtr); /*!< in/out: mini-transaction */ /*************************************************************//** Makes tree one level higher by splitting the root, and inserts the tuple. It is assumed that mtr contains an x-latch on the tree. @@ -588,17 +606,23 @@ btr_parse_page_reorganize( #ifndef UNIV_HOTBACKUP /**************************************************************//** Gets the number of pages in a B-tree. -@return number of pages */ +@return number of pages, or ULINT_UNDEFINED if the index is unavailable */ UNIV_INTERN ulint btr_get_size( /*=========*/ dict_index_t* index, /*!< in: index */ - ulint flag); /*!< in: BTR_N_LEAF_PAGES or BTR_TOTAL_SIZE */ + ulint flag, /*!< in: BTR_N_LEAF_PAGES or BTR_TOTAL_SIZE */ + mtr_t* mtr) /*!< in/out: mini-transaction where index + is s-latched */ + __attribute__((nonnull, warn_unused_result)); /**************************************************************//** Allocates a new file page to be used in an index tree. NOTE: we assume that the caller has made the reservation for free extents! -@return new allocated block, x-latched; NULL if out of space */ +@retval NULL if no page could be allocated +@retval block, rw_lock_x_lock_count(&block->lock) == 1 if allocation succeeded +(init_mtr == mtr, or the page was not previously freed in mtr) +@retval block (not allocated or initialized) otherwise */ UNIV_INTERN buf_block_t* btr_page_alloc( @@ -609,7 +633,12 @@ btr_page_alloc( page split is made */ ulint level, /*!< in: level where the page is placed in the tree */ - mtr_t* mtr); /*!< in: mtr */ + mtr_t* mtr, /*!< in/out: mini-transaction + for the allocation */ + mtr_t* init_mtr) /*!< in/out: mini-transaction + for x-latching and initializing + the page */ + __attribute__((nonnull, warn_unused_result)); /**************************************************************//** Frees a file page used in an index tree. NOTE: cannot free field external storage pages because the page must contain info on its level. */ diff --git a/include/btr0btr.ic b/include/btr0btr.ic index e19c863300a..d729a58f9c7 100644 --- a/include/btr0btr.ic +++ b/include/btr0btr.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -48,6 +48,10 @@ btr_block_get_func( ulint mode, /*!< in: latch mode */ const char* file, /*!< in: file name */ ulint line, /*!< in: line where called */ +#ifdef UNIV_SYNC_DEBUG + const dict_index_t* index, /*!< in: index tree, may be NULL + if it is not an insert buffer tree */ +#endif /* UNIV_SYNC_DEBUG */ mtr_t* mtr) /*!< in/out: mtr */ { buf_block_t* block; @@ -59,7 +63,9 @@ btr_block_get_func( if (block && mode != RW_NO_LATCH) { - buf_block_dbg_add_level(block, SYNC_TREE_NODE); + buf_block_dbg_add_level( + block, index != NULL && dict_index_is_ibuf(index) + ? SYNC_IBUF_TREE_NODE : SYNC_TREE_NODE); } return(block); diff --git a/include/btr0cur.h b/include/btr0cur.h index 6f4ce95d72f..a8ec0a88867 100644 --- a/include/btr0cur.h +++ b/include/btr0cur.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -326,16 +326,6 @@ btr_cur_pessimistic_update( que_thr_t* thr, /*!< in: query thread */ mtr_t* mtr); /*!< in: mtr; must be committed before latching any further pages */ -/***************************************************************** -Commits and restarts a mini-transaction so that it will retain an -x-lock on index->lock and the cursor page. */ -UNIV_INTERN -void -btr_cur_mtr_commit_and_start( -/*=========================*/ - btr_cur_t* cursor, /*!< in: cursor */ - mtr_t* mtr) /*!< in/out: mini-transaction */ - __attribute__((nonnull)); /***********************************************************//** Marks a clustered index record deleted. Writes an undo log record to undo log on this delete marking. Writes in the trx id field the id @@ -522,6 +512,27 @@ btr_cur_disown_inherited_fields( const upd_t* update, /*!< in: update vector */ mtr_t* mtr) /*!< in/out: mini-transaction */ __attribute__((nonnull(2,3,4,5,6))); + +/** Operation code for btr_store_big_rec_extern_fields(). */ +enum blob_op { + /** Store off-page columns for a freshly inserted record */ + BTR_STORE_INSERT = 0, + /** Store off-page columns for an insert by update */ + BTR_STORE_INSERT_UPDATE, + /** Store off-page columns for an update */ + BTR_STORE_UPDATE +}; + +/*******************************************************************//** +Determine if an operation on off-page columns is an update. +@return TRUE if op != BTR_STORE_INSERT */ +UNIV_INLINE +ibool +btr_blob_op_is_update( +/*==================*/ + enum blob_op op) /*!< in: operation */ + __attribute__((warn_unused_result)); + /*******************************************************************//** Stores the fields in big_rec_vec to the tablespace and puts pointers to them in rec. The extern flags in rec will have to be set beforehand. @@ -529,52 +540,23 @@ The fields are stored on pages allocated from leaf node file segment of the index tree. @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ UNIV_INTERN -ulint -btr_store_big_rec_extern_fields_func( -/*=================================*/ +enum db_err +btr_store_big_rec_extern_fields( +/*============================*/ dict_index_t* index, /*!< in: index of rec; the index tree MUST be X-latched */ buf_block_t* rec_block, /*!< in/out: block containing rec */ - rec_t* rec, /*!< in: record */ + rec_t* rec, /*!< in/out: record */ const ulint* offsets, /*!< in: rec_get_offsets(rec, index); the "external storage" flags in offsets will not correspond to rec when this function returns */ -#ifdef UNIV_DEBUG - mtr_t* local_mtr, /*!< in: mtr containing the - latch to rec and to the tree */ -#endif /* UNIV_DEBUG */ -#if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG - ibool update_in_place,/*! in: TRUE if the record is updated - in place (not delete+insert) */ -#endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */ - const big_rec_t*big_rec_vec) /*!< in: vector containing fields + const big_rec_t*big_rec_vec, /*!< in: vector containing fields to be stored externally */ - __attribute__((nonnull)); - -/** Stores the fields in big_rec_vec to the tablespace and puts pointers to -them in rec. The extern flags in rec will have to be set beforehand. -The fields are stored on pages allocated from leaf node -file segment of the index tree. -@param index in: clustered index; MUST be X-latched by mtr -@param b in/out: block containing rec; MUST be X-latched by mtr -@param rec in/out: clustered index record -@param offsets in: rec_get_offsets(rec, index); - the "external storage" flags in offsets will not be adjusted -@param mtr in: mini-transaction that holds x-latch on index and b -@param upd in: TRUE if the record is updated in place (not delete+insert) -@param big in: vector containing fields to be stored externally -@return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */ -#ifdef UNIV_DEBUG -# define btr_store_big_rec_extern_fields(index,b,rec,offsets,mtr,upd,big) \ - btr_store_big_rec_extern_fields_func(index,b,rec,offsets,mtr,upd,big) -#elif defined UNIV_BLOB_LIGHT_DEBUG -# define btr_store_big_rec_extern_fields(index,b,rec,offsets,mtr,upd,big) \ - btr_store_big_rec_extern_fields_func(index,b,rec,offsets,upd,big) -#else -# define btr_store_big_rec_extern_fields(index,b,rec,offsets,mtr,upd,big) \ - btr_store_big_rec_extern_fields_func(index,b,rec,offsets,big) -#endif + mtr_t* btr_mtr, /*!< in: mtr containing the + latches to the clustered index */ + enum blob_op op) /*! in: operation code */ + __attribute__((nonnull, warn_unused_result)); /*******************************************************************//** Frees the space in an externally stored field to the file space diff --git a/include/btr0cur.ic b/include/btr0cur.ic index c833b3e8572..e31f77c77eb 100644 --- a/include/btr0cur.ic +++ b/include/btr0cur.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -139,7 +139,7 @@ btr_cur_compress_recommendation( btr_cur_t* cursor, /*!< in: btr cursor */ mtr_t* mtr) /*!< in: mtr */ { - const page_t* page; + const page_t* page; ut_ad(mtr_memo_contains(mtr, btr_cur_get_block(cursor), MTR_MEMO_PAGE_X_FIX)); @@ -197,4 +197,25 @@ btr_cur_can_delete_without_compress( return(TRUE); } + +/*******************************************************************//** +Determine if an operation on off-page columns is an update. +@return TRUE if op != BTR_STORE_INSERT */ +UNIV_INLINE +ibool +btr_blob_op_is_update( +/*==================*/ + enum blob_op op) /*!< in: operation */ +{ + switch (op) { + case BTR_STORE_INSERT: + return(FALSE); + case BTR_STORE_INSERT_UPDATE: + case BTR_STORE_UPDATE: + return(TRUE); + } + + ut_ad(0); + return(FALSE); +} #endif /* !UNIV_HOTBACKUP */ diff --git a/include/btr0pcur.h b/include/btr0pcur.h index f59514d04b3..40ecc77dcd1 100644 --- a/include/btr0pcur.h +++ b/include/btr0pcur.h @@ -279,14 +279,6 @@ btr_pcur_commit_specify_mtr( /*========================*/ btr_pcur_t* pcur, /*!< in: persistent cursor */ mtr_t* mtr); /*!< in: mtr to commit */ -/**************************************************************//** -Tests if a cursor is detached: that is the latch mode is BTR_NO_LATCHES. -@return TRUE if detached */ -UNIV_INLINE -ibool -btr_pcur_is_detached( -/*=================*/ - btr_pcur_t* pcur); /*!< in: persistent cursor */ /*********************************************************//** Moves the persistent cursor to the next record in the tree. If no records are left, the cursor stays 'after last in tree'. diff --git a/include/btr0pcur.ic b/include/btr0pcur.ic index 0f9b969e7c5..f49e155f97e 100644 --- a/include/btr0pcur.ic +++ b/include/btr0pcur.ic @@ -415,38 +415,6 @@ btr_pcur_commit_specify_mtr( pcur->pos_state = BTR_PCUR_WAS_POSITIONED; } -/**************************************************************//** -Sets the pcur latch mode to BTR_NO_LATCHES. */ -UNIV_INLINE -void -btr_pcur_detach( -/*============*/ - btr_pcur_t* pcur) /*!< in: persistent cursor */ -{ - ut_a(pcur->pos_state == BTR_PCUR_IS_POSITIONED); - - pcur->latch_mode = BTR_NO_LATCHES; - - pcur->pos_state = BTR_PCUR_WAS_POSITIONED; -} - -/**************************************************************//** -Tests if a cursor is detached: that is the latch mode is BTR_NO_LATCHES. -@return TRUE if detached */ -UNIV_INLINE -ibool -btr_pcur_is_detached( -/*=================*/ - btr_pcur_t* pcur) /*!< in: persistent cursor */ -{ - if (pcur->latch_mode == BTR_NO_LATCHES) { - - return(TRUE); - } - - return(FALSE); -} - /**************************************************************//** Sets the old_rec_buf field to NULL. */ UNIV_INLINE diff --git a/include/btr0sea.h b/include/btr0sea.h index f6d194319ae..9281be63f67 100644 --- a/include/btr0sea.h +++ b/include/btr0sea.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -148,8 +148,8 @@ btr_search_drop_page_hash_index_on_index( /*=====================================*/ dict_index_t* index); /* in: record descriptor */ /********************************************************************//** -Drops a page hash index when a page is freed from a fseg to the file system. -Drops possible hash index if the page happens to be in the buffer pool. */ +Drops a possible page hash index when a page is evicted from the buffer pool +or freed in a file segment. */ UNIV_INTERN void btr_search_drop_page_hash_when_freed( @@ -199,16 +199,6 @@ btr_search_validate(void); # define btr_search_validate() TRUE #endif /* defined UNIV_AHI_DEBUG || defined UNIV_DEBUG */ -/** Flag: has the search system been enabled? -Protected by btr_search_latch and btr_search_enabled_mutex. */ -extern char btr_search_enabled; - -/** Flag: whether the search system has completed its disabling process, -It is set to TRUE right after buf_pool_drop_hash_index() in -btr_search_disable(), indicating hash index entries are cleaned up. -Protected by btr_search_latch and btr_search_enabled_mutex. */ -extern ibool btr_search_fully_disabled; - /** The search info struct in an index */ struct btr_search_struct{ ulint ref_count; /*!< Number of blocks in this index tree @@ -277,24 +267,6 @@ struct btr_search_sys_struct{ /** The adaptive hash index */ extern btr_search_sys_t* btr_search_sys; -/** @brief The latch protecting the adaptive search system - -This latch protects the -(1) hash index; -(2) columns of a record to which we have a pointer in the hash index; - -but does NOT protect: - -(3) next record offset field in a record; -(4) next or previous records on the same page. - -Bear in mind (3) and (4) when using the hash index. -*/ -extern rw_lock_t* btr_search_latch_temp; - -/** The latch protecting the adaptive search system */ -#define btr_search_latch (*btr_search_latch_temp) - #ifdef UNIV_SEARCH_PERF_STAT /** Number of successful adaptive hash index lookups */ extern ulint btr_search_n_succ; diff --git a/include/btr0types.h b/include/btr0types.h index 07c06fb18d7..5adc858b931 100644 --- a/include/btr0types.h +++ b/include/btr0types.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -30,6 +30,7 @@ Created 2/17/1996 Heikki Tuuri #include "rem0types.h" #include "page0types.h" +#include "sync0rw.h" /** Persistent cursor */ typedef struct btr_pcur_struct btr_pcur_t; @@ -38,6 +39,28 @@ typedef struct btr_cur_struct btr_cur_t; /** B-tree search information for the adaptive hash index */ typedef struct btr_search_struct btr_search_t; +/** @brief The latch protecting the adaptive search system + +This latch protects the +(1) hash index; +(2) columns of a record to which we have a pointer in the hash index; + +but does NOT protect: + +(3) next record offset field in a record; +(4) next or previous records on the same page. + +Bear in mind (3) and (4) when using the hash index. +*/ +extern rw_lock_t* btr_search_latch_temp; + +/** The latch protecting the adaptive search system */ +#define btr_search_latch (*btr_search_latch_temp) + +/** Flag: has the search system been enabled? +Protected by btr_search_latch. */ +extern char btr_search_enabled; + #ifdef UNIV_BLOB_DEBUG # include "buf0types.h" /** An index->blobs entry for keeping track of off-page column references */ diff --git a/include/buf0buf.h b/include/buf0buf.h index 838dd7f3900..6566f8fa9e4 100644 --- a/include/buf0buf.h +++ b/include/buf0buf.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -103,6 +103,81 @@ enum buf_page_state { before putting to the free list */ }; +/** This structure defines information we will fetch from each buffer pool. It +will be used to print table IO stats */ +struct buf_pool_info_struct{ + /* General buffer pool info */ + ulint pool_size; /*!< Buffer Pool size in pages */ + ulint lru_len; /*!< Length of buf_pool->LRU */ + ulint old_lru_len; /*!< buf_pool->LRU_old_len */ + ulint free_list_len; /*!< Length of buf_pool->free list */ + ulint flush_list_len; /*!< Length of buf_pool->flush_list */ + ulint n_pend_unzip; /*!< buf_pool->n_pend_unzip, pages + pending decompress */ + ulint n_pend_reads; /*!< buf_pool->n_pend_reads, pages + pending read */ + ulint n_pending_flush_lru; /*!< Pages pending flush in LRU */ + ulint n_pending_flush_single_page;/*!< Pages pending to be + flushed as part of single page + flushes issued by various user + threads */ + ulint n_pending_flush_list; /*!< Pages pending flush in FLUSH + LIST */ + ulint n_pages_made_young; /*!< number of pages made young */ + ulint n_pages_not_made_young; /*!< number of pages not made young */ + ulint n_pages_read; /*!< buf_pool->n_pages_read */ + ulint n_pages_created; /*!< buf_pool->n_pages_created */ + ulint n_pages_written; /*!< buf_pool->n_pages_written */ + ulint n_page_gets; /*!< buf_pool->n_page_gets */ + ulint n_ra_pages_read_rnd; /*!< buf_pool->n_ra_pages_read_rnd, + number of pages readahead */ + ulint n_ra_pages_read; /*!< buf_pool->n_ra_pages_read, number + of pages readahead */ + ulint n_ra_pages_evicted; /*!< buf_pool->n_ra_pages_evicted, + number of readahead pages evicted + without access */ + ulint n_page_get_delta; /*!< num of buffer pool page gets since + last printout */ + + /* Buffer pool access stats */ + double page_made_young_rate; /*!< page made young rate in pages + per second */ + double page_not_made_young_rate;/*!< page not made young rate + in pages per second */ + double pages_read_rate; /*!< num of pages read per second */ + double pages_created_rate; /*!< num of pages create per second */ + double pages_written_rate; /*!< num of pages written per second */ + ulint page_read_delta; /*!< num of pages read since last + printout */ + ulint young_making_delta; /*!< num of pages made young since + last printout */ + ulint not_young_making_delta; /*!< num of pages not make young since + last printout */ + + /* Statistics about read ahead algorithm. */ + double pages_readahead_rnd_rate;/*!< random readahead rate in pages per + second */ + double pages_readahead_rate; /*!< readahead rate in pages per + second */ + double pages_evicted_rate; /*!< rate of readahead page evicted + without access, in pages per second */ + + /* Stats about LRU eviction */ + ulint unzip_lru_len; /*!< length of buf_pool->unzip_LRU + list */ + /* Counters for LRU policy */ + ulint io_sum; /*!< buf_LRU_stat_sum.io */ + ulint io_cur; /*!< buf_LRU_stat_cur.io, num of IO + for current interval */ + ulint unzip_sum; /*!< buf_LRU_stat_sum.unzip */ + ulint unzip_cur; /*!< buf_LRU_stat_cur.unzip, num + pages decompressed in current + interval */ +}; + +typedef struct buf_pool_info_struct buf_pool_info_t; + + #ifndef UNIV_HOTBACKUP /********************************************************************//** Creates the buffer pool. @@ -120,13 +195,11 @@ buf_pool_free(void); /*===============*/ /********************************************************************//** -Drops the adaptive hash index. To prevent a livelock, this function -is only to be called while holding btr_search_latch and while -btr_search_enabled == FALSE. */ +Clears the adaptive hash index on all pages in the buffer pool. */ UNIV_INTERN void -buf_pool_drop_hash_index(void); -/*==========================*/ +buf_pool_clear_hash_index(void); +/*===========================*/ /********************************************************************//** Relocate a buffer control block. Relocates the block on the LRU list @@ -372,15 +445,6 @@ buf_page_peek( /*==========*/ ulint space, /*!< in: space id */ ulint offset);/*!< in: page number */ -/********************************************************************//** -Resets the check_index_page_at_flush field of a page if found in the buffer -pool. */ -UNIV_INTERN -void -buf_reset_check_index_page_at_flush( -/*================================*/ - ulint space, /*!< in: space id */ - ulint offset);/*!< in: page number */ #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG /********************************************************************//** Sets file_page_was_freed TRUE if the page is found in the buffer pool. @@ -449,17 +513,6 @@ buf_page_peek_if_too_old( /*=====================*/ const buf_page_t* bpage); /*!< in: block to make younger */ /********************************************************************//** -Returns the current state of is_hashed of a page. FALSE if the page is -not in the pool. NOTE that this operation does not fix the page in the -pool if it is found there. -@return TRUE if page hash index is built in search system */ -UNIV_INTERN -ibool -buf_page_peek_if_search_hashed( -/*===========================*/ - ulint space, /*!< in: space id */ - ulint offset);/*!< in: page number */ -/********************************************************************//** Gets the youngest modification log sequence number for a frame. Returns zero if not file page or no modification occurred yet. @return newest modification to page */ @@ -645,6 +698,16 @@ void buf_print_io( /*=========*/ FILE* file); /*!< in: file where to print */ +/*******************************************************************//** +Collect buffer pool stats information for a buffer pool. Also +record aggregated stats if there are more than one buffer pool +in the server */ +UNIV_INTERN +void +buf_stats_get_pool_info( +/*====================*/ + buf_pool_info_t* pool_info); /*!< in/out: buffer pool info + to fill */ /*********************************************************************//** Returns the ratio in percents of modified pages in the buffer pool / database pages in the buffer pool. @@ -1073,12 +1136,27 @@ UNIV_INTERN ulint buf_get_free_list_len(void); /*=======================*/ + +/*********************************************************************//** +Get the nth chunk's buffer block in the specified buffer pool. +@return the nth chunk's buffer block. */ +UNIV_INLINE +buf_block_t* +buf_get_nth_chunk_block( +/*====================*/ + const buf_pool_t* buf_pool, /*!< in: buffer pool instance */ + ulint n, /*!< in: nth chunk in the buffer pool */ + ulint* chunk_size); /*!< in: chunk size */ + #endif /* !UNIV_HOTBACKUP */ /** The common buffer control block structure for compressed and uncompressed frames */ +/** Number of bits used for buffer page states. */ +#define BUF_PAGE_STATE_BITS 3 + struct buf_page_struct{ /** @name General fields None of these bit-fields must be modified without holding @@ -1093,7 +1171,8 @@ struct buf_page_struct{ unsigned offset:32; /*!< page number; also protected by buf_pool_mutex. */ - unsigned state:3; /*!< state of the control block; also + unsigned state:BUF_PAGE_STATE_BITS; + /*!< state of the control block; also protected by buf_pool_mutex. State transitions from BUF_BLOCK_READY_FOR_USE to @@ -1296,13 +1375,16 @@ struct buf_block_struct{ /* @} */ /** @name Hash search fields - These 6 fields may only be modified when we have + These 5 fields may only be modified when we have an x-latch on btr_search_latch AND - we are holding an s-latch or x-latch on buf_block_struct::lock or - we know that buf_block_struct::buf_fix_count == 0. An exception to this is when we init or create a page - in the buffer pool in buf0buf.c. */ + in the buffer pool in buf0buf.c. + + Another exception is that assigning block->index = NULL + is allowed whenever holding an x-latch on btr_search_latch. */ /* @{ */ @@ -1311,20 +1393,20 @@ struct buf_block_struct{ pointers in the adaptive hash index pointing to this frame */ #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ - unsigned is_hashed:1; /*!< TRUE if hash index has - already been built on this - page; note that it does not - guarantee that the index is - complete, though: there may - have been hash collisions, - record deletions, etc. */ unsigned curr_n_fields:10;/*!< prefix length for hash indexing: number of full fields */ unsigned curr_n_bytes:15;/*!< number of bytes in hash indexing */ unsigned curr_left_side:1;/*!< TRUE or FALSE in hash indexing */ - dict_index_t* index; /*!< Index for which the adaptive - hash index has been created. */ + dict_index_t* index; /*!< Index for which the + adaptive hash index has been + created, or NULL if the page + does not exist in the + index. Note that it does not + guarantee that the index is + complete, though: there may + have been hash collisions, + record deletions, etc. */ /* @} */ # ifdef UNIV_SYNC_DEBUG /** @name Debug fields */ diff --git a/include/buf0buf.ic b/include/buf0buf.ic index a081d6a34c0..8dae4b6f4c6 100644 --- a/include/buf0buf.ic +++ b/include/buf0buf.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -18,8 +18,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -36,6 +36,7 @@ Created 11/5/1995 Heikki Tuuri #include "buf0lru.h" #include "buf0rea.h" #include "srv0srv.h" + /********************************************************************//** Reads the freed_page_clock of a buffer block. @return freed_page_clock */ @@ -1154,4 +1155,23 @@ buf_block_dbg_add_level( sync_thread_add_level(&block->lock, level, FALSE); } #endif /* UNIV_SYNC_DEBUG */ + +/*********************************************************************//** +Get the nth chunk's buffer block in the specified buffer pool. +@return the nth chunk's buffer block. */ +UNIV_INLINE +buf_block_t* +buf_get_nth_chunk_block( +/*====================*/ + const buf_pool_t* buf_pool, /*!< in: buffer pool instance */ + ulint n, /*!< in: nth chunk in the buffer pool */ + ulint* chunk_size) /*!< in: chunk size */ +{ + const buf_chunk_t* chunk; + + chunk = buf_pool->chunks + n; + *chunk_size = chunk->size; + return(chunk->blocks); +} #endif /* !UNIV_HOTBACKUP */ + diff --git a/include/buf0lru.h b/include/buf0lru.h index 8abebfb675c..dfce4f6a117 100644 --- a/include/buf0lru.h +++ b/include/buf0lru.h @@ -93,13 +93,12 @@ buf_LRU_insert_zip_clean( Try to free a block. If bpage is a descriptor of a compressed-only page, the descriptor object will be freed as well. -NOTE: If this function returns TRUE, it will temporarily -release buf_pool_mutex. Furthermore, the page frame will no longer be -accessible via bpage. +NOTE: This will temporarily release buf_pool_mutex. Furthermore, the +page frame will no longer be accessible via bpage. -The caller must hold buf_pool_mutex and buf_page_get_mutex(bpage) and -release these two mutexes after the call. No other -buf_page_get_mutex() may be held when calling this function. +The caller must hold buf_page_get_mutex(bpage) and release this mutex +after the call. No other buf_page_get_mutex() may be held when +calling this function. @return TRUE if freed, FALSE otherwise. */ UNIV_INTERN ibool diff --git a/include/db0err.h b/include/db0err.h index c7fa6d2a444..e4a3844cd22 100644 --- a/include/db0err.h +++ b/include/db0err.h @@ -97,6 +97,8 @@ enum db_err { DB_FOREIGN_EXCEED_MAX_CASCADE, /* Foreign key constraint related cascading delete/update exceeds maximum allowed depth */ + DB_TABLE_IN_FK_CHECK, /* table is being used in foreign + key check */ /* The following are partial failure codes */ DB_FAIL = 1000, diff --git a/include/dict0boot.h b/include/dict0boot.h index a57c5127323..c1ed6ba4f2a 100644 --- a/include/dict0boot.h +++ b/include/dict0boot.h @@ -91,6 +91,26 @@ void dict_create(void); /*=============*/ +/*****************************************************************//** +Verifies the SYS_STATS table by scanning its clustered index. This +function may only be called at InnoDB startup time. + +@return TRUE if SYS_STATS was verified successfully */ +UNIV_INTERN +ibool +dict_verify_xtradb_sys_stats(void); +/*==============================*/ + +/*****************************************************************//** +Discard the existing dictionary cache SYS_STATS information, create and +add it there anew. Does not touch the old SYS_STATS tablespace page +under the assumption that they are corrupted or overwritten for other +purposes. */ +UNIV_INTERN +void +dict_recreate_xtradb_sys_stats(void); +/*================================*/ + /* Space id and page no where the dictionary header resides */ #define DICT_HDR_SPACE 0 /* the SYSTEM tablespace */ diff --git a/include/dict0dict.h b/include/dict0dict.h index 2baecdc958a..be8bd20dba9 100644 --- a/include/dict0dict.h +++ b/include/dict0dict.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -1018,14 +1018,6 @@ dict_index_get_page( /*================*/ const dict_index_t* tree); /*!< in: index */ /*********************************************************************//** -Sets the page number of the root of index tree. */ -UNIV_INLINE -void -dict_index_set_page( -/*================*/ - dict_index_t* index, /*!< in/out: index */ - ulint page); /*!< in: page number */ -/*********************************************************************//** Gets the read-write lock of the index tree. @return read-write lock */ UNIV_INLINE diff --git a/include/dict0dict.ic b/include/dict0dict.ic index bd7534dc7e2..1c1c3d7f202 100644 --- a/include/dict0dict.ic +++ b/include/dict0dict.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -722,21 +722,6 @@ dict_index_get_page( return(index->page); } -/*********************************************************************//** -Sets the page number of the root of index tree. */ -UNIV_INLINE -void -dict_index_set_page( -/*================*/ - dict_index_t* index, /*!< in/out: index */ - ulint page) /*!< in: page number */ -{ - ut_ad(index); - ut_ad(index->magic_n == DICT_INDEX_MAGIC_N); - - index->page = page; -} - /*********************************************************************//** Gets the read-write lock of the index tree. @return read-write lock */ diff --git a/include/dict0mem.h b/include/dict0mem.h index 3554274847c..a729ed8816f 100644 --- a/include/dict0mem.h +++ b/include/dict0mem.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -305,7 +305,9 @@ struct dict_index_struct{ unsigned to_be_dropped:1; /*!< TRUE if this index is marked to be dropped in ha_innobase::prepare_drop_index(), - otherwise FALSE */ + otherwise FALSE. Protected by + dict_sys->mutex, dict_operation_lock and + index->lock.*/ dict_field_t* fields; /*!< array of field descriptions */ #ifndef UNIV_HOTBACKUP UT_LIST_NODE_T(dict_index_t) diff --git a/include/fil0fil.h b/include/fil0fil.h index 11c4cb4ba03..656a534a0c1 100644 --- a/include/fil0fil.h +++ b/include/fil0fil.h @@ -142,6 +142,8 @@ extern fil_addr_t fil_addr_null; #define FIL_PAGE_TYPE_BLOB 10 /*!< Uncompressed BLOB page */ #define FIL_PAGE_TYPE_ZBLOB 11 /*!< First compressed BLOB page */ #define FIL_PAGE_TYPE_ZBLOB2 12 /*!< Subsequent compressed BLOB page */ +#define FIL_PAGE_TYPE_LAST FIL_PAGE_TYPE_ZBLOB2 + /*!< Last page type */ /* @} */ /** Space types @{ */ @@ -341,20 +343,19 @@ fil_read_flushed_lsn_and_arch_log_no( ib_uint64_t* min_flushed_lsn, /*!< in/out: */ ib_uint64_t* max_flushed_lsn); /*!< in/out: */ /*******************************************************************//** -Increments the count of pending insert buffer page merges, if space is not -being deleted. -@return TRUE if being deleted, and ibuf merges should be skipped */ +Increments the count of pending operation, if space is not being deleted. +@return TRUE if being deleted, and operation should be skipped */ UNIV_INTERN ibool -fil_inc_pending_ibuf_merges( -/*========================*/ +fil_inc_pending_ops( +/*================*/ ulint id); /*!< in: space id */ /*******************************************************************//** -Decrements the count of pending insert buffer page merges. */ +Decrements the count of pending operations. */ UNIV_INTERN void -fil_decr_pending_ibuf_merges( -/*=========================*/ +fil_decr_pending_ops( +/*=================*/ ulint id); /*!< in: space id */ #endif /* !UNIV_HOTBACKUP */ /*******************************************************************//** @@ -473,8 +474,11 @@ fil_open_single_table_tablespace( accessing the first page of the file */ ulint id, /*!< in: space id */ ulint flags, /*!< in: tablespace flags */ - const char* name); /*!< in: table name in the + const char* name, /*!< in: table name in the databasename/tablename format */ + trx_t* trx); /*!< in: transaction. This is only + used for IMPORT TABLESPACE, must be NULL + otherwise */ /********************************************************************//** It is possible, though very improbable, that the lsn's in the tablespace to be imported have risen above the current system lsn, if a lengthy purge, ibuf diff --git a/include/fsp0fsp.h b/include/fsp0fsp.h index 7abd3914eda..8506748ae03 100644 --- a/include/fsp0fsp.h +++ b/include/fsp0fsp.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -176,30 +176,33 @@ fseg_n_reserved_pages( Allocates a single free page from a segment. This function implements the intelligent allocation strategy which tries to minimize file space fragmentation. -@return the allocated page offset FIL_NULL if no page could be allocated */ -UNIV_INTERN -ulint -fseg_alloc_free_page( -/*=================*/ - fseg_header_t* seg_header, /*!< in: segment header */ - ulint hint, /*!< in: hint of which page would be desirable */ - byte direction, /*!< in: if the new page is needed because +@param[in/out] seg_header segment header +@param[in] hint hint of which page would be desirable +@param[in] direction if the new page is needed because of an index page split, and records are inserted there in order, into which direction they go alphabetically: FSP_DOWN, - FSP_UP, FSP_NO_DIR */ - mtr_t* mtr); /*!< in: mtr handle */ + FSP_UP, FSP_NO_DIR +@param[in/out] mtr mini-transaction +@return X-latched block, or NULL if no page could be allocated */ +#define fseg_alloc_free_page(seg_header, hint, direction, mtr) \ + fseg_alloc_free_page_general(seg_header, hint, direction, \ + FALSE, mtr, mtr) /**********************************************************************//** Allocates a single free page from a segment. This function implements the intelligent allocation strategy which tries to minimize file space fragmentation. -@return allocated page offset, FIL_NULL if no page could be allocated */ +@retval NULL if no page could be allocated +@retval block, rw_lock_x_lock_count(&block->lock) == 1 if allocation succeeded +(init_mtr == mtr, or the page was not previously freed in mtr) +@retval block (not allocated or initialized) otherwise */ UNIV_INTERN -ulint +buf_block_t* fseg_alloc_free_page_general( /*=========================*/ - fseg_header_t* seg_header,/*!< in: segment header */ - ulint hint, /*!< in: hint of which page would be desirable */ + fseg_header_t* seg_header,/*!< in/out: segment header */ + ulint hint, /*!< in: hint of which page would be + desirable */ byte direction,/*!< in: if the new page is needed because of an index page split, and records are inserted there in order, into which @@ -210,7 +213,12 @@ fseg_alloc_free_page_general( with fsp_reserve_free_extents, then there is no need to do the check for this individual page */ - mtr_t* mtr); /*!< in: mtr handle */ + mtr_t* mtr, /*!< in/out: mini-transaction */ + mtr_t* init_mtr)/*!< in/out: mtr or another mini-transaction + in which the page should be initialized. + If init_mtr!=mtr, but the page is already + latched in mtr, do not initialize the page. */ + __attribute__((warn_unused_result, nonnull)); /**********************************************************************//** Reserves free pages from a tablespace. All mini-transactions which may use several pages from the tablespace should call this function beforehand diff --git a/include/ha0ha.h b/include/ha0ha.h index 3299000bf3c..8bba564d153 100644 --- a/include/ha0ha.h +++ b/include/ha0ha.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -31,13 +31,14 @@ Created 8/18/1994 Heikki Tuuri #include "hash0hash.h" #include "page0types.h" #include "buf0types.h" +#include "rem0types.h" /*************************************************************//** Looks for an element in a hash table. @return pointer to the data of the first hash table node in chain having the fold number, NULL if not found */ UNIV_INLINE -void* +const rec_t* ha_search_and_get_data( /*===================*/ hash_table_t* table, /*!< in: hash table */ @@ -51,11 +52,11 @@ ha_search_and_update_if_found_func( /*===============================*/ hash_table_t* table, /*!< in/out: hash table */ ulint fold, /*!< in: folded value of the searched data */ - void* data, /*!< in: pointer to the data */ + const rec_t* data, /*!< in: pointer to the data */ #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG buf_block_t* new_block,/*!< in: block containing new_data */ #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ - void* new_data);/*!< in: new pointer to the data */ + const rec_t* new_data);/*!< in: new pointer to the data */ #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG /** Looks for an element when we know the pointer to the data and @@ -113,14 +114,6 @@ chosen to be a slightly bigger prime number. # define ha_create(n_c,n_m,level) ha_create_func(n_c,n_m) #endif /* UNIV_SYNC_DEBUG */ -/*************************************************************//** -Empties a hash table and frees the memory heaps. */ -UNIV_INTERN -void -ha_clear( -/*=====*/ - hash_table_t* table); /*!< in, own: hash table */ - /*************************************************************//** Inserts an entry into a hash table. If an entry with the same fold number is found, its node is updated to point to the new data, and no new node @@ -138,7 +131,7 @@ ha_insert_for_fold_func( #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG buf_block_t* block, /*!< in: buffer block containing the data */ #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ - void* data); /*!< in: data, must not be NULL */ + const rec_t* data); /*!< in: data, must not be NULL */ #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG /** @@ -174,7 +167,7 @@ ha_search_and_delete_if_found( /*==========================*/ hash_table_t* table, /*!< in: hash table */ ulint fold, /*!< in: folded value of the searched data */ - void* data); /*!< in: pointer to the data */ + const rec_t* data); /*!< in: pointer to the data */ #ifndef UNIV_HOTBACKUP /*****************************************************************//** Removes from the chain determined by fold all nodes whose data pointer @@ -217,7 +210,7 @@ struct ha_node_struct { #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG buf_block_t* block; /*!< buffer block containing the data, or NULL */ #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ - void* data; /*!< pointer to the data */ + const rec_t* data; /*!< pointer to the data */ ulint fold; /*!< fold value for the data */ }; diff --git a/include/ha0ha.ic b/include/ha0ha.ic index 734403c4cd9..5656e9b7eba 100644 --- a/include/ha0ha.ic +++ b/include/ha0ha.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -25,6 +25,7 @@ Created 8/18/1994 Heikki Tuuri #include "ut0rnd.h" #include "mem0mem.h" +#include "btr0types.h" /***********************************************************//** Deletes a hash node. */ @@ -39,10 +40,10 @@ ha_delete_hash_node( Gets a hash node data. @return pointer to the data */ UNIV_INLINE -void* +const rec_t* ha_node_get_data( /*=============*/ - ha_node_t* node) /*!< in: hash chain node */ + const ha_node_t* node) /*!< in: hash chain node */ { return(node->data); } @@ -57,7 +58,7 @@ ha_node_set_data_func( #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG buf_block_t* block, /*!< in: buffer block containing the data */ #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */ - void* data) /*!< in: pointer to the data */ + const rec_t* data) /*!< in: pointer to the data */ { #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG node->block = block; @@ -105,41 +106,12 @@ ha_chain_get_first( hash_get_nth_cell(table, hash_calc_hash(fold, table))->node); } -/*************************************************************//** -Looks for an element in a hash table. -@return pointer to the first hash table node in chain having the fold -number, NULL if not found */ -UNIV_INLINE -ha_node_t* -ha_search( -/*======*/ - hash_table_t* table, /*!< in: hash table */ - ulint fold) /*!< in: folded value of the searched data */ -{ - ha_node_t* node; - - ASSERT_HASH_MUTEX_OWN(table, fold); - - node = ha_chain_get_first(table, fold); - - while (node) { - if (node->fold == fold) { - - return(node); - } - - node = ha_chain_get_next(node); - } - - return(NULL); -} - /*************************************************************//** Looks for an element in a hash table. @return pointer to the data of the first hash table node in chain having the fold number, NULL if not found */ UNIV_INLINE -void* +const rec_t* ha_search_and_get_data( /*===================*/ hash_table_t* table, /*!< in: hash table */ @@ -148,6 +120,10 @@ ha_search_and_get_data( ha_node_t* node; ASSERT_HASH_MUTEX_OWN(table, fold); +#ifdef UNIV_SYNC_DEBUG + ut_ad(rw_lock_own(&btr_search_latch, RW_LOCK_SHARED)); +#endif /* UNIV_SYNC_DEBUG */ + ut_ad(btr_search_enabled); node = ha_chain_get_first(table, fold); @@ -172,12 +148,14 @@ ha_search_with_data( /*================*/ hash_table_t* table, /*!< in: hash table */ ulint fold, /*!< in: folded value of the searched data */ - void* data) /*!< in: pointer to the data */ + const rec_t* data) /*!< in: pointer to the data */ { ha_node_t* node; ASSERT_HASH_MUTEX_OWN(table, fold); + ut_ad(btr_search_enabled); + node = ha_chain_get_first(table, fold); while (node) { @@ -202,11 +180,15 @@ ha_search_and_delete_if_found( /*==========================*/ hash_table_t* table, /*!< in: hash table */ ulint fold, /*!< in: folded value of the searched data */ - void* data) /*!< in: pointer to the data */ + const rec_t* data) /*!< in: pointer to the data */ { ha_node_t* node; ASSERT_HASH_MUTEX_OWN(table, fold); +#ifdef UNIV_SYNC_DEBUG + ut_ad(rw_lock_own(&btr_search_latch, RW_LOCK_EX)); +#endif /* UNIV_SYNC_DEBUG */ + ut_ad(btr_search_enabled); node = ha_search_with_data(table, fold, data); diff --git a/include/log0log.h b/include/log0log.h index 2b4b34f2600..4ead88458a4 100644 --- a/include/log0log.h +++ b/include/log0log.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1995, 2010, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2009, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -18,8 +18,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -41,6 +41,9 @@ Created 12/9/1995 Heikki Tuuri #include "sync0rw.h" #endif /* !UNIV_HOTBACKUP */ +/* Type used for all log sequence number storage and arithmetics */ +typedef ib_uint64_t lsn_t; + /** Redo log buffer */ typedef struct log_struct log_t; /** Redo log group */ @@ -953,6 +956,11 @@ struct log_struct{ become signaled */ /* @} */ #endif /* UNIV_LOG_ARCHIVE */ + ib_uint64_t tracked_lsn; /*!< log tracking has advanced to this + lsn. Field accessed atomically where + 64-bit atomic ops are supported, + protected by the log sys mutex + otherwise. */ }; #ifdef UNIV_LOG_ARCHIVE diff --git a/include/log0online.h b/include/log0online.h new file mode 100644 index 00000000000..0e0ca169f6f --- /dev/null +++ b/include/log0online.h @@ -0,0 +1,111 @@ +/***************************************************************************** + +Copyright (c) 2011-2012, Percona Inc. All Rights Reserved. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +/**************************************************//** +@file include/log0online.h +Online database log parsing for changed page tracking +*******************************************************/ + +#ifndef log0online_h +#define log0online_h + +#include "univ.i" +#include "os0file.h" + +/*********************************************************************//** +Initializes the online log following subsytem. */ +UNIV_INTERN +void +log_online_read_init(); +/*===================*/ + +/*********************************************************************//** +Shuts down the online log following subsystem. */ +UNIV_INTERN +void +log_online_read_shutdown(); +/*=======================*/ + +/*********************************************************************//** +Reads and parses the redo log up to last checkpoint LSN to build the changed +page bitmap which is then written to disk. */ +UNIV_INTERN +void +log_online_follow_redo_log(); +/*=========================*/ + +/** The iterator through all bits of changed pages bitmap blocks */ +struct log_bitmap_iterator_struct +{ + char in_name[FN_REFLEN]; /*!< the file name for bitmap + input */ + os_file_t in; /*!< the bitmap input file */ + ib_uint64_t in_offset; /*!< the next write position in the + bitmap output file */ + ib_uint32_t bit_offset; /*!< bit offset inside of bitmap + block*/ + ib_uint64_t start_lsn; /*!< Start lsn of the block */ + ib_uint64_t end_lsn; /*!< End lsn of the block */ + ib_uint32_t space_id; /*!< Block space id */ + ib_uint32_t first_page_id; /*!< First block page id */ + ibool changed; /*!< true if current page was changed */ + byte* page; /*!< Bitmap block */ +}; + +typedef struct log_bitmap_iterator_struct log_bitmap_iterator_t; + +#define LOG_BITMAP_ITERATOR_START_LSN(i) \ + ((i).start_lsn) +#define LOG_BITMAP_ITERATOR_END_LSN(i) \ + ((i).end_lsn) +#define LOG_BITMAP_ITERATOR_SPACE_ID(i) \ + ((i).space_id) +#define LOG_BITMAP_ITERATOR_PAGE_NUM(i) \ + ((i).first_page_id + (i).bit_offset) +#define LOG_BITMAP_ITERATOR_PAGE_CHANGED(i) \ + ((i).changed) + +/*********************************************************************//** +Initializes log bitmap iterator. +@return TRUE if the iterator is initialized OK, FALSE otherwise. */ +UNIV_INTERN +ibool +log_online_bitmap_iterator_init( +/*============================*/ + log_bitmap_iterator_t *i); /*!log_mode = MTR_LOG_ALL; mtr->modifications = FALSE; mtr->n_log_recs = 0; + mtr->n_freed_pages = 0; ut_d(mtr->state = MTR_ACTIVE); ut_d(mtr->magic_n = MTR_MAGIC_N); diff --git a/include/os0file.h b/include/os0file.h index 98cab5ef874..bc3a54192d5 100644 --- a/include/os0file.h +++ b/include/os0file.h @@ -463,6 +463,14 @@ os_file_set_eof( /*============*/ FILE* file); /*!< in: file to be truncated */ /***********************************************************************//** +Truncates a file at the specified position. +@return TRUE if success */ +UNIV_INTERN +ibool +os_file_set_eof_at( + os_file_t file, /*!< in: handle to a file */ + ib_uint64_t new_len);/*!< in: new file length */ +/***********************************************************************//** Flushes the write buffers of a given file to the disk. @return TRUE if success */ UNIV_INTERN diff --git a/include/os0sync.h b/include/os0sync.h index 7366e2c3402..6732fa52b29 100644 --- a/include/os0sync.h +++ b/include/os0sync.h @@ -287,7 +287,11 @@ Atomic compare-and-swap and increment for InnoDB. */ #if defined(HAVE_IB_GCC_ATOMIC_BUILTINS) -#define HAVE_ATOMIC_BUILTINS +# define HAVE_ATOMIC_BUILTINS + +# ifdef HAVE_IB_GCC_ATOMIC_BUILTINS_64 +# define HAVE_ATOMIC_BUILTINS_64 +# endif /**********************************************************//** Returns true if swapped, ptr is pointer to target, old_val is value to @@ -326,6 +330,9 @@ amount of increment. */ # define os_atomic_increment_ulint(ptr, amount) \ os_atomic_increment(ptr, amount) +# define os_atomic_increment_uint64(ptr, amount) \ + os_atomic_increment(ptr, amount) + /**********************************************************//** Returns the old value of *ptr, atomically sets *ptr to new_val */ @@ -334,12 +341,13 @@ Returns the old value of *ptr, atomically sets *ptr to new_val */ #elif defined(HAVE_IB_SOLARIS_ATOMICS) -#define HAVE_ATOMIC_BUILTINS +# define HAVE_ATOMIC_BUILTINS +# define HAVE_ATOMIC_BUILTINS_64 /* If not compiling with GCC or GCC doesn't support the atomic intrinsics and running on Solaris >= 10 use Solaris atomics */ -#include +# include /**********************************************************//** Returns true if swapped, ptr is pointer to target, old_val is value to @@ -379,6 +387,9 @@ amount of increment. */ # define os_atomic_increment_ulint(ptr, amount) \ atomic_add_long_nv(ptr, amount) +# define os_atomic_increment_uint64(ptr, amount) \ + atomic_add_64_nv(ptr, amount) + /**********************************************************//** Returns the old value of *ptr, atomically sets *ptr to new_val */ @@ -387,7 +398,11 @@ Returns the old value of *ptr, atomically sets *ptr to new_val */ #elif defined(HAVE_WINDOWS_ATOMICS) -#define HAVE_ATOMIC_BUILTINS +# define HAVE_ATOMIC_BUILTINS + +# ifndef _WIN32 +# define HAVE_ATOMIC_BUILTINS_64 +# endif /* On Windows, use Windows atomics / interlocked */ # ifdef _WIN64 @@ -425,6 +440,11 @@ amount of increment. */ # define os_atomic_increment_ulint(ptr, amount) \ ((ulint) (win_xchg_and_add(ptr, amount) + amount)) +# define os_atomic_increment_uint64(ptr, amount) \ + ((ib_uint64_t) (InterlockedExchangeAdd64( \ + (ib_int64_t*) ptr, \ + (ib_int64_t) amount) + amount)) + /**********************************************************//** Returns the old value of *ptr, atomically sets *ptr to new_val. InterlockedExchange() operates on LONG, and the LONG will be diff --git a/include/page0page.h b/include/page0page.h index dd7026c28f2..977f4d38d13 100644 --- a/include/page0page.h +++ b/include/page0page.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -68,10 +68,7 @@ typedef byte page_header_t; #define PAGE_MAX_TRX_ID 18 /* highest id of a trx which may have modified a record on the page; a dulint; defined only in secondary indexes and in the insert buffer - tree; NOTE: this may be modified only - when the thread has an x-latch to the page, - and ALSO an x-latch to btr_search_latch - if there is a hash index to the page! */ + tree */ #define PAGE_HEADER_PRIV_END 26 /* end of private data structure of the page header which are set in a page create */ /*----*/ @@ -922,6 +919,7 @@ page_parse_create( ulint comp, /*!< in: nonzero=compact page format */ buf_block_t* block, /*!< in: block or NULL */ mtr_t* mtr); /*!< in: mtr or NULL */ +#ifndef UNIV_HOTBACKUP /************************************************************//** Prints record contents including the data relevant only in the index page context. */ @@ -931,6 +929,7 @@ page_rec_print( /*===========*/ const rec_t* rec, /*!< in: physical record */ const ulint* offsets);/*!< in: record descriptor */ +# ifdef UNIV_BTR_PRINT /***************************************************************//** This is used to print the contents of the directory for debugging purposes. */ @@ -970,6 +969,8 @@ page_print( in directory */ ulint rn); /*!< in: print rn first and last records in directory */ +# endif /* UNIV_BTR_PRINT */ +#endif /* !UNIV_HOTBACKUP */ /***************************************************************//** The following is used to validate a record on a page. This function differs from rec_validate as it can also check the n_owned field and diff --git a/include/page0page.ic b/include/page0page.ic index b22678a2e9f..3aa55c4a326 100644 --- a/include/page0page.ic +++ b/include/page0page.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ diff --git a/include/row0upd.ic b/include/row0upd.ic index 0894ed373b0..10646241125 100644 --- a/include/row0upd.ic +++ b/include/row0upd.ic @@ -28,7 +28,6 @@ Created 12/27/1996 Heikki Tuuri # include "trx0trx.h" # include "trx0undo.h" # include "row0row.h" -# include "btr0sea.h" #endif /* !UNIV_HOTBACKUP */ #include "page0zip.h" @@ -157,11 +156,6 @@ row_upd_rec_sys_fields( { ut_ad(dict_index_is_clust(index)); ut_ad(rec_offs_validate(rec, index, offsets)); -#ifdef UNIV_SYNC_DEBUG - if (!rw_lock_own(&btr_search_latch, RW_LOCK_EX)) { - ut_ad(!buf_block_align(rec)->is_hashed); - } -#endif /* UNIV_SYNC_DEBUG */ if (UNIV_LIKELY_NULL(page_zip)) { ulint pos = dict_index_get_sys_col_pos(index, DATA_TRX_ID); diff --git a/include/srv0srv.h b/include/srv0srv.h index 8a4235ee605..f255c07a998 100644 --- a/include/srv0srv.h +++ b/include/srv0srv.h @@ -60,6 +60,14 @@ extern os_event_t srv_lock_timeout_thread_event; /* This event is set at shutdown to wakeup threads from sleep */ extern os_event_t srv_shutdown_event; +/* This event is set on checkpoint completion to wake the redo log parser +thread */ +extern os_event_t srv_checkpoint_completed_event; + +/* This event is set on the online redo log following thread exit to signal +that the (slow) shutdown may proceed */ +extern os_event_t srv_redo_log_thread_finished_event; + /* If the last data file is auto-extended, we add this many pages to it at a time */ #define SRV_AUTO_EXTEND_INCREMENT \ @@ -126,6 +134,11 @@ extern ibool srv_recovery_stats; extern ulint srv_use_purge_thread; +extern my_bool srv_track_changed_pages; + +extern +ulonglong srv_changed_pages_limit; + extern ibool srv_auto_extend_last_data_file; extern ulint srv_last_file_size_max; extern char** srv_log_group_home_dirs; @@ -213,6 +226,9 @@ extern unsigned long long srv_stats_sample_pages; extern ulint srv_stats_auto_update; extern ulint srv_stats_update_need_lock; extern ibool srv_use_sys_stats_table; +#ifdef UNIV_DEBUG +extern ulong srv_sys_stats_root_page; +#endif extern ibool srv_use_doublewrite_buf; extern ibool srv_use_checksums; @@ -284,6 +300,7 @@ extern ibool srv_print_latch_waits; extern ulint srv_activity_count; extern ulint srv_fatal_semaphore_wait_threshold; +#define SRV_SEMAPHORE_WAIT_EXTENSION 7200 extern ulint srv_dml_needed_delay; extern lint srv_kill_idle_transaction; @@ -644,6 +661,15 @@ srv_LRU_dump_restore_thread( void* arg); /*!< in: a dummy parameter required by os_thread_create */ /******************************************************************//** +A thread which follows the redo log and outputs the changed page bitmap. +@return a dummy value */ +UNIV_INTERN +os_thread_ret_t +srv_redo_log_follow_thread( +/*=======================*/ + void* arg); /*!< in: a dummy parameter required by + os_thread_create */ +/******************************************************************//** Outputs to a file the output of the InnoDB Monitor. @return FALSE if not all information printed due to failure to obtain necessary mutex */ diff --git a/include/sync0rw.h b/include/sync0rw.h index 22de1bfdd93..bf365e502c4 100644 --- a/include/sync0rw.h +++ b/include/sync0rw.h @@ -565,7 +565,8 @@ struct rw_lock_struct { }; #ifdef UNIV_SYNC_DEBUG -/** The structure for storing debug info of an rw-lock */ +/** The structure for storing debug info of an rw-lock. All access to this +structure must be protected by rw_lock_debug_mutex_enter(). */ struct rw_lock_debug_struct { os_thread_id_t thread_id; /*!< The thread id of the thread which diff --git a/include/sync0rw.ic b/include/sync0rw.ic index 485a63a1b18..cd997febc30 100644 --- a/include/sync0rw.ic +++ b/include/sync0rw.ic @@ -406,6 +406,7 @@ rw_lock_s_lock_func( #ifdef UNIV_SYNC_DEBUG ut_ad(!rw_lock_own(lock, RW_LOCK_SHARED)); /* see NOTE above */ + ut_ad(!rw_lock_own(lock, RW_LOCK_EX)); #endif /* UNIV_SYNC_DEBUG */ /* TODO: study performance of UNIV_LIKELY branch prediction hints. */ @@ -563,8 +564,6 @@ rw_lock_x_unlock_func( if (lock->lock_word == 0) { /* Last caller in a possible recursive chain. */ lock->recursive = FALSE; - UNIV_MEM_INVALID(&lock->writer_thread, - sizeof lock->writer_thread); } #ifdef UNIV_SYNC_DEBUG @@ -605,8 +604,6 @@ rw_lock_x_unlock_direct( if (lock->lock_word == 0) { lock->recursive = FALSE; - UNIV_MEM_INVALID(&lock->writer_thread, - sizeof lock->writer_thread); } #ifdef UNIV_SYNC_DEBUG diff --git a/include/sync0sync.h b/include/sync0sync.h index 8b9a075e875..bb3c21f40f5 100644 --- a/include/sync0sync.h +++ b/include/sync0sync.h @@ -448,10 +448,6 @@ or row lock! */ #define SYNC_DICT_HEADER 995 #define SYNC_IBUF_HEADER 914 #define SYNC_IBUF_PESS_INSERT_MUTEX 912 -#define SYNC_IBUF_MUTEX 910 /* ibuf mutex is really below - SYNC_FSP_PAGE: we assign a value this - high only to make the program to pass - the debug checks */ /*-------------------------------*/ #define SYNC_INDEX_TREE 900 #define SYNC_TREE_NODE_NEW 892 @@ -468,8 +464,11 @@ or row lock! */ #define SYNC_FSP 400 #define SYNC_FSP_PAGE 395 /*------------------------------------- Insert buffer headers */ -/*------------------------------------- ibuf_mutex */ +#define SYNC_IBUF_MUTEX 370 /* ibuf_mutex */ /*------------------------------------- Insert buffer tree */ +#define SYNC_IBUF_INDEX_TREE 360 +#define SYNC_IBUF_TREE_NODE_NEW 359 +#define SYNC_IBUF_TREE_NODE 358 #define SYNC_IBUF_BITMAP_MUTEX 351 #define SYNC_IBUF_BITMAP 350 /*------------------------------------- MySQL query cache mutex */ @@ -482,7 +481,6 @@ or row lock! */ #define SYNC_LOG 170 #define SYNC_RECV 168 #define SYNC_WORK_QUEUE 162 -#define SYNC_SEARCH_SYS_CONF 161 /* for assigning btr_search_enabled */ #define SYNC_SEARCH_SYS 160 /* NOTE that if we have a memory heap that can be extended to the buffer pool, its logical level is diff --git a/include/trx0purge.h b/include/trx0purge.h index ae5bc6f90be..264e91b2432 100644 --- a/include/trx0purge.h +++ b/include/trx0purge.h @@ -164,9 +164,9 @@ struct trx_purge_struct{ read_view_t* view; /*!< The purge will not remove undo logs which are >= this view (purge view) */ mutex_t mutex; /*!< Mutex protecting the fields below */ - ulint n_pages_handled;/*!< Approximate number of undo log + ulonglong n_pages_handled;/*!< Approximate number of undo log pages processed in purge */ - ulint handle_limit; /*!< Target of how many pages to get + ulonglong handle_limit; /*!< Target of how many pages to get processed in the current purge */ /*------------------------------*/ /* The following two fields form the 'purge pointer' which advances diff --git a/include/trx0rec.ic b/include/trx0rec.ic index e7e41d6d9f6..6c411047dc6 100644 --- a/include/trx0rec.ic +++ b/include/trx0rec.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -107,6 +107,7 @@ trx_undo_rec_copy( len = mach_read_from_2(undo_rec) - ut_align_offset(undo_rec, UNIV_PAGE_SIZE); + ut_ad(len < UNIV_PAGE_SIZE); return(mem_heap_dup(heap, undo_rec, len)); } #endif /* !UNIV_HOTBACKUP */ diff --git a/include/trx0rseg.ic b/include/trx0rseg.ic index daffa92fc7d..5e8d2b41120 100644 --- a/include/trx0rseg.ic +++ b/include/trx0rseg.ic @@ -25,6 +25,7 @@ Created 3/26/1996 Heikki Tuuri #include "srv0srv.h" #include "mtr0log.h" +#include "trx0sys.h" /******************************************************************//** Gets a rollback segment header. @@ -131,7 +132,13 @@ trx_rsegf_undo_find_free( ulint i; ulint page_no; - for (i = 0; i < TRX_RSEG_N_SLOTS; i++) { + for (i = 0; +#ifndef UNIV_DEBUG + i < TRX_RSEG_N_SLOTS; +#else + i < (trx_rseg_n_slots_debug ? trx_rseg_n_slots_debug : TRX_RSEG_N_SLOTS); +#endif + i++) { page_no = trx_rsegf_get_nth_undo(rsegf, i, mtr); diff --git a/include/trx0sys.h b/include/trx0sys.h index eafa1ab6409..8341592feb7 100644 --- a/include/trx0sys.h +++ b/include/trx0sys.h @@ -262,6 +262,12 @@ trx_id_t trx_sys_get_new_trx_no(void); /*========================*/ #endif /* !UNIV_HOTBACKUP */ + +#ifdef UNIV_DEBUG +/* Flag to control TRX_RSEG_N_SLOTS behavior debugging. */ +extern uint trx_rseg_n_slots_debug; +#endif + /*****************************************************************//** Writes a trx id to an index page. In case that the id size changes in some future version, this function should be used instead of diff --git a/include/trx0undo.h b/include/trx0undo.h index 4f15cd85833..585b5f36696 100644 --- a/include/trx0undo.h +++ b/include/trx0undo.h @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -194,27 +194,62 @@ trx_undo_get_first_rec( mtr_t* mtr); /*!< in: mtr */ /********************************************************************//** Tries to add a page to the undo log segment where the undo log is placed. -@return page number if success, else FIL_NULL */ +@return X-latched block if success, else NULL */ UNIV_INTERN -ulint +buf_block_t* trx_undo_add_page( /*==============*/ trx_t* trx, /*!< in: transaction */ trx_undo_t* undo, /*!< in: undo log memory object */ - mtr_t* mtr); /*!< in: mtr which does not have a latch to any + mtr_t* mtr) /*!< in: mtr which does not have a latch to any undo log page; the caller must have reserved the rollback segment mutex */ + __attribute__((nonnull, warn_unused_result)); +/********************************************************************//** +Frees the last undo log page. +The caller must hold the rollback segment mutex. */ +UNIV_INTERN +void +trx_undo_free_last_page_func( +/*==========================*/ +#ifdef UNIV_DEBUG + const trx_t* trx, /*!< in: transaction */ +#endif /* UNIV_DEBUG */ + trx_undo_t* undo, /*!< in/out: undo log memory copy */ + mtr_t* mtr) /*!< in/out: mini-transaction which does not + have a latch to any undo log page or which + has allocated the undo log page */ + __attribute__((nonnull)); +#ifdef UNIV_DEBUG +# define trx_undo_free_last_page(trx,undo,mtr) \ + trx_undo_free_last_page_func(trx,undo,mtr) +#else /* UNIV_DEBUG */ +# define trx_undo_free_last_page(trx,undo,mtr) \ + trx_undo_free_last_page_func(undo,mtr) +#endif /* UNIV_DEBUG */ + /***********************************************************************//** Truncates an undo log from the end. This function is used during a rollback to free space from an undo log. */ UNIV_INTERN void -trx_undo_truncate_end( -/*==================*/ - trx_t* trx, /*!< in: transaction whose undo log it is */ - trx_undo_t* undo, /*!< in: undo log */ - undo_no_t limit); /*!< in: all undo records with undo number +trx_undo_truncate_end_func( +/*=======================*/ +#ifdef UNIV_DEBUG + const trx_t* trx, /*!< in: transaction whose undo log it is */ +#endif /* UNIV_DEBUG */ + trx_undo_t* undo, /*!< in/out: undo log */ + undo_no_t limit) /*!< in: all undo records with undo number >= this value should be truncated */ + __attribute__((nonnull)); +#ifdef UNIV_DEBUG +# define trx_undo_truncate_end(trx,undo,limit) \ + trx_undo_truncate_end_func(trx,undo,limit) +#else /* UNIV_DEBUG */ +# define trx_undo_truncate_end(trx,undo,limit) \ + trx_undo_truncate_end_func(undo,limit) +#endif /* UNIV_DEBUG */ + /***********************************************************************//** Truncates an undo log from the start. This function is used during a purge operation. */ diff --git a/include/univ.i b/include/univ.i index c9f9381842e..29601937080 100644 --- a/include/univ.i +++ b/include/univ.i @@ -48,7 +48,7 @@ Created 1/20/1994 Heikki Tuuri #define INNODB_VERSION_BUGFIX 17 #ifndef PERCONA_INNODB_VERSION -#define PERCONA_INNODB_VERSION 12.5 +#define PERCONA_INNODB_VERSION 14.0 #endif @@ -153,14 +153,6 @@ Sun Studio */ /* DEBUG VERSION CONTROL ===================== */ -/* The following flag will make InnoDB to initialize -all memory it allocates to zero. It hides Purify -warnings about reading unallocated memory unless -memory is read outside the allocated blocks. */ -/* -#define UNIV_INIT_MEM_TO_ZERO -*/ - /* When this macro is defined then additional test functions will be compiled. These functions live at the end of each relevant source file and have "test_" prefix. These functions are not called from anywhere in @@ -225,15 +217,6 @@ operations (very slow); also UNIV_DEBUG must be defined */ #define UNIV_BTR_DEBUG /* check B-tree links */ #define UNIV_LIGHT_MEM_DEBUG /* light memory debugging */ -#ifdef HAVE_purify -/* The following sets all new allocated memory to zero before use: -this can be used to eliminate unnecessary Purify warnings, but note that -it also masks many bugs Purify could detect. For detailed Purify analysis it -is best to remove the define below and look through the warnings one -by one. */ -#define UNIV_SET_MEM_TO_ZERO -#endif - /* #define UNIV_SQL_DEBUG #define UNIV_LOG_DEBUG @@ -291,6 +274,24 @@ management to ensure correct alignment for doubles etc. */ ======================== */ +/** There are currently two InnoDB file formats which are used to group +features with similar restrictions and dependencies. Using an enum allows +switch statements to give a compiler warning when a new one is introduced. */ +enum innodb_file_formats_enum { + /** Antelope File Format: InnoDB/MySQL up to 5.1. + This format includes REDUNDANT and COMPACT row formats */ + UNIV_FORMAT_A = 0, + + /** Barracuda File Format: Introduced in InnoDB plugin for 5.1: + This format includes COMPRESSED and DYNAMIC row formats. It + includes the ability to create secondary indexes from data that + is not on the clustered index page and the ability to store more + data off the clustered index page. */ + UNIV_FORMAT_B = 1 +}; + +typedef enum innodb_file_formats_enum innodb_file_formats_t; + /* The 2-logarithm of UNIV_PAGE_SIZE: */ /* #define UNIV_PAGE_SIZE_SHIFT 14 */ #define UNIV_PAGE_SIZE_SHIFT_MAX 14 diff --git a/include/ut0mem.h b/include/ut0mem.h index 9c6ee9049ec..5002c9e3801 100644 --- a/include/ut0mem.h +++ b/include/ut0mem.h @@ -78,40 +78,19 @@ ut_mem_init(void); /*=============*/ /**********************************************************************//** -Allocates memory. Sets it also to zero if UNIV_SET_MEM_TO_ZERO is -defined and set_to_zero is TRUE. +Allocates memory. @return own: allocated memory */ UNIV_INTERN void* ut_malloc_low( /*==========*/ ulint n, /*!< in: number of bytes to allocate */ - ibool set_to_zero, /*!< in: TRUE if allocated memory - should be set to zero if - UNIV_SET_MEM_TO_ZERO is defined */ - ibool assert_on_error); /*!< in: if TRUE, we crash mysqld if + ibool assert_on_error) /*!< in: if TRUE, we crash mysqld if the memory cannot be allocated */ + __attribute__((malloc)); /**********************************************************************//** -Allocates memory. Sets it also to zero if UNIV_SET_MEM_TO_ZERO is -defined. -@return own: allocated memory */ -UNIV_INTERN -void* -ut_malloc( -/*======*/ - ulint n); /*!< in: number of bytes to allocate */ -#ifndef UNIV_HOTBACKUP -/**********************************************************************//** -Tests if malloc of n bytes would succeed. ut_malloc() asserts if memory runs -out. It cannot be used if we want to return an error message. Prints to -stderr a message if fails. -@return TRUE if succeeded */ -UNIV_INTERN -ibool -ut_test_malloc( -/*===========*/ - ulint n); /*!< in: try to allocate this many bytes */ -#endif /* !UNIV_HOTBACKUP */ +Allocates memory. */ +#define ut_malloc(n) ut_malloc_low(n, TRUE) /**********************************************************************//** Frees a memory block allocated with ut_malloc. Freeing a NULL pointer is a nop. */ diff --git a/include/ut0rbt.h b/include/ut0rbt.h index 6fd050acfe7..100cf5f648b 100644 --- a/include/ut0rbt.h +++ b/include/ut0rbt.h @@ -110,6 +110,10 @@ struct ib_rbt_bound_struct { /* Compare a key with the node value (t is tree, k is key, n is node)*/ #define rbt_compare(t, k, n) (t->compare(k, n->value)) +/* Node size. FIXME: name might clash, but currently it does not, so for easier +maintenance do not rename it for now. */ +#define SIZEOF_NODE(t) ((sizeof(ib_rbt_node_t) + t->sizeof_value) - 1) + /****************************************************************//** Free an instance of a red black tree */ UNIV_INTERN @@ -181,6 +185,18 @@ rbt_add_node( const void* value); /*!< in: this value is copied to the node */ /****************************************************************//** +Add a new caller-provided node to tree at the specified position. +The node must have its key fields initialized correctly. +@return added node */ +UNIV_INTERN +const ib_rbt_node_t* +rbt_add_preallocated_node( +/*======================*/ + ib_rbt_t* tree, /*!< in: rb tree */ + ib_rbt_bound_t* parent, /*!< in: parent */ + ib_rbt_node_t* node); /*!< in: node */ + +/****************************************************************//** Return the left most data node in the tree @return left most node */ UNIV_INTERN @@ -267,6 +283,13 @@ rbt_clear( /*======*/ ib_rbt_t* tree); /*!< in: rb tree */ /****************************************************************//** +Clear the tree without deleting and freeing its nodes. */ +UNIV_INTERN +void +rbt_reset( +/*======*/ + ib_rbt_t* tree); /*!< in: rb tree */ +/****************************************************************//** Merge the node from dst into src. Return the number of nodes merged. @return no. of recs merged */ UNIV_INTERN diff --git a/include/ut0rnd.ic b/include/ut0rnd.ic index d17036d83fc..1e62a7771ef 100644 --- a/include/ut0rnd.ic +++ b/include/ut0rnd.ic @@ -114,7 +114,7 @@ ut_rnd_interval( rnd = ut_rnd_gen_ulint(); - return(low + (rnd % (high - low + 1))); + return(low + (rnd % (high - low))); } /*********************************************************//** diff --git a/lock/lock0lock.c b/lock/lock0lock.c index e5da4f46ec9..d5ab6836134 100644 --- a/lock/lock0lock.c +++ b/lock/lock0lock.c @@ -5059,9 +5059,17 @@ lock_validate(void) lock_mutex_exit_kernel(); - lock_rec_validate_page(space, - fil_space_get_zip_size(space), - page_no); + /* Make sure that the tablespace is not + deleted while we are trying to access + the page. */ + if (!fil_inc_pending_ops(space)) { + lock_rec_validate_page( + space, + fil_space_get_zip_size(space), + page_no); + + fil_decr_pending_ops(space); + } lock_mutex_enter_kernel(); diff --git a/log/log0log.c b/log/log0log.c index fc8745629d6..9c02113dc20 100644 --- a/log/log0log.c +++ b/log/log0log.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1995, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1995, 2010, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2009, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -18,8 +18,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -201,6 +201,54 @@ log_buf_pool_get_oldest_modification(void) return(lsn); } +/****************************************************************//** +Safely reads the log_sys->tracked_lsn value. Uses atomic operations +if available, otherwise this field is protected with the log system +mutex. The writer counterpart function is log_set_tracked_lsn() in +log0online.c. + +@return log_sys->tracked_lsn value. */ +UNIV_INLINE +ib_uint64_t +log_get_tracked_lsn() +{ +#ifdef HAVE_ATOMIC_BUILTINS_64 + return os_atomic_increment_uint64(&log_sys->tracked_lsn, 0); +#else + ut_ad(mutex_own(&(log_sys->mutex))); + return log_sys->tracked_lsn; +#endif +} + +/****************************************************************//** +Checks if the log groups have a big enough margin of free space in +so that a new log entry can be written without overwriting log data +that is not read by the changed page bitmap thread. +@return TRUE if there is not enough free space. */ +static +ibool +log_check_tracking_margin( + ulint lsn_advance) /*!< in: an upper limit on how much log data we + plan to write. If zero, the margin will be + checked for the already-written log. */ +{ + ib_uint64_t tracked_lsn; + ulint tracked_lsn_age; + + if (!srv_track_changed_pages) { + return FALSE; + } + + ut_ad(mutex_own(&(log_sys->mutex))); + + tracked_lsn = log_get_tracked_lsn(); + tracked_lsn_age = log_sys->lsn - tracked_lsn; + + /* The overwrite would happen when log_sys->log_group_capacity is + exceeded, but we use max_checkpoint_age for an extra safety margin. */ + return tracked_lsn_age + lsn_advance > log_sys->max_checkpoint_age; +} + /************************************************************//** Opens the log for log_write_low. The log must be closed with log_close and released with log_release. @@ -217,9 +265,7 @@ log_reserve_and_open( ulint archived_lsn_age; ulint dummy; #endif /* UNIV_LOG_ARCHIVE */ -#ifdef UNIV_DEBUG ulint count = 0; -#endif /* UNIV_DEBUG */ ut_a(len < log->buf_size / 2); loop: @@ -247,6 +293,19 @@ loop: goto loop; } + if (log_check_tracking_margin(len_upper_limit) && (++count < 50)) { + + /* This log write would violate the untracked LSN free space + margin. Limit this to 50 retries as there might be situations + where we have no choice but to proceed anyway, i.e. if the log + is about to be overflown, log tracking or not. */ + mutex_exit(&(log->mutex)); + + os_thread_sleep(10000); + + goto loop; + } + #ifdef UNIV_LOG_ARCHIVE if (log->archiving_state != LOG_ARCH_OFF) { @@ -385,6 +444,8 @@ log_close(void) ulint first_rec_group; ib_uint64_t oldest_lsn; ib_uint64_t lsn; + ib_uint64_t tracked_lsn; + ulint tracked_lsn_age; log_t* log = log_sys; ib_uint64_t checkpoint_age; @@ -411,6 +472,19 @@ log_close(void) log->check_flush_or_checkpoint = TRUE; } + if (srv_track_changed_pages) { + + tracked_lsn = log_get_tracked_lsn(); + tracked_lsn_age = lsn - tracked_lsn; + + if (tracked_lsn_age >= log->log_group_capacity) { + + fprintf(stderr, " InnoDB: Error: the age of the " + "oldest untracked record exceeds the log " + "group capacity!\n"); + } + } + checkpoint_age = lsn - log->last_checkpoint_lsn; if (checkpoint_age >= log->log_group_capacity) { @@ -872,6 +946,8 @@ log_init(void) log_sys->archiving_on = os_event_create(NULL); #endif /* UNIV_LOG_ARCHIVE */ + log_sys->tracked_lsn = 0; + /*----------------------------*/ log_block_init(log_sys->buf, log_sys->lsn); @@ -1721,6 +1797,12 @@ log_io_complete_checkpoint(void) } mutex_exit(&(log_sys->mutex)); + + /* Wake the redo log watching thread to parse the log up to this + checkpoint. */ + if (srv_track_changed_pages) { + os_event_set(srv_checkpoint_completed_event); + } } /*******************************************************************//** @@ -3065,6 +3147,15 @@ loop: log_checkpoint_margin(); + mutex_enter(&(log_sys->mutex)); + if (log_check_tracking_margin(0)) { + + mutex_exit(&(log_sys->mutex)); + os_thread_sleep(10000); + goto loop; + } + mutex_exit(&(log_sys->mutex)); + #ifdef UNIV_LOG_ARCHIVE log_archive_margin(); #endif /* UNIV_LOG_ARCHIVE */ @@ -3093,6 +3184,7 @@ logs_empty_and_mark_files_at_shutdown(void) /*=======================================*/ { ib_uint64_t lsn; + ib_uint64_t tracked_lsn; ulint arch_log_no; if (srv_print_verbose_log) { @@ -3198,9 +3290,12 @@ loop: mutex_enter(&(log_sys->mutex)); + tracked_lsn = log_get_tracked_lsn(); + lsn = log_sys->lsn; if (lsn != log_sys->last_checkpoint_lsn + || (srv_track_changed_pages && (tracked_lsn != log_sys->last_checkpoint_lsn)) #ifdef UNIV_LOG_ARCHIVE || (srv_log_archive_on && lsn != log_sys->archived_lsn + LOG_BLOCK_HDR_SIZE) @@ -3255,6 +3350,11 @@ loop: srv_shutdown_state = SRV_SHUTDOWN_LAST_PHASE; + /* Signal the log following thread to quit */ + if (srv_track_changed_pages) { + os_event_set(srv_checkpoint_completed_event); + } + /* Make some checks that the server really is quiet */ ut_a(srv_n_threads_active[SRV_MASTER] == 0); ut_a(buf_all_freed()); @@ -3274,6 +3374,10 @@ loop: fil_flush_file_spaces(FIL_TABLESPACE); + if (srv_track_changed_pages) { + os_event_wait(srv_redo_log_thread_finished_event); + } + fil_close_all_files(); /* Make some checks that the server really is quiet */ @@ -3399,6 +3503,18 @@ log_print( ((log_sys->n_log_ios - log_sys->n_log_ios_old) / time_elapsed)); + if (srv_track_changed_pages) { + + /* The maximum tracked LSN age is equal to the maximum + checkpoint age */ + fprintf(file, + "Log tracking enabled\n" + "Log tracked up to %llu\n" + "Max tracked LSN age %lu\n", + log_get_tracked_lsn(), + log_sys->max_checkpoint_age); + } + log_sys->n_log_ios_old = log_sys->n_log_ios; log_sys->last_printout_time = current_time; diff --git a/log/log0online.c b/log/log0online.c new file mode 100644 index 00000000000..512b13fb311 --- /dev/null +++ b/log/log0online.c @@ -0,0 +1,1085 @@ +/***************************************************************************** + +Copyright (c) 2011-2012 Percona Inc. All Rights Reserved. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +/**************************************************//** +@file log/log0online.c +Online database log parsing for changed page tracking + +*******************************************************/ + +#include "log0online.h" + +#include "my_dbug.h" + +#include "log0recv.h" +#include "mach0data.h" +#include "mtr0log.h" +#include "srv0srv.h" +#include "srv0start.h" +#include "trx0sys.h" +#include "ut0rbt.h" + +enum { FOLLOW_SCAN_SIZE = 4 * (UNIV_PAGE_SIZE_MAX) }; + +/** Log parsing and bitmap output data structure */ +struct log_bitmap_struct { + byte read_buf[FOLLOW_SCAN_SIZE]; + /*!< log read buffer */ + byte parse_buf[RECV_PARSING_BUF_SIZE]; + /*!< log parse buffer */ + byte* parse_buf_end; /*!< parse buffer position where the + next read log data should be copied to. + If the previous log records were fully + parsed, it points to the start, + otherwise points immediatelly past the + end of the incomplete log record. */ + char* out_name; /*!< the file name for bitmap output */ + os_file_t out; /*!< the bitmap output file */ + ib_uint64_t out_offset; /*!< the next write position in the + bitmap output file */ + ib_uint64_t start_lsn; /*!< the LSN of the next unparsed + record and the start of the next LSN + interval to be parsed. */ + ib_uint64_t end_lsn; /*!< the end of the LSN interval to be + parsed, equal to the next checkpoint + LSN at the time of parse */ + ib_uint64_t next_parse_lsn; /*!< the LSN of the next unparsed + record in the current parse */ + ib_rbt_t* modified_pages; /*!< the current modified page set, + organized as the RB-tree with the keys + of (space, 4KB-block-start-page-id) + pairs */ + ib_rbt_node_t* page_free_list; /*!< Singly-linked list of freed nodes + of modified_pages tree for later + reuse. Nodes are linked through + ib_rbt_node_t.left as this field has + both the correct type and the tree does + not mind its overwrite during + rbt_next() tree traversal. */ +}; + +/* The log parsing and bitmap output struct instance */ +static struct log_bitmap_struct* log_bmp_sys; + +/* File name stem for modified page bitmaps */ +static const char* modified_page_stem = "ib_modified_log."; + +/* On server startup with empty database srv_start_lsn == 0, in +which case the first LSN of actual log records will be this. */ +#define MIN_TRACKED_LSN ((LOG_START_LSN) + (LOG_BLOCK_HDR_SIZE)) + +/* Tests if num bit of bitmap is set */ +#define IS_BIT_SET(bitmap, num) \ + (*((bitmap) + ((num) >> 3)) & (1UL << ((num) & 7UL))) + +/** The bitmap file block size in bytes. All writes will be multiples of this. + */ +enum { + MODIFIED_PAGE_BLOCK_SIZE = 4096 +}; + + +/** Offsets in a file bitmap block */ +enum { + MODIFIED_PAGE_IS_LAST_BLOCK = 0,/* 1 if last block in the current + write, 0 otherwise. */ + MODIFIED_PAGE_START_LSN = 4, /* The starting tracked LSN of this and + other blocks in the same write */ + MODIFIED_PAGE_END_LSN = 12, /* The ending tracked LSN of this and + other blocks in the same write */ + MODIFIED_PAGE_SPACE_ID = 20, /* The space ID of tracked pages in + this block */ + MODIFIED_PAGE_1ST_PAGE_ID = 24, /* The page ID of the first tracked + page in this block */ + MODIFIED_PAGE_BLOCK_UNUSED_1 = 28,/* Unused in order to align the start + of bitmap at 8 byte boundary */ + MODIFIED_PAGE_BLOCK_BITMAP = 32,/* Start of the bitmap itself */ + MODIFIED_PAGE_BLOCK_UNUSED_2 = MODIFIED_PAGE_BLOCK_SIZE - 8, + /* Unused in order to align the end of + bitmap at 8 byte boundary */ + MODIFIED_PAGE_BLOCK_CHECKSUM = MODIFIED_PAGE_BLOCK_SIZE - 4 + /* The checksum of the current block */ +}; + +/** Length of the bitmap data in a block in bytes */ +enum { MODIFIED_PAGE_BLOCK_BITMAP_LEN + = MODIFIED_PAGE_BLOCK_UNUSED_2 - MODIFIED_PAGE_BLOCK_BITMAP }; + +/** Length of the bitmap data in a block in page ids */ +enum { MODIFIED_PAGE_BLOCK_ID_COUNT = MODIFIED_PAGE_BLOCK_BITMAP_LEN * 8 }; + +/****************************************************************//** +Provide a comparisson function for the RB-tree tree (space, +block_start_page) pairs. Actual implementation does not matter as +long as the ordering is full. +@return -1 if p1 < p2, 0 if p1 == p2, 1 if p1 > p2 +*/ +static +int +log_online_compare_bmp_keys( +/*========================*/ + const void* p1, /*! k2_start_page ? 1 : 0; + } + return k1_space < k2_space ? -1 : 1; +} + +/****************************************************************//** +Set a bit for tracked page in the bitmap. Expand the bitmap tree as +necessary. */ +static +void +log_online_set_page_bit( +/*====================*/ + ulint space, /*!modified_pages, &tree_search_pos, + search_page)) { + page_ptr = rbt_value(byte, tree_search_pos.last); + } + else { + ib_rbt_node_t *new_node; + + if (log_bmp_sys->page_free_list) { + new_node = log_bmp_sys->page_free_list; + log_bmp_sys->page_free_list = new_node->left; + } + else { + new_node = ut_malloc(SIZEOF_NODE( + log_bmp_sys->modified_pages)); + } + memset(new_node, 0, SIZEOF_NODE(log_bmp_sys->modified_pages)); + + page_ptr = rbt_value(byte, new_node); + mach_write_to_4(page_ptr + MODIFIED_PAGE_SPACE_ID, space); + mach_write_to_4(page_ptr + MODIFIED_PAGE_1ST_PAGE_ID, + block_start_page); + + rbt_add_preallocated_node(log_bmp_sys->modified_pages, + &tree_search_pos, new_node); + } + page_ptr[MODIFIED_PAGE_BLOCK_BITMAP + block_pos] |= (1U << bit_pos); +} + +/****************************************************************//** +Calculate a bitmap block checksum. Algorithm borrowed from +log_block_calc_checksum. +@return checksum */ +UNIV_INLINE +ulint +log_online_calc_checksum( +/*=====================*/ + const byte* block) /*! 24) { + sh = 0; + } + } + + return sum; +} + +/****************************************************************//** +Get the last tracked fully LSN from the bitmap file by reading +backwards untile a correct end page is found. Detects incomplete +writes and corrupted data. Sets the start output position for the +written bitmap data. +@return the last fully tracked LSN */ +static +ib_uint64_t +log_online_read_last_tracked_lsn() +/*==============================*/ +{ + byte page[MODIFIED_PAGE_BLOCK_SIZE]; + ib_uint64_t read_offset = log_bmp_sys->out_offset; + /* Initialize these to nonequal values so that file size == 0 case with + zero loop repetitions is handled correctly */ + ulint checksum = 0; + ulint actual_checksum = !checksum; + ibool is_last_page = FALSE; + ib_uint64_t result; + + ut_ad(log_bmp_sys->out_offset % MODIFIED_PAGE_BLOCK_SIZE == 0); + + while (checksum != actual_checksum && read_offset > 0 && !is_last_page) + { + + ulint offset_low, offset_high; + ibool success; + + read_offset -= MODIFIED_PAGE_BLOCK_SIZE; + offset_high = (ulint)(read_offset >> 32); + offset_low = (ulint)(read_offset & 0xFFFFFFFF); + + success = os_file_read(log_bmp_sys->out, page, offset_low, + offset_high, MODIFIED_PAGE_BLOCK_SIZE); + if (!success) { + + /* The following call prints an error message */ + os_file_get_last_error(TRUE); + /* Here and below assume that bitmap file names do not + contain apostrophes, thus no need for + ut_print_filename(). */ + fprintf(stderr, "InnoDB: Warning: failed reading " + "changed page bitmap file \'%s\'\n", + log_bmp_sys->out_name); + return MIN_TRACKED_LSN; + } + + is_last_page + = mach_read_from_4(page + MODIFIED_PAGE_IS_LAST_BLOCK); + checksum = mach_read_from_4(page + + MODIFIED_PAGE_BLOCK_CHECKSUM); + actual_checksum = log_online_calc_checksum(page); + if (checksum != actual_checksum) { + + fprintf(stderr, "InnoDB: Warning: corruption " + "detected in \'%s\' at offset %llu\n", + log_bmp_sys->out_name, read_offset); + } + + }; + + if (UNIV_LIKELY(checksum == actual_checksum && is_last_page)) { + + log_bmp_sys->out_offset = read_offset + + MODIFIED_PAGE_BLOCK_SIZE; + result = mach_read_ull(page + MODIFIED_PAGE_END_LSN); + } + else { + log_bmp_sys->out_offset = read_offset; + result = 0; + } + + /* Truncate the output file to discard the corrupted bitmap data, if + any */ + if (!os_file_set_eof_at(log_bmp_sys->out, + log_bmp_sys->out_offset)) { + fprintf(stderr, "InnoDB: Warning: failed truncating " + "changed page bitmap file \'%s\' to %llu bytes\n", + log_bmp_sys->out_name, log_bmp_sys->out_offset); + result = 0; + } + return result; +} + +/****************************************************************//** +Safely write the log_sys->tracked_lsn value. Uses atomic operations +if available, otherwise this field is protected with the log system +mutex. The reader counterpart function is log_get_tracked_lsn() in +log0log.c. */ +UNIV_INLINE +void +log_set_tracked_lsn( +/*================*/ + ib_uint64_t tracked_lsn) /*!tracked_lsn, 0); + (void) os_atomic_increment_uint64(&log_sys->tracked_lsn, + tracked_lsn - old_value); +#else + mutex_enter(&log_sys->mutex); + log_sys->tracked_lsn = tracked_lsn; + mutex_exit(&log_sys->mutex); +#endif +} + +/****************************************************************//** +Diagnose a gap in tracked LSN range on server startup due to crash or +very fast shutdown and try to close it by tracking the data +immediatelly, if possible. */ +static +void +log_online_track_missing_on_startup( +/*================================*/ + ib_uint64_t last_tracked_lsn, /*!out_name, + last_tracked_lsn, tracking_start_lsn); + + /* last_tracked_lsn might be < MIN_TRACKED_LSN in the case of empty + bitmap file, handle this too. */ + last_tracked_lsn = ut_max(last_tracked_lsn, MIN_TRACKED_LSN); + + /* See if we can fully recover the missing interval */ + if (log_sys->lsn - last_tracked_lsn < log_sys->log_group_capacity) { + + fprintf(stderr, + "Reading the log to advance the last tracked LSN.\n"); + + log_bmp_sys->start_lsn = last_tracked_lsn; + log_set_tracked_lsn(log_bmp_sys->start_lsn); + log_online_follow_redo_log(); + ut_ad(log_bmp_sys->end_lsn >= tracking_start_lsn); + + fprintf(stderr, + "InnoDB: continuing tracking changed pages from LSN " + "%llu\n", log_bmp_sys->end_lsn); + } + else { + fprintf(stderr, + "The age of last tracked LSN exceeds log capacity, " + "tracking-based incremental backups will work only " + "from the higher LSN!\n"); + + log_bmp_sys->end_lsn = log_bmp_sys->start_lsn + = tracking_start_lsn; + log_set_tracked_lsn(log_bmp_sys->start_lsn); + + fprintf(stderr, + "InnoDB: starting tracking changed pages from LSN " + "%llu\n", log_bmp_sys->end_lsn); + } +} + +/*********************************************************************//** +Initialize the online log following subsytem. */ +UNIV_INTERN +void +log_online_read_init() +/*==================*/ +{ + char buf[FN_REFLEN]; + ibool success; + ib_uint64_t tracking_start_lsn + = ut_max(log_sys->last_checkpoint_lsn, MIN_TRACKED_LSN); + + /* Assert (could be compile-time assert) that bitmap data start and end + in a bitmap block is 8-byte aligned */ + ut_a(MODIFIED_PAGE_BLOCK_BITMAP % 8 == 0); + ut_a(MODIFIED_PAGE_BLOCK_BITMAP_LEN % 8 == 0); + + log_bmp_sys = ut_malloc(sizeof(*log_bmp_sys)); + + ut_snprintf(buf, FN_REFLEN, "%s%s%d", srv_data_home, + modified_page_stem, 1); + log_bmp_sys->out_name = ut_malloc(strlen(buf) + 1); + ut_strcpy(log_bmp_sys->out_name, buf); + + log_bmp_sys->modified_pages = rbt_create(MODIFIED_PAGE_BLOCK_SIZE, + log_online_compare_bmp_keys); + log_bmp_sys->page_free_list = NULL; + + log_bmp_sys->out + = os_file_create_simple_no_error_handling + (log_bmp_sys->out_name, OS_FILE_OPEN, OS_FILE_READ_WRITE, + &success); + + if (!success) { + + /* New file, tracking from scratch */ + log_bmp_sys->out + = os_file_create_simple_no_error_handling + (log_bmp_sys->out_name, OS_FILE_CREATE, + OS_FILE_READ_WRITE, &success); + if (!success) { + + /* The following call prints an error message */ + os_file_get_last_error(TRUE); + fprintf(stderr, + "InnoDB: Error: Cannot create \'%s\'\n", + log_bmp_sys->out_name); + exit(1); + } + + log_bmp_sys->out_offset = 0; + } + else { + + /* Old file, read last tracked LSN and continue from there */ + ulint size_low; + ulint size_high; + ib_uint64_t last_tracked_lsn; + + success = os_file_get_size(log_bmp_sys->out, &size_low, + &size_high); + ut_a(success); + + log_bmp_sys->out_offset + = ((ib_uint64_t)size_high << 32) | size_low; + + if (log_bmp_sys->out_offset % MODIFIED_PAGE_BLOCK_SIZE != 0) { + + fprintf(stderr, + "InnoDB: Warning: truncated block detected " + "in \'%s\' at offset %llu\n", + log_bmp_sys->out_name, + log_bmp_sys->out_offset); + log_bmp_sys->out_offset -= + log_bmp_sys->out_offset + % MODIFIED_PAGE_BLOCK_SIZE; + } + + last_tracked_lsn = log_online_read_last_tracked_lsn(); + + if (last_tracked_lsn < tracking_start_lsn) { + + log_online_track_missing_on_startup(last_tracked_lsn, + tracking_start_lsn); + return; + } + + if (last_tracked_lsn > tracking_start_lsn) { + + fprintf(stderr, "InnoDB: last tracked LSN in \'%s\' " + "is %llu, but last checkpoint LSN is %llu. " + "The tracking-based incremental backups will " + "work only from the latter LSN!\n", + log_bmp_sys->out_name, last_tracked_lsn, + tracking_start_lsn); + } + + } + + fprintf(stderr, "InnoDB: starting tracking changed pages from " + "LSN %llu\n", tracking_start_lsn); + log_bmp_sys->start_lsn = tracking_start_lsn; + log_set_tracked_lsn(tracking_start_lsn); +} + +/*********************************************************************//** +Shut down the online log following subsystem. */ +UNIV_INTERN +void +log_online_read_shutdown() +/*======================*/ +{ + ib_rbt_node_t *free_list_node = log_bmp_sys->page_free_list; + + os_file_close(log_bmp_sys->out); + + rbt_free(log_bmp_sys->modified_pages); + + while (free_list_node) { + ib_rbt_node_t *next = free_list_node->left; + ut_free(free_list_node); + free_list_node = next; + } + + ut_free(log_bmp_sys->out_name); + ut_free(log_bmp_sys); +} + +/*********************************************************************//** +For the given minilog record type determine if the record has (space; page) +associated with it. +@return TRUE if the record has (space; page) in it */ +static +ibool +log_online_rec_has_page( +/*====================*/ + byte type) /*!parse_buf; + byte *end = log_bmp_sys->parse_buf_end; + + ulint len = 0; + + while (ptr != end + && log_bmp_sys->next_parse_lsn < log_bmp_sys->end_lsn) { + + byte type; + ulint space; + ulint page_no; + byte* body; + + /* recv_sys is not initialized, so on corrupt log we will + SIGSEGV. But the log of a live database should not be + corrupt. */ + len = recv_parse_log_rec(ptr, end, &type, &space, &page_no, + &body); + if (len > 0) { + + if (log_online_rec_page_means_page(type) + && (space != TRX_DOUBLEWRITE_SPACE)) { + + ut_a(len >= 3); + log_online_set_page_bit(space, page_no); + } + + ptr += len; + ut_ad(ptr <= end); + log_bmp_sys->next_parse_lsn + = recv_calc_lsn_on_data_add + (log_bmp_sys->next_parse_lsn, len); + } + else { + + /* Incomplete log record. Shift it to the + beginning of the parse buffer and leave it to be + completed on the next read. */ + ut_memmove(log_bmp_sys->parse_buf, ptr, end - ptr); + log_bmp_sys->parse_buf_end + = log_bmp_sys->parse_buf + (end - ptr); + ptr = end; + } + } + + if (len > 0) { + + log_bmp_sys->parse_buf_end = log_bmp_sys->parse_buf; + } +} + +/*********************************************************************//** +Check the log block checksum. +@return TRUE if the log block checksum is OK, FALSE otherwise. */ +static +ibool +log_online_is_valid_log_seg( +/*========================*/ + const byte* log_block) /*!< in: read log data */ +{ + ibool checksum_is_ok + = log_block_checksum_is_ok_or_old_format(log_block); + + if (!checksum_is_ok) { + + fprintf(stderr, + "InnoDB Error: log block checksum mismatch" + "expected %lu, calculated checksum %lu\n", + (ulong) log_block_get_checksum(log_block), + (ulong) log_block_calc_checksum(log_block)); + } + + return checksum_is_ok; +} + +/*********************************************************************//** +Copy new log data to the parse buffer while skipping log block header, +trailer and already parsed data. */ +static +void +log_online_add_to_parse_buf( +/*========================*/ + const byte* log_block, /*!< in: read log data */ + ulint data_len, /*!< in: length of read log data */ + ulint skip_len) /*!< in: how much of log data to + skip */ +{ + ulint start_offset = skip_len ? skip_len : LOG_BLOCK_HDR_SIZE; + ulint end_offset + = (data_len == OS_FILE_LOG_BLOCK_SIZE) + ? data_len - LOG_BLOCK_TRL_SIZE + : data_len; + ulint actual_data_len = (end_offset >= start_offset) + ? end_offset - start_offset : 0; + + ut_memcpy(log_bmp_sys->parse_buf_end, log_block + start_offset, + actual_data_len); + + log_bmp_sys->parse_buf_end += actual_data_len; + + ut_a(log_bmp_sys->parse_buf_end - log_bmp_sys->parse_buf + <= RECV_PARSING_BUF_SIZE); +} + +/*********************************************************************//** +Parse the log block: first copies the read log data to the parse buffer while +skipping log block header, trailer and already parsed data. Then it actually +parses the log to add to the modified page bitmap. */ +static +void +log_online_parse_redo_log_block( +/*============================*/ + const byte* log_block, /*!< in: read log data */ + ulint skip_already_parsed_len) /*!< in: how many bytes of + log data should be skipped as + they were parsed before */ +{ + ulint block_data_len; + + block_data_len = log_block_get_data_len(log_block); + + ut_ad(block_data_len % OS_FILE_LOG_BLOCK_SIZE == 0 + || block_data_len < OS_FILE_LOG_BLOCK_SIZE); + + log_online_add_to_parse_buf(log_block, block_data_len, + skip_already_parsed_len); + log_online_parse_redo_log(); +} + +/*********************************************************************//** +Read and parse one redo log chunk and updates the modified page bitmap. */ +static +void +log_online_follow_log_seg( +/*======================*/ + log_group_t* group, /*!< in: the log group to use */ + ib_uint64_t block_start_lsn, /*!< in: the LSN to read from */ + ib_uint64_t block_end_lsn) /*!< in: the LSN to read to */ +{ + /* Pointer to the current OS_FILE_LOG_BLOCK-sized chunk of the read log + data to parse */ + byte* log_block = log_bmp_sys->read_buf; + byte* log_block_end = log_bmp_sys->read_buf + + (block_end_lsn - block_start_lsn); + + mutex_enter(&log_sys->mutex); + log_group_read_log_seg(LOG_RECOVER, log_bmp_sys->read_buf, + group, block_start_lsn, block_end_lsn); + mutex_exit(&log_sys->mutex); + + while (log_block < log_block_end + && log_bmp_sys->next_parse_lsn < log_bmp_sys->end_lsn) { + + /* How many bytes of log data should we skip in the current log + block. Skipping is necessary because we round down the next + parse LSN thus it is possible to read the already-processed log + data many times */ + ulint skip_already_parsed_len = 0; + + if (!log_online_is_valid_log_seg(log_block)) { + break; + } + + if ((block_start_lsn <= log_bmp_sys->next_parse_lsn) + && (block_start_lsn + OS_FILE_LOG_BLOCK_SIZE + > log_bmp_sys->next_parse_lsn)) { + + /* The next parse LSN is inside the current block, skip + data preceding it. */ + skip_already_parsed_len + = log_bmp_sys->next_parse_lsn + - block_start_lsn; + } + else { + + /* If the next parse LSN is not inside the current + block, then the only option is that we have processed + ahead already. */ + ut_a(block_start_lsn > log_bmp_sys->next_parse_lsn); + } + + /* TODO: merge the copying to the parse buf code with + skip_already_len calculations */ + log_online_parse_redo_log_block(log_block, + skip_already_parsed_len); + + log_block += OS_FILE_LOG_BLOCK_SIZE; + block_start_lsn += OS_FILE_LOG_BLOCK_SIZE; + } + + return; +} + +/*********************************************************************//** +Read and parse the redo log in a given group in FOLLOW_SCAN_SIZE-sized +chunks and updates the modified page bitmap. */ +static +void +log_online_follow_log_group( +/*========================*/ + log_group_t* group, /*!< in: the log group to use */ + ib_uint64_t contiguous_lsn) /*!< in: the LSN of log block start + containing the log_parse_start_lsn */ +{ + ib_uint64_t block_start_lsn = contiguous_lsn; + ib_uint64_t block_end_lsn; + + log_bmp_sys->next_parse_lsn = log_bmp_sys->start_lsn; + log_bmp_sys->parse_buf_end = log_bmp_sys->parse_buf; + + do { + block_end_lsn = block_start_lsn + FOLLOW_SCAN_SIZE; + + log_online_follow_log_seg(group, block_start_lsn, + block_end_lsn); + + /* Next parse LSN can become higher than the last read LSN + only in the case when the read LSN falls right on the block + boundary, in which case next parse lsn is bumped to the actual + data LSN on the next (not yet read) block. This assert is + slightly conservative. */ + ut_a(log_bmp_sys->next_parse_lsn + <= block_end_lsn + LOG_BLOCK_HDR_SIZE + + LOG_BLOCK_TRL_SIZE); + + block_start_lsn = block_end_lsn; + } while (block_end_lsn < log_bmp_sys->end_lsn); + + /* Assert that the last read log record is a full one */ + ut_a(log_bmp_sys->parse_buf_end == log_bmp_sys->parse_buf); +} + +/*********************************************************************//** +Write, flush one bitmap block to disk and advance the output position if +successful. */ +static +void +log_online_write_bitmap_page( +/*=========================*/ + const byte *block) /*!< in: block to write */ +{ + ibool success; + + success = os_file_write(log_bmp_sys->out_name,log_bmp_sys->out, + block, + (ulint)(log_bmp_sys->out_offset & 0xFFFFFFFF), + (ulint)(log_bmp_sys->out_offset << 32), + MODIFIED_PAGE_BLOCK_SIZE); + if (UNIV_UNLIKELY(!success)) { + + /* The following call prints an error message */ + os_file_get_last_error(TRUE); + fprintf(stderr, "InnoDB: Error: failed writing changed page " + "bitmap file \'%s\'\n", log_bmp_sys->out_name); + return; + } + + success = os_file_flush(log_bmp_sys->out, FALSE); + if (UNIV_UNLIKELY(!success)) { + + /* The following call prints an error message */ + os_file_get_last_error(TRUE); + fprintf(stderr, "InnoDB: Error: failed flushing " + "changed page bitmap file \'%s\'\n", + log_bmp_sys->out_name); + return; + } + + log_bmp_sys->out_offset += MODIFIED_PAGE_BLOCK_SIZE; +} + +/*********************************************************************//** +Append the current changed page bitmap to the bitmap file. Clears the +bitmap tree and recycles its nodes to the free list. */ +static +void +log_online_write_bitmap() +/*=====================*/ +{ + ib_rbt_node_t *bmp_tree_node; + const ib_rbt_node_t *last_bmp_tree_node; + + bmp_tree_node = (ib_rbt_node_t *) + rbt_first(log_bmp_sys->modified_pages); + last_bmp_tree_node = rbt_last(log_bmp_sys->modified_pages); + + while (bmp_tree_node) { + + byte *page = rbt_value(byte, bmp_tree_node); + + if (bmp_tree_node == last_bmp_tree_node) { + mach_write_to_4(page + MODIFIED_PAGE_IS_LAST_BLOCK, 1); + } + + mach_write_ull(page + MODIFIED_PAGE_START_LSN, + log_bmp_sys->start_lsn); + mach_write_ull(page + MODIFIED_PAGE_END_LSN, + log_bmp_sys->end_lsn); + mach_write_to_4(page + MODIFIED_PAGE_BLOCK_CHECKSUM, + log_online_calc_checksum(page)); + + log_online_write_bitmap_page(page); + + bmp_tree_node->left = log_bmp_sys->page_free_list; + log_bmp_sys->page_free_list = bmp_tree_node; + + bmp_tree_node = (ib_rbt_node_t*) + rbt_next(log_bmp_sys->modified_pages, bmp_tree_node); + } + + rbt_reset(log_bmp_sys->modified_pages); +} + +/*********************************************************************//** +Read and parse the redo log up to last checkpoint LSN to build the changed +page bitmap which is then written to disk. */ +UNIV_INTERN +void +log_online_follow_redo_log() +/*========================*/ +{ + ib_uint64_t contiguous_start_lsn; + log_group_t* group; + + /* Grab the LSN of the last checkpoint, we will parse up to it */ + mutex_enter(&(log_sys->mutex)); + log_bmp_sys->end_lsn = log_sys->last_checkpoint_lsn; + mutex_exit(&(log_sys->mutex)); + + if (log_bmp_sys->end_lsn == log_bmp_sys->start_lsn) { + return; + } + + group = UT_LIST_GET_FIRST(log_sys->log_groups); + ut_a(group); + + contiguous_start_lsn = ut_uint64_align_down(log_bmp_sys->start_lsn, + OS_FILE_LOG_BLOCK_SIZE); + + while (group) { + log_online_follow_log_group(group, contiguous_start_lsn); + group = UT_LIST_GET_NEXT(log_groups, group); + } + + /* A crash injection site that ensures last checkpoint LSN > last + tracked LSN, so that LSN tracking for this interval is tested. */ + DBUG_EXECUTE_IF("crash_before_bitmap_write", DBUG_SUICIDE();); + + log_online_write_bitmap(); + log_bmp_sys->start_lsn = log_bmp_sys->end_lsn; + log_set_tracked_lsn(log_bmp_sys->start_lsn); +} + +/*********************************************************************//** +Initializes log bitmap iterator. +@return TRUE if the iterator is initialized OK, FALSE otherwise. */ +UNIV_INTERN +ibool +log_online_bitmap_iterator_init( +/*============================*/ + log_bitmap_iterator_t *i) /*!in_name, FN_REFLEN, "%s%s%d", srv_data_home, + modified_page_stem, 1); + i->in_offset = 0; + /* + Set up bit offset out of the reasonable limit + to intiate reading block from file in + log_online_bitmap_iterator_next() + */ + i->bit_offset = MODIFIED_PAGE_BLOCK_BITMAP_LEN; + i->in = + os_file_create_simple_no_error_handling( + i->in_name, + OS_FILE_OPEN, + OS_FILE_READ_ONLY, + &success); + + if (!success) { + /* The following call prints an error message */ + os_file_get_last_error(TRUE); + fprintf(stderr, + "InnoDB: Error: Cannot open \'%s\'\n", + i->in_name); + return FALSE; + } + + i->page = ut_malloc(MODIFIED_PAGE_BLOCK_SIZE); + + i->start_lsn = i->end_lsn = 0; + i->space_id = 0; + i->first_page_id = 0; + i->changed = FALSE; + + return TRUE; +} + +/*********************************************************************//** +Releases log bitmap iterator. */ +UNIV_INTERN +void +log_online_bitmap_iterator_release( +/*===============================*/ + log_bitmap_iterator_t *i) /*!in); + ut_free(i->page); +} + +/*********************************************************************//** +Iterates through bits of saved bitmap blocks. +Sequentially reads blocks from bitmap file(s) and interates through +their bits. Ignores blocks with wrong checksum. +@return TRUE if iteration is successful, FALSE if all bits are iterated. */ +UNIV_INTERN +ibool +log_online_bitmap_iterator_next( +/*============================*/ + log_bitmap_iterator_t *i) /*!bit_offset < MODIFIED_PAGE_BLOCK_BITMAP_LEN) + { + ++i->bit_offset; + i->changed = + IS_BIT_SET(i->page + MODIFIED_PAGE_BLOCK_BITMAP, + i->bit_offset); + return TRUE; + } + + while (checksum != actual_checksum) + { + success = os_file_get_size(i->in, + &size_low, + &size_high); + if (!success) { + os_file_get_last_error(TRUE); + fprintf(stderr, + "InnoDB: Warning: can't get size of " + "page bitmap file \'%s\'\n", + i->in_name); + return FALSE; + } + + if (i->in_offset >= + (ib_uint64_t)(size_low) + + ((ib_uint64_t)(size_high) << 32)) + return FALSE; + + offset_high = (ulint)(i->in_offset >> 32); + offset_low = (ulint)(i->in_offset & 0xFFFFFFFF); + + success = os_file_read( + i->in, + i->page, + offset_low, + offset_high, + MODIFIED_PAGE_BLOCK_SIZE); + + if (!success) { + os_file_get_last_error(TRUE); + fprintf(stderr, + "InnoDB: Warning: failed reading " + "changed page bitmap file \'%s\'\n", + i->in_name); + return FALSE; + } + + checksum = mach_read_from_4( + i->page + MODIFIED_PAGE_BLOCK_CHECKSUM); + + actual_checksum = log_online_calc_checksum(i->page); + + i->in_offset += MODIFIED_PAGE_BLOCK_SIZE; + } + + i->start_lsn = + mach_read_ull(i->page + MODIFIED_PAGE_START_LSN); + i->end_lsn = + mach_read_ull(i->page + MODIFIED_PAGE_END_LSN); + i->space_id = + mach_read_from_4(i->page + MODIFIED_PAGE_SPACE_ID); + i->first_page_id = + mach_read_from_4(i->page + MODIFIED_PAGE_1ST_PAGE_ID); + i->bit_offset = + 0; + i->changed = + IS_BIT_SET(i->page + MODIFIED_PAGE_BLOCK_BITMAP, + i->bit_offset); + + return TRUE; +} + diff --git a/log/log0recv.c b/log/log0recv.c index b8ff5401129..b4ac7a5b292 100644 --- a/log/log0recv.c +++ b/log/log0recv.c @@ -840,7 +840,7 @@ block. We also accept a log block in the old format before InnoDB-3.23.52 where the checksum field contains the log block number. @return TRUE if ok, or if the log block may be in the format of InnoDB version predating 3.23.52 */ -static +UNIV_INTERN ibool log_block_checksum_is_ok_or_old_format( /*===================================*/ @@ -2084,7 +2084,7 @@ skip_this_recv_addr: /*******************************************************************//** Tries to parse a single log record and returns its length. @return length of the record, or 0 if the record was not complete */ -static +UNIV_INTERN ulint recv_parse_log_rec( /*===============*/ @@ -2155,7 +2155,7 @@ recv_parse_log_rec( /*******************************************************//** Calculates the new value for lsn when more data is added to the log. */ -static +UNIV_INTERN ib_uint64_t recv_calc_lsn_on_data_add( /*======================*/ @@ -3541,6 +3541,8 @@ recv_reset_logs( log_sys->archived_lsn = log_sys->lsn; #endif /* UNIV_LOG_ARCHIVE */ + log_sys->tracked_lsn = log_sys->lsn; + log_block_init(log_sys->buf, log_sys->lsn); log_block_set_first_rec_group(log_sys->buf, LOG_BLOCK_HDR_SIZE); diff --git a/mem/mem0pool.c b/mem/mem0pool.c index 3291453eeb5..8a01be66506 100644 --- a/mem/mem0pool.c +++ b/mem/mem0pool.c @@ -223,11 +223,7 @@ mem_pool_create( pool = ut_malloc(sizeof(mem_pool_t)); - /* We do not set the memory to zero (FALSE) in the pool, - but only when allocated at a higher level in mem0mem.c. - This is to avoid masking useful Purify warnings. */ - - pool->buf = ut_malloc_low(size, FALSE, TRUE); + pool->buf = ut_malloc_low(size, TRUE); pool->size = size; mutex_create(&pool->mutex, SYNC_MEM_POOL); diff --git a/mtr/mtr0mtr.c b/mtr/mtr0mtr.c index a9f1c35f84c..3b6dfa7bd26 100644 --- a/mtr/mtr0mtr.c +++ b/mtr/mtr0mtr.c @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ diff --git a/mysql-test/patches/information_schema.diff b/mysql-test/patches/information_schema.diff index a91eac75cff..a3a21f7a08d 100644 --- a/mysql-test/patches/information_schema.diff +++ b/mysql-test/patches/information_schema.diff @@ -1,28 +1,20 @@ ---- mysql-test/r/information_schema.result.orig 2009-12-04 16:08:19.000000000 +0900 -+++ mysql-test/r/information_schema.result 2009-12-04 16:09:12.000000000 +0900 -@@ -71,6 +71,21 @@ +--- mysql-test/r/information_schema.result.orig 2009-01-31 03:38:50.000000000 +0200 ++++ mysql-test/r/information_schema.result 2009-01-31 07:51:58.000000000 +0200 +@@ -71,6 +71,13 @@ TRIGGERS USER_PRIVILEGES VIEWS -+INNODB_BUFFER_POOL_PAGES_INDEX -+INNODB_RSEG -+INNODB_LOCKS -+INNODB_BUFFER_POOL_PAGES -+XTRADB_ENHANCEMENTS -+INNODB_TRX -+XTRADB_ADMIN_COMMAND -+INNODB_LOCK_WAITS +INNODB_CMP_RESET -+INNODB_CMP ++INNODB_TRX +INNODB_CMPMEM_RESET -+INNODB_TABLE_STATS ++INNODB_LOCK_WAITS +INNODB_CMPMEM -+INNODB_INDEX_STATS -+INNODB_BUFFER_POOL_PAGES_BLOB ++INNODB_CMP ++INNODB_LOCKS columns_priv db event -@@ -799,6 +814,8 @@ +@@ -799,6 +806,8 @@ TABLES UPDATE_TIME datetime TABLES CHECK_TIME datetime TRIGGERS CREATED datetime @@ -31,172 +23,102 @@ event execute_at datetime event last_executed datetime event starts datetime -@@ -847,12 +864,15 @@ - TABLE_CONSTRAINTS TABLE_NAME select - TABLE_PRIVILEGES TABLE_NAME select - VIEWS TABLE_NAME select -+INNODB_BUFFER_POOL_PAGES_INDEX table_name select -+INNODB_TABLE_STATS table_name select -+INNODB_INDEX_STATS table_name select - delete from mysql.user where user='mysqltest_4'; - delete from mysql.db where user='mysqltest_4'; +@@ -852,7 +861,7 @@ flush privileges; SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA; table_schema count(*) -information_schema 28 -+information_schema 43 ++information_schema 35 mysql 22 create table t1 (i int, j int); create trigger trg1 before insert on t1 for each row -@@ -1267,6 +1287,21 @@ +@@ -1267,6 +1276,13 @@ TRIGGERS TRIGGER_SCHEMA USER_PRIVILEGES GRANTEE VIEWS TABLE_SCHEMA -+INNODB_BUFFER_POOL_PAGES_INDEX schema_name -+INNODB_RSEG rseg_id -+INNODB_LOCKS lock_id -+INNODB_BUFFER_POOL_PAGES page_type -+XTRADB_ENHANCEMENTS name -+INNODB_TRX trx_id -+XTRADB_ADMIN_COMMAND result_message -+INNODB_LOCK_WAITS requesting_trx_id +INNODB_CMP_RESET page_size -+INNODB_CMP page_size ++INNODB_TRX trx_id +INNODB_CMPMEM_RESET page_size -+INNODB_TABLE_STATS table_name ++INNODB_LOCK_WAITS requesting_trx_id +INNODB_CMPMEM page_size -+INNODB_INDEX_STATS table_name -+INNODB_BUFFER_POOL_PAGES_BLOB space_id ++INNODB_CMP page_size ++INNODB_LOCKS lock_id SELECT t.table_name, c1.column_name FROM information_schema.tables t INNER JOIN -@@ -1310,14 +1345,29 @@ +@@ -1310,6 +1326,13 @@ TRIGGERS TRIGGER_SCHEMA USER_PRIVILEGES GRANTEE VIEWS TABLE_SCHEMA -+INNODB_BUFFER_POOL_PAGES_INDEX schema_name -+INNODB_RSEG rseg_id -+INNODB_LOCKS lock_id -+INNODB_BUFFER_POOL_PAGES page_type -+XTRADB_ENHANCEMENTS name -+INNODB_TRX trx_id -+XTRADB_ADMIN_COMMAND result_message -+INNODB_LOCK_WAITS requesting_trx_id +INNODB_CMP_RESET page_size -+INNODB_CMP page_size ++INNODB_TRX trx_id +INNODB_CMPMEM_RESET page_size -+INNODB_TABLE_STATS table_name ++INNODB_LOCK_WAITS requesting_trx_id +INNODB_CMPMEM page_size -+INNODB_INDEX_STATS table_name -+INNODB_BUFFER_POOL_PAGES_BLOB space_id ++INNODB_CMP page_size ++INNODB_LOCKS lock_id SELECT MAX(table_name) FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test'); MAX(table_name) --VIEWS -+XTRADB_ENHANCEMENTS - SELECT table_name from information_schema.tables - WHERE table_name=(SELECT MAX(table_name) - FROM information_schema.tables WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test')); - table_name --VIEWS -+XTRADB_ENHANCEMENTS - DROP TABLE IF EXISTS bug23037; - DROP FUNCTION IF EXISTS get_value; - SELECT COLUMN_NAME, MD5(COLUMN_DEFAULT), LENGTH(COLUMN_DEFAULT) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='bug23037'; -@@ -1386,6 +1436,19 @@ + VIEWS +@@ -1386,6 +1409,13 @@ FILES information_schema.FILES 1 GLOBAL_STATUS information_schema.GLOBAL_STATUS 1 GLOBAL_VARIABLES information_schema.GLOBAL_VARIABLES 1 -+INNODB_BUFFER_POOL_PAGES information_schema.INNODB_BUFFER_POOL_PAGES 1 -+INNODB_BUFFER_POOL_PAGES_BLOB information_schema.INNODB_BUFFER_POOL_PAGES_BLOB 1 -+INNODB_BUFFER_POOL_PAGES_INDEX information_schema.INNODB_BUFFER_POOL_PAGES_INDEX 1 +INNODB_CMP information_schema.INNODB_CMP 1 +INNODB_CMPMEM information_schema.INNODB_CMPMEM 1 +INNODB_CMPMEM_RESET information_schema.INNODB_CMPMEM_RESET 1 +INNODB_CMP_RESET information_schema.INNODB_CMP_RESET 1 -+INNODB_INDEX_STATS information_schema.INNODB_INDEX_STATS 1 +INNODB_LOCKS information_schema.INNODB_LOCKS 1 +INNODB_LOCK_WAITS information_schema.INNODB_LOCK_WAITS 1 -+INNODB_RSEG information_schema.INNODB_RSEG 1 -+INNODB_TABLE_STATS information_schema.INNODB_TABLE_STATS 1 +INNODB_TRX information_schema.INNODB_TRX 1 KEY_COLUMN_USAGE information_schema.KEY_COLUMN_USAGE 1 PARTITIONS information_schema.PARTITIONS 1 PLUGINS information_schema.PLUGINS 1 -@@ -1404,6 +1467,7 @@ - TRIGGERS information_schema.TRIGGERS 1 - USER_PRIVILEGES information_schema.USER_PRIVILEGES 1 - VIEWS information_schema.VIEWS 1 -+XTRADB_ENHANCEMENTS information_schema.XTRADB_ENHANCEMENTS 1 - create table t1(f1 int); - create view v1 as select f1+1 as a from t1; - create table t2 (f1 int, f2 int); ---- mysql-test/r/information_schema_db.result.orig 2009-12-04 16:08:03.000000000 +0900 -+++ mysql-test/r/information_schema_db.result 2009-12-04 16:09:28.000000000 +0900 -@@ -33,6 +33,21 @@ +diff mysql-test/r/information_schema_db.result.orig mysql-test/r/information_schema_db.result +--- mysql-test/r/information_schema_db.result.orig 2008-08-04 09:27:49.000000000 +0300 ++++ mysql-test/r/information_schema_db.result 2008-10-07 12:26:31.000000000 +0300 +@@ -33,6 +33,13 @@ TRIGGERS USER_PRIVILEGES VIEWS -+INNODB_BUFFER_POOL_PAGES_INDEX -+INNODB_RSEG -+INNODB_LOCKS -+INNODB_BUFFER_POOL_PAGES -+XTRADB_ENHANCEMENTS -+INNODB_TRX -+XTRADB_ADMIN_COMMAND -+INNODB_LOCK_WAITS +INNODB_CMP_RESET -+INNODB_CMP ++INNODB_TRX +INNODB_CMPMEM_RESET -+INNODB_TABLE_STATS ++INNODB_LOCK_WAITS +INNODB_CMPMEM -+INNODB_INDEX_STATS -+INNODB_BUFFER_POOL_PAGES_BLOB ++INNODB_CMP ++INNODB_LOCKS show tables from INFORMATION_SCHEMA like 'T%'; Tables_in_information_schema (T%) TABLES ---- mysql-test/r/mysqlshow.result.orig 2009-12-04 16:07:43.000000000 +0900 -+++ mysql-test/r/mysqlshow.result 2009-12-04 16:09:40.000000000 +0900 -@@ -107,6 +107,21 @@ +diff mysql-test/r/mysqlshow.result.orig mysql-test/r/mysqlshow.result +--- mysql-test/r/mysqlshow.result.orig 2008-08-04 09:27:51.000000000 +0300 ++++ mysql-test/r/mysqlshow.result 2008-10-07 12:35:39.000000000 +0300 +@@ -107,6 +107,13 @@ | TRIGGERS | | USER_PRIVILEGES | | VIEWS | -+| INNODB_BUFFER_POOL_PAGES_INDEX | -+| INNODB_RSEG | -+| INNODB_LOCKS | -+| INNODB_BUFFER_POOL_PAGES | -+| XTRADB_ENHANCEMENTS | -+| INNODB_TRX | -+| XTRADB_ADMIN_COMMAND | -+| INNODB_LOCK_WAITS | +| INNODB_CMP_RESET | -+| INNODB_CMP | ++| INNODB_TRX | +| INNODB_CMPMEM_RESET | -+| INNODB_TABLE_STATS | ++| INNODB_LOCK_WAITS | +| INNODB_CMPMEM | -+| INNODB_INDEX_STATS | -+| INNODB_BUFFER_POOL_PAGES_BLOB | ++| INNODB_CMP | ++| INNODB_LOCKS | +---------------------------------------+ Database: INFORMATION_SCHEMA +---------------------------------------+ -@@ -140,6 +155,21 @@ +@@ -140,6 +147,13 @@ | TRIGGERS | | USER_PRIVILEGES | | VIEWS | -+| INNODB_BUFFER_POOL_PAGES_INDEX | -+| INNODB_RSEG | -+| INNODB_LOCKS | -+| INNODB_BUFFER_POOL_PAGES | -+| XTRADB_ENHANCEMENTS | -+| INNODB_TRX | -+| XTRADB_ADMIN_COMMAND | -+| INNODB_LOCK_WAITS | +| INNODB_CMP_RESET | -+| INNODB_CMP | ++| INNODB_TRX | +| INNODB_CMPMEM_RESET | -+| INNODB_TABLE_STATS | ++| INNODB_LOCK_WAITS | +| INNODB_CMPMEM | -+| INNODB_INDEX_STATS | -+| INNODB_BUFFER_POOL_PAGES_BLOB | ++| INNODB_CMP | ++| INNODB_LOCKS | +---------------------------------------+ Wildcard: inf_rmation_schema +--------------------+ diff --git a/os/os0file.c b/os/os0file.c index 1b0251a5422..c44e6898348 100644 --- a/os/os0file.c +++ b/os/os0file.c @@ -1939,6 +1939,25 @@ os_file_set_eof( #endif /* __WIN__ */ } +/***********************************************************************//** +Truncates a file at the specified position. +@return TRUE if success */ +UNIV_INTERN +ibool +os_file_set_eof_at( + os_file_t file, /*!< in: handle to a file */ + ib_uint64_t new_len)/*!< in: new file length */ +{ +#ifdef __WIN__ + /* TODO: untested! */ + return(!_chsize_s(file, new_len)); +#else + /* TODO: works only with -D_FILE_OFFSET_BITS=64 ? */ + return(!ftruncate(file, new_len)); +#endif +} + + #ifndef __WIN__ /***********************************************************************//** Wrapper to fsync(2) that retries the call on some errors. @@ -3593,13 +3612,12 @@ os_aio_simulated_wake_handler_thread( { os_aio_array_t* array; os_aio_slot_t* slot; - ulint segment; ulint n; ulint i; ut_ad(!os_aio_use_native_aio); - segment = os_aio_get_array_and_local_segment(&array, global_segment); + os_aio_get_array_and_local_segment(&array, global_segment); n = array->n_slots; @@ -4078,7 +4096,6 @@ os_aio_simulated_handle( ulint* space_id) { os_aio_array_t* array; - ulint segment; os_aio_slot_t* slot; os_aio_slot_t* slot2; os_aio_slot_t* consecutive_ios[OS_AIO_MERGE_N_CONSECUTIVE]; @@ -4101,7 +4118,7 @@ os_aio_simulated_handle( /* Fix compiler warning */ *consecutive_ios = NULL; - segment = os_aio_get_array_and_local_segment(&array, global_segment); + os_aio_get_array_and_local_segment(&array, global_segment); restart: /* NOTE! We only access constant fields in os_aio_array. Therefore @@ -4110,7 +4127,6 @@ restart: srv_set_io_thread_op_info(global_segment, "looking for i/o requests (a)"); ut_ad(os_aio_validate()); - ut_ad(segment < array->n_segments); n = array->n_slots; diff --git a/os/os0proc.c b/os/os0proc.c index 48922886f23..a0679e31570 100644 --- a/os/os0proc.c +++ b/os/os0proc.c @@ -111,9 +111,6 @@ os_mem_alloc_large( os_fast_mutex_lock(&ut_list_mutex); ut_total_allocated_memory += size; os_fast_mutex_unlock(&ut_list_mutex); -# ifdef UNIV_SET_MEM_TO_ZERO - memset(ptr, '\0', size); -# endif UNIV_MEM_ALLOC(ptr, size); return(ptr); } diff --git a/page/page0cur.c b/page/page0cur.c index b8c492328e8..00fb55d169c 100644 --- a/page/page0cur.c +++ b/page/page0cur.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -1902,6 +1902,7 @@ page_cur_delete_rec( /* Save to local variables some data associated with current_rec */ cur_slot_no = page_dir_find_owner_slot(current_rec); + ut_ad(cur_slot_no > 0); cur_dir_slot = page_dir_get_nth_slot(page, cur_slot_no); cur_n_owned = page_dir_slot_get_n_owned(cur_dir_slot); diff --git a/page/page0page.c b/page/page0page.c index a284b1480a3..ba43dae3858 100644 --- a/page/page0page.c +++ b/page/page0page.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -215,12 +215,6 @@ page_set_max_trx_id( { page_t* page = buf_block_get_frame(block); #ifndef UNIV_HOTBACKUP - const ibool is_hashed = block->is_hashed; - - if (is_hashed) { - rw_lock_x_lock(&btr_search_latch); - } - ut_ad(!mtr || mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX)); #endif /* !UNIV_HOTBACKUP */ @@ -241,12 +235,6 @@ page_set_max_trx_id( } else { mach_write_to_8(page + (PAGE_HEADER + PAGE_MAX_TRX_ID), trx_id); } - -#ifndef UNIV_HOTBACKUP - if (is_hashed) { - rw_lock_x_unlock(&btr_search_latch); - } -#endif /* !UNIV_HOTBACKUP */ } /************************************************************//** @@ -792,17 +780,23 @@ page_copy_rec_list_start( if (UNIV_LIKELY_NULL(new_page_zip)) { mtr_set_log_mode(mtr, log_mode); + DBUG_EXECUTE_IF("page_copy_rec_list_start_compress_fail", + goto zip_reorganize;); + if (UNIV_UNLIKELY (!page_zip_compress(new_page_zip, new_page, index, mtr))) { + ulint ret_pos; +#ifndef DBUG_OFF +zip_reorganize: +#endif /* DBUG_OFF */ /* Before trying to reorganize the page, store the number of preceding records on the page. */ - ulint ret_pos - = page_rec_get_n_recs_before(ret); + ret_pos = page_rec_get_n_recs_before(ret); /* Before copying, "ret" was the predecessor of the predefined supremum record. If it was the predefined infimum record, then it would - still be the infimum. Thus, the assertion - ut_a(ret_pos > 0) would fail here. */ + still be the infimum, and we would have + ret_pos == 0. */ if (UNIV_UNLIKELY (!page_zip_reorganize(new_block, index, mtr))) { @@ -818,15 +812,10 @@ page_copy_rec_list_start( btr_blob_dbg_add(new_page, index, "copy_start_reorg_fail"); return(NULL); - } else { - /* The page was reorganized: - Seek to ret_pos. */ - ret = new_page + PAGE_NEW_INFIMUM; - - do { - ret = rec_get_next_ptr(ret, TRUE); - } while (--ret_pos); } + + /* The page was reorganized: Seek to ret_pos. */ + ret = page_rec_get_nth(new_page, ret_pos); } } @@ -1062,6 +1051,7 @@ page_delete_rec_list_end( n_owned = rec_get_n_owned_new(rec2) - count; slot_index = page_dir_find_owner_slot(rec2); + ut_ad(slot_index > 0); slot = page_dir_get_nth_slot(page, slot_index); } else { rec_t* rec2 = rec; @@ -1077,6 +1067,7 @@ page_delete_rec_list_end( n_owned = rec_get_n_owned_old(rec2) - count; slot_index = page_dir_find_owner_slot(rec2); + ut_ad(slot_index > 0); slot = page_dir_get_nth_slot(page, slot_index); } @@ -1503,6 +1494,10 @@ page_rec_get_nth_const( ulint n_owned; const rec_t* rec; + if (nth == 0) { + return(page_get_infimum_rec(page)); + } + ut_ad(nth < UNIV_PAGE_SIZE / (REC_N_NEW_EXTRA_BYTES + 1)); for (i = 0;; i++) { @@ -1596,7 +1591,7 @@ page_rec_get_n_recs_before( n--; ut_ad(n >= 0); - ut_ad(n < UNIV_PAGE_SIZE / (REC_N_NEW_EXTRA_BYTES + 1)); + ut_ad((ulint) n < UNIV_PAGE_SIZE / (REC_N_NEW_EXTRA_BYTES + 1)); return((ulint) n); } @@ -1625,13 +1620,14 @@ page_rec_print( " n_owned: %lu; heap_no: %lu; next rec: %lu\n", (ulong) rec_get_n_owned_old(rec), (ulong) rec_get_heap_no_old(rec), - (ulong) rec_get_next_offs(rec, TRUE)); + (ulong) rec_get_next_offs(rec, FALSE)); } page_rec_check(rec); rec_validate(rec, offsets); } +# ifdef UNIV_BTR_PRINT /***************************************************************//** This is used to print the contents of the directory for debugging purposes. */ @@ -1792,6 +1788,7 @@ page_print( page_dir_print(page, dn); page_print_list(block, index, rn); } +# endif /* UNIV_BTR_PRINT */ #endif /* !UNIV_HOTBACKUP */ /***************************************************************//** diff --git a/plug.in b/plug.in index 427cc87eeb5..e3ba2b0de42 100644 --- a/plug.in +++ b/plug.in @@ -93,7 +93,6 @@ MYSQL_PLUGIN_ACTIONS(innodb_plugin, [ if (res != 10 || c != 123) { return(1); } - return(0); } ], @@ -107,6 +106,42 @@ MYSQL_PLUGIN_ACTIONS(innodb_plugin, [ ] ) + AC_MSG_CHECKING(whether GCC 64-bit atomic builtins are available) + # either define HAVE_IB_GCC_ATOMIC_BUILTINS_64 or not + AC_TRY_RUN( + [ + #include + int main() + { + int64_t x, y, res; + + x = 10; + y = 123; + res = __sync_bool_compare_and_swap(&x, x, y); + if (!res || x != y) { + return(1); + } + + x = 10; + y = 123; + res = __sync_add_and_fetch(&x, y); + if (res != 123 + 10 || x != 123 + 10) { + return(1); + } + + return(0); + } + ], + [ + AC_DEFINE([HAVE_IB_GCC_ATOMIC_BUILTINS_64], [1], + [GCC 64-bit atomic builtins are available]) + AC_MSG_RESULT(yes) + ], + [ + AC_MSG_RESULT(no) + ] + ) + AC_MSG_CHECKING(whether pthread_t can be used by GCC atomic builtins) # either define HAVE_IB_ATOMIC_PTHREAD_T_GCC or not AC_TRY_RUN( diff --git a/row/row0ins.c b/row/row0ins.c index 0e62185c02e..4d005b6c7b5 100644 --- a/row/row0ins.c +++ b/row/row0ins.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -23,6 +23,15 @@ Insert into a table Created 4/20/1996 Heikki Tuuri *******************************************************/ +#ifdef __WIN__ +/* error LNK2001: unresolved external symbol _debug_sync_C_callback_ptr */ +# define DEBUG_SYNC_C(dummy) ((void) 0) +#else +# include "my_global.h" /* HAVE_* */ +# include "m_string.h" /* for my_sys.h */ +# include "my_sys.h" /* DEBUG_SYNC_C */ +#endif + #include "row0ins.h" #ifdef UNIV_NONINL @@ -434,11 +443,9 @@ row_ins_cascade_calc_update_vec( dict_table_t* table = foreign->foreign_table; dict_index_t* index = foreign->foreign_index; upd_t* update; - upd_field_t* ufield; dict_table_t* parent_table; dict_index_t* parent_index; upd_t* parent_update; - upd_field_t* parent_ufield; ulint n_fields_updated; ulint parent_field_no; ulint i; @@ -474,13 +481,15 @@ row_ins_cascade_calc_update_vec( dict_index_get_nth_col_no(parent_index, i)); for (j = 0; j < parent_update->n_fields; j++) { - parent_ufield = parent_update->fields + j; + const upd_field_t* parent_ufield + = &parent_update->fields[j]; if (parent_ufield->field_no == parent_field_no) { ulint min_size; const dict_col_t* col; ulint ufield_len; + upd_field_t* ufield; col = dict_index_get_nth_col(index, i); @@ -493,6 +502,8 @@ row_ins_cascade_calc_update_vec( ufield->field_no = dict_table_get_nth_col_pos( table, dict_col_get_no(col)); + + ufield->orig_len = 0; ufield->exp = NULL; ufield->new_val = parent_ufield->new_val; @@ -993,10 +1004,9 @@ row_ins_foreign_check_on_constraint( goto nonstandard_exit_func; } - if ((node->is_delete - && (foreign->type & DICT_FOREIGN_ON_DELETE_SET_NULL)) - || (!node->is_delete - && (foreign->type & DICT_FOREIGN_ON_UPDATE_SET_NULL))) { + if (node->is_delete + ? (foreign->type & DICT_FOREIGN_ON_DELETE_SET_NULL) + : (foreign->type & DICT_FOREIGN_ON_UPDATE_SET_NULL)) { /* Build the appropriate update vector which sets foreign->n_fields first fields in rec to SQL NULL */ @@ -1005,6 +1015,8 @@ row_ins_foreign_check_on_constraint( update->info_bits = 0; update->n_fields = foreign->n_fields; + UNIV_MEM_INVALID(update->fields, + update->n_fields * sizeof *update->fields); for (i = 0; i < foreign->n_fields; i++) { upd_field_t* ufield = &update->fields[i]; @@ -1090,6 +1102,9 @@ row_ins_foreign_check_on_constraint( release the latch. */ row_mysql_unfreeze_data_dictionary(thr_get_trx(thr)); + + DEBUG_SYNC_C("innodb_dml_cascade_dict_unfreeze"); + row_mysql_freeze_data_dictionary(thr_get_trx(thr)); mtr_start(mtr); @@ -1281,7 +1296,8 @@ run_again: check_index = foreign->foreign_index; } - if (check_table == NULL || check_table->ibd_file_missing) { + if (check_table == NULL || check_table->ibd_file_missing + || check_index == NULL) { if (check_ref) { FILE* ef = dict_foreign_err_file; @@ -1316,9 +1332,6 @@ run_again: goto exit_func; } - ut_a(check_table); - ut_a(check_index); - if (check_table != table) { /* We already have a LOCK_IX on table, but not necessarily on check_table */ @@ -1673,7 +1686,7 @@ row_ins_scan_sec_index_for_duplicate( ulint n_fields_cmp; btr_pcur_t pcur; ulint err = DB_SUCCESS; - unsigned allow_duplicates; + ulint allow_duplicates; mtr_t mtr; mem_heap_t* heap = NULL; ulint offsets_[REC_OFFS_NORMAL_SIZE]; @@ -1704,7 +1717,7 @@ row_ins_scan_sec_index_for_duplicate( btr_pcur_open(index, entry, PAGE_CUR_GE, BTR_SEARCH_LEAF, &pcur, &mtr); - allow_duplicates = thr_get_trx(thr)->duplicates & TRX_DUP_IGNORE; + allow_duplicates = thr_get_trx(thr)->duplicates; /* Scan index records and check if there is a duplicate */ @@ -1838,7 +1851,7 @@ row_ins_duplicate_error_in_clust( sure that in roll-forward we get the same duplicate errors as in original execution */ - if (trx->duplicates & TRX_DUP_IGNORE) { + if (trx->duplicates) { /* If the SQL-query will update or replace duplicate key we will take X-lock for @@ -1882,7 +1895,7 @@ row_ins_duplicate_error_in_clust( offsets = rec_get_offsets(rec, cursor->index, offsets, ULINT_UNDEFINED, &heap); - if (trx->duplicates & TRX_DUP_IGNORE) { + if (trx->duplicates) { /* If the SQL-query will update or replace duplicate key we will take X-lock for @@ -2108,23 +2121,39 @@ row_ins_index_entry_low( ut_a(err == DB_SUCCESS); /* Write out the externally stored columns while still x-latching - index->lock and block->lock. We have - to mtr_commit(mtr) first, so that the - redo log will be written in the - correct order. Otherwise, we would run - into trouble on crash recovery if mtr - freed B-tree pages on which some of - the big_rec fields will be written. */ - btr_cur_mtr_commit_and_start(&cursor, &mtr); + index->lock and block->lock. Allocate + pages for big_rec in the mtr that + modified the B-tree, but be sure to skip + any pages that were freed in mtr. We will + write out the big_rec pages before + committing the B-tree mini-transaction. If + the system crashes so that crash recovery + will not replay the mtr_commit(&mtr), the + big_rec pages will be left orphaned until + the pages are allocated for something else. + + TODO: If the allocation extends the + tablespace, it will not be redo + logged, in either mini-transaction. + Tablespace extension should be + redo-logged in the big_rec + mini-transaction, so that recovery + will not fail when the big_rec was + written to the extended portion of the + file, in case the file was somehow + truncated in the crash. */ rec = btr_cur_get_rec(&cursor); offsets = rec_get_offsets( rec, index, NULL, ULINT_UNDEFINED, &heap); + DEBUG_SYNC_C("before_row_ins_upd_extern"); err = btr_store_big_rec_extern_fields( index, btr_cur_get_block(&cursor), - rec, offsets, &mtr, FALSE, big_rec); + rec, offsets, big_rec, &mtr, + BTR_STORE_INSERT_UPDATE); + DEBUG_SYNC_C("after_row_ins_upd_extern"); /* If writing big_rec fails (for example, because of DB_OUT_OF_FILE_SPACE), the record will be corrupted. Even if @@ -2135,7 +2164,13 @@ row_ins_index_entry_low( external storage. This non-update would not have been written to the undo log, and thus the record cannot - be rolled back. */ + be rolled back. + + However, because we have not executed + mtr_commit(mtr) yet, the update will + not be replayed in crash recovery, and + the following assertion failure will + effectively "roll back" the operation. */ ut_a(err == DB_SUCCESS); goto stored_big_rec; } @@ -2157,9 +2192,16 @@ row_ins_index_entry_low( goto function_exit; } - err = btr_cur_pessimistic_insert( + + err = btr_cur_optimistic_insert( 0, &cursor, entry, &insert_rec, &big_rec, n_ext, thr, &mtr); + + if (err == DB_FAIL) { + err = btr_cur_pessimistic_insert( + 0, &cursor, entry, &insert_rec, + &big_rec, n_ext, thr, &mtr); + } } } @@ -2167,6 +2209,8 @@ function_exit: mtr_commit(&mtr); if (UNIV_LIKELY_NULL(big_rec)) { + rec_t* rec; + ulint* offsets; if (thr_get_trx(thr)->fake_changes) { /* skip store extern */ @@ -2183,8 +2227,13 @@ function_exit: return(err); } + DBUG_EXECUTE_IF( + "row_ins_extern_checkpoint", + log_make_checkpoint_at(IB_ULONGLONG_MAX, TRUE);); + mtr_start(&mtr); + DEBUG_SYNC_C("before_row_ins_extern_latch"); btr_cur_search_to_nth_level(index, 0, entry, PAGE_CUR_LE, BTR_MODIFY_TREE, &cursor, 0, __FILE__, __LINE__, &mtr); @@ -2192,9 +2241,11 @@ function_exit: offsets = rec_get_offsets(rec, index, NULL, ULINT_UNDEFINED, &heap); + DEBUG_SYNC_C("before_row_ins_extern"); err = btr_store_big_rec_extern_fields( index, btr_cur_get_block(&cursor), - rec, offsets, &mtr, FALSE, big_rec); + rec, offsets, big_rec, &mtr, BTR_STORE_INSERT); + DEBUG_SYNC_C("after_row_ins_extern"); stored_big_rec: if (modify) { diff --git a/row/row0merge.c b/row/row0merge.c index 9842473865d..ed5e3a39f2f 100644 --- a/row/row0merge.c +++ b/row/row0merge.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2005, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1995, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -577,7 +577,7 @@ row_merge_buf_write( REC_STATUS_ORDINARY, entry, n_fields, &extra_size); - ut_ad(size > extra_size); + ut_ad(size >= extra_size); ut_ad(extra_size >= REC_N_NEW_EXTRA_BYTES); extra_size -= REC_N_NEW_EXTRA_BYTES; size -= REC_N_NEW_EXTRA_BYTES; @@ -1215,11 +1215,25 @@ row_merge_read_clustered_index( goto err_exit; } + /* Store the cursor position on the last user + record on the page. */ + btr_pcur_move_to_prev_on_page(&pcur); + /* Leaf pages must never be empty, unless + this is the only page in the index tree. */ + ut_ad(btr_pcur_is_on_user_rec(&pcur) + || buf_block_get_page_no( + btr_pcur_get_block(&pcur)) + == clust_index->page); + btr_pcur_store_position(&pcur, &mtr); mtr_commit(&mtr); mtr_start(&mtr); + /* Restore position on the record, or its + predecessor if the record was purged + meanwhile. */ btr_pcur_restore_position(BTR_SEARCH_LEAF, &pcur, &mtr); + /* Move to the successor of the original record. */ has_next = btr_pcur_move_to_next_user_rec(&pcur, &mtr); } @@ -2020,7 +2034,7 @@ row_merge_drop_index( tables in Innobase. Deleting a row from SYS_INDEXES table also frees the file segments of the B-tree associated with the index. */ - static const char str1[] = + static const char sql[] = "PROCEDURE DROP_INDEX_PROC () IS\n" "BEGIN\n" /* Rename the index, so that it will be dropped by @@ -2046,9 +2060,19 @@ row_merge_drop_index( ut_a(trx->dict_operation_lock_mode == RW_X_LATCH); - err = que_eval_sql(info, str1, FALSE, trx); + err = que_eval_sql(info, sql, FALSE, trx); - ut_a(err == DB_SUCCESS); + + if (err != DB_SUCCESS) { + /* Even though we ensure that DDL transactions are WAIT + and DEADLOCK free, we could encounter other errors e.g., + DB_TOO_MANY_TRANSACTIONS. */ + trx->error_state = DB_SUCCESS; + + ut_print_timestamp(stderr); + fprintf(stderr, " InnoDB: Error: row_merge_drop_index failed " + "with error code: %lu.\n", (ulint) err); + } /* Replace this index with another equivalent index for all foreign key constraints on this table where this index is used */ @@ -2300,7 +2324,7 @@ row_merge_rename_indexes( /* We use the private SQL parser of Innobase to generate the query graphs needed in renaming indexes. */ - static const char rename_indexes[] = + static const char sql[] = "PROCEDURE RENAME_INDEXES_PROC () IS\n" "BEGIN\n" "UPDATE SYS_INDEXES SET NAME=SUBSTR(NAME,1,LENGTH(NAME)-1)\n" @@ -2316,7 +2340,7 @@ row_merge_rename_indexes( pars_info_add_dulint_literal(info, "tableid", table->id); - err = que_eval_sql(info, rename_indexes, FALSE, trx); + err = que_eval_sql(info, sql, FALSE, trx); if (err == DB_SUCCESS) { dict_index_t* index = dict_table_get_first_index(table); @@ -2326,6 +2350,15 @@ row_merge_rename_indexes( } index = dict_table_get_next_index(index); } while (index); + } else { + /* Even though we ensure that DDL transactions are WAIT + and DEADLOCK free, we could encounter other errors e.g., + DB_TOO_MANY_TRANSACTIONS. */ + trx->error_state = DB_SUCCESS; + + ut_print_timestamp(stderr); + fprintf(stderr, " InnoDB: Error: row_merge_rename_indexes " + "failed with error code: %lu.\n", (ulint) err); } trx->op_info = ""; @@ -2364,7 +2397,7 @@ row_merge_rename_tables( memcpy(old_name, old_table->name, strlen(old_table->name) + 1); } else { ut_print_timestamp(stderr); - fprintf(stderr, "InnoDB: too long table name: '%s', " + fprintf(stderr, " InnoDB: too long table name: '%s', " "max length is %d\n", old_table->name, MAX_FULL_NAME_LEN); ut_error; diff --git a/row/row0mysql.c b/row/row0mysql.c index 9595f8c22e0..3c061580f9f 100644 --- a/row/row0mysql.c +++ b/row/row0mysql.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 2000, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -53,6 +53,14 @@ Created 9/17/2000 Heikki Tuuri #include "ibuf0ibuf.h" #include "ha_prototypes.h" +#ifdef __WIN__ +/* error LNK2001: unresolved external symbol _debug_sync_C_callback_ptr */ +# define DEBUG_SYNC_C(dummy) ((void) 0) +#else +# include "m_string.h" /* for my_sys.h */ +# include "my_sys.h" /* DEBUG_SYNC_C */ +#endif + /** Provide optional 4.x backwards compatibility for 5.0 and above */ UNIV_INTERN ibool row_rollback_on_timeout = FALSE; @@ -1362,6 +1370,8 @@ row_update_for_mysql( return(DB_ERROR); } + DEBUG_SYNC_C("innodb_row_update_for_mysql_begin"); + trx->op_info = "updating or deleting"; row_mysql_delay_if_needed(); @@ -1914,6 +1924,20 @@ err_exit: } break; + case DB_TOO_MANY_CONCURRENT_TRXS: + /* We already have .ibd file here. it should be deleted. */ + + if (table->space && !fil_delete_tablespace(table->space)) { + ut_print_timestamp(stderr); + fprintf(stderr, + " InnoDB: Error: not able to" + " delete tablespace %lu of table ", + (ulong) table->space); + ut_print_name(stderr, trx, TRUE, table->name); + fputs("!\n", stderr); + } + /* fall through */ + case DB_DUPLICATE_KEY: default: /* We may also get err == DB_ERROR if the .ibd file for the @@ -2708,7 +2732,7 @@ row_import_tablespace_for_mysql( success = fil_open_single_table_tablespace( TRUE, table->space, table->flags == DICT_TF_COMPACT ? 0 : table->flags, - table->name); + table->name, trx); if (success) { table->ibd_file_missing = FALSE; table->tablespace_discarded = FALSE; @@ -3120,6 +3144,7 @@ row_drop_table_for_mysql( { dict_foreign_t* foreign; dict_table_t* table; + dict_index_t* index; ulint space_id; ulint err; const char* table_name; @@ -3326,6 +3351,18 @@ check_next_foreign: trx_set_dict_operation(trx, TRX_DICT_OP_TABLE); trx->table_id = table->id; + /* Mark all indexes unavailable in the data dictionary cache + before starting to drop the table. */ + + for (index = dict_table_get_first_index(table); + index != NULL; + index = dict_table_get_next_index(index)) { + rw_lock_x_lock(dict_index_get_lock(index)); + ut_ad(!index->to_be_dropped); + index->to_be_dropped = TRUE; + rw_lock_x_unlock(dict_index_get_lock(index)); + } + /* We use the private SQL parser of Innobase to generate the query graphs needed in deleting the dictionary data from system tables in Innobase. Deleting a row from SYS_INDEXES table also @@ -3342,6 +3379,19 @@ check_next_foreign: "index_id CHAR;\n" "foreign_id CHAR;\n" "found INT;\n" + + "DECLARE CURSOR cur_fk IS\n" + "SELECT ID FROM SYS_FOREIGN\n" + "WHERE FOR_NAME = :table_name\n" + "AND TO_BINARY(FOR_NAME)\n" + " = TO_BINARY(:table_name)\n" + "LOCK IN SHARE MODE;\n" + + "DECLARE CURSOR cur_idx IS\n" + "SELECT ID FROM SYS_INDEXES\n" + "WHERE TABLE_ID = table_id\n" + "LOCK IN SHARE MODE;\n" + "BEGIN\n" "SELECT ID INTO table_id\n" "FROM SYS_TABLES\n" @@ -3364,13 +3414,9 @@ check_next_foreign: "IF (:table_name = 'SYS_FOREIGN_COLS') THEN\n" " found := 0;\n" "END IF;\n" + "OPEN cur_fk;\n" "WHILE found = 1 LOOP\n" - " SELECT ID INTO foreign_id\n" - " FROM SYS_FOREIGN\n" - " WHERE FOR_NAME = :table_name\n" - " AND TO_BINARY(FOR_NAME)\n" - " = TO_BINARY(:table_name)\n" - " LOCK IN SHARE MODE;\n" + " FETCH cur_fk INTO foreign_id;\n" " IF (SQL % NOTFOUND) THEN\n" " found := 0;\n" " ELSE\n" @@ -3380,12 +3426,11 @@ check_next_foreign: " WHERE ID = foreign_id;\n" " END IF;\n" "END LOOP;\n" + "CLOSE cur_fk;\n" "found := 1;\n" + "OPEN cur_idx;\n" "WHILE found = 1 LOOP\n" - " SELECT ID INTO index_id\n" - " FROM SYS_INDEXES\n" - " WHERE TABLE_ID = table_id\n" - " LOCK IN SHARE MODE;\n" + " FETCH cur_idx INTO index_id;\n" " IF (SQL % NOTFOUND) THEN\n" " found := 0;\n" " ELSE\n" @@ -3398,6 +3443,7 @@ check_next_foreign: " AND TABLE_ID = table_id;\n" " END IF;\n" "END LOOP;\n" + "CLOSE cur_idx;\n" "DELETE FROM SYS_COLUMNS\n" "WHERE TABLE_ID = table_id;\n" "DELETE FROM SYS_TABLES\n" @@ -3484,6 +3530,17 @@ check_next_foreign: the undo log. We can directly exit here and return the DB_TOO_MANY_CONCURRENT_TRXS error. */ + + /* Mark all indexes available in the data dictionary + cache again. */ + + for (index = dict_table_get_first_index(table); + index != NULL; + index = dict_table_get_next_index(index)) { + rw_lock_x_lock(dict_index_get_lock(index)); + index->to_be_dropped = FALSE; + rw_lock_x_unlock(dict_index_get_lock(index)); + } break; case DB_OUT_OF_FILE_SPACE: @@ -3578,7 +3635,7 @@ row_mysql_drop_temp_tables(void) btr_pcur_store_position(&pcur, &mtr); btr_pcur_commit_specify_mtr(&pcur, &mtr); - table = dict_load_table(table_name); + table = dict_table_get_low(table_name); if (table) { row_drop_table_for_mysql(table_name, trx, FALSE); @@ -3841,6 +3898,7 @@ row_rename_table_for_mysql( ulint n_constraints_to_drop = 0; ibool old_is_tmp, new_is_tmp; pars_info_t* info = NULL; + ulint retry = 0; ut_ad(trx->mysql_thread_id == os_thread_get_curr_id()); ut_a(old_name != NULL); @@ -3924,6 +3982,25 @@ row_rename_table_for_mysql( } } + /* Is a foreign key check running on this table? */ + for (retry = 0; retry < 100 + && table->n_foreign_key_checks_running > 0; ++retry) { + row_mysql_unlock_data_dictionary(trx); + os_thread_yield(); + row_mysql_lock_data_dictionary(trx); + } + + if (table->n_foreign_key_checks_running > 0) { + ut_print_timestamp(stderr); + fputs(" InnoDB: Error: in ALTER TABLE ", stderr); + ut_print_name(stderr, trx, TRUE, old_name); + fprintf(stderr, "\n" + "InnoDB: a FOREIGN KEY check is running.\n" + "InnoDB: Cannot rename table.\n"); + err = DB_TABLE_IN_FK_CHECK; + goto funct_exit; + } + /* We use the private SQL parser of Innobase to generate the query graphs needed in updating the dictionary data from system tables. */ @@ -4085,6 +4162,7 @@ end: trx->error_state = DB_SUCCESS; trx_general_rollback_for_mysql(trx, NULL); trx->error_state = DB_SUCCESS; + err = DB_ERROR; goto funct_exit; } diff --git a/row/row0purge.c b/row/row0purge.c index 752a2ec9e83..4d4c1afc458 100644 --- a/row/row0purge.c +++ b/row/row0purge.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1997, 2011, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -406,7 +406,8 @@ row_purge_upd_exist_or_extern_func( ut_ad(node); - if (node->rec_type == TRX_UNDO_UPD_DEL_REC) { + if (node->rec_type == TRX_UNDO_UPD_DEL_REC + || (node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) { goto skip_secondaries; } @@ -530,14 +531,14 @@ row_purge_parse_undo_rec( roll_ptr_t roll_ptr; ulint info_bits; ulint type; - ulint cmpl_info; ut_ad(node && thr); trx = thr_get_trx(thr); - ptr = trx_undo_rec_get_pars(node->undo_rec, &type, &cmpl_info, - updated_extern, &undo_no, &table_id); + ptr = trx_undo_rec_get_pars( + node->undo_rec, &type, &node->cmpl_info, + updated_extern, &undo_no, &table_id); node->rec_type = type; if (type == TRX_UNDO_UPD_DEL_REC && !(*updated_extern)) { @@ -550,7 +551,8 @@ row_purge_parse_undo_rec( node->table = NULL; if (type == TRX_UNDO_UPD_EXIST_REC - && cmpl_info & UPD_NODE_NO_ORD_CHANGE && !(*updated_extern)) { + && node->cmpl_info & UPD_NODE_NO_ORD_CHANGE + && !(*updated_extern)) { /* Purge requires no changes to indexes: we may return */ @@ -600,7 +602,7 @@ err_exit: /* Read to the partial row the fields that occur in indexes */ - if (!(cmpl_info & UPD_NODE_NO_ORD_CHANGE)) { + if (!(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) { ptr = trx_undo_rec_get_partial_row( ptr, clust_index, &node->row, type == TRX_UNDO_UPD_DEL_REC, diff --git a/row/row0row.c b/row/row0row.c index cea70e98dee..380d438c59a 100644 --- a/row/row0row.c +++ b/row/row0row.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -243,19 +243,16 @@ row_build( } #if defined UNIV_DEBUG || defined UNIV_BLOB_LIGHT_DEBUG - /* This condition can occur during crash recovery before - trx_rollback_active() has completed execution. - - This condition is possible if the server crashed - during an insert or update before - btr_store_big_rec_extern_fields() did mtr_commit() all - BLOB pointers to the clustered index record. - - If the record contains a null BLOB pointer, look up the - transaction that holds the implicit lock on this record, and - assert that it was recovered (and will soon be rolled back). */ - ut_a(!rec_offs_any_null_extern(rec, offsets) - || trx_assert_recovered(row_get_rec_trx_id(rec, index, offsets))); + if (rec_offs_any_null_extern(rec, offsets)) { + /* This condition can occur during crash recovery + before trx_rollback_active() has completed execution, + or when a concurrently executing + row_ins_index_entry_low() has committed the B-tree + mini-transaction but has not yet managed to restore + the cursor position for writing the big_rec. */ + ut_a(trx_undo_roll_ptr_is_insert( + row_get_rec_roll_ptr(rec, index, offsets))); + } #endif /* UNIV_DEBUG || UNIV_BLOB_LIGHT_DEBUG */ if (type != ROW_COPY_POINTERS) { diff --git a/row/row0sel.c b/row/row0sel.c index 36d71c94659..3869b4468d7 100644 --- a/row/row0sel.c +++ b/row/row0sel.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1997, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1997, 2011, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 2008, Google Inc. Portions of this file contain modifications contributed and copyrighted by @@ -101,12 +101,17 @@ row_sel_sec_rec_is_for_blob( ulint clust_len, /*!< in: length of clust_field */ const byte* sec_field, /*!< in: column in secondary index */ ulint sec_len, /*!< in: length of sec_field */ + ulint prefix_len, /*!< in: index column prefix length + in bytes */ ulint zip_size) /*!< in: compressed page size, or 0 */ { ulint len; byte buf[DICT_MAX_INDEX_COL_LEN]; ut_a(clust_len >= BTR_EXTERN_FIELD_REF_SIZE); + ut_ad(prefix_len >= sec_len); + ut_ad(prefix_len > 0); + ut_a(prefix_len <= sizeof buf); if (UNIV_UNLIKELY (!memcmp(clust_field + clust_len - BTR_EXTERN_FIELD_REF_SIZE, @@ -118,7 +123,7 @@ row_sel_sec_rec_is_for_blob( return(FALSE); } - len = btr_copy_externally_stored_field_prefix(buf, sizeof buf, + len = btr_copy_externally_stored_field_prefix(buf, prefix_len, zip_size, clust_field, clust_len); @@ -132,7 +137,7 @@ row_sel_sec_rec_is_for_blob( } len = dtype_get_at_most_n_mbchars(prtype, mbminlen, mbmaxlen, - sec_len, len, (const char*) buf); + prefix_len, len, (const char*) buf); return(!cmp_data_data(mtype, prtype, buf, len, sec_field, sec_len)); } @@ -219,11 +224,20 @@ row_sel_sec_rec_is_for_clust_rec( if (rec_offs_nth_extern(clust_offs, clust_pos) && len < sec_len) { + /* This function should never be + invoked on an Antelope format table, + because they should always contain + enough prefix in the clustered index + record. */ + ut_ad(dict_table_get_format(clust_index->table) + >= DICT_TF_FORMAT_ZIP); + if (!row_sel_sec_rec_is_for_blob( col->mtype, col->prtype, col->mbminlen, col->mbmaxlen, clust_field, clust_len, sec_field, sec_len, + ifield->prefix_len, dict_table_zip_size( clust_index->table))) { goto inequal; @@ -494,7 +508,7 @@ sel_col_prefetch_buf_alloc( sel_buf = column->prefetch_buf + i; sel_buf->data = NULL; - + sel_buf->len = 0; sel_buf->val_buf_size = 0; } } @@ -519,6 +533,8 @@ sel_col_prefetch_buf_free( mem_free(sel_buf->data); } } + + mem_free(prefetch_buf); } /*********************************************************************//** @@ -4378,7 +4394,9 @@ no_gap_lock: applicable to unique secondary indexes. Current behaviour is to widen the scope of a lock on an already delete marked record if the same record is deleted twice by the same transaction */ - if (index == clust_index && unique_search) { + if (index == clust_index && unique_search + && !prebuilt->used_in_HANDLER) { + err = DB_RECORD_NOT_FOUND; goto normal_return; diff --git a/row/row0upd.c b/row/row0upd.c index 247a1b298f0..981f83b60c9 100644 --- a/row/row0upd.c +++ b/row/row0upd.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -23,6 +23,15 @@ Update of a row Created 12/27/1996 Heikki Tuuri *******************************************************/ +#ifdef __WIN__ +/* error LNK2001: unresolved external symbol _debug_sync_C_callback_ptr */ +# define DEBUG_SYNC_C(dummy) ((void) 0) +#else +# include "my_global.h" /* HAVE_* */ +# include "m_string.h" /* for my_sys.h */ +# include "my_sys.h" /* DEBUG_SYNC_C */ +#endif + #include "row0upd.h" #ifdef UNIV_NONINL @@ -1995,27 +2004,42 @@ row_upd_clust_rec( BTR_NO_LOCKING_FLAG | BTR_KEEP_POS_FLAG, btr_cur, &heap, &big_rec, node->update, node->cmpl_info, thr, mtr); /* skip store extern for fake_changes */ - if (big_rec && !(thr_get_trx(thr)->fake_changes)) { - ulint offsets_[REC_OFFS_NORMAL_SIZE]; - rec_t* rec; + if (err == DB_SUCCESS && big_rec && !(thr_get_trx(thr)->fake_changes)) { + ulint offsets_[REC_OFFS_NORMAL_SIZE]; + rec_t* rec; + rec_offs_init(offsets_); ut_a(err == DB_SUCCESS); - /* Write out the externally stored columns while still - x-latching index->lock and block->lock. We have to - mtr_commit(mtr) first, so that the redo log will be - written in the correct order. Otherwise, we would run - into trouble on crash recovery if mtr freed B-tree - pages on which some of the big_rec fields will be - written. */ - btr_cur_mtr_commit_and_start(btr_cur, mtr); + /* Write out the externally stored + columns while still x-latching + index->lock and block->lock. Allocate + pages for big_rec in the mtr that + modified the B-tree, but be sure to skip + any pages that were freed in mtr. We will + write out the big_rec pages before + committing the B-tree mini-transaction. If + the system crashes so that crash recovery + will not replay the mtr_commit(&mtr), the + big_rec pages will be left orphaned until + the pages are allocated for something else. + + TODO: If the allocation extends the tablespace, it + will not be redo logged, in either mini-transaction. + Tablespace extension should be redo-logged in the + big_rec mini-transaction, so that recovery will not + fail when the big_rec was written to the extended + portion of the file, in case the file was somehow + truncated in the crash. */ rec = btr_cur_get_rec(btr_cur); + DEBUG_SYNC_C("before_row_upd_extern"); err = btr_store_big_rec_extern_fields( index, btr_cur_get_block(btr_cur), rec, rec_get_offsets(rec, index, offsets_, ULINT_UNDEFINED, &heap), - mtr, TRUE, big_rec); + big_rec, mtr, BTR_STORE_UPDATE); + DEBUG_SYNC_C("after_row_upd_extern"); /* If writing big_rec fails (for example, because of DB_OUT_OF_FILE_SPACE), the record will be corrupted. Even if we did not update any externally stored @@ -2023,7 +2047,12 @@ row_upd_clust_rec( that a non-updated column was selected for external storage. This non-update would not have been written to the undo log, and thus the record cannot be rolled - back. */ + back. + + However, because we have not executed mtr_commit(mtr) + yet, the update will not be replayed in crash + recovery, and the following assertion failure will + effectively "roll back" the operation. */ ut_a(err == DB_SUCCESS); } diff --git a/row/row0vers.c b/row/row0vers.c index 8a7bb842293..9aeaa2db6c0 100644 --- a/row/row0vers.c +++ b/row/row0vers.c @@ -208,18 +208,6 @@ row_vers_impl_x_locked_off_kernel( vers_del = rec_get_deleted_flag(prev_version, comp); prev_trx_id = row_get_rec_trx_id(prev_version, clust_index, clust_offsets); - - /* If the trx_id and prev_trx_id are different and if - the prev_version is marked deleted then the - prev_trx_id must have already committed for the trx_id - to be able to modify the row. Therefore, prev_trx_id - cannot hold any implicit lock. */ - if (vers_del && 0 != ut_dulint_cmp(trx_id, prev_trx_id)) { - - mutex_enter(&kernel_mutex); - break; - } - /* The stack of versions is locked by mtr. Thus, it is safe to fetch the prefixes for externally stored columns. */ diff --git a/scripts/install_innodb_plugins.sql b/scripts/install_innodb_plugins.sql index 5a555a652f7..8833d9c023c 100644 --- a/scripts/install_innodb_plugins.sql +++ b/scripts/install_innodb_plugins.sql @@ -7,11 +7,6 @@ INSTALL PLUGIN innodb_cmp SONAME 'ha_innodb.so'; INSTALL PLUGIN innodb_cmp_reset SONAME 'ha_innodb.so'; INSTALL PLUGIN innodb_cmpmem SONAME 'ha_innodb.so'; INSTALL PLUGIN innodb_cmpmem_reset SONAME 'ha_innodb.so'; -INSTALL PLUGIN XTRADB_ENHANCEMENTS SONAME 'ha_innodb.so'; -INSTALL PLUGIN INNODB_BUFFER_POOL_PAGES SONAME 'ha_innodb.so'; -INSTALL PLUGIN INNODB_BUFFER_POOL_PAGES_BLOB SONAME 'ha_innodb.so'; -INSTALL PLUGIN INNODB_BUFFER_POOL_PAGES_INDEX SONAME 'ha_innodb.so'; -INSTALL PLUGIN innodb_rseg SONAME 'ha_innodb.so'; -INSTALL PLUGIN innodb_table_stats SONAME 'ha_innodb.so'; -INSTALL PLUGIN innodb_index_stats SONAME 'ha_innodb.so'; -INSTALL PLUGIN xtradb_admin_command SONAME 'ha_innodb.so'; +INSTALL PLUGIN innodb_buffer_pool_stats SONAME 'ha_innodb.so'; +INSTALL PLUGIN innodb_buffer_page SONAME 'ha_innodb.so'; +INSTALL PLUGIN innodb_buffer_page_lru SONAME 'ha_innodb.so'; diff --git a/scripts/install_innodb_plugins_win.sql b/scripts/install_innodb_plugins_win.sql index 7cda3335694..023b13132c3 100644 --- a/scripts/install_innodb_plugins_win.sql +++ b/scripts/install_innodb_plugins_win.sql @@ -7,11 +7,6 @@ INSTALL PLUGIN innodb_cmp SONAME 'ha_innodb.dll'; INSTALL PLUGIN innodb_cmp_reset SONAME 'ha_innodb.dll'; INSTALL PLUGIN innodb_cmpmem SONAME 'ha_innodb.dll'; INSTALL PLUGIN innodb_cmpmem_reset SONAME 'ha_innodb.dll'; -INSTALL PLUGIN XTRADB_ENHANCEMENTS SONAME 'ha_innodb.dll'; -INSTALL PLUGIN INNODB_BUFFER_POOL_PAGES SONAME 'ha_innodb.dll'; -INSTALL PLUGIN INNODB_BUFFER_POOL_PAGES_BLOB SONAME 'ha_innodb.dll'; -INSTALL PLUGIN INNODB_BUFFER_POOL_PAGES_INDEX SONAME 'ha_innodb.dll'; -INSTALL PLUGIN innodb_rseg SONAME 'ha_innodb.dll'; -INSTALL PLUGIN innodb_table_stats SONAME 'ha_innodb.dll'; -INSTALL PLUGIN innodb_index_stats SONAME 'ha_innodb.dll'; -INSTALL PLUGIN xtradb_admin_command SONAME 'ha_innodb.dll'; +INSTALL PLUGIN innodb_buffer_pool_stats SONAME 'ha_innodb.dll'; +INSTALL PLUGIN innodb_buffer_page SONAME 'ha_innodb.dll'; +INSTALL PLUGIN innodb_buffer_page_lru SONAME 'ha_innodb.dll'; diff --git a/setup.sh b/setup.sh index 23fe729a406..b5d8299d411 100755 --- a/setup.sh +++ b/setup.sh @@ -21,7 +21,7 @@ set -eu -TARGETDIR=../storage/innobase +TARGETDIR=../storage/innodb_plugin # link the build scripts BUILDSCRIPTS="compile-innodb compile-innodb-debug" diff --git a/srv/srv0srv.c b/srv/srv0srv.c index c593c49336f..85588d2c08a 100644 --- a/srv/srv0srv.c +++ b/srv/srv0srv.c @@ -69,6 +69,7 @@ Created 10/8/1995 Heikki Tuuri #include "thr0loc.h" #include "que0que.h" #include "srv0que.h" +#include "log0online.h" #include "log0recv.h" #include "pars0pars.h" #include "usr0sess.h" @@ -161,6 +162,10 @@ UNIV_INTERN ibool srv_recovery_stats = FALSE; UNIV_INTERN ulint srv_use_purge_thread = 0; +UNIV_INTERN my_bool srv_track_changed_pages = TRUE; + +UNIV_INTERN ulonglong srv_changed_pages_limit = 0; + /* if TRUE, then we auto-extend the last data file */ UNIV_INTERN ibool srv_auto_extend_last_data_file = FALSE; /* if != 0, this tells the max size auto-extending may increase the @@ -405,6 +410,9 @@ UNIV_INTERN unsigned long long srv_stats_sample_pages = 8; UNIV_INTERN ulint srv_stats_auto_update = 1; UNIV_INTERN ulint srv_stats_update_need_lock = 1; UNIV_INTERN ibool srv_use_sys_stats_table = FALSE; +#ifdef UNIV_DEBUG +UNIV_INTERN ulong srv_sys_stats_root_page = 0; +#endif UNIV_INTERN ibool srv_use_doublewrite_buf = TRUE; UNIV_INTERN ibool srv_use_checksums = TRUE; @@ -724,6 +732,10 @@ UNIV_INTERN os_event_t srv_lock_timeout_thread_event; UNIV_INTERN os_event_t srv_shutdown_event; +UNIV_INTERN os_event_t srv_checkpoint_completed_event; + +UNIV_INTERN os_event_t srv_redo_log_thread_finished_event; + UNIV_INTERN srv_sys_t* srv_sys = NULL; /* padding to prevent other memory update hotspots from residing on @@ -1031,6 +1043,9 @@ srv_init(void) srv_lock_timeout_thread_event = os_event_create(NULL); srv_shutdown_event = os_event_create(NULL); + srv_checkpoint_completed_event = os_event_create(NULL); + srv_redo_log_thread_finished_event = os_event_create(NULL); + for (i = 0; i < SRV_MASTER + 1; i++) { srv_n_threads_active[i] = 0; srv_n_threads[i] = 0; @@ -1148,7 +1163,7 @@ retry: enter_innodb_with_tickets(trx); return; } - os_atomic_increment_lint(&srv_conc_n_threads, -1); + (void) os_atomic_increment_lint(&srv_conc_n_threads, -1); } if (!has_yielded) { @@ -1178,7 +1193,7 @@ retry: static void srv_conc_exit_innodb_timer_based(trx_t* trx) { - os_atomic_increment_lint(&srv_conc_n_threads, -1); + (void) os_atomic_increment_lint(&srv_conc_n_threads, -1); trx->declared_to_be_inside_innodb = FALSE; trx->n_tickets_to_enter_innodb = 0; return; @@ -1385,7 +1400,7 @@ srv_conc_force_enter_innodb( ut_ad(srv_conc_n_threads >= 0); #ifdef HAVE_ATOMIC_BUILTINS if (srv_thread_concurrency_timer_based) { - os_atomic_increment_lint(&srv_conc_n_threads, 1); + (void) os_atomic_increment_lint(&srv_conc_n_threads, 1); trx->declared_to_be_inside_innodb = TRUE; trx->n_tickets_to_enter_innodb = 1; return; @@ -2674,6 +2689,41 @@ exit_func: OS_THREAD_DUMMY_RETURN; } +/******************************************************************//** +A thread which follows the redo log and outputs the changed page bitmap. +@return a dummy value */ +UNIV_INTERN +os_thread_ret_t +srv_redo_log_follow_thread( +/*=======================*/ + void* arg __attribute__((unused))) /*!< in: a dummy parameter + required by + os_thread_create */ +{ +#ifdef UNIV_DEBUG_THREAD_CREATION + fprintf(stderr, "Redo log follower thread starts, id %lu\n", + os_thread_pf(os_thread_get_curr_id())); +#endif + my_thread_init(); + + do { + os_event_wait(srv_checkpoint_completed_event); + os_event_reset(srv_checkpoint_completed_event); + + log_online_follow_redo_log(); + + } while (srv_shutdown_state < SRV_SHUTDOWN_LAST_PHASE); + + log_online_read_shutdown(); + os_event_set(srv_redo_log_thread_finished_event); + + my_thread_end(); + os_thread_exit(NULL); + + OS_THREAD_DUMMY_RETURN; +} + + /*******************************************************************//** Tells the InnoDB server that there has been activity in the database and wakes up the master thread if it is suspended (not sleeping). Used diff --git a/srv/srv0start.c b/srv/srv0start.c index ba4328c80e1..0c33b2208f2 100644 --- a/srv/srv0start.c +++ b/srv/srv0start.c @@ -51,6 +51,7 @@ Created 2/16/1996 Heikki Tuuri #include "rem0rec.h" #include "mtr0mtr.h" #include "log0log.h" +#include "log0online.h" #include "log0recv.h" #include "page0page.h" #include "page0cur.h" @@ -127,9 +128,9 @@ static mutex_t ios_mutex; static ulint ios; /** io_handler_thread parameters for thread identification */ -static ulint n[SRV_MAX_N_IO_THREADS + 7 + UNIV_MAX_PARALLELISM]; +static ulint n[SRV_MAX_N_IO_THREADS + 8 + UNIV_MAX_PARALLELISM]; /** io_handler_thread identifiers */ -static os_thread_id_t thread_ids[SRV_MAX_N_IO_THREADS + 7 + UNIV_MAX_PARALLELISM]; +static os_thread_id_t thread_ids[SRV_MAX_N_IO_THREADS + 8 + UNIV_MAX_PARALLELISM]; /** We use this mutex to test the return value of pthread_mutex_trylock on successful locking. HP-UX does NOT return 0, though Linux et al do. */ @@ -1823,6 +1824,12 @@ innobase_start_or_create_for_mysql(void) trx_sys_dummy_create(TRX_DOUBLEWRITE_SPACE); } + + if (UNIV_UNLIKELY(!dict_verify_xtradb_sys_stats())) { + fprintf(stderr, "InnoDB: Warning: " + "SYS_STATS table corrupted, recreating\n"); + dict_recreate_xtradb_sys_stats(); + } } if (!create_new_db && sum_of_new_sizes > 0) { @@ -1885,6 +1892,19 @@ innobase_start_or_create_for_mysql(void) if (srv_auto_lru_dump && srv_blocking_lru_restore) buf_LRU_file_restore(); + if (srv_track_changed_pages) { + + /* Initialize the log tracking subsystem here to block + server startup until it's completed due to the potential + need to re-read previous server run's log. */ + log_online_read_init(); + + /* Create the thread that follows the redo log to output the + changed page bitmap */ + os_thread_create(&srv_redo_log_follow_thread, NULL, + thread_ids + 5 + SRV_MAX_N_IO_THREADS); + } + srv_is_being_started = FALSE; if (trx_doublewrite == NULL) { diff --git a/sync/sync0arr.c b/sync/sync0arr.c index 4e788b4a968..35385507e40 100644 --- a/sync/sync0arr.c +++ b/sync/sync0arr.c @@ -926,6 +926,11 @@ sync_array_print_long_waits( ibool fatal = FALSE; double longest_diff = 0; + /* For huge tables, skip the check during CHECK TABLE etc... */ + if (fatal_timeout > SRV_SEMAPHORE_WAIT_EXTENSION) { + return(FALSE); + } + for (i = 0; i < sync_primary_wait_array->n_cells; i++) { double diff; diff --git a/sync/sync0rw.c b/sync/sync0rw.c index fe000e7d008..054423f9116 100644 --- a/sync/sync0rw.c +++ b/sync/sync0rw.c @@ -611,6 +611,9 @@ rw_lock_x_lock_func( ibool spinning = FALSE; ut_ad(rw_lock_validate(lock)); +#ifdef UNIV_SYNC_DEBUG + ut_ad(!rw_lock_own(lock, RW_LOCK_SHARED)); +#endif /* UNIV_SYNC_DEBUG */ i = 0; @@ -927,11 +930,13 @@ rw_lock_list_print_info( putc('\n', file); } + rw_lock_debug_mutex_enter(); info = UT_LIST_GET_FIRST(lock->debug_list); while (info != NULL) { rw_lock_debug_print(file, info); info = UT_LIST_GET_NEXT(list, info); } + rw_lock_debug_mutex_exit(); } #ifndef INNODB_RW_LOCKS_USE_ATOMICS mutex_exit(&(lock->mutex)); @@ -975,11 +980,13 @@ rw_lock_print( putc('\n', stderr); } + rw_lock_debug_mutex_enter(); info = UT_LIST_GET_FIRST(lock->debug_list); while (info != NULL) { rw_lock_debug_print(stderr, info); info = UT_LIST_GET_NEXT(list, info); } + rw_lock_debug_mutex_exit(); } } diff --git a/sync/sync0sync.c b/sync/sync0sync.c index 277a53e4fb2..18a961ac18b 100644 --- a/sync/sync0sync.c +++ b/sync/sync0sync.c @@ -1178,7 +1178,6 @@ sync_thread_add_level( case SYNC_BUF_ZIP_HASH: case SYNC_BUF_POOL: case SYNC_SEARCH_SYS: - case SYNC_SEARCH_SYS_CONF: case SYNC_TRX_LOCK_HEAP: case SYNC_KERNEL: case SYNC_IBUF_BITMAP_MUTEX: @@ -1191,6 +1190,7 @@ sync_thread_add_level( case SYNC_DICT_HEADER: case SYNC_TRX_I_S_RWLOCK: case SYNC_TRX_I_S_LAST_READ: + case SYNC_IBUF_MUTEX: if (!sync_thread_levels_g(array, level, TRUE)) { fprintf(stderr, "InnoDB: sync_thread_levels_g(array, %lu)" @@ -1254,21 +1254,32 @@ sync_thread_add_level( || sync_thread_levels_g(array, SYNC_TREE_NODE - 1, TRUE)); break; case SYNC_TREE_NODE_NEW: - ut_a(sync_thread_levels_contain(array, SYNC_FSP_PAGE) - || sync_thread_levels_contain(array, SYNC_IBUF_MUTEX)); + ut_a(sync_thread_levels_contain(array, SYNC_FSP_PAGE)); break; case SYNC_INDEX_TREE: - if (sync_thread_levels_contain(array, SYNC_IBUF_MUTEX) - && sync_thread_levels_contain(array, SYNC_FSP)) { - ut_a(sync_thread_levels_g(array, SYNC_FSP_PAGE - 1, - TRUE)); - } else { - ut_a(sync_thread_levels_g(array, SYNC_TREE_NODE - 1, - TRUE)); - } + ut_a(sync_thread_levels_g(array, SYNC_TREE_NODE - 1, TRUE)); break; - case SYNC_IBUF_MUTEX: - ut_a(sync_thread_levels_g(array, SYNC_FSP_PAGE - 1, TRUE)); + case SYNC_IBUF_TREE_NODE: + ut_a(sync_thread_levels_contain(array, SYNC_IBUF_INDEX_TREE) + || sync_thread_levels_g(array, SYNC_IBUF_TREE_NODE - 1, + TRUE)); + break; + case SYNC_IBUF_TREE_NODE_NEW: + /* ibuf_add_free_page() allocates new pages for the + change buffer while only holding the tablespace + x-latch. These pre-allocated new pages may only be + taken in use while holding ibuf_mutex, in + btr_page_alloc_for_ibuf(). */ + ut_a(sync_thread_levels_contain(array, SYNC_IBUF_MUTEX) + || sync_thread_levels_contain(array, SYNC_FSP)); + break; + case SYNC_IBUF_INDEX_TREE: + if (sync_thread_levels_contain(array, SYNC_FSP)) { + ut_a(sync_thread_levels_g(array, level - 1, TRUE)); + } else { + ut_a(sync_thread_levels_g( + array, SYNC_IBUF_TREE_NODE - 1, TRUE)); + } break; case SYNC_IBUF_PESS_INSERT_MUTEX: ut_a(sync_thread_levels_g(array, SYNC_FSP - 1, TRUE)); diff --git a/trx/trx0purge.c b/trx/trx0purge.c index 5a8b42af3af..6c49c5d7ff8 100644 --- a/trx/trx0purge.c +++ b/trx/trx0purge.c @@ -1111,7 +1111,7 @@ trx_purge(void) { que_thr_t* thr; /* que_thr_t* thr2; */ - ulint old_pages_handled; + ulonglong old_pages_handled; mutex_enter(&(purge_sys->mutex)); @@ -1210,7 +1210,7 @@ trx_purge(void) (ulong) purge_sys->n_pages_handled); } - return(purge_sys->n_pages_handled - old_pages_handled); + return((ulint) (purge_sys->n_pages_handled - old_pages_handled)); } /********************************************************************** diff --git a/trx/trx0rec.c b/trx/trx0rec.c index a7a393d31c8..124d22eec63 100644 --- a/trx/trx0rec.c +++ b/trx/trx0rec.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2011, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -1110,13 +1110,14 @@ trx_undo_rec_get_partial_row( #endif /* !UNIV_HOTBACKUP */ /***********************************************************************//** -Erases the unused undo log page end. */ -static -void +Erases the unused undo log page end. +@return TRUE if the page contained something, FALSE if it was empty */ +static __attribute__((nonnull)) +ibool trx_undo_erase_page_end( /*====================*/ - page_t* undo_page, /*!< in: undo page whose end to erase */ - mtr_t* mtr) /*!< in: mtr */ + page_t* undo_page, /*!< in/out: undo page whose end to erase */ + mtr_t* mtr) /*!< in/out: mini-transaction */ { ulint first_free; @@ -1126,6 +1127,7 @@ trx_undo_erase_page_end( (UNIV_PAGE_SIZE - FIL_PAGE_DATA_END) - first_free); mlog_write_initial_log_record(undo_page, MLOG_UNDO_ERASE_END, mtr); + return(first_free != TRX_UNDO_PAGE_HDR + TRX_UNDO_PAGE_HDR_SIZE); } /***********************************************************//** @@ -1187,12 +1189,16 @@ trx_undo_report_row_operation( trx_t* trx; trx_undo_t* undo; ulint page_no; + buf_block_t* undo_block; trx_rseg_t* rseg; mtr_t mtr; ulint err = DB_SUCCESS; mem_heap_t* heap = NULL; ulint offsets_[REC_OFFS_NORMAL_SIZE]; ulint* offsets = offsets_; +#ifdef UNIV_DEBUG + int loop_count = 0; +#endif /* UNIV_DEBUG */ rec_offs_init(offsets_); ut_a(dict_index_is_clust(index)); @@ -1226,10 +1232,13 @@ trx_undo_report_row_operation( if (UNIV_UNLIKELY(!undo)) { /* Did not succeed */ + ut_ad(err != DB_SUCCESS); mutex_exit(&(trx->undo_mutex)); return(err); } + + ut_ad(err == DB_SUCCESS); } else { ut_ad(op_type == TRX_UNDO_MODIFY_OP); @@ -1243,30 +1252,30 @@ trx_undo_report_row_operation( if (UNIV_UNLIKELY(!undo)) { /* Did not succeed */ + ut_ad(err != DB_SUCCESS); mutex_exit(&(trx->undo_mutex)); return(err); } + ut_ad(err == DB_SUCCESS); offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap); } - page_no = undo->last_page_no; - mtr_start(&mtr); - for (;;) { - buf_block_t* undo_block; + page_no = undo->last_page_no; + undo_block = buf_page_get_gen( + undo->space, undo->zip_size, page_no, RW_X_LATCH, + undo->guess_block, BUF_GET, __FILE__, __LINE__, &mtr); + buf_block_dbg_add_level(undo_block, SYNC_TRX_UNDO_PAGE); + + do { page_t* undo_page; ulint offset; - undo_block = buf_page_get_gen(undo->space, undo->zip_size, - page_no, RW_X_LATCH, - undo->guess_block, BUF_GET, - __FILE__, __LINE__, &mtr); - buf_block_dbg_add_level(undo_block, SYNC_TRX_UNDO_PAGE); - undo_page = buf_block_get_frame(undo_block); + ut_ad(page_no == buf_block_get_page_no(undo_block)); if (op_type == TRX_UNDO_INSERT_OP) { offset = trx_undo_page_report_insert( @@ -1284,7 +1293,31 @@ trx_undo_report_row_operation( version the replicate page constructed using the log records stays identical to the original page */ - trx_undo_erase_page_end(undo_page, &mtr); + if (!trx_undo_erase_page_end(undo_page, &mtr)) { + /* The record did not fit on an empty + undo page. Discard the freshly allocated + page and return an error. */ + + /* When we remove a page from an undo + log, this is analogous to a + pessimistic insert in a B-tree, and we + must reserve the counterpart of the + tree latch, which is the rseg + mutex. We must commit the mini-transaction + first, because it may be holding lower-level + latches, such as SYNC_FSP and SYNC_FSP_PAGE. */ + + mtr_commit(&mtr); + mtr_start(&mtr); + + mutex_enter(&rseg->mutex); + trx_undo_free_last_page(trx, undo, &mtr); + mutex_exit(&rseg->mutex); + + err = DB_TOO_BIG_RECORD; + goto err_exit; + } + mtr_commit(&mtr); } else { /* Success */ @@ -1304,39 +1337,39 @@ trx_undo_report_row_operation( *roll_ptr = trx_undo_build_roll_ptr( op_type == TRX_UNDO_INSERT_OP, rseg->id, page_no, offset); - if (UNIV_LIKELY_NULL(heap)) { - mem_heap_free(heap); - } - return(DB_SUCCESS); + err = DB_SUCCESS; + goto func_exit; } ut_ad(page_no == undo->last_page_no); /* We have to extend the undo log by one page */ + ut_ad(++loop_count < 2); mtr_start(&mtr); /* When we add a page to an undo log, this is analogous to a pessimistic insert in a B-tree, and we must reserve the counterpart of the tree latch, which is the rseg mutex. */ - mutex_enter(&(rseg->mutex)); + mutex_enter(&rseg->mutex); + undo_block = trx_undo_add_page(trx, undo, &mtr); + mutex_exit(&rseg->mutex); - page_no = trx_undo_add_page(trx, undo, &mtr); + page_no = undo->last_page_no; + } while (undo_block != NULL); - mutex_exit(&(rseg->mutex)); + /* Did not succeed: out of space */ + err = DB_OUT_OF_FILE_SPACE; - if (UNIV_UNLIKELY(page_no == FIL_NULL)) { - /* Did not succeed: out of space */ - - mutex_exit(&(trx->undo_mutex)); - mtr_commit(&mtr); - if (UNIV_LIKELY_NULL(heap)) { - mem_heap_free(heap); - } - return(DB_OUT_OF_FILE_SPACE); - } +err_exit: + mutex_exit(&trx->undo_mutex); + mtr_commit(&mtr); +func_exit: + if (UNIV_LIKELY_NULL(heap)) { + mem_heap_free(heap); } + return(err); } /*============== BUILDING PREVIOUS VERSION OF A RECORD ===============*/ diff --git a/trx/trx0sys.c b/trx/trx0sys.c index 6a15d4261eb..1f7e314a953 100644 --- a/trx/trx0sys.c +++ b/trx/trx0sys.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2010, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -131,6 +131,11 @@ static const char* file_format_name_map[] = { static const ulint FILE_FORMAT_NAME_N = sizeof(file_format_name_map) / sizeof(file_format_name_map[0]); +#ifdef UNIV_DEBUG +/* Flag to control TRX_RSEG_N_SLOTS behavior debugging. */ +uint trx_rseg_n_slots_debug = 0; +#endif + #ifndef UNIV_HOTBACKUP /** This is used to track the maximum file format id known to InnoDB. It's updated via SET GLOBAL innodb_file_format_check = 'x' or when we open @@ -246,9 +251,7 @@ trx_sys_create_doublewrite_buf(void) { buf_block_t* block; buf_block_t* block2; -#ifdef UNIV_SYNC_DEBUG buf_block_t* new_block; -#endif /* UNIV_SYNC_DEBUG */ byte* doublewrite; byte* fseg_header; ulint page_no; @@ -327,10 +330,9 @@ start_again: for (i = 0; i < 2 * TRX_SYS_DOUBLEWRITE_BLOCK_SIZE + FSP_EXTENT_SIZE / 2; i++) { - page_no = fseg_alloc_free_page(fseg_header, - prev_page_no + 1, - FSP_UP, &mtr); - if (page_no == FIL_NULL) { + new_block = fseg_alloc_free_page( + fseg_header, prev_page_no + 1, FSP_UP, &mtr); + if (new_block == NULL) { fprintf(stderr, "InnoDB: Cannot create doublewrite" " buffer: you must\n" @@ -351,13 +353,8 @@ start_again: the page position in the tablespace, then the page has not been written to in doublewrite. */ -#ifdef UNIV_SYNC_DEBUG - new_block = -#endif /* UNIV_SYNC_DEBUG */ - buf_page_get(TRX_SYS_SPACE, 0, page_no, - RW_X_LATCH, &mtr); - buf_block_dbg_add_level(new_block, - SYNC_NO_ORDER_CHECK); + ut_ad(rw_lock_get_x_lock_count(&new_block->lock) == 1); + page_no = buf_block_get_page_no(new_block); if (i == FSP_EXTENT_SIZE / 2) { ut_a(page_no == FSP_EXTENT_SIZE); @@ -474,10 +471,10 @@ start_again: for (i = 0; i < 2 * TRX_SYS_DOUBLEWRITE_BLOCK_SIZE + FSP_EXTENT_SIZE / 2; i++) { - page_no = fseg_alloc_free_page(fseg_header, + new_block = fseg_alloc_free_page(fseg_header, prev_page_no + 1, FSP_UP, &mtr); - if (page_no == FIL_NULL) { + if (new_block == NULL) { fprintf(stderr, "InnoDB: Cannot create doublewrite" " buffer: you must\n" @@ -498,13 +495,8 @@ start_again: the page position in the tablespace, then the page has not been written to in doublewrite. */ -#ifdef UNIV_SYNC_DEBUG - new_block = -#endif /* UNIV_SYNC_DEBUG */ - buf_page_get(TRX_DOUBLEWRITE_SPACE, 0, page_no, - RW_X_LATCH, &mtr); - buf_block_dbg_add_level(new_block, - SYNC_NO_ORDER_CHECK); + ut_ad(rw_lock_get_x_lock_count(&new_block->lock) == 1); + page_no = buf_block_get_page_no(new_block); if (i == FSP_EXTENT_SIZE / 2) { ut_a(page_no == FSP_EXTENT_SIZE); diff --git a/trx/trx0trx.c b/trx/trx0trx.c index bf042db4972..0cecbf2eea9 100644 --- a/trx/trx0trx.c +++ b/trx/trx0trx.c @@ -1078,6 +1078,8 @@ trx_commit_off_kernel( ut_ad(UT_LIST_GET_LEN(trx->trx_locks) == 0); UT_LIST_REMOVE(trx_list, trx_sys->trx_list, trx); + + trx->error_state = DB_SUCCESS; } /****************************************************************//** diff --git a/trx/trx0undo.c b/trx/trx0undo.c index ec1cd2d2c43..fd89936fd33 100644 --- a/trx/trx0undo.c +++ b/trx/trx0undo.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1996, 2009, Innobase Oy. All Rights Reserved. +Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -11,8 +11,8 @@ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 59 Temple -Place, Suite 330, Boston, MA 02111-1307 USA +this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *****************************************************************************/ @@ -870,9 +870,9 @@ trx_undo_discard_latest_update_undo( #ifndef UNIV_HOTBACKUP /********************************************************************//** Tries to add a page to the undo log segment where the undo log is placed. -@return page number if success, else FIL_NULL */ +@return X-latched block if success, else NULL */ UNIV_INTERN -ulint +buf_block_t* trx_undo_add_page( /*==============*/ trx_t* trx, /*!< in: transaction */ @@ -882,11 +882,10 @@ trx_undo_add_page( the rollback segment mutex */ { page_t* header_page; + buf_block_t* new_block; page_t* new_page; trx_rseg_t* rseg; - ulint page_no; ulint n_reserved; - ibool success; ut_ad(mutex_own(&(trx->undo_mutex))); ut_ad(!mutex_own(&kernel_mutex)); @@ -896,37 +895,37 @@ trx_undo_add_page( if (rseg->curr_size == rseg->max_size) { - return(FIL_NULL); + return(NULL); } header_page = trx_undo_page_get(undo->space, undo->zip_size, undo->hdr_page_no, mtr); - success = fsp_reserve_free_extents(&n_reserved, undo->space, 1, - FSP_UNDO, mtr); - if (!success) { + if (!fsp_reserve_free_extents(&n_reserved, undo->space, 1, + FSP_UNDO, mtr)) { - return(FIL_NULL); + return(NULL); } - page_no = fseg_alloc_free_page_general(header_page + TRX_UNDO_SEG_HDR - + TRX_UNDO_FSEG_HEADER, - undo->top_page_no + 1, FSP_UP, - TRUE, mtr); + new_block = fseg_alloc_free_page_general( + TRX_UNDO_SEG_HDR + TRX_UNDO_FSEG_HEADER + + header_page, + undo->top_page_no + 1, FSP_UP, TRUE, mtr, mtr); fil_space_release_free_extents(undo->space, n_reserved); - if (page_no == FIL_NULL) { + if (new_block == NULL) { /* No space left */ - return(FIL_NULL); + return(NULL); } - undo->last_page_no = page_no; + ut_ad(rw_lock_get_x_lock_count(&new_block->lock) == 1); + buf_block_dbg_add_level(new_block, SYNC_TRX_UNDO_PAGE); + undo->last_page_no = buf_block_get_page_no(new_block); - new_page = trx_undo_page_get(undo->space, undo->zip_size, - page_no, mtr); + new_page = buf_block_get_frame(new_block); trx_undo_page_init(new_page, undo->type, mtr); @@ -935,7 +934,7 @@ trx_undo_add_page( undo->size++; rseg->curr_size++; - return(page_no); + return(new_block); } /********************************************************************//** @@ -998,29 +997,28 @@ trx_undo_free_page( } /********************************************************************//** -Frees an undo log page when there is also the memory object for the undo -log. */ -static +Frees the last undo log page. +The caller must hold the rollback segment mutex. */ +UNIV_INTERN void -trx_undo_free_page_in_rollback( -/*===========================*/ - trx_t* trx __attribute__((unused)), /*!< in: transaction */ - trx_undo_t* undo, /*!< in: undo log memory copy */ - ulint page_no,/*!< in: page number to free: must not be the - header page */ - mtr_t* mtr) /*!< in: mtr which does not have a latch to any - undo log page; the caller must have reserved - the rollback segment mutex */ +trx_undo_free_last_page_func( +/*==========================*/ +#ifdef UNIV_DEBUG + const trx_t* trx, /*!< in: transaction */ +#endif /* UNIV_DEBUG */ + trx_undo_t* undo, /*!< in/out: undo log memory copy */ + mtr_t* mtr) /*!< in/out: mini-transaction which does not + have a latch to any undo log page or which + has allocated the undo log page */ { - ulint last_page_no; + ut_ad(mutex_own(&trx->undo_mutex)); + ut_ad(undo->hdr_page_no != undo->last_page_no); + ut_ad(undo->size > 0); - ut_ad(undo->hdr_page_no != page_no); - ut_ad(mutex_own(&(trx->undo_mutex))); + undo->last_page_no = trx_undo_free_page( + undo->rseg, FALSE, undo->space, + undo->hdr_page_no, undo->last_page_no, mtr); - last_page_no = trx_undo_free_page(undo->rseg, FALSE, undo->space, - undo->hdr_page_no, page_no, mtr); - - undo->last_page_no = last_page_no; undo->size--; } @@ -1056,9 +1054,11 @@ Truncates an undo log from the end. This function is used during a rollback to free space from an undo log. */ UNIV_INTERN void -trx_undo_truncate_end( -/*==================*/ - trx_t* trx, /*!< in: transaction whose undo log it is */ +trx_undo_truncate_end_func( +/*=======================*/ +#ifdef UNIV_DEBUG + const trx_t* trx, /*!< in: transaction whose undo log it is */ +#endif /* UNIV_DEBUG */ trx_undo_t* undo, /*!< in: undo log */ undo_no_t limit) /*!< in: all undo records with undo number >= this value should be truncated */ @@ -1084,18 +1084,7 @@ trx_undo_truncate_end( rec = trx_undo_page_get_last_rec(undo_page, undo->hdr_page_no, undo->hdr_offset); - for (;;) { - if (rec == NULL) { - if (last_page_no == undo->hdr_page_no) { - - goto function_exit; - } - - trx_undo_free_page_in_rollback( - trx, undo, last_page_no, &mtr); - break; - } - + while (rec) { if (ut_dulint_cmp(trx_undo_rec_get_undo_no(rec), limit) >= 0) { /* Truncate at least this record off, maybe @@ -1110,6 +1099,14 @@ trx_undo_truncate_end( undo->hdr_offset); } + if (last_page_no == undo->hdr_page_no) { + + goto function_exit; + } + + ut_ad(last_page_no == undo->last_page_no); + trx_undo_free_last_page(trx, undo, &mtr); + mtr_commit(&mtr); } diff --git a/ut/ut0auxconf_atomic_pthread_t_gcc.c b/ut/ut0auxconf_atomic_pthread_t_gcc.c new file mode 100644 index 00000000000..30de5aa6f17 --- /dev/null +++ b/ut/ut0auxconf_atomic_pthread_t_gcc.c @@ -0,0 +1,43 @@ +/***************************************************************************** + +Copyright (c) 2009, Innobase Oy. All Rights Reserved. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +/***************************************************************************** +If this program compiles, then pthread_t objects can be used as arguments +to GCC atomic builtin functions. + +Created March 5, 2009 Vasil Dimov +*****************************************************************************/ + +#include +#include + +int +main(int argc, char** argv) +{ + pthread_t x1; + pthread_t x2; + pthread_t x3; + + memset(&x1, 0x0, sizeof(x1)); + memset(&x2, 0x0, sizeof(x2)); + memset(&x3, 0x0, sizeof(x3)); + + __sync_bool_compare_and_swap(&x1, x2, x3); + + return(0); +} diff --git a/ut/ut0auxconf_atomic_pthread_t_solaris.c b/ut/ut0auxconf_atomic_pthread_t_solaris.c new file mode 100644 index 00000000000..310603c7503 --- /dev/null +++ b/ut/ut0auxconf_atomic_pthread_t_solaris.c @@ -0,0 +1,54 @@ +/***************************************************************************** + +Copyright (c) 2009, Innobase Oy. All Rights Reserved. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +/***************************************************************************** +If this program compiles and returns 0, then pthread_t objects can be used as +arguments to Solaris libc atomic functions. + +Created April 18, 2009 Vasil Dimov +*****************************************************************************/ + +#include +#include + +int +main(int argc, char** argv) +{ + pthread_t x1; + pthread_t x2; + pthread_t x3; + + memset(&x1, 0x0, sizeof(x1)); + memset(&x2, 0x0, sizeof(x2)); + memset(&x3, 0x0, sizeof(x3)); + + if (sizeof(pthread_t) == 4) { + + atomic_cas_32(&x1, x2, x3); + + } else if (sizeof(pthread_t) == 8) { + + atomic_cas_64(&x1, x2, x3); + + } else { + + return(1); + } + + return(0); +} diff --git a/ut/ut0auxconf_have_gcc_atomics.c b/ut/ut0auxconf_have_gcc_atomics.c new file mode 100644 index 00000000000..da5c13d7d79 --- /dev/null +++ b/ut/ut0auxconf_have_gcc_atomics.c @@ -0,0 +1,61 @@ +/***************************************************************************** + +Copyright (c) 2009, Innobase Oy. All Rights Reserved. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +/***************************************************************************** +If this program compiles and returns 0, then GCC atomic funcions are available. + +Created September 12, 2009 Vasil Dimov +*****************************************************************************/ + +int +main(int argc, char** argv) +{ + long x; + long y; + long res; + char c; + + x = 10; + y = 123; + res = __sync_bool_compare_and_swap(&x, x, y); + if (!res || x != y) { + return(1); + } + + x = 10; + y = 123; + res = __sync_bool_compare_and_swap(&x, x + 1, y); + if (res || x != 10) { + return(1); + } + + x = 10; + y = 123; + res = __sync_add_and_fetch(&x, y); + if (res != 123 + 10 || x != 123 + 10) { + return(1); + } + + c = 10; + res = __sync_lock_test_and_set(&c, 123); + if (res != 10 || c != 123) { + return(1); + } + + return(0); +} diff --git a/ut/ut0auxconf_have_solaris_atomics.c b/ut/ut0auxconf_have_solaris_atomics.c new file mode 100644 index 00000000000..7eb704edd4b --- /dev/null +++ b/ut/ut0auxconf_have_solaris_atomics.c @@ -0,0 +1,39 @@ +/***************************************************************************** + +Copyright (c) 2009, Innobase Oy. All Rights Reserved. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +/***************************************************************************** +If this program compiles, then Solaris libc atomic funcions are available. + +Created April 18, 2009 Vasil Dimov +*****************************************************************************/ +#include + +int +main(int argc, char** argv) +{ + ulong_t ulong = 0; + uint32_t uint32 = 0; + uint64_t uint64 = 0; + + atomic_cas_ulong(&ulong, 0, 1); + atomic_cas_32(&uint32, 0, 1); + atomic_cas_64(&uint64, 0, 1); + atomic_add_long(&ulong, 0); + + return(0); +} diff --git a/ut/ut0auxconf_pause.c b/ut/ut0auxconf_pause.c new file mode 100644 index 00000000000..54d63bdd9bc --- /dev/null +++ b/ut/ut0auxconf_pause.c @@ -0,0 +1,32 @@ +/***************************************************************************** + +Copyright (c) 2009, Innobase Oy. All Rights Reserved. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +/***************************************************************************** +If this program compiles and can be run and returns 0, then the pause +instruction is available. + +Created Jul 21, 2009 Vasil Dimov +*****************************************************************************/ + +int +main(int argc, char** argv) +{ + __asm__ __volatile__ ("pause"); + + return(0); +} diff --git a/ut/ut0auxconf_sizeof_pthread_t.c b/ut/ut0auxconf_sizeof_pthread_t.c new file mode 100644 index 00000000000..96add4526ef --- /dev/null +++ b/ut/ut0auxconf_sizeof_pthread_t.c @@ -0,0 +1,35 @@ +/***************************************************************************** + +Copyright (c) 2009, Innobase Oy. All Rights Reserved. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +/***************************************************************************** +This program should compile and when run, print a single line like: +#define SIZEOF_PTHREAD_T %d + +Created April 18, 2009 Vasil Dimov +*****************************************************************************/ + +#include +#include + +int +main(int argc, char** argv) +{ + printf("#define SIZEOF_PTHREAD_T %d\n", (int) sizeof(pthread_t)); + + return(0); +} diff --git a/ut/ut0mem.c b/ut/ut0mem.c index 95fb2187b79..9f9eb1c4d49 100644 --- a/ut/ut0mem.c +++ b/ut/ut0mem.c @@ -84,17 +84,13 @@ ut_mem_init(void) #endif /* !UNIV_HOTBACKUP */ /**********************************************************************//** -Allocates memory. Sets it also to zero if UNIV_SET_MEM_TO_ZERO is -defined and set_to_zero is TRUE. +Allocates memory. @return own: allocated memory */ UNIV_INTERN void* ut_malloc_low( /*==========*/ ulint n, /*!< in: number of bytes to allocate */ - ibool set_to_zero, /*!< in: TRUE if allocated memory should be - set to zero if UNIV_SET_MEM_TO_ZERO is - defined */ ibool assert_on_error)/*!< in: if TRUE, we crash mysqld if the memory cannot be allocated */ { @@ -106,12 +102,6 @@ ut_malloc_low( ret = malloc(n); ut_a(ret || !assert_on_error); -#ifdef UNIV_SET_MEM_TO_ZERO - if (set_to_zero) { - memset(ret, '\0', n); - UNIV_MEM_ALLOC(ret, n); - } -#endif return(ret); } @@ -199,12 +189,6 @@ retry: #endif } - if (set_to_zero) { -#ifdef UNIV_SET_MEM_TO_ZERO - memset(ret, '\0', n + sizeof(ut_mem_block_t)); -#endif - } - UNIV_MEM_ALLOC(ret, n + sizeof(ut_mem_block_t)); ((ut_mem_block_t*)ret)->size = n + sizeof(ut_mem_block_t); @@ -221,74 +205,10 @@ retry: void* ret = malloc(n); ut_a(ret || !assert_on_error); -# ifdef UNIV_SET_MEM_TO_ZERO - if (set_to_zero) { - memset(ret, '\0', n); - } -# endif return(ret); #endif /* !UNIV_HOTBACKUP */ } -/**********************************************************************//** -Allocates memory. Sets it also to zero if UNIV_SET_MEM_TO_ZERO is -defined. -@return own: allocated memory */ -UNIV_INTERN -void* -ut_malloc( -/*======*/ - ulint n) /*!< in: number of bytes to allocate */ -{ -#ifndef UNIV_HOTBACKUP - return(ut_malloc_low(n, TRUE, TRUE)); -#else /* !UNIV_HOTBACKUP */ - return(malloc(n)); -#endif /* !UNIV_HOTBACKUP */ -} - -#ifndef UNIV_HOTBACKUP -/**********************************************************************//** -Tests if malloc of n bytes would succeed. ut_malloc() asserts if memory runs -out. It cannot be used if we want to return an error message. Prints to -stderr a message if fails. -@return TRUE if succeeded */ -UNIV_INTERN -ibool -ut_test_malloc( -/*===========*/ - ulint n) /*!< in: try to allocate this many bytes */ -{ - void* ret; - - ret = malloc(n); - - if (ret == NULL) { - ut_print_timestamp(stderr); - fprintf(stderr, - " InnoDB: Error: cannot allocate" - " %lu bytes of memory for\n" - "InnoDB: a BLOB with malloc! Total allocated memory\n" - "InnoDB: by InnoDB %lu bytes." - " Operating system errno: %d\n" - "InnoDB: Check if you should increase" - " the swap file or\n" - "InnoDB: ulimits of your operating system.\n" - "InnoDB: On FreeBSD check you have" - " compiled the OS with\n" - "InnoDB: a big enough maximum process size.\n", - (ulong) n, - (ulong) ut_total_allocated_memory, - (int) errno); - return(FALSE); - } - - free(ret); - - return(TRUE); -} -#endif /* !UNIV_HOTBACKUP */ - /**********************************************************************//** Frees a memory block allocated with ut_malloc. Freeing a NULL pointer is a nop. */ diff --git a/ut/ut0rbt.c b/ut/ut0rbt.c index 3d7bc91e714..643312ab79d 100644 --- a/ut/ut0rbt.c +++ b/ut/ut0rbt.c @@ -48,7 +48,6 @@ red-black properties: #endif #define ROOT(t) (t->root->left) -#define SIZEOF_NODE(t) ((sizeof(ib_rbt_node_t) + t->sizeof_value) - 1) /****************************************************************//** Print out the sub-tree recursively. */ @@ -829,6 +828,21 @@ rbt_add_node( node = (ib_rbt_node_t*) ut_malloc(SIZEOF_NODE(tree)); memcpy(node->value, value, tree->sizeof_value); + return(rbt_add_preallocated_node(tree, parent, node)); +} + +/****************************************************************//** +Add a new caller-provided node to tree at the specified position. +The node must have its key fields initialized correctly. +@return added node */ +UNIV_INTERN +const ib_rbt_node_t* +rbt_add_preallocated_node( +/*======================*/ + ib_rbt_t* tree, /*!< in: rb tree */ + ib_rbt_bound_t* parent, /*!< in: parent */ + ib_rbt_node_t* node) /*!< in: node */ +{ node->parent = node->left = node->right = tree->nil; /* If tree is empty */ @@ -1137,7 +1151,17 @@ rbt_clear( ib_rbt_t* tree) /*!< in: rb tree */ { rbt_free_node(ROOT(tree), tree->nil); + rbt_reset(tree); +} +/****************************************************************//** +Clear the tree without deleting and freeing its nodes. */ +UNIV_INTERN +void +rbt_reset( +/*======*/ + ib_rbt_t* tree) /*!< in: rb tree */ +{ tree->n_nodes = 0; tree->root->left = tree->root->right = tree->nil; } From 7714739b2d6a50c4ca69421c0e19a9e08ff3b5c7 Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Thu, 1 Nov 2012 14:54:33 -0700 Subject: [PATCH 18/60] Fixed bug mdev-585 (LP bug #637962) If, when executing a query with ORDER BY col LIMIT n, the optimizer chose an index-merge scan to access the table containing col while there existed an index defined over col then optimizer did not consider the possibility of using an alternative range scan by this index to avoid filesort. This could cause a performance degradation if the optimizer flag index_merge was set up to 'on'. --- mysql-test/r/range_vs_index_merge.result | 144 ++++++++++++++++++ .../r/range_vs_index_merge_innodb.result | 144 ++++++++++++++++++ mysql-test/t/range_vs_index_merge.test | 58 +++++++ sql/sql_select.cc | 16 +- 4 files changed, 356 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/range_vs_index_merge.result b/mysql-test/r/range_vs_index_merge.result index faaa6d2429e..dfd00204c95 100644 --- a/mysql-test/r/range_vs_index_merge.result +++ b/mysql-test/r/range_vs_index_merge.result @@ -1221,6 +1221,150 @@ Lugansk UKR 469000 Seattle USA 563374 Caracas VEN 1975294 set optimizer_switch=@save_optimizer_switch; +# +# Bug mdev-585: range vs index-merge with ORDER BY ... LIMIT n +# (LP bug #637962) +# +DROP INDEX CountryPopulation ON City; +DROP INDEX CountryName ON City; +DROP INDEX CityName on City; +CREATE INDEX Name ON City(Name); +CREATE INDEX Population ON City(Population); +EXPLAIN +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE City index_merge Country,Name,Population Name,Country 35,3 NULL # Using sort_union(Name,Country); Using where +FLUSH STATUS; +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000); +ID Name Country Population +384 Cabo Frio BRA 119503 +387 Camaragibe BRA 118968 +403 Catanduva BRA 107761 +412 Cachoeirinha BRA 103240 +508 Watford GBR 113080 +509 Ipswich GBR 114000 +510 Slough GBR 112000 +511 Exeter GBR 111000 +512 Cheltenham GBR 106000 +513 Gloucester GBR 107000 +514 Saint Helens GBR 106293 +515 Sutton Coldfield GBR 106001 +516 York GBR 104425 +517 Oldham GBR 103931 +518 Basildon GBR 100924 +519 Worthing GBR 100000 +635 Mallawi EGY 119283 +636 Bilbays EGY 113608 +637 Mit Ghamr EGY 101801 +638 al-Arish EGY 100447 +701 Tarragona ESP 113016 +702 Lleida (Lérida) ESP 112207 +703 Jaén ESP 109247 +704 Ourense (Orense) ESP 109120 +705 Mataró ESP 104095 +706 Algeciras ESP 103106 +707 Marbella ESP 101144 +759 Gonder ETH 112249 +869 Cabuyao PHL 106630 +870 Calapan PHL 105910 +873 Cauayan PHL 103952 +903 Serekunda GMB 102600 +909 Sohumi GEO 111700 +913 Tema GHA 109975 +914 Sekondi-Takoradi GHA 103653 +924 Villa Nueva GTM 101295 +1844 Cape Breton CAN 114733 +1847 Cambridge CAN 109186 +2406 Herakleion GRC 116178 +2407 Kallithea GRC 114233 +2408 Larisa GRC 113090 +2908 Cajamarca PER 108009 +3002 Besançon FRA 117733 +3003 Caen FRA 113987 +3004 Orléans FRA 113126 +3005 Mulhouse FRA 110359 +3006 Rouen FRA 106592 +3007 Boulogne-Billancourt FRA 106367 +3008 Perpignan FRA 105115 +3009 Nancy FRA 103605 +3411 Ceyhan TUR 102412 +3567 Carúpano VEN 119639 +3568 Catia La Mar VEN 117012 +3571 Calabozo VEN 107146 +3786 Cam Ranh VNM 114041 +3792 Tartu EST 101246 +4002 Carrollton USA 109576 +4027 Cape Coral USA 102286 +4032 Cambridge USA 101355 +SHOW STATUS LIKE 'Handler_read_%'; +Variable_name Value +Handler_read_first 0 +Handler_read_key 2 +Handler_read_next 385 +Handler_read_prev 0 +Handler_read_rnd 377 +Handler_read_rnd_deleted 0 +Handler_read_rnd_next 0 +EXPLAIN +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE City range Country,Name,Population Population 4 NULL # Using where +FLUSH STATUS; +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; +ID Name Country Population +519 Worthing GBR 100000 +638 al-Arish EGY 100447 +518 Basildon GBR 100924 +707 Marbella ESP 101144 +3792 Tartu EST 101246 +SHOW STATUS LIKE 'Handler_read_%'; +Variable_name Value +Handler_read_first 0 +Handler_read_key 1 +Handler_read_next 59 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_deleted 0 +Handler_read_rnd_next 0 +set optimizer_switch='index_merge=off'; +EXPLAIN +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE City range Country,Name,Population Population 4 NULL # Using index condition; Using where +FLUSH STATUS; +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; +ID Name Country Population +519 Worthing GBR 100000 +638 al-Arish EGY 100447 +518 Basildon GBR 100924 +707 Marbella ESP 101144 +3792 Tartu EST 101246 +SHOW STATUS LIKE 'Handler_read_%'; +Variable_name Value +Handler_read_first 0 +Handler_read_key 1 +Handler_read_next 59 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_deleted 0 +Handler_read_rnd_next 0 +set optimizer_switch=@save_optimizer_switch; DROP DATABASE world; use test; CREATE TABLE t1 ( diff --git a/mysql-test/r/range_vs_index_merge_innodb.result b/mysql-test/r/range_vs_index_merge_innodb.result index df3a2af0753..4970900a061 100644 --- a/mysql-test/r/range_vs_index_merge_innodb.result +++ b/mysql-test/r/range_vs_index_merge_innodb.result @@ -1222,6 +1222,150 @@ Lugansk UKR 469000 Seattle USA 563374 Caracas VEN 1975294 set optimizer_switch=@save_optimizer_switch; +# +# Bug mdev-585: range vs index-merge with ORDER BY ... LIMIT n +# (LP bug #637962) +# +DROP INDEX CountryPopulation ON City; +DROP INDEX CountryName ON City; +DROP INDEX CityName on City; +CREATE INDEX Name ON City(Name); +CREATE INDEX Population ON City(Population); +EXPLAIN +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE City index_merge Country,Name,Population Name,Country 35,3 NULL # Using sort_union(Name,Country); Using where +FLUSH STATUS; +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000); +ID Name Country Population +384 Cabo Frio BRA 119503 +387 Camaragibe BRA 118968 +403 Catanduva BRA 107761 +412 Cachoeirinha BRA 103240 +508 Watford GBR 113080 +509 Ipswich GBR 114000 +510 Slough GBR 112000 +511 Exeter GBR 111000 +512 Cheltenham GBR 106000 +513 Gloucester GBR 107000 +514 Saint Helens GBR 106293 +515 Sutton Coldfield GBR 106001 +516 York GBR 104425 +517 Oldham GBR 103931 +518 Basildon GBR 100924 +519 Worthing GBR 100000 +635 Mallawi EGY 119283 +636 Bilbays EGY 113608 +637 Mit Ghamr EGY 101801 +638 al-Arish EGY 100447 +701 Tarragona ESP 113016 +702 Lleida (Lérida) ESP 112207 +703 Jaén ESP 109247 +704 Ourense (Orense) ESP 109120 +705 Mataró ESP 104095 +706 Algeciras ESP 103106 +707 Marbella ESP 101144 +759 Gonder ETH 112249 +869 Cabuyao PHL 106630 +870 Calapan PHL 105910 +873 Cauayan PHL 103952 +903 Serekunda GMB 102600 +909 Sohumi GEO 111700 +913 Tema GHA 109975 +914 Sekondi-Takoradi GHA 103653 +924 Villa Nueva GTM 101295 +1844 Cape Breton CAN 114733 +1847 Cambridge CAN 109186 +2406 Herakleion GRC 116178 +2407 Kallithea GRC 114233 +2408 Larisa GRC 113090 +2908 Cajamarca PER 108009 +3002 Besançon FRA 117733 +3003 Caen FRA 113987 +3004 Orléans FRA 113126 +3005 Mulhouse FRA 110359 +3006 Rouen FRA 106592 +3007 Boulogne-Billancourt FRA 106367 +3008 Perpignan FRA 105115 +3009 Nancy FRA 103605 +3411 Ceyhan TUR 102412 +3567 Carúpano VEN 119639 +3568 Catia La Mar VEN 117012 +3571 Calabozo VEN 107146 +3786 Cam Ranh VNM 114041 +3792 Tartu EST 101246 +4002 Carrollton USA 109576 +4027 Cape Coral USA 102286 +4032 Cambridge USA 101355 +SHOW STATUS LIKE 'Handler_read_%'; +Variable_name Value +Handler_read_first 0 +Handler_read_key 2 +Handler_read_next 385 +Handler_read_prev 0 +Handler_read_rnd 377 +Handler_read_rnd_deleted 0 +Handler_read_rnd_next 0 +EXPLAIN +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE City range Country,Name,Population Population 4 NULL # Using where +FLUSH STATUS; +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; +ID Name Country Population +519 Worthing GBR 100000 +638 al-Arish EGY 100447 +518 Basildon GBR 100924 +707 Marbella ESP 101144 +3792 Tartu EST 101246 +SHOW STATUS LIKE 'Handler_read_%'; +Variable_name Value +Handler_read_first 0 +Handler_read_key 1 +Handler_read_next 59 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_deleted 0 +Handler_read_rnd_next 0 +set optimizer_switch='index_merge=off'; +EXPLAIN +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE City range Country,Name,Population Population 4 NULL # Using index condition; Using where +FLUSH STATUS; +SELECT * FROM City +WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) +AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; +ID Name Country Population +519 Worthing GBR 100000 +638 al-Arish EGY 100447 +518 Basildon GBR 100924 +707 Marbella ESP 101144 +3792 Tartu EST 101246 +SHOW STATUS LIKE 'Handler_read_%'; +Variable_name Value +Handler_read_first 0 +Handler_read_key 1 +Handler_read_next 59 +Handler_read_prev 0 +Handler_read_rnd 0 +Handler_read_rnd_deleted 0 +Handler_read_rnd_next 0 +set optimizer_switch=@save_optimizer_switch; DROP DATABASE world; use test; CREATE TABLE t1 ( diff --git a/mysql-test/t/range_vs_index_merge.test b/mysql-test/t/range_vs_index_merge.test index 613a7cf5760..fb8fd778559 100755 --- a/mysql-test/t/range_vs_index_merge.test +++ b/mysql-test/t/range_vs_index_merge.test @@ -675,6 +675,64 @@ SELECT Name, Country, Population FROM City WHERE $cond; set optimizer_switch=@save_optimizer_switch; + +--echo # +--echo # Bug mdev-585: range vs index-merge with ORDER BY ... LIMIT n +--echo # (LP bug #637962) +--echo # + +DROP INDEX CountryPopulation ON City; +DROP INDEX CountryName ON City; +DROP INDEX CityName on City; + +CREATE INDEX Name ON City(Name); +CREATE INDEX Population ON City(Population); + + +--replace_column 9 # +EXPLAIN +SELECT * FROM City + WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) + AND (Population >= 100000 AND Population < 120000); +FLUSH STATUS; +SELECT * FROM City + WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) + AND (Population >= 100000 AND Population < 120000); +SHOW STATUS LIKE 'Handler_read_%'; + + +--replace_column 9 # +EXPLAIN +SELECT * FROM City + WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) + AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; + +FLUSH STATUS; +SELECT * FROM City + WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) + AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; +SHOW STATUS LIKE 'Handler_read_%'; + + +set optimizer_switch='index_merge=off'; + +--replace_column 9 # +EXPLAIN +SELECT * FROM City + WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) + AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; + +FLUSH STATUS; +SELECT * FROM City + WHERE ((Name > 'Ca' AND Name < 'Cf') OR (Country > 'E' AND Country < 'H')) + AND (Population >= 100000 AND Population < 120000) +ORDER BY Population LIMIT 5; +SHOW STATUS LIKE 'Handler_read_%'; + +set optimizer_switch=@save_optimizer_switch; DROP DATABASE world; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 438cec61c6d..122c19ee73d 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -18079,15 +18079,18 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit_arg, */ if (quick_type == QUICK_SELECT_I::QS_TYPE_INDEX_MERGE || - quick_type == QUICK_SELECT_I::QS_TYPE_INDEX_INTERSECT || + quick_type == QUICK_SELECT_I::QS_TYPE_INDEX_INTERSECT || quick_type == QUICK_SELECT_I::QS_TYPE_ROR_UNION || quick_type == QUICK_SELECT_I::QS_TYPE_ROR_INTERSECT) - goto use_filesort; - ref_key= select->quick->index; - ref_key_parts= select->quick->used_key_parts; + ref_key= MAX_KEY; + else + { + ref_key= select->quick->index; + ref_key_parts= select->quick->used_key_parts; + } } - if (ref_key >= 0) + if (ref_key >= 0 && ref_key != MAX_KEY) { /* We come here when there is a REF key. @@ -18229,7 +18232,8 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit_arg, else keys= usable_keys; - if (ref_key >= 0 && table->covering_keys.is_set(ref_key)) + if (ref_key >= 0 && ref_key != MAX_KEY && + table->covering_keys.is_set(ref_key)) ref_key_quick_rows= table->quick_rows[ref_key]; read_time= join->best_positions[tablenr].read_time; From a00688a7154ac87dff82f15810ebec9ec577e0f0 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 2 Nov 2012 08:21:03 +0100 Subject: [PATCH 19/60] Update result file now we no longer build PBXT. --- .../suite/funcs_1/r/is_tables_is.result | 46 ------------------- 1 file changed, 46 deletions(-) diff --git a/mysql-test/suite/funcs_1/r/is_tables_is.result b/mysql-test/suite/funcs_1/r/is_tables_is.result index f4fe0a880e7..581c94b28be 100644 --- a/mysql-test/suite/funcs_1/r/is_tables_is.result +++ b/mysql-test/suite/funcs_1/r/is_tables_is.result @@ -728,29 +728,6 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema -TABLE_NAME PBXT_STATISTICS -TABLE_TYPE SYSTEM VIEW -ENGINE MEMORY -VERSION 10 -ROW_FORMAT Fixed -TABLE_ROWS #TBLR# -AVG_ROW_LENGTH #ARL# -DATA_LENGTH #DL# -MAX_DATA_LENGTH #MDL# -INDEX_LENGTH #IL# -DATA_FREE #DF# -AUTO_INCREMENT NULL -CREATE_TIME #CRT# -UPDATE_TIME #UT# -CHECK_TIME #CT# -TABLE_COLLATION utf8_general_ci -CHECKSUM NULL -CREATE_OPTIONS #CO# -TABLE_COMMENT #TC# -user_comment -Separator ----------------------------------------------------- -TABLE_CATALOG NULL -TABLE_SCHEMA information_schema TABLE_NAME PLUGINS TABLE_TYPE SYSTEM VIEW ENGINE MYISAM_OR_MARIA @@ -1918,29 +1895,6 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema -TABLE_NAME PBXT_STATISTICS -TABLE_TYPE SYSTEM VIEW -ENGINE MEMORY -VERSION 10 -ROW_FORMAT Fixed -TABLE_ROWS #TBLR# -AVG_ROW_LENGTH #ARL# -DATA_LENGTH #DL# -MAX_DATA_LENGTH #MDL# -INDEX_LENGTH #IL# -DATA_FREE #DF# -AUTO_INCREMENT NULL -CREATE_TIME #CRT# -UPDATE_TIME #UT# -CHECK_TIME #CT# -TABLE_COLLATION utf8_general_ci -CHECKSUM NULL -CREATE_OPTIONS #CO# -TABLE_COMMENT #TC# -user_comment -Separator ----------------------------------------------------- -TABLE_CATALOG NULL -TABLE_SCHEMA information_schema TABLE_NAME PLUGINS TABLE_TYPE SYSTEM VIEW ENGINE MYISAM_OR_MARIA From 888af31099672c67d8a274a3a0e18aa1c176013f Mon Sep 17 00:00:00 2001 From: Sergey Petrunya Date: Fri, 2 Nov 2012 15:31:54 +0400 Subject: [PATCH 20/60] bzr ignore sql-bench/test-table-elimination --- .bzrignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.bzrignore b/.bzrignore index a956e0c6ab4..d1786cefa90 100644 --- a/.bzrignore +++ b/.bzrignore @@ -1982,3 +1982,4 @@ plugin/handler_socket/perl-Net-HandlerSocket/HandlerSocket.bs plugin/handler_socket/perl-Net-HandlerSocket/Makefile.PL libmysqld/gcalc_slicescan.cc libmysqld/gcalc_tools.cc +sql-bench/test-table-elimination From 25b5831a77cd3a8f1b0a1dfdb9ef16d9f33da0b8 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Sat, 3 Nov 2012 00:31:50 +0100 Subject: [PATCH 21/60] MDEV-3830 - fix build on Intel compiler --- mysys/my_context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysys/my_context.c b/mysys/my_context.c index 9d56b13ecb5..bcacd5b167d 100644 --- a/mysys/my_context.c +++ b/mysys/my_context.c @@ -206,7 +206,7 @@ my_context_spawn(struct my_context *c, void (*f)(void *), void *d) ( "movq %%rsp, (%[save])\n\t" "movq %[stack], %%rsp\n\t" -#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4 +#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4 && !defined(__INTEL_COMPILER) /* This emits a DWARF DW_CFA_undefined directive to make the return address undefined. This indicates that this is the top of the stack frame, and From 39e7072d64f5ff36d61bf81970ec398f8d937cfd Mon Sep 17 00:00:00 2001 From: Sergey Petrunya Date: Sun, 4 Nov 2012 19:09:46 +0400 Subject: [PATCH 22/60] MDEV-536: LP:1050806 - different result for a query using subquery, and MDEV-567: Wrong result from a query with correlated subquery if ICP is allowed: backport the fix developed for SHOW EXPLAIN: revision-id: psergey@askmonty.org-20120719115219-212cxmm6qvf0wlrb branch nick: 5.5-show-explain-r21 timestamp: Thu 2012-07-19 15:52:19 +0400 BUG#992942 & MDEV-325: Pre-liminary commit for testing and adjust it so that it handles DS-MRR scans correctly. --- mysql-test/r/subselect2.result | 99 +++++++++++++++++++++- mysql-test/t/subselect2.test | 96 +++++++++++++++++++++- sql/opt_range.cc | 7 ++ sql/sql_select.cc | 146 ++++++++++++++++++++++++++++++--- sql/sql_select.h | 10 +++ 5 files changed, 344 insertions(+), 14 deletions(-) diff --git a/mysql-test/r/subselect2.result b/mysql-test/r/subselect2.result index 7eff7f949a8..4fd303dfd44 100644 --- a/mysql-test/r/subselect2.result +++ b/mysql-test/r/subselect2.result @@ -180,6 +180,32 @@ SET optimizer_switch=@tmp_optimizer_switch; DROP VIEW v1; DROP TABLE t1,t2,t3; # +# MDEV-536: LP:1050806 - different result for a query using subquery +# +DROP TABLE IF EXISTS `t1`; +Warnings: +Note 1051 Unknown table 't1' +CREATE TABLE `t1` ( +`node_uid` bigint(20) unsigned DEFAULT NULL, +`date` datetime DEFAULT NULL, +`mirror_date` datetime DEFAULT NULL, +KEY `date` (`date`) +) ENGINE=MyISAM; +INSERT INTO `t1` VALUES (2085,'2012-01-01 00:00:00','2013-01-01 00:00:00'); +INSERT INTO `t1` VALUES (2084,'2012-02-01 00:00:00','2013-01-01 00:00:00'); +INSERT INTO `t1` VALUES (2088,'2012-03-01 00:00:00','2013-01-01 00:00:00'); +SELECT * FROM ( +SELECT node_uid, date, mirror_date, @result := 0 AS result +FROM t1 +WHERE date < '2012-12-12 12:12:12' + AND node_uid in (2085, 2084) +ORDER BY mirror_date ASC +) AS calculated_result; +node_uid date mirror_date result +2085 2012-01-01 00:00:00 2013-01-01 00:00:00 0 +2084 2012-02-01 00:00:00 2013-01-01 00:00:00 0 +DROP TABLE t1; +# # MDEV-567: Wrong result from a query with correlated subquery if ICP is allowed # CREATE TABLE t1 (a int, b int, INDEX idx(a)); @@ -197,5 +223,76 @@ a b 1 0 1 1 1 3 -DROP TABLE t1, t2, t3; +set @tmp_mdev567=@@optimizer_switch; +set optimizer_switch='mrr=off'; +SELECT * FROM t3 +WHERE a = (SELECT COUNT(DISTINCT t2.b) FROM t1, t2 +WHERE t1.a = t2.a AND t2.a BETWEEN 7 AND 9 +AND t3.b = t1.b +GROUP BY t1.b); +a b +1 0 +1 1 +1 3 +DROP TABLE t1,t2,t3; +set optimizer_switch=@tmp_mdev567; +# +# MDEV-614, also MDEV-536, also LP:1050806: +# different result for a query using subquery between 5.5.25 and 5.5.27 +# +CREATE TABLE `t1` ( +`node_uid` bigint(20) unsigned DEFAULT NULL, +`date` datetime DEFAULT NULL, +`mirror_date` datetime DEFAULT NULL, +KEY `date` (`date`) +) ENGINE=MyISAM; +INSERT INTO `t1` VALUES (2085,'2012-01-01 00:00:00','2013-01-01 00:00:00'); +INSERT INTO `t1` VALUES (2084,'2012-02-01 00:00:00','2013-01-01 00:00:00'); +INSERT INTO `t1` VALUES (2088,'2012-03-01 00:00:00','2013-01-01 00:00:00'); +explain +SELECT * FROM ( +SELECT node_uid, date, mirror_date, @result := 0 AS result +FROM t1 +WHERE date < '2012-12-12 12:12:12' + AND node_uid in (2085, 2084) +ORDER BY mirror_date ASC +) AS calculated_result; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE ALL NULL NULL NULL NULL 2 +2 DERIVED t1 range date date 9 NULL 2 Using index condition; Using where; Rowid-ordered scan; Using filesort +SELECT * FROM ( +SELECT node_uid, date, mirror_date, @result := 0 AS result +FROM t1 +WHERE date < '2012-12-12 12:12:12' + AND node_uid in (2085, 2084) +ORDER BY mirror_date ASC +) AS calculated_result; +node_uid date mirror_date result +2085 2012-01-01 00:00:00 2013-01-01 00:00:00 0 +2084 2012-02-01 00:00:00 2013-01-01 00:00:00 0 +set @tmp_mdev614=@@optimizer_switch; +set optimizer_switch='mrr=off'; +explain +SELECT * FROM ( +SELECT node_uid, date, mirror_date, @result := 0 AS result +FROM t1 +WHERE date < '2012-12-12 12:12:12' + AND node_uid in (2085, 2084) +ORDER BY mirror_date ASC +) AS calculated_result; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE ALL NULL NULL NULL NULL 2 +2 DERIVED t1 range date date 9 NULL 2 Using index condition; Using where; Using filesort +SELECT * FROM ( +SELECT node_uid, date, mirror_date, @result := 0 AS result +FROM t1 +WHERE date < '2012-12-12 12:12:12' + AND node_uid in (2085, 2084) +ORDER BY mirror_date ASC +) AS calculated_result; +node_uid date mirror_date result +2085 2012-01-01 00:00:00 2013-01-01 00:00:00 0 +2084 2012-02-01 00:00:00 2013-01-01 00:00:00 0 +set optimizer_switch=@tmp_mdev614; +DROP TABLE t1; set optimizer_switch=@subselect2_test_tmp; diff --git a/mysql-test/t/subselect2.test b/mysql-test/t/subselect2.test index 75cf842fbdb..68894ad18cb 100644 --- a/mysql-test/t/subselect2.test +++ b/mysql-test/t/subselect2.test @@ -203,6 +203,32 @@ SET optimizer_switch=@tmp_optimizer_switch; DROP VIEW v1; DROP TABLE t1,t2,t3; +--echo # +--echo # MDEV-536: LP:1050806 - different result for a query using subquery +--echo # +DROP TABLE IF EXISTS `t1`; + +CREATE TABLE `t1` ( + `node_uid` bigint(20) unsigned DEFAULT NULL, + `date` datetime DEFAULT NULL, + `mirror_date` datetime DEFAULT NULL, + KEY `date` (`date`) +) ENGINE=MyISAM; + +INSERT INTO `t1` VALUES (2085,'2012-01-01 00:00:00','2013-01-01 00:00:00'); +INSERT INTO `t1` VALUES (2084,'2012-02-01 00:00:00','2013-01-01 00:00:00'); +INSERT INTO `t1` VALUES (2088,'2012-03-01 00:00:00','2013-01-01 00:00:00'); + +SELECT * FROM ( + SELECT node_uid, date, mirror_date, @result := 0 AS result + FROM t1 + WHERE date < '2012-12-12 12:12:12' + AND node_uid in (2085, 2084) + ORDER BY mirror_date ASC +) AS calculated_result; + +DROP TABLE t1; + --echo # --echo # MDEV-567: Wrong result from a query with correlated subquery if ICP is allowed --echo # @@ -220,7 +246,75 @@ SELECT * FROM t3 WHERE t1.a = t2.a AND t2.a BETWEEN 7 AND 9 AND t3.b = t1.b GROUP BY t1.b); -DROP TABLE t1, t2, t3; + + +set @tmp_mdev567=@@optimizer_switch; +set optimizer_switch='mrr=off'; +SELECT * FROM t3 + WHERE a = (SELECT COUNT(DISTINCT t2.b) FROM t1, t2 + WHERE t1.a = t2.a AND t2.a BETWEEN 7 AND 9 + AND t3.b = t1.b + GROUP BY t1.b); + +DROP TABLE t1,t2,t3; +set optimizer_switch=@tmp_mdev567; + +--echo # +--echo # MDEV-614, also MDEV-536, also LP:1050806: +--echo # different result for a query using subquery between 5.5.25 and 5.5.27 +--echo # + +CREATE TABLE `t1` ( + `node_uid` bigint(20) unsigned DEFAULT NULL, + `date` datetime DEFAULT NULL, + `mirror_date` datetime DEFAULT NULL, + KEY `date` (`date`) +) ENGINE=MyISAM; + +INSERT INTO `t1` VALUES (2085,'2012-01-01 00:00:00','2013-01-01 00:00:00'); +INSERT INTO `t1` VALUES (2084,'2012-02-01 00:00:00','2013-01-01 00:00:00'); +INSERT INTO `t1` VALUES (2088,'2012-03-01 00:00:00','2013-01-01 00:00:00'); + +explain +SELECT * FROM ( + SELECT node_uid, date, mirror_date, @result := 0 AS result + FROM t1 + WHERE date < '2012-12-12 12:12:12' + AND node_uid in (2085, 2084) + ORDER BY mirror_date ASC +) AS calculated_result; + +SELECT * FROM ( + SELECT node_uid, date, mirror_date, @result := 0 AS result + FROM t1 + WHERE date < '2012-12-12 12:12:12' + AND node_uid in (2085, 2084) + ORDER BY mirror_date ASC +) AS calculated_result; + +set @tmp_mdev614=@@optimizer_switch; +set optimizer_switch='mrr=off'; +explain +SELECT * FROM ( + SELECT node_uid, date, mirror_date, @result := 0 AS result + FROM t1 + WHERE date < '2012-12-12 12:12:12' + AND node_uid in (2085, 2084) + ORDER BY mirror_date ASC +) AS calculated_result; + +SELECT * FROM ( + SELECT node_uid, date, mirror_date, @result := 0 AS result + FROM t1 + WHERE date < '2012-12-12 12:12:12' + AND node_uid in (2085, 2084) + ORDER BY mirror_date ASC +) AS calculated_result; + +set optimizer_switch=@tmp_mdev614; + +DROP TABLE t1; + set optimizer_switch=@subselect2_test_tmp; diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 791af42521a..b98edeb15db 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -10944,6 +10944,13 @@ int QUICK_RANGE_SELECT::reset() DBUG_ENTER("QUICK_RANGE_SELECT::reset"); last_range= NULL; cur_range= (QUICK_RANGE**) ranges.buffer; + + if (file->inited == handler::RND) + { + /* Handler could be left in this state by MRR */ + if ((error= file->ha_rnd_end())) + DBUG_RETURN(error); + } if (file->inited == handler::NONE) { diff --git a/sql/sql_select.cc b/sql/sql_select.cc index a4b2d376e05..b6b1259ca49 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -10603,9 +10603,22 @@ void JOIN::cleanup(bool full) if (full) { + JOIN_TAB *sort_tab= first_linear_tab(this, WITHOUT_CONST_TABLES); + if (pre_sort_join_tab) + { + if (sort_tab && sort_tab->select == pre_sort_join_tab->select) + { + pre_sort_join_tab->select= NULL; + } + else + clean_pre_sort_join_tab(); + } + for (tab= first_linear_tab(this, WITH_CONST_TABLES); tab; tab= next_linear_tab(this, tab, WITH_BUSH_ROOTS)) + { tab->cleanup(); + } } else { @@ -18849,6 +18862,8 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order, TABLE *table; SQL_SELECT *select; JOIN_TAB *tab; + int err= 0; + bool quick_created= FALSE; DBUG_ENTER("create_sort_index"); if (join->table_count == join->const_tables) @@ -18856,18 +18871,61 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order, tab= join->join_tab + join->const_tables; table= tab->table; select= tab->select; + + JOIN_TAB *save_pre_sort_join_tab= NULL; + if (join->pre_sort_join_tab) + { + /* + we've already been in this function, and stashed away the original access + method in join->pre_sort_join_tab, restore it now. + */ + + /* First, restore state of the handler */ + if (join->pre_sort_index != MAX_KEY) + { + if (table->file->ha_index_or_rnd_end()) + goto err; + if (join->pre_sort_idx_pushed_cond) + { + table->file->idx_cond_push(join->pre_sort_index, + join->pre_sort_idx_pushed_cond); + } + } + else + { + if (table->file->ha_index_or_rnd_end() || + table->file->ha_rnd_init(TRUE)) + goto err; + } + + /* Second, restore access method parameters */ + tab->records= join->pre_sort_join_tab->records; + tab->select= join->pre_sort_join_tab->select; + tab->select_cond= join->pre_sort_join_tab->select_cond; + tab->type= join->pre_sort_join_tab->type; + tab->read_first_record= join->pre_sort_join_tab->read_first_record; + + save_pre_sort_join_tab= join->pre_sort_join_tab; + join->pre_sort_join_tab= NULL; + } + else + { + /* + Save index #, save index condition. Do it right now, because MRR may + */ + if (table->file->inited == handler::INDEX) + { + join->pre_sort_index= table->file->active_index; + join->pre_sort_idx_pushed_cond= table->file->pushed_idx_cond; + // no need to save key_read + } + else + join->pre_sort_index= MAX_KEY; + } /* Currently ORDER BY ... LIMIT is not supported in subqueries. */ DBUG_ASSERT(join->group_list || !join->is_in_subquery()); - /* - If we have a select->quick object that is created outside of - create_sort_index() and this is part of a subquery that - potentially can be executed multiple times then we should not - delete the quick object on exit from this function. - */ - bool keep_quick= select && select->quick && join->join_tab_save; - /* When there is SQL_BIG_RESULT do not sort using index for GROUP BY, and thus force sorting on disk unless a group min-max optimization @@ -18919,7 +18977,7 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order, get_quick_select_for_ref(thd, table, &tab->ref, tab->found_records)))) goto err; - DBUG_ASSERT(!keep_quick); + quick_created= TRUE; } } @@ -18935,7 +18993,27 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order, table->sort.found_records=filesort(thd, table,join->sortorder, length, select, filesort_limit, 0, &examined_rows); + + if (quick_created) + { + /* This will delete the quick select. */ + select->cleanup(); + } + + if (!join->pre_sort_join_tab) + { + if (save_pre_sort_join_tab) + join->pre_sort_join_tab= save_pre_sort_join_tab; + else if (!(join->pre_sort_join_tab= (JOIN_TAB*)thd->alloc(sizeof(JOIN_TAB)))) + goto err; + } + + *(join->pre_sort_join_tab)= *tab; + + /*TODO: here, close the index scan, cancel index-only read. */ tab->records= table->sort.found_records; // For SQL_CALC_ROWS +#if 0 + /* MariaDB doesn't need the following: */ if (select) { /* @@ -18952,6 +19030,7 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order, tablesort_result_cache= table->sort.io_cache; table->sort.io_cache= NULL; + // select->cleanup(); // filesort did select /* If a quick object was created outside of create_sort_index() that might be reused, then do not call select->cleanup() since @@ -18974,18 +19053,61 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order, // Restore the output resultset table->sort.io_cache= tablesort_result_cache; } +#endif + tab->select=NULL; tab->set_select_cond(NULL, __LINE__); - tab->last_inner= 0; - tab->first_unmatched= 0; tab->type=JT_ALL; // Read with normal read_record tab->read_first_record= join_init_read_record; + tab->table->file->ha_index_or_rnd_end(); + + if (err) + goto err; + tab->join->examined_rows+=examined_rows; - table->disable_keyread(); // Restore if we used indexes DBUG_RETURN(table->sort.found_records == HA_POS_ERROR); err: DBUG_RETURN(-1); } + +void JOIN::clean_pre_sort_join_tab() +{ + //TABLE *table= pre_sort_join_tab->table; + /* + Note: we can come here for fake_select_lex object. That object will have + the table already deleted by st_select_lex_unit::cleanup(). + We rely on that fake_select_lex didn't have quick select. + */ +#if 0 + if (pre_sort_join_tab->select && pre_sort_join_tab->select->quick) + { + /* + We need to preserve tablesort's output resultset here, because + QUICK_INDEX_MERGE_SELECT::~QUICK_INDEX_MERGE_SELECT (called by + SQL_SELECT::cleanup()) may free it assuming it's the result of the quick + select operation that we no longer need. Note that all the other parts of + this data structure are cleaned up when + QUICK_INDEX_MERGE_SELECT::get_next encounters end of data, so the next + SQL_SELECT::cleanup() call changes sort.io_cache alone. + */ + IO_CACHE *tablesort_result_cache; + + tablesort_result_cache= table->sort.io_cache; + table->sort.io_cache= NULL; + pre_sort_join_tab->select->cleanup(); + table->quick_keys.clear_all(); // as far as we cleanup select->quick + table->intersect_keys.clear_all(); + table->sort.io_cache= tablesort_result_cache; + } +#endif + //table->disable_keyread(); // Restore if we used indexes + if (pre_sort_join_tab->select && pre_sort_join_tab->select->quick) + { + pre_sort_join_tab->select->cleanup(); + } +} + + /***************************************************************************** Remove duplicates from tmp table This should be recoded to add a unique index to the table and remove diff --git a/sql/sql_select.h b/sql/sql_select.h index 118a684ab62..e4687b4f00c 100644 --- a/sql/sql_select.h +++ b/sql/sql_select.h @@ -897,6 +897,14 @@ protected: public: JOIN_TAB *join_tab, **best_ref; + + /* + Saved join_tab for pre_sorting. create_sort_index() will save here.. + */ + JOIN_TAB *pre_sort_join_tab; + uint pre_sort_index; + Item *pre_sort_idx_pushed_cond; + void clean_pre_sort_join_tab(); /* For "Using temporary+Using filesort" queries, JOIN::join_tab can point to @@ -1279,6 +1287,8 @@ public: outer_ref_cond= pseudo_bits_cond= NULL; in_to_exists_where= NULL; in_to_exists_having= NULL; + + pre_sort_join_tab= NULL; } int prepare(Item ***rref_pointer_array, TABLE_LIST *tables, uint wind_num, From 38e3fa961bb746d6d18576bd53e4d0a71187a022 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Sun, 4 Nov 2012 22:20:04 +0100 Subject: [PATCH 23/60] MDEV-3830 - fix compilation for Intel compiler, avoid .cfi_escape , 32 bit code. --- mysys/my_context.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysys/my_context.c b/mysys/my_context.c index bcacd5b167d..08dc0920f21 100644 --- a/mysys/my_context.c +++ b/mysys/my_context.c @@ -456,7 +456,7 @@ my_context_spawn(struct my_context *c, void (*f)(void *), void *d) ( "movl %%esp, (%[save])\n\t" "movl %[stack], %%esp\n\t" -#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4 +#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 4 && !defined(__INTEL_COMPILER) /* This emits a DWARF DW_CFA_undefined directive to make the return address undefined. This indicates that this is the top of the stack frame, and From 00e7915f35af84b96ce56c523e18d82abb1d0f93 Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Tue, 6 Nov 2012 23:18:07 -0800 Subject: [PATCH 24/60] Added the test case for bug #54599 into mariadb code line. The fix for this bug was pulled from mysql-5.5 earlier. --- mysql-test/r/order_by.result | 49 ++++++++++++++++++++++++++++++++++++ mysql-test/t/order_by.test | 41 ++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index 53fed519a15..7aa286962c9 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -1945,3 +1945,52 @@ f0 f1 f2 set sort_buffer_size= @save_sort_buffer_size; DROP TABLE t1; End of 5.3 tests +# +# Bug 54599: discarded fast range scan for query with +# GROUP BY + ORDER BY + LIMIT +# +create table t0 (a int); +insert into t0 values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); +create table t1 (a int, b int, index idx1(a,b), index idx2(b,a)); +insert into t1 +select 1000*s4.a+100*s3.a+10*s2.a + s1.a, 1000*s4.a+100*s3.a+10*s2.a+s1.a +from t0 s1, t0 s2, t0 s3, t0 s4; +analyze table t1; +explain +select b, count(*) num_cnt from t1 +where a > 9750 group by b order by num_cnt; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range idx1 idx1 5 NULL 502 Using where; Using index; Using temporary; Using filesort +flush status; +select b, count(*) num_cnt from t1 +where a > 9750 group by b order by num_cnt; +show status like '%Handler_read%'; +Variable_name Value +Handler_read_first 0 +Handler_read_key 250 +Handler_read_last 0 +Handler_read_next 249 +Handler_read_prev 0 +Handler_read_rnd 249 +Handler_read_rnd_deleted 0 +Handler_read_rnd_next 250 +explain +select b, count(*) num_cnt from t1 +where a > 9750 group by b order by num_cnt limit 1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 range idx1 idx1 5 NULL 502 Using where; Using index; Using temporary; Using filesort +flush status; +select b, count(*) num_cnt from t1 +where a > 9750 group by b order by num_cnt limit 1; +show status like '%Handler_read%'; +Variable_name Value +Handler_read_first 0 +Handler_read_key 250 +Handler_read_last 0 +Handler_read_next 249 +Handler_read_prev 0 +Handler_read_rnd 1 +Handler_read_rnd_deleted 0 +Handler_read_rnd_next 250 +drop table t0, t1; +End of 5.5 tests diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test index 2912e190af8..52c801e99f7 100644 --- a/mysql-test/t/order_by.test +++ b/mysql-test/t/order_by.test @@ -1652,3 +1652,44 @@ DROP TABLE t1; --echo End of 5.3 tests +--echo # +--echo # Bug 54599: discarded fast range scan for query with +--echo # GROUP BY + ORDER BY + LIMIT +--echo # + +create table t0 (a int); +insert into t0 values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); + +create table t1 (a int, b int, index idx1(a,b), index idx2(b,a)); +insert into t1 + select 1000*s4.a+100*s3.a+10*s2.a + s1.a, 1000*s4.a+100*s3.a+10*s2.a+s1.a + from t0 s1, t0 s2, t0 s3, t0 s4; +--disable_result_log +analyze table t1; +--enable_result_log + +explain +select b, count(*) num_cnt from t1 + where a > 9750 group by b order by num_cnt; +flush status; +--disable_result_log +select b, count(*) num_cnt from t1 + where a > 9750 group by b order by num_cnt; +--enable_result_log +show status like '%Handler_read%'; + +explain +select b, count(*) num_cnt from t1 + where a > 9750 group by b order by num_cnt limit 1; +flush status; +--disable_result_log +select b, count(*) num_cnt from t1 + where a > 9750 group by b order by num_cnt limit 1; +--enable_result_log +show status like '%Handler_read%'; + +drop table t0, t1; + +--echo End of 5.5 tests + + From 0380b0e28034c8e5778e37540478f61d3d74a0bc Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 6 Nov 2012 18:09:26 +0100 Subject: [PATCH 25/60] build feedback plugin with ssl (changes for cmake). fix the ssl related code to use newer function prototypes --- plugin/feedback/CMakeLists.txt | 12 ++++++++---- plugin/feedback/url_http.cc | 27 ++++++++++++++++----------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/plugin/feedback/CMakeLists.txt b/plugin/feedback/CMakeLists.txt index 627e4d643fb..3e14ef3918b 100644 --- a/plugin/feedback/CMakeLists.txt +++ b/plugin/feedback/CMakeLists.txt @@ -1,9 +1,11 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/extra/yassl/include) + ${SSL_INCLUDE_DIRS}) SET(FEEDBACK_SOURCES feedback.cc sender_thread.cc url_base.cc url_http.cc utils.cc) +ADD_DEFINITIONS(${SSL_DEFINES}) + INCLUDE (CheckIncludeFiles) CHECK_INCLUDE_FILES (netdb.h HAVE_NETDB_H) IF(HAVE_NETDB_H) @@ -11,8 +13,10 @@ IF(HAVE_NETDB_H) ENDIF(HAVE_NETDB_H) IF(WIN32) - #SET(FEEDBACK_LIBS Ws2_32) - MYSQL_ADD_PLUGIN(FEEDBACK ${FEEDBACK_SOURCES} STATIC_ONLY DEFAULT) + MYSQL_ADD_PLUGIN(FEEDBACK ${FEEDBACK_SOURCES} + LINK_LIBRARIES ${SSL_LIBRARIES} + STATIC_ONLY DEFAULT) ELSE(WIN32) - MYSQL_ADD_PLUGIN(FEEDBACK ${FEEDBACK_SOURCES}) + MYSQL_ADD_PLUGIN(FEEDBACK ${FEEDBACK_SOURCES} + LINK_LIBRARIES ${SSL_LIBRARIES}) ENDIF(WIN32) diff --git a/plugin/feedback/url_http.cc b/plugin/feedback/url_http.cc index a9d4c5bbbaf..da751810de0 100644 --- a/plugin/feedback/url_http.cc +++ b/plugin/feedback/url_http.cc @@ -29,12 +29,6 @@ namespace feedback { static const uint FOR_READING= 0; static const uint FOR_WRITING= 1; -#ifdef MARIADB_BASE_VERSION -#define ssl_connect(A,B,C,D) sslconnect(A,B,C,D) -#else -#define ssl_connect(A,B,C,D) sslconnect(A,B,C) -#endif - /** implementation of the Url class that sends the data via HTTP POST request. @@ -199,12 +193,23 @@ int Url_http::send(const char* data, size_t data_length) struct st_VioSSLFd *UNINIT_VAR(ssl_fd); if (ssl) { - buf[0]= 0; - if (!(ssl_fd= new_VioSSLConnectorFd(0, 0, 0, 0, 0)) || - ssl_connect(ssl_fd, vio, send_timeout, buf)) + enum enum_ssl_init_error ssl_init_error= SSL_INITERR_NOERROR; + ulong ssl_error= 0; + if (!(ssl_fd= new_VioSSLConnectorFd(0, 0, 0, 0, 0, &ssl_init_error)) || + sslconnect(ssl_fd, vio, send_timeout, &ssl_error)) { + const char *err; + if (ssl_init_error != SSL_INITERR_NOERROR) + err= sslGetErrString(ssl_init_error); + else + { + ERR_error_string_n(ssl_error, buf, sizeof(buf)); + buf[sizeof(buf)-1]= 0; + err= buf; + } + sql_print_error("feedback plugin: ssl failed for url '%s' %s", - full_url.str, buf); + full_url.str, err); if (ssl_fd) free_vio_ssl_acceptor_fd(ssl_fd); closesocket(fd); @@ -296,7 +301,7 @@ int Url_http::send(const char* data, size_t data_length) if (ssl) { SSL_CTX_free(ssl_fd->ssl_context); - my_free(ssl_fd, MYF(0)); + my_free(ssl_fd); } #endif From d9633edc146d8934c33af940e150f1605665a681 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 7 Nov 2012 17:48:02 +0200 Subject: [PATCH 26/60] Updated test results after the mysql 5.1 merge. --- .../suite/funcs_1/r/is_columns_is.result | 155 +++++++++++- .../suite/funcs_1/r/is_tables_is.result | 230 ++++++++++++++---- mysql-test/t/openssl_1.test | 6 +- 3 files changed, 334 insertions(+), 57 deletions(-) diff --git a/mysql-test/suite/funcs_1/r/is_columns_is.result b/mysql-test/suite/funcs_1/r/is_columns_is.result index e647d4af174..697b176f516 100644 --- a/mysql-test/suite/funcs_1/r/is_columns_is.result +++ b/mysql-test/suite/funcs_1/r/is_columns_is.result @@ -113,6 +113,44 @@ NULL information_schema GLOBAL_STATUS VARIABLE_NAME 1 NO varchar 64 192 NULL NU NULL information_schema GLOBAL_STATUS VARIABLE_VALUE 2 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) select NULL information_schema GLOBAL_VARIABLES VARIABLE_NAME 1 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select NULL information_schema GLOBAL_VARIABLES VARIABLE_VALUE 2 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) select +NULL information_schema INNODB_BUFFER_PAGE ACCESS_TIME 10 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE BLOCK_ID 1 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE COMPRESSED_SIZE 15 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE DATA_SIZE 14 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE FIX_COUNT 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE FLUSH_TYPE 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE FREE_PAGE_CLOCK 19 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE INDEX_NAME 12 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) select +NULL information_schema INNODB_BUFFER_PAGE IO_FIX 17 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select +NULL information_schema INNODB_BUFFER_PAGE IS_HASHED 7 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select +NULL information_schema INNODB_BUFFER_PAGE IS_OLD 18 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select +NULL information_schema INNODB_BUFFER_PAGE NEWEST_MODIFICATION 8 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE NUMBER_RECORDS 13 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE OLDEST_MODIFICATION 9 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE PAGE_NUMBER 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE PAGE_STATE 16 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select +NULL information_schema INNODB_BUFFER_PAGE PAGE_TYPE 4 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select +NULL information_schema INNODB_BUFFER_PAGE SPACE 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE TABLE_NAME 11 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) select +NULL information_schema INNODB_BUFFER_PAGE_LRU ACCESS_TIME 10 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU COMPRESSED 16 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select +NULL information_schema INNODB_BUFFER_PAGE_LRU COMPRESSED_SIZE 15 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU DATA_SIZE 14 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU FIX_COUNT 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU FLUSH_TYPE 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU FREE_PAGE_CLOCK 19 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU INDEX_NAME 12 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) select +NULL information_schema INNODB_BUFFER_PAGE_LRU IO_FIX 17 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select +NULL information_schema INNODB_BUFFER_PAGE_LRU IS_HASHED 7 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select +NULL information_schema INNODB_BUFFER_PAGE_LRU IS_OLD 18 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select +NULL information_schema INNODB_BUFFER_PAGE_LRU LRU_POSITION 1 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU NEWEST_MODIFICATION 8 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU NUMBER_RECORDS 13 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU OLDEST_MODIFICATION 9 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU PAGE_NUMBER 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU PAGE_TYPE 4 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select +NULL information_schema INNODB_BUFFER_PAGE_LRU SPACE 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_PAGE_LRU TABLE_NAME 11 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) select NULL information_schema INNODB_BUFFER_POOL_PAGES fix_count 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select NULL information_schema INNODB_BUFFER_POOL_PAGES flush_type 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select NULL information_schema INNODB_BUFFER_POOL_PAGES lru_position 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select @@ -140,6 +178,41 @@ NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX n_recs 4 0 NO bigint NULL NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX old 10 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX page_no 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX space_id 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS DATABASE_PAGES 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS FREE_BUFFERS 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS HIT_RATE 21 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS LRU_IO_CURRENT 29 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS LRU_IO_TOTAL 28 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS MODIFIED_DATABASE_PAGES 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS NOT_YOUNG_MAKE_PER_THOUSAND_GETS 23 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_CREATED 15 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_GET 20 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_READ 14 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_READ_AHEAD 24 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_WRITTEN 16 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_READ_AHEAD_EVICTED 25 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS OLD_DATABASE_PAGES 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_CREATE_RATE 18 0 NO double NULL NULL 12 NULL NULL NULL double select +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_NOT_YOUNG_RATE 13 0 NO double NULL NULL 12 NULL NULL NULL double select +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_YOUNG 10 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_YOUNG_RATE 12 0 NO double NULL NULL 12 NULL NULL NULL double select +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_NOT_MADE_YOUNG 11 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_READ_RATE 17 0 NO double NULL NULL 12 NULL NULL NULL double select +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_WRITTEN_RATE 19 0 NO double NULL NULL 12 NULL NULL NULL double select +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_DECOMPRESS 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_FLUSH_LIST 9 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_FLUSH_LRU 8 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_READS 7 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS POOL_SIZE 1 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS READ_AHEAD_EVICTED_RATE 27 0 NO double NULL NULL 12 NULL NULL NULL double select +NULL information_schema INNODB_BUFFER_POOL_STATS READ_AHEAD_RATE 26 0 NO double NULL NULL 12 NULL NULL NULL double select +NULL information_schema INNODB_BUFFER_POOL_STATS UNCOMPRESS_CURRENT 31 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS UNCOMPRESS_TOTAL 30 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_BUFFER_POOL_STATS YOUNG_MAKE_PER_THOUSAND_GETS 22 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_CHANGED_PAGES end_lsn 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select +NULL information_schema INNODB_CHANGED_PAGES page_id 2 0 NO int NULL NULL 10 0 NULL NULL int(11) unsigned select +NULL information_schema INNODB_CHANGED_PAGES space_id 1 0 NO int NULL NULL 10 0 NULL NULL int(11) unsigned select +NULL information_schema INNODB_CHANGED_PAGES start_lsn 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select NULL information_schema INNODB_CMP compress_ops 2 0 NO int NULL NULL 10 0 NULL NULL int(11) select NULL information_schema INNODB_CMP compress_ops_ok 3 0 NO int NULL NULL 10 0 NULL NULL int(11) select NULL information_schema INNODB_CMP compress_time 4 0 NO int NULL NULL 10 0 NULL NULL int(11) select @@ -415,10 +488,6 @@ NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select NULL information_schema XTRADB_ADMIN_COMMAND result_message 1 NO varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) select -NULL information_schema XTRADB_ENHANCEMENTS comment 3 NO varchar 100 300 NULL NULL utf8 utf8_general_ci varchar(100) select -NULL information_schema XTRADB_ENHANCEMENTS description 2 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select -NULL information_schema XTRADB_ENHANCEMENTS link 4 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select -NULL information_schema XTRADB_ENHANCEMENTS name 1 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) select ########################################################################## # Show the quotient of CHARACTER_OCTET_LENGTH and CHARACTER_MAXIMUM_LENGTH ########################################################################## @@ -460,6 +529,7 @@ COL_CML DATA_TYPE CHARACTER_SET_NAME COLLATION_NAME NULL bigint NULL NULL NULL datetime NULL NULL NULL decimal NULL NULL +NULL double NULL NULL NULL int NULL NULL --> CHAR(0) is allowed (see manual), and here both CHARACHTER_* values --> are 0, which is intended behavior, and the result of 0 / 0 IS NULL @@ -588,6 +658,44 @@ NULL information_schema FILES CHECKSUM bigint NULL NULL NULL NULL bigint(21) uns 3.0000 information_schema GLOBAL_STATUS VARIABLE_VALUE varchar 1024 3072 utf8 utf8_general_ci varchar(1024) 3.0000 information_schema GLOBAL_VARIABLES VARIABLE_NAME varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema GLOBAL_VARIABLES VARIABLE_VALUE varchar 1024 3072 utf8 utf8_general_ci varchar(1024) +NULL information_schema INNODB_BUFFER_PAGE BLOCK_ID bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE SPACE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE PAGE_NUMBER bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE PAGE_TYPE varchar 64 192 utf8 utf8_general_ci varchar(64) +NULL information_schema INNODB_BUFFER_PAGE FLUSH_TYPE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE FIX_COUNT bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE IS_HASHED varchar 3 9 utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE NEWEST_MODIFICATION bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE OLDEST_MODIFICATION bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE ACCESS_TIME bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE TABLE_NAME varchar 1024 3072 utf8 utf8_general_ci varchar(1024) +3.0000 information_schema INNODB_BUFFER_PAGE INDEX_NAME varchar 1024 3072 utf8 utf8_general_ci varchar(1024) +NULL information_schema INNODB_BUFFER_PAGE NUMBER_RECORDS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE DATA_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE COMPRESSED_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE PAGE_STATE varchar 64 192 utf8 utf8_general_ci varchar(64) +3.0000 information_schema INNODB_BUFFER_PAGE IO_FIX varchar 64 192 utf8 utf8_general_ci varchar(64) +3.0000 information_schema INNODB_BUFFER_PAGE IS_OLD varchar 3 9 utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE FREE_PAGE_CLOCK bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU LRU_POSITION bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU SPACE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU PAGE_NUMBER bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE_LRU PAGE_TYPE varchar 64 192 utf8 utf8_general_ci varchar(64) +NULL information_schema INNODB_BUFFER_PAGE_LRU FLUSH_TYPE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU FIX_COUNT bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE_LRU IS_HASHED varchar 3 9 utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE_LRU NEWEST_MODIFICATION bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU OLDEST_MODIFICATION bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU ACCESS_TIME bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE_LRU TABLE_NAME varchar 1024 3072 utf8 utf8_general_ci varchar(1024) +3.0000 information_schema INNODB_BUFFER_PAGE_LRU INDEX_NAME varchar 1024 3072 utf8 utf8_general_ci varchar(1024) +NULL information_schema INNODB_BUFFER_PAGE_LRU NUMBER_RECORDS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU DATA_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU COMPRESSED_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE_LRU COMPRESSED varchar 3 9 utf8 utf8_general_ci varchar(3) +3.0000 information_schema INNODB_BUFFER_PAGE_LRU IO_FIX varchar 64 192 utf8 utf8_general_ci varchar(64) +3.0000 information_schema INNODB_BUFFER_PAGE_LRU IS_OLD varchar 3 9 utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE_LRU FREE_PAGE_CLOCK bigint NULL NULL NULL NULL bigint(21) unsigned 3.0000 information_schema INNODB_BUFFER_POOL_PAGES page_type varchar 64 192 utf8 utf8_general_ci varchar(64) NULL information_schema INNODB_BUFFER_POOL_PAGES space_id bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES page_no bigint NULL NULL NULL NULL bigint(21) unsigned @@ -615,6 +723,41 @@ NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX old bigint NULL NULL NULL NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX lru_position bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX fix_count bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX flush_type bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS POOL_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS FREE_BUFFERS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS DATABASE_PAGES bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS OLD_DATABASE_PAGES bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS MODIFIED_DATABASE_PAGES bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_DECOMPRESS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_READS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_FLUSH_LRU bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_FLUSH_LIST bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_YOUNG bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_NOT_MADE_YOUNG bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_YOUNG_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_NOT_YOUNG_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_READ bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_CREATED bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_WRITTEN bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_READ_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_CREATE_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_WRITTEN_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_GET bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS HIT_RATE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS YOUNG_MAKE_PER_THOUSAND_GETS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NOT_YOUNG_MAKE_PER_THOUSAND_GETS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_READ_AHEAD bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_READ_AHEAD_EVICTED bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS READ_AHEAD_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS READ_AHEAD_EVICTED_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS LRU_IO_TOTAL bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS LRU_IO_CURRENT bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS UNCOMPRESS_TOTAL bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS UNCOMPRESS_CURRENT bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_CHANGED_PAGES space_id int NULL NULL NULL NULL int(11) unsigned +NULL information_schema INNODB_CHANGED_PAGES page_id int NULL NULL NULL NULL int(11) unsigned +NULL information_schema INNODB_CHANGED_PAGES start_lsn bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_CHANGED_PAGES end_lsn bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_CMP page_size int NULL NULL NULL NULL int(5) NULL information_schema INNODB_CMP compress_ops int NULL NULL NULL NULL int(11) NULL information_schema INNODB_CMP compress_ops_ok int NULL NULL NULL NULL int(11) @@ -890,7 +1033,3 @@ NULL information_schema TRIGGERS CREATED datetime NULL NULL NULL NULL datetime 3.0000 information_schema VIEWS CHARACTER_SET_CLIENT varchar 32 96 utf8 utf8_general_ci varchar(32) 3.0000 information_schema VIEWS COLLATION_CONNECTION varchar 32 96 utf8 utf8_general_ci varchar(32) 3.0000 information_schema XTRADB_ADMIN_COMMAND result_message varchar 1024 3072 utf8 utf8_general_ci varchar(1024) -3.0000 information_schema XTRADB_ENHANCEMENTS name varchar 255 765 utf8 utf8_general_ci varchar(255) -3.0000 information_schema XTRADB_ENHANCEMENTS description varchar 255 765 utf8 utf8_general_ci varchar(255) -3.0000 information_schema XTRADB_ENHANCEMENTS comment varchar 100 300 utf8 utf8_general_ci varchar(100) -3.0000 information_schema XTRADB_ENHANCEMENTS link varchar 255 765 utf8 utf8_general_ci varchar(255) diff --git a/mysql-test/suite/funcs_1/r/is_tables_is.result b/mysql-test/suite/funcs_1/r/is_tables_is.result index 4b2b3bff752..4b3d1152b46 100644 --- a/mysql-test/suite/funcs_1/r/is_tables_is.result +++ b/mysql-test/suite/funcs_1/r/is_tables_is.result @@ -245,6 +245,52 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_PAGE +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_PAGE_LRU +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema TABLE_NAME INNODB_BUFFER_POOL_PAGES TABLE_TYPE SYSTEM VIEW ENGINE MEMORY @@ -314,6 +360,52 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_POOL_STATS +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema +TABLE_NAME INNODB_CHANGED_PAGES +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema TABLE_NAME INNODB_CMP TABLE_TYPE SYSTEM VIEW ENGINE MEMORY @@ -1048,29 +1140,6 @@ CREATE_OPTIONS #CO# TABLE_COMMENT #TC# user_comment Separator ----------------------------------------------------- -TABLE_CATALOG NULL -TABLE_SCHEMA information_schema -TABLE_NAME XTRADB_ENHANCEMENTS -TABLE_TYPE SYSTEM VIEW -ENGINE MEMORY -VERSION 10 -ROW_FORMAT Fixed -TABLE_ROWS #TBLR# -AVG_ROW_LENGTH #ARL# -DATA_LENGTH #DL# -MAX_DATA_LENGTH #MDL# -INDEX_LENGTH #IL# -DATA_FREE #DF# -AUTO_INCREMENT NULL -CREATE_TIME #CRT# -UPDATE_TIME #UT# -CHECK_TIME #CT# -TABLE_COLLATION utf8_general_ci -CHECKSUM NULL -CREATE_OPTIONS #CO# -TABLE_COMMENT #TC# -user_comment -Separator ----------------------------------------------------- DROP USER testuser1@localhost; CREATE USER testuser1@localhost; GRANT SELECT ON test1.* TO testuser1@localhost; @@ -1320,6 +1389,52 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_PAGE +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_PAGE_LRU +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema TABLE_NAME INNODB_BUFFER_POOL_PAGES TABLE_TYPE SYSTEM VIEW ENGINE MEMORY @@ -1389,6 +1504,52 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_POOL_STATS +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema +TABLE_NAME INNODB_CHANGED_PAGES +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema TABLE_NAME INNODB_CMP TABLE_TYPE SYSTEM VIEW ENGINE MEMORY @@ -2123,29 +2284,6 @@ CREATE_OPTIONS #CO# TABLE_COMMENT #TC# user_comment Separator ----------------------------------------------------- -TABLE_CATALOG NULL -TABLE_SCHEMA information_schema -TABLE_NAME XTRADB_ENHANCEMENTS -TABLE_TYPE SYSTEM VIEW -ENGINE MEMORY -VERSION 10 -ROW_FORMAT Fixed -TABLE_ROWS #TBLR# -AVG_ROW_LENGTH #ARL# -DATA_LENGTH #DL# -MAX_DATA_LENGTH #MDL# -INDEX_LENGTH #IL# -DATA_FREE #DF# -AUTO_INCREMENT NULL -CREATE_TIME #CRT# -UPDATE_TIME #UT# -CHECK_TIME #CT# -TABLE_COLLATION utf8_general_ci -CHECKSUM NULL -CREATE_OPTIONS #CO# -TABLE_COMMENT #TC# -user_comment -Separator ----------------------------------------------------- # Switch to connection default and close connection testuser1 DROP USER testuser1@localhost; DROP DATABASE test1; diff --git a/mysql-test/t/openssl_1.test b/mysql-test/t/openssl_1.test index 2680af1de6c..74e2bd65717 100644 --- a/mysql-test/t/openssl_1.test +++ b/mysql-test/t/openssl_1.test @@ -75,7 +75,7 @@ drop table t1; --exec echo "this query should not execute;" > $MYSQLTEST_VARDIR/tmp/test.sql # Handle that openssl gives different error messages from YaSSL. #--replace_regex /error:00000005:lib\(0\):func\(0\):DH lib/ASN: bad other signature confirmation/ ---replace_regex /2026 SSL error.*/2026 SSL connection error: xxxx/ +--replace_regex /2026 SSL .*error.*/2026 SSL connection error: xxxx/ --error 1 --exec $MYSQL_TEST --ssl-ca=$MYSQL_TEST_DIR/std_data/untrusted-cacert.pem --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 --echo @@ -85,7 +85,7 @@ drop table t1; # a blank ca # #--replace_regex /error:00000005:lib\(0\):func\(0\):DH lib/ASN: bad other signature confirmation/ ---replace_regex /2026 SSL error.*/2026 SSL connection error: xxxx/ +--replace_regex /2026 SSL .*error.*/2026 SSL connection error: xxxx/ --error 1 --exec $MYSQL_TEST --ssl-ca= --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 --echo @@ -95,7 +95,7 @@ drop table t1; # a nonexistent ca file # #--replace_regex /error:00000005:lib\(0\):func\(0\):DH lib/ASN: bad other signature confirmation/ ---replace_regex /2026 SSL error.*/2026 SSL connection error: xxxx/ +--replace_regex /2026 SSL .*error.*/2026 SSL connection error: xxxx/ --error 1 --exec $MYSQL_TEST --ssl-ca=nonexisting_file.pem --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 --echo From e08f4f16303c234c82c397414c24c931b679f84a Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Sun, 11 Nov 2012 11:47:44 -0800 Subject: [PATCH 27/60] Fixed bug mdev-3851. Any ref access to a table by a key fully extended by the components of the primary key should be actually an eq_ref access. --- include/my_base.h | 3 +++ mysql-test/r/innodb_ext_key.result | 20 ++++++++++++++++++++ mysql-test/t/innodb_ext_key.test | 21 +++++++++++++++++++++ sql/sql_select.cc | 22 ++++++++++++++-------- sql/table.cc | 5 +++-- 5 files changed, 61 insertions(+), 10 deletions(-) diff --git a/include/my_base.h b/include/my_base.h index 905e4535360..e072bb7e2b1 100644 --- a/include/my_base.h +++ b/include/my_base.h @@ -282,6 +282,9 @@ enum ha_base_keytype { #define HA_USES_BLOCK_SIZE ((uint) 32768) #define HA_SORT_ALLOWS_SAME 512 /* Intern bit when sorting records */ +/* This flag can be used only in KEY::ext_key_flags */ +#define HA_EXT_NOSAME 131072 + /* These flags can be added to key-seg-flag */ #define HA_SPACE_PACK 1 /* Pack space in key-seg */ diff --git a/mysql-test/r/innodb_ext_key.result b/mysql-test/r/innodb_ext_key.result index d2fb29a023c..0b7b042a0b2 100644 --- a/mysql-test/r/innodb_ext_key.result +++ b/mysql-test/r/innodb_ext_key.result @@ -613,6 +613,26 @@ Handler_read_prev 0 Handler_read_rnd 0 Handler_read_rnd_deleted 0 Handler_read_rnd_next 0 +# +# Bug mdev-3851: ref access used instead of expected eq_ref access +# when extended_keys=on +# +create table t0 (a int); +insert into t0 values (1), (2), (3), (4), (5); +create index i_p_size on part(p_size); +set optimizer_switch='extended_keys=on'; +explain +select * from t0, part ignore index (primary) +where p_partkey=t0.a and p_size=1; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t0 ALL NULL NULL NULL NULL 5 Using where +1 SIMPLE part eq_ref i_p_size i_p_size 9 const,dbt3_s001.t0.a 1 +select * from t0, part ignore index (primary) +where p_partkey=t0.a and p_size=1; +a p_partkey p_name p_mfgr p_brand p_type p_size p_container p_retailprice p_comment +2 2 blush rosy metallic lemon navajo Manufacturer#1 Brand#13 LARGE BRUSHED BRASS 1 LG CASE 902 final platelets hang f +drop table t0; +drop index i_p_size on part; DROP DATABASE dbt3_s001; use test; # diff --git a/mysql-test/t/innodb_ext_key.test b/mysql-test/t/innodb_ext_key.test index 58d692f720d..f5b5df527a3 100644 --- a/mysql-test/t/innodb_ext_key.test +++ b/mysql-test/t/innodb_ext_key.test @@ -287,6 +287,27 @@ select o_orderkey, p_partkey and o_orderkey=l_orderkey and p_partkey=l_partkey; show status like 'handler_read%'; +--echo # +--echo # Bug mdev-3851: ref access used instead of expected eq_ref access +--echo # when extended_keys=on +--echo # + +create table t0 (a int); +insert into t0 values (1), (2), (3), (4), (5); +create index i_p_size on part(p_size); + +set optimizer_switch='extended_keys=on'; + +explain +select * from t0, part ignore index (primary) + where p_partkey=t0.a and p_size=1; + +select * from t0, part ignore index (primary) + where p_partkey=t0.a and p_size=1; + +drop table t0; +drop index i_p_size on part; + DROP DATABASE dbt3_s001; use test; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index b6b1259ca49..30f84142c0c 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -5378,7 +5378,8 @@ best_access_path(JOIN *join, !ref_or_null_part) { /* use eq key */ max_key_part= (uint) ~0; - if ((key_flags & (HA_NOSAME | HA_NULL_PART_KEY)) == HA_NOSAME) + if ((key_flags & (HA_NOSAME | HA_NULL_PART_KEY)) == HA_NOSAME || + test(key_flags & HA_EXT_NOSAME)) { tmp = prev_record_reads(join->positions, idx, found_ref); records=1.0; @@ -7966,18 +7967,23 @@ static bool create_ref_for_key(JOIN *join, JOIN_TAB *j, *ref_key=0; // end_marker if (j->type == JT_FT) DBUG_RETURN(0); + ulong key_flags= j->table->actual_key_flags(keyinfo); if (j->type == JT_CONST) j->table->const_table= 1; - else if (((j->table->actual_key_flags(keyinfo) & - (HA_NOSAME | HA_NULL_PART_KEY)) - != HA_NOSAME) || + else if (((key_flags & (HA_NOSAME | HA_NULL_PART_KEY))!= HA_NOSAME) || keyparts != j->table->actual_n_key_parts(keyinfo) || null_ref_key) { - /* Must read with repeat */ - j->type= null_ref_key ? JT_REF_OR_NULL : JT_REF; - j->ref.null_ref_key= null_ref_key; - j->ref.null_ref_part= null_ref_part; + if (test(key_flags & HA_EXT_NOSAME) && keyparts == keyinfo->ext_key_parts && + !null_ref_key) + j->type= JT_EQ_REF; + else + { + /* Must read with repeat */ + j->type= null_ref_key ? JT_REF_OR_NULL : JT_REF; + j->ref.null_ref_key= null_ref_key; + j->ref.null_ref_part= null_ref_part; + } } else if (keyuse_uses_no_tables) { diff --git a/sql/table.cc b/sql/table.cc index c0e27b9a962..9f94054a1e6 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -981,7 +981,6 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, keyinfo->ext_key_part_map= 0; if (share->use_ext_keys && i) { - keyinfo->ext_key_flags= keyinfo->flags | HA_NOSAME; keyinfo->ext_key_part_map= 0; for (j= 0; j < first_key_parts && keyinfo->ext_key_parts < MAX_REF_PARTS; @@ -1002,7 +1001,9 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, keyinfo->ext_key_parts++; keyinfo->ext_key_part_map|= 1 << j; } - } + } + if (j == first_key_parts) + keyinfo->ext_key_flags= keyinfo->flags | HA_NOSAME | HA_EXT_NOSAME; } share->ext_key_parts+= keyinfo->ext_key_parts; } From 4d442610524154c767f290f327832538ea1d04a4 Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Mon, 19 Nov 2012 19:29:27 -0800 Subject: [PATCH 28/60] Fixed bug mdev-622 (LP bug #1002508). Back-ported the fix and the test case for bug 13528826 from mysql-5.6. --- mysql-test/r/order_by.result | 27 +++++++++++++++++++++++ mysql-test/r/subselect.result | 4 ++-- mysql-test/r/subselect_no_mat.result | 4 ++-- mysql-test/r/subselect_no_opts.result | 4 ++-- mysql-test/r/subselect_no_scache.result | 4 ++-- mysql-test/r/subselect_no_semijoin.result | 4 ++-- mysql-test/t/order_by.test | 24 ++++++++++++++++++++ sql/sql_select.cc | 5 +++-- 8 files changed, 64 insertions(+), 12 deletions(-) diff --git a/mysql-test/r/order_by.result b/mysql-test/r/order_by.result index 7aa286962c9..94e7d5e757a 100644 --- a/mysql-test/r/order_by.result +++ b/mysql-test/r/order_by.result @@ -1993,4 +1993,31 @@ Handler_read_rnd 1 Handler_read_rnd_deleted 0 Handler_read_rnd_next 250 drop table t0, t1; +# +# LP bug #1002508 : the number of expected rows to be examined is off +# (bug #13528826) +# +CREATE TABLE t1(a int PRIMARY KEY, b int) ENGINE=myisam; +INSERT INTO t1 VALUES +(5, 10), (2, 70), (7, 80), (6, 20), (1, 50), (9, 40), (8, 30), (3, 60); +CREATE TABLE t2 (p int, a int, INDEX i_a(a)) ENGINE=myisam; +INSERT INTO t2 VALUES +(103, 7), (109, 3), (102, 3), (108, 1), (106, 3), +(107, 7), (105, 1), (101, 3), (100, 7), (110, 1); +EXPLAIN +SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.a=t2.a ORDER BY t1.a; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL PRIMARY 4 NULL 8 Using index +1 SIMPLE t2 ref i_a i_a 5 test.t1.a 2 Using index +EXPLAIN +SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.a=t2.a ORDER BY t1.a LIMIT 8; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL PRIMARY 4 NULL 4 Using index +1 SIMPLE t2 ref i_a i_a 5 test.t1.a 2 Using index +EXPLAIN +SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.a=t2.a ORDER BY t1.a LIMIT 100; +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL PRIMARY 4 NULL 8 Using index +1 SIMPLE t2 ref i_a i_a 5 test.t1.a 2 Using index +DROP TABLE t1,t2; End of 5.5 tests diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index a4bad836d1f..3134096b8c3 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -6860,7 +6860,7 @@ INSERT INTO t2 VALUES (45),(17),(20); EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE -2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index +2 SUBQUERY t1 index a a 5 NULL 2 Using where; Using index 2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index DROP TABLE t1,t2; # @@ -6894,6 +6894,6 @@ INSERT INTO t2 VALUES (45),(17),(20); EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE -2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index +2 SUBQUERY t1 index a a 5 NULL 2 Using where; Using index 2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index DROP TABLE t1,t2; diff --git a/mysql-test/r/subselect_no_mat.result b/mysql-test/r/subselect_no_mat.result index cb9847a0d99..43d71a08ec4 100644 --- a/mysql-test/r/subselect_no_mat.result +++ b/mysql-test/r/subselect_no_mat.result @@ -6858,7 +6858,7 @@ INSERT INTO t2 VALUES (45),(17),(20); EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE -2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index +2 SUBQUERY t1 index a a 5 NULL 2 Using where; Using index 2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index DROP TABLE t1,t2; # @@ -6891,7 +6891,7 @@ INSERT INTO t2 VALUES (45),(17),(20); EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE -2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index +2 SUBQUERY t1 index a a 5 NULL 2 Using where; Using index 2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index DROP TABLE t1,t2; set optimizer_switch=default; diff --git a/mysql-test/r/subselect_no_opts.result b/mysql-test/r/subselect_no_opts.result index 63eeb816b38..879e429d674 100644 --- a/mysql-test/r/subselect_no_opts.result +++ b/mysql-test/r/subselect_no_opts.result @@ -6855,7 +6855,7 @@ INSERT INTO t2 VALUES (45),(17),(20); EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE -2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index +2 SUBQUERY t1 index a a 5 NULL 2 Using where; Using index 2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index DROP TABLE t1,t2; # @@ -6889,7 +6889,7 @@ INSERT INTO t2 VALUES (45),(17),(20); EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE -2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index +2 SUBQUERY t1 index a a 5 NULL 2 Using where; Using index 2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index DROP TABLE t1,t2; set @optimizer_switch_for_subselect_test=null; diff --git a/mysql-test/r/subselect_no_scache.result b/mysql-test/r/subselect_no_scache.result index 6fd21f8d0b0..bf141948765 100644 --- a/mysql-test/r/subselect_no_scache.result +++ b/mysql-test/r/subselect_no_scache.result @@ -6866,7 +6866,7 @@ INSERT INTO t2 VALUES (45),(17),(20); EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE -2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index +2 SUBQUERY t1 index a a 5 NULL 2 Using where; Using index 2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index DROP TABLE t1,t2; # @@ -6900,7 +6900,7 @@ INSERT INTO t2 VALUES (45),(17),(20); EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE -2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index +2 SUBQUERY t1 index a a 5 NULL 2 Using where; Using index 2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index DROP TABLE t1,t2; set optimizer_switch=default; diff --git a/mysql-test/r/subselect_no_semijoin.result b/mysql-test/r/subselect_no_semijoin.result index b924a18ca8f..7c692e0898d 100644 --- a/mysql-test/r/subselect_no_semijoin.result +++ b/mysql-test/r/subselect_no_semijoin.result @@ -6855,7 +6855,7 @@ INSERT INTO t2 VALUES (45),(17),(20); EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE -2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index +2 SUBQUERY t1 index a a 5 NULL 2 Using where; Using index 2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index DROP TABLE t1,t2; # @@ -6889,7 +6889,7 @@ INSERT INTO t2 VALUES (45),(17),(20); EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE -2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index +2 SUBQUERY t1 index a a 5 NULL 2 Using where; Using index 2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index DROP TABLE t1,t2; set @optimizer_switch_for_subselect_test=null; diff --git a/mysql-test/t/order_by.test b/mysql-test/t/order_by.test index 52c801e99f7..3e20d22d726 100644 --- a/mysql-test/t/order_by.test +++ b/mysql-test/t/order_by.test @@ -1690,6 +1690,30 @@ show status like '%Handler_read%'; drop table t0, t1; +--echo # +--echo # LP bug #1002508 : the number of expected rows to be examined is off +--echo # (bug #13528826) +--echo # + +CREATE TABLE t1(a int PRIMARY KEY, b int) ENGINE=myisam; +INSERT INTO t1 VALUES + (5, 10), (2, 70), (7, 80), (6, 20), (1, 50), (9, 40), (8, 30), (3, 60); +CREATE TABLE t2 (p int, a int, INDEX i_a(a)) ENGINE=myisam; +INSERT INTO t2 VALUES + (103, 7), (109, 3), (102, 3), (108, 1), (106, 3), + (107, 7), (105, 1), (101, 3), (100, 7), (110, 1); + +EXPLAIN +SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.a=t2.a ORDER BY t1.a; + +EXPLAIN +SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.a=t2.a ORDER BY t1.a LIMIT 8; + +EXPLAIN +SELECT t1.a FROM t1 LEFT JOIN t2 ON t1.a=t2.a ORDER BY t1.a LIMIT 100; + +DROP TABLE t1,t2; + --echo End of 5.5 tests diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 30f84142c0c..86742c6ac4a 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -22831,6 +22831,7 @@ test_if_cheaper_ordering(const JOIN_TAB *tab, ORDER *order, TABLE *table, ha_rows table_records= table->file->stats.records; bool group= join && join->group && order == join->group_list; ha_rows ref_key_quick_rows= HA_POS_ERROR; + const bool has_limit= (select_limit_arg != HA_POS_ERROR); /* If not used with LIMIT, only use keys if the whole query can be @@ -22962,7 +22963,7 @@ test_if_cheaper_ordering(const JOIN_TAB *tab, ORDER *order, TABLE *table, be included into the result set. */ if (select_limit > table_records/rec_per_key) - select_limit= table_records; + select_limit= table_records; else select_limit= (ha_rows) (select_limit*rec_per_key); } /* group */ @@ -23044,7 +23045,7 @@ test_if_cheaper_ordering(const JOIN_TAB *tab, ORDER *order, TABLE *table, *new_key= best_key; *new_key_direction= best_key_direction; - *new_select_limit= best_select_limit; + *new_select_limit= has_limit ? best_select_limit : table_records; if (new_used_key_parts != NULL) *new_used_key_parts= best_key_parts; From a52270d7acdbe6f373f089393a96573b874eb381 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Tue, 20 Nov 2012 15:24:39 +0100 Subject: [PATCH 29/60] MDEV-3868 : windows client compilation issues Avoid inclusion of Windows headers via client API headers, since it traditionally lead to different subtle compilation problems. Instead define my_socket in a way that is compatible with SOCKET (unsigned int in 32 bit , unsigned longlong in 64 bit) --- include/mysql.h | 11 +++++------ include/mysql_com.h | 3 --- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/include/mysql.h b/include/mysql.h index 1fc164f62b2..fa62026b44a 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -47,9 +47,6 @@ extern "C" { #ifndef MYSQL_ABI_CHECK #include #endif -#ifdef __LCC__ -#include /* For windows */ -#endif typedef char my_bool; #if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__) #define __WIN__ @@ -61,11 +58,13 @@ typedef char my_bool; #endif #ifndef my_socket_defined -#ifdef __WIN__ -#define my_socket SOCKET +#if defined (_WIN64) +#define my_socket unsigned long long +#elif defined (_WIN32) +#define my_socket unsigned int #else typedef int my_socket; -#endif /* __WIN__ */ +#endif /* _WIN64 */ #endif /* my_socket_defined */ #endif /* _global_h */ diff --git a/include/mysql_com.h b/include/mysql_com.h index 0988d20f97f..6e8a2b23de0 100644 --- a/include/mysql_com.h +++ b/include/mysql_com.h @@ -57,9 +57,6 @@ #define LOCAL_HOST "localhost" #define LOCAL_HOST_NAMEDPIPE "." -#ifdef _WIN32 -#include -#endif #if defined(__WIN__) && !defined( _CUSTOMCONFIG_) #define MYSQL_NAMEDPIPE "MySQL" From 06365bf841eab74a1cb4b17e836ff0c372a0dd79 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 7 Nov 2012 19:07:47 +0100 Subject: [PATCH 30/60] rename plugin null_audit -> audit_null (to match status variable names) create audit_null.test --- mysql-test/suite/plugins/r/audit_null.result | 18 ++++++++++++++++++ mysql-test/suite/plugins/t/audit_null.test | 18 ++++++++++++++++++ plugin/audit_null/audit_null.c | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 mysql-test/suite/plugins/r/audit_null.result create mode 100644 mysql-test/suite/plugins/t/audit_null.test diff --git a/mysql-test/suite/plugins/r/audit_null.result b/mysql-test/suite/plugins/r/audit_null.result new file mode 100644 index 00000000000..6cb6356ce98 --- /dev/null +++ b/mysql-test/suite/plugins/r/audit_null.result @@ -0,0 +1,18 @@ +set @old_global_general_log=@@global.general_log; +set global general_log=OFF; +install plugin audit_null soname 'adt_null'; +select 1; +1 +1 +select foobar; +ERROR 42S22: Unknown column 'foobar' in 'field list' +show status like 'audit_null%'; +Variable_name Value +Audit_null_called 6 +Audit_null_general_error 1 +Audit_null_general_log 0 +Audit_null_general_result 2 +uninstall plugin audit_null; +Warnings: +Warning 1620 Plugin is busy and will be uninstalled on shutdown +set global general_log=@old_global_general_log; diff --git a/mysql-test/suite/plugins/t/audit_null.test b/mysql-test/suite/plugins/t/audit_null.test new file mode 100644 index 00000000000..52bbc0d08e4 --- /dev/null +++ b/mysql-test/suite/plugins/t/audit_null.test @@ -0,0 +1,18 @@ +if (!$ADT_NULL_SO) { + skip No NULL_AUDIT plugin; +} + +set @old_global_general_log=@@global.general_log; +set global general_log=OFF; + +install plugin audit_null soname 'adt_null'; + +select 1; +--error 1054 +select foobar; +show status like 'audit_null%'; + +uninstall plugin audit_null; + +set global general_log=@old_global_general_log; + diff --git a/plugin/audit_null/audit_null.c b/plugin/audit_null/audit_null.c index 469e5ae494c..be0c70fbd35 100644 --- a/plugin/audit_null/audit_null.c +++ b/plugin/audit_null/audit_null.c @@ -145,7 +145,7 @@ mysql_declare_plugin(audit_null) { MYSQL_AUDIT_PLUGIN, /* type */ &audit_null_descriptor, /* descriptor */ - "NULL_AUDIT", /* name */ + "AUDIT_NULL", /* name */ "Oracle Corp", /* author */ "Simple NULL Audit", /* description */ PLUGIN_LICENSE_GPL, From d473199744812ee4af52edfa4b85610d834802ca Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 8 Nov 2012 14:17:53 +0100 Subject: [PATCH 31/60] MDEV-258 audit plugin only see queries if general log is enabled --- mysql-test/suite/plugins/r/audit_null.result | 4 +-- mysql-test/suite/plugins/t/audit_null.test | 3 ++ sql/log.cc | 30 +++++++++----------- sql/sql_audit.h | 13 +++++---- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/mysql-test/suite/plugins/r/audit_null.result b/mysql-test/suite/plugins/r/audit_null.result index 6cb6356ce98..14f5708f417 100644 --- a/mysql-test/suite/plugins/r/audit_null.result +++ b/mysql-test/suite/plugins/r/audit_null.result @@ -8,9 +8,9 @@ select foobar; ERROR 42S22: Unknown column 'foobar' in 'field list' show status like 'audit_null%'; Variable_name Value -Audit_null_called 6 +Audit_null_called 9 Audit_null_general_error 1 -Audit_null_general_log 0 +Audit_null_general_log 3 Audit_null_general_result 2 uninstall plugin audit_null; Warnings: diff --git a/mysql-test/suite/plugins/t/audit_null.test b/mysql-test/suite/plugins/t/audit_null.test index 52bbc0d08e4..c2dec9eca54 100644 --- a/mysql-test/suite/plugins/t/audit_null.test +++ b/mysql-test/suite/plugins/t/audit_null.test @@ -1,3 +1,4 @@ + if (!$ADT_NULL_SO) { skip No NULL_AUDIT plugin; } @@ -5,6 +6,7 @@ if (!$ADT_NULL_SO) { set @old_global_general_log=@@global.general_log; set global general_log=OFF; +--disable_ps_protocol install plugin audit_null soname 'adt_null'; select 1; @@ -13,6 +15,7 @@ select foobar; show status like 'audit_null%'; uninstall plugin audit_null; +--enable_ps_protocol set global general_log=@old_global_general_log; diff --git a/sql/log.cc b/sql/log.cc index effe0e36705..b583c6dfac4 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1279,12 +1279,6 @@ bool LOGGER::general_log_write(THD *thd, enum enum_server_command command, DBUG_ASSERT(thd); - lock_shared(); - if (!opt_log) - { - unlock(); - return 0; - } user_host_len= make_user_name(thd, user_host_buff); current_time= my_hrtime(); @@ -1295,15 +1289,19 @@ bool LOGGER::general_log_write(THD *thd, enum enum_server_command command, command_name[(uint) command].length, query, query_length); - while (*current_handler) - error|= (*current_handler++)-> - log_general(thd, current_time, user_host_buff, - user_host_len, thd->thread_id, - command_name[(uint) command].str, - command_name[(uint) command].length, - query, query_length, - thd->variables.character_set_client) || error; - unlock(); + if (opt_log && log_command(thd, command)) + { + lock_shared(); + while (*current_handler) + error|= (*current_handler++)-> + log_general(thd, current_time, user_host_buff, + user_host_len, thd->thread_id, + command_name[(uint) command].str, + command_name[(uint) command].length, + query, query_length, + thd->variables.character_set_client) || error; + unlock(); + } return error; } @@ -5333,7 +5331,7 @@ bool general_log_write(THD *thd, enum enum_server_command command, const char *query, uint query_length) { /* Write the message to the log if we want to log this king of commands */ - if (logger.log_command(thd, command)) + if (logger.log_command(thd, command) || mysql_audit_general_enabled()) return logger.general_log_write(thd, command, query, query_length); return FALSE; diff --git a/sql/sql_audit.h b/sql/sql_audit.h index 51c695d091d..02a63852955 100644 --- a/sql/sql_audit.h +++ b/sql/sql_audit.h @@ -53,6 +53,11 @@ static inline uint make_user_name(THD *thd, char *buf) sctx->ip ? sctx->ip : "", "]", NullS) - buf; } +static inline bool mysql_audit_general_enabled() +{ + return mysql_global_audit_mask[0] & MYSQL_AUDIT_GENERAL_CLASSMASK; +} + /** Call audit plugins of GENERAL audit class, MYSQL_AUDIT_GENERAL_LOG subtype. @@ -72,8 +77,7 @@ void mysql_audit_general_log(THD *thd, time_t time, const char *cmd, uint cmdlen, const char *query, uint querylen) { -#ifndef EMBEDDED_LIBRARY - if (mysql_global_audit_mask[0] & MYSQL_AUDIT_GENERAL_CLASSMASK) + if (mysql_audit_general_enabled()) { CHARSET_INFO *clientcs= thd ? thd->variables.character_set_client : global_system_variables.character_set_client; @@ -82,7 +86,6 @@ void mysql_audit_general_log(THD *thd, time_t time, 0, time, user, userlen, cmd, cmdlen, query, querylen, clientcs, 0); } -#endif } /** @@ -101,8 +104,7 @@ static inline void mysql_audit_general(THD *thd, uint event_subtype, int error_code, const char *msg) { -#ifndef EMBEDDED_LIBRARY - if (mysql_global_audit_mask[0] & MYSQL_AUDIT_GENERAL_CLASSMASK) + if (mysql_audit_general_enabled()) { time_t time= my_time(0); uint msglen= msg ? strlen(msg) : 0; @@ -130,7 +132,6 @@ void mysql_audit_general(THD *thd, uint event_subtype, error_code, time, user, userlen, msg, msglen, query.str(), query.length(), query.charset(), rows); } -#endif } #define MYSQL_AUDIT_NOTIFY_CONNECTION_CONNECT(thd) mysql_audit_notify(\ From 53578613e96bb471446e226dbab61c2152232f56 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 8 Nov 2012 16:49:07 +0100 Subject: [PATCH 32/60] MDEV-259 audit plugin does not see sub-statements --- mysql-test/suite/plugins/r/audit_null.result | 11 +++++++++++ mysql-test/suite/plugins/t/audit_null.test | 7 +++++++ sql/sp_head.cc | 3 +-- sql/sql_audit.h | 15 +++++++++------ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/mysql-test/suite/plugins/r/audit_null.result b/mysql-test/suite/plugins/r/audit_null.result index 14f5708f417..4cf648510e6 100644 --- a/mysql-test/suite/plugins/r/audit_null.result +++ b/mysql-test/suite/plugins/r/audit_null.result @@ -12,7 +12,18 @@ Audit_null_called 9 Audit_null_general_error 1 Audit_null_general_log 3 Audit_null_general_result 2 +create procedure au1(x char(16)) select concat("test1", x); +call au1("-12"); +concat("test1", x) +test1-12 +show status like 'audit_null%'; +Variable_name Value +Audit_null_called 19 +Audit_null_general_error 1 +Audit_null_general_log 7 +Audit_null_general_result 5 uninstall plugin audit_null; Warnings: Warning 1620 Plugin is busy and will be uninstalled on shutdown +drop procedure au1; set global general_log=@old_global_general_log; diff --git a/mysql-test/suite/plugins/t/audit_null.test b/mysql-test/suite/plugins/t/audit_null.test index c2dec9eca54..da86e602c6b 100644 --- a/mysql-test/suite/plugins/t/audit_null.test +++ b/mysql-test/suite/plugins/t/audit_null.test @@ -12,10 +12,17 @@ install plugin audit_null soname 'adt_null'; select 1; --error 1054 select foobar; + +show status like 'audit_null%'; + +create procedure au1(x char(16)) select concat("test1", x); +call au1("-12"); + show status like 'audit_null%'; uninstall plugin audit_null; --enable_ps_protocol +drop procedure au1; set global general_log=@old_global_general_log; diff --git a/sql/sp_head.cc b/sql/sp_head.cc index f3ba0073c69..0d92a68a2d4 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -3113,8 +3113,7 @@ sp_instr_stmt::execute(THD *thd, uint *nextp) (the order of query cache and subst_spvars calls is irrelevant because queries with SP vars can't be cached) */ - if (unlikely((thd->variables.option_bits & OPTION_LOG_OFF)==0)) - general_log_write(thd, COM_QUERY, thd->query(), thd->query_length()); + general_log_write(thd, COM_QUERY, thd->query(), thd->query_length()); if (query_cache_send_result_to_client(thd, thd->query(), thd->query_length()) <= 0) diff --git a/sql/sql_audit.h b/sql/sql_audit.h index 02a63852955..b2ce31f1d26 100644 --- a/sql/sql_audit.h +++ b/sql/sql_audit.h @@ -37,8 +37,16 @@ extern void mysql_audit_acquire_plugins(THD *thd, uint event_class); #ifndef EMBEDDED_LIBRARY extern void mysql_audit_notify(THD *thd, uint event_class, uint event_subtype, ...); + +static inline bool mysql_audit_general_enabled() +{ + return mysql_global_audit_mask[0] & MYSQL_AUDIT_GENERAL_CLASSMASK; +} + #else -#define mysql_audit_notify(...) +static inline void mysql_audit_notify(THD *thd, uint event_class, + uint event_subtype, ...) { } +#define mysql_audit_general_enabled() 0 #endif extern void mysql_audit_release(THD *thd); @@ -53,11 +61,6 @@ static inline uint make_user_name(THD *thd, char *buf) sctx->ip ? sctx->ip : "", "]", NullS) - buf; } -static inline bool mysql_audit_general_enabled() -{ - return mysql_global_audit_mask[0] & MYSQL_AUDIT_GENERAL_CLASSMASK; -} - /** Call audit plugins of GENERAL audit class, MYSQL_AUDIT_GENERAL_LOG subtype. From bf66185ee7f852ec681061b75bc787e025089843 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Thu, 8 Nov 2012 23:18:56 +0100 Subject: [PATCH 33/60] Fix mis-merge. --- CMakeLists.txt | 125 ------------------------------------------------- 1 file changed, 125 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d0a5cf03697..57e05137f7a 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -403,129 +403,4 @@ IF("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" STREQU SET(CPACK_MONOLITHIC_INSTALL 1 CACHE INTERNAL "") ENDIF() -IF(EXISTS ${CMAKE_SOURCE_DIR}/internal/CMakeLists.txt) - ADD_SUBDIRECTORY(internal) -ENDIF() - -# Set up the installer -SET(CPACK_PACKAGE_NAME "MariaDB") -STRING(REPLACE "-MariaDB" "" CPACK_PACKAGE_VERSION ${VERSION}) -SET(CPACK_PACKAGE_VENDOR "Monty Program AB http://www.montyprogram.com") -SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MariaDB") -SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/COPYING) -SET(CPACK_GENERATOR NSIS) - -# Use our own NSIS template -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/win/cmake" ${CMAKE_MODULE_PATH}) - -# Installer components and grouping -SET(CPACK_COMPONENT_GROUP_SERVER_DESCRIPTION "The files necessary for running the MariaDB server.") -SET(CPACK_COMPONENT_GROUP_DEVELOPMENT_DESCRIPTION "Files used in development on the MariaDB server.") -SET(CPACK_ALL_INSTALL_TYPES Normal Development) -SET(CPACK_COMPONENT_RUNTIME_DISPLAY_NAME "MariaDB server") -SET(CPACK_COMPONENT_RUNTIME_DESCRIPTION "The server itself. You want to install this one.") -SET(CPACK_COMPONENT_RUNTIME_GROUP "Server") -SET(CPACK_COMPONENT_RUNTIME_INSTALL_TYPES Normal Development) -SET(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "Development headers") -SET(CPACK_COMPONENT_HEADERS_DESCRIPTION "Header files for development on MariaDB.") -SET(CPACK_COMPONENT_HEADERS_DEPENDS runtime) -SET(CPACK_COMPONENT_HEADERS_GROUP "Development") -SET(CPACK_COMPONENT_HEADERS_INSTALL_TYPES Development) -SET(CPACK_COMPONENT_EMBEDDED_DISPLAY_NAME "Embedded") -SET(CPACK_COMPONENT_EMBEDDED_DESCRIPTION "Files for embedding MariaDB in other projects.") -SET(CPACK_COMPONENT_EMBEDDED_DEPENDS headers) -SET(CPACK_COMPONENT_EMBEDDED_GROUP "Development") -SET(CPACK_COMPONENT_EMBEDDED_INSTALL_TYPES Development) -SET(CPACK_COMPONENT_SCRIPTS_DISPLAY_NAME "Server scripts") -SET(CPACK_COMPONENT_SCRIPTS_DESCRIPTION "SQL and Perl scripts to control and modify the server. You need a perl installation for some of these to work.") -SET(CPACK_COMPONENT_SCRIPTS_DEPENDS runtime) -SET(CPACK_COMPONENT_SCRIPTS_GROUP "Server") -SET(CPACK_COMPONENT_SCRIPTS_INSTALL_TYPES Normal Development) -SET(CPACK_COMPONENT_MYSQLTEST_DISPLAY_NAME "MariaDB test suite") -SET(CPACK_COMPONENT_MYSQLTEST_DESCRIPTION "The MariaDB regression test suite.") -SET(CPACK_COMPONENT_MYSQLTEST_DEPENDS runtime) -SET(CPACK_COMPONENT_MYSQLTEST_GROUP "Testing") -SET(CPACK_COMPONENT_MYSQLTEST_INSTALL_TYPES Normal Development) -SET(CPACK_COMPONENT_SQLBENCH_DISPLAY_NAME "SQL Bench") -SET(CPACK_COMPONENT_SQLBENCH_DESCRIPTION "The MariaDB benchmark suite.") -SET(CPACK_COMPONENT_SQLBENCH_DEPENDS runtime) -SET(CPACK_COMPONENT_SQLBENCH_GROUP "Testing") -SET(CPACK_COMPONENT_SQLBENCH_INSTALL_TYPES Normal Development) - -# Add files to the installer -INSTALL(FILES COPYING EXCEPTIONS-CLIENT DESTINATION .) -INSTALL(FILES support-files/my-huge.ini support-files/my-innodb-heavy-4G.ini DESTINATION .) -INSTALL(FILES support-files/my-large.ini support-files/my-medium.ini DESTINATION .) -INSTALL(FILES support-files/my-small.ini DESTINATION .) -INSTALL(FILES Docs/INSTALL-BINARY DESTINATION Docs) -INSTALL(FILES COPYING DESTINATION Docs) -FILE(GLOB headerfiles "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") -INSTALL(FILES ${headerfiles} DESTINATION include COMPONENT headers) -INSTALL(FILES include/mysql/plugin.h DESTINATION include/mysql COMPONENT headers) -INSTALL(FILES libmysql/libmysql.def DESTINATION include COMPONENT headers) - -# Handle the database files -FILE(GLOB datafiles "${CMAKE_CURRENT_SOURCE_DIR}/win/data/mysql/*") -INSTALL(FILES ${datafiles} DESTINATION data/clean/mysql) -INSTALL(FILES win/data/maria_log.00000001 win/data/maria_log_control DESTINATION data/clean) -INSTALL(DIRECTORY win/data/test DESTINATION data/clean) -SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "${CPACK_NSIS_EXTRA_INSTALL_COMMANDS} - IfFileExists '$INSTDIR\\\\data\\\\mysql\\\\db.frm' 0 CopyDatabaseFiles - MessageBox MB_OK 'There are already database files present in the data directory. Clean database files are not written to the directory' - GoTo EndCopyDatabaseFiles - CopyDatabaseFiles: - CopyFiles '$INSTDIR\\\\data\\\\clean\\\\*' '$INSTDIR\\\\data' - EndCopyDatabaseFiles:") -SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "${CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS} - MessageBox MB_OK 'This will not delete the database files in $INSTDIR\\\\data'") - -# Files in the share dir -INSTALL(FILES sql/share/errmsg.txt DESTINATION share COMPONENT runtime) -FILE(GLOB charsets sql/share/charsets/*) -INSTALL(FILES ${charsets} DESTINATION share/charsets COMPONENT runtime) -FILE(GLOB share_dirs sql/share/*/errmsg.sys) -FOREACH(ERRMSGFILE ${share_dirs}) - STRING(REPLACE "//" "/" ERRMSGFILE ${ERRMSGFILE}) # Work around a cmake bug - FILE(RELATIVE_PATH DIRNAME ${PROJECT_SOURCE_DIR}/sql/share ${ERRMSGFILE}) - STRING(REPLACE "/errmsg.sys" "" DIRNAME ${DIRNAME}) - INSTALL(FILES ${ERRMSGFILE} DESTINATION share/${DIRNAME} COMPONENT runtime) -ENDFOREACH(ERRMSGFILE ${share_dirs}) - -# MTR files -FILE(GLOB_RECURSE testfiles mysql-test/*) -FOREACH(testfile ${testfiles}) - FILE(RELATIVE_PATH dirname ${PROJECT_SOURCE_DIR} ${testfile}) - GET_FILENAME_COMPONENT(dirname ${dirname} PATH) - GET_FILENAME_COMPONENT(filename ${testfile} NAME) - GET_FILENAME_COMPONENT(ext ${testfile} EXT) - SET(ok "yes") - IF (NOT "x_${ext}" STREQUAL "x_") - # Test if this is one of the extensions we don't want to install - STRING(TOLOWER ${ext} ext) - IF(${ext} STREQUAL ".dir" OR ${ext} STREQUAL ".vcproj" OR ${ext} STREQUAL ".user" OR ${ext} STREQUAL ".ilk" - OR ${ext} STREQUAL ".idb" OR ${ext} STREQUAL ".map" OR ${ext} STREQUAL ".gcov" - OR ${ext} STREQUAL ".supp" OR ${ext} STREQUAL ".am" OR ${ext} STREQUAL ".stress") - SET(ok "no") - ENDIF() - ENDIF(NOT "x_${ext}" STREQUAL "x_") - IF (${ok} STREQUAL "yes") - # Message("Dir: ${dirname}. File: ${filename}. Ext: ${ext}") - INSTALL(FILES ${testfile} DESTINATION ${dirname} COMPONENT mysqltest) - ENDIF(${ok} STREQUAL "yes") -ENDFOREACH(testfile ${testfiles}) - -# SQL Bench -FILE(GLOB_RECURSE benchfiles sql-bench/*) -FOREACH(testfile ${testfiles}) - FILE(RELATIVE_PATH dirname ${PROJECT_SOURCE_DIR} ${testfile}) - GET_FILENAME_COMPONENT(dirname ${dirname} PATH) - GET_FILENAME_COMPONENT(filename ${testfile} NAME) - IF(NOT ${dirname} STREQUAL "sql-bench" OR ${filename} STREQUAL "README") - INSTALL(FILES ${testfile} DESTINATION ${dirname} COMPONENT sqlbench) - ENDIF() -ENDFOREACH(testfile ${testfiles}) - -INCLUDE(InstallRequiredSystemLibraries) - -# This must always be the last line INCLUDE(CPack) From 67d0e7ef39a06e91471339153e20182b62814b96 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 9 Nov 2012 11:56:27 +0200 Subject: [PATCH 34/60] Removed the dependency on PBXT from tests information_schema_all_engines, and is_columns_is. Made information_schema_all_engines stable by adding "sorted_result". --- .../r/information_schema_all_engines.result | 180 +++--- .../suite/funcs_1/r/is_columns_is.result | 6 - .../funcs_1/r/is_columns_is_embedded.result | 512 ++++++++++++------ mysql-test/suite/funcs_1/t/is_columns_is.test | 2 - .../t/information_schema_all_engines.test | 4 +- 5 files changed, 450 insertions(+), 254 deletions(-) diff --git a/mysql-test/r/information_schema_all_engines.result b/mysql-test/r/information_schema_all_engines.result index d28f274dcfa..33cc5a95a48 100644 --- a/mysql-test/r/information_schema_all_engines.result +++ b/mysql-test/r/information_schema_all_engines.result @@ -13,6 +13,26 @@ FILES GLOBAL_STATUS GLOBAL_VARIABLES INDEX_STATISTICS +INNODB_BUFFER_PAGE +INNODB_BUFFER_PAGE_LRU +INNODB_BUFFER_POOL_PAGES +INNODB_BUFFER_POOL_PAGES_BLOB +INNODB_BUFFER_POOL_PAGES_INDEX +INNODB_BUFFER_POOL_STATS +INNODB_CHANGED_PAGES +INNODB_CMP +INNODB_CMPMEM +INNODB_CMPMEM_RESET +INNODB_CMP_RESET +INNODB_INDEX_STATS +INNODB_LOCKS +INNODB_LOCK_WAITS +INNODB_RSEG +INNODB_SYS_INDEXES +INNODB_SYS_STATS +INNODB_SYS_TABLES +INNODB_TABLE_STATS +INNODB_TRX KEY_CACHES KEY_COLUMN_USAGE PARTITIONS @@ -34,28 +54,7 @@ TRIGGERS USER_PRIVILEGES USER_STATISTICS VIEWS -INNODB_BUFFER_POOL_PAGES -PBXT_STATISTICS -INNODB_CMP -INNODB_RSEG -INNODB_INDEX_STATS -INNODB_BUFFER_POOL_PAGES_INDEX XTRADB_ADMIN_COMMAND -INNODB_TRX -INNODB_SYS_TABLES -INNODB_LOCK_WAITS -INNODB_BUFFER_POOL_STATS -INNODB_LOCKS -INNODB_CMPMEM -INNODB_TABLE_STATS -INNODB_SYS_INDEXES -INNODB_CMP_RESET -INNODB_BUFFER_POOL_PAGES_BLOB -INNODB_CMPMEM_RESET -INNODB_BUFFER_PAGE -INNODB_CHANGED_PAGES -INNODB_SYS_STATS -INNODB_BUFFER_PAGE_LRU SELECT t.table_name, c1.column_name FROM information_schema.tables t INNER JOIN @@ -83,6 +82,26 @@ FILES TABLE_SCHEMA GLOBAL_STATUS VARIABLE_NAME GLOBAL_VARIABLES VARIABLE_NAME INDEX_STATISTICS TABLE_SCHEMA +INNODB_BUFFER_PAGE BLOCK_ID +INNODB_BUFFER_PAGE_LRU LRU_POSITION +INNODB_BUFFER_POOL_PAGES page_type +INNODB_BUFFER_POOL_PAGES_BLOB space_id +INNODB_BUFFER_POOL_PAGES_INDEX index_id +INNODB_BUFFER_POOL_STATS POOL_SIZE +INNODB_CHANGED_PAGES space_id +INNODB_CMP page_size +INNODB_CMPMEM page_size +INNODB_CMPMEM_RESET page_size +INNODB_CMP_RESET page_size +INNODB_INDEX_STATS table_schema +INNODB_LOCKS lock_id +INNODB_LOCK_WAITS requesting_trx_id +INNODB_RSEG rseg_id +INNODB_SYS_INDEXES TABLE_ID +INNODB_SYS_STATS INDEX_ID +INNODB_SYS_TABLES SCHEMA +INNODB_TABLE_STATS table_schema +INNODB_TRX trx_id KEY_CACHES KEY_CACHE_NAME KEY_COLUMN_USAGE CONSTRAINT_SCHEMA PARTITIONS TABLE_SCHEMA @@ -104,28 +123,7 @@ TRIGGERS TRIGGER_SCHEMA USER_PRIVILEGES GRANTEE USER_STATISTICS USER VIEWS TABLE_SCHEMA -INNODB_BUFFER_POOL_PAGES page_type -PBXT_STATISTICS ID -INNODB_CMP page_size -INNODB_RSEG rseg_id -INNODB_INDEX_STATS table_schema -INNODB_BUFFER_POOL_PAGES_INDEX index_id XTRADB_ADMIN_COMMAND result_message -INNODB_TRX trx_id -INNODB_SYS_TABLES SCHEMA -INNODB_LOCK_WAITS requesting_trx_id -INNODB_BUFFER_POOL_STATS POOL_SIZE -INNODB_LOCKS lock_id -INNODB_CMPMEM page_size -INNODB_TABLE_STATS table_schema -INNODB_SYS_INDEXES TABLE_ID -INNODB_CMP_RESET page_size -INNODB_BUFFER_POOL_PAGES_BLOB space_id -INNODB_CMPMEM_RESET page_size -INNODB_BUFFER_PAGE BLOCK_ID -INNODB_CHANGED_PAGES space_id -INNODB_SYS_STATS INDEX_ID -INNODB_BUFFER_PAGE_LRU LRU_POSITION SELECT t.table_name, c1.column_name FROM information_schema.tables t INNER JOIN @@ -153,6 +151,26 @@ FILES TABLE_SCHEMA GLOBAL_STATUS VARIABLE_NAME GLOBAL_VARIABLES VARIABLE_NAME INDEX_STATISTICS TABLE_SCHEMA +INNODB_BUFFER_PAGE BLOCK_ID +INNODB_BUFFER_PAGE_LRU LRU_POSITION +INNODB_BUFFER_POOL_PAGES page_type +INNODB_BUFFER_POOL_PAGES_BLOB space_id +INNODB_BUFFER_POOL_PAGES_INDEX index_id +INNODB_BUFFER_POOL_STATS POOL_SIZE +INNODB_CHANGED_PAGES space_id +INNODB_CMP page_size +INNODB_CMPMEM page_size +INNODB_CMPMEM_RESET page_size +INNODB_CMP_RESET page_size +INNODB_INDEX_STATS table_schema +INNODB_LOCKS lock_id +INNODB_LOCK_WAITS requesting_trx_id +INNODB_RSEG rseg_id +INNODB_SYS_INDEXES TABLE_ID +INNODB_SYS_STATS INDEX_ID +INNODB_SYS_TABLES SCHEMA +INNODB_TABLE_STATS table_schema +INNODB_TRX trx_id KEY_CACHES KEY_CACHE_NAME KEY_COLUMN_USAGE CONSTRAINT_SCHEMA PARTITIONS TABLE_SCHEMA @@ -174,28 +192,7 @@ TRIGGERS TRIGGER_SCHEMA USER_PRIVILEGES GRANTEE USER_STATISTICS USER VIEWS TABLE_SCHEMA -INNODB_BUFFER_POOL_PAGES page_type -PBXT_STATISTICS ID -INNODB_CMP page_size -INNODB_RSEG rseg_id -INNODB_INDEX_STATS table_schema -INNODB_BUFFER_POOL_PAGES_INDEX index_id XTRADB_ADMIN_COMMAND result_message -INNODB_TRX trx_id -INNODB_SYS_TABLES SCHEMA -INNODB_LOCK_WAITS requesting_trx_id -INNODB_BUFFER_POOL_STATS POOL_SIZE -INNODB_LOCKS lock_id -INNODB_CMPMEM page_size -INNODB_TABLE_STATS table_schema -INNODB_SYS_INDEXES TABLE_ID -INNODB_CMP_RESET page_size -INNODB_BUFFER_POOL_PAGES_BLOB space_id -INNODB_CMPMEM_RESET page_size -INNODB_BUFFER_PAGE BLOCK_ID -INNODB_CHANGED_PAGES space_id -INNODB_SYS_STATS INDEX_ID -INNODB_BUFFER_PAGE_LRU LRU_POSITION select 1 as f1 from information_schema.tables where "CHARACTER_SETS"= (select cast(table_name as char) from information_schema.tables order by table_name limit 1) limit 1; @@ -252,7 +249,6 @@ INNODB_TRX information_schema.INNODB_TRX 1 KEY_CACHES information_schema.KEY_CACHES 1 KEY_COLUMN_USAGE information_schema.KEY_COLUMN_USAGE 1 PARTITIONS information_schema.PARTITIONS 1 -PBXT_STATISTICS information_schema.PBXT_STATISTICS 1 PLUGINS information_schema.PLUGINS 1 PROCESSLIST information_schema.PROCESSLIST 1 PROFILING information_schema.PROFILING 1 @@ -308,26 +304,25 @@ Database: information_schema | USER_PRIVILEGES | | USER_STATISTICS | | VIEWS | -| INNODB_BUFFER_POOL_PAGES | -| PBXT_STATISTICS | -| INNODB_CMP | -| INNODB_RSEG | -| INNODB_INDEX_STATS | | INNODB_BUFFER_POOL_PAGES_INDEX | -| XTRADB_ADMIN_COMMAND | -| INNODB_TRX | -| INNODB_SYS_TABLES | -| INNODB_LOCK_WAITS | -| INNODB_BUFFER_POOL_STATS | -| INNODB_LOCKS | -| INNODB_CMPMEM | +| INNODB_RSEG | +| INNODB_CHANGED_PAGES | +| INNODB_BUFFER_POOL_PAGES | | INNODB_TABLE_STATS | -| INNODB_SYS_INDEXES | +| INNODB_TRX | +| XTRADB_ADMIN_COMMAND | +| INNODB_LOCK_WAITS | +| INNODB_SYS_TABLES | +| INNODB_CMP | +| INNODB_BUFFER_POOL_STATS | | INNODB_CMP_RESET | +| INNODB_CMPMEM | +| INNODB_INDEX_STATS | +| INNODB_SYS_INDEXES | | INNODB_BUFFER_POOL_PAGES_BLOB | | INNODB_CMPMEM_RESET | +| INNODB_LOCKS | | INNODB_BUFFER_PAGE | -| INNODB_CHANGED_PAGES | | INNODB_SYS_STATS | | INNODB_BUFFER_PAGE_LRU | +---------------------------------------+ @@ -368,26 +363,25 @@ Database: INFORMATION_SCHEMA | USER_PRIVILEGES | | USER_STATISTICS | | VIEWS | -| INNODB_BUFFER_POOL_PAGES | -| PBXT_STATISTICS | -| INNODB_CMP | -| INNODB_RSEG | -| INNODB_INDEX_STATS | | INNODB_BUFFER_POOL_PAGES_INDEX | -| XTRADB_ADMIN_COMMAND | -| INNODB_TRX | -| INNODB_SYS_TABLES | -| INNODB_LOCK_WAITS | -| INNODB_BUFFER_POOL_STATS | -| INNODB_LOCKS | -| INNODB_CMPMEM | +| INNODB_RSEG | +| INNODB_CHANGED_PAGES | +| INNODB_BUFFER_POOL_PAGES | | INNODB_TABLE_STATS | -| INNODB_SYS_INDEXES | +| INNODB_TRX | +| XTRADB_ADMIN_COMMAND | +| INNODB_LOCK_WAITS | +| INNODB_SYS_TABLES | +| INNODB_CMP | +| INNODB_BUFFER_POOL_STATS | | INNODB_CMP_RESET | +| INNODB_CMPMEM | +| INNODB_INDEX_STATS | +| INNODB_SYS_INDEXES | | INNODB_BUFFER_POOL_PAGES_BLOB | | INNODB_CMPMEM_RESET | +| INNODB_LOCKS | | INNODB_BUFFER_PAGE | -| INNODB_CHANGED_PAGES | | INNODB_SYS_STATS | | INNODB_BUFFER_PAGE_LRU | +---------------------------------------+ @@ -399,5 +393,5 @@ Wildcard: inf_rmation_schema +--------------------+ SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA; table_schema count(*) -information_schema 55 +information_schema 54 mysql 22 diff --git a/mysql-test/suite/funcs_1/r/is_columns_is.result b/mysql-test/suite/funcs_1/r/is_columns_is.result index 553caacf939..2fa72d4bc1b 100644 --- a/mysql-test/suite/funcs_1/r/is_columns_is.result +++ b/mysql-test/suite/funcs_1/r/is_columns_is.result @@ -372,9 +372,6 @@ NULL information_schema PARTITIONS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf NULL information_schema PARTITIONS TABLE_ROWS 13 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned select NULL information_schema PARTITIONS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select NULL information_schema PARTITIONS UPDATE_TIME 20 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime select -NULL information_schema PBXT_STATISTICS ID 1 0 NO int NULL NULL 10 0 NULL NULL int(4) select -NULL information_schema PBXT_STATISTICS Name 2 NO varchar 40 120 NULL NULL utf8 utf8_general_ci varchar(40) select -NULL information_schema PBXT_STATISTICS Value 3 0 NO bigint NULL NULL 19 0 NULL NULL bigint(8) select NULL information_schema PLUGINS PLUGIN_AUTHOR 8 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select NULL information_schema PLUGINS PLUGIN_AUTH_VERSION 12 NULL YES varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select NULL information_schema PLUGINS PLUGIN_DESCRIPTION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext select @@ -986,9 +983,6 @@ NULL information_schema PARTITIONS CHECKSUM bigint NULL NULL NULL NULL bigint(21 3.0000 information_schema PARTITIONS PARTITION_COMMENT varchar 80 240 utf8 utf8_general_ci varchar(80) 3.0000 information_schema PARTITIONS NODEGROUP varchar 12 36 utf8 utf8_general_ci varchar(12) 3.0000 information_schema PARTITIONS TABLESPACE_NAME varchar 64 192 utf8 utf8_general_ci varchar(64) -NULL information_schema PBXT_STATISTICS ID int NULL NULL NULL NULL int(4) -3.0000 information_schema PBXT_STATISTICS Name varchar 40 120 utf8 utf8_general_ci varchar(40) -NULL information_schema PBXT_STATISTICS Value bigint NULL NULL NULL NULL bigint(8) 3.0000 information_schema PLUGINS PLUGIN_NAME varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema PLUGINS PLUGIN_VERSION varchar 20 60 utf8 utf8_general_ci varchar(20) 3.0000 information_schema PLUGINS PLUGIN_STATUS varchar 10 30 utf8 utf8_general_ci varchar(10) diff --git a/mysql-test/suite/funcs_1/r/is_columns_is_embedded.result b/mysql-test/suite/funcs_1/r/is_columns_is_embedded.result index 9fd9fc3130d..721579750a2 100644 --- a/mysql-test/suite/funcs_1/r/is_columns_is_embedded.result +++ b/mysql-test/suite/funcs_1/r/is_columns_is_embedded.result @@ -7,29 +7,29 @@ NULL information_schema CHARACTER_SETS CHARACTER_SET_NAME 1 NO varchar 32 96 NU NULL information_schema CHARACTER_SETS DEFAULT_COLLATE_NAME 2 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) NULL information_schema CHARACTER_SETS DESCRIPTION 3 NO varchar 60 180 NULL NULL utf8 utf8_general_ci varchar(60) NULL information_schema CHARACTER_SETS MAXLEN 4 0 NO bigint NULL NULL 19 0 NULL NULL bigint(3) -NULL information_schema CLIENT_STATISTICS ACCESS_DENIED 22 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS BINLOG_BYTES_WRITTEN 9 0 NO int NULL NULL 10 0 NULL NULL int(21) +NULL information_schema CLIENT_STATISTICS ACCESS_DENIED 22 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS BINLOG_BYTES_WRITTEN 9 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) NULL information_schema CLIENT_STATISTICS BUSY_TIME 5 0 NO double NULL NULL 21 NULL NULL NULL double -NULL information_schema CLIENT_STATISTICS BYTES_RECEIVED 7 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS BYTES_SENT 8 0 NO int NULL NULL 10 0 NULL NULL int(21) +NULL information_schema CLIENT_STATISTICS BYTES_RECEIVED 7 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS BYTES_SENT 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) NULL information_schema CLIENT_STATISTICS CLIENT 1 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) -NULL information_schema CLIENT_STATISTICS COMMIT_TRANSACTIONS 18 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS CONCURRENT_CONNECTIONS 3 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS CONNECTED_TIME 4 0 NO int NULL NULL 10 0 NULL NULL int(21) +NULL information_schema CLIENT_STATISTICS COMMIT_TRANSACTIONS 18 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS CONCURRENT_CONNECTIONS 3 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS CONNECTED_TIME 4 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) NULL information_schema CLIENT_STATISTICS CPU_TIME 6 0 NO double NULL NULL 21 NULL NULL NULL double -NULL information_schema CLIENT_STATISTICS DENIED_CONNECTIONS 20 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS EMPTY_QUERIES 23 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS LOST_CONNECTIONS 21 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS OTHER_COMMANDS 17 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROLLBACK_TRANSACTIONS 19 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROWS_DELETED 12 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROWS_INSERTED 13 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROWS_READ 10 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROWS_SENT 11 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROWS_UPDATED 14 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS SELECT_COMMANDS 15 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS 2 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS UPDATE_COMMANDS 16 0 NO int NULL NULL 10 0 NULL NULL int(21) +NULL information_schema CLIENT_STATISTICS DENIED_CONNECTIONS 20 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS EMPTY_QUERIES 23 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS LOST_CONNECTIONS 21 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS OTHER_COMMANDS 17 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROLLBACK_TRANSACTIONS 19 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROWS_DELETED 12 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROWS_INSERTED 13 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROWS_READ 10 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROWS_SENT 11 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROWS_UPDATED 14 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS SELECT_COMMANDS 15 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS 2 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS UPDATE_COMMANDS 16 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) NULL information_schema COLLATIONS CHARACTER_SET_NAME 2 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) NULL information_schema COLLATIONS COLLATION_NAME 1 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) NULL information_schema COLLATIONS ID 3 0 NO bigint NULL NULL 19 0 NULL NULL bigint(11) @@ -64,7 +64,7 @@ NULL information_schema COLUMN_PRIVILEGES PRIVILEGE_TYPE 6 NO varchar 64 192 NU NULL information_schema COLUMN_PRIVILEGES TABLE_CATALOG 2 NULL YES varchar 512 1536 NULL NULL utf8 utf8_general_ci varchar(512) NULL information_schema COLUMN_PRIVILEGES TABLE_NAME 4 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) NULL information_schema COLUMN_PRIVILEGES TABLE_SCHEMA 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) -NULL information_schema ENGINES COMMENT 3 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) +NULL information_schema ENGINES COMMENT 3 NO varchar 160 480 NULL NULL utf8 utf8_general_ci varchar(160) NULL information_schema ENGINES ENGINE 1 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) NULL information_schema ENGINES SAVEPOINTS 6 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) NULL information_schema ENGINES SUPPORT 2 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) @@ -137,38 +137,109 @@ NULL information_schema GLOBAL_STATUS VARIABLE_VALUE 2 NULL YES varchar 1024 307 NULL information_schema GLOBAL_VARIABLES VARIABLE_NAME 1 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) NULL information_schema GLOBAL_VARIABLES VARIABLE_VALUE 2 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) NULL information_schema INDEX_STATISTICS INDEX_NAME 3 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) -NULL information_schema INDEX_STATISTICS ROWS_READ 4 0 NO int NULL NULL 10 0 NULL NULL int(21) +NULL information_schema INDEX_STATISTICS ROWS_READ 4 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) NULL information_schema INDEX_STATISTICS TABLE_NAME 2 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) NULL information_schema INDEX_STATISTICS TABLE_SCHEMA 1 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) -NULL information_schema INNODB_BUFFER_POOL_PAGES fix_count 5 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES flush_type 6 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES lru_position 4 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES page_no 3 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE ACCESS_TIME 10 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE BLOCK_ID 1 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE COMPRESSED_SIZE 15 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE DATA_SIZE 14 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE FIX_COUNT 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE FLUSH_TYPE 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE FREE_PAGE_CLOCK 19 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE INDEX_NAME 12 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) +NULL information_schema INNODB_BUFFER_PAGE IO_FIX 17 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) +NULL information_schema INNODB_BUFFER_PAGE IS_HASHED 7 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE IS_OLD 18 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE NEWEST_MODIFICATION 8 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE NUMBER_RECORDS 13 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE OLDEST_MODIFICATION 9 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE PAGE_NUMBER 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE PAGE_STATE 16 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) +NULL information_schema INNODB_BUFFER_PAGE PAGE_TYPE 4 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) +NULL information_schema INNODB_BUFFER_PAGE SPACE 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE TABLE_NAME 11 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) +NULL information_schema INNODB_BUFFER_PAGE_LRU ACCESS_TIME 10 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU COMPRESSED 16 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE_LRU COMPRESSED_SIZE 15 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU DATA_SIZE 14 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU FIX_COUNT 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU FLUSH_TYPE 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU FREE_PAGE_CLOCK 19 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU INDEX_NAME 12 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) +NULL information_schema INNODB_BUFFER_PAGE_LRU IO_FIX 17 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) +NULL information_schema INNODB_BUFFER_PAGE_LRU IS_HASHED 7 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE_LRU IS_OLD 18 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE_LRU LRU_POSITION 1 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU NEWEST_MODIFICATION 8 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU NUMBER_RECORDS 13 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU OLDEST_MODIFICATION 9 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU PAGE_NUMBER 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU PAGE_TYPE 4 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) +NULL information_schema INNODB_BUFFER_PAGE_LRU SPACE 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU TABLE_NAME 11 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) +NULL information_schema INNODB_BUFFER_POOL_PAGES fix_count 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES flush_type 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES lru_position 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES page_no 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES page_type 1 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) -NULL information_schema INNODB_BUFFER_POOL_PAGES space_id 2 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB compressed 3 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB fix_count 7 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB flush_type 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB lru_position 6 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB next_page_no 5 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB page_no 2 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB part_len 4 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB space_id 1 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX accessed 9 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX data_size 7 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX dirty 11 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX fix_count 14 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX flush_type 15 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX hashed 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX index_name 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX lru_position 13 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX modified 10 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX n_recs 6 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX old 12 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX page_no 5 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX schema_name 1 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX space_id 4 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX table_name 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) +NULL information_schema INNODB_BUFFER_POOL_PAGES space_id 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB compressed 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB fix_count 7 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB flush_type 8 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB lru_position 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB next_page_no 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB page_no 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB part_len 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB space_id 1 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX access_time 7 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX data_size 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX dirty 9 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX fix_count 12 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX flush_type 13 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX hashed 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX index_id 1 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX lru_position 11 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX modified 8 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX n_recs 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX old 10 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX page_no 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX space_id 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS DATABASE_PAGES 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS FREE_BUFFERS 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS HIT_RATE 21 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS LRU_IO_CURRENT 29 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS LRU_IO_TOTAL 28 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS MODIFIED_DATABASE_PAGES 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NOT_YOUNG_MAKE_PER_THOUSAND_GETS 23 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_CREATED 15 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_GET 20 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_READ 14 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_READ_AHEAD 24 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_WRITTEN 16 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_READ_AHEAD_EVICTED 25 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS OLD_DATABASE_PAGES 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_CREATE_RATE 18 0 NO double NULL NULL 12 NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_NOT_YOUNG_RATE 13 0 NO double NULL NULL 12 NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_YOUNG 10 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_YOUNG_RATE 12 0 NO double NULL NULL 12 NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_NOT_MADE_YOUNG 11 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_READ_RATE 17 0 NO double NULL NULL 12 NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_WRITTEN_RATE 19 0 NO double NULL NULL 12 NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_DECOMPRESS 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_FLUSH_LIST 9 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_FLUSH_LRU 8 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_READS 7 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS POOL_SIZE 1 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS READ_AHEAD_EVICTED_RATE 27 0 NO double NULL NULL 12 NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS READ_AHEAD_RATE 26 0 NO double NULL NULL 12 NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS UNCOMPRESS_CURRENT 31 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS UNCOMPRESS_TOTAL 30 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS YOUNG_MAKE_PER_THOUSAND_GETS 22 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_CHANGED_PAGES end_lsn 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_CHANGED_PAGES page_id 2 0 NO int NULL NULL 10 0 NULL NULL int(11) unsigned +NULL information_schema INNODB_CHANGED_PAGES space_id 1 0 NO int NULL NULL 10 0 NULL NULL int(11) unsigned +NULL information_schema INNODB_CHANGED_PAGES start_lsn 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned NULL information_schema INNODB_CMP compress_ops 2 0 NO int NULL NULL 10 0 NULL NULL int(11) NULL information_schema INNODB_CMP compress_ops_ok 3 0 NO int NULL NULL 10 0 NULL NULL int(11) NULL information_schema INNODB_CMP compress_time 4 0 NO int NULL NULL 10 0 NULL NULL int(11) @@ -191,19 +262,20 @@ NULL information_schema INNODB_CMP_RESET compress_time 4 0 NO int NULL NULL 10 0 NULL information_schema INNODB_CMP_RESET page_size 1 0 NO int NULL NULL 10 0 NULL NULL int(5) NULL information_schema INNODB_CMP_RESET uncompress_ops 5 0 NO int NULL NULL 10 0 NULL NULL int(11) NULL information_schema INNODB_CMP_RESET uncompress_time 6 0 NO int NULL NULL 10 0 NULL NULL int(11) -NULL information_schema INNODB_INDEX_STATS fields 3 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_INDEX_STATS index_name 2 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) -NULL information_schema INNODB_INDEX_STATS index_size 5 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_INDEX_STATS leaf_pages 6 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_INDEX_STATS row_per_keys 4 NO varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) -NULL information_schema INNODB_INDEX_STATS table_name 1 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_INDEX_STATS fields 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_INDEX_STATS index_name 3 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_INDEX_STATS index_size 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_INDEX_STATS leaf_pages 7 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_INDEX_STATS row_per_keys 5 NO varchar 256 768 NULL NULL utf8 utf8_general_ci varchar(256) +NULL information_schema INNODB_INDEX_STATS table_name 2 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_INDEX_STATS table_schema 1 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) NULL information_schema INNODB_LOCKS lock_data 10 NULL YES varchar 8192 24576 NULL NULL utf8 utf8_general_ci varchar(8192) NULL information_schema INNODB_LOCKS lock_id 1 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) NULL information_schema INNODB_LOCKS lock_index 6 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) NULL information_schema INNODB_LOCKS lock_mode 3 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) -NULL information_schema INNODB_LOCKS lock_page 8 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_LOCKS lock_rec 9 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_LOCKS lock_space 7 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_LOCKS lock_page 8 NULL YES bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_LOCKS lock_rec 9 NULL YES bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_LOCKS lock_space 7 NULL YES bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned NULL information_schema INNODB_LOCKS lock_table 5 NO varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) NULL information_schema INNODB_LOCKS lock_trx_id 2 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) NULL information_schema INNODB_LOCKS lock_type 4 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) @@ -211,25 +283,58 @@ NULL information_schema INNODB_LOCK_WAITS blocking_lock_id 4 NO varchar 81 243 NULL information_schema INNODB_LOCK_WAITS blocking_trx_id 3 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) NULL information_schema INNODB_LOCK_WAITS requested_lock_id 2 NO varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) NULL information_schema INNODB_LOCK_WAITS requesting_trx_id 1 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) -NULL information_schema INNODB_RSEG curr_size 6 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_RSEG max_size 5 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_RSEG page_no 4 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_RSEG rseg_id 1 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_RSEG space_id 2 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_RSEG zip_size 3 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_TABLE_STATS clust_size 3 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_TABLE_STATS modified 5 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_TABLE_STATS other_size 4 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_TABLE_STATS rows 2 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned -NULL information_schema INNODB_TABLE_STATS table_name 1 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_RSEG curr_size 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_RSEG max_size 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_RSEG page_no 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_RSEG rseg_id 1 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_RSEG space_id 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_RSEG zip_size 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_INDEXES ID 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_INDEXES NAME 3 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_SYS_INDEXES N_FIELDS 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_INDEXES PAGE_NO 7 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_INDEXES SPACE 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_INDEXES TABLE_ID 1 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_INDEXES TYPE 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_STATS DIFF_VALS 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_STATS INDEX_ID 1 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_STATS KEY_COLS 2 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_STATS NON_NULL_VALS 4 NULL YES bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_TABLES CLUSTER_NAME 8 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_SYS_TABLES ID 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_TABLES MIX_ID 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_TABLES MIX_LEN 7 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_TABLES NAME 2 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_SYS_TABLES N_COLS 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_TABLES SCHEMA 1 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_SYS_TABLES SPACE 9 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_TABLES TYPE 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_TABLE_STATS clust_size 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_TABLE_STATS modified 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_TABLE_STATS other_size 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_TABLE_STATS rows 3 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_TABLE_STATS table_name 2 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_TABLE_STATS table_schema 1 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) NULL information_schema INNODB_TRX trx_id 1 NO varchar 18 54 NULL NULL utf8 utf8_general_ci varchar(18) -NULL information_schema INNODB_TRX trx_mysql_thread_id 7 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_TRX trx_mysql_thread_id 7 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned NULL information_schema INNODB_TRX trx_query 8 NULL YES varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) NULL information_schema INNODB_TRX trx_requested_lock_id 4 NULL YES varchar 81 243 NULL NULL utf8 utf8_general_ci varchar(81) NULL information_schema INNODB_TRX trx_started 3 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime NULL information_schema INNODB_TRX trx_state 2 NO varchar 13 39 NULL NULL utf8 utf8_general_ci varchar(13) NULL information_schema INNODB_TRX trx_wait_started 5 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime -NULL information_schema INNODB_TRX trx_weight 6 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) unsigned +NULL information_schema INNODB_TRX trx_weight 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES BLOCK_SIZE 5 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES DIRTY_BLOCKS 8 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES FULL_SIZE 4 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES KEY_CACHE_NAME 1 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) +NULL information_schema KEY_CACHES READS 10 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES READ_REQUESTS 9 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES SEGMENTS 2 NULL YES int NULL NULL 10 0 NULL NULL int(3) unsigned +NULL information_schema KEY_CACHES SEGMENT_NUMBER 3 NULL YES int NULL NULL 10 0 NULL NULL int(3) unsigned +NULL information_schema KEY_CACHES UNUSED_BLOCKS 7 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES USED_BLOCKS 6 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES WRITES 12 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES WRITE_REQUESTS 11 0 NO bigint NULL NULL 20 0 NULL NULL bigint(21) unsigned NULL information_schema KEY_COLUMN_USAGE COLUMN_NAME 7 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) NULL information_schema KEY_COLUMN_USAGE CONSTRAINT_CATALOG 1 NULL YES varchar 512 1536 NULL NULL utf8 utf8_general_ci varchar(512) NULL information_schema KEY_COLUMN_USAGE CONSTRAINT_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) @@ -268,10 +373,12 @@ NULL information_schema PARTITIONS TABLE_ROWS 13 0 NO bigint NULL NULL 20 0 NULL NULL information_schema PARTITIONS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) NULL information_schema PARTITIONS UPDATE_TIME 20 NULL YES datetime NULL NULL NULL NULL NULL NULL datetime NULL information_schema PLUGINS PLUGIN_AUTHOR 8 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) +NULL information_schema PLUGINS PLUGIN_AUTH_VERSION 12 NULL YES varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) NULL information_schema PLUGINS PLUGIN_DESCRIPTION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext NULL information_schema PLUGINS PLUGIN_LIBRARY 6 NULL YES varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) NULL information_schema PLUGINS PLUGIN_LIBRARY_VERSION 7 NULL YES varchar 20 60 NULL NULL utf8 utf8_general_ci varchar(20) NULL information_schema PLUGINS PLUGIN_LICENSE 10 NULL YES varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) +NULL information_schema PLUGINS PLUGIN_MATURITY 11 NULL YES varchar 12 36 NULL NULL utf8 utf8_general_ci varchar(12) NULL information_schema PLUGINS PLUGIN_NAME 1 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) NULL information_schema PLUGINS PLUGIN_STATUS 3 NO varchar 10 30 NULL NULL utf8 utf8_general_ci varchar(10) NULL information_schema PLUGINS PLUGIN_TYPE 4 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) @@ -382,9 +489,9 @@ NULL information_schema TABLE_PRIVILEGES PRIVILEGE_TYPE 5 NO varchar 64 192 NUL NULL information_schema TABLE_PRIVILEGES TABLE_CATALOG 2 NULL YES varchar 512 1536 NULL NULL utf8 utf8_general_ci varchar(512) NULL information_schema TABLE_PRIVILEGES TABLE_NAME 4 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) NULL information_schema TABLE_PRIVILEGES TABLE_SCHEMA 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) -NULL information_schema TABLE_STATISTICS ROWS_CHANGED 4 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema TABLE_STATISTICS ROWS_CHANGED_X_INDEXES 5 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema TABLE_STATISTICS ROWS_READ 3 0 NO int NULL NULL 10 0 NULL NULL int(21) +NULL information_schema TABLE_STATISTICS ROWS_CHANGED 4 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema TABLE_STATISTICS ROWS_CHANGED_X_INDEXES 5 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema TABLE_STATISTICS ROWS_READ 3 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) NULL information_schema TABLE_STATISTICS TABLE_NAME 2 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) NULL information_schema TABLE_STATISTICS TABLE_SCHEMA 1 NO varchar 192 576 NULL NULL utf8 utf8_general_ci varchar(192) NULL information_schema TRIGGERS ACTION_CONDITION 9 NULL YES longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext @@ -413,28 +520,28 @@ NULL information_schema USER_PRIVILEGES GRANTEE 1 NO varchar 81 243 NULL NULL u NULL information_schema USER_PRIVILEGES IS_GRANTABLE 4 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) NULL information_schema USER_PRIVILEGES PRIVILEGE_TYPE 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) NULL information_schema USER_PRIVILEGES TABLE_CATALOG 2 NULL YES varchar 512 1536 NULL NULL utf8 utf8_general_ci varchar(512) -NULL information_schema USER_STATISTICS ACCESS_DENIED 22 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS BINLOG_BYTES_WRITTEN 9 0 NO int NULL NULL 10 0 NULL NULL int(21) +NULL information_schema USER_STATISTICS ACCESS_DENIED 22 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS BINLOG_BYTES_WRITTEN 9 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) NULL information_schema USER_STATISTICS BUSY_TIME 5 0 NO double NULL NULL 21 NULL NULL NULL double -NULL information_schema USER_STATISTICS BYTES_RECEIVED 7 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS BYTES_SENT 8 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS COMMIT_TRANSACTIONS 18 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS CONCURRENT_CONNECTIONS 3 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS CONNECTED_TIME 4 0 NO int NULL NULL 10 0 NULL NULL int(21) +NULL information_schema USER_STATISTICS BYTES_RECEIVED 7 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS BYTES_SENT 8 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS COMMIT_TRANSACTIONS 18 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS CONCURRENT_CONNECTIONS 3 0 NO int NULL NULL 10 0 NULL NULL int(11) +NULL information_schema USER_STATISTICS CONNECTED_TIME 4 0 NO int NULL NULL 10 0 NULL NULL int(11) NULL information_schema USER_STATISTICS CPU_TIME 6 0 NO double NULL NULL 21 NULL NULL NULL double -NULL information_schema USER_STATISTICS DENIED_CONNECTIONS 20 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS EMPTY_QUERIES 23 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS LOST_CONNECTIONS 21 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS OTHER_COMMANDS 17 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS ROLLBACK_TRANSACTIONS 19 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS ROWS_DELETED 12 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS ROWS_INSERTED 13 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS ROWS_READ 10 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS ROWS_SENT 11 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS ROWS_UPDATED 14 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS SELECT_COMMANDS 15 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS TOTAL_CONNECTIONS 2 0 NO int NULL NULL 10 0 NULL NULL int(21) -NULL information_schema USER_STATISTICS UPDATE_COMMANDS 16 0 NO int NULL NULL 10 0 NULL NULL int(21) +NULL information_schema USER_STATISTICS DENIED_CONNECTIONS 20 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS EMPTY_QUERIES 23 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS LOST_CONNECTIONS 21 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS OTHER_COMMANDS 17 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROLLBACK_TRANSACTIONS 19 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROWS_DELETED 12 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROWS_INSERTED 13 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROWS_READ 10 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROWS_SENT 11 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROWS_UPDATED 14 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS SELECT_COMMANDS 15 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) +NULL information_schema USER_STATISTICS TOTAL_CONNECTIONS 2 0 NO int NULL NULL 10 0 NULL NULL int(11) +NULL information_schema USER_STATISTICS UPDATE_COMMANDS 16 0 NO bigint NULL NULL 19 0 NULL NULL bigint(21) NULL information_schema USER_STATISTICS USER 1 NO varchar 48 144 NULL NULL utf8 utf8_general_ci varchar(48) NULL information_schema VIEWS CHARACTER_SET_CLIENT 9 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) NULL information_schema VIEWS CHECK_OPTION 5 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) @@ -446,10 +553,7 @@ NULL information_schema VIEWS TABLE_CATALOG 1 NULL YES varchar 512 1536 NULL NUL NULL information_schema VIEWS TABLE_NAME 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) NULL information_schema VIEWS TABLE_SCHEMA 2 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) NULL information_schema VIEWS VIEW_DEFINITION 4 NULL NO longtext 4294967295 4294967295 NULL NULL utf8 utf8_general_ci longtext -NULL information_schema XTRADB_ENHANCEMENTS comment 3 NO varchar 100 300 NULL NULL utf8 utf8_general_ci varchar(100) -NULL information_schema XTRADB_ENHANCEMENTS description 2 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) -NULL information_schema XTRADB_ENHANCEMENTS link 4 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) -NULL information_schema XTRADB_ENHANCEMENTS name 1 NO varchar 255 765 NULL NULL utf8 utf8_general_ci varchar(255) +NULL information_schema XTRADB_ADMIN_COMMAND result_message 1 NO varchar 1024 3072 NULL NULL utf8 utf8_general_ci varchar(1024) ########################################################################## # Show the quotient of CHARACTER_OCTET_LENGTH and CHARACTER_MAXIMUM_LENGTH ########################################################################## @@ -515,28 +619,28 @@ COL_CML TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE CHARACTER_MAXIMUM_LENGTH C 3.0000 information_schema CHARACTER_SETS DESCRIPTION varchar 60 180 utf8 utf8_general_ci varchar(60) NULL information_schema CHARACTER_SETS MAXLEN bigint NULL NULL NULL NULL bigint(3) 3.0000 information_schema CLIENT_STATISTICS CLIENT varchar 64 192 utf8 utf8_general_ci varchar(64) -NULL information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS CONCURRENT_CONNECTIONS int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS CONNECTED_TIME int NULL NULL NULL NULL int(21) +NULL information_schema CLIENT_STATISTICS TOTAL_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS CONCURRENT_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS CONNECTED_TIME bigint NULL NULL NULL NULL bigint(21) NULL information_schema CLIENT_STATISTICS BUSY_TIME double NULL NULL NULL NULL double NULL information_schema CLIENT_STATISTICS CPU_TIME double NULL NULL NULL NULL double -NULL information_schema CLIENT_STATISTICS BYTES_RECEIVED int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS BYTES_SENT int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS BINLOG_BYTES_WRITTEN int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROWS_READ int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROWS_SENT int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROWS_DELETED int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROWS_INSERTED int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROWS_UPDATED int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS SELECT_COMMANDS int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS UPDATE_COMMANDS int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS OTHER_COMMANDS int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS COMMIT_TRANSACTIONS int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ROLLBACK_TRANSACTIONS int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS DENIED_CONNECTIONS int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS LOST_CONNECTIONS int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS ACCESS_DENIED int NULL NULL NULL NULL int(21) -NULL information_schema CLIENT_STATISTICS EMPTY_QUERIES int NULL NULL NULL NULL int(21) +NULL information_schema CLIENT_STATISTICS BYTES_RECEIVED bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS BYTES_SENT bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS BINLOG_BYTES_WRITTEN bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROWS_READ bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROWS_SENT bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROWS_DELETED bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROWS_INSERTED bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROWS_UPDATED bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS SELECT_COMMANDS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS UPDATE_COMMANDS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS OTHER_COMMANDS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS COMMIT_TRANSACTIONS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ROLLBACK_TRANSACTIONS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS DENIED_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS LOST_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS ACCESS_DENIED bigint NULL NULL NULL NULL bigint(21) +NULL information_schema CLIENT_STATISTICS EMPTY_QUERIES bigint NULL NULL NULL NULL bigint(21) 3.0000 information_schema COLLATIONS COLLATION_NAME varchar 32 96 utf8 utf8_general_ci varchar(32) 3.0000 information_schema COLLATIONS CHARACTER_SET_NAME varchar 32 96 utf8 utf8_general_ci varchar(32) NULL information_schema COLLATIONS ID bigint NULL NULL NULL NULL bigint(11) @@ -573,7 +677,7 @@ NULL information_schema COLUMNS NUMERIC_SCALE bigint NULL NULL NULL NULL bigint( 3.0000 information_schema COLUMN_PRIVILEGES IS_GRANTABLE varchar 3 9 utf8 utf8_general_ci varchar(3) 3.0000 information_schema ENGINES ENGINE varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema ENGINES SUPPORT varchar 8 24 utf8 utf8_general_ci varchar(8) -3.0000 information_schema ENGINES COMMENT varchar 80 240 utf8 utf8_general_ci varchar(80) +3.0000 information_schema ENGINES COMMENT varchar 160 480 utf8 utf8_general_ci varchar(160) 3.0000 information_schema ENGINES TRANSACTIONS varchar 3 9 utf8 utf8_general_ci varchar(3) 3.0000 information_schema ENGINES XA varchar 3 9 utf8 utf8_general_ci varchar(3) 3.0000 information_schema ENGINES SAVEPOINTS varchar 3 9 utf8 utf8_general_ci varchar(3) @@ -646,7 +750,45 @@ NULL information_schema FILES CHECKSUM bigint NULL NULL NULL NULL bigint(21) uns 3.0000 information_schema INDEX_STATISTICS TABLE_SCHEMA varchar 192 576 utf8 utf8_general_ci varchar(192) 3.0000 information_schema INDEX_STATISTICS TABLE_NAME varchar 192 576 utf8 utf8_general_ci varchar(192) 3.0000 information_schema INDEX_STATISTICS INDEX_NAME varchar 192 576 utf8 utf8_general_ci varchar(192) -NULL information_schema INDEX_STATISTICS ROWS_READ int NULL NULL NULL NULL int(21) +NULL information_schema INDEX_STATISTICS ROWS_READ bigint NULL NULL NULL NULL bigint(21) +NULL information_schema INNODB_BUFFER_PAGE BLOCK_ID bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE SPACE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE PAGE_NUMBER bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE PAGE_TYPE varchar 64 192 utf8 utf8_general_ci varchar(64) +NULL information_schema INNODB_BUFFER_PAGE FLUSH_TYPE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE FIX_COUNT bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE IS_HASHED varchar 3 9 utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE NEWEST_MODIFICATION bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE OLDEST_MODIFICATION bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE ACCESS_TIME bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE TABLE_NAME varchar 1024 3072 utf8 utf8_general_ci varchar(1024) +3.0000 information_schema INNODB_BUFFER_PAGE INDEX_NAME varchar 1024 3072 utf8 utf8_general_ci varchar(1024) +NULL information_schema INNODB_BUFFER_PAGE NUMBER_RECORDS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE DATA_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE COMPRESSED_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE PAGE_STATE varchar 64 192 utf8 utf8_general_ci varchar(64) +3.0000 information_schema INNODB_BUFFER_PAGE IO_FIX varchar 64 192 utf8 utf8_general_ci varchar(64) +3.0000 information_schema INNODB_BUFFER_PAGE IS_OLD varchar 3 9 utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE FREE_PAGE_CLOCK bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU LRU_POSITION bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU SPACE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU PAGE_NUMBER bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE_LRU PAGE_TYPE varchar 64 192 utf8 utf8_general_ci varchar(64) +NULL information_schema INNODB_BUFFER_PAGE_LRU FLUSH_TYPE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU FIX_COUNT bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE_LRU IS_HASHED varchar 3 9 utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE_LRU NEWEST_MODIFICATION bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU OLDEST_MODIFICATION bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU ACCESS_TIME bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE_LRU TABLE_NAME varchar 1024 3072 utf8 utf8_general_ci varchar(1024) +3.0000 information_schema INNODB_BUFFER_PAGE_LRU INDEX_NAME varchar 1024 3072 utf8 utf8_general_ci varchar(1024) +NULL information_schema INNODB_BUFFER_PAGE_LRU NUMBER_RECORDS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU DATA_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_PAGE_LRU COMPRESSED_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_BUFFER_PAGE_LRU COMPRESSED varchar 3 9 utf8 utf8_general_ci varchar(3) +3.0000 information_schema INNODB_BUFFER_PAGE_LRU IO_FIX varchar 64 192 utf8 utf8_general_ci varchar(64) +3.0000 information_schema INNODB_BUFFER_PAGE_LRU IS_OLD varchar 3 9 utf8 utf8_general_ci varchar(3) +NULL information_schema INNODB_BUFFER_PAGE_LRU FREE_PAGE_CLOCK bigint NULL NULL NULL NULL bigint(21) unsigned 3.0000 information_schema INNODB_BUFFER_POOL_PAGES page_type varchar 64 192 utf8 utf8_general_ci varchar(64) NULL information_schema INNODB_BUFFER_POOL_PAGES space_id bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES page_no bigint NULL NULL NULL NULL bigint(21) unsigned @@ -661,21 +803,54 @@ NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB next_page_no bigint NULL N NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB lru_position bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB fix_count bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_BLOB flush_type bigint NULL NULL NULL NULL bigint(21) unsigned -3.0000 information_schema INNODB_BUFFER_POOL_PAGES_INDEX schema_name varchar 64 192 utf8 utf8_general_ci varchar(64) -3.0000 information_schema INNODB_BUFFER_POOL_PAGES_INDEX table_name varchar 64 192 utf8 utf8_general_ci varchar(64) -3.0000 information_schema INNODB_BUFFER_POOL_PAGES_INDEX index_name varchar 64 192 utf8 utf8_general_ci varchar(64) +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX index_id bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX space_id bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX page_no bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX n_recs bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX data_size bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX hashed bigint NULL NULL NULL NULL bigint(21) unsigned -NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX accessed bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX access_time bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX modified bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX dirty bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX old bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX lru_position bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX fix_count bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_BUFFER_POOL_PAGES_INDEX flush_type bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS POOL_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS FREE_BUFFERS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS DATABASE_PAGES bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS OLD_DATABASE_PAGES bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS MODIFIED_DATABASE_PAGES bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_DECOMPRESS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_READS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_FLUSH_LRU bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PENDING_FLUSH_LIST bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_YOUNG bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_NOT_MADE_YOUNG bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_YOUNG_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_MADE_NOT_YOUNG_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_READ bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_CREATED bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_WRITTEN bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_READ_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_CREATE_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS PAGES_WRITTEN_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_GET bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS HIT_RATE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS YOUNG_MAKE_PER_THOUSAND_GETS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NOT_YOUNG_MAKE_PER_THOUSAND_GETS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_PAGES_READ_AHEAD bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS NUMBER_READ_AHEAD_EVICTED bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS READ_AHEAD_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS READ_AHEAD_EVICTED_RATE double NULL NULL NULL NULL double +NULL information_schema INNODB_BUFFER_POOL_STATS LRU_IO_TOTAL bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS LRU_IO_CURRENT bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS UNCOMPRESS_TOTAL bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_BUFFER_POOL_STATS UNCOMPRESS_CURRENT bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_CHANGED_PAGES space_id int NULL NULL NULL NULL int(11) unsigned +NULL information_schema INNODB_CHANGED_PAGES page_id int NULL NULL NULL NULL int(11) unsigned +NULL information_schema INNODB_CHANGED_PAGES start_lsn bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_CHANGED_PAGES end_lsn bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_CMP page_size int NULL NULL NULL NULL int(5) NULL information_schema INNODB_CMP compress_ops int NULL NULL NULL NULL int(11) NULL information_schema INNODB_CMP compress_ops_ok int NULL NULL NULL NULL int(11) @@ -698,6 +873,7 @@ NULL information_schema INNODB_CMP_RESET compress_ops_ok int NULL NULL NULL NULL NULL information_schema INNODB_CMP_RESET compress_time int NULL NULL NULL NULL int(11) NULL information_schema INNODB_CMP_RESET uncompress_ops int NULL NULL NULL NULL int(11) NULL information_schema INNODB_CMP_RESET uncompress_time int NULL NULL NULL NULL int(11) +3.0000 information_schema INNODB_INDEX_STATS table_schema varchar 192 576 utf8 utf8_general_ci varchar(192) 3.0000 information_schema INNODB_INDEX_STATS table_name varchar 192 576 utf8 utf8_general_ci varchar(192) 3.0000 information_schema INNODB_INDEX_STATS index_name varchar 192 576 utf8 utf8_general_ci varchar(192) NULL information_schema INNODB_INDEX_STATS fields bigint NULL NULL NULL NULL bigint(21) unsigned @@ -724,6 +900,27 @@ NULL information_schema INNODB_RSEG zip_size bigint NULL NULL NULL NULL bigint(2 NULL information_schema INNODB_RSEG page_no bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_RSEG max_size bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_RSEG curr_size bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_INDEXES TABLE_ID bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_INDEXES ID bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_SYS_INDEXES NAME varchar 192 576 utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_SYS_INDEXES N_FIELDS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_INDEXES TYPE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_INDEXES SPACE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_INDEXES PAGE_NO bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_STATS INDEX_ID bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_STATS KEY_COLS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_STATS DIFF_VALS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_STATS NON_NULL_VALS bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_SYS_TABLES SCHEMA varchar 192 576 utf8 utf8_general_ci varchar(192) +3.0000 information_schema INNODB_SYS_TABLES NAME varchar 192 576 utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_SYS_TABLES ID bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_TABLES N_COLS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_TABLES TYPE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_TABLES MIX_ID bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema INNODB_SYS_TABLES MIX_LEN bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_SYS_TABLES CLUSTER_NAME varchar 192 576 utf8 utf8_general_ci varchar(192) +NULL information_schema INNODB_SYS_TABLES SPACE bigint NULL NULL NULL NULL bigint(21) unsigned +3.0000 information_schema INNODB_TABLE_STATS table_schema varchar 192 576 utf8 utf8_general_ci varchar(192) 3.0000 information_schema INNODB_TABLE_STATS table_name varchar 192 576 utf8 utf8_general_ci varchar(192) NULL information_schema INNODB_TABLE_STATS rows bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_TABLE_STATS clust_size bigint NULL NULL NULL NULL bigint(21) unsigned @@ -737,6 +934,18 @@ NULL information_schema INNODB_TRX trx_wait_started datetime NULL NULL NULL NULL NULL information_schema INNODB_TRX trx_weight bigint NULL NULL NULL NULL bigint(21) unsigned NULL information_schema INNODB_TRX trx_mysql_thread_id bigint NULL NULL NULL NULL bigint(21) unsigned 3.0000 information_schema INNODB_TRX trx_query varchar 1024 3072 utf8 utf8_general_ci varchar(1024) +3.0000 information_schema KEY_CACHES KEY_CACHE_NAME varchar 192 576 utf8 utf8_general_ci varchar(192) +NULL information_schema KEY_CACHES SEGMENTS int NULL NULL NULL NULL int(3) unsigned +NULL information_schema KEY_CACHES SEGMENT_NUMBER int NULL NULL NULL NULL int(3) unsigned +NULL information_schema KEY_CACHES FULL_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES BLOCK_SIZE bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES USED_BLOCKS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES UNUSED_BLOCKS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES DIRTY_BLOCKS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES READ_REQUESTS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES READS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES WRITE_REQUESTS bigint NULL NULL NULL NULL bigint(21) unsigned +NULL information_schema KEY_CACHES WRITES bigint NULL NULL NULL NULL bigint(21) unsigned 3.0000 information_schema KEY_COLUMN_USAGE CONSTRAINT_CATALOG varchar 512 1536 utf8 utf8_general_ci varchar(512) 3.0000 information_schema KEY_COLUMN_USAGE CONSTRAINT_SCHEMA varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema KEY_COLUMN_USAGE CONSTRAINT_NAME varchar 64 192 utf8 utf8_general_ci varchar(64) @@ -784,6 +993,8 @@ NULL information_schema PARTITIONS CHECKSUM bigint NULL NULL NULL NULL bigint(21 3.0000 information_schema PLUGINS PLUGIN_AUTHOR varchar 64 192 utf8 utf8_general_ci varchar(64) 1.0000 information_schema PLUGINS PLUGIN_DESCRIPTION longtext 4294967295 4294967295 utf8 utf8_general_ci longtext 3.0000 information_schema PLUGINS PLUGIN_LICENSE varchar 80 240 utf8 utf8_general_ci varchar(80) +3.0000 information_schema PLUGINS PLUGIN_MATURITY varchar 12 36 utf8 utf8_general_ci varchar(12) +3.0000 information_schema PLUGINS PLUGIN_AUTH_VERSION varchar 80 240 utf8 utf8_general_ci varchar(80) NULL information_schema PROCESSLIST ID bigint NULL NULL NULL NULL bigint(4) 3.0000 information_schema PROCESSLIST USER varchar 16 48 utf8 utf8_general_ci varchar(16) 3.0000 information_schema PROCESSLIST HOST varchar 64 192 utf8 utf8_general_ci varchar(64) @@ -891,9 +1102,9 @@ NULL information_schema TABLES CHECKSUM bigint NULL NULL NULL NULL bigint(21) un 3.0000 information_schema TABLE_PRIVILEGES IS_GRANTABLE varchar 3 9 utf8 utf8_general_ci varchar(3) 3.0000 information_schema TABLE_STATISTICS TABLE_SCHEMA varchar 192 576 utf8 utf8_general_ci varchar(192) 3.0000 information_schema TABLE_STATISTICS TABLE_NAME varchar 192 576 utf8 utf8_general_ci varchar(192) -NULL information_schema TABLE_STATISTICS ROWS_READ int NULL NULL NULL NULL int(21) -NULL information_schema TABLE_STATISTICS ROWS_CHANGED int NULL NULL NULL NULL int(21) -NULL information_schema TABLE_STATISTICS ROWS_CHANGED_X_INDEXES int NULL NULL NULL NULL int(21) +NULL information_schema TABLE_STATISTICS ROWS_READ bigint NULL NULL NULL NULL bigint(21) +NULL information_schema TABLE_STATISTICS ROWS_CHANGED bigint NULL NULL NULL NULL bigint(21) +NULL information_schema TABLE_STATISTICS ROWS_CHANGED_X_INDEXES bigint NULL NULL NULL NULL bigint(21) 3.0000 information_schema TRIGGERS TRIGGER_CATALOG varchar 512 1536 utf8 utf8_general_ci varchar(512) 3.0000 information_schema TRIGGERS TRIGGER_SCHEMA varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema TRIGGERS TRIGGER_NAME varchar 64 192 utf8 utf8_general_ci varchar(64) @@ -921,28 +1132,28 @@ NULL information_schema TRIGGERS CREATED datetime NULL NULL NULL NULL datetime 3.0000 information_schema USER_PRIVILEGES PRIVILEGE_TYPE varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema USER_PRIVILEGES IS_GRANTABLE varchar 3 9 utf8 utf8_general_ci varchar(3) 3.0000 information_schema USER_STATISTICS USER varchar 48 144 utf8 utf8_general_ci varchar(48) -NULL information_schema USER_STATISTICS TOTAL_CONNECTIONS int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS CONCURRENT_CONNECTIONS int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS CONNECTED_TIME int NULL NULL NULL NULL int(21) +NULL information_schema USER_STATISTICS TOTAL_CONNECTIONS int NULL NULL NULL NULL int(11) +NULL information_schema USER_STATISTICS CONCURRENT_CONNECTIONS int NULL NULL NULL NULL int(11) +NULL information_schema USER_STATISTICS CONNECTED_TIME int NULL NULL NULL NULL int(11) NULL information_schema USER_STATISTICS BUSY_TIME double NULL NULL NULL NULL double NULL information_schema USER_STATISTICS CPU_TIME double NULL NULL NULL NULL double -NULL information_schema USER_STATISTICS BYTES_RECEIVED int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS BYTES_SENT int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS BINLOG_BYTES_WRITTEN int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS ROWS_READ int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS ROWS_SENT int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS ROWS_DELETED int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS ROWS_INSERTED int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS ROWS_UPDATED int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS SELECT_COMMANDS int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS UPDATE_COMMANDS int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS OTHER_COMMANDS int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS COMMIT_TRANSACTIONS int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS ROLLBACK_TRANSACTIONS int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS DENIED_CONNECTIONS int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS LOST_CONNECTIONS int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS ACCESS_DENIED int NULL NULL NULL NULL int(21) -NULL information_schema USER_STATISTICS EMPTY_QUERIES int NULL NULL NULL NULL int(21) +NULL information_schema USER_STATISTICS BYTES_RECEIVED bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS BYTES_SENT bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS BINLOG_BYTES_WRITTEN bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROWS_READ bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROWS_SENT bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROWS_DELETED bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROWS_INSERTED bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROWS_UPDATED bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS SELECT_COMMANDS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS UPDATE_COMMANDS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS OTHER_COMMANDS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS COMMIT_TRANSACTIONS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ROLLBACK_TRANSACTIONS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS DENIED_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS LOST_CONNECTIONS bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS ACCESS_DENIED bigint NULL NULL NULL NULL bigint(21) +NULL information_schema USER_STATISTICS EMPTY_QUERIES bigint NULL NULL NULL NULL bigint(21) 3.0000 information_schema VIEWS TABLE_CATALOG varchar 512 1536 utf8 utf8_general_ci varchar(512) 3.0000 information_schema VIEWS TABLE_SCHEMA varchar 64 192 utf8 utf8_general_ci varchar(64) 3.0000 information_schema VIEWS TABLE_NAME varchar 64 192 utf8 utf8_general_ci varchar(64) @@ -953,7 +1164,4 @@ NULL information_schema USER_STATISTICS EMPTY_QUERIES int NULL NULL NULL NULL in 3.0000 information_schema VIEWS SECURITY_TYPE varchar 7 21 utf8 utf8_general_ci varchar(7) 3.0000 information_schema VIEWS CHARACTER_SET_CLIENT varchar 32 96 utf8 utf8_general_ci varchar(32) 3.0000 information_schema VIEWS COLLATION_CONNECTION varchar 32 96 utf8 utf8_general_ci varchar(32) -3.0000 information_schema XTRADB_ENHANCEMENTS name varchar 255 765 utf8 utf8_general_ci varchar(255) -3.0000 information_schema XTRADB_ENHANCEMENTS description varchar 255 765 utf8 utf8_general_ci varchar(255) -3.0000 information_schema XTRADB_ENHANCEMENTS comment varchar 100 300 utf8 utf8_general_ci varchar(100) -3.0000 information_schema XTRADB_ENHANCEMENTS link varchar 255 765 utf8 utf8_general_ci varchar(255) +3.0000 information_schema XTRADB_ADMIN_COMMAND result_message varchar 1024 3072 utf8 utf8_general_ci varchar(1024) diff --git a/mysql-test/suite/funcs_1/t/is_columns_is.test b/mysql-test/suite/funcs_1/t/is_columns_is.test index 7e40eac0923..e6415abd1f3 100644 --- a/mysql-test/suite/funcs_1/t/is_columns_is.test +++ b/mysql-test/suite/funcs_1/t/is_columns_is.test @@ -16,8 +16,6 @@ # --source include/not_embedded.inc -# This test depends on having the PBXT information_schema stuff. ---source include/have_pbxt.inc --source include/have_innodb.inc --source include/have_xtradb.inc diff --git a/mysql-test/t/information_schema_all_engines.test b/mysql-test/t/information_schema_all_engines.test index b20ce60985c..9ede9f7d92a 100644 --- a/mysql-test/t/information_schema_all_engines.test +++ b/mysql-test/t/information_schema_all_engines.test @@ -3,18 +3,19 @@ # available (since these engines inject tables into INFORMATION_SCHEMA). --source include/not_embedded.inc ---source include/have_pbxt.inc --source include/have_innodb.inc --source include/not_staging.inc use INFORMATION_SCHEMA; --replace_result Tables_in_INFORMATION_SCHEMA Tables_in_information_schema +--sorted_result show tables; # # Bug#18925: subqueries with MIN/MAX functions on INFORMATION_SCHEMA # +--sorted_result SELECT t.table_name, c1.column_name FROM information_schema.tables t INNER JOIN @@ -29,6 +30,7 @@ SELECT t.table_name, c1.column_name c2.table_name = t.table_name AND c2.column_name LIKE '%SCHEMA%' ); +--sorted_result SELECT t.table_name, c1.column_name FROM information_schema.tables t INNER JOIN From b0fec77df9c359474f8f2c11c538ae0db8e31975 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 9 Nov 2012 12:49:12 +0200 Subject: [PATCH 35/60] Disable PBXT on Windows to match all other platforms. --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 57e05137f7a..a61e0242cc5 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,7 +38,6 @@ SET(WITH_BLACKHOLE_STORAGE_ENGINE 1 CACHE BOOL "Include blockhole storage engine SET(WITH_FEDERATEDX_STORAGE_ENGINE 1 CACHE BOOL "Include federatedx storage engine") SET(WITH_PARTITION_STORAGE_ENGINE 1 CACHE BOOL "Include partition storage engine") SET(WITH_ARIA_STORAGE_ENGINE 1 CACHE BOOL "Include aria storage engine") -SET(WITH_PBXT_STORAGE_ENGINE 1 CACHE BOOL "Include pbxt storage engine") SET(WITH_XTRADB_STORAGE_ENGINE 1 CACHE BOOL "Include xtradb storage engine") SET(WITH_FEEDBACK_STORAGE_ENGINE 1 CACHE FORCE BOOL "Include feedback plugin") From 49c8d8b2e613e7c28663df0234e6d98d727eaebd Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 9 Nov 2012 13:07:32 +0200 Subject: [PATCH 36/60] MDEV-3810 fix. The problem is that memory alocated by copy_andor_structure() well be freed, but if level of SELECT_LEX it will be excluded (in case of merge derived tables and view) then sl->where/having will not be updated here but still can be accessed (so it will be access to freed memory). (patch by Sanja) --- sql/sql_prepare.cc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 9e8a6b941c6..d91d03d24ee 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -2447,14 +2447,24 @@ void reinit_stmt_before_use(THD *thd, LEX *lex) */ if (sl->prep_where) { - sl->where= sl->prep_where->copy_andor_structure(thd); + /* + We need this rollback because memory allocated in + copy_andor_structure() will be freed + */ + thd->change_item_tree((Item**)&sl->where, + sl->prep_where->copy_andor_structure(thd)); sl->where->cleanup(); } else sl->where= NULL; if (sl->prep_having) { - sl->having= sl->prep_having->copy_andor_structure(thd); + /* + We need this rollback because memory allocated in + copy_andor_structure() will be freed + */ + thd->change_item_tree((Item**)&sl->having, + sl->prep_having->copy_andor_structure(thd)); sl->having->cleanup(); } else From c08523f36571f62eb5bf2c70d92f478c9e4c7177 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 9 Nov 2012 15:27:13 +0200 Subject: [PATCH 37/60] adjust openssl_1 test as in 5.2 (no idea why this didn't merge) --- mysql-test/t/openssl_1.test | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mysql-test/t/openssl_1.test b/mysql-test/t/openssl_1.test index 2680af1de6c..74e2bd65717 100644 --- a/mysql-test/t/openssl_1.test +++ b/mysql-test/t/openssl_1.test @@ -75,7 +75,7 @@ drop table t1; --exec echo "this query should not execute;" > $MYSQLTEST_VARDIR/tmp/test.sql # Handle that openssl gives different error messages from YaSSL. #--replace_regex /error:00000005:lib\(0\):func\(0\):DH lib/ASN: bad other signature confirmation/ ---replace_regex /2026 SSL error.*/2026 SSL connection error: xxxx/ +--replace_regex /2026 SSL .*error.*/2026 SSL connection error: xxxx/ --error 1 --exec $MYSQL_TEST --ssl-ca=$MYSQL_TEST_DIR/std_data/untrusted-cacert.pem --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 --echo @@ -85,7 +85,7 @@ drop table t1; # a blank ca # #--replace_regex /error:00000005:lib\(0\):func\(0\):DH lib/ASN: bad other signature confirmation/ ---replace_regex /2026 SSL error.*/2026 SSL connection error: xxxx/ +--replace_regex /2026 SSL .*error.*/2026 SSL connection error: xxxx/ --error 1 --exec $MYSQL_TEST --ssl-ca= --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 --echo @@ -95,7 +95,7 @@ drop table t1; # a nonexistent ca file # #--replace_regex /error:00000005:lib\(0\):func\(0\):DH lib/ASN: bad other signature confirmation/ ---replace_regex /2026 SSL error.*/2026 SSL connection error: xxxx/ +--replace_regex /2026 SSL .*error.*/2026 SSL connection error: xxxx/ --error 1 --exec $MYSQL_TEST --ssl-ca=nonexisting_file.pem --max-connect-retries=1 < $MYSQLTEST_VARDIR/tmp/test.sql 2>&1 --echo From 8db072748fc9beb11fa34fe3efc3e31f17499409 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Fri, 9 Nov 2012 20:15:23 +0100 Subject: [PATCH 38/60] add a test case for MySQL Bug #13889741: HANDLE_FATAL_SIGNAL IN _DB_ENTER_ | HANDLE_FATAL_SIGNAL IN STRNLEN --- mysql-test/r/information_schema.result | 2 ++ mysql-test/t/information_schema.test | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result index 608ada570fb..2d26850808a 100644 --- a/mysql-test/r/information_schema.result +++ b/mysql-test/r/information_schema.result @@ -1673,4 +1673,6 @@ SELECT length(CAST(b AS CHAR)) FROM ubig; length(CAST(b AS CHAR)) 20 DROP TABLE ubig; +select 1 from information_schema.tables where table_schema=repeat('a', 2000); +1 End of 5.1 tests. diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test index e78b180caf7..a6b07f379ec 100644 --- a/mysql-test/t/information_schema.test +++ b/mysql-test/t/information_schema.test @@ -1438,6 +1438,10 @@ SELECT length(CAST(b AS CHAR)) FROM ubig; DROP TABLE ubig; +# +# Bug #13889741: HANDLE_FATAL_SIGNAL IN _DB_ENTER_ | HANDLE_FATAL_SIGNAL IN STRNLEN +# +select 1 from information_schema.tables where table_schema=repeat('a', 2000); --echo End of 5.1 tests. From 83499a108126f7a7f5d9d4bf97afb3ff83c88e6a Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 10 Nov 2012 00:04:44 +0200 Subject: [PATCH 39/60] adjusted test result --- .../suite/funcs_1/r/is_tables_is.result | 230 ++++++++++++++---- 1 file changed, 184 insertions(+), 46 deletions(-) diff --git a/mysql-test/suite/funcs_1/r/is_tables_is.result b/mysql-test/suite/funcs_1/r/is_tables_is.result index 581c94b28be..d34a80b3185 100644 --- a/mysql-test/suite/funcs_1/r/is_tables_is.result +++ b/mysql-test/suite/funcs_1/r/is_tables_is.result @@ -291,6 +291,52 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_PAGE +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_PAGE_LRU +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema TABLE_NAME INNODB_BUFFER_POOL_PAGES TABLE_TYPE SYSTEM VIEW ENGINE MEMORY @@ -360,6 +406,52 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_POOL_STATS +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema +TABLE_NAME INNODB_CHANGED_PAGES +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema TABLE_NAME INNODB_CMP TABLE_TYPE SYSTEM VIEW ENGINE MEMORY @@ -1140,29 +1232,6 @@ CREATE_OPTIONS #CO# TABLE_COMMENT #TC# user_comment Separator ----------------------------------------------------- -TABLE_CATALOG NULL -TABLE_SCHEMA information_schema -TABLE_NAME XTRADB_ENHANCEMENTS -TABLE_TYPE SYSTEM VIEW -ENGINE MEMORY -VERSION 10 -ROW_FORMAT Fixed -TABLE_ROWS #TBLR# -AVG_ROW_LENGTH #ARL# -DATA_LENGTH #DL# -MAX_DATA_LENGTH #MDL# -INDEX_LENGTH #IL# -DATA_FREE #DF# -AUTO_INCREMENT NULL -CREATE_TIME #CRT# -UPDATE_TIME #UT# -CHECK_TIME #CT# -TABLE_COLLATION utf8_general_ci -CHECKSUM NULL -CREATE_OPTIONS #CO# -TABLE_COMMENT #TC# -user_comment -Separator ----------------------------------------------------- DROP USER testuser1@localhost; CREATE USER testuser1@localhost; GRANT SELECT ON test1.* TO testuser1@localhost; @@ -1458,6 +1527,52 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_PAGE +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_PAGE_LRU +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema TABLE_NAME INNODB_BUFFER_POOL_PAGES TABLE_TYPE SYSTEM VIEW ENGINE MEMORY @@ -1527,6 +1642,52 @@ user_comment Separator ----------------------------------------------------- TABLE_CATALOG NULL TABLE_SCHEMA information_schema +TABLE_NAME INNODB_BUFFER_POOL_STATS +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema +TABLE_NAME INNODB_CHANGED_PAGES +TABLE_TYPE SYSTEM VIEW +ENGINE MEMORY +VERSION 10 +ROW_FORMAT Fixed +TABLE_ROWS #TBLR# +AVG_ROW_LENGTH #ARL# +DATA_LENGTH #DL# +MAX_DATA_LENGTH #MDL# +INDEX_LENGTH #IL# +DATA_FREE #DF# +AUTO_INCREMENT NULL +CREATE_TIME #CRT# +UPDATE_TIME #UT# +CHECK_TIME #CT# +TABLE_COLLATION utf8_general_ci +CHECKSUM NULL +CREATE_OPTIONS #CO# +TABLE_COMMENT #TC# +user_comment +Separator ----------------------------------------------------- +TABLE_CATALOG NULL +TABLE_SCHEMA information_schema TABLE_NAME INNODB_CMP TABLE_TYPE SYSTEM VIEW ENGINE MEMORY @@ -2307,29 +2468,6 @@ CREATE_OPTIONS #CO# TABLE_COMMENT #TC# user_comment Separator ----------------------------------------------------- -TABLE_CATALOG NULL -TABLE_SCHEMA information_schema -TABLE_NAME XTRADB_ENHANCEMENTS -TABLE_TYPE SYSTEM VIEW -ENGINE MEMORY -VERSION 10 -ROW_FORMAT Fixed -TABLE_ROWS #TBLR# -AVG_ROW_LENGTH #ARL# -DATA_LENGTH #DL# -MAX_DATA_LENGTH #MDL# -INDEX_LENGTH #IL# -DATA_FREE #DF# -AUTO_INCREMENT NULL -CREATE_TIME #CRT# -UPDATE_TIME #UT# -CHECK_TIME #CT# -TABLE_COLLATION utf8_general_ci -CHECKSUM NULL -CREATE_OPTIONS #CO# -TABLE_COMMENT #TC# -user_comment -Separator ----------------------------------------------------- # Switch to connection default and close connection testuser1 DROP USER testuser1@localhost; DROP DATABASE test1; From f716806a90a5973631aa33b272a63d2bfdfb5de0 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 10 Nov 2012 00:10:06 +0200 Subject: [PATCH 40/60] Increase the version number to 5.3.10. --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index 84eca46fae0..ef5321e7b8e 100644 --- a/configure.in +++ b/configure.in @@ -13,7 +13,7 @@ dnl When changing the major version number please also check the switch dnl statement in mysqlbinlog::check_master_version(). You may also need dnl to update version.c in ndb. -AC_INIT([MariaDB Server], [5.3.9-MariaDB], [], [mysql]) +AC_INIT([MariaDB Server], [5.3.10-MariaDB], [], [mysql]) AC_CONFIG_SRCDIR([sql/mysqld.cc]) AC_CANONICAL_SYSTEM From 094f4cf77890c5a747a57cf2bed149b0b6933507 Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Fri, 9 Nov 2012 23:51:51 -0800 Subject: [PATCH 41/60] Fixed bug mdev-3845. If triggers are used for an insert/update/delete statement than the values of all virtual columns must be computed as any of them may be used by the triggers. --- mysql-test/suite/vcol/inc/vcol_trigger_sp.inc | 41 +++++++++++++++++++ .../vcol/r/vcol_trigger_sp_innodb.result | 40 ++++++++++++++++++ .../vcol/r/vcol_trigger_sp_myisam.result | 40 ++++++++++++++++++ sql/mysql_priv.h | 3 +- sql/sql_base.cc | 17 ++++++-- sql/sql_delete.cc | 4 +- sql/sql_table.cc | 2 +- sql/sql_update.cc | 8 +++- sql/table.cc | 21 ++++++---- sql/table.h | 7 ++++ 10 files changed, 165 insertions(+), 18 deletions(-) diff --git a/mysql-test/suite/vcol/inc/vcol_trigger_sp.inc b/mysql-test/suite/vcol/inc/vcol_trigger_sp.inc index ddf13fef6a1..eb7e6ad32b9 100644 --- a/mysql-test/suite/vcol/inc/vcol_trigger_sp.inc +++ b/mysql-test/suite/vcol/inc/vcol_trigger_sp.inc @@ -108,3 +108,44 @@ select * from t1; drop table t1,t2; drop procedure p1; + +--echo # +--echo # Bug mdev-3845: values of virtual columns are not computed for triggers +--echo # + +CREATE TABLE t1 ( + a INTEGER UNSIGNED NULL DEFAULT NULL, + b INTEGER UNSIGNED GENERATED ALWAYS AS (a) VIRTUAL +); + +CREATE TABLE t2 (c INTEGER UNSIGNED NOT NULL); + +DELIMITER |; + +CREATE TRIGGER t1_ins_aft + AFTER INSERT + ON t1 + FOR EACH ROW +BEGIN + INSERT INTO t2 (c) VALUES (NEW.b); +END | + +CREATE TRIGGER t1_del_bef + BEFORE DELETE + ON t1 + FOR EACH ROW +BEGIN + INSERT INTO t2 (c) VALUES (OLD.b); +END | + +DELIMITER ;| + +INSERT INTO t1 (a) VALUES (1), (2), (3); +SELECT * FROM t2; +DELETE FROM t1; +SELECT * FROM t2; + +DROP TRIGGER t1_ins_aft; +DROP TRIGGER t1_del_bef; +DROP TABLE t1,t2; + diff --git a/mysql-test/suite/vcol/r/vcol_trigger_sp_innodb.result b/mysql-test/suite/vcol/r/vcol_trigger_sp_innodb.result index e903bc4eafd..1d78bbf50e4 100644 --- a/mysql-test/suite/vcol/r/vcol_trigger_sp_innodb.result +++ b/mysql-test/suite/vcol/r/vcol_trigger_sp_innodb.result @@ -85,3 +85,43 @@ a b c 300 30 30 drop table t1,t2; drop procedure p1; +# +# Bug mdev-3845: values of virtual columns are not computed for triggers +# +CREATE TABLE t1 ( +a INTEGER UNSIGNED NULL DEFAULT NULL, +b INTEGER UNSIGNED GENERATED ALWAYS AS (a) VIRTUAL +); +CREATE TABLE t2 (c INTEGER UNSIGNED NOT NULL); +CREATE TRIGGER t1_ins_aft +AFTER INSERT +ON t1 +FOR EACH ROW +BEGIN +INSERT INTO t2 (c) VALUES (NEW.b); +END | +CREATE TRIGGER t1_del_bef +BEFORE DELETE +ON t1 +FOR EACH ROW +BEGIN +INSERT INTO t2 (c) VALUES (OLD.b); +END | +INSERT INTO t1 (a) VALUES (1), (2), (3); +SELECT * FROM t2; +c +1 +2 +3 +DELETE FROM t1; +SELECT * FROM t2; +c +1 +2 +3 +1 +2 +3 +DROP TRIGGER t1_ins_aft; +DROP TRIGGER t1_del_bef; +DROP TABLE t1,t2; diff --git a/mysql-test/suite/vcol/r/vcol_trigger_sp_myisam.result b/mysql-test/suite/vcol/r/vcol_trigger_sp_myisam.result index c2a66d656b5..77efa8fe6b9 100644 --- a/mysql-test/suite/vcol/r/vcol_trigger_sp_myisam.result +++ b/mysql-test/suite/vcol/r/vcol_trigger_sp_myisam.result @@ -85,3 +85,43 @@ a b c 300 30 30 drop table t1,t2; drop procedure p1; +# +# Bug mdev-3845: values of virtual columns are not computed for triggers +# +CREATE TABLE t1 ( +a INTEGER UNSIGNED NULL DEFAULT NULL, +b INTEGER UNSIGNED GENERATED ALWAYS AS (a) VIRTUAL +); +CREATE TABLE t2 (c INTEGER UNSIGNED NOT NULL); +CREATE TRIGGER t1_ins_aft +AFTER INSERT +ON t1 +FOR EACH ROW +BEGIN +INSERT INTO t2 (c) VALUES (NEW.b); +END | +CREATE TRIGGER t1_del_bef +BEFORE DELETE +ON t1 +FOR EACH ROW +BEGIN +INSERT INTO t2 (c) VALUES (OLD.b); +END | +INSERT INTO t1 (a) VALUES (1), (2), (3); +SELECT * FROM t2; +c +1 +2 +3 +DELETE FROM t1; +SELECT * FROM t2; +c +1 +2 +3 +1 +2 +3 +DROP TRIGGER t1_ins_aft; +DROP TRIGGER t1_del_bef; +DROP TABLE t1,t2; diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index addb29861fc..73b8ad86426 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -1366,7 +1366,8 @@ find_field_in_table(THD *thd, TABLE *table, const char *name, uint length, bool allow_rowid, uint *cached_field_index_ptr); Field * find_field_in_table_sef(TABLE *table, const char *name); -int update_virtual_fields(THD *thd, TABLE *table, bool ignore_stored= FALSE); +int update_virtual_fields(THD *thd, TABLE *table, + enum enum_vcol_update_mode vcol_update_mode= VCOL_UPDATE_FOR_READ); #endif /* MYSQL_SERVER */ diff --git a/sql/sql_base.cc b/sql/sql_base.cc index f45403696be..32a5bd8356f 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -8460,7 +8460,9 @@ fill_record(THD * thd, List &fields, List &values, { if (vcol_table->vfield) { - if (update_virtual_fields(thd, vcol_table, TRUE)) + if (update_virtual_fields(thd, vcol_table, + vcol_table->triggers ? VCOL_UPDATE_ALL : + VCOL_UPDATE_FOR_WRITE)) goto err; } } @@ -8524,7 +8526,9 @@ fill_record_n_invoke_before_triggers(THD *thd, List &fields, if (item_field && item_field->field && (table= item_field->field->table) && table->vfield) - result= update_virtual_fields(thd, table, TRUE); + result= update_virtual_fields(thd, table, + table->triggers ? VCOL_UPDATE_ALL : + VCOL_UPDATE_FOR_WRITE); } } return result; @@ -8604,7 +8608,10 @@ fill_record(THD *thd, Field **ptr, List &values, bool ignore_errors) } /* Update virtual fields*/ thd->abort_on_warning= FALSE; - if (table->vfield && update_virtual_fields(thd, table, TRUE)) + if (table->vfield && + update_virtual_fields(thd, table, + table->triggers ? VCOL_UPDATE_ALL : + VCOL_UPDATE_FOR_WRITE)) goto err; thd->abort_on_warning= abort_on_warning_saved; DBUG_RETURN(thd->is_error()); @@ -8657,7 +8664,9 @@ fill_record_n_invoke_before_triggers(THD *thd, Field **ptr, { TABLE *table= (*ptr)->table; if (table->vfield) - result= update_virtual_fields(thd, table, TRUE); + result= update_virtual_fields(thd, table, + table->triggers ? VCOL_UPDATE_ALL : + VCOL_UPDATE_FOR_WRITE); } return result; diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 72a5b9703b3..90ca139d17b 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -313,7 +313,9 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, while (!(error=info.read_record(&info)) && !thd->killed && ! thd->is_error()) { - update_virtual_fields(thd, table); + update_virtual_fields(thd, table, + triggers_applicable ? VCOL_UPDATE_ALL : + VCOL_UPDATE_FOR_READ); thd->examined_row_count++; // thd->is_error() is tested to disallow delete row on error if (!select || select->skip_record(thd) > 0) diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 6b709915283..9b9ee0a743d 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -8066,7 +8066,7 @@ copy_data_between_tables(TABLE *from,TABLE *to, copy_ptr->do_copy(copy_ptr); } prev_insert_id= to->file->next_insert_id; - update_virtual_fields(thd, to, TRUE); + update_virtual_fields(thd, to, VCOL_UPDATE_FOR_WRITE); if (thd->is_error()) { error= 1; diff --git a/sql/sql_update.cc b/sql/sql_update.cc index b3c001849b5..56b2c508fbc 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -490,7 +490,9 @@ int mysql_update(THD *thd, while (!(error=info.read_record(&info)) && !thd->killed) { - update_virtual_fields(thd, table); + update_virtual_fields(thd, table, + table->triggers ? VCOL_UPDATE_ALL : + VCOL_UPDATE_FOR_READ); thd->examined_row_count++; if (!select || (error= select->skip_record(thd)) > 0) { @@ -605,7 +607,9 @@ int mysql_update(THD *thd, while (!(error=info.read_record(&info)) && !thd->killed) { - update_virtual_fields(thd, table); + update_virtual_fields(thd, table, + table->triggers ? VCOL_UPDATE_ALL : + VCOL_UPDATE_FOR_READ); thd->examined_row_count++; if (!select || select->skip_record(thd) > 0) { diff --git a/sql/table.cc b/sql/table.cc index d950b7a3a4e..5c1e27b87c7 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -5500,22 +5500,25 @@ size_t max_row_length(TABLE *table, const uchar *data) @param thd Thread handle @param table The TABLE object - @param for_write Requests to compute only fields needed for write + @param vcol_update_mode Specifies what virtual column are computed @details The function computes the values of the virtual columns of the table and stores them in the table record buffer. - Only fields from vcol_set are computed, and, when the flag for_write is not - set to TRUE, a virtual field is computed only if it's not stored. - The flag for_write is set to TRUE for row insert/update operations. - + If vcol_update_mode is set to VCOL_UPDATE_ALL then all virtual column are + computed. Otherwise, only fields from vcol_set are computed: all of them, + if vcol_update_mode is set to VCOL_UPDATE_FOR_WRITE, and, only those with + the stored_in_db flag set to false, if vcol_update_mode is equal to + VCOL_UPDATE_FOR_READ. + @retval 0 Success @retval >0 Error occurred when storing a virtual field value */ -int update_virtual_fields(THD *thd, TABLE *table, bool for_write) +int update_virtual_fields(THD *thd, TABLE *table, + enum enum_vcol_update_mode vcol_update_mode) { DBUG_ENTER("update_virtual_fields"); Field **vfield_ptr, *vfield; @@ -5529,9 +5532,9 @@ int update_virtual_fields(THD *thd, TABLE *table, bool for_write) { vfield= (*vfield_ptr); DBUG_ASSERT(vfield->vcol_info && vfield->vcol_info->expr_item); - /* Only update those fields that are marked in the vcol_set bitmap */ - if (bitmap_is_set(table->vcol_set, vfield->field_index) && - (for_write || !vfield->stored_in_db)) + if ((bitmap_is_set(table->vcol_set, vfield->field_index) && + (vcol_update_mode == VCOL_UPDATE_FOR_WRITE || !vfield->stored_in_db)) || + vcol_update_mode == VCOL_UPDATE_ALL) { /* Compute the actual value of the virtual fields */ error= vfield->vcol_info->expr_item->save_in_field(vfield, 0); diff --git a/sql/table.h b/sql/table.h index c1a4e952f7b..80544ef3d89 100644 --- a/sql/table.h +++ b/sql/table.h @@ -156,6 +156,13 @@ enum frm_type_enum enum release_type { RELEASE_NORMAL, RELEASE_WAIT_FOR_DROP }; +enum enum_vcol_update_mode +{ + VCOL_UPDATE_FOR_READ= 0, + VCOL_UPDATE_FOR_WRITE, + VCOL_UPDATE_ALL +}; + typedef struct st_filesort_info { IO_CACHE *io_cache; /* If sorted through filesort */ From 353130204dead31c311cfc2877278640df84a5ee Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Sat, 10 Nov 2012 20:36:18 +0100 Subject: [PATCH 42/60] MDEV-3849 - 1 bytes stack overwrite in normalize_dirname(). Take into account that length of strings passed down to this function can be up to FN_REFLEN+1 bytes. including terminating zero. The overwrite was caused by incomplete fix to MySQL Bug # 44834 --- mysys/mf_pack.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c index 86fd61537e7..e6b576b6d96 100644 --- a/mysys/mf_pack.c +++ b/mysys/mf_pack.c @@ -35,7 +35,7 @@ void pack_dirname(char * to, const char *from) int cwd_err; size_t d_length,length,UNINIT_VAR(buff_length); char * start; - char buff[FN_REFLEN]; + char buff[FN_REFLEN + 1]; DBUG_ENTER("pack_dirname"); (void) intern_filename(to,from); /* Change to intern name */ @@ -132,7 +132,7 @@ size_t cleanup_dirname(register char *to, const char *from) reg3 char * from_ptr; reg4 char * start; char parent[5], /* for "FN_PARENTDIR" */ - buff[FN_REFLEN+1],*end_parentdir; + buff[FN_REFLEN + 1],*end_parentdir; #ifdef BACKSLASH_MBTAIL CHARSET_INFO *fs= fs_character_set(); #endif @@ -245,7 +245,7 @@ my_bool my_use_symdir=0; /* Set this if you want to use symdirs */ #ifdef USE_SYMDIR void symdirget(char *dir) { - char buff[FN_REFLEN+1]; + char buff[FN_REFLEN + 1]; char *pos=strend(dir); if (dir[0] && pos[-1] != FN_DEVCHAR && my_access(dir, F_OK)) { @@ -295,7 +295,7 @@ void symdirget(char *dir) size_t normalize_dirname(char *to, const char *from) { size_t length; - char buff[FN_REFLEN]; + char buff[FN_REFLEN + 1]; DBUG_ENTER("normalize_dirname"); /* @@ -423,7 +423,7 @@ static char * NEAR_F expand_tilde(char * *path) size_t unpack_filename(char * to, const char *from) { size_t length, n_length, buff_length; - char buff[FN_REFLEN]; + char buff[FN_REFLEN + 1]; DBUG_ENTER("unpack_filename"); length=dirname_part(buff, from, &buff_length);/* copy & convert dirname */ @@ -459,7 +459,7 @@ size_t system_filename(char * to, const char *from) int libchar_found; size_t length; char * to_pos,from_pos,pos; - char buff[FN_REFLEN]; + char buff[FN_REFLEN + 1]; DBUG_ENTER("system_filename"); libchar_found=0; @@ -516,7 +516,7 @@ size_t system_filename(char * to, const char *from) char *intern_filename(char *to, const char *from) { size_t length, to_length; - char buff[FN_REFLEN]; + char buff[FN_REFLEN + 1]; if (from == to) { /* Dirname may destroy from */ strmov(buff,from); From e679dfcafc630e2dbe506d0001322055d7684e03 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 12 Nov 2012 19:56:51 +0100 Subject: [PATCH 43/60] followup fixes for MySQL Bug #13889741: HANDLE_FATAL_SIGNAL IN _DB_ENTER_ | HANDLE_FATAL_SIGNAL IN STRNLEN --- mysql-test/r/information_schema.result | 4 ++++ mysql-test/t/information_schema.test | 7 +++++++ sql/sql_acl.cc | 20 ++++++++++++++++---- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result index 2d26850808a..cacb18ba728 100644 --- a/mysql-test/r/information_schema.result +++ b/mysql-test/r/information_schema.result @@ -1675,4 +1675,8 @@ length(CAST(b AS CHAR)) DROP TABLE ubig; select 1 from information_schema.tables where table_schema=repeat('a', 2000); 1 +grant usage on *.* to mysqltest_1@localhost; +select 1 from information_schema.tables where table_schema=repeat('a', 2000); +1 +drop user mysqltest_1@localhost; End of 5.1 tests. diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test index a6b07f379ec..ae733443479 100644 --- a/mysql-test/t/information_schema.test +++ b/mysql-test/t/information_schema.test @@ -1442,6 +1442,13 @@ DROP TABLE ubig; # Bug #13889741: HANDLE_FATAL_SIGNAL IN _DB_ENTER_ | HANDLE_FATAL_SIGNAL IN STRNLEN # select 1 from information_schema.tables where table_schema=repeat('a', 2000); +grant usage on *.* to mysqltest_1@localhost; +connect (con1, localhost, mysqltest_1,,); +connection con1; +select 1 from information_schema.tables where table_schema=repeat('a', 2000); +connection default; +disconnect con1; +drop user mysqltest_1@localhost; --echo End of 5.1 tests. diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 89b70032642..020aa042722 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -1353,14 +1353,20 @@ ulong acl_get(const char *host, const char *ip, acl_entry *entry; DBUG_ENTER("acl_get"); - VOID(pthread_mutex_lock(&acl_cache->lock)); - end=strmov((tmp_db=strmov(strmov(key, ip ? ip : "")+1,user)+1),db); + tmp_db= strmov(strmov(key, ip ? ip : "") + 1, user) + 1; + end= strnmov(tmp_db, db, key + sizeof(key) - tmp_db); + + if (end >= key + sizeof(key)) // db name was truncated + DBUG_RETURN(0); // no privileges for an invalid db name + if (lower_case_table_names) { my_casedn_str(files_charset_info, tmp_db); db=tmp_db; } key_length= (size_t) (end-key); + + VOID(pthread_mutex_lock(&acl_cache->lock)); if (!db_is_pattern && (entry=(acl_entry*) acl_cache->search((uchar*) key, key_length))) { @@ -4331,11 +4337,17 @@ static bool check_grant_db_routine(THD *thd, const char *db, HASH *hash) bool check_grant_db(THD *thd,const char *db) { Security_context *sctx= thd->security_ctx; - char helping [SAFE_NAME_LEN + USERNAME_LENGTH+2]; + char helping [SAFE_NAME_LEN + USERNAME_LENGTH+2], *end; uint len; bool error= TRUE; - len= (uint) (strmov(strmov(helping, sctx->priv_user) + 1, db) - helping) + 1; + end= strmov(helping, sctx->priv_user) + 1; + end= strnmov(end, db, helping + sizeof(helping) - end); + + if (end >= helping + sizeof(helping)) // db name was truncated + return 1; // no privileges for an invalid db name + + len= (uint) (end - helping) + 1; rw_rdlock(&LOCK_grant); From 3a1fdc9e7fc65e29320b988f9a69c8acab168ff9 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 15 Nov 2012 19:20:10 +0100 Subject: [PATCH 44/60] MDEV-3826 compilation of client programs fail: m_string.h tries to include mysql_config: - add not only $pkgincludedir, but also $pkgincludedir/.. to the header search path, for #include to work scripts/mysql_config.sh: - don't support headers in */include anymore. only in */include/mysql - remove the incorrect "bug fix" (fixed correctly long time ago) - add not only $pkgincludedir, but also $pkgincludedir/.. to the header search path, for #include to work - but don't do it, if $pkgincludedir/.. is /usr/include --- scripts/mysql_config.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/scripts/mysql_config.sh b/scripts/mysql_config.sh index fd15d7ac746..38cd2b6b910 100644 --- a/scripts/mysql_config.sh +++ b/scripts/mysql_config.sh @@ -92,11 +92,7 @@ plugindir_rel=`echo $plugindir | sed -e "s;^$basedir/;;"` fix_path plugindir $plugindir_rel lib/mysql/plugin lib/plugin pkgincludedir='@pkgincludedir@' -if [ -f "$basedir/include/mysql/mysql.h" ]; then - pkgincludedir="$basedir/include/mysql" -elif [ -f "$basedir/include/mysql.h" ]; then - pkgincludedir="$basedir/include" -fi +fix_path pkgincludedir include/mysql version='@VERSION@' socket='@MYSQL_UNIX_ADDR@' @@ -125,8 +121,11 @@ if [ -r "$pkglibdir/libmygcc.a" ]; then embedded_libs="$embedded_libs -lmygcc " fi -cflags="-I$pkgincludedir @CFLAGS@ " #note: end space! include="-I$pkgincludedir" +if [ "$basedir" != "/usr" ]; then + include="$include -I$pkgincludedir/.." +fi +cflags="$include @CFLAGS@ " #note: end space! # Remove some options that a client doesn't have to care about # FIXME until we have a --cxxflags, we need to remove -Xa From 632dc05ded27eeb0976e7a67310749ab4635614b Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 17 Nov 2012 19:04:13 +0100 Subject: [PATCH 45/60] MDEV-3850 too early pthread_mutex_unlock in TC_LOG_MMAP::log_xid --- sql/log.cc | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/sql/log.cc b/sql/log.cc index 4c21ac4c571..eb248c63b19 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -5710,12 +5710,9 @@ int TC_LOG_MMAP::log_xid(THD *thd, my_xid xid) pthread_mutex_unlock(&LOCK_active); pthread_mutex_lock(&p->lock); p->waiters++; - for (;;) + while (p->state == DIRTY && syncing) { - int not_dirty = p->state != DIRTY; pthread_mutex_unlock(&p->lock); - if (not_dirty || !syncing) - break; pthread_cond_wait(&p->cond, &LOCK_sync); pthread_mutex_lock(&p->lock); } From 9e7d870b360b165ac7960814a2fa5bf6011eab1a Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 19 Nov 2012 11:18:40 +0100 Subject: [PATCH 46/60] potential crash in the feedback plugin --- plugin/feedback/url_http.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/plugin/feedback/url_http.cc b/plugin/feedback/url_http.cc index 71b67a52807..b0028292707 100644 --- a/plugin/feedback/url_http.cc +++ b/plugin/feedback/url_http.cc @@ -258,18 +258,21 @@ int Url_http::send(const char* data, size_t data_length) Extract the first string between

...

tags and put it as a server reply into the error log. */ + len= 0; for (;;) { - size_t i= vio_read(vio, (uchar*)buf + len, sizeof(buf) - len - 1); + size_t i= sizeof(buf) - len - 1; + if (i) + i= vio_read(vio, (uchar*)buf + len, i); if ((int)i <= 0) break; len+= i; } - if (len && len < sizeof(buf)) + if (len) { char *from; - buf[len+1]= 0; // safety + buf[len]= 0; // safety if ((from= strstr(buf, "

"))) { From 60a7b05871121987f4156405e33f93530e159b74 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 19 Nov 2012 15:38:27 +0200 Subject: [PATCH 47/60] MDEV-3801 Reproducible sub select join crash on 5.3.8 and 5.3.9 Properly drop all unused keys. Patch by Igor Babaev. --- mysql-test/r/derived_opt.result | 72 +++++++++++++++++++++++++++++++++ mysql-test/t/derived_opt.test | 59 +++++++++++++++++++++++++++ sql/sql_select.cc | 2 +- 3 files changed, 132 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/derived_opt.result b/mysql-test/r/derived_opt.result index c5376bee756..818289a740b 100644 --- a/mysql-test/r/derived_opt.result +++ b/mysql-test/r/derived_opt.result @@ -282,4 +282,76 @@ CREATE TABLE t1 ( i INT ); INSERT INTO t1 VALUES ( (SELECT 1 FROM ( SELECT * FROM t1 ) as a) ); drop table t1; set optimizer_switch=@save_optimizer_switch; +# +# MDEV-3801 Reproducible sub select join crash on 5.3.8 and 5.3.9 +# +CREATE TABLE t1 ( +pk int(10) unsigned NOT NULL AUTO_INCREMENT, +a char(2) DEFAULT NULL, +PRIMARY KEY (pk), +KEY a (a) +) ENGINE=MyISAM; +INSERT INTO t1 (a) +VALUES (NULL),(NULL),(NULL),('AB'),(NULL),('CD'),(NULL),(NULL); +INSERT INTO t1 SELECT NULL, a1.a FROM t1 a1, t1 a2, t1 a3, t1 a4, t1 a5; +CREATE TABLE t2 ( +pk int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY +) ENGINE=MyISAM; +INSERT INTO t2 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL); +INSERT INTO t2 SELECT NULL FROM t2 a1, t2 a2, t2 a3, t2 a4, t2 a5; +CREATE TABLE t3 ( +pk int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY +) ENGINE=MyISAM; +INSERT INTO t3 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL); +INSERT INTO t3 SELECT NULL FROM t3 a1, t3 a2, t3 a3, t3 a4, t3 a5; +CREATE TABLE t4 ( +a char(2) NOT NULL DEFAULT '', +PRIMARY KEY (a) +) ENGINE=MyISAM; +INSERT INTO t4 VALUES ('CD'); +set @@tmp_table_size=8192; +EXPLAIN EXTENDED +SELECT * FROM t3 AS tX JOIN t2 AS tY ON (tX.pk = tY.pk) +WHERE +tX.pk IN +(SELECT * +FROM (SELECT DISTINCT tA.pk +FROM t3 AS tA +JOIN t2 AS tB ON (tA.pk = tB.pk) +JOIN t1 AS tC ON (tB.pk = tC.pk) +JOIN t4 AS tD ON tC.a = tD.a) tU) +limit 10; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 PRIMARY ALL distinct_key NULL NULL NULL 1833 100.00 +1 PRIMARY tX eq_ref PRIMARY PRIMARY 4 tU.pk 1 100.00 Using index +1 PRIMARY tY eq_ref PRIMARY PRIMARY 4 tU.pk 1 100.00 Using index +2 MATERIALIZED ALL NULL NULL NULL NULL 1833 100.00 +3 DERIVED tD system PRIMARY NULL NULL NULL 1 100.00 Using temporary +3 DERIVED tC ref PRIMARY,a a 3 const 1833 100.00 +3 DERIVED tA eq_ref PRIMARY PRIMARY 4 test.tC.pk 1 100.00 Using index +3 DERIVED tB eq_ref PRIMARY PRIMARY 4 test.tC.pk 1 100.00 Using index; Distinct +Warnings: +Note 1003 select `test`.`tX`.`pk` AS `pk`,`test`.`tY`.`pk` AS `pk` from `test`.`t3` `tX` semi join ((select distinct `test`.`tA`.`pk` AS `pk` from `test`.`t3` `tA` join `test`.`t2` `tB` join `test`.`t1` `tC` join `test`.`t4` `tD` where ((`test`.`tA`.`pk` = `test`.`tC`.`pk`) and (`test`.`tB`.`pk` = `test`.`tC`.`pk`) and (`test`.`tC`.`a` = 'CD'))) `tU`) join `test`.`t2` `tY` where ((`test`.`tX`.`pk` = `tU`.`pk`) and (`test`.`tY`.`pk` = `tU`.`pk`)) limit 10 +SELECT * FROM t3 AS tX JOIN t2 AS tY ON (tX.pk = tY.pk) +WHERE +tX.pk IN +(SELECT * +FROM (SELECT DISTINCT tA.pk +FROM t3 AS tA +JOIN t2 AS tB ON (tA.pk = tB.pk) +JOIN t1 AS tC ON (tB.pk = tC.pk) +JOIN t4 AS tD ON tC.a = tD.a) tU) +limit 10; +pk pk +6 6 +16 16 +24 24 +32 32 +40 40 +48 48 +56 56 +64 64 +72 72 +80 80 +drop table t1, t2, t3, t4; set optimizer_switch=@exit_optimizer_switch; diff --git a/mysql-test/t/derived_opt.test b/mysql-test/t/derived_opt.test index c2f831036e1..cd5316052ae 100644 --- a/mysql-test/t/derived_opt.test +++ b/mysql-test/t/derived_opt.test @@ -212,5 +212,64 @@ INSERT INTO t1 VALUES ( (SELECT 1 FROM ( SELECT * FROM t1 ) as a) ); drop table t1; set optimizer_switch=@save_optimizer_switch; +--echo # +--echo # MDEV-3801 Reproducible sub select join crash on 5.3.8 and 5.3.9 +--echo # + +CREATE TABLE t1 ( + pk int(10) unsigned NOT NULL AUTO_INCREMENT, + a char(2) DEFAULT NULL, + PRIMARY KEY (pk), + KEY a (a) +) ENGINE=MyISAM; +INSERT INTO t1 (a) +VALUES (NULL),(NULL),(NULL),('AB'),(NULL),('CD'),(NULL),(NULL); +INSERT INTO t1 SELECT NULL, a1.a FROM t1 a1, t1 a2, t1 a3, t1 a4, t1 a5; + +CREATE TABLE t2 ( + pk int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY +) ENGINE=MyISAM; +INSERT INTO t2 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL); +INSERT INTO t2 SELECT NULL FROM t2 a1, t2 a2, t2 a3, t2 a4, t2 a5; + +CREATE TABLE t3 ( + pk int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY +) ENGINE=MyISAM; +INSERT INTO t3 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL); +INSERT INTO t3 SELECT NULL FROM t3 a1, t3 a2, t3 a3, t3 a4, t3 a5; + +CREATE TABLE t4 ( + a char(2) NOT NULL DEFAULT '', + PRIMARY KEY (a) +) ENGINE=MyISAM; +INSERT INTO t4 VALUES ('CD'); + +set @@tmp_table_size=8192; + +EXPLAIN EXTENDED +SELECT * FROM t3 AS tX JOIN t2 AS tY ON (tX.pk = tY.pk) +WHERE + tX.pk IN + (SELECT * + FROM (SELECT DISTINCT tA.pk + FROM t3 AS tA + JOIN t2 AS tB ON (tA.pk = tB.pk) + JOIN t1 AS tC ON (tB.pk = tC.pk) + JOIN t4 AS tD ON tC.a = tD.a) tU) +limit 10; + +SELECT * FROM t3 AS tX JOIN t2 AS tY ON (tX.pk = tY.pk) +WHERE + tX.pk IN + (SELECT * + FROM (SELECT DISTINCT tA.pk + FROM t3 AS tA + JOIN t2 AS tB ON (tA.pk = tB.pk) + JOIN t1 AS tC ON (tB.pk = tC.pk) + JOIN t4 AS tD ON tC.a = tD.a) tU) +limit 10; + +drop table t1, t2, t3, t4; + # The following command must be the last one the file set optimizer_switch=@exit_optimizer_switch; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index bf01e42f3c0..1e57f11e399 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -8982,7 +8982,7 @@ void JOIN::drop_unused_derived_keys() JOIN_TAB *tab; for (tab= first_linear_tab(this, WITHOUT_CONST_TABLES); tab; - tab= next_linear_tab(this, tab, WITHOUT_BUSH_ROOTS)) + tab= next_linear_tab(this, tab, WITH_BUSH_ROOTS)) { TABLE *table=tab->table; From dd2d59924e06afb29e36a6dda56f6fb393ef6c6e Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 19 Nov 2012 18:17:46 +0200 Subject: [PATCH 48/60] MDEV-3801 Adjust unstable test case. --- mysql-test/r/derived_opt.result | 36 ++++++++++++++++----------------- mysql-test/t/derived_opt.test | 17 ++++++++-------- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/mysql-test/r/derived_opt.result b/mysql-test/r/derived_opt.result index 818289a740b..b75e735446d 100644 --- a/mysql-test/r/derived_opt.result +++ b/mysql-test/r/derived_opt.result @@ -310,28 +310,26 @@ PRIMARY KEY (a) ) ENGINE=MyISAM; INSERT INTO t4 VALUES ('CD'); set @@tmp_table_size=8192; -EXPLAIN EXTENDED -SELECT * FROM t3 AS tX JOIN t2 AS tY ON (tX.pk = tY.pk) +EXPLAIN +SELECT * FROM t3 AS tx JOIN t2 AS ty ON (tx.pk = ty.pk) WHERE -tX.pk IN +tx.pk IN (SELECT * -FROM (SELECT DISTINCT tA.pk -FROM t3 AS tA -JOIN t2 AS tB ON (tA.pk = tB.pk) -JOIN t1 AS tC ON (tB.pk = tC.pk) -JOIN t4 AS tD ON tC.a = tD.a) tU) +FROM (SELECT DISTINCT ta.pk +FROM t3 AS ta +JOIN t2 AS tb ON (ta.pk = tb.pk) +JOIN t1 AS tc ON (tb.pk = tc.pk) +JOIN t4 AS td ON tc.a = td.a) tu) limit 10; -id select_type table type possible_keys key key_len ref rows filtered Extra -1 PRIMARY ALL distinct_key NULL NULL NULL 1833 100.00 -1 PRIMARY tX eq_ref PRIMARY PRIMARY 4 tU.pk 1 100.00 Using index -1 PRIMARY tY eq_ref PRIMARY PRIMARY 4 tU.pk 1 100.00 Using index -2 MATERIALIZED ALL NULL NULL NULL NULL 1833 100.00 -3 DERIVED tD system PRIMARY NULL NULL NULL 1 100.00 Using temporary -3 DERIVED tC ref PRIMARY,a a 3 const 1833 100.00 -3 DERIVED tA eq_ref PRIMARY PRIMARY 4 test.tC.pk 1 100.00 Using index -3 DERIVED tB eq_ref PRIMARY PRIMARY 4 test.tC.pk 1 100.00 Using index; Distinct -Warnings: -Note 1003 select `test`.`tX`.`pk` AS `pk`,`test`.`tY`.`pk` AS `pk` from `test`.`t3` `tX` semi join ((select distinct `test`.`tA`.`pk` AS `pk` from `test`.`t3` `tA` join `test`.`t2` `tB` join `test`.`t1` `tC` join `test`.`t4` `tD` where ((`test`.`tA`.`pk` = `test`.`tC`.`pk`) and (`test`.`tB`.`pk` = `test`.`tC`.`pk`) and (`test`.`tC`.`a` = 'CD'))) `tU`) join `test`.`t2` `tY` where ((`test`.`tX`.`pk` = `tU`.`pk`) and (`test`.`tY`.`pk` = `tU`.`pk`)) limit 10 +id select_type table type possible_keys key key_len ref rows Extra +1 PRIMARY ALL distinct_key NULL NULL NULL # +1 PRIMARY tx eq_ref PRIMARY PRIMARY 4 tu.pk # Using index +1 PRIMARY ty eq_ref PRIMARY PRIMARY 4 tu.pk # Using index +2 MATERIALIZED ALL NULL NULL NULL NULL # +3 DERIVED td system PRIMARY NULL NULL NULL # Using temporary +3 DERIVED tc ref PRIMARY,a a 3 const # +3 DERIVED ta eq_ref PRIMARY PRIMARY 4 test.tc.pk # Using index +3 DERIVED tb eq_ref PRIMARY PRIMARY 4 test.tc.pk # Using index; Distinct SELECT * FROM t3 AS tX JOIN t2 AS tY ON (tX.pk = tY.pk) WHERE tX.pk IN diff --git a/mysql-test/t/derived_opt.test b/mysql-test/t/derived_opt.test index cd5316052ae..b01c479111b 100644 --- a/mysql-test/t/derived_opt.test +++ b/mysql-test/t/derived_opt.test @@ -246,16 +246,17 @@ INSERT INTO t4 VALUES ('CD'); set @@tmp_table_size=8192; -EXPLAIN EXTENDED -SELECT * FROM t3 AS tX JOIN t2 AS tY ON (tX.pk = tY.pk) +--replace_column 9 # +EXPLAIN +SELECT * FROM t3 AS tx JOIN t2 AS ty ON (tx.pk = ty.pk) WHERE - tX.pk IN + tx.pk IN (SELECT * - FROM (SELECT DISTINCT tA.pk - FROM t3 AS tA - JOIN t2 AS tB ON (tA.pk = tB.pk) - JOIN t1 AS tC ON (tB.pk = tC.pk) - JOIN t4 AS tD ON tC.a = tD.a) tU) + FROM (SELECT DISTINCT ta.pk + FROM t3 AS ta + JOIN t2 AS tb ON (ta.pk = tb.pk) + JOIN t1 AS tc ON (tb.pk = tc.pk) + JOIN t4 AS td ON tc.a = td.a) tu) limit 10; SELECT * FROM t3 AS tX JOIN t2 AS tY ON (tX.pk = tY.pk) From 47c5018f592b61b5e000842bdf5862ff458de488 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 20 Nov 2012 13:28:53 +0100 Subject: [PATCH 49/60] MDEV-3861: assertions in TC_LOG_MMAP. Fix some problems in the TC_LOG_MMAP commit processing, which could lead to assertions in some cases. Problems are mostly reproducible in MariaDB 10.0 with asynchroneous commit checkpoints, but most of the problems were present in earlier versions also. --- sql/log.cc | 19 ++++++++++--------- sql/log.h | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/sql/log.cc b/sql/log.cc index eb248c63b19..e44f8ff3067 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -5550,8 +5550,9 @@ int TC_LOG_MMAP::open(const char *opt_name) syncing= 0; active=pages; + DBUG_ASSERT(npages >= 2); pool=pages+1; - pool_last=pages+npages-1; + pool_last_ptr= &((pages+npages-1)->next); return 0; @@ -5582,8 +5583,8 @@ void TC_LOG_MMAP::get_active_from_pool() do { best_p= p= &pool; - if ((*p)->waiters == 0) // can the first page be used ? - break; // yes - take it. + if ((*p)->waiters == 0 && (*p)->free > 0) // can the first page be used ? + break; // yes - take it. best_free=0; // no - trying second strategy for (p=&(*p)->next; *p; p=&(*p)->next) @@ -5600,10 +5601,10 @@ void TC_LOG_MMAP::get_active_from_pool() safe_mutex_assert_owner(&LOCK_active); active=*best_p; - if ((*best_p)->next) // unlink the page from the pool - *best_p=(*best_p)->next; - else - pool_last=*best_p; + /* Unlink the page from the pool. */ + if (!(*best_p)->next) + pool_last_ptr= best_p; + *best_p=(*best_p)->next; pthread_mutex_unlock(&LOCK_pool); pthread_mutex_lock(&active->lock); @@ -5764,8 +5765,8 @@ int TC_LOG_MMAP::sync() /* page is synced. let's move it to the pool */ pthread_mutex_lock(&LOCK_pool); - pool_last->next=syncing; - pool_last=syncing; + (*pool_last_ptr)=syncing; + pool_last_ptr=&(syncing->next); syncing->next=0; syncing->state= err ? ERROR : POOL; pthread_cond_signal(&COND_pool); // in case somebody's waiting diff --git a/sql/log.h b/sql/log.h index f42ef514307..9fb233fed86 100644 --- a/sql/log.h +++ b/sql/log.h @@ -81,7 +81,7 @@ class TC_LOG_MMAP: public TC_LOG my_off_t file_length; uint npages, inited; uchar *data; - struct st_page *pages, *syncing, *active, *pool, *pool_last; + struct st_page *pages, *syncing, *active, *pool, **pool_last_ptr; /* note that, e.g. LOCK_active is only used to protect 'active' pointer, to protect the content of the active page From 13ba0dd286f3296bfbbd202fa76d47770734b472 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sat, 17 Nov 2012 16:50:15 +0100 Subject: [PATCH 50/60] MDEV-736 LP:1004615 - Unexpected warnings "Encountered illegal value '' when converting to DECIMAL" on a query with aggregate functions and GROUP BY fix: don't call field->val_decimal() if the field->is_null() because the buffer at field->ptr might not hold a valid decimal value sql/item_sum.cc: do not call field->val_decimal() if the field->is_null() storage/maria/ma_blockrec.c: cleanup storage/maria/ma_rrnd.c: cleanup strings/decimal.c: typo --- mysql-test/r/group_by.result | 13 ++++++++++++- mysql-test/t/group_by.test | 16 +++++++++++++++- sql/item_sum.cc | 6 +++--- storage/maria/ma_blockrec.c | 9 ++++----- storage/maria/ma_rrnd.c | 4 +++- strings/decimal.c | 2 +- 6 files changed, 38 insertions(+), 12 deletions(-) diff --git a/mysql-test/r/group_by.result b/mysql-test/r/group_by.result index 68ddcd39e92..d6036d7e586 100644 --- a/mysql-test/r/group_by.result +++ b/mysql-test/r/group_by.result @@ -2097,7 +2097,7 @@ NULL drop table t1; # End of 5.2 tests # -# BUG#872702: Crash in add_ref_to_table_cond() when grouping by a PK +# lp:872702 Crash in add_ref_to_table_cond() when grouping by a PK # CREATE TABLE t1 (a int, PRIMARY KEY (a)) ; INSERT INTO t1 VALUES (14),(15),(16),(17),(18),(19),(20); @@ -2111,4 +2111,15 @@ FROM t2 GROUP BY 1; a DROP TABLE t1, t2; +FLUSH STATUS; +CREATE TABLE t1 (f1 INT, f2 decimal(20,1), f3 blob); +INSERT INTO t1 values(11,NULL,'blob'),(11,NULL,'blob'); +SELECT f3, MIN(f2) FROM t1 GROUP BY f1 LIMIT 1; +f3 MIN(f2) +blob NULL +DROP TABLE t1; +the value below *must* be 1 +show status like 'Created_tmp_disk_tables'; +Variable_name Value +Created_tmp_disk_tables 1 # End of 5.3 tests diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test index d4214442709..b80c158aa92 100644 --- a/mysql-test/t/group_by.test +++ b/mysql-test/t/group_by.test @@ -1456,7 +1456,7 @@ drop table t1; --echo # End of 5.2 tests --echo # ---echo # BUG#872702: Crash in add_ref_to_table_cond() when grouping by a PK +--echo # lp:872702 Crash in add_ref_to_table_cond() when grouping by a PK --echo # CREATE TABLE t1 (a int, PRIMARY KEY (a)) ; INSERT INTO t1 VALUES (14),(15),(16),(17),(18),(19),(20); @@ -1472,4 +1472,18 @@ WHERE a = ( GROUP BY 1; DROP TABLE t1, t2; +# +# MDEV-736 LP:1004615 - Unexpected warnings "Encountered illegal value '' when converting to DECIMAL" on a query with aggregate functions and GROUP BY +# + +FLUSH STATUS; # this test case *must* use Aria temp tables + +CREATE TABLE t1 (f1 INT, f2 decimal(20,1), f3 blob); +INSERT INTO t1 values(11,NULL,'blob'),(11,NULL,'blob'); +SELECT f3, MIN(f2) FROM t1 GROUP BY f1 LIMIT 1; +DROP TABLE t1; + +--echo the value below *must* be 1 +show status like 'Created_tmp_disk_tables'; + --echo # End of 5.3 tests diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 86aef19efc0..1c83f0e2422 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -2149,9 +2149,8 @@ Item_sum_hybrid::min_max_update_int_field() void Item_sum_hybrid::min_max_update_decimal_field() { - /* TODO: optimize: do not get result_field in case of args[0] is NULL */ my_decimal old_val, nr_val; - const my_decimal *old_nr= result_field->val_decimal(&old_val); + const my_decimal *old_nr; const my_decimal *nr= args[0]->val_decimal(&nr_val); if (!args[0]->null_value) { @@ -2159,16 +2158,17 @@ Item_sum_hybrid::min_max_update_decimal_field() old_nr=nr; else { + old_nr= result_field->val_decimal(&old_val); bool res= my_decimal_cmp(old_nr, nr) > 0; /* (cmp_sign > 0 && res) || (!(cmp_sign > 0) && !res) */ if ((cmp_sign > 0) ^ (!res)) old_nr=nr; } result_field->set_notnull(); + result_field->store_decimal(old_nr); } else if (result_field->is_null(0)) result_field->set_null(); - result_field->store_decimal(old_nr); } diff --git a/storage/maria/ma_blockrec.c b/storage/maria/ma_blockrec.c index 4e55c519a9a..036059f1245 100644 --- a/storage/maria/ma_blockrec.c +++ b/storage/maria/ma_blockrec.c @@ -4676,7 +4676,7 @@ int _ma_read_block_record2(MARIA_HA *info, uchar *record, uchar *data, uchar *end_of_data) { MARIA_SHARE *share= info->s; - uchar *field_length_data, *blob_buffer, *start_of_data; + uchar *UNINIT_VAR(field_length_data), *UNINIT_VAR(blob_buffer), *start_of_data; uint flag, null_bytes, cur_null_bytes, row_extents, field_lengths; my_bool found_blob= 0; MARIA_EXTENT_CURSOR extent; @@ -4684,9 +4684,6 @@ int _ma_read_block_record2(MARIA_HA *info, uchar *record, MARIA_ROW *cur_row= &info->cur_row; DBUG_ENTER("_ma_read_block_record2"); - LINT_INIT(field_length_data); - LINT_INIT(blob_buffer); - start_of_data= data; flag= (uint) (uchar) data[0]; cur_null_bytes= share->base.original_null_bytes; @@ -5114,6 +5111,7 @@ int _ma_read_block_record(MARIA_HA *info, uchar *record, uchar *data, *end_of_data, *buff; uint offset; uint block_size= share->block_size; + int ret; DBUG_ENTER("_ma_read_block_record"); DBUG_PRINT("enter", ("rowid: %lu page: %lu rownr: %u", (ulong) record_pos, @@ -5135,7 +5133,8 @@ int _ma_read_block_record(MARIA_HA *info, uchar *record, my_errno= HA_ERR_RECORD_DELETED; /* File crashed */ DBUG_RETURN(HA_ERR_RECORD_DELETED); } - DBUG_RETURN(_ma_read_block_record2(info, record, data, end_of_data)); + ret= _ma_read_block_record2(info, record, data, end_of_data); + DBUG_RETURN(ret); } diff --git a/storage/maria/ma_rrnd.c b/storage/maria/ma_rrnd.c index 24c4bfdd467..8c35c71c95e 100644 --- a/storage/maria/ma_rrnd.c +++ b/storage/maria/ma_rrnd.c @@ -30,6 +30,7 @@ int maria_rrnd(MARIA_HA *info, uchar *buf, MARIA_RECORD_POS filepos) { + int ret; DBUG_ENTER("maria_rrnd"); DBUG_ASSERT(filepos != HA_OFFSET_ERROR); @@ -40,5 +41,6 @@ int maria_rrnd(MARIA_HA *info, uchar *buf, MARIA_RECORD_POS filepos) DBUG_RETURN(my_errno); info->cur_row.lastpos= filepos; /* Remember for update */ - DBUG_RETURN((*info->s->read_record)(info, buf, filepos)); + ret= (*info->s->read_record)(info, buf, filepos); + DBUG_RETURN(ret); } diff --git a/strings/decimal.c b/strings/decimal.c index 032cee938d3..e4925ff5f7c 100644 --- a/strings/decimal.c +++ b/strings/decimal.c @@ -1190,7 +1190,7 @@ int decimal2longlong(const decimal_t *from, longlong *to) And for -1234567890.1234 it would be - 7E F2 04 37 2D FB 2D + 7E F2 04 C7 2D FB 2D */ int decimal2bin(const decimal_t *from, uchar *to, int precision, int frac) { From 0893c2987474f569f3ac8e152ffccbd017968246 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 21 Nov 2012 23:24:18 +0100 Subject: [PATCH 51/60] Percona-Server-5.5.28-rel29.1.tar.gz --- btr/btr0btr.c | 21 +- btr/btr0cur.c | 39 +- btr/btr0pcur.c | 61 +- buf/buf0buf.c | 22 +- buf/buf0lru.c | 2 +- buf/buf0rea.c | 4 +- handler/ha_innodb.cc | 331 +++++--- handler/i_s.cc | 1854 +++++++++++++++++++++++++++++++++++++++++- handler/i_s.h | 3 + ibuf/ibuf0ibuf.c | 17 +- include/buf0buf.h | 34 +- include/buf0buf.ic | 19 + include/fil0fil.h | 2 + include/log0log.h | 3 + include/os0proc.h | 3 +- include/srv0srv.h | 1 + include/trx0sys.h | 16 +- os/os0proc.c | 58 +- page/page0page.c | 21 +- row/row0ins.c | 9 +- row/row0merge.c | 16 +- srv/srv0srv.c | 2 + srv/srv0start.c | 3 +- trx/trx0sys.c | 132 ++- trx/trx0trx.c | 21 +- 25 files changed, 2443 insertions(+), 251 deletions(-) diff --git a/btr/btr0btr.c b/btr/btr0btr.c index 53f2be4cabd..1113e05603c 100644 --- a/btr/btr0btr.c +++ b/btr/btr0btr.c @@ -1891,6 +1891,7 @@ btr_root_raise_and_insert( root = btr_cur_get_page(cursor); root_block = btr_cur_get_block(cursor); root_page_zip = buf_block_get_page_zip(root_block); + ut_ad(page_get_n_recs(root) > 0); #ifdef UNIV_ZIP_DEBUG ut_a(!root_page_zip || page_zip_validate(root_page_zip, root)); #endif /* UNIV_ZIP_DEBUG */ @@ -2371,12 +2372,20 @@ btr_insert_on_non_leaf_level_func( BTR_CONT_MODIFY_TREE, &cursor, 0, file, line, mtr); - err = btr_cur_pessimistic_insert(BTR_NO_LOCKING_FLAG - | BTR_KEEP_SYS_FLAG - | BTR_NO_UNDO_LOG_FLAG, - &cursor, tuple, &rec, - &dummy_big_rec, 0, NULL, mtr); - ut_a(err == DB_SUCCESS); + ut_ad(cursor.flag == BTR_CUR_BINARY); + + err = btr_cur_optimistic_insert( + BTR_NO_LOCKING_FLAG | BTR_KEEP_SYS_FLAG + | BTR_NO_UNDO_LOG_FLAG, &cursor, tuple, &rec, + &dummy_big_rec, 0, NULL, mtr); + + if (err == DB_FAIL) { + err = btr_cur_pessimistic_insert( + BTR_NO_LOCKING_FLAG | BTR_KEEP_SYS_FLAG + | BTR_NO_UNDO_LOG_FLAG, + &cursor, tuple, &rec, &dummy_big_rec, 0, NULL, mtr); + ut_a(err == DB_SUCCESS); + } } /**************************************************************//** diff --git a/btr/btr0cur.c b/btr/btr0cur.c index 26db7329b7e..61c07ac792e 100644 --- a/btr/btr0cur.c +++ b/btr/btr0cur.c @@ -1412,7 +1412,12 @@ fail_err: if (UNIV_UNLIKELY(reorg)) { ut_a(zip_size); - ut_a(*rec); + /* It's possible for rec to be NULL if the + page is compressed. This is because a + reorganized page may become incompressible. */ + if (!*rec) { + goto fail; + } } } @@ -1548,20 +1553,9 @@ btr_cur_pessimistic_insert( ut_ad((thr && thr_get_trx(thr)->fake_changes) || mtr_memo_contains(mtr, btr_cur_get_block(cursor), MTR_MEMO_PAGE_X_FIX)); - /* Try first an optimistic insert; reset the cursor flag: we do not - assume anything of how it was positioned */ - cursor->flag = BTR_CUR_BINARY; - err = btr_cur_optimistic_insert(flags, cursor, entry, rec, - big_rec, n_ext, thr, mtr); - if (err != DB_FAIL) { - - return(err); - } - - /* Retry with a pessimistic insert. Check locks and write to undo log, - if specified */ + /* Check locks and write to undo log, if specified */ err = btr_cur_ins_lock_and_undo(flags, cursor, entry, thr, mtr, &dummy_inh); @@ -2188,8 +2182,12 @@ any_extern: goto err_exit; } - max_size = old_rec_size - + page_get_max_insert_size_after_reorganize(page, 1); + /* We do not attempt to reorganize if the page is compressed. + This is because the page may fail to compress after reorganization. */ + max_size = page_zip + ? page_get_max_insert_size(page, 1) + : (old_rec_size + + page_get_max_insert_size_after_reorganize(page, 1)); if (!(((max_size >= BTR_CUR_PAGE_REORGANIZE_LIMIT) && (max_size >= new_rec_size)) @@ -2559,7 +2557,12 @@ make_external: err = DB_SUCCESS; goto return_after_reservations; } else { - ut_a(optim_err != DB_UNDERFLOW); + /* If the page is compressed and it initially + compresses very well, and there is a subsequent insert + of a badly-compressing record, it is possible for + btr_cur_optimistic_update() to return DB_UNDERFLOW and + btr_cur_insert_if_possible() to return FALSE. */ + ut_a(page_zip || optim_err != DB_UNDERFLOW); /* Out of space: reset the free bits. */ if (!dict_index_is_clust(index) @@ -2588,7 +2591,9 @@ make_external: was_first = page_cur_is_before_first(page_cursor); /* Lock checks and undo logging were already performed by - btr_cur_upd_lock_and_undo(). */ + btr_cur_upd_lock_and_undo(). We do not try + btr_cur_optimistic_insert() because + btr_cur_insert_if_possible() already failed above. */ err = btr_cur_pessimistic_insert(BTR_NO_UNDO_LOG_FLAG | BTR_NO_LOCKING_FLAG diff --git a/btr/btr0pcur.c b/btr/btr0pcur.c index 0de7b63f92d..b335e2c8aee 100644 --- a/btr/btr0pcur.c +++ b/btr/btr0pcur.c @@ -354,44 +354,39 @@ btr_pcur_restore_position_func( /* Restore the old search mode */ cursor->search_mode = old_mode; - if (btr_pcur_is_on_user_rec(cursor)) { - switch (cursor->rel_pos) { - case BTR_PCUR_ON: - if (!cmp_dtuple_rec( - tuple, btr_pcur_get_rec(cursor), - rec_get_offsets(btr_pcur_get_rec(cursor), - index, NULL, - ULINT_UNDEFINED, &heap))) { + switch (cursor->rel_pos) { + case BTR_PCUR_ON: + if (btr_pcur_is_on_user_rec(cursor) + && !cmp_dtuple_rec( + tuple, btr_pcur_get_rec(cursor), + rec_get_offsets(btr_pcur_get_rec(cursor), + index, NULL, + ULINT_UNDEFINED, &heap))) { - /* We have to store the NEW value for - the modify clock, since the cursor can - now be on a different page! But we can - retain the value of old_rec */ + /* We have to store the NEW value for + the modify clock, since the cursor can + now be on a different page! But we can + retain the value of old_rec */ - cursor->block_when_stored = - btr_pcur_get_block(cursor); - cursor->modify_clock = - buf_block_get_modify_clock( - cursor->block_when_stored); - cursor->old_stored = BTR_PCUR_OLD_STORED; + cursor->block_when_stored = + btr_pcur_get_block(cursor); + cursor->modify_clock = + buf_block_get_modify_clock( + cursor->block_when_stored); + cursor->old_stored = BTR_PCUR_OLD_STORED; - mem_heap_free(heap); + mem_heap_free(heap); - return(TRUE); - } - - break; - case BTR_PCUR_BEFORE: - page_cur_move_to_next(btr_pcur_get_page_cur(cursor)); - break; - case BTR_PCUR_AFTER: - page_cur_move_to_prev(btr_pcur_get_page_cur(cursor)); - break; -#ifdef UNIV_DEBUG - default: - ut_error; -#endif /* UNIV_DEBUG */ + return(TRUE); } +#ifdef UNIV_DEBUG + /* fall through */ + case BTR_PCUR_BEFORE: + case BTR_PCUR_AFTER: + break; + default: + ut_error; +#endif /* UNIV_DEBUG */ } mem_heap_free(heap); diff --git a/buf/buf0buf.c b/buf/buf0buf.c index 6ce77372dac..bbc1042ca78 100644 --- a/buf/buf0buf.c +++ b/buf/buf0buf.c @@ -336,15 +336,6 @@ be effective only if PFS_GROUP_BUFFER_SYNC is defined. */ # endif /* !PFS_SKIP_BUFFER_MUTEX_RWLOCK */ #endif /* UNIV_PFS_MUTEX || UNIV_PFS_RWLOCK */ -/** A chunk of buffers. The buffer pool is allocated in chunks. (moved to buf0buf.h)*/ -//struct buf_chunk_struct{ -// ulint mem_size; /*!< allocated size of the chunk */ -// ulint size; /*!< size of frames[] and blocks[] */ -// void* mem; /*!< pointer to the memory area which -// was allocated for the frames */ -// buf_block_t* blocks; /*!< array of buffer control blocks */ -//}; - /********************************************************************//** Gets the smallest oldest_modification lsn for any page in the pool. Returns zero if all modified pages have been flushed to disk. @@ -1028,7 +1019,8 @@ buf_chunk_init( /*===========*/ buf_pool_t* buf_pool, /*!< in: buffer pool instance */ buf_chunk_t* chunk, /*!< out: chunk of buffers */ - ulint mem_size) /*!< in: requested size in bytes */ + ulint mem_size, /*!< in: requested size in bytes */ + ibool populate) /*!< in: virtual page preallocation */ { buf_block_t* block; byte* frame; @@ -1044,7 +1036,7 @@ buf_chunk_init( + (UNIV_PAGE_SIZE - 1), UNIV_PAGE_SIZE); chunk->mem_size = mem_size; - chunk->mem = os_mem_alloc_large(&chunk->mem_size); + chunk->mem = os_mem_alloc_large(&chunk->mem_size, populate); if (UNIV_UNLIKELY(chunk->mem == NULL)) { @@ -1254,6 +1246,7 @@ buf_pool_init_instance( /*===================*/ buf_pool_t* buf_pool, /*!< in: buffer pool instance */ ulint buf_pool_size, /*!< in: size in bytes */ + ibool populate, /*!< in: virtual page preallocation */ ulint instance_no) /*!< in: id of the instance */ { ulint i; @@ -1286,7 +1279,7 @@ buf_pool_init_instance( UT_LIST_INIT(buf_pool->free); - if (!buf_chunk_init(buf_pool, chunk, buf_pool_size)) { + if (!buf_chunk_init(buf_pool, chunk, buf_pool_size, populate)) { mem_free(chunk); mem_free(buf_pool); @@ -1381,6 +1374,7 @@ ulint buf_pool_init( /*==========*/ ulint total_size, /*!< in: size of the total pool in bytes */ + ibool populate, /*!< in: virtual page preallocation */ ulint n_instances) /*!< in: number of instances */ { ulint i; @@ -1398,7 +1392,7 @@ buf_pool_init( for (i = 0; i < n_instances; i++) { buf_pool_t* ptr = &buf_pool_ptr[i]; - if (buf_pool_init_instance(ptr, size, i) != DB_SUCCESS) { + if (buf_pool_init_instance(ptr, size, populate, i) != DB_SUCCESS) { /* Free all the instances created so far. */ buf_pool_free(i); @@ -4973,7 +4967,7 @@ buf_stats_aggregate_pool_info( Collect buffer pool stats information for a buffer pool. Also record aggregated stats if there are more than one buffer pool in the server */ -static +UNIV_INTERN void buf_stats_get_pool_info( /*====================*/ diff --git a/buf/buf0lru.c b/buf/buf0lru.c index 037479f83eb..f919d48c479 100644 --- a/buf/buf0lru.c +++ b/buf/buf0lru.c @@ -2384,7 +2384,7 @@ buf_LRU_free_one_page( #endif mutex_t* block_mutex = buf_page_get_mutex(bpage); - ut_ad(buf_pool_mutex_own(buf_pool)); + ut_ad(mutex_own(&buf_pool->LRU_list_mutex)); ut_ad(mutex_own(block_mutex)); if (buf_LRU_block_remove_hashed_page(bpage, TRUE) diff --git a/buf/buf0rea.c b/buf/buf0rea.c index 4a2c96227ea..d41da6d8636 100644 --- a/buf/buf0rea.c +++ b/buf/buf0rea.c @@ -64,7 +64,7 @@ buf_read_page_handle_error( == BUF_BLOCK_FILE_PAGE); /* First unfix and release lock on the bpage */ - buf_pool_mutex_enter(buf_pool); + mutex_enter(&buf_pool->LRU_list_mutex); mutex_enter(buf_page_get_mutex(bpage)); ut_ad(buf_page_get_io_fix(bpage) == BUF_IO_READ); ut_ad(bpage->buf_fix_count == 0); @@ -85,7 +85,7 @@ buf_read_page_handle_error( buf_pool->n_pend_reads--; mutex_exit(buf_page_get_mutex(bpage)); - buf_pool_mutex_exit(buf_pool); + mutex_exit(&buf_pool->LRU_list_mutex); } /********************************************************************//** diff --git a/handler/ha_innodb.cc b/handler/ha_innodb.cc index 5115380c43c..f244cd94fdd 100644 --- a/handler/ha_innodb.cc +++ b/handler/ha_innodb.cc @@ -2485,6 +2485,118 @@ ha_innobase::init_table_handle_for_HANDLER(void) reset_template(prebuilt); } +/* The last read master log coordinates in the slave info file */ +static char master_log_fname[TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN] = ""; +static int master_log_pos; +/* The slave relay log coordinates in the slave info file after startup */ +static char original_relay_log_fname[TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN] = ""; +static int original_relay_log_pos; +/* The master log coordinates in the slave info file after startup */ +static char original_master_log_fname[TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN] = ""; +static int original_master_log_pos; + +/*****************************************************************//** +Overwrites the MySQL relay log info file with the current master and relay log +coordinates from InnoDB. Skips overwrite if the master log position did not +change from the last overwrite. If the InnoDB master log position is equal +to position that was read from the info file on startup before any overwrites, +restores the original positions. */ +static +void +innobase_do_overwrite_relay_log_info(void) +/*======================================*/ +{ + char info_fname[FN_REFLEN]; + File info_fd = -1; + int error = 0; + char buff[FN_REFLEN*2+22*2+4]; + char *relay_info_log_pos; + size_t buf_len; + + if (master_log_fname[0] == '\0') { + fprintf(stderr, + "InnoDB: something wrong with relay-log.info. " + "InnoDB will not overwrite it.\n"); + return; + } + + if (strcmp(master_log_fname, trx_sys_mysql_master_log_name) == 0 + && master_log_pos == trx_sys_mysql_master_log_pos) { + fprintf(stderr, + "InnoDB: InnoDB and relay-log.info are synchronized. " + "InnoDB will not overwrite it.\n"); + return; + } + + /* If we overwrite the file back to the original master log position, + restore the original relay log position too. This is required because + we might have rolled back a prepared transaction and restored the + original master log position from the InnoDB trx sys header, but the + corresponding relay log position points to an already-purged file. */ + if (strcmp(original_master_log_fname, trx_sys_mysql_master_log_name) + == 0 + && (original_master_log_pos == trx_sys_mysql_master_log_pos)) { + + strncpy(trx_sys_mysql_relay_log_name, original_relay_log_fname, + TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN); + trx_sys_mysql_relay_log_pos = original_relay_log_pos; + } + + fn_format(info_fname, relay_log_info_file, mysql_data_home, "", + MY_UNPACK_FILENAME | MY_RETURN_REAL_PATH); + + if (access(info_fname, F_OK)) { + /* File does not exist */ + error = 1; + goto skip_overwrite; + } + + /* File exists */ + info_fd = my_open(info_fname, O_RDWR|O_BINARY, MYF(MY_WME)); + if (info_fd < 0) { + error = 1; + goto skip_overwrite; + } + + relay_info_log_pos = strmov(buff, trx_sys_mysql_relay_log_name); + *relay_info_log_pos ++= '\n'; + relay_info_log_pos = longlong2str(trx_sys_mysql_relay_log_pos, + relay_info_log_pos, 10); + *relay_info_log_pos ++= '\n'; + relay_info_log_pos = strmov(relay_info_log_pos, + trx_sys_mysql_master_log_name); + *relay_info_log_pos ++= '\n'; + relay_info_log_pos = longlong2str(trx_sys_mysql_master_log_pos, + relay_info_log_pos, 10); + *relay_info_log_pos = '\n'; + + buf_len = (relay_info_log_pos - buff) + 1; + if (my_write(info_fd, (uchar *)buff, buf_len, MY_WME) != buf_len) { + error = 1; + } else if (my_sync(info_fd, MY_WME)) { + error = 1; + } + + if (info_fd >= 0) { + my_close(info_fd, MYF(0)); + } + + strncpy(master_log_fname, trx_sys_mysql_relay_log_name, + TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN); + master_log_pos = trx_sys_mysql_master_log_pos; + +skip_overwrite: + if (error) { + fprintf(stderr, + "InnoDB: ERROR: error occured during overwriting " + "relay-log.info.\n"); + } else { + fprintf(stderr, + "InnoDB: relay-log.info was overwritten.\n"); + } +} + + /*********************************************************************//** Opens an InnoDB database. @return 0 on success, error code on failure */ @@ -2619,12 +2731,13 @@ innobase_init( #ifdef HAVE_REPLICATION #ifdef MYSQL_SERVER /* read master log position from relay-log.info if exists */ - char fname[FN_REFLEN+128]; - int pos; + char info_fname[FN_REFLEN]; + char relay_log_fname[TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN]; + int relay_log_pos; int info_fd; IO_CACHE info_file; - fname[0] = '\0'; + info_fname[0] = '\0'; if(innobase_overwrite_relay_log_info) { @@ -2633,13 +2746,14 @@ innobase_init( " Updates by other storage engines may not be synchronized.\n"); bzero((char*) &info_file, sizeof(info_file)); - fn_format(fname, relay_log_info_file, mysql_data_home, "", 4+32); + fn_format(info_fname, relay_log_info_file, mysql_data_home, "", 4+32); int error=0; - if (!access(fname,F_OK)) { + if (!access(info_fname,F_OK)) { /* exist */ - if ((info_fd = my_open(fname, O_RDWR|O_BINARY, MYF(MY_WME))) < 0) { + if ((info_fd = my_open(info_fname, O_RDWR | O_BINARY, + MYF(MY_WME))) < 0) { error=1; } else if (init_io_cache(&info_file, info_fd, IO_SIZE*2, READ_CACHE, 0L, 0, MYF(MY_WME))) { @@ -2650,16 +2764,18 @@ innobase_init( relay_info_error: if (info_fd >= 0) my_close(info_fd, MYF(0)); - fname[0] = '\0'; + master_log_fname[0] = '\0'; goto skip_relay; } } else { - fname[0] = '\0'; + master_log_fname[0] = '\0'; goto skip_relay; } - if (init_strvar_from_file(fname, sizeof(fname), &info_file, "") || /* dummy (it is relay-log) */ - init_intvar_from_file(&pos, &info_file, BIN_LOG_HEADER_SIZE)) { + if (init_strvar_from_file(relay_log_fname, sizeof(relay_log_fname), + &info_file, "") + || /* dummy (it is relay-log) */ init_intvar_from_file( + &relay_log_pos, &info_file, BIN_LOG_HEADER_SIZE)) { end_io_cache(&info_file); error=1; goto relay_info_error; @@ -2668,13 +2784,19 @@ relay_info_error: fprintf(stderr, "InnoDB: relay-log.info is detected.\n" "InnoDB: relay log: position %u, file name %s\n", - pos, fname); + relay_log_pos, relay_log_fname); - strncpy(trx_sys_mysql_relay_log_name, fname, TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN); - trx_sys_mysql_relay_log_pos = (ib_int64_t) pos; + strncpy(trx_sys_mysql_relay_log_name, relay_log_fname, + TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN); + trx_sys_mysql_relay_log_pos = (ib_int64_t) relay_log_pos; - if (init_strvar_from_file(fname, sizeof(fname), &info_file, "") || - init_intvar_from_file(&pos, &info_file, 0)) { + strncpy(original_relay_log_fname, relay_log_fname, + TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN); + original_relay_log_pos = relay_log_pos; + + if (init_strvar_from_file(master_log_fname, sizeof(master_log_fname), + &info_file, "") + || init_intvar_from_file(&master_log_pos, &info_file, 0)) { end_io_cache(&info_file); error=1; goto relay_info_error; @@ -2682,10 +2804,15 @@ relay_info_error: fprintf(stderr, "InnoDB: master log: position %u, file name %s\n", - pos, fname); + master_log_pos, master_log_fname); - strncpy(trx_sys_mysql_master_log_name, fname, TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN); - trx_sys_mysql_master_log_pos = (ib_int64_t) pos; + strncpy(trx_sys_mysql_master_log_name, master_log_fname, + TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN); + trx_sys_mysql_master_log_pos = (ib_int64_t) master_log_pos; + + strncpy(original_master_log_fname, master_log_fname, + TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN); + original_master_log_pos = master_log_pos; end_io_cache(&info_file); if (info_fd >= 0) @@ -3020,75 +3147,9 @@ innobase_change_buffering_inited_ok: goto mem_free_and_error; } -#ifdef HAVE_REPLICATION -#ifdef MYSQL_SERVER if(innobase_overwrite_relay_log_info) { - /* If InnoDB progressed from relay-log.info, overwrite it */ - if (fname[0] == '\0') { - fprintf(stderr, - "InnoDB: Something is wrong with the file relay-info.log. InnoDB will not overwrite it.\n"); - } else if (0 != strcmp(fname, trx_sys_mysql_master_log_name) - || pos != trx_sys_mysql_master_log_pos) { - /* Overwrite relay-log.info */ - bzero((char*) &info_file, sizeof(info_file)); - fn_format(fname, relay_log_info_file, mysql_data_home, "", 4+32); - - int error = 0; - - if (!access(fname,F_OK)) { - /* exist */ - if ((info_fd = my_open(fname, O_RDWR|O_BINARY, MYF(MY_WME))) < 0) { - error = 1; - } else if (init_io_cache(&info_file, info_fd, IO_SIZE*2, - WRITE_CACHE, 0L, 0, MYF(MY_WME))) { - error = 1; - } - - if (error) { - if (info_fd >= 0) - my_close(info_fd, MYF(0)); - goto skip_overwrite; - } - } else { - error = 1; - goto skip_overwrite; - } - - char buff[FN_REFLEN*2+22*2+4], *pos; - - my_b_seek(&info_file, 0L); - pos=strmov(buff, trx_sys_mysql_relay_log_name); - *pos++='\n'; - pos=longlong2str(trx_sys_mysql_relay_log_pos, pos, 10); - *pos++='\n'; - pos=strmov(pos, trx_sys_mysql_master_log_name); - *pos++='\n'; - pos=longlong2str(trx_sys_mysql_master_log_pos, pos, 10); - *pos='\n'; - - if (my_b_write(&info_file, (uchar*) buff, (size_t) (pos-buff)+1)) - error = 1; - if (flush_io_cache(&info_file)) - error = 1; - - end_io_cache(&info_file); - if (info_fd >= 0) - my_close(info_fd, MYF(0)); -skip_overwrite: - if (error) { - fprintf(stderr, - "InnoDB: ERROR: An error occurred while overwriting relay-log.info.\n"); - } else { - fprintf(stderr, - "InnoDB: The file relay-log.info was successfully overwritten.\n"); - } - } else { - fprintf(stderr, - "InnoDB: InnoDB and relay-log.info are synchronized. InnoDB will not overwrite it.\n"); + innobase_do_overwrite_relay_log_info(); } - } -#endif /* MYSQL_SERVER */ -#endif /* HAVE_REPLICATION */ innobase_old_blocks_pct = buf_LRU_old_ratio_update( innobase_old_blocks_pct, TRUE); @@ -3194,6 +3255,32 @@ innobase_alter_table_flags( | HA_INPLACE_ADD_PK_INDEX_NO_READ_WRITE); } +/****************************************************************//** +Copy the current replication position from MySQL to a transaction. */ +static +void +innobase_copy_repl_coords_to_trx( +/*=============================*/ + const THD* thd, /*!< in: thread handle */ + trx_t* trx) /*!< in/out: transaction */ +{ + if (thd && thd->slave_thread) { + const Relay_log_info* rli = &active_mi->rli; + + trx->mysql_master_log_file_name + = rli->group_master_log_name; + trx->mysql_master_log_pos + = ((ib_int64_t)rli->group_master_log_pos + + ((ib_int64_t) + rli->future_event_relay_log_pos + - (ib_int64_t)rli->group_relay_log_pos)); + trx->mysql_relay_log_file_name + = rli->group_relay_log_name; + trx->mysql_relay_log_pos + = (ib_int64_t)rli->future_event_relay_log_pos; + } +} + /*****************************************************************//** Commits a transaction in an InnoDB database. */ static @@ -3203,25 +3290,12 @@ innobase_commit_low( trx_t* trx) /*!< in: transaction handle */ { if (trx_is_started(trx)) { -#ifdef HAVE_REPLICATION -#ifdef MYSQL_SERVER - THD *thd=current_thd; - if (thd && thd->slave_thread) { - /* Update the replication position info inside InnoDB */ - trx->mysql_master_log_file_name - = active_mi->rli.group_master_log_name; - trx->mysql_master_log_pos - = ((ib_int64_t)active_mi->rli.group_master_log_pos + - ((ib_int64_t)active_mi->rli.future_event_relay_log_pos - - (ib_int64_t)active_mi->rli.group_relay_log_pos)); - trx->mysql_relay_log_file_name - = active_mi->rli.group_relay_log_name; - trx->mysql_relay_log_pos - = (ib_int64_t)active_mi->rli.future_event_relay_log_pos; - } -#endif /* MYSQL_SERVER */ -#endif /* HAVE_REPLICATION */ + /* Save the current replication position for write to trx sys + header for undo purposes, see the comment at corresponding call + at innobase_xa_prepare(). */ + + innobase_copy_repl_coords_to_trx(current_thd, trx); trx_commit_for_mysql(trx); } @@ -3439,6 +3513,9 @@ innobase_commit( if (all || (!thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))) { + DBUG_EXECUTE_IF("crash_innodb_before_commit", + DBUG_SUICIDE();); + /* We were instructed to commit the whole transaction, or this is an SQL statement end and autocommit is on */ @@ -11372,7 +11449,27 @@ innobase_xa_prepare( ut_ad(trx_is_registered_for_2pc(trx)); + /* Update the replication position info in current trx. This + is different from the binlog position update that happens + during XA COMMIT. In contrast to that, the slave position is + an actual part of the changes made by this transaction and thus + must be updated in the XA PREPARE stage. Since the trx sys + header page changes are not undo-logged, again store this + position in a different field in the XA COMMIT stage, so that + it might be used in case of rollbacks. */ + + /* Since currently there might be only one slave SQL thread, we + don't need to take any precautions (e.g. prepare_commit_mutex) + to ensure position ordering. Revisit this in 5.6 which has + both the multi-threaded replication to cause us problems and + the group commit to solve them. */ + + innobase_copy_repl_coords_to_trx(thd, trx); + error = (int) trx_prepare_for_mysql(trx); + + DBUG_EXECUTE_IF("crash_innodb_after_prepare", + DBUG_SUICIDE();); } else { /* We just mark the SQL statement ended and do not do a transaction prepare */ @@ -11494,6 +11591,22 @@ innobase_rollback_by_xid( if (trx) { int ret = innobase_rollback_trx(trx); trx_free_for_background(trx); + + if (innobase_overwrite_relay_log_info) { + + /* On rollback of a prepared transaction revert the + current slave positions to the ones recorded by the + last COMMITTed transaction. This has an effect of + undoing the position change caused by the transaction + being rolled back. Assumes single-threaded slave SQL + thread. If the server has non-master write traffic + with XA rollbacks, this will cause additional spurious + slave info log overwrites, which should be harmless. */ + + trx_sys_print_committed_mysql_master_log_pos(); + innobase_do_overwrite_relay_log_info(); + } + return(ret); } else { return(XAER_NOTA); @@ -12494,6 +12607,12 @@ static MYSQL_SYSVAR_LONGLONG(buffer_pool_size, innobase_buffer_pool_size, "The size of the memory buffer InnoDB uses to cache data and indexes of its tables.", NULL, NULL, 128*1024*1024L, 32*1024*1024L, LONGLONG_MAX, 1024*1024L); +static MYSQL_SYSVAR_BOOL(buffer_pool_populate, srv_buf_pool_populate, + PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY, + "Preallocate (pre-fault) the page frames required for the mapping " + "established by the buffer pool memory region. Disabled by default.", + NULL, NULL, FALSE); + static MYSQL_SYSVAR_LONG(buffer_pool_instances, innobase_buffer_pool_instances, PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY, "Number of buffer pool instances, set to higher value on high-end machines to increase scalability", @@ -12874,6 +12993,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= { MYSQL_SYSVAR(additional_mem_pool_size), MYSQL_SYSVAR(autoextend_increment), MYSQL_SYSVAR(buffer_pool_size), + MYSQL_SYSVAR(buffer_pool_populate), MYSQL_SYSVAR(buffer_pool_instances), MYSQL_SYSVAR(buffer_pool_shm_key), MYSQL_SYSVAR(buffer_pool_shm_checksum), @@ -13019,7 +13139,10 @@ i_s_innodb_buffer_pool_pages, i_s_innodb_buffer_pool_pages_index, i_s_innodb_buffer_pool_pages_blob, i_s_innodb_admin_command, -i_s_innodb_changed_pages +i_s_innodb_changed_pages, +i_s_innodb_buffer_page, +i_s_innodb_buffer_page_lru, +i_s_innodb_buffer_stats mysql_declare_plugin_end; /** @brief Initialize the default value of innodb_commit_concurrency. diff --git a/handler/i_s.cc b/handler/i_s.cc index fae792d5b8d..826225880de 100644 --- a/handler/i_s.cc +++ b/handler/i_s.cc @@ -63,8 +63,93 @@ extern "C" { #include "buf0lru.h" /* for XTRA_LRU_[DUMP/RESTORE] */ #include "btr0btr.h" /* for btr_page_get_index_id */ #include "log0online.h" +#include "btr0btr.h" +#include "page0zip.h" +#include "log0log.h" } +/** structure associates a name string with a file page type and/or buffer +page state. */ +struct buffer_page_desc_str_struct{ + const char* type_str; /*!< String explain the page + type/state */ + ulint type_value; /*!< Page type or page state */ +}; + +typedef struct buffer_page_desc_str_struct buf_page_desc_str_t; + +/** Any states greater than FIL_PAGE_TYPE_LAST would be treated as unknown. */ +#define I_S_PAGE_TYPE_UNKNOWN (FIL_PAGE_TYPE_LAST + 1) + +/** We also define I_S_PAGE_TYPE_INDEX as the Index Page's position +in i_s_page_type[] array */ +#define I_S_PAGE_TYPE_INDEX 1 + +/** Name string for File Page Types */ +static buf_page_desc_str_t i_s_page_type[] = { + {"ALLOCATED", FIL_PAGE_TYPE_ALLOCATED}, + {"INDEX", FIL_PAGE_INDEX}, + {"UNDO_LOG", FIL_PAGE_UNDO_LOG}, + {"INODE", FIL_PAGE_INODE}, + {"IBUF_FREE_LIST", FIL_PAGE_IBUF_FREE_LIST}, + {"IBUF_BITMAP", FIL_PAGE_IBUF_BITMAP}, + {"SYSTEM", FIL_PAGE_TYPE_SYS}, + {"TRX_SYSTEM", FIL_PAGE_TYPE_TRX_SYS}, + {"FILE_SPACE_HEADER", FIL_PAGE_TYPE_FSP_HDR}, + {"EXTENT_DESCRIPTOR", FIL_PAGE_TYPE_XDES}, + {"BLOB", FIL_PAGE_TYPE_BLOB}, + {"COMPRESSED_BLOB", FIL_PAGE_TYPE_ZBLOB}, + {"COMPRESSED_BLOB2", FIL_PAGE_TYPE_ZBLOB2}, + {"UNKNOWN", I_S_PAGE_TYPE_UNKNOWN} +}; + +/* Check if we can hold all page type in a 4 bit value */ +#if I_S_PAGE_TYPE_UNKNOWN > 1<<4 +# error "i_s_page_type[] is too large" +#endif + +/** This structure defines information we will fetch from pages +currently cached in the buffer pool. It will be used to populate +table INFORMATION_SCHEMA.INNODB_BUFFER_PAGE */ +struct buffer_page_info_struct{ + ulint block_id; /*!< Buffer Pool block ID */ + unsigned space_id:32; /*!< Tablespace ID */ + unsigned page_num:32; /*!< Page number/offset */ + unsigned access_time:32; /*!< Time of first access */ + unsigned pool_id:MAX_BUFFER_POOLS_BITS; + /*!< Buffer Pool ID. Must be less than + MAX_BUFFER_POOLS */ + unsigned flush_type:2; /*!< Flush type */ + unsigned io_fix:2; /*!< type of pending I/O operation */ + unsigned fix_count:19; /*!< Count of how manyfold this block + is bufferfixed */ + unsigned hashed:1; /*!< Whether hash index has been + built on this page */ + unsigned is_old:1; /*!< TRUE if the block is in the old + blocks in buf_pool->LRU_old */ + unsigned freed_page_clock:31; /*!< the value of + buf_pool->freed_page_clock */ + unsigned zip_ssize:PAGE_ZIP_SSIZE_BITS; + /*!< Compressed page size */ + unsigned page_state:BUF_PAGE_STATE_BITS; /*!< Page state */ + unsigned page_type:4; /*!< Page type */ + unsigned num_recs; + /*!< Number of records on Page */ + unsigned data_size; + /*!< Sum of the sizes of the records */ + lsn_t newest_mod; /*!< Log sequence number of + the youngest modification */ + lsn_t oldest_mod; /*!< Log sequence number of + the oldest modification */ + index_id_t index_id; /*!< Index ID if a index page */ +}; + +typedef struct buffer_page_info_struct buf_page_info_t; + +/** maximum number of buffer page info we would cache. */ +#define MAX_BUF_INFO_CACHED 10000 + + #define OK(expr) \ if ((expr) != 0) { \ DBUG_RETURN(1); \ @@ -1599,7 +1684,6 @@ i_s_cmpmem_fill_low( buf_pool = buf_pool_from_array(i); - //buf_pool_mutex_enter(buf_pool); mutex_enter(&buf_pool->zip_free_mutex); for (uint x = 0; x <= BUF_BUDDY_SIZES; x++) { @@ -1630,7 +1714,6 @@ i_s_cmpmem_fill_low( } } - //buf_pool_mutex_exit(buf_pool); mutex_exit(&buf_pool->zip_free_mutex); if (status) { @@ -1812,6 +1895,1773 @@ UNIV_INTERN struct st_mysql_plugin i_s_innodb_cmpmem_reset = STRUCT_FLD(flags, 0UL), }; +/* Fields of the dynamic table INNODB_BUFFER_POOL_STATS. */ +static ST_FIELD_INFO i_s_innodb_buffer_stats_fields_info[] = +{ +#define IDX_BUF_STATS_POOL_ID 0 + {STRUCT_FLD(field_name, "POOL_ID"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_POOL_SIZE 1 + {STRUCT_FLD(field_name, "POOL_SIZE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_FREE_BUFFERS 2 + {STRUCT_FLD(field_name, "FREE_BUFFERS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_LRU_LEN 3 + {STRUCT_FLD(field_name, "DATABASE_PAGES"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_OLD_LRU_LEN 4 + {STRUCT_FLD(field_name, "OLD_DATABASE_PAGES"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_FLUSH_LIST_LEN 5 + {STRUCT_FLD(field_name, "MODIFIED_DATABASE_PAGES"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PENDING_ZIP 6 + {STRUCT_FLD(field_name, "PENDING_DECOMPRESS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PENDING_READ 7 + {STRUCT_FLD(field_name, "PENDING_READS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_FLUSH_LRU 8 + {STRUCT_FLD(field_name, "PENDING_FLUSH_LRU"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_FLUSH_LIST 9 + {STRUCT_FLD(field_name, "PENDING_FLUSH_LIST"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_YOUNG 10 + {STRUCT_FLD(field_name, "PAGES_MADE_YOUNG"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_NOT_YOUNG 11 + {STRUCT_FLD(field_name, "PAGES_NOT_MADE_YOUNG"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_YOUNG_RATE 12 + {STRUCT_FLD(field_name, "PAGES_MADE_YOUNG_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_NOT_YOUNG_RATE 13 + {STRUCT_FLD(field_name, "PAGES_MADE_NOT_YOUNG_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_READ 14 + {STRUCT_FLD(field_name, "NUMBER_PAGES_READ"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_CREATED 15 + {STRUCT_FLD(field_name, "NUMBER_PAGES_CREATED"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_WRITTEN 16 + {STRUCT_FLD(field_name, "NUMBER_PAGES_WRITTEN"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_READ_RATE 17 + {STRUCT_FLD(field_name, "PAGES_READ_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_CREATE_RATE 18 + {STRUCT_FLD(field_name, "PAGES_CREATE_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_PAGE_WRITTEN_RATE 19 + {STRUCT_FLD(field_name, "PAGES_WRITTEN_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_GET 20 + {STRUCT_FLD(field_name, "NUMBER_PAGES_GET"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_HIT_RATE 21 + {STRUCT_FLD(field_name, "HIT_RATE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_MADE_YOUNG_PCT 22 + {STRUCT_FLD(field_name, "YOUNG_MAKE_PER_THOUSAND_GETS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_NOT_MADE_YOUNG_PCT 23 + {STRUCT_FLD(field_name, "NOT_YOUNG_MAKE_PER_THOUSAND_GETS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_READ_AHREAD 24 + {STRUCT_FLD(field_name, "NUMBER_PAGES_READ_AHEAD"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_READ_AHEAD_EVICTED 25 + {STRUCT_FLD(field_name, "NUMBER_READ_AHEAD_EVICTED"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_READ_AHEAD_RATE 26 + {STRUCT_FLD(field_name, "READ_AHEAD_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_READ_AHEAD_EVICT_RATE 27 + {STRUCT_FLD(field_name, "READ_AHEAD_EVICTED_RATE"), + STRUCT_FLD(field_length, MAX_FLOAT_STR_LENGTH), + STRUCT_FLD(field_type, MYSQL_TYPE_FLOAT), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, 0), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_LRU_IO_SUM 28 + {STRUCT_FLD(field_name, "LRU_IO_TOTAL"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_LRU_IO_CUR 29 + {STRUCT_FLD(field_name, "LRU_IO_CURRENT"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_UNZIP_SUM 30 + {STRUCT_FLD(field_name, "UNCOMPRESS_TOTAL"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_STATS_UNZIP_CUR 31 + {STRUCT_FLD(field_name, "UNCOMPRESS_CURRENT"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + END_OF_ST_FIELD_INFO +}; + +/*******************************************************************//** +Fill Information Schema table INNODB_BUFFER_POOL_STATS for a particular +buffer pool +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_stats_fill( +/*==================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + const buf_pool_info_t* info) /*!< in: buffer pool + information */ +{ + TABLE* table; + Field** fields; + + DBUG_ENTER("i_s_innodb_stats_fill"); + + table = tables->table; + + fields = table->field; + + OK(fields[IDX_BUF_STATS_POOL_ID]->store(info->pool_unique_id)); + + OK(fields[IDX_BUF_STATS_POOL_SIZE]->store(info->pool_size)); + + OK(fields[IDX_BUF_STATS_LRU_LEN]->store(info->lru_len)); + + OK(fields[IDX_BUF_STATS_OLD_LRU_LEN]->store(info->old_lru_len)); + + OK(fields[IDX_BUF_STATS_FREE_BUFFERS]->store(info->free_list_len)); + + OK(fields[IDX_BUF_STATS_FLUSH_LIST_LEN]->store( + info->flush_list_len)); + + OK(fields[IDX_BUF_STATS_PENDING_ZIP]->store(info->n_pend_unzip)); + + OK(fields[IDX_BUF_STATS_PENDING_READ]->store(info->n_pend_reads)); + + OK(fields[IDX_BUF_STATS_FLUSH_LRU]->store(info->n_pending_flush_lru)); + + OK(fields[IDX_BUF_STATS_FLUSH_LIST]->store(info->n_pending_flush_list)); + + OK(fields[IDX_BUF_STATS_PAGE_YOUNG]->store(info->n_pages_made_young)); + + OK(fields[IDX_BUF_STATS_PAGE_NOT_YOUNG]->store( + info->n_pages_not_made_young)); + + OK(fields[IDX_BUF_STATS_PAGE_YOUNG_RATE]->store( + info->page_made_young_rate)); + + OK(fields[IDX_BUF_STATS_PAGE_NOT_YOUNG_RATE]->store( + info->page_not_made_young_rate)); + + OK(fields[IDX_BUF_STATS_PAGE_READ]->store(info->n_pages_read)); + + OK(fields[IDX_BUF_STATS_PAGE_CREATED]->store(info->n_pages_created)); + + OK(fields[IDX_BUF_STATS_PAGE_WRITTEN]->store(info->n_pages_written)); + + OK(fields[IDX_BUF_STATS_GET]->store(info->n_page_gets)); + + OK(fields[IDX_BUF_STATS_PAGE_READ_RATE]->store(info->pages_read_rate)); + + OK(fields[IDX_BUF_STATS_PAGE_CREATE_RATE]->store(info->pages_created_rate)); + + OK(fields[IDX_BUF_STATS_PAGE_WRITTEN_RATE]->store(info->pages_written_rate)); + + if (info->n_page_get_delta) { + OK(fields[IDX_BUF_STATS_HIT_RATE]->store( + 1000 - (1000 * info->page_read_delta + / info->n_page_get_delta))); + + OK(fields[IDX_BUF_STATS_MADE_YOUNG_PCT]->store( + 1000 * info->young_making_delta + / info->n_page_get_delta)); + + OK(fields[IDX_BUF_STATS_NOT_MADE_YOUNG_PCT]->store( + 1000 * info->not_young_making_delta + / info->n_page_get_delta)); + } else { + OK(fields[IDX_BUF_STATS_HIT_RATE]->store(0)); + OK(fields[IDX_BUF_STATS_MADE_YOUNG_PCT]->store(0)); + OK(fields[IDX_BUF_STATS_NOT_MADE_YOUNG_PCT]->store(0)); + } + + OK(fields[IDX_BUF_STATS_READ_AHREAD]->store(info->n_ra_pages_read)); + + OK(fields[IDX_BUF_STATS_READ_AHEAD_EVICTED]->store( + info->n_ra_pages_evicted)); + + OK(fields[IDX_BUF_STATS_READ_AHEAD_RATE]->store( + info->pages_readahead_rate)); + + OK(fields[IDX_BUF_STATS_READ_AHEAD_EVICT_RATE]->store( + info->pages_evicted_rate)); + + OK(fields[IDX_BUF_STATS_LRU_IO_SUM]->store(info->io_sum)); + + OK(fields[IDX_BUF_STATS_LRU_IO_CUR]->store(info->io_cur)); + + OK(fields[IDX_BUF_STATS_UNZIP_SUM]->store(info->unzip_sum)); + + OK(fields[IDX_BUF_STATS_UNZIP_CUR]->store( info->unzip_cur)); + + DBUG_RETURN(schema_table_store_record(thd, table)); +} + +/*******************************************************************//** +This is the function that loops through each buffer pool and fetch buffer +pool stats to information schema table: I_S_INNODB_BUFFER_POOL_STATS +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_stats_fill_table( +/*===============================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + Item* ) /*!< in: condition (ignored) */ +{ + int status = 0; + buf_pool_info_t* pool_info; + + DBUG_ENTER("i_s_innodb_buffer_fill_general"); + + /* Only allow the PROCESS privilege holder to access the stats */ + if (check_global_access(thd, PROCESS_ACL)) { + DBUG_RETURN(0); + } + + pool_info = (buf_pool_info_t*) mem_zalloc( + srv_buf_pool_instances * sizeof *pool_info); + + /* Walk through each buffer pool */ + for (ulint i = 0; i < srv_buf_pool_instances; i++) { + buf_pool_t* buf_pool; + + buf_pool = buf_pool_from_array(i); + + /* Fetch individual buffer pool info */ + buf_stats_get_pool_info(buf_pool, i, pool_info); + + status = i_s_innodb_stats_fill(thd, tables, &pool_info[i]); + + /* If something goes wrong, break and return */ + if (status) { + break; + } + } + + mem_free(pool_info); + + DBUG_RETURN(status); +} + +/*******************************************************************//** +Bind the dynamic table INFORMATION_SCHEMA.INNODB_BUFFER_POOL_STATS. +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_pool_stats_init( +/*==============================*/ + void* p) /*!< in/out: table schema object */ +{ + ST_SCHEMA_TABLE* schema; + + DBUG_ENTER("i_s_innodb_buffer_pool_stats_init"); + + schema = reinterpret_cast(p); + + schema->fields_info = i_s_innodb_buffer_stats_fields_info; + schema->fill_table = i_s_innodb_buffer_stats_fill_table; + + DBUG_RETURN(0); +} + +UNIV_INTERN struct st_mysql_plugin i_s_innodb_buffer_stats = +{ + /* the plugin type (a MYSQL_XXX_PLUGIN value) */ + /* int */ + STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN), + + /* pointer to type-specific plugin descriptor */ + /* void* */ + STRUCT_FLD(info, &i_s_info), + + /* plugin name */ + /* const char* */ + STRUCT_FLD(name, "INNODB_BUFFER_POOL_STATS"), + + /* plugin author (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(author, plugin_author), + + /* general descriptive text (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(descr, "InnoDB Buffer Pool Statistics Information "), + + /* the plugin license (PLUGIN_LICENSE_XXX) */ + /* int */ + STRUCT_FLD(license, PLUGIN_LICENSE_GPL), + + /* the function to invoke when plugin is loaded */ + /* int (*)(void*); */ + STRUCT_FLD(init, i_s_innodb_buffer_pool_stats_init), + + /* the function to invoke when plugin is unloaded */ + /* int (*)(void*); */ + STRUCT_FLD(deinit, i_s_common_deinit), + + /* plugin version (for SHOW PLUGINS) */ + /* unsigned int */ + STRUCT_FLD(version, INNODB_VERSION_SHORT), + + /* struct st_mysql_show_var* */ + STRUCT_FLD(status_vars, NULL), + + /* struct st_mysql_sys_var** */ + STRUCT_FLD(system_vars, NULL), + + /* reserved for dependency checking */ + /* void* */ + STRUCT_FLD(__reserved1, NULL), + + /* Plugin flags */ + /* unsigned long */ + STRUCT_FLD(flags, 0UL), +}; + +/* Fields of the dynamic table INNODB_BUFFER_POOL_PAGE. */ +static ST_FIELD_INFO i_s_innodb_buffer_page_fields_info[] = +{ +#define IDX_BUFFER_POOL_ID 0 + {STRUCT_FLD(field_name, "POOL_ID"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_BLOCK_ID 1 + {STRUCT_FLD(field_name, "BLOCK_ID"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_SPACE 2 + {STRUCT_FLD(field_name, "SPACE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_NUM 3 + {STRUCT_FLD(field_name, "PAGE_NUMBER"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_TYPE 4 + {STRUCT_FLD(field_name, "PAGE_TYPE"), + STRUCT_FLD(field_length, 64), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_FLUSH_TYPE 5 + {STRUCT_FLD(field_name, "FLUSH_TYPE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_FIX_COUNT 6 + {STRUCT_FLD(field_name, "FIX_COUNT"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_HASHED 7 + {STRUCT_FLD(field_name, "IS_HASHED"), + STRUCT_FLD(field_length, 3), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_NEWEST_MOD 8 + {STRUCT_FLD(field_name, "NEWEST_MODIFICATION"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_OLDEST_MOD 9 + {STRUCT_FLD(field_name, "OLDEST_MODIFICATION"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_ACCESS_TIME 10 + {STRUCT_FLD(field_name, "ACCESS_TIME"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_TABLE_NAME 11 + {STRUCT_FLD(field_name, "TABLE_NAME"), + STRUCT_FLD(field_length, 1024), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_INDEX_NAME 12 + {STRUCT_FLD(field_name, "INDEX_NAME"), + STRUCT_FLD(field_length, 1024), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_NUM_RECS 13 + {STRUCT_FLD(field_name, "NUMBER_RECORDS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_DATA_SIZE 14 + {STRUCT_FLD(field_name, "DATA_SIZE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_ZIP_SIZE 15 + {STRUCT_FLD(field_name, "COMPRESSED_SIZE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_STATE 16 + {STRUCT_FLD(field_name, "PAGE_STATE"), + STRUCT_FLD(field_length, 64), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_IO_FIX 17 + {STRUCT_FLD(field_name, "IO_FIX"), + STRUCT_FLD(field_length, 64), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_IS_OLD 18 + {STRUCT_FLD(field_name, "IS_OLD"), + STRUCT_FLD(field_length, 3), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUFFER_PAGE_FREE_CLOCK 19 + {STRUCT_FLD(field_name, "FREE_PAGE_CLOCK"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + END_OF_ST_FIELD_INFO +}; + +/*******************************************************************//** +Fill Information Schema table INNODB_BUFFER_PAGE with information +cached in the buf_page_info_t array +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_page_fill( +/*========================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + const buf_page_info_t* info_array, /*!< in: array cached page + info */ + ulint num_page, /*!< in: number of page info + cached */ + mem_heap_t* heap) /*!< in: temp heap memory */ +{ + TABLE* table; + Field** fields; + + DBUG_ENTER("i_s_innodb_buffer_page_fill"); + + table = tables->table; + + fields = table->field; + + /* Iterate through the cached array and fill the I_S table rows */ + for (ulint i = 0; i < num_page; i++) { + const buf_page_info_t* page_info; + const char* table_name; + const char* index_name; + const char* state_str; + enum buf_page_state state; + + page_info = info_array + i; + + table_name = NULL; + index_name = NULL; + state_str = NULL; + + OK(fields[IDX_BUFFER_POOL_ID]->store(page_info->pool_id)); + + OK(fields[IDX_BUFFER_BLOCK_ID]->store(page_info->block_id)); + + OK(fields[IDX_BUFFER_PAGE_SPACE]->store(page_info->space_id)); + + OK(fields[IDX_BUFFER_PAGE_NUM]->store(page_info->page_num)); + + OK(field_store_string( + fields[IDX_BUFFER_PAGE_TYPE], + i_s_page_type[page_info->page_type].type_str)); + + OK(fields[IDX_BUFFER_PAGE_FLUSH_TYPE]->store( + page_info->flush_type)); + + OK(fields[IDX_BUFFER_PAGE_FIX_COUNT]->store( + page_info->fix_count)); + + if (page_info->hashed) { + OK(field_store_string( + fields[IDX_BUFFER_PAGE_HASHED], "YES")); + } else { + OK(field_store_string( + fields[IDX_BUFFER_PAGE_HASHED], "NO")); + } + + OK(fields[IDX_BUFFER_PAGE_NEWEST_MOD]->store( + (longlong) page_info->newest_mod, true)); + + OK(fields[IDX_BUFFER_PAGE_OLDEST_MOD]->store( + (longlong) page_info->oldest_mod, true)); + + OK(fields[IDX_BUFFER_PAGE_ACCESS_TIME]->store( + page_info->access_time)); + + /* If this is an index page, fetch the index name + and table name */ + if (page_info->page_type == I_S_PAGE_TYPE_INDEX) { + const dict_index_t* index; + + mutex_enter(&dict_sys->mutex); + index = dict_index_get_if_in_cache_low( + page_info->index_id); + + /* Copy the index/table name under mutex. We + do not want to hold the InnoDB mutex while + filling the IS table */ + if (index) { + const char* name_ptr = index->name; + + if (name_ptr[0] == TEMP_INDEX_PREFIX) { + name_ptr++; + } + + index_name = mem_heap_strdup(heap, name_ptr); + + table_name = mem_heap_strdup(heap, + index->table_name); + + } + + mutex_exit(&dict_sys->mutex); + } + + OK(field_store_string( + fields[IDX_BUFFER_PAGE_TABLE_NAME], table_name)); + + OK(field_store_string( + fields[IDX_BUFFER_PAGE_INDEX_NAME], index_name)); + + OK(fields[IDX_BUFFER_PAGE_NUM_RECS]->store( + page_info->num_recs)); + + OK(fields[IDX_BUFFER_PAGE_DATA_SIZE]->store( + page_info->data_size)); + + OK(fields[IDX_BUFFER_PAGE_ZIP_SIZE]->store( + page_info->zip_ssize + ? (PAGE_ZIP_MIN_SIZE >> 1) << page_info->zip_ssize + : 0)); + +#if BUF_PAGE_STATE_BITS > 3 +# error "BUF_PAGE_STATE_BITS > 3, please ensure that all 1<(page_info->page_state); + + switch (state) { + /* First three states are for compression pages and + are not states we would get as we scan pages through + buffer blocks */ + case BUF_BLOCK_ZIP_FREE: + case BUF_BLOCK_ZIP_PAGE: + case BUF_BLOCK_ZIP_DIRTY: + state_str = NULL; + break; + case BUF_BLOCK_NOT_USED: + state_str = "NOT_USED"; + break; + case BUF_BLOCK_READY_FOR_USE: + state_str = "READY_FOR_USE"; + break; + case BUF_BLOCK_FILE_PAGE: + state_str = "FILE_PAGE"; + break; + case BUF_BLOCK_MEMORY: + state_str = "MEMORY"; + break; + case BUF_BLOCK_REMOVE_HASH: + state_str = "REMOVE_HASH"; + break; + }; + + OK(field_store_string(fields[IDX_BUFFER_PAGE_STATE], + state_str)); + + switch (page_info->io_fix) { + case BUF_IO_NONE: + OK(field_store_string(fields[IDX_BUFFER_PAGE_IO_FIX], + "IO_NONE")); + break; + case BUF_IO_READ: + OK(field_store_string(fields[IDX_BUFFER_PAGE_IO_FIX], + "IO_READ")); + break; + case BUF_IO_WRITE: + OK(field_store_string(fields[IDX_BUFFER_PAGE_IO_FIX], + "IO_WRITE")); + break; + case BUF_IO_PIN: + OK(field_store_string(fields[IDX_BUFFER_PAGE_IO_FIX], + "IO_PIN")); + break; + } + + OK(field_store_string(fields[IDX_BUFFER_PAGE_IS_OLD], + (page_info->is_old) ? "YES" : "NO")); + + OK(fields[IDX_BUFFER_PAGE_FREE_CLOCK]->store( + page_info->freed_page_clock)); + + if (schema_table_store_record(thd, table)) { + DBUG_RETURN(1); + } + } + + DBUG_RETURN(0); +} + +/*******************************************************************//** +Set appropriate page type to a buf_page_info_t structure */ +static +void +i_s_innodb_set_page_type( +/*=====================*/ + buf_page_info_t*page_info, /*!< in/out: structure to fill with + scanned info */ + ulint page_type, /*!< in: page type */ + const byte* frame) /*!< in: buffer frame */ +{ + if (page_type == FIL_PAGE_INDEX) { + const page_t* page = (const page_t*) frame; + + /* FIL_PAGE_INDEX is a bit special, its value + is defined as 17855, so we cannot use FIL_PAGE_INDEX + to index into i_s_page_type[] array, its array index + in the i_s_page_type[] array is I_S_PAGE_TYPE_INDEX + (1) */ + page_info->page_type = I_S_PAGE_TYPE_INDEX; + + page_info->index_id = btr_page_get_index_id(page); + + page_info->data_size = (ulint)(page_header_get_field( + page, PAGE_HEAP_TOP) - (page_is_comp(page) + ? PAGE_NEW_SUPREMUM_END + : PAGE_OLD_SUPREMUM_END) + - page_header_get_field(page, PAGE_GARBAGE)); + + page_info->num_recs = page_get_n_recs(page); + } else if (page_type >= I_S_PAGE_TYPE_UNKNOWN) { + /* Encountered an unknown page type */ + page_info->page_type = I_S_PAGE_TYPE_UNKNOWN; + } else { + /* Make sure we get the right index into the + i_s_page_type[] array */ + ut_a(page_type == i_s_page_type[page_type].type_value); + + page_info->page_type = page_type; + } + + if (page_info->page_type == FIL_PAGE_TYPE_ZBLOB + || page_info->page_type == FIL_PAGE_TYPE_ZBLOB2) { + page_info->page_num = mach_read_from_4( + frame + FIL_PAGE_OFFSET); + page_info->space_id = mach_read_from_4( + frame + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID); + } +} +/*******************************************************************//** +Scans pages in the buffer cache, and collect their general information +into the buf_page_info_t array which is zero-filled. So any fields +that are not initialized in the function will default to 0 */ +static +void +i_s_innodb_buffer_page_get_info( +/*============================*/ + const buf_page_t*bpage, /*!< in: buffer pool page to scan */ + ulint pool_id, /*!< in: buffer pool id */ + ulint pos, /*!< in: buffer block position in + buffer pool or in the LRU list */ + buf_page_info_t*page_info) /*!< in: zero filled info structure; + out: structure filled with scanned + info */ +{ + ut_ad(pool_id < MAX_BUFFER_POOLS); + + page_info->pool_id = pool_id; + + page_info->block_id = pos; + + page_info->page_state = buf_page_get_state(bpage); + + /* Only fetch information for buffers that map to a tablespace, + that is, buffer page with state BUF_BLOCK_ZIP_PAGE, + BUF_BLOCK_ZIP_DIRTY or BUF_BLOCK_FILE_PAGE */ + if (buf_page_in_file(bpage)) { + const byte* frame; + ulint page_type; + + page_info->space_id = buf_page_get_space(bpage); + + page_info->page_num = buf_page_get_page_no(bpage); + + page_info->flush_type = bpage->flush_type; + + page_info->fix_count = bpage->buf_fix_count; + + page_info->newest_mod = bpage->newest_modification; + + page_info->oldest_mod = bpage->oldest_modification; + + page_info->access_time = bpage->access_time; + + page_info->zip_ssize = bpage->zip.ssize; + + page_info->io_fix = bpage->io_fix; + + page_info->is_old = bpage->old; + + page_info->freed_page_clock = bpage->freed_page_clock; + + if (page_info->page_state == BUF_BLOCK_FILE_PAGE) { + const buf_block_t*block; + + block = reinterpret_cast(bpage); + frame = block->frame; + page_info->hashed = (block->index != NULL); + } else { + ut_ad(page_info->zip_ssize); + frame = bpage->zip.data; + } + + page_type = fil_page_get_type(frame); + + i_s_innodb_set_page_type(page_info, page_type, frame); + } else { + page_info->page_type = I_S_PAGE_TYPE_UNKNOWN; + } +} + +/*******************************************************************//** +This is the function that goes through each block of the buffer pool +and fetch information to information schema tables: INNODB_BUFFER_PAGE. +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_fill_buffer_pool( +/*========================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + buf_pool_t* buf_pool, /*!< in: buffer pool to scan */ + const ulint pool_id) /*!< in: buffer pool id */ +{ + int status = 0; + mem_heap_t* heap; + + DBUG_ENTER("i_s_innodb_fill_buffer_pool"); + + heap = mem_heap_create(10000); + + /* Go through each chunk of buffer pool. Currently, we only + have one single chunk for each buffer pool */ + for (ulint n = 0; n < buf_pool->n_chunks; n++) { + const buf_block_t* block; + ulint n_blocks; + buf_page_info_t* info_buffer; + ulint num_page; + ulint mem_size; + ulint chunk_size; + ulint num_to_process = 0; + ulint block_id = 0; + mutex_t* block_mutex; + + /* Get buffer block of the nth chunk */ + block = buf_get_nth_chunk_block(buf_pool, n, &chunk_size); + num_page = 0; + + while (chunk_size > 0) { + /* we cache maximum MAX_BUF_INFO_CACHED number of + buffer page info */ + num_to_process = ut_min(chunk_size, + MAX_BUF_INFO_CACHED); + + mem_size = num_to_process * sizeof(buf_page_info_t); + + /* For each chunk, we'll pre-allocate information + structures to cache the page information read from + the buffer pool. Doing so before obtain any mutex */ + info_buffer = (buf_page_info_t*) mem_heap_zalloc( + heap, mem_size); + + /* GO through each block in the chunk */ + for (n_blocks = num_to_process; n_blocks--; block++) { + block_mutex = buf_page_get_mutex_enter(&block->page); + i_s_innodb_buffer_page_get_info( + &block->page, pool_id, block_id, + info_buffer + num_page); + mutex_exit(block_mutex); + block_id++; + num_page++; + } + + + /* Fill in information schema table with information + just collected from the buffer chunk scan */ + status = i_s_innodb_buffer_page_fill( + thd, tables, info_buffer, + num_page, heap); + + /* If something goes wrong, break and return */ + if (status) { + break; + } + + mem_heap_empty(heap); + chunk_size -= num_to_process; + num_page = 0; + } + } + + mem_heap_free(heap); + + DBUG_RETURN(status); +} + +/*******************************************************************//** +Fill page information for pages in InnoDB buffer pool to the +dynamic table INFORMATION_SCHEMA.INNODB_BUFFER_PAGE +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_page_fill_table( +/*==============================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + Item* ) /*!< in: condition (ignored) */ +{ + int status = 0; + + DBUG_ENTER("i_s_innodb_buffer_page_fill_table"); + + /* deny access to user without PROCESS privilege */ + if (check_global_access(thd, PROCESS_ACL)) { + DBUG_RETURN(0); + } + + /* Walk through each buffer pool */ + for (ulint i = 0; i < srv_buf_pool_instances; i++) { + buf_pool_t* buf_pool; + + buf_pool = buf_pool_from_array(i); + + /* Fetch information from pages in this buffer pool, + and fill the corresponding I_S table */ + status = i_s_innodb_fill_buffer_pool(thd, tables, buf_pool, i); + + /* If something wrong, break and return */ + if (status) { + break; + } + } + + DBUG_RETURN(status); +} + +/*******************************************************************//** +Bind the dynamic table INFORMATION_SCHEMA.INNODB_BUFFER_PAGE. +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_page_init( +/*========================*/ + void* p) /*!< in/out: table schema object */ +{ + ST_SCHEMA_TABLE* schema; + + DBUG_ENTER("i_s_innodb_buffer_page_init"); + + schema = reinterpret_cast(p); + + schema->fields_info = i_s_innodb_buffer_page_fields_info; + schema->fill_table = i_s_innodb_buffer_page_fill_table; + + DBUG_RETURN(0); +} + +UNIV_INTERN struct st_mysql_plugin i_s_innodb_buffer_page = +{ + /* the plugin type (a MYSQL_XXX_PLUGIN value) */ + /* int */ + STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN), + + /* pointer to type-specific plugin descriptor */ + /* void* */ + STRUCT_FLD(info, &i_s_info), + + /* plugin name */ + /* const char* */ + STRUCT_FLD(name, "INNODB_BUFFER_PAGE"), + + /* plugin author (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(author, plugin_author), + + /* general descriptive text (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(descr, "InnoDB Buffer Page Information"), + + /* the plugin license (PLUGIN_LICENSE_XXX) */ + /* int */ + STRUCT_FLD(license, PLUGIN_LICENSE_GPL), + + /* the function to invoke when plugin is loaded */ + /* int (*)(void*); */ + STRUCT_FLD(init, i_s_innodb_buffer_page_init), + + /* the function to invoke when plugin is unloaded */ + /* int (*)(void*); */ + STRUCT_FLD(deinit, i_s_common_deinit), + + /* plugin version (for SHOW PLUGINS) */ + /* unsigned int */ + STRUCT_FLD(version, INNODB_VERSION_SHORT), + + /* struct st_mysql_show_var* */ + STRUCT_FLD(status_vars, NULL), + + /* struct st_mysql_sys_var** */ + STRUCT_FLD(system_vars, NULL), + + /* reserved for dependency checking */ + /* void* */ + STRUCT_FLD(__reserved1, NULL), + + /* Plugin flags */ + /* unsigned long */ + STRUCT_FLD(flags, 0UL), +}; + +static ST_FIELD_INFO i_s_innodb_buf_page_lru_fields_info[] = +{ +#define IDX_BUF_LRU_POOL_ID 0 + {STRUCT_FLD(field_name, "POOL_ID"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_POS 1 + {STRUCT_FLD(field_name, "LRU_POSITION"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_SPACE 2 + {STRUCT_FLD(field_name, "SPACE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_NUM 3 + {STRUCT_FLD(field_name, "PAGE_NUMBER"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_TYPE 4 + {STRUCT_FLD(field_name, "PAGE_TYPE"), + STRUCT_FLD(field_length, 64), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_FLUSH_TYPE 5 + {STRUCT_FLD(field_name, "FLUSH_TYPE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_FIX_COUNT 6 + {STRUCT_FLD(field_name, "FIX_COUNT"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_HASHED 7 + {STRUCT_FLD(field_name, "IS_HASHED"), + STRUCT_FLD(field_length, 3), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_NEWEST_MOD 8 + {STRUCT_FLD(field_name, "NEWEST_MODIFICATION"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_OLDEST_MOD 9 + {STRUCT_FLD(field_name, "OLDEST_MODIFICATION"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_ACCESS_TIME 10 + {STRUCT_FLD(field_name, "ACCESS_TIME"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_TABLE_NAME 11 + {STRUCT_FLD(field_name, "TABLE_NAME"), + STRUCT_FLD(field_length, 1024), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_INDEX_NAME 12 + {STRUCT_FLD(field_name, "INDEX_NAME"), + STRUCT_FLD(field_length, 1024), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_NUM_RECS 13 + {STRUCT_FLD(field_name, "NUMBER_RECORDS"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_DATA_SIZE 14 + {STRUCT_FLD(field_name, "DATA_SIZE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_ZIP_SIZE 15 + {STRUCT_FLD(field_name, "COMPRESSED_SIZE"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_STATE 16 + {STRUCT_FLD(field_name, "COMPRESSED"), + STRUCT_FLD(field_length, 3), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_IO_FIX 17 + {STRUCT_FLD(field_name, "IO_FIX"), + STRUCT_FLD(field_length, 64), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_IS_OLD 18 + {STRUCT_FLD(field_name, "IS_OLD"), + STRUCT_FLD(field_length, 3), + STRUCT_FLD(field_type, MYSQL_TYPE_STRING), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_MAYBE_NULL), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + +#define IDX_BUF_LRU_PAGE_FREE_CLOCK 19 + {STRUCT_FLD(field_name, "FREE_PAGE_CLOCK"), + STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS), + STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG), + STRUCT_FLD(value, 0), + STRUCT_FLD(field_flags, MY_I_S_UNSIGNED), + STRUCT_FLD(old_name, ""), + STRUCT_FLD(open_method, SKIP_OPEN_TABLE)}, + + END_OF_ST_FIELD_INFO +}; + +/*******************************************************************//** +Fill Information Schema table INNODB_BUFFER_PAGE_LRU with information +cached in the buf_page_info_t array +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buf_page_lru_fill( +/*=========================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + const buf_page_info_t* info_array, /*!< in: array cached page + info */ + ulint num_page) /*!< in: number of page info + cached */ +{ + TABLE* table; + Field** fields; + mem_heap_t* heap; + + DBUG_ENTER("i_s_innodb_buf_page_lru_fill"); + + table = tables->table; + + fields = table->field; + + heap = mem_heap_create(1000); + + /* Iterate through the cached array and fill the I_S table rows */ + for (ulint i = 0; i < num_page; i++) { + const buf_page_info_t* page_info; + const char* table_name; + const char* index_name; + const char* state_str; + enum buf_page_state state; + + table_name = NULL; + index_name = NULL; + state_str = NULL; + + page_info = info_array + i; + + OK(fields[IDX_BUF_LRU_POOL_ID]->store(page_info->pool_id)); + + OK(fields[IDX_BUF_LRU_POS]->store(page_info->block_id)); + + OK(fields[IDX_BUF_LRU_PAGE_SPACE]->store(page_info->space_id)); + + OK(fields[IDX_BUF_LRU_PAGE_NUM]->store(page_info->page_num)); + + OK(field_store_string( + fields[IDX_BUF_LRU_PAGE_TYPE], + i_s_page_type[page_info->page_type].type_str)); + + OK(fields[IDX_BUF_LRU_PAGE_FLUSH_TYPE]->store( + page_info->flush_type)); + + OK(fields[IDX_BUF_LRU_PAGE_FIX_COUNT]->store( + page_info->fix_count)); + + if (page_info->hashed) { + OK(field_store_string( + fields[IDX_BUF_LRU_PAGE_HASHED], "YES")); + } else { + OK(field_store_string( + fields[IDX_BUF_LRU_PAGE_HASHED], "NO")); + } + + OK(fields[IDX_BUF_LRU_PAGE_NEWEST_MOD]->store( + page_info->newest_mod, true)); + + OK(fields[IDX_BUF_LRU_PAGE_OLDEST_MOD]->store( + page_info->oldest_mod, true)); + + OK(fields[IDX_BUF_LRU_PAGE_ACCESS_TIME]->store( + page_info->access_time)); + + /* If this is an index page, fetch the index name + and table name */ + if (page_info->page_type == I_S_PAGE_TYPE_INDEX) { + const dict_index_t* index; + + mutex_enter(&dict_sys->mutex); + index = dict_index_get_if_in_cache_low( + page_info->index_id); + + /* Copy the index/table name under mutex. We + do not want to hold the InnoDB mutex while + filling the IS table */ + if (index) { + const char* name_ptr = index->name; + + if (name_ptr[0] == TEMP_INDEX_PREFIX) { + name_ptr++; + } + + index_name = mem_heap_strdup(heap, name_ptr); + + table_name = mem_heap_strdup(heap, + index->table_name); + } + + mutex_exit(&dict_sys->mutex); + } + + OK(field_store_string( + fields[IDX_BUF_LRU_PAGE_TABLE_NAME], table_name)); + + OK(field_store_string( + fields[IDX_BUF_LRU_PAGE_INDEX_NAME], index_name)); + OK(fields[IDX_BUF_LRU_PAGE_NUM_RECS]->store( + page_info->num_recs)); + + OK(fields[IDX_BUF_LRU_PAGE_DATA_SIZE]->store( + page_info->data_size)); + + OK(fields[IDX_BUF_LRU_PAGE_ZIP_SIZE]->store( + page_info->zip_ssize ? + 512 << page_info->zip_ssize : 0)); + + state = static_cast(page_info->page_state); + + switch (state) { + /* Compressed page */ + case BUF_BLOCK_ZIP_PAGE: + case BUF_BLOCK_ZIP_DIRTY: + state_str = "YES"; + break; + /* Uncompressed page */ + case BUF_BLOCK_FILE_PAGE: + state_str = "NO"; + break; + /* We should not see following states */ + case BUF_BLOCK_ZIP_FREE: + case BUF_BLOCK_READY_FOR_USE: + case BUF_BLOCK_NOT_USED: + case BUF_BLOCK_MEMORY: + case BUF_BLOCK_REMOVE_HASH: + state_str = NULL; + break; + }; + + OK(field_store_string(fields[IDX_BUF_LRU_PAGE_STATE], + state_str)); + + switch (page_info->io_fix) { + case BUF_IO_NONE: + OK(field_store_string(fields[IDX_BUF_LRU_PAGE_IO_FIX], + "IO_NONE")); + break; + case BUF_IO_READ: + OK(field_store_string(fields[IDX_BUF_LRU_PAGE_IO_FIX], + "IO_READ")); + break; + case BUF_IO_WRITE: + OK(field_store_string(fields[IDX_BUF_LRU_PAGE_IO_FIX], + "IO_WRITE")); + break; + } + + OK(field_store_string(fields[IDX_BUF_LRU_PAGE_IS_OLD], + (page_info->is_old) ? "YES" : "NO")); + + OK(fields[IDX_BUF_LRU_PAGE_FREE_CLOCK]->store( + page_info->freed_page_clock)); + + if (schema_table_store_record(thd, table)) { + mem_heap_free(heap); + DBUG_RETURN(1); + } + + mem_heap_empty(heap); + } + + mem_heap_free(heap); + + DBUG_RETURN(0); +} + +/*******************************************************************//** +This is the function that goes through buffer pool's LRU list +and fetch information to INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU. +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_fill_buffer_lru( +/*=======================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + buf_pool_t* buf_pool, /*!< in: buffer pool to scan */ + const ulint pool_id) /*!< in: buffer pool id */ +{ + int status = 0; + buf_page_info_t* info_buffer; + ulint lru_pos = 0; + const buf_page_t* bpage; + ulint lru_len; + mutex_t* block_mutex; + + DBUG_ENTER("i_s_innodb_fill_buffer_lru"); + + RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name); + + /* Obtain buf_pool mutex before allocate info_buffer, since + UT_LIST_GET_LEN(buf_pool->LRU) could change */ + mutex_enter(&buf_pool->LRU_list_mutex); + + lru_len = UT_LIST_GET_LEN(buf_pool->LRU); + + /* Print error message if malloc fail */ + info_buffer = (buf_page_info_t*) my_malloc( + lru_len * sizeof *info_buffer, MYF(MY_WME)); + + if (!info_buffer) { + status = 1; + goto exit; + } + + memset(info_buffer, 0, lru_len * sizeof *info_buffer); + + /* Walk through Pool's LRU list and print the buffer page + information */ + bpage = UT_LIST_GET_LAST(buf_pool->LRU); + + while (bpage != NULL) { + block_mutex = buf_page_get_mutex_enter(bpage); + /* Use the same function that collect buffer info for + INNODB_BUFFER_PAGE to get buffer page info */ + i_s_innodb_buffer_page_get_info(bpage, pool_id, lru_pos, + (info_buffer + lru_pos)); + + bpage = UT_LIST_GET_PREV(LRU, bpage); + mutex_exit(block_mutex); + + lru_pos++; + } + + ut_ad(lru_pos == lru_len); + ut_ad(lru_pos == UT_LIST_GET_LEN(buf_pool->LRU)); + +exit: + mutex_exit(&buf_pool->LRU_list_mutex); + + if (info_buffer) { + status = i_s_innodb_buf_page_lru_fill( + thd, tables, info_buffer, lru_len); + + my_free(info_buffer); + } + + DBUG_RETURN(status); +} + +/*******************************************************************//** +Fill page information for pages in InnoDB buffer pool to the +dynamic table INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buf_page_lru_fill_table( +/*===============================*/ + THD* thd, /*!< in: thread */ + TABLE_LIST* tables, /*!< in/out: tables to fill */ + Item* ) /*!< in: condition (ignored) */ +{ + int status = 0; + + DBUG_ENTER("i_s_innodb_buf_page_lru_fill_table"); + + /* deny access to any users that do not hold PROCESS_ACL */ + if (check_global_access(thd, PROCESS_ACL)) { + DBUG_RETURN(0); + } + + /* Walk through each buffer pool */ + for (ulint i = 0; i < srv_buf_pool_instances; i++) { + buf_pool_t* buf_pool; + + buf_pool = buf_pool_from_array(i); + + /* Fetch information from pages in this buffer pool's LRU list, + and fill the corresponding I_S table */ + status = i_s_innodb_fill_buffer_lru(thd, tables, buf_pool, i); + + /* If something wrong, break and return */ + if (status) { + break; + } + } + + DBUG_RETURN(status); +} + +/*******************************************************************//** +Bind the dynamic table INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU. +@return 0 on success, 1 on failure */ +static +int +i_s_innodb_buffer_page_lru_init( +/*============================*/ + void* p) /*!< in/out: table schema object */ +{ + ST_SCHEMA_TABLE* schema; + + DBUG_ENTER("i_s_innodb_buffer_page_lru_init"); + + schema = reinterpret_cast(p); + + schema->fields_info = i_s_innodb_buf_page_lru_fields_info; + schema->fill_table = i_s_innodb_buf_page_lru_fill_table; + + DBUG_RETURN(0); +} + +UNIV_INTERN struct st_mysql_plugin i_s_innodb_buffer_page_lru = +{ + /* the plugin type (a MYSQL_XXX_PLUGIN value) */ + /* int */ + STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN), + + /* pointer to type-specific plugin descriptor */ + /* void* */ + STRUCT_FLD(info, &i_s_info), + + /* plugin name */ + /* const char* */ + STRUCT_FLD(name, "INNODB_BUFFER_PAGE_LRU"), + + /* plugin author (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(author, plugin_author), + + /* general descriptive text (for SHOW PLUGINS) */ + /* const char* */ + STRUCT_FLD(descr, "InnoDB Buffer Page in LRU"), + + /* the plugin license (PLUGIN_LICENSE_XXX) */ + /* int */ + STRUCT_FLD(license, PLUGIN_LICENSE_GPL), + + /* the function to invoke when plugin is loaded */ + /* int (*)(void*); */ + STRUCT_FLD(init, i_s_innodb_buffer_page_lru_init), + + /* the function to invoke when plugin is unloaded */ + /* int (*)(void*); */ + STRUCT_FLD(deinit, i_s_common_deinit), + + /* plugin version (for SHOW PLUGINS) */ + /* unsigned int */ + STRUCT_FLD(version, INNODB_VERSION_SHORT), + + /* struct st_mysql_show_var* */ + STRUCT_FLD(status_vars, NULL), + + /* struct st_mysql_sys_var** */ + STRUCT_FLD(system_vars, NULL), + + /* reserved for dependency checking */ + /* void* */ + STRUCT_FLD(__reserved1, NULL), + + /* Plugin flags */ + /* unsigned long */ + STRUCT_FLD(flags, 0UL), +}; + /*******************************************************************//** Unbind a dynamic INFORMATION_SCHEMA table. @return 0 on success */ diff --git a/handler/i_s.h b/handler/i_s.h index b910138495f..2829ec5871e 100644 --- a/handler/i_s.h +++ b/handler/i_s.h @@ -52,5 +52,8 @@ extern struct st_mysql_plugin i_s_innodb_buffer_pool_pages; extern struct st_mysql_plugin i_s_innodb_buffer_pool_pages_index; extern struct st_mysql_plugin i_s_innodb_buffer_pool_pages_blob; extern struct st_mysql_plugin i_s_innodb_changed_pages; +extern struct st_mysql_plugin i_s_innodb_buffer_page; +extern struct st_mysql_plugin i_s_innodb_buffer_page_lru; +extern struct st_mysql_plugin i_s_innodb_buffer_stats;; #endif /* i_s_h */ diff --git a/ibuf/ibuf0ibuf.c b/ibuf/ibuf0ibuf.c index 562f207268a..78cb6e20176 100644 --- a/ibuf/ibuf0ibuf.c +++ b/ibuf/ibuf0ibuf.c @@ -3650,11 +3650,18 @@ bitmap_fail: root = ibuf_tree_root_get(&mtr); - err = btr_cur_pessimistic_insert(BTR_NO_LOCKING_FLAG - | BTR_NO_UNDO_LOG_FLAG, - cursor, - ibuf_entry, &ins_rec, - &dummy_big_rec, 0, thr, &mtr); + err = btr_cur_optimistic_insert( + BTR_NO_LOCKING_FLAG | BTR_NO_UNDO_LOG_FLAG, + cursor, ibuf_entry, &ins_rec, + &dummy_big_rec, 0, thr, &mtr); + + if (err == DB_FAIL) { + err = btr_cur_pessimistic_insert( + BTR_NO_LOCKING_FLAG | BTR_NO_UNDO_LOG_FLAG, + cursor, ibuf_entry, &ins_rec, + &dummy_big_rec, 0, thr, &mtr); + } + mutex_exit(&ibuf_pessimistic_insert_mutex); ibuf_size_update(root, &mtr); mutex_exit(&ibuf_mutex); diff --git a/include/buf0buf.h b/include/buf0buf.h index 44130aa8b99..5e3eeb77279 100644 --- a/include/buf0buf.h +++ b/include/buf0buf.h @@ -68,7 +68,10 @@ Created 11/5/1995 Heikki Tuuri position of the block. */ /* @} */ -#define MAX_BUFFER_POOLS 64 /*!< The maximum number of buffer +#define MAX_BUFFER_POOLS_BITS 6 /*!< Number of bits to representing + a buffer pool ID */ +#define MAX_BUFFER_POOLS (1 << MAX_BUFFER_POOLS_BITS) + /*!< The maximum number of buffer pools that can be defined */ #define BUF_POOL_WATCH_SIZE 1 /*!< Maximum number of concurrent @@ -233,6 +236,7 @@ ulint buf_pool_init( /*=========*/ ulint size, /*!< in: Size of the total pool in bytes */ + ibool populate, /*!< in: Force virtual page preallocation */ ulint n_instances); /*!< in: Number of instances */ /********************************************************************//** Frees the buffer pool at shutdown. This must not be invoked before @@ -778,6 +782,18 @@ void buf_print_io( /*=========*/ FILE* file); /*!< in: file where to print */ +/*******************************************************************//** +Collect buffer pool stats information for a buffer pool. Also +record aggregated stats if there are more than one buffer pool +in the server */ +UNIV_INTERN +void +buf_stats_get_pool_info( +/*====================*/ + buf_pool_t* buf_pool, /*!< in: buffer pool */ + ulint pool_id, /*!< in: buffer pool ID */ + buf_pool_info_t* all_pool_info); /*!< in/out: buffer pool info + to fill */ /*********************************************************************//** Returns the ratio in percents of modified pages in the buffer pool / database pages in the buffer pool. @@ -1362,12 +1378,25 @@ void buf_get_total_stat( /*===============*/ buf_pool_stat_t*tot_stat); /*!< out: buffer pool stats */ +/*********************************************************************//** +Get the nth chunk's buffer block in the specified buffer pool. +@return the nth chunk's buffer block. */ +UNIV_INLINE +buf_block_t* +buf_get_nth_chunk_block( +/*====================*/ + const buf_pool_t* buf_pool, /*!< in: buffer pool instance */ + ulint n, /*!< in: nth chunk in the buffer pool */ + ulint* chunk_size); /*!< in: chunk size */ #endif /* !UNIV_HOTBACKUP */ /** The common buffer control block structure for compressed and uncompressed frames */ +/** Number of bits used for buffer page states. */ +#define BUF_PAGE_STATE_BITS 3 + struct buf_page_struct{ /** @name General fields None of these bit-fields must be modified without holding @@ -1382,7 +1411,8 @@ struct buf_page_struct{ unsigned offset:32; /*!< page number; also protected by buf_pool->mutex. */ - unsigned state:3; /*!< state of the control block; also + unsigned state:BUF_PAGE_STATE_BITS; + /*!< state of the control block; also protected by buf_pool->mutex. State transitions from BUF_BLOCK_READY_FOR_USE to diff --git a/include/buf0buf.ic b/include/buf0buf.ic index 6595e86a8fe..221f86d9d62 100644 --- a/include/buf0buf.ic +++ b/include/buf0buf.ic @@ -36,6 +36,8 @@ Created 11/5/1995 Heikki Tuuri #include "buf0lru.h" #include "buf0rea.h" #include "srv0srv.h" +#include "buf0types.h" + /*********************************************************************//** Gets the current size of buffer buf_pool in bytes. @return size in bytes */ @@ -1354,4 +1356,21 @@ buf_pool_page_hash_x_unlock_all(void) rw_lock_x_unlock(&buf_pool->page_hash_latch); } } +/*********************************************************************//** +Get the nth chunk's buffer block in the specified buffer pool. +@return the nth chunk's buffer block. */ +UNIV_INLINE +buf_block_t* +buf_get_nth_chunk_block( +/*====================*/ + const buf_pool_t* buf_pool, /*!< in: buffer pool instance */ + ulint n, /*!< in: nth chunk in the buffer pool */ + ulint* chunk_size) /*!< in: chunk size */ +{ + const buf_chunk_t* chunk; + + chunk = buf_pool->chunks + n; + *chunk_size = chunk->size; + return(chunk->blocks); +} #endif /* !UNIV_HOTBACKUP */ diff --git a/include/fil0fil.h b/include/fil0fil.h index 19bf5960ae4..7da62e68e56 100644 --- a/include/fil0fil.h +++ b/include/fil0fil.h @@ -144,6 +144,8 @@ extern fil_addr_t fil_addr_null; #define FIL_PAGE_TYPE_BLOB 10 /*!< Uncompressed BLOB page */ #define FIL_PAGE_TYPE_ZBLOB 11 /*!< First compressed BLOB page */ #define FIL_PAGE_TYPE_ZBLOB2 12 /*!< Subsequent compressed BLOB page */ +#define FIL_PAGE_TYPE_LAST FIL_PAGE_TYPE_ZBLOB2 + /*!< Last page type */ /* @} */ /** Space types @{ */ diff --git a/include/log0log.h b/include/log0log.h index 1d8476d36e5..ee20f429a2b 100644 --- a/include/log0log.h +++ b/include/log0log.h @@ -41,6 +41,9 @@ Created 12/9/1995 Heikki Tuuri #include "sync0rw.h" #endif /* !UNIV_HOTBACKUP */ +/* Type used for all log sequence number storage and arithmetics */ +typedef ib_uint64_t lsn_t; + /** Redo log buffer */ typedef struct log_struct log_t; /** Redo log group */ diff --git a/include/os0proc.h b/include/os0proc.h index fd46bd7db87..a78b1c2a250 100644 --- a/include/os0proc.h +++ b/include/os0proc.h @@ -58,7 +58,8 @@ UNIV_INTERN void* os_mem_alloc_large( /*===============*/ - ulint* n); /*!< in/out: number of bytes */ + ulint* n, /*!< in/out: number of bytes */ + ibool populate); /*!< in: virtual page preallocation */ /****************************************************************//** Frees large pages memory. */ UNIV_INTERN diff --git a/include/srv0srv.h b/include/srv0srv.h index 65d28db6895..04abf3fcc06 100644 --- a/include/srv0srv.h +++ b/include/srv0srv.h @@ -179,6 +179,7 @@ extern my_bool srv_use_sys_malloc; extern ibool srv_use_sys_malloc; #endif /* UNIV_HOTBACKUP */ extern ulint srv_buf_pool_size; /*!< requested size in bytes */ +extern my_bool srv_buf_pool_populate; /*!< virtual page preallocation */ extern ulint srv_buf_pool_instances; /*!< requested number of buffer pool instances */ extern ulint srv_buf_pool_old_size; /*!< previously requested size */ extern ulint srv_buf_pool_curr_size; /*!< current size in bytes */ diff --git a/include/trx0sys.h b/include/trx0sys.h index c933fb405e1..cba21ae97a9 100644 --- a/include/trx0sys.h +++ b/include/trx0sys.h @@ -342,6 +342,14 @@ void trx_sys_print_mysql_binlog_offset(void); /*===================================*/ /*****************************************************************//** +Prints to stderr the MySQL master log offset info in the trx system header +COMMIT set of fields if the magic number shows it valid and stores it +in global variables. */ +UNIV_INTERN +void +trx_sys_print_committed_mysql_master_log_pos(void); +/*==============================================*/ +/*****************************************************************//** Prints to stderr the MySQL master log offset info in the trx system header if the magic number shows it valid. */ UNIV_INTERN @@ -534,10 +542,16 @@ We must remember this limit in order to keep file compatibility. */ //# error "UNIV_PAGE_SIZE < 4096" //#endif /** The offset of the MySQL replication info in the trx system header; -this contains the same fields as TRX_SYS_MYSQL_LOG_INFO below */ +this contains the same fields as TRX_SYS_MYSQL_LOG_INFO below. These are +written at prepare time and are the main copy. */ #define TRX_SYS_MYSQL_MASTER_LOG_INFO (UNIV_PAGE_SIZE - 2000) #define TRX_SYS_MYSQL_RELAY_LOG_INFO (UNIV_PAGE_SIZE - 1500) +/** The copy of the above which is made at transaction COMMIT time. If binlog +crash recovery rollbacks a PREPAREd transaction, they are copied back. */ +#define TRX_SYS_COMMIT_MASTER_LOG_INFO (UNIV_PAGE_SIZE - 3000) +#define TRX_SYS_COMMIT_RELAY_LOG_INFO (UNIV_PAGE_SIZE - 2500) + /** The offset of the MySQL binlog offset info in the trx system header */ #define TRX_SYS_MYSQL_LOG_INFO (UNIV_PAGE_SIZE - 1000) #define TRX_SYS_MYSQL_LOG_MAGIC_N_FLD 0 /*!< magic number which is diff --git a/os/os0proc.c b/os/os0proc.c index 68321e1aaf9..c9ee707e923 100644 --- a/os/os0proc.c +++ b/os/os0proc.c @@ -32,6 +32,12 @@ Created 9/30/1995 Heikki Tuuri #include "ut0mem.h" #include "ut0byte.h" +/* Linux release version */ +#if defined(UNIV_LINUX) && defined(_GNU_SOURCE) +#include /* strverscmp() */ +#include /* uname() */ +#endif + /* FreeBSD for example has only MAP_ANON, Linux has MAP_ANONYMOUS and MAP_ANON but MAP_ANON is marked as deprecated */ #if defined(MAP_ANONYMOUS) @@ -40,6 +46,13 @@ MAP_ANON but MAP_ANON is marked as deprecated */ #define OS_MAP_ANON MAP_ANON #endif +/* Linux's MAP_POPULATE */ +#if defined(MAP_POPULATE) +#define OS_MAP_POPULATE MAP_POPULATE +#else +#define OS_MAP_POPULATE 0 +#endif + UNIV_INTERN ibool os_use_large_pages; /* Large page size. This may be a boot-time option on some platforms */ UNIV_INTERN ulint os_large_page_size; @@ -62,6 +75,24 @@ os_proc_get_number(void) #endif } +/****************************************************************//** +Retrieve and compare operating system release. +@return TRUE if the OS release is equal to, or later than release. */ +UNIV_INTERN +ibool +os_compare_release( +/*===============*/ + const char* release /*!< in: OS release */ + __attribute__((unused))) +{ +#if defined(UNIV_LINUX) && defined(_GNU_SOURCE) + struct utsname name; + return uname(&name) == 0 && strverscmp(name.release, release) >= 0; +#else + return 0; +#endif +} + /****************************************************************//** Allocates large pages memory. @return allocated memory */ @@ -69,7 +100,8 @@ UNIV_INTERN void* os_mem_alloc_large( /*===============*/ - ulint* n) /*!< in/out: number of bytes */ + ulint* n, /*!< in/out: number of bytes */ + ibool populate) /*!< in: virtual page preallocation */ { void* ptr; ulint size; @@ -155,12 +187,13 @@ skip: ut_ad(ut_is_2pow(size)); size = *n = ut_2pow_round(*n + (size - 1), size); ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | OS_MAP_ANON, -1, 0); + MAP_PRIVATE | OS_MAP_ANON | + (populate ? OS_MAP_POPULATE : 0), -1, 0); if (UNIV_UNLIKELY(ptr == (void*) -1)) { fprintf(stderr, "InnoDB: mmap(%lu bytes) failed;" " errno %lu\n", (ulong) size, (ulong) errno); - ptr = NULL; + return(NULL); } else { os_fast_mutex_lock(&ut_list_mutex); ut_total_allocated_memory += size; @@ -168,6 +201,25 @@ skip: UNIV_MEM_ALLOC(ptr, size); } #endif + +#if OS_MAP_ANON && OS_MAP_POPULATE + /* MAP_POPULATE is only supported for private mappings + since Linux 2.6.23. */ + populate = populate && !os_compare_release("2.6.23"); + + if (populate) { + fprintf(stderr, "InnoDB: Warning: mmap(MAP_POPULATE) " + "is not supported for private mappings. " + "Forcing preallocation by faulting in pages.\n"); + } +#endif + + /* Initialize the entire buffer to force the allocation + of physical memory page frames. */ + if (populate) { + memset(ptr, '\0', size); + } + return(ptr); } diff --git a/page/page0page.c b/page/page0page.c index 4a389bbe5b8..e29fa2eb1e5 100644 --- a/page/page0page.c +++ b/page/page0page.c @@ -781,12 +781,18 @@ page_copy_rec_list_start( if (UNIV_LIKELY_NULL(new_page_zip)) { mtr_set_log_mode(mtr, log_mode); + DBUG_EXECUTE_IF("page_copy_rec_list_start_compress_fail", + goto zip_reorganize;); + if (UNIV_UNLIKELY (!page_zip_compress(new_page_zip, new_page, index, mtr))) { + ulint ret_pos; +#ifndef DBUG_OFF +zip_reorganize: +#endif /* DBUG_OFF */ /* Before trying to reorganize the page, store the number of preceding records on the page. */ - ulint ret_pos - = page_rec_get_n_recs_before(ret); + ret_pos = page_rec_get_n_recs_before(ret); /* Before copying, "ret" was the predecessor of the predefined supremum record. If it was the predefined infimum record, then it would @@ -807,15 +813,10 @@ page_copy_rec_list_start( btr_blob_dbg_add(new_page, index, "copy_start_reorg_fail"); return(NULL); - } else { - /* The page was reorganized: - Seek to ret_pos. */ - ret = new_page + PAGE_NEW_INFIMUM; - - do { - ret = rec_get_next_ptr(ret, TRUE); - } while (--ret_pos); } + + /* The page was reorganized: Seek to ret_pos. */ + ret = page_rec_get_nth(new_page, ret_pos); } } diff --git a/row/row0ins.c b/row/row0ins.c index b21d48c7552..3ae4c227ddc 100644 --- a/row/row0ins.c +++ b/row/row0ins.c @@ -2181,9 +2181,16 @@ row_ins_index_entry_low( goto function_exit; } - err = btr_cur_pessimistic_insert( + + err = btr_cur_optimistic_insert( 0, &cursor, entry, &insert_rec, &big_rec, n_ext, thr, &mtr); + + if (err == DB_FAIL) { + err = btr_cur_pessimistic_insert( + 0, &cursor, entry, &insert_rec, + &big_rec, n_ext, thr, &mtr); + } } } diff --git a/row/row0merge.c b/row/row0merge.c index ac11379ab58..b5f0c557376 100644 --- a/row/row0merge.c +++ b/row/row0merge.c @@ -1254,11 +1254,25 @@ row_merge_read_clustered_index( goto err_exit; } + /* Store the cursor position on the last user + record on the page. */ + btr_pcur_move_to_prev_on_page(&pcur); + /* Leaf pages must never be empty, unless + this is the only page in the index tree. */ + ut_ad(btr_pcur_is_on_user_rec(&pcur) + || buf_block_get_page_no( + btr_pcur_get_block(&pcur)) + == clust_index->page); + btr_pcur_store_position(&pcur, &mtr); mtr_commit(&mtr); mtr_start(&mtr); + /* Restore position on the record, or its + predecessor if the record was purged + meanwhile. */ btr_pcur_restore_position(BTR_SEARCH_LEAF, &pcur, &mtr); + /* Move to the successor of the original record. */ has_next = btr_pcur_move_to_next_user_rec(&pcur, &mtr); } @@ -2720,7 +2734,7 @@ row_merge_build_indexes( merge_files = mem_alloc(n_indexes * sizeof *merge_files); block_size = 3 * merge_sort_block_size; - block_mem = os_mem_alloc_large(&block_size); + block_mem = os_mem_alloc_large(&block_size, FALSE); for (i = 0; i < UT_ARR_SIZE(block); i++) { block[i] = (row_merge_block_t ) ((byte *) block_mem + diff --git a/srv/srv0srv.c b/srv/srv0srv.c index 0f04b2d097e..94eef213aaf 100644 --- a/srv/srv0srv.c +++ b/srv/srv0srv.c @@ -232,6 +232,8 @@ UNIV_INTERN const byte* srv_latin1_ordering; UNIV_INTERN my_bool srv_use_sys_malloc = TRUE; /* requested size in kilobytes */ UNIV_INTERN ulint srv_buf_pool_size = ULINT_MAX; +/* force virtual page preallocation (prefault) */ +UNIV_INTERN my_bool srv_buf_pool_populate = FALSE; /* requested number of buffer pool instances */ UNIV_INTERN ulint srv_buf_pool_instances = 1; /* previously requested size */ diff --git a/srv/srv0start.c b/srv/srv0start.c index eaa98a02589..2bfbeed5cb0 100644 --- a/srv/srv0start.c +++ b/srv/srv0start.c @@ -1540,7 +1540,8 @@ innobase_start_or_create_for_mysql(void) ((double) srv_buf_pool_size) / (1024 * 1024)); } - err = buf_pool_init(srv_buf_pool_size, srv_buf_pool_instances); + err = buf_pool_init(srv_buf_pool_size, (ibool) srv_buf_pool_populate, + srv_buf_pool_instances); ut_print_timestamp(stderr); fprintf(stderr, diff --git a/trx/trx0sys.c b/trx/trx0sys.c index f46562eaecb..978748642bf 100644 --- a/trx/trx0sys.c +++ b/trx/trx0sys.c @@ -959,8 +959,31 @@ trx_sys_print_mysql_binlog_offset(void) } /*****************************************************************//** -Prints to stderr the MySQL master log offset info in the trx system header if -the magic number shows it valid. */ +Reads the log coordinates at the given offset in the trx sys header. */ +static +void +trx_sys_read_log_pos( +/*=================*/ + const trx_sysf_t* sys_header, /*!< in: the trx sys header */ + uint header_offset, /*!< in: coord offset in the + header */ + char* log_fn, /*!< out: the log file name */ + ib_int64_t* log_pos) /*!< out: the log poistion */ +{ + ut_memcpy(log_fn, sys_header + header_offset + TRX_SYS_MYSQL_LOG_NAME, + TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN); + + *log_pos = + (((ib_int64_t)mach_read_from_4(sys_header + header_offset + + TRX_SYS_MYSQL_LOG_OFFSET_HIGH)) << 32) + + mach_read_from_4(sys_header + header_offset + + TRX_SYS_MYSQL_LOG_OFFSET_LOW); +} + +/*****************************************************************//** +Prints to stderr the MySQL master log offset info in the trx system header +PREPARE set of fields if the magic number shows it valid and stores it +in global variables. */ UNIV_INTERN void trx_sys_print_mysql_master_log_pos(void) @@ -982,60 +1005,79 @@ trx_sys_print_mysql_master_log_pos(void) return; } + /* Copy the master log position info to global variables we can + use in ha_innobase.cc to initialize glob_mi to right values */ + trx_sys_read_log_pos(sys_header, TRX_SYS_MYSQL_MASTER_LOG_INFO, + trx_sys_mysql_master_log_name, + &trx_sys_mysql_master_log_pos); + + trx_sys_read_log_pos(sys_header, TRX_SYS_MYSQL_RELAY_LOG_INFO, + trx_sys_mysql_relay_log_name, + &trx_sys_mysql_relay_log_pos); + + mtr_commit(&mtr); + fprintf(stderr, "InnoDB: In a MySQL replication slave the last" " master binlog file\n" - "InnoDB: position %lu %lu, file name %s\n", - (ulong) mach_read_from_4(sys_header - + TRX_SYS_MYSQL_MASTER_LOG_INFO - + TRX_SYS_MYSQL_LOG_OFFSET_HIGH), - (ulong) mach_read_from_4(sys_header - + TRX_SYS_MYSQL_MASTER_LOG_INFO - + TRX_SYS_MYSQL_LOG_OFFSET_LOW), - sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO - + TRX_SYS_MYSQL_LOG_NAME); + "InnoDB: position %llu, file name %s\n", + trx_sys_mysql_master_log_pos, + trx_sys_mysql_master_log_name); fprintf(stderr, "InnoDB: and relay log file\n" - "InnoDB: position %lu %lu, file name %s\n", - (ulong) mach_read_from_4(sys_header - + TRX_SYS_MYSQL_RELAY_LOG_INFO - + TRX_SYS_MYSQL_LOG_OFFSET_HIGH), - (ulong) mach_read_from_4(sys_header - + TRX_SYS_MYSQL_RELAY_LOG_INFO - + TRX_SYS_MYSQL_LOG_OFFSET_LOW), - sys_header + TRX_SYS_MYSQL_RELAY_LOG_INFO - + TRX_SYS_MYSQL_LOG_NAME); + "InnoDB: position %llu, file name %s\n", + trx_sys_mysql_relay_log_pos, + trx_sys_mysql_relay_log_name); +} + +/*****************************************************************//** +Prints to stderr the MySQL master log offset info in the trx system header +COMMIT set of fields if the magic number shows it valid and stores it +in global variables. */ +UNIV_INTERN +void +trx_sys_print_committed_mysql_master_log_pos(void) +/*==============================================*/ +{ + trx_sysf_t* sys_header; + mtr_t mtr; + + mtr_start(&mtr); + + sys_header = trx_sysf_get(&mtr); + + if (mach_read_from_4(sys_header + TRX_SYS_COMMIT_MASTER_LOG_INFO + + TRX_SYS_MYSQL_LOG_MAGIC_N_FLD) + != TRX_SYS_MYSQL_LOG_MAGIC_N) { + + mtr_commit(&mtr); + + return; + } /* Copy the master log position info to global variables we can - use in ha_innobase.cc to initialize glob_mi to right values */ + use in ha_innobase.cc to initialize glob_mi to right values */ + trx_sys_read_log_pos(sys_header, TRX_SYS_COMMIT_MASTER_LOG_INFO, + trx_sys_mysql_master_log_name, + &trx_sys_mysql_master_log_pos); - ut_memcpy(trx_sys_mysql_master_log_name, - sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO - + TRX_SYS_MYSQL_LOG_NAME, - TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN); + trx_sys_read_log_pos(sys_header, TRX_SYS_COMMIT_RELAY_LOG_INFO, + trx_sys_mysql_relay_log_name, + &trx_sys_mysql_relay_log_pos); - trx_sys_mysql_master_log_pos - = (((ib_int64_t) mach_read_from_4( - sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO - + TRX_SYS_MYSQL_LOG_OFFSET_HIGH)) << 32) - + ((ib_int64_t) mach_read_from_4( - sys_header + TRX_SYS_MYSQL_MASTER_LOG_INFO - + TRX_SYS_MYSQL_LOG_OFFSET_LOW)); - - ut_memcpy(trx_sys_mysql_relay_log_name, - sys_header + TRX_SYS_MYSQL_RELAY_LOG_INFO - + TRX_SYS_MYSQL_LOG_NAME, - TRX_SYS_MYSQL_MASTER_LOG_NAME_LEN); - - trx_sys_mysql_relay_log_pos - = (((ib_int64_t) mach_read_from_4( - sys_header + TRX_SYS_MYSQL_RELAY_LOG_INFO - + TRX_SYS_MYSQL_LOG_OFFSET_HIGH)) << 32) - + ((ib_int64_t) mach_read_from_4( - sys_header + TRX_SYS_MYSQL_RELAY_LOG_INFO - + TRX_SYS_MYSQL_LOG_OFFSET_LOW)); mtr_commit(&mtr); + + fprintf(stderr, + "InnoDB: In a MySQL replication slave the last" + " master binlog file\n" + "InnoDB: position %llu, file name %s\n", + trx_sys_mysql_master_log_pos, trx_sys_mysql_master_log_name); + + fprintf(stderr, + "InnoDB: and relay log file\n" + "InnoDB: position %llu, file name %s\n", + trx_sys_mysql_relay_log_pos, trx_sys_mysql_relay_log_name); } /****************************************************************//** diff --git a/trx/trx0trx.c b/trx/trx0trx.c index 6cf97f65dd0..f30e2ef2035 100644 --- a/trx/trx0trx.c +++ b/trx/trx0trx.c @@ -939,13 +939,13 @@ trx_write_serialisation_history( sys_header, trx->mysql_relay_log_file_name, trx->mysql_relay_log_pos, - TRX_SYS_MYSQL_RELAY_LOG_INFO, &mtr); + TRX_SYS_COMMIT_RELAY_LOG_INFO, &mtr); trx_sys_update_mysql_binlog_offset( sys_header, trx->mysql_master_log_file_name, trx->mysql_master_log_pos, - TRX_SYS_MYSQL_MASTER_LOG_INFO, &mtr); + TRX_SYS_COMMIT_MASTER_LOG_INFO, &mtr); trx->mysql_master_log_file_name = ""; } @@ -2051,6 +2051,23 @@ trx_prepare_off_kernel( mutex_exit(&(rseg->mutex)); + if (trx->mysql_master_log_file_name[0] != '\0') { + /* This database server is a MySQL replication slave */ + trx_sysf_t* sys_header = trx_sysf_get(&mtr); + + trx_sys_update_mysql_binlog_offset( + sys_header, + trx->mysql_relay_log_file_name, + trx->mysql_relay_log_pos, + TRX_SYS_MYSQL_RELAY_LOG_INFO, &mtr); + trx_sys_update_mysql_binlog_offset( + sys_header, + trx->mysql_master_log_file_name, + trx->mysql_master_log_pos, + TRX_SYS_MYSQL_MASTER_LOG_INFO, &mtr); + trx->mysql_master_log_file_name = ""; + } + /*--------------*/ mtr_commit(&mtr); /* This mtr commit makes the transaction prepared in the file-based From b1b939f4f79ae3eeab5afcd2d3a405009368280f Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Wed, 21 Nov 2012 23:25:38 +0100 Subject: [PATCH 52/60] bzr ignore 'Percona-Server-*.tar.gz' --- .bzrignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .bzrignore diff --git a/.bzrignore b/.bzrignore new file mode 100644 index 00000000000..87c67fc24a1 --- /dev/null +++ b/.bzrignore @@ -0,0 +1 @@ +Percona-Server-*.tar.gz From 980664bf2378d2bb57ec2f34016f0ff0a7ff4818 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 26 Nov 2012 18:50:29 +0100 Subject: [PATCH 53/60] mysql-test: sys_vars stub for a new xtradb config variable; tc_log_mmap test; --- .../innodb_buffer_pool_populate_basic.result | 1 + .../t/innodb_buffer_pool_populate_basic.test | 1 + .../pbxt/mysql-test/main/r/rpl_mmap.result | 16 ++++++++++++++ storage/pbxt/mysql-test/main/t/rpl_mmap.test | 21 +++++++++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 mysql-test/suite/sys_vars/r/innodb_buffer_pool_populate_basic.result create mode 100644 mysql-test/suite/sys_vars/t/innodb_buffer_pool_populate_basic.test create mode 100644 storage/pbxt/mysql-test/main/r/rpl_mmap.result create mode 100644 storage/pbxt/mysql-test/main/t/rpl_mmap.test diff --git a/mysql-test/suite/sys_vars/r/innodb_buffer_pool_populate_basic.result b/mysql-test/suite/sys_vars/r/innodb_buffer_pool_populate_basic.result new file mode 100644 index 00000000000..d9d067c2cf9 --- /dev/null +++ b/mysql-test/suite/sys_vars/r/innodb_buffer_pool_populate_basic.result @@ -0,0 +1 @@ +XtraDB extension diff --git a/mysql-test/suite/sys_vars/t/innodb_buffer_pool_populate_basic.test b/mysql-test/suite/sys_vars/t/innodb_buffer_pool_populate_basic.test new file mode 100644 index 00000000000..00aa476e8d2 --- /dev/null +++ b/mysql-test/suite/sys_vars/t/innodb_buffer_pool_populate_basic.test @@ -0,0 +1 @@ +--echo XtraDB extension diff --git a/storage/pbxt/mysql-test/main/r/rpl_mmap.result b/storage/pbxt/mysql-test/main/r/rpl_mmap.result new file mode 100644 index 00000000000..b1f5f15d012 --- /dev/null +++ b/storage/pbxt/mysql-test/main/r/rpl_mmap.result @@ -0,0 +1,16 @@ +include/master-slave.inc +[connection master] +create table t1 (a int) engine=InnoDB; +create table t2 (a int) engine=pbxt; +begin; +insert into t1 values (1); +insert into t2 values (2); +commit; +select * from t1; +a +1 +select * from t2; +a +2 +drop table t1, t2; +include/rpl_end.inc diff --git a/storage/pbxt/mysql-test/main/t/rpl_mmap.test b/storage/pbxt/mysql-test/main/t/rpl_mmap.test new file mode 100644 index 00000000000..a6f50e1b6b3 --- /dev/null +++ b/storage/pbxt/mysql-test/main/t/rpl_mmap.test @@ -0,0 +1,21 @@ +--source include/have_innodb.inc +--source include/master-slave.inc + +create table t1 (a int) engine=InnoDB; +create table t2 (a int) engine=pbxt; + +begin; +insert into t1 values (1); +insert into t2 values (2); +commit; + +sync_slave_with_master; +connection slave; + +select * from t1; +select * from t2; + +connection master; +drop table t1, t2; + +--source include/rpl_end.inc From 0f8450b2fb0f3f21a1829254b19bd61c46d09ead Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Tue, 27 Nov 2012 00:45:29 +0100 Subject: [PATCH 54/60] MDEV-3885 - connection suicide via mysql_kill() causes assertion in server Assertion happened because sql_kill did not set OK status in diagnostic area in the case of connection suicide (id to kill == thd->thread_id), issued via COM_PROCESS_KILL , e.g using mysql_kill() This patch ensures that diagnostic area is initialized in this specific case. --- sql/sql_parse.cc | 2 +- tests/mysql_client_test.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index d2eb6ae8d1f..087c7903dc7 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -6717,7 +6717,7 @@ void sql_kill(THD *thd, ulong id, killed_state state) uint error; if (!(error= kill_one_thread(thd, id, state))) { - if (! thd->killed) + if ((!thd->killed) || (thd->thread_id == id)) my_ok(thd); } else diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index 95fc61f2b72..285e5fd0aee 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -18554,6 +18554,22 @@ static void test_progress_reporting() mysql_close(conn); } +/** + MDEV-3885 - connection suicide via mysql_kill() causes assertion in server +*/ + +static void test_mdev3885() +{ + int rc; + MYSQL *conn; + + myheader("test_mdev3885"); + conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); + rc= mysql_kill(conn, mysql_thread_id(conn)); + DIE_UNLESS(rc == 0); + mysql_close(conn); +} + /** Bug#57058 SERVER_QUERY_WAS_SLOW not wired up. @@ -19056,6 +19072,7 @@ static struct my_tests_st my_tests[]= { { "test_bug58036", test_bug58036 }, { "test_bug57058", test_bug57058 }, { "test_bug56976", test_bug56976 }, + { "test_mdev3855", test_mdev3885 }, { "test_bug11766854", test_bug11766854 }, { "test_bug12337762", test_bug12337762 }, { "test_progress_reporting", test_progress_reporting }, From 0497ecc2c8a3ff362fdb2e69c558063c23d2e885 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Tue, 27 Nov 2012 12:34:13 +0100 Subject: [PATCH 55/60] fix regression in sp_notembedded after MDEV-3885 --- sql/sql_parse.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 087c7903dc7..acd4873b212 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -6717,7 +6717,7 @@ void sql_kill(THD *thd, ulong id, killed_state state) uint error; if (!(error= kill_one_thread(thd, id, state))) { - if ((!thd->killed) || (thd->thread_id == id)) + if ((!thd->killed) || (thd->thread_id == id && thd->killed >= KILL_CONNECTION)) my_ok(thd); } else From 5fddd4a7f09c7cb7ae2171f284130b1316aa6235 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Tue, 27 Nov 2012 15:47:08 +0100 Subject: [PATCH 56/60] Fix yet another regression after MDEV-3885. If connection kills itself (or own query), it will get an error consistently, with both COM_PROCESSKILL and with "KILL [QUERY] id" --- sql/sql_parse.cc | 4 +++- tests/mysql_client_test.c | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index acd4873b212..5dac052b749 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -6717,8 +6717,10 @@ void sql_kill(THD *thd, ulong id, killed_state state) uint error; if (!(error= kill_one_thread(thd, id, state))) { - if ((!thd->killed) || (thd->thread_id == id && thd->killed >= KILL_CONNECTION)) + if ((!thd->killed)) my_ok(thd); + else + my_error(killed_errno(thd->killed), MYF(0), id); } else my_error(error, MYF(0), id); diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index 285e5fd0aee..91e7da6ff32 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -18566,7 +18566,7 @@ static void test_mdev3885() myheader("test_mdev3885"); conn= client_connect(0, MYSQL_PROTOCOL_TCP, 0); rc= mysql_kill(conn, mysql_thread_id(conn)); - DIE_UNLESS(rc == 0); + DIE_UNLESS(rc); mysql_close(conn); } From 7c5f62a313d7dd3047ed29f4007c73b53541c482 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 27 Nov 2012 12:26:15 +0100 Subject: [PATCH 57/60] 5.5.28a --- VERSION | 2 +- cmake/mysql_version.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 4ed7f1471fd..70bdfecc0c6 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=5 MYSQL_VERSION_PATCH=28 -MYSQL_VERSION_EXTRA= +MYSQL_VERSION_EXTRA=a diff --git a/cmake/mysql_version.cmake b/cmake/mysql_version.cmake index e6b9d3e7edf..33aa33c9e5b 100644 --- a/cmake/mysql_version.cmake +++ b/cmake/mysql_version.cmake @@ -65,7 +65,7 @@ MACRO(GET_MYSQL_VERSION) MARK_AS_ADVANCED(VERSION MYSQL_VERSION_ID MYSQL_BASE_VERSION) SET(CPACK_PACKAGE_VERSION_MAJOR ${MAJOR_VERSION}) SET(CPACK_PACKAGE_VERSION_MINOR ${MINOR_VERSION}) - SET(CPACK_PACKAGE_VERSION_PATCH ${PATCH_VERSION}) + SET(CPACK_PACKAGE_VERSION_PATCH ${PATCH_VERSION}${EXTRA_VERSION}) ENDMACRO() # Get mysql version and other interesting variables From 77269f589e3d134c67f39fcf0c4bd66131acd2f7 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Sat, 1 Dec 2012 16:33:22 +0100 Subject: [PATCH 58/60] MDEV-3901: Wrong SSL error messages Fixed typo (missing comma) --- vio/viosslfactories.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vio/viosslfactories.c b/vio/viosslfactories.c index 8da9b7dca26..5c4e2e89d10 100644 --- a/vio/viosslfactories.c +++ b/vio/viosslfactories.c @@ -78,7 +78,7 @@ ssl_error_string[] = "No error", "Unable to get certificate", "Unable to get private key", - "Private key does not match the certificate public key" + "Private key does not match the certificate public key", "SSL_CTX_set_default_verify_paths failed", "Failed to set ciphers to use", "SSL_CTX_new failed" From b057f95d421cd0174d36ce77a058936a7046ed13 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Sat, 1 Dec 2012 18:01:59 +0100 Subject: [PATCH 59/60] fix openssl_1 test --- mysql-test/r/openssl_1.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/r/openssl_1.result b/mysql-test/r/openssl_1.result index b86925e0eb8..76b8e887d89 100644 --- a/mysql-test/r/openssl_1.result +++ b/mysql-test/r/openssl_1.result @@ -83,7 +83,7 @@ Ssl_cipher AES128-SHA SHOW STATUS LIKE 'Ssl_cipher'; Variable_name Value Ssl_cipher AES128-SHA -mysqltest: Could not open connection 'default': 2026 SSL connection error: SSL_CTX_new failed +mysqltest: Could not open connection 'default': 2026 SSL connection error: Failed to set ciphers to use CREATE TABLE t1(a int); INSERT INTO t1 VALUES (1), (2); From 5e345281e3599c793fdea771d0f23eb19f22d601 Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Tue, 4 Dec 2012 16:06:07 -0800 Subject: [PATCH 60/60] Fixed bug mdev-3888. When inserting a record with update on duplicate keys the server calls the ha_index_read_idx_map handler function to look for the record that violates unique key constraints. The third parameter of this call should mark only the base components of the index where the server is searched for the record. Possible hidden components of the primary key are to be unmarked. --- mysql-test/r/innodb_ext_key.result | 28 +++++++++++++++++++++ mysql-test/t/innodb_ext_key.test | 39 ++++++++++++++++++++++++++++++ sql/sql_insert.cc | 3 ++- 3 files changed, 69 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/innodb_ext_key.result b/mysql-test/r/innodb_ext_key.result index 0b7b042a0b2..4e441245a39 100644 --- a/mysql-test/r/innodb_ext_key.result +++ b/mysql-test/r/innodb_ext_key.result @@ -744,5 +744,33 @@ SELECT * FROM t1, t2 WHERE b=a; a b set optimizer_switch=@save_optimizer_switch; DROP TABLE t1,t2; +# +# Bug mdev-3888: INSERT with UPDATE on duplicate keys +# with extended_keys=on +# +CREATE TABLE t1 ( +c1 bigint(20) unsigned NOT NULL AUTO_INCREMENT, +c2 bigint(20) unsigned NOT NULL, +c3 bigint(20) unsigned NOT NULL, +c4 varchar(128) DEFAULT NULL, +PRIMARY KEY (c1), +UNIQUE KEY uq (c2,c3), +KEY c3 (c3), +KEY c4 (c4) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; +set @save_optimizer_switch=@@optimizer_switch; +set session optimizer_switch='extended_keys=off'; +INSERT INTO t1 (c2, c3, c4) VALUES (58291525, 2580, 'foobar') +ON DUPLICATE KEY UPDATE c4 = VALUES(c4); +INSERT INTO t1 (c2, c3, c4) VALUES (58291525, 2580, 'foobar') +ON DUPLICATE KEY UPDATE c4 = VALUES(c4); +DELETE FROM t1; +set session optimizer_switch='extended_keys=on'; +INSERT INTO t1 (c2, c3, c4) VALUES (58291525, 2580, 'foobar') +ON DUPLICATE KEY UPDATE c4 = VALUES(c4); +INSERT INTO t1 (c2, c3, c4) VALUES (58291525, 2580, 'foobar') +ON DUPLICATE KEY UPDATE c4 = VALUES(c4); +set optimizer_switch=@save_optimizer_switch; +DROP TABLE t1; set optimizer_switch=@save_ext_key_optimizer_switch; SET SESSION STORAGE_ENGINE=DEFAULT; diff --git a/mysql-test/t/innodb_ext_key.test b/mysql-test/t/innodb_ext_key.test index f5b5df527a3..3e82403ddb5 100644 --- a/mysql-test/t/innodb_ext_key.test +++ b/mysql-test/t/innodb_ext_key.test @@ -428,5 +428,44 @@ set optimizer_switch=@save_optimizer_switch; DROP TABLE t1,t2; + +--echo # +--echo # Bug mdev-3888: INSERT with UPDATE on duplicate keys +--echo # with extended_keys=on +--echo # + +CREATE TABLE t1 ( +c1 bigint(20) unsigned NOT NULL AUTO_INCREMENT, +c2 bigint(20) unsigned NOT NULL, +c3 bigint(20) unsigned NOT NULL, +c4 varchar(128) DEFAULT NULL, +PRIMARY KEY (c1), +UNIQUE KEY uq (c2,c3), +KEY c3 (c3), +KEY c4 (c4) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; + + +set @save_optimizer_switch=@@optimizer_switch; + +set session optimizer_switch='extended_keys=off'; +INSERT INTO t1 (c2, c3, c4) VALUES (58291525, 2580, 'foobar') + ON DUPLICATE KEY UPDATE c4 = VALUES(c4); +INSERT INTO t1 (c2, c3, c4) VALUES (58291525, 2580, 'foobar') + ON DUPLICATE KEY UPDATE c4 = VALUES(c4); + +DELETE FROM t1; + +set session optimizer_switch='extended_keys=on'; +INSERT INTO t1 (c2, c3, c4) VALUES (58291525, 2580, 'foobar') + ON DUPLICATE KEY UPDATE c4 = VALUES(c4); +INSERT INTO t1 (c2, c3, c4) VALUES (58291525, 2580, 'foobar') + ON DUPLICATE KEY UPDATE c4 = VALUES(c4); + +set optimizer_switch=@save_optimizer_switch; + +DROP TABLE t1; + set optimizer_switch=@save_ext_key_optimizer_switch; SET SESSION STORAGE_ENGINE=DEFAULT; + diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 3c3b9f85727..231671d172b 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1677,9 +1677,10 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info) } } key_copy((uchar*) key,table->record[0],table->key_info+key_nr,0); + key_part_map keypart_map= (1 << table->key_info[key_nr].key_parts) - 1; if ((error= (table->file->ha_index_read_idx_map(table->record[1], key_nr, (uchar*) key, - HA_WHOLE_KEY, + keypart_map, HA_READ_KEY_EXACT)))) goto err; }