From 2a92ba8a4bddc035d94273ebc40e9c23b1be5967 Mon Sep 17 00:00:00 2001 From: deffpuzzl Date: Thu, 31 May 2018 21:36:12 +0800 Subject: [PATCH] add increase --- include/tvm.h | 4 ++-- src/tree.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/include/tvm.h b/include/tvm.h index 17cb332..32a8fd3 100644 --- a/include/tvm.h +++ b/include/tvm.h @@ -37,7 +37,7 @@ typedef long CREATE; /************************************************************************************************* custom macro *************************************************************************************************/ -#define FIELD_SEL 512 +#define FIELD_INCR 512 #define FIRST_ROW 256 #define ORDER_DESC 128 #define ORDER_ASC 64 @@ -358,7 +358,7 @@ typedef long CREATE; (s).f = v; #define decorate(p,d,f,v) vSetDecorate(&p->stUpdt, FLEN(d, f), FPOS(d, f), v); \ - p->lFind = (v) & FIRST_ROW; + 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__); diff --git a/src/tree.c b/src/tree.c index 27e1f26..1f1a630 100644 --- a/src/tree.c +++ b/src/tree.c @@ -6434,6 +6434,36 @@ long _lInsertTruck(SATvm *pstSavm, void *pvAddr, TABLE t, SHTruck *pstTruck, return RC_SUCC; } +/************************************************************************************************* + description:increate field + parameters: + pstCond --decoreate condit + pvData --memory address + pe --Table struct define + return: + *************************************************************************************************/ +void vIncrease(FdCond *pstCond, char *pvData, TblDef *pe) +{ + register int i = 0; + FdKey *pFdKey; + + if(0 == pstCond->uFldcmp) + return ; + + for(i = 0; i < pstCond->uFldcmp; i ++) + { + pFdKey = &pstCond->stFdKey[i]; + if(!(pFdKey->uDecorate & FIELD_INCR)) + continue; + + if(pFdKey->uFldlen < sizeof(llong)) + continue; + + pe->m_lExSeQ ++; + memcpy(pvData + pFdKey->uFldpos, &pe->m_lExSeQ, sizeof(llong)); + } +} + /************************************************************************************************* description:insert data to table parameters: @@ -6455,6 +6485,9 @@ long __lInsert(SATvm *pstSavm, void *pvAddr, TABLE t, ulong uTimes) return RC_FAIL; } + if(FIELD_INCR & pstSavm->lFind) + vIncrease(&pstSavm->stUpdt, (char *)pstSavm->pstVoid, (TblDef *)pvAddr); + if(HAVE_UNIQ_IDX(t)) { if(RC_SUCC != _lInsertIndex(pstSavm, pvAddr, t, &pstTruck))