diff options
author | unknown <msvensson@neptunus.(none)> | 2006-02-21 08:55:13 +0100 |
---|---|---|
committer | unknown <msvensson@neptunus.(none)> | 2006-02-21 08:55:13 +0100 |
commit | 8d93d9256c70a0724dd8081f0a5f8dafeb56ae35 (patch) | |
tree | 81e173fb0c632953aff2e5adf0f69ffbf7b2ebdc | |
parent | e36762ead833d201d47f40aa5c603a7bb4122e68 (diff) | |
parent | 3e17193aa341f3a88d98aded5f1898ca6c230911 (diff) | |
download | mariadb-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.c | 49 | ||||
-rw-r--r-- | mysql-test/r/mysqltest.result | 3 | ||||
-rw-r--r-- | mysql-test/r/ndb_cache_multi2.result | 7 | ||||
-rw-r--r-- | mysql-test/t/mysqltest.test | 31 | ||||
-rw-r--r-- | mysql-test/t/ndb_cache_multi2.test | 27 |
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; |