/*单条记录操作*/ LT_DBROW ltDbOneRow(ltDbConn *pConn,int *fieldnum,char *pSmt,...) { LT_DBROW tempRow; DB_CURSOR *dbcursor; int iReturn; va_list ap; char caSmt[4096]; int i; va_start(ap,pSmt); vsprintf(caSmt,pSmt,ap); va_end(ap); tempRow=NULL; dbcursor=ltDbOpenCursorB(pConn,caSmt,0); if(dbcursor==NULL){ return NULL; } iReturn = dbFetch(dbcursor); if(iReturn == 0) { dbClose(dbcursor); return NULL; } *fieldnum=dbcursor->nDef; tempRow=(LT_DBROW)malloc((*fieldnum)*sizeof(char *)); if(tempRow==NULL){ dbClose(dbcursor); return NULL; } for(iReturn=0;iReturn<(*fieldnum);iReturn++){ tempRow[iReturn] =(char *)malloc(dbcursor->pDef[iReturn].bufl+1); if(tempRow[iReturn]==NULL){ dbClose(dbcursor); return NULL; } memcpy(tempRow[iReturn],dbcursor->pDef[iReturn].buf,dbcursor->pDef[iReturn].bufl); tempRow[dbcursor->pDef[iReturn].bufl]=0; } dbClose(dbcursor); return tempRow; }
/*fetch并得到字段值*/ LT_DBROW ltDbFetchRow(ltDbCursor *ltCursor){ LT_DBROW tmp; int iTemp; unsigned int fieldnum; int iReturn; iReturn = dbFetch(ltCursor->db_cursor); if(iReturn == 0) { return NULL; } /*释放字段值*/ if(ltCursor->db_row){ if(ltCursor->num_field>0){ for(iTemp=0;iTemp<ltCursor->num_field;iTemp++){ if(ltCursor->db_row[iTemp]){ free(ltCursor->db_row[iTemp]); } } } free(ltCursor->db_row); ltCursor->db_row=NULL; } fieldnum=ltCursor->db_cursor->nDef; tmp=(LT_DBROW)malloc(fieldnum*sizeof(char *)); for(iReturn=0;iReturn<fieldnum;iReturn++){ tmp[iReturn] =(char *)malloc(ltCursor->db_cursor->pDef[iReturn].bufl+1); if(tmp[iReturn]==NULL){ return NULL; } memcpy(tmp[iReturn],ltCursor->db_cursor->pDef[iReturn].buf,ltCursor->db_cursor->pDef[iReturn].bufl); tmp[ltCursor->db_cursor->pDef[iReturn].bufl]=0; } ltCursor->db_row=tmp; return tmp; }
int executeCommand(connection *con) { tableInfo *tbl = con->tbl; command *cmd = con->cmd; response *res = con->res; error *err = con->err; int dataBytes = con->dataBytes; void *data = con->data; printf("Received command: '%s'\n", CMD_NAMES[cmd->cmd]); int result = 0; // Check that table is in use if needed if (!tbl->isValid && cmdNeedsTable(cmd)) { ERROR(err, E_USETBL); return 1; } switch (cmd->cmd) { case CMD_USE: result = dbUseTable(tbl, (char *) cmd->args, res, err); break; case CMD_CREATE_TABLE: result = dbCreateTable((char *) cmd->args, res, err); break; case CMD_REMOVE_TABLE: result = dbRemoveTable((char *) cmd->args, res, err); break; case CMD_PRINT_VAR: result = dbPrintVar((char *) cmd->args, res, err); break; case CMD_CREATE: result = dbCreateColumn(tbl, (createColArgs *) cmd->args, res, err); break; case CMD_REMOVE: result = dbRemoveColumn(tbl, (char *) cmd->args, res, err); break; case CMD_INSERT: result = dbInsert(tbl, (insertArgs *) cmd->args, res, err); break; case CMD_SELECT: result = dbSelect(tbl, (selectArgs *) cmd->args, res, err); break; case CMD_FETCH: result = dbFetch(tbl, (fetchArgs *) cmd->args, res, err); break; case CMD_LOAD: result = dbLoad(tbl, (loadArgs *) cmd->args, dataBytes, data, res, err); break; case CMD_PRINT: result = dbPrint(tbl, (char *) cmd->args, res, err); break; case CMD_MIN: result = dbMinimum((char *) cmd->args, res, err); break; case CMD_MAX: result = dbMaximum((char *) cmd->args, res, err); break; case CMD_SUM: result = dbSum((char *) cmd->args, res, err); break; case CMD_AVG: result = dbAverage((char *) cmd->args, res, err); break; case CMD_CNT: result = dbCount((char *) cmd->args, res, err); break; case CMD_ADD: result = dbAdd((mathArgs *) cmd->args, res, err); break; case CMD_SUB: result = dbSubtract((mathArgs *) cmd->args, res, err); break; case CMD_MUL: result = dbMultiply((mathArgs *) cmd->args, res, err); break; case CMD_DIV: result = dbDivide((mathArgs *) cmd->args, res, err); break; case CMD_LOOPJOIN: result = dbLoopJoin((joinArgs *) cmd->args, res, err); break; case CMD_EXIT: ERROR(err, E_EXIT); result = 1; break; default: ERROR(err, E_INTERN); result = 1; break; } return result; }