Changeset: 367d1a5953d6 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=367d1a5953d6 Modified Files: clients/mapiclient/dump.c clients/mapiclient/mclient.c clients/mapiclient/mhelp.c clients/mapiclient/msqldump.h common/stream/stream.c sql/server/sql_parser.y sql/server/sql_scan.c Branch: default Log Message:
Merge with Aug2018 branch. diffs (283 lines): diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -1069,7 +1069,7 @@ dump_column_definition(Mapi mid, stream int describe_table(Mapi mid, const char *schema, const char *tname, - stream *toConsole, int foreign, bool databaseDump) + stream *toConsole, bool foreign, bool databaseDump) { int cnt, table_id = 0; MapiHdl hdl = NULL; @@ -1434,14 +1434,15 @@ describe_sequence(Mapi mid, const char * snprintf(query, maxquerylen, "%s " - "SELECT s.name, " - "seq.name, " - "get_value_for(s.name, seq.name), " - "seq.\"minvalue\", " - "seq.\"maxvalue\", " - "seq.\"increment\", " - "seq.\"cycle\", " - "rem.\"remark\" " + "SELECT s.name, " /* 0 */ + "seq.name, " /* 1 */ + "get_value_for(s.name, seq.name), " /* 2 */ + "seq.\"minvalue\", " /* 3 */ + "seq.\"maxvalue\", " /* 4 */ + "seq.\"increment\", " /* 5 */ + "seq.\"cycle\", " /* 6 */ + "seq.\"cacheinc\", " /* 7 */ + "rem.\"remark\" " /* 8 */ "FROM sys.sequences seq LEFT OUTER JOIN sys.comments rem ON seq.id = rem.id, " "sys.schemas s " "WHERE s.id = seq.schema_id " @@ -1462,7 +1463,8 @@ describe_sequence(Mapi mid, const char * const char *maxvalue = mapi_fetch_field(hdl, 4); const char *increment = mapi_fetch_field(hdl, 5); const char *cycle = mapi_fetch_field(hdl, 6); - const char *remark = mapi_fetch_field(hdl, 7); + const char *cacheinc = mapi_fetch_field(hdl, 7); + const char *remark = mapi_fetch_field(hdl, 8); mnstr_printf(toConsole, "CREATE SEQUENCE "); dquoted_print(toConsole, schema, "."); @@ -1474,6 +1476,8 @@ describe_sequence(Mapi mid, const char * mnstr_printf(toConsole, " MINVALUE %s", minvalue); if (strcmp(maxvalue, "0") != 0) mnstr_printf(toConsole, " MAXVALUE %s", maxvalue); + if (strcmp(cacheinc, "1") != 0) + mnstr_printf(toConsole, " CACHE %s", cacheinc); mnstr_printf(toConsole, " %sCYCLE;\n", strcmp(cycle, "true") == 0 ? "" : "NO "); comment_on(toConsole, "SEQUENCE", schema, name, NULL, remark); if (mnstr_errnr(toConsole)) { @@ -1763,7 +1767,7 @@ dump_table_data(Mapi mid, const char *sc int dump_table(Mapi mid, const char *schema, const char *tname, stream *toConsole, - int describe, int foreign, bool useInserts, bool databaseDump) + bool describe, bool foreign, bool useInserts, bool databaseDump) { int rc; @@ -2081,7 +2085,7 @@ dump_functions(Mapi mid, stream *toConso } int -dump_database(Mapi mid, stream *toConsole, int describe, bool useInserts) +dump_database(Mapi mid, stream *toConsole, bool describe, bool useInserts) { const char *start_trx = "START TRANSACTION"; const char *end = "ROLLBACK"; @@ -2582,7 +2586,7 @@ dump_database(Mapi mid, stream *toConsol int ptype = atoi(type), dont_describe = (ptype == 3 || ptype == 5); schema = strdup(schema); name = strdup(name); - rc = dump_table(mid, schema, name, toConsole, dont_describe ? 1 : describe, describe, useInserts, true); + rc = dump_table(mid, schema, name, toConsole, dont_describe || describe, describe, useInserts, true); free(schema); free(name); } else if (query) { diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -2704,7 +2704,7 @@ doFile(Mapi mid, stream *fp, bool useins #endif if (*line) { mnstr_printf(toConsole, "START TRANSACTION;\n"); - dump_table(mid, NULL, line, toConsole, 0, 1, useinserts, false); + dump_table(mid, NULL, line, toConsole, false, true, useinserts, false); mnstr_printf(toConsole, "COMMIT;\n"); } else dump_database(mid, toConsole, 0, useinserts); diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c --- a/clients/mapiclient/mhelp.c +++ b/clients/mapiclient/mhelp.c @@ -74,7 +74,7 @@ SQLhelp sqlhelp[] = { {"ALTER SEQUENCE", "", "ALTER SEQUENCE ident [ AS datatype] [ RESTART [WITH start]] [INCREMENT BY increment]\n" - "[MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NOMAXVALUE] | [ [NO] CYCLE]", + "[MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NO MAXVALUE] [CACHE cachevalue] [[NO] CYCLE]", NULL, "See also https://www.monetdb.org/Documentation/Manuals/SQLreference/SerialTypes"}, {"ALTER USER", @@ -206,7 +206,7 @@ SQLhelp sqlhelp[] = { {"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]", + "[MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NO MAXVALUE] [CACHE cachevalue] [[NO] CYCLE]", NULL, "See also https://www.monetdb.org/Documentation/Manuals/SQLreference/SerialTypes"}, {"CREATE STREAM TABLE", @@ -575,7 +575,7 @@ SQLhelp sqlhelp[] = { {"generated_column", NULL, "AUTO_INCREMENT | GENERATED ALWAYS AS IDENTITY [ '(' [ AS datatype] [ START [WITH start]] [INCREMENT BY increment]\n" - "[MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NOMAXVALUE] | [ [NO] CYCLE] ')' ] ", + "[MINVALUE minvalue | NO MINVALUE] [MAXVALUE maxvalue | NO MAXVALUE] [CACHE cachevalue] [[NO] CYCLE] ')' ] ", NULL, "See also https://www.monetdb.org/Documentation/Manuals/SQLreference/SerialTypes"}, {"global_privileges", diff --git a/clients/mapiclient/msqldump.h b/clients/mapiclient/msqldump.h --- a/clients/mapiclient/msqldump.h +++ b/clients/mapiclient/msqldump.h @@ -6,12 +6,12 @@ * Copyright 1997 - July 2008 CWI, August 2008 - 2018 MonetDB B.V. */ -extern int describe_table(Mapi mid, const char *schema, const char *tname, stream *toConsole, int foreign, bool databaseDump); +extern int describe_table(Mapi mid, const char *schema, const char *tname, stream *toConsole, bool foreign, bool databaseDump); extern int describe_sequence(Mapi mid, const char *schema, const char *sname, stream *toConsole); extern int describe_schema(Mapi mid, const char *sname, stream *toConsole); -extern int dump_table(Mapi mid, const char *schema, const char *tname, stream *toConsole, int describe, int foreign, bool useInserts, bool databaseDump); +extern int dump_table(Mapi mid, const char *schema, const char *tname, stream *toConsole, bool describe, bool foreign, bool useInserts, bool databaseDump); extern int dump_functions(Mapi mid, stream *toConsole, char set_schema, const char *sname, const char *fname, const char *id); -extern int dump_database(Mapi mid, stream *toConsole, int describe, bool useInserts); +extern int dump_database(Mapi mid, stream *toConsole, bool describe, bool useInserts); extern void dump_version(Mapi mid, stream *toConsole, const char *prefix); /* used for backward compatibility with older server versions */ diff --git a/common/stream/stream.c b/common/stream/stream.c --- a/common/stream/stream.c +++ b/common/stream/stream.c @@ -1011,14 +1011,6 @@ stream_gzwrite(stream *restrict s, const return size == 0 ? -1 : (ssize_t) size; } -static void -stream_gzclose(stream *s) -{ - if (s->stream_data.p) - gzclose((gzFile) s->stream_data.p); - s->stream_data.p = NULL; -} - static int stream_gzflush(stream *s) { @@ -1030,6 +1022,15 @@ stream_gzflush(stream *s) return 0; } +static void +stream_gzclose(stream *s) +{ + stream_gzflush(s); + if (s->stream_data.p) + gzclose((gzFile) s->stream_data.p); + s->stream_data.p = NULL; +} + static stream * open_gzstream(const char *restrict filename, const char *restrict flags) { @@ -3996,6 +3997,8 @@ bs_close(stream *ss) assert(s); if (s == NULL) return; + if (!ss->readonly && s->nr > 0) + bs_flush(ss); if (s->s) s->s->close(s->s); } @@ -4613,6 +4616,8 @@ bs2_close(stream *ss) assert(s); if (s == NULL) return; + if (!ss->readonly && s->nr > 0) + bs2_flush(ss); assert(s->s); if (s->s) s->s->close(s->s); diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -632,7 +632,6 @@ int yydebug=1; /* sequence operations */ %token SEQUENCE INCREMENT RESTART CONTINUE %token MAXVALUE MINVALUE CYCLE -%token NOMAXVALUE NOMINVALUE NOCYCLE %token NEXT VALUE CACHE %token GENERATED ALWAYS IDENTITY %token SERIAL BIGSERIAL AUTO_INCREMENT /* PostgreSQL and MySQL immitators */ @@ -1378,27 +1377,27 @@ opt_alt_seq_params: opt_seq_param: AS data_type { $$ = _symbol_create_list(SQL_TYPE, append_type(L(),&$2)); } - | START WITH opt_sign lngval { $$ = _symbol_create_lng(SQL_START, is_lng_nil($3) ? $3 : $3 * $4); } + | START WITH opt_sign lngval { $$ = _symbol_create_lng(SQL_START, is_lng_nil($4) ? $4 : $3 * $4); } | opt_seq_common_param { $$ = $1; } ; opt_alt_seq_param: - AS data_type { $$ = _symbol_create_list(SQL_TYPE, append_type(L(),&$2)); } - | RESTART { $$ = _symbol_create_list(SQL_START, append_int(L(),0)); /* plain restart now */ } + AS data_type { $$ = _symbol_create_list(SQL_TYPE, append_type(L(),&$2)); } + | RESTART { $$ = _symbol_create_list(SQL_START, append_int(L(),0)); /* plain restart now */ } | RESTART WITH opt_sign lngval { $$ = _symbol_create_list(SQL_START, append_lng(append_int(L(),2), is_lng_nil($4) ? $4 : $3 * $4)); } - | RESTART WITH subquery { $$ = _symbol_create_list(SQL_START, append_symbol(append_int(L(),1), $3)); } - | opt_seq_common_param { $$ = $1; } + | RESTART WITH subquery { $$ = _symbol_create_list(SQL_START, append_symbol(append_int(L(),1), $3)); } + | opt_seq_common_param { $$ = $1; } ; opt_seq_common_param: INCREMENT BY opt_sign lngval { $$ = _symbol_create_lng(SQL_INC, is_lng_nil($4) ? $4 : $3 * $4); } - | MINVALUE opt_sign lngval { $$ = _symbol_create_lng(SQL_MINVALUE, is_lng_nil($3) ? $3 : $2 * $3); } - | NOMINVALUE { $$ = _symbol_create_lng(SQL_MINVALUE, 0); } - | MAXVALUE opt_sign lngval { $$ = _symbol_create_lng(SQL_MAXVALUE, is_lng_nil($3) ? $3 : $2 * $3); } - | NOMAXVALUE { $$ = _symbol_create_lng(SQL_MAXVALUE, 0); } - | CACHE nonzerolng { $$ = _symbol_create_lng(SQL_CACHE, $2); } - | CYCLE { $$ = _symbol_create_int(SQL_CYCLE, 1); } - | NOCYCLE { $$ = _symbol_create_int(SQL_CYCLE, 0); } + | MINVALUE opt_sign lngval { $$ = _symbol_create_lng(SQL_MINVALUE, is_lng_nil($3) ? $3 : $2 * $3); } + | NO MINVALUE { $$ = _symbol_create_lng(SQL_MINVALUE, 0); } + | MAXVALUE opt_sign lngval { $$ = _symbol_create_lng(SQL_MAXVALUE, is_lng_nil($3) ? $3 : $2 * $3); } + | NO MAXVALUE { $$ = _symbol_create_lng(SQL_MAXVALUE, 0); } + | CACHE nonzerolng { $$ = _symbol_create_lng(SQL_CACHE, $2); } + | CYCLE { $$ = _symbol_create_int(SQL_CYCLE, 1); } + | NO CYCLE { $$ = _symbol_create_int(SQL_CYCLE, 0); } ; /*=== END SEQUENCES ===*/ diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c --- a/sql/server/sql_scan.c +++ b/sql/server/sql_scan.c @@ -385,9 +385,6 @@ scanner_init_keywords(void) failed += keywords_insert("MAXVALUE", MAXVALUE); failed += keywords_insert("MINVALUE", MINVALUE); failed += keywords_insert("CYCLE", CYCLE); - failed += keywords_insert("NOMAXVALUE", NOMAXVALUE); - failed += keywords_insert("NOMINVALUE", NOMINVALUE); - failed += keywords_insert("NOCYCLE", NOCYCLE); failed += keywords_insert("CACHE", CACHE); failed += keywords_insert("NEXT", NEXT); failed += keywords_insert("VALUE", VALUE); @@ -1341,23 +1338,6 @@ sqllex(YYSTYPE * yylval, void *parm) } else { lc->yynext = next; } - } else if (token == NO) { - int next = sqllex(yylval, parm); - - switch (next) { - case MAXVALUE: - token = NOMAXVALUE; - break; - case MINVALUE: - token = NOMINVALUE; - break; - case CYCLE: - token = NOCYCLE; - break; - default: - lc->yynext = next; - break; - } } else if (token == SCOLON) { /* ignore semi-colon(s) following a semi-colon */ if (lc->yylast == SCOLON) { _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list