Changeset: 6012c10ae9c8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6012c10ae9c8
Modified Files:
        testing/sqllogictest.py
Branch: default
Log Message:

Merge with Mar2025 branch.


diffs (truncated from 8289 to 300 lines):

diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -3912,11 +3912,11 @@ mapi_fetch_line(MapiHdl hdl)
                hdl->mid->active = hdl;
                hdl->active = result;
                mapi_log_record(hdl->mid, "W", "X" "export %d %" PRId64 "\n",
-                                    result->tableid,
-                                    result->cache.first + 
result->cache.tuplecount);
+                               result->tableid,
+                               result->cache.first + result->cache.tuplecount);
                int e;
                if ((e = mnstr_printf(hdl->mid->to, "X" "export %d %" PRId64 
"\n",
-                                result->tableid,
+                                     result->tableid,
                                      result->cache.first + 
result->cache.tuplecount)) < 0 ||
                    (e = mnstr_flush(hdl->mid->to, MNSTR_FLUSH_DATA)) < 0)
                        check_stream(hdl->mid, hdl->mid->to, e, "sending export 
command", NULL);
@@ -4436,7 +4436,7 @@ mapi_fetch_all_rows(MapiHdl hdl)
                        mid->active = hdl;
                        hdl->active = result;
                        mapi_log_record(mid, "SEND", "X" "export %d %" PRId64 
"\n",
-                                            result->tableid, 
result->cache.first + result->cache.tuplecount);
+                                       result->tableid, result->cache.first + 
result->cache.tuplecount);
                        int e;
                        if ((e = mnstr_printf(mid->to, "X" "export %d %" PRId64 
"\n",
                                              result->tableid, 
result->cache.first + result->cache.tuplecount)) < 0 ||
diff --git a/sql/ChangeLog.Mar2025 b/sql/ChangeLog.Mar2025
--- a/sql/ChangeLog.Mar2025
+++ b/sql/ChangeLog.Mar2025
@@ -1,6 +1,11 @@
 # ChangeLog file for sql
 # This file is updated with Maddlog
 
+* Tue Mar 11 2025 Niels Nes <[email protected]>
+- ranking window functions are now optimized into topn's
+  For the grouped case we added the missing grouped/heap based topn
+  implementation.
+
 * Wed Mar  5 2025 Martin van Dinther <[email protected]>
 - Added support for reading external data in a generic way via table
   returning function: proto_loader(string uri).  The uri string value
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -1666,8 +1666,12 @@ mvc_export_head(backend *b, stream *s, i
                return -4;
 
        /* row count, min(count, reply_size) */
-       /* the columnar protocol ignores the reply size by fetching the entire 
resultset at once, so don't set it */
-       if (mvc_send_int(s, (b->client && b->client->protocol != 
PROTOCOL_COLUMNAR && m->reply_size >= 0 && (BUN) m->reply_size < count) ? 
m->reply_size : (int) count) != 1)
+       /* the columnar protocol ignores the reply size by fetching the
+        * entire resultset at once, so don't set it; also, the MAPI
+        * protocol doesn't allow for retrieving rows using the Xexport*
+        * commands for Q_PREPARE results (due to an oversight), so we send
+        * it all in the first response */
+       if (mvc_send_int(s, (b->client && b->client->protocol != 
PROTOCOL_COLUMNAR && m->reply_size >= 0 && (BUN) m->reply_size < count && 
t->query_type != Q_PREPARE) ? m->reply_size : (int) count) != 1)
                return -4;
 
        // export query id
@@ -1820,7 +1824,8 @@ mvc_export_result(backend *b, stream *s,
                return mvc_export_table_columnar(s, t, m->scanner.rs);
        }
 
-       count = m->reply_size;
+       /* for Q_PREPARE results, send everything */
+       count = t->query_type == Q_PREPARE ? t->nr_rows : (BUN) m->reply_size;
        if (m->reply_size != -2 && (count <= 0 || count >= t->nr_rows)) {
                count = t->nr_rows;
                clean = 1;
diff --git a/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.SQL.py 
b/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.SQL.py
deleted file mode 100644
--- a/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.SQL.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from MonetDBtesting.sqltest import SQLTestCase
-
-with SQLTestCase() as tc:
-    tc.connect()
-    with open('deallocate-id.Bug-7010.sql') as f:
-        tc.execute(query=None, client='mclient', stdin=f)\
-            .assertMatchStableOut(fout='deallocate-id.Bug-7010.stable.out')\
-            .assertMatchStableError(ferr='deallocate-id.Bug-7010.stable.err')
diff --git a/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.sql 
b/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.sql
deleted file mode 100644
--- a/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-select count(*) from sys.prepared_statements;
-prepare select 1;
-prepare select 2;
-deallocate **;
-select count(*) from sys.prepared_statements;
-deallocate all;
-select count(*) from sys.prepared_statements;
diff --git a/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.stable.err 
b/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.stable.err
deleted file mode 100644
diff --git a/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.stable.out 
b/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.stable.out
deleted file mode 100644
--- a/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.stable.out
+++ /dev/null
@@ -1,34 +0,0 @@
-#select count(*) from sys.prepared_statements;
-% .%2 # table_name
-% %2 # name
-% bigint # type
-% 1 # length
-[ 0    ]
-#prepare select 1;
-#prepare select 1;
-% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
-% type,        digits, scale,  schema, table,  column # name
-% varchar,     int,    int,    varchar,        varchar,        varchar # type
-% 7,   1,      1,      0,      2,      2 # length
-[ "tinyint",   1,      0,      "",     "%2",   "%2"    ]
-#prepare select 2;
-#prepare select 2;
-% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
-% type,        digits, scale,  schema, table,  column # name
-% varchar,     int,    int,    varchar,        varchar,        varchar # type
-% 7,   1,      1,      0,      2,      2 # length
-[ "tinyint",   2,      0,      "",     "%2",   "%2"    ]
-#deallocate  1;
-#select count(*) from sys.prepared_statements;
-% .%2 # table_name
-% %2 # name
-% bigint # type
-% 1 # length
-[ 1    ]
-#deallocate all;
-#select count(*) from sys.prepared_statements;
-% .%2 # table_name
-% %2 # name
-% bigint # type
-% 1 # length
-[ 0    ]
diff --git a/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.test 
b/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2020/Tests/deallocate-id.Bug-7010.test
@@ -0,0 +1,41 @@
+query I nosort
+select count(*) from sys.prepared_statements
+----
+0
+
+query TIITTT nosort
+prepare select 1
+----
+tinyint
+1
+0
+(empty)
+%2
+%2
+
+query TIITTT nosort
+prepare select 2
+----
+tinyint
+2
+0
+(empty)
+%2
+%2
+
+statement ok
+deallocate <LAST_PREPARE_ID>
+
+query I nosort
+select count(*) from sys.prepared_statements
+----
+1
+
+statement ok
+deallocate all
+
+query I nosort
+select count(*) from sys.prepared_statements
+----
+0
+
diff --git a/sql/test/BugTracker/Tests/local_temp_table.SF-1865953.SQL.py 
b/sql/test/BugTracker/Tests/local_temp_table.SF-1865953.SQL.py
deleted file mode 100644
--- a/sql/test/BugTracker/Tests/local_temp_table.SF-1865953.SQL.py
+++ /dev/null
@@ -1,16 +0,0 @@
-import os, sys
-try:
-    from MonetDBtesting import process
-except ImportError:
-    import process
-
-def client(args):
-    with process.client('sql', args=args,
-                        stdout=process.PIPE, stderr=process.PIPE) as clt:
-        out, err = clt.communicate()
-        sys.stdout.write(out)
-        sys.stderr.write(err)
-
-client([os.path.join(os.environ['RELSRCDIR'],
-                     'local_temp_table_data.SF-1865953.sql')])
-client([os.devnull])
diff --git a/sql/test/BugTracker/Tests/local_temp_table.SF-1865953.test 
b/sql/test/BugTracker/Tests/local_temp_table.SF-1865953.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker/Tests/local_temp_table.SF-1865953.test
@@ -0,0 +1,3 @@
+statement ok
+create local temp table t1(id int)
+
diff --git a/sql/test/BugTracker/Tests/local_temp_table_data.SF-1865953.sql 
b/sql/test/BugTracker/Tests/local_temp_table_data.SF-1865953.sql
deleted file mode 100644
--- a/sql/test/BugTracker/Tests/local_temp_table_data.SF-1865953.sql
+++ /dev/null
@@ -1,1 +0,0 @@
-create local temp table t1(id int);
diff --git a/sql/test/analytics/Tests/analytics20.SQL.py 
b/sql/test/analytics/Tests/analytics20.SQL.py
deleted file mode 100644
--- a/sql/test/analytics/Tests/analytics20.SQL.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from MonetDBtesting.sqltest import SQLTestCase
-
-with SQLTestCase() as tc:
-    # optional or default connection
-    tc.connect()
-    with open('analytics20.sql') as f:
-        tc.execute(query=None, client='mclient', stdin=f)\
-            .assertSucceeded()\
-            .assertMatchStableOut(fout='analytics20.stable.out')
diff --git a/sql/test/analytics/Tests/analytics20.sql 
b/sql/test/analytics/Tests/analytics20.sql
deleted file mode 100644
--- a/sql/test/analytics/Tests/analytics20.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-start transaction;
-create table analytics (aa int, bb int, cc bigint);
-insert into analytics values (15, 3, 15), (3, 1, 3), (2, 1, 2), (5, 3, 5), 
(NULL, 2, NULL), (3, 2, 3), (4, 1, 4), (6, 3, 6), (8, 2, 8), (NULL, 4, NULL);
-create table stressme (aa varchar(64), bb int);
-insert into stressme values ('one', 1), ('another', 1), ('stress', 1), (NULL, 
2), ('ok', 2), ('check', 3), ('me', 3), ('please', 3), (NULL, 4);
-
-prepare select count(*) over (rows ? preceding) from analytics;
-exec **(2);
-
-prepare select max(aa) over (rows between 5 preceding and ? following) from 
stressme;
-exec **(2);
-
-prepare select max(aa) over (order by bb range between ? preceding and 10 
following) from stressme;
-exec **(2);
-
-rollback;
diff --git a/sql/test/analytics/Tests/analytics20.stable.out 
b/sql/test/analytics/Tests/analytics20.stable.out
deleted file mode 100644
--- a/sql/test/analytics/Tests/analytics20.stable.out
+++ /dev/null
@@ -1,75 +0,0 @@
-#start transaction;
-#create table analytics (aa int, bb int, cc bigint);
-#insert into analytics values (15, 3, 15), (3, 1, 3), (2, 1, 2), (5, 3, 5), 
(NULL, 2, NULL), (3, 2, 3), (4, 1, 4), (6, 3, 6), (8, 2, 8), (NULL, 4, NULL);
-[ 10   ]
-#create table stressme (aa varchar(64), bb int);
-#insert into stressme values ('one', 1), ('another', 1), ('stress', 1), (NULL, 
2), ('ok', 2), ('check', 3), ('me', 3), ('please', 3), (NULL, 4);
-[ 9    ]
-#prepare select count(*) over (rows ? preceding) from analytics;
-#prepare select count(*) over (rows ? preceding) from analytics;
-% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
-% type,        digits, scale,  schema, table,  column # name
-% varchar,     int,    int,    varchar,        varchar,        varchar # type
-% 6,   2,      1,      0,      2,      2 # length
-[ "bigint",    63,     0,      "",     "%1",   "%1"    ]
-[ "bigint",    63,     0,      NULL,   NULL,   NULL    ]
-#exec  0(2);
-% .%1 # table_name
-% %1 # name
-% bigint # type
-% 1 # length
-[ 1    ]
-[ 2    ]
-[ 3    ]
-[ 3    ]
-[ 3    ]
-[ 3    ]
-[ 3    ]
-[ 3    ]
-[ 3    ]
-[ 3    ]
-#prepare select max(aa) over (rows between 5 preceding and ? following) from 
stressme;
-#prepare select max(aa) over (rows between 5 preceding and ? following) from 
stressme;
-% .prepare,    .prepare,       .prepare,       .prepare,       .prepare,       
.prepare # table_name
-% type,        digits, scale,  schema, table,  column # name
-% varchar,     int,    int,    varchar,        varchar,        varchar # type
-% 7,   2,      1,      0,      2,      2 # length
-[ "varchar",   64,     0,      "",     "%1",   "%1"    ]
-[ "bigint",    63,     0,      NULL,   NULL,   NULL    ]
-#exec  1(2);
-% sys.%1 # table_name
-% %1 # name
-% varchar # type
-% 6 # length
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to