Changeset: ec54bfce6b08 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ec54bfce6b08
Branch: manti
Log Message:
merged from default
diffs (truncated from 7370 to 300 lines):
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
--- a/.github/workflows/linux.yml
+++ b/.github/workflows/linux.yml
@@ -33,7 +33,7 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
- uses: actions/checkout@v6
+ uses: actions/checkout@v7
with:
ref: ${{ github.ref }}
diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -2388,7 +2388,7 @@ geos2wkb(allocator *ma, wkb **geomWKB, s
(*geomWKB)->len = (int) wkbLen;
(*geomWKB)->srid = GEOSGetSRID_r(geoshandle, geosGeometry);
- memcpy(&(*geomWKB)->data, w, wkbLen);
+ memcpy((*geomWKB)->data, w, wkbLen);
GEOSFree_r(geoshandle, w);
return *geomWKB;
diff --git a/geom/sql/conformance/Tests/T48.test
b/geom/sql/conformance/Tests/T48.test
--- a/geom/sql/conformance/Tests/T48.test
+++ b/geom/sql/conformance/Tests/T48.test
@@ -1,5 +1,5 @@
query T rowsort
SELECT ST_AsText(ST_Difference(named_places.boundary, forests.boundary)) FROM
named_places, forests WHERE named_places.name = 'Ashton' AND forests.name =
'Green Forest'
----
-POLYGON ((84 48, 84 42, 56 34, 62 48, 84 48))
+POLYGON ((56 34, 62 48, 84 48, 84 42, 56 34))
diff --git a/geom/sql/conformance/Tests/T49.test
b/geom/sql/conformance/Tests/T49.test
--- a/geom/sql/conformance/Tests/T49.test
+++ b/geom/sql/conformance/Tests/T49.test
@@ -1,5 +1,5 @@
query T rowsort
SELECT ST_AsText(ST_Union(shore, boundary)) FROM lakes, named_places WHERE
lakes.name = 'Blue Lake' AND named_places.name = 'Goose Island'
----
-POLYGON ((66 23, 73 9, 48 6, 52 18, 66 23))
+POLYGON ((48 6, 52 18, 66 23, 73 9, 48 6))
diff --git a/geom/sql/conformance/Tests/T8.test
b/geom/sql/conformance/Tests/T8.test
--- a/geom/sql/conformance/Tests/T8.test
+++ b/geom/sql/conformance/Tests/T8.test
@@ -1,5 +1,5 @@
query T rowsort
SELECT ST_AsText(boundary) FROM named_places WHERE name = 'Goose Island'
----
-POLYGON ((67 13, 67 18, 59 18, 59 13, 67 13))
+POLYGON ((59 13, 67 13, 67 18, 59 18, 59 13))
diff --git a/monetdb5/modules/mal/mkey.c b/monetdb5/modules/mal/mkey.c
--- a/monetdb5/modules/mal/mkey.c
+++ b/monetdb5/modules/mal/mkey.c
@@ -470,6 +470,25 @@ MKEYbulk_rotate_xor_hash(Client cntxt, M
}
break;
}
+ case TYPE_void: {
+ const ulng *restrict h = (const ulng *) hbi.base;
+ if (ci1.tpe == cand_dense && ci2.tpe == cand_dense) {
+ for (BUN i = 0; i < ci1.ncand; i++) {
+ oid p1 = (canditer_next_dense(&ci1) -
off1),
+ p2 = (canditer_next_dense(&ci2)
- off2);
+ r[i] = GDK_ROTATE(h[p1], lbit,
+ rbit)
^ (ulng) MKEYHASH_oid(BUNtoid(b, p2));
+ }
+ } else {
+ for (BUN i = 0; i < ci1.ncand; i++) {
+ oid p1 = (canditer_next(&ci1) - off1),
+ p2 = (canditer_next(&ci2) -
off2);
+ r[i] = GDK_ROTATE(h[p1], lbit,
+ rbit)
^ (ulng) MKEYHASH_oid(BUNtoid(b, p2));
+ }
+ }
+ break;
+ }
case TYPE_dbl:
MKEYbulk_rotate_xor_hashloop(lng);
break;
diff --git a/sql/backends/monet5/bin_partition_by_slice.c
b/sql/backends/monet5/bin_partition_by_slice.c
--- a/sql/backends/monet5/bin_partition_by_slice.c
+++ b/sql/backends/monet5/bin_partition_by_slice.c
@@ -109,6 +109,8 @@ rel_groupby_2_phases(mvc *sql, sql_rel *
lng lcard = exp_getcard(sql, rel, e);
if (lcard == cnt) {
card = cnt;
+ if (card > 64*1024) /* TODO add tunable */
+ return false;
break;
}
card *= lcard; /* TODO check for overflow */
@@ -866,7 +868,7 @@ rel_groupby_partition(mvc *sql, sql_rel
}
if (card < estimate)
estimate = card;
- if ((BUN)estimate >= 4*GDKL3_size)
+ if ((BUN)estimate >= 16*GDKL3_size)
return true;
return false;
}
diff --git a/sql/backends/monet5/sql_upgrades.c
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -5413,10 +5413,31 @@ sql_update_default(Client c, mvc *sql, s
t->system = 0; /* make it non-system else the drop view
will fail */
t = mvc_bind_table(sql, s, "describe_tables");
t->system = 0; /* make it non-system else the drop view
will fail */
+ t = mvc_bind_table(sql, s, "describe_constraints");
+ t->system = 0; /* make it non-system else the drop view
will fail */
+ t = mvc_bind_table(sql, s, "describe_indices");
+ t->system = 0; /* make it non-system else the drop view
will fail */
+ t = mvc_bind_table(sql, s, "describe_partition_tables");
+ t->system = 0; /* make it non-system else the drop view
will fail */
+ t = mvc_bind_table(sql, s,
"dump_table_constraint_type");
+ t->system = 0; /* make it non-system else the drop view
will fail */
+ t = mvc_bind_table(sql, s, "dump_indices");
+ t->system = 0; /* make it non-system else the drop view
will fail */
+ t = mvc_bind_table(sql, s, "dump_partition_tables");
+ t->system = 0; /* make it non-system else the drop view
will fail */
+ t = mvc_bind_table(sql, s, "dump_foreign_keys");
+ t->system = 0; /* make it non-system else the drop view
will fail */
const char query[] =
"drop function sys.dump_database;\n"
"drop view sys.dump_tables;\n"
+ "drop view sys.dump_foreign_keys;\n"
+ "drop view sys.dump_table_constraint_type;\n"
+ "drop view sys.dump_indices;\n"
+ "drop view sys.dump_partition_tables;\n"
"drop view sys.describe_tables;\n"
+ "drop view sys.describe_constraints;\n"
+ "drop view sys.describe_indices;\n"
+ "drop view sys.describe_partition_tables;\n"
"CREATE VIEW sys.describe_tables AS\n"
" SELECT\n"
" t.id o,\n"
@@ -5428,7 +5449,8 @@ sql_update_default(Client c, mvc *sql, s
" GROUP_CONCAT(\n"
" sys.DQ(c.name) || ' ' ||\n"
" sys.describe_type(c.type, c.type_digits,
c.type_scale) ||\n"
- " ifthenelse(c.\"null\" = false, ' NOT NULL',
'')\n"
+ " ifthenelse(c.\"null\" = false, ' NOT NULL',
''\n"
+ " ORDER BY c.number)\n"
" , ', ') || ')'\n"
" FROM sys._columns c\n"
" WHERE c.table_id = t.id) col,\n"
@@ -5449,6 +5471,149 @@ sql_update_default(Client c, mvc *sql, s
" AND ts.table_type_id = t.type\n"
" AND s.name <> 'tmp';\n"
"GRANT SELECT ON sys.describe_tables TO
PUBLIC;\n"
+ "CREATE VIEW sys.describe_constraints AS\n"
+ " SELECT\n"
+ " s.name sch,\n"
+ " t.name tbl,\n"
+ " kc.name col,\n"
+ " k.name con,\n"
+ " CASE k.type WHEN 0 THEN 'PRIMARY KEY' WHEN 1
THEN 'UNIQUE' END tpe,\n"
+ " kc.nr nr\n"
+ " FROM sys.schemas s, sys._tables t,
sys.objects kc, sys.keys k\n"
+ " WHERE kc.id = k.id\n"
+ " AND k.table_id = t.id\n"
+ " AND s.id = t.schema_id\n"
+ " AND t.system = FALSE\n"
+ " AND k.type in (0, 1);\n"
+ "GRANT SELECT ON sys.describe_constraints TO
PUBLIC;\n"
+ "CREATE VIEW sys.describe_indices AS\n"
+ " WITH it (id, idx) AS (VALUES (0, 'INDEX'),
(4, 'IMPRINTS INDEX'), (5, 'ORDERED INDEX')) --UNIQUE INDEX wraps to INDEX.\n"
+ " SELECT\n"
+ " i.name ind,\n"
+ " s.name sch,\n"
+ " t.name tbl,\n"
+ " c.name col,\n"
+ " it.idx tpe,\n"
+ " kc.nr nr\n"
+ " FROM\n"
+ " sys.idxs AS i LEFT JOIN sys.keys AS k ON
i.name = k.name,\n"
+ " sys.objects AS kc,\n"
+ " sys._columns AS c,\n"
+ " sys.schemas s,\n"
+ " sys._tables AS t,\n"
+ " it\n"
+ " WHERE\n"
+ " i.table_id = t.id\n"
+ " AND i.id = kc.id\n"
+ " AND kc.name = c.name\n"
+ " AND t.id = c.table_id\n"
+ " AND t.schema_id = s.id\n"
+ " AND k.type IS NULL\n"
+ " AND i.type = it.id\n"
+ " ORDER BY i.name, kc.nr;\n"
+ "GRANT SELECT ON sys.describe_indices TO
PUBLIC;\n"
+ "CREATE VIEW sys.describe_partition_tables AS\n"
+ " SELECT\n"
+ " m_sch,\n"
+ " m_tbl,\n"
+ " p_sch,\n"
+ " p_tbl,\n"
+ " CASE\n"
+ " WHEN p_raw_type IS NULL THEN 'READ ONLY'\n"
+ " WHEN (p_raw_type = 'VALUES' AND pvalues IS
NULL) OR (p_raw_type = 'RANGE' AND minimum IS NULL AND maximum IS NULL AND
with_nulls) THEN 'FOR NULLS'\n"
+ " ELSE p_raw_type\n"
+ " END AS tpe,\n"
+ " pvalues,\n"
+ " minimum,\n"
+ " maximum,\n"
+ " with_nulls\n"
+ " FROM\n"
+ " (WITH\n"
+ " tp(\"type\", table_id) AS\n"
+ " (SELECT ifthenelse((table_partitions.\"type\"
& 2) = 2, 'VALUES', 'RANGE'), table_partitions.table_id FROM
sys.table_partitions),\n"
+ " subq(m_tid, p_mid, \"type\", m_sch, m_tbl,
p_sch, p_tbl) AS\n"
+ " (SELECT m_t.id, p_m.id, m_t.\"type\",
m_s.name, m_t.name, p_s.name, p_m.name\n"
+ " FROM sys.schemas m_s, sys._tables m_t,
sys.dependencies d, sys.schemas p_s, sys._tables p_m\n"
+ " WHERE m_t.\"type\" IN (3, 6)\n"
+ " AND m_t.schema_id = m_s.id\n"
+ " AND m_s.name <> 'tmp'\n"
+ " AND m_t.system = FALSE\n"
+ " AND m_t.id = d.depend_id\n"
+ " AND d.id = p_m.id\n"
+ " AND p_m.schema_id = p_s.id\n"
+ " ORDER BY m_t.id, p_m.id),\n"
+ " vals(id,vals) as\n"
+ " (SELECT vp.table_id, GROUP_CONCAT(vp.value,
',' ORDER BY vp.value) FROM sys.value_partitions vp GROUP BY vp.table_id)\n"
+ " SELECT\n"
+ " subq.m_sch,\n"
+ " subq.m_tbl,\n"
+ " subq.p_sch,\n"
+ " subq.p_tbl,\n"
+ " tp.\"type\" AS p_raw_type,\n"
+ " CASE WHEN tp.\"type\" = 'VALUES'\n"
+ " THEN (SELECT vals.vals FROM vals WHERE
vals.id = subq.p_mid)\n"
+ " ELSE NULL\n"
+ " END AS pvalues,\n"
+ " CASE WHEN tp.\"type\" = 'RANGE'\n"
+ " THEN (SELECT minimum FROM
sys.range_partitions rp WHERE rp.table_id = subq.p_mid)\n"
+ " ELSE NULL\n"
+ " END AS minimum,\n"
+ " CASE WHEN tp.\"type\" = 'RANGE'\n"
+ " THEN (SELECT maximum FROM
sys.range_partitions rp WHERE rp.table_id = subq.p_mid)\n"
+ " ELSE NULL\n"
+ " END AS maximum,\n"
+ " CASE WHEN tp.\"type\" = 'VALUES'\n"
+ " THEN EXISTS(SELECT vp.value FROM
sys.value_partitions vp WHERE vp.table_id = subq.p_mid AND vp.value IS NULL)\n"
+ " ELSE (SELECT rp.with_nulls FROM
sys.range_partitions rp WHERE rp.table_id = subq.p_mid)\n"
+ " END AS with_nulls\n"
+ " FROM\n"
+ " subq LEFT OUTER JOIN tp\n"
+ " ON subq.m_tid = tp.table_id) AS tmp_pi;\n"
+ "GRANT SELECT ON sys.describe_partition_tables
TO PUBLIC;\n"
+ "CREATE VIEW sys.dump_table_constraint_type
AS\n"
+ " SELECT\n"
+ " 'ALTER TABLE ' || sys.FQN(sch, tbl) || ' ADD
CONSTRAINT ' || sys.DQ(con) || ' '||\n"
+ " tpe || ' (' || GROUP_CONCAT(sys.DQ(col), ', '
ORDER BY nr) || ');' stmt,\n"
+ " sch schema_name,\n"
+ " tbl table_name,\n"
+ " con constraint_name\n"
+ " FROM sys.describe_constraints GROUP BY sch,
tbl, con, tpe;\n"
+ "CREATE VIEW sys.dump_indices AS\n"
+ " SELECT\n"
+ " 'CREATE ' || tpe || ' ' || sys.DQ(ind) || '
ON ' || sys.FQN(sch, tbl) || '(' || GROUP_CONCAT(col, ',' ORDER BY nr) || ');'
stmt,\n"
+ " sch schema_name,\n"
+ " tbl table_name,\n"
+ " ind index_name\n"
+ " FROM sys.describe_indices GROUP BY ind, tpe,
sch, tbl;\n"
+ "CREATE VIEW sys.dump_foreign_keys AS\n"
+ " SELECT\n"
+ " 'ALTER TABLE ' || sys.FQN(fk_s, fk_t) || '
ADD CONSTRAINT ' || sys.DQ(fk) || ' ' ||\n"
+ " 'FOREIGN KEY(' || GROUP_CONCAT(sys.DQ(fk_c),
',' ORDER BY o) ||') ' ||\n"
+ " 'REFERENCES ' || sys.FQN(pk_s, pk_t) || '('
|| GROUP_CONCAT(sys.DQ(pk_c), ',' ORDER BY o) || ') ' ||\n"
+ " 'ON DELETE ' || on_delete || ' ON UPDATE ' ||
on_update ||\n"
+ " ';' stmt,\n"
+ " fk_s foreign_schema_name,\n"
+ " fk_t foreign_table_name,\n"
+ " pk_s primary_schema_name,\n"
+ " pk_t primary_table_name,\n"
+ " fk key_name\n"
+ " FROM sys.describe_foreign_keys GROUP BY fk_s,
fk_t, pk_s, pk_t, fk, on_delete, on_update;\n"
+ "CREATE VIEW sys.dump_partition_tables AS\n"
+ " SELECT\n"
+ " 'ALTER TABLE ' || sys.FQN(m_sch, m_tbl) || '
ADD TABLE ' || sys.FQN(p_sch, p_tbl) ||\n"
+ " CASE\n"
+ " WHEN tpe = 'VALUES' THEN ' AS PARTITION IN ('
|| pvalues || ')'\n"
+ " WHEN tpe = 'RANGE' THEN ' AS PARTITION FROM '
|| ifthenelse(minimum IS NOT NULL, sys.SQ(minimum), 'RANGE MINVALUE') || ' TO '
|| ifthenelse(maximum IS NOT NULL, sys.SQ(maximum), 'RANGE MAXVALUE')\n"
+ " WHEN tpe = 'FOR NULLS' THEN ' AS PARTITION
FOR NULL VALUES'\n"
+ " ELSE '' --'READ ONLY'\n"
+ " END ||\n"
+ " CASE WHEN tpe in ('VALUES', 'RANGE') AND
with_nulls THEN ' WITH NULL VALUES' ELSE '' END ||\n"
+ " ';' stmt,\n"
+ " m_sch merge_schema_name,\n"
+ " m_tbl merge_table_name,\n"
+ " p_sch partition_schema_name,\n"
+ " p_tbl partition_table_name\n"
+ " FROM sys.describe_partition_tables;\n"
"CREATE VIEW sys.dump_tables AS\n"
" SELECT\n"
" t.o o,\n"
@@ -5498,7 +5663,7 @@ sql_update_default(Client c, mvc *sql, s
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]