Changeset: be2a14f4997c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/be2a14f4997c
Modified Files:
monetdb5/modules/mal/tablet.c
sql/test/nested/Tests/basic.test
Branch: nested
Log Message:
initial support for none dense list offsets
diffs (94 lines):
diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c
--- a/monetdb5/modules/mal/tablet.c
+++ b/monetdb5/modules/mal/tablet.c
@@ -339,14 +339,16 @@ output_composite(char **buf, size_t *len
}
if (f->multiset) {
int nr_attrs = f->nrfields - 1;
- const char *p = BUNtail(fmt[j+nr_attrs].ci,
fmt[j+nr_attrs].p);
+ Column *rowid = fmt+j+nr_attrs;
+ const char *p = BUNtail(rowid->ci, rowid->p);
/* various cases:
* rowid column dense (but for ints !!
* rowid column sorted
* else
*/
- if (f->c)
+ assert(rowid->c->tsorted);
+ if (rowid->c->tkey)
fill = output_multiset_dense(buf, len, fill,
localbuf, locallen, fmt + j + 1, nr_attrs-1, f->multiset, f->composite, true,
*(int*)p);
else
fill = output_multiset_sorted(buf, len, fill,
localbuf, locallen, fmt + j + 1, nr_attrs-1, f->multiset, f->composite, true,
*(int*)p);
@@ -413,27 +415,29 @@ output_multiset_sorted(char **buf, size_
nr_attrs -= (multiset == MS_ARRAY)?2:1;
Column *msid = fmt + nr_attrs;
/* how to also keep prev id */
- int *idp = (int*)Tloc(msid->c, msid->p);
+ BUN pos = msid->p;
+ int *idp = (int*)Tloc(msid->c, pos);
int first = 1;
if (msid->p) {
- BUN pos = msid->p;
- while (idp[-1] >= id && pos > 0) {
+ while (pos > 0 && idp[-1] >= id) {
idp--;
pos--;
}
+ msid->p = pos;
}
if (!quoted)
(*buf)[fill++] = '\'';
(*buf)[fill++] = '{';
(*buf)[fill] = 0;
- for (; *idp == id && fill > 0; idp++, msid->p++) {
+ for (; *idp == id && fill > 0; idp++, msid->p++, pos++) {
if (!first)
(*buf)[fill++] = ',';
if (composite) {
fill = output_composite(buf, len, fill, localbuf,
locallen, fmt, nr_attrs, composite, true);
} else {
+ fmt->p = pos;
fill = output_value(buf, len, fill, localbuf, locallen,
fmt);
}
first = 0;
@@ -459,9 +463,11 @@ output_line_complex(char **buf, size_t *
if (f->multiset) {
int nr_attrs = f->nrfields - 1;
- p = BUNtail(fmt[j+nr_attrs].ci, fmt[j+nr_attrs].p);
+ Column *rowid = fmt+j+nr_attrs;
+ p = BUNtail(rowid->ci, rowid->p);
- if (f->c)
+ assert(rowid->c->tsorted);
+ if (rowid->c->tkey)
fill = output_multiset_dense(buf, len, fill,
localbuf, locallen, fmt + j + 1, nr_attrs-1, f->multiset, f->composite, false,
*(int*)p);
else
fill = output_multiset_sorted(buf, len, fill,
localbuf, locallen, fmt + j + 1, nr_attrs-1, f->multiset, f->composite, false,
*(int*)p);
diff --git a/sql/test/nested/Tests/basic.test b/sql/test/nested/Tests/basic.test
--- a/sql/test/nested/Tests/basic.test
+++ b/sql/test/nested/Tests/basic.test
@@ -13,3 +13,20 @@ select * from arr_tbl
----
{1,2,3}
{2,3,4}
+
+
+query TI nosort
+select f1, f.elements from arr_tbl, unnest(f1) f
+----
+{1,2,3}
+1
+{1,2,3}
+2
+{1,2,3}
+3
+{2,3,4}
+2
+{2,3,4}
+3
+{2,3,4}
+4
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]