summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorunknown <tomas@poseidon.ndb.mysql.com>2006-01-12 19:51:02 +0100
committerunknown <tomas@poseidon.ndb.mysql.com>2006-01-12 19:51:02 +0100
commit4c798b42d37d0df05c49bb6be3e105fae891dd23 (patch)
tree5f26130f48df39314474782dafb7b845ebffb2ff /client
parent5872e5aeb9424ae9c0472885bfd22fad53febd84 (diff)
downloadmariadb-git-4c798b42d37d0df05c49bb6be3e105fae891dd23.tar.gz
wl2325 wl2324
mysql-test/include/have_ndb_extra.inc: New BitKeeper file ``mysql-test/include/have_ndb_extra.inc'' mysql-test/include/not_ndb.inc: New BitKeeper file ``mysql-test/include/not_ndb.inc'' mysql-test/r/have_ndb_extra.require: New BitKeeper file ``mysql-test/r/have_ndb_extra.require'' mysql-test/r/ndb_alter_table_row.result: New BitKeeper file ``mysql-test/r/ndb_alter_table_row.result'' mysql-test/r/ndb_alter_table_stm.result: New BitKeeper file ``mysql-test/r/ndb_alter_table_stm.result'' mysql-test/r/ndb_binlog_basic.result: New BitKeeper file ``mysql-test/r/ndb_binlog_basic.result'' mysql-test/r/ndb_binlog_multi.result: New BitKeeper file ``mysql-test/r/ndb_binlog_multi.result'' mysql-test/r/ndb_multi_row.result: New BitKeeper file ``mysql-test/r/ndb_multi_row.result'' mysql-test/r/not_ndb.require: New BitKeeper file ``mysql-test/r/not_ndb.require'' mysql-test/r/rpl_ndb_bank.result: New BitKeeper file ``mysql-test/r/rpl_ndb_bank.result'' mysql-test/r/rpl_ndb_basic.result: New BitKeeper file ``mysql-test/r/rpl_ndb_basic.result'' mysql-test/r/rpl_ndb_disk.result: New BitKeeper file ``mysql-test/r/rpl_ndb_disk.result'' mysql-test/r/rpl_ndb_idempotent.result: New BitKeeper file ``mysql-test/r/rpl_ndb_idempotent.result'' mysql-test/r/rpl_ndb_load.result: New BitKeeper file ``mysql-test/r/rpl_ndb_load.result'' mysql-test/r/rpl_ndb_multi.result: New BitKeeper file ``mysql-test/r/rpl_ndb_multi.result'' mysql-test/r/rpl_ndb_sync.result: New BitKeeper file ``mysql-test/r/rpl_ndb_sync.result'' mysql-test/r/rpl_row_basic_7ndb.result: New BitKeeper file ``mysql-test/r/rpl_row_basic_7ndb.result'' mysql-test/t/ndb_alter_table_row.test: New BitKeeper file ``mysql-test/t/ndb_alter_table_row.test'' mysql-test/t/ndb_alter_table_stm.test: New BitKeeper file ``mysql-test/t/ndb_alter_table_stm.test'' mysql-test/t/ndb_binlog_basic.test: New BitKeeper file ``mysql-test/t/ndb_binlog_basic.test'' mysql-test/t/ndb_binlog_multi.test: New BitKeeper file ``mysql-test/t/ndb_binlog_multi.test'' mysql-test/t/ndb_multi_row.test: New BitKeeper file ``mysql-test/t/ndb_multi_row.test'' mysql-test/t/rpl_ndb_bank.test: New BitKeeper file ``mysql-test/t/rpl_ndb_bank.test'' mysql-test/t/rpl_ndb_basic.test: New BitKeeper file ``mysql-test/t/rpl_ndb_basic.test'' mysql-test/t/rpl_ndb_disk.test: New BitKeeper file ``mysql-test/t/rpl_ndb_disk.test'' mysql-test/t/rpl_ndb_idempotent.test: New BitKeeper file ``mysql-test/t/rpl_ndb_idempotent.test'' mysql-test/t/rpl_ndb_load.test: New BitKeeper file ``mysql-test/t/rpl_ndb_load.test'' mysql-test/t/rpl_ndb_multi.test: New BitKeeper file ``mysql-test/t/rpl_ndb_multi.test'' mysql-test/t/rpl_ndb_sync.test: New BitKeeper file ``mysql-test/t/rpl_ndb_sync.test'' mysql-test/t/rpl_row_basic_7ndb.test: New BitKeeper file ``mysql-test/t/rpl_row_basic_7ndb.test'' sql/ha_ndbcluster_binlog.cc: New BitKeeper file ``sql/ha_ndbcluster_binlog.cc'' sql/ha_ndbcluster_binlog.h: New BitKeeper file ``sql/ha_ndbcluster_binlog.h'' sql/ha_ndbcluster_tables.h: New BitKeeper file ``sql/ha_ndbcluster_tables.h'' sql/rpl_injector.cc: New BitKeeper file ``sql/rpl_injector.cc'' sql/rpl_injector.h: New BitKeeper file ``sql/rpl_injector.h'' storage/ndb/include/kernel/signaldata/DihFragCount.hpp: New BitKeeper file ``storage/ndb/include/kernel/signaldata/DihFragCount.hpp''
Diffstat (limited to 'client')
-rw-r--r--client/mysqltest.c125
1 files changed, 117 insertions, 8 deletions
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 14258a3669e..6d596ab793c 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -852,10 +852,15 @@ static VAR *var_obtain(const char *name, int len)
return v;
}
+/*
+ - if variable starts with a $ it is regarded as a local test varable
+ - if not it is treated as a environment variable, and the corresponding
+ environment variable will be updated
+*/
int var_set(const char *var_name, const char *var_name_end,
const char *var_val, const char *var_val_end)
{
- int digit;
+ int digit, result, env_var= 0;
VAR* v;
DBUG_ENTER("var_set");
DBUG_PRINT("enter", ("var_name: '%.*s' = '%.*s' (length: %d)",
@@ -863,11 +868,11 @@ int var_set(const char *var_name, const char *var_name_end,
(int) (var_val_end - var_val), var_val,
(int) (var_val_end - var_val)));
- if (*var_name++ != '$')
- {
- var_name--;
- die("Variable name in %s does not start with '$'", var_name);
- }
+ if (*var_name != '$')
+ env_var= 1;
+ else
+ var_name++;
+
digit = *var_name - '0';
if (!(digit < 10 && digit >= 0))
{
@@ -875,7 +880,23 @@ int var_set(const char *var_name, const char *var_name_end,
}
else
v = var_reg + digit;
- DBUG_RETURN(eval_expr(v, var_val, (const char**)&var_val_end));
+
+ result= eval_expr(v, var_val, (const char**) &var_val_end);
+
+ if (env_var)
+ {
+ char buf[1024];
+ memcpy(buf, v->name, v->name_len);
+ buf[v->name_len]= 0;
+ if (v->int_dirty)
+ {
+ sprintf(v->str_val, "%d", v->int_val);
+ v->int_dirty= 0;
+ v->str_val_len= strlen(v->str_val);
+ }
+ setenv(buf, v->str_val, 1);
+ }
+ DBUG_RETURN(result);
}
@@ -1483,6 +1504,10 @@ int do_sync_with_master(struct st_query *query)
return do_sync_with_master2(offset);
}
+/*
+ when ndb binlog is on, this call will wait until last updated epoch
+ (locally in the mysqld) has been received into the binlog
+*/
int do_save_master_pos()
{
MYSQL_RES* res;
@@ -1494,6 +1519,89 @@ int do_save_master_pos()
rpl_parse = mysql_rpl_parse_enabled(mysql);
mysql_disable_rpl_parse(mysql);
+#ifdef HAVE_NDB_BINLOG
+ /*
+ Wait for ndb binlog to be up-to-date with all changes
+ done on the local mysql server
+ */
+ {
+ ulong have_ndbcluster;
+ if (mysql_query(mysql, query= "show variables like 'have_ndbcluster'"))
+ die("At line %u: failed in %s: %d: %s", start_lineno, query,
+ mysql_errno(mysql), mysql_error(mysql));
+ if (!(res= mysql_store_result(mysql)))
+ die("line %u: mysql_store_result() retuned NULL for '%s'", start_lineno,
+ query);
+ if (!(row= mysql_fetch_row(res)))
+ die("line %u: empty result in %s", start_lineno, query);
+
+ have_ndbcluster= strcmp("YES", row[1]) == 0;
+ mysql_free_result(res);
+
+ if (have_ndbcluster)
+ {
+ ulonglong epoch, tmp_epoch= 0;
+ int count= 0;
+
+ do
+ {
+ const char binlog[]= "binlog";
+ const char latest_trans_epoch[]=
+ "latest_trans_epoch=";
+ const char latest_applied_binlog_epoch[]=
+ "latest_applied_binlog_epoch=";
+ if (count)
+ sleep(1);
+ if (mysql_query(mysql, query= "show engine ndb status"))
+ die("At line %u: failed in '%s': %d: %s", start_lineno, query,
+ mysql_errno(mysql), mysql_error(mysql));
+ if (!(res= mysql_store_result(mysql)))
+ die("line %u: mysql_store_result() retuned NULL for '%s'",
+ start_lineno, query);
+ while ((row= mysql_fetch_row(res)))
+ {
+ if (strcmp(row[1], binlog) == 0)
+ {
+ const char *status= row[2];
+ /* latest_trans_epoch */
+ if (count == 0)
+ {
+ while (*status && strncmp(status, latest_trans_epoch,
+ sizeof(latest_trans_epoch)-1))
+ status++;
+ if (*status)
+ {
+ status+= sizeof(latest_trans_epoch)-1;
+ epoch= strtoull(status, (char**) 0, 10);
+ }
+ else
+ die("line %u: result does not contain '%s' in '%s'",
+ start_lineno, latest_trans_epoch, query);
+ }
+ /* latest_applied_binlog_epoch */
+ while (*status && strncmp(status, latest_applied_binlog_epoch,
+ sizeof(latest_applied_binlog_epoch)-1))
+ status++;
+ if (*status)
+ {
+ status+= sizeof(latest_applied_binlog_epoch)-1;
+ tmp_epoch= strtoull(status, (char**) 0, 10);
+ }
+ else
+ die("line %u: result does not contain '%s' in '%s'",
+ start_lineno, latest_applied_binlog_epoch, query);
+ break;
+ }
+ }
+ mysql_free_result(res);
+ if (!row)
+ die("line %u: result does not contain '%s' in '%s'",
+ start_lineno, binlog, query);
+ count++;
+ } while (tmp_epoch < epoch && count <= 3);
+ }
+ }
+#endif
if (mysql_query(mysql, query= "show master status"))
die("failed in show master status: %d: %s",
mysql_errno(mysql), mysql_error(mysql));
@@ -1544,7 +1652,8 @@ int do_let(struct st_query *query)
while (*p && (*p != '=') && !my_isspace(charset_info,*p))
p++;
var_name_end= p;
- if (var_name+1 == var_name_end)
+ if (var_name == var_name_end ||
+ (var_name+1 == var_name_end && *var_name == '$'))
die("Missing variable name in let");
while (my_isspace(charset_info,*p))
p++;