mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/usr/home/ram/work/mysql-4.1-maint
This commit is contained in:
commit
43194fad43
8 changed files with 88 additions and 22 deletions
|
@ -2629,7 +2629,7 @@ com_connect(String *buffer, char *line)
|
|||
bzero(buff, sizeof(buff));
|
||||
if (buffer)
|
||||
{
|
||||
strmov(buff, line);
|
||||
strmake(buff, line, sizeof(buff) - 1);
|
||||
tmp= get_arg(buff, 0);
|
||||
if (tmp && *tmp)
|
||||
{
|
||||
|
@ -2743,7 +2743,7 @@ com_use(String *buffer __attribute__((unused)), char *line)
|
|||
char *tmp, buff[FN_REFLEN + 1];
|
||||
|
||||
bzero(buff, sizeof(buff));
|
||||
strmov(buff, line);
|
||||
strmake(buff, line, sizeof(buff) - 1);
|
||||
tmp= get_arg(buff, 0);
|
||||
if (!tmp || !*tmp)
|
||||
{
|
||||
|
|
|
@ -694,6 +694,18 @@ t1 CREATE TABLE `t1` (
|
|||
`from_unixtime(1) + 0` double(23,6) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
SET NAMES latin1;
|
||||
SET character_set_results = NULL;
|
||||
SHOW VARIABLES LIKE 'character_set_results';
|
||||
Variable_name Value
|
||||
character_set_results
|
||||
CREATE TABLE testBug8868 (field1 DATE, field2 VARCHAR(32) CHARACTER SET BINARY);
|
||||
INSERT INTO testBug8868 VALUES ('2006-09-04', 'abcd');
|
||||
SELECT DATE_FORMAT(field1,'%b-%e %l:%i%p') as fmtddate, field2 FROM testBug8868;
|
||||
fmtddate field2
|
||||
Sep-4 12:00AM abcd
|
||||
DROP TABLE testBug8868;
|
||||
SET NAMES DEFAULT;
|
||||
(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%H') As H)
|
||||
union
|
||||
(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%H') As H);
|
||||
|
|
|
@ -368,6 +368,25 @@ create table t1 select now() - now(), curtime() - curtime(),
|
|||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# 21913: DATE_FORMAT() Crashes mysql server if I use it through
|
||||
# mysql-connector-j driver.
|
||||
#
|
||||
|
||||
SET NAMES latin1;
|
||||
SET character_set_results = NULL;
|
||||
SHOW VARIABLES LIKE 'character_set_results';
|
||||
|
||||
CREATE TABLE testBug8868 (field1 DATE, field2 VARCHAR(32) CHARACTER SET BINARY);
|
||||
INSERT INTO testBug8868 VALUES ('2006-09-04', 'abcd');
|
||||
|
||||
SELECT DATE_FORMAT(field1,'%b-%e %l:%i%p') as fmtddate, field2 FROM testBug8868;
|
||||
|
||||
DROP TABLE testBug8868;
|
||||
|
||||
SET NAMES DEFAULT;
|
||||
|
||||
|
||||
#
|
||||
# Bug #19844 time_format in Union truncates values
|
||||
#
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
# i.e. lower_case_filesystem=OFF
|
||||
#
|
||||
-- source include/have_case_sensitive_file_system.inc
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
connect (master,localhost,root,,);
|
||||
connection master;
|
||||
|
|
|
@ -6552,10 +6552,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||
}
|
||||
switch (method-1) {
|
||||
case 0:
|
||||
method_conv= MI_STATS_METHOD_NULLS_EQUAL;
|
||||
method_conv= MI_STATS_METHOD_NULLS_NOT_EQUAL;
|
||||
break;
|
||||
case 1:
|
||||
method_conv= MI_STATS_METHOD_NULLS_NOT_EQUAL;
|
||||
method_conv= MI_STATS_METHOD_NULLS_EQUAL;
|
||||
break;
|
||||
case 2:
|
||||
method_conv= MI_STATS_METHOD_IGNORE_NULLS;
|
||||
|
|
|
@ -248,6 +248,10 @@ bool String::copy(const char *str,uint32 arg_length, CHARSET_INFO *cs)
|
|||
0 No conversion needed
|
||||
1 Either character set conversion or adding leading zeros
|
||||
(e.g. for UCS-2) must be done
|
||||
|
||||
NOTE
|
||||
to_cs may be NULL for "no conversion" if the system variable
|
||||
character_set_results is NULL.
|
||||
*/
|
||||
|
||||
bool String::needs_conversion(uint32 arg_length,
|
||||
|
@ -256,7 +260,8 @@ bool String::needs_conversion(uint32 arg_length,
|
|||
uint32 *offset)
|
||||
{
|
||||
*offset= 0;
|
||||
if ((to_cs == &my_charset_bin) ||
|
||||
if (!to_cs ||
|
||||
(to_cs == &my_charset_bin) ||
|
||||
(to_cs == from_cs) ||
|
||||
my_charset_same(from_cs, to_cs) ||
|
||||
((from_cs == &my_charset_bin) &&
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#ifdef HAVE_STACKTRACE
|
||||
#include <unistd.h>
|
||||
#include <strings.h>
|
||||
|
||||
#define PTR_SANE(p) ((p) && (char*)(p) >= heap_start && (char*)(p) <= heap_end)
|
||||
|
||||
|
@ -44,7 +45,29 @@ void safe_print_str(const char* name, const char* val, int max_len)
|
|||
}
|
||||
|
||||
#ifdef TARGET_OS_LINUX
|
||||
#define SIGRETURN_FRAME_COUNT 2
|
||||
|
||||
#ifdef __i386__
|
||||
#define SIGRETURN_FRAME_OFFSET 17
|
||||
#endif
|
||||
|
||||
#ifdef __x86_64__
|
||||
#define SIGRETURN_FRAME_OFFSET 23
|
||||
#endif
|
||||
|
||||
static my_bool is_nptl;
|
||||
|
||||
/* Check if we are using NPTL or LinuxThreads on Linux */
|
||||
void check_thread_lib(void)
|
||||
{
|
||||
char buf[5];
|
||||
|
||||
#ifdef _CS_GNU_LIBPTHREAD_VERSION
|
||||
confstr(_CS_GNU_LIBPTHREAD_VERSION, buf, sizeof(buf));
|
||||
is_nptl = !strncasecmp(buf, "NPTL", sizeof(buf));
|
||||
#else
|
||||
is_nptl = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(__alpha__) && defined(__GNUC__)
|
||||
/*
|
||||
|
@ -90,7 +113,7 @@ inline uint32* find_prev_pc(uint32* pc, uchar** fp)
|
|||
void print_stacktrace(gptr stack_bottom, ulong thread_stack)
|
||||
{
|
||||
uchar** fp;
|
||||
uint frame_count = 0;
|
||||
uint frame_count = 0, sigreturn_frame_count;
|
||||
#if defined(__alpha__) && defined(__GNUC__)
|
||||
uint32* pc;
|
||||
#endif
|
||||
|
@ -100,28 +123,27 @@ void print_stacktrace(gptr stack_bottom, ulong thread_stack)
|
|||
Attempting backtrace. You can use the following information to find out\n\
|
||||
where mysqld died. If you see no messages after this, something went\n\
|
||||
terribly wrong...\n");
|
||||
#ifdef __i386__
|
||||
#ifdef __i386__
|
||||
__asm __volatile__ ("movl %%ebp,%0"
|
||||
:"=r"(fp)
|
||||
:"r"(fp));
|
||||
if (!fp)
|
||||
{
|
||||
fprintf(stderr, "frame pointer (ebp) is NULL, did you compile with\n\
|
||||
-fomit-frame-pointer? Aborting backtrace!\n");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
#ifdef __x86_64__
|
||||
__asm __volatile__ ("movq %%rbp,%0"
|
||||
:"=r"(fp)
|
||||
:"r"(fp));
|
||||
#endif
|
||||
#if defined(__alpha__) && defined(__GNUC__)
|
||||
__asm __volatile__ ("mov $30,%0"
|
||||
:"=r"(fp)
|
||||
:"r"(fp));
|
||||
#endif
|
||||
if (!fp)
|
||||
{
|
||||
fprintf(stderr, "frame pointer (fp) is NULL, did you compile with\n\
|
||||
fprintf(stderr, "frame pointer is NULL, did you compile with\n\
|
||||
-fomit-frame-pointer? Aborting backtrace!\n");
|
||||
return;
|
||||
}
|
||||
#endif /* __alpha__ */
|
||||
|
||||
if (!stack_bottom || (gptr) stack_bottom > (gptr) &fp)
|
||||
{
|
||||
|
@ -151,13 +173,16 @@ terribly wrong...\n");
|
|||
:"r"(pc));
|
||||
#endif /* __alpha__ */
|
||||
|
||||
/* We are 1 frame above signal frame with NPTL and 2 frames above with LT */
|
||||
sigreturn_frame_count = is_nptl ? 1 : 2;
|
||||
|
||||
while (fp < (uchar**) stack_bottom)
|
||||
{
|
||||
#ifdef __i386__
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
uchar** new_fp = (uchar**)*fp;
|
||||
fprintf(stderr, "%p\n", frame_count == SIGRETURN_FRAME_COUNT ?
|
||||
*(fp+17) : *(fp+1));
|
||||
#endif /* __386__ */
|
||||
fprintf(stderr, "%p\n", frame_count == sigreturn_frame_count ?
|
||||
*(fp + SIGRETURN_FRAME_OFFSET) : *(fp + 1));
|
||||
#endif /* defined(__386__) || defined(__x86_64__) */
|
||||
|
||||
#if defined(__alpha__) && defined(__GNUC__)
|
||||
uchar** new_fp = find_prev_fp(pc, fp);
|
||||
|
|
|
@ -19,16 +19,20 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
#ifdef TARGET_OS_LINUX
|
||||
#if defined(HAVE_STACKTRACE) || (defined (__i386__) || (defined(__alpha__) && defined(__GNUC__)))
|
||||
#if defined(HAVE_STACKTRACE) || (defined (__x86_64__) || defined (__i386__) || (defined(__alpha__) && defined(__GNUC__)))
|
||||
#undef HAVE_STACKTRACE
|
||||
#define HAVE_STACKTRACE
|
||||
|
||||
extern char* __bss_start;
|
||||
extern char* heap_start;
|
||||
|
||||
#define init_stacktrace() { heap_start = (char*) &__bss_start; }
|
||||
#define init_stacktrace() do { \
|
||||
heap_start = (char*) &__bss_start; \
|
||||
check_thread_lib(); \
|
||||
} while(0);
|
||||
void print_stacktrace(gptr stack_bottom, ulong thread_stack);
|
||||
void safe_print_str(const char* name, const char* val, int max_len);
|
||||
void check_thread_lib(void);
|
||||
#endif /* (defined (__i386__) || (defined(__alpha__) && defined(__GNUC__))) */
|
||||
#endif /* TARGET_OS_LINUX */
|
||||
|
||||
|
|
Loading…
Reference in a new issue