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 + -
显示快捷键?