/*************************************************************************\ ** source * soliddb.c ** * ** description * Solid Accelerator usage sample ** * \*************************************************************************/ /* Common system headers */ #ifdef SS_UNIX #include "sqlunix.h" #else #include #endif #include #include #include #include /* Solid Server API */ /* Solid Accelerator header*/ #include "sscapi.h" #if defined(SS_NT) #ifndef SS_CDECL #define SS_CDECL __cdecl #endif #elif defined(SS_VXW) #define SS_CDECL #define main embed_main #else # define SS_CDECL #endif /* MS SQL API headers */ #include #include #include /* Solid portabilty header */ //#include "c.h" /* Constant definitions */ #define COUNT1 256 #define COUNT3 512 #define COUNT4 1024 #ifdef SS_CRX #define MAXCOLS 100 #else //#define MAXCOLS 1000 #define MAXCOLS 100 //WLP : I have to reduce it to 100 to avoid crash. #endif #define DATALEN 1048 #define MAX_NAME_LEN 80 #define WLP_USING_STORED_PROCEDURE #ifdef WLP_USING_STORED_PROCEDURE //#undef WLP_USING_STORED_PROCEDURE //if you comment this line out: yes, it uses. #endif #define WLP_HAS_SEPARATE_COMMIT #ifdef WLP_HAS_SEPARATE_COMMIT //#undef WLP_HAS_SEPARATE_COMMIT //if you comment this line out: yes, it has. #endif /* Utility macro for error handling */ #define CHECK(r, hstmt) \ if ( ((r) != SQL_SUCCESS) && ((r) != SQL_SUCCESS_WITH_INFO) ) \ print_error(r, SQL_HANDLE_STMT,hstmt); \ assert( ((r) == SQL_SUCCESS) || ((r) == SQL_SUCCESS_WITH_INFO) ) #define CHECKDbc(r, hdbc) \ if ( ((r) != SQL_SUCCESS) && ((r) != SQL_SUCCESS_WITH_INFO) ) \ print_error(r, SQL_HANDLE_DBC,hdbc); \ assert( ((r) == SQL_SUCCESS) || ((r) == SQL_SUCCESS_WITH_INFO) ) #define CHECKEnv(r, henv) \ if ( ((r) != SQL_SUCCESS) && ((r) != SQL_SUCCESS_WITH_INFO) ) \ print_error(r, SQL_HANDLE_ENV,henv); \ assert( ((r) == SQL_SUCCESS) || ((r) == SQL_SUCCESS_WITH_INFO) ) #ifndef WLP_USING_STORED_PROCEDURE /* Connecting to datasource */ #define Connect(henv, hdbc, hstmt, sname, uname, pwd) {\ SQLRETURN r;\ r = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);\ CHECKEnv(r, henv);\ r = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, SQL_NTS);\ CHECKEnv(r, henv);\ r = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);\ CHECKDbc(r, hdbc);\ r = SQLConnect(hdbc, sname, SQL_NTS, uname, SQL_NTS, pwd, SQL_NTS);\ CHECKDbc(r, hdbc);\ SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, com, SQL_IS_INTEGER);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del1);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del2);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del3);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del4);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del5);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del6);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del7);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del8);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins1);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins2);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins3);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins4);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins5);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins6);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins7);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins8);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_upd1);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_upd2);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_upd3);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_upd4);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_upd5);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_upd6);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_upd7);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_upd8);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins);\ CHECKDbc(r, hdbc);\ } #else /* Connecting to datasource */ #define Connect(henv, hdbc, hstmt, sname, uname, pwd) {\ SQLRETURN r;\ r = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);\ CHECKEnv(r, henv);\ r = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, SQL_NTS);\ CHECKEnv(r, henv);\ r = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);\ CHECKDbc(r, hdbc);\ r = SQLConnect(hdbc, sname, SQL_NTS, uname, SQL_NTS, pwd, SQL_NTS);\ CHECKDbc(r, hdbc);\ SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, com, SQL_IS_INTEGER);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del1);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del2);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del3);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del4);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del5);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del6);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del7);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_del8);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins1);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins2);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins3);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins4);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins5);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins6);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins7);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins8);\ CHECKDbc(r, hdbc);\ r = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt_ins);\ CHECKDbc(r, hdbc);\ } #endif #define MAX_DATA_SIZE 512*3 // the maximum data size #define MAX_KEY_SIZE 32 #define DATA_SIZE_OFFSET 4 #define KEY_OFFSET 32 #define KEY_SIZE_OFFSET 28 /* Global variables */ SQLHDBC hdbc; SQLHENV henv; SQLHSTMT hstmt, hstmt_ins; SQLHSTMT hstmt_del1, hstmt_del2, hstmt_del3, hstmt_del4; SQLHSTMT hstmt_del5, hstmt_del6, hstmt_del7, hstmt_del8; #ifndef WLP_USING_STORED_PROCEDURE SQLHSTMT hstmt_upd1, hstmt_upd2, hstmt_upd3, hstmt_upd4; SQLHSTMT hstmt_upd5, hstmt_upd6, hstmt_upd7, hstmt_upd8; #endif SQLHSTMT hstmt_ins1, hstmt_ins2, hstmt_ins3, hstmt_ins4; SQLHSTMT hstmt_ins5, hstmt_ins6, hstmt_ins7, hstmt_ins8; char * masterat = ""; //for local server. char * username = "dba"; char * password = "dba"; SQLPOINTER com = SQL_AUTOCOMMIT_OFF; SscServerT hh; /*============================================================= Function Name : print_error() Purpose : to print the error messages Parameters : rc : Return code handle_type : Handle type identifier handle : handle Returns : none ==============================================================*/ static void print_error(SQLRETURN rc, SQLSMALLINT handle_type,SQLHANDLE handle) { SQLCHAR SQLstate[MAX_NAME_LEN]; SQLINTEGER errorcode; SQLCHAR errormsg[SQL_MAX_MESSAGE_LENGTH]; SQLSMALLINT msglen; SQLRETURN r; printf("Error (%d) encountered!\n", rc); /* Print more error info, if available */ r = SQLGetDiagRec(handle_type,handle,1,(SQLCHAR *)SQLstate, (SQLINTEGER *)&errorcode, (SQLCHAR *)errormsg, SQL_MAX_MESSAGE_LENGTH - 1, &msglen); if (r != SQL_NO_DATA_FOUND) { printf("%s\n", errormsg); } } /*============================================================= Function Name : commit() Purpose : to commit the transactions Parameters : handleType : Handle type identifier handle : handle Returns : none ==============================================================*/ void commit(SQLSMALLINT handleType, SQLHANDLE handle) { SQLRETURN r; r = SQLEndTran(handleType, handle, SQL_COMMIT); CHECKDbc( r, handle); } /*============================================================= Function Name : sql_execute() Purpose : to execute the query Parameters : hstmt : Statement Handle sql : query to be executed cbsql : Length of query Returns : none ==============================================================*/ static int sql_execute(SQLHSTMT hstmt, SQLCHAR *sql, SQLINTEGER cbsql) { SQLRETURN rc,rc1,rc2; SQLSMALLINT ColCount=0; SQLCHAR ColName[COUNT3]={0}; SQLINTEGER Len[MAXCOLS]={0}; SQLCHAR Data[MAXCOLS][DATALEN]={0}; SQLINTEGER i=0,RowCount=0; SQLSMALLINT iCol = 0; assert(sql); printf("%s\n", sql); rc = SQLExecDirect(hstmt, sql, cbsql); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLNumResultCols(hstmt, &ColCount); if(ColCount > 0) { for (i = 0; i < ColCount; i++) { iCol = i+1; rc1 = SQLDescribeCol(hstmt, iCol,ColName, sizeof(ColName), NULL,NULL,NULL,NULL,NULL); assert(rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO); //printf("%s\t", ColName); rc1 = SQLBindCol( hstmt,iCol,SQL_C_BINARY, Data[iCol-1], sizeof(Data[iCol-1]), &Len[iCol-1] ); } printf("%s","\n"); rc2 = SQLFetch(hstmt); while ( rc2 != SQL_NO_DATA_FOUND && rc2 != SQL_ERROR) { RowCount++; for (i = 0; i < ColCount; i++) { if(Len[i] == SQL_NULL_DATA) { strcpy((char *)Data[i],"NULL"); } /** printf("%s\t",Data[i]); **/ } printf("%s","\n"); rc2 = SQLFetch(hstmt); } SQLFreeStmt(hstmt, SQL_RESET_PARAMS); //WLP: this line seems to unbind the buffer with each column. SQLFreeStmt(hstmt, SQL_UNBIND); SQLFreeStmt(hstmt, SQL_CLOSE); } } return(rc); } /*============================================================= Function Name : Disconnect() Purpose : to free the handles Parameters : henv : Environment handle hdbc : Connection Handle hstmt : Statement Handle Returns : Boolean ==============================================================*/ void Disconnect(SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt) { SQLFreeHandle(SQL_HANDLE_STMT, hstmt); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_del1); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_del2); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_del3); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_del4); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_del5); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_del6); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_del7); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_del8); #ifndef WLP_USING_STORED_PROCEDURE SQLFreeHandle(SQL_HANDLE_STMT, hstmt_upd1); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_upd2); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_upd3); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_upd4); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_upd5); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_upd6); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_upd7); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_upd8); #endif SQLFreeHandle(SQL_HANDLE_STMT, hstmt_ins1); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_ins2); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_ins3); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_ins4); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_ins5); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_ins6); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_ins7); SQLFreeHandle(SQL_HANDLE_STMT, hstmt_ins8); SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); } int SS_CDECL createTable(char *file) { SQLRETURN r; bool b1 = true;//TRUE; SQLRETURN rc,rc1,rc2; SQLSMALLINT ColCount=0; SQLCHAR ColName[COUNT3]={0}; SQLINTEGER Len[MAXCOLS]={0}; SQLCHAR Data[MAXCOLS][DATALEN]={0}; SQLINTEGER i=0,RowCount=0; SQLSMALLINT iCol = 0; char statement_create[250]; /* check existence of table */ if(strstr(file, "db_tier1")!=NULL) { rc = SQLExecDirect( hstmt, (unsigned char*)"select table_name from sys_tables where table_name ='STM_TAB0001' ", SQL_NTS); sprintf(statement_create, "CREATE TABLE stm_tab0001(key1 INTEGER NOT NULL, key2 INTEGER NOT NULL, key3 INTEGER NOT NULL, key4 INTEGER NOT NULL, key5 INTEGER NOT NULL, key6 INTEGER NOT NULL, keysize INTEGER, datasize INTEGER, x VARBINARY(32), y VARBINARY(1024), primary key (key1, key2, key3, key4, key5) )", SQL_NTS); } else if(strstr(file, "db_tier2")!=NULL) { rc = SQLExecDirect( hstmt, (unsigned char*)"select table_name from sys_tables where table_name ='STM_TAB0002' ", SQL_NTS); sprintf(statement_create, "CREATE TABLE stm_tab0002(key1 INTEGER NOT NULL, key2 INTEGER NOT NULL, key3 INTEGER NOT NULL, key4 INTEGER NOT NULL, key5 INTEGER NOT NULL, key6 INTEGER NOT NULL, keysize INTEGER, datasize INTEGER, x VARBINARY(32), y VARBINARY(1024), primary key (key1, key2, key3, key4, key5) )", SQL_NTS); } else if(strstr(file, "db_tier3")!=NULL) { rc = SQLExecDirect( hstmt, (unsigned char*)"select table_name from sys_tables where table_name ='STM_TAB0003' ", SQL_NTS); sprintf(statement_create, "CREATE TABLE stm_tab0003(key1 INTEGER NOT NULL, key2 INTEGER NOT NULL, key3 INTEGER NOT NULL, key4 INTEGER NOT NULL, key5 INTEGER NOT NULL, key6 INTEGER NOT NULL, keysize INTEGER, datasize INTEGER, x VARBINARY(32), y VARBINARY(1024), primary key (key1, key2, key3, key4, key5) )", SQL_NTS); } else if(strstr(file, "db_tier4")!=NULL) { rc = SQLExecDirect( hstmt, (unsigned char*)"select table_name from sys_tables where table_name ='STM_TAB0004' ", SQL_NTS); sprintf(statement_create, "CREATE TABLE stm_tab0004(key1 INTEGER NOT NULL, key2 INTEGER NOT NULL, key3 INTEGER NOT NULL, key4 INTEGER NOT NULL, key5 INTEGER NOT NULL, key6 INTEGER NOT NULL, keysize INTEGER, datasize INTEGER, x VARBINARY(32), y VARBINARY(1024), primary key (key1, key2, key3, key4, key5) )", SQL_NTS); } else if(strstr(file, "db_tier5")!=NULL) { rc = SQLExecDirect( hstmt, (unsigned char*)"select table_name from sys_tables where table_name ='STM_TAB0005' ", SQL_NTS); sprintf(statement_create, "CREATE TABLE stm_tab0005(key1 INTEGER NOT NULL, key2 INTEGER NOT NULL, key3 INTEGER NOT NULL, key4 INTEGER NOT NULL, key5 INTEGER NOT NULL, key6 INTEGER NOT NULL, keysize INTEGER, datasize INTEGER, x VARBINARY(32), y VARBINARY(1024), primary key (key1, key2, key3, key4, key5) )", SQL_NTS); } else if(strstr(file, "db_tier6")!=NULL) { rc = SQLExecDirect( hstmt, (unsigned char*)"select table_name from sys_tables where table_name ='STM_TAB0006' ", SQL_NTS); sprintf(statement_create, "CREATE TABLE stm_tab0006(key1 INTEGER NOT NULL, key2 INTEGER NOT NULL, key3 INTEGER NOT NULL, key4 INTEGER NOT NULL, key5 INTEGER NOT NULL, key6 INTEGER NOT NULL, keysize INTEGER, datasize INTEGER, x VARBINARY(32), y VARBINARY(1024), primary key (key1, key2, key3, key4, key5) )", SQL_NTS); } else if(strstr(file, "db_tier7")!=NULL) { rc = SQLExecDirect( hstmt, (unsigned char*)"select table_name from sys_tables where table_name ='STM_TAB0007' ", SQL_NTS); sprintf(statement_create, "CREATE TABLE stm_tab0007(key1 INTEGER NOT NULL, key2 INTEGER NOT NULL, key3 INTEGER NOT NULL, key4 INTEGER NOT NULL, key5 INTEGER NOT NULL, key6 INTEGER NOT NULL, keysize INTEGER, datasize INTEGER, x VARBINARY(32), y VARBINARY(1024), primary key (key1, key2, key3, key4, key5) )", SQL_NTS); } else if(strstr(file, "db_tier8")!=NULL) { rc = SQLExecDirect( hstmt, (unsigned char*)"select table_name from sys_tables where table_name ='STM_TAB0008' ", SQL_NTS); sprintf(statement_create, "CREATE TABLE stm_tab0008(key1 INTEGER NOT NULL, key2 INTEGER NOT NULL, key3 INTEGER NOT NULL, key4 INTEGER NOT NULL, key5 INTEGER NOT NULL, key6 INTEGER NOT NULL, keysize INTEGER, datasize INTEGER, x VARBINARY(32), y VARBINARY(1024), primary key (key1, key2, key3, key4, key5) )", SQL_NTS); } if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { //printf("check table existence, rc ok.\n"); rc1 = SQLNumResultCols(hstmt, &ColCount); if(ColCount > 0) { for (i = 0; i < ColCount; i++) { iCol = i+1; rc1 = SQLDescribeCol(hstmt, iCol,ColName, sizeof(ColName), NULL,NULL,NULL,NULL,NULL); assert(rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO); //printf("%s\t", ColName); rc1 = SQLBindCol( hstmt,iCol,SQL_C_BINARY, Data[iCol-1], sizeof(Data[iCol-1]), &Len[iCol-1] ); } //printf("%s","\n"); rc2 = SQLFetch(hstmt); while ( rc2 != SQL_NO_DATA_FOUND && rc2 != SQL_ERROR) { //printf("check table existence, rc ok, has row.\n"); RowCount++; for (i = 0; i < ColCount; i++) { if(Len[i] == SQL_NULL_DATA) { strcpy((char *)Data[i],"NULL"); } //printf("%s\t",Data[i]); } //printf("%s","\n"); rc2 = SQLFetch(hstmt); } SQLFreeStmt(hstmt, SQL_RESET_PARAMS); //WLP: this line seems to unbind the buffer with each column. SQLFreeStmt(hstmt, SQL_UNBIND); SQLFreeStmt(hstmt, SQL_CLOSE); } } r = rc; CHECK( r, hstmt); commit(SQL_HANDLE_DBC, hdbc); CHECKDbc( r, hdbc); if(RowCount == 0) { //printf("need to create table.\n"); /* Create table */ //printf("going to create table for %s.\n", file); //use 1024 instead of PBLKSIZ for now. r = sql_execute(hstmt, (unsigned char *)statement_create , SQL_NTS); CHECK( r, hstmt); commit(SQL_HANDLE_DBC, hdbc); CHECKDbc( r, hdbc); } return 0; } #include "ndbm.h" DBM *dbm_open(char *file, int flags, int mode) { int ret; int argc = 4; char * argv[4]; //int argc = 5; //char * argv[5]; argv[0] = ""; argv[1] = "-UDBA"; argv[2] = "-PDBA"; argv[3] = "-CDBA"; //argv[4] = "-m"; SscServerT h = SSCGetServerHandle(); //printf("100 open...\n"); if(h == NULL || SSCIsRunning(h)==0 ) //server is not running. { //printf("110 open...\n"); /* Start the server and serve the clients */ if ( ret = SSCStartServer(argc, argv, &h, SSC_STATE_OPEN) == SSC_SUCCESS) { printf("120 open...\n"); /**** while (SSCAdvanceTasks(h, 1000) != SSC_SERVER_NOTRUNNING) { //printf("130 open...\n"); ; } ****/ } else { printf("Could not start server! Exiting...\n"); return (DBM*) NULL; } assert(ret==true); } DBM *db; h = SSCGetServerHandle(); //printf("140 open...\n"); if(h != NULL && SSCIsRunning(h) ) { //printf("150 open...\n"); /* Connect to the master server */ Connect(henv, hdbc, hstmt, (unsigned char*)masterat, (unsigned char*)username, (unsigned char*)password) createTable(file); db = new DBM; if(strstr(file, "db_tier1")!=NULL) db->dbm_pagf = 1; else if(strstr(file, "db_tier2")!=NULL) db->dbm_pagf = 2; else if(strstr(file, "db_tier3")!=NULL) db->dbm_pagf = 3; else if(strstr(file, "db_tier4")!=NULL) db->dbm_pagf = 4; else if(strstr(file, "db_tier5")!=NULL) db->dbm_pagf = 5; else if(strstr(file, "db_tier6")!=NULL) db->dbm_pagf = 6; else if(strstr(file, "db_tier7")!=NULL) db->dbm_pagf = 7; else if(strstr(file, "db_tier8")!=NULL) db->dbm_pagf = 8; } else { printf("failed to connect!\n"); exit(0); } //check stored procedures //create stored procedures if neccesary. Impossible? printf("199 open...\n"); return db; } void dbm_close(DBM *db) { /* Disconnect from the server */ Disconnect(henv, hdbc, hstmt); SscServerT h = SSCGetServerHandle(); if(h != NULL ) { if (SSCStopServer(h, true) == SSC_SUCCESS) { printf("db stopped.\n"); } else { printf("db failed to stop!\n"); } } } int dkey_1, dkey_2, dkey_3, dkey_4, dkey_5, dkey_6; int del_bind=0, upd_bind=0, ins_bind=0; int dbm_delete(DBM *db, datum arg_key) { SQLRETURN r; SQLCHAR key_buf[MAX_KEY_SIZE]; SQLINTEGER key_size; key_size = arg_key.dsize; dkey_1= dkey_2= dkey_3= dkey_4= dkey_5= dkey_6 = 0; union { int i; char c[4]; } temp; if( db->dbm_flags & _DBM_RDONLY) { printf("\n\t DBM is in read-only mode, can not delete any record.\n"); return -1; } memcpy(key_buf, arg_key.dptr, arg_key.dsize); //copy to my own memory; //so I will not affect outside memory pointed by arg_key.dptr SQLRETURN rc,rc1; SQLSMALLINT ColCount=0; SQLINTEGER i=0,RowCount=0; if( del_bind == 0) { del_bind = 1; //means already bound. printf("\n\n BIND DELETE STMT.\n\n"); #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_del1, (unsigned char*)"{ call delete_tab1(?, ?, ?, ?, ?, ?)}", SQL_NTS); #else rc = SQLPrepare(hstmt_del1, (SQLCHAR *) "DELETE FROM stm_tab0001 where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); #endif CHECK(rc, hstmt_del1); rc = SQLBindParameter(hstmt_del1, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_1, 0, NULL); CHECK(rc, hstmt_del1); rc = SQLBindParameter(hstmt_del1, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_2, 0, NULL); CHECK(rc, hstmt_del1); rc = SQLBindParameter(hstmt_del1, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_3, 0, NULL); CHECK(rc, hstmt_del1); rc = SQLBindParameter(hstmt_del1, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_4, 0, NULL); CHECK(rc, hstmt_del1); rc = SQLBindParameter(hstmt_del1, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_5, 0, NULL); CHECK(rc, hstmt_del1); rc = SQLBindParameter(hstmt_del1, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_6, 0, NULL); CHECK(rc, hstmt_del1); //2 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_del2, (unsigned char*)"{call delete_tab2(?, ?, ?, ?, ?, ?)}", SQL_NTS); #else rc = SQLPrepare(hstmt_del2, (SQLCHAR *) "DELETE FROM stm_tab0002 where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); #endif CHECK(rc, hstmt_del2); rc = SQLBindParameter(hstmt_del2, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_1, 0, NULL); CHECK(rc, hstmt_del2); rc = SQLBindParameter(hstmt_del2, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_2, 0, NULL); CHECK(rc, hstmt_del2); rc = SQLBindParameter(hstmt_del2, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_3, 0, NULL); CHECK(rc, hstmt_del2); rc = SQLBindParameter(hstmt_del2, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_4, 0, NULL); CHECK(rc, hstmt_del2); rc = SQLBindParameter(hstmt_del2, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_5, 0, NULL); CHECK(rc, hstmt_del2); rc = SQLBindParameter(hstmt_del2, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_6, 0, NULL); CHECK(rc, hstmt_del2); //3 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_del3, (unsigned char*)"call delete_tab3(?, ?, ?, ?, ?, ?)", SQL_NTS); #else rc = SQLPrepare(hstmt_del3, (SQLCHAR *) "DELETE FROM stm_tab0003 where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); #endif CHECK(rc, hstmt_del3); rc = SQLBindParameter(hstmt_del3, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_1, 0, NULL); CHECK(rc, hstmt_del3); rc = SQLBindParameter(hstmt_del3, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_2, 0, NULL); CHECK(rc, hstmt_del3); rc = SQLBindParameter(hstmt_del3, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_3, 0, NULL); CHECK(rc, hstmt_del3); rc = SQLBindParameter(hstmt_del3, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_4, 0, NULL); CHECK(rc, hstmt_del3); rc = SQLBindParameter(hstmt_del3, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_5, 0, NULL); CHECK(rc, hstmt_del3); rc = SQLBindParameter(hstmt_del3, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_6, 0, NULL); CHECK(rc, hstmt_del3); //4 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_del4, (unsigned char*)"call delete_tab4(?, ?, ?, ?, ?, ?)", SQL_NTS); #else rc = SQLPrepare(hstmt_del4, (SQLCHAR *) "DELETE FROM stm_tab0004 where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); #endif CHECK(rc, hstmt_del4); rc = SQLBindParameter(hstmt_del4, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_1, 0, NULL); CHECK(rc, hstmt_del4); rc = SQLBindParameter(hstmt_del4, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_2, 0, NULL); CHECK(rc, hstmt_del4); rc = SQLBindParameter(hstmt_del4, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_3, 0, NULL); CHECK(rc, hstmt_del4); rc = SQLBindParameter(hstmt_del4, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_4, 0, NULL); CHECK(rc, hstmt_del4); rc = SQLBindParameter(hstmt_del4, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_5, 0, NULL); CHECK(rc, hstmt_del4); rc = SQLBindParameter(hstmt_del4, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_6, 0, NULL); CHECK(rc, hstmt_del4); //5 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_del5, (unsigned char*)"call delete_tab5(?, ?, ?, ?, ?, ?)", SQL_NTS); #else rc = SQLPrepare(hstmt_del5, (SQLCHAR *) "DELETE FROM stm_tab0005 where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); #endif CHECK(rc, hstmt_del5); rc = SQLBindParameter(hstmt_del5, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_1, 0, NULL); CHECK(rc, hstmt_del5); rc = SQLBindParameter(hstmt_del5, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_2, 0, NULL); CHECK(rc, hstmt_del5); rc = SQLBindParameter(hstmt_del5, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_3, 0, NULL); CHECK(rc, hstmt_del5); rc = SQLBindParameter(hstmt_del5, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_4, 0, NULL); CHECK(rc, hstmt_del5); rc = SQLBindParameter(hstmt_del5, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_5, 0, NULL); CHECK(rc, hstmt_del5); rc = SQLBindParameter(hstmt_del5, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_6, 0, NULL); CHECK(rc, hstmt_del5); //6 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_del6, (unsigned char*)"{call delete_tab6(?, ?, ?, ?, ?, ?)}", SQL_NTS); #else rc = SQLPrepare(hstmt_del6, (SQLCHAR *) "DELETE FROM stm_tab0006 where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); #endif CHECK(rc, hstmt_del6); rc = SQLBindParameter(hstmt_del6, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_1, 0, NULL); CHECK(rc, hstmt_del6); rc = SQLBindParameter(hstmt_del6, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_2, 0, NULL); CHECK(rc, hstmt_del6); rc = SQLBindParameter(hstmt_del6, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_3, 0, NULL); CHECK(rc, hstmt_del6); rc = SQLBindParameter(hstmt_del6, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_4, 0, NULL); CHECK(rc, hstmt_del6); rc = SQLBindParameter(hstmt_del6, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_5, 0, NULL); CHECK(rc, hstmt_del6); rc = SQLBindParameter(hstmt_del6, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_6, 0, NULL); CHECK(rc, hstmt_del6); //7 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_del7, (unsigned char*)"{call delete_tab7(?, ?, ?, ?, ?, ?)}", SQL_NTS); #else rc = SQLPrepare(hstmt_del7, (SQLCHAR *) "DELETE FROM stm_tab0007 where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); #endif CHECK(rc, hstmt_del7); rc = SQLBindParameter(hstmt_del7, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_1, 0, NULL); CHECK(rc, hstmt_del7); rc = SQLBindParameter(hstmt_del7, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_2, 0, NULL); CHECK(rc, hstmt_del7); rc = SQLBindParameter(hstmt_del7, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_3, 0, NULL); CHECK(rc, hstmt_del7); rc = SQLBindParameter(hstmt_del7, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_4, 0, NULL); CHECK(rc, hstmt_del7); rc = SQLBindParameter(hstmt_del7, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_5, 0, NULL); CHECK(rc, hstmt_del7); rc = SQLBindParameter(hstmt_del7, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_6, 0, NULL); CHECK(rc, hstmt_del7); //8 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_del8, (unsigned char*)"{call delete_tab8(?, ?, ?, ?, ?, ?)}", SQL_NTS); #else rc = SQLPrepare(hstmt_del8, (SQLCHAR *) "DELETE FROM stm_tab0008 where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); #endif CHECK(rc, hstmt_del8); rc = SQLBindParameter(hstmt_del8, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_1, 0, NULL); CHECK(rc, hstmt_del8); rc = SQLBindParameter(hstmt_del8, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_2, 0, NULL); CHECK(rc, hstmt_del8); rc = SQLBindParameter(hstmt_del8, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_3, 0, NULL); CHECK(rc, hstmt_del8); rc = SQLBindParameter(hstmt_del8, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_4, 0, NULL); CHECK(rc, hstmt_del8); rc = SQLBindParameter(hstmt_del8, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_5, 0, NULL); CHECK(rc, hstmt_del8); rc = SQLBindParameter(hstmt_del8, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &dkey_6, 0, NULL); CHECK(rc, hstmt_del8); } temp.c[0] = arg_key.dptr[0]; temp.c[1] = arg_key.dptr[1]; temp.c[2] = arg_key.dptr[2]; temp.c[3] = arg_key.dptr[3]; dkey_1 = temp.i; memcpy((char*)&dkey_2, (char*)(&arg_key.dptr[4]) , 4); if(key_size>=12) dkey_3 = (int)(*((int *)(&arg_key.dptr[8])) ); if(key_size>=16) dkey_4 = (int)(*((int *)(&arg_key.dptr[12])) ); if(key_size>=20) dkey_5 = (int)(*((int *)(&arg_key.dptr[16])) ); if(key_size>=24) dkey_6 = (int)(*((int *)(&arg_key.dptr[20])) ); //printf("in delete, key_1 %d, key_2 %d, key_3 %d.\n", key_1, key_2, key_3); switch( db->dbm_pagf ) { case 1 : rc = SQLExecute(hstmt_del1 ); CHECK( rc, hstmt_del1); break; case 2 : rc = SQLExecute(hstmt_del2 ); CHECK( rc, hstmt_del2); break; case 3 : rc = SQLExecute(hstmt_del3 ); CHECK( rc, hstmt_del3); break; case 4 : rc = SQLExecute(hstmt_del4 ); CHECK( rc, hstmt_del4); break; case 5 : rc = SQLExecute(hstmt_del5 ); CHECK( rc, hstmt_del5); break; case 6 : rc = SQLExecute(hstmt_del6 ); CHECK( rc, hstmt_del6); break; case 7 : rc = SQLExecute(hstmt_del7 ); CHECK( rc, hstmt_del7); break; case 8 : rc = SQLExecute(hstmt_del8 ); CHECK( rc, hstmt_del8); break; default : exit; } //rc = SQLExecDirect(hstmt_del, (unsigned char*)constructSTATMENT, SQL_NTS); /** if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLRowCount(hstmt_del, &RowCount); CHECK( rc1, hstmt); //printf(" In delete, affect row %d.\n", RowCount); } **/ //CHECK( rc, hstmt_del); #ifndef WLP_HAS_SEPARATE_COMMIT commit(SQL_HANDLE_DBC, hdbc); CHECKDbc( rc, hdbc); #endif return 0; } datum dbm_fetch(DBM *db, datum arg_key) { //printf("enter fetch.\n"); SQLRETURN r; datum d; int offset; datum key; char key_buf[MAX_KEY_SIZE] = {0}; SQLINTEGER key_size; key_size = arg_key.dsize; SQLINTEGER key_1, key_2, key_3, key_4, key_5, key_6; key_1 = (int)*((int *)(&arg_key.dptr[0])); key_2 = (int)*((int *)(&arg_key.dptr[4])); if(key_size>=12) key_3 = (int)(*((int *)(&arg_key.dptr[8])) ); else key_3 = 0; if(key_size>=16) key_4 = (int)(*((int *)(&arg_key.dptr[12])) ); else key_4 = 0; if(key_size>=20) key_5 = (int)(*((int *)(&arg_key.dptr[16])) ); else key_5 = 0; if(key_size>=24) key_6 = (int)(*((int *)(&arg_key.dptr[20])) ); else key_6 = 0; memcpy(key_buf, arg_key.dptr, arg_key.dsize); //copy to my own memory; //so I will not affect outside memory pointed by arg_key.dptr SQLRETURN rc,rc1,rc2; SQLSMALLINT ColCount=0; SQLCHAR ColName[COUNT3]={0}; SQLINTEGER Len[MAXCOLS]={0}; SQLCHAR Data[10][DATALEN]={0}; SQLINTEGER i=0, RowCount=0, data_size; SQLSMALLINT iCol = 0; char constructSTATMENT[200]; sprintf(constructSTATMENT, "SELECT datasize, y FROM stm_tab000%1d where key1 = ? AND key2 = ? AND key3 = ?", db->dbm_pagf); if(key_size>=16) strcat(constructSTATMENT, " AND key4 = ?"); if(key_size>=20) strcat(constructSTATMENT, " AND key5 = ?"); if(key_size>=24) strcat(constructSTATMENT, " AND key6 = ?"); //printf(" in fetch keysize %d, key1 %d, key2 %d, key3 %d, key4 %d, key_5 %d.\n", key_size, key_1, key_2, key_3, key_4, key_5); rc = SQLPrepare(hstmt, (SQLCHAR *)constructSTATMENT, SQL_NTS); CHECK(rc, hstmt); rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &key_1, 0, NULL); CHECK(rc, hstmt); rc = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &key_2, 0, NULL); CHECK(rc, hstmt); rc = SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &key_3, 0, NULL); CHECK(rc, hstmt); if(key_size>=16){ rc = SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &key_4, 0, NULL); CHECK(rc, hstmt); } if(key_size>=20){ rc = SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &key_5, 0, NULL); CHECK(rc, hstmt); } if(key_size>=24){ rc = SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &key_6, 0, NULL); CHECK(rc, hstmt); } //printf("In fetch, SQL %s.\n", constructSTATMENT); //rc = SQLExecute(hstmt); rc = SQLExecDirect(hstmt, (unsigned char*)constructSTATMENT, SQL_NTS); //printf("in fetchC, return rc %d.\n", rc); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLNumResultCols(hstmt, &ColCount); SQLINTEGER mycount; SQLRowCount(hstmt, &mycount); //printf(" In fetch D, affect row %d.\n", mycount ); if(ColCount > 0) { //printf("in fetchD1.\n"); for (i = 0; i < ColCount; i++) { iCol = i+1; rc1 = SQLDescribeCol(hstmt, iCol,ColName, sizeof(ColName), NULL,NULL,NULL,NULL,NULL); assert(rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO); //printf("%s\t", ColName); /**rc1 = SQLBindCol( hstmt,iCol,SQL_C_BINARY, Data[iCol-1], sizeof(Data[iCol-1]), &Len[iCol-1] ); ****/ } //SQLBindCol, always use pointer to variable, like & !! rc1 = SQLBindCol( hstmt, 1, SQL_C_SLONG, &data_size, 4, &Len[0] ); rc1 = SQLBindCol( hstmt, 2,SQL_C_BINARY, Data[1], sizeof(Data[1]), &Len[1] ); //printf("%s","\n"); rc2 = SQLFetch(hstmt); //printf("in fetchD2.\n"); //while(rc2 ==SQL_SUCCESS || rc2 == SQL_SUCCESS_WITH_INFO) while ( rc2 != SQL_NO_DATA_FOUND && rc2 != SQL_ERROR) { RowCount++; //printf("in fetchD 3, found one row.\n"); for (i = 0; i < ColCount; i++) { if(Len[i] == SQL_NULL_DATA) { strcpy((char *)Data[i],"NULL"); } // printf("%s\t",Data[i]); } // printf("%s","\n"); break; //only fetch the first row in result. // only one row should return from query. rc2 = SQLFetch(hstmt); } SQLFreeStmt(hstmt, SQL_RESET_PARAMS); //WLP: this line seems to unbind the buffer with each column. SQLFreeStmt(hstmt, SQL_UNBIND); SQLFreeStmt(hstmt, SQL_CLOSE); } } //WLP: the following two line do the magic. //RESET_PARAM relates to SQLBindParameter, so I have to //RESET_PARAM anyway. SQLFreeStmt(hstmt, SQL_CLOSE); SQLFreeStmt(hstmt, SQL_RESET_PARAMS); r = rc; CHECK( r, hstmt); commit(SQL_HANDLE_DBC, hdbc); CHECKDbc( r, hdbc); if(RowCount==0) { //printf("in fetchE, no record found .\n"); d.dptr = NULL; return d; } //printf("fetch found, datasize is %d. \n", data_size); memcpy(db->dbm_pagbuf, Data[1], data_size); d.dptr=db->dbm_pagbuf; d.dsize = data_size; return d; } int num_of_keys_at_start; int keysize_at_start[30000]; char key_at_start[30000][MAX_KEY_SIZE]; datum dbm_firstkey(DBM *db) { int ret = system("solidfe31/bin/solsql \"tcp 1315\" dba dba crea_pro.sql"); if( ret == -1 ) { printf("failed to system."); exit(0); } printf("enter firstkey.\n"); char buf[100]; datum temp; SQLRETURN r; char key_buf[MAX_KEY_SIZE] = {0}; num_of_keys_at_start = 0; db->dbm_curslot = 0; SQLRETURN rc,rc1,rc2; SQLSMALLINT ColCount=0; SQLCHAR ColName[COUNT3]={0}; SQLINTEGER Len[MAXCOLS]={0}; SQLCHAR Data[MAXCOLS][DATALEN]={0}; SQLINTEGER i=0,RowCount=0, key_size; SQLSMALLINT iCol = 0; if( db->dbm_pagf == 1 ) rc = SQLExecDirect(hstmt, (unsigned char*)"SELECT keysize, x FROM stm_tab0001", SQL_NTS); else if( db->dbm_pagf == 2 ) rc = SQLExecDirect(hstmt, (unsigned char*)"SELECT keysize, x FROM stm_tab0002", SQL_NTS); else if( db->dbm_pagf == 3 ) rc = SQLExecDirect(hstmt, (unsigned char*)"SELECT keysize, x FROM stm_tab0003", SQL_NTS); else if( db->dbm_pagf == 4 ) rc = SQLExecDirect(hstmt, (unsigned char*)"SELECT keysize, x FROM stm_tab0004", SQL_NTS); else if( db->dbm_pagf == 5 ) rc = SQLExecDirect(hstmt, (unsigned char*)"SELECT keysize, x FROM stm_tab0005", SQL_NTS); else if( db->dbm_pagf == 6 ) rc = SQLExecDirect(hstmt, (unsigned char*)"SELECT keysize, x FROM stm_tab0006", SQL_NTS); else if( db->dbm_pagf == 7 ) rc = SQLExecDirect(hstmt, (unsigned char*)"SELECT keysize, x FROM stm_tab0007", SQL_NTS); else if( db->dbm_pagf == 8 ) rc = SQLExecDirect(hstmt, (unsigned char*)"SELECT keysize, x FROM stm_tab0008", SQL_NTS); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLNumResultCols(hstmt, &ColCount); if(ColCount > 0) { for (i = 0; i < ColCount; i++) { iCol = i+1; rc1 = SQLDescribeCol(hstmt, iCol,ColName, sizeof(ColName), NULL,NULL,NULL,NULL,NULL); assert(rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO); //printf("%s\t", ColName); /*** rc1 = SQLBindCol( hstmt,iCol,SQL_C_BINARY, Data[iCol-1], sizeof(Data[iCol-1]), &Len[iCol-1] ); ****/ } rc1 = SQLBindCol(hstmt, 1, SQL_C_SLONG, &key_size, 4, &Len[0] ); rc1 = SQLBindCol( hstmt, 2,SQL_C_BINARY, Data[1], sizeof(Data[1]), &Len[1] ); //printf("%s","\n"); rc2 = SQLFetch(hstmt); while ( rc2 != SQL_NO_DATA_FOUND && rc2 != SQL_ERROR) { RowCount++; for (i = 0; i < ColCount; i++) { if(Len[i] == SQL_NULL_DATA) { strcpy((char *)Data[i],"NULL"); } // printf("%s\t",Data[i]); /** printf("firstkey keysize %d, RowCount %d, %x %x %x %x, %x %x %x %x, %x %x %x %x, %x %x %x %x.\n", key_size, RowCount, Data[i][0], Data[i][1], Data[i][2], Data[i][3], Data[i][4], Data[i][5], Data[i][6], Data[i][7], Data[i][8], Data[i][9], Data[i][10], Data[i][11], Data[i][12], Data[i][13], Data[i][14], Data[i][15]); **/ } keysize_at_start[RowCount] = key_size; memcpy(key_at_start[RowCount], Data[1], key_size); //printf("%s","\n"); rc2 = SQLFetch(hstmt); } SQLFreeStmt(hstmt, SQL_RESET_PARAMS); //WLP: this line seems to unbind the buffer with each column. SQLFreeStmt(hstmt, SQL_UNBIND); SQLFreeStmt(hstmt, SQL_CLOSE); } } r = rc; CHECK( r, hstmt); commit(SQL_HANDLE_DBC, hdbc); CHECKDbc( r, hdbc); num_of_keys_at_start = RowCount; //printf("firstket, the datasize is %d. total num of key %d.\n", key_size, num_of_keys_at_start); if( RowCount==0) { temp.dptr = NULL; return temp; } db->dbm_curslot = 1; memcpy(db->dbm_pagbuf, key_at_start[1], keysize_at_start[1]); temp.dptr=db->dbm_pagbuf; temp.dsize = keysize_at_start[1]; //printf("firstket, return.\n"); return temp; } datum dbm_nextkey(DBM *db) { datum temp; db->dbm_curslot++; //printf("In nextkey, read db->dbm_curslot %d.\n", db->dbm_curslot); if(db->dbm_curslot > num_of_keys_at_start) { temp.dsize = 0; temp.dptr = NULL; return temp; } //printf("In nextkey, read .\n"); memcpy(db->dbm_pagbuf, key_at_start[db->dbm_curslot], keysize_at_start[db->dbm_curslot] ); temp.dptr=db->dbm_pagbuf; temp.dsize = keysize_at_start[db->dbm_curslot]; return temp; } //for binding: int ukey_1, ukey_2, ukey_3, ukey_4, ukey_5, ukey_6, ikey_size, idata_size; char ucontent_buf[PBLKSIZ], ikey_buf[MAX_KEY_SIZE]; int dbm_store(DBM *db, datum arg_key, datum content, int flags) { //printf("enter _store.\n"); datum key; ikey_size = arg_key.dsize; idata_size = content.dsize; ukey_1= ukey_2= ukey_3= ukey_4= ukey_5= ukey_6 = 0; ukey_1 = (int)*((int *)(&arg_key.dptr[0])); ukey_2 = (int)*((int *)(&arg_key.dptr[4])); if(ikey_size>=12) ukey_3 = (int)(*((int *)(&arg_key.dptr[8])) ); if(ikey_size>=16) ukey_4 = (int)(*((int *)(&arg_key.dptr[12])) ); if(ikey_size>=20) ukey_5 = (int)(*((int *)(&arg_key.dptr[16])) ); if(ikey_size>=24) ukey_6 = (int)(*((int *)(&arg_key.dptr[20])) ); //printf(" \n In store , key_1 %d, key_2 %d, key_3 %d, key_4 %d, key_5 %d.\n", key_1, key_2, key_3, key_4, key_5); //printf("in store, dsize %d, keysize %d.\n", content.dsize , arg_key.dsize); memset(ikey_buf, 0, MAX_KEY_SIZE); memset(ucontent_buf, 0, PBLKSIZ); memcpy(ikey_buf, arg_key.dptr, arg_key.dsize); //copy to my own memory; //so I will not affect outside memory pointed by arg_key.dptr memcpy(ucontent_buf, content.dptr, content.dsize); //copy to my own memory; //printf("in store, dsize %d, keysize %d.\n", content.dsize , arg_key.dsize); SQLRETURN rc,rc1,rc2; SQLSMALLINT ColCount=0; SQLCHAR ColName[COUNT3]={0}; SQLINTEGER Len[MAXCOLS]={0}; //SQLCHAR Data[MAXCOLS][DATALEN]={0}; SQLCHAR Data[100][DATALEN]={0}; SQLINTEGER i=0; SQLSMALLINT iCol = 0; #ifndef WLP_USING_STORED_PROCEDURE if( upd_bind == 0) { upd_bind = 1; rc = SQLPrepare(hstmt_upd1, (SQLCHAR *) "update stm_tab0001 set y=? where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); CHECK(rc, hstmt_upd1); rc = SQLBindParameter(hstmt_upd1, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_upd1); rc = SQLBindParameter(hstmt_upd1, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_upd1); rc = SQLBindParameter(hstmt_upd1, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_upd1); rc = SQLBindParameter(hstmt_upd1, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_upd1); rc = SQLBindParameter(hstmt_upd1, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_upd1); rc = SQLBindParameter(hstmt_upd1, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_upd1); rc = SQLBindParameter(hstmt_upd1, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_upd1); //2 rc = SQLPrepare(hstmt_upd2, (SQLCHAR *) "update stm_tab0002 set y=? where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); CHECK(rc, hstmt_upd2); rc = SQLBindParameter(hstmt_upd2, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_upd2); rc = SQLBindParameter(hstmt_upd2, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_upd2); rc = SQLBindParameter(hstmt_upd2, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_upd2); rc = SQLBindParameter(hstmt_upd2, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_upd2); rc = SQLBindParameter(hstmt_upd2, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_upd2); rc = SQLBindParameter(hstmt_upd2, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_upd2); rc = SQLBindParameter(hstmt_upd2, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_upd2); //3 rc = SQLPrepare(hstmt_upd3, (SQLCHAR *) "update stm_tab0003 set y=? where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); CHECK(rc, hstmt_upd3); rc = SQLBindParameter(hstmt_upd3, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_upd3); rc = SQLBindParameter(hstmt_upd3, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_upd3); rc = SQLBindParameter(hstmt_upd3, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_upd3); rc = SQLBindParameter(hstmt_upd3, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_upd3); rc = SQLBindParameter(hstmt_upd3, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_upd3); rc = SQLBindParameter(hstmt_upd3, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_upd3); rc = SQLBindParameter(hstmt_upd3, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_upd3); //4 rc = SQLPrepare(hstmt_upd4, (SQLCHAR *) "update stm_tab0004 set y=? where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); CHECK(rc, hstmt_upd4); rc = SQLBindParameter(hstmt_upd4, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_upd4); rc = SQLBindParameter(hstmt_upd4, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_upd4); rc = SQLBindParameter(hstmt_upd4, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_upd4); rc = SQLBindParameter(hstmt_upd4, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_upd4); rc = SQLBindParameter(hstmt_upd4, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_upd4); rc = SQLBindParameter(hstmt_upd4, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_upd4); rc = SQLBindParameter(hstmt_upd4, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_upd4); //5 rc = SQLPrepare(hstmt_upd5, (SQLCHAR *) "update stm_tab0005 set y=? where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); CHECK(rc, hstmt_upd5); rc = SQLBindParameter(hstmt_upd5, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_upd5); rc = SQLBindParameter(hstmt_upd5, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_upd5); rc = SQLBindParameter(hstmt_upd5, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_upd5); rc = SQLBindParameter(hstmt_upd5, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_upd5); rc = SQLBindParameter(hstmt_upd5, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_upd5); rc = SQLBindParameter(hstmt_upd5, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_upd5); rc = SQLBindParameter(hstmt_upd5, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_upd5); //6 rc = SQLPrepare(hstmt_upd6, (SQLCHAR *) "update stm_tab0006 set y=? where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); CHECK(rc, hstmt_upd6); rc = SQLBindParameter(hstmt_upd6, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_upd6); rc = SQLBindParameter(hstmt_upd6, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_upd6); rc = SQLBindParameter(hstmt_upd6, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_upd6); rc = SQLBindParameter(hstmt_upd6, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_upd6); rc = SQLBindParameter(hstmt_upd6, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_upd6); rc = SQLBindParameter(hstmt_upd6, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_upd6); rc = SQLBindParameter(hstmt_upd6, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_upd6); //7 rc = SQLPrepare(hstmt_upd7, (SQLCHAR *) "update stm_tab0007 set y=? where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); CHECK(rc, hstmt_upd7); rc = SQLBindParameter(hstmt_upd7, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_upd7); rc = SQLBindParameter(hstmt_upd7, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_upd7); rc = SQLBindParameter(hstmt_upd7, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_upd7); rc = SQLBindParameter(hstmt_upd7, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_upd7); rc = SQLBindParameter(hstmt_upd7, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_upd7); rc = SQLBindParameter(hstmt_upd7, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_upd7); rc = SQLBindParameter(hstmt_upd7, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_upd7); //8 rc = SQLPrepare(hstmt_upd8, (SQLCHAR *) "update stm_tab0008 set y=? where key1 = ? AND key2 = ? AND key3 = ? AND key4 = ? AND key5 = ? AND key6 = ?", SQL_NTS); CHECK(rc, hstmt_upd8); rc = SQLBindParameter(hstmt_upd8, 1, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_upd8); rc = SQLBindParameter(hstmt_upd8, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_upd8); rc = SQLBindParameter(hstmt_upd8, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_upd8); rc = SQLBindParameter(hstmt_upd8, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_upd8); rc = SQLBindParameter(hstmt_upd8, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_upd8); rc = SQLBindParameter(hstmt_upd8, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_upd8); rc = SQLBindParameter(hstmt_upd8, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_upd8); } #endif // WLP_USING_STORED_PROCEDURE if( ins_bind == 0) { ins_bind = 1; #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_ins1, (unsigned char*)"{call update_tab1(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}", SQL_NTS); #else rc = SQLPrepare(hstmt_ins1, (SQLCHAR *) "insert into stm_tab0001 (key1, key2, key3, key4, key5, key6, keysize, datasize, x, y) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" , SQL_NTS); #endif CHECK(rc, hstmt_ins1); //SQLBindParameter is very prone to error. always use & before variable !! rc = SQLBindParameter(hstmt_ins1, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_ins1); rc = SQLBindParameter(hstmt_ins1, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_ins1); rc = SQLBindParameter(hstmt_ins1, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_ins1); rc = SQLBindParameter(hstmt_ins1, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_ins1); rc = SQLBindParameter(hstmt_ins1, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_ins1); rc = SQLBindParameter(hstmt_ins1, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_ins1); rc = SQLBindParameter(hstmt_ins1, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ikey_size, 0, NULL); CHECK(rc, hstmt_ins1); rc = SQLBindParameter(hstmt_ins1, 8, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &idata_size, 0, NULL); CHECK(rc, hstmt_ins1); rc = SQLBindParameter(hstmt_ins1, 9, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, MAX_KEY_SIZE, 0, &ikey_buf, ikey_size, NULL); CHECK(rc, hstmt_ins1); rc = SQLBindParameter(hstmt_ins1, 10, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_ins1); //2 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_ins2, (unsigned char*)"{call update_tab2(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}", SQL_NTS); #else rc = SQLPrepare(hstmt_ins2, (SQLCHAR *) "insert into stm_tab0002 (key1, key2, key3, key4, key5, key6, keysize, datasize, x, y) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" , SQL_NTS); #endif CHECK(rc, hstmt_ins2); //SQLBindParameter is very prone to error. always use & before variable !! rc = SQLBindParameter(hstmt_ins2, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_ins2); rc = SQLBindParameter(hstmt_ins2, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_ins2); rc = SQLBindParameter(hstmt_ins2, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_ins2); rc = SQLBindParameter(hstmt_ins2, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_ins2); rc = SQLBindParameter(hstmt_ins2, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_ins2); rc = SQLBindParameter(hstmt_ins2, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_ins2); rc = SQLBindParameter(hstmt_ins2, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ikey_size, 0, NULL); CHECK(rc, hstmt_ins2); rc = SQLBindParameter(hstmt_ins2, 8, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &idata_size, 0, NULL); CHECK(rc, hstmt_ins2); rc = SQLBindParameter(hstmt_ins2, 9, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, MAX_KEY_SIZE, 0, &ikey_buf, ikey_size, NULL); CHECK(rc, hstmt_ins2); rc = SQLBindParameter(hstmt_ins2, 10, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_ins2); //3 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_ins3, (unsigned char*)"{call update_tab3(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}", SQL_NTS); #else printf("\n\n WRONG!! \n"); rc = SQLPrepare(hstmt_ins3, (SQLCHAR *) "insert into stm_tab0003 (key1, key2, key3, key4, key5, key6, keysize, datasize, x, y) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" , SQL_NTS); #endif CHECK(rc, hstmt_ins3); //SQLBindParameter is very prone to error. always use & before variable !! rc = SQLBindParameter(hstmt_ins3, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_ins3); rc = SQLBindParameter(hstmt_ins3, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_ins3); rc = SQLBindParameter(hstmt_ins3, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_ins3); rc = SQLBindParameter(hstmt_ins3, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_ins3); rc = SQLBindParameter(hstmt_ins3, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_ins3); rc = SQLBindParameter(hstmt_ins3, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_ins3); rc = SQLBindParameter(hstmt_ins3, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ikey_size, 0, NULL); CHECK(rc, hstmt_ins3); rc = SQLBindParameter(hstmt_ins3, 8, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &idata_size, 0, NULL); CHECK(rc, hstmt_ins3); rc = SQLBindParameter(hstmt_ins3, 9, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, MAX_KEY_SIZE, 0, &ikey_buf, ikey_size, NULL); CHECK(rc, hstmt_ins3); rc = SQLBindParameter(hstmt_ins3, 10, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_ins3); //4 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_ins4, (unsigned char*)"{call update_tab4(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}", SQL_NTS); #else printf("\n WRONG!, should go with procedure.\n"); rc = SQLPrepare(hstmt_ins4, (SQLCHAR *) "insert into stm_tab0004 (key1, key2, key3, key4, key5, key6, keysize, datasize, x, y) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" , SQL_NTS); #endif CHECK(rc, hstmt_ins4); //SQLBindParameter is very prone to error. always use & before variable !! rc = SQLBindParameter(hstmt_ins4, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_ins4); rc = SQLBindParameter(hstmt_ins4, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_ins4); rc = SQLBindParameter(hstmt_ins4, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_ins4); rc = SQLBindParameter(hstmt_ins4, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_ins4); rc = SQLBindParameter(hstmt_ins4, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_ins4); rc = SQLBindParameter(hstmt_ins4, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_ins4); rc = SQLBindParameter(hstmt_ins4, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ikey_size, 0, NULL); CHECK(rc, hstmt_ins4); rc = SQLBindParameter(hstmt_ins4, 8, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &idata_size, 0, NULL); CHECK(rc, hstmt_ins4); rc = SQLBindParameter(hstmt_ins4, 9, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, MAX_KEY_SIZE, 0, &ikey_buf, ikey_size, NULL); CHECK(rc, hstmt_ins4); rc = SQLBindParameter(hstmt_ins4, 10, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_ins4); //5 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_ins5, (unsigned char*)"{call update_tab5(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}", SQL_NTS); #else rc = SQLPrepare(hstmt_ins5, (SQLCHAR *) "insert into stm_tab0005 (key1, key2, key3, key4, key5, key6, keysize, datasize, x, y) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" , SQL_NTS); #endif CHECK(rc, hstmt_ins5); //SQLBindParameter is very prone to error. always use & before variable !! rc = SQLBindParameter(hstmt_ins5, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_ins5); rc = SQLBindParameter(hstmt_ins5, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_ins5); rc = SQLBindParameter(hstmt_ins5, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_ins5); rc = SQLBindParameter(hstmt_ins5, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_ins5); rc = SQLBindParameter(hstmt_ins5, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_ins5); rc = SQLBindParameter(hstmt_ins5, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_ins5); rc = SQLBindParameter(hstmt_ins5, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ikey_size, 0, NULL); CHECK(rc, hstmt_ins5); rc = SQLBindParameter(hstmt_ins5, 8, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &idata_size, 0, NULL); CHECK(rc, hstmt_ins5); rc = SQLBindParameter(hstmt_ins5, 9, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, MAX_KEY_SIZE, 0, &ikey_buf, ikey_size, NULL); CHECK(rc, hstmt_ins5); rc = SQLBindParameter(hstmt_ins5, 10, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_ins5); //6 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_ins6, (unsigned char*)"{call update_tab6(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}", SQL_NTS); #else rc = SQLPrepare(hstmt_ins6, (SQLCHAR *) "insert into stm_tab0006 (key1, key2, key3, key4, key5, key6, keysize, datasize, x, y) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" , SQL_NTS); #endif CHECK(rc, hstmt_ins6); //SQLBindParameter is very prone to error. always use & before variable !! rc = SQLBindParameter(hstmt_ins6, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_ins6); rc = SQLBindParameter(hstmt_ins6, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_ins6); rc = SQLBindParameter(hstmt_ins6, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_ins6); rc = SQLBindParameter(hstmt_ins6, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_ins6); rc = SQLBindParameter(hstmt_ins6, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_ins6); rc = SQLBindParameter(hstmt_ins6, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_ins6); rc = SQLBindParameter(hstmt_ins6, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ikey_size, 0, NULL); CHECK(rc, hstmt_ins6); rc = SQLBindParameter(hstmt_ins6, 8, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &idata_size, 0, NULL); CHECK(rc, hstmt_ins6); rc = SQLBindParameter(hstmt_ins6, 9, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, MAX_KEY_SIZE, 0, &ikey_buf, ikey_size, NULL); CHECK(rc, hstmt_ins6); rc = SQLBindParameter(hstmt_ins6, 10, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_ins6); //7 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_ins7, (unsigned char*)"{call update_tab7(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}", SQL_NTS); #else rc = SQLPrepare(hstmt_ins7, (SQLCHAR *) "insert into stm_tab0007 (key1, key2, key3, key4, key5, key6, keysize, datasize, x, y) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" , SQL_NTS); #endif CHECK(rc, hstmt_ins7); //SQLBindParameter is very prone to error. always use & before variable !! rc = SQLBindParameter(hstmt_ins7, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_ins7); rc = SQLBindParameter(hstmt_ins7, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_ins7); rc = SQLBindParameter(hstmt_ins7, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_ins7); rc = SQLBindParameter(hstmt_ins7, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_ins7); rc = SQLBindParameter(hstmt_ins7, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_ins7); rc = SQLBindParameter(hstmt_ins7, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_ins7); rc = SQLBindParameter(hstmt_ins7, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ikey_size, 0, NULL); CHECK(rc, hstmt_ins7); rc = SQLBindParameter(hstmt_ins7, 8, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &idata_size, 0, NULL); CHECK(rc, hstmt_ins7); rc = SQLBindParameter(hstmt_ins7, 9, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, MAX_KEY_SIZE, 0, &ikey_buf, ikey_size, NULL); CHECK(rc, hstmt_ins7); rc = SQLBindParameter(hstmt_ins7, 10, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_ins7); //8 #ifdef WLP_USING_STORED_PROCEDURE rc = SQLPrepare(hstmt_ins8, (unsigned char*)"{call update_tab8(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}", SQL_NTS); #else rc = SQLPrepare(hstmt_ins8, (SQLCHAR *) "insert into stm_tab0008 (key1, key2, key3, key4, key5, key6, keysize, datasize, x, y) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" , SQL_NTS); #endif CHECK(rc, hstmt_ins8); //SQLBindParameter is very prone to error. always use & before variable !! rc = SQLBindParameter(hstmt_ins8, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_1, 0, NULL); CHECK(rc, hstmt_ins8); rc = SQLBindParameter(hstmt_ins8, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_2, 0, NULL); CHECK(rc, hstmt_ins8); rc = SQLBindParameter(hstmt_ins8, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_3, 0, NULL); CHECK(rc, hstmt_ins8); rc = SQLBindParameter(hstmt_ins8, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_4, 0, NULL); CHECK(rc, hstmt_ins8); rc = SQLBindParameter(hstmt_ins8, 5, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_5, 0, NULL); CHECK(rc, hstmt_ins8); rc = SQLBindParameter(hstmt_ins8, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ukey_6, 0, NULL); CHECK(rc, hstmt_ins8); rc = SQLBindParameter(hstmt_ins8, 7, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ikey_size, 0, NULL); CHECK(rc, hstmt_ins8); rc = SQLBindParameter(hstmt_ins8, 8, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &idata_size, 0, NULL); CHECK(rc, hstmt_ins8); rc = SQLBindParameter(hstmt_ins8, 9, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, MAX_KEY_SIZE, 0, &ikey_buf, ikey_size, NULL); CHECK(rc, hstmt_ins8); rc = SQLBindParameter(hstmt_ins8, 10, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_INTEGER, PBLKSIZ, 0, &ucontent_buf, idata_size, NULL); CHECK(rc, hstmt_ins8); } SQLINTEGER RowCount = 0; //if(flags == DBM_INSERT) switch( db->dbm_pagf ) { case 1 : /***try update **/ #ifndef WLP_USING_STORED_PROCEDURE rc = SQLExecute(hstmt_upd1 ); CHECK( rc, hstmt_upd1); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLRowCount(hstmt_upd1, &RowCount); CHECK( rc1, hstmt_upd1); } #endif if(RowCount ==0) { // need to insert: go to the next section. rc = SQLExecute(hstmt_ins1 ); CHECK( rc, hstmt_ins1); //notice: use the same variable rc with the last SQL statement. if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc2 = SQLRowCount(hstmt_ins1, &RowCount); CHECK( rc2, hstmt_ins1); //printf("in store: insert success %d row.\n", RowCount); } } break; case 2 : #ifndef WLP_USING_STORED_PROCEDURE rc = SQLExecute(hstmt_upd2 ); CHECK( rc, hstmt_upd2); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLRowCount(hstmt_upd2, &RowCount); CHECK( rc1, hstmt_upd2); } #endif if(RowCount ==0) { // need to insert: go to the next section. rc = SQLExecute(hstmt_ins2 ); CHECK( rc, hstmt_ins2); //notice: use the same variable rc with the last SQL statement. if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc2 = SQLRowCount(hstmt_ins2, &RowCount); CHECK( rc2, hstmt_ins2); //printf("in store: insert success %d row.\n", RowCount); } } break; case 3 : #ifndef WLP_USING_STORED_PROCEDURE rc = SQLExecute(hstmt_upd3 ); CHECK( rc, hstmt_upd3); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLRowCount(hstmt_upd3, &RowCount); CHECK( rc1, hstmt_upd3); } #endif if(RowCount ==0) { // need to insert: go to the next section. rc = SQLExecute(hstmt_ins3 ); CHECK( rc, hstmt_ins3); //do I need to create a separate procedure for insert and update? //notice: use the same variable rc with the last SQL statement. if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc2 = SQLRowCount(hstmt_ins3, &RowCount); CHECK( rc2, hstmt_ins3); //printf("in store: insert success %d row.\n", RowCount); } } break; case 4 : #ifndef WLP_USING_STORED_PROCEDURE rc = SQLExecute(hstmt_upd4 ); CHECK( rc, hstmt_upd4); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLRowCount(hstmt_upd4, &RowCount); CHECK( rc1, hstmt_upd4); } #endif if(RowCount ==0) { // need to insert: go to the next section. rc = SQLExecute(hstmt_ins4 ); CHECK( rc, hstmt_ins4); //notice: use the same variable rc with the last SQL statement. if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc2 = SQLRowCount(hstmt_ins4, &RowCount); CHECK( rc2, hstmt_ins4); //printf("in store: insert success %d row.\n", RowCount); } } break; case 5 : #ifndef WLP_USING_STORED_PROCEDURE rc = SQLExecute(hstmt_upd5 ); CHECK( rc, hstmt_upd5); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLRowCount(hstmt_upd5, &RowCount); CHECK( rc1, hstmt_upd5); } #endif if(RowCount ==0) { // need to insert: go to the next section. rc = SQLExecute(hstmt_ins5 ); CHECK( rc, hstmt_ins5); //notice: use the same variable rc with the last SQL statement. if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc2 = SQLRowCount(hstmt_ins5, &RowCount); CHECK( rc2, hstmt_ins5); //printf("in store: insert success %d row.\n", RowCount); } } break; case 6 : #ifndef WLP_USING_STORED_PROCEDURE rc = SQLExecute(hstmt_upd6 ); CHECK( rc, hstmt_upd6); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLRowCount(hstmt_upd6, &RowCount); CHECK( rc1, hstmt_upd6); } #endif if(RowCount ==0) { // need to insert: go to the next section. rc = SQLExecute(hstmt_ins6 ); CHECK( rc, hstmt_ins6); //notice: use the same variable rc with the last SQL statement. if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc2 = SQLRowCount(hstmt_ins6, &RowCount); CHECK( rc2, hstmt_ins6); //printf("in store: insert success %d row.\n", RowCount); } } break; case 7 : #ifndef WLP_USING_STORED_PROCEDURE rc = SQLExecute(hstmt_upd7 ); CHECK( rc, hstmt_upd7); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLRowCount(hstmt_upd7, &RowCount); CHECK( rc1, hstmt_upd7); } #endif if(RowCount ==0) { // need to insert: go to the next section. rc = SQLExecute(hstmt_ins7 ); CHECK( rc, hstmt_ins7); //notice: use the same variable rc with the last SQL statement. if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc2 = SQLRowCount(hstmt_ins7, &RowCount); CHECK( rc2, hstmt_ins7); //printf("in store: insert success %d row.\n", RowCount); } } break; case 8 : #ifndef WLP_USING_STORED_PROCEDURE rc = SQLExecute(hstmt_upd8 ); CHECK( rc, hstmt_upd8); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc1 = SQLRowCount(hstmt_upd8, &RowCount); CHECK( rc1, hstmt_upd8); } #endif if(RowCount ==0) { // need to insert: go to the next section. rc = SQLExecute(hstmt_ins8 ); CHECK( rc, hstmt_ins8); //notice: use the same variable rc with the last SQL statement. if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { rc2 = SQLRowCount(hstmt_ins8, &RowCount); CHECK( rc2, hstmt_ins8); //printf("in store: insert success %d row.\n", RowCount); } } break; default: exit; } #ifndef WLP_HAS_SEPARATE_COMMIT commit(SQL_HANDLE_DBC, hdbc); CHECKDbc( rc, hdbc); //which rc should I use? #endif //printf("after exec: ok ! .\n"); return 0; } int dbm_commit() { commit(SQL_HANDLE_DBC, hdbc); //CHECKDbc( rc, hdbc); return 0; }