Changeset: 16815166bbe9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=16815166bbe9
Modified Files:
gdk/gdk_analytic_func.c
sql/storage/store.c
Branch: linear-hashing
Log Message:
Merged with Nov2019
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
@@ -3594,8 +3594,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;
@@ -4406,7 +4404,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) {
@@ -4568,8 +4566,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);
}
@@ -4624,7 +4623,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);
@@ -4668,7 +4667,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;
@@ -4704,7 +4703,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))
@@ -4779,26 +4778,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;
}
@@ -4944,7 +4939,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
@@ -5783,6 +5777,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;
}
@@ -6093,6 +6088,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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list