Changeset: 5d39a0ed4347 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5d39a0ed4347
Modified Files:
        gdk/gdk_analytic_func.c
        sql/storage/store.c
Branch: default
Log Message:

Merged with linear-hashing


diffs (287 lines):

diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -133,7 +133,7 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
        return GDK_SUCCEED;
 }
 
-#define NTILE_CALC(TPE, NEXT_VALUE, CAST1, CAST2, CAST3)       \
+#define NTILE_CALC(TPE, NEXT_VALUE, LNG_HGE, UPCAST)   \
        do {                                    \
                for (TPE i = 0; rb < rp; i++, rb++) {   \
                        TPE val = NEXT_VALUE; \
@@ -141,14 +141,14 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
                                has_nils = true;        \
                                *rb = TPE##_nil;        \
                        } else { \
-                               TPE nval = CAST1; \
-                               if ((CAST2) nval >= (CAST3) ncnt) { \
+                               UPCAST nval = (UPCAST) LNG_HGE; \
+                               if (nval >= ncnt) { \
                                        *rb = i + 1;  \
                                } else { \
-                                       BUN bsize = ncnt / nval; \
-                                       BUN top = ncnt - nval * bsize; \
-                                       BUN small = top * (bsize + 1); \
-                                       if ((CAST2) i < (CAST3) small) \
+                                       UPCAST bsize = ncnt / nval; \
+                                       UPCAST top = ncnt - nval * bsize; \
+                                       UPCAST small = top * (bsize + 1); \
+                                       if ((UPCAST) i < small) \
                                                *rb = (TPE)(1 + i / (bsize + 
1)); \
                                        else \
                                                *rb = (TPE)(1 + top + (i - 
small) / bsize); \
@@ -157,9 +157,10 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
                } \
        } while (0)
 
-#define ANALYTICAL_NTILE_IMP(TPE, NEXT_VALUE, CAST1, CAST2, CAST3)     \
+#define ANALYTICAL_NTILE_IMP(TPE, NEXT_VALUE, LNG_HGE, UPCAST) \
        do {                                                    \
                TPE *rp, *rb;   \
+               UPCAST ncnt; \
                rb = rp = (TPE*)Tloc(r, 0);             \
                if (p) {                                        \
                        pnp = np = (bit*)Tloc(p, 0);    \
@@ -168,36 +169,37 @@ GDKanalyticaldiff(BAT *r, BAT *b, BAT *p
                                if (*np) {                      \
                                        ncnt = np - pnp;        \
                                        rp += ncnt;             \
-                                       NTILE_CALC(TPE, NEXT_VALUE, CAST1, 
CAST2, CAST3);\
+                                       NTILE_CALC(TPE, NEXT_VALUE, LNG_HGE, 
UPCAST);\
                                        pnp = np;       \
                                }                               \
                        }                                       \
                        ncnt = np - pnp;                        \
                        rp += ncnt;                             \
-                       NTILE_CALC(TPE, NEXT_VALUE, CAST1, CAST2, CAST3);       
\
+                       NTILE_CALC(TPE, NEXT_VALUE, LNG_HGE, UPCAST);   \
                } else {                                        \
+                       ncnt = (UPCAST) cnt; \
                        rp += cnt;                              \
-                       NTILE_CALC(TPE, NEXT_VALUE, CAST1, CAST2, CAST3);       
\
+                       NTILE_CALC(TPE, NEXT_VALUE, LNG_HGE, UPCAST);   \
                }                                               \
        } while (0)
 
-#define ANALYTICAL_NTILE_SINGLE_IMP(TPE, CAST1, CAST2, CAST3) \
+#define ANALYTICAL_NTILE_SINGLE_IMP(TPE, LNG_HGE, UPCAST) \
        do {    \
                TPE ntl = *(TPE*) ntile; \
-               ANALYTICAL_NTILE_IMP(TPE, ntl, CAST1, CAST2, CAST3); \
+               ANALYTICAL_NTILE_IMP(TPE, ntl, LNG_HGE, UPCAST); \
        } while (0)
 
-#define ANALYTICAL_NTILE_MULTI_IMP(TPE, CAST1, CAST2, CAST3) \
+#define ANALYTICAL_NTILE_MULTI_IMP(TPE, LNG_HGE, UPCAST) \
        do {    \
                BUN k = 0; \
                TPE *restrict nn = (TPE*)Tloc(n, 0);    \
-               ANALYTICAL_NTILE_IMP(TPE, nn[k++], CAST1, CAST2, CAST3); \
+               ANALYTICAL_NTILE_IMP(TPE, nn[k++], LNG_HGE, UPCAST); \
        } while (0)
 
 gdk_return
 GDKanalyticalntile(BAT *r, BAT *b, BAT *p, BAT *n, int tpe, const void 
*restrict ntile)
 {
-       BUN cnt = BATcount(b), ncnt = cnt;
+       BUN cnt = BATcount(b);
        bit *np, *pnp, *end;
        bool has_nils = false;
 
@@ -206,27 +208,27 @@ GDKanalyticalntile(BAT *r, BAT *b, BAT *
        if (ntile) {
                switch (tpe) {
                case TYPE_bte:
-                       ANALYTICAL_NTILE_SINGLE_IMP(bte, val, BUN, BUN);
+                       ANALYTICAL_NTILE_SINGLE_IMP(bte, val, BUN);
                        break;
                case TYPE_sht:
-                       ANALYTICAL_NTILE_SINGLE_IMP(sht, val, BUN, BUN);
+                       ANALYTICAL_NTILE_SINGLE_IMP(sht, val, BUN);
                        break;
                case TYPE_int:
-                       ANALYTICAL_NTILE_SINGLE_IMP(int, val, BUN, BUN);
+                       ANALYTICAL_NTILE_SINGLE_IMP(int, val, BUN);
                        break;
                case TYPE_lng:
 #if SIZEOF_OID == SIZEOF_INT
-                       ANALYTICAL_NTILE_SINGLE_IMP(lng, val, lng, lng);
+                       ANALYTICAL_NTILE_SINGLE_IMP(lng, val, lng);
 #else
-                       ANALYTICAL_NTILE_SINGLE_IMP(lng, val, BUN, BUN);
+                       ANALYTICAL_NTILE_SINGLE_IMP(lng, val, BUN);
 #endif
                        break;
 #ifdef HAVE_HGE
                case TYPE_hge:
 #if SIZEOF_OID == SIZEOF_INT
-                       ANALYTICAL_NTILE_SINGLE_IMP(hge, (val > (hge) 
GDK_lng_max) ? GDK_lng_max : (lng) val, lng, lng);
+                       ANALYTICAL_NTILE_SINGLE_IMP(hge, (val > (hge) 
GDK_int_max) ? GDK_int_max : (lng) val, lng);
 #else
-                       ANALYTICAL_NTILE_SINGLE_IMP(hge, (val > (hge) 
GDK_lng_max) ? GDK_lng_max : (lng) val, BUN, BUN);
+                       ANALYTICAL_NTILE_SINGLE_IMP(hge, (val > (hge) 
GDK_lng_max) ? GDK_lng_max : (lng) val, BUN);
 #endif
 #endif
                default:
@@ -235,27 +237,27 @@ GDKanalyticalntile(BAT *r, BAT *b, BAT *
        } else {
                switch (tpe) {
                case TYPE_bte:
-                       ANALYTICAL_NTILE_MULTI_IMP(bte, val, BUN, BUN);
+                       ANALYTICAL_NTILE_MULTI_IMP(bte, val, BUN);
                        break;
                case TYPE_sht:
-                       ANALYTICAL_NTILE_MULTI_IMP(sht, val, BUN, BUN);
+                       ANALYTICAL_NTILE_MULTI_IMP(sht, val, BUN);
                        break;
                case TYPE_int:
-                       ANALYTICAL_NTILE_MULTI_IMP(int, val, BUN, BUN);
+                       ANALYTICAL_NTILE_MULTI_IMP(int, val, BUN);
                        break;
                case TYPE_lng:
 #if SIZEOF_OID == SIZEOF_INT
-                       ANALYTICAL_NTILE_MULTI_IMP(lng, val, lng, lng);
+                       ANALYTICAL_NTILE_MULTI_IMP(lng, val, lng);
 #else
-                       ANALYTICAL_NTILE_MULTI_IMP(lng, val, BUN, BUN);
+                       ANALYTICAL_NTILE_MULTI_IMP(lng, val, BUN);
 #endif
                        break;
 #ifdef HAVE_HGE
                case TYPE_hge:
 #if SIZEOF_OID == SIZEOF_INT
-                       ANALYTICAL_NTILE_MULTI_IMP(hge, (val > (hge) 
GDK_lng_max) ? GDK_lng_max : (lng) val, lng, lng);
+                       ANALYTICAL_NTILE_MULTI_IMP(hge, (val > (hge) 
GDK_int_max) ? GDK_int_max : (lng) val, lng);
 #else
-                       ANALYTICAL_NTILE_MULTI_IMP(hge, (val > (hge) 
GDK_lng_max) ? GDK_lng_max : (lng) val, BUN, BUN);
+                       ANALYTICAL_NTILE_MULTI_IMP(hge, (val > (hge) 
GDK_lng_max) ? GDK_lng_max : (lng) val, BUN);
 #endif
                break;
 #endif
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3551,8 +3551,6 @@ static void
        tr->schema_updates = 0;
        tr->dropped = NULL;
        tr->status = 0;
-       if (otr != gtrans)
-               tr->schema_updates = otr->schema_updates;
 
        tr->schema_number = store_schema_number();
        tr->parent = otr;
@@ -4358,7 +4356,7 @@ rollforward_trans(sql_trans *tr, int mod
 
        if (mode == R_APPLY && tr->parent && tr->wtime > tr->parent->wtime) {
                tr->parent->wtime = tr->wtime;
-               tr->parent->schema_updates = tr->schema_updates;
+               tr->parent->schema_updates += tr->schema_updates;
        }
 
        if (tr->moved_tables) {
@@ -4518,8 +4516,9 @@ reset_changeset(sql_trans *tr, changeset
 static int
 reset_idx(sql_trans *tr, sql_idx *fi, sql_idx *pfi)
 {
+       (void)tr;
        /* did we access the idx or is the global changed after we started */
-       if (fi->base.rtime || fi->base.wtime || tr->stime < pfi->base.wtime) {
+       if (fi->base.rtime || fi->base.wtime || fi->base.stime < 
pfi->base.wtime) {
                if (isTable(fi->t)) 
                        store_funcs.destroy_idx(NULL, fi);
        }
@@ -4574,7 +4573,7 @@ static int
 reset_column(sql_trans *tr, sql_column *fc, sql_column *pfc)
 {
        /* did we access the column or is the global changed after we started */
-       if (fc->base.rtime || fc->base.wtime || tr->stime < pfc->base.wtime) {
+       if (fc->base.rtime || fc->base.wtime || fc->base.stime < 
pfc->base.wtime) {
 
                if (isTable(fc->t)) 
                        store_funcs.destroy_col(NULL, fc);
@@ -4618,7 +4617,7 @@ reset_seq(sql_trans *tr, sql_sequence *f
 static int
 reset_part(sql_trans *tr, sql_part *ft, sql_part *pft)
 {
-       if (ft->base.rtime || ft->base.wtime || tr->stime < pft->base.wtime) {
+       if (ft->base.rtime || ft->base.wtime || ft->base.stime < 
pft->base.wtime) {
 
                if (pft->t) {
                        sql_table *mt = pft->t;
@@ -4654,7 +4653,7 @@ reset_table(sql_trans *tr, sql_table *ft
                return LOG_OK;
 
        /* did we access the table or did the global change */
-       if (ft->base.rtime || ft->base.wtime || tr->stime < pft->base.wtime) {
+       if (ft->base.rtime || ft->base.wtime || ft->base.stime < 
pft->base.wtime) {
                int ok = LOG_OK;
 
                if (isTable(ft) && !isTempTable(ft)) 
@@ -4729,26 +4728,22 @@ reset_schema(sql_trans *tr, sql_schema *
                return ok;
        }
 
-       /* did we access the schema or is the global changed after we started */
-       if (fs->base.rtime || fs->base.wtime || tr->stime < pfs->base.wtime) {
-
-               /* apply possible renaming -> transaction rollbacks or when it 
starts, inherit from the previous transaction */
-               if (strcmp(fs->base.name, pfs->base.name) != 0) {
-                       list_hash_delete(tr->schemas.set, fs, NULL);
-                       fs->base.name = sa_strdup(tr->parent->sa, 
pfs->base.name);
-                       if (!list_hash_add(tr->schemas.set, fs, NULL))
-                               ok = LOG_ERR;
-               }
-
-               if (ok == LOG_OK)
-                       ok = reset_changeset(tr, &fs->types, &pfs->types, 
&fs->base, (resetf) &reset_type, (dupfunc) &type_dup);
-               if (ok == LOG_OK)
-                       ok = reset_changeset(tr, &fs->funcs, &pfs->funcs, 
&fs->base, (resetf) &reset_func, (dupfunc) &func_dup);
-               if (ok == LOG_OK)
-                       ok = reset_changeset(tr, &fs->seqs, &pfs->seqs, 
&fs->base, (resetf) &reset_seq, (dupfunc) &seq_dup);
-               if (ok == LOG_OK)
-                       ok = reset_changeset(tr, &fs->tables, &pfs->tables, 
&fs->base, (resetf) &reset_table, (dupfunc) &table_dup);
-       }
+       /* apply possible renaming -> transaction rollbacks or when it starts, 
inherit from the previous transaction */
+       if (strcmp(fs->base.name, pfs->base.name) != 0) {
+               list_hash_delete(tr->schemas.set, fs, NULL);
+               fs->base.name = sa_strdup(tr->parent->sa, pfs->base.name);
+               if (!list_hash_add(tr->schemas.set, fs, NULL))
+                       ok = LOG_ERR;
+       }
+
+       if (ok == LOG_OK)
+               ok = reset_changeset(tr, &fs->types, &pfs->types, &fs->base, 
(resetf) &reset_type, (dupfunc) &type_dup);
+       if (ok == LOG_OK)
+               ok = reset_changeset(tr, &fs->funcs, &pfs->funcs, &fs->base, 
(resetf) &reset_func, (dupfunc) &func_dup);
+       if (ok == LOG_OK)
+               ok = reset_changeset(tr, &fs->seqs, &pfs->seqs, &fs->base, 
(resetf) &reset_seq, (dupfunc) &seq_dup);
+       if (ok == LOG_OK)
+               ok = reset_changeset(tr, &fs->tables, &pfs->tables, &fs->base, 
(resetf) &reset_table, (dupfunc) &table_dup);
        return ok;
 }
 
@@ -4887,7 +4882,6 @@ sql_trans_commit(sql_trans *tr)
                prev_oid = store_oid;
                if (ok == LOG_OK)
                        ok = logger_funcs.log_tend();
-               tr->schema_number = store_schema_number();
        }
        if (ok == LOG_OK) {
                /* It is save to rollforward the changes now. In case 
@@ -5725,6 +5719,7 @@ sql_trans_add_table(sql_trans *tr, sql_t
        cs_add(&mt->members, p, TR_NEW);
        mt->s->base.wtime = mt->base.wtime = pt->s->base.wtime = pt->base.wtime 
= p->base.wtime = tr->wtime = tr->wstime;
        table_funcs.table_insert(tr, sysobj, &mt->base.id, p->base.name, 
&p->base.id);
+       tr->schema_updates ++;
        return mt;
 }
 
@@ -6035,6 +6030,7 @@ sql_trans_del_table(sql_trans *tr, sql_t
 
        if (drop_action == DROP_CASCADE)
                sql_trans_drop_table(tr, mt->s, pt->base.id, drop_action);
+       tr->schema_updates ++;
        return mt;
 }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to