basic.cpp
来自「MySQL数据库开发源码 值得一看哦」· C++ 代码 · 共 322 行
CPP
322 行
/* 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 constDBA_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 constDBA_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 constDBA_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 constDBA_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;staticEmployee_t EMP_TABLE_DATA[] = { { 1242, "Joe", "Dalton" }, { 123, "Lucky", "Luke" }, { 456, "Averell", "Dalton" }, { 8976, "Gaston", "Lagaffe" }, { 1122, "Jolly", "Jumper" }, { 3211, "Leffe", "Pagrotsky" }};staticEmployee_t EMP_TABLE_DATA_READ[] = { { 1242, "", "" }, { 123, "", "" }, { 456, "", "" }, { 8976, "", "" }, { 1122, "", "" }, { 3211, "", "" }};staticAddress_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" }};staticAddress_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;staticvoid 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 ) );} staticvoidCreateBindings(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 );}staticvoid 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);}staticvoid 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);}staticvoid 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 */voidcallbackStatusCheck( 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");}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?