From 98b1adbd495b55c7b55381ecbb5871cc674c480d Mon Sep 17 00:00:00 2001 From: Mike Dvorkin Date: Wed, 23 Jun 2010 19:14:23 -0700 Subject: [PATCH] Set created_at/updated_at if requested so --- src/table.c | 41 +++++++++++++++++++++++++++++++---------- src/table.c.out | Bin 9672 -> 13816 bytes 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/table.c b/src/table.c index 2a02d1e..6f96f0a 100755 --- a/src/table.c +++ b/src/table.c @@ -1,6 +1,7 @@ #include #include #include +#include typedef unsigned long ulong; typedef unsigned char uchar; @@ -122,6 +123,7 @@ uchar *table_find(PTable pt, ulong id) { */ uchar *table_insert(PTable pt, uchar *record) { register uchar **pi; + register time_t now; if (pt->number_of_records >= pt->number_of_slots) { pt = table_extend(pt); @@ -134,13 +136,23 @@ uchar *table_insert(PTable pt, uchar *record) { pt->number_of_records++; pt->auto_increment++; /* - ** Set record id if the table has primary key. The id is always the first - ** unsigned long of the record. + ** Update record id if the table has primary key. The id must be the first + ** record field of type "unsigned long". */ if (pt->flags & TABLE_HAS_ID) { *(ulong *)*pi = pt->auto_increment; } - + /* + ** Update created_at and/or updated_at which must be last one or two record + ** fields of type "time_t". + */ + if (pt->flags & TABLE_HAS_CREATED_AT || pt->flags & TABLE_HAS_UPDATED_AT) { + now = time(NULL); + *(time_t *)(*pi + pt->record_size - sizeof(time_t)) = now; + } + if (pt->flags & TABLE_HAS_CREATED_AT && pt->flags & TABLE_HAS_UPDATED_AT) { + *(time_t *)(*pi + pt->record_size - sizeof(time_t) * 2) = now; + } return *pi; } @@ -166,24 +178,33 @@ int main() { PTable pt; typedef struct { ulong id; + ulong id2; char name[30]; - ulong created_at; - ulong updated_at; + time_t created_at; + time_t updated_at; } Record; Record rec, *prec; int i; pt = table_initialize(sizeof(Record), TABLE_HAS_ID | TABLE_HAS_TIMESTAMPS); - for(i = 0; i <= 1000; i++) { - // rec.id = i; + for(i = 0; i <= 100; i++) { + rec.id = 0; + rec.id2 = 42; + rec.created_at = rec.updated_at = (time_t)0; prec = (Record *)table_insert(pt, (uchar *)&rec); - printf("%08lX, %08lX (id: %lu)\n", (ulong)*table_last_record(pt), (ulong)table_last_record(pt), prec->id); + printf("%08lX, %08lX (id: %lu, id2: %lu, created_at: %lu, updated_at: %lu)\n", + (ulong)*table_last_record(pt), + (ulong)table_last_record(pt), + prec->id, prec->id2, + (ulong)prec->created_at, + (ulong)prec->updated_at); } - for(i = 1000; i >= 0; i--) { + for(i = 100; i >= 0; i--) { prec = (Record *)table_find(pt, i); - printf("id: %08lX\n", prec->id); + printf("id: %08lX, id2: %lu, created_at: %lu, updated_at: %lu)\n", + prec->id, prec->id2, prec->created_at, prec->updated_at); } table_free(pt); diff --git a/src/table.c.out b/src/table.c.out index c3cd7069c73a417b9131710c349af64e4235dc41..90995a95e183f93a75891b31a7e300a74bb32035 100755 GIT binary patch delta 2332 zcmaJ?eN0nV6u_m(b4c1vwu^koRHoBSRN4d_ex#NSqf1r7 z^yN_}-YhZ8%#4YNOO}m@G5j%wi3v5D4d<4aWs953%)^fa-3OJ)x^v&VbyJhwr03k< z`99~~-WRQly>(ETDWgZ1-1lKcMl2H{0pxcqhBB7fcfC5}Mz$fX;vP4$X{k`1;mk3_ zAue|2(7i%+)?qHDT+FbEekW9AIt=@5T;TyMQlB}SdU5_tu3V1|?NJ8};)Qg9IGYaR z=L=-R)y`cJU~Z^OSh-f}Fu4+jP2AA_m|+sg)97YXan^3ouvUxU#}>n8y_%>=&N=~z zX@TjBVUw=4i*xKALy2r$3z)4Ktrd&P0dTAfJphivZVb2#Az9h1jfn+D^rmuzPSE3G zo{-Aon|E>u6ce3g342hI8+f$co1nJ*0-wJk}f zr!1b7KShL;QSG9I-m&E3;})8hv?8YoCPS2SM6HPtrK#v_GGrbq1)^10=&qz#(hp|X zFEi7f$radPrUS`!cuYK$auVM&(NifOq>mBxT}`W+j>n1GJVsYp^Mq^k9cxt>6xfKY z5!EXb1w#_pqVAtC=^5^n9zqdd$Tb8>k#-B(CrZs#P(lEkVdG6E5fPJaEg5oLB?=ew zNTHHPBjxJ8jwhVKi#tP|7p$e&f$6lh1gB!^nqd#$gV{qbF>M?+gRGbfBh5tl)wjy` zny=Znas}CQdp}5tYQ6$9VZ|xU(FNa}Wmjg%3q-p%1yfLZw#DP|(VksEL5RltfsoOf z-3$QV|E$6F6j16QwA)W2;m+MeJ;PkJ0X9sfrw#T*<;+`2l#zdtr&c-7QN7v*W6{m( zRZk*D?qBhEtumT`5Xp0o$`pw#KEfIfv+}e*fW-CEyU(x& z{L+D!fEnHRL3zus>T1$Dk%&F;;K_1H<-=OLpeEi#Q=(9!LIY8v+=uLK#<(HB*2S_% zSY9JL+CdXZa{q=Tk;Ne})>eTTpI%lSTxy~=L`j)7WY+RPL-w3!$F$b>hVM<^I$z6$ z5fm?UfmyuJty7OqOLbbV(+Z#k@xn?SEYfL}POE{|M;zBo2>DjT3%{lxrLGIN9fa`X zy-+1WHLF+FG%l%ae8uf{TR~jtsq9$ol658*wfh&zg&mzPx!qsNcdfy|hETxYvLVC; zo!k8X70hQ*5Yj!3SdaTU|JQk09eC4{w8}*?i-V9Ceo#J2Majs8V0`d2m1n_|G7I6c z*$6e-5k4{pA?I9Vf_GfFyxL4ZPRqxkNqR2LjenV>_kjI4NuB9#9Gj%ef!&;>dku6F z*hGw82X;F~GbFb){XPr^)-r)Em7c~WQ#2^Kaq$#ACb>P!;Sa*rh+YSjBC<`o?L92A z8q+MI4On+luO(tWAimEYRC_}y|6Wva{xauHoUh^B&-oV4yExy=c`xG-F)yDbO+4WJ zvhh|Aaz4!XK%Z@`bVweSg6n5`TSD!d1Be|uqC@f;9Gg$G^S$9y@IS`eJGO?<=R*4y zf1nFp5=`hyF-U`f)~!K58s+lKAfGOVQ;52N++^fL37CNw8W)0r0QwCq9y|x~uRK65 zmH{~i&pvKN`|#VS7lVTjWc`c`GBWJb|F2*IRi#5e>?m1Vz;w)xlwrt&a$&ZKZ}AIE zpJIH?nEplhNpR;9<5j0bBca6U8l){Oj?POLE4la?Nbq~j6mVpm* zd<8BZ%la9|a0zw%1;-C~7g3Hc@-DvRm|a}vf5X6K?Dpz{-?_mi9?$|-te|P`Fo)w< wCY?L)(-{H_qOU{r%Xwu&F1^d>Kz;!ga*Xr#@96NiY!7vAY}v?8H)xpu1EU0W5dZ)H delta 1859 zcmZ8hdrVtZ7(e&iTOJ+I!YGtDXmMlK4VueCgpDDXHJwee<)FMml3)? z=zvsh*%0b7p=KP>J5p6f%221FH63{>D=z=xdY89!6zlU zlvCucgO&2iT8)FeG2fdSBj+8u$}N3i{SlZ;LX;P zwNEcEMhm9E7%jNYD}TaXOzg_Mpky_B1e)d*e4b>d4A`a8h85&CeR z69*#nD8NL74#e0M0RIME1Nd-*X4ss@FE*llEF)TH+lkvYX^+i`Pi@iHc2zTi51pkYJ$S<$)GaAe$u?tKJg+=3JeIG6&MtFTj2Ks*9C?IvQn&2{5kN# z-Y`Bc(8uuVr}jf8de~6-wmMI5smF03mF_OCafjf6!!LK8=|vw)o!#vn=h2EJql+fc z_H?wJ>1jtxLjM)$r%kZiubV+kF!2*)#t?<>Nz)j#A z--0^9<6Ci5aK05Ve-=I&LHD$?#N>`|)N9NO%E4vfRr>{3;8kK>j0=7dj*;