/* perform put command */ static int procput(const char *path, const char *pkbuf, int pksiz, TCMAP *cols, int omode, int dmode){ TCTDB *tdb = tctdbnew(); if(g_dbgfd != INVALID_HANDLE_VALUE) tctdbsetdbgfd(tdb, g_dbgfd); if(!tctdbsetcodecfunc(tdb, _tc_recencode, NULL, _tc_recdecode, NULL)) printerr(tdb); if(!tctdbopen(tdb, path, TDBOWRITER | omode)){ printerr(tdb); tctdbdel(tdb); return 1; } bool err = false; char pknumbuf[TCNUMBUFSIZ]; if(pksiz < 1){ pksiz = sprintf(pknumbuf, "%lld", (long long)tctdbgenuid(tdb)); pkbuf = pknumbuf; } const char *vbuf; switch(dmode){ case -1: if(!tctdbputkeep(tdb, pkbuf, pksiz, cols)){ printerr(tdb); err = true; } break; case 1: if(!tctdbputcat(tdb, pkbuf, pksiz, cols)){ printerr(tdb); err = true; } break; case 10: vbuf = tcmapget2(cols, "_num"); if(!vbuf) vbuf = "1"; if(tctdbaddint(tdb, pkbuf, pksiz, tcatoi(vbuf)) == INT_MIN){ printerr(tdb); err = true; } break; case 11: vbuf = tcmapget2(cols, "_num"); if(!vbuf) vbuf = "1.0"; if(isnan(tctdbadddouble(tdb, pkbuf, pksiz, tcatof(vbuf)))){ printerr(tdb); err = true; } break; default: if(!tctdbput(tdb, pkbuf, pksiz, cols)){ printerr(tdb); err = true; } break; } if(!tctdbclose(tdb)){ if(!err) printerr(tdb); err = true; } tctdbdel(tdb); return err ? 1 : 0; }
/* perform put command */ static int procput(const char *path, const char *kbuf, int ksiz, const char *vbuf, int vsiz, int omode, int dmode) { TCHDB *hdb = tchdbnew(); if (!INVALIDHANDLE(g_dbgfd)) tchdbsetdbgfd(hdb, g_dbgfd); if (!tchdbsetcodecfunc(hdb, _tc_recencode, NULL, _tc_recdecode, NULL)) printerr(hdb); if (!tchdbopen(hdb, path, HDBOWRITER | omode)) { printerr(hdb); tchdbdel(hdb); return 1; } bool err = false; int inum; double dnum; switch (dmode) { case -1: if (!tchdbputkeep(hdb, kbuf, ksiz, vbuf, vsiz)) { printerr(hdb); err = true; } break; case 1: if (!tchdbputcat(hdb, kbuf, ksiz, vbuf, vsiz)) { printerr(hdb); err = true; } break; case 10: inum = tchdbaddint(hdb, kbuf, ksiz, tcatoi(vbuf)); if (inum == INT_MIN) { printerr(hdb); err = true; } else { printf("%d\n", inum); } break; case 11: dnum = tchdbadddouble(hdb, kbuf, ksiz, tcatof(vbuf)); if (isnan(dnum)) { printerr(hdb); err = true; } else { printf("%.6f\n", dnum); } break; default: if (!tchdbput(hdb, kbuf, ksiz, vbuf, vsiz)) { printerr(hdb); err = true; } break; } if (!tchdbclose(hdb)) { if (!err) printerr(hdb); err = true; } tchdbdel(hdb); return err ? 1 : 0; }
/* perform put command */ static int procput(const char *path, const char *kbuf, int ksiz, const char *vbuf, int vsiz, int omode, int dmode){ TCFDB *fdb = tcfdbnew(); if(g_dbgfd >= 0) tcfdbsetdbgfd(fdb, g_dbgfd); if(!tcfdbopen(fdb, path, FDBOWRITER | omode)){ printerr(fdb); tcfdbdel(fdb); return 1; } bool err = false; int inum; double dnum; switch(dmode){ case -1: if(!tcfdbputkeep2(fdb, kbuf, ksiz, vbuf, vsiz)){ printerr(fdb); err = true; } break; case 1: if(!tcfdbputcat2(fdb, kbuf, ksiz, vbuf, vsiz)){ printerr(fdb); err = true; } break; case 10: inum = tcfdbaddint(fdb, tcfdbkeytoid(kbuf, ksiz), tcatoi(vbuf)); if(inum == INT_MIN){ printerr(fdb); err = true; } else { printf("%d\n", inum); } break; case 11: dnum = tcfdbadddouble(fdb, tcfdbkeytoid(kbuf, ksiz), tcatof(vbuf)); if(isnan(dnum)){ printerr(fdb); err = true; } else { printf("%.6f\n", dnum); } break; default: if(!tcfdbput2(fdb, kbuf, ksiz, vbuf, vsiz)){ printerr(fdb); err = true; } break; } if(!tcfdbclose(fdb)){ if(!err) printerr(fdb); err = true; } tcfdbdel(fdb); return err ? 1 : 0; }
/* perform put command */ static int procput(const char *name, const char *kbuf, int ksiz, const char *vbuf, int vsiz, int dmode){ TCADB *adb = tcadbnew(); ADBSKEL skel; if(*name == '@'){ setskeltran(&skel); if(!tcadbsetskel(adb, &skel)){ printerr(adb); skel.del(skel.opq); tcadbdel(adb); return 1; } name++; } else if(*name == '%'){ if(!tcadbsetskelmulti(adb, 8)){ printerr(adb); tcadbdel(adb); return 1; } name++; } if(!tcadbopen(adb, name)){ printerr(adb); tcadbdel(adb); return 1; } bool err = false; switch(dmode){ case -1: if(!tcadbputkeep(adb, kbuf, ksiz, vbuf, vsiz)){ printerr(adb); err = true; } break; case 1: if(!tcadbputcat(adb, kbuf, ksiz, vbuf, vsiz)){ printerr(adb); err = true; } break; case 10: if(tcadbaddint(adb, kbuf, ksiz, tcatoi(vbuf)) == INT_MIN){ printerr(adb); err = true; } break; case 11: if(isnan(tcadbadddouble(adb, kbuf, ksiz, tcatof(vbuf)))){ printerr(adb); err = true; } break; default: if(!tcadbput(adb, kbuf, ksiz, vbuf, vsiz)){ printerr(adb); err = true; } break; } if(!tcadbclose(adb)){ if(!err) printerr(adb); err = true; } tcadbdel(adb); return err ? 1 : 0; }
/* perform put command */ static int procput(const char *path, const char *kbuf, int ksiz, const char *vbuf, int vsiz, TCCMP cmp, int omode, int dmode){ TCBDB *bdb = tcbdbnew(); if(g_dbgfd != INVALID_HANDLE_VALUE) tcbdbsetdbgfd(bdb, g_dbgfd); if(cmp && !tcbdbsetcmpfunc(bdb, cmp, NULL)) printerr(bdb); if(!tcbdbsetcodecfunc(bdb, _tc_recencode, NULL, _tc_recdecode, NULL)) printerr(bdb); if(!tcbdbopen(bdb, path, BDBOWRITER | omode)){ printerr(bdb); tcbdbdel(bdb); return 1; } bool err = false; int inum; double dnum; switch(dmode){ case -1: if(!tcbdbputkeep(bdb, kbuf, ksiz, vbuf, vsiz)){ printerr(bdb); err = true; } break; case 1: if(!tcbdbputcat(bdb, kbuf, ksiz, vbuf, vsiz)){ printerr(bdb); err = true; } break; case 2: if(!tcbdbputdup(bdb, kbuf, ksiz, vbuf, vsiz)){ printerr(bdb); err = true; } break; case 3: if(!tcbdbputdupback(bdb, kbuf, ksiz, vbuf, vsiz)){ printerr(bdb); err = true; } break; case 10: inum = tcbdbaddint(bdb, kbuf, ksiz, tcatoi(vbuf)); if(inum == INT_MIN){ printerr(bdb); err = true; } else { printf("%d\n", inum); } break; case 11: dnum = tcbdbadddouble(bdb, kbuf, ksiz, tcatof(vbuf)); if(isnan(dnum)){ printerr(bdb); err = true; } else { printf("%.6f\n", dnum); } break; default: if(!tcbdbput(bdb, kbuf, ksiz, vbuf, vsiz)){ printerr(bdb); err = true; } break; } if(!tcbdbclose(bdb)){ if(!err) printerr(bdb); err = true; } tcbdbdel(bdb); return err ? 1 : 0; }