diff options
author | unknown <tomas@poseidon.ndb.mysql.com> | 2006-01-12 19:51:02 +0100 |
---|---|---|
committer | unknown <tomas@poseidon.ndb.mysql.com> | 2006-01-12 19:51:02 +0100 |
commit | 4c798b42d37d0df05c49bb6be3e105fae891dd23 (patch) | |
tree | 5f26130f48df39314474782dafb7b845ebffb2ff /client | |
parent | 5872e5aeb9424ae9c0472885bfd22fad53febd84 (diff) | |
download | mariadb-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.c | 125 |
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++; |