celloDb.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:39k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /* ***************************************************
  14.        BASIC TEST 1
  15.        Test basic functions and status of NDB
  16.        Arguments:
  17.         none 
  18.        Returns:
  19.         0 - Test passed
  20.        -1 - Test failed
  21.         1 - Invalid arguments
  22. flexBench
  23.  * *************************************************** */
  24. #include <NdbApi.hpp>
  25. #include <NdbMain.h>
  26. #define MAXATTR 4
  27. #define MAXTABLES 4
  28. #define PAGESIZE 8192
  29. #define OVERHEAD 0.02
  30. #define NUMBEROFRECORDS 10
  31. #define PKSIZE 1
  32. #define ATTRNAMELEN 16
  33. static void  createTable_IPACCT(Ndb*);
  34. static void  createTable_RPACCT(Ndb*);
  35. static void  createTable_SBMCALL(Ndb*);
  36. static void  createTable_TODACCT(Ndb*);
  37. static void  error_handler(const char*);
  38. static bool  error_handler2(const char*, int) ;
  39. static void  setAttrNames(void);
  40. static void  setTableNames(void);
  41. static void  create_table(Ndb*);
  42. static void  insert_rows(Ndb*);
  43. static void  update_rows(Ndb*);
  44. static void  delete_rows(Ndb*);
  45. static void  verify_deleted(Ndb*);
  46. static void  read_and_verify_rows(Ndb*);
  47. static void  insert_IPACCT(Ndb*, Uint32, Uint32, Uint32, Uint32, Uint32); //3 for Pk, and two data. just to test;
  48. static void read_IPACCT(Ndb* , Uint32 , Uint32  , Uint32 );
  49. static  int         tAttributeSize;
  50. static  int             bTestPassed;
  51. static  char     tableName[MAXTABLES][ATTRNAMELEN];static  char     attrName[MAXATTR][ATTRNAMELEN];
  52. static  int         attrValue[NUMBEROFRECORDS];
  53. static  int                 pkValue[NUMBEROFRECORDS];
  54. static int     failed = 0 ;
  55. #include <NdbOut.hpp>
  56. NDB_COMMAND(celloDb, "celloDb", "celloDb", "celloDb", 65535)
  57. {
  58.   ndb_init();
  59.   int                   tTableId;
  60.   int                   i;
  61.   Ndb        MyNdb( "CELLO-SESSION-DB" );
  62.   MyNdb.init();
  63.   // Assume test passed
  64.   bTestPassed = 0;
  65.   /*
  66.   // Initialize global variables
  67.   for (i = 0; i < NUMBEROFRECORDS; i ++)
  68.      pkValue[i] = i; 
  69.   
  70.   for (i = 0; i < NUMBEROFRECORDS; i ++)
  71.      attrValue[i] = i;
  72.   */
  73.   tAttributeSize = 1;
  74.   // Wait for Ndb to become ready
  75.   if (MyNdb.waitUntilReady() == 0) {
  76.     ndbout << endl << "Cello session db - Starting " << endl;
  77.     ndbout << "Test basic functions and status of NDB" << endl;
  78.     
  79.       
  80.     createTable_SBMCALL (&MyNdb );
  81.     createTable_RPACCT (&MyNdb );
  82.     createTable_TODACCT (&MyNdb );
  83.     createTable_IPACCT (&MyNdb );
  84.     
  85.     insert_IPACCT(&MyNdb, 1,2,1,2,2);
  86.     read_IPACCT(&MyNdb, 1, 2 , 1);
  87.     /*
  88.       insert_rows(&MyNdb);
  89.       read_and_verify_rows(&MyNdb);
  90.       // Create some new values to use for update
  91.       for (i = 0; i < NUMBEROFRECORDS; i++)
  92.   attrValue[i] = NUMBEROFRECORDS-i;
  93.       update_rows(&MyNdb);
  94.       read_and_verify_rows(&MyNdb);
  95.       delete_rows(&MyNdb);
  96.       verify_deleted(&MyNdb);
  97.       */
  98.     }
  99.     else {
  100. bTestPassed = -1;
  101.       }
  102.   if (bTestPassed == 0)
  103.     {
  104.       // Test passed
  105.       ndbout << "OK - Test passed" << endl;
  106.     }
  107.   else
  108.     {
  109.       // Test failed
  110.       ndbout << "FAIL - Test failed" << endl;
  111.       exit(-1);
  112.     }
  113.   return NULL;
  114. }
  115. static void 
  116. error_handler(const char* errorText)
  117. {
  118.   // Test failed 
  119.   ndbout << endl << "ErrorMessage: " << errorText << endl;
  120.   bTestPassed = -1;
  121. }
  122. static void
  123. createTable_SBMCALL ( Ndb* pMyNdb )
  124. {
  125.   /****************************************************************
  126.    * Create table and attributes. 
  127.    *
  128.    *    create table SBMCALL(
  129.    *      for attribs, see the REQ SPEC for cello session DB
  130.    *     )
  131.    *  
  132.    ***************************************************************/ 
  133.   const char* tname = "SBMCALL";
  134.   Uint32 recordsize = 244; //including 12 byte overhead
  135.   Uint32 pksize = 8; //size of total prim. key. in bytes. sum of entire composite PK.
  136.   Uint32 tTableId = pMyNdb->getTable()->openTable(tname);
  137.   
  138.   if (tTableId == -1) {    
  139.     Uint32              check; 
  140.     Uint32              i;
  141.     NdbSchemaCon       *MySchemaTransaction;
  142.     NdbSchemaOp         *MySchemaOp;
  143.     
  144.     ndbout << "Creating " << tname << "..." << endl;
  145.     
  146.     MySchemaTransaction = pMyNdb->startSchemaTransaction();
  147.     if( ( MySchemaTransaction == NULL ) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  148.       exit (-1) ;
  149.     
  150.     MySchemaOp = MySchemaTransaction->getNdbSchemaOp();
  151.     if( ( MySchemaOp == NULL ) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  152.       exit (-1) ;
  153.     
  154.         
  155.     // Createtable
  156.     Uint32 tablesize=(recordsize*NUMBEROFRECORDS + OVERHEAD * NUMBEROFRECORDS)/1024;
  157.     Uint32 noPages=(pksize*NUMBEROFRECORDS)/PAGESIZE;
  158.     
  159.     ndbout << "table size " << tablesize << "for table name " << tname << endl;
  160.     
  161.     check = MySchemaOp->createTable( tname,
  162.                       tablesize, // Table Size
  163.      TupleKey, // Key Type
  164.      noPages, // Nr of Pages
  165.      All,
  166.      6,
  167.      78,
  168.      80,
  169.      1,
  170.      true
  171.      );
  172.     
  173.     if( check == -1 ) {
  174.       error_handler(MySchemaTransaction->getNdbErrorString());
  175.       exit(-1);
  176.     }
  177.     
  178.     
  179.     // Create first column, primary key 
  180.     check = MySchemaOp->createAttribute( "SPBBOARDID",
  181.  TupleKey,
  182.  32,
  183.  PKSIZE,
  184.  UnSigned,
  185.  MMBased,
  186.  NotNullAttribute );
  187.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  188.       exit (-1) ;
  189.     
  190.     // Create second column, primary key 
  191.     check = MySchemaOp->createAttribute( "CALLID",
  192.  TupleKey,
  193.  32,
  194.  PKSIZE,
  195.  UnSigned,
  196.  MMBased,
  197.  NotNullAttribute );
  198.     
  199.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  200.       exit (-1) ;
  201.     
  202.     // Creat thrid column, RP Session info, byte[16] represented as (String, 16)
  203.     check = MySchemaOp->createAttribute( "RPSESS",
  204.  NoKey,
  205.  32,
  206.  16,
  207.  String,
  208.  MMBased,
  209.  NullAttribute );
  210.     
  211.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  212.       exit (-1) ;
  213.     
  214. // Creat fourth column, GRE Tunnel info, byte[16] represented as (String, 16)
  215.     check = MySchemaOp->createAttribute( "GRETUNNEL",
  216.  NoKey,
  217.  32,
  218.  16,
  219.  String,
  220.  MMBased,
  221.  NullAttribute );
  222.     
  223.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  224.       exit (-1) ;
  225.     
  226. // Creat fifth column, PPP Session info, byte[24] represented as (String, 24)
  227.     check = MySchemaOp->createAttribute( "PPPSESS",
  228.  NoKey,
  229.  32,
  230.  24,
  231.  String,
  232.  MMBased,
  233.  NullAttribute );
  234.     
  235.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  236.       exit (-1) ;
  237.     
  238.     if( (MySchemaTransaction->execute() == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  239.       exit (-1) ;
  240.     
  241.     pMyNdb->closeSchemaTransaction(MySchemaTransaction);
  242.     ndbout << "done" << endl;
  243.     
  244.     
  245.   } //if 
  246.   
  247.   //else table already created , proceed
  248. }
  249. static void
  250. createTable_RPACCT(Ndb*pMyNdb)
  251. {
  252.   
  253.   /****************************************************************
  254.    * Create table and attributes. 
  255.    *
  256.    *    create table RPACCT(
  257.    *      for attribs, see the REQ SPEC for cello session DB
  258.    *     )
  259.    *  
  260.    ***************************************************************/ 
  261.  
  262.  const char* tname = "RPACCT";
  263.  Uint32 recordsize = 380; //including 12 byte overhead
  264.  Uint32 pksize = 8; //size of total prim. key. in bytes.
  265.  Uint32 tTableId = pMyNdb->getTable()->openTable(tname);
  266.  
  267.  if (tTableId == -1) {    
  268.    Uint32              check; 
  269.    Uint32              i;
  270.    NdbSchemaCon       *MySchemaTransaction;
  271.    NdbSchemaOp         *MySchemaOp;
  272.    
  273.    ndbout << "Creating " << tname << "..." << endl;
  274.    
  275.    MySchemaTransaction = pMyNdb->startSchemaTransaction();
  276.    if( MySchemaTransaction == NULL )
  277.      error_handler(MySchemaTransaction->getNdbErrorString());
  278.    
  279.    MySchemaOp = MySchemaTransaction->getNdbSchemaOp();
  280.    if( MySchemaOp == NULL ) 
  281.       error_handler(MySchemaTransaction->getNdbErrorString());
  282.    
  283.    // Createtable
  284.    
  285.    Uint32 tablesize=(recordsize*NUMBEROFRECORDS + OVERHEAD * NUMBEROFRECORDS)/1024;
  286.    Uint32 noPages=(pksize*NUMBEROFRECORDS)/PAGESIZE;
  287.    
  288.    ndbout << "table size " << tablesize << "for table name " << tname << endl;
  289.    
  290.    check = MySchemaOp->createTable( tname,
  291.     tablesize, // Table Size
  292.     TupleKey, // Key Type
  293.      noPages // Nr of Pages
  294.     );
  295.    
  296.    if( check == -1 ) 
  297.      error_handler(MySchemaTransaction->getNdbErrorString());
  298.    
  299.    
  300.    
  301.    // Create first column, primary key 
  302.    check = MySchemaOp->createAttribute( "SPBBOARDID",
  303. TupleKey,
  304. 32,
  305. PKSIZE,
  306.  UnSigned,
  307. MMBased,
  308. NotNullAttribute );
  309.    
  310.    if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  311.      exit (-1) ;
  312.    
  313.    
  314.    // Create second column, primary key 
  315.    check = MySchemaOp->createAttribute( "CALLID",
  316. TupleKey,
  317. 32,
  318. PKSIZE,
  319.  UnSigned,
  320.  MMBased,
  321.  NotNullAttribute );
  322.     
  323.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  324.       exit (-1) ;
  325.     
  326.     // Creat thrid column MS ID, 4 byte unsigned
  327.     check = MySchemaOp->createAttribute( "MSID",
  328.  NoKey,
  329.  32,
  330.  1,
  331.  UnSigned,
  332.  MMBased,
  333.  NullAttribute );
  334.     
  335.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  336.       exit (-1) ;
  337.     
  338.     // Create PDSN FA Address, 4 byte unsigned
  339.     check = MySchemaOp->createAttribute( "PDSN",
  340.  NoKey,
  341.  32,
  342.  1,
  343.  UnSigned,
  344.  MMBased,
  345.  NullAttribute );
  346.     
  347.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  348.       exit (-1) ;
  349.     
  350.     // Create Serving PCF, 4 byte unsigned
  351.     check = MySchemaOp->createAttribute( "SPCF",
  352.  NoKey,
  353.  32,
  354.  1,
  355.  UnSigned,
  356.  MMBased,
  357.  NullAttribute );
  358.     
  359.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  360.       exit (-1) ;
  361.     
  362.     // Create BS ID, 12 byte char, represented as String,12
  363.     check = MySchemaOp->createAttribute( "BSID",
  364.  NoKey,
  365.  32,
  366.  12,
  367.  String,
  368.  MMBased,
  369.  NullAttribute );
  370.     
  371.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  372.       exit (-1) ;
  373.     
  374.     // Create User Zone, 4 byte unsigned
  375.     check = MySchemaOp->createAttribute( "UZ",
  376.  NoKey,
  377.  32,
  378.  1,
  379.  UnSigned,
  380.  MMBased,
  381.  NullAttribute );
  382.     
  383.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  384.       exit (-1) ;
  385.     
  386.     // Create Forward Multiplex, 4 byte unsigned
  387.     check = MySchemaOp->createAttribute( "FMO",
  388.  NoKey,
  389.  32,
  390.  1,
  391.  UnSigned,
  392.  MMBased,
  393.  NullAttribute );
  394.     
  395.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  396.       exit (-1) ;
  397.     
  398.     // Create Reverse Multiplex, 4 byte unsigned
  399.     check = MySchemaOp->createAttribute( "RMO",
  400.  NoKey,
  401.  32,
  402.  1,
  403.  UnSigned,
  404.  MMBased,
  405.  NullAttribute );
  406.     
  407.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  408.       exit (-1) ;
  409.     // Create Forward Fund rate, 4 byte unsigned
  410.     check = MySchemaOp->createAttribute( "FFR",
  411.  NoKey,
  412.  32,
  413.  1,
  414.  UnSigned,
  415.  MMBased,
  416.  NullAttribute );
  417.     
  418.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  419.       exit (-1) ;
  420.     
  421.  // Create Reverse Fund rate, 4 byte unsigned
  422.     check = MySchemaOp->createAttribute( "RFR",
  423.  NoKey,
  424.  32,
  425.  1,
  426.  UnSigned,
  427.  MMBased,
  428.  NullAttribute );
  429.     
  430.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  431.       exit (-1) ;
  432.     
  433.  // Create Service Option, 4 byte unsigned
  434.     check = MySchemaOp->createAttribute( "SO",
  435.  NoKey,
  436.  32,
  437.  1,
  438.  UnSigned,
  439.  MMBased,
  440.  NullAttribute );
  441.     
  442.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  443.       exit (-1) ;
  444.  // Create Forward Traffic Type, 4 byte unsigned
  445.     check = MySchemaOp->createAttribute( "FTT",
  446.  NoKey,
  447.  32,
  448.  1,
  449.  UnSigned,
  450.  MMBased,
  451.  NullAttribute );
  452.     
  453.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  454.       exit (-1) ;
  455. // Create Reverse Traffic Type, 4 byte unsigned
  456.     check = MySchemaOp->createAttribute( "RTT",
  457.  NoKey,
  458.  32,
  459.  1,
  460.  UnSigned,
  461.  MMBased,
  462.  NullAttribute );
  463.     
  464.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  465.       exit (-1) ;
  466. // Create Fund Frame Size, 4 byte unsigned
  467.     check = MySchemaOp->createAttribute( "FFS",
  468.  NoKey,
  469.  32,
  470.  1,
  471.  UnSigned,
  472.  MMBased,
  473.  NullAttribute );
  474.     
  475.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  476.       exit (-1) ;
  477. // Create Forware Fund RC, 4 byte unsigned
  478.     check = MySchemaOp->createAttribute( "FFRC",
  479.  NoKey,
  480.  32,
  481.  1,
  482.  UnSigned,
  483.  MMBased,
  484.  NullAttribute );
  485.     
  486.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  487.       exit (-1) ;
  488.     // Create Reverse Fund RC, 4 byte unsigned
  489.     check = MySchemaOp->createAttribute( "RFRC",
  490.  NoKey,
  491.  32,
  492.  1,
  493.  UnSigned,
  494.  MMBased,
  495.  NullAttribute );
  496.     
  497.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  498.       exit (-1) ;
  499.     
  500.     // Create DCCH Frame Format, 4 byte unsigned
  501.     check = MySchemaOp->createAttribute( "DCCH",
  502.  NoKey,
  503.  32,
  504.  1,
  505.  UnSigned,
  506.  MMBased,
  507.  NullAttribute );
  508.     
  509.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  510.       exit (-1) ;
  511.     
  512.     
  513.     // Create Airlink QOS, 4 byte unsigned
  514.     check = MySchemaOp->createAttribute( "AQOS",
  515.  NoKey,
  516.  32,
  517.  1,
  518.  UnSigned,
  519.  MMBased,
  520.  NullAttribute );
  521.     
  522.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  523.       exit (-1) ;
  524. // Create Bad PPP Frame Count , 4 byte unsigned
  525.     check = MySchemaOp->createAttribute( "BPPPFC",
  526.  NoKey,
  527.  32,
  528.  1,
  529.  UnSigned,
  530.  MMBased,
  531.  NullAttribute );
  532.     
  533.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  534.       exit (-1) ;
  535. // Create Active Time , 4 byte unsigned
  536.     check = MySchemaOp->createAttribute( "AT",
  537.  NoKey,
  538.  32,
  539.  1,
  540.  UnSigned,
  541.  MMBased,
  542.  NullAttribute );
  543.     
  544.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  545.       exit (-1) ;
  546. // Create Nb Active Transitions , 4 byte unsigned
  547.     check = MySchemaOp->createAttribute( "NBAT",
  548.  NoKey,
  549.  32,
  550.  1,
  551.  UnSigned,
  552.  MMBased,
  553.  NullAttribute );
  554.     
  555.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  556.       exit (-1) ;
  557. // Create SDB Octet Count In , 4 byte unsigned
  558.     check = MySchemaOp->createAttribute( "SDBOCI",
  559.  NoKey,
  560.  32,
  561.  1,
  562.  UnSigned,
  563.  MMBased,
  564.  NullAttribute );
  565.     
  566.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  567.       exit (-1) ;
  568.     
  569. // Create Nb SDB In, 4 byte unsigned
  570.     check = MySchemaOp->createAttribute( "NBSDBI",
  571.  NoKey,
  572.  32,
  573.  1,
  574.  UnSigned,
  575.  MMBased,
  576.  NullAttribute );
  577.     
  578.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  579.       exit (-1) ;
  580. // Create Nb SDB Out, 4 byte unsigned
  581.     check = MySchemaOp->createAttribute( "NBSDBO",
  582.  NoKey,
  583.  32,
  584.  1,
  585.  UnSigned,
  586.  MMBased,
  587.  NullAttribute );
  588.     
  589.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  590.       exit (-1) ;
  591. // Create HDLC Bytes received, 4 byte unsigned
  592.     check = MySchemaOp->createAttribute( "HDLC",
  593.  NoKey,
  594.  32,
  595.  1,
  596.  UnSigned,
  597.  MMBased,
  598.  NullAttribute );
  599.     
  600.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  601.       exit (-1) ;
  602.     
  603.     
  604.     if( (MySchemaTransaction->execute() == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  605.       exit (-1) ;
  606.     
  607.     pMyNdb->closeSchemaTransaction(MySchemaTransaction);
  608.     ndbout << "done" << endl;
  609.     
  610.  } //if 
  611.   
  612.  //else table already created , proceed
  613.   }
  614.  
  615. static void
  616. createTable_IPACCT(Ndb* pMyNdb)
  617. {
  618.   /****************************************************************
  619.    * Create table and attributes. 
  620.    *
  621.    *    create table IPACCT(
  622.    *      for attribs, see the REQ SPEC for cello session DB
  623.    *     )
  624.    *  
  625.    ***************************************************************/ 
  626.   const char* tname = "IPACCT";
  627.   Uint32 recordsize = 70; //including 12 byte overhead
  628.   Uint32 pksize = 12; //size of total prim. key. in bytes.
  629.   Uint32 tTableId = pMyNdb->getTable()->openTable(tname);
  630.   
  631.   if (tTableId == -1) {    
  632.     Uint32              check; 
  633.     Uint32              i;
  634.     NdbSchemaCon       *MySchemaTransaction;
  635.     NdbSchemaOp         *MySchemaOp;
  636.     
  637.     ndbout << "Creating " << tname << "..." << endl;
  638.     
  639.     MySchemaTransaction = pMyNdb->startSchemaTransaction();
  640.     if( MySchemaTransaction == NULL )
  641.       error_handler(MySchemaTransaction->getNdbErrorString());
  642.     
  643.     MySchemaOp = MySchemaTransaction->getNdbSchemaOp();
  644.     if( MySchemaOp == NULL ) 
  645.       error_handler(MySchemaTransaction->getNdbErrorString());
  646.     
  647.     // Createtable
  648.     Uint32 tablesize=(recordsize*NUMBEROFRECORDS + OVERHEAD * NUMBEROFRECORDS)/1024;
  649.     Uint32 noPages=(pksize*NUMBEROFRECORDS)/PAGESIZE;
  650.     
  651.     ndbout << "table size " << tablesize << "for table name " << tname << endl;
  652.     
  653.     check = MySchemaOp->createTable( tname,
  654.                       tablesize, // Table Size
  655.      TupleKey, // Key Type
  656.      noPages // Nr of Pages
  657.      );
  658.     
  659.     if( check == -1 ) 
  660.       error_handler(MySchemaTransaction->getNdbErrorString());
  661.     
  662.     // Create first column, primary key 
  663.     check = MySchemaOp->createAttribute( "SPBBOARDID",
  664.  TupleKey,
  665.  32,
  666.  PKSIZE,
  667.  UnSigned,
  668.  MMBased,
  669.  NotNullAttribute );
  670.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  671.       exit (-1) ;
  672.     
  673.     // Create second column, primary key 
  674.     check = MySchemaOp->createAttribute( "CALLID",
  675.  TupleKey,
  676.  32,
  677.  PKSIZE,
  678.  UnSigned,
  679.  MMBased,
  680.  NotNullAttribute );
  681.     
  682.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  683.       exit (-1) ;
  684.    // Create third column, primary key 
  685.     check = MySchemaOp->createAttribute( "IPADDR",
  686.  TupleKey,
  687.  32,
  688.  PKSIZE,
  689.  String,
  690.  MMBased,
  691.  NotNullAttribute );
  692.     
  693.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  694.       exit (-1) ;
  695.      
  696. // Create Acct session id  4 byte unsigned
  697.     check = MySchemaOp->createAttribute( "ASID",
  698.  NoKey,
  699.  32,
  700.  1,
  701.  UnSigned,
  702.  MMBased,
  703.  NullAttribute );
  704.     
  705.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  706.       exit (-1) ;
  707. // Create Correlation ID, 4 byte unsigned
  708.     check = MySchemaOp->createAttribute( "CID",
  709.  NoKey,
  710.  32,
  711.  1,
  712.  UnSigned,
  713.  MMBased,
  714.  NullAttribute );
  715.     
  716.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  717.       exit (-1) ;
  718. // Create MIP HA Address, 4 byte unsigned
  719.     check = MySchemaOp->createAttribute( "MIPHA",
  720.  NoKey,
  721.  32,
  722.  1,
  723.  UnSigned,
  724.  MMBased,
  725.  NullAttribute );
  726.     
  727.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  728.       exit (-1) ;
  729.     
  730.     
  731. // Create IP technology, 4 byte unsigned
  732.     check = MySchemaOp->createAttribute( "IPT",
  733.  NoKey,
  734.  32,
  735.  1,
  736.  UnSigned,
  737.  MMBased,
  738.  NullAttribute );
  739.     
  740.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  741.       exit (-1) ;
  742. // Create Compuls Tunnel ID, 4 byte unsigned
  743.     check = MySchemaOp->createAttribute( "CTID",
  744.  NoKey,
  745.  32,
  746.  1,
  747.  UnSigned,
  748.  MMBased,
  749.  NullAttribute );
  750.     
  751.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  752.       exit (-1) ;
  753. // Create IP QOS, 4 byte unsigned
  754.     check = MySchemaOp->createAttribute( "IPQOS",
  755.  NoKey,
  756.  32,
  757.  1,
  758.  UnSigned,
  759.  MMBased,
  760.  NullAttribute );
  761.     
  762.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  763.       exit (-1) ;
  764.     
  765.     // Create Data octet count in, 4 byte unsigned
  766.     check = MySchemaOp->createAttribute( "DOCI",
  767.  NoKey,
  768.  32,
  769.  1,
  770.  UnSigned,
  771.  MMBased,
  772.  NullAttribute );
  773.     
  774.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  775.       exit (-1) ;
  776.     // Create Data octet count out, 4 byte unsigned
  777.     check = MySchemaOp->createAttribute( "DOCO",
  778.  NoKey,
  779.  32,
  780.  1,
  781.  UnSigned,
  782.  MMBased,
  783.  NullAttribute );
  784.     
  785.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  786.       exit (-1) ;
  787.     // Create Event time, 4 byte unsigned
  788.     check = MySchemaOp->createAttribute( "ET",
  789.  NoKey,
  790.  32,
  791.  1,
  792.  UnSigned,
  793.  MMBased,
  794.  NullAttribute );
  795.     
  796.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  797.       exit (-1) ;
  798.      // Create In mip sig count, 4 byte unsigned
  799.     check = MySchemaOp->createAttribute( "IMSC",
  800.  NoKey,
  801.  32,
  802.  1,
  803.  UnSigned,
  804.  MMBased,
  805.  NullAttribute );
  806.     
  807.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  808.       exit (-1) ;
  809. // Create Out mip sig count, 4 byte unsigned
  810.     check = MySchemaOp->createAttribute( "OMSC",
  811.  NoKey,
  812.  32,
  813.  1,
  814.  UnSigned,
  815.  MMBased,
  816.  NullAttribute );
  817.     
  818.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  819.       exit (-1) ;
  820.     
  821.     if( (MySchemaTransaction->execute() == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  822.       exit (-1) ;
  823.     
  824.     pMyNdb->closeSchemaTransaction(MySchemaTransaction);
  825.     ndbout << "done" << endl;
  826.     
  827.   } //if 
  828.   //else table already created , proceed
  829. }
  830. static void
  831. createTable_TODACCT(Ndb* pMyNdb)
  832. {
  833.   /****************************************************************
  834.    * Create table and attributes. 
  835.    *
  836.    *    create table TODACCT(
  837.    *      for attribs, see the REQ SPEC for cello session DB
  838.    *     )
  839.    *  
  840.    ***************************************************************/ 
  841.   
  842.   const char* tname = "TODACCT";
  843.   Uint32 recordsize = 92; //including 12 byte overhead
  844.   Uint32 pksize = 12; //size of total prim. key. in bytes.
  845.   Uint32 tTableId = pMyNdb->getTable()->openTable(tname);
  846.   
  847.   if (tTableId == -1) {    
  848.     Uint32              check; 
  849.     Uint32              i;
  850.     NdbSchemaCon       *MySchemaTransaction;
  851.     NdbSchemaOp         *MySchemaOp;
  852.     
  853.     ndbout << "Creating " << tname << "..." << endl;
  854.     
  855.     MySchemaTransaction = pMyNdb->startSchemaTransaction();
  856.     if( MySchemaTransaction == NULL )
  857.       error_handler(MySchemaTransaction->getNdbErrorString());
  858.     
  859.     MySchemaOp = MySchemaTransaction->getNdbSchemaOp();
  860.     if( MySchemaOp == NULL ) 
  861.       error_handler(MySchemaTransaction->getNdbErrorString());
  862.     
  863.     // Createtable
  864.     
  865.     Uint32 tablesize=(recordsize*NUMBEROFRECORDS + OVERHEAD * NUMBEROFRECORDS)/1024;
  866.     Uint32 noPages=(pksize*NUMBEROFRECORDS)/PAGESIZE;
  867.     
  868.     ndbout << "table size " << tablesize << "for table name " << tname << endl;
  869.     
  870.     check = MySchemaOp->createTable( tname,
  871.                       tablesize, // Table Size
  872.      TupleKey, // Key Type
  873.      noPages // Nr of Pages
  874.      );
  875.     
  876.     if( check == -1 ) 
  877.       error_handler(MySchemaTransaction->getNdbErrorString());
  878.     
  879.     // Create first column, primary key 
  880.     check = MySchemaOp->createAttribute( "SPBBOARDID",
  881.  TupleKey,
  882.  32,
  883.  PKSIZE,
  884.  UnSigned,
  885.  MMBased,
  886.  NotNullAttribute );
  887.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  888.       exit (-1) ;
  889.     
  890.     // Create second column, primary key 
  891.     check = MySchemaOp->createAttribute( "CALLID",
  892.  TupleKey,
  893.  32,
  894.  PKSIZE,
  895.  UnSigned,
  896.  MMBased,
  897.  NotNullAttribute );
  898.     
  899.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  900.       exit (-1) ;
  901.    // Create third column, primary key 
  902.     check = MySchemaOp->createAttribute( "IPADDR",
  903.  TupleKey,
  904.  32,
  905.  PKSIZE,
  906.  String,
  907.  MMBased,
  908.  NotNullAttribute );
  909.     
  910.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  911.       exit (-1) ;
  912.    // Create third column, primary key 
  913.     check = MySchemaOp->createAttribute( "INDEX",
  914.  TupleKey,
  915.  32,
  916.  PKSIZE,
  917.  UnSigned,
  918.  MMBased,
  919.  NotNullAttribute );
  920.     
  921.     if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  922.       exit (-1) ;
  923.      
  924. // Create Acct session id  4 byte unsigned
  925.     check = MySchemaOp->createAttribute( "TOD",
  926.  NoKey,
  927.  32,
  928.  16,
  929.  String,
  930.  MMBased,
  931.  NullAttribute );
  932.    if( (check == -1)  && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  933.       exit (-1) ;
  934.      
  935.    if( (MySchemaTransaction->execute() == -1) && (!error_handler2((const char*)MySchemaTransaction->getNdbErrorString(),  MySchemaTransaction->getNdbError())) )
  936.      exit (-1) ;
  937.    
  938.    pMyNdb->closeSchemaTransaction(MySchemaTransaction);
  939.    ndbout << "done" << endl;
  940.    
  941.   } //if 
  942.   
  943.  //else table already created , proceed
  944. }
  945. static void  read_IPACCT(Ndb* pMyNdb, Uint32 CALLID, Uint32 SPBBOARDID , Uint32 IPADDR)
  946. {
  947.   int                   check;
  948.   int                   loop_count_ops;
  949.   int count;
  950.   int                   count_attributes;
  951.   char* value;
  952.   NdbConnection *MyTransaction;
  953.   NdbOperation *MyOperation;
  954.   NdbRecAttr*           tTmp;
  955.   
  956.   
  957.   
  958.   MyTransaction = pMyNdb->startTransaction();
  959.   if (MyTransaction == NULL)
  960.     error_handler(pMyNdb->getNdbErrorString());
  961.   
  962.   MyOperation = MyTransaction->getNdbOperation("IPACCT");
  963.   if (MyOperation == NULL) 
  964.     error_handler( MyTransaction->getNdbErrorString());
  965.   
  966.   check = MyOperation->readTuple();
  967.   if( check == -1 ) 
  968.     error_handler( MyTransaction->getNdbErrorString());
  969.   
  970.   check = MyOperation->equal( "SPBBOARDID",SPBBOARDID );
  971.   if( check == -1 ) 
  972.     error_handler( MyTransaction->getNdbErrorString());
  973.   
  974.   check = MyOperation->equal( "IPADDR","IPADDR" );
  975.   if( check == -1 ) 
  976.     error_handler( MyTransaction->getNdbErrorString());
  977.   
  978.   check = MyOperation->equal( "CALLID",CALLID );
  979.   if( check == -1 ) 
  980.     error_handler( MyTransaction->getNdbErrorString());
  981.   tTmp = MyOperation->getValue("IPQOS", NULL );
  982.   if( tTmp == NULL ) 
  983.     error_handler( MyTransaction->getNdbErrorString());
  984.   ndbout << " tTmp " << tTmp->isNULL() << endl;
  985.   MyTransaction->execute(Commit);
  986.   
  987.   ndbout << " value read " << tTmp->int32_value() << endl;
  988.   
  989. }
  990. static void  insert_IPACCT(Ndb* pMyNdb, Uint32 CALLID, Uint32 SPBBOARDID , Uint32 IPADDR, Uint32 ASID, Uint32 IPQOS)
  991. {
  992.   /****************************************************************
  993.    * Insert rows 
  994.    *
  995.    ***************************************************************/
  996.   int                   check;
  997.   int                   loop_count_ops;
  998.   int count;
  999.   int                   i;
  1000.   NdbConnection *MyTransaction;
  1001.   NdbOperation *MyOperation;
  1002.  
  1003.   ndbout << "Inserting records..."  << flush;
  1004.    
  1005.   MyTransaction = pMyNdb->startTransaction();
  1006.   if (MyTransaction == NULL)   
  1007.     error_handler(pMyNdb->getNdbErrorString());
  1008.   
  1009.   MyOperation = MyTransaction->getNdbOperation("IPACCT");
  1010.   if (MyOperation == NULL) 
  1011.     error_handler(MyTransaction->getNdbErrorString());
  1012.  
  1013.  
  1014.   check = MyOperation->insertTuple();
  1015.   if( check == -1 ) 
  1016.     error_handler(MyTransaction->getNdbErrorString());
  1017.   
  1018.   ndbout << "insertTuple"  << endl;  
  1019.   
  1020.   check = MyOperation->equal("CALLID",CALLID );
  1021.   if( check == -1 ) 
  1022.     error_handler(MyTransaction->getNdbErrorString());
  1023.   ndbout << "equal"  << endl;  
  1024.   
  1025.   check = MyOperation->equal("SPBBOARDID",SPBBOARDID );
  1026.   if( check == -1 ) 
  1027.     error_handler(MyTransaction->getNdbErrorString());
  1028.   ndbout << "equal"  << endl;  
  1029.   check = MyOperation->equal("IPADDR","IPADDR" );
  1030.   if( check == -1 ) 
  1031.     error_handler(MyTransaction->getNdbErrorString());
  1032.   ndbout << "equal"  << endl;  
  1033.   check = MyOperation->setValue( "IPQOS", IPQOS);
  1034.   if( check == -1 ) 
  1035.     error_handler(MyTransaction->getNdbErrorString());
  1036.   ndbout << "Set Value"  << endl;
  1037.   
  1038.   check = MyOperation->setValue( "ASID", ASID);
  1039.   if( check == -1 ) 
  1040.     error_handler(MyTransaction->getNdbErrorString());
  1041.   ndbout << "Set Value"  << endl;
  1042.   
  1043.   check = MyTransaction->execute( Commit ); 
  1044.   if(check == -1 ) {
  1045.     ndbout << "error at commit"  << endl;
  1046.     error_handler(MyTransaction->getNdbErrorString());
  1047.   }
  1048.   else
  1049.     ;//ndbout << ".";
  1050.   
  1051.   pMyNdb->closeTransaction(MyTransaction);
  1052.   
  1053.   
  1054.       
  1055.   ndbout << "OK" << endl;
  1056.   
  1057.   return;
  1058. }
  1059. static void  
  1060. update_rows(Ndb* pMyNdb){
  1061.  /****************************************************************
  1062.    * Update rows in SimpleTable 
  1063.    *
  1064.    ***************************************************************/
  1065.   int                   check;
  1066.   int                   loop_count_ops;
  1067.   int count;
  1068.   int                   i;
  1069.   NdbConnection *MyTransaction;
  1070.   NdbOperation *MyOperation;
  1071.    ndbout << "Updating records..." << flush;
  1072.    
  1073.    loop_count_ops = NUMBEROFRECORDS;
  1074.    for (count=0 ; count < loop_count_ops ; count++)    {
  1075.       MyTransaction = pMyNdb->startTransaction();
  1076.       if (MyTransaction == NULL)
  1077.   error_handler( pMyNdb->getNdbErrorString() );
  1078.       MyOperation = MyTransaction->getNdbOperation(tableName[0]);
  1079.       if (MyOperation == NULL) 
  1080.         error_handler(MyTransaction->getNdbErrorString());
  1081.       check = MyOperation->updateTuple();
  1082.       if( check == -1 ) 
  1083.         error_handler(MyTransaction->getNdbErrorString());
  1084.  
  1085.       check = MyOperation->equal( attrName[0], (char*)&pkValue[count] );
  1086.       if( check == -1 ) 
  1087.          error_handler(MyTransaction->getNdbErrorString());
  1088.       for (i = 1; i < MAXATTR; i++)
  1089. {
  1090.           check = MyOperation->setValue( attrName[i], (char*)&attrValue[count]);
  1091.           if( check == -1 ) 
  1092.              error_handler(MyTransaction->getNdbErrorString());
  1093. }
  1094.       if( MyTransaction->execute( Commit ) == -1 )
  1095.          error_handler(MyTransaction->getNdbErrorString());
  1096.       else
  1097. ;//ndbout << ".";
  1098.         
  1099.       pMyNdb->closeTransaction(MyTransaction);
  1100.     }
  1101.    ndbout << "OK" << endl;
  1102.   return;
  1103. };
  1104. static void  
  1105. delete_rows(Ndb* pMyNdb){
  1106.   /****************************************************************
  1107.    * Delete rows from SimpleTable 
  1108.    *
  1109.    ***************************************************************/
  1110.   int                   check;
  1111.   int                   loop_count_ops;
  1112.   int count;
  1113.   NdbConnection *MyTransaction;
  1114.   NdbOperation *MyOperation;
  1115.    ndbout << "Deleting records..."<< flush;
  1116.    
  1117.    loop_count_ops = NUMBEROFRECORDS;
  1118.    for (count=0 ; count < loop_count_ops ; count++)    {
  1119.       MyTransaction = pMyNdb->startTransaction();
  1120.       if (MyTransaction == NULL)
  1121.   error_handler( pMyNdb->getNdbErrorString() );
  1122.       MyOperation = MyTransaction->getNdbOperation(tableName[0]);
  1123.       if (MyOperation == NULL) 
  1124.         error_handler(MyTransaction->getNdbErrorString());
  1125.       check = MyOperation->deleteTuple();
  1126.       if( check == -1 ) 
  1127.         error_handler(MyTransaction->getNdbErrorString());
  1128.  
  1129.       check = MyOperation->equal( attrName[0], (char*)&pkValue[count] );
  1130.       if( check == -1 ) 
  1131.          error_handler(MyTransaction->getNdbErrorString());
  1132.       if( MyTransaction->execute( Commit ) == -1 )
  1133.          error_handler(MyTransaction->getNdbErrorString());
  1134.       else
  1135. ;// ndbout << ".";
  1136.         
  1137.       pMyNdb->closeTransaction(MyTransaction);
  1138.     }
  1139.    ndbout << "OK" << endl;
  1140.   return;
  1141. };
  1142. static void 
  1143. verify_deleted(Ndb* pMyNdb){
  1144.   int                   check;
  1145.   int                   loop_count_ops;
  1146.   int count;
  1147.   NdbConnection *MyTransaction;
  1148.   NdbOperation *MyOperation;
  1149.   ndbout << "Verifying deleted records..."<< flush;
  1150.     
  1151.   loop_count_ops = NUMBEROFRECORDS;
  1152.   for (count=0 ; count < loop_count_ops ; count++)
  1153.   {
  1154.      MyTransaction = pMyNdb->startTransaction();
  1155.      if (MyTransaction == NULL)
  1156.         error_handler(pMyNdb->getNdbErrorString());
  1157.      MyOperation = MyTransaction->getNdbOperation(tableName[0]);
  1158.      if (MyOperation == NULL) 
  1159.         error_handler( MyTransaction->getNdbErrorString());
  1160.        
  1161.      check = MyOperation->readTuple();
  1162.      if( check == -1 ) 
  1163.        error_handler( MyTransaction->getNdbErrorString());
  1164.      check = MyOperation->equal( attrName[0],(char*)&pkValue[count] );
  1165.      if( check == -1 ) 
  1166.         error_handler( MyTransaction->getNdbErrorString());
  1167.      // Exepect to receive an error
  1168.       if( MyTransaction->execute( Commit ) != -1 ) 
  1169.          error_handler(MyTransaction->getNdbErrorString());
  1170.       else
  1171.       {
  1172.         ;//ndbout << ".";
  1173.       }
  1174.      
  1175.       pMyNdb->closeTransaction(MyTransaction);
  1176.     }
  1177.    ndbout << "OK" << endl;
  1178.   return;
  1179. };
  1180. static void 
  1181. read_and_verify_rows(Ndb* pMyNdb)
  1182. {
  1183.   int                   check;
  1184.   int                   loop_count_ops;
  1185.   int count;
  1186.   int                   count_attributes;
  1187.   NdbConnection *MyTransaction;
  1188.   NdbOperation *MyOperation;
  1189.   NdbRecAttr*           tTmp;
  1190.   int readValue[MAXATTR];
  1191.   ndbout << "Verifying records..."<< flush;
  1192.     
  1193.   loop_count_ops = NUMBEROFRECORDS;
  1194.   for (count=0 ; count < loop_count_ops ; count++)
  1195.   {
  1196.      MyTransaction = pMyNdb->startTransaction();
  1197.      if (MyTransaction == NULL)
  1198.         error_handler(pMyNdb->getNdbErrorString());
  1199.      MyOperation = MyTransaction->getNdbOperation(tableName[0]);
  1200.      if (MyOperation == NULL) 
  1201.         error_handler( MyTransaction->getNdbErrorString());
  1202.        
  1203.      check = MyOperation->readTuple();
  1204.      if( check == -1 ) 
  1205.         error_handler( MyTransaction->getNdbErrorString());
  1206.      check = MyOperation->equal( attrName[0],(char*)&pkValue[count] );
  1207.      if( check == -1 ) 
  1208.         error_handler( MyTransaction->getNdbErrorString());
  1209.      for (count_attributes = 1; count_attributes < MAXATTR; count_attributes++)
  1210.      {
  1211.         tTmp = MyOperation->getValue( (char*)attrName[count_attributes], (char*)&readValue[count_attributes] );
  1212.         if( tTmp == NULL ) 
  1213.            error_handler( MyTransaction->getNdbErrorString());
  1214.       }
  1215.       if( MyTransaction->execute( Commit ) == -1 ) 
  1216.          error_handler(MyTransaction->getNdbErrorString());
  1217.       else
  1218.       {
  1219. // Check value in db against value in mem     
  1220. //ndbout << readValue[1] << " == " << attrValue[count] << endl;
  1221.            
  1222.    if ( readValue[1]!=attrValue[count] )
  1223.              error_handler("Verification error!");
  1224.            else
  1225.    if ( readValue[2]!=attrValue[count] )
  1226.              error_handler("Verification error!");
  1227.            else
  1228.    if ( readValue[3]!=attrValue[count] )
  1229.              error_handler("Verification error!");
  1230.            else
  1231.    {
  1232.      ;//ndbout << ".";
  1233.    }
  1234. }
  1235.         pMyNdb->closeTransaction(MyTransaction);
  1236.     }
  1237.    ndbout << "OK" << endl;
  1238.   return;
  1239.  
  1240. };
  1241. static void
  1242. setAttrNames()
  1243. {
  1244.   int i;
  1245.   for (i = 0; i < MAXATTR ; i++)
  1246.   {
  1247.     sprintf(&attrName[i][0], "Col%d", i);
  1248.   }
  1249. }
  1250. static void
  1251. setTableNames()
  1252. {
  1253.   int i;
  1254.   sprintf(&tableName[0][0], "SBMCALL", 0);
  1255.   sprintf(&tableName[1][0], "RPACCT", 0);
  1256.   sprintf(&tableName[2][0], "IPACCT", 0);
  1257.   sprintf(&tableName[3][0], "TODACCT", 0);
  1258. }
  1259. bool error_handler2(const char* error_string, int error_int) {
  1260.   failed++ ;
  1261.   ndbout << error_string << endl ;
  1262.   if ( 4008==error_int || 721==error_int || 266==error_int ){
  1263.     ndbout << endl << "Attempting to recover and continue now..." << endl ;
  1264.     return true ; // return true to retry
  1265.   }
  1266.   return false ; // return false to abort
  1267. }