Changeset: 1662c778dfc0 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/1662c778dfc0 Modified Files: sql/server/rel_updates.c Branch: pushcands Log Message:
Merged with default diffs (truncated from 454 to 300 lines): diff --git a/gdk/gdk_cand.h b/gdk/gdk_cand.h --- a/gdk/gdk_cand.h +++ b/gdk/gdk_cand.h @@ -177,6 +177,7 @@ gdk_export oid canditer_last(const struc gdk_export oid canditer_prev(struct canditer *ci); gdk_export oid canditer_peekprev(struct canditer *ci); gdk_export oid canditer_idx(const struct canditer *ci, BUN p); +#define canditer_idx_dense(ci, p) ((p >= (ci)->ncand)?oid_nil:((ci)->seq + p)) gdk_export void canditer_setidx(struct canditer *ci, BUN p); gdk_export void canditer_reset(struct canditer *ci); gdk_export BUN canditer_search(const struct canditer *ci, oid o, bool next); diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c --- a/gdk/gdk_project.c +++ b/gdk/gdk_project.c @@ -20,6 +20,57 @@ * hseqbase + its batCount. */ +#define project1_loop(TYPE) \ +static gdk_return \ +project1_##TYPE(BAT *restrict bn, BAT *restrict l, BAT *restrict r1) \ +{ \ + BUN lo, hi; \ + const TYPE *restrict r1t; \ + TYPE *restrict bt; \ + oid r1seq, r1end; \ + \ + MT_thread_setalgorithm(__func__); \ + r1t = (const TYPE *) Tloc(r1, 0); \ + bt = (TYPE *) Tloc(bn, 0); \ + r1seq = r1->hseqbase; \ + r1end = r1seq + BATcount(r1); \ + if (BATtdense(l)) { \ + if (l->tseqbase < r1seq || \ + (l->tseqbase+BATcount(l)) >= r1end) { \ + GDKerror("does not match always\n"); \ + return GDK_FAIL; \ + } \ + oid off = l->tseqbase - r1seq; \ + r1t += off; \ + for (lo = 0, hi = BATcount(l); lo < hi; lo++) \ + bt[lo] = r1t[lo]; \ + } else { \ + const oid *restrict ot = (const oid *) Tloc(l, 0); \ + for (lo = 0, hi = BATcount(l); lo < hi; lo++) { \ + oid o = ot[lo]; \ + if (o < r1seq || o >= r1end) { \ + GDKerror("does not match always\n"); \ + return GDK_FAIL; \ + } \ + bt[lo] = r1t[o - r1seq]; \ + } \ + } \ + BATsetcount(bn, lo); \ + return GDK_SUCCEED; \ +} + +/* project type switch */ +project1_loop(bte) +project1_loop(sht) +project1_loop(int) +project1_loop(flt) +project1_loop(dbl) +project1_loop(lng) +#ifdef HAVE_HGE +project1_loop(hge) +#endif +project1_loop(uuid) + #define project_loop(TYPE) \ static gdk_return \ project_##TYPE(BAT *restrict bn, BAT *restrict l, \ @@ -34,6 +85,8 @@ project_##TYPE(BAT *restrict bn, BAT *re oid r1seq, r1end; \ oid r2seq, r2end; \ \ + if ((!ci || ci->tpe == cand_dense) && l->tnonil && !r2) \ + return project1_##TYPE(bn, l, r1); \ MT_thread_setalgorithm(__func__); \ r1t = (const TYPE *) Tloc(r1, 0); \ r2t = r2 ? (const TYPE *) Tloc(r2, 0) : NULL; \ @@ -120,6 +173,12 @@ project_oid(BAT *restrict bn, BAT *restr const oid *restrict r2t = NULL; struct canditer r1ci = {0}, r2ci = {0}; + if ((!lci || lci->tpe == cand_dense) && !BATtdense(r1) && !r2) { + if (sizeof(oid) == sizeof(lng)) + return project1_lng(bn, l, r1); + else + return project1_int(bn, l, r1); + } MT_thread_setalgorithm(__func__); if (complex_cand(r1)) canditer_init(&r1ci, NULL, r1); @@ -856,13 +915,12 @@ BATprojectchain(BAT **bats) goto bunins_failed; } o -= ba[i].hlo; - o = ba[i].ci.s ? canditer_idx(&ba[i].ci, o) : ba[i].t[o]; + o = ba[i].ci.s ? + (ba[i].ci.tpe == cand_dense) ? + canditer_idx_dense(&ba[i].ci, o) : + canditer_idx(&ba[i].ci, o) : ba[i].t[o]; } - if (bunfastappTYPE(oid, bn, &o) != GDK_SUCCEED) - goto bunins_failed; - if (ATOMputFIX(bn->ttype, d, &o) != GDK_SUCCEED) - goto bunins_failed; - d++; + *d++ = o; } } else if (!ATOMvarsized(tpe)) { const void *v; @@ -883,7 +941,10 @@ BATprojectchain(BAT **bats) goto bunins_failed; } o -= ba[i].hlo; - o = ba[i].ci.s ? canditer_idx(&ba[i].ci, o) : ba[i].t[o]; + o = ba[i].ci.s ? + (ba[i].ci.tpe == cand_dense) ? + canditer_idx_dense(&ba[i].ci, o) : + canditer_idx(&ba[i].ci, o) : ba[i].t[o]; } if (is_oid_nil(o)) { assert(!stringtrick); @@ -934,7 +995,10 @@ BATprojectchain(BAT **bats) goto bunins_failed; } o -= ba[i].hlo; - o = ba[i].ci.s ? canditer_idx(&ba[i].ci, o) : ba[i].t[o]; + o = ba[i].ci.s ? + (ba[i].ci.tpe == cand_dense) ? + canditer_idx_dense(&ba[i].ci, o) : + canditer_idx(&ba[i].ci, o) : ba[i].t[o]; } if (is_oid_nil(o)) { bn->tnil = true; diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c --- a/gdk/gdk_select.c +++ b/gdk/gdk_select.c @@ -656,14 +656,27 @@ fullscan_str(BAT *b, struct canditer *re case 2: { const unsigned short *ptr = (const unsigned short *) Tloc(b, 0); pos -= GDK_VAROFFSET; - for (p = 0; p < ci->ncand; p++) { - o = canditer_next(ci); - if (ptr[o - hseq] == pos) { - buninsfix(bn, dst, cnt, o, - (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), - maximum, BUN_NONE); - cnt++; + if (ci->tpe == cand_dense) { + for (p = 0; p < ci->ncand; p++) { + o = canditer_next_dense(ci); + if (ptr[o - hseq] == pos) { + buninsfix(bn, dst, cnt, o, + (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) + * (dbl) (ci->ncand-p) * 1.1 + 1024), + maximum, BUN_NONE); + cnt++; + } + } + } else { + for (p = 0; p < ci->ncand; p++) { + o = canditer_next(ci); + if (ptr[o - hseq] == pos) { + buninsfix(bn, dst, cnt, o, + (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) + * (dbl) (ci->ncand-p) * 1.1 + 1024), + maximum, BUN_NONE); + cnt++; + } } } break; @@ -671,14 +684,27 @@ fullscan_str(BAT *b, struct canditer *re #if SIZEOF_VAR_T == 8 case 4: { const unsigned int *ptr = (const unsigned int *) Tloc(b, 0); - for (p = 0; p < ci->ncand; p++) { - o = canditer_next(ci); - if (ptr[o - hseq] == pos) { - buninsfix(bn, dst, cnt, o, - (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), - maximum, BUN_NONE); - cnt++; + if (ci->tpe == cand_dense) { + for (p = 0; p < ci->ncand; p++) { + o = canditer_next_dense(ci); + if (ptr[o - hseq] == pos) { + buninsfix(bn, dst, cnt, o, + (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) + * (dbl) (ci->ncand-p) * 1.1 + 1024), + maximum, BUN_NONE); + cnt++; + } + } + } else { + for (p = 0; p < ci->ncand; p++) { + o = canditer_next(ci); + if (ptr[o - hseq] == pos) { + buninsfix(bn, dst, cnt, o, + (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) + * (dbl) (ci->ncand-p) * 1.1 + 1024), + maximum, BUN_NONE); + cnt++; + } } } break; @@ -686,14 +712,27 @@ fullscan_str(BAT *b, struct canditer *re #endif default: { const var_t *ptr = (const var_t *) Tloc(b, 0); - for (p = 0; p < ci->ncand; p++) { - o = canditer_next(ci); - if (ptr[o - hseq] == pos) { - buninsfix(bn, dst, cnt, o, - (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) - * (dbl) (ci->ncand-p) * 1.1 + 1024), - maximum, BUN_NONE); - cnt++; + if (ci->tpe == cand_dense) { + for (p = 0; p < ci->ncand; p++) { + o = canditer_next_dense(ci); + if (ptr[o - hseq] == pos) { + buninsfix(bn, dst, cnt, o, + (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) + * (dbl) (ci->ncand-p) * 1.1 + 1024), + maximum, BUN_NONE); + cnt++; + } + } + } else { + for (p = 0; p < ci->ncand; p++) { + o = canditer_next(ci); + if (ptr[o - hseq] == pos) { + buninsfix(bn, dst, cnt, o, + (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 : p) + * (dbl) (ci->ncand-p) * 1.1 + 1024), + maximum, BUN_NONE); + cnt++; + } } } break; diff --git a/sql/jdbc/tests/Tests/JDBC_API_Tester.SQL.py b/sql/jdbc/tests/Tests/JDBC_API_Tester.SQL.py --- a/sql/jdbc/tests/Tests/JDBC_API_Tester.SQL.py +++ b/sql/jdbc/tests/Tests/JDBC_API_Tester.SQL.py @@ -15,7 +15,7 @@ URL=f"jdbc:monetdb://{HOST}:{MAPIPORT}/{ cmd = ['java', 'JDBC_API_Tester', URL] try: - p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, text=True) + p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8') except CalledProcessError as e: raise SystemExit(e.stderr) diff --git a/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.py b/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.py --- a/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.py +++ b/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.py @@ -15,29 +15,29 @@ PASSWORD='monetdb' if __name__ == '__main__': cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB, '--help'] try: - p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, text=True) + p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8') except CalledProcessError as e: raise SystemExit(e.stderr) cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB, '-f', os.path.join(TSTSRCBASE, TSTDIR, 'Tests/JdbcClient_create_tables.sql')] try: - p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, text=True) + p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8') except CalledProcessError as e: print(e.stderr, file=sys.stderr) raise SystemExit('ERROR: failed to create tables!') cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB, '-f', os.path.join(TSTSRCBASE, TSTDIR, 'Tests/JdbcClient_inserts_selects.sql')] try: - p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, text=True) + p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8') except CalledProcessError as e: print(e.stderr, file=sys.stderr) raise SystemExit('ERROR: failed to insert!') cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB, '-D'] try: - p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, text=True) + p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8') except CalledProcessError as e: raise SystemExit(e.stderr) cmd = ['java', CLIENT, '-h', HOST, '-p', MAPIPORT, '-d', TSTDB, '-f', os.path.join(TSTSRCBASE, TSTDIR, 'Tests/JdbcClient_drop_tables.sql')] try: - p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, text=True) + p = run(cmd, stdout=PIPE, stderr=PIPE, check=True, encoding='utf-8') except CalledProcessError as e: raise SystemExit(e.stderr) diff --git a/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.SQL.py b/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.SQL.py --- a/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.SQL.py _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list