Changeset: 4652fa2d34c9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4652fa2d34c9
Modified Files:
        clients/mapiclient/mhelp.c
        tools/merovingian/client/monetdb.c
Branch: default
Log Message:

Merge with Aug2018 branch.


diffs (truncated from 351 to 300 lines):

diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c
--- a/clients/mapiclient/mhelp.c
+++ b/clients/mapiclient/mhelp.c
@@ -41,9 +41,7 @@ typedef struct {
        const char *comments;
 } SQLhelp;
 
-#define NUMBER_MAJOR_COMMANDS 76 // The number of major commands to show in 
case of no query
-
-SQLhelp sqlhelp[] = {
+SQLhelp sqlhelp1[] = {
        // major commands
        {"ALTER TABLE",
         "",
@@ -58,25 +56,25 @@ SQLhelp sqlhelp[] = {
         "ALTER TABLE [ IF EXISTS ] qname SET { { READ | INSERT } ONLY | READ 
WRITE }\n"
         "ALTER TABLE [ IF EXISTS ] qname RENAME TO ident\n"
         "ALTER TABLE [ IF EXISTS ] qname SET SCHEMA ident",
-        "column_def,table_constraint",
+        "qname,column_def,table_constraint,ident",
         "See also https://www.monetdb.org/Documentation/SQLreference/Alter"},
        {"ALTER MERGE TABLE",
         "",
         "ALTER TABLE [ IF EXISTS ] qname ADD TABLE qname [ AS PARTITION 
opt_partition_spec ]\n"
         "ALTER TABLE [ IF EXISTS ] qname DROP TABLE qname [ RESTRICT | CASCADE 
]\n"
         "ALTER TABLE [ IF EXISTS ] qname SET TABLE qname AS PARTITION 
opt_partition_spec",
-        "opt_partition_spec",
+        "qname,opt_partition_spec",
         "See also 
https://www.monetdb.org/Documentation/Cookbooks/SQLrecipes/DataPartitioning"},
        {"ALTER SCHEMA",
         "",
         "ALTER SCHEMA [ IF EXISTS ] ident RENAME TO ident",
-        NULL,
+        "ident",
         "See also https://www.monetdb.org/Documentation/SQLreference/Alter"},
        {"ALTER SEQUENCE",
         "",
-        "ALTER SEQUENCE ident [ AS datatype] [ RESTART [WITH start]] 
[INCREMENT BY increment]\n"
+        "ALTER SEQUENCE ident [ AS data_type] [ RESTART [WITH start]] 
[INCREMENT BY increment]\n"
         "[MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NO MAXVALUE] 
[CACHE cachevalue] [[NO] CYCLE]",
-        NULL,
+        "ident,data_type",
         "See also 
https://www.monetdb.org/Documentation/Manuals/SQLreference/SerialTypes"},
        {"ALTER USER",
         "",
@@ -85,7 +83,7 @@ SQLhelp sqlhelp[] = {
         "ALTER USER ident WITH [ENCRYPTED | UNENCRYPTED] PASSWORD string SET 
SCHEMA schemaname\n"
         "ALTER USER RENAME TO ident\n"
         "ALTER USER SET [ENCRYPTED | UNENCRYPTED] PASSWORD string USING OLD 
PASSWORD string",
-        NULL,
+        "ident",
         "See also https://www.monetdb.org/Documentation/SQLreference/Users"},
        {"ANALYZE",
         "Collect column data statistics for optimizations",
@@ -107,7 +105,7 @@ SQLhelp sqlhelp[] = {
         "COMMENT ON { SCHEMA | TABLE | VIEW | COLUMN | INDEX | SEQUENCE |\n"
         "           FUNCTION | PROCEDURE | AGGREGATE | FILTER FUNCTION | 
LOADER }\n"
         "     qname IS { 'my description text' | NULL | '' }",
-        NULL,
+        "qname",
         NULL},
        {"COMMIT",
         "Commit the current transaction",
@@ -117,7 +115,7 @@ SQLhelp sqlhelp[] = {
        {"COPY BINARY",
         "Append binary representations into a table",
         "COPY [nrofrecords] BINARY INTO qname [column_list] FROM string [',' 
...] [ON { CLIENT | SERVER }] [NO CONSTRAINT]",
-        "nrofrecords",
+        "nrofrecords,qname,column_list",
         "See also 
https://www.monetdb.org/Documentation/Cookbooks/SQLrecipes/BinaryBulkLoad"},
        {"COPY INTO",
         "Parse a csv file into a table or write a query result to a csv file",
@@ -125,13 +123,13 @@ SQLhelp sqlhelp[] = {
         " [NULL [AS] string] [LOCKED] [BEST EFFORT] [NO CONSTRAINT] [FWF '(' 
integer [',' ...] ')'\n"
         "COPY [nrofrecords] INTO qname [column_list] FROM STDIN [headerlist] [ 
separators]\n"
         " [NULL [AS] string] [LOCKED] [BEST EFFORT] [NO CONSTRAINT]\n"
-        "COPY query_expression INTO [STDOUT | string [ON { CLIENT | SERVER }]] 
[seps] [NULL [AS] string]",
-        "nrofrecords,headerlist,separators",
+        "COPY query_expression INTO [STDOUT | string [ON { CLIENT | SERVER }]] 
[separators] [NULL [AS] string]",
+        "nrofrecords,qname,column_list,headerlist,separators",
         "See also 
https://www.monetdb.org/Documentation/Cookbooks/SQLrecipes/LoadingBulkData"},
        {"COPY LOADER",
         "Copy into using a user supplied parsing function",
         "COPY LOADER INTO qname FROM qname '(' [ scalar_expression ... ] ')'",
-        NULL,
+        "qname",
         NULL},
        {"CREATE AGGREGATE",
         "",
@@ -141,7 +139,7 @@ SQLhelp sqlhelp[] = {
         "CREATE [ OR REPLACE ] AGGREGATE qname '(' { '*' | [ param [',' ...]] 
} ')'\n"
         "    RETURNS { data_type | TABLE '(' function_return [',' ...] ')' }\n"
         "    LANGUAGE ident external_code",
-        "param,data_type,function_return",
+        "qname,param,data_type,function_return,ident",
         NULL},
        {"CREATE FILTER FUNCTION",
         "",
@@ -199,6 +197,11 @@ SQLhelp sqlhelp[] = {
         "CREATE REPLICA TABLE [ IF NOT EXISTS ] qname table_source;",
         NULL,
         "See also 
https://www.monetdb.org/Documentation/Cookbooks/SQLrecipes/TransactionReplication"},
+       {"CREATE ROLE",
+        "",
+        "CREATE ROLE ident [ WITH ADMIN { CURRENT_USER | CURRENT_ROLE } ]",
+        "ident",
+        NULL},
        {"CREATE SCHEMA",
         "",
         "CREATE SCHEMA [ IF NOT EXISTS ] schema_name [default_char_set] 
[path_spec] [schema_element]",
@@ -206,9 +209,9 @@ SQLhelp sqlhelp[] = {
         NULL},
        {"CREATE SEQUENCE",
         "Define a new sequence generator",
-        "CREATE SEQUENCE ident [ AS datatype] [ START [WITH start]] [INCREMENT 
BY increment]\n"
+        "CREATE SEQUENCE ident [ AS data_type] [ START [WITH start]] 
[INCREMENT BY increment]\n"
         "[MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NO MAXVALUE] 
[CACHE cachevalue] [[NO] CYCLE]",
-        NULL,
+        "ident,data_type",
         "See also 
https://www.monetdb.org/Documentation/Manuals/SQLreference/SerialTypes"},
        {"CREATE STREAM TABLE",
         "Temporary table, locked during updates/ continues query processing",
@@ -233,6 +236,11 @@ SQLhelp sqlhelp[] = {
         "CREATE TYPE qname EXTERNAL NAME ident",
         NULL,
         NULL},
+       {"CREATE USER",
+        "Create a new user",
+        "CREATE USER ident WITH [ENCRYPTED | UNENCRYPTED] PASSWORD string NAME 
string SCHEMA ident",
+        "ident",
+        NULL},
        {"CREATE VIEW",
         "",
         "CREATE [ OR REPLACE ] VIEW qname [ column_list ] AS { 
query_expression | '(' query_expression ')' }\n"
@@ -400,7 +408,7 @@ SQLhelp sqlhelp[] = {
        {"SELECT",
         "",
         "[ WITH with_list ]\n"
-        "SELECT [ ALL | DISTINCT [ ON ( expression [',' ...] ) ] ]\n"
+        "SELECT [ ALL | DISTINCT [ ON { expression [',' ...] } ] ]\n"
         "[ '*' | expression [ [ AS ] output_name ] [',' ...] ]\n"
         "[ FROM from_item [',' ...] ]\n"
         "[ WINDOW window_definition [',' ...] ]\n"
@@ -498,7 +506,9 @@ SQLhelp sqlhelp[] = {
         "{ window_aggregate_function | window_rank_function } OVER { ident | 
'(' window_specification ')' }",
         "window_aggregate_function,window_rank_function,window_specification",
         "See also 
https://www.monetdb.org/Documentation/Manuals/SQLreference/WindowFunctions"},
-
+       {NULL, NULL, NULL, NULL, NULL}  /* End of list marker */
+};
+SQLhelp sqlhelp2[] = {
 // The subgrammar rules
        {"assignment_list",
         NULL,
@@ -580,9 +590,9 @@ SQLhelp sqlhelp[] = {
         NULL},
        {"generated_column",
         NULL,
-        "AUTO_INCREMENT | GENERATED ALWAYS AS IDENTITY [ '(' [ AS datatype] [ 
START [WITH start]] [INCREMENT BY increment]\n"
+        "AUTO_INCREMENT | GENERATED ALWAYS AS IDENTITY [ '(' [ AS data_type] [ 
START [WITH start]] [INCREMENT BY increment]\n"
         "[MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NO MAXVALUE] 
[CACHE cachevalue] [[NO] CYCLE] ')' ] ",
-        NULL,
+        "data_type",
         "See also 
https://www.monetdb.org/Documentation/Manuals/SQLreference/SerialTypes"},
        {"global_privileges",
         NULL,
@@ -596,7 +606,7 @@ SQLhelp sqlhelp[] = {
         NULL},
        {"headerlist",
         NULL,
-        "'(' ( ident [string] ) [',' ...]",
+        "'(' { ident [string] } [',' ...] ')'",
         NULL,
         NULL},
        {"ident",
@@ -607,7 +617,7 @@ SQLhelp sqlhelp[] = {
        {"ident_list",
         NULL,
         "ident [',' ...]",
-        NULL,
+        "ident",
         NULL},
        {"interval",
         NULL,
@@ -882,16 +892,19 @@ static const char *
 sql_grammar_rule(const char *word, stream *toConsole)
 {
        char buf[65], *s = buf;
-       size_t buflen;
        int i;
        while (s < buf + 64 && *word != ',' && *word && !isspace((unsigned 
char) *word))
                *s++ = *word++;
        *s = 0;
-       buflen = (size_t) (s - buf);
 
-       for (i = 0; sqlhelp[i].command; i++) {
-               if (strncasecmp(sqlhelp[i].command, buf, buflen) == 0 && 
sqlhelp[i].synopsis == NULL) {
-                       mnstr_printf(toConsole, "%s : %s\n", buf, 
sqlhelp[i].syntax);
+       for (i = 0; sqlhelp2[i].command; i++) {
+               if (strcasecmp(sqlhelp2[i].command, buf) == 0) {
+                       if (sqlhelp2[i].syntax) {
+                               mnstr_printf(toConsole, "%s : %s\n", buf, 
sqlhelp2[i].syntax);
+                               if (sqlhelp2[i].synopsis)
+                                       mnstr_printf(toConsole, "%.*s   %s\n", 
(int) (s - buf), "", sqlhelp2[i].synopsis);
+                       } else if (sqlhelp2[i].synopsis)
+                               mnstr_printf(toConsole, "%s : %s\n", buf, 
sqlhelp2[i].synopsis);
                }
        }
        while (*word && (isalnum((unsigned char) *word || *word == '_')))
@@ -902,36 +915,41 @@ sql_grammar_rule(const char *word, strea
 }
 
 static void
-sql_grammar(int idx, stream *toConsole)
+sql_grammar(SQLhelp *sqlhelp, stream *toConsole)
 {
        const char *t1;
-       if (sqlhelp[idx].synopsis == NULL) {
-               mnstr_printf(toConsole, "%s : %s\n", sqlhelp[idx].command, 
sqlhelp[idx].syntax);
-               if (sqlhelp[idx].comments)
-                       mnstr_printf(toConsole, "%s\n", sqlhelp[idx].comments);
+       if (sqlhelp->synopsis == NULL) {
+               mnstr_printf(toConsole, "%s : %s\n", sqlhelp->command, 
sqlhelp->syntax);
+               if (sqlhelp->comments)
+                       mnstr_printf(toConsole, "%s\n", sqlhelp->comments);
+               t1 = sqlhelp->rules;
+               if (t1 && *t1)
+                       do
+                               t1 = sql_grammar_rule(t1, toConsole);
+                       while (t1);
                return;
        }
-       if (sqlhelp[idx].command)
-               mnstr_printf(toConsole, "command  : %s\n", 
sqlhelp[idx].command);
-       if (sqlhelp[idx].synopsis && *sqlhelp[idx].synopsis)
-               mnstr_printf(toConsole, "synopsis : %s\n", 
sqlhelp[idx].synopsis);
-       if (sqlhelp[idx].syntax && *sqlhelp[idx].syntax) {
+       if (sqlhelp->command)
+               mnstr_printf(toConsole, "command  : %s\n", sqlhelp->command);
+       if (sqlhelp->synopsis && *sqlhelp->synopsis)
+               mnstr_printf(toConsole, "synopsis : %s\n", sqlhelp->synopsis);
+       if (sqlhelp->syntax && *sqlhelp->syntax) {
                mnstr_printf(toConsole, "syntax   : ");
-               for (t1 = sqlhelp[idx].syntax; *t1; t1++) {
+               for (t1 = sqlhelp->syntax; *t1; t1++) {
                        if (*t1 == '\n')
                                mnstr_printf(toConsole, "\n           ");
                        else
                                mnstr_printf(toConsole, "%c", *t1);
                }
                mnstr_printf(toConsole, "\n");
-               t1 = sqlhelp[idx].rules;
+               t1 = sqlhelp->rules;
                if (t1 && *t1)
                        do
                                t1 = sql_grammar_rule(t1, toConsole);
                        while (t1);
        }
-       if (sqlhelp[idx].comments)
-               mnstr_printf(toConsole, "%s\n", sqlhelp[idx].comments);
+       if (sqlhelp->comments)
+               mnstr_printf(toConsole, "%s\n", sqlhelp->comments);
 }
 
 static void
@@ -960,28 +978,40 @@ sql_help(const char *pattern, stream *to
        }
 
        if (*pattern && *pattern != '*') {
-               int first = 1;
+               bool first = true;
                size_t patlen = strlen(pattern);
                /* ignore possible final newline in pattern */
                if (pattern[patlen - 1] == '\n')
                        patlen--;
-               for (i = 0; *pattern && sqlhelp[i].command; i++)
-                       if (strncasecmp(sqlhelp[i].command, pattern, patlen) == 
0) {
+               for (i = 0; sqlhelp1[i].command; i++)
+                       if (strncasecmp(sqlhelp1[i].command, pattern, patlen) 
== 0) {
                                if (!first)
                                        mnstr_printf(toConsole, "\n");
-                               sql_grammar(i, toConsole);
-                               first = 0;
+                               sql_grammar(&sqlhelp1[i], toConsole);
+                               first = false;
+                       }
+               for (i = 0; sqlhelp2[i].command; i++)
+                       if (strncasecmp(sqlhelp2[i].command, pattern, patlen) 
== 0) {
+                               if (!first)
+                                       mnstr_printf(toConsole, "\n");
+                               sql_grammar(&sqlhelp2[i], toConsole);
+                               first = false;
                        }
                return;
        }
        // collect the major topics
-       for (i = 0; sqlhelp[i].command; i++) {
-               if (islower((unsigned char) sqlhelp[i].command[0]) && *pattern 
!= '*')
-                       break;
+       for (i = 0; sqlhelp1[i].command; i++) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to