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]