summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2004-03-17 10:36:12 +0200
committerunknown <monty@mysql.com>2004-03-17 10:36:12 +0200
commit219bbd5232d6ff958f97b30abbc0cb9646abf6a8 (patch)
tree6f4235e7fd4eb101374c74e2c3c02470bb69d2ab
parentb523802138eef0c66d6ce89263b512c1494a277b (diff)
parentb54698374b5eea922a6f054338d804c2ba3aa682 (diff)
downloadmariadb-git-219bbd5232d6ff958f97b30abbc0cb9646abf6a8.tar.gz
merge with 4.0
innobase/btr/btr0cur.c: Auto merged innobase/btr/btr0sea.c: Auto merged innobase/include/log0log.h: Auto merged innobase/include/log0log.ic: Auto merged innobase/log/log0recv.c: Auto merged innobase/page/page0cur.c: Auto merged innobase/que/que0que.c: Auto merged myisam/myisam_ftdump.c: Auto merged mysql-test/r/func_if.result: Auto merged mysql-test/t/func_if.test: Auto merged
-rw-r--r--include/my_tree.h4
-rw-r--r--innobase/btr/btr0cur.c12
-rw-r--r--innobase/btr/btr0sea.c2
-rw-r--r--innobase/cry/makefilewin12
-rw-r--r--innobase/include/btr0cur.h10
-rw-r--r--innobase/include/btr0sea.h2
-rw-r--r--innobase/include/log0log.h4
-rw-r--r--innobase/include/log0log.ic2
-rw-r--r--innobase/include/page0cur.h5
-rw-r--r--innobase/include/que0que.h16
-rw-r--r--innobase/include/que0que.ic18
-rw-r--r--innobase/log/log0log.c54
-rw-r--r--innobase/log/log0recv.c20
-rw-r--r--innobase/page/page0cur.c7
-rw-r--r--innobase/que/que0que.c4
-rw-r--r--myisam/myisam_ftdump.c2
-rw-r--r--mysql-test/r/func_if.result6
-rw-r--r--mysql-test/t/func_if.test6
-rw-r--r--sql/item_cmpfunc.cc6
19 files changed, 110 insertions, 82 deletions
diff --git a/include/my_tree.h b/include/my_tree.h
index 0e705e19bba..0159dc891e5 100644
--- a/include/my_tree.h
+++ b/include/my_tree.h
@@ -22,7 +22,9 @@ extern "C" {
#include "my_base.h" /* get 'enum ha_rkey_function' */
-#define MAX_TREE_HEIGHT 40 /* = max 1048576 leafs in tree */
+/* Worst case tree is half full. This gives use 2^(MAX_TREE_HIGHT/2) leafs */
+#define MAX_TREE_HIGHT 64
+
#define ELEMENT_KEY(tree,element)\
(tree->offset_to_key ? (void*)((byte*) element+tree->offset_to_key) :\
*((void**) (element+1)))
diff --git a/innobase/btr/btr0cur.c b/innobase/btr/btr0cur.c
index af3a61041cb..f6a4a6f38f0 100644
--- a/innobase/btr/btr0cur.c
+++ b/innobase/btr/btr0cur.c
@@ -66,6 +66,16 @@ this many index pages */
#define BTR_BLOB_HDR_SIZE 8
/***********************************************************************
+Marks all extern fields in a record as owned by the record. This function
+should be called if the delete mark of a record is removed: a not delete
+marked record always owns all its extern fields. */
+static
+void
+btr_cur_unmark_extern_fields(
+/*=========================*/
+ rec_t* rec, /* in: record in a clustered index */
+ mtr_t* mtr); /* in: mtr */
+/***********************************************************************
Adds path information to the cursor for the current page, for which
the binary search has been performed. */
static
@@ -2933,7 +2943,7 @@ btr_cur_mark_dtuple_inherited_extern(
Marks all extern fields in a record as owned by the record. This function
should be called if the delete mark of a record is removed: a not delete
marked record always owns all its extern fields. */
-
+static
void
btr_cur_unmark_extern_fields(
/*=========================*/
diff --git a/innobase/btr/btr0sea.c b/innobase/btr/btr0sea.c
index 238f118e260..2093d5ea757 100644
--- a/innobase/btr/btr0sea.c
+++ b/innobase/btr/btr0sea.c
@@ -22,7 +22,9 @@ Created 2/17/1996 Heikki Tuuri
ulint btr_search_this_is_zero = 0; /* A dummy variable to fool the
compiler */
+#ifdef UNIV_SEARCH_PERF_STAT
ulint btr_search_n_succ = 0;
+#endif /* UNIV_SEARCH_PERF_STAT */
ulint btr_search_n_hash_fail = 0;
byte btr_sea_pad1[64]; /* padding to prevent other memory update
diff --git a/innobase/cry/makefilewin b/innobase/cry/makefilewin
deleted file mode 100644
index 9e791b8d073..00000000000
--- a/innobase/cry/makefilewin
+++ /dev/null
@@ -1,12 +0,0 @@
-include ..\include\makefile.i
-
-doall: cr.exe dcr.exe wro.exe
-
-cr.exe: cry0cry.c
- $(CCOM) $(CFLW) -o cr.exe -I.. cry0cry.c ..\ut.lib ..\os.lib
-
-dcr.exe: cry0dcr.c
- $(CCOM) $(CFLW) -o dcr.exe -I.. cry0dcr.c ..\ut.lib ..\os.lib
-
-wro.exe: cry0wro.c
- $(CCOM) $(CFLW) -o wro.exe -I.. cry0wro.c ..\ut.lib ..\os.lib
diff --git a/innobase/include/btr0cur.h b/innobase/include/btr0cur.h
index 221f479df40..f1334656d53 100644
--- a/innobase/include/btr0cur.h
+++ b/innobase/include/btr0cur.h
@@ -435,16 +435,6 @@ btr_cur_mark_dtuple_inherited_extern(
ulint n_ext_vec, /* in: number of elements in ext_vec */
upd_t* update); /* in: update vector */
/***********************************************************************
-Marks all extern fields in a record as owned by the record. This function
-should be called if the delete mark of a record is removed: a not delete
-marked record always owns all its extern fields. */
-
-void
-btr_cur_unmark_extern_fields(
-/*=========================*/
- rec_t* rec, /* in: record in a clustered index */
- mtr_t* mtr); /* in: mtr */
-/***********************************************************************
Marks all extern fields in a dtuple as owned by the record. */
void
diff --git a/innobase/include/btr0sea.h b/innobase/include/btr0sea.h
index 68396d47193..ce4140ecf92 100644
--- a/innobase/include/btr0sea.h
+++ b/innobase/include/btr0sea.h
@@ -214,7 +214,9 @@ extern rw_lock_t* btr_search_latch_temp;
#define btr_search_latch (*btr_search_latch_temp)
+#ifdef UNIV_SEARCH_PERF_STAT
extern ulint btr_search_n_succ;
+#endif /* UNIV_SEARCH_PERF_STAT */
extern ulint btr_search_n_hash_fail;
/* After change in n_fields or n_bytes in info, this many rounds are waited
diff --git a/innobase/include/log0log.h b/innobase/include/log0log.h
index dc44429d636..2bdc158502f 100644
--- a/innobase/include/log0log.h
+++ b/innobase/include/log0log.h
@@ -18,7 +18,9 @@ typedef struct log_struct log_t;
typedef struct log_group_struct log_group_t;
extern ibool log_do_write;
+#ifdef UNIV_LOG_DEBUG
extern ibool log_debug_writes;
+#endif /* UNIV_LOG_DEBUG */
/* Wait modes for log_write_up_to */
#define LOG_NO_WAIT 91
@@ -719,11 +721,13 @@ struct log_struct{
ulint max_buf_free; /* recommended maximum value of
buf_free, after which the buffer is
flushed */
+#ifdef UNIV_LOG_DEBUG
ulint old_buf_free; /* value of buf free when log was
last time opened; only in the debug
version */
dulint old_lsn; /* value of lsn when log was last time
opened; only in the debug version */
+#endif /* UNIV_LOG_DEBUG */
ibool check_flush_or_checkpoint;
/* this is set to TRUE when there may
be need to flush the log buffer, or
diff --git a/innobase/include/log0log.ic b/innobase/include/log0log.ic
index 16423286f6d..e273b6a292b 100644
--- a/innobase/include/log0log.ic
+++ b/innobase/include/log0log.ic
@@ -10,6 +10,7 @@ Created 12/9/1995 Heikki Tuuri
#include "mach0data.h"
#include "mtr0mtr.h"
+#ifdef UNIV_LOG_DEBUG
/**********************************************************
Checks by parsing that the catenated log segment for a single mtr is
consistent. */
@@ -21,6 +22,7 @@ log_check_log_recs(
in the log_sys->buf log buffer */
ulint len, /* in: segment length in bytes */
dulint buf_start_lsn); /* in: buffer start lsn */
+#endif /* UNIV_LOG_DEBUG */
/****************************************************************
Gets a log block flush bit. */
diff --git a/innobase/include/page0cur.h b/innobase/include/page0cur.h
index c3f0decdb4b..c85669ed4df 100644
--- a/innobase/include/page0cur.h
+++ b/innobase/include/page0cur.h
@@ -32,8 +32,11 @@ Created 10/4/1994 Heikki Tuuri
which extend it */
#define PAGE_CUR_DBG 6
-
+#ifdef PAGE_CUR_ADAPT
+# ifdef UNIV_SEARCH_PERF_STAT
extern ulint page_cur_short_succ;
+# endif /* UNIV_SEARCH_PERF_STAT */
+#endif /* PAGE_CUR_ADAPT */
/*************************************************************
Gets pointer to the page frame where the cursor is positioned. */
diff --git a/innobase/include/que0que.h b/innobase/include/que0que.h
index e1874edcaf2..bcd7aed7e88 100644
--- a/innobase/include/que0que.h
+++ b/innobase/include/que0que.h
@@ -307,22 +307,6 @@ que_thr_peek_stop(
mutex reserved is necessary before deciding
the actual stopping */
que_thr_t* thr); /* in: query thread */
-/***************************************************************************
-Returns TRUE if the query graph is for a SELECT statement. */
-UNIV_INLINE
-ibool
-que_graph_is_select(
-/*================*/
- /* out: TRUE if a select */
- que_t* graph); /* in: graph */
-/**************************************************************************
-Prints info of an SQL query graph node. */
-
-void
-que_node_print_info(
-/*================*/
- que_node_t* node); /* in: query graph node */
-
/* Query graph query thread node: the fields are protected by the kernel
mutex with the exceptions named below */
diff --git a/innobase/include/que0que.ic b/innobase/include/que0que.ic
index ae4ed10560f..a63922f8c80 100644
--- a/innobase/include/que0que.ic
+++ b/innobase/include/que0que.ic
@@ -238,21 +238,3 @@ que_thr_peek_stop(
return(FALSE);
}
-
-/***************************************************************************
-Returns TRUE if the query graph is for a SELECT statement. */
-UNIV_INLINE
-ibool
-que_graph_is_select(
-/*================*/
- /* out: TRUE if a select */
- que_t* graph) /* in: graph */
-{
- if (graph->fork_type == QUE_FORK_SELECT_SCROLL
- || graph->fork_type == QUE_FORK_SELECT_NON_SCROLL) {
-
- return(TRUE);
- }
-
- return(FALSE);
-}
diff --git a/innobase/log/log0log.c b/innobase/log/log0log.c
index cd6e6e803a7..e99ea269920 100644
--- a/innobase/log/log0log.c
+++ b/innobase/log/log0log.c
@@ -32,7 +32,9 @@ ulint log_fsp_current_free_limit = 0;
log_t* log_sys = NULL;
ibool log_do_write = TRUE;
+#ifdef UNIV_LOG_DEBUG
ibool log_debug_writes = FALSE;
+#endif /* UNIV_LOG_DEBUG */
/* These control how often we print warnings if the last checkpoint is too
old */
@@ -86,9 +88,8 @@ the previous */
Completes a checkpoint write i/o to a log file. */
static
void
-log_io_complete_checkpoint(
-/*=======================*/
- log_group_t* group); /* in: log group */
+log_io_complete_checkpoint(void);
+/*============================*/
/**********************************************************
Completes an archiving i/o. */
static
@@ -928,11 +929,12 @@ log_group_check_flush_completion(
#endif /* UNIV_SYNC_DEBUG */
if (!log_sys->one_flushed && group->n_pending_writes == 0) {
-
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
printf("Log flushed first to group %lu\n",
(ulong) group->id);
}
+#endif /* UNIV_LOG_DEBUG */
log_sys->written_to_some_lsn = log_sys->write_lsn;
log_sys->one_flushed = TRUE;
@@ -940,10 +942,12 @@ log_group_check_flush_completion(
return(LOG_UNLOCK_NONE_FLUSHED_LOCK);
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes && (group->n_pending_writes == 0)) {
printf("Log flushed to group %lu\n", (ulong) group->id);
}
+#endif /* UNIV_LOG_DEBUG */
return(0);
}
@@ -1019,7 +1023,15 @@ log_io_complete(
fil_flush(group->space_id);
}
- log_io_complete_checkpoint(group);
+#ifdef UNIV_LOG_DEBUG
+ if (log_debug_writes) {
+ fprintf(stderr,
+ "Checkpoint info written to group %lu\n",
+ group->id);
+ }
+#endif /* UNIV_LOG_DEBUG */
+
+ log_io_complete_checkpoint();
return;
}
@@ -1084,11 +1096,13 @@ log_group_file_header_flush(
dest_offset = nth_file * group->file_size;
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
printf(
"Writing log file header to group %lu file %lu\n",
(ulong) group->id, (ulong) nth_file);
}
+#endif /* UNIV_LOG_DEBUG */
if (log_do_write) {
log_sys->n_log_ios++;
@@ -1173,6 +1187,7 @@ loop:
write_len = len;
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
printf(
@@ -1197,6 +1212,7 @@ loop:
+ i * OS_FILE_LOG_BLOCK_SIZE));
}
}
+#endif /* UNIV_LOG_DEBUG */
/* Calculate the checksums for each log block and write them to
the trailer fields of the log blocks */
@@ -1324,6 +1340,7 @@ loop:
return;
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
printf("Writing log from %lu %lu up to lsn %lu %lu\n",
(ulong) ut_dulint_get_high(log_sys->written_to_all_lsn),
@@ -1331,6 +1348,7 @@ loop:
(ulong) ut_dulint_get_high(log_sys->lsn),
(ulong) ut_dulint_get_low(log_sys->lsn));
}
+#endif /* UNIV_LOG_DEBUG */
log_sys->n_pending_writes++;
@@ -1556,9 +1574,8 @@ log_complete_checkpoint(void)
Completes an asynchronous checkpoint info write i/o to a log file. */
static
void
-log_io_complete_checkpoint(
-/*=======================*/
- log_group_t* group) /* in: log group */
+log_io_complete_checkpoint(void)
+/*============================*/
{
mutex_enter(&(log_sys->mutex));
@@ -1566,11 +1583,6 @@ log_io_complete_checkpoint(
log_sys->n_pending_checkpoint_writes--;
- if (log_debug_writes) {
- printf("Checkpoint info written to group %lu\n",
- (ulong) group->id);
- }
-
if (log_sys->n_pending_checkpoint_writes == 0) {
log_complete_checkpoint();
}
@@ -1895,12 +1907,14 @@ log_checkpoint(
log_sys->next_checkpoint_lsn = oldest_lsn;
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
printf("Making checkpoint no %lu at lsn %lu %lu\n",
(ulong) ut_dulint_get_low(log_sys->next_checkpoint_no),
(ulong) ut_dulint_get_high(oldest_lsn),
(ulong) ut_dulint_get_low(oldest_lsn));
}
+#endif /* UNIV_LOG_DEBUG */
log_groups_write_checkpoint_info();
@@ -2287,9 +2301,11 @@ loop:
exit(1);
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
printf("Created archive file %s\n", name);
}
+#endif /* UNIV_LOG_DEBUG */
ret = os_file_close(file_handle);
@@ -2316,6 +2332,7 @@ loop:
len = group->file_size - (next_offset % group->file_size);
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
printf(
"Archiving starting at lsn %lu %lu, len %lu to group %lu\n",
@@ -2323,6 +2340,7 @@ loop:
(ulong) ut_dulint_get_low(start_lsn),
(ulong) len, (ulong) group->id);
}
+#endif /* UNIV_LOG_DEBUG */
log_sys->n_pending_archive_ios++;
@@ -2417,10 +2435,12 @@ log_archive_write_complete_groups(void)
trunc_files = n_files - 1;
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes && trunc_files) {
printf("Complete file(s) archived to group %lu\n",
(ulong) group->id);
}
+#endif /* UNIV_LOG_DEBUG */
/* Calculate the archive file space start lsn */
start_lsn = ut_dulint_subtract(log_sys->next_archived_lsn,
@@ -2443,9 +2463,11 @@ log_archive_write_complete_groups(void)
fil_space_truncate_start(group->archive_space_id,
trunc_files * group->file_size);
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
printf("Archiving writes completed\n");
}
+#endif /* UNIV_LOG_DEBUG */
}
/**********************************************************
@@ -2464,9 +2486,11 @@ log_archive_check_completion_low(void)
if (log_sys->n_pending_archive_ios == 0
&& log_sys->archiving_phase == LOG_ARCHIVE_READ) {
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
printf("Archiving read completed\n");
}
+#endif /* UNIV_LOG_DEBUG */
/* Archive buffer has now been read in: start archive writes */
@@ -2729,12 +2753,14 @@ log_archive_close_groups(
group->archived_file_no += 2;
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
printf(
"Incrementing arch file no to %lu in log group %lu\n",
(ulong) group->archived_file_no + 2,
(ulong) group->id);
}
+#endif /* UNIV_LOG_DEBUG */
}
}
@@ -3204,6 +3230,7 @@ loop:
ut_a(0 == ut_dulint_cmp(lsn, log_sys->lsn));
}
+#ifdef UNIV_LOG_DEBUG
/**********************************************************
Checks by parsing that the catenated log segment for a single mtr is
consistent. */
@@ -3256,6 +3283,7 @@ log_check_log_recs(
return(TRUE);
}
+#endif /* UNIV_LOG_DEBUG */
/**********************************************************
Peeks the current lsn. */
diff --git a/innobase/log/log0recv.c b/innobase/log/log0recv.c
index f80181cc207..432a6ed1e85 100644
--- a/innobase/log/log0recv.c
+++ b/innobase/log/log0recv.c
@@ -487,6 +487,7 @@ recv_find_max_checkpoint(
log_group_read_checkpoint_info(group, field);
if (!recv_check_cp_is_consistent(buf)) {
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
fprintf(stderr,
"InnoDB: Checkpoint in group %lu at %lu invalid, %lu\n",
@@ -496,6 +497,7 @@ recv_find_max_checkpoint(
+ LOG_CHECKPOINT_CHECKSUM_1));
}
+#endif /* UNIV_LOG_DEBUG */
goto not_consistent;
}
@@ -509,12 +511,14 @@ recv_find_max_checkpoint(
checkpoint_no =
mach_read_from_8(buf + LOG_CHECKPOINT_NO);
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
fprintf(stderr,
"InnoDB: Checkpoint number %lu found in group %lu\n",
(ulong) ut_dulint_get_low(checkpoint_no),
(ulong) group->id);
}
+#endif /* UNIV_LOG_DEBUG */
if (ut_dulint_cmp(checkpoint_no, max_no) >= 0) {
*max_group = group;
@@ -1147,6 +1151,7 @@ recv_recover_page(
start_lsn = recv->start_lsn;
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
fprintf(stderr,
"InnoDB: Applying log rec type %lu len %lu to space %lu page no %lu\n",
@@ -1154,7 +1159,8 @@ recv_recover_page(
(ulong) recv_addr->space,
(ulong) recv_addr->page_no);
}
-
+#endif /* UNIV_LOG_DEBUG */
+
recv_parse_or_apply_log_rec_body(recv->type, buf,
buf + recv->len, page, &mtr);
mach_write_to_8(page + UNIV_PAGE_SIZE
@@ -1984,12 +1990,14 @@ loop:
recv_sys->recovered_offset += len;
recv_sys->recovered_lsn = new_recovered_lsn;
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
fprintf(stderr,
"InnoDB: Parsed a single log rec type %lu len %lu space %lu page no %lu\n",
(ulong) type, (ulong) len, (ulong) space,
(ulong) page_no);
}
+#endif /* UNIV_LOG_DEBUG */
if (type == MLOG_DUMMY_RECORD) {
/* Do nothing */
@@ -2071,13 +2079,15 @@ loop:
*/
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
fprintf(stderr,
"InnoDB: Parsed a multi log rec type %lu len %lu space %lu page no %lu\n",
(ulong) type, (ulong) len, (ulong) space,
(ulong) page_no);
}
-
+#endif /* UNIV_LOG_DEBUG */
+
total_len += len;
n_recs++;
@@ -2482,6 +2492,7 @@ recv_group_scan_log_recs(
start_lsn = end_lsn;
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
fprintf(stderr,
"InnoDB: Scanned group %lu up to log sequence number %lu %lu\n",
@@ -2489,6 +2500,7 @@ recv_group_scan_log_recs(
(ulong) ut_dulint_get_high(*group_scanned_lsn),
(ulong) ut_dulint_get_low(*group_scanned_lsn));
}
+#endif /* UNIV_LOG_DEBUG */
}
/************************************************************
@@ -2869,10 +2881,12 @@ recv_recovery_from_checkpoint_finish(void)
recv_apply_hashed_log_recs(TRUE);
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
fprintf(stderr,
"InnoDB: Log records applied to the database\n");
}
+#endif /* UNIV_LOG_DEBUG */
if (recv_needed_recovery) {
trx_sys_print_mysql_master_log_pos();
@@ -3184,6 +3198,7 @@ ask_again:
break;
}
+#ifdef UNIV_LOG_DEBUG
if (log_debug_writes) {
fprintf(stderr,
"InnoDB: Archive read starting at lsn %lu %lu, len %lu from file %s\n",
@@ -3191,6 +3206,7 @@ ask_again:
(ulong) ut_dulint_get_low(start_lsn),
(ulong) len, name);
}
+#endif /* UNIV_LOG_DEBUG */
fil_io(OS_FILE_READ | OS_FILE_LOG, TRUE,
group->archive_space_id, read_offset / UNIV_PAGE_SIZE,
diff --git a/innobase/page/page0cur.c b/innobase/page/page0cur.c
index eb2ba5b8bf8..5d26d12bf20 100644
--- a/innobase/page/page0cur.c
+++ b/innobase/page/page0cur.c
@@ -16,11 +16,12 @@ Created 10/4/1994 Heikki Tuuri
#include "log0recv.h"
#include "rem0cmp.h"
-ulint page_cur_short_succ = 0;
-
-ulint page_rnd = 976722341;
+static ulint page_rnd = 976722341;
#ifdef PAGE_CUR_ADAPT
+# ifdef UNIV_SEARCH_PERF_STAT
+ulint page_cur_short_succ = 0;
+# endif /* UNIV_SEARCH_PERF_STAT */
/********************************************************************
Tries a search shortcut based on the last insert. */
diff --git a/innobase/que/que0que.c b/innobase/que/que0que.c
index d31b4e6813c..77495246bb0 100644
--- a/innobase/que/que0que.c
+++ b/innobase/que/que0que.c
@@ -1036,9 +1036,10 @@ que_thr_stop_for_mysql_no_error(
trx->n_active_thrs--;
}
+#ifdef UNIV_DEBUG
/**************************************************************************
Prints info of an SQL query graph node. */
-
+static
void
que_node_print_info(
/*================*/
@@ -1095,6 +1096,7 @@ que_node_print_info(
fprintf(stderr, "Node type %lu: %s, address %p\n", (ulong) type, str, node);
}
+#endif /* UNIV_DEBUG */
/**************************************************************************
Performs an execution step on a query thread. */
diff --git a/myisam/myisam_ftdump.c b/myisam/myisam_ftdump.c
index 015604aa1ad..7d1b20eb854 100644
--- a/myisam/myisam_ftdump.c
+++ b/myisam/myisam_ftdump.c
@@ -267,7 +267,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
static void usage()
{
- printf("Use: ft_dump <table_name> <index_no>\n");
+ printf("Use: myisam_ftdump <table_name> <index_num>\n");
my_print_help(my_long_options);
my_print_variables(my_long_options);
exit(1);
diff --git a/mysql-test/r/func_if.result b/mysql-test/r/func_if.result
index bea16c07f86..0a04585d77d 100644
--- a/mysql-test/r/func_if.result
+++ b/mysql-test/r/func_if.result
@@ -59,6 +59,12 @@ id select_type table type possible_keys key key_len ref rows Extra
Warnings:
Note 1003 select high_priority nullif((test.t1.u = 0),_latin1'test') AS `nullif(u=0, 'test')` from test.t1
drop table t1;
+select NULLIF(NULL,NULL), NULLIF(NULL,1), NULLIF(NULL,1.0), NULLIF(NULL,"test");
+NULLIF(NULL,NULL) NULLIF(NULL,1) NULLIF(NULL,1.0) NULLIF(NULL,"test")
+NULL NULL NULL NULL
+select NULLIF(1,NULL), NULLIF(1.0, NULL), NULLIF("test", NULL);
+NULLIF(1,NULL) NULLIF(1.0, NULL) NULLIF("test", NULL)
+1 1.0 test
create table t1 (num double(12,2));
insert into t1 values (144.54);
select sum(if(num is null,0.00,num)) from t1;
diff --git a/mysql-test/t/func_if.test b/mysql-test/t/func_if.test
index e44a7f6d6f9..36c3a38d2fe 100644
--- a/mysql-test/t/func_if.test
+++ b/mysql-test/t/func_if.test
@@ -30,6 +30,12 @@ explain extended select nullif(u=0, 'test') from t1;
drop table t1;
#
+# Bug 2629
+#
+select NULLIF(NULL,NULL), NULLIF(NULL,1), NULLIF(NULL,1.0), NULLIF(NULL,"test");
+select NULLIF(1,NULL), NULLIF(1.0, NULL), NULLIF("test", NULL);
+
+#
# Problem with IF()
#
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index f0bc73e9501..122cc93bc3c 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -977,7 +977,7 @@ double
Item_func_nullif::val()
{
double value;
- if (!cmp.compare() || null_value)
+ if (!cmp.compare())
{
null_value=1;
return 0.0;
@@ -991,7 +991,7 @@ longlong
Item_func_nullif::val_int()
{
longlong value;
- if (!cmp.compare() || null_value)
+ if (!cmp.compare())
{
null_value=1;
return 0;
@@ -1005,7 +1005,7 @@ String *
Item_func_nullif::val_str(String *str)
{
String *res;
- if (!cmp.compare() || null_value)
+ if (!cmp.compare())
{
null_value=1;
return 0;