mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
Merge from mysql-5.5-bugteam to mysql-5.5-runtime.
This commit is contained in:
commit
72cc5173b2
146 changed files with 6245 additions and 26290 deletions
|
@ -24,7 +24,7 @@ EXTRA_DIST = INSTALL-SOURCE INSTALL-WIN-SOURCE \
|
|||
|
||||
SUBDIRS = . include @docs_dirs@ @zlib_dir@ \
|
||||
@readline_topdir@ sql-common scripts \
|
||||
@pstack_dir@ libservices \
|
||||
libservices \
|
||||
@sql_union_dirs@ unittest \
|
||||
@sql_server@ @man_dirs@ tests \
|
||||
@libmysqld_dirs@ \
|
||||
|
@ -34,7 +34,7 @@ SUBDIRS = . include @docs_dirs@ @zlib_dir@ \
|
|||
cmake
|
||||
DIST_SUBDIRS = . include Docs zlib \
|
||||
cmd-line-utils sql-common scripts \
|
||||
pstack libservices \
|
||||
libservices \
|
||||
strings mysys dbug extra regex libmysql libmysql_r client unittest storage plugin \
|
||||
vio sql man tests \
|
||||
libmysqld \
|
||||
|
|
94
README
94
README
|
@ -2208,97 +2208,3 @@ library. If this is what you want to do, use the GNU Lesser General
|
|||
Public License instead of this License.
|
||||
|
||||
***************************************************************************
|
||||
|
||||
%%The following software may be included in this product:
|
||||
pstack (part of GNU Binutils)
|
||||
|
||||
Use of any of this software is governed by the terms of the license below:
|
||||
|
||||
pstack is comprised of various .c and .h files; all begin like this:
|
||||
|
||||
/* bucomm.h -- binutils common include file.
|
||||
Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
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; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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. */
|
||||
|
||||
***************************************************************************
|
||||
|
||||
%%The following software may be included in this product:
|
||||
libiberty.h (part of pstack GNU Binutils)
|
||||
|
||||
Use of any of this software is governed by the terms of the license below:
|
||||
|
||||
See
|
||||
http://www.koders.com/c/fid99F596804BBE22C076522B848D5575F142079064.aspx
|
||||
|
||||
/* Function declarations for libiberty.
|
||||
Written by Cygnus Support, 1994.
|
||||
|
||||
The libiberty library provides a number of functions which are
|
||||
missing on some operating systems. We do not declare those here,
|
||||
to avoid conflicts with the system header files on operating
|
||||
systems that do support those functions. In this file we only
|
||||
declare those functions which are specific to libiberty. */
|
||||
|
||||
***************************************************************************
|
||||
|
||||
%%The following software may be included in this product:
|
||||
ieee.h (part of pstack GNU Binutils)
|
||||
|
||||
Use of any of this software is governed by the terms of the license below:
|
||||
|
||||
See
|
||||
http://src.opensolaris.org/source/xref//sfw/usr/src/cmd/gdb/gdb-6.3/include/ieee.h
|
||||
|
||||
|
||||
/* IEEE Standard 695-1980 "Universal Format for Object Modules"
|
||||
header file
|
||||
Contributed by Cygnus Support. */
|
||||
|
||||
***************************************************************************
|
||||
|
||||
%%The following software may be included in this product:
|
||||
pstack.c (part of pstack GNU Binutils)
|
||||
|
||||
Use of any of this software is governed by the terms of the license below:
|
||||
|
||||
/*
|
||||
pstack.c -- asynchronous stack trace of a running process
|
||||
Copyright (c) 1999 Ross Thompson
|
||||
Author: Ross Thompson
|
||||
Critical bug fix: Tim Waugh
|
||||
*/
|
||||
|
||||
/*
|
||||
This file 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; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
***************************************************************************
|
||||
|
|
|
@ -112,6 +112,7 @@ static my_bool parsing_disabled= 0;
|
|||
static my_bool display_result_vertically= FALSE, display_result_lower= FALSE,
|
||||
display_metadata= FALSE, display_result_sorted= FALSE;
|
||||
static my_bool disable_query_log= 0, disable_result_log= 0;
|
||||
static my_bool disable_connect_log= 1;
|
||||
static my_bool disable_warnings= 0;
|
||||
static my_bool disable_info= 1;
|
||||
static my_bool abort_on_error= 1;
|
||||
|
@ -227,8 +228,9 @@ typedef struct
|
|||
int str_val_len;
|
||||
int int_val;
|
||||
int alloced_len;
|
||||
int int_dirty; /* do not update string if int is updated until first read */
|
||||
int alloced;
|
||||
bool int_dirty; /* do not update string if int is updated until first read */
|
||||
bool is_int;
|
||||
bool alloced;
|
||||
} VAR;
|
||||
|
||||
/*Perl/shell-like variable registers */
|
||||
|
@ -257,6 +259,7 @@ struct st_connection
|
|||
pthread_mutex_t result_mutex;
|
||||
pthread_cond_t result_cond;
|
||||
int query_done;
|
||||
my_bool has_thread;
|
||||
#endif /*EMBEDDED_LIBRARY*/
|
||||
};
|
||||
|
||||
|
@ -286,6 +289,7 @@ enum enum_commands {
|
|||
Q_EVAL_RESULT,
|
||||
Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG,
|
||||
Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG,
|
||||
Q_ENABLE_CONNECT_LOG, Q_DISABLE_CONNECT_LOG,
|
||||
Q_WAIT_FOR_SLAVE_TO_STOP,
|
||||
Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS,
|
||||
Q_ENABLE_INFO, Q_DISABLE_INFO,
|
||||
|
@ -351,6 +355,8 @@ const char *command_names[]=
|
|||
/* Enable/disable that the _result_ from a query is logged to result file */
|
||||
"enable_result_log",
|
||||
"disable_result_log",
|
||||
"enable_connect_log",
|
||||
"disable_connect_log",
|
||||
"wait_for_slave_to_stop",
|
||||
"enable_warnings",
|
||||
"disable_warnings",
|
||||
|
@ -447,7 +453,7 @@ struct st_command
|
|||
char *query, *query_buf,*first_argument,*last_argument,*end;
|
||||
DYNAMIC_STRING content;
|
||||
int first_word_len, query_len;
|
||||
my_bool abort_on_error;
|
||||
my_bool abort_on_error, used_replace;
|
||||
struct st_expected_errors expected_errors;
|
||||
char require_file[FN_REFLEN];
|
||||
enum enum_commands type;
|
||||
|
@ -763,10 +769,9 @@ end_thread:
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void wait_query_thread_done(struct st_connection *con)
|
||||
{
|
||||
DBUG_ASSERT(con->tid);
|
||||
DBUG_ASSERT(con->has_thread);
|
||||
if (!con->query_done)
|
||||
{
|
||||
pthread_mutex_lock(&con->result_mutex);
|
||||
|
@ -779,7 +784,7 @@ static void wait_query_thread_done(struct st_connection *con)
|
|||
|
||||
static void signal_connection_thd(struct st_connection *cn, int command)
|
||||
{
|
||||
DBUG_ASSERT(cn->tid);
|
||||
DBUG_ASSERT(cn->has_thread);
|
||||
cn->query_done= 0;
|
||||
cn->command= command;
|
||||
pthread_mutex_lock(&cn->query_mutex);
|
||||
|
@ -791,13 +796,13 @@ static void signal_connection_thd(struct st_connection *cn, int command)
|
|||
/*
|
||||
Sometimes we try to execute queries when the connection is closed.
|
||||
It's done to make sure it was closed completely.
|
||||
So that if our connection is closed (cn->tid == 0), we just return
|
||||
So that if our connection is closed (cn->has_thread == 0), we just return
|
||||
the mysql_send_query() result which is an error in this case.
|
||||
*/
|
||||
|
||||
static int do_send_query(struct st_connection *cn, const char *q, int q_len)
|
||||
{
|
||||
if (!cn->tid)
|
||||
if (!cn->has_thread)
|
||||
return mysql_send_query(&cn->mysql, q, q_len);
|
||||
cn->cur_query= q;
|
||||
cn->cur_query_len= q_len;
|
||||
|
@ -805,10 +810,9 @@ static int do_send_query(struct st_connection *cn, const char *q, int q_len)
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int do_read_query_result(struct st_connection *cn)
|
||||
{
|
||||
DBUG_ASSERT(cn->tid);
|
||||
DBUG_ASSERT(cn->has_thread);
|
||||
wait_query_thread_done(cn);
|
||||
signal_connection_thd(cn, EMB_READ_QUERY_RESULT);
|
||||
wait_query_thread_done(cn);
|
||||
|
@ -819,12 +823,12 @@ static int do_read_query_result(struct st_connection *cn)
|
|||
|
||||
static void emb_close_connection(struct st_connection *cn)
|
||||
{
|
||||
if (!cn->tid)
|
||||
if (!cn->has_thread)
|
||||
return;
|
||||
wait_query_thread_done(cn);
|
||||
signal_connection_thd(cn, EMB_END_CONNECTION);
|
||||
pthread_join(cn->tid, NULL);
|
||||
cn->tid= 0;
|
||||
cn->has_thread= FALSE;
|
||||
pthread_mutex_destroy(&cn->query_mutex);
|
||||
pthread_cond_destroy(&cn->query_cond);
|
||||
pthread_mutex_destroy(&cn->result_mutex);
|
||||
|
@ -842,9 +846,9 @@ static void init_connection_thd(struct st_connection *cn)
|
|||
pthread_cond_init(&cn->result_cond, NULL) ||
|
||||
pthread_create(&cn->tid, &cn_thd_attrib, connection_thread, (void*)cn))
|
||||
die("Error in the thread library");
|
||||
cn->has_thread=TRUE;
|
||||
}
|
||||
|
||||
|
||||
#else /*EMBEDDED_LIBRARY*/
|
||||
|
||||
#define do_send_query(cn,q,q_len) mysql_send_query(&cn->mysql, q, q_len)
|
||||
|
@ -2036,6 +2040,21 @@ static void var_free(void *v)
|
|||
|
||||
C_MODE_END
|
||||
|
||||
void var_set_int(VAR *v, const char *str)
|
||||
{
|
||||
char *endptr;
|
||||
/* Initially assume not a number */
|
||||
v->int_val= 0;
|
||||
v->is_int= false;
|
||||
v->int_dirty= false;
|
||||
if (!str) return;
|
||||
|
||||
v->int_val = (int) strtol(str, &endptr, 10);
|
||||
/* It is an int if strtol consumed something up to end/space/tab */
|
||||
if (endptr > str && (!*endptr || *endptr == ' ' || *endptr == '\t'))
|
||||
v->is_int= true;
|
||||
}
|
||||
|
||||
|
||||
VAR *var_init(VAR *v, const char *name, int name_len, const char *val,
|
||||
int val_len)
|
||||
|
@ -2070,11 +2089,10 @@ VAR *var_init(VAR *v, const char *name, int name_len, const char *val,
|
|||
memcpy(tmp_var->str_val, val, val_len);
|
||||
tmp_var->str_val[val_len]= 0;
|
||||
}
|
||||
var_set_int(tmp_var, val);
|
||||
tmp_var->name_len = name_len;
|
||||
tmp_var->str_val_len = val_len;
|
||||
tmp_var->alloced_len = val_alloc_len;
|
||||
tmp_var->int_val = (val) ? atoi(val) : 0;
|
||||
tmp_var->int_dirty = 0;
|
||||
return tmp_var;
|
||||
}
|
||||
|
||||
|
@ -2135,7 +2153,7 @@ VAR* var_get(const char *var_name, const char **var_name_end, my_bool raw,
|
|||
if (!raw && v->int_dirty)
|
||||
{
|
||||
sprintf(v->str_val, "%d", v->int_val);
|
||||
v->int_dirty = 0;
|
||||
v->int_dirty= false;
|
||||
v->str_val_len = strlen(v->str_val);
|
||||
}
|
||||
if (var_name_end)
|
||||
|
@ -2197,7 +2215,7 @@ void var_set(const char *var_name, const char *var_name_end,
|
|||
if (v->int_dirty)
|
||||
{
|
||||
sprintf(v->str_val, "%d", v->int_val);
|
||||
v->int_dirty= 0;
|
||||
v->int_dirty=false;
|
||||
v->str_val_len= strlen(v->str_val);
|
||||
}
|
||||
/* setenv() expects \0-terminated strings */
|
||||
|
@ -2267,8 +2285,14 @@ void var_query_set(VAR *var, const char *query, const char** query_end)
|
|||
DBUG_ENTER("var_query_set");
|
||||
LINT_INIT(res);
|
||||
|
||||
/* Only white space or ) allowed past ending ` */
|
||||
while (end > query && *end != '`')
|
||||
{
|
||||
if (*end && (*end != ' ' && *end != '\t' && *end != '\n' && *end != ')'))
|
||||
die("Spurious text after `query` expression");
|
||||
--end;
|
||||
}
|
||||
|
||||
if (query == end)
|
||||
die("Syntax error in query, missing '`'");
|
||||
++query;
|
||||
|
@ -2497,6 +2521,7 @@ void var_set_query_get_value(struct st_command *command, VAR *var)
|
|||
void var_copy(VAR *dest, VAR *src)
|
||||
{
|
||||
dest->int_val= src->int_val;
|
||||
dest->is_int= src->is_int;
|
||||
dest->int_dirty= src->int_dirty;
|
||||
|
||||
/* Alloc/realloc data for str_val in dest */
|
||||
|
@ -2580,9 +2605,7 @@ void eval_expr(VAR *v, const char *p, const char **p_end)
|
|||
v->str_val_len = new_val_len;
|
||||
memcpy(v->str_val, p, new_val_len);
|
||||
v->str_val[new_val_len] = 0;
|
||||
v->int_val=atoi(p);
|
||||
DBUG_PRINT("info", ("atoi on '%s', returns: %d", p, v->int_val));
|
||||
v->int_dirty=0;
|
||||
var_set_int(v, p);
|
||||
}
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
@ -2929,6 +2952,8 @@ int do_modify_var(struct st_command *command,
|
|||
die("The argument to %.*s must be a variable (start with $)",
|
||||
command->first_word_len, command->query);
|
||||
v= var_get(p, &p, 1, 0);
|
||||
if (! v->is_int)
|
||||
die("Cannot perform inc/dec on a non-numeric value");
|
||||
switch (op) {
|
||||
case DO_DEC:
|
||||
v->int_val--;
|
||||
|
@ -2940,7 +2965,7 @@ int do_modify_var(struct st_command *command,
|
|||
die("Invalid operator to do_modify_var");
|
||||
break;
|
||||
}
|
||||
v->int_dirty= 1;
|
||||
v->int_dirty= true;
|
||||
command->last_argument= (char*)++p;
|
||||
return 0;
|
||||
}
|
||||
|
@ -3414,7 +3439,7 @@ static int get_list_files(DYNAMIC_STRING *ds, const DYNAMIC_STRING *ds_dirname,
|
|||
if (ds_wild && ds_wild->length &&
|
||||
wild_compare(file->name, ds_wild->str, 0))
|
||||
continue;
|
||||
dynstr_append(ds, file->name);
|
||||
replace_dynstr_append(ds, file->name);
|
||||
dynstr_append(ds, "\n");
|
||||
}
|
||||
set_wild_chars(0);
|
||||
|
@ -3444,6 +3469,7 @@ static void do_list_files(struct st_command *command)
|
|||
{"file", ARG_STRING, FALSE, &ds_wild, "Filename (incl. wildcard)"}
|
||||
};
|
||||
DBUG_ENTER("do_list_files");
|
||||
command->used_replace= 1;
|
||||
|
||||
check_command_args(command, command->first_argument,
|
||||
list_files_args,
|
||||
|
@ -3485,6 +3511,7 @@ static void do_list_files_write_file_command(struct st_command *command,
|
|||
{"file", ARG_STRING, FALSE, &ds_wild, "Filename (incl. wildcard)"}
|
||||
};
|
||||
DBUG_ENTER("do_list_files_write_file");
|
||||
command->used_replace= 1;
|
||||
|
||||
check_command_args(command, command->first_argument,
|
||||
list_files_args,
|
||||
|
@ -3982,7 +4009,18 @@ void do_perl(struct st_command *command)
|
|||
if (!error)
|
||||
my_delete(temp_file_path, MYF(0));
|
||||
|
||||
handle_command_error(command, WEXITSTATUS(error));
|
||||
/* Check for error code that indicates perl could not be started */
|
||||
int exstat= WEXITSTATUS(error);
|
||||
#ifdef __WIN__
|
||||
if (exstat == 1)
|
||||
/* Text must begin 'perl not found' as mtr looks for it */
|
||||
abort_not_supported_test("perl not found in path or did not start");
|
||||
#else
|
||||
if (exstat == 127)
|
||||
abort_not_supported_test("perl not found in path");
|
||||
#endif
|
||||
else
|
||||
handle_command_error(command, exstat);
|
||||
}
|
||||
dynstr_free(&ds_delimiter);
|
||||
DBUG_VOID_RETURN;
|
||||
|
@ -4896,6 +4934,16 @@ void select_connection_name(const char *name)
|
|||
|
||||
set_current_connection(con);
|
||||
|
||||
/* Connection logging if enabled */
|
||||
if (!disable_connect_log && !disable_query_log)
|
||||
{
|
||||
DYNAMIC_STRING *ds= &ds_res;
|
||||
|
||||
dynstr_append_mem(ds, "connection ", 11);
|
||||
replace_dynstr_append(ds, name);
|
||||
dynstr_append_mem(ds, ";\n", 2);
|
||||
}
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
@ -4983,6 +5031,16 @@ void do_close_connection(struct st_command *command)
|
|||
var_set_string("$CURRENT_CONNECTION", con->name);
|
||||
}
|
||||
|
||||
/* Connection logging if enabled */
|
||||
if (!disable_connect_log && !disable_query_log)
|
||||
{
|
||||
DYNAMIC_STRING *ds= &ds_res;
|
||||
|
||||
dynstr_append_mem(ds, "disconnect ", 11);
|
||||
replace_dynstr_append(ds, ds_connection.str);
|
||||
dynstr_append_mem(ds, ";\n", 2);
|
||||
}
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
@ -5117,6 +5175,13 @@ int connect_n_handle_errors(struct st_command *command,
|
|||
dynstr_append_mem(ds, delimiter, delimiter_length);
|
||||
dynstr_append_mem(ds, "\n", 1);
|
||||
}
|
||||
/* Simlified logging if enabled */
|
||||
if (!disable_connect_log && !disable_query_log)
|
||||
{
|
||||
replace_dynstr_append(ds, command->query);
|
||||
dynstr_append_mem(ds, ";\n", 2);
|
||||
}
|
||||
|
||||
while (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0,
|
||||
CLIENT_MULTI_STATEMENTS))
|
||||
{
|
||||
|
@ -7434,11 +7499,13 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
|
|||
(flags & QUERY_REAP_FLAG));
|
||||
DBUG_ENTER("run_query");
|
||||
|
||||
init_dynamic_string(&ds_warnings, NULL, 0, 256);
|
||||
|
||||
if (cn->pending && (flags & QUERY_SEND_FLAG))
|
||||
die ("Cannot run query on connection between send and reap");
|
||||
|
||||
if (!(flags & QUERY_SEND_FLAG) && !cn->pending)
|
||||
die ("Cannot reap on a connection without pending send");
|
||||
|
||||
init_dynamic_string(&ds_warnings, NULL, 0, 256);
|
||||
/*
|
||||
Evaluate query if this is an eval command
|
||||
*/
|
||||
|
@ -8183,6 +8250,8 @@ int main(int argc, char **argv)
|
|||
case Q_DISABLE_ABORT_ON_ERROR: abort_on_error=0; break;
|
||||
case Q_ENABLE_RESULT_LOG: disable_result_log=0; break;
|
||||
case Q_DISABLE_RESULT_LOG: disable_result_log=1; break;
|
||||
case Q_ENABLE_CONNECT_LOG: disable_connect_log=0; break;
|
||||
case Q_DISABLE_CONNECT_LOG: disable_connect_log=1; break;
|
||||
case Q_ENABLE_WARNINGS: disable_warnings=0; break;
|
||||
case Q_DISABLE_WARNINGS: disable_warnings=1; break;
|
||||
case Q_ENABLE_INFO: disable_info=0; break;
|
||||
|
@ -8479,7 +8548,7 @@ int main(int argc, char **argv)
|
|||
memset(&saved_expected_errors, 0, sizeof(saved_expected_errors));
|
||||
}
|
||||
|
||||
if (command_executed != last_command_executed)
|
||||
if (command_executed != last_command_executed || command->used_replace)
|
||||
{
|
||||
/*
|
||||
As soon as any command has been executed,
|
||||
|
|
43
configure.in
43
configure.in
|
@ -1069,46 +1069,6 @@ struct request_info *req;
|
|||
])
|
||||
AC_SUBST(WRAPLIBS)
|
||||
|
||||
if test "$TARGET_LINUX" = "true"; then
|
||||
AC_ARG_WITH(pstack,
|
||||
[ --with-pstack Use the pstack backtrace library],
|
||||
[ USE_PSTACK=$withval ],
|
||||
[ USE_PSTACK=no ])
|
||||
pstack_libs=
|
||||
pstack_dir=
|
||||
if test "$USE_PSTACK" = yes -a "$TARGET_LINUX" = "true" -a "$BASE_MACHINE_TYPE" = "i386"
|
||||
then
|
||||
have_libiberty= have_libbfd=
|
||||
my_save_LIBS="$LIBS"
|
||||
dnl I have no idea if this is a good test - can not find docs for libiberty
|
||||
AC_CHECK_LIB([iberty], [fdmatch],
|
||||
[have_libiberty=yes
|
||||
AC_CHECK_LIB([bfd], [bfd_openr], [have_libbfd=yes], , [-liberty])])
|
||||
LIBS="$my_save_LIBS"
|
||||
|
||||
if test x"$have_libiberty" = xyes -a x"$have_libbfd" = xyes
|
||||
then
|
||||
pstack_dir="pstack"
|
||||
pstack_libs="../pstack/libpstack.a -lbfd -liberty"
|
||||
# We must link staticly when using pstack
|
||||
with_mysqld_ldflags="-all-static"
|
||||
AC_SUBST([pstack_dir])
|
||||
AC_SUBST([pstack_libs])
|
||||
AC_DEFINE([USE_PSTACK], [1], [the pstack backtrace library])
|
||||
dnl This check isn't needed, but might be nice to give some feedback....
|
||||
dnl AC_CHECK_HEADER(libiberty.h,
|
||||
dnl have_libiberty_h=yes,
|
||||
dnl have_libiberty_h=no)
|
||||
else
|
||||
USE_PSTACK="no"
|
||||
fi
|
||||
else
|
||||
USE_PSTACK="no"
|
||||
fi
|
||||
fi
|
||||
AC_MSG_CHECKING([if we should use pstack])
|
||||
AC_MSG_RESULT([$USE_PSTACK])
|
||||
|
||||
# Check for gtty if termio.h doesn't exists
|
||||
if test "$ac_cv_header_termio_h" = "no" -a "$ac_cv_header_termios_h" = "no"
|
||||
then
|
||||
|
@ -3004,9 +2964,6 @@ AC_SUBST([RDTSC_SPARC_ASSEMBLY])
|
|||
# Output results
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
if test -d "$srcdir/pstack" ; then
|
||||
AC_CONFIG_FILES(pstack/Makefile pstack/aout/Makefile)
|
||||
fi
|
||||
if test -d "$srcdir/cmd-line-utils/readline" ; then
|
||||
AC_CONFIG_FILES(cmd-line-utils/readline/Makefile)
|
||||
fi
|
||||
|
|
|
@ -496,6 +496,7 @@ int DbugParse(CODE_STATE *cs, const char *control)
|
|||
rel= control[0] == '+' || control[0] == '-';
|
||||
if ((!rel || (!stack->out_file && !stack->next)))
|
||||
{
|
||||
/* Free memory associated with the state before resetting its members */
|
||||
FreeState(cs, stack, 0);
|
||||
stack->flags= 0;
|
||||
stack->delay= 0;
|
||||
|
@ -1608,7 +1609,7 @@ static void PushState(CODE_STATE *cs)
|
|||
struct settings *new_malloc;
|
||||
|
||||
new_malloc= (struct settings *) DbugMalloc(sizeof(struct settings));
|
||||
bzero(new_malloc, sizeof(*new_malloc));
|
||||
bzero(new_malloc, sizeof(struct settings));
|
||||
new_malloc->next= cs->stack;
|
||||
cs->stack= new_malloc;
|
||||
}
|
||||
|
@ -2088,7 +2089,7 @@ static FILE *OpenProfile(CODE_STATE *cs, const char *name)
|
|||
|
||||
static void DBUGCloseFile(CODE_STATE *cs, FILE *fp)
|
||||
{
|
||||
if (fp && fp != stderr && fp != stdout && fclose(fp) == EOF)
|
||||
if (fp != NULL && fp != stderr && fp != stdout && fclose(fp) == EOF)
|
||||
{
|
||||
pthread_mutex_lock(&THR_LOCK_dbug);
|
||||
(void) fprintf(cs->stack->out_file, ERR_CLOSE, cs->process);
|
||||
|
|
|
@ -1474,7 +1474,6 @@ static inline double rint(double x)
|
|||
/* Things we don't need in the embedded version of MySQL */
|
||||
/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */
|
||||
|
||||
#undef HAVE_PSTACK /* No stacktrace */
|
||||
#undef HAVE_OPENSSL
|
||||
#undef HAVE_SMEM /* No shared memory */
|
||||
#undef HAVE_NDBCLUSTER_DB /* No NDB cluster */
|
||||
|
|
|
@ -48,19 +48,30 @@ typedef struct st_pthread_link {
|
|||
struct st_pthread_link *next;
|
||||
} pthread_link;
|
||||
|
||||
typedef struct {
|
||||
uint32 waiting;
|
||||
CRITICAL_SECTION lock_waiting;
|
||||
|
||||
enum {
|
||||
SIGNAL= 0,
|
||||
BROADCAST= 1,
|
||||
MAX_EVENTS= 2
|
||||
} EVENTS;
|
||||
|
||||
HANDLE events[MAX_EVENTS];
|
||||
HANDLE broadcast_block_event;
|
||||
/**
|
||||
Implementation of Windows condition variables.
|
||||
We use native conditions on Vista and later, and fallback to own
|
||||
implementation on earlier OS version.
|
||||
*/
|
||||
typedef union
|
||||
{
|
||||
/* Native condition (used on Vista and later) */
|
||||
CONDITION_VARIABLE native_cond;
|
||||
|
||||
/* Own implementation (used on XP) */
|
||||
struct
|
||||
{
|
||||
uint32 waiting;
|
||||
CRITICAL_SECTION lock_waiting;
|
||||
enum
|
||||
{
|
||||
SIGNAL= 0,
|
||||
BROADCAST= 1,
|
||||
MAX_EVENTS= 2
|
||||
} EVENTS;
|
||||
HANDLE events[MAX_EVENTS];
|
||||
HANDLE broadcast_block_event;
|
||||
};
|
||||
} pthread_cond_t;
|
||||
|
||||
|
||||
|
@ -679,6 +690,47 @@ extern int rw_pr_destroy(rw_pr_lock_t *);
|
|||
|
||||
|
||||
#ifdef NEED_MY_RW_LOCK
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
/**
|
||||
Implementation of Windows rwlock.
|
||||
|
||||
We use native (slim) rwlocks on Win7 and later, and fallback to portable
|
||||
implementation on earlier Windows.
|
||||
|
||||
slim rwlock are also available on Vista/WS2008, but we do not use it
|
||||
("trylock" APIs are missing on Vista)
|
||||
*/
|
||||
typedef union
|
||||
{
|
||||
/* Native rwlock (is_srwlock == TRUE) */
|
||||
struct
|
||||
{
|
||||
SRWLOCK srwlock; /* native reader writer lock */
|
||||
BOOL have_exclusive_srwlock; /* used for unlock */
|
||||
};
|
||||
|
||||
/*
|
||||
Portable implementation (is_srwlock == FALSE)
|
||||
Fields are identical with Unix my_rw_lock_t fields.
|
||||
*/
|
||||
struct
|
||||
{
|
||||
pthread_mutex_t lock; /* lock for structure */
|
||||
pthread_cond_t readers; /* waiting readers */
|
||||
pthread_cond_t writers; /* waiting writers */
|
||||
int state; /* -1:writer,0:free,>0:readers */
|
||||
int waiters; /* number of waiting writers */
|
||||
#ifdef SAFE_MUTEX
|
||||
pthread_t write_thread;
|
||||
#endif
|
||||
};
|
||||
} my_rw_lock_t;
|
||||
|
||||
|
||||
#else /* _WIN32 */
|
||||
|
||||
/*
|
||||
On systems which don't support native read/write locks we have
|
||||
to use own implementation.
|
||||
|
@ -694,6 +746,8 @@ typedef struct st_my_rw_lock_t {
|
|||
#endif
|
||||
} my_rw_lock_t;
|
||||
|
||||
#endif /*! _WIN32 */
|
||||
|
||||
extern int my_rw_init(my_rw_lock_t *);
|
||||
extern int my_rw_destroy(my_rw_lock_t *);
|
||||
extern int my_rw_rdlock(my_rw_lock_t *);
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
/* Things we don't need in the embedded version of MySQL */
|
||||
/* TODO HF add #undef HAVE_VIO if we don't want client in embedded library */
|
||||
|
||||
#undef HAVE_PSTACK /* No stacktrace */
|
||||
#undef HAVE_DLOPEN /* No udf functions */
|
||||
#undef HAVE_SMEM /* No shared memory */
|
||||
#undef HAVE_NDBCLUSTER_DB /* No NDB cluster */
|
||||
|
|
|
@ -24,8 +24,6 @@ main.sp @solaris # Bug#47791 2010-01-20 alik Several tes
|
|||
main.type_float @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
|
||||
main.wait_timeout @solaris # Bug#51244 2010-04-26 alik wait_timeout fails on OpenSolaris
|
||||
|
||||
parts.partition_alter4_innodb # Bug#45299 2010-06-28 alik Test "partition_alter4_innodb" is taking too long, timeout
|
||||
|
||||
rpl.rpl_heartbeat_basic # BUG#54820 2010-06-26 alik rpl.rpl_heartbeat_basic fails sporadically again
|
||||
rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails sporadically
|
||||
rpl.rpl_innodb_bug28430* # Bug#46029
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
perl mysql-test-run.pl --timer --force --comment=1st --experimental=collections/default.experimental 1st
|
||||
perl mysql-test-run.pl --timer --force --comment=1st --experimental=collections/default.experimental 1st
|
||||
perl mysql-test-run.pl --timer --force --comment=big-tests --experimental=collections/default.experimental --vardir=var-big-tests --big-test --testcase-timeout=60 --suite-timeout=600 parts.part_supported_sql_func_innodb parts.partition_alter1_1_2_innodb parts.partition_alter1_1_2_ndb parts.partition_alter1_1_ndb parts.partition_alter1_2_innodb parts.partition_alter1_2_ndb parts.partition_alter2_1_1_innodb parts.partition_alter2_1_2_innodb parts.partition_alter2_2_2_innodb parts.partition_alter4_innodb main.variables-big rpl_ndb.rpl_truncate_7ndb_2
|
||||
|
|
|
@ -7,15 +7,27 @@
|
|||
# force lower-case-table-names=1 (linux/macosx have different defaults)
|
||||
# force symbolic-links=0 (valgrind build has a different default)
|
||||
#
|
||||
|
||||
exec $MYSQLD_BOOTSTRAP_CMD --symbolic-links=0 --lower-case-table-names=1 --help --verbose > $MYSQL_TMP_DIR/mysqld--help.txt 2>&1;
|
||||
|
||||
# The inline perl code below will copy $MYSQL_TMP_DIR/mysqld--help.txt
|
||||
# to output, but filter away some variable stuff (e.g. paths).
|
||||
|
||||
perl;
|
||||
# Variables which we don't want to display in the result file since
|
||||
# their paths may vary:
|
||||
@skipvars=qw/basedir open-files-limit general-log-file log plugin-dir
|
||||
log-slow-queries pid-file slow-query-log-file
|
||||
datadir slave-load-tmpdir tmpdir/;
|
||||
datadir slave-load-tmpdir tmpdir socket/;
|
||||
|
||||
# Plugins which may or may not be there:
|
||||
@plugins=qw/innodb ndb archive blackhole federated partition ndbcluster debug temp-pool ssl des-key-file
|
||||
thread-concurrency super-large-pages mutex-deadlock-detector null-audit/;
|
||||
@env=qw/MYSQLTEST_VARDIR MYSQL_TEST_DIR MYSQL_LIBDIR MYSQL_CHARSETSDIR MYSQL_SHAREDIR /;
|
||||
|
||||
# And substitute the content some environment variables with their
|
||||
# names:
|
||||
@env=qw/MYSQLTEST_VARDIR MYSQL_TEST_DIR MYSQL_LIBDIR MYSQL_CHARSETSDIR MYSQL_SHAREDIR/;
|
||||
|
||||
$re1=join('|', @skipvars, @plugins);
|
||||
$re2=join('|', @plugins);
|
||||
$skip=0;
|
||||
|
|
|
@ -229,7 +229,8 @@ sub mtr_report_stats ($$;$) {
|
|||
# Find out how we where doing
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
my $tot_skiped= 0;
|
||||
my $tot_skipped= 0;
|
||||
my $tot_skipdetect= 0;
|
||||
my $tot_passed= 0;
|
||||
my $tot_failed= 0;
|
||||
my $tot_tests= 0;
|
||||
|
@ -246,8 +247,9 @@ sub mtr_report_stats ($$;$) {
|
|||
}
|
||||
elsif ( $tinfo->{'result'} eq 'MTR_RES_SKIPPED' )
|
||||
{
|
||||
# Test was skipped
|
||||
$tot_skiped++;
|
||||
# Test was skipped (disabled not counted)
|
||||
$tot_skipped++ unless $tinfo->{'disable'};
|
||||
$tot_skipdetect++ if $tinfo->{'skip_detected_by_test'};
|
||||
}
|
||||
elsif ( $tinfo->{'result'} eq 'MTR_RES_PASSED' )
|
||||
{
|
||||
|
@ -376,6 +378,9 @@ sub mtr_report_stats ($$;$) {
|
|||
print "All $tot_tests tests were successful.\n\n";
|
||||
}
|
||||
|
||||
print "$tot_skipped tests were skipped, ".
|
||||
"$tot_skipdetect by the test itself.\n\n" if $tot_skipped;
|
||||
|
||||
if ( $tot_failed != 0 || $found_problems)
|
||||
{
|
||||
mtr_error("there were failing test cases") unless $dont_error;
|
||||
|
|
|
@ -126,12 +126,24 @@ my $path_vardir_trace; # unix formatted opt_vardir for trace files
|
|||
my $opt_tmpdir; # Path to use for tmp/ dir
|
||||
my $opt_tmpdir_pid;
|
||||
|
||||
my $opt_start;
|
||||
my $opt_start_dirty;
|
||||
my $opt_start_exit;
|
||||
my $start_only;
|
||||
|
||||
END {
|
||||
if ( defined $opt_tmpdir_pid and $opt_tmpdir_pid == $$ )
|
||||
{
|
||||
# Remove the tempdir this process has created
|
||||
mtr_verbose("Removing tmpdir '$opt_tmpdir");
|
||||
rmtree($opt_tmpdir);
|
||||
if (!$opt_start_exit)
|
||||
{
|
||||
# Remove the tempdir this process has created
|
||||
mtr_verbose("Removing tmpdir $opt_tmpdir");
|
||||
rmtree($opt_tmpdir);
|
||||
}
|
||||
else
|
||||
{
|
||||
mtr_warning("tmpdir $opt_tmpdir should be removed after the server has finished");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -234,10 +246,6 @@ my $opt_start_timeout = $ENV{MTR_START_TIMEOUT} || 180; # seconds
|
|||
sub suite_timeout { return $opt_suite_timeout * 60; };
|
||||
sub check_timeout { return $opt_testcase_timeout * 6; };
|
||||
|
||||
my $opt_start;
|
||||
my $opt_start_dirty;
|
||||
my $opt_start_exit;
|
||||
my $start_only;
|
||||
my $opt_wait_all;
|
||||
my $opt_user_args;
|
||||
my $opt_repeat= 1;
|
||||
|
@ -2186,6 +2194,11 @@ sub environment_setup {
|
|||
# to detect that valgrind is being used from test cases
|
||||
$ENV{'VALGRIND_TEST'}= $opt_valgrind;
|
||||
|
||||
# Add dir of this perl to aid mysqltest in finding perl
|
||||
my $perldir= dirname($^X);
|
||||
my $pathsep= ":";
|
||||
$pathsep= ";" if IS_WINDOWS && ! IS_CYGWIN;
|
||||
$ENV{'PATH'}= "$ENV{'PATH'}".$pathsep.$perldir;
|
||||
}
|
||||
|
||||
|
||||
|
@ -3658,6 +3671,9 @@ sub run_testcase ($) {
|
|||
# Try to get reason from test log file
|
||||
find_testcase_skipped_reason($tinfo);
|
||||
mtr_report_test_skipped($tinfo);
|
||||
# Restart if skipped due to missing perl, it may have had side effects
|
||||
stop_all_servers($opt_shutdown_timeout)
|
||||
if ($tinfo->{'comment'} =~ /^perl not found/);
|
||||
}
|
||||
elsif ( $res == 65 )
|
||||
{
|
||||
|
|
|
@ -913,7 +913,6 @@ slave-transaction-retries 10
|
|||
slave-type-conversions
|
||||
slow-launch-time 2
|
||||
slow-query-log FALSE
|
||||
socket /tmp/mysql.sock
|
||||
sort-buffer-size 2097152
|
||||
sporadic-binlog-dump-fail FALSE
|
||||
sql-mode
|
||||
|
|
|
@ -109,20 +109,13 @@ Database: information_schema
|
|||
| TRIGGERS |
|
||||
| USER_PRIVILEGES |
|
||||
| VIEWS |
|
||||
| INNODB_SYS_FIELDS |
|
||||
| INNODB_TRX |
|
||||
| INNODB_SYS_INDEXES |
|
||||
| INNODB_LOCK_WAITS |
|
||||
| INNODB_SYS_TABLESTATS |
|
||||
| INNODB_CMP |
|
||||
| INNODB_SYS_COLUMNS |
|
||||
| INNODB_CMP_RESET |
|
||||
| INNODB_SYS_FOREIGN_COLS |
|
||||
| INNODB_LOCKS |
|
||||
| INNODB_TRX |
|
||||
| INNODB_CMPMEM_RESET |
|
||||
| INNODB_LOCK_WAITS |
|
||||
| INNODB_CMPMEM |
|
||||
| INNODB_SYS_FOREIGN |
|
||||
| INNODB_SYS_TABLES |
|
||||
| INNODB_CMP |
|
||||
| INNODB_LOCKS |
|
||||
+---------------------------------------+
|
||||
Database: INFORMATION_SCHEMA
|
||||
+---------------------------------------+
|
||||
|
@ -158,20 +151,13 @@ Database: INFORMATION_SCHEMA
|
|||
| TRIGGERS |
|
||||
| USER_PRIVILEGES |
|
||||
| VIEWS |
|
||||
| INNODB_SYS_FIELDS |
|
||||
| INNODB_TRX |
|
||||
| INNODB_SYS_INDEXES |
|
||||
| INNODB_LOCK_WAITS |
|
||||
| INNODB_SYS_TABLESTATS |
|
||||
| INNODB_CMP |
|
||||
| INNODB_SYS_COLUMNS |
|
||||
| INNODB_CMP_RESET |
|
||||
| INNODB_SYS_FOREIGN_COLS |
|
||||
| INNODB_LOCKS |
|
||||
| INNODB_TRX |
|
||||
| INNODB_CMPMEM_RESET |
|
||||
| INNODB_LOCK_WAITS |
|
||||
| INNODB_CMPMEM |
|
||||
| INNODB_SYS_FOREIGN |
|
||||
| INNODB_SYS_TABLES |
|
||||
| INNODB_CMP |
|
||||
| INNODB_LOCKS |
|
||||
+---------------------------------------+
|
||||
Wildcard: inf_rmation_schema
|
||||
+--------------------+
|
||||
|
|
|
@ -177,6 +177,9 @@ mysqltest: At line 1: End of line junk detected: "disconnect default # comment
|
|||
"
|
||||
mysqltest: At line 1: Extra delimiter ";" found
|
||||
mysqltest: At line 1: Extra delimiter ";" found
|
||||
mysqltest: At line 1: Spurious text after `query` expression
|
||||
mysqltest: At line 1: Spurious text after `query` expression
|
||||
mysqltest: At line 2: Spurious text after `query` expression
|
||||
mysqltest: At line 1: Missing argument(s) to 'error'
|
||||
mysqltest: At line 1: Missing argument(s) to 'error'
|
||||
mysqltest: At line 1: The sqlstate definition must start with an uppercase S
|
||||
|
@ -366,23 +369,24 @@ mysqltest: At line 1: Missing required argument 'sleep_delay' to command 'real_s
|
|||
mysqltest: At line 1: Invalid argument to sleep "abc"
|
||||
mysqltest: At line 1: Invalid argument to real_sleep "abc"
|
||||
1
|
||||
2
|
||||
101
|
||||
hej
|
||||
1
|
||||
-99
|
||||
mysqltest: At line 1: Missing argument to inc
|
||||
mysqltest: At line 1: The argument to inc must be a variable (start with $)
|
||||
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||
mysqltest: At line 1: End of line junk detected: "1000"
|
||||
4
|
||||
4
|
||||
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||
-96
|
||||
-96
|
||||
-1
|
||||
-2
|
||||
99
|
||||
hej
|
||||
-1
|
||||
mysqltest: At line 1: Missing argument to dec
|
||||
mysqltest: At line 1: The argument to dec must be a variable (start with $)
|
||||
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||
mysqltest: At line 1: End of line junk detected: "1000"
|
||||
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||
mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value
|
||||
mysqltest: At line 1: Missing arguments to system, nothing to do!
|
||||
mysqltest: At line 1: Missing arguments to system, nothing to do!
|
||||
system command 'NonExistsinfComamdn 2> /dev/null' failed
|
||||
|
@ -449,12 +453,16 @@ mysqltest: At line 1: Missing required argument 'host' to command 'connect'
|
|||
mysqltest: At line 1: query 'connect con2,localhost,root,,illegal_db' failed: 1049: Unknown database 'illegal_db'
|
||||
mysqltest: At line 1: Illegal argument for port: 'illegal_port'
|
||||
mysqltest: At line 1: Illegal option to connect: SMTP
|
||||
OK
|
||||
mysqltest: The test didn't produce any output
|
||||
200 connects succeeded
|
||||
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 3: connection 'test_con1' not found in connection pool
|
||||
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 2: Connection test_con1 already exists
|
||||
show tables;
|
||||
ERROR 3D000: No database selected
|
||||
connect con1,localhost,root,,;
|
||||
connection default;
|
||||
connection con1;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
Output from mysqltest-x.inc
|
||||
Output from mysqltest-x.inc
|
||||
Output from mysqltest-x.inc
|
||||
|
|
|
@ -1,5 +1,20 @@
|
|||
drop table if exists t1, t2;
|
||||
#
|
||||
# Bug#57113: ha_partition::extra(ha_extra_function):
|
||||
# Assertion `m_extra_cache' failed
|
||||
CREATE TABLE t1
|
||||
(id INT NOT NULL PRIMARY KEY,
|
||||
name VARCHAR(16) NOT NULL,
|
||||
year YEAR,
|
||||
INDEX name (name(8))
|
||||
)
|
||||
PARTITION BY HASH(id) PARTITIONS 2;
|
||||
INSERT INTO t1 VALUES ( 1, 'FooBar', '1924' );
|
||||
CREATE TABLE t2 (id INT);
|
||||
INSERT INTO t2 VALUES (1),(2);
|
||||
UPDATE t1, t2 SET t1.year = '1955' WHERE t1.name = 'FooBar';
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# Bug#55458: Partitioned MyISAM table gets crashed by multi-table update
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
|
@ -551,12 +566,12 @@ create table t1 (a bigint)
|
|||
partition by range (a)
|
||||
(partition p0 values less than (0xFFFFFFFFFFFFFFFF),
|
||||
partition p1 values less than (10));
|
||||
ERROR HY000: VALUES value must be of same type as partition function
|
||||
ERROR HY000: VALUES value for partition 'p0' must have type INT
|
||||
create table t1 (a bigint)
|
||||
partition by list (a)
|
||||
(partition p0 values in (0xFFFFFFFFFFFFFFFF),
|
||||
partition p1 values in (10));
|
||||
ERROR HY000: VALUES value must be of same type as partition function
|
||||
ERROR HY000: VALUES value for partition 'p0' must have type INT
|
||||
create table t1 (a bigint unsigned)
|
||||
partition by range (a)
|
||||
(partition p0 values less than (100),
|
||||
|
|
|
@ -1,4 +1,125 @@
|
|||
drop table if exists t1;
|
||||
drop table if exists t1, t2;
|
||||
#
|
||||
# Bug#50036: Inconsistent errors when using TIMESTAMP
|
||||
# columns/expressions
|
||||
# 1. correct and appropriate errors in light of
|
||||
# the fix for BUG#42849:
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY RANGE (TO_DAYS(c))
|
||||
(PARTITION p0 VALUES LESS THAN (10000),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE t2 (c TIMESTAMP);
|
||||
ALTER TABLE t2
|
||||
PARTITION BY RANGE (TO_DAYS(c))
|
||||
(PARTITION p0 VALUES LESS THAN (10000),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY RANGE COLUMNS(c)
|
||||
(PARTITION p0 VALUES LESS THAN ('2000-01-01 00:00:00'),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
ERROR HY000: Field 'c' is of a not allowed type for this type of partitioning
|
||||
ALTER TABLE t2 PARTITION BY RANGE COLUMNS(c)
|
||||
(PARTITION p0 VALUES LESS THAN ('2000-01-01 00:00:00'),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
ERROR HY000: Field 'c' is of a not allowed type for this type of partitioning
|
||||
DROP TABLE t2;
|
||||
# 2. These errors where questionable before the fix:
|
||||
# VALUES clause are checked first, clearified the error message.
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY RANGE (c)
|
||||
(PARTITION p0 VALUES LESS THAN ('2000-01-01 00:00:00'),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
ERROR HY000: VALUES value for partition 'p0' must have type INT
|
||||
# TIMESTAMP is not INT (e.g. UNIX_TIMESTAMP).
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(c))
|
||||
(PARTITION p0 VALUES LESS THAN ('2000-01-01 00:00:00'),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
ERROR HY000: VALUES value for partition 'p0' must have type INT
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(c))
|
||||
(PARTITION p0 VALUES LESS THAN (UNIX_TIMESTAMP('2000-01-01 00:00:00')),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
DROP TABLE t1;
|
||||
# Changed error from ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY HASH (c) PARTITIONS 4;
|
||||
ERROR HY000: Field 'c' is of a not allowed type for this type of partitioning
|
||||
# Added test with existing TIMESTAMP partitioning (when it was allowed).
|
||||
CREATE TABLE t1 (a TIMESTAMP)
|
||||
PARTITION BY HASH (UNIX_TIMESTAMP(a));
|
||||
INSERT INTO t1 VALUES ('2000-01-02 03:04:05');
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
2000-01-02 03:04:05
|
||||
FLUSH TABLES;
|
||||
# replacing t1.frm with TO_DAYS(a) which was allowed earlier.
|
||||
# Disable warnings, since the result would differ when running with
|
||||
# --ps-protocol (only for the 'SELECT * FROM t1' statement).
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
2000-01-02 03:04:05
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (TO_DAYS(a)) */
|
||||
INSERT INTO t1 VALUES ('2001-02-03 04:05:06');
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
2000-01-02 03:04:05
|
||||
2001-02-03 04:05:06
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
|
||||
Warnings:
|
||||
Warning 1486 Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
ALTER TABLE t1
|
||||
PARTITION BY RANGE (TO_DAYS(a))
|
||||
(PARTITION p0 VALUES LESS THAN (10000),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (TO_DAYS(a))
|
||||
PARTITIONS 3 */
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (TO_DAYS(a))
|
||||
PARTITIONS 3 */
|
||||
Warnings:
|
||||
Warning 1486 Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 PARTITION BY HASH (UNIX_TIMESTAMP(a));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (UNIX_TIMESTAMP(a)) */
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
/*!50100 PARTITION BY HASH (UNIX_TIMESTAMP(a))
|
||||
PARTITIONS 3 */
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
2000-01-02 03:04:05
|
||||
2001-02-03 04:05:06
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#49161: Out of memory; restart server and try again (needed 2 bytes)
|
||||
#
|
||||
|
@ -497,7 +618,7 @@ partition by range (a)
|
|||
partitions 2
|
||||
(partition x1 values less than (4.0) tablespace ts1,
|
||||
partition x2 values less than (8) tablespace ts2);
|
||||
ERROR HY000: VALUES value must be of same type as partition function
|
||||
ERROR HY000: VALUES value for partition 'x1' must have type INT
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
|
@ -736,7 +857,7 @@ partition by list (a)
|
|||
partitions 2
|
||||
(partition x1 values in (4.0, 12+8),
|
||||
partition x2 values in (3, 21));
|
||||
ERROR HY000: VALUES value must be of same type as partition function
|
||||
ERROR HY000: VALUES value for partition 'x1' must have type INT
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
|
@ -796,12 +917,12 @@ CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
|||
PARTITION BY RANGE (a) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: The PARTITION function returns the wrong type
|
||||
ERROR HY000: Field 'a' is of a not allowed type for this type of partitioning
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (a) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: The PARTITION function returns the wrong type
|
||||
ERROR HY000: Field 'a' is of a not allowed type for this type of partitioning
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (a+0) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
|
@ -1075,4 +1196,14 @@ PARTITION p VALUES LESS THAN (1219089600),
|
|||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
DROP TABLE old;
|
||||
#
|
||||
# Bug #56709: Memory leaks at running the 5.1 test suite
|
||||
#
|
||||
CREATE TABLE t1 (a TIMESTAMP NOT NULL PRIMARY KEY);
|
||||
ALTER TABLE t1
|
||||
PARTITION BY RANGE (EXTRACT(DAY FROM a)) (
|
||||
PARTITION p VALUES LESS THAN (18),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
ERROR HY000: Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -1929,26 +1929,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
select @arg01:= c1, @arg02:= c2, @arg03:= c3, @arg04:= c4,
|
||||
|
@ -1976,26 +1976,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select
|
||||
|
@ -2026,26 +2026,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
set @my_key= 0 ;
|
||||
|
@ -2066,26 +2066,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select ? := c1 from t9 where c1= 1" ;
|
||||
|
@ -2114,26 +2114,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
|
||||
|
@ -2158,26 +2158,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
|
||||
|
@ -2204,26 +2204,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
set @my_key= 0 ;
|
||||
|
@ -2242,26 +2242,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
|
|
|
@ -1912,26 +1912,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
select @arg01:= c1, @arg02:= c2, @arg03:= c3, @arg04:= c4,
|
||||
|
@ -1959,26 +1959,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select
|
||||
|
@ -2009,26 +2009,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
set @my_key= 0 ;
|
||||
|
@ -2049,26 +2049,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select ? := c1 from t9 where c1= 1" ;
|
||||
|
@ -2097,26 +2097,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
|
||||
|
@ -2141,26 +2141,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
|
||||
|
@ -2187,26 +2187,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
set @my_key= 0 ;
|
||||
|
@ -2225,26 +2225,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
|
|
|
@ -1913,26 +1913,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 0 31 8
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 0 31 8
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 0 31 8
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 0 31 8
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 0 31 8
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 0 31 8
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 0 31 8
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 0 31 8
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
select @arg01:= c1, @arg02:= c2, @arg03:= c3, @arg04:= c4,
|
||||
|
@ -1960,26 +1960,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 0 31 8
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 0 31 8
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 0 31 8
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 0 31 8
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 0 31 8
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 0 31 8
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 0 31 8
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 0 31 8
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select
|
||||
|
@ -2010,26 +2010,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 0 31 8
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 0 31 8
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 0 31 8
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 0 31 8
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 0 31 8
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 0 31 8
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 0 31 8
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 0 31 8
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
set @my_key= 0 ;
|
||||
|
@ -2050,26 +2050,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 0 31 8
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 0 31 8
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 0 31 8
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 0 31 8
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 0 31 8
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 0 31 8
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 0 31 8
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 0 31 8
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select ? := c1 from t9 where c1= 1" ;
|
||||
|
@ -2098,26 +2098,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 0 31 8
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 0 31 8
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 0 31 8
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 0 31 8
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 0 31 8
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 0 31 8
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 0 31 8
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 0 31 8
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
|
||||
|
@ -2142,26 +2142,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 0 31 8
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 0 31 8
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 0 31 8
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 0 31 8
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 0 31 8
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 0 31 8
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 0 31 8
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 0 31 8
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
|
||||
|
@ -2188,26 +2188,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 0 31 8
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 0 31 8
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 0 31 8
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 0 31 8
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 0 31 8
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 0 31 8
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 0 31 8
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 0 31 8
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
set @my_key= 0 ;
|
||||
|
@ -2226,26 +2226,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 0 31 8
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 0 31 8
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 0 31 8
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 0 31 8
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 0 31 8
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 0 31 8
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 0 31 8
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 0 31 8
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
|
|
|
@ -1849,26 +1849,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
select @arg01:= c1, @arg02:= c2, @arg03:= c3, @arg04:= c4,
|
||||
|
@ -1896,26 +1896,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select
|
||||
|
@ -1946,26 +1946,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
set @my_key= 0 ;
|
||||
|
@ -1986,26 +1986,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select ? := c1 from t9 where c1= 1" ;
|
||||
|
@ -2034,26 +2034,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
|
||||
|
@ -2078,26 +2078,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
|
||||
|
@ -2124,26 +2124,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
set @my_key= 0 ;
|
||||
|
@ -2162,26 +2162,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
|
@ -4871,26 +4871,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
select @arg01:= c1, @arg02:= c2, @arg03:= c3, @arg04:= c4,
|
||||
|
@ -4918,26 +4918,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select
|
||||
|
@ -4968,26 +4968,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
set @my_key= 0 ;
|
||||
|
@ -5008,26 +5008,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select ? := c1 from t9 where c1= 1" ;
|
||||
|
@ -5056,26 +5056,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
|
||||
|
@ -5100,26 +5100,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12,
|
||||
|
@ -5146,26 +5146,26 @@ def @arg09 5 23 1 Y 32896 31 63
|
|||
def @arg10 5 23 1 Y 32896 31 63
|
||||
def @arg11 246 83 6 Y 32896 30 63
|
||||
def @arg12 246 83 6 Y 32896 30 63
|
||||
def @arg13 251 16777216 10 Y 0 31 8
|
||||
def @arg14 251 16777216 19 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 8 Y 0 31 8
|
||||
def @arg13 250 16777215 10 Y 0 31 8
|
||||
def @arg14 250 16777215 19 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 8 Y 0 31 8
|
||||
def @arg17 8 20 4 Y 32928 0 63
|
||||
def @arg18 8 20 1 Y 32896 0 63
|
||||
def @arg19 8 20 1 Y 32896 0 63
|
||||
def @arg20 251 16777216 1 Y 0 31 8
|
||||
def @arg21 251 16777216 10 Y 0 31 8
|
||||
def @arg22 251 16777216 30 Y 0 31 8
|
||||
def @arg23 251 16777216 8 Y 128 31 63
|
||||
def @arg24 251 16777216 8 Y 0 31 8
|
||||
def @arg25 251 16777216 4 Y 128 31 63
|
||||
def @arg26 251 16777216 4 Y 0 31 8
|
||||
def @arg27 251 16777216 10 Y 128 31 63
|
||||
def @arg28 251 16777216 10 Y 0 31 8
|
||||
def @arg29 251 16777216 8 Y 128 31 63
|
||||
def @arg30 251 16777216 8 Y 0 31 8
|
||||
def @arg31 251 16777216 3 Y 0 31 8
|
||||
def @arg32 251 16777216 6 Y 0 31 8
|
||||
def @arg20 250 16777215 1 Y 0 31 8
|
||||
def @arg21 250 16777215 10 Y 0 31 8
|
||||
def @arg22 250 16777215 30 Y 0 31 8
|
||||
def @arg23 250 16777215 8 Y 128 31 63
|
||||
def @arg24 250 16777215 8 Y 0 31 8
|
||||
def @arg25 250 16777215 4 Y 128 31 63
|
||||
def @arg26 250 16777215 4 Y 0 31 8
|
||||
def @arg27 250 16777215 10 Y 128 31 63
|
||||
def @arg28 250 16777215 10 Y 0 31 8
|
||||
def @arg29 250 16777215 8 Y 128 31 63
|
||||
def @arg30 250 16777215 8 Y 0 31 8
|
||||
def @arg31 250 16777215 3 Y 0 31 8
|
||||
def @arg32 250 16777215 6 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
set @my_key= 0 ;
|
||||
|
@ -5184,26 +5184,26 @@ def @arg09 5 23 0 Y 32896 31 63
|
|||
def @arg10 5 23 0 Y 32896 31 63
|
||||
def @arg11 246 83 0 Y 32896 30 63
|
||||
def @arg12 246 83 0 Y 32896 30 63
|
||||
def @arg13 251 16777216 0 Y 0 31 8
|
||||
def @arg14 251 16777216 0 Y 0 31 8
|
||||
def @arg15 251 16777216 19 Y 0 31 8
|
||||
def @arg16 251 16777216 0 Y 0 31 8
|
||||
def @arg13 250 16777215 0 Y 0 31 8
|
||||
def @arg14 250 16777215 0 Y 0 31 8
|
||||
def @arg15 250 16777215 19 Y 0 31 8
|
||||
def @arg16 250 16777215 0 Y 0 31 8
|
||||
def @arg17 8 20 0 Y 32928 0 63
|
||||
def @arg18 8 20 0 Y 32896 0 63
|
||||
def @arg19 8 20 0 Y 32896 0 63
|
||||
def @arg20 251 16777216 0 Y 0 31 8
|
||||
def @arg21 251 16777216 0 Y 0 31 8
|
||||
def @arg22 251 16777216 0 Y 0 31 8
|
||||
def @arg23 251 16777216 0 Y 128 31 63
|
||||
def @arg24 251 16777216 0 Y 0 31 8
|
||||
def @arg25 251 16777216 0 Y 128 31 63
|
||||
def @arg26 251 16777216 0 Y 0 31 8
|
||||
def @arg27 251 16777216 0 Y 128 31 63
|
||||
def @arg28 251 16777216 0 Y 0 31 8
|
||||
def @arg29 251 16777216 0 Y 128 31 63
|
||||
def @arg30 251 16777216 0 Y 0 31 8
|
||||
def @arg31 251 16777216 0 Y 0 31 8
|
||||
def @arg32 251 16777216 0 Y 0 31 8
|
||||
def @arg20 250 16777215 0 Y 0 31 8
|
||||
def @arg21 250 16777215 0 Y 0 31 8
|
||||
def @arg22 250 16777215 0 Y 0 31 8
|
||||
def @arg23 250 16777215 0 Y 128 31 63
|
||||
def @arg24 250 16777215 0 Y 0 31 8
|
||||
def @arg25 250 16777215 0 Y 128 31 63
|
||||
def @arg26 250 16777215 0 Y 0 31 8
|
||||
def @arg27 250 16777215 0 Y 128 31 63
|
||||
def @arg28 250 16777215 0 Y 0 31 8
|
||||
def @arg29 250 16777215 0 Y 128 31 63
|
||||
def @arg30 250 16777215 0 Y 0 31 8
|
||||
def @arg31 250 16777215 0 Y 0 31 8
|
||||
def @arg32 250 16777215 0 Y 0 31 8
|
||||
@arg01 @arg02 @arg03 @arg04 @arg05 @arg06 @arg07 @arg08 @arg09 @arg10 @arg11 @arg12 @arg13 @arg14 @arg15 @arg16 @arg17 @arg18 @arg19 @arg20 @arg21 @arg22 @arg23 @arg24 @arg25 @arg26 @arg27 @arg28 @arg29 @arg30 @arg31 @arg32
|
||||
0 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1991-01-01 01:01:01 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
||||
prepare stmt1 from "select c1 into ? from t9 where c1= 1" ;
|
||||
|
|
|
@ -31,6 +31,19 @@ SELECT @@global.debug;
|
|||
@@global.debug
|
||||
|
||||
SET GLOBAL debug=@old_debug;
|
||||
#
|
||||
# Bug #56709: Memory leaks at running the 5.1 test suite
|
||||
#
|
||||
SET @old_local_debug = @@debug;
|
||||
SET @@debug='d,foo';
|
||||
SELECT @@debug;
|
||||
@@debug
|
||||
d,foo
|
||||
SET @@debug='';
|
||||
SELECT @@debug;
|
||||
@@debug
|
||||
|
||||
SET @@debug = @old_local_debug;
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Bug#46165 server crash in dbug
|
||||
|
|
BIN
mysql-test/std_data/parts/t1TIMESTAMP.frm
Normal file
BIN
mysql-test/std_data/parts/t1TIMESTAMP.frm
Normal file
Binary file not shown.
|
@ -1,110 +0,0 @@
|
|||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
|
||||
TABLE_ID NAME FLAG N_COLS SPACE
|
||||
11 SYS_FOREIGN 0 7 0
|
||||
12 SYS_FOREIGN_COLS 0 7 0
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES;
|
||||
INDEX_ID NAME TABLE_ID TYPE N_FIELDS PAGE_NO SPACE
|
||||
11 ID_IND 11 3 1 302 0
|
||||
12 FOR_IND 11 0 1 303 0
|
||||
13 REF_IND 11 0 1 304 0
|
||||
14 ID_IND 12 3 2 305 0
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS;
|
||||
TABLE_ID NAME POS MTYPE PRTYPE LEN
|
||||
11 ID 0 1 524292 0
|
||||
11 FOR_NAME 1 1 524292 0
|
||||
11 REF_NAME 2 1 524292 0
|
||||
11 N_COLS 3 6 0 4
|
||||
12 ID 0 1 524292 0
|
||||
12 POS 1 6 0 4
|
||||
12 FOR_COL_NAME 2 1 524292 0
|
||||
12 REF_COL_NAME 3 1 524292 0
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS;
|
||||
INDEX_ID NAME POS
|
||||
11 ID 0
|
||||
12 FOR_NAME 0
|
||||
13 REF_NAME 0
|
||||
14 ID 0
|
||||
14 POS 1
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN;
|
||||
ID FOR_NAME REF_NAME N_COLS TYPE
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS;
|
||||
ID FOR_COL_NAME REF_COL_NAME POS
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS;
|
||||
TABLE_ID NAME STATS_INITIALIZED NUM_ROWS CLUST_INDEX_SIZE OTHER_INDEX_SIZE MODIFIED_COUNTER AUTOINC MYSQL_HANDLES_OPENED
|
||||
11 SYS_FOREIGN Uninitialized 0 0 0 0 0 0
|
||||
12 SYS_FOREIGN_COLS Uninitialized 0 0 0 0 0 0
|
||||
CREATE TABLE parent (id INT NOT NULL,
|
||||
PRIMARY KEY (id)) ENGINE=INNODB;
|
||||
CREATE TABLE child (id INT, parent_id INT,
|
||||
INDEX par_ind (parent_id),
|
||||
CONSTRAINT constraint_test
|
||||
FOREIGN KEY (parent_id) REFERENCES parent(id)
|
||||
ON DELETE CASCADE) ENGINE=INNODB;
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN;
|
||||
ID FOR_NAME REF_NAME N_COLS TYPE
|
||||
test/constraint_test test/child test/parent 1 1
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS;
|
||||
ID FOR_COL_NAME REF_COL_NAME POS
|
||||
test/constraint_test parent_id id 0
|
||||
INSERT INTO parent VALUES(1);
|
||||
SELECT name, num_rows, mysql_handles_opened
|
||||
FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
|
||||
WHERE name LIKE "%parent";
|
||||
name num_rows mysql_handles_opened
|
||||
test/parent 1 1
|
||||
SELECT NAME, FLAG, N_COLS, SPACE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
|
||||
NAME FLAG N_COLS SPACE
|
||||
SYS_FOREIGN 0 7 0
|
||||
SYS_FOREIGN_COLS 0 7 0
|
||||
test/child 1 5 0
|
||||
test/parent 1 4 0
|
||||
SELECT name, n_fields
|
||||
from INFORMATION_SCHEMA.INNODB_SYS_INDEXES
|
||||
WHERE table_id In (SELECT table_id from
|
||||
INFORMATION_SCHEMA.INNODB_SYS_TABLES
|
||||
WHERE name LIKE "%parent%");
|
||||
name n_fields
|
||||
PRIMARY 1
|
||||
SELECT name, n_fields
|
||||
from INFORMATION_SCHEMA.INNODB_SYS_INDEXES
|
||||
WHERE table_id In (SELECT table_id from
|
||||
INFORMATION_SCHEMA.INNODB_SYS_TABLES
|
||||
WHERE name LIKE "%child%");
|
||||
name n_fields
|
||||
GEN_CLUST_INDEX 0
|
||||
par_ind 1
|
||||
SELECT name, pos, mtype, len
|
||||
from INFORMATION_SCHEMA.INNODB_SYS_COLUMNS
|
||||
WHERE table_id In (SELECT table_id from
|
||||
INFORMATION_SCHEMA.INNODB_SYS_TABLES
|
||||
WHERE name LIKE "%child%");
|
||||
name pos mtype len
|
||||
id 0 6 4
|
||||
parent_id 1 6 4
|
||||
DROP TABLE child;
|
||||
DROP TABLE parent;
|
||||
CREATE TABLE parent (id INT NOT NULL, newid INT NOT NULL,
|
||||
PRIMARY KEY (id, newid)) ENGINE=INNODB;
|
||||
CREATE TABLE child (id INT, parent_id INT,
|
||||
INDEX par_ind (parent_id),
|
||||
CONSTRAINT constraint_test
|
||||
FOREIGN KEY (id, parent_id) REFERENCES parent(id, newid)
|
||||
ON DELETE CASCADE) ENGINE=INNODB;
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN;
|
||||
ID FOR_NAME REF_NAME N_COLS TYPE
|
||||
test/constraint_test test/child test/parent 2 1
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS;
|
||||
ID FOR_COL_NAME REF_COL_NAME POS
|
||||
test/constraint_test id id 0
|
||||
test/constraint_test parent_id newid 1
|
||||
INSERT INTO parent VALUES(1, 9);
|
||||
SELECT * FROM parent WHERE id IN (SELECT id FROM parent);
|
||||
id newid
|
||||
1 9
|
||||
SELECT name, num_rows, mysql_handles_opened
|
||||
FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
|
||||
WHERE name LIKE "%parent";
|
||||
name num_rows mysql_handles_opened
|
||||
test/parent 1 2
|
||||
DROP TABLE child;
|
||||
DROP TABLE parent;
|
4
mysql-test/suite/innodb/r/innodb_bug56716.result
Normal file
4
mysql-test/suite/innodb/r/innodb_bug56716.result
Normal file
|
@ -0,0 +1,4 @@
|
|||
CREATE TABLE bug56716 (a INT PRIMARY KEY,b INT,c INT,INDEX(b)) ENGINE=InnoDB;
|
||||
SELECT * FROM bug56716 WHERE b<=42 ORDER BY b DESC FOR UPDATE;
|
||||
a b c
|
||||
DROP TABLE bug56716;
|
|
@ -1,3 +0,0 @@
|
|||
--default-storage-engine=MyISAM
|
||||
--innodb-strict-mode=0
|
||||
--innodb-file-per-table=0
|
|
@ -1,94 +0,0 @@
|
|||
# This is the test for Information Schema System Table View
|
||||
# that displays the InnoDB system table content through
|
||||
# information schema tables.
|
||||
|
||||
--source include/have_innodb.inc
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_COLUMNS;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FIELDS;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS;
|
||||
|
||||
# Create a foreign key constraint, and verify the information
|
||||
# in INFORMATION_SCHEMA.INNODB_SYS_FOREIGN and
|
||||
# INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS
|
||||
CREATE TABLE parent (id INT NOT NULL,
|
||||
PRIMARY KEY (id)) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE child (id INT, parent_id INT,
|
||||
INDEX par_ind (parent_id),
|
||||
CONSTRAINT constraint_test
|
||||
FOREIGN KEY (parent_id) REFERENCES parent(id)
|
||||
ON DELETE CASCADE) ENGINE=INNODB;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS;
|
||||
|
||||
# Insert a row in the table "parent", and see whether that reflected in
|
||||
# INNODB_SYS_TABLESTATS
|
||||
INSERT INTO parent VALUES(1);
|
||||
|
||||
SELECT name, num_rows, mysql_handles_opened
|
||||
FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
|
||||
WHERE name LIKE "%parent";
|
||||
|
||||
SELECT NAME, FLAG, N_COLS, SPACE FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES;
|
||||
|
||||
SELECT name, n_fields
|
||||
from INFORMATION_SCHEMA.INNODB_SYS_INDEXES
|
||||
WHERE table_id In (SELECT table_id from
|
||||
INFORMATION_SCHEMA.INNODB_SYS_TABLES
|
||||
WHERE name LIKE "%parent%");
|
||||
|
||||
SELECT name, n_fields
|
||||
from INFORMATION_SCHEMA.INNODB_SYS_INDEXES
|
||||
WHERE table_id In (SELECT table_id from
|
||||
INFORMATION_SCHEMA.INNODB_SYS_TABLES
|
||||
WHERE name LIKE "%child%");
|
||||
|
||||
SELECT name, pos, mtype, len
|
||||
from INFORMATION_SCHEMA.INNODB_SYS_COLUMNS
|
||||
WHERE table_id In (SELECT table_id from
|
||||
INFORMATION_SCHEMA.INNODB_SYS_TABLES
|
||||
WHERE name LIKE "%child%");
|
||||
|
||||
DROP TABLE child;
|
||||
|
||||
DROP TABLE parent;
|
||||
|
||||
# Create table with 2 columns in the foreign key constraint
|
||||
CREATE TABLE parent (id INT NOT NULL, newid INT NOT NULL,
|
||||
PRIMARY KEY (id, newid)) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE child (id INT, parent_id INT,
|
||||
INDEX par_ind (parent_id),
|
||||
CONSTRAINT constraint_test
|
||||
FOREIGN KEY (id, parent_id) REFERENCES parent(id, newid)
|
||||
ON DELETE CASCADE) ENGINE=INNODB;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN;
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN_COLS;
|
||||
|
||||
INSERT INTO parent VALUES(1, 9);
|
||||
|
||||
# Nested query will open the table handle twice
|
||||
SELECT * FROM parent WHERE id IN (SELECT id FROM parent);
|
||||
|
||||
SELECT name, num_rows, mysql_handles_opened
|
||||
FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS
|
||||
WHERE name LIKE "%parent";
|
||||
|
||||
DROP TABLE child;
|
||||
|
||||
DROP TABLE parent;
|
10
mysql-test/suite/innodb/t/innodb_bug56716.test
Normal file
10
mysql-test/suite/innodb/t/innodb_bug56716.test
Normal file
|
@ -0,0 +1,10 @@
|
|||
#
|
||||
# Bug #56716 InnoDB locks a record gap without locking the table
|
||||
#
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
CREATE TABLE bug56716 (a INT PRIMARY KEY,b INT,c INT,INDEX(b)) ENGINE=InnoDB;
|
||||
|
||||
SELECT * FROM bug56716 WHERE b<=42 ORDER BY b DESC FOR UPDATE;
|
||||
|
||||
DROP TABLE bug56716;
|
|
@ -26,10 +26,12 @@ if ($do_file_tests)
|
|||
{
|
||||
let $ls_file= $MYSQLD_DATADIR/test/tmp2;
|
||||
# List the files belonging to the table t1
|
||||
--replace_result $MYSQLTEST_VARDIR \$MYSQLTEST_VARDIR #p# #P# #sp# #SP#
|
||||
--list_files_write_file $ls_file $MYSQLD_DATADIR/test t1*
|
||||
--chmod 0644 $ls_file
|
||||
if ($with_directories)
|
||||
{
|
||||
--replace_result $MYSQLTEST_VARDIR \$MYSQLTEST_VARDIR #p# #P# #sp# #SP#
|
||||
--list_files_append_file $ls_file $MYSQLTEST_VARDIR/tmp t1*
|
||||
}
|
||||
eval SET @aux = load_file('$ls_file');
|
||||
|
@ -60,16 +62,15 @@ if ($found_garbage)
|
|||
--echo # <alter partitioning> worked incomplete.
|
||||
--echo # We found:
|
||||
# Print the list of files into the protocol
|
||||
eval SELECT REPLACE(file_list,'$MYSQLTEST_VARDIR','\$MYSQLTEST_VARDIR')
|
||||
AS "unified filelist"
|
||||
eval SELECT file_list AS "unified filelist"
|
||||
FROM t0_definition WHERE state = 'old';
|
||||
}
|
||||
# Do a manual cleanup, because the following tests should not suffer from
|
||||
# remaining files
|
||||
--exec rm -f $MYSQLD_DATADIR/test/t1* || true
|
||||
--remove_files_wildcard $MYSQLD_DATADIR/test t1*
|
||||
if ($with_directories)
|
||||
{
|
||||
--exec rm -f $MYSQLTEST_VARDIR/tmp/t1* || true
|
||||
--remove_files_wildcard $MYSQLTEST_VARDIR/tmp t1*
|
||||
}
|
||||
}
|
||||
--enable_query_log
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
--eval $create_statement
|
||||
--eval $insert_statement
|
||||
--echo # State before crash
|
||||
--replace_result #p# #P#
|
||||
--replace_result #p# #P# #sp# #SP#
|
||||
--list_files $DATADIR/test
|
||||
SHOW CREATE TABLE t1;
|
||||
--sorted_result
|
||||
|
@ -14,13 +14,13 @@ SELECT * FROM t1;
|
|||
--error 2013
|
||||
--eval $crash_statement
|
||||
--echo # State after crash (before recovery)
|
||||
--replace_regex /sqlx.*\./sqlx-nnnn_nnnn./ /#p#/#P#/
|
||||
--replace_regex /sqlx.*\./sqlx-nnnn_nnnn./ /#p#/#P#/ /#sp#/#SP#/ /#tmp#/#TMP#/
|
||||
--list_files $DATADIR/test
|
||||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
--enable_reconnect
|
||||
--source include/wait_until_connected_again.inc
|
||||
--echo # State after crash recovery
|
||||
--replace_result #p# #P#
|
||||
--replace_result #p# #P# #sp# #SP#
|
||||
--list_files $DATADIR/test
|
||||
SHOW CREATE TABLE t1;
|
||||
--sorted_result
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
--eval $create_statement
|
||||
--eval $insert_statement
|
||||
--echo # State before failure
|
||||
--replace_result #p# #P# #sp# #SP#
|
||||
--list_files $DATADIR/test
|
||||
SHOW CREATE TABLE t1;
|
||||
--sorted_result
|
||||
|
@ -11,8 +12,29 @@ SELECT * FROM t1;
|
|||
--eval $fail_statement
|
||||
--enable_abort_on_error
|
||||
--echo # State after failure
|
||||
--replace_result #p# #P# #sp# #SP#
|
||||
--list_files $DATADIR/test
|
||||
SHOW CREATE TABLE t1;
|
||||
--sorted_result
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo # Same test under LOCK TABLE
|
||||
--eval $create_statement
|
||||
--eval $insert_statement
|
||||
--echo # State before failure
|
||||
--list_files $DATADIR/test
|
||||
SHOW CREATE TABLE t1;
|
||||
--sorted_result
|
||||
SELECT * FROM t1;
|
||||
LOCK TABLE t1 WRITE;
|
||||
--disable_abort_on_error
|
||||
--eval $fail_statement
|
||||
--enable_abort_on_error
|
||||
--echo # State after failure
|
||||
--list_files $DATADIR/test
|
||||
SHOW CREATE TABLE t1;
|
||||
--sorted_result
|
||||
SELECT * FROM t1;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -10,6 +10,6 @@ eval SHOW CREATE TABLE t1;
|
|||
if ($ls)
|
||||
{
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
|
||||
--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR #p# #P# #sp# #SP#
|
||||
--list_files $MYSQLD_DATADIR/test t1*
|
||||
}
|
||||
|
|
|
@ -69,7 +69,7 @@ if ($do_file_tests)
|
|||
if ($ls)
|
||||
{
|
||||
# Print the list of files into the protocol
|
||||
replace_result $MYSQLD_DATADIR MYSQLD_DATADIR $MYSQLTEST_VARDIR MYSQLTEST_VARDIR;
|
||||
replace_result $MYSQLD_DATADIR MYSQLD_DATADIR $MYSQLTEST_VARDIR MYSQLTEST_VARDIR #p# #P# #sp# #SP# part_n part_N;
|
||||
SELECT file_list AS "unified filelist"
|
||||
FROM t0_definition WHERE state = 'old';
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@ let $run= `SELECT @aux`;
|
|||
if ($run)
|
||||
{
|
||||
--vertical_results
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR #p# #P# #sp# #SP#
|
||||
SELECT state,
|
||||
REPLACE(create_command,'\n',' ') AS "Table definition",
|
||||
REPLACE(file_list ,'\n',' ') AS "File list"
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,4 +1,4 @@
|
|||
call mtr.add_suppression("./test/t1_will_crash");
|
||||
call mtr.add_suppression("t1_will_crash");
|
||||
call mtr.add_suppression("Got an error from unknown thread");
|
||||
CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM;
|
||||
INSERT INTO t1_will_crash VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11);
|
||||
|
|
|
@ -238,11 +238,10 @@ LOCK TABLE t1 READ;
|
|||
# Third attempt: says that the table does not exist
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
# Check table returns the same
|
||||
# Check table returns the same (not after fixing bug#56172!)
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check Error Lock wait timeout exceeded; try restarting transaction
|
||||
test.t1 check status Operation failed
|
||||
test.t1 check status OK
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t2 ( i INT NOT NULL AUTO_INCREMENT PRIMARY KEY, f INT )
|
||||
|
|
|
@ -214,7 +214,7 @@ SET lock_wait_timeout = 2;
|
|||
ALTER TABLE t1 COALESCE PARTITION 2;
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
# Connection 3 tries to load into the table:
|
||||
LOAD DATA LOCAL INFILE '/tmp/load.in' INTO TABLE t1 (f);
|
||||
LOAD DATA INFILE 'load.in' INTO TABLE t1 (f);
|
||||
# Connection 1 commits the transaction
|
||||
COMMIT;
|
||||
# Connection 3...
|
||||
|
|
|
@ -28,6 +28,9 @@ let $do_long_tests= 1;
|
|||
# The server must support partitioning.
|
||||
--source include/have_partition.inc
|
||||
|
||||
# This test takes long time, so only run it with the --big mtr-flag.
|
||||
--source include/big_test.inc
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Engine specific settings and requirements
|
||||
|
||||
|
|
|
@ -46,6 +46,9 @@ let $more_pk_ui_tests= 0;
|
|||
# The server must support partitioning.
|
||||
--source include/have_partition.inc
|
||||
|
||||
# This test takes long time, so only run it with the --big mtr-flag.
|
||||
--source include/big_test.inc
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Engine specific settings and requirements
|
||||
|
||||
|
|
|
@ -46,6 +46,9 @@ let $more_pk_ui_tests= 0;
|
|||
# The server must support partitioning.
|
||||
--source include/have_partition.inc
|
||||
|
||||
# This test takes long time, so only run it with the --big mtr-flag.
|
||||
--source include/big_test.inc
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Engine specific settings and requirements
|
||||
|
||||
|
|
|
@ -45,6 +45,9 @@ let $only_part_1= 1;
|
|||
# The server must support partitioning.
|
||||
--source include/have_partition.inc
|
||||
|
||||
# This test takes long time, so only run it with the --big mtr-flag.
|
||||
--source include/big_test.inc
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Engine specific settings and requirements
|
||||
|
||||
|
|
|
@ -45,6 +45,9 @@ let $only_part_2= 1;
|
|||
# The server must support partitioning.
|
||||
--source include/have_partition.inc
|
||||
|
||||
# This test takes long time, so only run it with the --big mtr-flag.
|
||||
--source include/big_test.inc
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Engine specific settings and requirements
|
||||
|
||||
|
|
|
@ -45,6 +45,9 @@ let $only_part_2= 1;
|
|||
# The server must support partitioning.
|
||||
--source include/have_partition.inc
|
||||
|
||||
# This test takes long time, so only run it with the --big mtr-flag.
|
||||
--source include/big_test.inc
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Engine specific settings and requirements
|
||||
|
||||
|
|
|
@ -43,6 +43,9 @@ let $more_pk_ui_tests= 0;
|
|||
# The server must support partitioning.
|
||||
--source include/have_partition.inc
|
||||
|
||||
# This test takes long time, so only run it with the --big mtr-flag.
|
||||
--source include/big_test.inc
|
||||
|
||||
#------------------------------------------------------------------------------#
|
||||
# Engine specific settings and requirements
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ partition by range (a)
|
|||
insert into t1 values (1), (11), (21), (33);
|
||||
SELECT * FROM t1;
|
||||
SHOW CREATE TABLE t1;
|
||||
--replace_result #p# #P# #sp# #SP#
|
||||
--list_files $MYSQLD_DATADIR/test
|
||||
|
||||
SET DEBUG_SYNC='before_open_in_get_all_tables SIGNAL parked WAIT_FOR open';
|
||||
|
@ -78,6 +79,7 @@ ALTER TABLE t1 REORGANIZE PARTITION p0 INTO
|
|||
disconnect con1;
|
||||
connection default;
|
||||
--reap
|
||||
--replace_result #p# #P# #sp# #SP#
|
||||
--list_files $MYSQLD_DATADIR/test
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# test the auto-recover (--myisam-recover) of partitioned myisam tables
|
||||
|
||||
call mtr.add_suppression("./test/t1_will_crash");
|
||||
call mtr.add_suppression("t1_will_crash");
|
||||
call mtr.add_suppression("Got an error from unknown thread");
|
||||
|
||||
--source include/have_partition.inc
|
||||
|
|
|
@ -111,7 +111,7 @@ LOCK TABLE t1 READ;
|
|||
--echo # Third attempt: says that the table does not exist
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
|
||||
--echo # Check table returns the same
|
||||
--echo # Check table returns the same (not after fixing bug#56172!)
|
||||
CHECK TABLE t1;
|
||||
|
||||
--connection con1
|
||||
|
|
|
@ -62,13 +62,14 @@ ALTER TABLE t1 COALESCE PARTITION 2;
|
|||
|
||||
--connect (con3,localhost,root,,)
|
||||
|
||||
perl;
|
||||
open( LD, ">" . "/tmp/load.in" ) || die "Could not open file for writing " . $ENV{'MYSQLTEST_DATADIR'} . "/test/load.in";
|
||||
print LD "1\n2\n3\n";
|
||||
close( LD );
|
||||
--let $MYSQLD_DATADIR= `SELECT @@datadir`
|
||||
--write_file $MYSQLD_DATADIR/test/load.in
|
||||
1
|
||||
2
|
||||
3
|
||||
EOF
|
||||
--echo # Connection 3 tries to load into the table:
|
||||
send LOAD DATA LOCAL INFILE '/tmp/load.in' INTO TABLE t1 (f);
|
||||
send LOAD DATA INFILE 'load.in' INTO TABLE t1 (f);
|
||||
|
||||
--connection default
|
||||
--real_sleep 1
|
||||
|
|
|
@ -205,7 +205,7 @@ DROP TABLE `t1`;
|
|||
|
||||
-- echo === Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail.
|
||||
|
||||
-- let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||
-- let $MYSQLD_DATADIR= `SELECT @@datadir`
|
||||
-- exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
|
||||
-- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog
|
||||
|
||||
|
@ -330,7 +330,7 @@ while($ntables)
|
|||
-- echo ### assertion: check that binlog is not corrupt. Using mysqlbinlog to
|
||||
-- echo ### detect failure. Before the patch mysqlbinlog would find
|
||||
-- echo ### a corrupted event, thence would fail.
|
||||
-- let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||
-- let $MYSQLD_DATADIR= `SELECT @@datadir`
|
||||
-- exec $MYSQL_BINLOG -v --hex $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog
|
||||
|
||||
## clean up
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
# #
|
||||
################################################################################
|
||||
|
||||
let $save_div_precision_increment = `SELECT @@global.div_precision_increment`
|
||||
let $save_div_precision_increment = `SELECT @@global.div_precision_increment`;
|
||||
|
||||
#SET @save_div_precision_increment = @@global.div_precision_increment;
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ SHOW VARIABLES LIKE 'secure_file_priv';
|
|||
# Doing this in a portable manner is difficult but we should be able to
|
||||
# count on the depth of the directory hierarchy used. Three steps up from
|
||||
# the datadir is the 'mysql_test' directory.
|
||||
--let $PROTECTED_FILE=`SELECT concat(@@datadir,'/../../../bug50373.txt')`;
|
||||
--let $PROTECTED_FILE=`SELECT concat(@@datadir,'/../../../bug50373.txt')`
|
||||
--eval SELECT * FROM t1 INTO OUTFILE '$PROTECTED_FILE';
|
||||
DELETE FROM t1;
|
||||
--eval LOAD DATA INFILE '$PROTECTED_FILE' INTO TABLE t1;
|
||||
|
|
|
@ -494,6 +494,32 @@ remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
|||
--error 1
|
||||
--exec echo "--disable_query_log;" | $MYSQL_TEST 2>&1
|
||||
|
||||
#
|
||||
# Extra text after ``
|
||||
#
|
||||
# Cannot use exec echo here as ` may or may not need to be escaped
|
||||
--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
|
||||
let $x= `select 1` BOO ;
|
||||
EOF
|
||||
--error 1
|
||||
--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
||||
--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
|
||||
--let $x= `select 1`;
|
||||
EOF
|
||||
--error 1
|
||||
--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
||||
--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
|
||||
# Missing ; in next line should be detected and cause failure
|
||||
let $x= `select 1`
|
||||
let $x= 2;
|
||||
echo $x;
|
||||
EOF
|
||||
--error 1
|
||||
--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
||||
|
||||
|
||||
# Allow trailing # comment
|
||||
--sleep 1 # Wait for insert delayed to be executed.
|
||||
|
@ -980,16 +1006,13 @@ EOF
|
|||
# ----------------------------------------------------------------------------
|
||||
# Test inc
|
||||
# ----------------------------------------------------------------------------
|
||||
inc $i;
|
||||
echo $i;
|
||||
let $i= 0;
|
||||
inc $i;
|
||||
echo $i;
|
||||
let $i=100;
|
||||
inc $i;
|
||||
echo $i;
|
||||
|
||||
let $i=hej;
|
||||
echo $i;
|
||||
let $i= -100;
|
||||
inc $i;
|
||||
echo $i;
|
||||
|
||||
|
@ -998,7 +1021,13 @@ echo $i;
|
|||
--error 1
|
||||
--exec echo "inc i;" | $MYSQL_TEST 2>&1
|
||||
--error 1
|
||||
--exec echo "inc \$i;" | $MYSQL_TEST 2>&1
|
||||
--error 1
|
||||
--exec echo "let \$i=100; inc \$i 1000; echo \$i;" | $MYSQL_TEST 2>&1
|
||||
--error 1
|
||||
--exec echo "let \$i=text; inc \$i; echo \$i;" | $MYSQL_TEST 2>&1
|
||||
--error 1
|
||||
--exec echo "let \$i=10cc; inc \$i; echo \$i;" | $MYSQL_TEST 2>&1
|
||||
|
||||
inc $i; inc $i; inc $i; --echo $i
|
||||
echo $i;
|
||||
|
@ -1008,25 +1037,25 @@ echo $i;
|
|||
# Test dec
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
dec $d;
|
||||
echo $d;
|
||||
let $d= 0;
|
||||
dec $d;
|
||||
echo $d;
|
||||
let $d=100;
|
||||
dec $d;
|
||||
echo $d;
|
||||
|
||||
let $d=hej;
|
||||
echo $d;
|
||||
dec $d;
|
||||
echo $d;
|
||||
|
||||
--error 1
|
||||
--exec echo "dec;" | $MYSQL_TEST 2>&1
|
||||
--error 1
|
||||
--exec echo "dec i;" | $MYSQL_TEST 2>&1
|
||||
--error 1
|
||||
--exec echo "dec \$i;" | $MYSQL_TEST 2>&1
|
||||
--error 1
|
||||
--exec echo "let \$i=100; dec \$i 1000; echo \$i;" | $MYSQL_TEST 2>&1
|
||||
--error 1
|
||||
--exec echo "let \$i=text; dec \$i; echo \$i;" | $MYSQL_TEST 2>&1
|
||||
--error 1
|
||||
--exec echo "let \$i=10cc; dec \$i; echo \$i;" | $MYSQL_TEST 2>&1
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
|
@ -1439,19 +1468,6 @@ eval select "$long_rep" as x;
|
|||
--error 1
|
||||
--exec echo "connect (con1,localhost,root,,,,,SMTP POP);" | $MYSQL_TEST 2>&1
|
||||
|
||||
# Repeat connect/disconnect
|
||||
--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
|
||||
let $i=100;
|
||||
while ($i)
|
||||
{
|
||||
connect (test_con1,localhost,root,,);
|
||||
disconnect test_con1;
|
||||
dec $i;
|
||||
}
|
||||
EOF
|
||||
--exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql; echo OK; exit;" | $MYSQL_TEST 2>&1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
||||
|
||||
# Repeat connect/disconnect
|
||||
--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql
|
||||
let $i=200;
|
||||
|
@ -1461,9 +1477,8 @@ while ($i)
|
|||
disconnect test_con1;
|
||||
dec $i;
|
||||
}
|
||||
echo 200 connects succeeded;
|
||||
EOF
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--error 1
|
||||
--exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql;" | $MYSQL_TEST 2>&1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql;
|
||||
|
||||
|
@ -1504,6 +1519,22 @@ show tables;
|
|||
disconnect con2;
|
||||
connection default;
|
||||
|
||||
# Test enable_connect_log
|
||||
--enable_connect_log
|
||||
connect (con1,localhost,root,,);
|
||||
connection default;
|
||||
connection con1;
|
||||
--disable_query_log
|
||||
# These should not be logged
|
||||
connect (con2,localhost,root,,*NO-ONE*);
|
||||
connection con2;
|
||||
disconnect con2;
|
||||
connection con1;
|
||||
--enable_query_log
|
||||
disconnect con1;
|
||||
connection default;
|
||||
--disable_connect_log
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Test mysqltest arguments
|
||||
# ----------------------------------------------------------------------------
|
||||
|
|
|
@ -14,6 +14,28 @@
|
|||
drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
|
||||
--echo #
|
||||
--echo # Bug#57113: ha_partition::extra(ha_extra_function):
|
||||
--echo # Assertion `m_extra_cache' failed
|
||||
CREATE TABLE t1
|
||||
(id INT NOT NULL PRIMARY KEY,
|
||||
name VARCHAR(16) NOT NULL,
|
||||
year YEAR,
|
||||
INDEX name (name(8))
|
||||
)
|
||||
PARTITION BY HASH(id) PARTITIONS 2;
|
||||
|
||||
INSERT INTO t1 VALUES ( 1, 'FooBar', '1924' );
|
||||
|
||||
CREATE TABLE t2 (id INT);
|
||||
|
||||
INSERT INTO t2 VALUES (1),(2);
|
||||
|
||||
UPDATE t1, t2 SET t1.year = '1955' WHERE t1.name = 'FooBar';
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#55458: Partitioned MyISAM table gets crashed by multi-table update
|
||||
--echo #
|
||||
|
@ -458,12 +480,12 @@ drop table t1;
|
|||
#
|
||||
# BUG 16002: Handle unsigned integer functions properly
|
||||
#
|
||||
--error ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR
|
||||
--error ER_VALUES_IS_NOT_INT_TYPE_ERROR
|
||||
create table t1 (a bigint)
|
||||
partition by range (a)
|
||||
(partition p0 values less than (0xFFFFFFFFFFFFFFFF),
|
||||
partition p1 values less than (10));
|
||||
--error ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR
|
||||
--error ER_VALUES_IS_NOT_INT_TYPE_ERROR
|
||||
create table t1 (a bigint)
|
||||
partition by list (a)
|
||||
(partition p0 values in (0xFFFFFFFFFFFFFFFF),
|
||||
|
|
|
@ -8,10 +8,8 @@ DROP TABLE IF EXISTS t1;
|
|||
--echo #
|
||||
--echo # Bug#51851: Server with SBR locks mutex twice on LOAD DATA into
|
||||
--echo # partitioned MyISAM table
|
||||
perl;
|
||||
open( INIT, ">init_file.txt");
|
||||
print INIT "abcd\n";
|
||||
close( INIT );
|
||||
--write_file init_file.txt
|
||||
abcd
|
||||
EOF
|
||||
|
||||
CREATE TABLE t1
|
||||
|
|
|
@ -5,11 +5,108 @@
|
|||
-- source include/have_partition.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
|
||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#50036: Inconsistent errors when using TIMESTAMP
|
||||
--echo # columns/expressions
|
||||
|
||||
--echo # 1. correct and appropriate errors in light of
|
||||
--echo # the fix for BUG#42849:
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY RANGE (TO_DAYS(c))
|
||||
(PARTITION p0 VALUES LESS THAN (10000),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
CREATE TABLE t2 (c TIMESTAMP);
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE t2
|
||||
PARTITION BY RANGE (TO_DAYS(c))
|
||||
(PARTITION p0 VALUES LESS THAN (10000),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
|
||||
--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY RANGE COLUMNS(c)
|
||||
(PARTITION p0 VALUES LESS THAN ('2000-01-01 00:00:00'),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
|
||||
ALTER TABLE t2 PARTITION BY RANGE COLUMNS(c)
|
||||
(PARTITION p0 VALUES LESS THAN ('2000-01-01 00:00:00'),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
DROP TABLE t2;
|
||||
|
||||
--echo # 2. These errors where questionable before the fix:
|
||||
|
||||
--echo # VALUES clause are checked first, clearified the error message.
|
||||
--error ER_VALUES_IS_NOT_INT_TYPE_ERROR
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY RANGE (c)
|
||||
(PARTITION p0 VALUES LESS THAN ('2000-01-01 00:00:00'),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
|
||||
--echo # TIMESTAMP is not INT (e.g. UNIX_TIMESTAMP).
|
||||
--error ER_VALUES_IS_NOT_INT_TYPE_ERROR
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(c))
|
||||
(PARTITION p0 VALUES LESS THAN ('2000-01-01 00:00:00'),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY RANGE (UNIX_TIMESTAMP(c))
|
||||
(PARTITION p0 VALUES LESS THAN (UNIX_TIMESTAMP('2000-01-01 00:00:00')),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo # Changed error from ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR
|
||||
--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
|
||||
CREATE TABLE t1 (c TIMESTAMP)
|
||||
PARTITION BY HASH (c) PARTITIONS 4;
|
||||
|
||||
--echo # Added test with existing TIMESTAMP partitioning (when it was allowed).
|
||||
|
||||
CREATE TABLE t1 (a TIMESTAMP)
|
||||
PARTITION BY HASH (UNIX_TIMESTAMP(a));
|
||||
INSERT INTO t1 VALUES ('2000-01-02 03:04:05');
|
||||
--sorted_result
|
||||
SELECT * FROM t1;
|
||||
FLUSH TABLES;
|
||||
--echo # replacing t1.frm with TO_DAYS(a) which was allowed earlier.
|
||||
--remove_file $MYSQLD_DATADIR/test/t1.frm
|
||||
--copy_file std_data/parts/t1TIMESTAMP.frm $MYSQLD_DATADIR/test/t1.frm
|
||||
--echo # Disable warnings, since the result would differ when running with
|
||||
--echo # --ps-protocol (only for the 'SELECT * FROM t1' statement).
|
||||
--disable_warnings
|
||||
--sorted_result
|
||||
SELECT * FROM t1;
|
||||
--enable_warnings
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES ('2001-02-03 04:05:06');
|
||||
--sorted_result
|
||||
SELECT * FROM t1;
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE t1
|
||||
PARTITION BY RANGE (TO_DAYS(a))
|
||||
(PARTITION p0 VALUES LESS THAN (10000),
|
||||
PARTITION p1 VALUES LESS THAN (MAXVALUE));
|
||||
SHOW CREATE TABLE t1;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
DROP TABLE t2;
|
||||
ALTER TABLE t1 PARTITION BY HASH (UNIX_TIMESTAMP(a));
|
||||
SHOW CREATE TABLE t1;
|
||||
ALTER TABLE t1 ADD PARTITION PARTITIONS 2;
|
||||
SHOW CREATE TABLE t1;
|
||||
--sorted_result
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#49161: Out of memory; restart server and try again (needed 2 bytes)
|
||||
--echo #
|
||||
|
@ -536,7 +633,7 @@ partitions 2
|
|||
#
|
||||
# Partition by range, inconsistent partition function and constants
|
||||
#
|
||||
--error ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR
|
||||
--error ER_VALUES_IS_NOT_INT_TYPE_ERROR
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
|
@ -849,7 +946,7 @@ partitions 2
|
|||
#
|
||||
# Partition by list, wrong constant result type (not INT)
|
||||
#
|
||||
--error ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR
|
||||
--error ER_VALUES_IS_NOT_INT_TYPE_ERROR
|
||||
CREATE TABLE t1 (
|
||||
a int not null,
|
||||
b int not null,
|
||||
|
@ -939,13 +1036,13 @@ PARTITION pmax VALUES LESS THAN MAXVALUE);
|
|||
# Check that allowed arithmetic/math functions involving TIMESTAMP values result
|
||||
# in ER_PARTITION_FUNC_NOT_ALLOWED_ERROR when used as a partitioning function
|
||||
|
||||
--error ER_PARTITION_FUNC_NOT_ALLOWED_ERROR
|
||||
--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
|
||||
CREATE TABLE new (a TIMESTAMP NOT NULL PRIMARY KEY)
|
||||
PARTITION BY RANGE (a) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
--error ER_PARTITION_FUNC_NOT_ALLOWED_ERROR
|
||||
--error ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD
|
||||
ALTER TABLE old
|
||||
PARTITION BY RANGE (a) (
|
||||
PARTITION p VALUES LESS THAN (20080819),
|
||||
|
@ -1284,4 +1381,18 @@ PARTITION pmax VALUES LESS THAN MAXVALUE);
|
|||
|
||||
DROP TABLE old;
|
||||
|
||||
--echo #
|
||||
--echo # Bug #56709: Memory leaks at running the 5.1 test suite
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a TIMESTAMP NOT NULL PRIMARY KEY);
|
||||
|
||||
--error ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR
|
||||
ALTER TABLE t1
|
||||
PARTITION BY RANGE (EXTRACT(DAY FROM a)) (
|
||||
PARTITION p VALUES LESS THAN (18),
|
||||
PARTITION pmax VALUES LESS THAN MAXVALUE);
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
|
|
@ -35,6 +35,19 @@ SELECT @@global.debug;
|
|||
|
||||
SET GLOBAL debug=@old_debug;
|
||||
|
||||
--echo #
|
||||
--echo # Bug #56709: Memory leaks at running the 5.1 test suite
|
||||
--echo #
|
||||
|
||||
SET @old_local_debug = @@debug;
|
||||
|
||||
SET @@debug='d,foo';
|
||||
SELECT @@debug;
|
||||
SET @@debug='';
|
||||
SELECT @@debug;
|
||||
|
||||
SET @@debug = @old_local_debug;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
|
||||
|
|
|
@ -24,7 +24,108 @@
|
|||
#include <process.h>
|
||||
#include <sys/timeb.h>
|
||||
|
||||
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
|
||||
|
||||
/*
|
||||
Windows native condition variables. We use runtime loading / function
|
||||
pointers, because they are not available on XP
|
||||
*/
|
||||
|
||||
/* Prototypes and function pointers for condition variable functions */
|
||||
typedef VOID (WINAPI * InitializeConditionVariableProc)
|
||||
(PCONDITION_VARIABLE ConditionVariable);
|
||||
|
||||
typedef BOOL (WINAPI * SleepConditionVariableCSProc)
|
||||
(PCONDITION_VARIABLE ConditionVariable,
|
||||
PCRITICAL_SECTION CriticalSection,
|
||||
DWORD dwMilliseconds);
|
||||
|
||||
typedef VOID (WINAPI * WakeAllConditionVariableProc)
|
||||
(PCONDITION_VARIABLE ConditionVariable);
|
||||
|
||||
typedef VOID (WINAPI * WakeConditionVariableProc)
|
||||
(PCONDITION_VARIABLE ConditionVariable);
|
||||
|
||||
static InitializeConditionVariableProc my_InitializeConditionVariable;
|
||||
static SleepConditionVariableCSProc my_SleepConditionVariableCS;
|
||||
static WakeAllConditionVariableProc my_WakeAllConditionVariable;
|
||||
static WakeConditionVariableProc my_WakeConditionVariable;
|
||||
|
||||
|
||||
/**
|
||||
Indicates if we have native condition variables,
|
||||
initialized first time pthread_cond_init is called.
|
||||
*/
|
||||
|
||||
static BOOL have_native_conditions= FALSE;
|
||||
|
||||
|
||||
/**
|
||||
Check if native conditions can be used, load function pointers
|
||||
*/
|
||||
|
||||
static void check_native_cond_availability(void)
|
||||
{
|
||||
HMODULE module= GetModuleHandle("kernel32");
|
||||
|
||||
my_InitializeConditionVariable= (InitializeConditionVariableProc)
|
||||
GetProcAddress(module, "InitializeConditionVariable");
|
||||
my_SleepConditionVariableCS= (SleepConditionVariableCSProc)
|
||||
GetProcAddress(module, "SleepConditionVariableCS");
|
||||
my_WakeAllConditionVariable= (WakeAllConditionVariableProc)
|
||||
GetProcAddress(module, "WakeAllConditionVariable");
|
||||
my_WakeConditionVariable= (WakeConditionVariableProc)
|
||||
GetProcAddress(module, "WakeConditionVariable");
|
||||
|
||||
if (my_InitializeConditionVariable)
|
||||
have_native_conditions= TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Convert abstime to milliseconds
|
||||
*/
|
||||
|
||||
static DWORD get_milliseconds(const struct timespec *abstime)
|
||||
{
|
||||
long long millis;
|
||||
union ft64 now;
|
||||
|
||||
if (abstime == NULL)
|
||||
return INFINITE;
|
||||
|
||||
GetSystemTimeAsFileTime(&now.ft);
|
||||
|
||||
/*
|
||||
Calculate time left to abstime
|
||||
- subtract start time from current time(values are in 100ns units)
|
||||
- convert to millisec by dividing with 10000
|
||||
*/
|
||||
millis= (abstime->tv.i64 - now.i64) / 10000;
|
||||
|
||||
/* Don't allow the timeout to be negative */
|
||||
if (millis < 0)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
Make sure the calculated timeout does not exceed original timeout
|
||||
value which could cause "wait for ever" if system time changes
|
||||
*/
|
||||
if (millis > abstime->max_timeout_msec)
|
||||
millis= abstime->max_timeout_msec;
|
||||
|
||||
if (millis > UINT_MAX)
|
||||
millis= UINT_MAX;
|
||||
|
||||
return (DWORD)millis;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Old (pre-vista) implementation using events
|
||||
*/
|
||||
|
||||
static int legacy_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
|
||||
{
|
||||
cond->waiting= 0;
|
||||
InitializeCriticalSection(&cond->lock_waiting);
|
||||
|
@ -53,7 +154,8 @@ int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int pthread_cond_destroy(pthread_cond_t *cond)
|
||||
|
||||
static int legacy_cond_destroy(pthread_cond_t *cond)
|
||||
{
|
||||
DeleteCriticalSection(&cond->lock_waiting);
|
||||
|
||||
|
@ -65,48 +167,13 @@ int pthread_cond_destroy(pthread_cond_t *cond)
|
|||
}
|
||||
|
||||
|
||||
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
|
||||
{
|
||||
return pthread_cond_timedwait(cond,mutex,NULL);
|
||||
}
|
||||
|
||||
|
||||
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
|
||||
static int legacy_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
|
||||
struct timespec *abstime)
|
||||
{
|
||||
int result;
|
||||
long timeout;
|
||||
union ft64 now;
|
||||
|
||||
if( abstime != NULL )
|
||||
{
|
||||
GetSystemTimeAsFileTime(&now.ft);
|
||||
|
||||
/*
|
||||
Calculate time left to abstime
|
||||
- subtract start time from current time(values are in 100ns units)
|
||||
- convert to millisec by dividing with 10000
|
||||
*/
|
||||
timeout= (long)((abstime->tv.i64 - now.i64) / 10000);
|
||||
|
||||
/* Don't allow the timeout to be negative */
|
||||
if (timeout < 0)
|
||||
timeout= 0L;
|
||||
|
||||
/*
|
||||
Make sure the calucated timeout does not exceed original timeout
|
||||
value which could cause "wait for ever" if system time changes
|
||||
*/
|
||||
if (timeout > abstime->max_timeout_msec)
|
||||
timeout= abstime->max_timeout_msec;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
/* No time specified; don't expire */
|
||||
timeout= INFINITE;
|
||||
}
|
||||
DWORD timeout;
|
||||
|
||||
timeout= get_milliseconds(abstime);
|
||||
/*
|
||||
Block access if previous broadcast hasn't finished.
|
||||
This is just for safety and should normally not
|
||||
|
@ -142,7 +209,7 @@ int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
|
|||
return result == WAIT_TIMEOUT ? ETIMEDOUT : 0;
|
||||
}
|
||||
|
||||
int pthread_cond_signal(pthread_cond_t *cond)
|
||||
static int legacy_cond_signal(pthread_cond_t *cond)
|
||||
{
|
||||
EnterCriticalSection(&cond->lock_waiting);
|
||||
|
||||
|
@ -155,7 +222,7 @@ int pthread_cond_signal(pthread_cond_t *cond)
|
|||
}
|
||||
|
||||
|
||||
int pthread_cond_broadcast(pthread_cond_t *cond)
|
||||
static int legacy_cond_broadcast(pthread_cond_t *cond)
|
||||
{
|
||||
EnterCriticalSection(&cond->lock_waiting);
|
||||
/*
|
||||
|
@ -177,6 +244,87 @@ int pthread_cond_broadcast(pthread_cond_t *cond)
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
Posix API functions. Just choose between native and legacy implementation.
|
||||
*/
|
||||
|
||||
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
|
||||
{
|
||||
/*
|
||||
Once initialization is used here rather than in my_init(), to
|
||||
1) avoid my_init() pitfalls- undefined order in which initialization should
|
||||
run
|
||||
2) be potentially useful C++ (in static constructors that run before main())
|
||||
3) just to simplify the API.
|
||||
Also, the overhead of my_pthread_once is very small.
|
||||
*/
|
||||
static my_pthread_once_t once_control= MY_PTHREAD_ONCE_INIT;
|
||||
my_pthread_once(&once_control, check_native_cond_availability);
|
||||
|
||||
if (have_native_conditions)
|
||||
{
|
||||
my_InitializeConditionVariable(&cond->native_cond);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return legacy_cond_init(cond, attr);
|
||||
}
|
||||
|
||||
|
||||
int pthread_cond_destroy(pthread_cond_t *cond)
|
||||
{
|
||||
if (have_native_conditions)
|
||||
return 0; /* no destroy function */
|
||||
else
|
||||
return legacy_cond_destroy(cond);
|
||||
}
|
||||
|
||||
|
||||
int pthread_cond_broadcast(pthread_cond_t *cond)
|
||||
{
|
||||
if (have_native_conditions)
|
||||
{
|
||||
my_WakeAllConditionVariable(&cond->native_cond);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return legacy_cond_broadcast(cond);
|
||||
}
|
||||
|
||||
|
||||
int pthread_cond_signal(pthread_cond_t *cond)
|
||||
{
|
||||
if (have_native_conditions)
|
||||
{
|
||||
my_WakeConditionVariable(&cond->native_cond);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return legacy_cond_signal(cond);
|
||||
}
|
||||
|
||||
|
||||
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
|
||||
struct timespec *abstime)
|
||||
{
|
||||
if (have_native_conditions)
|
||||
{
|
||||
DWORD timeout= get_milliseconds(abstime);
|
||||
if (!my_SleepConditionVariableCS(&cond->native_cond, mutex, timeout))
|
||||
return ETIMEDOUT;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return legacy_cond_timedwait(cond, mutex, abstime);
|
||||
}
|
||||
|
||||
|
||||
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
|
||||
{
|
||||
return pthread_cond_timedwait(cond, mutex, NULL);
|
||||
}
|
||||
|
||||
|
||||
int pthread_attr_init(pthread_attr_t *connect_att)
|
||||
{
|
||||
connect_att->dwStackSize = 0;
|
||||
|
|
|
@ -155,8 +155,19 @@ int pthread_cancel(pthread_t thread)
|
|||
int my_pthread_once(my_pthread_once_t *once_control,
|
||||
void (*init_routine)(void))
|
||||
{
|
||||
LONG state= InterlockedCompareExchange(once_control, MY_PTHREAD_ONCE_INPROGRESS,
|
||||
MY_PTHREAD_ONCE_INIT);
|
||||
LONG state;
|
||||
|
||||
/*
|
||||
Do "dirty" read to find out if initialization is already done, to
|
||||
save an interlocked operation in common case. Memory barriers are ensured by
|
||||
Visual C++ volatile implementation.
|
||||
*/
|
||||
if (*once_control == MY_PTHREAD_ONCE_DONE)
|
||||
return 0;
|
||||
|
||||
state= InterlockedCompareExchange(once_control, MY_PTHREAD_ONCE_INPROGRESS,
|
||||
MY_PTHREAD_ONCE_INIT);
|
||||
|
||||
switch(state)
|
||||
{
|
||||
case MY_PTHREAD_ONCE_INIT:
|
||||
|
|
|
@ -20,6 +20,119 @@
|
|||
#if defined(NEED_MY_RW_LOCK)
|
||||
#include <errno.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
static BOOL have_srwlock= FALSE;
|
||||
/* Prototypes and function pointers for windows functions */
|
||||
typedef VOID (WINAPI* srw_func) (PSRWLOCK SRWLock);
|
||||
typedef BOOL (WINAPI* srw_bool_func) (PSRWLOCK SRWLock);
|
||||
|
||||
static srw_func my_InitializeSRWLock;
|
||||
static srw_func my_AcquireSRWLockExclusive;
|
||||
static srw_func my_ReleaseSRWLockExclusive;
|
||||
static srw_func my_AcquireSRWLockShared;
|
||||
static srw_func my_ReleaseSRWLockShared;
|
||||
|
||||
static srw_bool_func my_TryAcquireSRWLockExclusive;
|
||||
static srw_bool_func my_TryAcquireSRWLockShared;
|
||||
|
||||
/**
|
||||
Check for presence of Windows slim reader writer lock function.
|
||||
Load function pointers.
|
||||
*/
|
||||
|
||||
static void check_srwlock_availability(void)
|
||||
{
|
||||
HMODULE module= GetModuleHandle("kernel32");
|
||||
|
||||
my_InitializeSRWLock= (srw_func) GetProcAddress(module,
|
||||
"InitializeSRWLock");
|
||||
my_AcquireSRWLockExclusive= (srw_func) GetProcAddress(module,
|
||||
"AcquireSRWLockExclusive");
|
||||
my_AcquireSRWLockShared= (srw_func) GetProcAddress(module,
|
||||
"AcquireSRWLockShared");
|
||||
my_ReleaseSRWLockExclusive= (srw_func) GetProcAddress(module,
|
||||
"ReleaseSRWLockExclusive");
|
||||
my_ReleaseSRWLockShared= (srw_func) GetProcAddress(module,
|
||||
"ReleaseSRWLockShared");
|
||||
my_TryAcquireSRWLockExclusive= (srw_bool_func) GetProcAddress(module,
|
||||
"TryAcquireSRWLockExclusive");
|
||||
my_TryAcquireSRWLockShared= (srw_bool_func) GetProcAddress(module,
|
||||
"TryAcquireSRWLockShared");
|
||||
|
||||
/*
|
||||
We currently require TryAcquireSRWLockExclusive. This API is missing on
|
||||
Vista, this means SRWLock are only used starting with Win7.
|
||||
|
||||
If "trylock" usage for rwlocks is eliminated from server codebase (it is used
|
||||
in a single place currently, in query cache), then SRWLock can be enabled on
|
||||
Vista too. In this case condition below needs to be changed to e.g check
|
||||
for my_InitializeSRWLock.
|
||||
*/
|
||||
|
||||
if (my_TryAcquireSRWLockExclusive)
|
||||
have_srwlock= TRUE;
|
||||
|
||||
}
|
||||
|
||||
|
||||
static int srw_init(my_rw_lock_t *rwp)
|
||||
{
|
||||
my_InitializeSRWLock(&rwp->srwlock);
|
||||
rwp->have_exclusive_srwlock = FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int srw_rdlock(my_rw_lock_t *rwp)
|
||||
{
|
||||
my_AcquireSRWLockShared(&rwp->srwlock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int srw_tryrdlock(my_rw_lock_t *rwp)
|
||||
{
|
||||
|
||||
if (!my_TryAcquireSRWLockShared(&rwp->srwlock))
|
||||
return EBUSY;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int srw_wrlock(my_rw_lock_t *rwp)
|
||||
{
|
||||
my_AcquireSRWLockExclusive(&rwp->srwlock);
|
||||
rwp->have_exclusive_srwlock= TRUE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int srw_trywrlock(my_rw_lock_t *rwp)
|
||||
{
|
||||
if (!my_TryAcquireSRWLockExclusive(&rwp->srwlock))
|
||||
return EBUSY;
|
||||
rwp->have_exclusive_srwlock= TRUE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int srw_unlock(my_rw_lock_t *rwp)
|
||||
{
|
||||
if (rwp->have_exclusive_srwlock)
|
||||
{
|
||||
rwp->have_exclusive_srwlock= FALSE;
|
||||
my_ReleaseSRWLockExclusive(&rwp->srwlock);
|
||||
}
|
||||
else
|
||||
{
|
||||
my_ReleaseSRWLockShared(&rwp->srwlock);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /*_WIN32 */
|
||||
|
||||
/*
|
||||
Source base from Sun Microsystems SPILT, simplified for MySQL use
|
||||
-- Joshua Chamas
|
||||
|
@ -63,6 +176,22 @@ int my_rw_init(my_rw_lock_t *rwp)
|
|||
{
|
||||
pthread_condattr_t cond_attr;
|
||||
|
||||
#ifdef _WIN32
|
||||
/*
|
||||
Once initialization is used here rather than in my_init(), in order to
|
||||
- avoid my_init() pitfalls- (undefined order in which initialization should
|
||||
run)
|
||||
- be potentially useful C++ (static constructors)
|
||||
- just to simplify the API.
|
||||
Also, the overhead is of my_pthread_once is very small.
|
||||
*/
|
||||
static my_pthread_once_t once_control= MY_PTHREAD_ONCE_INIT;
|
||||
my_pthread_once(&once_control, check_srwlock_availability);
|
||||
|
||||
if (have_srwlock)
|
||||
return srw_init(rwp);
|
||||
#endif
|
||||
|
||||
pthread_mutex_init( &rwp->lock, MY_MUTEX_INIT_FAST);
|
||||
pthread_condattr_init( &cond_attr );
|
||||
pthread_cond_init( &rwp->readers, &cond_attr );
|
||||
|
@ -81,6 +210,10 @@ int my_rw_init(my_rw_lock_t *rwp)
|
|||
|
||||
int my_rw_destroy(my_rw_lock_t *rwp)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
if (have_srwlock)
|
||||
return 0; /* no destroy function */
|
||||
#endif
|
||||
DBUG_ASSERT(rwp->state == 0);
|
||||
pthread_mutex_destroy( &rwp->lock );
|
||||
pthread_cond_destroy( &rwp->readers );
|
||||
|
@ -91,6 +224,11 @@ int my_rw_destroy(my_rw_lock_t *rwp)
|
|||
|
||||
int my_rw_rdlock(my_rw_lock_t *rwp)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
if (have_srwlock)
|
||||
return srw_rdlock(rwp);
|
||||
#endif
|
||||
|
||||
pthread_mutex_lock(&rwp->lock);
|
||||
|
||||
/* active or queued writers */
|
||||
|
@ -105,6 +243,12 @@ int my_rw_rdlock(my_rw_lock_t *rwp)
|
|||
int my_rw_tryrdlock(my_rw_lock_t *rwp)
|
||||
{
|
||||
int res;
|
||||
|
||||
#ifdef _WIN32
|
||||
if (have_srwlock)
|
||||
return srw_tryrdlock(rwp);
|
||||
#endif
|
||||
|
||||
pthread_mutex_lock(&rwp->lock);
|
||||
if ((rwp->state < 0 ) || rwp->waiters)
|
||||
res= EBUSY; /* Can't get lock */
|
||||
|
@ -120,6 +264,11 @@ int my_rw_tryrdlock(my_rw_lock_t *rwp)
|
|||
|
||||
int my_rw_wrlock(my_rw_lock_t *rwp)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
if (have_srwlock)
|
||||
return srw_wrlock(rwp);
|
||||
#endif
|
||||
|
||||
pthread_mutex_lock(&rwp->lock);
|
||||
rwp->waiters++; /* another writer queued */
|
||||
|
||||
|
@ -140,6 +289,12 @@ int my_rw_wrlock(my_rw_lock_t *rwp)
|
|||
int my_rw_trywrlock(my_rw_lock_t *rwp)
|
||||
{
|
||||
int res;
|
||||
|
||||
#ifdef _WIN32
|
||||
if (have_srwlock)
|
||||
return srw_trywrlock(rwp);
|
||||
#endif
|
||||
|
||||
pthread_mutex_lock(&rwp->lock);
|
||||
if (rwp->state)
|
||||
res= EBUSY; /* Can't get lock */
|
||||
|
@ -158,6 +313,11 @@ int my_rw_trywrlock(my_rw_lock_t *rwp)
|
|||
|
||||
int my_rw_unlock(my_rw_lock_t *rwp)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
if (have_srwlock)
|
||||
return srw_unlock(rwp);
|
||||
#endif
|
||||
|
||||
DBUG_PRINT("rw_unlock",
|
||||
("state: %d waiters: %d", rwp->state, rwp->waiters));
|
||||
pthread_mutex_lock(&rwp->lock);
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
# Copyright (C) 2000-2003, 2005 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
|
||||
|
||||
#
|
||||
# As pstack doesn't work on all configurations, we have to use
|
||||
# the USE_PSTACK hack to get all files into distribution
|
||||
#
|
||||
|
||||
SUBDIRS = aout
|
||||
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
|
||||
|
||||
pkglib_LIBRARIES = libpstack.a
|
||||
libpstack_a_SOURCES = bucomm.c filemode.c linuxthreads.c rddbg.c \
|
||||
debug.c ieee.c pstack.c stabs.c
|
||||
noinst_HEADERS = bucomm.h debug.h ieee.h budbg.h demangle.h \
|
||||
linuxthreads.h pstack.h pstacktrace.h
|
|
@ -1 +0,0 @@
|
|||
noinst_HEADERS = aout64.h stab.def stab_gnu.h
|
|
@ -1,475 +0,0 @@
|
|||
/* `a.out' object-file definitions, including extensions to 64-bit fields */
|
||||
|
||||
#ifndef __A_OUT_64_H__
|
||||
#define __A_OUT_64_H__
|
||||
|
||||
/* This is the layout on disk of the 32-bit or 64-bit exec header. */
|
||||
|
||||
#ifndef external_exec
|
||||
struct external_exec
|
||||
{
|
||||
bfd_byte e_info[4]; /* magic number and stuff */
|
||||
bfd_byte e_text[BYTES_IN_WORD]; /* length of text section in bytes */
|
||||
bfd_byte e_data[BYTES_IN_WORD]; /* length of data section in bytes */
|
||||
bfd_byte e_bss[BYTES_IN_WORD]; /* length of bss area in bytes */
|
||||
bfd_byte e_syms[BYTES_IN_WORD]; /* length of symbol table in bytes */
|
||||
bfd_byte e_entry[BYTES_IN_WORD]; /* start address */
|
||||
bfd_byte e_trsize[BYTES_IN_WORD]; /* length of text relocation info */
|
||||
bfd_byte e_drsize[BYTES_IN_WORD]; /* length of data relocation info */
|
||||
};
|
||||
|
||||
#define EXEC_BYTES_SIZE (4 + BYTES_IN_WORD * 7)
|
||||
|
||||
/* Magic numbers for a.out files */
|
||||
|
||||
#if ARCH_SIZE==64
|
||||
#define OMAGIC 0x1001 /* Code indicating object file */
|
||||
#define ZMAGIC 0x1002 /* Code indicating demand-paged executable. */
|
||||
#define NMAGIC 0x1003 /* Code indicating pure executable. */
|
||||
|
||||
/* There is no 64-bit QMAGIC as far as I know. */
|
||||
|
||||
#define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \
|
||||
&& N_MAGIC(x) != NMAGIC \
|
||||
&& N_MAGIC(x) != ZMAGIC)
|
||||
#else
|
||||
#define OMAGIC 0407 /* ...object file or impure executable. */
|
||||
#define NMAGIC 0410 /* Code indicating pure executable. */
|
||||
#define ZMAGIC 0413 /* Code indicating demand-paged executable. */
|
||||
#define BMAGIC 0415 /* Used by a b.out object. */
|
||||
|
||||
/* This indicates a demand-paged executable with the header in the text.
|
||||
It is used by 386BSD (and variants) and Linux, at least. */
|
||||
#ifndef QMAGIC
|
||||
#define QMAGIC 0314
|
||||
#endif
|
||||
# ifndef N_BADMAG
|
||||
# define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \
|
||||
&& N_MAGIC(x) != NMAGIC \
|
||||
&& N_MAGIC(x) != ZMAGIC \
|
||||
&& N_MAGIC(x) != QMAGIC)
|
||||
# endif /* N_BADMAG */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef QMAGIC
|
||||
#define N_IS_QMAGIC(x) (N_MAGIC (x) == QMAGIC)
|
||||
#else
|
||||
#define N_IS_QMAGIC(x) (0)
|
||||
#endif
|
||||
|
||||
/* The difference between TARGET_PAGE_SIZE and N_SEGSIZE is that TARGET_PAGE_SIZE is
|
||||
the finest granularity at which you can page something, thus it
|
||||
controls the padding (if any) before the text segment of a ZMAGIC
|
||||
file. N_SEGSIZE is the resolution at which things can be marked as
|
||||
read-only versus read/write, so it controls the padding between the
|
||||
text segment and the data segment (in memory; on disk the padding
|
||||
between them is TARGET_PAGE_SIZE). TARGET_PAGE_SIZE and N_SEGSIZE are the same
|
||||
for most machines, but different for sun3. */
|
||||
|
||||
/* By default, segment size is constant. But some machines override this
|
||||
to be a function of the a.out header (e.g. machine type). */
|
||||
|
||||
#ifndef N_SEGSIZE
|
||||
#define N_SEGSIZE(x) SEGMENT_SIZE
|
||||
#endif
|
||||
|
||||
/* Virtual memory address of the text section.
|
||||
This is getting very complicated. A good reason to discard a.out format
|
||||
for something that specifies these fields explicitly. But til then...
|
||||
|
||||
* OMAGIC and NMAGIC files:
|
||||
(object files: text for "relocatable addr 0" right after the header)
|
||||
start at 0, offset is EXEC_BYTES_SIZE, size as stated.
|
||||
* The text address, offset, and size of ZMAGIC files depend
|
||||
on the entry point of the file:
|
||||
* entry point below TEXT_START_ADDR:
|
||||
(hack for SunOS shared libraries)
|
||||
start at 0, offset is 0, size as stated.
|
||||
* If N_HEADER_IN_TEXT(x) is true (which defaults to being the
|
||||
case when the entry point is EXEC_BYTES_SIZE or further into a page):
|
||||
no padding is needed; text can start after exec header. Sun
|
||||
considers the text segment of such files to include the exec header;
|
||||
for BFD's purposes, we don't, which makes more work for us.
|
||||
start at TEXT_START_ADDR + EXEC_BYTES_SIZE, offset is EXEC_BYTES_SIZE,
|
||||
size as stated minus EXEC_BYTES_SIZE.
|
||||
* If N_HEADER_IN_TEXT(x) is false (which defaults to being the case when
|
||||
the entry point is less than EXEC_BYTES_SIZE into a page (e.g. page
|
||||
aligned)): (padding is needed so that text can start at a page boundary)
|
||||
start at TEXT_START_ADDR, offset TARGET_PAGE_SIZE, size as stated.
|
||||
|
||||
Specific configurations may want to hardwire N_HEADER_IN_TEXT,
|
||||
for efficiency or to allow people to play games with the entry point.
|
||||
In that case, you would #define N_HEADER_IN_TEXT(x) as 1 for sunos,
|
||||
and as 0 for most other hosts (Sony News, Vax Ultrix, etc).
|
||||
(Do this in the appropriate bfd target file.)
|
||||
(The default is a heuristic that will break if people try changing
|
||||
the entry point, perhaps with the ld -e flag.)
|
||||
|
||||
* QMAGIC is always like a ZMAGIC for which N_HEADER_IN_TEXT is true,
|
||||
and for which the starting address is TARGET_PAGE_SIZE (or should this be
|
||||
SEGMENT_SIZE?) (TEXT_START_ADDR only applies to ZMAGIC, not to QMAGIC).
|
||||
*/
|
||||
|
||||
/* This macro is only relevant for ZMAGIC files; QMAGIC always has the header
|
||||
in the text. */
|
||||
#ifndef N_HEADER_IN_TEXT
|
||||
#define N_HEADER_IN_TEXT(x) (((x).a_entry & (TARGET_PAGE_SIZE-1)) >= EXEC_BYTES_SIZE)
|
||||
#endif
|
||||
|
||||
/* Sun shared libraries, not linux. This macro is only relevant for ZMAGIC
|
||||
files. */
|
||||
#ifndef N_SHARED_LIB
|
||||
#define N_SHARED_LIB(x) ((x).a_entry < TEXT_START_ADDR)
|
||||
#endif
|
||||
|
||||
/* Returning 0 not TEXT_START_ADDR for OMAGIC and NMAGIC is based on
|
||||
the assumption that we are dealing with a .o file, not an
|
||||
executable. This is necessary for OMAGIC (but means we don't work
|
||||
right on the output from ld -N); more questionable for NMAGIC. */
|
||||
|
||||
#ifndef N_TXTADDR
|
||||
#define N_TXTADDR(x) \
|
||||
(/* The address of a QMAGIC file is always one page in, */ \
|
||||
/* with the header in the text. */ \
|
||||
N_IS_QMAGIC (x) ? TARGET_PAGE_SIZE + EXEC_BYTES_SIZE : \
|
||||
N_MAGIC(x) != ZMAGIC ? 0 : /* object file or NMAGIC */\
|
||||
N_SHARED_LIB(x) ? 0 : \
|
||||
N_HEADER_IN_TEXT(x) ? \
|
||||
TEXT_START_ADDR + EXEC_BYTES_SIZE : /* no padding */\
|
||||
TEXT_START_ADDR /* a page of padding */\
|
||||
)
|
||||
#endif
|
||||
|
||||
/* If N_HEADER_IN_TEXT is not true for ZMAGIC, there is some padding
|
||||
to make the text segment start at a certain boundary. For most
|
||||
systems, this boundary is TARGET_PAGE_SIZE. But for Linux, in the
|
||||
time-honored tradition of crazy ZMAGIC hacks, it is 1024 which is
|
||||
not what TARGET_PAGE_SIZE needs to be for QMAGIC. */
|
||||
|
||||
#ifndef ZMAGIC_DISK_BLOCK_SIZE
|
||||
#define ZMAGIC_DISK_BLOCK_SIZE TARGET_PAGE_SIZE
|
||||
#endif
|
||||
|
||||
#define N_DISK_BLOCK_SIZE(x) \
|
||||
(N_MAGIC(x) == ZMAGIC ? ZMAGIC_DISK_BLOCK_SIZE : TARGET_PAGE_SIZE)
|
||||
|
||||
/* Offset in an a.out of the start of the text section. */
|
||||
#ifndef N_TXTOFF
|
||||
#define N_TXTOFF(x) \
|
||||
(/* For {O,N,Q}MAGIC, no padding. */ \
|
||||
N_MAGIC(x) != ZMAGIC ? EXEC_BYTES_SIZE : \
|
||||
N_SHARED_LIB(x) ? 0 : \
|
||||
N_HEADER_IN_TEXT(x) ? \
|
||||
EXEC_BYTES_SIZE : /* no padding */\
|
||||
ZMAGIC_DISK_BLOCK_SIZE /* a page of padding */\
|
||||
)
|
||||
#endif
|
||||
/* Size of the text section. It's always as stated, except that we
|
||||
offset it to `undo' the adjustment to N_TXTADDR and N_TXTOFF
|
||||
for ZMAGIC files that nominally include the exec header
|
||||
as part of the first page of text. (BFD doesn't consider the
|
||||
exec header to be part of the text segment.) */
|
||||
#ifndef N_TXTSIZE
|
||||
#define N_TXTSIZE(x) \
|
||||
(/* For QMAGIC, we don't consider the header part of the text section. */\
|
||||
N_IS_QMAGIC (x) ? (x).a_text - EXEC_BYTES_SIZE : \
|
||||
(N_MAGIC(x) != ZMAGIC || N_SHARED_LIB(x)) ? (x).a_text : \
|
||||
N_HEADER_IN_TEXT(x) ? \
|
||||
(x).a_text - EXEC_BYTES_SIZE: /* no padding */\
|
||||
(x).a_text /* a page of padding */\
|
||||
)
|
||||
#endif
|
||||
/* The address of the data segment in virtual memory.
|
||||
It is the text segment address, plus text segment size, rounded
|
||||
up to a N_SEGSIZE boundary for pure or pageable files. */
|
||||
#ifndef N_DATADDR
|
||||
#define N_DATADDR(x) \
|
||||
(N_MAGIC(x)==OMAGIC? (N_TXTADDR(x)+N_TXTSIZE(x)) \
|
||||
: (N_SEGSIZE(x) + ((N_TXTADDR(x)+N_TXTSIZE(x)-1) & ~(N_SEGSIZE(x)-1))))
|
||||
#endif
|
||||
/* The address of the BSS segment -- immediately after the data segment. */
|
||||
|
||||
#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data)
|
||||
|
||||
/* Offsets of the various portions of the file after the text segment. */
|
||||
|
||||
/* For {Q,Z}MAGIC, there is padding to make the data segment start on
|
||||
a page boundary. Most of the time the a_text field (and thus
|
||||
N_TXTSIZE) already contains this padding. It is possible that for
|
||||
BSDI and/or 386BSD it sometimes doesn't contain the padding, and
|
||||
perhaps we should be adding it here. But this seems kind of
|
||||
questionable and probably should be BSDI/386BSD-specific if we do
|
||||
do it.
|
||||
|
||||
For NMAGIC (at least for hp300 BSD, probably others), there is
|
||||
padding in memory only, not on disk, so we must *not* ever pad here
|
||||
for NMAGIC. */
|
||||
|
||||
#ifndef N_DATOFF
|
||||
#define N_DATOFF(x) \
|
||||
(N_TXTOFF(x) + N_TXTSIZE(x))
|
||||
#endif
|
||||
|
||||
#ifndef N_TRELOFF
|
||||
#define N_TRELOFF(x) ( N_DATOFF(x) + (x).a_data )
|
||||
#endif
|
||||
#ifndef N_DRELOFF
|
||||
#define N_DRELOFF(x) ( N_TRELOFF(x) + (x).a_trsize )
|
||||
#endif
|
||||
#ifndef N_SYMOFF
|
||||
#define N_SYMOFF(x) ( N_DRELOFF(x) + (x).a_drsize )
|
||||
#endif
|
||||
#ifndef N_STROFF
|
||||
#define N_STROFF(x) ( N_SYMOFF(x) + (x).a_syms )
|
||||
#endif
|
||||
|
||||
/* Symbols */
|
||||
#ifndef external_nlist
|
||||
struct external_nlist {
|
||||
bfd_byte e_strx[BYTES_IN_WORD]; /* index into string table of name */
|
||||
bfd_byte e_type[1]; /* type of symbol */
|
||||
bfd_byte e_other[1]; /* misc info (usually empty) */
|
||||
bfd_byte e_desc[2]; /* description field */
|
||||
bfd_byte e_value[BYTES_IN_WORD]; /* value of symbol */
|
||||
};
|
||||
#define EXTERNAL_NLIST_SIZE (BYTES_IN_WORD+4+BYTES_IN_WORD)
|
||||
#endif
|
||||
|
||||
struct internal_nlist {
|
||||
unsigned long n_strx; /* index into string table of name */
|
||||
unsigned char n_type; /* type of symbol */
|
||||
unsigned char n_other; /* misc info (usually empty) */
|
||||
unsigned short n_desc; /* description field */
|
||||
bfd_vma n_value; /* value of symbol */
|
||||
};
|
||||
|
||||
/* The n_type field is the symbol type, containing: */
|
||||
|
||||
#define N_UNDF 0 /* Undefined symbol */
|
||||
#define N_ABS 2 /* Absolute symbol -- defined at particular addr */
|
||||
#define N_TEXT 4 /* Text sym -- defined at offset in text seg */
|
||||
#define N_DATA 6 /* Data sym -- defined at offset in data seg */
|
||||
#define N_BSS 8 /* BSS sym -- defined at offset in zero'd seg */
|
||||
#define N_COMM 0x12 /* Common symbol (visible after shared lib dynlink) */
|
||||
#define N_FN 0x1f /* File name of .o file */
|
||||
#define N_FN_SEQ 0x0C /* N_FN from Sequent compilers (sigh) */
|
||||
/* Note: N_EXT can only be usefully OR-ed with N_UNDF, N_ABS, N_TEXT,
|
||||
N_DATA, or N_BSS. When the low-order bit of other types is set,
|
||||
(e.g. N_WARNING versus N_FN), they are two different types. */
|
||||
#define N_EXT 1 /* External symbol (as opposed to local-to-this-file) */
|
||||
#define N_TYPE 0x1e
|
||||
#define N_STAB 0xe0 /* If any of these bits are on, it's a debug symbol */
|
||||
|
||||
#define N_INDR 0x0a
|
||||
|
||||
/* The following symbols refer to set elements.
|
||||
All the N_SET[ATDB] symbols with the same name form one set.
|
||||
Space is allocated for the set in the text section, and each set
|
||||
elements value is stored into one word of the space.
|
||||
The first word of the space is the length of the set (number of elements).
|
||||
|
||||
The address of the set is made into an N_SETV symbol
|
||||
whose name is the same as the name of the set.
|
||||
This symbol acts like a N_DATA global symbol
|
||||
in that it can satisfy undefined external references. */
|
||||
|
||||
/* These appear as input to LD, in a .o file. */
|
||||
#define N_SETA 0x14 /* Absolute set element symbol */
|
||||
#define N_SETT 0x16 /* Text set element symbol */
|
||||
#define N_SETD 0x18 /* Data set element symbol */
|
||||
#define N_SETB 0x1A /* Bss set element symbol */
|
||||
|
||||
/* This is output from LD. */
|
||||
#define N_SETV 0x1C /* Pointer to set vector in data area. */
|
||||
|
||||
/* Warning symbol. The text gives a warning message, the next symbol
|
||||
in the table will be undefined. When the symbol is referenced, the
|
||||
message is printed. */
|
||||
|
||||
#define N_WARNING 0x1e
|
||||
|
||||
/* Weak symbols. These are a GNU extension to the a.out format. The
|
||||
semantics are those of ELF weak symbols. Weak symbols are always
|
||||
externally visible. The N_WEAK? values are squeezed into the
|
||||
available slots. The value of a N_WEAKU symbol is 0. The values
|
||||
of the other types are the definitions. */
|
||||
#define N_WEAKU 0x0d /* Weak undefined symbol. */
|
||||
#define N_WEAKA 0x0e /* Weak absolute symbol. */
|
||||
#define N_WEAKT 0x0f /* Weak text symbol. */
|
||||
#define N_WEAKD 0x10 /* Weak data symbol. */
|
||||
#define N_WEAKB 0x11 /* Weak bss symbol. */
|
||||
|
||||
/* Relocations
|
||||
|
||||
There are two types of relocation flavours for a.out systems,
|
||||
standard and extended. The standard form is used on systems where the
|
||||
instruction has room for all the bits of an offset to the operand, whilst
|
||||
the extended form is used when an address operand has to be split over n
|
||||
instructions. Eg, on the 68k, each move instruction can reference
|
||||
the target with a displacement of 16 or 32 bits. On the sparc, move
|
||||
instructions use an offset of 14 bits, so the offset is stored in
|
||||
the reloc field, and the data in the section is ignored.
|
||||
*/
|
||||
|
||||
/* This structure describes a single relocation to be performed.
|
||||
The text-relocation section of the file is a vector of these structures,
|
||||
all of which apply to the text section.
|
||||
Likewise, the data-relocation section applies to the data section. */
|
||||
|
||||
struct reloc_std_external {
|
||||
bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */
|
||||
bfd_byte r_index[3]; /* symbol table index of symbol */
|
||||
bfd_byte r_type[1]; /* relocation type */
|
||||
};
|
||||
|
||||
#define RELOC_STD_BITS_PCREL_BIG ((unsigned int) 0x80)
|
||||
#define RELOC_STD_BITS_PCREL_LITTLE ((unsigned int) 0x01)
|
||||
|
||||
#define RELOC_STD_BITS_LENGTH_BIG ((unsigned int) 0x60)
|
||||
#define RELOC_STD_BITS_LENGTH_SH_BIG 5
|
||||
#define RELOC_STD_BITS_LENGTH_LITTLE ((unsigned int) 0x06)
|
||||
#define RELOC_STD_BITS_LENGTH_SH_LITTLE 1
|
||||
|
||||
#define RELOC_STD_BITS_EXTERN_BIG ((unsigned int) 0x10)
|
||||
#define RELOC_STD_BITS_EXTERN_LITTLE ((unsigned int) 0x08)
|
||||
|
||||
#define RELOC_STD_BITS_BASEREL_BIG ((unsigned int) 0x08)
|
||||
#define RELOC_STD_BITS_BASEREL_LITTLE ((unsigned int) 0x10)
|
||||
|
||||
#define RELOC_STD_BITS_JMPTABLE_BIG ((unsigned int) 0x04)
|
||||
#define RELOC_STD_BITS_JMPTABLE_LITTLE ((unsigned int) 0x20)
|
||||
|
||||
#define RELOC_STD_BITS_RELATIVE_BIG ((unsigned int) 0x02)
|
||||
#define RELOC_STD_BITS_RELATIVE_LITTLE ((unsigned int) 0x40)
|
||||
|
||||
#define RELOC_STD_SIZE (BYTES_IN_WORD + 3 + 1) /* Bytes per relocation entry */
|
||||
|
||||
struct reloc_std_internal
|
||||
{
|
||||
bfd_vma r_address; /* Address (within segment) to be relocated. */
|
||||
/* The meaning of r_symbolnum depends on r_extern. */
|
||||
unsigned int r_symbolnum:24;
|
||||
/* Nonzero means value is a pc-relative offset
|
||||
and it should be relocated for changes in its own address
|
||||
as well as for changes in the symbol or section specified. */
|
||||
unsigned int r_pcrel:1;
|
||||
/* Length (as exponent of 2) of the field to be relocated.
|
||||
Thus, a value of 2 indicates 1<<2 bytes. */
|
||||
unsigned int r_length:2;
|
||||
/* 1 => relocate with value of symbol.
|
||||
r_symbolnum is the index of the symbol
|
||||
in files the symbol table.
|
||||
0 => relocate with the address of a segment.
|
||||
r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS
|
||||
(the N_EXT bit may be set also, but signifies nothing). */
|
||||
unsigned int r_extern:1;
|
||||
/* The next three bits are for SunOS shared libraries, and seem to
|
||||
be undocumented. */
|
||||
unsigned int r_baserel:1; /* Linkage table relative */
|
||||
unsigned int r_jmptable:1; /* pc-relative to jump table */
|
||||
unsigned int r_relative:1; /* "relative relocation" */
|
||||
/* unused */
|
||||
unsigned int r_pad:1; /* Padding -- set to zero */
|
||||
};
|
||||
|
||||
|
||||
/* EXTENDED RELOCS */
|
||||
|
||||
struct reloc_ext_external {
|
||||
bfd_byte r_address[BYTES_IN_WORD]; /* offset of of data to relocate */
|
||||
bfd_byte r_index[3]; /* symbol table index of symbol */
|
||||
bfd_byte r_type[1]; /* relocation type */
|
||||
bfd_byte r_addend[BYTES_IN_WORD]; /* datum addend */
|
||||
};
|
||||
|
||||
#define RELOC_EXT_BITS_EXTERN_BIG ((unsigned int) 0x80)
|
||||
#define RELOC_EXT_BITS_EXTERN_LITTLE ((unsigned int) 0x01)
|
||||
|
||||
#define RELOC_EXT_BITS_TYPE_BIG ((unsigned int) 0x1F)
|
||||
#define RELOC_EXT_BITS_TYPE_SH_BIG 0
|
||||
#define RELOC_EXT_BITS_TYPE_LITTLE ((unsigned int) 0xF8)
|
||||
#define RELOC_EXT_BITS_TYPE_SH_LITTLE 3
|
||||
|
||||
/* Bytes per relocation entry */
|
||||
#define RELOC_EXT_SIZE (BYTES_IN_WORD + 3 + 1 + BYTES_IN_WORD)
|
||||
|
||||
enum reloc_type
|
||||
{
|
||||
/* simple relocations */
|
||||
RELOC_8, /* data[0:7] = addend + sv */
|
||||
RELOC_16, /* data[0:15] = addend + sv */
|
||||
RELOC_32, /* data[0:31] = addend + sv */
|
||||
/* pc-rel displacement */
|
||||
RELOC_DISP8, /* data[0:7] = addend - pc + sv */
|
||||
RELOC_DISP16, /* data[0:15] = addend - pc + sv */
|
||||
RELOC_DISP32, /* data[0:31] = addend - pc + sv */
|
||||
/* Special */
|
||||
RELOC_WDISP30, /* data[0:29] = (addend + sv - pc)>>2 */
|
||||
RELOC_WDISP22, /* data[0:21] = (addend + sv - pc)>>2 */
|
||||
RELOC_HI22, /* data[0:21] = (addend + sv)>>10 */
|
||||
RELOC_22, /* data[0:21] = (addend + sv) */
|
||||
RELOC_13, /* data[0:12] = (addend + sv) */
|
||||
RELOC_LO10, /* data[0:9] = (addend + sv) */
|
||||
RELOC_SFA_BASE,
|
||||
RELOC_SFA_OFF13,
|
||||
/* P.I.C. (base-relative) */
|
||||
RELOC_BASE10, /* Not sure - maybe we can do this the */
|
||||
RELOC_BASE13, /* right way now */
|
||||
RELOC_BASE22,
|
||||
/* for some sort of pc-rel P.I.C. (?) */
|
||||
RELOC_PC10,
|
||||
RELOC_PC22,
|
||||
/* P.I.C. jump table */
|
||||
RELOC_JMP_TBL,
|
||||
/* reputedly for shared libraries somehow */
|
||||
RELOC_SEGOFF16,
|
||||
RELOC_GLOB_DAT,
|
||||
RELOC_JMP_SLOT,
|
||||
RELOC_RELATIVE,
|
||||
|
||||
RELOC_11,
|
||||
RELOC_WDISP2_14,
|
||||
RELOC_WDISP19,
|
||||
RELOC_HHI22, /* data[0:21] = (addend + sv) >> 42 */
|
||||
RELOC_HLO10, /* data[0:9] = (addend + sv) >> 32 */
|
||||
|
||||
/* 29K relocation types */
|
||||
RELOC_JUMPTARG,
|
||||
RELOC_CONST,
|
||||
RELOC_CONSTH,
|
||||
|
||||
/* All the new ones I can think of, for sparc v9 */
|
||||
|
||||
RELOC_64, /* data[0:63] = addend + sv */
|
||||
RELOC_DISP64, /* data[0:63] = addend - pc + sv */
|
||||
RELOC_WDISP21, /* data[0:20] = (addend + sv - pc)>>2 */
|
||||
RELOC_DISP21, /* data[0:20] = addend - pc + sv */
|
||||
RELOC_DISP14, /* data[0:13] = addend - pc + sv */
|
||||
/* Q .
|
||||
What are the other ones,
|
||||
Since this is a clean slate, can we throw away the ones we dont
|
||||
understand ? Should we sort the values ? What about using a
|
||||
microcode format like the 68k ?
|
||||
*/
|
||||
NO_RELOC
|
||||
};
|
||||
|
||||
|
||||
struct reloc_internal {
|
||||
bfd_vma r_address; /* offset of of data to relocate */
|
||||
long r_index; /* symbol table index of symbol */
|
||||
enum reloc_type r_type; /* relocation type */
|
||||
bfd_vma r_addend; /* datum addend */
|
||||
};
|
||||
|
||||
/* Q.
|
||||
Should the length of the string table be 4 bytes or 8 bytes ?
|
||||
|
||||
Q.
|
||||
What about archive indexes ?
|
||||
|
||||
*/
|
||||
|
||||
#endif /* __A_OUT_64_H__ */
|
|
@ -1,264 +0,0 @@
|
|||
/* Table of DBX symbol codes for the GNU system.
|
||||
Copyright (C) 1988, 91, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
||||
|
||||
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; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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. */
|
||||
|
||||
/* New stab from Solaris 2. This uses an n_type of 0, which in a.out files
|
||||
overlaps the N_UNDF used for ordinary symbols. In ELF files, the
|
||||
debug information is in a different file section, so there is no conflict.
|
||||
This symbol's n_value gives the size of the string section associated
|
||||
with this file. The symbol's n_strx (relative to the just-updated
|
||||
string section start address) gives the name of the source file,
|
||||
e.g. "foo.c", without any path information. The symbol's n_desc gives
|
||||
the count of upcoming symbols associated with this file (not including
|
||||
this one). */
|
||||
/* __define_stab (N_UNDF, 0x00, "UNDF") */
|
||||
|
||||
/* Global variable. Only the name is significant.
|
||||
To find the address, look in the corresponding external symbol. */
|
||||
__define_stab (N_GSYM, 0x20, "GSYM")
|
||||
|
||||
/* Function name for BSD Fortran. Only the name is significant.
|
||||
To find the address, look in the corresponding external symbol. */
|
||||
__define_stab (N_FNAME, 0x22, "FNAME")
|
||||
|
||||
/* Function name or text-segment variable for C. Value is its address.
|
||||
Desc is supposedly starting line number, but GCC doesn't set it
|
||||
and DBX seems not to miss it. */
|
||||
__define_stab (N_FUN, 0x24, "FUN")
|
||||
|
||||
/* Data-segment variable with internal linkage. Value is its address.
|
||||
"Static Sym". */
|
||||
__define_stab (N_STSYM, 0x26, "STSYM")
|
||||
|
||||
/* BSS-segment variable with internal linkage. Value is its address. */
|
||||
__define_stab (N_LCSYM, 0x28, "LCSYM")
|
||||
|
||||
/* Name of main routine. Only the name is significant. */
|
||||
__define_stab (N_MAIN, 0x2a, "MAIN")
|
||||
|
||||
/* Solaris2: Read-only data symbols. */
|
||||
__define_stab (N_ROSYM, 0x2c, "ROSYM")
|
||||
|
||||
/* Global symbol in Pascal.
|
||||
Supposedly the value is its line number; I'm skeptical. */
|
||||
__define_stab (N_PC, 0x30, "PC")
|
||||
|
||||
/* Number of symbols: 0, files,,funcs,lines according to Ultrix V4.0. */
|
||||
__define_stab (N_NSYMS, 0x32, "NSYMS")
|
||||
|
||||
/* "No DST map for sym: name, ,0,type,ignored" according to Ultrix V4.0. */
|
||||
__define_stab (N_NOMAP, 0x34, "NOMAP")
|
||||
|
||||
/* New stab from Solaris 2. Like N_SO, but for the object file. Two in
|
||||
a row provide the build directory and the relative path of the .o from it.
|
||||
Solaris2 uses this to avoid putting the stabs info into the linked
|
||||
executable; this stab goes into the ".stab.index" section, and the debugger
|
||||
reads the real stabs directly from the .o files instead. */
|
||||
__define_stab (N_OBJ, 0x38, "OBJ")
|
||||
|
||||
/* New stab from Solaris 2. Options for the debugger, related to the
|
||||
source language for this module. E.g. whether to use ANSI
|
||||
integral promotions or traditional integral promotions. */
|
||||
__define_stab (N_OPT, 0x3c, "OPT")
|
||||
|
||||
/* Register variable. Value is number of register. */
|
||||
__define_stab (N_RSYM, 0x40, "RSYM")
|
||||
|
||||
/* Modula-2 compilation unit. Can someone say what info it contains? */
|
||||
__define_stab (N_M2C, 0x42, "M2C")
|
||||
|
||||
/* Line number in text segment. Desc is the line number;
|
||||
value is corresponding address. On Solaris2, the line number is
|
||||
relative to the start of the current function. */
|
||||
__define_stab (N_SLINE, 0x44, "SLINE")
|
||||
|
||||
/* Similar, for data segment. */
|
||||
__define_stab (N_DSLINE, 0x46, "DSLINE")
|
||||
|
||||
/* Similar, for bss segment. */
|
||||
__define_stab (N_BSLINE, 0x48, "BSLINE")
|
||||
|
||||
/* Sun's source-code browser stabs. ?? Don't know what the fields are.
|
||||
Supposedly the field is "path to associated .cb file". THIS VALUE
|
||||
OVERLAPS WITH N_BSLINE! */
|
||||
__define_stab_duplicate (N_BROWS, 0x48, "BROWS")
|
||||
|
||||
/* GNU Modula-2 definition module dependency. Value is the modification time
|
||||
of the definition file. Other is non-zero if it is imported with the
|
||||
GNU M2 keyword %INITIALIZE. Perhaps N_M2C can be used if there
|
||||
are enough empty fields? */
|
||||
__define_stab(N_DEFD, 0x4a, "DEFD")
|
||||
|
||||
/* New in Solaris2. Function start/body/end line numbers. */
|
||||
__define_stab(N_FLINE, 0x4C, "FLINE")
|
||||
|
||||
/* THE FOLLOWING TWO STAB VALUES CONFLICT. Happily, one is for Modula-2
|
||||
and one is for C++. Still,... */
|
||||
/* GNU C++ exception variable. Name is variable name. */
|
||||
__define_stab (N_EHDECL, 0x50, "EHDECL")
|
||||
/* Modula2 info "for imc": name,,0,0,0 according to Ultrix V4.0. */
|
||||
__define_stab_duplicate (N_MOD2, 0x50, "MOD2")
|
||||
|
||||
/* GNU C++ `catch' clause. Value is its address. Desc is nonzero if
|
||||
this entry is immediately followed by a CAUGHT stab saying what exception
|
||||
was caught. Multiple CAUGHT stabs means that multiple exceptions
|
||||
can be caught here. If Desc is 0, it means all exceptions are caught
|
||||
here. */
|
||||
__define_stab (N_CATCH, 0x54, "CATCH")
|
||||
|
||||
/* Structure or union element. Value is offset in the structure. */
|
||||
__define_stab (N_SSYM, 0x60, "SSYM")
|
||||
|
||||
/* Solaris2: Last stab emitted for module. */
|
||||
__define_stab (N_ENDM, 0x62, "ENDM")
|
||||
|
||||
/* Name of main source file.
|
||||
Value is starting text address of the compilation.
|
||||
If multiple N_SO's appear, the first to contain a trailing / is the
|
||||
compilation directory. The first to not contain a trailing / is the
|
||||
source file name, relative to the compilation directory. Others (perhaps
|
||||
resulting from cfront) are ignored.
|
||||
On Solaris2, value is undefined, but desc is a source-language code. */
|
||||
|
||||
__define_stab (N_SO, 0x64, "SO")
|
||||
|
||||
/* Automatic variable in the stack. Value is offset from frame pointer.
|
||||
Also used for type descriptions. */
|
||||
__define_stab (N_LSYM, 0x80, "LSYM")
|
||||
|
||||
/* Beginning of an include file. Only Sun uses this.
|
||||
In an object file, only the name is significant.
|
||||
The Sun linker puts data into some of the other fields. */
|
||||
__define_stab (N_BINCL, 0x82, "BINCL")
|
||||
|
||||
/* Name of sub-source file (#include file).
|
||||
Value is starting text address of the compilation. */
|
||||
__define_stab (N_SOL, 0x84, "SOL")
|
||||
|
||||
/* Parameter variable. Value is offset from argument pointer.
|
||||
(On most machines the argument pointer is the same as the frame pointer. */
|
||||
__define_stab (N_PSYM, 0xa0, "PSYM")
|
||||
|
||||
/* End of an include file. No name.
|
||||
This and N_BINCL act as brackets around the file's output.
|
||||
In an object file, there is no significant data in this entry.
|
||||
The Sun linker puts data into some of the fields. */
|
||||
__define_stab (N_EINCL, 0xa2, "EINCL")
|
||||
|
||||
/* Alternate entry point. Value is its address. */
|
||||
__define_stab (N_ENTRY, 0xa4, "ENTRY")
|
||||
|
||||
/* Beginning of lexical block.
|
||||
The desc is the nesting level in lexical blocks.
|
||||
The value is the address of the start of the text for the block.
|
||||
The variables declared inside the block *precede* the N_LBRAC symbol.
|
||||
On Solaris2, the value is relative to the start of the current function. */
|
||||
__define_stab (N_LBRAC, 0xc0, "LBRAC")
|
||||
|
||||
/* Place holder for deleted include file. Replaces a N_BINCL and everything
|
||||
up to the corresponding N_EINCL. The Sun linker generates these when
|
||||
it finds multiple identical copies of the symbols from an include file.
|
||||
This appears only in output from the Sun linker. */
|
||||
__define_stab (N_EXCL, 0xc2, "EXCL")
|
||||
|
||||
/* Modula-2 scope information. Can someone say what info it contains? */
|
||||
__define_stab (N_SCOPE, 0xc4, "SCOPE")
|
||||
|
||||
/* End of a lexical block. Desc matches the N_LBRAC's desc.
|
||||
The value is the address of the end of the text for the block.
|
||||
On Solaris2, the value is relative to the start of the current function. */
|
||||
__define_stab (N_RBRAC, 0xe0, "RBRAC")
|
||||
|
||||
/* Begin named common block. Only the name is significant. */
|
||||
__define_stab (N_BCOMM, 0xe2, "BCOMM")
|
||||
|
||||
/* End named common block. Only the name is significant
|
||||
(and it should match the N_BCOMM). */
|
||||
__define_stab (N_ECOMM, 0xe4, "ECOMM")
|
||||
|
||||
/* Member of a common block; value is offset within the common block.
|
||||
This should occur within a BCOMM/ECOMM pair. */
|
||||
__define_stab (N_ECOML, 0xe8, "ECOML")
|
||||
|
||||
/* Solaris2: Pascal "with" statement: type,,0,0,offset */
|
||||
__define_stab (N_WITH, 0xea, "WITH")
|
||||
|
||||
/* These STAB's are used on Gould systems for Non-Base register symbols
|
||||
or something like that. FIXME. I have assigned the values at random
|
||||
since I don't have a Gould here. Fixups from Gould folk welcome... */
|
||||
__define_stab (N_NBTEXT, 0xF0, "NBTEXT")
|
||||
__define_stab (N_NBDATA, 0xF2, "NBDATA")
|
||||
__define_stab (N_NBBSS, 0xF4, "NBBSS")
|
||||
__define_stab (N_NBSTS, 0xF6, "NBSTS")
|
||||
__define_stab (N_NBLCS, 0xF8, "NBLCS")
|
||||
|
||||
/* Second symbol entry containing a length-value for the preceding entry.
|
||||
The value is the length. */
|
||||
__define_stab (N_LENG, 0xfe, "LENG")
|
||||
|
||||
/* The above information, in matrix format.
|
||||
|
||||
STAB MATRIX
|
||||
_________________________________________________
|
||||
| 00 - 1F are not dbx stab symbols |
|
||||
| In most cases, the low bit is the EXTernal bit|
|
||||
|
||||
| 00 UNDEF | 02 ABS | 04 TEXT | 06 DATA |
|
||||
| 01 |EXT | 03 |EXT | 05 |EXT | 07 |EXT |
|
||||
|
||||
| 08 BSS | 0A INDR | 0C FN_SEQ | 0E WEAKA |
|
||||
| 09 |EXT | 0B | 0D WEAKU | 0F WEAKT |
|
||||
|
||||
| 10 WEAKD | 12 COMM | 14 SETA | 16 SETT |
|
||||
| 11 WEAKB | 13 | 15 | 17 |
|
||||
|
||||
| 18 SETD | 1A SETB | 1C SETV | 1E WARNING|
|
||||
| 19 | 1B | 1D | 1F FN |
|
||||
|
||||
|_______________________________________________|
|
||||
| Debug entries with bit 01 set are unused. |
|
||||
| 20 GSYM | 22 FNAME | 24 FUN | 26 STSYM |
|
||||
| 28 LCSYM | 2A MAIN | 2C ROSYM | 2E |
|
||||
| 30 PC | 32 NSYMS | 34 NOMAP | 36 |
|
||||
| 38 OBJ | 3A | 3C OPT | 3E |
|
||||
| 40 RSYM | 42 M2C | 44 SLINE | 46 DSLINE |
|
||||
| 48 BSLINE*| 4A DEFD | 4C FLINE | 4E |
|
||||
| 50 EHDECL*| 52 | 54 CATCH | 56 |
|
||||
| 58 | 5A | 5C | 5E |
|
||||
| 60 SSYM | 62 ENDM | 64 SO | 66 |
|
||||
| 68 | 6A | 6C | 6E |
|
||||
| 70 | 72 | 74 | 76 |
|
||||
| 78 | 7A | 7C | 7E |
|
||||
| 80 LSYM | 82 BINCL | 84 SOL | 86 |
|
||||
| 88 | 8A | 8C | 8E |
|
||||
| 90 | 92 | 94 | 96 |
|
||||
| 98 | 9A | 9C | 9E |
|
||||
| A0 PSYM | A2 EINCL | A4 ENTRY | A6 |
|
||||
| A8 | AA | AC | AE |
|
||||
| B0 | B2 | B4 | B6 |
|
||||
| B8 | BA | BC | BE |
|
||||
| C0 LBRAC | C2 EXCL | C4 SCOPE | C6 |
|
||||
| C8 | CA | CC | CE |
|
||||
| D0 | D2 | D4 | D6 |
|
||||
| D8 | DA | DC | DE |
|
||||
| E0 RBRAC | E2 BCOMM | E4 ECOMM | E6 |
|
||||
| E8 ECOML | EA WITH | EC | EE |
|
||||
| F0 | F2 | F4 | F6 |
|
||||
| F8 | FA | FC | FE LENG |
|
||||
+-----------------------------------------------+
|
||||
* 50 EHDECL is also MOD2.
|
||||
* 48 BSLINE is also BROWS.
|
||||
*/
|
|
@ -1,37 +0,0 @@
|
|||
#ifndef __GNU_STAB__
|
||||
|
||||
/* Indicate the GNU stab.h is in use. */
|
||||
|
||||
#define __GNU_STAB__
|
||||
|
||||
#define __define_stab(NAME, CODE, STRING) NAME=CODE,
|
||||
#define __define_stab_duplicate(NAME, CODE, STRING) NAME=CODE,
|
||||
|
||||
enum __stab_debug_code
|
||||
{
|
||||
#include "aout/stab.def"
|
||||
LAST_UNUSED_STAB_CODE
|
||||
};
|
||||
|
||||
#undef __define_stab
|
||||
|
||||
/* Definitions of "desc" field for N_SO stabs in Solaris2. */
|
||||
|
||||
#define N_SO_AS 1
|
||||
#define N_SO_C 2
|
||||
#define N_SO_ANSI_C 3
|
||||
#define N_SO_CC 4 /* C++ */
|
||||
#define N_SO_FORTRAN 5
|
||||
#define N_SO_PASCAL 6
|
||||
|
||||
/* Solaris2: Floating point type values in basic types. */
|
||||
|
||||
#define NF_NONE 0
|
||||
#define NF_SINGLE 1 /* IEEE 32-bit */
|
||||
#define NF_DOUBLE 2 /* IEEE 64-bit */
|
||||
#define NF_COMPLEX 3 /* Fortran complex */
|
||||
#define NF_COMPLEX16 4 /* Fortran double complex */
|
||||
#define NF_COMPLEX32 5 /* Fortran complex*16 */
|
||||
#define NF_LDOUBLE 6 /* Long double (whatever that is) */
|
||||
|
||||
#endif /* __GNU_STAB_ */
|
238
pstack/bucomm.c
238
pstack/bucomm.c
|
@ -1,238 +0,0 @@
|
|||
/* bucomm.c -- Bin Utils COMmon code.
|
||||
Copyright (C) 1991, 92, 93, 94, 95, 1997 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
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; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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. */
|
||||
|
||||
/* We might put this in a library someday so it could be dynamically
|
||||
loaded, but for now it's not necessary. */
|
||||
|
||||
#include <bfd.h>
|
||||
#include <libiberty.h>
|
||||
#include "bucomm.h"
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <time.h> /* ctime, maybe time_t */
|
||||
|
||||
#ifdef ANSI_PROTOTYPES
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
|
||||
/* Error reporting */
|
||||
|
||||
char *program_name;
|
||||
|
||||
void
|
||||
bfd_nonfatal (string)
|
||||
CONST char *string;
|
||||
{
|
||||
CONST char *errmsg = bfd_errmsg (bfd_get_error ());
|
||||
|
||||
if (string)
|
||||
fprintf (stderr, "%s: %s: %s\n", program_name, string, errmsg);
|
||||
else
|
||||
fprintf (stderr, "%s: %s\n", program_name, errmsg);
|
||||
}
|
||||
|
||||
void
|
||||
bfd_fatal (string)
|
||||
CONST char *string;
|
||||
{
|
||||
bfd_nonfatal (string);
|
||||
xexit (1);
|
||||
}
|
||||
|
||||
#ifdef ANSI_PROTOTYPES
|
||||
void
|
||||
fatal (const char *format, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
fprintf (stderr, "%s: ", program_name);
|
||||
va_start (args, format);
|
||||
vfprintf (stderr, format, args);
|
||||
va_end (args);
|
||||
putc ('\n', stderr);
|
||||
xexit (1);
|
||||
}
|
||||
#else
|
||||
void
|
||||
fatal (va_alist)
|
||||
va_dcl
|
||||
{
|
||||
char *Format;
|
||||
va_list args;
|
||||
|
||||
fprintf (stderr, "%s: ", program_name);
|
||||
va_start (args);
|
||||
Format = va_arg (args, char *);
|
||||
vfprintf (stderr, Format, args);
|
||||
va_end (args);
|
||||
putc ('\n', stderr);
|
||||
xexit (1);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Set the default BFD target based on the configured target. Doing
|
||||
this permits the binutils to be configured for a particular target,
|
||||
and linked against a shared BFD library which was configured for a
|
||||
different target. */
|
||||
|
||||
#define TARGET "elf32-i386" /* FIXME: hard-coded! */
|
||||
void
|
||||
set_default_bfd_target ()
|
||||
{
|
||||
/* The macro TARGET is defined by Makefile. */
|
||||
const char *target = TARGET;
|
||||
|
||||
if (! bfd_set_default_target (target))
|
||||
{
|
||||
char *errmsg;
|
||||
|
||||
errmsg = (char *) xmalloc (100 + strlen (target));
|
||||
sprintf (errmsg, "can't set BFD default target to `%s'", target);
|
||||
bfd_fatal (errmsg);
|
||||
}
|
||||
}
|
||||
|
||||
/* After a false return from bfd_check_format_matches with
|
||||
bfd_get_error () == bfd_error_file_ambiguously_recognized, print
|
||||
the possible matching targets. */
|
||||
|
||||
void
|
||||
list_matching_formats (p)
|
||||
char **p;
|
||||
{
|
||||
fprintf(stderr, "%s: Matching formats:", program_name);
|
||||
while (*p)
|
||||
fprintf(stderr, " %s", *p++);
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
||||
/* List the supported targets. */
|
||||
|
||||
void
|
||||
list_supported_targets (name, f)
|
||||
const char *name;
|
||||
FILE *f;
|
||||
{
|
||||
extern bfd_target *bfd_target_vector[];
|
||||
int t;
|
||||
|
||||
if (name == NULL)
|
||||
fprintf (f, "Supported targets:");
|
||||
else
|
||||
fprintf (f, "%s: supported targets:", name);
|
||||
for (t = 0; bfd_target_vector[t] != NULL; t++)
|
||||
fprintf (f, " %s", bfd_target_vector[t]->name);
|
||||
fprintf (f, "\n");
|
||||
}
|
||||
|
||||
/* Display the archive header for an element as if it were an ls -l listing:
|
||||
|
||||
Mode User\tGroup\tSize\tDate Name */
|
||||
|
||||
void
|
||||
print_arelt_descr (file, abfd, verbose)
|
||||
FILE *file;
|
||||
bfd *abfd;
|
||||
boolean verbose;
|
||||
{
|
||||
struct stat buf;
|
||||
|
||||
if (verbose)
|
||||
{
|
||||
if (bfd_stat_arch_elt (abfd, &buf) == 0)
|
||||
{
|
||||
char modebuf[11];
|
||||
char timebuf[40];
|
||||
time_t when = buf.st_mtime;
|
||||
CONST char *ctime_result = (CONST char *) ctime (&when);
|
||||
|
||||
/* POSIX format: skip weekday and seconds from ctime output. */
|
||||
sprintf (timebuf, "%.12s %.4s", ctime_result + 4, ctime_result + 20);
|
||||
|
||||
mode_string (buf.st_mode, modebuf);
|
||||
modebuf[10] = '\0';
|
||||
/* POSIX 1003.2/D11 says to skip first character (entry type). */
|
||||
fprintf (file, "%s %ld/%ld %6ld %s ", modebuf + 1,
|
||||
(long) buf.st_uid, (long) buf.st_gid,
|
||||
(long) buf.st_size, timebuf);
|
||||
}
|
||||
}
|
||||
|
||||
fprintf (file, "%s\n", bfd_get_filename (abfd));
|
||||
}
|
||||
|
||||
/* Return the name of a temporary file in the same directory as FILENAME. */
|
||||
|
||||
char *
|
||||
make_tempname (filename)
|
||||
char *filename;
|
||||
{
|
||||
static char template[] = "stXXXXXX";
|
||||
char *tmpname;
|
||||
char *slash = strrchr (filename, '/');
|
||||
|
||||
#if defined (__DJGPP__) || defined (__GO32__) || defined (_WIN32)
|
||||
if (slash == NULL)
|
||||
slash = strrchr (filename, '\\');
|
||||
#endif
|
||||
|
||||
if (slash != (char *) NULL)
|
||||
{
|
||||
char c;
|
||||
|
||||
c = *slash;
|
||||
*slash = 0;
|
||||
tmpname = xmalloc (strlen (filename) + sizeof (template) + 1);
|
||||
strcpy (tmpname, filename);
|
||||
strcat (tmpname, "/");
|
||||
strcat (tmpname, template);
|
||||
mkstemp (tmpname);
|
||||
*slash = c;
|
||||
}
|
||||
else
|
||||
{
|
||||
tmpname = xmalloc (sizeof (template));
|
||||
strcpy (tmpname, template);
|
||||
mkstemp (tmpname);
|
||||
}
|
||||
return tmpname;
|
||||
}
|
||||
|
||||
/* Parse a string into a VMA, with a fatal error if it can't be
|
||||
parsed. */
|
||||
|
||||
bfd_vma
|
||||
parse_vma (s, arg)
|
||||
const char *s;
|
||||
const char *arg;
|
||||
{
|
||||
bfd_vma ret;
|
||||
const char *end;
|
||||
|
||||
ret = bfd_scan_vma (s, &end, 0);
|
||||
if (*end != '\0')
|
||||
{
|
||||
fprintf (stderr, "%s: %s: bad number: %s\n", program_name, arg, s);
|
||||
exit (1);
|
||||
}
|
||||
return ret;
|
||||
}
|
|
@ -1,91 +0,0 @@
|
|||
/* bucomm.h -- binutils common include file.
|
||||
Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
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; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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. */
|
||||
|
||||
#ifndef _BUCOMM_H
|
||||
#define _BUCOMM_H
|
||||
|
||||
#include "ansidecl.h"
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
# undef alloca
|
||||
# define alloca __builtin_alloca
|
||||
#else
|
||||
# if HAVE_ALLOCA_H
|
||||
# include <alloca.h>
|
||||
# else
|
||||
# ifndef alloca /* predefined by HP cc +Olibcalls */
|
||||
# if !defined (__STDC__) && !defined (__hpux)
|
||||
char *alloca ();
|
||||
# else
|
||||
void *alloca ();
|
||||
# endif /* __STDC__, __hpux */
|
||||
# endif /* alloca */
|
||||
# endif /* HAVE_ALLOCA_H */
|
||||
#endif
|
||||
|
||||
#ifndef BFD_TRUE_FALSE
|
||||
#define boolean bfd_boolean
|
||||
#define true TRUE
|
||||
#define false FALSE
|
||||
#endif
|
||||
|
||||
/* bucomm.c */
|
||||
void bfd_nonfatal PARAMS ((CONST char *));
|
||||
|
||||
void bfd_fatal PARAMS ((CONST char *));
|
||||
|
||||
void fatal PARAMS ((CONST char *, ...));
|
||||
|
||||
void set_default_bfd_target PARAMS ((void));
|
||||
|
||||
void list_matching_formats PARAMS ((char **p));
|
||||
|
||||
void list_supported_targets PARAMS ((const char *, FILE *));
|
||||
|
||||
void print_arelt_descr PARAMS ((FILE *file, bfd *abfd, boolean verbose));
|
||||
|
||||
char *make_tempname PARAMS ((char *));
|
||||
|
||||
bfd_vma parse_vma PARAMS ((const char *, const char *));
|
||||
|
||||
extern char *program_name;
|
||||
|
||||
/* filemode.c */
|
||||
void mode_string PARAMS ((unsigned long mode, char *buf));
|
||||
|
||||
/* version.c */
|
||||
extern void print_version PARAMS ((const char *));
|
||||
|
||||
/* libiberty */
|
||||
PTR xmalloc PARAMS ((size_t));
|
||||
|
||||
PTR xrealloc PARAMS ((PTR, size_t));
|
||||
|
||||
#endif /* _BUCOMM_H */
|
|
@ -1,64 +0,0 @@
|
|||
/* budbg.c -- Interfaces to the generic debugging information routines.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
Written by Ian Lance Taylor <ian@cygnus.com>.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
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; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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. */
|
||||
|
||||
#ifndef BUDBG_H
|
||||
#define BUDBG_H
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifndef BFD_TRUE_FALSE
|
||||
#define boolean bfd_boolean
|
||||
#define true TRUE
|
||||
#define false FALSE
|
||||
#endif
|
||||
|
||||
/* Routine used to read generic debugging information. */
|
||||
|
||||
extern PTR read_debugging_info PARAMS ((bfd *, asymbol **, long));
|
||||
|
||||
/* Routine used to print generic debugging information. */
|
||||
|
||||
extern boolean print_debugging_info PARAMS ((FILE *, PTR));
|
||||
|
||||
/* Routines used to read and write stabs information. */
|
||||
|
||||
extern PTR start_stab PARAMS ((PTR, bfd *, boolean, asymbol **, long));
|
||||
|
||||
extern boolean finish_stab PARAMS ((PTR, PTR));
|
||||
|
||||
extern boolean parse_stab PARAMS ((PTR, PTR, int, int, bfd_vma, const char *));
|
||||
|
||||
extern boolean write_stabs_in_sections_debugging_info
|
||||
PARAMS ((bfd *, PTR, bfd_byte **, bfd_size_type *, bfd_byte **,
|
||||
bfd_size_type *));
|
||||
|
||||
/* Routines used to read and write IEEE debugging information. */
|
||||
|
||||
extern boolean parse_ieee
|
||||
PARAMS ((PTR, bfd *, const bfd_byte *, bfd_size_type));
|
||||
|
||||
extern boolean write_ieee_debugging_info PARAMS ((bfd *, PTR));
|
||||
|
||||
/* Routine used to read COFF debugging information. */
|
||||
|
||||
extern boolean parse_coff PARAMS ((bfd *, asymbol **, long, PTR));
|
||||
|
||||
#endif
|
3509
pstack/debug.c
3509
pstack/debug.c
File diff suppressed because it is too large
Load diff
798
pstack/debug.h
798
pstack/debug.h
|
@ -1,798 +0,0 @@
|
|||
/* debug.h -- Describe generic debugging information.
|
||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
||||
Written by Ian Lance Taylor <ian@cygnus.com>.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
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; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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. */
|
||||
|
||||
#ifndef DEBUG_H
|
||||
#define DEBUG_H
|
||||
|
||||
/* This header file describes a generic debugging information format.
|
||||
We may eventually have readers which convert different formats into
|
||||
this generic format, and writers which write it out. The initial
|
||||
impetus for this was writing a convertor from stabs to HP IEEE-695
|
||||
debugging format. */
|
||||
|
||||
/* Different kinds of types. */
|
||||
|
||||
enum debug_type_kind
|
||||
{
|
||||
/* Not used. */
|
||||
DEBUG_KIND_ILLEGAL,
|
||||
/* Indirect via a pointer. */
|
||||
DEBUG_KIND_INDIRECT,
|
||||
/* Void. */
|
||||
DEBUG_KIND_VOID,
|
||||
/* Integer. */
|
||||
DEBUG_KIND_INT,
|
||||
/* Floating point. */
|
||||
DEBUG_KIND_FLOAT,
|
||||
/* Complex. */
|
||||
DEBUG_KIND_COMPLEX,
|
||||
/* Boolean. */
|
||||
DEBUG_KIND_BOOL,
|
||||
/* Struct. */
|
||||
DEBUG_KIND_STRUCT,
|
||||
/* Union. */
|
||||
DEBUG_KIND_UNION,
|
||||
/* Class. */
|
||||
DEBUG_KIND_CLASS,
|
||||
/* Union class (can this really happen?). */
|
||||
DEBUG_KIND_UNION_CLASS,
|
||||
/* Enumeration type. */
|
||||
DEBUG_KIND_ENUM,
|
||||
/* Pointer. */
|
||||
DEBUG_KIND_POINTER,
|
||||
/* Function. */
|
||||
DEBUG_KIND_FUNCTION,
|
||||
/* Reference. */
|
||||
DEBUG_KIND_REFERENCE,
|
||||
/* Range. */
|
||||
DEBUG_KIND_RANGE,
|
||||
/* Array. */
|
||||
DEBUG_KIND_ARRAY,
|
||||
/* Set. */
|
||||
DEBUG_KIND_SET,
|
||||
/* Based pointer. */
|
||||
DEBUG_KIND_OFFSET,
|
||||
/* Method. */
|
||||
DEBUG_KIND_METHOD,
|
||||
/* Const qualified type. */
|
||||
DEBUG_KIND_CONST,
|
||||
/* Volatile qualified type. */
|
||||
DEBUG_KIND_VOLATILE,
|
||||
/* Named type. */
|
||||
DEBUG_KIND_NAMED,
|
||||
/* Tagged type. */
|
||||
DEBUG_KIND_TAGGED
|
||||
};
|
||||
|
||||
/* Different kinds of variables. */
|
||||
|
||||
enum debug_var_kind
|
||||
{
|
||||
/* Not used. */
|
||||
DEBUG_VAR_ILLEGAL,
|
||||
/* A global variable. */
|
||||
DEBUG_GLOBAL,
|
||||
/* A static variable. */
|
||||
DEBUG_STATIC,
|
||||
/* A local static variable. */
|
||||
DEBUG_LOCAL_STATIC,
|
||||
/* A local variable. */
|
||||
DEBUG_LOCAL,
|
||||
/* A register variable. */
|
||||
DEBUG_REGISTER
|
||||
};
|
||||
|
||||
/* Different kinds of function parameters. */
|
||||
|
||||
enum debug_parm_kind
|
||||
{
|
||||
/* Not used. */
|
||||
DEBUG_PARM_ILLEGAL,
|
||||
/* A stack based parameter. */
|
||||
DEBUG_PARM_STACK,
|
||||
/* A register parameter. */
|
||||
DEBUG_PARM_REG,
|
||||
/* A stack based reference parameter. */
|
||||
DEBUG_PARM_REFERENCE,
|
||||
/* A register reference parameter. */
|
||||
DEBUG_PARM_REF_REG
|
||||
};
|
||||
|
||||
/* Different kinds of visibility. */
|
||||
|
||||
enum debug_visibility
|
||||
{
|
||||
/* A public field (e.g., a field in a C struct). */
|
||||
DEBUG_VISIBILITY_PUBLIC,
|
||||
/* A protected field. */
|
||||
DEBUG_VISIBILITY_PROTECTED,
|
||||
/* A private field. */
|
||||
DEBUG_VISIBILITY_PRIVATE,
|
||||
/* A field which should be ignored. */
|
||||
DEBUG_VISIBILITY_IGNORE
|
||||
};
|
||||
|
||||
/* A type. */
|
||||
|
||||
typedef struct debug_type *debug_type;
|
||||
|
||||
#define DEBUG_TYPE_NULL ((debug_type) NULL)
|
||||
|
||||
/* A field in a struct or union. */
|
||||
|
||||
typedef struct debug_field *debug_field;
|
||||
|
||||
#define DEBUG_FIELD_NULL ((debug_field) NULL)
|
||||
|
||||
/* A base class for an object. */
|
||||
|
||||
typedef struct debug_baseclass *debug_baseclass;
|
||||
|
||||
#define DEBUG_BASECLASS_NULL ((debug_baseclass) NULL)
|
||||
|
||||
/* A method of an object. */
|
||||
|
||||
typedef struct debug_method *debug_method;
|
||||
|
||||
#define DEBUG_METHOD_NULL ((debug_method) NULL)
|
||||
|
||||
/* The arguments to a method function of an object. These indicate
|
||||
which method to run. */
|
||||
|
||||
typedef struct debug_method_variant *debug_method_variant;
|
||||
|
||||
#define DEBUG_METHOD_VARIANT_NULL ((debug_method_variant) NULL)
|
||||
|
||||
/* This structure is passed to debug_write. It holds function
|
||||
pointers that debug_write will call based on the accumulated
|
||||
debugging information. */
|
||||
|
||||
struct debug_write_fns
|
||||
{
|
||||
/* This is called at the start of each new compilation unit with the
|
||||
name of the main file in the new unit. */
|
||||
boolean (*start_compilation_unit) PARAMS ((PTR, const char *));
|
||||
|
||||
/* This is called at the start of each source file within a
|
||||
compilation unit, before outputting any global information for
|
||||
that file. The argument is the name of the file. */
|
||||
boolean (*start_source) PARAMS ((PTR, const char *));
|
||||
|
||||
/* Each writer must keep a stack of types. */
|
||||
|
||||
/* Push an empty type onto the type stack. This type can appear if
|
||||
there is a reference to a type which is never defined. */
|
||||
boolean (*empty_type) PARAMS ((PTR));
|
||||
|
||||
/* Push a void type onto the type stack. */
|
||||
boolean (*void_type) PARAMS ((PTR));
|
||||
|
||||
/* Push an integer type onto the type stack, given the size and
|
||||
whether it is unsigned. */
|
||||
boolean (*int_type) PARAMS ((PTR, unsigned int, boolean));
|
||||
|
||||
/* Push a floating type onto the type stack, given the size. */
|
||||
boolean (*float_type) PARAMS ((PTR, unsigned int));
|
||||
|
||||
/* Push a complex type onto the type stack, given the size. */
|
||||
boolean (*complex_type) PARAMS ((PTR, unsigned int));
|
||||
|
||||
/* Push a boolean type onto the type stack, given the size. */
|
||||
boolean (*bool_type) PARAMS ((PTR, unsigned int));
|
||||
|
||||
/* Push an enum type onto the type stack, given the tag, a NULL
|
||||
terminated array of names and the associated values. If there is
|
||||
no tag, the tag argument will be NULL. If this is an undefined
|
||||
enum, the names and values arguments will be NULL. */
|
||||
boolean (*enum_type) PARAMS ((PTR, const char *, const char **,
|
||||
bfd_signed_vma *));
|
||||
|
||||
/* Pop the top type on the type stack, and push a pointer to that
|
||||
type onto the type stack. */
|
||||
boolean (*pointer_type) PARAMS ((PTR));
|
||||
|
||||
/* Push a function type onto the type stack. The second argument
|
||||
indicates the number of argument types that have been pushed onto
|
||||
the stack. If the number of argument types is passed as -1, then
|
||||
the argument types of the function are unknown, and no types have
|
||||
been pushed onto the stack. The third argument is true if the
|
||||
function takes a variable number of arguments. The return type
|
||||
of the function is pushed onto the type stack below the argument
|
||||
types, if any. */
|
||||
boolean (*function_type) PARAMS ((PTR, int, boolean));
|
||||
|
||||
/* Pop the top type on the type stack, and push a reference to that
|
||||
type onto the type stack. */
|
||||
boolean (*reference_type) PARAMS ((PTR));
|
||||
|
||||
/* Pop the top type on the type stack, and push a range of that type
|
||||
with the given lower and upper bounds onto the type stack. */
|
||||
boolean (*range_type) PARAMS ((PTR, bfd_signed_vma, bfd_signed_vma));
|
||||
|
||||
/* Push an array type onto the type stack. The top type on the type
|
||||
stack is the range, and the next type on the type stack is the
|
||||
element type. These should be popped before the array type is
|
||||
pushed. The arguments are the lower bound, the upper bound, and
|
||||
whether the array is a string. */
|
||||
boolean (*array_type) PARAMS ((PTR, bfd_signed_vma, bfd_signed_vma,
|
||||
boolean));
|
||||
|
||||
/* Pop the top type on the type stack, and push a set of that type
|
||||
onto the type stack. The argument indicates whether this set is
|
||||
a bitstring. */
|
||||
boolean (*set_type) PARAMS ((PTR, boolean));
|
||||
|
||||
/* Push an offset type onto the type stack. The top type on the
|
||||
type stack is the target type, and the next type on the type
|
||||
stack is the base type. These should be popped before the offset
|
||||
type is pushed. */
|
||||
boolean (*offset_type) PARAMS ((PTR));
|
||||
|
||||
/* Push a method type onto the type stack. If the second argument
|
||||
is true, the top type on the stack is the class to which the
|
||||
method belongs; otherwise, the class must be determined by the
|
||||
class to which the method is attached. The third argument is the
|
||||
number of argument types; these are pushed onto the type stack in
|
||||
reverse order (the first type popped is the last argument to the
|
||||
method). A value of -1 for the third argument means that no
|
||||
argument information is available. The fourth argument is true
|
||||
if the function takes a variable number of arguments. The next
|
||||
type on the type stack below the domain and the argument types is
|
||||
the return type of the method. All these types must be popped,
|
||||
and then the method type must be pushed. */
|
||||
boolean (*method_type) PARAMS ((PTR, boolean, int, boolean));
|
||||
|
||||
/* Pop the top type off the type stack, and push a const qualified
|
||||
version of that type onto the type stack. */
|
||||
boolean (*const_type) PARAMS ((PTR));
|
||||
|
||||
/* Pop the top type off the type stack, and push a volatile
|
||||
qualified version of that type onto the type stack. */
|
||||
boolean (*volatile_type) PARAMS ((PTR));
|
||||
|
||||
/* Start building a struct. This is followed by calls to the
|
||||
struct_field function, and finished by a call to the
|
||||
end_struct_type function. The second argument is the tag; this
|
||||
will be NULL if there isn't one. If the second argument is NULL,
|
||||
the third argument is a constant identifying this struct for use
|
||||
with tag_type. The fourth argument is true for a struct, false
|
||||
for a union. The fifth argument is the size. If this is an
|
||||
undefined struct or union, the size will be 0 and struct_field
|
||||
will not be called before end_struct_type is called. */
|
||||
boolean (*start_struct_type) PARAMS ((PTR, const char *, unsigned int,
|
||||
boolean, unsigned int));
|
||||
|
||||
/* Add a field to the struct type currently being built. The type
|
||||
of the field should be popped off the type stack. The arguments
|
||||
are the name, the bit position, the bit size (may be zero if the
|
||||
field is not packed), and the visibility. */
|
||||
boolean (*struct_field) PARAMS ((PTR, const char *, bfd_vma, bfd_vma,
|
||||
enum debug_visibility));
|
||||
|
||||
/* Finish building a struct, and push it onto the type stack. */
|
||||
boolean (*end_struct_type) PARAMS ((PTR));
|
||||
|
||||
/* Start building a class. This is followed by calls to several
|
||||
functions: struct_field, class_static_member, class_baseclass,
|
||||
class_start_method, class_method_variant,
|
||||
class_static_method_variant, and class_end_method. The class is
|
||||
finished by a call to end_class_type. The first five arguments
|
||||
are the same as for start_struct_type. The sixth argument is
|
||||
true if there is a virtual function table; if there is, the
|
||||
seventh argument is true if the virtual function table can be
|
||||
found in the type itself, and is false if the type of the object
|
||||
holding the virtual function table should be popped from the type
|
||||
stack. */
|
||||
boolean (*start_class_type) PARAMS ((PTR, const char *, unsigned int,
|
||||
boolean, unsigned int, boolean,
|
||||
boolean));
|
||||
|
||||
/* Add a static member to the class currently being built. The
|
||||
arguments are the field name, the physical name, and the
|
||||
visibility. The type must be popped off the type stack. */
|
||||
boolean (*class_static_member) PARAMS ((PTR, const char *, const char *,
|
||||
enum debug_visibility));
|
||||
|
||||
/* Add a baseclass to the class currently being built. The type of
|
||||
the baseclass must be popped off the type stack. The arguments
|
||||
are the bit position, whether the class is virtual, and the
|
||||
visibility. */
|
||||
boolean (*class_baseclass) PARAMS ((PTR, bfd_vma, boolean,
|
||||
enum debug_visibility));
|
||||
|
||||
/* Start adding a method to the class currently being built. This
|
||||
is followed by calls to class_method_variant and
|
||||
class_static_method_variant to describe different variants of the
|
||||
method which take different arguments. The method is finished
|
||||
with a call to class_end_method. The argument is the method
|
||||
name. */
|
||||
boolean (*class_start_method) PARAMS ((PTR, const char *));
|
||||
|
||||
/* Describe a variant to the class method currently being built.
|
||||
The type of the variant must be popped off the type stack. The
|
||||
second argument is the physical name of the function. The
|
||||
following arguments are the visibility, whether the variant is
|
||||
const, whether the variant is volatile, the offset in the virtual
|
||||
function table, and whether the context is on the type stack
|
||||
(below the variant type). */
|
||||
boolean (*class_method_variant) PARAMS ((PTR, const char *,
|
||||
enum debug_visibility,
|
||||
boolean, boolean,
|
||||
bfd_vma, boolean));
|
||||
|
||||
/* Describe a static variant to the class method currently being
|
||||
built. The arguments are the same as for class_method_variant,
|
||||
except that the last two arguments are omitted. The type of the
|
||||
variant must be popped off the type stack. */
|
||||
boolean (*class_static_method_variant) PARAMS ((PTR, const char *,
|
||||
enum debug_visibility,
|
||||
boolean, boolean));
|
||||
|
||||
/* Finish describing a class method. */
|
||||
boolean (*class_end_method) PARAMS ((PTR));
|
||||
|
||||
/* Finish describing a class, and push it onto the type stack. */
|
||||
boolean (*end_class_type) PARAMS ((PTR));
|
||||
|
||||
/* Push a type on the stack which was given a name by an earlier
|
||||
call to typdef. */
|
||||
boolean (*typedef_type) PARAMS ((PTR, const char *));
|
||||
|
||||
/* Push a tagged type on the stack which was defined earlier. If
|
||||
the second argument is not NULL, the type was defined by a call
|
||||
to tag. If the second argument is NULL, the type was defined by
|
||||
a call to start_struct_type or start_class_type with a tag of
|
||||
NULL and the number of the third argument. Either way, the
|
||||
fourth argument is the tag kind. Note that this may be called
|
||||
for a struct (class) being defined, in between the call to
|
||||
start_struct_type (start_class_type) and the call to
|
||||
end_struct_type (end_class_type). */
|
||||
boolean (*tag_type) PARAMS ((PTR, const char *, unsigned int,
|
||||
enum debug_type_kind));
|
||||
|
||||
/* Pop the type stack, and typedef it to the given name. */
|
||||
boolean (*typdef) PARAMS ((PTR, const char *));
|
||||
|
||||
/* Pop the type stack, and declare it as a tagged struct or union or
|
||||
enum or whatever. The tag passed down here is redundant, since
|
||||
was also passed when enum_type, start_struct_type, or
|
||||
start_class_type was called. */
|
||||
boolean (*tag) PARAMS ((PTR, const char *));
|
||||
|
||||
/* This is called to record a named integer constant. */
|
||||
boolean (*int_constant) PARAMS ((PTR, const char *, bfd_vma));
|
||||
|
||||
/* This is called to record a named floating point constant. */
|
||||
boolean (*float_constant) PARAMS ((PTR, const char *, double));
|
||||
|
||||
/* This is called to record a typed integer constant. The type is
|
||||
popped off the type stack. */
|
||||
boolean (*typed_constant) PARAMS ((PTR, const char *, bfd_vma));
|
||||
|
||||
/* This is called to record a variable. The type is popped off the
|
||||
type stack. */
|
||||
boolean (*variable) PARAMS ((PTR, const char *, enum debug_var_kind,
|
||||
bfd_vma));
|
||||
|
||||
/* Start writing out a function. The return type must be popped off
|
||||
the stack. The boolean is true if the function is global. This
|
||||
is followed by calls to function_parameter, followed by block
|
||||
information. */
|
||||
boolean (*start_function) PARAMS ((PTR, const char *, boolean));
|
||||
|
||||
/* Record a function parameter for the current function. The type
|
||||
must be popped off the stack. */
|
||||
boolean (*function_parameter) PARAMS ((PTR, const char *,
|
||||
enum debug_parm_kind, bfd_vma));
|
||||
|
||||
/* Start writing out a block. There is at least one top level block
|
||||
per function. Blocks may be nested. The argument is the
|
||||
starting address of the block. */
|
||||
boolean (*start_block) PARAMS ((PTR, bfd_vma));
|
||||
|
||||
/* Finish writing out a block. The argument is the ending address
|
||||
of the block. */
|
||||
boolean (*end_block) PARAMS ((PTR, bfd_vma));
|
||||
|
||||
/* Finish writing out a function. */
|
||||
boolean (*end_function) PARAMS ((PTR));
|
||||
|
||||
/* Record line number information for the current compilation unit. */
|
||||
boolean (*lineno) PARAMS ((PTR, const char *, unsigned long, bfd_vma));
|
||||
};
|
||||
|
||||
/* Exported functions. */
|
||||
|
||||
/* The first argument to most of these functions is a handle. This
|
||||
handle is returned by the debug_init function. The purpose of the
|
||||
handle is to permit the debugging routines to not use static
|
||||
variables, and hence to be reentrant. This would be useful for a
|
||||
program which wanted to handle two executables simultaneously. */
|
||||
|
||||
/* Return a debugging handle. */
|
||||
|
||||
extern PTR debug_init PARAMS ((void));
|
||||
|
||||
/* Set the source filename. This implicitly starts a new compilation
|
||||
unit. */
|
||||
|
||||
extern boolean debug_set_filename PARAMS ((PTR, const char *));
|
||||
|
||||
/* Change source files to the given file name. This is used for
|
||||
include files in a single compilation unit. */
|
||||
|
||||
extern boolean debug_start_source PARAMS ((PTR, const char *));
|
||||
|
||||
/* Record a function definition. This implicitly starts a function
|
||||
block. The debug_type argument is the type of the return value.
|
||||
The boolean indicates whether the function is globally visible.
|
||||
The bfd_vma is the address of the start of the function. Currently
|
||||
the parameter types are specified by calls to
|
||||
debug_record_parameter. */
|
||||
|
||||
extern boolean debug_record_function
|
||||
PARAMS ((PTR, const char *, debug_type, boolean, bfd_vma));
|
||||
|
||||
/* Record a parameter for the current function. */
|
||||
|
||||
extern boolean debug_record_parameter
|
||||
PARAMS ((PTR, const char *, debug_type, enum debug_parm_kind, bfd_vma));
|
||||
|
||||
/* End a function definition. The argument is the address where the
|
||||
function ends. */
|
||||
|
||||
extern boolean debug_end_function PARAMS ((PTR, bfd_vma));
|
||||
|
||||
/* Start a block in a function. All local information will be
|
||||
recorded in this block, until the matching call to debug_end_block.
|
||||
debug_start_block and debug_end_block may be nested. The argument
|
||||
is the address at which this block starts. */
|
||||
|
||||
extern boolean debug_start_block PARAMS ((PTR, bfd_vma));
|
||||
|
||||
/* Finish a block in a function. This matches the call to
|
||||
debug_start_block. The argument is the address at which this block
|
||||
ends. */
|
||||
|
||||
extern boolean debug_end_block PARAMS ((PTR, bfd_vma));
|
||||
|
||||
/* Associate a line number in the current source file with a given
|
||||
address. */
|
||||
|
||||
extern boolean debug_record_line PARAMS ((PTR, unsigned long, bfd_vma));
|
||||
|
||||
/* Start a named common block. This is a block of variables that may
|
||||
move in memory. */
|
||||
|
||||
extern boolean debug_start_common_block PARAMS ((PTR, const char *));
|
||||
|
||||
/* End a named common block. */
|
||||
|
||||
extern boolean debug_end_common_block PARAMS ((PTR, const char *));
|
||||
|
||||
/* Record a named integer constant. */
|
||||
|
||||
extern boolean debug_record_int_const PARAMS ((PTR, const char *, bfd_vma));
|
||||
|
||||
/* Record a named floating point constant. */
|
||||
|
||||
extern boolean debug_record_float_const PARAMS ((PTR, const char *, double));
|
||||
|
||||
/* Record a typed constant with an integral value. */
|
||||
|
||||
extern boolean debug_record_typed_const
|
||||
PARAMS ((PTR, const char *, debug_type, bfd_vma));
|
||||
|
||||
/* Record a label. */
|
||||
|
||||
extern boolean debug_record_label
|
||||
PARAMS ((PTR, const char *, debug_type, bfd_vma));
|
||||
|
||||
/* Record a variable. */
|
||||
|
||||
extern boolean debug_record_variable
|
||||
PARAMS ((PTR, const char *, debug_type, enum debug_var_kind, bfd_vma));
|
||||
|
||||
/* Make an indirect type. The first argument is a pointer to the
|
||||
location where the real type will be placed. The second argument
|
||||
is the type tag, if there is one; this may be NULL; the only
|
||||
purpose of this argument is so that debug_get_type_name can return
|
||||
something useful. This function may be used when a type is
|
||||
referenced before it is defined. */
|
||||
|
||||
extern debug_type debug_make_indirect_type
|
||||
PARAMS ((PTR, debug_type *, const char *));
|
||||
|
||||
/* Make a void type. */
|
||||
|
||||
extern debug_type debug_make_void_type PARAMS ((PTR));
|
||||
|
||||
/* Make an integer type of a given size. The boolean argument is true
|
||||
if the integer is unsigned. */
|
||||
|
||||
extern debug_type debug_make_int_type PARAMS ((PTR, unsigned int, boolean));
|
||||
|
||||
/* Make a floating point type of a given size. FIXME: On some
|
||||
platforms, like an Alpha, you probably need to be able to specify
|
||||
the format. */
|
||||
|
||||
extern debug_type debug_make_float_type PARAMS ((PTR, unsigned int));
|
||||
|
||||
/* Make a boolean type of a given size. */
|
||||
|
||||
extern debug_type debug_make_bool_type PARAMS ((PTR, unsigned int));
|
||||
|
||||
/* Make a complex type of a given size. */
|
||||
|
||||
extern debug_type debug_make_complex_type PARAMS ((PTR, unsigned int));
|
||||
|
||||
/* Make a structure type. The second argument is true for a struct,
|
||||
false for a union. The third argument is the size of the struct.
|
||||
The fourth argument is a NULL terminated array of fields. */
|
||||
|
||||
extern debug_type debug_make_struct_type
|
||||
PARAMS ((PTR, boolean, bfd_vma, debug_field *));
|
||||
|
||||
/* Make an object type. The first three arguments after the handle
|
||||
are the same as for debug_make_struct_type. The next arguments are
|
||||
a NULL terminated array of base classes, a NULL terminated array of
|
||||
methods, the type of the object holding the virtual function table
|
||||
if it is not this object, and a boolean which is true if this
|
||||
object has its own virtual function table. */
|
||||
|
||||
extern debug_type debug_make_object_type
|
||||
PARAMS ((PTR, boolean, bfd_vma, debug_field *, debug_baseclass *,
|
||||
debug_method *, debug_type, boolean));
|
||||
|
||||
/* Make an enumeration type. The arguments are a null terminated
|
||||
array of strings, and an array of corresponding values. */
|
||||
|
||||
extern debug_type debug_make_enum_type
|
||||
PARAMS ((PTR, const char **, bfd_signed_vma *));
|
||||
|
||||
/* Make a pointer to a given type. */
|
||||
|
||||
extern debug_type debug_make_pointer_type
|
||||
PARAMS ((PTR, debug_type));
|
||||
|
||||
/* Make a function type. The second argument is the return type. The
|
||||
third argument is a NULL terminated array of argument types. The
|
||||
fourth argument is true if the function takes a variable number of
|
||||
arguments. If the third argument is NULL, then the argument types
|
||||
are unknown. */
|
||||
|
||||
extern debug_type debug_make_function_type
|
||||
PARAMS ((PTR, debug_type, debug_type *, boolean));
|
||||
|
||||
/* Make a reference to a given type. */
|
||||
|
||||
extern debug_type debug_make_reference_type PARAMS ((PTR, debug_type));
|
||||
|
||||
/* Make a range of a given type from a lower to an upper bound. */
|
||||
|
||||
extern debug_type debug_make_range_type
|
||||
PARAMS ((PTR, debug_type, bfd_signed_vma, bfd_signed_vma));
|
||||
|
||||
/* Make an array type. The second argument is the type of an element
|
||||
of the array. The third argument is the type of a range of the
|
||||
array. The fourth and fifth argument are the lower and upper
|
||||
bounds, respectively (if the bounds are not known, lower should be
|
||||
0 and upper should be -1). The sixth argument is true if this
|
||||
array is actually a string, as in C. */
|
||||
|
||||
extern debug_type debug_make_array_type
|
||||
PARAMS ((PTR, debug_type, debug_type, bfd_signed_vma, bfd_signed_vma,
|
||||
boolean));
|
||||
|
||||
/* Make a set of a given type. For example, a Pascal set type. The
|
||||
boolean argument is true if this set is actually a bitstring, as in
|
||||
CHILL. */
|
||||
|
||||
extern debug_type debug_make_set_type PARAMS ((PTR, debug_type, boolean));
|
||||
|
||||
/* Make a type for a pointer which is relative to an object. The
|
||||
second argument is the type of the object to which the pointer is
|
||||
relative. The third argument is the type that the pointer points
|
||||
to. */
|
||||
|
||||
extern debug_type debug_make_offset_type
|
||||
PARAMS ((PTR, debug_type, debug_type));
|
||||
|
||||
/* Make a type for a method function. The second argument is the
|
||||
return type. The third argument is the domain. The fourth
|
||||
argument is a NULL terminated array of argument types. The fifth
|
||||
argument is true if the function takes a variable number of
|
||||
arguments, in which case the array of argument types indicates the
|
||||
types of the first arguments. The domain and the argument array
|
||||
may be NULL, in which case this is a stub method and that
|
||||
information is not available. Stabs debugging uses this, and gets
|
||||
the argument types from the mangled name. */
|
||||
|
||||
extern debug_type debug_make_method_type
|
||||
PARAMS ((PTR, debug_type, debug_type, debug_type *, boolean));
|
||||
|
||||
/* Make a const qualified version of a given type. */
|
||||
|
||||
extern debug_type debug_make_const_type PARAMS ((PTR, debug_type));
|
||||
|
||||
/* Make a volatile qualified version of a given type. */
|
||||
|
||||
extern debug_type debug_make_volatile_type PARAMS ((PTR, debug_type));
|
||||
|
||||
/* Make an undefined tagged type. For example, a struct which has
|
||||
been mentioned, but not defined. */
|
||||
|
||||
extern debug_type debug_make_undefined_tagged_type
|
||||
PARAMS ((PTR, const char *, enum debug_type_kind));
|
||||
|
||||
/* Make a base class for an object. The second argument is the base
|
||||
class type. The third argument is the bit position of this base
|
||||
class in the object. The fourth argument is whether this is a
|
||||
virtual class. The fifth argument is the visibility of the base
|
||||
class. */
|
||||
|
||||
extern debug_baseclass debug_make_baseclass
|
||||
PARAMS ((PTR, debug_type, bfd_vma, boolean, enum debug_visibility));
|
||||
|
||||
/* Make a field for a struct. The second argument is the name. The
|
||||
third argument is the type of the field. The fourth argument is
|
||||
the bit position of the field. The fifth argument is the size of
|
||||
the field (it may be zero). The sixth argument is the visibility
|
||||
of the field. */
|
||||
|
||||
extern debug_field debug_make_field
|
||||
PARAMS ((PTR, const char *, debug_type, bfd_vma, bfd_vma,
|
||||
enum debug_visibility));
|
||||
|
||||
/* Make a static member of an object. The second argument is the
|
||||
name. The third argument is the type of the member. The fourth
|
||||
argument is the physical name of the member (i.e., the name as a
|
||||
global variable). The fifth argument is the visibility of the
|
||||
member. */
|
||||
|
||||
extern debug_field debug_make_static_member
|
||||
PARAMS ((PTR, const char *, debug_type, const char *,
|
||||
enum debug_visibility));
|
||||
|
||||
/* Make a method. The second argument is the name, and the third
|
||||
argument is a NULL terminated array of method variants. Each
|
||||
method variant is a method with this name but with different
|
||||
argument types. */
|
||||
|
||||
extern debug_method debug_make_method
|
||||
PARAMS ((PTR, const char *, debug_method_variant *));
|
||||
|
||||
/* Make a method variant. The second argument is the physical name of
|
||||
the function. The third argument is the type of the function,
|
||||
probably constructed by debug_make_method_type. The fourth
|
||||
argument is the visibility. The fifth argument is whether this is
|
||||
a const function. The sixth argument is whether this is a volatile
|
||||
function. The seventh argument is the index in the virtual
|
||||
function table, if any. The eighth argument is the virtual
|
||||
function context. */
|
||||
|
||||
extern debug_method_variant debug_make_method_variant
|
||||
PARAMS ((PTR, const char *, debug_type, enum debug_visibility, boolean,
|
||||
boolean, bfd_vma, debug_type));
|
||||
|
||||
/* Make a static method argument. The arguments are the same as for
|
||||
debug_make_method_variant, except that the last two are omitted
|
||||
since a static method can not also be virtual. */
|
||||
|
||||
extern debug_method_variant debug_make_static_method_variant
|
||||
PARAMS ((PTR, const char *, debug_type, enum debug_visibility, boolean,
|
||||
boolean));
|
||||
|
||||
/* Name a type. This returns a new type with an attached name. */
|
||||
|
||||
extern debug_type debug_name_type PARAMS ((PTR, const char *, debug_type));
|
||||
|
||||
/* Give a tag to a type, such as a struct or union. This returns a
|
||||
new type with an attached tag. */
|
||||
|
||||
extern debug_type debug_tag_type PARAMS ((PTR, const char *, debug_type));
|
||||
|
||||
/* Record the size of a given type. */
|
||||
|
||||
extern boolean debug_record_type_size PARAMS ((PTR, debug_type, unsigned int));
|
||||
|
||||
/* Find a named type. */
|
||||
|
||||
extern debug_type debug_find_named_type PARAMS ((PTR, const char *));
|
||||
|
||||
/* Find a tagged type. */
|
||||
|
||||
extern debug_type debug_find_tagged_type
|
||||
PARAMS ((PTR, const char *, enum debug_type_kind));
|
||||
|
||||
/* Get the kind of a type. */
|
||||
|
||||
extern enum debug_type_kind debug_get_type_kind PARAMS ((PTR, debug_type));
|
||||
|
||||
/* Get the name of a type. */
|
||||
|
||||
extern const char *debug_get_type_name PARAMS ((PTR, debug_type));
|
||||
|
||||
/* Get the size of a type. */
|
||||
|
||||
extern bfd_vma debug_get_type_size PARAMS ((PTR, debug_type));
|
||||
|
||||
/* Get the return type of a function or method type. */
|
||||
|
||||
extern debug_type debug_get_return_type PARAMS ((PTR, debug_type));
|
||||
|
||||
/* Get the NULL terminated array of parameter types for a function or
|
||||
method type (actually, parameter types are not currently stored for
|
||||
function types). This may be used to determine whether a method
|
||||
type is a stub method or not. The last argument points to a
|
||||
boolean which is set to true if the function takes a variable
|
||||
number of arguments. */
|
||||
|
||||
extern const debug_type *debug_get_parameter_types PARAMS ((PTR,
|
||||
debug_type,
|
||||
boolean *));
|
||||
|
||||
/* Get the target type of a pointer or reference or const or volatile
|
||||
type. */
|
||||
|
||||
extern debug_type debug_get_target_type PARAMS ((PTR, debug_type));
|
||||
|
||||
/* Get the NULL terminated array of fields for a struct, union, or
|
||||
class. */
|
||||
|
||||
extern const debug_field *debug_get_fields PARAMS ((PTR, debug_type));
|
||||
|
||||
/* Get the type of a field. */
|
||||
|
||||
extern debug_type debug_get_field_type PARAMS ((PTR, debug_field));
|
||||
|
||||
/* Get the name of a field. */
|
||||
|
||||
extern const char *debug_get_field_name PARAMS ((PTR, debug_field));
|
||||
|
||||
/* Get the bit position of a field within the containing structure.
|
||||
If the field is a static member, this will return (bfd_vma) -1. */
|
||||
|
||||
extern bfd_vma debug_get_field_bitpos PARAMS ((PTR, debug_field));
|
||||
|
||||
/* Get the bit size of a field. If the field is a static member, this
|
||||
will return (bfd_vma) -1. */
|
||||
|
||||
extern bfd_vma debug_get_field_bitsize PARAMS ((PTR, debug_field));
|
||||
|
||||
/* Get the visibility of a field. */
|
||||
|
||||
extern enum debug_visibility debug_get_field_visibility
|
||||
PARAMS ((PTR, debug_field));
|
||||
|
||||
/* Get the physical name of a field, if it is a static member. If the
|
||||
field is not a static member, this will return NULL. */
|
||||
|
||||
extern const char *debug_get_field_physname PARAMS ((PTR, debug_field));
|
||||
|
||||
/* Write out the recorded debugging information. This takes a set of
|
||||
function pointers which are called to do the actual writing. The
|
||||
first PTR is the debugging handle. The second PTR is a handle
|
||||
which is passed to the functions. */
|
||||
|
||||
extern boolean debug_write PARAMS ((PTR, const struct debug_write_fns *, PTR));
|
||||
|
||||
#endif /* DEBUG_H */
|
|
@ -1,90 +0,0 @@
|
|||
/* Defs for interface to demanglers.
|
||||
Copyright 1992, 1995, 1996 Free Software Foundation, Inc.
|
||||
|
||||
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; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
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 !defined (DEMANGLE_H)
|
||||
#define DEMANGLE_H
|
||||
|
||||
#ifdef IN_GCC
|
||||
#include "gansidecl.h"
|
||||
#define PARAMS(ARGS) PROTO(ARGS)
|
||||
#else /* ! IN_GCC */
|
||||
#include <ansidecl.h>
|
||||
#endif /* IN_GCC */
|
||||
|
||||
/* Options passed to cplus_demangle (in 2nd parameter). */
|
||||
|
||||
#define DMGL_NO_OPTS 0 /* For readability... */
|
||||
#define DMGL_PARAMS (1 << 0) /* Include function args */
|
||||
#define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */
|
||||
#define DMGL_JAVA (1 << 2) /* Demangle as Java rather than C++. */
|
||||
|
||||
#define DMGL_AUTO (1 << 8)
|
||||
#define DMGL_GNU (1 << 9)
|
||||
#define DMGL_LUCID (1 << 10)
|
||||
#define DMGL_ARM (1 << 11)
|
||||
/* If none of these are set, use 'current_demangling_style' as the default. */
|
||||
#define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM)
|
||||
|
||||
/* Enumeration of possible demangling styles.
|
||||
|
||||
Lucid and ARM styles are still kept logically distinct, even though
|
||||
they now both behave identically. The resulting style is actual the
|
||||
union of both. I.E. either style recognizes both "__pt__" and "__rf__"
|
||||
for operator "->", even though the first is lucid style and the second
|
||||
is ARM style. (FIXME?) */
|
||||
|
||||
extern enum demangling_styles
|
||||
{
|
||||
unknown_demangling = 0,
|
||||
auto_demangling = DMGL_AUTO,
|
||||
gnu_demangling = DMGL_GNU,
|
||||
lucid_demangling = DMGL_LUCID,
|
||||
arm_demangling = DMGL_ARM
|
||||
} current_demangling_style;
|
||||
|
||||
/* Define string names for the various demangling styles. */
|
||||
|
||||
#define AUTO_DEMANGLING_STYLE_STRING "auto"
|
||||
#define GNU_DEMANGLING_STYLE_STRING "gnu"
|
||||
#define LUCID_DEMANGLING_STYLE_STRING "lucid"
|
||||
#define ARM_DEMANGLING_STYLE_STRING "arm"
|
||||
|
||||
/* Some macros to test what demangling style is active. */
|
||||
|
||||
#define CURRENT_DEMANGLING_STYLE current_demangling_style
|
||||
#define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO)
|
||||
#define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU)
|
||||
#define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID)
|
||||
#define ARM_DEMANGLING (CURRENT_DEMANGLING_STYLE & DMGL_ARM)
|
||||
|
||||
extern char *
|
||||
cplus_demangle PARAMS ((const char *mangled, int options));
|
||||
|
||||
extern int
|
||||
cplus_demangle_opname PARAMS ((const char *opname, char *result, int options));
|
||||
|
||||
extern const char *
|
||||
cplus_mangle_opname PARAMS ((const char *opname, int options));
|
||||
|
||||
/* Note: This sets global state. FIXME if you care about multi-threading. */
|
||||
|
||||
extern void
|
||||
set_cplus_marker_for_demangling PARAMS ((int ch));
|
||||
|
||||
#endif /* DEMANGLE_H */
|
|
@ -1,266 +0,0 @@
|
|||
/* filemode.c -- make a string describing file modes
|
||||
Copyright (C) 1985, 90, 91, 94, 95, 1997 Free Software Foundation, Inc.
|
||||
|
||||
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; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
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. */
|
||||
|
||||
#include "bfd.h"
|
||||
#include "bucomm.h"
|
||||
|
||||
static char ftypelet PARAMS ((unsigned long));
|
||||
static void setst PARAMS ((unsigned long, char *));
|
||||
|
||||
/* filemodestring - fill in string STR with an ls-style ASCII
|
||||
representation of the st_mode field of file stats block STATP.
|
||||
10 characters are stored in STR; no terminating null is added.
|
||||
The characters stored in STR are:
|
||||
|
||||
0 File type. 'd' for directory, 'c' for character
|
||||
special, 'b' for block special, 'm' for multiplex,
|
||||
'l' for symbolic link, 's' for socket, 'p' for fifo,
|
||||
'-' for any other file type
|
||||
|
||||
1 'r' if the owner may read, '-' otherwise.
|
||||
|
||||
2 'w' if the owner may write, '-' otherwise.
|
||||
|
||||
3 'x' if the owner may execute, 's' if the file is
|
||||
set-user-id, '-' otherwise.
|
||||
'S' if the file is set-user-id, but the execute
|
||||
bit isn't set.
|
||||
|
||||
4 'r' if group members may read, '-' otherwise.
|
||||
|
||||
5 'w' if group members may write, '-' otherwise.
|
||||
|
||||
6 'x' if group members may execute, 's' if the file is
|
||||
set-group-id, '-' otherwise.
|
||||
'S' if it is set-group-id but not executable.
|
||||
|
||||
7 'r' if any user may read, '-' otherwise.
|
||||
|
||||
8 'w' if any user may write, '-' otherwise.
|
||||
|
||||
9 'x' if any user may execute, 't' if the file is "sticky"
|
||||
(will be retained in swap space after execution), '-'
|
||||
otherwise.
|
||||
'T' if the file is sticky but not executable. */
|
||||
|
||||
#if 0
|
||||
|
||||
/* This is not used; only mode_string is used. */
|
||||
|
||||
void
|
||||
filemodestring (statp, str)
|
||||
struct stat *statp;
|
||||
char *str;
|
||||
{
|
||||
mode_string ((unsigned long) statp->st_mode, str);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* Get definitions for the file permission bits. */
|
||||
|
||||
#ifndef S_IRWXU
|
||||
#define S_IRWXU 0700
|
||||
#endif
|
||||
#ifndef S_IRUSR
|
||||
#define S_IRUSR 0400
|
||||
#endif
|
||||
#ifndef S_IWUSR
|
||||
#define S_IWUSR 0200
|
||||
#endif
|
||||
#ifndef S_IXUSR
|
||||
#define S_IXUSR 0100
|
||||
#endif
|
||||
|
||||
#ifndef S_IRWXG
|
||||
#define S_IRWXG 0070
|
||||
#endif
|
||||
#ifndef S_IRGRP
|
||||
#define S_IRGRP 0040
|
||||
#endif
|
||||
#ifndef S_IWGRP
|
||||
#define S_IWGRP 0020
|
||||
#endif
|
||||
#ifndef S_IXGRP
|
||||
#define S_IXGRP 0010
|
||||
#endif
|
||||
|
||||
#ifndef S_IRWXO
|
||||
#define S_IRWXO 0007
|
||||
#endif
|
||||
#ifndef S_IROTH
|
||||
#define S_IROTH 0004
|
||||
#endif
|
||||
#ifndef S_IWOTH
|
||||
#define S_IWOTH 0002
|
||||
#endif
|
||||
#ifndef S_IXOTH
|
||||
#define S_IXOTH 0001
|
||||
#endif
|
||||
|
||||
/* Like filemodestring, but only the relevant part of the `struct stat'
|
||||
is given as an argument. */
|
||||
|
||||
void
|
||||
mode_string (mode, str)
|
||||
unsigned long mode;
|
||||
char *str;
|
||||
{
|
||||
str[0] = ftypelet ((unsigned long) mode);
|
||||
str[1] = (mode & S_IRUSR) != 0 ? 'r' : '-';
|
||||
str[2] = (mode & S_IWUSR) != 0 ? 'w' : '-';
|
||||
str[3] = (mode & S_IXUSR) != 0 ? 'x' : '-';
|
||||
str[4] = (mode & S_IRGRP) != 0 ? 'r' : '-';
|
||||
str[5] = (mode & S_IWGRP) != 0 ? 'w' : '-';
|
||||
str[6] = (mode & S_IXGRP) != 0 ? 'x' : '-';
|
||||
str[7] = (mode & S_IROTH) != 0 ? 'r' : '-';
|
||||
str[8] = (mode & S_IWOTH) != 0 ? 'w' : '-';
|
||||
str[9] = (mode & S_IXOTH) != 0 ? 'x' : '-';
|
||||
setst ((unsigned long) mode, str);
|
||||
}
|
||||
|
||||
/* Return a character indicating the type of file described by
|
||||
file mode BITS:
|
||||
'd' for directories
|
||||
'b' for block special files
|
||||
'c' for character special files
|
||||
'm' for multiplexor files
|
||||
'l' for symbolic links
|
||||
's' for sockets
|
||||
'p' for fifos
|
||||
'-' for any other file type. */
|
||||
|
||||
#ifndef S_ISDIR
|
||||
#ifdef S_IFDIR
|
||||
#define S_ISDIR(i) (((i) & S_IFMT) == S_IFDIR)
|
||||
#else /* ! defined (S_IFDIR) */
|
||||
#define S_ISDIR(i) (((i) & 0170000) == 040000)
|
||||
#endif /* ! defined (S_IFDIR) */
|
||||
#endif /* ! defined (S_ISDIR) */
|
||||
|
||||
#ifndef S_ISBLK
|
||||
#ifdef S_IFBLK
|
||||
#define S_ISBLK(i) (((i) & S_IFMT) == S_IFBLK)
|
||||
#else /* ! defined (S_IFBLK) */
|
||||
#define S_ISBLK(i) 0
|
||||
#endif /* ! defined (S_IFBLK) */
|
||||
#endif /* ! defined (S_ISBLK) */
|
||||
|
||||
#ifndef S_ISCHR
|
||||
#ifdef S_IFCHR
|
||||
#define S_ISCHR(i) (((i) & S_IFMT) == S_IFCHR)
|
||||
#else /* ! defined (S_IFCHR) */
|
||||
#define S_ISCHR(i) 0
|
||||
#endif /* ! defined (S_IFCHR) */
|
||||
#endif /* ! defined (S_ISCHR) */
|
||||
|
||||
#ifndef S_ISFIFO
|
||||
#ifdef S_IFIFO
|
||||
#define S_ISFIFO(i) (((i) & S_IFMT) == S_IFIFO)
|
||||
#else /* ! defined (S_IFIFO) */
|
||||
#define S_ISFIFO(i) 0
|
||||
#endif /* ! defined (S_IFIFO) */
|
||||
#endif /* ! defined (S_ISFIFO) */
|
||||
|
||||
#ifndef S_ISSOCK
|
||||
#ifdef S_IFSOCK
|
||||
#define S_ISSOCK(i) (((i) & S_IFMT) == S_IFSOCK)
|
||||
#else /* ! defined (S_IFSOCK) */
|
||||
#define S_ISSOCK(i) 0
|
||||
#endif /* ! defined (S_IFSOCK) */
|
||||
#endif /* ! defined (S_ISSOCK) */
|
||||
|
||||
#ifndef S_ISLNK
|
||||
#ifdef S_IFLNK
|
||||
#define S_ISLNK(i) (((i) & S_IFMT) == S_IFLNK)
|
||||
#else /* ! defined (S_IFLNK) */
|
||||
#define S_ISLNK(i) 0
|
||||
#endif /* ! defined (S_IFLNK) */
|
||||
#endif /* ! defined (S_ISLNK) */
|
||||
|
||||
static char
|
||||
ftypelet (bits)
|
||||
unsigned long bits;
|
||||
{
|
||||
if (S_ISDIR (bits))
|
||||
return 'd';
|
||||
if (S_ISLNK (bits))
|
||||
return 'l';
|
||||
if (S_ISBLK (bits))
|
||||
return 'b';
|
||||
if (S_ISCHR (bits))
|
||||
return 'c';
|
||||
if (S_ISSOCK (bits))
|
||||
return 's';
|
||||
if (S_ISFIFO (bits))
|
||||
return 'p';
|
||||
|
||||
#ifdef S_IFMT
|
||||
#ifdef S_IFMPC
|
||||
if ((bits & S_IFMT) == S_IFMPC
|
||||
|| (bits & S_IFMT) == S_IFMPB)
|
||||
return 'm';
|
||||
#endif
|
||||
#ifdef S_IFNWK
|
||||
if ((bits & S_IFMT) == S_IFNWK)
|
||||
return 'n';
|
||||
#endif
|
||||
#endif
|
||||
|
||||
return '-';
|
||||
}
|
||||
|
||||
/* Set the 's' and 't' flags in file attributes string CHARS,
|
||||
according to the file mode BITS. */
|
||||
|
||||
static void
|
||||
setst (bits, chars)
|
||||
unsigned long bits;
|
||||
char *chars;
|
||||
{
|
||||
#ifdef S_ISUID
|
||||
if (bits & S_ISUID)
|
||||
{
|
||||
if (chars[3] != 'x')
|
||||
/* Set-uid, but not executable by owner. */
|
||||
chars[3] = 'S';
|
||||
else
|
||||
chars[3] = 's';
|
||||
}
|
||||
#endif
|
||||
#ifdef S_ISGID
|
||||
if (bits & S_ISGID)
|
||||
{
|
||||
if (chars[6] != 'x')
|
||||
/* Set-gid, but not executable by group. */
|
||||
chars[6] = 'S';
|
||||
else
|
||||
chars[6] = 's';
|
||||
}
|
||||
#endif
|
||||
#ifdef S_ISVTX
|
||||
if (bits & S_ISVTX)
|
||||
{
|
||||
if (chars[9] != 'x')
|
||||
/* Sticky, but not executable by others. */
|
||||
chars[9] = 'T';
|
||||
else
|
||||
chars[9] = 't';
|
||||
}
|
||||
#endif
|
||||
}
|
7602
pstack/ieee.c
7602
pstack/ieee.c
File diff suppressed because it is too large
Load diff
138
pstack/ieee.h
138
pstack/ieee.h
|
@ -1,138 +0,0 @@
|
|||
/* IEEE Standard 695-1980 "Universal Format for Object Modules" header file
|
||||
Contributed by Cygnus Support. */
|
||||
|
||||
#define N_W_VARIABLES 8
|
||||
#define Module_Beginning 0xe0
|
||||
|
||||
typedef struct ieee_module {
|
||||
char *processor;
|
||||
char *module_name;
|
||||
} ieee_module_begin_type;
|
||||
|
||||
#define Address_Descriptor 0xec
|
||||
typedef struct ieee_address {
|
||||
bfd_vma number_of_bits_mau;
|
||||
bfd_vma number_of_maus_in_address;
|
||||
|
||||
unsigned char byte_order;
|
||||
#define IEEE_LITTLE 0xcc
|
||||
#define IEEE_BIG 0xcd
|
||||
} ieee_address_descriptor_type;
|
||||
|
||||
typedef union ieee_w_variable {
|
||||
file_ptr offset[N_W_VARIABLES];
|
||||
struct {
|
||||
file_ptr extension_record;
|
||||
file_ptr environmental_record;
|
||||
file_ptr section_part;
|
||||
file_ptr external_part;
|
||||
file_ptr debug_information_part;
|
||||
file_ptr data_part;
|
||||
file_ptr trailer_part;
|
||||
file_ptr me_record;
|
||||
} r;
|
||||
} ieee_w_variable_type;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
typedef enum ieee_record
|
||||
{
|
||||
ieee_number_start_enum = 0x00,
|
||||
ieee_number_end_enum=0x7f,
|
||||
ieee_number_repeat_start_enum = 0x80,
|
||||
ieee_number_repeat_end_enum = 0x88,
|
||||
ieee_number_repeat_4_enum = 0x84,
|
||||
ieee_number_repeat_3_enum = 0x83,
|
||||
ieee_number_repeat_2_enum = 0x82,
|
||||
ieee_number_repeat_1_enum = 0x81,
|
||||
ieee_module_beginning_enum = 0xe0,
|
||||
ieee_module_end_enum = 0xe1,
|
||||
ieee_extension_length_1_enum = 0xde,
|
||||
ieee_extension_length_2_enum = 0xdf,
|
||||
ieee_section_type_enum = 0xe6,
|
||||
ieee_section_alignment_enum = 0xe7,
|
||||
ieee_external_symbol_enum = 0xe8,
|
||||
ieee_comma = 0x90,
|
||||
ieee_external_reference_enum = 0xe9,
|
||||
ieee_set_current_section_enum = 0xe5,
|
||||
ieee_address_descriptor_enum = 0xec,
|
||||
ieee_load_constant_bytes_enum = 0xed,
|
||||
ieee_load_with_relocation_enum = 0xe4,
|
||||
|
||||
ieee_variable_A_enum = 0xc1,
|
||||
ieee_variable_B_enum = 0xc2,
|
||||
ieee_variable_C_enum = 0xc3,
|
||||
ieee_variable_D_enum = 0xc4,
|
||||
ieee_variable_E_enum = 0xc5,
|
||||
ieee_variable_F_enum = 0xc6,
|
||||
ieee_variable_G_enum = 0xc7,
|
||||
ieee_variable_H_enum = 0xc8,
|
||||
ieee_variable_I_enum = 0xc9,
|
||||
ieee_variable_J_enum = 0xca,
|
||||
ieee_variable_K_enum = 0xcb,
|
||||
ieee_variable_L_enum = 0xcc,
|
||||
ieee_variable_M_enum = 0xcd,
|
||||
ieee_variable_N_enum = 0xce,
|
||||
ieee_variable_O_enum = 0xcf,
|
||||
ieee_variable_P_enum = 0xd0,
|
||||
ieee_variable_Q_enum = 0xd1,
|
||||
ieee_variable_R_enum = 0xd2,
|
||||
ieee_variable_S_enum = 0xd3,
|
||||
ieee_variable_T_enum = 0xd4,
|
||||
ieee_variable_U_enum = 0xd5,
|
||||
ieee_variable_V_enum = 0xd6,
|
||||
ieee_variable_W_enum = 0xd7,
|
||||
ieee_variable_X_enum = 0xd8,
|
||||
ieee_variable_Y_enum = 0xd9,
|
||||
ieee_variable_Z_enum = 0xda,
|
||||
ieee_function_plus_enum = 0xa5,
|
||||
ieee_function_minus_enum = 0xa6,
|
||||
ieee_function_signed_open_b_enum = 0xba,
|
||||
ieee_function_signed_close_b_enum = 0xbb,
|
||||
|
||||
ieee_function_unsigned_open_b_enum = 0xbc,
|
||||
ieee_function_unsigned_close_b_enum = 0xbd,
|
||||
|
||||
ieee_function_either_open_b_enum = 0xbe,
|
||||
ieee_function_either_close_b_enum = 0xbf,
|
||||
ieee_record_seperator_enum = 0xdb,
|
||||
|
||||
ieee_e2_first_byte_enum = 0xe2,
|
||||
ieee_section_size_enum = 0xe2d3,
|
||||
ieee_physical_region_size_enum = 0xe2c1,
|
||||
ieee_region_base_address_enum = 0xe2c2,
|
||||
ieee_mau_size_enum = 0xe2c6,
|
||||
ieee_m_value_enum = 0xe2cd,
|
||||
ieee_section_base_address_enum = 0xe2cc,
|
||||
ieee_asn_record_enum = 0xe2ce,
|
||||
ieee_section_offset_enum = 0xe2d2,
|
||||
ieee_value_starting_address_enum = 0xe2c7,
|
||||
ieee_assign_value_to_variable_enum = 0xe2d7,
|
||||
ieee_set_current_pc_enum = 0xe2d0,
|
||||
ieee_value_record_enum = 0xe2c9,
|
||||
ieee_nn_record = 0xf0,
|
||||
ieee_at_record_enum = 0xf1,
|
||||
ieee_ty_record_enum = 0xf2,
|
||||
ieee_attribute_record_enum = 0xf1c9,
|
||||
ieee_atn_record_enum = 0xf1ce,
|
||||
ieee_external_reference_info_record_enum = 0xf1d8,
|
||||
ieee_weak_external_reference_enum= 0xf4,
|
||||
ieee_repeat_data_enum = 0xf7,
|
||||
ieee_bb_record_enum = 0xf8,
|
||||
ieee_be_record_enum = 0xf9
|
||||
} ieee_record_enum_type;
|
||||
|
||||
|
||||
typedef struct ieee_section {
|
||||
unsigned int section_index;
|
||||
unsigned int section_type;
|
||||
char *section_name;
|
||||
unsigned int parent_section_index;
|
||||
unsigned int sibling_section_index;
|
||||
unsigned int context_index;
|
||||
} ieee_section_type;
|
||||
#define IEEE_REFERENCE_BASE 11
|
||||
#define IEEE_PUBLIC_BASE 32
|
||||
#define IEEE_SECTION_NUMBER_BASE 1
|
|
@ -1,180 +0,0 @@
|
|||
/* Function declarations for libiberty.
|
||||
Written by Cygnus Support, 1994.
|
||||
|
||||
The libiberty library provides a number of functions which are
|
||||
missing on some operating systems. We do not declare those here,
|
||||
to avoid conflicts with the system header files on operating
|
||||
systems that do support those functions. In this file we only
|
||||
declare those functions which are specific to libiberty. */
|
||||
|
||||
#ifndef LIBIBERTY_H
|
||||
#define LIBIBERTY_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "ansidecl.h"
|
||||
|
||||
/* Build an argument vector from a string. Allocates memory using
|
||||
malloc. Use freeargv to free the vector. */
|
||||
|
||||
extern char **buildargv PARAMS ((char *));
|
||||
|
||||
/* Free a vector returned by buildargv. */
|
||||
|
||||
extern void freeargv PARAMS ((char **));
|
||||
|
||||
/* Duplicate an argument vector. Allocates memory using malloc. Use
|
||||
freeargv to free the vector. */
|
||||
|
||||
extern char **dupargv PARAMS ((char **));
|
||||
|
||||
|
||||
/* Return the last component of a path name. Note that we can't use a
|
||||
prototype here because the parameter is declared inconsistently
|
||||
across different systems, sometimes as "char *" and sometimes as
|
||||
"const char *" */
|
||||
|
||||
#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__)
|
||||
extern char *basename PARAMS ((const char *));
|
||||
#else
|
||||
extern char *basename ();
|
||||
#endif
|
||||
|
||||
/* Concatenate an arbitrary number of strings, up to (char *) NULL.
|
||||
Allocates memory using xmalloc. */
|
||||
|
||||
extern char *concat PARAMS ((const char *, ...));
|
||||
|
||||
/* Check whether two file descriptors refer to the same file. */
|
||||
|
||||
extern int fdmatch PARAMS ((int fd1, int fd2));
|
||||
|
||||
/* Get the amount of time the process has run, in microseconds. */
|
||||
|
||||
extern long get_run_time PARAMS ((void));
|
||||
|
||||
/* Choose a temporary directory to use for scratch files. */
|
||||
|
||||
extern char *choose_temp_base PARAMS ((void));
|
||||
|
||||
/* Allocate memory filled with spaces. Allocates using malloc. */
|
||||
|
||||
extern const char *spaces PARAMS ((int count));
|
||||
|
||||
/* Return the maximum error number for which strerror will return a
|
||||
string. */
|
||||
|
||||
extern int errno_max PARAMS ((void));
|
||||
|
||||
/* Return the name of an errno value (e.g., strerrno (EINVAL) returns
|
||||
"EINVAL"). */
|
||||
|
||||
extern const char *strerrno PARAMS ((int));
|
||||
|
||||
/* Given the name of an errno value, return the value. */
|
||||
|
||||
extern int strtoerrno PARAMS ((const char *));
|
||||
|
||||
/* ANSI's strerror(), but more robust. */
|
||||
|
||||
extern char *xstrerror PARAMS ((int));
|
||||
|
||||
/* Return the maximum signal number for which strsignal will return a
|
||||
string. */
|
||||
|
||||
extern int signo_max PARAMS ((void));
|
||||
|
||||
/* Return a signal message string for a signal number
|
||||
(e.g., strsignal (SIGHUP) returns something like "Hangup"). */
|
||||
/* This is commented out as it can conflict with one in system headers.
|
||||
We still document its existence though. */
|
||||
|
||||
/*extern const char *strsignal PARAMS ((int));*/
|
||||
|
||||
/* Return the name of a signal number (e.g., strsigno (SIGHUP) returns
|
||||
"SIGHUP"). */
|
||||
|
||||
extern const char *strsigno PARAMS ((int));
|
||||
|
||||
/* Given the name of a signal, return its number. */
|
||||
|
||||
extern int strtosigno PARAMS ((const char *));
|
||||
|
||||
/* Register a function to be run by xexit. Returns 0 on success. */
|
||||
|
||||
extern int xatexit PARAMS ((void (*fn) (void)));
|
||||
|
||||
/* Exit, calling all the functions registered with xatexit. */
|
||||
|
||||
#ifndef __GNUC__
|
||||
extern void xexit PARAMS ((int status));
|
||||
#else
|
||||
void xexit PARAMS ((int status)) __attribute__ ((noreturn));
|
||||
#endif
|
||||
|
||||
/* Set the program name used by xmalloc. */
|
||||
|
||||
extern void xmalloc_set_program_name PARAMS ((const char *));
|
||||
|
||||
/* Allocate memory without fail. If malloc fails, this will print a
|
||||
message to stderr (using the name set by xmalloc_set_program_name,
|
||||
if any) and then call xexit. */
|
||||
|
||||
#ifdef ANSI_PROTOTYPES
|
||||
/* Get a definition for size_t. */
|
||||
#include <stddef.h>
|
||||
#endif
|
||||
extern PTR xmalloc PARAMS ((size_t));
|
||||
|
||||
/* Reallocate memory without fail. This works like xmalloc.
|
||||
|
||||
FIXME: We do not declare the parameter types for the same reason as
|
||||
xmalloc. */
|
||||
|
||||
extern PTR xrealloc PARAMS ((PTR, size_t));
|
||||
|
||||
/* Allocate memory without fail and set it to zero. This works like
|
||||
xmalloc. */
|
||||
|
||||
extern PTR xcalloc PARAMS ((size_t, size_t));
|
||||
|
||||
/* Copy a string into a memory buffer without fail. */
|
||||
|
||||
extern char *xstrdup PARAMS ((const char *));
|
||||
|
||||
/* hex character manipulation routines */
|
||||
|
||||
#define _hex_array_size 256
|
||||
#define _hex_bad 99
|
||||
extern char _hex_value[_hex_array_size];
|
||||
extern void hex_init PARAMS ((void));
|
||||
#define hex_p(c) (hex_value (c) != _hex_bad)
|
||||
/* If you change this, note well: Some code relies on side effects in
|
||||
the argument being performed exactly once. */
|
||||
#define hex_value(c) (_hex_value[(unsigned char) (c)])
|
||||
|
||||
/* Definitions used by the pexecute routine. */
|
||||
|
||||
#define PEXECUTE_FIRST 1
|
||||
#define PEXECUTE_LAST 2
|
||||
#define PEXECUTE_ONE (PEXECUTE_FIRST + PEXECUTE_LAST)
|
||||
#define PEXECUTE_SEARCH 4
|
||||
#define PEXECUTE_VERBOSE 8
|
||||
|
||||
/* Execute a program. */
|
||||
|
||||
extern int pexecute PARAMS ((const char *, char * const *, const char *,
|
||||
const char *, char **, char **, int));
|
||||
|
||||
/* Wait for pexecute to finish. */
|
||||
|
||||
extern int pwait PARAMS ((int, int *, int));
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* ! defined (LIBIBERTY_H) */
|
|
@ -1,90 +0,0 @@
|
|||
/* $Header$ */
|
||||
|
||||
/*
|
||||
* LinuxThreads specific stuff.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <limits.h> /* PTHREAD_THREADS_MAX */
|
||||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
#include <sched.h>
|
||||
|
||||
#include "linuxthreads.h"
|
||||
|
||||
#define AT_INT(intval) *((int32_t*)(intval))
|
||||
|
||||
/*
|
||||
* Internal LinuxThreads variables.
|
||||
* Official interface exposed to GDB.
|
||||
*/
|
||||
#if 1
|
||||
extern volatile int __pthread_threads_debug;
|
||||
extern volatile char __pthread_handles;
|
||||
extern char __pthread_initial_thread;
|
||||
/*extern volatile Elf32_Sym* __pthread_manager_thread;*/
|
||||
extern const int __pthread_sizeof_handle;
|
||||
extern const int __pthread_offsetof_descr;
|
||||
extern const int __pthread_offsetof_pid;
|
||||
extern volatile int __pthread_handles_num;
|
||||
#endif /* 0 */
|
||||
|
||||
/*
|
||||
* Notify others.
|
||||
*/
|
||||
int
|
||||
linuxthreads_notify_others( const int signotify)
|
||||
{
|
||||
const pid_t mypid = getpid();
|
||||
//const pthread_t mytid = pthread_self();
|
||||
int i;
|
||||
int threadcount = 0;
|
||||
int threads[PTHREAD_THREADS_MAX];
|
||||
int pid;
|
||||
|
||||
TRACE_FPRINTF((stderr, "theadcount:%d\n", __pthread_handles_num));
|
||||
if (__pthread_handles_num==2) {
|
||||
/* no threads beside the initial thread */
|
||||
return 0;
|
||||
}
|
||||
/*assert(maxthreads>=3);
|
||||
assert(maxthreads>=__pthread_handles_num+2);*/
|
||||
|
||||
// take the initial thread with us
|
||||
pid = AT_INT(&__pthread_initial_thread + __pthread_offsetof_pid);
|
||||
if (pid!=mypid && pid!=0)
|
||||
threads[threadcount++] = pid;
|
||||
// don't know why, but always handles[0]==handles[1]
|
||||
for (i=1; i<__pthread_handles_num; ++i) {
|
||||
const int descr = AT_INT(&__pthread_handles+i*__pthread_sizeof_handle+__pthread_offsetof_descr);
|
||||
assert(descr!=0);
|
||||
pid = AT_INT(descr+__pthread_offsetof_pid);
|
||||
if (pid!=mypid && pid!=0)
|
||||
threads[threadcount++] = pid;
|
||||
}
|
||||
/* TRACE_FPRINTF((stderr, "Stopping threads...")); */
|
||||
//for (i=0; i<threadcount; ++i) {
|
||||
// /* TRACE_FPRINTF((stderr, "%d ", threads[i])); */
|
||||
// fflush(stdout);
|
||||
// kill(threads[i], SIGSTOP); /* Tell thread to stop */
|
||||
//}
|
||||
/* TRACE_FPRINTF((stderr, " done!\n")); */
|
||||
for (i=0; i<threadcount; ++i) {
|
||||
TRACE_FPRINTF((stderr, "--- NOTIFYING %d\n", threads[i]));
|
||||
kill(threads[i], signotify); /* Tell to print stack trace */
|
||||
/* TRACE_FPRINTF((stderr, "--- WAITING FOR %d\n", threads[i])); */
|
||||
/*pause(); Wait for confirmation. */
|
||||
}
|
||||
for (i=0; i<threadcount; ++i)
|
||||
sched_yield();
|
||||
for (i=0; i<threadcount; ++i) {
|
||||
TRACE_FPRINTF((stderr, "--- KILLING %d\n", threads[i]));
|
||||
kill(threads[i], SIGKILL); /* Tell thread die :) */
|
||||
}
|
||||
return __pthread_handles_num;
|
||||
}
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
/* $Header$ */
|
||||
|
||||
/*
|
||||
* LinuxThreads specific stuff.
|
||||
*/
|
||||
|
||||
#ifndef pstack_linuxthreads_h_
|
||||
#define pstack_linuxthreads_h_
|
||||
|
||||
#include <pthread.h>
|
||||
#include "pstacktrace.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Tell other threads to dump stacks...
|
||||
*/
|
||||
int
|
||||
linuxthreads_notify_others( const int signotify);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* pstack_linuxthreads_h_ */
|
||||
|
2746
pstack/pstack.c
2746
pstack/pstack.c
File diff suppressed because it is too large
Load diff
|
@ -1,22 +0,0 @@
|
|||
/* $Header$ */
|
||||
|
||||
#ifndef pstack_pstack_h_
|
||||
#define pstack_pstack_h_
|
||||
|
||||
#include "pstacktrace.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Install the stack-trace-on-SEGV handler....
|
||||
*/
|
||||
extern int
|
||||
pstack_install_segv_action( const char* path_format);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* pstack_pstack_h_ */
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
/* $Header$ */
|
||||
|
||||
/*
|
||||
* Debugging macros.
|
||||
*/
|
||||
|
||||
#ifndef pstacktrace_h_
|
||||
#define pstacktrace_h_
|
||||
|
||||
#define PSTACK_DEBUG 1
|
||||
#undef PSTACK_DEBUG
|
||||
|
||||
#ifdef PSTACK_DEBUG
|
||||
# define TRACE_PUTC(a) putc a
|
||||
# define TRACE_FPUTS(a) fputs a
|
||||
# define TRACE_FPRINTF(a) fprintf a
|
||||
#else /* PSTACK_DEBUG */
|
||||
# define TRACE_PUTC(a) (void)0
|
||||
# define TRACE_FPUTS(a) (void)0
|
||||
# define TRACE_FPRINTF(a) (void)0
|
||||
#endif /* !PSTACK_DEBUG */
|
||||
|
||||
#endif /* pstacktrace_h_ */
|
||||
|
462
pstack/rddbg.c
462
pstack/rddbg.c
|
@ -1,462 +0,0 @@
|
|||
/* rddbg.c -- Read debugging information into a generic form.
|
||||
Copyright (C) 1995, 96, 1997 Free Software Foundation, Inc.
|
||||
Written by Ian Lance Taylor <ian@cygnus.com>.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
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; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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 file reads debugging information into a generic form. This
|
||||
file knows how to dig the debugging information out of an object
|
||||
file. */
|
||||
|
||||
#include <bfd.h>
|
||||
#include "bucomm.h"
|
||||
#include <libiberty.h>
|
||||
#include "debug.h"
|
||||
#include "budbg.h"
|
||||
|
||||
static boolean read_section_stabs_debugging_info
|
||||
PARAMS ((bfd *, asymbol **, long, PTR, boolean *));
|
||||
static boolean read_symbol_stabs_debugging_info
|
||||
PARAMS ((bfd *, asymbol **, long, PTR, boolean *));
|
||||
static boolean read_ieee_debugging_info PARAMS ((bfd *, PTR, boolean *));
|
||||
static void save_stab PARAMS ((int, int, bfd_vma, const char *));
|
||||
static void stab_context PARAMS ((void));
|
||||
static void free_saved_stabs PARAMS ((void));
|
||||
|
||||
/* Read debugging information from a BFD. Returns a generic debugging
|
||||
pointer. */
|
||||
|
||||
PTR
|
||||
read_debugging_info (abfd, syms, symcount)
|
||||
bfd *abfd;
|
||||
asymbol **syms;
|
||||
long symcount;
|
||||
{
|
||||
PTR dhandle;
|
||||
boolean found;
|
||||
|
||||
dhandle = debug_init ();
|
||||
if (dhandle == NULL)
|
||||
return NULL;
|
||||
|
||||
if (! read_section_stabs_debugging_info (abfd, syms, symcount, dhandle,
|
||||
&found))
|
||||
return NULL;
|
||||
|
||||
if (bfd_get_flavour (abfd) == bfd_target_aout_flavour)
|
||||
{
|
||||
if (! read_symbol_stabs_debugging_info (abfd, syms, symcount, dhandle,
|
||||
&found))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (bfd_get_flavour (abfd) == bfd_target_ieee_flavour)
|
||||
{
|
||||
if (! read_ieee_debugging_info (abfd, dhandle, &found))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Try reading the COFF symbols if we didn't find any stabs in COFF
|
||||
sections. */
|
||||
if (! found
|
||||
&& bfd_get_flavour (abfd) == bfd_target_coff_flavour
|
||||
&& symcount > 0)
|
||||
{
|
||||
#if 0
|
||||
/*
|
||||
* JZ: Do we need coff?
|
||||
*/
|
||||
if (! parse_coff (abfd, syms, symcount, dhandle))
|
||||
#else
|
||||
fprintf (stderr, "%s: COFF support temporarily disabled\n",
|
||||
bfd_get_filename (abfd));
|
||||
return NULL;
|
||||
#endif
|
||||
return NULL;
|
||||
found = true;
|
||||
}
|
||||
|
||||
if (! found)
|
||||
{
|
||||
fprintf (stderr, "%s: no recognized debugging information\n",
|
||||
bfd_get_filename (abfd));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dhandle;
|
||||
}
|
||||
|
||||
/* Read stabs in sections debugging information from a BFD. */
|
||||
|
||||
static boolean
|
||||
read_section_stabs_debugging_info (abfd, syms, symcount, dhandle, pfound)
|
||||
bfd *abfd;
|
||||
asymbol **syms;
|
||||
long symcount;
|
||||
PTR dhandle;
|
||||
boolean *pfound;
|
||||
{
|
||||
static struct
|
||||
{
|
||||
const char *secname;
|
||||
const char *strsecname;
|
||||
} names[] = { { ".stab", ".stabstr" } };
|
||||
unsigned int i;
|
||||
PTR shandle;
|
||||
|
||||
*pfound = false;
|
||||
shandle = NULL;
|
||||
|
||||
for (i = 0; i < sizeof names / sizeof names[0]; i++)
|
||||
{
|
||||
asection *sec, *strsec;
|
||||
|
||||
sec = bfd_get_section_by_name (abfd, names[i].secname);
|
||||
strsec = bfd_get_section_by_name (abfd, names[i].strsecname);
|
||||
if (sec != NULL && strsec != NULL)
|
||||
{
|
||||
bfd_size_type stabsize, strsize;
|
||||
bfd_byte *stabs, *strings;
|
||||
bfd_byte *stab;
|
||||
bfd_size_type stroff, next_stroff;
|
||||
|
||||
stabsize = bfd_section_size (abfd, sec);
|
||||
stabs = (bfd_byte *) xmalloc (stabsize);
|
||||
if (! bfd_get_section_contents (abfd, sec, stabs, 0, stabsize))
|
||||
{
|
||||
fprintf (stderr, "%s: %s: %s\n",
|
||||
bfd_get_filename (abfd), names[i].secname,
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
return false;
|
||||
}
|
||||
|
||||
strsize = bfd_section_size (abfd, strsec);
|
||||
strings = (bfd_byte *) xmalloc (strsize);
|
||||
if (! bfd_get_section_contents (abfd, strsec, strings, 0, strsize))
|
||||
{
|
||||
fprintf (stderr, "%s: %s: %s\n",
|
||||
bfd_get_filename (abfd), names[i].strsecname,
|
||||
bfd_errmsg (bfd_get_error ()));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (shandle == NULL)
|
||||
{
|
||||
shandle = start_stab (dhandle, abfd, true, syms, symcount);
|
||||
if (shandle == NULL)
|
||||
return false;
|
||||
}
|
||||
|
||||
*pfound = true;
|
||||
|
||||
stroff = 0;
|
||||
next_stroff = 0;
|
||||
for (stab = stabs; stab < stabs + stabsize; stab += 12)
|
||||
{
|
||||
bfd_size_type strx;
|
||||
int type;
|
||||
int other;
|
||||
int desc;
|
||||
bfd_vma value;
|
||||
|
||||
/* This code presumes 32 bit values. */
|
||||
|
||||
strx = bfd_get_32 (abfd, stab);
|
||||
type = bfd_get_8 (abfd, stab + 4);
|
||||
other = bfd_get_8 (abfd, stab + 5);
|
||||
desc = bfd_get_16 (abfd, stab + 6);
|
||||
value = bfd_get_32 (abfd, stab + 8);
|
||||
|
||||
if (type == 0)
|
||||
{
|
||||
/* Special type 0 stabs indicate the offset to the
|
||||
next string table. */
|
||||
stroff = next_stroff;
|
||||
next_stroff += value;
|
||||
}
|
||||
else
|
||||
{
|
||||
char *f, *s;
|
||||
|
||||
f = NULL;
|
||||
s = (char *) strings + stroff + strx;
|
||||
while (s[strlen (s) - 1] == '\\'
|
||||
&& stab + 12 < stabs + stabsize)
|
||||
{
|
||||
char *p;
|
||||
|
||||
stab += 12;
|
||||
p = s + strlen (s) - 1;
|
||||
*p = '\0';
|
||||
s = concat (s,
|
||||
((char *) strings
|
||||
+ stroff
|
||||
+ bfd_get_32 (abfd, stab)),
|
||||
(const char *) NULL);
|
||||
|
||||
/* We have to restore the backslash, because, if
|
||||
the linker is hashing stabs strings, we may
|
||||
see the same string more than once. */
|
||||
*p = '\\';
|
||||
|
||||
if (f != NULL)
|
||||
free (f);
|
||||
f = s;
|
||||
}
|
||||
|
||||
save_stab (type, desc, value, s);
|
||||
|
||||
if (! parse_stab (dhandle, shandle, type, desc, value, s))
|
||||
{
|
||||
#if 0
|
||||
/*
|
||||
* JZ: skip the junk.
|
||||
*/
|
||||
stab_context ();
|
||||
free_saved_stabs ();
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Don't free f, since I think the stabs code
|
||||
expects strings to hang around. This should be
|
||||
straightened out. FIXME. */
|
||||
}
|
||||
}
|
||||
|
||||
free_saved_stabs ();
|
||||
free (stabs);
|
||||
|
||||
/* Don't free strings, since I think the stabs code expects
|
||||
the strings to hang around. This should be straightened
|
||||
out. FIXME. */
|
||||
}
|
||||
}
|
||||
|
||||
if (shandle != NULL)
|
||||
{
|
||||
if (! finish_stab (dhandle, shandle))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Read stabs in the symbol table. */
|
||||
|
||||
static boolean
|
||||
read_symbol_stabs_debugging_info (abfd, syms, symcount, dhandle, pfound)
|
||||
bfd *abfd;
|
||||
asymbol **syms;
|
||||
long symcount;
|
||||
PTR dhandle;
|
||||
boolean *pfound;
|
||||
{
|
||||
PTR shandle;
|
||||
asymbol **ps, **symend;
|
||||
|
||||
shandle = NULL;
|
||||
symend = syms + symcount;
|
||||
for (ps = syms; ps < symend; ps++)
|
||||
{
|
||||
symbol_info i;
|
||||
|
||||
bfd_get_symbol_info (abfd, *ps, &i);
|
||||
|
||||
if (i.type == '-')
|
||||
{
|
||||
const char *s;
|
||||
char *f;
|
||||
|
||||
if (shandle == NULL)
|
||||
{
|
||||
shandle = start_stab (dhandle, abfd, false, syms, symcount);
|
||||
if (shandle == NULL)
|
||||
return false;
|
||||
}
|
||||
|
||||
*pfound = true;
|
||||
|
||||
s = i.name;
|
||||
f = NULL;
|
||||
while (s[strlen (s) - 1] == '\\'
|
||||
&& ps + 1 < symend)
|
||||
{
|
||||
char *sc, *n;
|
||||
|
||||
++ps;
|
||||
sc = xstrdup (s);
|
||||
sc[strlen (sc) - 1] = '\0';
|
||||
n = concat (sc, bfd_asymbol_name (*ps), (const char *) NULL);
|
||||
free (sc);
|
||||
if (f != NULL)
|
||||
free (f);
|
||||
f = n;
|
||||
s = n;
|
||||
}
|
||||
|
||||
save_stab (i.stab_type, i.stab_desc, i.value, s);
|
||||
|
||||
if (! parse_stab (dhandle, shandle, i.stab_type, i.stab_desc,
|
||||
i.value, s))
|
||||
{
|
||||
stab_context ();
|
||||
free_saved_stabs ();
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Don't free f, since I think the stabs code expects
|
||||
strings to hang around. This should be straightened out.
|
||||
FIXME. */
|
||||
}
|
||||
}
|
||||
|
||||
free_saved_stabs ();
|
||||
|
||||
if (shandle != NULL)
|
||||
{
|
||||
if (! finish_stab (dhandle, shandle))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Read IEEE debugging information. */
|
||||
|
||||
static boolean
|
||||
read_ieee_debugging_info (abfd, dhandle, pfound)
|
||||
bfd *abfd;
|
||||
PTR dhandle;
|
||||
boolean *pfound;
|
||||
{
|
||||
asection *dsec;
|
||||
bfd_size_type size;
|
||||
bfd_byte *contents;
|
||||
|
||||
/* The BFD backend puts the debugging information into a section
|
||||
named .debug. */
|
||||
|
||||
dsec = bfd_get_section_by_name (abfd, ".debug");
|
||||
if (dsec == NULL)
|
||||
return true;
|
||||
|
||||
size = bfd_section_size (abfd, dsec);
|
||||
contents = (bfd_byte *) xmalloc (size);
|
||||
if (! bfd_get_section_contents (abfd, dsec, contents, 0, size))
|
||||
return false;
|
||||
|
||||
if (! parse_ieee (dhandle, abfd, contents, size))
|
||||
return false;
|
||||
|
||||
free (contents);
|
||||
|
||||
*pfound = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Record stabs strings, so that we can give some context for errors. */
|
||||
|
||||
#define SAVE_STABS_COUNT (16)
|
||||
|
||||
struct saved_stab
|
||||
{
|
||||
int type;
|
||||
int desc;
|
||||
bfd_vma value;
|
||||
char *string;
|
||||
};
|
||||
|
||||
static struct saved_stab saved_stabs[SAVE_STABS_COUNT];
|
||||
static int saved_stabs_index;
|
||||
|
||||
/* Save a stabs string. */
|
||||
|
||||
static void
|
||||
save_stab (type, desc, value, string)
|
||||
int type;
|
||||
int desc;
|
||||
bfd_vma value;
|
||||
const char *string;
|
||||
{
|
||||
if (saved_stabs[saved_stabs_index].string != NULL)
|
||||
free (saved_stabs[saved_stabs_index].string);
|
||||
saved_stabs[saved_stabs_index].type = type;
|
||||
saved_stabs[saved_stabs_index].desc = desc;
|
||||
saved_stabs[saved_stabs_index].value = value;
|
||||
saved_stabs[saved_stabs_index].string = xstrdup (string);
|
||||
saved_stabs_index = (saved_stabs_index + 1) % SAVE_STABS_COUNT;
|
||||
}
|
||||
|
||||
/* Provide context for an error. */
|
||||
|
||||
static void
|
||||
stab_context ()
|
||||
{
|
||||
int i;
|
||||
|
||||
fprintf (stderr, "Last stabs entries before error:\n");
|
||||
fprintf (stderr, "n_type n_desc n_value string\n");
|
||||
|
||||
i = saved_stabs_index;
|
||||
do
|
||||
{
|
||||
struct saved_stab *stabp;
|
||||
|
||||
stabp = saved_stabs + i;
|
||||
if (stabp->string != NULL)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
s = bfd_get_stab_name (stabp->type);
|
||||
if (s != NULL)
|
||||
fprintf (stderr, "%-6s", s);
|
||||
else if (stabp->type == 0)
|
||||
fprintf (stderr, "HdrSym");
|
||||
else
|
||||
fprintf (stderr, "%-6d", stabp->type);
|
||||
fprintf (stderr, " %-6d ", stabp->desc);
|
||||
fprintf_vma (stderr, stabp->value);
|
||||
if (stabp->type != 0)
|
||||
fprintf (stderr, " %s", stabp->string);
|
||||
fprintf (stderr, "\n");
|
||||
}
|
||||
i = (i + 1) % SAVE_STABS_COUNT;
|
||||
}
|
||||
while (i != saved_stabs_index);
|
||||
}
|
||||
|
||||
/* Free the saved stab strings. */
|
||||
|
||||
static void
|
||||
free_saved_stabs ()
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < SAVE_STABS_COUNT; i++)
|
||||
{
|
||||
if (saved_stabs[i].string != NULL)
|
||||
{
|
||||
free (saved_stabs[i].string);
|
||||
saved_stabs[i].string = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
saved_stabs_index = 0;
|
||||
}
|
5082
pstack/stabs.c
5082
pstack/stabs.c
File diff suppressed because it is too large
Load diff
|
@ -81,7 +81,6 @@ mysqld_DEPENDENCIES= @mysql_plugin_libs@ $(SUPPORTING_LIBS) libndb.la
|
|||
LDADD = $(SUPPORTING_LIBS) @ZLIB_LIBS@ @NDB_SCI_LIBS@
|
||||
mysqld_LDADD = libndb.la \
|
||||
@MYSQLD_EXTRA_LDFLAGS@ \
|
||||
@pstack_libs@ \
|
||||
@mysql_plugin_libs@ \
|
||||
$(LDADD) $(CXXLDFLAGS) $(WRAPLIBS) @LIBDL@ \
|
||||
$(yassl_libs) $(openssl_libs) @MYSQLD_EXTRA_LIBS@
|
||||
|
|
|
@ -5698,7 +5698,6 @@ int ha_partition::extra(enum ha_extra_function operation)
|
|||
DBUG_RETURN(prepare_for_rename());
|
||||
break;
|
||||
case HA_EXTRA_PREPARE_FOR_UPDATE:
|
||||
DBUG_ASSERT(m_extra_cache);
|
||||
/*
|
||||
Needs to be run on the first partition in the range now, and
|
||||
later in late_extra_cache, when switching to a new partition to scan.
|
||||
|
@ -5706,6 +5705,8 @@ int ha_partition::extra(enum ha_extra_function operation)
|
|||
m_extra_prepare_for_update= TRUE;
|
||||
if (m_part_spec.start_part != NO_CURRENT_PART_ID)
|
||||
{
|
||||
if (!m_extra_cache)
|
||||
m_extra_cache_part_id= m_part_spec.start_part;
|
||||
DBUG_ASSERT(m_extra_cache_part_id == m_part_spec.start_part);
|
||||
(void) m_file[m_part_spec.start_part]->extra(HA_EXTRA_PREPARE_FOR_UPDATE);
|
||||
}
|
||||
|
@ -5977,19 +5978,22 @@ void ha_partition::late_extra_cache(uint partition_id)
|
|||
{
|
||||
handler *file;
|
||||
DBUG_ENTER("ha_partition::late_extra_cache");
|
||||
DBUG_PRINT("info", ("extra_cache %u partid %u size %u", m_extra_cache,
|
||||
DBUG_PRINT("info", ("extra_cache %u prepare %u partid %u size %u",
|
||||
m_extra_cache, m_extra_prepare_for_update,
|
||||
partition_id, m_extra_cache_size));
|
||||
|
||||
if (!m_extra_cache && !m_extra_prepare_for_update)
|
||||
DBUG_VOID_RETURN;
|
||||
file= m_file[partition_id];
|
||||
if (m_extra_cache_size == 0)
|
||||
(void) file->extra(HA_EXTRA_CACHE);
|
||||
else
|
||||
(void) file->extra_opt(HA_EXTRA_CACHE, m_extra_cache_size);
|
||||
if (m_extra_cache)
|
||||
{
|
||||
if (m_extra_cache_size == 0)
|
||||
(void) file->extra(HA_EXTRA_CACHE);
|
||||
else
|
||||
(void) file->extra_opt(HA_EXTRA_CACHE, m_extra_cache_size);
|
||||
}
|
||||
if (m_extra_prepare_for_update)
|
||||
{
|
||||
DBUG_ASSERT(m_extra_cache);
|
||||
(void) file->extra(HA_EXTRA_PREPARE_FOR_UPDATE);
|
||||
}
|
||||
m_extra_cache_part_id= partition_id;
|
||||
|
|
|
@ -5023,7 +5023,7 @@ void Item_func_get_user_var::fix_length_and_dec()
|
|||
decimals=0;
|
||||
break;
|
||||
case STRING_RESULT:
|
||||
max_length= MAX_BLOB_WIDTH;
|
||||
max_length= MAX_BLOB_WIDTH - 1;
|
||||
break;
|
||||
case DECIMAL_RESULT:
|
||||
fix_char_length(DECIMAL_MAX_STR_LENGTH);
|
||||
|
|
|
@ -2338,8 +2338,6 @@ void Item_extract::print(String *str, enum_query_type query_type)
|
|||
|
||||
void Item_extract::fix_length_and_dec()
|
||||
{
|
||||
value.alloc(32); // alloc buffer
|
||||
|
||||
maybe_null=1; // If wrong date
|
||||
switch (int_type) {
|
||||
case INTERVAL_YEAR: max_length=4; date_value=1; break;
|
||||
|
@ -2382,6 +2380,8 @@ longlong Item_extract::val_int()
|
|||
}
|
||||
else
|
||||
{
|
||||
char buf[40];
|
||||
String value(buf, sizeof(buf), &my_charset_bin);;
|
||||
String *res= args[0]->val_str(&value);
|
||||
if (!res ||
|
||||
str_to_time_with_warn(res->charset(), res->ptr(), res->length(),
|
||||
|
|
|
@ -733,7 +733,6 @@ public:
|
|||
|
||||
class Item_extract :public Item_int_func
|
||||
{
|
||||
String value;
|
||||
bool date_value;
|
||||
public:
|
||||
const interval_type int_type; // keep it public
|
||||
|
|
|
@ -97,13 +97,6 @@
|
|||
|
||||
#define mysqld_charset &my_charset_latin1
|
||||
|
||||
/* stack traces are only supported on linux intel */
|
||||
#if defined(__linux__) && defined(__i386__) && defined(USE_PSTACK)
|
||||
#define HAVE_STACK_TRACE_ON_SEGV
|
||||
#include "../pstack/pstack.h"
|
||||
char pstack_file_name[80];
|
||||
#endif /* __linux__ */
|
||||
|
||||
/* We have HAVE_purify below as this speeds up the shutdown of MySQL */
|
||||
|
||||
#if defined(HAVE_DEC_3_2_THREADS) || defined(SIGNALS_DONT_BREAK_READ) || defined(HAVE_purify) && defined(__linux__)
|
||||
|
@ -650,9 +643,6 @@ char *opt_logname, *opt_slow_logname;
|
|||
/* Static variables */
|
||||
|
||||
static bool kill_in_progress, segfaulted;
|
||||
#ifdef HAVE_STACK_TRACE_ON_SEGV
|
||||
static my_bool opt_do_pstack;
|
||||
#endif /* HAVE_STACK_TRACE_ON_SEGV */
|
||||
static my_bool opt_bootstrap, opt_myisam_log;
|
||||
static int cleanup_done;
|
||||
static ulong opt_specialflag;
|
||||
|
@ -2686,14 +2676,6 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused)))
|
|||
if (!opt_bootstrap)
|
||||
create_pid_file();
|
||||
|
||||
#ifdef HAVE_STACK_TRACE_ON_SEGV
|
||||
if (opt_do_pstack)
|
||||
{
|
||||
sprintf(pstack_file_name,"mysqld-%lu-%%d-%%d.backtrace", (ulong)getpid());
|
||||
pstack_install_segv_action(pstack_file_name);
|
||||
}
|
||||
#endif /* HAVE_STACK_TRACE_ON_SEGV */
|
||||
|
||||
/*
|
||||
signal to start_signal_handler that we are ready
|
||||
This works by waiting for start_signal_handler to free mutex,
|
||||
|
@ -5740,11 +5722,6 @@ struct my_option my_long_options[]=
|
|||
&disconnect_slave_event_count, &disconnect_slave_event_count,
|
||||
0, GET_INT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#endif /* HAVE_REPLICATION */
|
||||
#ifdef HAVE_STACK_TRACE_ON_SEGV
|
||||
{"enable-pstack", 0, "Print a symbolic stack trace on failure.",
|
||||
&opt_do_pstack, &opt_do_pstack, 0, GET_BOOL, NO_ARG, 0, 0,
|
||||
0, 0, 0, 0},
|
||||
#endif /* HAVE_STACK_TRACE_ON_SEGV */
|
||||
{"exit-info", 'T', "Used for debugging. Use at your own risk.", 0, 0, 0,
|
||||
GET_LONG, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||
|
||||
|
|
|
@ -742,7 +742,6 @@ bool partition_info::check_range_constants(THD *thd)
|
|||
longlong part_range_value;
|
||||
bool signed_flag= !part_expr->unsigned_flag;
|
||||
|
||||
part_result_type= INT_RESULT;
|
||||
range_int_array= (longlong*)sql_alloc(num_parts * sizeof(longlong));
|
||||
if (unlikely(range_int_array == NULL))
|
||||
{
|
||||
|
@ -917,7 +916,6 @@ bool partition_info::check_list_constants(THD *thd)
|
|||
List_iterator<partition_element> list_func_it(partitions);
|
||||
DBUG_ENTER("partition_info::check_list_constants");
|
||||
|
||||
part_result_type= INT_RESULT;
|
||||
num_list_values= 0;
|
||||
/*
|
||||
We begin by calculating the number of list values that have been
|
||||
|
@ -1608,6 +1606,52 @@ id_err:
|
|||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Check what kind of error to report
|
||||
|
||||
@param use_subpart_expr Use the subpart_expr instead of part_expr
|
||||
@param part_str Name of partition to report error (or NULL)
|
||||
*/
|
||||
void partition_info::report_part_expr_error(bool use_subpart_expr)
|
||||
{
|
||||
Item *expr= part_expr;
|
||||
DBUG_ENTER("partition_info::report_part_expr_error");
|
||||
if (use_subpart_expr)
|
||||
expr= subpart_expr;
|
||||
|
||||
if (expr->type() == Item::FIELD_ITEM)
|
||||
{
|
||||
partition_type type= part_type;
|
||||
bool list_of_fields= list_of_part_fields;
|
||||
Item_field *item_field= (Item_field*) expr;
|
||||
/*
|
||||
The expression consists of a single field.
|
||||
It must be of integer type unless KEY or COLUMNS partitioning.
|
||||
*/
|
||||
if (use_subpart_expr)
|
||||
{
|
||||
type= subpart_type;
|
||||
list_of_fields= list_of_subpart_fields;
|
||||
}
|
||||
if (!column_list &&
|
||||
item_field->field &&
|
||||
item_field->field->result_type() != INT_RESULT &&
|
||||
!(type == HASH_PARTITION && list_of_fields))
|
||||
{
|
||||
my_error(ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD, MYF(0),
|
||||
item_field->name);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
}
|
||||
if (use_subpart_expr)
|
||||
my_error(ER_PARTITION_FUNC_NOT_ALLOWED_ERROR, MYF(0), "SUBPARTITION");
|
||||
else
|
||||
my_error(ER_PARTITION_FUNC_NOT_ALLOWED_ERROR, MYF(0), "PARTITION");
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Create a new column value in current list with maxvalue
|
||||
Called from parser
|
||||
|
@ -1891,7 +1935,7 @@ int partition_info::reorganize_into_single_field_col_val()
|
|||
code.
|
||||
|
||||
SYNOPSIS
|
||||
fix_func_partition()
|
||||
fix_partition_values()
|
||||
thd Thread object
|
||||
col_val Array of one value
|
||||
part_elem The partition instance
|
||||
|
@ -1901,13 +1945,13 @@ int partition_info::reorganize_into_single_field_col_val()
|
|||
TRUE Failure
|
||||
FALSE Success
|
||||
*/
|
||||
int partition_info::fix_func_partition(THD *thd,
|
||||
part_elem_value *val,
|
||||
partition_element *part_elem,
|
||||
uint part_id)
|
||||
int partition_info::fix_partition_values(THD *thd,
|
||||
part_elem_value *val,
|
||||
partition_element *part_elem,
|
||||
uint part_id)
|
||||
{
|
||||
part_column_list_val *col_val= val->col_val_array;
|
||||
DBUG_ENTER("partition_info::fix_func_partition");
|
||||
DBUG_ENTER("partition_info::fix_partition_values");
|
||||
|
||||
if (col_val->fixed)
|
||||
{
|
||||
|
@ -1953,7 +1997,8 @@ int partition_info::fix_func_partition(THD *thd,
|
|||
}
|
||||
else if (item_expr->result_type() != INT_RESULT)
|
||||
{
|
||||
my_error(ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR, MYF(0));
|
||||
my_error(ER_VALUES_IS_NOT_INT_TYPE_ERROR, MYF(0),
|
||||
part_elem->partition_name);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
if (part_type == RANGE_PARTITION)
|
||||
|
@ -2168,7 +2213,7 @@ int partition_info::fix_parser_data(THD *thd)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (fix_func_partition(thd, val, part_elem, i))
|
||||
if (fix_partition_values(thd, val, part_elem, i))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
|
|
@ -166,7 +166,6 @@ public:
|
|||
key_map some_fields_in_PF;
|
||||
|
||||
handlerton *default_engine_type;
|
||||
Item_result part_result_type;
|
||||
partition_type part_type;
|
||||
partition_type subpart_type;
|
||||
|
||||
|
@ -226,7 +225,6 @@ public:
|
|||
curr_part_elem(NULL), current_partition(NULL),
|
||||
curr_list_object(0), num_columns(0),
|
||||
default_engine_type(NULL),
|
||||
part_result_type(INT_RESULT),
|
||||
part_type(NOT_A_PARTITION), subpart_type(NOT_A_PARTITION),
|
||||
part_info_len(0),
|
||||
part_func_len(0), subpart_func_len(0),
|
||||
|
@ -279,10 +277,10 @@ public:
|
|||
void print_no_partition_found(TABLE *table);
|
||||
void print_debug(const char *str, uint*);
|
||||
Item* get_column_item(Item *item, Field *field);
|
||||
int fix_func_partition(THD *thd,
|
||||
part_elem_value *val,
|
||||
partition_element *part_elem,
|
||||
uint part_id);
|
||||
int fix_partition_values(THD *thd,
|
||||
part_elem_value *val,
|
||||
partition_element *part_elem,
|
||||
uint part_id);
|
||||
bool fix_column_value_functions(THD *thd,
|
||||
part_elem_value *val,
|
||||
uint part_id);
|
||||
|
@ -299,6 +297,7 @@ public:
|
|||
bool init_column_part();
|
||||
bool add_column_list_value(THD *thd, Item *item);
|
||||
void set_show_version_string(String *packet);
|
||||
void report_part_expr_error(bool use_subpart_expr);
|
||||
private:
|
||||
static int list_part_cmp(const void* a, const void* b);
|
||||
bool set_up_default_partitions(handler *file, HA_CREATE_INFO *info,
|
||||
|
|
|
@ -6346,3 +6346,7 @@ ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN
|
|||
ER_FAILED_READ_FROM_PAR_FILE
|
||||
eng "Failed to read from the .par file"
|
||||
swe "Misslyckades läsa från .par filen"
|
||||
|
||||
ER_VALUES_IS_NOT_INT_TYPE_ERROR
|
||||
eng "VALUES value for partition '%-.64s' must have type INT"
|
||||
swe "Värden i VALUES för partition '%-.64s' måste ha typen INT"
|
||||
|
|
|
@ -1345,6 +1345,7 @@ READ_INFO::READ_INFO(File file_par, uint tot_length, CHARSET_INFO *cs,
|
|||
MYF(MY_WME)))
|
||||
{
|
||||
my_free(buffer); /* purecov: inspected */
|
||||
buffer= NULL;
|
||||
error=1;
|
||||
}
|
||||
else
|
||||
|
@ -1371,13 +1372,11 @@ READ_INFO::READ_INFO(File file_par, uint tot_length, CHARSET_INFO *cs,
|
|||
|
||||
READ_INFO::~READ_INFO()
|
||||
{
|
||||
if (!error)
|
||||
{
|
||||
if (need_end_io_cache)
|
||||
::end_io_cache(&cache);
|
||||
if (!error && need_end_io_cache)
|
||||
::end_io_cache(&cache);
|
||||
|
||||
if (buffer != NULL)
|
||||
my_free(buffer);
|
||||
error=1;
|
||||
}
|
||||
List_iterator<XML_TAG> xmlit(taglist);
|
||||
XML_TAG *t;
|
||||
while ((t= xmlit++))
|
||||
|
|
|
@ -70,6 +70,7 @@
|
|||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
#include "ha_partition.h"
|
||||
|
||||
/* TODO: Change abort() to DBUG_SUICIDE() when bug#52002 is pushed */
|
||||
#define ERROR_INJECT_CRASH(code) \
|
||||
DBUG_EVALUATE_IF(code, (abort(), 0), 0)
|
||||
#define ERROR_INJECT_ERROR(code) \
|
||||
|
@ -89,7 +90,6 @@ const LEX_STRING partition_keywords[]=
|
|||
{ C_STRING_WITH_LEN(" COLUMNS") }
|
||||
};
|
||||
static const char *part_str= "PARTITION";
|
||||
static const char *subpart_str= "SUBPARTITION";
|
||||
static const char *sub_str= "SUB";
|
||||
static const char *by_str= "BY";
|
||||
static const char *space_str= " ";
|
||||
|
@ -1762,8 +1762,7 @@ bool fix_partition_func(THD *thd, TABLE *table,
|
|||
goto end;
|
||||
if (unlikely(part_info->subpart_expr->result_type() != INT_RESULT))
|
||||
{
|
||||
my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0),
|
||||
subpart_str);
|
||||
part_info->report_part_expr_error(TRUE);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
@ -1790,10 +1789,9 @@ bool fix_partition_func(THD *thd, TABLE *table,
|
|||
goto end;
|
||||
if (unlikely(part_info->part_expr->result_type() != INT_RESULT))
|
||||
{
|
||||
my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0), part_str);
|
||||
part_info->report_part_expr_error(FALSE);
|
||||
goto end;
|
||||
}
|
||||
part_info->part_result_type= INT_RESULT;
|
||||
}
|
||||
part_info->fixed= TRUE;
|
||||
}
|
||||
|
@ -1839,18 +1837,22 @@ bool fix_partition_func(THD *thd, TABLE *table,
|
|||
if (unlikely(!part_info->column_list &&
|
||||
part_info->part_expr->result_type() != INT_RESULT))
|
||||
{
|
||||
my_error(ER_PARTITION_FUNC_NOT_ALLOWED_ERROR, MYF(0), part_str);
|
||||
part_info->report_part_expr_error(FALSE);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
if (((part_info->part_type != HASH_PARTITION ||
|
||||
part_info->list_of_part_fields == FALSE) &&
|
||||
(!part_info->column_list &&
|
||||
check_part_func_fields(part_info->part_field_array, TRUE))) ||
|
||||
part_info->list_of_part_fields == FALSE) &&
|
||||
!part_info->column_list &&
|
||||
check_part_func_fields(part_info->part_field_array, TRUE)) ||
|
||||
(part_info->list_of_subpart_fields == FALSE &&
|
||||
part_info->is_sub_partitioned() &&
|
||||
check_part_func_fields(part_info->subpart_field_array, TRUE)))
|
||||
{
|
||||
/*
|
||||
Range/List/HASH (but not KEY) and not COLUMNS or HASH subpartitioning
|
||||
with columns in the partitioning expression using unallowed charset.
|
||||
*/
|
||||
my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0));
|
||||
goto end;
|
||||
}
|
||||
|
@ -4353,43 +4355,31 @@ set_engine_all_partitions(partition_info *part_info,
|
|||
}
|
||||
} while (++i < part_info->num_parts);
|
||||
}
|
||||
/*
|
||||
SYNOPSIS
|
||||
fast_end_partition()
|
||||
thd Thread object
|
||||
out:copied Number of records copied
|
||||
out:deleted Number of records deleted
|
||||
table_list Table list with the one table in it
|
||||
empty Has nothing been done
|
||||
lpt Struct to be used by error handler
|
||||
|
||||
RETURN VALUES
|
||||
FALSE Success
|
||||
TRUE Failure
|
||||
|
||||
DESCRIPTION
|
||||
Support routine to handle the successful cases for partition
|
||||
management.
|
||||
/**
|
||||
Support routine to handle the successful cases for partition management.
|
||||
|
||||
@param thd Thread object
|
||||
@param copied Number of records copied
|
||||
@param deleted Number of records deleted
|
||||
@param table_list Table list with the one table in it
|
||||
|
||||
@return Operation status
|
||||
@retval FALSE Success
|
||||
@retval TRUE Failure
|
||||
*/
|
||||
|
||||
static int fast_end_partition(THD *thd, ulonglong copied,
|
||||
ulonglong deleted,
|
||||
TABLE_LIST *table_list, bool is_empty,
|
||||
ALTER_PARTITION_PARAM_TYPE *lpt,
|
||||
bool written_bin_log)
|
||||
TABLE_LIST *table_list)
|
||||
{
|
||||
char tmp_name[80];
|
||||
DBUG_ENTER("fast_end_partition");
|
||||
|
||||
thd->proc_info="end";
|
||||
|
||||
if (!is_empty)
|
||||
query_cache_invalidate3(thd, table_list, 0);
|
||||
|
||||
if ((!is_empty) && (!written_bin_log) &&
|
||||
(!thd->lex->no_write_to_binlog) &&
|
||||
write_bin_log(thd, FALSE, thd->query(), thd->query_length()))
|
||||
DBUG_RETURN(TRUE);
|
||||
query_cache_invalidate3(thd, table_list, 0);
|
||||
|
||||
my_snprintf(tmp_name, sizeof(tmp_name), ER(ER_INSERT_INFO),
|
||||
(ulong) (copied + deleted),
|
||||
|
@ -4511,29 +4501,25 @@ uint set_part_state(Alter_info *alter_info, partition_info *tab_part_info,
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
/**
|
||||
Prepare for ALTER TABLE of partition structure
|
||||
|
||||
SYNOPSIS
|
||||
prep_alter_part_table()
|
||||
thd Thread object
|
||||
table Table object
|
||||
inout:alter_info Alter information
|
||||
inout:create_info Create info for CREATE TABLE
|
||||
old_db_type Old engine type
|
||||
out:partition_changed Boolean indicating whether partition changed
|
||||
out:fast_alter_partition Boolean indicating whether fast partition
|
||||
change is requested
|
||||
@param[in] thd Thread object
|
||||
@param[in] table Table object
|
||||
@param[in,out] alter_info Alter information
|
||||
@param[in,out] create_info Create info for CREATE TABLE
|
||||
@param[in] old_db_type Old engine type
|
||||
@param[out] partition_changed Boolean indicating whether partition changed
|
||||
@param[out] fast_alter_table Internal temporary table allowing fast
|
||||
partition change or NULL if not possible
|
||||
|
||||
RETURN VALUES
|
||||
TRUE Error
|
||||
FALSE Success
|
||||
partition_changed
|
||||
fast_alter_partition
|
||||
@return Operation status
|
||||
@retval TRUE Error
|
||||
@retval FALSE Success
|
||||
|
||||
DESCRIPTION
|
||||
@note
|
||||
This method handles all preparations for ALTER TABLE for partitioned
|
||||
tables
|
||||
tables.
|
||||
We need to handle both partition management command such as Add Partition
|
||||
and others here as well as an ALTER TABLE that completely changes the
|
||||
partitioning and yet others that don't change anything at all. We start
|
||||
|
@ -4545,8 +4531,12 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
HA_CREATE_INFO *create_info,
|
||||
handlerton *old_db_type,
|
||||
bool *partition_changed,
|
||||
uint *fast_alter_partition)
|
||||
char *db,
|
||||
const char *table_name,
|
||||
const char *path,
|
||||
TABLE **fast_alter_table)
|
||||
{
|
||||
TABLE *new_table= NULL;
|
||||
DBUG_ENTER("prep_alter_part_table");
|
||||
|
||||
/* Foreign keys on partitioned tables are not supported, waits for WL#148 */
|
||||
|
@ -4555,15 +4545,9 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
my_error(ER_FOREIGN_KEY_ON_PARTITIONED, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
/*
|
||||
We are going to manipulate the partition info on the table object
|
||||
so we need to ensure that the table instance is removed from the
|
||||
table cache.
|
||||
*/
|
||||
if (table->part_info)
|
||||
table->m_needs_reopen= TRUE;
|
||||
|
||||
thd->work_part_info= thd->lex->part_info;
|
||||
|
||||
if (thd->work_part_info &&
|
||||
!(thd->work_part_info= thd->lex->part_info->get_clone()))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
@ -4576,7 +4560,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
ALTER_COALESCE_PARTITION | ALTER_REORGANIZE_PARTITION |
|
||||
ALTER_TABLE_REORG | ALTER_REBUILD_PARTITION))
|
||||
{
|
||||
partition_info *tab_part_info= table->part_info;
|
||||
partition_info *tab_part_info;
|
||||
partition_info *alt_part_info= thd->work_part_info;
|
||||
uint flags= 0;
|
||||
bool is_last_partition_reorged= FALSE;
|
||||
|
@ -4584,11 +4568,32 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
part_elem_value *alt_max_elem_val= NULL;
|
||||
longlong tab_max_range= 0, alt_max_range= 0;
|
||||
|
||||
if (!tab_part_info)
|
||||
if (!table->part_info)
|
||||
{
|
||||
my_error(ER_PARTITION_MGMT_ON_NONPARTITIONED, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
/*
|
||||
Open our intermediate table, we will operate on a temporary instance
|
||||
of the original table, to be able to skip copying all partitions.
|
||||
Open it as a copy of the original table, and modify its partition_info
|
||||
object to allow fast_alter_partition_table to perform the changes.
|
||||
*/
|
||||
DBUG_ASSERT(thd->mdl_context.is_lock_owner(MDL_key::TABLE, db, table_name,
|
||||
MDL_INTENTION_EXCLUSIVE));
|
||||
new_table= open_table_uncached(thd, path, db, table_name, 0);
|
||||
if (!new_table)
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
/*
|
||||
This table may be used for copy rows between partitions
|
||||
and also read/write columns when fixing the partition_info struct.
|
||||
*/
|
||||
new_table->use_all_columns();
|
||||
|
||||
tab_part_info= new_table->part_info;
|
||||
|
||||
if (alter_info->flags & ALTER_TABLE_REORG)
|
||||
{
|
||||
uint new_part_no, curr_part_no;
|
||||
|
@ -4596,9 +4601,9 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
tab_part_info->use_default_num_partitions)
|
||||
{
|
||||
my_error(ER_REORG_NO_PARAM_ERROR, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
new_part_no= table->file->get_default_no_partitions(create_info);
|
||||
new_part_no= new_table->file->get_default_no_partitions(create_info);
|
||||
curr_part_no= tab_part_info->num_parts;
|
||||
if (new_part_no == curr_part_no)
|
||||
{
|
||||
|
@ -4607,7 +4612,8 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
after the change as before. Thus we can reply ok immediately
|
||||
without any changes at all.
|
||||
*/
|
||||
*fast_alter_partition= TRUE;
|
||||
*fast_alter_table= new_table;
|
||||
thd->work_part_info= tab_part_info;
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
else if (new_part_no > curr_part_no)
|
||||
|
@ -4629,15 +4635,15 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
alter_info->num_parts= curr_part_no - new_part_no;
|
||||
}
|
||||
}
|
||||
if (!(flags= table->file->alter_table_flags(alter_info->flags)))
|
||||
if (!(flags= new_table->file->alter_table_flags(alter_info->flags)))
|
||||
{
|
||||
my_error(ER_PARTITION_FUNCTION_FAILURE, MYF(0));
|
||||
DBUG_RETURN(1);
|
||||
goto err;
|
||||
}
|
||||
*fast_alter_partition=
|
||||
((flags & (HA_FAST_CHANGE_PARTITION | HA_PARTITION_ONE_PHASE)) != 0);
|
||||
DBUG_PRINT("info", ("*fast_alter_partition: %d flags: 0x%x",
|
||||
*fast_alter_partition, flags));
|
||||
if ((flags & (HA_FAST_CHANGE_PARTITION | HA_PARTITION_ONE_PHASE)) != 0)
|
||||
*fast_alter_table= new_table;
|
||||
DBUG_PRINT("info", ("*fast_alter_table: %p flags: 0x%x",
|
||||
*fast_alter_table, flags));
|
||||
if ((alter_info->flags & ALTER_ADD_PARTITION) ||
|
||||
(alter_info->flags & ALTER_REORGANIZE_PARTITION))
|
||||
{
|
||||
|
@ -4648,12 +4654,12 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
if (tab_part_info->part_type == RANGE_PARTITION)
|
||||
{
|
||||
my_error(ER_PARTITIONS_MUST_BE_DEFINED_ERROR, MYF(0), "RANGE");
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
else if (tab_part_info->part_type == LIST_PARTITION)
|
||||
{
|
||||
my_error(ER_PARTITIONS_MUST_BE_DEFINED_ERROR, MYF(0), "LIST");
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
/*
|
||||
Hash partitions can be altered without parser finds out about
|
||||
|
@ -4684,7 +4690,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
my_error(ER_PARTITION_REQUIRES_VALUES_ERROR, MYF(0),
|
||||
"LIST", "IN");
|
||||
}
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
if ((tab_part_info->column_list &&
|
||||
|
@ -4698,12 +4704,12 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
alt_part_info->num_columns != 0))
|
||||
{
|
||||
my_error(ER_PARTITION_COLUMN_LIST_ERROR, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
alt_part_info->column_list= tab_part_info->column_list;
|
||||
if (alt_part_info->fix_parser_data(thd))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
if (alter_info->flags & ALTER_ADD_PARTITION)
|
||||
|
@ -4726,17 +4732,17 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
tab_part_info->part_type != HASH_PARTITION)
|
||||
{
|
||||
my_error(ER_NO_BINLOG_ERROR, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (tab_part_info->defined_max_value)
|
||||
{
|
||||
my_error(ER_PARTITION_MAXVALUE_ERROR, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (num_new_partitions == 0)
|
||||
{
|
||||
my_error(ER_ADD_PARTITION_NO_NEW_PARTITION, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (tab_part_info->is_sub_partitioned())
|
||||
{
|
||||
|
@ -4745,7 +4751,7 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
else if (alt_part_info->num_subparts != tab_part_info->num_subparts)
|
||||
{
|
||||
my_error(ER_ADD_PARTITION_SUBPART_ERROR, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
check_total_partitions= new_total_partitions*
|
||||
alt_part_info->num_subparts;
|
||||
|
@ -4753,15 +4759,15 @@ uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
|||
if (check_total_partitions > MAX_PARTITIONS)
|
||||
{
|
||||
my_error(ER_TOO_MANY_PARTITIONS_ERROR, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
alt_part_info->part_type= tab_part_info->part_type;
|
||||
alt_part_info->subpart_type= tab_part_info->subpart_type;
|
||||
if (alt_part_info->set_up_defaults_for_partitioning(table->file,
|
||||
if (alt_part_info->set_up_defaults_for_partitioning(new_table->file,
|
||||
ULL(0),
|
||||
tab_part_info->num_parts))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
/*
|
||||
Handling of on-line cases:
|
||||
|
@ -4825,7 +4831,7 @@ adding and copying partitions, the second after completing the adding
|
|||
and copying and finally the third line after also dropping the partitions
|
||||
that are reorganised.
|
||||
*/
|
||||
if (*fast_alter_partition &&
|
||||
if (*fast_alter_table &&
|
||||
tab_part_info->part_type == HASH_PARTITION)
|
||||
{
|
||||
uint part_no= 0, start_part= 1, start_sec_part= 1;
|
||||
|
@ -4930,12 +4936,12 @@ that are reorganised.
|
|||
do
|
||||
{
|
||||
partition_element *part_elem= alt_it++;
|
||||
if (*fast_alter_partition)
|
||||
if (*fast_alter_table)
|
||||
part_elem->part_state= PART_TO_BE_ADDED;
|
||||
if (tab_part_info->partitions.push_back(part_elem))
|
||||
{
|
||||
mem_alloc_error(1);
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
} while (++part_count < num_new_partitions);
|
||||
tab_part_info->num_parts+= num_new_partitions;
|
||||
|
@ -4976,12 +4982,12 @@ that are reorganised.
|
|||
tab_part_info->part_type == LIST_PARTITION))
|
||||
{
|
||||
my_error(ER_ONLY_ON_RANGE_LIST_PARTITION, MYF(0), "DROP");
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (num_parts_dropped >= tab_part_info->num_parts)
|
||||
{
|
||||
my_error(ER_DROP_LAST_PARTITION, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
do
|
||||
{
|
||||
|
@ -4999,12 +5005,12 @@ that are reorganised.
|
|||
if (num_parts_found != num_parts_dropped)
|
||||
{
|
||||
my_error(ER_DROP_PARTITION_NON_EXISTENT, MYF(0), "DROP");
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (table->file->is_fk_defined_on_table_or_index(MAX_KEY))
|
||||
if (new_table->file->is_fk_defined_on_table_or_index(MAX_KEY))
|
||||
{
|
||||
my_error(ER_ROW_IS_REFERENCED, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
tab_part_info->num_parts-= num_parts_dropped;
|
||||
}
|
||||
|
@ -5017,12 +5023,12 @@ that are reorganised.
|
|||
(!(alter_info->flags & ALTER_ALL_PARTITION)))
|
||||
{
|
||||
my_error(ER_DROP_PARTITION_NON_EXISTENT, MYF(0), "REBUILD");
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (!(*fast_alter_partition))
|
||||
if (!(*fast_alter_table))
|
||||
{
|
||||
table->file->print_error(HA_ERR_WRONG_COMMAND, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
new_table->file->print_error(HA_ERR_WRONG_COMMAND, MYF(0));
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
else if (alter_info->flags & ALTER_COALESCE_PARTITION)
|
||||
|
@ -5033,17 +5039,17 @@ that are reorganised.
|
|||
if (tab_part_info->part_type != HASH_PARTITION)
|
||||
{
|
||||
my_error(ER_COALESCE_ONLY_ON_HASH_PARTITION, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (num_parts_coalesced == 0)
|
||||
{
|
||||
my_error(ER_COALESCE_PARTITION_NO_PARTITION, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (num_parts_coalesced >= tab_part_info->num_parts)
|
||||
{
|
||||
my_error(ER_DROP_LAST_PARTITION, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
/*
|
||||
Online handling:
|
||||
|
@ -5082,7 +5088,7 @@ state of p1.
|
|||
uint part_count= 0, start_part= 1, start_sec_part= 1;
|
||||
uint end_part= 0, end_sec_part= 0;
|
||||
bool all_parts= TRUE;
|
||||
if (*fast_alter_partition &&
|
||||
if (*fast_alter_table &&
|
||||
tab_part_info->linear_hash_ind)
|
||||
{
|
||||
uint upper_2n= tab_part_info->linear_hash_mask + 1;
|
||||
|
@ -5108,14 +5114,14 @@ state of p1.
|
|||
do
|
||||
{
|
||||
partition_element *p_elem= part_it++;
|
||||
if (*fast_alter_partition &&
|
||||
if (*fast_alter_table &&
|
||||
(all_parts ||
|
||||
(part_count >= start_part && part_count <= end_part) ||
|
||||
(part_count >= start_sec_part && part_count <= end_sec_part)))
|
||||
p_elem->part_state= PART_CHANGED;
|
||||
if (++part_count > num_parts_remain)
|
||||
{
|
||||
if (*fast_alter_partition)
|
||||
if (*fast_alter_table)
|
||||
p_elem->part_state= PART_REORGED_DROPPED;
|
||||
else
|
||||
part_it.remove();
|
||||
|
@ -5150,38 +5156,38 @@ state of p1.
|
|||
if (num_parts_reorged > tab_part_info->num_parts)
|
||||
{
|
||||
my_error(ER_REORG_PARTITION_NOT_EXIST, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (!(tab_part_info->part_type == RANGE_PARTITION ||
|
||||
tab_part_info->part_type == LIST_PARTITION) &&
|
||||
(num_parts_new != num_parts_reorged))
|
||||
{
|
||||
my_error(ER_REORG_HASH_ONLY_ON_SAME_NO, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (tab_part_info->is_sub_partitioned() &&
|
||||
alt_part_info->num_subparts &&
|
||||
alt_part_info->num_subparts != tab_part_info->num_subparts)
|
||||
{
|
||||
my_error(ER_PARTITION_WRONG_NO_SUBPART_ERROR, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
check_total_partitions= tab_part_info->num_parts + num_parts_new;
|
||||
check_total_partitions-= num_parts_reorged;
|
||||
if (check_total_partitions > MAX_PARTITIONS)
|
||||
{
|
||||
my_error(ER_TOO_MANY_PARTITIONS_ERROR, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
alt_part_info->part_type= tab_part_info->part_type;
|
||||
alt_part_info->subpart_type= tab_part_info->subpart_type;
|
||||
alt_part_info->num_subparts= tab_part_info->num_subparts;
|
||||
DBUG_ASSERT(!alt_part_info->use_default_partitions);
|
||||
if (alt_part_info->set_up_defaults_for_partitioning(table->file,
|
||||
if (alt_part_info->set_up_defaults_for_partitioning(new_table->file,
|
||||
ULL(0),
|
||||
0))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
/*
|
||||
Online handling:
|
||||
|
@ -5240,13 +5246,13 @@ the generated partition syntax in a correct manner.
|
|||
}
|
||||
else
|
||||
tab_max_range= part_elem->range_value;
|
||||
if (*fast_alter_partition &&
|
||||
if (*fast_alter_table &&
|
||||
tab_part_info->temp_partitions.push_back(part_elem))
|
||||
{
|
||||
mem_alloc_error(1);
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (*fast_alter_partition)
|
||||
if (*fast_alter_table)
|
||||
part_elem->part_state= PART_TO_BE_REORGED;
|
||||
if (!found_first)
|
||||
{
|
||||
|
@ -5266,7 +5272,7 @@ the generated partition syntax in a correct manner.
|
|||
else
|
||||
alt_max_range= alt_part_elem->range_value;
|
||||
|
||||
if (*fast_alter_partition)
|
||||
if (*fast_alter_table)
|
||||
alt_part_elem->part_state= PART_TO_BE_ADDED;
|
||||
if (alt_part_count == 0)
|
||||
tab_it.replace(alt_part_elem);
|
||||
|
@ -5277,7 +5283,7 @@ the generated partition syntax in a correct manner.
|
|||
else if (found_last)
|
||||
{
|
||||
my_error(ER_CONSECUTIVE_REORG_PARTITIONS, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
else
|
||||
tab_it.remove();
|
||||
|
@ -5291,7 +5297,7 @@ the generated partition syntax in a correct manner.
|
|||
if (drop_count != num_parts_reorged)
|
||||
{
|
||||
my_error(ER_DROP_PARTITION_NON_EXISTENT, MYF(0), "REORGANIZE");
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
tab_part_info->num_parts= check_total_partitions;
|
||||
}
|
||||
|
@ -5312,9 +5318,9 @@ the generated partition syntax in a correct manner.
|
|||
tab_part_info->use_default_num_subpartitions= FALSE;
|
||||
}
|
||||
if (tab_part_info->check_partition_info(thd, (handlerton**)NULL,
|
||||
table->file, ULL(0), TRUE))
|
||||
new_table->file, ULL(0), TRUE))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
/*
|
||||
The check below needs to be performed after check_partition_info
|
||||
|
@ -5346,7 +5352,7 @@ the generated partition syntax in a correct manner.
|
|||
to create "holes".
|
||||
*/
|
||||
my_error(ER_REORG_OUTSIDE_RANGE, MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5463,7 +5469,7 @@ the generated partition syntax in a correct manner.
|
|||
*partition_changed= TRUE;
|
||||
if (thd->work_part_info->fix_parser_data(thd))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
@ -5484,7 +5490,7 @@ the generated partition syntax in a correct manner.
|
|||
if (check_native_partitioned(create_info, &is_native_partitioned,
|
||||
part_info, thd))
|
||||
{
|
||||
DBUG_RETURN(TRUE);
|
||||
goto err;
|
||||
}
|
||||
if (!is_native_partitioned)
|
||||
{
|
||||
|
@ -5494,6 +5500,17 @@ the generated partition syntax in a correct manner.
|
|||
}
|
||||
}
|
||||
DBUG_RETURN(FALSE);
|
||||
err:
|
||||
if (new_table)
|
||||
{
|
||||
/*
|
||||
Only remove the intermediate table object and its share object,
|
||||
do not remove the .frm file, since it is the original one.
|
||||
*/
|
||||
close_temporary(new_table, 1, 0);
|
||||
}
|
||||
*fast_alter_table= NULL;
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
|
||||
|
@ -5536,6 +5553,11 @@ static bool mysql_change_partitions(ALTER_PARTITION_PARAM_TYPE *lpt)
|
|||
if(mysql_trans_prepare_alter_copy_data(thd))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
if (file->ha_external_lock(thd, F_WRLCK))
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
/* TODO: test if bulk_insert would increase the performance */
|
||||
|
||||
if ((error= file->ha_change_partitions(lpt->create_info, path, &lpt->copied,
|
||||
&lpt->deleted, lpt->pack_frm_data,
|
||||
lpt->pack_frm_len)))
|
||||
|
@ -5544,7 +5566,10 @@ static bool mysql_change_partitions(ALTER_PARTITION_PARAM_TYPE *lpt)
|
|||
}
|
||||
|
||||
if (mysql_trans_commit_alter_copy_data(thd))
|
||||
DBUG_RETURN(TRUE); /* The error has been reported */
|
||||
error= 1; /* The error has been reported */
|
||||
|
||||
if (file->ha_external_lock(thd, F_UNLCK))
|
||||
error= 1;
|
||||
|
||||
DBUG_RETURN(test(error));
|
||||
}
|
||||
|
@ -6294,8 +6319,18 @@ static void alter_partition_lock_handling(ALTER_PARTITION_PARAM_TYPE *lpt)
|
|||
{
|
||||
THD *thd= lpt->thd;
|
||||
|
||||
close_all_tables_for_name(thd, lpt->table->s, FALSE);
|
||||
if (lpt->old_table)
|
||||
close_all_tables_for_name(thd, lpt->old_table->s, FALSE);
|
||||
if (lpt->table)
|
||||
{
|
||||
/*
|
||||
Only remove the intermediate table object and its share object,
|
||||
do not remove the .frm file, since it is the original one.
|
||||
*/
|
||||
close_temporary(lpt->table, 1, 0);
|
||||
}
|
||||
lpt->table= 0;
|
||||
lpt->old_table= 0;
|
||||
lpt->table_list->table= 0;
|
||||
if (thd->locked_tables_list.reopen_tables(thd))
|
||||
sql_print_warning("We failed to reacquire LOCKs in ALTER TABLE");
|
||||
|
@ -6307,62 +6342,40 @@ static void alter_partition_lock_handling(ALTER_PARTITION_PARAM_TYPE *lpt)
|
|||
SYNOPSIS
|
||||
alter_close_tables()
|
||||
lpt Struct carrying parameters
|
||||
close_old Close original table too
|
||||
RETURN VALUES
|
||||
0
|
||||
*/
|
||||
|
||||
static int alter_close_tables(ALTER_PARTITION_PARAM_TYPE *lpt)
|
||||
static int alter_close_tables(ALTER_PARTITION_PARAM_TYPE *lpt, bool close_old)
|
||||
{
|
||||
TABLE_SHARE *share= lpt->table->s;
|
||||
THD *thd= lpt->thd;
|
||||
TABLE *table;
|
||||
DBUG_ENTER("alter_close_tables");
|
||||
/*
|
||||
We must keep LOCK_open while manipulating with thd->open_tables.
|
||||
Another thread may be working on it.
|
||||
*/
|
||||
mysql_mutex_lock(&LOCK_open);
|
||||
/*
|
||||
We can safely remove locks for all tables with the same name:
|
||||
later they will all be closed anyway in
|
||||
alter_partition_lock_handling().
|
||||
*/
|
||||
for (table= thd->open_tables; table ; table= table->next)
|
||||
if (lpt->table->db_stat)
|
||||
{
|
||||
if (!strcmp(table->s->table_name.str, share->table_name.str) &&
|
||||
!strcmp(table->s->db.str, share->db.str))
|
||||
{
|
||||
mysql_lock_remove(thd, thd->lock, table);
|
||||
table->file->close();
|
||||
table->db_stat= 0; // Mark file closed
|
||||
/*
|
||||
Ensure that we won't end up with a crippled table instance
|
||||
in the table cache if an error occurs before we reach
|
||||
alter_partition_lock_handling() and the table is closed
|
||||
by close_thread_tables() instead.
|
||||
*/
|
||||
tdc_remove_table(thd, TDC_RT_REMOVE_UNUSED,
|
||||
table->s->db.str,
|
||||
table->s->table_name.str, TRUE);
|
||||
}
|
||||
lpt->table->file->close();
|
||||
lpt->table->db_stat= 0; // Mark file closed
|
||||
}
|
||||
if (close_old && lpt->old_table)
|
||||
{
|
||||
close_all_tables_for_name(lpt->thd, lpt->old_table->s, FALSE);
|
||||
lpt->old_table= 0;
|
||||
}
|
||||
mysql_mutex_unlock(&LOCK_open);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Handle errors for ALTER TABLE for partitioning
|
||||
SYNOPSIS
|
||||
handle_alter_part_error()
|
||||
lpt Struct carrying parameters
|
||||
not_completed Was request in complete phase when error occurred
|
||||
RETURN VALUES
|
||||
NONE
|
||||
/**
|
||||
Handle errors for ALTER TABLE for partitioning.
|
||||
|
||||
@param lpt Struct carrying parameters
|
||||
@param action_completed The action must be completed, NOT reverted
|
||||
@param drop_partition Partitions has not been dropped yet
|
||||
@param frm_install The shadow frm-file has not yet been installed
|
||||
@param close_table Table is still open, close it before reverting
|
||||
*/
|
||||
|
||||
void handle_alter_part_error(ALTER_PARTITION_PARAM_TYPE *lpt,
|
||||
bool not_completed,
|
||||
bool action_completed,
|
||||
bool drop_partition,
|
||||
bool frm_install,
|
||||
bool close_table)
|
||||
|
@ -6379,7 +6392,7 @@ void handle_alter_part_error(ALTER_PARTITION_PARAM_TYPE *lpt,
|
|||
so we clone it first to have a copy.
|
||||
*/
|
||||
part_info= lpt->part_info->get_clone();
|
||||
alter_close_tables(lpt);
|
||||
alter_close_tables(lpt, action_completed);
|
||||
}
|
||||
|
||||
if (part_info->first_log_entry &&
|
||||
|
@ -6392,7 +6405,7 @@ void handle_alter_part_error(ALTER_PARTITION_PARAM_TYPE *lpt,
|
|||
*/
|
||||
write_log_completed(lpt, FALSE);
|
||||
release_log_entries(part_info);
|
||||
if (not_completed)
|
||||
if (!action_completed)
|
||||
{
|
||||
if (drop_partition)
|
||||
{
|
||||
|
@ -6457,7 +6470,7 @@ void handle_alter_part_error(ALTER_PARTITION_PARAM_TYPE *lpt,
|
|||
else
|
||||
{
|
||||
release_log_entries(part_info);
|
||||
if (not_completed)
|
||||
if (!action_completed)
|
||||
{
|
||||
/*
|
||||
We hit an error before things were completed but managed
|
||||
|
@ -6500,25 +6513,24 @@ static void downgrade_mdl_if_lock_tables_mode(THD *thd, MDL_ticket *ticket,
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
/**
|
||||
Actually perform the change requested by ALTER TABLE of partitions
|
||||
previously prepared.
|
||||
|
||||
SYNOPSIS
|
||||
fast_alter_partition_table()
|
||||
thd Thread object
|
||||
table Table object
|
||||
alter_info ALTER TABLE info
|
||||
create_info Create info for CREATE TABLE
|
||||
table_list List of the table involved
|
||||
db Database name of new table
|
||||
table_name Table name of new table
|
||||
@param thd Thread object
|
||||
@param table Original table object
|
||||
@param alter_info ALTER TABLE info
|
||||
@param create_info Create info for CREATE TABLE
|
||||
@param table_list List of the table involved
|
||||
@param db Database name of new table
|
||||
@param table_name Table name of new table
|
||||
@param fast_alter_table Prepared table object
|
||||
|
||||
RETURN VALUES
|
||||
TRUE Error
|
||||
FALSE Success
|
||||
@return Operation status
|
||||
@retval TRUE Error
|
||||
@retval FALSE Success
|
||||
|
||||
DESCRIPTION
|
||||
@note
|
||||
Perform all ALTER TABLE operations for partitioned tables that can be
|
||||
performed fast without a full copy of the original table.
|
||||
*/
|
||||
|
@ -6529,19 +6541,20 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
TABLE_LIST *table_list,
|
||||
char *db,
|
||||
const char *table_name,
|
||||
uint fast_alter_partition)
|
||||
TABLE *fast_alter_table)
|
||||
{
|
||||
/* Set-up struct used to write frm files */
|
||||
partition_info *part_info= table->part_info;
|
||||
partition_info *part_info;
|
||||
ALTER_PARTITION_PARAM_TYPE lpt_obj;
|
||||
ALTER_PARTITION_PARAM_TYPE *lpt= &lpt_obj;
|
||||
bool written_bin_log= TRUE;
|
||||
bool not_completed= TRUE;
|
||||
bool action_completed= FALSE;
|
||||
bool close_table_on_failure= FALSE;
|
||||
bool frm_install= FALSE;
|
||||
MDL_ticket *mdl_ticket= table->mdl_ticket;
|
||||
DBUG_ASSERT(fast_alter_table);
|
||||
DBUG_ENTER("fast_alter_partition_table");
|
||||
|
||||
part_info= fast_alter_table->part_info;
|
||||
lpt->thd= thd;
|
||||
lpt->table_list= table_list;
|
||||
lpt->part_info= part_info;
|
||||
|
@ -6550,7 +6563,8 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
lpt->db_options= create_info->table_options;
|
||||
if (create_info->row_type == ROW_TYPE_DYNAMIC)
|
||||
lpt->db_options|= HA_OPTION_PACK_RECORD;
|
||||
lpt->table= table;
|
||||
lpt->table= fast_alter_table;
|
||||
lpt->old_table= table;
|
||||
lpt->key_info_buffer= 0;
|
||||
lpt->key_count= 0;
|
||||
lpt->db= db;
|
||||
|
@ -6559,12 +6573,12 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
lpt->deleted= 0;
|
||||
lpt->pack_frm_data= NULL;
|
||||
lpt->pack_frm_len= 0;
|
||||
thd->work_part_info= part_info;
|
||||
|
||||
/* Never update timestamp columns when alter */
|
||||
table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
|
||||
lpt->table->timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
|
||||
|
||||
if (fast_alter_partition & HA_PARTITION_ONE_PHASE)
|
||||
if (table->file->alter_table_flags(alter_info->flags) &
|
||||
HA_PARTITION_ONE_PHASE)
|
||||
{
|
||||
/*
|
||||
In the case where the engine supports one phase online partition
|
||||
|
@ -6681,11 +6695,11 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
ERROR_INJECT_ERROR("fail_drop_partition_3") ||
|
||||
(close_table_on_failure= TRUE, FALSE) ||
|
||||
write_log_drop_partition(lpt) ||
|
||||
(action_completed= TRUE, FALSE) ||
|
||||
ERROR_INJECT_CRASH("crash_drop_partition_4") ||
|
||||
ERROR_INJECT_ERROR("fail_drop_partition_4") ||
|
||||
alter_close_tables(lpt, action_completed) ||
|
||||
(close_table_on_failure= FALSE, FALSE) ||
|
||||
(not_completed= FALSE, FALSE) ||
|
||||
alter_close_tables(lpt) ||
|
||||
ERROR_INJECT_CRASH("crash_drop_partition_5") ||
|
||||
ERROR_INJECT_ERROR("fail_drop_partition_5") ||
|
||||
((!thd->lex->no_write_to_binlog) &&
|
||||
|
@ -6706,7 +6720,7 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
ERROR_INJECT_ERROR("fail_drop_partition_9") ||
|
||||
(alter_partition_lock_handling(lpt), FALSE))
|
||||
{
|
||||
handle_alter_part_error(lpt, not_completed, TRUE, frm_install,
|
||||
handle_alter_part_error(lpt, action_completed, TRUE, frm_install,
|
||||
close_table_on_failure);
|
||||
goto err;
|
||||
}
|
||||
|
@ -6761,7 +6775,7 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
ERROR_INJECT_CRASH("crash_add_partition_5") ||
|
||||
ERROR_INJECT_ERROR("fail_add_partition_5") ||
|
||||
(close_table_on_failure= FALSE, FALSE) ||
|
||||
alter_close_tables(lpt) ||
|
||||
alter_close_tables(lpt, action_completed) ||
|
||||
ERROR_INJECT_CRASH("crash_add_partition_6") ||
|
||||
ERROR_INJECT_ERROR("fail_add_partition_6") ||
|
||||
((!thd->lex->no_write_to_binlog) &&
|
||||
|
@ -6770,11 +6784,12 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
ERROR_INJECT_CRASH("crash_add_partition_7") ||
|
||||
ERROR_INJECT_ERROR("fail_add_partition_7") ||
|
||||
write_log_rename_frm(lpt) ||
|
||||
(frm_install= TRUE, FALSE) ||
|
||||
(not_completed= FALSE, FALSE) ||
|
||||
(action_completed= TRUE, FALSE) ||
|
||||
ERROR_INJECT_CRASH("crash_add_partition_8") ||
|
||||
ERROR_INJECT_ERROR("fail_add_partition_8") ||
|
||||
(frm_install= TRUE, FALSE) ||
|
||||
mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) ||
|
||||
(frm_install= FALSE, FALSE) ||
|
||||
ERROR_INJECT_CRASH("crash_add_partition_9") ||
|
||||
ERROR_INJECT_ERROR("fail_add_partition_9") ||
|
||||
(write_log_completed(lpt, FALSE), FALSE) ||
|
||||
|
@ -6782,7 +6797,7 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
ERROR_INJECT_ERROR("fail_add_partition_10") ||
|
||||
(alter_partition_lock_handling(lpt), FALSE))
|
||||
{
|
||||
handle_alter_part_error(lpt, not_completed, FALSE, frm_install,
|
||||
handle_alter_part_error(lpt, action_completed, FALSE, frm_install,
|
||||
close_table_on_failure);
|
||||
goto err;
|
||||
}
|
||||
|
@ -6831,10 +6846,10 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
can release all other locks on the table and since no one can open
|
||||
the table, there can be no new threads accessing the table. They
|
||||
will be hanging on this exclusive lock.
|
||||
5) Close all instances of the table and remove them from the table cache.
|
||||
6) Log that operation is completed and log all complete actions
|
||||
5) Log that operation is completed and log all complete actions
|
||||
needed to complete operation from here
|
||||
7) Write bin log
|
||||
6) Write bin log
|
||||
7) Close all instances of the table and remove them from the table cache.
|
||||
8) Prepare handlers for rename and delete of partitions
|
||||
9) Rename and drop the reorged partitions such that they are no
|
||||
longer used and rename those added to their real new names.
|
||||
|
@ -6858,27 +6873,28 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
wait_while_table_is_used(thd, table, HA_EXTRA_FORCE_REOPEN) ||
|
||||
ERROR_INJECT_CRASH("crash_change_partition_5") ||
|
||||
ERROR_INJECT_ERROR("fail_change_partition_5") ||
|
||||
alter_close_tables(lpt) ||
|
||||
(close_table_on_failure= FALSE) ||
|
||||
write_log_final_change_partition(lpt) ||
|
||||
(action_completed= TRUE, FALSE) ||
|
||||
ERROR_INJECT_CRASH("crash_change_partition_6") ||
|
||||
ERROR_INJECT_ERROR("fail_change_partition_6") ||
|
||||
write_log_final_change_partition(lpt) ||
|
||||
(not_completed= FALSE) ||
|
||||
ERROR_INJECT_CRASH("crash_change_partition_7") ||
|
||||
ERROR_INJECT_ERROR("fail_change_partition_7") ||
|
||||
((!thd->lex->no_write_to_binlog) &&
|
||||
(write_bin_log(thd, FALSE,
|
||||
thd->query(), thd->query_length()), FALSE)) ||
|
||||
ERROR_INJECT_CRASH("crash_change_partition_7") ||
|
||||
ERROR_INJECT_ERROR("fail_change_partition_7") ||
|
||||
((frm_install= TRUE), FALSE) ||
|
||||
mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) ||
|
||||
(frm_install= FALSE, FALSE) ||
|
||||
ERROR_INJECT_CRASH("crash_change_partition_8") ||
|
||||
ERROR_INJECT_ERROR("fail_change_partition_8") ||
|
||||
mysql_write_frm(lpt, WFRM_INSTALL_SHADOW) ||
|
||||
alter_close_tables(lpt, action_completed) ||
|
||||
(close_table_on_failure= FALSE, FALSE) ||
|
||||
ERROR_INJECT_CRASH("crash_change_partition_9") ||
|
||||
ERROR_INJECT_ERROR("fail_change_partition_9") ||
|
||||
mysql_drop_partitions(lpt) ||
|
||||
ERROR_INJECT_CRASH("crash_change_partition_10") ||
|
||||
ERROR_INJECT_ERROR("fail_change_partition_10") ||
|
||||
mysql_rename_partitions(lpt) ||
|
||||
((frm_install= TRUE), FALSE) ||
|
||||
ERROR_INJECT_CRASH("crash_change_partition_11") ||
|
||||
ERROR_INJECT_ERROR("fail_change_partition_11") ||
|
||||
(write_log_completed(lpt, FALSE), FALSE) ||
|
||||
|
@ -6886,7 +6902,7 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
ERROR_INJECT_ERROR("fail_change_partition_12") ||
|
||||
(alter_partition_lock_handling(lpt), FALSE))
|
||||
{
|
||||
handle_alter_part_error(lpt, not_completed, FALSE, frm_install,
|
||||
handle_alter_part_error(lpt, action_completed, FALSE, frm_install,
|
||||
close_table_on_failure);
|
||||
goto err;
|
||||
}
|
||||
|
@ -6896,12 +6912,25 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
A final step is to write the query to the binlog and send ok to the
|
||||
user
|
||||
*/
|
||||
DBUG_RETURN(fast_end_partition(thd, lpt->copied, lpt->deleted,
|
||||
table_list, FALSE, NULL,
|
||||
written_bin_log));
|
||||
DBUG_RETURN(fast_end_partition(thd, lpt->copied, lpt->deleted, table_list));
|
||||
err:
|
||||
if (action_completed)
|
||||
{
|
||||
/*
|
||||
Although error occurred, the action was forced to retry for completion.
|
||||
Therefore we must close+reopen all instances of the table.
|
||||
*/
|
||||
(void) alter_partition_lock_handling(lpt);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
The failed action was reverted, leave the original table as is and
|
||||
close/destroy the intermediate table object and its share.
|
||||
*/
|
||||
close_temporary(lpt->table, 1, 0);
|
||||
}
|
||||
downgrade_mdl_if_lock_tables_mode(thd, mdl_ticket, MDL_SHARED_NO_READ_WRITE);
|
||||
table->m_needs_reopen= TRUE;
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -54,6 +54,7 @@ typedef struct st_lock_param_type
|
|||
HA_CREATE_INFO *create_info;
|
||||
Alter_info *alter_info;
|
||||
TABLE *table;
|
||||
TABLE *old_table;
|
||||
KEY *key_info_buffer;
|
||||
const char *db;
|
||||
const char *table_name;
|
||||
|
@ -252,14 +253,17 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
|
|||
TABLE_LIST *table_list,
|
||||
char *db,
|
||||
const char *table_name,
|
||||
uint fast_alter_partition);
|
||||
TABLE *fast_alter_table);
|
||||
uint set_part_state(Alter_info *alter_info, partition_info *tab_part_info,
|
||||
enum partition_state part_state);
|
||||
uint prep_alter_part_table(THD *thd, TABLE *table, Alter_info *alter_info,
|
||||
HA_CREATE_INFO *create_info,
|
||||
handlerton *old_db_type,
|
||||
bool *partition_changed,
|
||||
uint *fast_alter_partition);
|
||||
char *db,
|
||||
const char *table_name,
|
||||
const char *path,
|
||||
TABLE **fast_alter_table);
|
||||
char *generate_partition_syntax(partition_info *part_info,
|
||||
uint *buf_length, bool use_sql_alloc,
|
||||
bool show_partition_options,
|
||||
|
|
|
@ -1725,8 +1725,6 @@ bool mysql_write_frm(ALTER_PARTITION_PARAM_TYPE *lpt, uint flags)
|
|||
CHF_DELETE_FLAG, NULL) ||
|
||||
deactivate_ddl_log_entry(part_info->frm_log_entry->entry_pos) ||
|
||||
(sync_ddl_log(), FALSE) ||
|
||||
#endif
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
mysql_file_rename(key_file_frm,
|
||||
shadow_frm_name, frm_name, MYF(MY_WME)) ||
|
||||
lpt->table->file->ha_create_handler_files(path, shadow_path,
|
||||
|
@ -5605,7 +5603,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
|||
handlerton *old_db_type, *new_db_type, *save_old_db_type;
|
||||
enum_alter_table_change_level need_copy_table= ALTER_TABLE_METADATA_ONLY;
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
uint fast_alter_partition= 0;
|
||||
TABLE *table_for_fast_alter_partition= NULL;
|
||||
bool partition_changed= FALSE;
|
||||
#endif
|
||||
bool need_lock_for_indexes= TRUE;
|
||||
|
@ -5975,7 +5973,9 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
|||
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
if (prep_alter_part_table(thd, table, alter_info, create_info, old_db_type,
|
||||
&partition_changed, &fast_alter_partition))
|
||||
&partition_changed,
|
||||
db, table_name, path,
|
||||
&table_for_fast_alter_partition))
|
||||
goto err;
|
||||
#endif
|
||||
/*
|
||||
|
@ -6208,12 +6208,12 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
|||
create_info->frm_only= 1;
|
||||
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
if (fast_alter_partition)
|
||||
if (table_for_fast_alter_partition)
|
||||
{
|
||||
DBUG_RETURN(fast_alter_partition_table(thd, table, alter_info,
|
||||
create_info, table_list,
|
||||
db, table_name,
|
||||
fast_alter_partition));
|
||||
table_for_fast_alter_partition));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -6693,6 +6693,11 @@ err_new_table_cleanup:
|
|||
create_info->frm_only ? FN_IS_TMP | FRM_ONLY : FN_IS_TMP);
|
||||
|
||||
err:
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
/* If prep_alter_part_table created an intermediate table, destroy it. */
|
||||
if (table_for_fast_alter_partition)
|
||||
close_temporary(table_for_fast_alter_partition, 1, 0);
|
||||
#endif /* WITH_PARTITION_STORAGE_ENGINE */
|
||||
/*
|
||||
No default value was provided for a DATE/DATETIME field, the
|
||||
current sql_mode doesn't allow the '0000-00-00' value and
|
||||
|
|
|
@ -4814,7 +4814,7 @@ part_value_expr_item:
|
|||
|
||||
if (!lex->safe_to_cache_query)
|
||||
{
|
||||
my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0));
|
||||
my_parse_error(ER(ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR));
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
if (part_info->add_column_list_value(YYTHD, part_expr))
|
||||
|
|
20
sql/table.cc
20
sql/table.cc
|
@ -426,6 +426,18 @@ void TABLE_SHARE::destroy()
|
|||
info_it->flags= 0;
|
||||
}
|
||||
}
|
||||
if (ha_data_destroy)
|
||||
{
|
||||
ha_data_destroy(ha_data);
|
||||
ha_data_destroy= NULL;
|
||||
}
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
if (ha_part_data_destroy)
|
||||
{
|
||||
ha_part_data_destroy(ha_part_data);
|
||||
ha_part_data_destroy= NULL;
|
||||
}
|
||||
#endif /* WITH_PARTITION_STORAGE_ENGINE */
|
||||
/*
|
||||
Make a copy since the share is allocated in its own root,
|
||||
and free_root() updates its argument after freeing the memory.
|
||||
|
@ -1704,11 +1716,17 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
|
|||
delete handler_file;
|
||||
my_hash_free(&share->name_hash);
|
||||
if (share->ha_data_destroy)
|
||||
{
|
||||
share->ha_data_destroy(share->ha_data);
|
||||
share->ha_data_destroy= NULL;
|
||||
}
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
if (share->ha_part_data_destroy)
|
||||
{
|
||||
share->ha_part_data_destroy(share->ha_part_data);
|
||||
#endif
|
||||
share->ha_data_destroy= NULL;
|
||||
}
|
||||
#endif /* WITH_PARTITION_STORAGE_ENGINE */
|
||||
|
||||
open_table_error(share, error, share->open_errno, errarg);
|
||||
DBUG_RETURN(error);
|
||||
|
|
|
@ -40,12 +40,10 @@ IF(UNIX)
|
|||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
# Enable InnoDB's UNIV_DEBUG if MySQL's WITH_DEBUG[_FULL] is defined
|
||||
# enable when this bug is resolved:
|
||||
# Bug#54861 Additional connections not handled properly in mtr --embedded
|
||||
#IF(WITH_DEBUG)
|
||||
# ADD_DEFINITIONS("-DUNIV_DEBUG")
|
||||
#ENDIF()
|
||||
# Enable InnoDB's UNIV_DEBUG if MySQL's WITH_DEBUG is defined
|
||||
IF(WITH_DEBUG)
|
||||
ADD_DEFINITIONS("-DUNIV_DEBUG")
|
||||
ENDIF()
|
||||
|
||||
IF(NOT MSVC)
|
||||
# either define HAVE_IB_GCC_ATOMIC_BUILTINS or not
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue