Below is the list of changes that have just been committed into a local
5.1 repository of marty. When marty does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2006-09-01 15:14:50+02:00, mskold@stripped +28 -0
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
mysql-test/include/have_ndbapi_examples.inc@stripped, 2006-09-01 15:09:29+02:00, mskold@stripped +4 -0
BitKeeper file /windows/Linux_space/MySQL/mysql-5.1/mysql-test/include/have_ndbapi_examples.inc
mysql-test/include/have_ndbapi_examples.inc@stripped, 2006-09-01 15:09:29+02:00, mskold@stripped +0 -0
mysql-test/mysql-test-run.pl@stripped, 2006-09-01 15:14:09+02:00, mskold@stripped +24 -0
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
mysql-test/r/have_ndbapi_examples.require@stripped, 2006-09-01 15:10:30+02:00, mskold@stripped +2 -0
BitKeeper file /windows/Linux_space/MySQL/mysql-5.1/mysql-test/r/have_ndbapi_examples.require
mysql-test/r/have_ndbapi_examples.require@stripped, 2006-09-01 15:10:30+02:00, mskold@stripped +0 -0
mysql-test/r/ndbapi.result@stripped, 2006-09-01 15:10:47+02:00, mskold@stripped +22 -0
BitKeeper file /windows/Linux_space/MySQL/mysql-5.1/mysql-test/r/ndbapi.result
mysql-test/r/ndbapi.result@stripped, 2006-09-01 15:10:47+02:00, mskold@stripped +0 -0
mysql-test/r/rpl_ndbapi_multi.result@stripped, 2006-09-01 15:11:03+02:00, mskold@stripped +7 -0
BitKeeper file /windows/Linux_space/MySQL/mysql-5.1/mysql-test/r/rpl_ndbapi_multi.result
mysql-test/r/rpl_ndbapi_multi.result@stripped, 2006-09-01 15:11:03+02:00, mskold@stripped +0 -0
mysql-test/t/ndbapi.test@stripped, 2006-09-01 15:09:51+02:00, mskold@stripped +44 -0
BitKeeper file /windows/Linux_space/MySQL/mysql-5.1/mysql-test/t/ndbapi.test
mysql-test/t/ndbapi.test@stripped, 2006-09-01 15:09:51+02:00, mskold@stripped +0 -0
mysql-test/t/rpl_ndbapi_multi.test@stripped, 2006-09-01 15:10:04+02:00, mskold@stripped +10 -0
BitKeeper file /windows/Linux_space/MySQL/mysql-5.1/mysql-test/t/rpl_ndbapi_multi.test
mysql-test/t/rpl_ndbapi_multi.test@stripped, 2006-09-01 15:10:04+02:00, mskold@stripped +0 -0
storage/ndb/ndbapi-examples/Makefile@stripped, 2006-09-01 15:14:09+02:00, mskold@stripped +3 -1
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/mgmapi_logevent/Makefile@stripped, 2006-09-01 15:14:09+02:00, mskold@stripped +1 -0
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/mgmapi_logevent/mgmapi_logevent.cpp@stripped, 2006-09-01 15:14:09+02:00, mskold@stripped +18 -4
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/mgmapi_logevent_dual/Makefile@stripped, 2006-09-01 15:08:42+02:00, mskold@stripped +24 -0
BitKeeper file /windows/Linux_space/MySQL/mysql-5.1/storage/ndb/ndbapi-examples/mgmapi_logevent_dual/Makefile
storage/ndb/ndbapi-examples/mgmapi_logevent_dual/Makefile@stripped, 2006-09-01 15:08:42+02:00, mskold@stripped +0 -0
storage/ndb/ndbapi-examples/mgmapi_logevent_dual/mgmapi_logevent_dual.cpp@stripped, 2006-09-01 15:08:56+02:00, mskold@stripped +225 -0
BitKeeper file /windows/Linux_space/MySQL/mysql-5.1/storage/ndb/ndbapi-examples/mgmapi_logevent_dual/mgmapi_logevent_dual.cpp
storage/ndb/ndbapi-examples/mgmapi_logevent_dual/mgmapi_logevent_dual.cpp@stripped, 2006-09-01 15:08:56+02:00, mskold@stripped +0 -0
storage/ndb/ndbapi-examples/ndbapi_async/Makefile@stripped, 2006-09-01 15:14:09+02:00, mskold@stripped +1 -0
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_async/ndbapi_async.cpp@stripped, 2006-09-01 15:14:09+02:00, mskold@stripped +41 -25
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_async1/Makefile@stripped, 2006-09-01 15:14:09+02:00, mskold@stripped +3 -2
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_async1/ndbapi_async1.cpp@stripped, 2006-09-01 15:14:10+02:00, mskold@stripped +68 -13
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_event/Makefile@stripped, 2006-09-01 15:14:10+02:00, mskold@stripped +1 -0
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_event/ndbapi_event.cpp@stripped, 2006-09-01 15:14:10+02:00, mskold@stripped +13 -6
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_retries/Makefile@stripped, 2006-09-01 15:14:10+02:00, mskold@stripped +3 -2
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_retries/ndbapi_retries.cpp@stripped, 2006-09-01 15:14:10+02:00, mskold@stripped +61 -6
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_scan/Makefile@stripped, 2006-09-01 15:14:10+02:00, mskold@stripped +1 -0
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_scan/ndbapi_scan.cpp@stripped, 2006-09-01 15:14:10+02:00, mskold@stripped +31 -11
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_simple/Makefile@stripped, 2006-09-01 15:14:10+02:00, mskold@stripped +1 -0
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_simple/ndbapi_simple.cpp@stripped, 2006-09-01 15:14:10+02:00, mskold@stripped +24 -6
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_simple_dual/Makefile@stripped, 2006-09-01 15:08:03+02:00, mskold@stripped +24 -0
BitKeeper file /windows/Linux_space/MySQL/mysql-5.1/storage/ndb/ndbapi-examples/ndbapi_simple_dual/Makefile
storage/ndb/ndbapi-examples/ndbapi_simple_dual/Makefile@stripped, 2006-09-01 15:08:03+02:00, mskold@stripped +0 -0
storage/ndb/ndbapi-examples/ndbapi_simple_dual/ndbapi_simple_dual.cpp@stripped, 2006-09-01 15:08:15+02:00, mskold@stripped +348 -0
BitKeeper file /windows/Linux_space/MySQL/mysql-5.1/storage/ndb/ndbapi-examples/ndbapi_simple_dual/ndbapi_simple_dual.cpp
storage/ndb/ndbapi-examples/ndbapi_simple_dual/ndbapi_simple_dual.cpp@stripped, 2006-09-01 15:08:15+02:00, mskold@stripped +0 -0
storage/ndb/ndbapi-examples/ndbapi_simple_index/Makefile@stripped, 2006-09-01 15:14:10+02:00, mskold@stripped +1 -0
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
storage/ndb/ndbapi-examples/ndbapi_simple_index/ndbapi_simple_index.cpp@stripped, 2006-09-01 15:14:10+02:00, mskold@stripped +11 -4
Fixed ndbapi-examples, and added tests for mysql-test-run.pl
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: mskold
# Host: linux.site
# Root: /windows/Linux_space/MySQL/mysql-5.1
--- 1.152/mysql-test/mysql-test-run.pl 2006-09-01 15:14:57 +02:00
+++ 1.153/mysql-test/mysql-test-run.pl 2006-09-01 15:14:57 +02:00
@@ -323,6 +323,8 @@ our $opt_skip_slave_binlog= 0;
our $exe_ndb_mgm;
our $exe_ndb_waiter;
our $path_ndb_tools_dir;
+our $path_ndb_examples_dir;
+our $exe_ndb_example;
our $file_ndb_testrun_log;
our @data_dir_lst;
@@ -1233,6 +1235,9 @@ sub executable_setup () {
mtr_script_exists("$glob_basedir/scripts/mysql_fix_privilege_tables",
"/usr/bin/false");
$path_ndb_tools_dir= mtr_path_exists("$glob_basedir/storage/ndb/tools");
+ $path_ndb_examples_dir= mtr_path_exists("$glob_basedir/storage/ndb/ndbapi-examples");
+ $exe_ndb_example= mtr_exe_exists("$path_ndb_examples_dir/ndbapi_simple/ndbapi_simple",
+ $exe_mysqld);
$exe_ndb_mgm= "$glob_basedir/storage/ndb/src/mgmclient/ndb_mgm";
$exe_ndb_waiter= "$glob_basedir/storage/ndb/tools/ndb_waiter";
$exe_ndbd= "$glob_basedir/storage/ndb/src/kernel/ndbd";
@@ -1297,6 +1302,7 @@ sub executable_setup () {
}
$path_ndb_tools_dir= "$glob_basedir/bin";
+ $path_ndb_examples_dir= "$glob_basedir/ndbapi-examples";
$exe_ndb_mgm= "$glob_basedir/bin/ndb_mgm";
$exe_ndb_waiter= "$glob_basedir/bin/ndb_waiter";
$exe_ndbd= "$glob_basedir/bin/ndbd";
@@ -1344,6 +1350,20 @@ sub environment_setup () {
($lib_udf_example ? dirname($lib_udf_example) : "") .
($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : "");
+ # --------------------------------------------------------------------------
+ # Add the path where libndbclient can be found
+ # --------------------------------------------------------------------------
+ $ENV{'LD_LIBRARY_PATH'}=
+ (mtr_path_exists("$glob_basedir/storage/ndb/src/.libs") ? "$glob_basedir/storage/ndb/src/.libs" : "") .
+ ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : "");
+
+ # --------------------------------------------------------------------------
+ # Add the path where libmysqlclient can be found
+ # --------------------------------------------------------------------------
+ $ENV{'LD_LIBRARY_PATH'}=
+ (mtr_path_exists("$glob_basedir/libmysql_r/.libs") ? "$glob_basedir/libmysql_r/.libs" : "") .
+ ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : "");
+
# --------------------------------------------------------------------------
# Also command lines in .opt files may contain env vars
@@ -1360,6 +1380,7 @@ sub environment_setup () {
$ENV{'MASTER_MYSOCK1'}= $master->[1]->{'path_sock'};
$ENV{'MASTER_MYPORT'}= $master->[0]->{'port'};
$ENV{'MASTER_MYPORT1'}= $master->[1]->{'port'};
+ $ENV{'SLAVE_MYSOCK'}= $slave->[0]->{'path_sock'};
$ENV{'SLAVE_MYPORT'}= $slave->[0]->{'port'};
$ENV{'SLAVE_MYPORT1'}= $slave->[1]->{'port'};
$ENV{'SLAVE_MYPORT2'}= $slave->[2]->{'port'};
@@ -3802,7 +3823,10 @@ sub run_mysqltest ($) {
$ENV{'NDB_BACKUP_DIR'}= $clusters->[0]->{'data_dir'};
$ENV{'NDB_DATA_DIR'}= $clusters->[0]->{'data_dir'};
$ENV{'NDB_TOOLS_DIR'}= $path_ndb_tools_dir;
+ $ENV{'NDB_EXAMPLES_DIR'}= $path_ndb_examples_dir;
+ $ENV{'MY_NDB_EXAMPLES_BINARY'}= ($exe_ndb_example eq "$path_ndb_examples_dir/ndbapi_simple/ndbapi_simple")?$exe_ndb_example:"";
$ENV{'NDB_TOOLS_OUTPUT'}= $file_ndb_testrun_log;
+ $ENV{'NDB_EXAMPLES_OUTPUT'}= $file_ndb_testrun_log;
$ENV{'NDB_CONNECTSTRING'}= $opt_ndbconnectstring;
my $exe= $exe_mysqltest;
--- 1.9/storage/ndb/ndbapi-examples/Makefile 2006-09-01 15:14:57 +02:00
+++ 1.10/storage/ndb/ndbapi-examples/Makefile 2006-09-01 15:14:57 +02:00
@@ -5,7 +5,9 @@ BIN_DIRS := ndbapi_simple \
ndbapi_simple_index \
ndbapi_event \
ndbapi_scan \
- mgmapi_logevent
+ mgmapi_logevent \
+ ndbapi_simple_dual \
+ mgmapi_logevent_dual
bins: $(patsubst %, _bins_%, $(BIN_DIRS))
--- New file ---
+++ mysql-test/include/have_ndbapi_examples.inc 06/09/01 15:09:29
--require r/have_ndbapi_examples.require
disable_query_log;
eval select LENGTH("$MY_NDB_EXAMPLES_BINARY") > 0 as "have_ndb_example";
enable_query_log;
--- New file ---
+++ mysql-test/r/have_ndbapi_examples.require 06/09/01 15:10:30
have_ndb_example
1
--- New file ---
+++ mysql-test/r/ndbapi.result 06/09/01 15:10:47
DROP TABLE IF EXISTS t0;
drop database if exists mysqltest;
Running ndbapi_simple, results in /windows/Linux_space/MySQL/mysql-5.1/mysql-test/var/log/ndb_testrun.log
Running ndbapi_simple_index, results in /windows/Linux_space/MySQL/mysql-5.1/mysql-test/var/log/ndb_testrun.log
Running ndbapi_scan, results in /windows/Linux_space/MySQL/mysql-5.1/mysql-test/var/log/ndb_testrun.log
Running ndbapi_retries, results in /windows/Linux_space/MySQL/mysql-5.1/mysql-test/var/log/ndb_testrun.log
Running ndbapi_async, results in /windows/Linux_space/MySQL/mysql-5.1/mysql-test/var/log/ndb_testrun.log
Running ndbapi_async1, results in /windows/Linux_space/MySQL/mysql-5.1/mysql-test/var/log/ndb_testrun.log
use TEST_DB;
create table t0(c0 int, c1 int, c2 char(4), c3 char(4), c4 text,
primary key(c0, c2)) engine ndb charset latin1;
insert into t0 values (1, 2, 'a', 'b', null);
insert into t0 values (3, 4, 'c', 'd', null);
update t0 set c3 = 'e' where c0 = 1 and c2 = 'a';
update t0 set c3 = 'f';
update t0 set c3 = 'F';
update t0 set c2 = 'g' where c0 = 1;
update t0 set c2 = 'G' where c0 = 1;
update t0 set c0 = 5, c2 = 'H' where c0 = 3;
delete from t0;
drop table t0;
Running mgmapi_logevent, results in /windows/Linux_space/MySQL/mysql-5.1/mysql-test/var/log/ndb_testrun.log
--- New file ---
+++ mysql-test/r/rpl_ndbapi_multi.result 06/09/01 15:11:03
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
Running mgmapi_logevent, results in /windows/Linux_space/MySQL/mysql-5.1/mysql-test/var/log/ndb_testrun.log
--- New file ---
+++ mysql-test/t/ndbapi.test 06/09/01 15:09:51
-- source include/have_ndb.inc
-- source include/have_ndbapi_examples.inc
--disable_warnings
DROP TABLE IF EXISTS t0;
drop database if exists mysqltest;
--enable_warnings
--exec echo Running ndbapi_simple, results in $NDB_EXAMPLES_OUTPUT
--exec $NDB_EXAMPLES_DIR/ndbapi_simple/ndbapi_simple $MASTER_MYSOCK "localhost:$NDBCLUSTER_PORT" >> $NDB_EXAMPLES_OUTPUT
--exec echo Running ndbapi_simple_index, results in $NDB_EXAMPLES_OUTPUT
--exec $NDB_EXAMPLES_DIR/ndbapi_simple_index/ndbapi_simple_index $MASTER_MYSOCK "localhost:$NDBCLUSTER_PORT" >> $NDB_EXAMPLES_OUTPUT
--exec echo Running ndbapi_scan, results in $NDB_EXAMPLES_OUTPUT
--exec $NDB_EXAMPLES_DIR/ndbapi_scan/ndbapi_scan $MASTER_MYSOCK "localhost:$NDBCLUSTER_PORT" >> $NDB_EXAMPLES_OUTPUT
--exec echo Running ndbapi_retries, results in $NDB_EXAMPLES_OUTPUT
--exec $NDB_EXAMPLES_DIR/ndbapi_retries/ndbapi_retries $MASTER_MYSOCK "localhost:$NDBCLUSTER_PORT" >> $NDB_EXAMPLES_OUTPUT
--exec echo Running ndbapi_async, results in $NDB_EXAMPLES_OUTPUT
--exec $NDB_EXAMPLES_DIR/ndbapi_async/ndbapi_async $MASTER_MYSOCK "localhost:$NDBCLUSTER_PORT" >> $NDB_EXAMPLES_OUTPUT
--exec echo Running ndbapi_async1, results in $NDB_EXAMPLES_OUTPUT
--exec $NDB_EXAMPLES_DIR/ndbapi_async1/ndbapi_async1 $MASTER_MYSOCK "localhost:$NDBCLUSTER_PORT" >> $NDB_EXAMPLES_OUTPUT
use TEST_DB;
create table t0(c0 int, c1 int, c2 char(4), c3 char(4), c4 text,
primary key(c0, c2)) engine ndb charset latin1;
#--exec echo Running ndbapi_event, results in $NDB_EXAMPLES_OUTPUT
#--exec $NDB_EXAMPLES_DIR/ndbapi_event/ndbapi_event "localhost:$NDBCLUSTER_PORT" 1 >> $NDB_EXAMPLES_OUTPUT
insert into t0 values (1, 2, 'a', 'b', null);
insert into t0 values (3, 4, 'c', 'd', null);
update t0 set c3 = 'e' where c0 = 1 and c2 = 'a'; -- use pk
update t0 set c3 = 'f'; -- use scan
update t0 set c3 = 'F'; -- use scan update to 'same'
update t0 set c2 = 'g' where c0 = 1; -- update pk part
update t0 set c2 = 'G' where c0 = 1; -- update pk part to 'same'
update t0 set c0 = 5, c2 = 'H' where c0 = 3; -- update full PK
delete from t0;
drop table t0;
--exec echo Running mgmapi_logevent, results in $NDB_EXAMPLES_OUTPUT
--exec $NDB_EXAMPLES_DIR/mgmapi_logevent/mgmapi_logevent "localhost:$NDBCLUSTER_PORT" 1 >> $NDB_EXAMPLES_OUTPUT
--- New file ---
+++ mysql-test/t/rpl_ndbapi_multi.test 06/09/01 15:10:04
-- source include/have_ndb.inc
-- source include/have_binlog_format_row.inc
-- source include/master-slave.inc
-- source include/have_ndbapi_examples.inc
--exec $NDB_EXAMPLES_DIR/ndbapi_simple_dual/ndbapi_simple_dual $MASTER_MYSOCK "localhost:$NDBCLUSTER_PORT" $SLAVE_MYSOCK "localhost:$NDBCLUSTER_PORT_SLAVE" >> $NDB_EXAMPLES_OUTPUT
--exec echo Running mgmapi_logevent, results in $NDB_EXAMPLES_OUTPUT
--exec $NDB_EXAMPLES_DIR/mgmapi_logevent/mgmapi_logevent "localhost:$NDBCLUSTER_PORT" "localhost:$NDBCLUSTER_PORT_SLAVE" 1 >> $NDB_EXAMPLES_OUTPUT
--- New file ---
+++ storage/ndb/ndbapi-examples/mgmapi_logevent_dual/Makefile 06/09/01 15:08:42
TARGET = mgmapi_logevent_dual
SRCS = $(TARGET).cpp
OBJS = $(TARGET).o
CXX = g++
CFLAGS = -c -Wall -fno-rtti -fno-exceptions
CXXFLAGS =
DEBUG =
LFLAGS = -Wall
TOP_SRCDIR = ../../../..
INCLUDE_DIR = $(TOP_SRCDIR)/storage/ndb/include
LIB_DIR = -L$(TOP_SRCDIR)/storage/ndb/src/.libs \
-L$(TOP_SRCDIR)/libmysql_r/.libs \
-L$(TOP_SRCDIR)/zlib/.libs \
-L$(TOP_SRCDIR)/mysys -L$(TOP_SRCDIR)/strings
SYS_LIB =
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $(LFLAGS) $(LIB_DIR) $(OBJS) -lndbclient -lmysqlclient_r -lmysys -lmystrings -lz $(SYS_LIB) -o $(TARGET)
$(TARGET).o: $(SRCS)
$(CXX) $(CFLAGS) -I$(TOP_SRCDIR)/include -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/mgmapi -I$(INCLUDE_DIR)/ndbapi $(SRCS)
clean:
rm -f *.o $(TARGET)
--- New file ---
+++ storage/ndb/ndbapi-examples/mgmapi_logevent_dual/mgmapi_logevent_dual.cpp 06/09/01 15:08:56
/* Copyright (C) 2003 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include <mysql.h>
#include <ndbapi/NdbApi.hpp>
#include <mgmapi.h>
#include <stdio.h>
/*
* export LD_LIBRARY_PATH=../../../libmysql_r/.libs:../../../ndb/src/.libs
*/
#define MGMERROR(h) \
{ \
fprintf(stderr, "code: %d msg: %s\n", \
ndb_mgm_get_latest_error(h), \
ndb_mgm_get_latest_error_msg(h)); \
exit(-1); \
}
#define LOGEVENTERROR(h) \
{ \
fprintf(stderr, "code: %d msg: %s\n", \
ndb_logevent_get_latest_error(h), \
ndb_logevent_get_latest_error_msg(h)); \
exit(-1); \
}
int main(int argc, char** argv)
{
NdbMgmHandle h1,h2;
NdbLogEventHandle le1,le2;
int filter[] = { 15, NDB_MGM_EVENT_CATEGORY_BACKUP,
15, NDB_MGM_EVENT_CATEGORY_CONNECTION,
15, NDB_MGM_EVENT_CATEGORY_NODE_RESTART,
15, NDB_MGM_EVENT_CATEGORY_STARTUP,
15, NDB_MGM_EVENT_CATEGORY_ERROR,
0 };
struct ndb_logevent event1, event2;
if (argc < 3)
{
printf("Arguments are <connect_string cluster 1> <connect_string cluster 2> [<iterations>].\n");
exit(-1);
}
const char *connectstring1 = argv[1];
const char *connectstring2 = argv[2];
int iterations = -1;
if (argc > 3)
iterations = atoi(argv[3]);
ndb_init();
h1= ndb_mgm_create_handle();
h2= ndb_mgm_create_handle();
if ( h1 == 0 || h2 == 0 )
{
printf("Unable to create handle\n");
exit(-1);
}
if (ndb_mgm_set_connectstring(h1, connectstring1) == -1 ||
ndb_mgm_set_connectstring(h2, connectstring1))
{
printf("Unable to set connectstring\n");
exit(-1);
}
if (ndb_mgm_connect(h1,0,0,0)) MGMERROR(h1);
if (ndb_mgm_connect(h2,0,0,0)) MGMERROR(h2);
if ((le1= ndb_mgm_create_logevent_handle(h1, filter)) == 0) MGMERROR(h1);
if ((le2= ndb_mgm_create_logevent_handle(h1, filter)) == 0) MGMERROR(h2);
while (iterations-- != 0)
{
int timeout= 1000;
int r1= ndb_logevent_get_next(le1,&event1,timeout);
if (r1 == 0)
printf("No event within %d milliseconds\n", timeout);
else if (r1 < 0)
LOGEVENTERROR(le1)
else
{
switch (event1.type) {
case NDB_LE_BackupStarted:
printf("Node %d: BackupStarted\n", event1.source_nodeid);
printf(" Starting node ID: %d\n", event1.BackupStarted.starting_node);
printf(" Backup ID: %d\n", event1.BackupStarted.backup_id);
break;
case NDB_LE_BackupCompleted:
printf("Node %d: BackupCompleted\n", event1.source_nodeid);
printf(" Backup ID: %d\n", event1.BackupStarted.backup_id);
break;
case NDB_LE_BackupAborted:
printf("Node %d: BackupAborted\n", event1.source_nodeid);
break;
case NDB_LE_BackupFailedToStart:
printf("Node %d: BackupFailedToStart\n", event1.source_nodeid);
break;
case NDB_LE_NodeFailCompleted:
printf("Node %d: NodeFailCompleted\n", event1.source_nodeid);
break;
case NDB_LE_ArbitResult:
printf("Node %d: ArbitResult\n", event1.source_nodeid);
printf(" code %d, arbit_node %d\n",
event1.ArbitResult.code & 0xffff,
event1.ArbitResult.arbit_node);
break;
case NDB_LE_DeadDueToHeartbeat:
printf("Node %d: DeadDueToHeartbeat\n", event1.source_nodeid);
printf(" node %d\n", event1.DeadDueToHeartbeat.node);
break;
case NDB_LE_Connected:
printf("Node %d: Connected\n", event1.source_nodeid);
printf(" node %d\n", event1.Connected.node);
break;
case NDB_LE_Disconnected:
printf("Node %d: Disconnected\n", event1.source_nodeid);
printf(" node %d\n", event1.Disconnected.node);
break;
case NDB_LE_NDBStartCompleted:
printf("Node %d: StartCompleted\n", event1.source_nodeid);
printf(" version %d.%d.%d\n",
event1.NDBStartCompleted.version >> 16 & 0xff,
event1.NDBStartCompleted.version >> 8 & 0xff,
event1.NDBStartCompleted.version >> 0 & 0xff);
break;
case NDB_LE_ArbitState:
printf("Node %d: ArbitState\n", event1.source_nodeid);
printf(" code %d, arbit_node %d\n",
event1.ArbitState.code & 0xffff,
event1.ArbitResult.arbit_node);
break;
default:
break;
}
}
int r2= ndb_logevent_get_next(le1,&event2,timeout);
if (r2 == 0)
printf("No event within %d milliseconds\n", timeout);
else if (r2 < 0)
LOGEVENTERROR(le2)
else
{
switch (event2.type) {
case NDB_LE_BackupStarted:
printf("Node %d: BackupStarted\n", event2.source_nodeid);
printf(" Starting node ID: %d\n", event2.BackupStarted.starting_node);
printf(" Backup ID: %d\n", event2.BackupStarted.backup_id);
break;
case NDB_LE_BackupCompleted:
printf("Node %d: BackupCompleted\n", event2.source_nodeid);
printf(" Backup ID: %d\n", event2.BackupStarted.backup_id);
break;
case NDB_LE_BackupAborted:
printf("Node %d: BackupAborted\n", event2.source_nodeid);
break;
case NDB_LE_BackupFailedToStart:
printf("Node %d: BackupFailedToStart\n", event2.source_nodeid);
break;
case NDB_LE_NodeFailCompleted:
printf("Node %d: NodeFailCompleted\n", event2.source_nodeid);
break;
case NDB_LE_ArbitResult:
printf("Node %d: ArbitResult\n", event2.source_nodeid);
printf(" code %d, arbit_node %d\n",
event2.ArbitResult.code & 0xffff,
event2.ArbitResult.arbit_node);
break;
case NDB_LE_DeadDueToHeartbeat:
printf("Node %d: DeadDueToHeartbeat\n", event2.source_nodeid);
printf(" node %d\n", event2.DeadDueToHeartbeat.node);
break;
case NDB_LE_Connected:
printf("Node %d: Connected\n", event2.source_nodeid);
printf(" node %d\n", event2.Connected.node);
break;
case NDB_LE_Disconnected:
printf("Node %d: Disconnected\n", event2.source_nodeid);
printf(" node %d\n", event2.Disconnected.node);
break;
case NDB_LE_NDBStartCompleted:
printf("Node %d: StartCompleted\n", event2.source_nodeid);
printf(" version %d.%d.%d\n",
event2.NDBStartCompleted.version >> 16 & 0xff,
event2.NDBStartCompleted.version >> 8 & 0xff,
event2.NDBStartCompleted.version >> 0 & 0xff);
break;
case NDB_LE_ArbitState:
printf("Node %d: ArbitState\n", event2.source_nodeid);
printf(" code %d, arbit_node %d\n",
event2.ArbitState.code & 0xffff,
event2.ArbitResult.arbit_node);
break;
default:
break;
}
}
}
ndb_mgm_destroy_logevent_handle(&le1);
ndb_mgm_destroy_logevent_handle(&le2);
ndb_mgm_destroy_handle(&h1);
ndb_mgm_destroy_handle(&h2);
ndb_end(0);
return 0;
}
--- New file ---
+++ storage/ndb/ndbapi-examples/ndbapi_simple_dual/Makefile 06/09/01 15:08:03
TARGET = ndbapi_simple_dual
SRCS = $(TARGET).cpp
OBJS = $(TARGET).o
CXX = g++
CFLAGS = -c -Wall -fno-rtti -fno-exceptions
CXXFLAGS =
DEBUG =
LFLAGS = -Wall
TOP_SRCDIR = ../../../..
INCLUDE_DIR = $(TOP_SRCDIR)/storage/ndb/include
LIB_DIR = -L$(TOP_SRCDIR)/storage/ndb/src/.libs \
-L$(TOP_SRCDIR)/libmysql_r/.libs \
-L$(TOP_SRCDIR)/zlib/.libs \
-L$(TOP_SRCDIR)/mysys -L$(TOP_SRCDIR)/strings
SYS_LIB =
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) $(LFLAGS) $(LIB_DIR) $(OBJS) -lndbclient -lmysqlclient_r -lmysys -lmystrings -lz $(SYS_LIB) -o $(TARGET)
$(TARGET).o: $(SRCS)
$(CXX) $(CFLAGS) -I$(TOP_SRCDIR)/include -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/ndbapi $(SRCS)
clean:
rm -f *.o $(TARGET)
--- New file ---
+++ storage/ndb/ndbapi-examples/ndbapi_simple_dual/ndbapi_simple_dual.cpp 06/09/01 15:08:15
/* Copyright (C) 2003 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/*
* ndbapi_simple_dual.cpp: Using synchronous transactions in NDB API
*
* Correct output from this program is:
*
* ATTR1 ATTR2
* 0 10
* 1 1
* 2 12
* Detected that deleted tuple doesn't exist!
* 4 14
* 5 5
* 6 16
* 7 7
* 8 18
* 9 9
* ATTR1 ATTR2
* 0 10
* 1 1
* 2 12
* Detected that deleted tuple doesn't exist!
* 4 14
* 5 5
* 6 16
* 7 7
* 8 18
* 9 9
*
*/
#include <mysql.h>
#include <NdbApi.hpp>
// Used for cout
#include <stdio.h>
#include <iostream>
static void run_application(MYSQL &, Ndb_cluster_connection &, const char* table, const char* db);
#define PRINT_ERROR(code,msg) \
std::cout << "Error in " << __FILE__ << ", line: " << __LINE__ \
<< ", code: " << code \
<< ", msg: " << msg << "." << std::endl
#define MYSQLERROR(mysql) { \
PRINT_ERROR(mysql_errno(&mysql),mysql_error(&mysql)); \
exit(-1); }
#define APIERROR(error) { \
PRINT_ERROR(error.code,error.message); \
exit(-1); }
int main(int argc, char** argv)
{
if (argc != 5)
{
std::cout << "Arguments are <socket mysqld1> <connect_string cluster 1> <socket mysqld2> <connect_string cluster 2>.\n";
exit(-1);
}
// ndb_init must be called first
ndb_init();
{
char * mysqld1_sock = argv[1];
const char *connectstring1 = argv[2];
char * mysqld2_sock = argv[3];
const char *connectstring2 = argv[4];
// Object representing the cluster 1
Ndb_cluster_connection cluster1_connection(connectstring1);
MYSQL mysql1;
// Object representing the cluster 2
Ndb_cluster_connection cluster2_connection(connectstring2);
MYSQL mysql2;
// connect to mysql server and cluster 1 and run application
// Connect to cluster 1 management server (ndb_mgmd)
if (cluster1_connection.connect(4 /* retries */,
5 /* delay between retries */,
1 /* verbose */))
{
std::cout << "Cluster 1 management server was not ready within 30 secs.\n";
exit(-1);
}
// Optionally connect and wait for the storage nodes (ndbd's)
if (cluster1_connection.wait_until_ready(30,0) < 0)
{
std::cout << "Cluster 1 was not ready within 30 secs.\n";
exit(-1);
}
// connect to mysql server in cluster 1
if ( !mysql_init(&mysql1) ) {
std::cout << "mysql_init failed\n";
exit(-1);
}
if ( !mysql_real_connect(&mysql1, "localhost", "root", "", "",
0, mysqld1_sock, 0) )
MYSQLERROR(mysql1);
// connect to mysql server and cluster 2 and run application
// Connect to cluster management server (ndb_mgmd)
if (cluster2_connection.connect(4 /* retries */,
5 /* delay between retries */,
1 /* verbose */))
{
std::cout << "Cluster 2 management server was not ready within 30 secs.\n";
exit(-1);
}
// Optionally connect and wait for the storage nodes (ndbd's)
if (cluster2_connection.wait_until_ready(30,0) < 0)
{
std::cout << "Cluster 2 was not ready within 30 secs.\n";
exit(-1);
}
// connect to mysql server in cluster 2
if ( !mysql_init(&mysql2) ) {
std::cout << "mysql_init failed\n";
exit(-1);
}
if ( !mysql_real_connect(&mysql2, "localhost", "root", "", "",
0, mysqld2_sock, 0) )
MYSQLERROR(mysql2);
// run the application code
run_application(mysql1, cluster1_connection, "MYTABLENAME1", "TEST_DB_1");
run_application(mysql2, cluster2_connection, "MYTABLENAME2", "TEST_DB_2");
}
// Note: all connections must have been destroyed before calling ndb_end()
ndb_end(0);
return 0;
}
static void create_table(MYSQL &, const char* table);
static void drop_table(MYSQL &, const char* table);
static void do_insert(Ndb &, const char* table);
static void do_update(Ndb &, const char* table);
static void do_delete(Ndb &, const char* table);
static void do_read(Ndb &, const char* table);
static void run_application(MYSQL &mysql,
Ndb_cluster_connection &cluster_connection,
const char* table,
const char* db)
{
/********************************************
* Connect to database via mysql-c *
********************************************/
char db_stmt[256];
sprintf(db_stmt, "CREATE DATABASE %s\n", db);
mysql_query(&mysql, db_stmt);
sprintf(db_stmt, "USE %s", db);
if (mysql_query(&mysql, db_stmt) != 0) MYSQLERROR(mysql);
create_table(mysql, table);
/********************************************
* Connect to database via NdbApi *
********************************************/
// Object representing the database
Ndb myNdb( &cluster_connection, db );
if (myNdb.init()) APIERROR(myNdb.getNdbError());
/*
* Do different operations on database
*/
do_insert(myNdb, table);
do_update(myNdb, table);
do_delete(myNdb, table);
do_read(myNdb, table);
/*
* Drop the table
*/
drop_table(mysql, table);
sprintf(db_stmt, "DROP DATABASE %s\n", db);
mysql_query(&mysql, db_stmt);
}
/*********************************************************
* Create a table named by table if it does not exist *
*********************************************************/
static void create_table(MYSQL &mysql, const char* table)
{
char create_stmt[256];
sprintf(create_stmt, "CREATE TABLE %s \
(ATTR1 INT UNSIGNED NOT NULL PRIMARY KEY,\
ATTR2 INT UNSIGNED NOT NULL)\
ENGINE=NDB", table);
if (mysql_query(&mysql, create_stmt))
MYSQLERROR(mysql);
}
/*******************************
* Drop a table named by table
*******************************/
static void drop_table(MYSQL &mysql, const char* table)
{
char drop_stmt[256];
sprintf(drop_stmt, "DROP TABLE IF EXISTS %s", table);
if (mysql_query(&mysql, drop_stmt))
MYSQLERROR(mysql);
}
/**************************************************************************
* Using 5 transactions, insert 10 tuples in table: (0,0),(1,1),...,(9,9) *
**************************************************************************/
static void do_insert(Ndb &myNdb, const char* table)
{
const NdbDictionary::Dictionary* myDict= myNdb.getDictionary();
const NdbDictionary::Table *myTable= myDict->getTable(table);
if (myTable == NULL)
APIERROR(myDict->getNdbError());
for (int i = 0; i < 5; i++) {
NdbTransaction *myTransaction= myNdb.startTransaction();
if (myTransaction == NULL) APIERROR(myNdb.getNdbError());
NdbOperation *myOperation= myTransaction->getNdbOperation(myTable);
if (myOperation == NULL) APIERROR(myTransaction->getNdbError());
myOperation->insertTuple();
myOperation->equal("ATTR1", i);
myOperation->setValue("ATTR2", i);
myOperation= myTransaction->getNdbOperation(myTable);
if (myOperation == NULL) APIERROR(myTransaction->getNdbError());
myOperation->insertTuple();
myOperation->equal("ATTR1", i+5);
myOperation->setValue("ATTR2", i+5);
if (myTransaction->execute( NdbTransaction::Commit ) == -1)
APIERROR(myTransaction->getNdbError());
myNdb.closeTransaction(myTransaction);
}
}
/*****************************************************************
* Update the second attribute in half of the tuples (adding 10) *
*****************************************************************/
static void do_update(Ndb &myNdb, const char* table)
{
const NdbDictionary::Dictionary* myDict= myNdb.getDictionary();
const NdbDictionary::Table *myTable= myDict->getTable(table);
if (myTable == NULL)
APIERROR(myDict->getNdbError());
for (int i = 0; i < 10; i+=2) {
NdbTransaction *myTransaction= myNdb.startTransaction();
if (myTransaction == NULL) APIERROR(myNdb.getNdbError());
NdbOperation *myOperation= myTransaction->getNdbOperation(myTable);
if (myOperation == NULL) APIERROR(myTransaction->getNdbError());
myOperation->updateTuple();
myOperation->equal( "ATTR1", i );
myOperation->setValue( "ATTR2", i+10);
if( myTransaction->execute( NdbTransaction::Commit ) == -1 )
APIERROR(myTransaction->getNdbError());
myNdb.closeTransaction(myTransaction);
}
}
/*************************************************
* Delete one tuple (the one with primary key 3) *
*************************************************/
static void do_delete(Ndb &myNdb, const char* table)
{
const NdbDictionary::Dictionary* myDict= myNdb.getDictionary();
const NdbDictionary::Table *myTable= myDict->getTable(table);
if (myTable == NULL)
APIERROR(myDict->getNdbError());
NdbTransaction *myTransaction= myNdb.startTransaction();
if (myTransaction == NULL) APIERROR(myNdb.getNdbError());
NdbOperation *myOperation= myTransaction->getNdbOperation(myTable);
if (myOperation == NULL) APIERROR(myTransaction->getNdbError());
myOperation->deleteTuple();
myOperation->equal( "ATTR1", 3 );
if (myTransaction->execute(NdbTransaction::Commit) == -1)
APIERROR(myTransaction->getNdbError());
myNdb.closeTransaction(myTransaction);
}
/*****************************
* Read and print all tuples *
*****************************/
static void do_read(Ndb &myNdb, const char* table)
{
const NdbDictionary::Dictionary* myDict= myNdb.getDictionary();
const NdbDictionary::Table *myTable= myDict->getTable(table);
if (myTable == NULL)
APIERROR(myDict->getNdbError());
std::cout << "ATTR1 ATTR2" << std::endl;
for (int i = 0; i < 10; i++) {
NdbTransaction *myTransaction= myNdb.startTransaction();
if (myTransaction == NULL) APIERROR(myNdb.getNdbError());
NdbOperation *myOperation= myTransaction->getNdbOperation(myTable);
if (myOperation == NULL) APIERROR(myTransaction->getNdbError());
myOperation->readTuple(NdbOperation::LM_Read);
myOperation->equal("ATTR1", i);
NdbRecAttr *myRecAttr= myOperation->getValue("ATTR2", NULL);
if (myRecAttr == NULL) APIERROR(myTransaction->getNdbError());
if(myTransaction->execute( NdbTransaction::Commit ) == -1)
if (i == 3) {
std::cout << "Detected that deleted tuple doesn't exist!" << std::endl;
} else {
APIERROR(myTransaction->getNdbError());
}
if (i != 3) {
printf(" %2d %2d\n", i, myRecAttr->u_32_value());
}
myNdb.closeTransaction(myTransaction);
}
}
--- 1.1/storage/ndb/ndbapi-examples/mgmapi_logevent/Makefile 2006-09-01 15:14:57 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/mgmapi_logevent/Makefile 2006-09-01 15:14:57 +02:00
@@ -10,6 +10,7 @@ TOP_SRCDIR = ../../../..
INCLUDE_DIR = $(TOP_SRCDIR)/storage/ndb/include
LIB_DIR = -L$(TOP_SRCDIR)/storage/ndb/src/.libs \
-L$(TOP_SRCDIR)/libmysql_r/.libs \
+ -L$(TOP_SRCDIR)/zlib/.libs \
-L$(TOP_SRCDIR)/mysys -L$(TOP_SRCDIR)/strings
SYS_LIB =
--- 1.1/storage/ndb/ndbapi-examples/mgmapi_logevent/mgmapi_logevent.cpp 2006-09-01 15:14:57 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/mgmapi_logevent/mgmapi_logevent.cpp 2006-09-01 15:14:57 +02:00
@@ -39,7 +39,7 @@
exit(-1); \
}
-int main()
+int main(int argc, char** argv)
{
NdbMgmHandle h;
NdbLogEventHandle le;
@@ -51,22 +51,36 @@ int main()
0 };
struct ndb_logevent event;
+ if (argc < 2)
+ {
+ printf("Arguments are <connect_string cluster> [<iterations>].\n");
+ exit(-1);
+ }
+ const char *connectstring = argv[1];
+ int iterations = -1;
+ if (argc > 2)
+ iterations = atoi(argv[2]);
ndb_init();
-
+
h= ndb_mgm_create_handle();
if ( h == 0)
{
printf("Unable to create handle\n");
exit(-1);
}
+ if (ndb_mgm_set_connectstring(h, connectstring) == -1)
+ {
+ printf("Unable to set connectstring\n");
+ exit(-1);
+ }
if (ndb_mgm_connect(h,0,0,0)) MGMERROR(h);
le= ndb_mgm_create_logevent_handle(h, filter);
if ( le == 0 ) MGMERROR(h);
- while (1)
+ while (iterations-- != 0)
{
- int timeout= 5000;
+ int timeout= 1000;
int r= ndb_logevent_get_next(le,&event,timeout);
if (r == 0)
printf("No event within %d milliseconds\n", timeout);
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_async/Makefile 2006-09-01 15:14:57 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_async/Makefile 2006-09-01 15:14:57 +02:00
@@ -10,6 +10,7 @@ TOP_SRCDIR = ../../../..
INCLUDE_DIR = $(TOP_SRCDIR)
LIB_DIR = -L$(TOP_SRCDIR)/storage/ndb/src/.libs \
-L$(TOP_SRCDIR)/libmysql_r/.libs \
+ -L$(TOP_SRCDIR)/zlib/.libs \
-L$(TOP_SRCDIR)/mysys -L$(TOP_SRCDIR)/strings
SYS_LIB =
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_async/ndbapi_async.cpp 2006-09-01 15:14:57 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_async/ndbapi_async.cpp 2006-09-01 15:14:57 +02:00
@@ -136,7 +136,12 @@ void closeTransaction(Ndb * ndb , async_
/**
* Function to create table
*/
-int create_table(Ndb * myNdb);
+void create_table(MYSQL &mysql);
+
+/**
+ * Function to drop table
+ */
+void drop_table(MYSQL &mysql);
/**
* stat. variables
@@ -193,7 +198,7 @@ callback(int result, NdbTransaction* tra
/**
* Create table "GARAGE"
*/
-int create_table(MYSQL &mysql)
+void create_table(MYSQL &mysql)
{
while (mysql_query(&mysql,
"CREATE TABLE"
@@ -208,15 +213,21 @@ int create_table(MYSQL &mysql)
MYSQLERROR(mysql);
std::cout << "MySQL Cluster already has example table: GARAGE. "
<< "Dropping it..." << std::endl;
- /**************
- * Drop table *
- **************/
- if (mysql_query(&mysql, "DROP TABLE GARAGE"))
- MYSQLERROR(mysql);
+ drop_table(mysql);
+ create_table(mysql);
}
- return 1;
}
+/**
+ * Drop table GARAGE
+ */
+void drop_table(MYSQL &mysql)
+{
+ if (mysql_query(&mysql, "DROP TABLE GARAGE"))
+ MYSQLERROR(mysql);
+}
+
+
void asynchExitHandler(Ndb * m_ndb)
{
if (m_ndb != NULL)
@@ -339,16 +350,12 @@ int populate(Ndb * myNdb, int data, asyn
{
transaction[current].conn = myNdb->startTransaction();
if (transaction[current].conn == NULL) {
- if (asynchErrorHandler(transaction[current].conn, myNdb))
- {
- /**
- * no transaction to close since conn == null
- */
- milliSleep(10);
- retries++;
- continue;
- }
- asynchExitHandler(myNdb);
+ /**
+ * no transaction to close since conn == null
+ */
+ milliSleep(10);
+ retries++;
+ continue;
}
myNdbOperation = transaction[current].conn->getNdbOperation(myTable);
if (myNdbOperation == NULL)
@@ -406,8 +413,15 @@ int populate(Ndb * myNdb, int data, asyn
return -1;
}
-int main()
+int main(int argc, char** argv)
{
+ if (argc != 3)
+ {
+ std::cout << "Arguments are <socket mysqld> <connect_string cluster>.\n";
+ exit(-1);
+ }
+ char * mysqld_sock = argv[1];
+ const char *connectstring = argv[2];
ndb_init();
MYSQL mysql;
@@ -420,7 +434,7 @@ int main()
exit(-1);
}
if ( !mysql_real_connect(&mysql, "localhost", "root", "", "",
- 3306, "/tmp/mysql.sock", 0) )
+ 0, mysqld_sock, 0) )
MYSQLERROR(mysql);
mysql_query(&mysql, "CREATE DATABASE TEST_DB");
@@ -432,7 +446,7 @@ int main()
/**************************************************************
* Connect to ndb cluster *
**************************************************************/
- Ndb_cluster_connection cluster_connection;
+ Ndb_cluster_connection cluster_connection(connectstring);
if (cluster_connection.connect(4, 5, 1))
{
std::cout << "Unable to connect to cluster within 30 secs." << std::endl;
@@ -447,14 +461,14 @@ int main()
Ndb* myNdb = new Ndb( &cluster_connection,
"TEST_DB" ); // Object representing the database
- if (myNdb->init(1024) == -1) { // Set max 1024 parallel transactions
+ if (myNdb->init(1024) == -1) { // Set max 1024 parallel transactions
APIERROR(myNdb->getNdbError());
}
/**
* Initialise transaction array
*/
- for(int i = 0 ; i < 1024 ; i++)
+ for(int i = 0 ; i < 10 ; i++)
{
transaction[i].used = 0;
transaction[i].conn = 0;
@@ -462,9 +476,9 @@ int main()
}
int i=0;
/**
- * Do 20000 insert transactions.
+ * Do 10 insert transactions.
*/
- while(i < 20000)
+ while(i < 10)
{
while(populate(myNdb,i,0)<0) // <0, no space on free list. Sleep and try again.
milliSleep(10);
@@ -473,4 +487,6 @@ int main()
}
std::cout << "Number of temporary errors: " << tempErrors << std::endl;
delete myNdb;
+
+ drop_table(mysql);
}
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_async1/Makefile 2006-09-01 15:14:57 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_async1/Makefile 2006-09-01 15:14:57 +02:00
@@ -6,9 +6,10 @@ CFLAGS = -c -Wall -fno-rtti -fno-excepti
DEBUG =
LFLAGS = -Wall
TOP_SRCDIR = ../../../..
-INCLUDE_DIR = $(TOP_SRCDIR)
+INCLUDE_DIR = $(TOP_SRCDIR)/storage/ndb/include
LIB_DIR = -L$(TOP_SRCDIR)/storage/ndb/src/.libs \
-L$(TOP_SRCDIR)/libmysql_r/.libs \
+ -L$(TOP_SRCDIR)/zlib/.libs \
-L$(TOP_SRCDIR)/mysys -L$(TOP_SRCDIR)/strings
SYS_LIB =
@@ -16,7 +17,7 @@ $(TARGET): $(OBJS)
$(CXX) $(LFLAGS) $(LIB_DIR) $(OBJS) -lndbclient -lmysqlclient_r -lmysys -lmystrings -lz $(SYS_LIB) -o $(TARGET)
$(TARGET).o: $(SRCS)
- $(CXX) $(CFLAGS) -I$(INCLUDE_DIR)/storage/ndb/include -I$(INCLUDE_DIR)/storage/ndb/include/ndbapi $(SRCS)
+ $(CXX) $(CFLAGS) -I$(TOP_SRCDIR)/include -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/ndbapi $(SRCS)
clean:
rm -f *.o $(TARGET)
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_async1/ndbapi_async1.cpp 2006-09-01 15:14:57 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_async1/ndbapi_async1.cpp 2006-09-01 15:14:57 +02:00
@@ -17,38 +17,48 @@
//
// ndbapi_async1.cpp: Using asynchronous transactions in NDB API
//
-// Execute ndbapi_example1 to create the table "MYTABLENAME"
-// before executing this program.
//
// Correct output from this program is:
//
// Successful insert.
// Successful insert.
+#include <mysql.h>
#include <NdbApi.hpp>
// Used for cout
#include <iostream>
+
+#define PRINT_ERROR(code,msg) \
+ std::cout << "Error in " << __FILE__ << ", line: " << __LINE__ \
+ << ", code: " << code \
+ << ", msg: " << msg << "." << std::endl
+#define MYSQLERROR(mysql) { \
+ PRINT_ERROR(mysql_errno(&mysql),mysql_error(&mysql)); \
+ exit(-1); }
#define APIERROR(error) \
{ std::cout << "Error in " << __FILE__ << ", line:" << __LINE__ << ", code:" \
<< error.code << ", msg: " << error.message << "." << std::endl; \
exit(-1); }
+static void create_table(MYSQL &);
+static void drop_table(MYSQL &);
static void callback(int result, NdbTransaction* NdbObject, void* aObject);
-int main()
+int main(int argc, char** argv)
{
- ndb_init();
-
- Ndb_cluster_connection *cluster_connection=
- new Ndb_cluster_connection(); // Object representing the cluster
-
- if (cluster_connection->wait_until_ready(30,30))
+ if (argc != 3)
{
- std::cout << "Cluster was not ready within 30 secs." << std::endl;
+ std::cout << "Arguments are <socket mysqld> <connect_string cluster>.\n";
exit(-1);
}
+ char * mysqld_sock = argv[1];
+ const char *connectstring = argv[2];
+ ndb_init();
+
+ Ndb_cluster_connection *cluster_connection=
+ new Ndb_cluster_connection(connectstring); // Object representing the cluster
int r= cluster_connection->connect(5 /* retries */,
3 /* delay between retries */,
@@ -65,15 +75,32 @@ int main()
<< "Cluster connect failed.\n";
exit(-1);
}
-
- if (cluster_connection->wait_until_ready(30,30))
+
+ if (cluster_connection->wait_until_ready(30,0))
{
std::cout << "Cluster was not ready within 30 secs." << std::endl;
exit(-1);
}
+
+ // connect to mysql server
+ MYSQL mysql;
+ if ( !mysql_init(&mysql) ) {
+ std::cout << "mysql_init failed\n";
+ exit(-1);
+ }
+ if ( !mysql_real_connect(&mysql, "localhost", "root", "", "",
+ 0, mysqld_sock, 0) )
+ MYSQLERROR(mysql);
+
+ /********************************************
+ * Connect to database via mysql-c *
+ ********************************************/
+ mysql_query(&mysql, "CREATE DATABASE TEST_DB_1");
+ if (mysql_query(&mysql, "USE TEST_DB_1") != 0) MYSQLERROR(mysql);
+ create_table(mysql);
Ndb* myNdb = new Ndb( cluster_connection,
- "TEST_DB_2" ); // Object representing the database
+ "TEST_DB_1" ); // Object representing the database
NdbTransaction* myNdbTransaction[2]; // For transactions
NdbOperation* myNdbOperation; // For operations
@@ -119,9 +146,37 @@ int main()
delete myNdb;
delete cluster_connection;
+ drop_table(mysql);
+
ndb_end(0);
return 0;
}
+
+/*********************************************************
+ * Create a table named MYTABLENAME if it does not exist *
+ *********************************************************/
+static void create_table(MYSQL &mysql)
+{
+ if (mysql_query(&mysql,
+ "CREATE TABLE"
+ " MYTABLENAME"
+ " (ATTR1 INT UNSIGNED NOT NULL PRIMARY KEY,"
+ " ATTR2 INT UNSIGNED NOT NULL)"
+ " ENGINE=NDB"))
+ MYSQLERROR(mysql);
+}
+
+/***********************************
+ * Drop a table named MYTABLENAME
+ ***********************************/
+static void drop_table(MYSQL &mysql)
+{
+ if (mysql_query(&mysql,
+ "DROP TABLE"
+ " MYTABLENAME"))
+ MYSQLERROR(mysql);
+}
+
/*
* callback : This is called when the transaction is polled
--- 1.3/storage/ndb/ndbapi-examples/ndbapi_event/Makefile 2006-09-01 15:14:58 +02:00
+++ 1.4/storage/ndb/ndbapi-examples/ndbapi_event/Makefile 2006-09-01 15:14:58 +02:00
@@ -10,6 +10,7 @@ TOP_SRCDIR = ../../../..
INCLUDE_DIR = $(TOP_SRCDIR)/storage/ndb/include
LIB_DIR = -L$(TOP_SRCDIR)/storage/ndb/src/.libs \
-L$(TOP_SRCDIR)/libmysql_r/.libs \
+ -L$(TOP_SRCDIR)/zlib/.libs \
-L$(TOP_SRCDIR)/mysys -L$(TOP_SRCDIR)/strings
SYS_LIB =
--- 1.4/storage/ndb/ndbapi-examples/ndbapi_event/ndbapi_event.cpp 2006-09-01 15:14:58 +02:00
+++ 1.5/storage/ndb/ndbapi-examples/ndbapi_event/ndbapi_event.cpp 2006-09-01 15:14:58 +02:00
@@ -117,16 +117,23 @@ int myCreateEvent(Ndb* myNdb,
int main(int argc, char** argv)
{
+ if (argc < 3)
+ {
+ std::cout << "Arguments are <connect_string cluster> <timeout> [m(merge events)|d(debug)].\n";
+ exit(-1);
+ }
+ const char *connectstring = argv[1];
+ int timeout = atoi(argv[2]);
ndb_init();
- bool merge_events = argc > 1 && strchr(argv[1], 'm') != 0;
+ bool merge_events = argc > 3 && strchr(argv[3], 'm') != 0;
#ifdef VM_TRACE
- bool dbug = argc > 1 && strchr(argv[1], 'd') != 0;
+ bool dbug = argc > 3 && strchr(argv[3], 'd') != 0;
if (dbug) DBUG_PUSH("d:t:");
if (dbug) putenv("API_SIGNAL_LOG=-");
#endif
Ndb_cluster_connection *cluster_connection=
- new Ndb_cluster_connection(); // Object representing the cluster
+ new Ndb_cluster_connection(connectstring); // Object representing the cluster
int r= cluster_connection->connect(5 /* retries */,
3 /* delay between retries */,
@@ -179,7 +186,7 @@ int main(int argc, char** argv)
int i, j, k, l;
j = 0;
- while (j < 99) {
+ while (j < timeout) {
// Start "transaction" for handling events
NdbEventOperation* op;
@@ -211,7 +218,7 @@ int main(int argc, char** argv)
NdbEventOperation* the_op = op;
i= 0;
- while (i < 40) {
+ while (i < timeout) {
// printf("now waiting for event...\n");
int r = myNdb->pollEvents(1000); // wait for event or 1000 ms
if (r > 0) {
@@ -287,7 +294,7 @@ int main(int argc, char** argv)
}
}
} else
- ;//printf("timed out\n");
+ printf("timed out (%i)\n", timeout);
}
// don't want to listen to events anymore
if (myNdb->dropEventOperation(the_op)) APIERROR(myNdb->getNdbError());
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_retries/Makefile 2006-09-01 15:14:58 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_retries/Makefile 2006-09-01 15:14:58 +02:00
@@ -6,9 +6,10 @@ CFLAGS = -c -Wall -fno-rtti -fno-excepti
DEBUG =
LFLAGS = -Wall
TOP_SRCDIR = ../../../..
-INCLUDE_DIR = ../../include
+INCLUDE_DIR = $(TOP_SRCDIR)/storage/ndb/include
LIB_DIR = -L$(TOP_SRCDIR)/storage/ndb/src/.libs \
-L$(TOP_SRCDIR)/libmysql_r/.libs \
+ -L$(TOP_SRCDIR)/zlib/.libs \
-L$(TOP_SRCDIR)/mysys -L$(TOP_SRCDIR)/strings
SYS_LIB =
@@ -16,7 +17,7 @@ $(TARGET): $(OBJS)
$(CXX) $(LFLAGS) $(LIB_DIR) $(OBJS) -lndbclient -lmysqlclient_r -lmysys -lmystrings -lz $(SYS_LIB) -o $(TARGET)
$(TARGET).o: $(SRCS)
- $(CXX) $(CFLAGS) -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/ndbapi $(SRCS)
+ $(CXX) $(CFLAGS) -I$(TOP_SRCDIR)/include -I$(INCLUDE_DIR) -I$(INCLUDE_DIR)/ndbapi $(SRCS)
clean:
rm -f *.o $(TARGET)
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_retries/ndbapi_retries.cpp 2006-09-01 15:14:58 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_retries/ndbapi_retries.cpp 2006-09-01 15:14:58 +02:00
@@ -17,9 +17,6 @@
//
// ndbapi_retries.cpp: Error handling and transaction retries
//
-// Execute ndbapi_simple to create the table "MYTABLENAME"
-// before executing this program.
-//
// There are many ways to program using the NDB API. In this example
// we execute two inserts in the same transaction using
// NdbConnection::execute(NoCommit).
@@ -29,6 +26,7 @@
// Application errors (i.e. errors at points marked with APIERROR)
// should be handled by the application programmer.
+#include <mysql.h>
#include <NdbApi.hpp>
// Used for cout
@@ -38,6 +36,14 @@
#include <unistd.h>
#define TIME_TO_SLEEP_BETWEEN_TRANSACTION_RETRIES 1
+#define PRINT_ERROR(code,msg) \
+ std::cout << "Error in " << __FILE__ << ", line: " << __LINE__ \
+ << ", code: " << code \
+ << ", msg: " << msg << "." << std::endl
+#define MYSQLERROR(mysql) { \
+ PRINT_ERROR(mysql_errno(&mysql),mysql_error(&mysql)); \
+ exit(-1); }
+
//
// APIERROR prints an NdbError object
//
@@ -176,13 +182,44 @@ int executeInsertTransaction(int transac
return result;
}
+/*********************************************************
+ * Create a table named MYTABLENAME if it does not exist *
+ *********************************************************/
+static void create_table(MYSQL &mysql)
+{
+ if (mysql_query(&mysql,
+ "CREATE TABLE"
+ " MYTABLENAME"
+ " (ATTR1 INT UNSIGNED NOT NULL PRIMARY KEY,"
+ " ATTR2 INT UNSIGNED NOT NULL)"
+ " ENGINE=NDB"))
+ MYSQLERROR(mysql);
+}
+
+/***********************************
+ * Drop a table named MYTABLENAME
+ ***********************************/
+static void drop_table(MYSQL &mysql)
+{
+ if (mysql_query(&mysql,
+ "DROP TABLE"
+ " MYTABLENAME"))
+ MYSQLERROR(mysql);
+}
-int main()
+int main(int argc, char** argv)
{
+ if (argc != 3)
+ {
+ std::cout << "Arguments are <socket mysqld> <connect_string cluster>.\n";
+ exit(-1);
+ }
+ char * mysqld_sock = argv[1];
+ const char *connectstring = argv[2];
ndb_init();
Ndb_cluster_connection *cluster_connection=
- new Ndb_cluster_connection(); // Object representing the cluster
+ new Ndb_cluster_connection(connectstring); // Object representing the cluster
int r= cluster_connection->connect(5 /* retries */,
3 /* delay between retries */,
@@ -205,6 +242,22 @@ int main()
std::cout << "Cluster was not ready within 30 secs." << std::endl;
exit(-1);
}
+ // connect to mysql server
+ MYSQL mysql;
+ if ( !mysql_init(&mysql) ) {
+ std::cout << "mysql_init failed\n";
+ exit(-1);
+ }
+ if ( !mysql_real_connect(&mysql, "localhost", "root", "", "",
+ 0, mysqld_sock, 0) )
+ MYSQLERROR(mysql);
+
+ /********************************************
+ * Connect to database via mysql-c *
+ ********************************************/
+ mysql_query(&mysql, "CREATE DATABASE TEST_DB_1");
+ if (mysql_query(&mysql, "USE TEST_DB_1") != 0) MYSQLERROR(mysql);
+ create_table(mysql);
Ndb* myNdb= new Ndb( cluster_connection,
"TEST_DB_1" ); // Object representing the database
@@ -230,7 +283,9 @@ int main()
delete myNdb;
delete cluster_connection;
-
+
+ drop_table(mysql);
+
ndb_end(0);
return 0;
}
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_scan/Makefile 2006-09-01 15:14:58 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_scan/Makefile 2006-09-01 15:14:58 +02:00
@@ -10,6 +10,7 @@ TOP_SRCDIR = ../../../..
INCLUDE_DIR = $(TOP_SRCDIR)
LIB_DIR = -L$(TOP_SRCDIR)/storage/ndb/src/.libs \
-L$(TOP_SRCDIR)/libmysql_r/.libs \
+ -L$(TOP_SRCDIR)/zlib/.libs \
-L$(TOP_SRCDIR)/mysys -L$(TOP_SRCDIR)/strings
SYS_LIB =
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_scan/ndbapi_scan.cpp 2006-09-01 15:14:58 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_scan/ndbapi_scan.cpp 2006-09-01 15:14:58 +02:00
@@ -114,9 +114,19 @@ struct Car
};
/**
+ * Function to drop table
+ */
+void drop_table(MYSQL &mysql)
+{
+ if (mysql_query(&mysql, "DROP TABLE GARAGE"))
+ MYSQLERROR(mysql);
+}
+
+
+/**
* Function to create table
*/
-int create_table(MYSQL &mysql)
+void create_table(MYSQL &mysql)
{
while (mysql_query(&mysql,
"CREATE TABLE"
@@ -131,16 +141,14 @@ int create_table(MYSQL &mysql)
MYSQLERROR(mysql);
std::cout << "MySQL Cluster already has example table: GARAGE. "
<< "Dropping it..." << std::endl;
- /**************
- * Drop table *
- **************/
- if (mysql_query(&mysql, "DROP TABLE GARAGE"))
- MYSQLERROR(mysql);
+ /******************
+ * Recreate table *
+ ******************/
+ drop_table(mysql);
+ create_table(mysql);
}
- return 1;
}
-
int populate(Ndb * myNdb)
{
int i;
@@ -721,8 +729,15 @@ int scan_print(Ndb * myNdb)
}
-int main()
+int main(int argc, char** argv)
{
+ if (argc != 3)
+ {
+ std::cout << "Arguments are <socket mysqld> <connect_string cluster>.\n";
+ exit(-1);
+ }
+ char * mysqld_sock = argv[1];
+ const char *connectstring = argv[2];
ndb_init();
MYSQL mysql;
@@ -735,7 +750,7 @@ int main()
exit(-1);
}
if ( !mysql_real_connect(&mysql, "localhost", "root", "", "",
- 3306, "/tmp/mysql.sock", 0) )
+ 0, mysqld_sock, 0) )
MYSQLERROR(mysql);
mysql_query(&mysql, "CREATE DATABASE TEST_DB");
@@ -748,7 +763,7 @@ int main()
* Connect to ndb cluster *
**************************************************************/
- Ndb_cluster_connection cluster_connection;
+ Ndb_cluster_connection cluster_connection(connectstring);
if (cluster_connection.connect(4, 5, 1))
{
std::cout << "Unable to connect to cluster within 30 secs." << std::endl;
@@ -820,6 +835,11 @@ int main()
}
if(scan_print(&myNdb) > 0)
std::cout << "scan_print: Success!" << std::endl << std::endl;
+
+ /**
+ * Drop table
+ */
+ drop_table(mysql);
return 0;
}
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_simple/Makefile 2006-09-01 15:14:58 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_simple/Makefile 2006-09-01 15:14:58 +02:00
@@ -10,6 +10,7 @@ TOP_SRCDIR = ../../../..
INCLUDE_DIR = $(TOP_SRCDIR)/storage/ndb/include
LIB_DIR = -L$(TOP_SRCDIR)/storage/ndb/src/.libs \
-L$(TOP_SRCDIR)/libmysql_r/.libs \
+ -L$(TOP_SRCDIR)/zlib/.libs \
-L$(TOP_SRCDIR)/mysys -L$(TOP_SRCDIR)/strings
SYS_LIB =
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_simple/ndbapi_simple.cpp 2006-09-01 15:14:58 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_simple/ndbapi_simple.cpp 2006-09-01 15:14:58 +02:00
@@ -52,15 +52,22 @@ static void run_application(MYSQL &, Ndb
PRINT_ERROR(error.code,error.message); \
exit(-1); }
-int main()
+int main(int argc, char** argv)
{
+ if (argc != 3)
+ {
+ std::cout << "Arguments are <socket mysqld> <connect_string cluster>.\n";
+ exit(-1);
+ }
// ndb_init must be called first
ndb_init();
// connect to mysql server and cluster and run application
{
+ char * mysqld_sock = argv[1];
+ const char *connectstring = argv[2];
// Object representing the cluster
- Ndb_cluster_connection cluster_connection;
+ Ndb_cluster_connection cluster_connection(connectstring);
// Connect to cluster management server (ndb_mgmd)
if (cluster_connection.connect(4 /* retries */,
@@ -85,7 +92,7 @@ int main()
exit(-1);
}
if ( !mysql_real_connect(&mysql, "localhost", "root", "", "",
- 3306, "/tmp/mysql.sock", 0) )
+ 0, mysqld_sock, 0) )
MYSQLERROR(mysql);
// run the application code
@@ -94,13 +101,11 @@ int main()
ndb_end(0);
- std::cout << "\nTo drop created table use:\n"
- << "echo \"drop table MYTABLENAME\" | mysql TEST_DB_1 -u root\n";
-
return 0;
}
static void create_table(MYSQL &);
+static void drop_table(MYSQL &);
static void do_insert(Ndb &);
static void do_update(Ndb &);
static void do_delete(Ndb &);
@@ -130,6 +135,8 @@ static void run_application(MYSQL &mysql
do_update(myNdb);
do_delete(myNdb);
do_read(myNdb);
+ drop_table(mysql);
+ mysql_query(&mysql, "DROP DATABASE TEST_DB_1");
}
/*********************************************************
@@ -143,6 +150,17 @@ static void create_table(MYSQL &mysql)
" (ATTR1 INT UNSIGNED NOT NULL PRIMARY KEY,"
" ATTR2 INT UNSIGNED NOT NULL)"
" ENGINE=NDB"))
+ MYSQLERROR(mysql);
+}
+
+/***********************************
+ * Drop a table named MYTABLENAME
+ ***********************************/
+static void drop_table(MYSQL &mysql)
+{
+ if (mysql_query(&mysql,
+ "DROP TABLE"
+ " MYTABLENAME"))
MYSQLERROR(mysql);
}
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_simple_index/Makefile 2006-09-01 15:14:58 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_simple_index/Makefile 2006-09-01 15:14:58 +02:00
@@ -10,6 +10,7 @@ TOP_SRCDIR = ../../../..
INCLUDE_DIR = $(TOP_SRCDIR)
LIB_DIR = -L$(TOP_SRCDIR)/storage/ndb/src/.libs \
-L$(TOP_SRCDIR)/libmysql_r/.libs \
+ -L$(TOP_SRCDIR)/zlib/.libs \
-L$(TOP_SRCDIR)/mysys -L$(TOP_SRCDIR)/strings
SYS_LIB =
--- 1.1/storage/ndb/ndbapi-examples/ndbapi_simple_index/ndbapi_simple_index.cpp 2006-09-01 15:14:58 +02:00
+++ 1.2/storage/ndb/ndbapi-examples/ndbapi_simple_index/ndbapi_simple_index.cpp 2006-09-01 15:14:58 +02:00
@@ -49,8 +49,15 @@
PRINT_ERROR(error.code,error.message); \
exit(-1); }
-int main()
+int main(int argc, char** argv)
{
+ if (argc != 3)
+ {
+ std::cout << "Arguments are <socket mysqld> <connect_string cluster>.\n";
+ exit(-1);
+ }
+ char * mysqld_sock = argv[1];
+ const char *connectstring = argv[2];
ndb_init();
MYSQL mysql;
@@ -63,7 +70,7 @@ int main()
exit(-1);
}
if ( !mysql_real_connect(&mysql, "localhost", "root", "", "",
- 3306, "/tmp/mysql.sock", 0) )
+ 0, mysqld_sock, 0) )
MYSQLERROR(mysql);
mysql_query(&mysql, "CREATE DATABASE TEST_DB_1");
@@ -85,7 +92,7 @@ int main()
**************************************************************/
Ndb_cluster_connection *cluster_connection=
- new Ndb_cluster_connection(); // Object representing the cluster
+ new Ndb_cluster_connection(connectstring); // Object representing the cluster
if (cluster_connection->connect(5,3,1))
{
@@ -110,7 +117,7 @@ int main()
const NdbDictionary::Table *myTable= myDict->getTable("MYTABLENAME");
if (myTable == NULL)
APIERROR(myDict->getNdbError());
- const NdbDictionary::Index *myIndex= myDict->getIndex("MYINDEXNAME","MYTABLENAME");
+ const NdbDictionary::Index *myIndex= myDict->getIndex("MYINDEXNAME$unique","MYTABLENAME");
if (myIndex == NULL)
APIERROR(myDict->getNdbError());
| Thread |
|---|
| • bk commit into 5.1 tree (mskold:1.2290) | Martin Skold | 1 Sep |