summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@donna.mysql.com>2001-01-15 22:56:44 +0200
committerunknown <monty@donna.mysql.com>2001-01-15 22:56:44 +0200
commit983ab4d337b99ad1adbd45f0d8f52afa9ee10657 (patch)
treeefab60ad01bef9812e6926f3759f8814900a4e4a
parent65d522b743f2b741e4269ff39e7420eaac45f8c5 (diff)
downloadmariadb-git-983ab4d337b99ad1adbd45f0d8f52afa9ee10657.tar.gz
Fixes for mysqltest
Docs/manual.texi: More information about INSERT DELAYED client/mysqltest.c: Added syntax -- error # mysql-test/mysql-test-run.sh: Don't stop server that isn't started mysql-test/t/bdb.test: Change to use -- error # mysys/my_chsize.c: Fix for last commit sql/field.cc: Fix for purify and opt_range.cc sql/ha_berkeley.cc: Purecoverage hints
-rw-r--r--Docs/manual.texi9
-rw-r--r--client/mysqltest.c54
-rw-r--r--mysql-test/mysql-test-run.sh10
-rw-r--r--mysql-test/t/bdb.test12
-rw-r--r--mysys/my_chsize.c1
-rw-r--r--sql/field.cc5
-rw-r--r--sql/ha_berkeley.cc15
7 files changed, 70 insertions, 36 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi
index 04bef2723fa..40bef24d7e4 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -19317,10 +19317,11 @@ new @code{INSERT DELAYED} commands are received within
@code{delayed_insert_timeout} seconds, the handler terminates.
@item
-If more than @code{delayed_queue_size} rows are pending already in a specific
-handler queue, the thread waits until there is room in the queue. This is
-useful to ensure that the @code{mysqld} server doesn't use all memory for the
-delayed memory queue.
+If more than @code{delayed_queue_size} rows are pending already in a
+specific handler queue, the thread requesting @code{INSERT DELAYED}
+waits until there is room in the queue. This is done to ensure that
+the @code{mysqld} server doesn't use all memory for the delayed memory
+queue.
@item
The handler thread will show up in the @strong{MySQL} process list
diff --git a/client/mysqltest.c b/client/mysqltest.c
index d2efead3413..c3f31cdd3c0 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -43,7 +43,7 @@
**********************************************************************/
-#define MTEST_VERSION "1.5"
+#define MTEST_VERSION "1.6"
#include <global.h>
#include <my_sys.h>
@@ -71,23 +71,24 @@
#define MIN_VAR_ALLOC 32
#define BLOCK_STACK_DEPTH 32
-int record = 0, verbose = 0, silent = 0, opt_sleep=0;
+static int record = 0, verbose = 0, silent = 0, opt_sleep=0;
static char *db = 0, *pass=0;
const char* user = 0, *host = 0, *unix_sock = 0;
-int port = 0;
+static int port = 0;
static uint start_lineno, *lineno;
static char **default_argv;
static const char *load_default_groups[]= { "mysqltest","client",0 };
-FILE* file_stack[MAX_INCLUDE_DEPTH];
-FILE** cur_file;
-FILE** file_stack_end;
-uint lineno_stack[MAX_INCLUDE_DEPTH];
-char TMPDIR[FN_REFLEN];
+static FILE* file_stack[MAX_INCLUDE_DEPTH];
+static FILE** cur_file;
+static FILE** file_stack_end;
+static uint lineno_stack[MAX_INCLUDE_DEPTH];
+static char TMPDIR[FN_REFLEN];
-int block_stack[BLOCK_STACK_DEPTH];
-int *cur_block, *block_stack_end;
+static int block_stack[BLOCK_STACK_DEPTH];
+static int *cur_block, *block_stack_end;
+static uint global_expected_errno=0;
DYNAMIC_ARRAY q_lines;
@@ -137,13 +138,13 @@ struct st_query
enum { Q_CONNECTION=1, Q_QUERY, Q_CONNECT,
Q_SLEEP, Q_INC, Q_DEC,Q_SOURCE,
Q_DISCONNECT,Q_LET, Q_ECHO, Q_WHILE, Q_END_BLOCK,
- Q_SYSTEM, Q_RESULT, Q_REQUIRE,
+ Q_SYSTEM, Q_RESULT, Q_REQUIRE, Q_ERROR,
Q_UNKNOWN, Q_COMMENT, Q_COMMENT_WITH_COMMAND} type;
};
const char *command_names[] = {
"connection", "query","connect","sleep","inc","dec","source","disconnect",
-"let","echo","while","end","system","result", "require",0
+"let","echo","while","end","system","result", "require","error",0
};
TYPELIB command_typelib= {array_elements(command_names),"",
@@ -541,6 +542,20 @@ static void get_file_name(char *filename, struct st_query* q)
}
+static int get_int(struct st_query* q)
+{
+ char* p=q->first_argument;
+ int res;
+ DBUG_ENTER("get_int");
+ while (*p && isspace(*p)) p++;
+ if (!*p)
+ die("Missing argument in %s\n", q->query);
+ res=atoi(p);
+ DBUG_PRINT("result",("res: %d",res));
+ DBUG_RETURN(res);
+}
+
+
int select_connection(struct st_query* q)
{
char* p=q->first_argument, *name;
@@ -896,16 +911,16 @@ int read_query(struct st_query** q_ptr)
get_dynamic(&q_lines, (gptr) q_ptr, parser.current_line) ;
return 0;
}
- if (!(*q_ptr=q=(struct st_query*) my_malloc(sizeof(*q), MYF(MY_WME)))
- || insert_dynamic(&q_lines, (gptr) &q)
- )
- die("Out of memory");
+ if (!(*q_ptr=q=(struct st_query*) my_malloc(sizeof(*q), MYF(MY_WME))) ||
+ insert_dynamic(&q_lines, (gptr) &q))
+ die(NullS);
q->record_file[0] = 0;
q->require_file=0;
- q->abort_on_error = 1;
q->first_word_len = 0;
- q->expected_errno = 0;
+ q->expected_errno = global_expected_errno;
+ q->abort_on_error = global_expected_errno == 0;
+ global_expected_errno=0;
q->type = Q_UNKNOWN;
q->query=0;
if (read_line(read_query_buf, sizeof(read_query_buf)))
@@ -1357,6 +1372,9 @@ int main(int argc, char** argv)
get_file_name(save_file,q);
require_file=0;
break;
+ case Q_ERROR:
+ global_expected_errno=get_int(q);
+ break;
case Q_REQUIRE:
get_file_name(save_file,q);
require_file=1;
diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh
index 0af315e9774..670f45420c8 100644
--- a/mysql-test/mysql-test-run.sh
+++ b/mysql-test/mysql-test-run.sh
@@ -588,11 +588,17 @@ run_testcase ()
if [ x$FORCE != x1 ] ; then
$ECHO "Aborting. To continue, re-run with '--force'."
$ECHO
- mysql_stop
+ if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
+ then
+ mysql_stop
+ fi
exit 1
fi
- mysql_restart
+ if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
+ then
+ mysql_restart
+ fi
$ECHO "Resuming Tests"
$ECHO ""
else
diff --git a/mysql-test/t/bdb.test b/mysql-test/t/bdb.test
index 48fd2736284..ae341aa5155 100644
--- a/mysql-test/t/bdb.test
+++ b/mysql-test/t/bdb.test
@@ -33,7 +33,8 @@ INSERT INTO t1 VALUES (1,0,0),(3,1,1),(4,1,1),(8,2,2),(9,2,2),(17,3,2),(22,4,2),
update t1 set parent_id=parent_id+100;
select * from t1 where parent_id=102;
update t1 set id=id+1000;
-!$1062 update t1 set id=1024 where id=1009;
+-- error 1062
+update t1 set id=1024 where id=1009;
select * from t1;
update ignore t1 set id=id+1; # This will change all rows
select * from t1;
@@ -100,12 +101,14 @@ commit;
select n, "after commit" from t1;
commit;
insert into t1 values (5);
-!$1062 insert into t1 values (4);
+-- error 1062
+insert into t1 values (4);
commit;
select n, "after commit" from t1;
set autocommit=1;
insert into t1 values (6);
-!$1062 insert into t1 values (4);
+-- error 1062
+insert into t1 values (4);
select n from t1;
# nop
rollback;
@@ -135,7 +138,8 @@ drop table t1;
CREATE TABLE t1 (id char(8) not null primary key, val int not null) type=bdb;
insert into t1 values ('pippo', 12);
-!$1062 insert into t1 values ('pippo', 12); # Gives error
+-- error 1062
+insert into t1 values ('pippo', 12); # Gives error
delete from t1;
delete from t1 where id = 'pippo';
select * from t1;
diff --git a/mysys/my_chsize.c b/mysys/my_chsize.c
index fe44ff1b12e..2c07e8d136f 100644
--- a/mysys/my_chsize.c
+++ b/mysys/my_chsize.c
@@ -69,7 +69,6 @@ int my_chsize(File fd, my_off_t newlength, myf MyFlags)
#endif
/* Full file with 0 until it's as big as requested */
bzero(buff,IO_SIZE);
- my_seek(fd, old_length, MY_SEEK_SET, MYF(MY_WME+MY_FAE));
while (newlength-oldsize > IO_SIZE)
{
if (my_write(fd,(byte*) buff,IO_SIZE,MYF(MY_NABP)))
diff --git a/sql/field.cc b/sql/field.cc
index 639c2def068..34b047e6a1c 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -3949,7 +3949,12 @@ void Field_blob::get_key_image(char *buff,uint length)
ulong blob_length=get_length(ptr);
char *blob;
if ((ulong) length > blob_length)
+ {
+#ifdef HAVE_purify
+ bzero(buff+2+blob_length, (length-blob_length));
+#endif
length=(uint) blob_length;
+ }
int2store(buff,length);
get_ptr(&blob);
memcpy(buff+2,blob,length);
diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc
index 1732f77cd0a..0b76ddc8084 100644
--- a/sql/ha_berkeley.cc
+++ b/sql/ha_berkeley.cc
@@ -140,7 +140,7 @@ bool berkeley_init(void)
berkeley_log_file_size= max(berkeley_log_file_size, 10*1024*1024L);
if (db_env_create(&db_env,0))
- DBUG_RETURN(1);
+ DBUG_RETURN(1); /* purecov: inspected */
db_env->set_errcall(db_env,berkeley_print_error);
db_env->set_errpfx(db_env,"bdb");
db_env->set_noticecall(db_env, berkeley_noticecall);
@@ -148,7 +148,7 @@ bool berkeley_init(void)
db_env->set_data_dir(db_env, mysql_data_home);
db_env->set_flags(db_env, berkeley_env_flags, 1);
if (berkeley_logdir)
- db_env->set_lg_dir(db_env, berkeley_logdir);
+ db_env->set_lg_dir(db_env, berkeley_logdir); /* purecov: tested */
if (opt_endinfo)
db_env->set_verbose(db_env,
@@ -168,8 +168,8 @@ bool berkeley_init(void)
DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN |
DB_CREATE | DB_THREAD, 0666))
{
- db_env->close(db_env,0);
- db_env=0;
+ db_env->close(db_env,0); /* purecov: inspected */
+ db_env=0; /* purecov: inspected */
}
(void) hash_init(&bdb_open_tables,32,0,0,
@@ -184,7 +184,7 @@ bool berkeley_end(void)
int error;
DBUG_ENTER("berkeley_end");
if (!db_env)
- return 1;
+ return 1; /* purecov: tested */
berkeley_cleanup_log_files();
error=db_env->close(db_env,0); // Error is logged
db_env=0;
@@ -1165,8 +1165,9 @@ int ha_berkeley::remove_key(DB_TXN *trans, uint keynr, const byte *record,
DBUG_ENTER("remove_key");
DBUG_PRINT("enter",("index: %d",keynr));
- if ((table->key_info[keynr].flags & (HA_NOSAME | HA_NULL_PART_KEY)) ==
- HA_NOSAME || keynr == primary_key)
+ if (keynr == primary_key ||
+ ((table->key_info[keynr].flags & (HA_NOSAME | HA_NULL_PART_KEY)) ==
+ HA_NOSAME))
{ // Unique key
dbug_assert(keynr == primary_key || prim_key->data != key_buff2);
error=key_file[keynr]->del(key_file[keynr], trans,