summaryrefslogtreecommitdiff
path: root/ndb/test/ndbapi/celloDb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/test/ndbapi/celloDb.cpp')
-rw-r--r--ndb/test/ndbapi/celloDb.cpp1503
1 files changed, 1503 insertions, 0 deletions
diff --git a/ndb/test/ndbapi/celloDb.cpp b/ndb/test/ndbapi/celloDb.cpp
new file mode 100644
index 00000000000..ec61e783585
--- /dev/null
+++ b/ndb/test/ndbapi/celloDb.cpp
@@ -0,0 +1,1503 @@
+/* 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 */
+
+
+/* ***************************************************
+ BASIC TEST 1
+ Test basic functions and status of NDB
+
+ Arguments:
+ none
+
+ Returns:
+ 0 - Test passed
+ -1 - Test failed
+ 1 - Invalid arguments
+flexBench
+ * *************************************************** */
+
+#include <NdbApi.hpp>
+#include <NdbMain.h>
+
+#define MAXATTR 4
+#define MAXTABLES 4
+#define PAGESIZE 8192
+#define OVERHEAD 0.02
+#define NUMBEROFRECORDS 10
+#define PKSIZE 1
+#define ATTRNAMELEN 16
+
+
+static void createTable_IPACCT(Ndb*);
+static void createTable_RPACCT(Ndb*);
+static void createTable_SBMCALL(Ndb*);
+static void createTable_TODACCT(Ndb*);
+
+static void error_handler(const char*);
+static bool error_handler2(const char*, int) ;
+
+static void setAttrNames(void);
+static void setTableNames(void);
+static void create_table(Ndb*);
+static void insert_rows(Ndb*);
+static void update_rows(Ndb*);
+static void delete_rows(Ndb*);
+static void verify_deleted(Ndb*);
+static void read_and_verify_rows(Ndb*);
+
+static void insert_IPACCT(Ndb*, Uint32, Uint32, Uint32, Uint32, Uint32); //3 for Pk, and two data. just to test;
+
+static void read_IPACCT(Ndb* , Uint32 , Uint32 , Uint32 );
+
+static int tAttributeSize;
+static int bTestPassed;
+
+static char tableName[MAXTABLES][ATTRNAMELEN];static char attrName[MAXATTR][ATTRNAMELEN];
+static int attrValue[NUMBEROFRECORDS];
+static int pkValue[NUMBEROFRECORDS];
+static int failed = 0 ;
+#include <NdbOut.hpp>
+
+NDB_COMMAND(celloDb, "celloDb", "celloDb", "celloDb", 65535)
+{
+
+ int tTableId;
+ int i;
+ Ndb MyNdb( "CELLO-SESSION-DB" );
+
+ MyNdb.init();
+
+ // Assume test passed
+ bTestPassed = 0;
+ /*
+ // Initialize global variables
+ for (i = 0; i < NUMBEROFRECORDS; i ++)
+ pkValue[i] = i;
+
+ for (i = 0; i < NUMBEROFRECORDS; i ++)
+ attrValue[i] = i;
+ */
+ tAttributeSize = 1;
+
+ // Wait for Ndb to become ready
+ if (MyNdb.waitUntilReady() == 0) {
+ ndbout << endl << "Cello session db - Starting " << endl;
+ ndbout << "Test basic functions and status of NDB" << endl;
+
+
+
+ createTable_SBMCALL (&MyNdb );
+ createTable_RPACCT (&MyNdb );
+ createTable_TODACCT (&MyNdb );
+ createTable_IPACCT (&MyNdb );
+
+ insert_IPACCT(&MyNdb, 1,2,1,2,2);
+ read_IPACCT(&MyNdb, 1, 2 , 1);
+ /*
+ insert_rows(&MyNdb);
+
+ read_and_verify_rows(&MyNdb);
+
+
+ // Create some new values to use for update
+ for (i = 0; i < NUMBEROFRECORDS; i++)
+ attrValue[i] = NUMBEROFRECORDS-i;
+
+ update_rows(&MyNdb);
+
+ read_and_verify_rows(&MyNdb);
+
+ delete_rows(&MyNdb);
+
+ verify_deleted(&MyNdb);
+ */
+ }
+ else {
+ bTestPassed = -1;
+ }
+
+
+ if (bTestPassed == 0)
+ {
+ // Test passed
+ ndbout << "OK - Test passed" << endl;
+ }
+ else
+ {
+ // Test failed
+ ndbout << "FAIL - Test failed" << endl;
+ exit(-1);
+ }
+ return NULL;
+}
+
+static void
+error_handler(const char* errorText)
+{
+ // Test failed
+ ndbout << endl << "ErrorMessage: " << errorText << endl;
+ bTestPassed = -1;
+}
+
+static void
+createTable_SBMCALL ( Ndb* pMyNdb )
+{
+ /****************************************************************
+ * Create table and attributes.
+ *
+ * create table SBMCALL(
+ * for attribs, see the REQ SPEC for cello session DB
+ * )
+ *
+ ***************************************************************/
+
+ const char* tname = "SBMCALL";
+ Uint32 recordsize = 244; //including 12 byte overhead
+ Uint32 pksize = 8; //size of total prim. key. in bytes. sum of entire composite PK.
+ Uint32 tTableId = pMyNdb->getTable()->openTable(tname);
+
+ if (tTableId == -1) {
+ Uint32 check;
+ Uint32 i;
+ NdbSchemaCon *MySchemaTransaction;
+ NdbSchemaOp *MySchemaOp;
+
+ ndbout << "Creating " << tname << "..." << endl;
+
+ MySchemaTransaction = pMyNdb->startSchemaTransaction();
+ if( ( MySchemaTransaction == NULL ) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+ MySchemaOp = MySchemaTransaction->getNdbSchemaOp();
+ if( ( MySchemaOp == NULL ) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Createtable
+
+ Uint32 tablesize=(recordsize*NUMBEROFRECORDS + OVERHEAD * NUMBEROFRECORDS)/1024;
+ Uint32 noPages=(pksize*NUMBEROFRECORDS)/PAGESIZE;
+
+ ndbout << "table size " << tablesize << "for table name " << tname << endl;
+
+ check = MySchemaOp->createTable( tname,
+ tablesize, // Table Size
+ TupleKey, // Key Type
+ noPages, // Nr of Pages
+ All,
+ 6,
+ 78,
+ 80,
+ 1,
+ true
+ );
+
+ if( check == -1 ) {
+ error_handler(MySchemaTransaction->getNdbErrorString());
+ exit(-1);
+ }
+
+
+
+ // Create first column, primary key
+ check = MySchemaOp->createAttribute( "SPBBOARDID",
+ TupleKey,
+ 32,
+ PKSIZE,
+ UnSigned,
+ MMBased,
+ NotNullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create second column, primary key
+ check = MySchemaOp->createAttribute( "CALLID",
+ TupleKey,
+ 32,
+ PKSIZE,
+ UnSigned,
+ MMBased,
+ NotNullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Creat thrid column, RP Session info, byte[16] represented as (String, 16)
+ check = MySchemaOp->createAttribute( "RPSESS",
+ NoKey,
+ 32,
+ 16,
+ String,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+// Creat fourth column, GRE Tunnel info, byte[16] represented as (String, 16)
+ check = MySchemaOp->createAttribute( "GRETUNNEL",
+ NoKey,
+ 32,
+ 16,
+ String,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+// Creat fifth column, PPP Session info, byte[24] represented as (String, 24)
+ check = MySchemaOp->createAttribute( "PPPSESS",
+ NoKey,
+ 32,
+ 24,
+ String,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ if( (MySchemaTransaction->execute() == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+ pMyNdb->closeSchemaTransaction(MySchemaTransaction);
+ ndbout << "done" << endl;
+
+
+ } //if
+
+ //else table already created , proceed
+}
+
+
+
+static void
+createTable_RPACCT(Ndb*pMyNdb)
+{
+
+ /****************************************************************
+ * Create table and attributes.
+ *
+ * create table RPACCT(
+ * for attribs, see the REQ SPEC for cello session DB
+ * )
+ *
+ ***************************************************************/
+
+ const char* tname = "RPACCT";
+ Uint32 recordsize = 380; //including 12 byte overhead
+ Uint32 pksize = 8; //size of total prim. key. in bytes.
+ Uint32 tTableId = pMyNdb->getTable()->openTable(tname);
+
+ if (tTableId == -1) {
+ Uint32 check;
+ Uint32 i;
+ NdbSchemaCon *MySchemaTransaction;
+ NdbSchemaOp *MySchemaOp;
+
+ ndbout << "Creating " << tname << "..." << endl;
+
+ MySchemaTransaction = pMyNdb->startSchemaTransaction();
+ if( MySchemaTransaction == NULL )
+ error_handler(MySchemaTransaction->getNdbErrorString());
+
+ MySchemaOp = MySchemaTransaction->getNdbSchemaOp();
+ if( MySchemaOp == NULL )
+ error_handler(MySchemaTransaction->getNdbErrorString());
+
+ // Createtable
+
+ Uint32 tablesize=(recordsize*NUMBEROFRECORDS + OVERHEAD * NUMBEROFRECORDS)/1024;
+ Uint32 noPages=(pksize*NUMBEROFRECORDS)/PAGESIZE;
+
+ ndbout << "table size " << tablesize << "for table name " << tname << endl;
+
+ check = MySchemaOp->createTable( tname,
+ tablesize, // Table Size
+ TupleKey, // Key Type
+ noPages // Nr of Pages
+ );
+
+ if( check == -1 )
+ error_handler(MySchemaTransaction->getNdbErrorString());
+
+
+
+ // Create first column, primary key
+ check = MySchemaOp->createAttribute( "SPBBOARDID",
+ TupleKey,
+ 32,
+ PKSIZE,
+ UnSigned,
+ MMBased,
+ NotNullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create second column, primary key
+ check = MySchemaOp->createAttribute( "CALLID",
+ TupleKey,
+ 32,
+ PKSIZE,
+ UnSigned,
+ MMBased,
+ NotNullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Creat thrid column MS ID, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "MSID",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create PDSN FA Address, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "PDSN",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create Serving PCF, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "SPCF",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+ // Create BS ID, 12 byte char, represented as String,12
+ check = MySchemaOp->createAttribute( "BSID",
+ NoKey,
+ 32,
+ 12,
+ String,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+
+
+ // Create User Zone, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "UZ",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create Forward Multiplex, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "FMO",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create Reverse Multiplex, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "RMO",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create Forward Fund rate, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "FFR",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create Reverse Fund rate, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "RFR",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+ // Create Service Option, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "SO",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+
+ // Create Forward Traffic Type, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "FTT",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+// Create Reverse Traffic Type, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "RTT",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+// Create Fund Frame Size, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "FFS",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+// Create Forware Fund RC, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "FFRC",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+ // Create Reverse Fund RC, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "RFRC",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create DCCH Frame Format, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "DCCH",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create Airlink QOS, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "AQOS",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+// Create Bad PPP Frame Count , 4 byte unsigned
+ check = MySchemaOp->createAttribute( "BPPPFC",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+
+// Create Active Time , 4 byte unsigned
+ check = MySchemaOp->createAttribute( "AT",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+// Create Nb Active Transitions , 4 byte unsigned
+ check = MySchemaOp->createAttribute( "NBAT",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+// Create SDB Octet Count In , 4 byte unsigned
+ check = MySchemaOp->createAttribute( "SDBOCI",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+
+// Create Nb SDB In, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "NBSDBI",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+
+// Create Nb SDB Out, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "NBSDBO",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+
+// Create HDLC Bytes received, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "HDLC",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+ if( (MySchemaTransaction->execute() == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+ pMyNdb->closeSchemaTransaction(MySchemaTransaction);
+ ndbout << "done" << endl;
+
+ } //if
+
+ //else table already created , proceed
+ }
+
+
+static void
+createTable_IPACCT(Ndb* pMyNdb)
+{
+
+
+ /****************************************************************
+ * Create table and attributes.
+ *
+ * create table IPACCT(
+ * for attribs, see the REQ SPEC for cello session DB
+ * )
+ *
+ ***************************************************************/
+
+ const char* tname = "IPACCT";
+ Uint32 recordsize = 70; //including 12 byte overhead
+ Uint32 pksize = 12; //size of total prim. key. in bytes.
+ Uint32 tTableId = pMyNdb->getTable()->openTable(tname);
+
+ if (tTableId == -1) {
+ Uint32 check;
+ Uint32 i;
+ NdbSchemaCon *MySchemaTransaction;
+ NdbSchemaOp *MySchemaOp;
+
+ ndbout << "Creating " << tname << "..." << endl;
+
+ MySchemaTransaction = pMyNdb->startSchemaTransaction();
+ if( MySchemaTransaction == NULL )
+ error_handler(MySchemaTransaction->getNdbErrorString());
+
+ MySchemaOp = MySchemaTransaction->getNdbSchemaOp();
+ if( MySchemaOp == NULL )
+ error_handler(MySchemaTransaction->getNdbErrorString());
+
+ // Createtable
+
+ Uint32 tablesize=(recordsize*NUMBEROFRECORDS + OVERHEAD * NUMBEROFRECORDS)/1024;
+ Uint32 noPages=(pksize*NUMBEROFRECORDS)/PAGESIZE;
+
+ ndbout << "table size " << tablesize << "for table name " << tname << endl;
+
+ check = MySchemaOp->createTable( tname,
+ tablesize, // Table Size
+ TupleKey, // Key Type
+ noPages // Nr of Pages
+ );
+
+ if( check == -1 )
+ error_handler(MySchemaTransaction->getNdbErrorString());
+
+
+
+ // Create first column, primary key
+ check = MySchemaOp->createAttribute( "SPBBOARDID",
+ TupleKey,
+ 32,
+ PKSIZE,
+ UnSigned,
+ MMBased,
+ NotNullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create second column, primary key
+ check = MySchemaOp->createAttribute( "CALLID",
+ TupleKey,
+ 32,
+ PKSIZE,
+ UnSigned,
+ MMBased,
+ NotNullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+ // Create third column, primary key
+ check = MySchemaOp->createAttribute( "IPADDR",
+ TupleKey,
+ 32,
+ PKSIZE,
+ String,
+ MMBased,
+ NotNullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+
+// Create Acct session id 4 byte unsigned
+ check = MySchemaOp->createAttribute( "ASID",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+// Create Correlation ID, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "CID",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+// Create MIP HA Address, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "MIPHA",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+
+
+// Create IP technology, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "IPT",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+// Create Compuls Tunnel ID, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "CTID",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+// Create IP QOS, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "IPQOS",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create Data octet count in, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "DOCI",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+ // Create Data octet count out, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "DOCO",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+ // Create Event time, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "ET",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+ // Create In mip sig count, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "IMSC",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+// Create Out mip sig count, 4 byte unsigned
+ check = MySchemaOp->createAttribute( "OMSC",
+ NoKey,
+ 32,
+ 1,
+ UnSigned,
+ MMBased,
+ NullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ if( (MySchemaTransaction->execute() == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+ pMyNdb->closeSchemaTransaction(MySchemaTransaction);
+ ndbout << "done" << endl;
+
+
+
+ } //if
+
+ //else table already created , proceed
+}
+
+
+static void
+createTable_TODACCT(Ndb* pMyNdb)
+{
+
+
+ /****************************************************************
+ * Create table and attributes.
+ *
+ * create table TODACCT(
+ * for attribs, see the REQ SPEC for cello session DB
+ * )
+ *
+ ***************************************************************/
+
+ const char* tname = "TODACCT";
+ Uint32 recordsize = 92; //including 12 byte overhead
+ Uint32 pksize = 12; //size of total prim. key. in bytes.
+ Uint32 tTableId = pMyNdb->getTable()->openTable(tname);
+
+ if (tTableId == -1) {
+ Uint32 check;
+ Uint32 i;
+ NdbSchemaCon *MySchemaTransaction;
+ NdbSchemaOp *MySchemaOp;
+
+ ndbout << "Creating " << tname << "..." << endl;
+
+ MySchemaTransaction = pMyNdb->startSchemaTransaction();
+ if( MySchemaTransaction == NULL )
+ error_handler(MySchemaTransaction->getNdbErrorString());
+
+ MySchemaOp = MySchemaTransaction->getNdbSchemaOp();
+ if( MySchemaOp == NULL )
+ error_handler(MySchemaTransaction->getNdbErrorString());
+
+ // Createtable
+
+ Uint32 tablesize=(recordsize*NUMBEROFRECORDS + OVERHEAD * NUMBEROFRECORDS)/1024;
+ Uint32 noPages=(pksize*NUMBEROFRECORDS)/PAGESIZE;
+
+ ndbout << "table size " << tablesize << "for table name " << tname << endl;
+
+ check = MySchemaOp->createTable( tname,
+ tablesize, // Table Size
+ TupleKey, // Key Type
+ noPages // Nr of Pages
+ );
+
+ if( check == -1 )
+ error_handler(MySchemaTransaction->getNdbErrorString());
+
+
+
+ // Create first column, primary key
+ check = MySchemaOp->createAttribute( "SPBBOARDID",
+ TupleKey,
+ 32,
+ PKSIZE,
+ UnSigned,
+ MMBased,
+ NotNullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+ // Create second column, primary key
+ check = MySchemaOp->createAttribute( "CALLID",
+ TupleKey,
+ 32,
+ PKSIZE,
+ UnSigned,
+ MMBased,
+ NotNullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+ // Create third column, primary key
+ check = MySchemaOp->createAttribute( "IPADDR",
+ TupleKey,
+ 32,
+ PKSIZE,
+ String,
+ MMBased,
+ NotNullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+ // Create third column, primary key
+ check = MySchemaOp->createAttribute( "INDEX",
+ TupleKey,
+ 32,
+ PKSIZE,
+ UnSigned,
+ MMBased,
+ NotNullAttribute );
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+
+// Create Acct session id 4 byte unsigned
+ check = MySchemaOp->createAttribute( "TOD",
+ NoKey,
+ 32,
+ 16,
+ String,
+ MMBased,
+ NullAttribute );
+
+
+ if( (check == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+
+
+ if( (MySchemaTransaction->execute() == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(), MySchemaTransaction->getNdbError())) )
+ exit (-1) ;
+
+ pMyNdb->closeSchemaTransaction(MySchemaTransaction);
+ ndbout << "done" << endl;
+
+ } //if
+
+ //else table already created , proceed
+}
+
+
+
+
+
+
+static void read_IPACCT(Ndb* pMyNdb, Uint32 CALLID, Uint32 SPBBOARDID , Uint32 IPADDR)
+{
+
+
+ int check;
+ int loop_count_ops;
+ int count;
+ int count_attributes;
+ char* value;
+ NdbConnection *MyTransaction;
+ NdbOperation *MyOperation;
+ NdbRecAttr* tTmp;
+
+
+
+ MyTransaction = pMyNdb->startTransaction();
+ if (MyTransaction == NULL)
+ error_handler(pMyNdb->getNdbErrorString());
+
+ MyOperation = MyTransaction->getNdbOperation("IPACCT");
+ if (MyOperation == NULL)
+ error_handler( MyTransaction->getNdbErrorString());
+
+ check = MyOperation->readTuple();
+ if( check == -1 )
+ error_handler( MyTransaction->getNdbErrorString());
+
+ check = MyOperation->equal( "SPBBOARDID",SPBBOARDID );
+ if( check == -1 )
+ error_handler( MyTransaction->getNdbErrorString());
+
+
+ check = MyOperation->equal( "IPADDR","IPADDR" );
+ if( check == -1 )
+ error_handler( MyTransaction->getNdbErrorString());
+
+
+ check = MyOperation->equal( "CALLID",CALLID );
+ if( check == -1 )
+ error_handler( MyTransaction->getNdbErrorString());
+
+
+
+
+ tTmp = MyOperation->getValue("IPQOS", NULL );
+ if( tTmp == NULL )
+ error_handler( MyTransaction->getNdbErrorString());
+ ndbout << " tTmp " << tTmp->isNULL() << endl;
+ MyTransaction->execute(Commit);
+
+ ndbout << " value read " << tTmp->int32_value() << endl;
+
+}
+
+
+
+static void insert_IPACCT(Ndb* pMyNdb, Uint32 CALLID, Uint32 SPBBOARDID , Uint32 IPADDR, Uint32 ASID, Uint32 IPQOS)
+{
+ /****************************************************************
+ * Insert rows
+ *
+ ***************************************************************/
+
+ int check;
+ int loop_count_ops;
+ int count;
+ int i;
+ NdbConnection *MyTransaction;
+ NdbOperation *MyOperation;
+
+ ndbout << "Inserting records..." << flush;
+
+ MyTransaction = pMyNdb->startTransaction();
+ if (MyTransaction == NULL)
+ error_handler(pMyNdb->getNdbErrorString());
+
+ MyOperation = MyTransaction->getNdbOperation("IPACCT");
+ if (MyOperation == NULL)
+ error_handler(MyTransaction->getNdbErrorString());
+
+
+
+ check = MyOperation->insertTuple();
+ if( check == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+
+ ndbout << "insertTuple" << endl;
+
+ check = MyOperation->equal("CALLID",CALLID );
+ if( check == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+ ndbout << "equal" << endl;
+
+
+ check = MyOperation->equal("SPBBOARDID",SPBBOARDID );
+ if( check == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+ ndbout << "equal" << endl;
+
+
+ check = MyOperation->equal("IPADDR","IPADDR" );
+ if( check == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+ ndbout << "equal" << endl;
+
+
+ check = MyOperation->setValue( "IPQOS", IPQOS);
+ if( check == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+ ndbout << "Set Value" << endl;
+
+
+
+ check = MyOperation->setValue( "ASID", ASID);
+ if( check == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+ ndbout << "Set Value" << endl;
+
+
+ check = MyTransaction->execute( Commit );
+ if(check == -1 ) {
+ ndbout << "error at commit" << endl;
+ error_handler(MyTransaction->getNdbErrorString());
+ }
+ else
+ ;//ndbout << ".";
+
+ pMyNdb->closeTransaction(MyTransaction);
+
+
+
+ ndbout << "OK" << endl;
+
+ return;
+}
+
+static void
+update_rows(Ndb* pMyNdb){
+ /****************************************************************
+ * Update rows in SimpleTable
+ *
+ ***************************************************************/
+
+ int check;
+ int loop_count_ops;
+ int count;
+ int i;
+ NdbConnection *MyTransaction;
+ NdbOperation *MyOperation;
+
+ ndbout << "Updating records..." << flush;
+
+ loop_count_ops = NUMBEROFRECORDS;
+
+ for (count=0 ; count < loop_count_ops ; count++) {
+
+ MyTransaction = pMyNdb->startTransaction();
+ if (MyTransaction == NULL)
+ error_handler( pMyNdb->getNdbErrorString() );
+
+ MyOperation = MyTransaction->getNdbOperation(tableName[0]);
+ if (MyOperation == NULL)
+ error_handler(MyTransaction->getNdbErrorString());
+
+ check = MyOperation->updateTuple();
+ if( check == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+
+ check = MyOperation->equal( attrName[0], (char*)&pkValue[count] );
+ if( check == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+
+ for (i = 1; i < MAXATTR; i++)
+ {
+ check = MyOperation->setValue( attrName[i], (char*)&attrValue[count]);
+ if( check == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+ }
+
+ if( MyTransaction->execute( Commit ) == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+ else
+ ;//ndbout << ".";
+
+ pMyNdb->closeTransaction(MyTransaction);
+
+ }
+
+ ndbout << "OK" << endl;
+ return;
+
+};
+
+static void
+delete_rows(Ndb* pMyNdb){
+
+ /****************************************************************
+ * Delete rows from SimpleTable
+ *
+ ***************************************************************/
+
+ int check;
+ int loop_count_ops;
+ int count;
+ NdbConnection *MyTransaction;
+ NdbOperation *MyOperation;
+
+ ndbout << "Deleting records..."<< flush;
+
+ loop_count_ops = NUMBEROFRECORDS;
+
+ for (count=0 ; count < loop_count_ops ; count++) {
+
+ MyTransaction = pMyNdb->startTransaction();
+ if (MyTransaction == NULL)
+ error_handler( pMyNdb->getNdbErrorString() );
+
+ MyOperation = MyTransaction->getNdbOperation(tableName[0]);
+ if (MyOperation == NULL)
+ error_handler(MyTransaction->getNdbErrorString());
+
+
+ check = MyOperation->deleteTuple();
+ if( check == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+
+ check = MyOperation->equal( attrName[0], (char*)&pkValue[count] );
+ if( check == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+
+
+ if( MyTransaction->execute( Commit ) == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+ else
+ ;// ndbout << ".";
+
+ pMyNdb->closeTransaction(MyTransaction);
+
+ }
+
+ ndbout << "OK" << endl;
+ return;
+
+};
+
+static void
+verify_deleted(Ndb* pMyNdb){
+ int check;
+ int loop_count_ops;
+ int count;
+ NdbConnection *MyTransaction;
+ NdbOperation *MyOperation;
+
+ ndbout << "Verifying deleted records..."<< flush;
+
+ loop_count_ops = NUMBEROFRECORDS;
+
+ for (count=0 ; count < loop_count_ops ; count++)
+ {
+ MyTransaction = pMyNdb->startTransaction();
+ if (MyTransaction == NULL)
+ error_handler(pMyNdb->getNdbErrorString());
+
+ MyOperation = MyTransaction->getNdbOperation(tableName[0]);
+ if (MyOperation == NULL)
+ error_handler( MyTransaction->getNdbErrorString());
+
+ check = MyOperation->readTuple();
+ if( check == -1 )
+ error_handler( MyTransaction->getNdbErrorString());
+
+ check = MyOperation->equal( attrName[0],(char*)&pkValue[count] );
+ if( check == -1 )
+ error_handler( MyTransaction->getNdbErrorString());
+
+ // Exepect to receive an error
+ if( MyTransaction->execute( Commit ) != -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+ else
+ {
+ ;//ndbout << ".";
+ }
+
+ pMyNdb->closeTransaction(MyTransaction);
+
+ }
+
+ ndbout << "OK" << endl;
+ return;
+};
+
+static void
+read_and_verify_rows(Ndb* pMyNdb)
+{
+
+ int check;
+ int loop_count_ops;
+ int count;
+ int count_attributes;
+
+ NdbConnection *MyTransaction;
+ NdbOperation *MyOperation;
+ NdbRecAttr* tTmp;
+
+ int readValue[MAXATTR];
+
+ ndbout << "Verifying records..."<< flush;
+
+ loop_count_ops = NUMBEROFRECORDS;
+
+ for (count=0 ; count < loop_count_ops ; count++)
+ {
+ MyTransaction = pMyNdb->startTransaction();
+ if (MyTransaction == NULL)
+ error_handler(pMyNdb->getNdbErrorString());
+
+ MyOperation = MyTransaction->getNdbOperation(tableName[0]);
+ if (MyOperation == NULL)
+ error_handler( MyTransaction->getNdbErrorString());
+
+ check = MyOperation->readTuple();
+ if( check == -1 )
+ error_handler( MyTransaction->getNdbErrorString());
+
+ check = MyOperation->equal( attrName[0],(char*)&pkValue[count] );
+ if( check == -1 )
+ error_handler( MyTransaction->getNdbErrorString());
+
+ for (count_attributes = 1; count_attributes < MAXATTR; count_attributes++)
+ {
+ tTmp = MyOperation->getValue( (char*)attrName[count_attributes], (char*)&readValue[count_attributes] );
+ if( tTmp == NULL )
+ error_handler( MyTransaction->getNdbErrorString());
+ }
+
+ if( MyTransaction->execute( Commit ) == -1 )
+ error_handler(MyTransaction->getNdbErrorString());
+ else
+ {
+ // Check value in db against value in mem
+
+ //ndbout << readValue[1] << " == " << attrValue[count] << endl;
+
+ if ( readValue[1]!=attrValue[count] )
+ error_handler("Verification error!");
+ else
+ if ( readValue[2]!=attrValue[count] )
+ error_handler("Verification error!");
+ else
+ if ( readValue[3]!=attrValue[count] )
+ error_handler("Verification error!");
+ else
+ {
+ ;//ndbout << ".";
+ }
+ }
+ pMyNdb->closeTransaction(MyTransaction);
+
+ }
+
+ ndbout << "OK" << endl;
+ return;
+
+
+
+};
+
+
+static void
+setAttrNames()
+{
+ int i;
+
+ for (i = 0; i < MAXATTR ; i++)
+ {
+ sprintf(&attrName[i][0], "Col%d", i);
+ }
+}
+
+static void
+setTableNames()
+{
+ int i;
+
+ sprintf(&tableName[0][0], "SBMCALL", 0);
+ sprintf(&tableName[1][0], "RPACCT", 0);
+ sprintf(&tableName[2][0], "IPACCT", 0);
+ sprintf(&tableName[3][0], "TODACCT", 0);
+
+}
+
+
+bool error_handler2(const char* error_string, int error_int) {
+ failed++ ;
+ ndbout << error_string << endl ;
+ if ( 4008==error_int || 721==error_int || 266==error_int ){
+ ndbout << endl << "Attempting to recover and continue now..." << endl ;
+ return true ; // return true to retry
+ }
+ return false ; // return false to abort
+}