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