summaryrefslogtreecommitdiff
path: root/storage/ndb/test/newtonapi/basic_test/basic/basic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/test/newtonapi/basic_test/basic/basic.cpp')
-rw-r--r--storage/ndb/test/newtonapi/basic_test/basic/basic.cpp321
1 files changed, 321 insertions, 0 deletions
diff --git a/storage/ndb/test/newtonapi/basic_test/basic/basic.cpp b/storage/ndb/test/newtonapi/basic_test/basic/basic.cpp
new file mode 100644
index 00000000000..bc33400078d
--- /dev/null
+++ b/storage/ndb/test/newtonapi/basic_test/basic/basic.cpp
@@ -0,0 +1,321 @@
+/* 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 */
+
+
+
+/****** THIS LINE IS 80 CHARACTERS WIDE - DO *NOT* EXCEED 80 CHARACTERS! ****/
+extern "C" {
+#include <dba.h>
+}
+
+#include "common.hpp"
+
+#include <NdbOut.hpp>
+#include <NdbSleep.h>
+#include <NdbMain.h>
+
+static const
+DBA_ColumnDesc_t EmpColDesc[] = {
+ { "emp_no", DBA_INT, PCN_SIZE_OF( Employee, EmpNo ), PCN_TRUE },
+ { "first_name", DBA_CHAR, PCN_SIZE_OF( Employee, FirstName ), PCN_FALSE },
+ { "last_name", DBA_CHAR, PCN_SIZE_OF( Employee, LastName ), PCN_FALSE }
+};
+
+static const
+DBA_ColumnDesc_t AddColDesc[] = {
+ { "emp_no", DBA_INT, PCN_SIZE_OF( Address, EmpNo ), PCN_TRUE },
+ { "street_name", DBA_CHAR, PCN_SIZE_OF( Address, StreetName ), PCN_FALSE},
+ { "street_no", DBA_INT, PCN_SIZE_OF( Address, StreetNo ), PCN_FALSE},
+ { "city", DBA_CHAR, PCN_SIZE_OF( Address, City ), PCN_FALSE}
+} ;
+
+static const
+DBA_ColumnBinding_t EmpBindings[] = {
+ DBA_BINDING( "emp_no", DBA_INT, Employee, EmpNo ),
+ DBA_BINDING( "last_name", DBA_CHAR, Employee, LastName ),
+ DBA_BINDING( "first_name", DBA_CHAR, Employee, FirstName)
+};
+
+static const
+DBA_ColumnBinding_t AddBindings[] = {
+ DBA_BINDING( "emp_no", DBA_INT, Address, EmpNo ),
+ DBA_BINDING( "street_name", DBA_CHAR, Address, StreetName ),
+ DBA_BINDING( "street_no", DBA_INT, Address, StreetNo ),
+ DBA_BINDING( "city", DBA_CHAR, Address, City )
+};
+
+static DBA_Binding_t * EmpB;
+static DBA_Binding_t * AddB;
+
+static const int Rows = 6;
+
+static
+Employee_t EMP_TABLE_DATA[] = {
+ { 1242, "Joe", "Dalton" },
+ { 123, "Lucky", "Luke" },
+ { 456, "Averell", "Dalton" },
+ { 8976, "Gaston", "Lagaffe" },
+ { 1122, "Jolly", "Jumper" },
+ { 3211, "Leffe", "Pagrotsky" }
+};
+
+static
+Employee_t EMP_TABLE_DATA_READ[] = {
+ { 1242, "", "" },
+ { 123, "", "" },
+ { 456, "", "" },
+ { 8976, "", "" },
+ { 1122, "", "" },
+ { 3211, "", "" }
+};
+
+static
+Address_t ADD_TABLE_DATA[] = {
+ { 1242, "Lonesome Street", 12, "Crime Town" },
+ { 123, "Pistol Road", 13, "Fort Mount" },
+ { 456, "Banking Blv.", 43, "Las Vegas" },
+ { 8976, "ChancylleZee", 54, "Paris" },
+ { 1122, "Lucky", 111, "Wild West" },
+ { 3211, "Parlament St.", 11, "Stockholm" }
+};
+
+static
+Address_t ADD_TABLE_DATA_READ[] = {
+ { 1242, "", 0, "" },
+ { 123, "", 0, "" },
+ { 456, "", 0, "" },
+ { 8976, "", 0, "" },
+ { 1122, "", 0, "" },
+ { 3211, "", 0, "" }
+};
+
+static const char EMP_TABLE[] = "employees";
+static const char ADD_TABLE[] = "addresses";
+
+static const int EmpNbCol = 3;
+static const int AddNbCol = 4;
+
+static
+void
+DbCreate(void){
+
+ ndbout << "Opening database" << endl;
+ require( DBA_Open() == DBA_NO_ERROR );
+
+ ndbout << "Creating tables" << endl;
+ require( DBA_CreateTable( EMP_TABLE, EmpNbCol, EmpColDesc ) == DBA_NO_ERROR );
+ require( DBA_CreateTable( ADD_TABLE, AddNbCol, AddColDesc ) == DBA_NO_ERROR );
+
+ ndbout << "Checking for table existance" << endl;
+ require( DBA_TableExists( EMP_TABLE ) );
+ require( DBA_TableExists( ADD_TABLE ) );
+}
+
+static
+void
+CreateBindings(void){
+ ndbout << "Creating bindings" << endl;
+
+ EmpB = DBA_CreateBinding(EMP_TABLE,
+ EmpNbCol,
+ EmpBindings,
+ sizeof(Employee_t) );
+ require(EmpB != 0);
+
+ AddB = DBA_CreateBinding(ADD_TABLE,
+ AddNbCol,
+ AddBindings,
+ sizeof(Address_t) );
+ require(AddB != 0);
+}
+
+extern "C" {
+ static void insertCallback( DBA_ReqId_t, DBA_Error_t, DBA_ErrorCode_t );
+ static void deleteCallback( DBA_ReqId_t, DBA_Error_t, DBA_ErrorCode_t );
+ static void updateCallback( DBA_ReqId_t, DBA_Error_t, DBA_ErrorCode_t );
+ static void readCallback ( DBA_ReqId_t, DBA_Error_t, DBA_ErrorCode_t );
+ static void writeCallback ( DBA_ReqId_t, DBA_Error_t, DBA_ErrorCode_t );
+}
+
+static
+void BasicArray(){
+ ndbout << "Testing basic array operations" << endl;
+
+ // Basic insert
+ DBA_ArrayInsertRows(EmpB, EMP_TABLE_DATA, Rows-2, insertCallback);
+ NdbSleep_SecSleep(1);
+ DBA_ArrayReadRows(EmpB, EMP_TABLE_DATA_READ, Rows-2, readCallback);
+ NdbSleep_SecSleep(1);
+ CompareRows(EMP_TABLE_DATA, Rows-2, EMP_TABLE_DATA_READ);
+
+ // Basic update
+ AlterRows(EMP_TABLE_DATA, Rows-2);
+ DBA_ArrayUpdateRows(EmpB, EMP_TABLE_DATA, Rows-2, updateCallback);
+ NdbSleep_SecSleep(1);
+ DBA_ArrayReadRows(EmpB, EMP_TABLE_DATA_READ, Rows-2, readCallback);
+ NdbSleep_SecSleep(1);
+ CompareRows(EMP_TABLE_DATA, Rows-2, EMP_TABLE_DATA_READ);
+
+ // Basic write
+ AlterRows(EMP_TABLE_DATA, Rows);
+ DBA_ArrayWriteRows(EmpB, EMP_TABLE_DATA, Rows, writeCallback);
+ NdbSleep_SecSleep(1);
+ DBA_ArrayReadRows(EmpB, EMP_TABLE_DATA_READ, Rows, readCallback);
+ NdbSleep_SecSleep(1);
+ CompareRows(EMP_TABLE_DATA, Rows, EMP_TABLE_DATA_READ);
+
+ // Basic delete
+ DBA_ArrayDeleteRows(EmpB, EMP_TABLE_DATA, Rows, deleteCallback);
+ NdbSleep_SecSleep(1);
+}
+
+static
+void Multi(){
+ ndbout << "Testing multi operations" << endl;
+
+ const int R2 = Rows + Rows;
+
+ DBA_Binding_t * Bindings[R2];
+ void * DATA[R2];
+ void * DATA_READ[R2];
+ for(int i = 0; i<Rows; i++){
+ Bindings[2*i] = EmpB;
+ Bindings[2*i+1] = AddB;
+
+ DATA[2*i] = &EMP_TABLE_DATA[i];
+ DATA[2*i+1] = &ADD_TABLE_DATA[i];
+
+ DATA_READ[2*i] = &EMP_TABLE_DATA_READ[i];
+ DATA_READ[2*i+1] = &ADD_TABLE_DATA_READ[i];
+ }
+
+ // Basic insert
+ DBA_MultiInsertRow(Bindings, DATA, R2-4, insertCallback);
+ NdbSleep_SecSleep(1);
+ DBA_MultiReadRow (Bindings, DATA_READ, R2-4, readCallback);
+ NdbSleep_SecSleep(1);
+
+ CompareRows(EMP_TABLE_DATA, Rows-2, EMP_TABLE_DATA_READ);
+ CompareRows(ADD_TABLE_DATA, Rows-2, ADD_TABLE_DATA_READ);
+
+ // Basic update
+ AlterRows(EMP_TABLE_DATA, Rows-2);
+ AlterRows(ADD_TABLE_DATA, Rows-2);
+ DBA_MultiUpdateRow(Bindings, DATA, R2-4, updateCallback);
+ NdbSleep_SecSleep(1);
+ DBA_MultiReadRow (Bindings, DATA_READ, R2-4, readCallback);
+ NdbSleep_SecSleep(1);
+ CompareRows(EMP_TABLE_DATA, Rows-2, EMP_TABLE_DATA_READ);
+ CompareRows(ADD_TABLE_DATA, Rows-2, ADD_TABLE_DATA_READ);
+
+ // Basic write
+ AlterRows(EMP_TABLE_DATA, Rows);
+ AlterRows(ADD_TABLE_DATA, Rows);
+ DBA_MultiWriteRow(Bindings, DATA, R2, writeCallback);
+ NdbSleep_SecSleep(1);
+ DBA_MultiReadRow (Bindings, DATA_READ, R2, readCallback);
+ NdbSleep_SecSleep(1);
+ CompareRows(EMP_TABLE_DATA, Rows, EMP_TABLE_DATA_READ);
+ CompareRows(ADD_TABLE_DATA, Rows, ADD_TABLE_DATA_READ);
+
+ // Basic delete
+ DBA_MultiDeleteRow(Bindings, DATA, R2, deleteCallback);
+ NdbSleep_SecSleep(1);
+}
+
+static
+void BasicPtr(){
+ ndbout << "Testing array of pointer operations" << endl;
+ Employee_t * EmpData[Rows];
+ Employee_t * EmpDataRead[Rows];
+ for(int i = 0; i<Rows; i++){
+ EmpData[i] = &EMP_TABLE_DATA[i];
+ EmpDataRead[i] = &EMP_TABLE_DATA_READ[i];
+ }
+
+ void * const * EMP_TABLE_DATA2 = (void * const *)EmpData;
+ void * const * EMP_TABLE_DATA_READ2 = (void * const *)EmpDataRead;
+
+ // Basic insert
+ DBA_InsertRows(EmpB, EMP_TABLE_DATA2, Rows-2, insertCallback);
+ NdbSleep_SecSleep(1);
+ DBA_ReadRows (EmpB, EMP_TABLE_DATA_READ2, Rows-2, readCallback);
+ NdbSleep_SecSleep(1);
+ CompareRows(EMP_TABLE_DATA, Rows-2, EMP_TABLE_DATA_READ);
+
+ // Basic update
+ AlterRows(EMP_TABLE_DATA, Rows-2);
+ DBA_UpdateRows(EmpB, EMP_TABLE_DATA2, Rows-2, updateCallback);
+ NdbSleep_SecSleep(1);
+ DBA_ReadRows (EmpB, EMP_TABLE_DATA_READ2, Rows-2, readCallback);
+ NdbSleep_SecSleep(1);
+ CompareRows(EMP_TABLE_DATA, Rows-2, EMP_TABLE_DATA_READ);
+
+ // Basic write
+ AlterRows (EMP_TABLE_DATA, Rows);
+ DBA_WriteRows(EmpB, EMP_TABLE_DATA2, Rows, writeCallback);
+ NdbSleep_SecSleep(1);
+ DBA_ReadRows (EmpB, EMP_TABLE_DATA_READ2, Rows, readCallback);
+ NdbSleep_SecSleep(1);
+ CompareRows(EMP_TABLE_DATA, Rows, EMP_TABLE_DATA_READ);
+
+ // Basic delete
+ DBA_DeleteRows(EmpB, EMP_TABLE_DATA2, Rows, deleteCallback);
+ NdbSleep_SecSleep(1);
+}
+
+/*---------------------------------------------------------------------------*/
+NDB_COMMAND(newton_basic, "newton_basic",
+ "newton_basic", "newton_basic", 65535){
+
+ DbCreate();
+ CreateBindings();
+
+ BasicArray();
+ BasicPtr();
+ Multi();
+
+ DBA_Close();
+
+ return 0;
+}
+
+
+
+/**
+ * callbackStatusCheck checks whether or not the operation succeeded
+ */
+void
+callbackStatusCheck( DBA_Error_t status, const char* operation) {
+ ndbout_c("%s: %d", operation, status);
+}
+
+void insertCallback( DBA_ReqId_t, DBA_Error_t s, DBA_ErrorCode_t ){
+ callbackStatusCheck(s, "insert");
+}
+void deleteCallback( DBA_ReqId_t, DBA_Error_t s, DBA_ErrorCode_t ){
+ callbackStatusCheck(s, "delete");
+}
+void updateCallback( DBA_ReqId_t, DBA_Error_t s, DBA_ErrorCode_t ){
+ callbackStatusCheck(s, "update");
+}
+void readCallback ( DBA_ReqId_t, DBA_Error_t s, DBA_ErrorCode_t ){
+ callbackStatusCheck(s, "read");
+}
+void writeCallback ( DBA_ReqId_t, DBA_Error_t s, DBA_ErrorCode_t ){
+ callbackStatusCheck(s, "write");
+}
+