summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <msvensson@neptunus.(none)>2006-02-21 08:55:13 +0100
committerunknown <msvensson@neptunus.(none)>2006-02-21 08:55:13 +0100
commit8d93d9256c70a0724dd8081f0a5f8dafeb56ae35 (patch)
tree81e173fb0c632953aff2e5adf0f69ffbf7b2ebdc
parente36762ead833d201d47f40aa5c603a7bb4122e68 (diff)
parent3e17193aa341f3a88d98aded5f1898ca6c230911 (diff)
downloadmariadb-git-8d93d9256c70a0724dd8081f0a5f8dafeb56ae35.tar.gz
Merge neptunus.(none):/home/msvensson/mysql/bug16795/my50-bug16795
into neptunus.(none):/home/msvensson/mysql/mysql-5.0 client/mysqltest.c: Auto merged mysql-test/r/mysqltest.result: Auto merged mysql-test/t/mysqltest.test: Auto merged
-rw-r--r--client/mysqltest.c49
-rw-r--r--mysql-test/r/mysqltest.result3
-rw-r--r--mysql-test/r/ndb_cache_multi2.result7
-rw-r--r--mysql-test/t/mysqltest.test31
-rw-r--r--mysql-test/t/ndb_cache_multi2.test27
5 files changed, 99 insertions, 18 deletions
diff --git a/client/mysqltest.c b/client/mysqltest.c
index beb76317f40..b6f8796da9b 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -2353,12 +2353,41 @@ int do_done(struct st_query *q)
}
+/*
+ Process start of a "if" or "while" statement
+
+ SYNOPSIS
+ do_block()
+ cmd Type of block
+ q called command
+
+ DESCRIPTION
+ if ([!]<expr>)
+ {
+ <block statements>
+ }
+
+ while ([!]<expr>)
+ {
+ <block statements>
+ }
+
+ Evaluates the <expr> and if it evaluates to
+ greater than zero executes the following code block.
+ A '!' can be used before the <expr> to indicate it should
+ be executed if it evaluates to zero.
+
+ */
+
int do_block(enum block_cmd cmd, struct st_query* q)
{
char *p= q->first_argument;
const char *expr_start, *expr_end;
VAR v;
const char *cmd_name= (cmd == cmd_while ? "while" : "if");
+ my_bool not_expr= FALSE;
+ DBUG_ENTER("do_block");
+ DBUG_PRINT("enter", ("%s", cmd_name));
/* Check stack overflow */
if (cur_block == block_stack_end)
@@ -2379,8 +2408,16 @@ int do_block(enum block_cmd cmd, struct st_query* q)
/* Parse and evaluate test expression */
expr_start= strchr(p, '(');
- if (!expr_start)
+ if (!expr_start++)
die("missing '(' in %s", cmd_name);
+
+ /* Check for !<expr> */
+ if (*expr_start == '!')
+ {
+ not_expr= TRUE;
+ expr_start++; /* Step past the '!' */
+ }
+ /* Find ending ')' */
expr_end= strrchr(expr_start, ')');
if (!expr_end)
die("missing ')' in %s", cmd_name);
@@ -2394,14 +2431,20 @@ int do_block(enum block_cmd cmd, struct st_query* q)
die("Missing '{' after %s. Found \"%s\"", cmd_name, p);
var_init(&v,0,0,0,0);
- eval_expr(&v, ++expr_start, &expr_end);
+ eval_expr(&v, expr_start, &expr_end);
/* Define inner block */
cur_block++;
cur_block->cmd= cmd;
cur_block->ok= (v.int_val ? TRUE : FALSE);
+ if (not_expr)
+ cur_block->ok = !cur_block->ok;
+
+ DBUG_PRINT("info", ("OK: %d", cur_block->ok));
+
var_free(&v);
+ DBUG_VOID_RETURN;
return 0;
}
@@ -3037,8 +3080,6 @@ static void replace_dynstr_append(DYNAMIC_STRING *ds, const char *val)
static void append_field(DYNAMIC_STRING *ds, uint col_idx, MYSQL_FIELD* field,
const char* val, ulonglong len, bool is_null)
{
-
- char buf[256];
if (col_idx < max_replace_column && replace_column[col_idx])
{
val= replace_column[col_idx];
diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result
index 9f82f258b80..bbd56260f0c 100644
--- a/mysql-test/r/mysqltest.result
+++ b/mysql-test/r/mysqltest.result
@@ -324,7 +324,10 @@ test
test2
test3
test4
+Counter is greater than 0, (counter=10)
+Counter is not 0, (counter=0)
1
+Testing while with not
mysqltest: In included file "./include/mysqltest_while.inc": At line 64: Nesting too deeply
mysqltest: At line 1: missing '(' in while
mysqltest: At line 1: missing ')' in while
diff --git a/mysql-test/r/ndb_cache_multi2.result b/mysql-test/r/ndb_cache_multi2.result
index 2863908a436..63cc4d4ceed 100644
--- a/mysql-test/r/ndb_cache_multi2.result
+++ b/mysql-test/r/ndb_cache_multi2.result
@@ -64,13 +64,10 @@ a
3
show status like "Qcache_queries_in_cache";
Variable_name Value
-Qcache_queries_in_cache 2
+Qcache_queries_in_cache 3
show status like "Qcache_inserts";
Variable_name Value
-Qcache_inserts 3
-show status like "Qcache_hits";
-Variable_name Value
-Qcache_hits 0
+Qcache_inserts 4
drop table t1, t2;
set GLOBAL query_cache_size=0;
set GLOBAL ndb_cache_check_time=0;
diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test
index dd7eea4442e..cf5ff585a56 100644
--- a/mysql-test/t/mysqltest.test
+++ b/mysql-test/t/mysqltest.test
@@ -755,6 +755,30 @@ echo test3stop
--delimiter ;
echo test4;
+
+# ----------------------------------------------------------------------------
+# Test if
+# ----------------------------------------------------------------------------
+
+let $counter=10;
+if ($counter)
+{
+ echo Counter is greater than 0, (counter=10);
+}
+if (!$counter)
+{
+ echo Counter is not 0, (counter=10);
+}
+let $counter=0;
+if ($counter)
+{
+ echo Counter is greater than 0, (counter=0);
+}
+if (!$counter)
+{
+ echo Counter is not 0, (counter=0);
+}
+
# ----------------------------------------------------------------------------
# Test while, { and }
# ----------------------------------------------------------------------------
@@ -768,7 +792,12 @@ while ($i)
# One liner
#let $i=1;while ($i){echo $i;dec $i;}
-
+let $i=0;
+while (!$i)
+{
+ echo Testing while with not;
+ inc $i;
+}
# Exceed max nesting level
--error 1
diff --git a/mysql-test/t/ndb_cache_multi2.test b/mysql-test/t/ndb_cache_multi2.test
index 9352505649c..5a78380097e 100644
--- a/mysql-test/t/ndb_cache_multi2.test
+++ b/mysql-test/t/ndb_cache_multi2.test
@@ -24,10 +24,6 @@ set GLOBAL ndb_cache_check_time=1;
reset query cache;
flush status;
-# Sleep so that the query cache check thread has time to start
-sleep 15;
-
-
# Create test tables in NDB and load them into cache
# on server1
connection server1;
@@ -53,19 +49,34 @@ show status like "Qcache_inserts";
show status like "Qcache_hits";
update t1 set a=3 where a=2;
-# Sleep so that the query cache check thread has time to run
-sleep 5;
-
# Connect to server1 and check that cache is invalidated
# and correct data is returned
connection server1;
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
+
+# Loop and wait for max 10 seconds until query cache thread
+# has invalidated the cache and the column a in t1 is equal to 3
+let $retries=20;
+while (`select a != 3 from t1`)
+{
+ dec $retries;
+ if (!$retries)
+ {
+ The query_cache thread failed to invalidate query_cache in 10 seconds;
+ }
+ sleep 0.5;
+}
+
+# Select from t1 one last time for the result file
+# Column a should be 3
select * from t1;
+
+# There should now be three queries in the cache
show status like "Qcache_queries_in_cache";
+# And inserts should be four
show status like "Qcache_inserts";
-show status like "Qcache_hits";
drop table t1, t2;