diff --git a/demo/asypush.c b/demo/asypush.c new file mode 100644 index 0000000..f5dd29d --- /dev/null +++ b/demo/asypush.c @@ -0,0 +1,45 @@ +#include "tvm.h" +#include "tmain.h" + +#define QUEUE_USER_INFO 21 + +typedef struct __QUEUE_USER_INFO +{ + long acct_id; + char user_no[21]; + char user_type[2]; + char user_nm[81]; + char user_addr[161]; + char user_phone[31]; +}dbUser; + +int main(int argc, char *argv[]) +{ + dbUser stUser; + SATvm *pstSavm = (SATvm *)pGetSATvm(); + + if(RC_SUCC != lTvmConnect(pstSavm, "127.0.0.1", 5050, 2)) + { + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + queueinit(pstSavm, stUser, QUEUE_USER_INFO); // 绑定变量 + stUser.acct_id = time(NULL); // 对结构体赋值 + strcpy(stUser.user_no, "20180223"); // 对结构体赋值 + strcpy(stUser.user_type, "1"); // 对结构体赋值 + strcpy(stUser.user_nm, "Savens Liu"); // 对结构体赋值 + strcpy(stUser.user_addr, "China"); // 对结构体赋值 + strcpy(stUser.user_phone, "18672911111"); // 对结构体赋值 + if(RC_SUCC != lAsyPush(pstSavm)) // 插入记录 + { + fprintf(stderr, "Push error:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + vTvmDisconnect(pstSavm); + + fprintf(stdout, "asypush success\n"); + + return RC_SUCC; +} diff --git a/demo/count.c b/demo/count.c index 137213f..3cff4a4 100644 --- a/demo/count.c +++ b/demo/count.c @@ -13,7 +13,7 @@ typedef struct __TBL_USER_INFO char user_phone[31]; }dbUser; -long lCountUserInfo() +int main(int argc, char *argv[]) { dbUser stUser; size_t lRow = 0; @@ -22,7 +22,8 @@ long lCountUserInfo() /* 初始化TBL_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ if(RC_SUCC != lInitSATvm(pstSavm, TBL_USER_INFO)) { - fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } @@ -32,20 +33,11 @@ long lCountUserInfo() if(RC_SUCC != lCount(pstSavm, (void *)&lRow)) { - fprintf(stderr, "Count error: (%d) (%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "Count error: (%d) (%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } fprintf(stdout, "Count:%ld\n\n", lRow); return RC_SUCC; } - -int main(int argc, char *argv[]) -{ - if(RC_SUCC != lCountUserInfo()) - return RC_FAIL; - - return RC_SUCC; -} - - diff --git a/demo/delete.c b/demo/delete.c index 4213e0a..f5a13f8 100644 --- a/demo/delete.c +++ b/demo/delete.c @@ -13,7 +13,7 @@ typedef struct __TBL_USER_INFO char user_phone[31]; }dbUser; -long lDeleteUserInfo() +int main(int argc, char *argv[]) { dbUser stUser; SATvm *pstSavm = (SATvm *)pGetSATvm(); @@ -21,7 +21,8 @@ long lDeleteUserInfo() /* 初始化TBL_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ if(RC_SUCC != lInitSATvm(pstSavm, TBL_USER_INFO)) { - fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } @@ -31,20 +32,10 @@ long lDeleteUserInfo() if(RC_SUCC != lDelete(pstSavm)) { - fprintf(stderr, "Delete error: (%d) (%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "Delete error: (%d) (%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } return RC_SUCC; } - -int main(int argc, char *argv[]) -{ - - if(RC_SUCC != lDeleteUserInfo()) - return RC_FAIL; - - return RC_SUCC; -} - - diff --git a/demo/drop.c b/demo/drop.c index 69bf071..2404792 100644 --- a/demo/drop.c +++ b/demo/drop.c @@ -3,44 +3,16 @@ #define TBL_USER_INFO 20 -typedef struct __TBL_USER_INFO -{ - long acct_id; - char user_no[21]; - char user_type[2]; - char user_nm[81]; - char user_addr[161]; - char user_phone[31]; -}dbUser; - -long lDropUserInfo() -{ - dbUser stUser; - SATvm *pstSavm = (SATvm *)pGetSATvm(); - - /* 初始化TBL_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ - if(RC_SUCC != lInitSATvm(pstSavm, TBL_USER_INFO)) - { - fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); - return RC_FAIL; - } - - if(RC_SUCC != lDropTable(pstSavm, TBL_USER_INFO)) - { - fprintf(stderr, "drop table error:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); - return RC_FAIL; - } - - return RC_SUCC; -} - int main(int argc, char *argv[]) { - - if(RC_SUCC != lDropUserInfo()) + SATvm *pstSavm = (SATvm *)pGetSATvm(); + + if(RC_SUCC != lDropTable(pstSavm, TBL_USER_INFO)) + { + fprintf(stderr, "drop table error:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; + } return RC_SUCC; } - - diff --git a/demo/extreme.c b/demo/extreme.c index ceef071..91bec84 100644 --- a/demo/extreme.c +++ b/demo/extreme.c @@ -13,7 +13,7 @@ typedef struct __TBL_USER_INFO char user_phone[31]; }dbUser; -long lExtremeUserInfo() +int main(int argc, char *argv[]) { dbUser stUser; SATvm *pstSavm = (SATvm *)pGetSATvm(); @@ -21,7 +21,8 @@ long lExtremeUserInfo() /* 初始化TBL_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ if(RC_SUCC != lInitSATvm(pstSavm, TBL_USER_INFO)) { - fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } @@ -32,7 +33,8 @@ long lExtremeUserInfo() decorate(pstSavm, dbUser, user_phone, MATCH_MAX); if(RC_SUCC != lExtreme(pstSavm, (void *)&stUser)) { - fprintf(stderr, "Extreme error: (%d) (%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "Extreme error: (%d) (%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } @@ -40,13 +42,3 @@ long lExtremeUserInfo() return RC_SUCC; } - -int main(int argc, char *argv[]) -{ - if(RC_SUCC != lExtremeUserInfo()) - return RC_FAIL; - - return RC_SUCC; -} - - diff --git a/demo/group.c b/demo/group.c index c62030b..3d9a94b 100644 --- a/demo/group.c +++ b/demo/group.c @@ -13,7 +13,7 @@ typedef struct __TBL_USER_INFO char user_phone[31]; }dbUser; -long lGroupUserInfo() +int main(int argc, char *argv[]) { size_t i, lRow = 0; dbUser stUser, *pstUser = NULL; @@ -22,7 +22,8 @@ long lGroupUserInfo() /* 初始化TBL_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ if(RC_SUCC != lInitSATvm(pstSavm, TBL_USER_INFO)) { - fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } @@ -33,7 +34,8 @@ long lGroupUserInfo() decorate(pstSavm, dbUser, user_phone, GROUP_BY | ORDER_DESC); if(RC_SUCC != lGroup(pstSavm, &lRow, (void **)&pstUser)) { - fprintf(stderr, "Group error: (%d) (%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "Group error: (%d) (%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } @@ -44,13 +46,3 @@ long lGroupUserInfo() return RC_SUCC; } - -int main(int argc, char *argv[]) -{ - if(RC_SUCC != lGroupUserInfo()) - return RC_FAIL; - - return RC_SUCC; -} - - diff --git a/demo/insert.c b/demo/insert.c index b79c807..de11bfa 100644 --- a/demo/insert.c +++ b/demo/insert.c @@ -1,7 +1,7 @@ #include "tvm.h" #include "tmain.h" -#define TBL_USER_INFO 21 +#define TBL_USER_INFO 20 typedef struct __TBL_USER_INFO { @@ -13,7 +13,7 @@ typedef struct __TBL_USER_INFO char user_phone[31]; }dbUser; -long lInsertUserInfo() +int main(int argc, char *argv[]) { dbUser stUser; SATvm *pstSavm = (SATvm *)pGetSATvm(); @@ -21,13 +21,13 @@ long lInsertUserInfo() /* 初始化TBL_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ if(RC_SUCC != lInitSATvm(pstSavm, TBL_USER_INFO)) { - fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } conditinit(pstSavm, stUser, TBL_USER_INFO); // 绑定变量 - -// stUser.acct_id = 10021; // 对结构体赋值 +// stUser.acct_id = time(NULL); // 对结构体赋值 strcpy(stUser.user_no, "20180223"); // 对结构体赋值 strcpy(stUser.user_type, "1"); // 对结构体赋值 strcpy(stUser.user_nm, "Savens Liu"); // 对结构体赋值 @@ -37,23 +37,12 @@ long lInsertUserInfo() if(RC_SUCC != lInsert(pstSavm)) // 插入记录 { - fprintf(stderr, "Insert error:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "Insert error:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } - return RC_SUCC; -} - -int main(int argc, char *argv[]) -{ - - if(RC_SUCC != lInsertUserInfo()) - return RC_FAIL; - - fprintf(stdout, "新增记录成功, completed successfully!!!\n"); - fflush(stderr); + fprintf(stdout, "insert success, effect:%d\n", pstSavm->m_lEffect); return RC_SUCC; } - - diff --git a/demo/makefile b/demo/makefile index 57968c2..deedf20 100755 --- a/demo/makefile +++ b/demo/makefile @@ -1,6 +1,6 @@ INCDIR= -I/usr/include -I$(HOME)/include -I./ -I./include -I../include #LIBDIR= -L$(HOME)/lib -L../lib -lm -lc -ldl -lpthread -static -lstvm -LIBDIR= -L$(HOME)/lib -L../lib -lstvm -lm -lc -ldl -lpthread +LIBDIR= -L$(HOME)/lib -L../lib -lstvm -lm -lc -ldl -lrt -lpthread CC=cc -fPIC -g CO=-c -pg OUTLIB=../lib @@ -11,6 +11,8 @@ CREATE=create_table QUEUE=create_queue PUSH=push POP=pop +TVMPOP=tvmpop +TVMREPLACE=tvmreplace INSERT=insert SELECT=select QUERY=query @@ -25,12 +27,22 @@ CLICK=click REPLACE=replace POPUP=popup PRESSURE=press_demo +TVMPUSH=tvmpush +ASYPUSH=asypush -all: $(CREATE) $(INSERT) $(QUEUE) $(PUSH) $(POP) $(SELECT) $(QUERY) $(DELETE) $(UPDATE) $(COUNT) $(GROUP) $(EXTREME) $(TRUNCATE) $(DROP) $(PRESSURE) $(CLICK) $(POPUP) $(REPLACE) clean +all: $(CREATE) $(INSERT) $(QUEUE) $(PUSH) $(POP) $(SELECT) $(QUERY) $(DELETE) $(UPDATE) $(COUNT) $(GROUP) $(EXTREME) $(TRUNCATE) $(DROP) $(PRESSURE) $(CLICK) $(POPUP) $(REPLACE) $(TVMPUSH) $(ASYPUSH) $(TVMPOP) $(TVMREPLACE) clean $(CREATE): create_table.o $(CC) -o $@ $< $(LIBDIR) +$(TVMREPLACE): tvmreplace.o + $(CC) -o $@ $< $(LIBDIR) +$(TVMPOP): tvmpop.o + $(CC) -o $@ $< $(LIBDIR) $(PUSH): push.o $(CC) -o $@ $< $(LIBDIR) +$(TVMPUSH): tvmpush.o + $(CC) -o $@ $< $(LIBDIR) +$(ASYPUSH): asypush.o + $(CC) -o $@ $< $(LIBDIR) $(POP): pop.o $(CC) -o $@ $< $(LIBDIR) $(INSERT): insert.o diff --git a/demo/pop.c b/demo/pop.c new file mode 100644 index 0000000..fdfd70a --- /dev/null +++ b/demo/pop.c @@ -0,0 +1,41 @@ +#include "tvm.h" +#include "tmain.h" + +#define QUEUE_USER_INFO 21 + +typedef struct __QUEUE_USER_INFO +{ + long acct_id; + char user_no[21]; + char user_type[2]; + char user_nm[81]; + char user_addr[161]; + char user_phone[31]; +}dbUser; + +int main(int argc, char *argv[]) +{ + dbUser stUser; + SATvm *pstSavm = (SATvm *)pGetSATvm(); + + /* 初始化QUEUE_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ + if(RC_SUCC != lInitSATvm(pstSavm, QUEUE_USER_INFO)) + { + fprintf(stderr, "attch failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + queueinit(pstSavm, stUser, QUEUE_USER_INFO); // 绑定变量 + if(RC_SUCC != lPop(pstSavm, (void *)&stUser, QUE_NORMAL)) // POP记录 + { + fprintf(stderr, "Pop error:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + fprintf(stdout, "acct_id:%ld, user_no:%s, user_type:%s, user_nm:%s, user_addr:%s, " + "user_phone:%s\n", stUser.acct_id, stUser.user_no, stUser.user_type, stUser.user_nm, + stUser.user_addr, stUser.user_phone); + + return RC_SUCC; +} diff --git a/demo/popup.c b/demo/popup.c new file mode 100644 index 0000000..c1349cf --- /dev/null +++ b/demo/popup.c @@ -0,0 +1,52 @@ +#include "tvm.h" +#include "tmain.h" + +#define QUEUE_USER_INFO 21 + +typedef struct __QUEUE_USER_INFO +{ + long acct_id; + char user_no[21]; + char user_type[2]; + char user_nm[81]; + char user_addr[161]; + char user_phone[31]; +}dbUser; + +int main(int argc, char *argv[]) +{ + long i, lRows = 0, lTime; + dbUser stUser, *pstUser = NULL; + SATvm *pstSavm = (SATvm *)pGetSATvm(); + + /* 初始化QUEUE_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ + if(RC_SUCC != lInitSATvm(pstSavm, QUEUE_USER_INFO)) + { + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + lTime = time(NULL); + queuenull(pstSavm, sizeof(dbUser), QUEUE_USER_INFO); + if(RC_SUCC != lPopup(pstSavm, 3, 5, &lRows, (void **)&pstUser)) + { + fprintf(stderr, "Pop error:(%u)(%s), time:%ld, effect:%d\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno), time(NULL) - lTime, pstSavm->m_lEffect); + } + + if(0 != pstSavm->m_lErrno && 0 == pstSavm->m_lEffect) + return RC_FAIL; + + for(i = 0; i < lRows; i ++) + { + fprintf(stdout, "row:%ld, acct_id:%ld, user_no:%s, user_type:%s, " + "user_nm:%s, user_addr:%s, user_phone:%s\n", i, pstUser[i].acct_id, + pstUser[i].user_no, pstUser[i].user_type, pstUser[i].user_nm, + pstUser[i].user_addr, pstUser[i].user_phone); + } + + TFree(pstUser); + + return RC_SUCC; +} diff --git a/demo/push.c b/demo/push.c new file mode 100644 index 0000000..3ee7623 --- /dev/null +++ b/demo/push.c @@ -0,0 +1,46 @@ +#include "tvm.h" +#include "tmain.h" + +#define QUEUE_USER_INFO 21 + +typedef struct __QUEUE_USER_INFO +{ + long acct_id; + char user_no[21]; + char user_type[2]; + char user_nm[81]; + char user_addr[161]; + char user_phone[31]; +}dbUser; + +int main(int argc, char *argv[]) +{ + dbUser stUser; + SATvm *pstSavm = (SATvm *)pGetSATvm(); + + /* 初始化QUEUE_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ + if(RC_SUCC != lInitSATvm(pstSavm, QUEUE_USER_INFO)) + { + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + queueinit(pstSavm, stUser, QUEUE_USER_INFO); // 绑定变量 + stUser.acct_id = time(NULL); // 对结构体赋值 + strcpy(stUser.user_no, "20180223"); // 对结构体赋值 + strcpy(stUser.user_type, "1"); // 对结构体赋值 + strcpy(stUser.user_nm, "Savens Liu"); // 对结构体赋值 + strcpy(stUser.user_addr, "China"); // 对结构体赋值 + strcpy(stUser.user_phone, "18672911111"); // 对结构体赋值 + if(RC_SUCC != lPush(pstSavm)) // 插入记录 + { + fprintf(stderr, "Insert error:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + fprintf(stdout, "push success, effect:%d\n", pstSavm->m_lEffect); + + return RC_SUCC; +} diff --git a/demo/query.c b/demo/query.c index 0810716..34a3aed 100644 --- a/demo/query.c +++ b/demo/query.c @@ -13,7 +13,7 @@ typedef struct __TBL_USER_INFO char user_phone[31]; }dbUser; -long lQueryUserInfo() +int main(int argc, char *argv[]) { size_t i, lRow = 0; dbUser stUser, *pstUser = NULL; @@ -22,37 +22,30 @@ long lQueryUserInfo() /* 初始化TBL_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ if(RC_SUCC != lInitSATvm(pstSavm, TBL_USER_INFO)) { - fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } conditinit(pstSavm, stUser, TBL_USER_INFO); // 绑定变量 - conditnum(pstSavm, stUser, acct_id, 2018053017); stringset(pstSavm, stUser, user_type, "1"); // 查询条件赋值 - stringset(pstSavm, stUser, user_no, "20180224"); // 查询条件赋值 + stringset(pstSavm, stUser, user_no, "20180223"); // 查询条件赋值 if(RC_SUCC != lQuery(pstSavm, &lRow, (void **)&pstUser)) { - fprintf(stderr, "Query error:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "Query error:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } for(i = 0; i < lRow; i ++) { - fprintf(stdout, "acct_id:%ld, user_no:%s, user_type:%s, user_nm:%s, user_addr:%s, user_phone:%s\n", - pstUser[i].acct_id, pstUser[i].user_no, pstUser[i].user_type, pstUser[i].user_nm, pstUser[i].user_addr, + fprintf(stdout, "acct_id:%ld, user_no:%s, user_type:%s, user_nm:%s, " + "user_addr:%s, user_phone:%s\n", pstUser[i].acct_id, pstUser[i].user_no, + pstUser[i].user_type, pstUser[i].user_nm, pstUser[i].user_addr, pstUser[i].user_phone); } TFree(pstUser); return RC_SUCC; } - -int main(int argc, char *argv[]) -{ - - if(RC_SUCC != lQueryUserInfo()) - return RC_FAIL; - - return RC_SUCC; -} diff --git a/demo/select.c b/demo/select.c index 65b192d..ae9d056 100644 --- a/demo/select.c +++ b/demo/select.c @@ -13,7 +13,7 @@ typedef struct __TBL_USER_INFO char user_phone[31]; }dbUser; -long lSelectUserInfo() +int main(int argc, char *argv[]) { dbUser stUser; SATvm *pstSavm = (SATvm *)pGetSATvm(); @@ -21,34 +21,26 @@ long lSelectUserInfo() /* 初始化TBL_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ if(RC_SUCC != lInitSATvm(pstSavm, TBL_USER_INFO)) { - fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } conditinit(pstSavm, stUser, TBL_USER_INFO); // 绑定变量 conditnum(pstSavm, stUser, acct_id, 2018053017); // 查询条件赋值 - stringset(pstSavm, stUser, user_type, "1"); // 查询条件赋值 - stringset(pstSavm, stUser, user_no, "20180224"); // 查询条件赋值 + conditstr(pstSavm, stUser, user_type, "1"); // 查询条件赋值 + conditstr(pstSavm, stUser, user_no, "20180223"); // 查询条件赋值 if(RC_SUCC != lSelect(pstSavm, (void *)&stUser)) { - fprintf(stderr, "Select error: (%d) (%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "Select error: (%d) (%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } - fprintf(stdout, "acct_id:%ld, user_no:%s, user_type:%s, user_nm:%s, user_addr:%s, user_phone:%s\n", - stUser.acct_id, stUser.user_no, stUser.user_type, stUser.user_nm, stUser.user_addr, stUser.user_phone); + fprintf(stdout, "acct_id:%ld, user_no:%s, user_type:%s, user_nm:%s, " + "user_addr:%s, user_phone:%s\n", stUser.acct_id, stUser.user_no, + stUser.user_type, stUser.user_nm, stUser.user_addr, stUser.user_phone); return RC_SUCC; } - -int main(int argc, char *argv[]) -{ - - if(RC_SUCC != lSelectUserInfo()) - return RC_FAIL; - - return RC_SUCC; -} - - diff --git a/demo/truncate.c b/demo/truncate.c index 1a7a9d5..1c92666 100644 --- a/demo/truncate.c +++ b/demo/truncate.c @@ -3,25 +3,15 @@ #define TBL_USER_INFO 20 -typedef struct __TBL_USER_INFO +int main(int argc, char *argv[]) { - long acct_id; - char user_no[21]; - char user_type[2]; - char user_nm[81]; - char user_addr[161]; - char user_phone[31]; -}dbUser; - -long lTruncateUserInfo() -{ - dbUser stUser; SATvm *pstSavm = (SATvm *)pGetSATvm(); /* 初始化TBL_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ if(RC_SUCC != lInitSATvm(pstSavm, TBL_USER_INFO)) { - fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } @@ -34,14 +24,3 @@ long lTruncateUserInfo() return RC_SUCC; } - -int main(int argc, char *argv[]) -{ - - if(RC_SUCC != lTruncateUserInfo()) - return RC_FAIL; - - return RC_SUCC; -} - - diff --git a/demo/tvmpop.c b/demo/tvmpop.c new file mode 100644 index 0000000..51116c2 --- /dev/null +++ b/demo/tvmpop.c @@ -0,0 +1,42 @@ +#include "tvm.h" +#include "tmain.h" + +#define QUEUE_USER_INFO 21 + +typedef struct __QUEUE_USER_INFO +{ + long acct_id; + char user_no[21]; + char user_type[2]; + char user_nm[81]; + char user_addr[161]; + char user_phone[31]; +}dbUser; + +int main(int argc, char *argv[]) +{ + dbUser stUser; + SATvm *pstSavm = (SATvm *)pGetSATvm(); + + if(RC_SUCC != lTvmConnect(pstSavm, "127.0.0.1", 5050, 2)) + { + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + queueinit(pstSavm, stUser, QUEUE_USER_INFO); + if(RC_SUCC != lTvmPop(pstSavm, (void *)&stUser, QUE_NORMAL)) // 插入记录 + { + fprintf(stderr, "Pop error:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + vTvmDisconnect(pstSavm); + + fprintf(stdout, "acct_id:%ld, user_no:%s, user_type:%s, user_nm:%s, user_addr:%s, " + "user_phone:%s\n", stUser.acct_id, stUser.user_no, stUser.user_type, stUser.user_nm, + stUser.user_addr, stUser.user_phone); + + return RC_SUCC; +} diff --git a/demo/tvmpush.c b/demo/tvmpush.c new file mode 100644 index 0000000..3742ab6 --- /dev/null +++ b/demo/tvmpush.c @@ -0,0 +1,47 @@ +#include "tvm.h" +#include "tmain.h" + +#define QUEUE_USER_INFO 21 + +typedef struct __QUEUE_USER_INFO +{ + long acct_id; + char user_no[21]; + char user_type[2]; + char user_nm[81]; + char user_addr[161]; + char user_phone[31]; +}dbUser; + +int main(int argc, char *argv[]) +{ + dbUser stUser; + SATvm *pstSavm = (SATvm *)pGetSATvm(); + + if(RC_SUCC != lTvmConnect(pstSavm, "127.0.0.1", 5050, 2)) + { + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + queueinit(pstSavm, stUser, QUEUE_USER_INFO); // 绑定变量 + stUser.acct_id = time(NULL); // 对结构体赋值 + strcpy(stUser.user_no, "20180223"); // 对结构体赋值 + strcpy(stUser.user_type, "1"); // 对结构体赋值 + strcpy(stUser.user_nm, "Savens Liu"); // 对结构体赋值 + strcpy(stUser.user_addr, "China"); // 对结构体赋值 + strcpy(stUser.user_phone, "18672911111"); // 对结构体赋值 + if(RC_SUCC != lTvmPush(pstSavm)) // 插入记录 + { + fprintf(stderr, "Push error:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + vTvmDisconnect(pstSavm); + + fprintf(stdout, "push success, effect:%d\n", pstSavm->m_lEffect); + + return RC_SUCC; +} + + diff --git a/demo/tvmreplace.c b/demo/tvmreplace.c new file mode 100644 index 0000000..35a6911 --- /dev/null +++ b/demo/tvmreplace.c @@ -0,0 +1,49 @@ +#include "tvm.h" +#include "tmain.h" + +#define TBL_USER_INFO 20 + +typedef struct __TBL_USER_INFO +{ + long acct_id; + char user_no[21]; + char user_type[2]; + char user_nm[81]; + char user_addr[161]; + char user_phone[31]; +}dbUser; + +int main(int argc, char *argv[]) +{ + dbUser stUser, stUpd; + SATvm *pstSavm = (SATvm *)pGetSATvm(); + + if(RC_SUCC != lTvmConnect(pstSavm, "127.0.0.1", 5050, 2)) + { + fprintf(stderr, "connect failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); + return RC_FAIL; + } + + updateinit(pstSavm, stUpd); + conditinit(pstSavm, stUser, TBL_USER_INFO); // 绑定变量 + conditstr(pstSavm, stUser, user_no, "20180529"); // 查询条件赋值 + conditstr(pstSavm, stUser, user_type, "1"); // 查询条件赋值 + + updatestr(pstSavm, stUser, user_addr, "china"); // 查询条件赋值 + updatestr(pstSavm, stUser, user_phone, "1869112XAZZ"); + updatestr(pstSavm, stUser, user_nm, "DeffPuzzL"); // 查询条件赋值 + updatestr(pstSavm, stUser, user_type, "1"); // 查询条件赋值 + updatestr(pstSavm, stUser, user_no, "20180529"); // 查询条件赋值 + if(RC_SUCC != lTvmReplace(pstSavm, (void *)&stUser)) +// if(RC_SUCC != lAsyReplace(pstSavm, (void *)&stUser)) + { + fprintf(stderr, "Replace error: (%d) (%s), ep(%d)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno), pstSavm->m_lEType); + return RC_FAIL; + } + + vTvmDisconnect(pstSavm); + + return RC_SUCC; +} diff --git a/demo/update.c b/demo/update.c index e2bbfce..43cdc87 100644 --- a/demo/update.c +++ b/demo/update.c @@ -13,7 +13,7 @@ typedef struct __TBL_USER_INFO char user_phone[31]; }dbUser; -long lUpdateUserInfo() +int main(int argc, char *argv[]) { dbUser stUser, stUpd; SATvm *pstSavm = (SATvm *)pGetSATvm(); @@ -21,32 +21,23 @@ long lUpdateUserInfo() /* 初始化TBL_USER_INFO表,每张表都需要初始化一次, 对于表重建后,需要重新初始化一次。*/ if(RC_SUCC != lInitSATvm(pstSavm, TBL_USER_INFO)) { - fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "init failed, err:(%d)(%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } updateinit(pstSavm, stUpd); conditinit(pstSavm, stUser, TBL_USER_INFO); // 绑定变量 - stringset(pstSavm, stUser, user_type, "1"); // 查询条件赋值 - stringset(pstSavm, stUser, user_no, "20180224"); // 查询条件赋值 + conditstr(pstSavm, stUser, user_type, "1"); // 查询条件赋值 + conditstr(pstSavm, stUser, user_no, "20180223"); // 查询条件赋值 - stringupd(pstSavm, stUpd, user_phone, "1869112XXXX"); + updatestr(pstSavm, stUpd, user_phone, "1869112XXXX"); if(RC_SUCC != lUpdate(pstSavm, (void *)&stUpd)) { - fprintf(stderr, "Update error: (%d) (%s)\n", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + fprintf(stderr, "Update error: (%d) (%s)\n", pstSavm->m_lErrno, + sGetTError(pstSavm->m_lErrno)); return RC_FAIL; } return RC_SUCC; } - -int main(int argc, char *argv[]) -{ - - if(RC_SUCC != lUpdateUserInfo()) - return RC_FAIL; - - return RC_SUCC; -} - - diff --git a/include/tmain.h b/include/tmain.h index 23a2f86..527ea10 100644 --- a/include/tmain.h +++ b/include/tmain.h @@ -137,6 +137,7 @@ extern long lTvmRebuildIndex(SATvm *pstSavm, TABLE t); extern long lTvmResetLock(SATvm *pstSavm, TABLE t); // asynchronous interface +extern long lAsyPush(SATvm *pstSavm); extern long lAsyInsert(SATvm *pstSavm); extern long lAsyDelete(SATvm *pstSavm); extern long lAsyUpdate(SATvm *pstSavm, void *pvData); diff --git a/include/tvm.h b/include/tvm.h index c43c480..e4274f1 100644 --- a/include/tvm.h +++ b/include/tvm.h @@ -75,6 +75,7 @@ typedef long CREATE; #define OPERAYS_DELETE 1026 #define OPERAYS_UPDATE 1027 #define OPERATS_REPLACE 1028 +#define OPERAYS_QUEPUSH 1029 #define OPERATE_REPLACE 13 #define OPERATE_TRCATE 14 @@ -354,11 +355,11 @@ typedef long CREATE; p->pstVoid = (void *)&(s); \ }while(0); -#define conditnull(p,d,t) do{ \ +#define conditnull(p,l,t) do{ \ p->stCond.uFldcmp = 0; \ p->stUpdt.uFldcmp = 0; \ p->lFind = 0; \ - p->lSize = sizeof(d); \ + p->lSize = l; \ p->tblName = t; \ p->pstVoid = NULL; \ }while(0); @@ -370,72 +371,78 @@ typedef long CREATE; p->pstVoid = (void *)&v; \ }while(0); -#define queuerbind(p,v,l,t) do{ \ +#define queuebind(p,v,t) do{ \ p->lSize = l; \ p->tblName = t; \ p->pstVoid = (void *)v; \ - }while(0); -#define stringsetv(p,s,f,...) vSetCodField(&p->stCond, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ - snprintf((s).f, sizeof((s).f), __VA_ARGS__); + }while(0); -#define stringset(p,s,f,v) vSetCodField(&p->stCond, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ - strncpy((s).f, v, sizeof((s).f)); +#define queuenull(p,l,t) do{ \ + p->lSize = l; \ + p->tblName = t; \ + }while(0); -#define stringcpy(p,s,f,v) vSetCodField(&p->stCond, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ - memcpy(&(s) + ((void *)(s).f - (void *)&(s)), (void *)v, sizeof((s).f)); +#define stringsetv(p,s,f,...) vSetCodField(&p->stCond, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ + snprintf((s).f, sizeof((s).f), __VA_ARGS__); -#define numberset(p,s,f,v) vSetCodField(&p->stCond, sizeof((s).f), (char *)&(s).f - (char *)&(s)); \ - (s).f = v; +#define stringset(p,s,f,v) vSetCodField(&p->stCond, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ + strncpy((s).f, v, sizeof((s).f)); -#define decorate(p,d,f,v) vSetDecorate(&p->stUpdt, FLEN(d, f), FPOS(d, f), v); \ - p->lFind = p->lFind | (v); +#define stringcpy(p,s,f,v) vSetCodField(&p->stCond, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ + memcpy(&(s) + ((void *)(s).f - (void *)&(s)), (void *)v, sizeof((s).f)); -#define stringreset(s,f,v) strncpy((s).f, v, sizeof((s).f)); -#define stringresetv(s,f,...) snprintf((s).f, sizeof((s).f), __VA_ARGS__); -#define stringrecpy(s,f,v) memcpy((s).f, v, sizeof((s).f)); -#define numberreset(s,f,v) (s).f = v; -#define conditset(p,s,f) vSetCodField(&p->stCond, sizeof((s).f), (char *)&(s).f - (char *)&(s)); +#define numberset(p,s,f,v) vSetCodField(&p->stCond, sizeof((s).f), (char *)&(s).f - (char *)&(s)); \ + (s).f = v; -#define conditfld conditset -#define conditnum numberset -#define conditstr stringset -#define conditcpy stringcpy -#define conditstv stringsetv -#define conditrenum numberreset -#define conditrestr stringreset -#define conditrecpy stringrecpy -#define conditrestv stringresetv +#define decorate(p,d,f,v) vSetDecorate(&p->stUpdt, FLEN(d, f), FPOS(d, f), v); \ + p->lFind = p->lFind | (v); + +#define stringreset(s,f,v) strncpy((s).f, v, sizeof((s).f)); +#define stringresetv(s,f,...) snprintf((s).f, sizeof((s).f), __VA_ARGS__); +#define stringrecpy(s,f,v) memcpy((s).f, v, sizeof((s).f)); +#define numberreset(s,f,v) (s).f = v; +#define conditset(p,s,f) vSetCodField(&p->stCond, sizeof((s).f), (char *)&(s).f - (char *)&(s)); + +#define conditfld conditset +#define conditnum numberset +#define conditstr stringset +#define conditcpy stringcpy +#define conditstv stringsetv +#define conditrenum numberreset +#define conditrestr stringreset +#define conditrecpy stringrecpy +#define conditrestv stringresetv // UPDATE Field assignment -#define updateinit(p, s) memset(&(s), 0, sizeof(s)); +#define updateinit(p, s) memset(&(s), 0, sizeof(s)); //#define updateinit(p, s) p->stUpdt.uFldcmp = 0; memset(&(s), 0, sizeof(s)); -#define stringupd(p,s,f,v) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ - strncpy((s).f, v, sizeof((s).f)); +#define stringupd(p,s,f,v) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ + strncpy((s).f, v, sizeof((s).f)); -#define stringupy(p,s,f,v) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ - memcpy(&(s) + ((void *)(s).f - (void *)&(s)), (void *)v, sizeof((s).f)); +#define stringupy(p,s,f,v) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ + memcpy(&(s) + ((void *)(s).f - (void *)&(s)), (void *)v, sizeof((s).f)); -#define numberupd(p,s,f,v) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)&(s).f - (char *)&(s)); \ - (s).f = v; +#define numberupd(p,s,f,v) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)&(s).f - (char *)&(s)); \ + (s).f = v; -#define updatestrv(p,s,f,...) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ - snprintf((s).f, sizeof((s).f), __VA_ARGS__); +#define updatestrv(p,s,f,...) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)(s).f - (char *)&(s)); \ + snprintf((s).f, sizeof((s).f), __VA_ARGS__); -#define updateset(p,s,f) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)&(s).f - (char *)&(s)); -#define updatefld updateset -#define updatenum numberupd -#define updatestr stringupd -#define updatecpy stringupy -#define updatestv updatestrv -#define updaterenum(s,f,v) (s).f = v; -#define updaterestr(s,f,v) strncpy((s).f, v, sizeof((s).f)); -#define updaterecpy(s,f,v) memcpy((s).f, v, sizeof((s).f)); -#define updaterestv(s,f,...) snprintf((s).f, sizeof((s).f), __VA_ARGS__); +#define updateset(p,s,f) vSetCodField(&p->stUpdt, sizeof((s).f), (char *)&(s).f - (char *)&(s)); +#define updatefld updateset +#define updatenum numberupd +#define updatestr stringupd +#define updatecpy stringupy +#define updatestv updatestrv +#define updaterenum(s,f,v) (s).f = v; +#define updaterestr(s,f,v) strncpy((s).f, v, sizeof((s).f)); +#define updaterecpy(s,f,v) memcpy((s).f, v, sizeof((s).f)); +#define updaterestv(s,f,...) snprintf((s).f, sizeof((s).f), __VA_ARGS__); -#define aliasreset(p,t) lResetDefine(p, t); -#define aliasvalue(p,t,s,a,v) lSetTructByAlias(p, t, s, a, v); -#define aliasset(p,t,s,f,v) lSetAlias(p, t, FLEN(s, f), FPOS(s, f), v); +#define aliasreset(p,t) lResetDefine(p, t); +#define aliasvalue(p,t,s,a,v) lSetTructByAlias(p, t, s, a, v); +#define aliasset(p,t,s,f,v) lSetAlias(p, t, FLEN(s, f), FPOS(s, f), v); /************************************************************************************************* Table structure & index definition area *************************************************************************************************/ diff --git a/src/makefile b/src/makefile index ee58f23..5c1688e 100755 --- a/src/makefile +++ b/src/makefile @@ -1,5 +1,5 @@ INCDIR= -I/usr/include -I$(HOME)/include -I./ -I./include -I../include -LIBDIR= -L$(HOME)/lib -L../lib -lstvm -lreadline -lm -lc -ldl -lpthread +LIBDIR= -L$(HOME)/lib -L../lib -lstvm -lreadline -lm -lc -ldl -lrt -lpthread AR=ar LD=ld LN=ln diff --git a/src/queue.c b/src/queue.c index e789e06..42b7197 100644 --- a/src/queue.c +++ b/src/queue.c @@ -137,6 +137,52 @@ long _lPop(SATvm *pstSavm, void *pvAddr, void *pvOut, Timesp *tm) return RC_SUCC; } +/************************************************************************************************* + description:pop more data from queue + parameters: + tm --left time + tb --last record time + return: + true --success + false --time out + *************************************************************************************************/ +bool bIsTimeOut(Timesp *tm, Timesp *tb) +{ + Timesp tms; + + clock_gettime(CLOCK_REALTIME, &tms); + if(tms.tv_nsec < tb->tv_nsec) + { + tb->tv_sec = tms.tv_sec - tb->tv_sec - 1; + tb->tv_nsec = 1000000000 + tms.tv_nsec - tb->tv_nsec; + } + else + { + tb->tv_sec = tms.tv_sec - tb->tv_sec; + tb->tv_nsec = tms.tv_nsec - tb->tv_nsec; + } + + if(tb->tv_sec > tm->tv_sec) + return false; + + if(tm->tv_nsec < tb->tv_nsec) + { + tm->tv_sec = tm->tv_sec - tb->tv_sec - 1; + tm->tv_nsec = 1000000000 + tm->tv_nsec - tb->tv_nsec; + } + else + { + tm->tv_sec = tm->tv_sec - tb->tv_sec; + tm->tv_nsec = tm->tv_nsec - tb->tv_nsec; + } + + if((long)tm->tv_sec < 0) + return false; + + memcpy(tb, &tms, sizeof(Timesp)); + return true; +} + /************************************************************************************************* description:pop more data from queue parameters: @@ -153,6 +199,7 @@ long _lPop(SATvm *pstSavm, void *pvAddr, void *pvOut, Timesp *tm) long _lPops(SATvm *pstSavm, void *pvAddr, size_t lExpect, Timesp *tm, size_t *plOut, void **ppsvOut) { + Timesp tms; int nPos; SHTruck *ps = NULL; extern int errno; @@ -164,13 +211,27 @@ long _lPops(SATvm *pstSavm, void *pvAddr, size_t lExpect, Timesp *tm, size_t return RC_FAIL; } - for (*plOut = 0; *plOut < lExpect; ) + for (*plOut = 0, clock_gettime(CLOCK_REALTIME, &tms); *plOut < lExpect; ) { + if(!bIsTimeOut(tm, &tms)) + { + pstSavm->m_lEffect = *plOut; + if(0 == pstSavm->m_lEffect) + { + TFree(*ppsvOut); + pstSavm->m_lErrno = NO_DATA_FOUND; + } + else + pstSavm->m_lErrno = MQUE_WAIT_TMO; + return RC_FAIL; + } + if(0 != Futex(&pv->m_lValid, FUTEX_WAIT, 0, tm)) { if(ETIMEDOUT == errno) { - if(0 == *plOut) + pstSavm->m_lEffect = *plOut; + if(0 == pstSavm->m_lEffect) { TFree(*ppsvOut); pstSavm->m_lErrno = NO_DATA_FOUND; @@ -187,7 +248,7 @@ long _lPops(SATvm *pstSavm, void *pvAddr, size_t lExpect, Timesp *tm, size_t else // EWOULDBLOCK ; } - + if(0 == pv->m_lValid) continue; @@ -217,7 +278,7 @@ long _lPops(SATvm *pstSavm, void *pvAddr, size_t lExpect, Timesp *tm, size_t ++ (*plOut); } - pstSavm->m_lEffect = *plOut; + pstSavm->m_lEffect = *plOut; return RC_SUCC; } diff --git a/src/stvm.c b/src/stvm.c index f7ef78f..f9be49a 100644 --- a/src/stvm.c +++ b/src/stvm.c @@ -1239,7 +1239,7 @@ long lShowTables(SATvm *pstSavm) parameters: return: **************************************************************************************************/ -void vPrintAmount(int t, char *pszTable, int nValid, int nMax) +void vPrintAmount(int t, uint uType, char *pszTable, int nValid, int nMax) { double dPer; int i, nPer; @@ -1249,7 +1249,12 @@ void vPrintAmount(int t, char *pszTable, int nValid, int nMax) dPer = nValid * 100.0 / nMax; nPer = nValid * 50 / nMax > 0 ? nValid * 50 / nMax : 1; - fprintf(stdout, "TABLE:[%3d][%-20s]: [", t, pszTable); + if(SYS_TVM_SEQUE == t) + fprintf(stdout, "SEQUE:[%3d][%-20s]: [", t, pszTable); + else if(TYPE_MQUEUE == uType) + fprintf(stdout, "QUEUE:[%3d][%-20s]: [", t, pszTable); + else + fprintf(stdout, "TABLE:[%3d][%-20s]: [", t, pszTable); if(dPer < 60.00) fprintf(stdout, "\033[42;32m"); else if(dPer < 70.00) @@ -1318,8 +1323,8 @@ void vTableAmount() else snprintf(szTable, sizeof(szTable), "%s@%s", pstIndex[i].m_szPart, pstIndex[i].m_szTable); - vPrintAmount(pstIndex[i].m_table, szTable, lGetTblValid(pstIndex[i].m_table), - lGetTblRow(pstIndex[i].m_table)); + vPrintAmount(pstIndex[i].m_table, pstIndex[i].m_lType, szTable, + lGetTblValid(pstIndex[i].m_table), lGetTblRow(pstIndex[i].m_table)); vTblDisconnect(pstSavm, pstIndex[i].m_table); } TFree(pstIndex); diff --git a/src/tcp.c b/src/tcp.c index fd9295d..a85ee65 100644 --- a/src/tcp.c +++ b/src/tcp.c @@ -1420,6 +1420,13 @@ long lEventOperate(SATvm *pstSavm, SKCon *pstCon, TFace *pstFace, char *pvDat if(RC_SUCC == lDelete(pstSavm)) pstCon->m_pstWork = pstSavm->m_pstWork; return RC_SUCC; + case OPERAYS_QUEPUSH: + if(RC_SUCC != lPush(pstSavm)) + { + Tlog("Asypush error, %d, %s", pstSavm->m_lErrno, sGetTError(pstSavm->m_lErrno)); + pstFace->m_lRows = pstSavm->m_lEffect; + } + return RC_SUCC; case OPERAYS_INSERT: pstSavm->m_bWork = pstCon->m_bWork; pstSavm->m_pstWork = pstCon->m_pstWork; @@ -1427,13 +1434,8 @@ long lEventOperate(SATvm *pstSavm, SKCon *pstCon, TFace *pstFace, char *pvDat pstCon->m_pstWork = pstSavm->m_pstWork; return RC_SUCC; case OPERATE_QUEPOPS: - if(RC_SUCC == lPopup(pstSavm, pstFace->m_lFind, pstFace->m_lErrno, - (size_t *)&pstFace->m_lRows, (void *)&pvOut)) - { - pstSavm->m_lErrno = TVM_DONE_SUCC; - lData = pstFace->m_lDLen * pstFace->m_lRows; - } - + lPopup(pstSavm, pstFace->m_lFind, pstFace->m_lErrno, (size_t *)&pstFace->m_lRows, + (void *)&pvOut); pstFace->m_lErrno = pstSavm->m_lErrno; if(sizeof(TFace) != lSendBuffer(pstCon->m_skSock, (void *)pstFace, sizeof(TFace))) { @@ -1441,6 +1443,7 @@ long lEventOperate(SATvm *pstSavm, SKCon *pstCon, TFace *pstFace, char *pvDat return RC_SUCC; } + lData = pstFace->m_lDLen * pstFace->m_lRows; lSendBuffer(pstCon->m_skSock, pvOut, lData); TFree(pvOut); return RC_SUCC; @@ -2240,7 +2243,7 @@ long lCacheDomain(SATvm *pstSavm, Benum eMode, long lPort) return RC_FAIL; } - conditnull(pstSavm, TDomain, SYS_TVM_DOMAIN); + conditnull(pstSavm, sizeof(TDomain), SYS_TVM_DOMAIN); decorate(pstSavm, TDomain, m_szIp, GROUP_BY | ORDER_ASC); decorate(pstSavm, TDomain, m_lPort, GROUP_BY | ORDER_ASC); decorate(pstSavm, TDomain, m_lGroup, GROUP_BY); @@ -2274,7 +2277,7 @@ long lCacheDomain(SATvm *pstSavm, Benum eMode, long lPort) } TFree(pstDom); - conditnull(pstSavm, TDomain, SYS_TVM_DOMAIN); + conditnull(pstSavm, sizeof(TDomain), SYS_TVM_DOMAIN); decorate(pstSavm, TDomain, m_table, GROUP_BY | ORDER_ASC); if(RC_SUCC != lGroup(pstSavm, &lOut, (void *)&pstDom)) { @@ -2470,6 +2473,7 @@ long lBootLocal(SATvm *pstSavm, TBoot *pstBoot, Benum eMode) } } + fflush(stdout); fprintf(stdout, " process %s id=%d ... success\n", TVM_LOCAL_SERV, getpid()); fflush(stdout); @@ -4100,6 +4104,7 @@ void* pProtocaJava(SATvm *pstSavm, void *pstVoid, TFace *pstFace, void *pvBuf switch(pstFace->m_enum) { + case OPERAYS_QUEPUSH: case OPERATE_QUEPUSH: case OPERATE_INSERT: return pvBuffer; @@ -4235,6 +4240,7 @@ void* pParsePacket(SATvm *pstSavm, void *pstVoid, TFace *pstFace, void *pvBuf { case OPERAYS_INSERT: case OPERATE_INSERT: + case OPERAYS_QUEPUSH: case OPERATE_QUEPUSH: return memcpy(pstVoid, pvData, pstFace->m_lDLen); case OPERAYS_UPDATE: @@ -4384,7 +4390,10 @@ long lTvmPopup(SATvm *pstSavm, size_t lExpect, time_t lTime, size_t *plOut, v pstSavm->m_lErrno = CONDIT_IS_NIL; return RC_FAIL; } - + + // longest waiting time is 10 min + lTime = lTime > 600 ? 600 : lTime; + pstRun = (RunTime *)pGetRunTime(pstSavm, 0); if(!pstRun->pstVoid) { @@ -4413,7 +4422,7 @@ long lTvmPopup(SATvm *pstSavm, size_t lExpect, time_t lTime, size_t *plOut, v } pstSavm->m_lErrno = pstFace->m_lErrno; - if(0 != pstSavm->m_lErrno) + if(0 != pstSavm->m_lErrno && 0 == pstFace->m_lRows) return RC_FAIL; pstRun->m_lRowSize = pstSavm->lSize * pstFace->m_lRows; @@ -4848,6 +4857,54 @@ long lAsyInsert(SATvm *pstSavm) return RC_SUCC; } +/************************************************************************************************* + description:API - push by asynch + parameters: + pstSavm --stvm handle + return: + RC_SUCC --success + RC_FAIL --failure + *************************************************************************************************/ +long lAsyPush(SATvm *pstSavm) +{ + RunTime *pstRun; + TFace *pstFace; + uint lWrite = sizeof(TFace); + + if(!pstSavm || !pstSavm->pstVoid) + { + pstSavm->m_lErrno = CONDIT_IS_NIL; + return RC_FAIL; + } + + pstRun = (RunTime *)pGetRunTime(pstSavm, 0); + if(!pstRun->pstVoid) + { + pstSavm->m_lErrno = DOM_NOT_INITL; + return RC_FAIL; + } + + pstFace = (TFace *)pstRun->pstVoid; + pstFace->m_lFind = pstSavm->lFind; + pstFace->m_lDLen = pstSavm->lSize; + pstFace->m_lErrno = TVM_DONE_SUCC; + pstFace->m_enum = OPERAYS_QUEPUSH; + pstFace->m_table = pstSavm->tblName; + + pstFace->m_lRows = pstSavm->lSize; + lWrite = pstFace->m_lRows + sizeof(TFace); + + checkbuffer(pstSavm, pstRun, 1); + memcpy(pstRun->pstVoid + sizeof(TFace), pstSavm->pstVoid, pstSavm->lSize); + if(lWrite != lSendBuffer(pstSavm->m_skSock, (void *)pstRun->pstVoid, lWrite)) + { + pstSavm->m_lErrno = SOCK_COM_EXCP; + return RC_FAIL; + } + + return RC_SUCC; +} + /************************************************************************************************* description:API - push parameters: diff --git a/stvm.conf b/stvm.conf index c080ef8..7c29027 100644 --- a/stvm.conf +++ b/stvm.conf @@ -4,8 +4,8 @@ MAXTABLE=255 MAXFILED=3000 MAXDOMAIN=1024 MAXSEQUE=1024 -#SERVER_EXEC=4 -SERVER_EXEC=1 +SERVER_EXEC=4 +#SERVER_EXEC=1 DEPLOY=cluster #DEPLOY=local SERVER_PORT=5050