mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
merge from 5.5 to local tree.
This commit is contained in:
commit
c4f98591eb
20 changed files with 144 additions and 49 deletions
2
VERSION
2
VERSION
|
@ -1,4 +1,4 @@
|
|||
MYSQL_VERSION_MAJOR=5
|
||||
MYSQL_VERSION_MINOR=5
|
||||
MYSQL_VERSION_PATCH=18
|
||||
MYSQL_VERSION_PATCH=19
|
||||
MYSQL_VERSION_EXTRA=
|
||||
|
|
|
@ -156,6 +156,7 @@ ${CURSES_INCLUDE_PATH}
|
|||
|
||||
SET(LIBEDIT_SOURCES
|
||||
chared.c
|
||||
chartype.c
|
||||
el.c
|
||||
eln.c
|
||||
history.c
|
||||
|
|
|
@ -42,7 +42,7 @@ then merge remaining bits by hand. All MySQL-specific changes should be
|
|||
marked with XXXMYSQL to make them easier to identify and merge. To generate
|
||||
a 'clean' diff against upstream you can use the above commands but use
|
||||
|
||||
cvs co -D "2011/10/04 15:27:04" [..]
|
||||
cvs co -D "2011/10/23 17:37:55" [..]
|
||||
|
||||
to fetch the baseline of most recent merge.
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: chared.c,v 1.35 2011/08/16 16:25:15 christos Exp $ */
|
||||
/* $NetBSD: chared.c,v 1.36 2011/10/23 17:37:55 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
|
@ -200,7 +200,7 @@ c_delbefore1(EditLine *el)
|
|||
protected int
|
||||
ce__isword(Int p)
|
||||
{
|
||||
return Isalnum(p || Strchr(STR("*?_-.[]~="), p) != NULL);
|
||||
return Isalnum(p) || Strchr(STR("*?_-.[]~="), p) != NULL;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -258,9 +258,6 @@ out:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef WIDECHAR
|
||||
int wcwidth(wchar_t wc); // Signature.
|
||||
#endif
|
||||
|
||||
protected int
|
||||
ct_visual_width(Char c)
|
||||
|
|
|
@ -247,15 +247,6 @@ int tok_str(Tokenizer *, const char *,
|
|||
/*
|
||||
* Begin Wide Character Support
|
||||
*/
|
||||
#ifdef __linux__
|
||||
/* Apparently we need _GNU_SOURCE defined to get access to wcsdup on Linux */
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <wchar.h>
|
||||
#include <wctype.h>
|
||||
|
||||
/*
|
||||
* Wide character versions
|
||||
|
|
|
@ -40,8 +40,6 @@ static char sccsid[] = "@(#)refresh.c 8.1 (Berkeley) 6/4/93";
|
|||
#endif
|
||||
#endif /* not lint && not SCCSID */
|
||||
|
||||
#include "chartype.c" /* XXXMYSQL */
|
||||
|
||||
/*
|
||||
* refresh.c: Lower level screen refreshing functions
|
||||
*/
|
||||
|
|
|
@ -92,8 +92,21 @@ size_t strlcpy(char *dst, const char *src, size_t size);
|
|||
char *fgetln(FILE *fp, size_t *len);
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_WCSDUP
|
||||
#ifdef __linux__
|
||||
/* Apparently we need _GNU_SOURCE defined to get access to wcsdup on Linux */
|
||||
#ifndef _GNU_SOURCE
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __USE_XOPEN
|
||||
#define __USE_XOPEN
|
||||
#endif
|
||||
|
||||
#include <wchar.h>
|
||||
#include <wctype.h>
|
||||
|
||||
#ifndef HAVE_WCSDUP
|
||||
wchar_t *wcsdup(const wchar_t *);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -636,9 +636,6 @@ mc_again:
|
|||
el->el_cursor.h = where; /* now where is here */
|
||||
}
|
||||
|
||||
#ifdef WIDECHAR
|
||||
int wcwidth(wchar_t); // Signature.
|
||||
#endif
|
||||
|
||||
/* terminal_overwrite():
|
||||
* Overstrike num characters
|
||||
|
|
|
@ -12823,3 +12823,22 @@ a b c d e f
|
|||
-1 b c d e 1
|
||||
DROP TABLE t1;
|
||||
SET sort_buffer_size=DEFAULT;
|
||||
#
|
||||
# BUG#11758979 - 51252: ARCHIVE TABLES STILL FAIL UNDER STRESS
|
||||
# TESTS: CRASH, CORRUPTION, 4G MEMOR
|
||||
# (to be executed with valgrind)
|
||||
CREATE TABLE t1(a BLOB, b VARCHAR(200)) ENGINE=ARCHIVE;
|
||||
INSERT INTO t1 VALUES(NULL, '');
|
||||
FLUSH TABLE t1;
|
||||
# we need this select to workaround BUG#11764364
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
NULL
|
||||
CHECKSUM TABLE t1 EXTENDED;
|
||||
Table Checksum
|
||||
test.t1 286155052
|
||||
FLUSH TABLE t1;
|
||||
OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -2414,6 +2414,30 @@ CARDINALITY
|
|||
DROP TABLE t1;
|
||||
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
||||
SET myisam_repair_threads=@@global.myisam_repair_threads;
|
||||
#
|
||||
# BUG#11757032 - 49030: OPTIMIZE TABLE BREAKS MYISAM TABLE WHEN
|
||||
# USING MYISAM_USE_MMAP ON WINDOWS
|
||||
#
|
||||
SET GLOBAL myisam_use_mmap=1;
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 VALUES(1),(2);
|
||||
DELETE FROM t1 WHERE a=1;
|
||||
FLUSH TABLE t1;
|
||||
LOCK TABLE t1 WRITE;
|
||||
OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
INSERT INTO t1 VALUES(3);
|
||||
UNLOCK TABLES;
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
2
|
||||
3
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL myisam_use_mmap=default;
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Bug#51327 MyISAM table is automatically repaired on ALTER
|
||||
|
|
|
@ -1745,3 +1745,18 @@ INSERT INTO t1 SELECT t1.* FROM t1,t1 t2,t1 t3,t1 t4,t1 t5,t1 t6;
|
|||
SELECT * FROM t1 ORDER BY f LIMIT 1;
|
||||
DROP TABLE t1;
|
||||
SET sort_buffer_size=DEFAULT;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # BUG#11758979 - 51252: ARCHIVE TABLES STILL FAIL UNDER STRESS
|
||||
--echo # TESTS: CRASH, CORRUPTION, 4G MEMOR
|
||||
--echo # (to be executed with valgrind)
|
||||
CREATE TABLE t1(a BLOB, b VARCHAR(200)) ENGINE=ARCHIVE;
|
||||
INSERT INTO t1 VALUES(NULL, '');
|
||||
FLUSH TABLE t1;
|
||||
--echo # we need this select to workaround BUG#11764364
|
||||
SELECT * FROM t1;
|
||||
CHECKSUM TABLE t1 EXTENDED;
|
||||
FLUSH TABLE t1;
|
||||
OPTIMIZE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -1647,6 +1647,24 @@ DROP TABLE t1;
|
|||
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
||||
SET myisam_repair_threads=@@global.myisam_repair_threads;
|
||||
|
||||
--echo #
|
||||
--echo # BUG#11757032 - 49030: OPTIMIZE TABLE BREAKS MYISAM TABLE WHEN
|
||||
--echo # USING MYISAM_USE_MMAP ON WINDOWS
|
||||
--echo #
|
||||
SET GLOBAL myisam_use_mmap=1;
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 VALUES(1),(2);
|
||||
DELETE FROM t1 WHERE a=1;
|
||||
FLUSH TABLE t1;
|
||||
LOCK TABLE t1 WRITE;
|
||||
OPTIMIZE TABLE t1;
|
||||
INSERT INTO t1 VALUES(3);
|
||||
UNLOCK TABLES;
|
||||
SELECT * FROM t1;
|
||||
CHECK TABLE t1;
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL myisam_use_mmap=default;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
|
||||
|
|
|
@ -4810,10 +4810,11 @@ bool open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags,
|
|||
}
|
||||
|
||||
/*
|
||||
temporary mem_root for new .frm parsing.
|
||||
TODO: variables for size
|
||||
Initialize temporary MEM_ROOT for new .FRM parsing. Do not allocate
|
||||
anything yet, to avoid penalty for statements which don't use views
|
||||
and thus new .FRM format.
|
||||
*/
|
||||
init_sql_alloc(&new_frm_mem, 8024, 8024);
|
||||
init_sql_alloc(&new_frm_mem, 8024, 0);
|
||||
|
||||
thd->current_tablenr= 0;
|
||||
restart:
|
||||
|
|
|
@ -819,6 +819,7 @@ uint32 ha_archive::max_row_length(const uchar *buf)
|
|||
ptr != end ;
|
||||
ptr++)
|
||||
{
|
||||
if (!table->field[*ptr]->is_null())
|
||||
length += 2 + ((Field_blob*)table->field[*ptr])->get_length();
|
||||
}
|
||||
|
||||
|
@ -1178,6 +1179,17 @@ int ha_archive::unpack_row(azio_stream *file_to_read, uchar *record)
|
|||
|
||||
/* Copy null bits */
|
||||
const uchar *ptr= record_buffer->buffer;
|
||||
/*
|
||||
Field::unpack() is not called when field is NULL. For VARCHAR
|
||||
Field::unpack() only unpacks as much bytes as occupied by field
|
||||
value. In these cases respective memory area on record buffer is
|
||||
not initialized.
|
||||
|
||||
These uninitialized areas may be accessed by CHECKSUM TABLE or
|
||||
by optimizer using temporary table (BUG#12997905). We may remove
|
||||
this memset() when they're fixed.
|
||||
*/
|
||||
memset(record, 0, table->s->reclength);
|
||||
memcpy(record, ptr, table->s->null_bytes);
|
||||
ptr+= table->s->null_bytes;
|
||||
for (Field **field=table->field ; *field ; field++)
|
||||
|
|
|
@ -3542,16 +3542,11 @@ btr_record_not_null_field_in_rec(
|
|||
}
|
||||
|
||||
for (i = 0; i < n_unique; i++) {
|
||||
ulint rec_len;
|
||||
|
||||
rec_get_nth_field_offs(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]++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3694,8 +3689,7 @@ btr_estimate_number_of_different_key_vals(
|
|||
|
||||
if (n_not_null) {
|
||||
btr_record_not_null_field_in_rec(
|
||||
n_cols, offsets_next_rec,
|
||||
n_not_null);
|
||||
n_cols, offsets_next_rec, n_not_null);
|
||||
}
|
||||
|
||||
total_external_size
|
||||
|
|
|
@ -5806,13 +5806,13 @@ ha_innobase::innobase_get_index(
|
|||
table. Only print message if the index translation
|
||||
table exists */
|
||||
if (share->idx_trans_tbl.index_mapping) {
|
||||
sql_print_error("InnoDB could not find "
|
||||
"index %s key no %u for "
|
||||
"table %s through its "
|
||||
"index translation table",
|
||||
key ? key->name : "NULL",
|
||||
keynr,
|
||||
prebuilt->table->name);
|
||||
sql_print_warning("InnoDB could not find "
|
||||
"index %s key no %u for "
|
||||
"table %s through its "
|
||||
"index translation table",
|
||||
key ? key->name : "NULL",
|
||||
keynr,
|
||||
prebuilt->table->name);
|
||||
}
|
||||
|
||||
index = dict_table_get_index_on_name(prebuilt->table,
|
||||
|
@ -8285,7 +8285,10 @@ ha_innobase::check(
|
|||
putc('\n', stderr);
|
||||
#endif
|
||||
|
||||
if (!btr_validate_index(index, prebuilt->trx)) {
|
||||
/* If this is an index being created, break */
|
||||
if (*index->name == TEMP_INDEX_PREFIX) {
|
||||
break;
|
||||
} else if (!btr_validate_index(index, prebuilt->trx)) {
|
||||
is_ok = FALSE;
|
||||
|
||||
innobase_format_name(
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 2000, 2010, Innobase Oy. All Rights Reserved.
|
||||
Copyright (c) 2000, 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
|
||||
|
@ -3995,6 +3995,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;
|
||||
}
|
||||
|
||||
|
|
|
@ -1026,6 +1026,18 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool do_optimize)
|
|||
mi_get_mask_all_keys_active(share->base.keys) :
|
||||
share->state.key_map);
|
||||
uint testflag=param.testflag;
|
||||
#ifdef HAVE_MMAP
|
||||
bool remap= test(share->file_map);
|
||||
/*
|
||||
mi_repair*() functions family use file I/O even if memory
|
||||
mapping is available.
|
||||
|
||||
Since mixing mmap I/O and file I/O may cause various artifacts,
|
||||
memory mapping must be disabled.
|
||||
*/
|
||||
if (remap)
|
||||
mi_munmap_file(file);
|
||||
#endif
|
||||
if (mi_test_if_sort_rep(file,file->state->records,key_map,0) &&
|
||||
(local_testflag & T_REP_BY_SORT))
|
||||
{
|
||||
|
@ -1057,6 +1069,10 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool do_optimize)
|
|||
error= mi_repair(¶m, file, fixed_name,
|
||||
param.testflag & T_QUICK);
|
||||
}
|
||||
#ifdef HAVE_MMAP
|
||||
if (remap)
|
||||
mi_dynmap_file(file, file->state->data_file_length);
|
||||
#endif
|
||||
param.testflag=testflag;
|
||||
optimize_done=1;
|
||||
}
|
||||
|
|
|
@ -61,11 +61,6 @@ int mi_delete_all_rows(MI_INFO *info)
|
|||
mysql_file_chsize(share->kfile, share->base.keystart, 0, MYF(MY_WME)))
|
||||
goto err;
|
||||
(void) _mi_writeinfo(info,WRITEINFO_UPDATE_KEYFILE);
|
||||
#ifdef HAVE_MMAP
|
||||
/* Map again */
|
||||
if (share->file_map)
|
||||
mi_dynmap_file(info, (my_off_t) 0);
|
||||
#endif
|
||||
DBUG_RETURN(0);
|
||||
|
||||
err:
|
||||
|
|
Loading…
Reference in a new issue