Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
abb926c3
Commit
abb926c3
authored
Jan 04, 2005
by
tomas@poseidon.ndb.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updated all examples to use mysql c-api create table
parent
c1cfd9b4
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
286 additions
and
340 deletions
+286
-340
ndb/examples/ndbapi_async_example/Makefile
ndb/examples/ndbapi_async_example/Makefile
+12
-23
ndb/examples/ndbapi_async_example/ndbapi_async.cpp
ndb/examples/ndbapi_async_example/ndbapi_async.cpp
+71
-89
ndb/examples/ndbapi_example1/ndbapi_example1.cpp
ndb/examples/ndbapi_example1/ndbapi_example1.cpp
+3
-3
ndb/examples/ndbapi_example4/Makefile
ndb/examples/ndbapi_example4/Makefile
+10
-8
ndb/examples/ndbapi_example4/ndbapi_example4.cpp
ndb/examples/ndbapi_example4/ndbapi_example4.cpp
+98
-128
ndb/examples/ndbapi_scan_example/Makefile
ndb/examples/ndbapi_scan_example/Makefile
+6
-6
ndb/examples/ndbapi_scan_example/ndbapi_scan.cpp
ndb/examples/ndbapi_scan_example/ndbapi_scan.cpp
+86
-83
No files found.
ndb/examples/ndbapi_async_example/Makefile
View file @
abb926c3
-include
.defs.mk
#NDB_OS = OS_YOU_ARE_RUNNING_ON
#NDB_OS = LINUX
#You need to set the NDB_OS variable here (LINUX, SOLARIS, MACOSX)
TARGET
=
ndbapi_async
TARGET
=
ndbapi_async
SRCS
=
ndbapi_async.cpp
SRCS
=
$(TARGET)
.cpp
OBJS
=
ndbapi_async.o
OBJS
=
$(TARGET)
.o
CC
=
g++
CXX
=
g++
CFLAGS
=
-c
-Wall
-fno-rtti
-D
$(NDB_OS)
CFLAGS
=
-g
-c
-Wall
-fno-rtti
-fno-exceptions
CXXFLAGS
=
-g
DEBUG
=
DEBUG
=
LFLAGS
=
-Wall
LFLAGS
=
-Wall
INCLUDE_DIR
=
../../include
TOP_SRCDIR
=
../../..
LIB_DIR
=
../../lib
INCLUDE_DIR
=
$(TOP_SRCDIR)
ifeq
($(NDB_OS), SOLARIS)
LIB_DIR
=
-L
$(TOP_SRCDIR)
/ndb/src/.libs
\
# Here is the definition of system libraries necessary for Solaris 7
-L
$(TOP_SRCDIR)
/libmysql_r/.libs
\
SYS_LIB
=
-lpthread
-lsocket
-lnsl
-lrt
-L
$(TOP_SRCDIR)
/mysys
endif
ifeq
($(NDB_OS), LINUX)
# Here is the definition of system libraries necessary for Linux 2.4
SYS_LIB
=
-lpthread
endif
ifeq
($(NDB_OS), MACOSX)
# Here is the definition of system libraries necessary for Mac OS X
SYS_LIB
=
SYS_LIB
=
endif
$(TARGET)
:
$(OBJS)
$(TARGET)
:
$(OBJS)
$(C
C)
$(LFLAGS)
-L
$(LIB_DIR)
-lNDB_API
$(OBJS)
$(SYS_LIB)
-o
$(TARGET)
$(C
XX)
$(CXXFLAGS)
$(LFLAGS)
$(LIB_DIR)
$(OBJS)
-lndbclient
-lmysqlclient_r
-lmysys
-lz
$(SYS_LIB)
-o
$(TARGET)
$(TARGET).o
:
$(SRCS)
$(TARGET).o
:
$(SRCS)
$(C
C)
$(CFLAGS)
-I
$(INCLUDE_DIR)
-I
$(INCLUDE_DIR)
/ndbapi
$(SRCS)
$(C
XX)
$(CFLAGS)
-I
$(INCLUDE_DIR)
/include
-I
$(INCLUDE_DIR)
/extra
-I
$(INCLUDE_DIR)
/ndb/include
-I
$(INCLUDE_DIR)
/ndb/include
/ndbapi
$(SRCS)
clean
:
clean
:
rm
-f
*
.o
$(TARGET)
rm
-f
*
.o
$(TARGET)
ndb/examples/ndbapi_async_example/ndbapi_async.cpp
View file @
abb926c3
...
@@ -24,9 +24,12 @@
...
@@ -24,9 +24,12 @@
*
*
* Classes and methods in NDBAPI used in this example:
* Classes and methods in NDBAPI used in this example:
*
*
* Ndb_cluster_connection
* connect()
* wait_until_ready()
*
* Ndb
* Ndb
* init()
* init()
* waitUntilRead()
* getDictionary()
* getDictionary()
* startTransaction()
* startTransaction()
* closeTransaction()
* closeTransaction()
...
@@ -38,23 +41,6 @@
...
@@ -38,23 +41,6 @@
* executeAsynchPrepare()
* executeAsynchPrepare()
* getNdbError()
* getNdbError()
*
*
* NdbDictionary::Dictionary
* getTable()
* dropTable()
* createTable()
* getNdbError()
*
* NdbDictionary::Column
* setName()
* setType()
* setLength()
* setPrimaryKey()
* setNullable()
*
* NdbDictionary::Table
* setName()
* addColumn()
*
* NdbOperation
* NdbOperation
* insertTuple()
* insertTuple()
* equal()
* equal()
...
@@ -63,10 +49,10 @@
...
@@ -63,10 +49,10 @@
*/
*/
#include <
ndb_globa
l.h>
#include <
mysq
l.h>
#include <mysqld_error.h>
#include <NdbApi.hpp>
#include <NdbApi.hpp>
#include <NdbScanFilter.hpp>
#include <iostream> // Used for cout
#include <iostream> // Used for cout
/**
/**
...
@@ -85,11 +71,16 @@ milliSleep(int milliseconds){
...
@@ -85,11 +71,16 @@ milliSleep(int milliseconds){
/**
/**
* error printout macro
* error printout macro
*/
*/
#define APIERROR(error) \
#define PRINT_ERROR(code,msg) \
{ std::cout << "Error in " << __FILE__ << ", line:" << __LINE__ << ", code:" \
std::cout << "Error in " << __FILE__ << ", line: " << __LINE__ \
<< error.code << ", msg: " << error.message << "." << std::endl; \
<< ", code: " << code \
exit(-1); }
<< ", 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); }
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
#ifndef DOXYGEN_SHOULD_SKIP_INTERNAL
/**
/**
...
@@ -207,61 +198,26 @@ callback(int result, NdbConnection* trans, void* aObject)
...
@@ -207,61 +198,26 @@ callback(int result, NdbConnection* trans, void* aObject)
/**
/**
* Create table "GARAGE"
* Create table "GARAGE"
*/
*/
int
create_table
(
Ndb
*
myNdb
)
int
create_table
(
MYSQL
&
mysql
)
{
{
NdbDictionary
::
Table
myTable
;
while
(
mysql_query
(
&
mysql
,
NdbDictionary
::
Column
myColumn
;
"CREATE TABLE"
" GARAGE"
NdbDictionary
::
Dictionary
*
myDict
=
myNdb
->
getDictionary
();
" (REG_NO INT UNSIGNED NOT NULL,"
" BRAND CHAR(20) NOT NULL,"
/*********************************************************
" COLOR CHAR(20) NOT NULL,"
* Create a table named GARAGE if it does not exist *
" PRIMARY KEY USING HASH (REG_NO))"
*********************************************************/
" ENGINE=NDB"
))
if
(
myDict
->
getTable
(
"GARAGE"
)
!=
NULL
)
{
{
std
::
cout
<<
"NDB already has example table: GARAGE. "
if
(
mysql_errno
(
&
mysql
)
!=
ER_TABLE_EXISTS_ERROR
)
MYSQLERROR
(
mysql
);
std
::
cout
<<
"MySQL Cluster already has example table: GARAGE. "
<<
"Dropping it..."
<<
std
::
endl
;
<<
"Dropping it..."
<<
std
::
endl
;
if
(
myDict
->
dropTable
(
"GARAGE"
)
==
-
1
)
/**************
{
* Drop table *
std
::
cout
<<
"Failed to drop: GARAGE."
<<
std
::
endl
;
**************/
exit
(
1
);
if
(
mysql_query
(
&
mysql
,
"DROP TABLE GARAGE"
))
}
MYSQLERROR
(
mysql
);
}
myTable
.
setName
(
"GARAGE"
);
/**
* Column REG_NO
*/
myColumn
.
setName
(
"REG_NO"
);
myColumn
.
setType
(
NdbDictionary
::
Column
::
Unsigned
);
myColumn
.
setLength
(
1
);
myColumn
.
setPrimaryKey
(
true
);
myColumn
.
setNullable
(
false
);
myTable
.
addColumn
(
myColumn
);
/**
* Column BRAND
*/
myColumn
.
setName
(
"BRAND"
);
myColumn
.
setType
(
NdbDictionary
::
Column
::
Char
);
myColumn
.
setLength
(
20
);
myColumn
.
setPrimaryKey
(
false
);
myColumn
.
setNullable
(
false
);
myTable
.
addColumn
(
myColumn
);
/**
* Column COLOR
*/
myColumn
.
setName
(
"COLOR"
);
myColumn
.
setType
(
NdbDictionary
::
Column
::
Char
);
myColumn
.
setLength
(
20
);
myColumn
.
setPrimaryKey
(
false
);
myColumn
.
setNullable
(
false
);
myTable
.
addColumn
(
myColumn
);
if
(
myDict
->
createTable
(
myTable
)
==
-
1
)
{
APIERROR
(
myDict
->
getNdbError
());
}
}
return
1
;
return
1
;
}
}
...
@@ -455,22 +411,48 @@ int populate(Ndb * myNdb, int data, async_callback_t * cbData)
...
@@ -455,22 +411,48 @@ int populate(Ndb * myNdb, int data, async_callback_t * cbData)
int
main
()
int
main
()
{
{
ndb_init
();
ndb_init
();
Ndb
*
myNdb
=
new
Ndb
(
"TEST_DB"
);
// Object representing the database
MYSQL
mysql
;
/*******************************************
/**************************************************************
* Initialize NDB and wait until its ready *
* Connect to mysql server and create table *
*******************************************/
**************************************************************/
if
(
myNdb
->
init
(
1024
)
==
-
1
)
{
// Set max 1024 parallel transactions
{
APIERROR
(
myNdb
->
getNdbError
());
if
(
!
mysql_init
(
&
mysql
)
)
{
std
::
cout
<<
"mysql_init failed
\n
"
;
exit
(
-
1
);
}
if
(
!
mysql_real_connect
(
&
mysql
,
"localhost"
,
"root"
,
""
,
""
,
3306
,
"/tmp/mysql.sock"
,
0
)
)
MYSQLERROR
(
mysql
);
mysql_query
(
&
mysql
,
"CREATE DATABASE TEST_DB"
);
if
(
mysql_query
(
&
mysql
,
"USE TEST_DB"
)
!=
0
)
MYSQLERROR
(
mysql
);
create_table
(
mysql
);
}
}
if
(
myNdb
->
waitUntilReady
(
30
)
!=
0
)
{
/**************************************************************
std
::
cout
<<
"NDB was not ready within 30 secs."
<<
std
::
endl
;
* Connect to ndb cluster *
**************************************************************/
Ndb_cluster_connection
cluster_connection
;
if
(
cluster_connection
.
connect
(
4
,
5
,
1
))
{
std
::
cout
<<
"Unable to connect to cluster within 30 secs."
<<
std
::
endl
;
exit
(
-
1
);
}
// Optionally connect and wait for the storage nodes (ndbd's)
if
(
cluster_connection
.
wait_until_ready
(
30
,
0
)
<
0
)
{
std
::
cout
<<
"Cluster was not ready within 30 secs.
\n
"
;
exit
(
-
1
);
exit
(
-
1
);
}
}
create_table
(
myNdb
);
Ndb
*
myNdb
=
new
Ndb
(
&
cluster_connection
,
"TEST_DB"
);
// Object representing the database
if
(
myNdb
->
init
(
1024
)
==
-
1
)
{
// Set max 1024 parallel transactions
APIERROR
(
myNdb
->
getNdbError
());
}
/**
/**
* Initialise transaction array
* Initialise transaction array
*/
*/
...
...
ndb/examples/ndbapi_example1/ndbapi_example1.cpp
View file @
abb926c3
...
@@ -141,8 +141,8 @@ static void create_table(MYSQL &mysql)
...
@@ -141,8 +141,8 @@ static void create_table(MYSQL &mysql)
if
(
mysql_query
(
&
mysql
,
if
(
mysql_query
(
&
mysql
,
"CREATE TABLE"
"CREATE TABLE"
" MYTABLENAME"
" MYTABLENAME"
" (ATTR1 INT UNSIGNED PRIMARY KEY,"
" (ATTR1 INT UNSIGNED
NOT NULL
PRIMARY KEY,"
" ATTR2 INT UNSIGNED)"
" ATTR2 INT UNSIGNED
NOT NULL
)"
" ENGINE=NDB"
))
" ENGINE=NDB"
))
MYSQLERROR
(
mysql
);
MYSQLERROR
(
mysql
);
}
}
...
@@ -234,7 +234,7 @@ static void do_read(Ndb &myNdb)
...
@@ -234,7 +234,7 @@ static void do_read(Ndb &myNdb)
NdbOperation
*
myOperation
=
myTransaction
->
getNdbOperation
(
"MYTABLENAME"
);
NdbOperation
*
myOperation
=
myTransaction
->
getNdbOperation
(
"MYTABLENAME"
);
if
(
myOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
if
(
myOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
myOperation
->
readTuple
();
myOperation
->
readTuple
(
NdbOperation
::
LM_Read
);
myOperation
->
equal
(
"ATTR1"
,
i
);
myOperation
->
equal
(
"ATTR1"
,
i
);
NdbRecAttr
*
myRecAttr
=
myOperation
->
getValue
(
"ATTR2"
,
NULL
);
NdbRecAttr
*
myRecAttr
=
myOperation
->
getValue
(
"ATTR2"
,
NULL
);
...
...
ndb/examples/ndbapi_example4/Makefile
View file @
abb926c3
TARGET
=
ndbapi_example4
TARGET
=
ndbapi_example4
SRCS
=
ndbapi_example4
.cpp
SRCS
=
$(TARGET)
.cpp
OBJS
=
ndbapi_example4
.o
OBJS
=
$(TARGET)
.o
CXX
=
g++
CXX
=
g++
CFLAGS
=
-c
-Wall
-fno-rtti
-fno-exceptions
CFLAGS
=
-c
-Wall
-fno-rtti
-fno-exceptions
CXXFLAGS
=
DEBUG
=
DEBUG
=
LFLAGS
=
-Wall
LFLAGS
=
-Wall
INCLUDE_DIR
=
../../include
TOP_SRCDIR
=
../../..
LIB_DIR
=
-L
../../src/.libs
\
INCLUDE_DIR
=
$(TOP_SRCDIR)
-L
../../../libmysql_r/.libs
\
LIB_DIR
=
-L
$(TOP_SRCDIR)
/ndb/src/.libs
\
-L
../../../mysys
-L
$(TOP_SRCDIR)
/libmysql_r/.libs
\
-L
$(TOP_SRCDIR)
/mysys
SYS_LIB
=
SYS_LIB
=
$(TARGET)
:
$(OBJS)
$(TARGET)
:
$(OBJS)
$(CXX)
$(LFLAGS)
$(LIB_DIR)
$(OBJS)
-lndbclient
-lmysqlclient_r
-lmysys
-lz
$(SYS_LIB)
-o
$(TARGET)
$(CXX)
$(
CXXFLAGS)
$(
LFLAGS)
$(LIB_DIR)
$(OBJS)
-lndbclient
-lmysqlclient_r
-lmysys
-lz
$(SYS_LIB)
-o
$(TARGET)
$(TARGET).o
:
$(SRCS)
$(TARGET).o
:
$(SRCS)
$(CXX)
$(CFLAGS)
-I
$(INCLUDE_DIR)
-I
$(INCLUDE_DIR)
/ndbapi
$(SRCS)
$(CXX)
$(CFLAGS)
-I
$(INCLUDE_DIR)
/include
-I
$(INCLUDE_DIR)
/ndb/include
-I
$(INCLUDE_DIR)
/ndb/include
/ndbapi
$(SRCS)
clean
:
clean
:
rm
-f
*
.o
$(TARGET)
rm
-f
*
.o
$(TARGET)
ndb/examples/ndbapi_example4/ndbapi_example4.cpp
View file @
abb926c3
...
@@ -31,117 +31,89 @@
...
@@ -31,117 +31,89 @@
// 8 18
// 8 18
// 9 9
// 9 9
#include <mysql.h>
#include <NdbApi.hpp>
#include <NdbApi.hpp>
// Used for cout
// Used for cout
#include <stdio.h>
#include <stdio.h>
#include <iostream>
#include <iostream>
#define APIERROR(error) \
#define PRINT_ERROR(code,msg) \
{ std::cout << "Error in " << __FILE__ << ", line:" << __LINE__ << ", code:" \
std::cout << "Error in " << __FILE__ << ", line: " << __LINE__ \
<< error.code << ", msg: " << error.message << "." << std::endl; \
<< ", code: " << code \
exit(-1); }
<< ", 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
main
()
{
{
ndb_init
();
ndb_init
();
MYSQL
mysql
;
/**************************************************************
* Connect to mysql server and create table *
**************************************************************/
{
if
(
!
mysql_init
(
&
mysql
)
)
{
std
::
cout
<<
"mysql_init failed
\n
"
;
exit
(
-
1
);
}
if
(
!
mysql_real_connect
(
&
mysql
,
"localhost"
,
"root"
,
""
,
""
,
3306
,
"/tmp/mysql.sock"
,
0
)
)
MYSQLERROR
(
mysql
);
mysql_query
(
&
mysql
,
"CREATE DATABASE TEST_DB_1"
);
if
(
mysql_query
(
&
mysql
,
"USE TEST_DB_1"
)
!=
0
)
MYSQLERROR
(
mysql
);
if
(
mysql_query
(
&
mysql
,
"CREATE TABLE"
" MYTABLENAME"
" (ATTR1 INT UNSIGNED,"
" ATTR2 INT UNSIGNED NOT NULL,"
" PRIMARY KEY USING HASH (ATTR1),"
" UNIQUE MYINDEXNAME USING HASH (ATTR2))"
" ENGINE=NDB"
))
MYSQLERROR
(
mysql
);
}
/**************************************************************
* Connect to ndb cluster *
**************************************************************/
Ndb_cluster_connection
*
cluster_connection
=
Ndb_cluster_connection
*
cluster_connection
=
new
Ndb_cluster_connection
();
// Object representing the cluster
new
Ndb_cluster_connection
();
// Object representing the cluster
int
r
=
cluster_connection
->
connect
(
5
/* retries */
,
if
(
cluster_connection
->
connect
(
5
,
3
,
1
))
3
/* delay between retries */
,
1
/* verbose */
);
if
(
r
>
0
)
{
{
std
::
cout
std
::
cout
<<
"Connect to cluster management server failed.
\n
"
;
<<
"Cluster connect failed, possibly resolved with more retries.
\n
"
;
exit
(
-
1
);
exit
(
-
1
);
}
}
else
if
(
r
<
0
)
{
std
::
cout
<<
"Cluster connect failed.
\n
"
;
exit
(
-
1
);
}
if
(
cluster_connection
->
wait_until_ready
(
30
,
30
))
if
(
cluster_connection
->
wait_until_ready
(
30
,
30
))
{
{
std
::
cout
<<
"Cluster was not ready within 30 secs.
"
<<
std
::
endl
;
std
::
cout
<<
"Cluster was not ready within 30 secs.
\n
"
;
exit
(
-
1
);
exit
(
-
1
);
}
}
Ndb
*
myNdb
=
new
Ndb
(
cluster_connection
,
Ndb
*
myNdb
=
new
Ndb
(
cluster_connection
,
"TEST_DB_1"
);
// Object representing the database
"TEST_DB_1"
);
// Object representing the database
NdbDictionary
::
Table
myTable
;
NdbDictionary
::
Column
myColumn
;
NdbDictionary
::
Index
myIndex
;
NdbTransaction
*
myTransaction
;
// For transactions
NdbOperation
*
myOperation
;
// For primary key operations
NdbIndexOperation
*
myIndexOperation
;
// For index operations
NdbRecAttr
*
myRecAttr
;
// Result of reading attribute value
if
(
myNdb
->
init
()
==
-
1
)
{
if
(
myNdb
->
init
()
==
-
1
)
{
APIERROR
(
myNdb
->
getNdbError
());
APIERROR
(
myNdb
->
getNdbError
());
exit
(
-
1
);
exit
(
-
1
);
}
}
/*********************************************************
* Create a table named MYTABLENAME if it does not exist *
*********************************************************/
NdbDictionary
::
Dictionary
*
myDict
=
myNdb
->
getDictionary
();
if
(
myDict
->
getTable
(
"MYTABLENAME"
)
!=
NULL
)
{
std
::
cout
<<
"NDB already has example table: MYTABLENAME."
<<
std
::
endl
;
exit
(
-
1
);
}
myTable
.
setName
(
"MYTABLENAME"
);
myColumn
.
setName
(
"ATTR1"
);
myColumn
.
setType
(
NdbDictionary
::
Column
::
Unsigned
);
myColumn
.
setLength
(
1
);
myColumn
.
setPrimaryKey
(
true
);
myColumn
.
setNullable
(
false
);
myTable
.
addColumn
(
myColumn
);
myColumn
.
setName
(
"ATTR2"
);
myColumn
.
setType
(
NdbDictionary
::
Column
::
Unsigned
);
myColumn
.
setLength
(
1
);
myColumn
.
setPrimaryKey
(
false
);
myColumn
.
setNullable
(
false
);
myTable
.
addColumn
(
myColumn
);
if
(
myDict
->
createTable
(
myTable
)
==
-
1
)
APIERROR
(
myDict
->
getNdbError
());
/**********************************************************
* Create an index named MYINDEXNAME if it does not exist *
**********************************************************/
if
(
myDict
->
getIndex
(
"MYINDEXNAME"
,
"MYTABLENAME"
)
!=
NULL
)
{
std
::
cout
<<
"NDB already has example index: MYINDEXNAME."
<<
std
::
endl
;
exit
(
-
1
);
}
myIndex
.
setName
(
"MYINDEXNAME"
);
myIndex
.
setTable
(
"MYTABLENAME"
);
myIndex
.
setType
(
NdbDictionary
::
Index
::
UniqueHashIndex
);
const
char
*
attr_arr
[]
=
{
"ATTR2"
};
myIndex
.
addIndexColumns
(
1
,
attr_arr
);
if
(
myDict
->
createIndex
(
myIndex
)
==
-
1
)
APIERROR
(
myDict
->
getNdbError
());
/**************************************************************************
/**************************************************************************
* Using 5 transactions, insert 10 tuples in table: (0,0),(1,1),...,(9,9) *
* Using 5 transactions, insert 10 tuples in table: (0,0),(1,1),...,(9,9) *
**************************************************************************/
**************************************************************************/
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
for
(
int
i
=
0
;
i
<
5
;
i
++
)
{
myTransaction
=
myNdb
->
startTransaction
();
NdbTransaction
*
myTransaction
=
myNdb
->
startTransaction
();
if
(
myTransaction
==
NULL
)
APIERROR
(
myNdb
->
getNdbError
());
if
(
myTransaction
==
NULL
)
APIERROR
(
myNdb
->
getNdbError
());
myOperation
=
myTransaction
->
getNdbOperation
(
"MYTABLENAME"
);
NdbOperation
*
myOperation
=
myTransaction
->
getNdbOperation
(
"MYTABLENAME"
);
if
(
myOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
if
(
myOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
myOperation
->
insertTuple
();
myOperation
->
insertTuple
();
...
@@ -167,33 +139,34 @@ int main()
...
@@ -167,33 +139,34 @@ int main()
std
::
cout
<<
"ATTR1 ATTR2"
<<
std
::
endl
;
std
::
cout
<<
"ATTR1 ATTR2"
<<
std
::
endl
;
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
myTransaction
=
myNdb
->
startTransaction
();
NdbTransaction
*
myTransaction
=
myNdb
->
startTransaction
();
if
(
myTransaction
==
NULL
)
APIERROR
(
myNdb
->
getNdbError
());
if
(
myTransaction
==
NULL
)
APIERROR
(
myNdb
->
getNdbError
());
myIndexOperation
=
myTransaction
->
getNdbIndexOperation
(
"MYINDEXNAME"
,
NdbIndexOperation
*
myIndexOperation
=
"MYTABLENAME"
);
myTransaction
->
getNdbIndexOperation
(
"MYINDEXNAME$unique"
,
"MYTABLENAME"
);
if
(
myIndexOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
if
(
myIndexOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
myIndexOperation
->
readTuple
();
myIndexOperation
->
readTuple
(
NdbOperation
::
LM_Read
);
myIndexOperation
->
equal
(
"ATTR2"
,
i
);
myIndexOperation
->
equal
(
"ATTR2"
,
i
);
myRecAttr
=
myIndexOperation
->
getValue
(
"ATTR1"
,
NULL
);
NdbRecAttr
*
myRecAttr
=
myIndexOperation
->
getValue
(
"ATTR1"
,
NULL
);
if
(
myRecAttr
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
if
(
myRecAttr
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
if
(
myTransaction
->
execute
(
Commit
)
!=
-
1
)
if
(
myTransaction
->
execute
(
Commit
)
!=
-
1
)
printf
(
" %2d %2d
\n
"
,
myRecAttr
->
u_32_value
(),
i
);
printf
(
" %2d %2d
\n
"
,
myRecAttr
->
u_32_value
(),
i
);
}
myNdb
->
closeTransaction
(
myTransaction
);
myNdb
->
closeTransaction
(
myTransaction
);
}
/*****************************************************************
/*****************************************************************
* Update the second attribute in half of the tuples (adding 10) *
* Update the second attribute in half of the tuples (adding 10) *
*****************************************************************/
*****************************************************************/
for
(
int
i
=
0
;
i
<
10
;
i
+=
2
)
{
for
(
int
i
=
0
;
i
<
10
;
i
+=
2
)
{
myTransaction
=
myNdb
->
startTransaction
();
NdbTransaction
*
myTransaction
=
myNdb
->
startTransaction
();
if
(
myTransaction
==
NULL
)
APIERROR
(
myNdb
->
getNdbError
());
if
(
myTransaction
==
NULL
)
APIERROR
(
myNdb
->
getNdbError
());
myIndexOperation
=
myTransaction
->
getNdbIndexOperation
(
"MYINDEXNAME"
,
NdbIndexOperation
*
myIndexOperation
=
"MYTABLENAME"
);
myTransaction
->
getNdbIndexOperation
(
"MYINDEXNAME$unique"
,
"MYTABLENAME"
);
if
(
myIndexOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
if
(
myIndexOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
myIndexOperation
->
updateTuple
();
myIndexOperation
->
updateTuple
();
...
@@ -209,64 +182,61 @@ int main()
...
@@ -209,64 +182,61 @@ int main()
/*************************************************
/*************************************************
* Delete one tuple (the one with primary key 3) *
* Delete one tuple (the one with primary key 3) *
*************************************************/
*************************************************/
myTransaction
=
myNdb
->
startTransaction
();
{
if
(
myTransaction
==
NULL
)
APIERROR
(
myNdb
->
getNdbError
());
NdbTransaction
*
myTransaction
=
myNdb
->
startTransaction
();
if
(
myTransaction
==
NULL
)
APIERROR
(
myNdb
->
getNdbError
());
myIndexOperation
=
myTransaction
->
getNdbIndexOperation
(
"MYINDEXNAME"
,
"MYTABLENAME"
);
if
(
myIndexOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
myIndexOperation
->
deleteTuple
();
NdbIndexOperation
*
myIndexOperation
=
myIndexOperation
->
equal
(
"ATTR2"
,
3
);
myTransaction
->
getNdbIndexOperation
(
"MYINDEXNAME$unique"
,
"MYTABLENAME"
);
if
(
myIndexOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
if
(
myTransaction
->
execute
(
Commit
)
==
-
1
)
myIndexOperation
->
deleteTuple
();
APIERROR
(
myTransaction
->
getNdbError
()
);
myIndexOperation
->
equal
(
"ATTR2"
,
3
);
myNdb
->
closeTransaction
(
myTransaction
);
if
(
myTransaction
->
execute
(
Commit
)
==
-
1
)
APIERROR
(
myTransaction
->
getNdbError
());
myNdb
->
closeTransaction
(
myTransaction
);
}
/*****************************
/*****************************
* Read and print all tuples *
* Read and print all tuples *
*****************************/
*****************************/
std
::
cout
<<
"ATTR1 ATTR2"
<<
std
::
endl
;
{
std
::
cout
<<
"ATTR1 ATTR2"
<<
std
::
endl
;
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
myTransaction
=
myNdb
->
startTransaction
();
NdbTransaction
*
myTransaction
=
myNdb
->
startTransaction
();
if
(
myTransaction
==
NULL
)
APIERROR
(
myNdb
->
getNdbError
());
if
(
myTransaction
==
NULL
)
APIERROR
(
myNdb
->
getNdbError
());
myOperation
=
myTransaction
->
getNdbOperation
(
"MYTABLENAME"
);
NdbOperation
*
myOperation
=
myTransaction
->
getNdbOperation
(
"MYTABLENAME"
);
if
(
myOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
if
(
myOperation
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
myOperation
->
readTuple
();
myOperation
->
readTuple
(
NdbOperation
::
LM_Read
);
myOperation
->
equal
(
"ATTR1"
,
i
);
myOperation
->
equal
(
"ATTR1"
,
i
);
myRecAttr
=
myOperation
->
getValue
(
"ATTR2"
,
NULL
);
NdbRecAttr
*
myRecAttr
=
myOperation
->
getValue
(
"ATTR2"
,
NULL
);
if
(
myRecAttr
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
if
(
myRecAttr
==
NULL
)
APIERROR
(
myTransaction
->
getNdbError
());
if
(
myTransaction
->
execute
(
Commit
)
==
-
1
)
if
(
myTransaction
->
execute
(
Commit
)
==
-
1
)
if
(
i
==
3
)
{
if
(
i
==
3
)
{
std
::
cout
<<
"Detected that deleted tuple doesn't exist!"
<<
std
::
endl
;
std
::
cout
<<
"Detected that deleted tuple doesn't exist!
\n
"
;
}
else
{
}
else
{
APIERROR
(
myTransaction
->
getNdbError
());
APIERROR
(
myTransaction
->
getNdbError
());
}
if
(
i
!=
3
)
{
printf
(
" %2d %2d
\n
"
,
i
,
myRecAttr
->
u_32_value
());
}
}
myNdb
->
closeTransaction
(
myTransaction
);
if
(
i
!=
3
)
{
printf
(
" %2d %2d
\n
"
,
i
,
myRecAttr
->
u_32_value
());
}
}
myNdb
->
closeTransaction
(
myTransaction
);
}
}
/**************
* Drop index *
**************/
if
(
myDict
->
dropIndex
(
"MYINDEXNAME"
,
"MYTABLENAME"
)
==
-
1
)
APIERROR
(
myDict
->
getNdbError
());
/**************
/**************
* Drop table *
* Drop table *
**************/
**************/
if
(
my
Dict
->
dropTable
(
"MYTABLENAME"
)
==
-
1
)
if
(
my
sql_query
(
&
mysql
,
"DROP TABLE MYTABLENAME"
))
APIERROR
(
myDict
->
getNdbError
()
);
MYSQLERROR
(
mysql
);
delete
myNdb
;
delete
myNdb
;
delete
cluster_connection
;
delete
cluster_connection
;
...
...
ndb/examples/ndbapi_scan_example/Makefile
View file @
abb926c3
TARGET
=
ndbapi_scan
TARGET
=
ndbapi_scan
SRCS
=
ndbapi_scan
.cpp
SRCS
=
$(TARGET)
.cpp
OBJS
=
ndbapi_scan
.o
OBJS
=
$(TARGET)
.o
CXX
=
g++
CXX
=
g++
CFLAGS
=
-c
-Wall
-fno-rtti
-fno-exceptions
CFLAGS
=
-
g
-
c
-Wall
-fno-rtti
-fno-exceptions
CXXFLAGS
=
CXXFLAGS
=
-g
DEBUG
=
DEBUG
=
LFLAGS
=
-Wall
LFLAGS
=
-Wall
TOP_SRCDIR
=
../../..
TOP_SRCDIR
=
../../..
INCLUDE_DIR
=
$(TOP_SRCDIR)
/ndb/include
INCLUDE_DIR
=
$(TOP_SRCDIR)
LIB_DIR
=
-L
$(TOP_SRCDIR)
/ndb/src/.libs
\
LIB_DIR
=
-L
$(TOP_SRCDIR)
/ndb/src/.libs
\
-L
$(TOP_SRCDIR)
/libmysql_r/.libs
\
-L
$(TOP_SRCDIR)
/libmysql_r/.libs
\
-L
$(TOP_SRCDIR)
/mysys
-L
$(TOP_SRCDIR)
/mysys
...
@@ -17,7 +17,7 @@ $(TARGET): $(OBJS)
...
@@ -17,7 +17,7 @@ $(TARGET): $(OBJS)
$(CXX)
$(CXXFLAGS)
$(LFLAGS)
$(LIB_DIR)
$(OBJS)
-lndbclient
-lmysqlclient_r
-lmysys
-lz
$(SYS_LIB)
-o
$(TARGET)
$(CXX)
$(CXXFLAGS)
$(LFLAGS)
$(LIB_DIR)
$(OBJS)
-lndbclient
-lmysqlclient_r
-lmysys
-lz
$(SYS_LIB)
-o
$(TARGET)
$(TARGET).o
:
$(SRCS)
$(TARGET).o
:
$(SRCS)
$(CXX)
$(CFLAGS)
-I
$(INCLUDE_DIR)
-I
$(INCLUDE_DIR)
/ndbapi
$(SRCS)
$(CXX)
$(CFLAGS)
-I
$(INCLUDE_DIR)
/include
-I
$(INCLUDE_DIR)
/extra
-I
$(INCLUDE_DIR)
/ndb/include
-I
$(INCLUDE_DIR)
/ndb/include
/ndbapi
$(SRCS)
clean
:
clean
:
rm
-f
*
.o
$(TARGET)
rm
-f
*
.o
$(TARGET)
ndb/examples/ndbapi_scan_example/ndbapi_scan.cpp
View file @
abb926c3
...
@@ -38,8 +38,6 @@
...
@@ -38,8 +38,6 @@
* getNdbScanOperation()
* getNdbScanOperation()
* execute()
* execute()
*
*
* NdbResultSet
*
* NdbScanOperation
* NdbScanOperation
* getValue()
* getValue()
* readTuples()
* readTuples()
...
@@ -47,21 +45,14 @@
...
@@ -47,21 +45,14 @@
* deleteCurrentTuple()
* deleteCurrentTuple()
* updateCurrentTuple()
* updateCurrentTuple()
*
*
* NdbDictionary::Dictionary
*
const
NdbDictionary::Dictionary
* getTable()
* getTable()
* dropTable()
* createTable()
*
*
* NdbDictionary::Column
* const NdbDictionary::Table
* setName()
* getColumn()
* setType()
* setLength()
* setPrimaryKey()
* setNullable()
*
*
* NdbDictionary::Table
* const NdbDictionary::Column
* setName()
* getLength()
* addColumn()
*
*
* NdbOperation
* NdbOperation
* insertTuple()
* insertTuple()
...
@@ -76,6 +67,8 @@
...
@@ -76,6 +67,8 @@
*/
*/
#include <mysql.h>
#include <mysqld_error.h>
#include <NdbApi.hpp>
#include <NdbApi.hpp>
// Used for cout
// Used for cout
#include <iostream>
#include <iostream>
...
@@ -97,10 +90,16 @@ milliSleep(int milliseconds){
...
@@ -97,10 +90,16 @@ milliSleep(int milliseconds){
/**
/**
* Helper sleep function
* Helper sleep function
*/
*/
#define APIERROR(error) \
#define PRINT_ERROR(code,msg) \
{ std::cout << "Error in " << __FILE__ << ", line:" << __LINE__ << ", code:" \
std::cout << "Error in " << __FILE__ << ", line: " << __LINE__ \
<< error.code << ", msg: " << error.message << "." << std::endl; \
<< ", code: " << code \
exit(-1); }
<< ", 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); }
struct
Car
struct
Car
{
{
...
@@ -112,55 +111,26 @@ struct Car
...
@@ -112,55 +111,26 @@ struct Car
/**
/**
* Function to create table
* Function to create table
*/
*/
int
create_table
(
Ndb
*
myNdb
)
int
create_table
(
MYSQL
&
mysql
)
{
{
NdbDictionary
::
Table
myTable
;
while
(
mysql_query
(
&
mysql
,
NdbDictionary
::
Column
myColumn
;
"CREATE TABLE"
" GARAGE"
NdbDictionary
::
Dictionary
*
myDict
=
myNdb
->
getDictionary
();
" (REG_NO INT UNSIGNED NOT NULL,"
" BRAND CHAR(20) NOT NULL,"
/*********************************************************
" COLOR CHAR(20) NOT NULL,"
* Create a table named GARAGE if it does not exist *
" PRIMARY KEY USING HASH (REG_NO))"
*********************************************************/
" ENGINE=NDB"
))
if
(
myDict
->
getTable
(
"GARAGE"
)
!=
NULL
)
{
{
std
::
cout
<<
"NDB already has example table: GARAGE. "
if
(
mysql_errno
(
&
mysql
)
!=
ER_TABLE_EXISTS_ERROR
)
MYSQLERROR
(
mysql
);
std
::
cout
<<
"MySQL Cluster already has example table: GARAGE. "
<<
"Dropping it..."
<<
std
::
endl
;
<<
"Dropping it..."
<<
std
::
endl
;
if
(
myDict
->
dropTable
(
"GARAGE"
)
==
-
1
)
/**************
{
* Drop table *
std
::
cout
<<
"Failed to drop: GARAGE."
<<
std
::
endl
;
**************/
exit
(
1
);
if
(
mysql_query
(
&
mysql
,
"DROP TABLE GARAGE"
))
}
MYSQLERROR
(
mysql
);
}
Car
car
;
myTable
.
setName
(
"GARAGE"
);
myColumn
.
setName
(
"REG_NO"
);
myColumn
.
setType
(
NdbDictionary
::
Column
::
Unsigned
);
myColumn
.
setLength
(
1
);
myColumn
.
setPrimaryKey
(
true
);
myColumn
.
setNullable
(
false
);
myTable
.
addColumn
(
myColumn
);
myColumn
.
setName
(
"BRAND"
);
myColumn
.
setType
(
NdbDictionary
::
Column
::
Char
);
myColumn
.
setLength
(
sizeof
(
car
.
brand
));
myColumn
.
setPrimaryKey
(
false
);
myColumn
.
setNullable
(
false
);
myTable
.
addColumn
(
myColumn
);
myColumn
.
setName
(
"COLOR"
);
myColumn
.
setType
(
NdbDictionary
::
Column
::
Char
);
myColumn
.
setLength
(
sizeof
(
car
.
color
));
myColumn
.
setPrimaryKey
(
false
);
myColumn
.
setNullable
(
false
);
myTable
.
addColumn
(
myColumn
);
if
(
myDict
->
createTable
(
myTable
)
==
-
1
)
{
APIERROR
(
myDict
->
getNdbError
());
return
-
1
;
}
}
return
1
;
return
1
;
}
}
...
@@ -460,7 +430,7 @@ int scan_update(Ndb* myNdb,
...
@@ -460,7 +430,7 @@ int scan_update(Ndb* myNdb,
/**
/**
* Define a result set for the scan.
* Define a result set for the scan.
*/
*/
if
(
myScanOp
->
readTuples
Exclusive
(
NdbOperation
::
LM_Exclusive
)
)
if
(
myScanOp
->
readTuples
(
NdbOperation
::
LM_Exclusive
)
)
{
{
std
::
cout
<<
myTrans
->
getNdbError
().
message
<<
std
::
endl
;
std
::
cout
<<
myTrans
->
getNdbError
().
message
<<
std
::
endl
;
myNdb
->
closeTransaction
(
myTrans
);
myNdb
->
closeTransaction
(
myTrans
);
...
@@ -726,36 +696,67 @@ int scan_print(Ndb * myNdb)
...
@@ -726,36 +696,67 @@ int scan_print(Ndb * myNdb)
int
main
()
int
main
()
{
{
ndb_init
();
ndb_init
();
MYSQL
mysql
;
Ndb_cluster_connection
cluster_connection
;
/**************************************************************
* Connect to mysql server and create table *
**************************************************************/
{
if
(
!
mysql_init
(
&
mysql
)
)
{
std
::
cout
<<
"mysql_init failed
\n
"
;
exit
(
-
1
);
}
if
(
!
mysql_real_connect
(
&
mysql
,
"localhost"
,
"root"
,
""
,
""
,
3306
,
"/tmp/mysql.sock"
,
0
)
)
MYSQLERROR
(
mysql
);
mysql_query
(
&
mysql
,
"CREATE DATABASE TEST_DB"
);
if
(
mysql_query
(
&
mysql
,
"USE TEST_DB"
)
!=
0
)
MYSQLERROR
(
mysql
);
if
(
cluster_connection
.
connect
(
12
,
5
,
1
))
create_table
(
mysql
);
}
/**************************************************************
* Connect to ndb cluster *
**************************************************************/
Ndb_cluster_connection
cluster_connection
;
if
(
cluster_connection
.
connect
(
4
,
5
,
1
))
{
{
std
::
cout
<<
"Unable to connect to cluster within 30 secs."
<<
std
::
endl
;
std
::
cout
<<
"Unable to connect to cluster within 30 secs."
<<
std
::
endl
;
exit
(
-
1
);
exit
(
-
1
);
}
}
// Optionally connect and wait for the storage nodes (ndbd's)
if
(
cluster_connection
.
wait_until_ready
(
30
,
30
)
)
if
(
cluster_connection
.
wait_until_ready
(
30
,
0
)
<
0
)
{
{
std
::
cout
<<
"Cluster was not ready within 30 secs.
"
<<
std
::
endl
;
std
::
cout
<<
"Cluster was not ready within 30 secs.
\n
"
;
exit
(
-
1
);
exit
(
-
1
);
}
}
Ndb
myNdb
(
&
cluster_connection
,
"TEST_DB"
);
Ndb
myNdb
(
&
cluster_connection
,
"TEST_DB"
);
if
(
myNdb
.
init
(
1024
)
==
-
1
)
{
// Set max 1024 parallel transactions
/*******************************************
* Initialize NDB and wait until its ready *
*******************************************/
if
(
myNdb
.
init
(
1024
)
==
-
1
)
{
// Set max 1024 parallel transactions
APIERROR
(
myNdb
.
getNdbError
());
APIERROR
(
myNdb
.
getNdbError
());
exit
(
-
1
);
exit
(
-
1
);
}
}
create_table
(
&
myNdb
);
/*******************************************
* Check table definition *
NdbDictionary
::
Dictionary
*
myDict
=
myNdb
.
getDictionary
();
*******************************************/
int
column_color
=
myDict
->
getTable
(
"GARAGE"
)
->
getColumn
(
"COLOR"
)
->
getColumnNo
();
int
column_color
;
{
const
NdbDictionary
::
Dictionary
*
myDict
=
myNdb
.
getDictionary
();
const
NdbDictionary
::
Table
*
t
=
myDict
->
getTable
(
"GARAGE"
);
Car
car
;
if
(
t
->
getColumn
(
"COLOR"
)
->
getLength
()
!=
sizeof
(
car
.
color
)
||
t
->
getColumn
(
"BRAND"
)
->
getLength
()
!=
sizeof
(
car
.
brand
))
{
std
::
cout
<<
"Wrong table definition"
<<
std
::
endl
;
exit
(
-
1
);
}
column_color
=
t
->
getColumn
(
"COLOR"
)
->
getColumnNo
();
}
if
(
populate
(
&
myNdb
)
>
0
)
if
(
populate
(
&
myNdb
)
>
0
)
std
::
cout
<<
"populate: Success!"
<<
std
::
endl
;
std
::
cout
<<
"populate: Success!"
<<
std
::
endl
;
...
@@ -789,4 +790,6 @@ int main()
...
@@ -789,4 +790,6 @@ int main()
}
}
if
(
scan_print
(
&
myNdb
)
>
0
)
if
(
scan_print
(
&
myNdb
)
>
0
)
std
::
cout
<<
"scan_print: Success!"
<<
std
::
endl
<<
std
::
endl
;
std
::
cout
<<
"scan_print: Success!"
<<
std
::
endl
<<
std
::
endl
;
return
0
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment