Changeset: a5ae3c62b66a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a5ae3c62b66a
Modified Files:
        clients/mapiclient/mhelp.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/modules/atoms/str.c
        monetdb5/modules/mal/mal_mapi.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_upgrades.c
        sql/backends/monet5/vaults/csv/csv.c
        sql/common/sql_types.c
        sql/server/rel_dump.c
        sql/server/rel_propagate.c
        sql/server/rel_updates.c
        sql/server/sql_atom.c
        sql/server/sql_semantic.c
        sql/server/sqlparse.c
        sql/storage/bat/bat_logger.c
        sql/storage/store.c
        tools/mserver/mserver5.c
Branch: default
Log Message:

Merge with Mar2025 branch.


diffs (truncated from 3299 to 300 lines):

diff --git a/clients/examples/C/smack00.c b/clients/examples/C/smack00.c
--- a/clients/examples/C/smack00.c
+++ b/clients/examples/C/smack00.c
@@ -65,9 +65,9 @@ main(int argc, char **argv)
 
        for (i = 0; i < n; i++) {
                if (lang==1)
-                       snprintf(buf, 40, "select %d;", i);
+                       snprintf(buf, sizeof(buf), "select %d;", i);
                else
-                       snprintf(buf, 40, "io.print(%d);", i);
+                       snprintf(buf, sizeof(buf), "io.print(%d);", i);
                if ((hdl = mapi_query(dbh, buf)) == NULL || mapi_error(dbh))
                        die(dbh, hdl);
                while ( (/*line= */ mapi_fetch_line(hdl)) != NULL) {
diff --git a/clients/examples/C/smack01.c b/clients/examples/C/smack01.c
--- a/clients/examples/C/smack01.c
+++ b/clients/examples/C/smack01.c
@@ -70,9 +70,9 @@ main(int argc, char **argv)
                        die(dbh,NULL);
 
                if (lang==1)
-                       snprintf(buf, 40, "select %d;", i);
+                       snprintf(buf, sizeof(buf), "select %d;", i);
                else
-                       snprintf(buf, 40, "io.print(%d);", i);
+                       snprintf(buf, sizeof(buf), "io.print(%d);", i);
                if ((hdl = mapi_query(dbh, buf)) == NULL || mapi_error(dbh))
                        die(dbh, hdl);
                while ((line = mapi_fetch_line(hdl))) {
diff --git a/clients/examples/C/testsfile.c b/clients/examples/C/testsfile.c
--- a/clients/examples/C/testsfile.c
+++ b/clients/examples/C/testsfile.c
@@ -488,7 +488,7 @@ run_tests_inner(stream *s, int verbose)
 
        while (true) {
                lineno++;
-               sprintf(location_lineno, "%d", lineno);
+               snprintf(location_lineno, 100 - 1, "%d", lineno);
                ssize_t nread = mnstr_readline(s, line_buffer, 
sizeof(line_buffer));
                if (nread == 0)
                        break;
diff --git a/clients/mapiclient/ReadlineTools.c 
b/clients/mapiclient/ReadlineTools.c
--- a/clients/mapiclient/ReadlineTools.c
+++ b/clients/mapiclient/ReadlineTools.c
@@ -369,7 +369,7 @@ invoke_editor(int cnt, int key) {
                }
        }
 
-       snprintf(editor_command, BUFFER_SIZE, "%s %s", editor, template);
+       snprintf(editor_command, sizeof(editor_command), "%s %s", editor, 
template);
        if (system(editor_command) != 0) {
                readline_show_error("invoke_editor: Starting editor failed\n");
                goto bailout;
@@ -472,7 +472,7 @@ init_readline(Mapi mid, const char *lang
        if (save_history) {
                int len;
                if (getenv("HOME") != NULL) {
-                       len = snprintf(_history_file, FILENAME_MAX,
+                       len = snprintf(_history_file, sizeof(_history_file),
                                 "%s/.mapiclient_history_%s",
                                 getenv("HOME"), language);
                        if (len == -1 || len >= FILENAME_MAX)
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -2637,9 +2637,9 @@ bailout:
 int
 dump_database(Mapi mid, stream *sqlf, const char *ddir, const char *ext, bool 
describe, bool useInserts, bool noescape)
 {
-       const char start_trx[] = "START TRANSACTION";
-       const char end[] = "ROLLBACK";
-       const char types[] =
+       static const char start_trx[] = "START TRANSACTION";
+       static const char end[] = "ROLLBACK";
+       static const char types[] =
                "SELECT s.name, "
                       "t.systemname, "
                       "t.sqlname "
@@ -2678,13 +2678,13 @@ dump_database(Mapi mid, stream *sqlf, co
                  "AND ui.name <> 'monetdb' "
                  "AND ui.name <> '.snapshot' "
                "ORDER BY ui.name";
-       const char roles[] =
+       static const char roles[] =
                "SELECT name "
                "FROM sys.auths "
                "WHERE name NOT IN (SELECT name FROM sys.db_user_info) "
                  "AND grantor <> 0 "
                "ORDER BY name";
-       const char grants[] =
+       static const char grants[] =
                /* all grants granting roles to users excepting the default 
role */
                "SELECT a1.name, "
                       "a2.name "
@@ -2697,7 +2697,7 @@ dump_database(Mapi mid, stream *sqlf, co
                  "AND a1.name = ui.name "
                  "AND a2.id <> ui.default_role "
                "ORDER BY a1.name, a2.name";
-       const char table_grants[] =
+       static const char table_grants[] =
                "SELECT s.name, t.name, "
                       "a.name, "
                       "sum(p.privileges), "
@@ -2714,7 +2714,7 @@ dump_database(Mapi mid, stream *sqlf, co
                  "AND p.grantable = go.id "
                "GROUP BY s.name, t.name, a.name, g.name, go.opt "
                "ORDER BY s.name, t.name, a.name, g.name, go.opt";
-       const char column_grants[] =
+       static const char column_grants[] =
                "SELECT s.name, t.name, "
                       "c.name, a.name, "
                       "pc.privilege_code_name, "
@@ -2736,7 +2736,7 @@ dump_database(Mapi mid, stream *sqlf, co
                  "AND p.privileges = pc.privilege_code_id "
                  "AND p.grantable = go.id "
                "ORDER BY s.name, t.name, c.name, a.name, g.name, p.grantable";
-       const char function_grants[] =
+       static const char function_grants[] =
                "SELECT f.id, "
                           "s.name, "
                           "f.name, "
@@ -2773,7 +2773,7 @@ dump_database(Mapi mid, stream *sqlf, co
                                 "f.id, "
                                 "a.inout DESC, "
                                 "a.number";
-       const char global_grants[] =
+       static const char global_grants[] =
                "SELECT a.name, pc.grnt, g.name, go.opt "
                "FROM sys.privileges p, "
                     "sys.auths a, "
@@ -2786,22 +2786,22 @@ dump_database(Mapi mid, stream *sqlf, co
                  "AND p.privileges = pc.id "
                  "AND p.grantable = go.id "
                "ORDER BY a.name, g.name, go.opt";
-       const char schemas[] =
+       static const char schemas[] =
                "SELECT s.name, a.name, rem.remark "
                "FROM sys.schemas s LEFT OUTER JOIN sys.comments rem ON s.id = 
rem.id, "
                     "sys.auths a "
                "WHERE s.\"authorization\" = a.id "
                  "AND s.system = FALSE "
                "ORDER BY s.name";
-       const char sequences1[] =
+       static const char sequences1[] =
                "SELECT sch.name, seq.name, rem.remark "
                "FROM sys.schemas sch, "
                     "sys.sequences seq LEFT OUTER JOIN sys.comments rem ON 
seq.id = rem.id "
                "WHERE sch.id = seq.schema_id "
                "ORDER BY sch.name, seq.name";
-       const char sequences2[] =
+       static const char sequences2[] =
                "SELECT * FROM sys.describe_sequences ORDER BY sch, seq";
-       const char tables[] =
+       static const char tables[] =
                "SELECT t.id AS id, "
                           "s.name AS sname, "
                           "t.name AS name, "
@@ -2812,7 +2812,7 @@ dump_database(Mapi mid, stream *sqlf, co
                  "AND t.system = FALSE "
                  "AND s.id = t.schema_id "
                "ORDER BY id";
-       const char mergetables[] =
+       static const char mergetables[] =
                "SELECT subq.s1name, "
                       "subq.t1name, "
                       "subq.s2name, "
@@ -2841,7 +2841,7 @@ dump_database(Mapi mid, stream *sqlf, co
                                "ON subq.id = table_partitions.table_id";
        /* we must dump views, functions/procedures and triggers in order
         * of creation since they can refer to each other */
-       const char views_functions_triggers[] =
+       static const char views_functions_triggers[] =
                "with vft (sname, name, id, query, remark) AS ("
                        "SELECT s.name AS sname, " /* views */
                               "t.name AS name, "
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -2533,7 +2533,7 @@ doFile(Mapi mid, stream *fp, bool useins
                                        }
 
                                        if (x & MD_MERGE) {
-                                               const char mquery[] = "select 
s1.name as s1name,"
+                                               static const char mquery[] = 
"select s1.name as s1name,"
                                                        " t1.name as t1name,"
                                                        " c1.name as c1name,"
                                                        " s2.name as s2name,"
@@ -2706,7 +2706,7 @@ doFile(Mapi mid, stream *fp, bool useins
                                        }
                                        if (x & 
(MD_TABLE|MD_VIEW|MD_SEQ|MD_FUNC|MD_SCHEMA)) {
                                                /* get all object names in 
current schema */
-                                               const char with_clause[] =
+                                               static const char with_clause[] 
=
                                                        "with 
describe_all_objects AS (\n"
                                                        "  SELECT s.name AS 
sname,\n"
                                                        "      t.name,\n"
diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -479,19 +479,21 @@ SQLhelp sqlhelp1[] = {
         NULL},
        {"SELECT",
         "",
-        "[ WITH cte_list ]\n"
-        "SELECT [ ALL | DISTINCT [ ON { expression [',' ...] } ] ]\n"
-        "[ '*' | expression [ [ AS ] output_name ] [',' ...] ]\n"
-        "[ FROM from_item [',' ...] ]\n"
+        "[ WITH [ RECURSIVE ] cte_list ]\n"
+        "SELECT [ ALL | DISTINCT ] { '*' | expression [ [ AS ] output_name ] 
[',' ...] }\n"
+        "[ INTO variable_ref [',' ...] ]\n"
+        "[ FROM table_ref [',' ...] ]\n"
+        "[ WHERE search_condition ]\n"
+        "[ GROUP BY { ALL | '*' | group_by_element [',' ...] } ]\n"
+        "[ HAVING search_condition ]\n"
         "[ WINDOW window_definition [',' ...] ]\n"
-        "[ WHERE condition ]\n"
-        "[ GROUP BY group_by_element [',' ...] ]\n"
-        "[ HAVING condition [',' ...] ]\n"
-        "[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] [ CORRESPONDING ] 
select ]\n"
-        "[ ORDER BY expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [',' 
...] ]\n"
-        "[ limit_offset_clause | offset_fetchfirst_clause ]\n"
-        "[ SAMPLE size [ SEED size ] ]",
-        "cte_list,expression,group_by_element,window_definition",
+        "[ qualify_clause ]\n"
+        "[ { UNION | INTERSECT | EXCEPT | OUTER UNION } [ DISTINCT | ALL ] [ 
corresponding ] select_clause ]\n"
+        "[ order_by_clause ]\n"
+        "[ limit_clause ]\n"
+        "[ sample_clause ]\n"
+        "[ seed_clause ]",
+        
"cte_list,expression,table_ref,search_condition,group_by_element,window_definition,qualify_clause,corresponding,order_by_clause,limit_clause,sample_clause,seed_clause",
         "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-manipulation/table-expressions/"},
        {"SET",
         "Assign a value to a variable or column",
@@ -545,12 +547,8 @@ SQLhelp sqlhelp1[] = {
         "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/transactions/"},
        {"TABLE JOINS",
         "",
-        "'(' joined_table ') |\n"
-        "table_ref CROSS JOIN table_ref ')' |\n"
-        "table_ref NATURAL [ INNER | LEFT | RIGHT | FULL ] JOIN table_ref |\n"
-        "table_ref UNION JOIN table_ref { ON search_condition | USING 
column_list } |\n"
-        "table_ref [ INNER | LEFT | RIGHT | FULL ] JOIN table_ref { ON 
search_condition | USING column_list }",
-        "table_ref,search_condition,column_list",
+        "joined_table",
+        "joined_table,join_type",
         "See also 
https://www.monetdb.org/documentation/user-guide/sql-manual/data-manipulation/table-expressions/"},
        {"TRACE",
         "Give execution trace for the SQL statement",
@@ -635,6 +633,11 @@ SQLhelp sqlhelp2[] = {
         "call_procedure | while_statement | if_statement | case_statement | 
return_statement",
         
"call_procedure,while_statement,if_statement,case_statement,return_statement",
         "See also 
https://www.monetdb.org/documentation/user-guide/sql-programming/flow-of-control/"},
+       {"corresponding",
+        NULL,
+        "CORRESPONDING [ BY '(' column_ref_commalist ')' ]",
+        "column_ref_commalist",
+        NULL},
        {"datetime_type",
         NULL,
         "DATE | TIME [ time_precision ] [ WITH TIME ZONE ] |\n"
@@ -696,9 +699,12 @@ SQLhelp sqlhelp2[] = {
         NULL},
        {"group_by_element",
         NULL,
-        "{ expression | '(' ')' | ROLLUP '(' ident [',' ... ] ')' | CUBE '(' 
ident [',' ... ] ')'\n"
-        "| GROUPING SETS '(' group_by_element [',' ... ] ')' }",
-        "expression",
+        "{ scalar_expression\n"
+        "| ROLLUP '(' ident [',' ... ] ')'\n"
+        "| CUBE '(' ident [',' ... ] ')'\n"
+        "| GROUPING SETS '(' group_set_element [',' ... ] ')'\n"
+        "| '(' ')' }",
+        "scalar_expression",
         NULL},
        {"headerlist",
         NULL,
@@ -723,11 +729,6 @@ SQLhelp sqlhelp2[] = {
         "[ ELSE procedure_statement ... ] END IF",
         "search_condition,procedure_statement",
         "See also 
https://www.monetdb.org/documentation/user-guide/sql-programming/flow-of-control/"},
-       {"seq_int_datatype",
-        NULL,
-        "BIGINT | INTEGER | INT | SMALLINT | TINYINT",
-        NULL,
-        NULL},
        {"interval",
         NULL,
         "INTERVAL [ '+' | '-' ] string start_field TO end_field",
@@ -743,11 +744,33 @@ SQLhelp sqlhelp2[] = {
         "READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE",
         NULL,
         NULL},
+       {"joined_table",
+        NULL,
+        "  '(' joined_table ')'\n"
+        "| table_ref CROSS JOIN table_ref ')'\n"
+        "| table_ref NATURAL [ join_type ] JOIN table_ref\n"
+        "| table_ref [ join_type ] JOIN table_ref { ON search_condition | 
USING column_list }\n"
+        "| '{' 'oj' table_ref [ join_type ] JOIN table_ref { ON 
search_condition | USING column_list } '}'",
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to