Loading client/mysqltest.c +45 −4 Original line number Diff line number Diff line Loading @@ -2712,12 +2712,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) Loading @@ -2738,8 +2767,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); Loading @@ -2753,14 +2790,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; } Loading Loading @@ -3616,8 +3659,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]; Loading mysql-test/r/mysqltest.result +3 −0 Original line number Diff line number Diff line Loading @@ -323,7 +323,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 Loading mysql-test/r/ndb_cache_multi2.result +2 −5 Original line number Diff line number Diff line Loading @@ -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; Loading mysql-test/t/mysqltest.test +30 −1 Original line number Diff line number Diff line Loading @@ -754,6 +754,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 } # ---------------------------------------------------------------------------- Loading @@ -767,7 +791,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 Loading mysql-test/t/ndb_cache_multi2.test +19 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading
client/mysqltest.c +45 −4 Original line number Diff line number Diff line Loading @@ -2712,12 +2712,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) Loading @@ -2738,8 +2767,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); Loading @@ -2753,14 +2790,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; } Loading Loading @@ -3616,8 +3659,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]; Loading
mysql-test/r/mysqltest.result +3 −0 Original line number Diff line number Diff line Loading @@ -323,7 +323,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 Loading
mysql-test/r/ndb_cache_multi2.result +2 −5 Original line number Diff line number Diff line Loading @@ -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; Loading
mysql-test/t/mysqltest.test +30 −1 Original line number Diff line number Diff line Loading @@ -754,6 +754,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 } # ---------------------------------------------------------------------------- Loading @@ -767,7 +791,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 Loading
mysql-test/t/ndb_cache_multi2.test +19 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading