Changeset: 15746c9822f0 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=15746c9822f0 Added Files: clients/mapiclient/mhelp.c Modified Files: clients/ChangeLog clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/SQL-dump.stable.out clients/Tests/SQL-dump.stable.out.int128 clients/Tests/exports.stable.out clients/mapiclient/mclient.c gdk/ChangeLog.Dec2016 gdk/gdk_atoms.c gdk/gdk_atoms.h gdk/gdk_calc.c monetdb5/modules/mal/00_batcalc_hge.mal monetdb5/modules/mal/00_batcalc_hge.mal.sh monetdb5/modules/mal/00_calc_hge.mal monetdb5/modules/mal/00_calc_hge.mal.sh monetdb5/modules/mal/01_batcalc.mal monetdb5/modules/mal/01_batcalc.mal.sh monetdb5/modules/mal/01_calc.mal monetdb5/modules/mal/01_calc.mal.sh sql/backends/monet5/UDF/pyapi/pyapi.c sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/check.stable.out sql/test/emptydb-upgrade-chain/Tests/check.stable.out.32bit sql/test/emptydb-upgrade-chain/Tests/check.stable.out.int128 sql/test/emptydb-upgrade-hge/Tests/check.stable.out.int128 sql/test/emptydb-upgrade/Tests/check.stable.out sql/test/emptydb-upgrade/Tests/check.stable.out.32bit sql/test/emptydb-upgrade/Tests/check.stable.out.int128 sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 sql/test/emptydb/Tests/load.stable.out sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.32bit sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 Branch: oltp Log Message:
Merge with default diffs (truncated from 2126 to 300 lines): diff --git a/clients/ChangeLog b/clients/ChangeLog --- a/clients/ChangeLog +++ b/clients/ChangeLog @@ -1,3 +1,6 @@ # ChangeLog file for clients # This file is updated with Maddlog +* Sun Oct 30 2016 Martin Kersten <m...@cwi.nl> +- Added an more elaborate \help command for SQL expressions. + diff --git a/clients/Tests/MAL-signatures.stable.out.int128 b/clients/Tests/MAL-signatures.stable.out.int128 --- a/clients/Tests/MAL-signatures.stable.out.int128 +++ b/clients/Tests/MAL-signatures.stable.out.int128 @@ -7543,47 +7543,11 @@ Ready. [ "batcalc", "sign", "pattern batcalc.sign(b:bat[:sht]):bat[:bte] ", "CMDbatSIGN;", "Unary sign (-1,0,1) over the tail of the bat" ] [ "batcalc", "sign", "pattern batcalc.sign(b:bat[:sht],s:bat[:oid]):bat[:bte] ", "CMDbatSIGN;", "Unary sign (-1,0,1) over the tail of the bat with candidates list" ] [ "batcalc", "sqlblob", "command batcalc.sqlblob(v:bat[:str]):bat[:sqlblob] ", "batstr_2_sqlblob;", "cast to sqlblob" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:bit]):bat[:str] ", "CMDconvertsignal_str;", "cast from bit to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:bit],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from bit to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:bte]):bat[:str] ", "CMDconvertsignal_str;", "cast from bte to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:bte],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from bte to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:dbl]):bat[:str] ", "CMDconvertsignal_str;", "cast from dbl to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:dbl],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from dbl to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:flt]):bat[:str] ", "CMDconvertsignal_str;", "cast from flt to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:flt],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from flt to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:hge]):bat[:str] ", "CMDconvertsignal_str;", "cast from hge to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:hge],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from hge to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:int]):bat[:str] ", "CMDconvertsignal_str;", "cast from int to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:int],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from int to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:lng]):bat[:str] ", "CMDconvertsignal_str;", "cast from lng to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:lng],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from lng to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from oid to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:oid],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from oid to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:sht]):bat[:str] ", "CMDconvertsignal_str;", "cast from sht to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:sht],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from sht to str with candidates list, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:str]):bat[:str] ", "CMDconvertsignal_str;", "cast from str to str, signal error on overflow" ] -[ "batcalc", "str", "pattern batcalc.str(b:bat[:str],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from str to str with candidates list, signal error on overflow" ] +[ "batcalc", "str", "pattern batcalc.str(b:bat[:any]):bat[:str] ", "CMDconvertsignal_str;", "cast from any to str, signal error on overflow" ] +[ "batcalc", "str", "pattern batcalc.str(b:bat[:any],s:bat[:oid]):bat[:str] ", "CMDconvertsignal_str;", "cast from any to str with candidates list, signal error on overflow" ] [ "batcalc", "str", "pattern batcalc.str(eclass:int,d1:int,s1:int,has_tz:int,v:bat[:any_1],digits:int):bat[:str] ", "SQLbatstr_cast;", "cast to string and check for overflow" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:bit]):bat[:str] ", "CMDconvert_str;", "cast from bit to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:bit],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from bit to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:bte]):bat[:str] ", "CMDconvert_str;", "cast from bte to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:bte],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from bte to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:dbl]):bat[:str] ", "CMDconvert_str;", "cast from dbl to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:dbl],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from dbl to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:flt]):bat[:str] ", "CMDconvert_str;", "cast from flt to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:flt],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from flt to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:hge]):bat[:str] ", "CMDconvert_str;", "cast from hge to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:hge],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from hge to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:int]):bat[:str] ", "CMDconvert_str;", "cast from int to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:int],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from int to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:lng]):bat[:str] ", "CMDconvert_str;", "cast from lng to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:lng],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from lng to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from oid to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:oid],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from oid to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:sht]):bat[:str] ", "CMDconvert_str;", "cast from sht to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:sht],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from sht to str with candidates list" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:str]):bat[:str] ", "CMDconvert_str;", "cast from str to str" ] -[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:str],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from str to str with candidates list" ] +[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:any]):bat[:str] ", "CMDconvert_str;", "cast from any to str" ] +[ "batcalc", "str_noerror", "pattern batcalc.str_noerror(b:bat[:any],s:bat[:oid]):bat[:str] ", "CMDconvert_str;", "cast from any to str with candidates list" ] [ "batcalc", "strings", "command batcalc.strings(v:bat[:str]):bat[:str] ", "BATSTRstrings;", "Return the strings" ] [ "batcalc", "sub_noerror", "pattern batcalc.sub_noerror(b1:bat[:bte],b2:bat[:bte]):bat[:bte] ", "CMDbatSUB;", "Return B1 - B2, overflow causes NIL value" ] [ "batcalc", "sub_noerror", "pattern batcalc.sub_noerror(b1:bat[:bte],b2:bat[:bte],s:bat[:oid]):bat[:bte] ", "CMDbatSUB;", "Return B1 - B2 with candidates list, overflow causes NIL value" ] @@ -9664,17 +9628,7 @@ Ready. [ "calc", "sqlblob", "command calc.sqlblob(b:sqlblob):sqlblob ", "BLOBblob_blob;", "" ] [ "calc", "sqlblob", "command calc.sqlblob(s:str):sqlblob ", "BLOBsqlblob_fromstr;", "" ] [ "calc", "sqlblob", "command calc.sqlblob(v:str):sqlblob ", "str_2_sqlblob;", "cast to sqlblob" ] -[ "calc", "str", "pattern calc.str(v:bit):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:bte):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:dbl):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:flt):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:hge):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:int):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:lng):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:oid):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:sht):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:str):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] -[ "calc", "str", "pattern calc.str(v:void):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] +[ "calc", "str", "pattern calc.str(v:any):str ", "CMDvarCONVERT;", "Cast VALUE to str" ] [ "calc", "str", "command calc.str(v:date):str ", "SQLdate_2_str;", "cast date to str" ] [ "calc", "str", "command calc.str(v:sqlblob):str ", "SQLsqlblob_2_str;", "cast sqlblob to str" ] [ "calc", "str", "pattern calc.str(eclass:int,d1:int,s1:int,has_tz:int,v:any_1,digits:int):str ", "SQLstr_cast;", "cast to string and check for overflow" ] diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -484,7 +484,6 @@ int strFromStr(const char *src, int *len BUN strHash(const char *s); int strLen(const char *s); int strNil(const char *s); -int strToStr(str *dst, int *len, const char *src); const char str_nil[2]; gdk_return void_inplace(BAT *b, oid id, const void *val, bit force); BUN void_replace_bat(BAT *b, BAT *p, BAT *u, bit force); diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -44,6 +44,7 @@ #include "msqldump.h" #include "mprompt.h" #include "dotmonetdb.h" + #ifdef HAVE_LOCALE_H #include <locale.h> #endif @@ -188,6 +189,9 @@ static char *nullstring = default_nullst #define my_isspace(c) ((c) == '\f' || (c) == '\n' || (c) == ' ') +#include <ctype.h> +#include "mhelp.c" + static timertype gettime(void) { @@ -2721,11 +2725,14 @@ doFile(Mapi mid, stream *fp, int useinse int h; char *nl; - for (h = 0; h < history_length; h++) { - nl = history_get(h) ? history_get(h)->line : 0; - if (nl) - mnstr_printf(toConsole, "%d %s\n", h, nl); - } + if( strcmp(line,"\\history") ==0){ + for (h = 0; h < history_length; h++) { + nl = history_get(h) ? history_get(h)->line : 0; + if (nl) + mnstr_printf(toConsole, "%d %s\n", h, nl); + } + } else + sql_help(line); continue; } /* for later diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c new file mode 100644 --- /dev/null +++ b/clients/mapiclient/mhelp.c @@ -0,0 +1,654 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Copyright 1997 - July 2008 CWI, August 2008 - 2016 MonetDB B.V. + */ + +/** + * 2016 Martin Kersten + * + * The SQL syntax help synopsis. + */ + +/* produce a synposis of the SQL syntax, inspired by a competing product */ + +typedef struct{ + char *command; + char *synopsis; + char *syntax; + char *rules; + char *comments; +} SQLhelp; + +SQLhelp sqlhelp[]={ + // major commands + { "ALTER TABLE", + "", + "ALTER TABLE qname ADD [ COLUMN ] { column_def | table_constraint }\n" + "ALTER TABLE qname ADD TABLE qname\n" + "ALTER TABLE qname ALTER alter_table_element\n" + "ALTER TABLE qname DROP drop_table_element\n" + "ALTER TABLE qname SET { { READ | INSERT } ONLY | READ WRITE }", + "column_def,table_constraint,alter_table_element,drop_table_element", + 0 + }, + { "ALTER SEQUENCE", + "", + "ALTER SEQUENCE ident [ AS datatype] [ RESTART [WITH start]] [INCREMENT BY increment]\n" + "[MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NOMAXVALUE] | [ [ NO] CYCLE]", + 0,0 + }, + { "ALTER USER", + "", + "ALTER USER ident { password_scheme | RENAME TO ident }", + "password_scheme", 0 + }, + { "ANALYZE", + "Collect statistics for optimizations", + "ANALYZE qname [column_list] [sample] [MINMAX]", + "column_list,sample", + 0 + }, + { "CALL", + "", + "CALL qname '(' [ [scalar_expression ] [ ',' ...] ]')' | CALL ident '.' ident", + 0,0 + }, + { "CASE", + "", + "CASE scalar_expression [ when_statement ...] [ELSE procedure_statement ... ] END CASE", + 0,0 + }, + { "COMMIT", + "Commit the current transaction", + "COMMIT [ WORK ] [ AND CHAIN | AND NO CHAIN ]", + 0,0 + }, + { "COPY BINARY", + "", + "COPY [integer OFFSET] [integer RECORDS] BINARY INTO qname column_list FROM string_list [NO CONSTRAINT]", + "", + "see https://www.monetdb.org/Documentation/Cookbooks/SQLrecipes/BinaryBulkLoad" + }, + { "COPY INTO", + "", + "COPY query_expression INTO [STDOUT | string] [seps] [null_string]", + "seps", + "see https://www.monetdb.org/Documentation/Cookbooks/SQLrecipes/LoadingBulkData" + }, + { "COPY LOADER", + "", + "COPY LOADER INTO qname FROM qname '(' [ scalar_expression ... ] ')'", + 0,0 + }, + { "CREATE AGGREGATE FUNCTION", + "", + "CREATE AGGREGATE FUNCTION qname '(' { '*' | [ param [',' ...]] } ')'\n" + " RETURNS { data_type | TABLE '(' function_return [ ',' ... ] ')' }\n" + " EXTERNAL NAME ident ',' ident\n" + "CREATE AGGREGATE FUNCTION qname '(' { '*' | [ param [',' ...]] }')'\n" + " RETURNS { data_type | TABLE '(' function_return [ ',' ... ] ')' }\n" + " LANGUAGE ident external_code", + "param,data_type,function_return", + 0 + }, + { "CREATE FILTER FUNCTION", + "", + "CREATE FILTER FUNCTION qname '(' { '*' | [ param [',' ...]] } ')'\n" + " RETURNS { data_type | TABLE '(' function_return [ ',' ... ] ')' }\n" + " EXTERNAL NAME ident ',' ident", + "param,data_type,function_return", + 0 + }, + { "CREATE FUNCTION", + "", + "CREATE FUNCTION qname '(' { '*' | [ param [',' ...]] } ')'\n" + " RETURNS { data_type | TABLE '(' function_return [ ',' ... ] ')' }\n" + " EXTERNAL NAME ident ',' ident\n" + "CREATE FUNCTION qname '(' { '*' | [ param [',' ...]] } ')'\n" + " RETURNS { data_type | TABLE '(' function_return [ ',' ... ] ')' }\n" + " BEGIN [ ATOMIC ] statement [ ';' ...] END\n" + "CREATE FUNCTION qname '(' { '*' | [ param [',' ...]] }')'\n" + " RETURNS { data_type | TABLE '(' function_return [ ',' ... ] ')' }\n" + " LANGUAGE ident external_code", + "param,data_type,function_return,external_code", + 0 + }, + { "CREATE INDEX", + "", + "CREATE [ UNIQUE | ORDERED | IMPRINTS ] INDEX ident ON qname '(' ident_list ')'", + 0,0 + }, + { "CREATE PROCEDURE", + "", + "CREATE PROCEDURE qname '(' { '*' | [ param [',' ...]] }')'\n" + " EXTERNAL NAME ident ',' ident\n" + "CREATE PROCEDURE qname '(' { '*' | [ param [',' ...]] } ')'\n" + " BEGIN [ ATOMIC ] procedure_statement [ ';' ...] END\n" + "CREATE PROCEDURE qname '(' { '*' | [ param [',' ...]] } ')'\n" + " LANGUAGE ident external_code", + "param,data_type,external_code", + 0 + }, + { "CREATE LOADER", + "", + "CREATE LOADER qname '(' [ param [',' ...]] ')'\n" + " LANGUAGE ident external_code", + "param,data_type,function_return,external_code", + 0 + }, + { "CREATE REMOTE TABLE", + "", + "CREATE REMOTE TABLE qname ON string", + 0,"remote name should match mapi:monetdb://host:port/database[/schema[/table]]" + }, + { "CREATE SCHEMA", + "", + "CREATE SCHEMA schema_name [default_char_set] [path_spec] [schema_element]", + "schema_name,default_char_set,path_spec,schema_element", + 0 + }, + { "CREATE SEQUENCE", + "Define a new sequence generator", + "CREATE SEQUENCE ident [ AS datatype] [ START [WITH start]] [INCREMENT BY increment]\n" + "[MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NOMAXVALUE] | [ [ NO] CYCLE]", + 0, 0 + }, + { "CREATE STREAM TABLE", _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list