Changeset: 8c7cde6a05b6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8c7cde6a05b6
Modified Files:
clients/mapiclient/dump.c
sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
sql/server/rel_select.c
sql/server/sql_parser.y
sql/storage/store.c
sql/test/BugTracker-2009/Tests/drop-sequence-crash.SF-2854195.stable.err
sql/test/BugTracker-2009/Tests/drop-sequence-crash.SF-2854195.stable.out
Branch: default
Log Message:
Merge with Aug2018 branch.
diffs (truncated from 379 to 300 lines):
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1150,26 +1150,30 @@ describe_table(Mapi mid, const char *sch
comment_on(toConsole, "TABLE", schema, tname, NULL, remark);
snprintf(query, maxquerylen,
- "SELECT i.name, " /* 0 */
- "k.name, " /* 1 */
- "kc.nr, " /* 2 */
- "c.name, " /* 3 */
- "i.type " /* 4 */
- "FROM sys.idxs AS i "
- "LEFT JOIN sys.keys AS k ON i.name = k.name, "
- "sys.objects AS kc, "
- "sys._columns AS c, "
- "sys.schemas s, "
- "sys._tables AS t "
- "WHERE i.table_id = t.id "
- "AND i.id = kc.id "
- "AND t.id = c.table_id "
- "AND kc.name = c.name "
- "AND (k.type IS NULL OR k.type = 1) "
- "AND t.schema_id = s.id "
- "AND s.name = '%s' "
- "AND t.name = '%s' "
- "AND i.type in (0, 4, 5) "
+ "SELECT i.name, " /* 0 */
+ "k.name, " /* 1 */
+ "kc.nr, " /* 2 */
+ "c.name, " /* 3 */
+ "it.idx " /* 4 */
+ "FROM sys.idxs AS i "
+ "LEFT JOIN sys.keys AS k ON i.name = k.name, "
+ "sys.objects AS kc, "
+ "sys._columns AS c, "
+ "sys.schemas s, "
+ "sys._tables AS t, "
+ "(VALUES (0, 'INDEX'), "
+ "(4, 'IMPRINTS INDEX'), "
+ "(5, 'ORDERED INDEX')) AS it (id, idx) "
+ "WHERE i.table_id = t.id "
+ "AND i.id = kc.id "
+ "AND t.id = c.table_id "
+ "AND kc.name = c.name "
+ "AND (k.type IS NULL OR k.type = 1) "
+ "AND t.schema_id = s.id "
+ "AND s.name = '%s' "
+ "AND t.name = '%s' "
+ "AND i.type in (0, 4, 5) "
+ "AND i.type = it.id "
"ORDER BY i.name, kc.nr", schema, tname);
if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid))
goto bailout;
@@ -1191,26 +1195,9 @@ describe_table(Mapi mid, const char *sch
if (strcmp(kc_nr, "0") == 0) {
if (cnt)
mnstr_printf(toConsole, ");\n");
- switch (atoi(i_type)) {
- case 0: /* hash_idx */
- mnstr_printf(toConsole,
- "CREATE INDEX \"%s\" ON
\"%s\".\"%s\" (",
- i_name, schema, tname);
- break;
- case 5: /* ordered_idx */
- mnstr_printf(toConsole,
- "CREATE ORDERED INDEX
\"%s\" ON \"%s\".\"%s\" (",
- i_name, schema, tname);
- break;
- case 4: /* imprints_idx */
- mnstr_printf(toConsole,
- "CREATE IMPRINTS INDEX
\"%s\" ON \"%s\".\"%s\" (",
- i_name, schema, tname);
- break;
- default:
- /* cannot happen due to WHERE clause */
- goto bailout;
- }
+ mnstr_printf(toConsole,
+ "CREATE %s \"%s\" ON \"%s\".\"%s\"
(",
+ i_type, i_name, schema, tname);
cnt = 1;
} else
mnstr_printf(toConsole, ", ");
diff --git a/sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
b/sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
--- a/sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
+++ b/sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
@@ -36,7 +36,7 @@ Ready.
# FROM alig
# WHERE qname IN (
# SELECT qname
-% bam.L43, bam.L45, bam.L47, bam.L51, bam.L53 #
table_name
+% bam.L44, bam.L46, bam.L50, bam.L52, bam.L54 #
table_name
% qname, l_seq, qual1, r_seq, qual2 # name
% clob, clob, clob, clob, clob # type
% 0, 0, 0, 0, 0 # length
diff --git a/sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
b/sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
--- a/sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
+++ b/sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
@@ -37,7 +37,7 @@ Ready.
# GROUP BY qname
# HAVING COUNT(*) = 2
# AND SUM(bam.bam_flag(flag, 'firs_segm')) = 1
-% bam.L23, bam.L25, bam.L27, bam.L31, bam.L33,
bam.L35, bam.L37, bam.L41, bam.L43, bam.L45,
bam.L47, bam.L51, bam.L53, bam.L55, bam.L57,
bam.L61, bam.L63, bam.L65, bam.L67, bam.L71,
bam.L73 # table_name
+% bam.L24, bam.L26, bam.L30, bam.L32, bam.L34,
bam.L36, bam.L40, bam.L42, bam.L44, bam.L46,
bam.L50, bam.L52, bam.L54, bam.L56, bam.L60,
bam.L62, bam.L64, bam.L66, bam.L70, bam.L72,
bam.L74 # table_name
% qname, l_flag, l_rname, l_pos, l_mapq, l_cigar,
l_rnext, l_pnext, l_tlen, l_seq, qual1, r_flag, r_rname,
r_pos, r_mapq, r_cigar, r_rnext, r_pnext, r_tlen, r_seq,
qual2 # name
% clob, smallint, clob, int, smallint, clob, clob,
int, int, clob, clob, smallint, clob, int, smallint,
clob, clob, int, int, clob, clob # type
% 0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
0, 1, 0, 1, 1, 0, 0, 1, 1, 0,
0 # length
diff --git a/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
b/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
--- a/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
+++ b/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
@@ -36,7 +36,7 @@ Ready.
# GROUP BY qname
# HAVING COUNT(*) = 2
# AND SUM(bam.bam_flag(flag, 'firs_segm')) = 1
-% bam.L32, bam.L35 # table_name
+% bam.L33, bam.L36 # table_name
% distance, nr_alignments # name
% bigint, bigint # type
% 3, 1 # length
diff --git a/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
b/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
--- a/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
+++ b/sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
@@ -36,7 +36,7 @@ Ready.
# GROUP BY qname
# HAVING COUNT(*) = 2
# AND SUM(bam.bam_flag(flag, 'firs_segm')) = 1
-% bam.L32, bam.L35 # table_name
+% bam.L33, bam.L36 # table_name
% distance, nr_alignments # name
% hugeint, bigint # type
% 3, 1 # length
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2556,7 +2556,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
/* first remove the NULLs */
if (!l_is_value && sc->token == SQL_NOT_IN &&
l->card != CARD_ATOM && has_nil(l)) {
- sql_exp *ol;
+ sql_exp *ol = NULL;
if (l->type != e_column) {
pexps = rel_projections(sql, rel, NULL,
1, 1);
@@ -2570,7 +2570,7 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
e = rel_unop_(sql, l, NULL, "isnull",
card_value);
e = exp_compare(sql->sa, e,
exp_atom_bool(sql->sa, 0), cmp_equal);
rel_select_add_exp(sql->sa, select, e);
- if (pexps)
+ if (pexps && ol)
l = exp_column(sql->sa,
exp_relname(ol), exp_name(ol), exp_subtype(ol), ol->card, has_nil(ol),
is_intern(ol));
}
rel = left = select;
@@ -2622,8 +2622,11 @@ rel_logical_exp(mvc *sql, sql_rel *rel,
int r_is_rel = 0;
r = rel_value_exp(sql, &z, sval, f, ek);
- if (z)
+ if (z) {
+ for(node *nn = z->exps->h ; nn
; nn = nn->next)
+ exp_label(sql->sa,
(sql_exp*)nn->data, ++sql->label);
r_is_rel = 1;
+ }
if (!r && sql->session->status !=
-ERR_AMBIGUOUS) {
/* reset error */
sql->session->status = 0;
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
@@ -1776,7 +1776,7 @@ generated_column:
/* finally all the options */
append_list(l, $5);
- append_int(l, 0); /* to be dropped */
+ append_int(l, 1); /* to be dropped */
$$ = _symbol_create_symbol(SQL_DEFAULT,
_symbol_create_list(SQL_NEXT, append_string(L(), sn)));
if (m->sym) {
@@ -1808,7 +1808,7 @@ generated_column:
sql_find_subtype(&it, "int", 32, 0);
append_symbol(o, _symbol_create_list(SQL_TYPE,
append_type(L(),&it)));
append_list(l, o);
- append_int(l, 0); /* to be dropped */
+ append_int(l, 1); /* to be dropped */
if (m->scanner.schema)
append_string(seqn2, m->scanner.schema);
append_string(seqn2, sn);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -4124,10 +4124,11 @@ sql_trans_drop_all_dependencies(sql_tran
(void)
sql_trans_drop_table(tr, s, dep_id, DROP_CASCADE);
break;
case COLUMN_DEPENDENCY :
- t_id =
sql_trans_get_dependency_type(tr, dep_id, TABLE_DEPENDENCY);
- t =
find_sql_table_id(s, t_id);
- (void)
sql_trans_drop_column(tr, t, dep_id, DROP_CASCADE);
- t = NULL;
+ if ((t_id =
sql_trans_get_dependency_type(tr, dep_id, TABLE_DEPENDENCY)) > 0) {
+ t =
find_sql_table_id(s, t_id);
+ if (t)
+ (void)
sql_trans_drop_column(tr, t, dep_id, DROP_CASCADE);
+ }
break;
case VIEW_DEPENDENCY :
(void)
sql_trans_drop_table(tr, s, dep_id, DROP_CASCADE);
@@ -4332,7 +4333,7 @@ sys_drop_statistics(sql_trans *tr, sql_c
}
}
-static void
+static int
sys_drop_column(sql_trans *tr, sql_column *col, int drop_action)
{
str seq_pos = NULL;
@@ -4343,7 +4344,7 @@ sys_drop_column(sql_trans *tr, sql_colum
&col->base.id, NULL);
if (is_oid_nil(rid))
- return ;
+ return 0;
table_funcs.table_delete(tr, syscolumn, rid);
sql_trans_drop_dependencies(tr, col->base.id);
sql_trans_drop_any_comment(tr, col->base.id);
@@ -4352,10 +4353,13 @@ sys_drop_column(sql_trans *tr, sql_colum
sql_sequence * seq = NULL;
char *seq_name = _STRDUP(seq_pos + (strlen(next_value_for) -
strlen("seq_")));
node *n = NULL;
+
+ if(!seq_name)
+ return -1;
seq_name[strlen(seq_name)-1] = '\0';
n = cs_find_name(&syss->seqs, seq_name);
seq = find_sql_sequence(syss, seq_name);
- if (seq && sql_trans_get_dependency_type(tr, seq->base.id,
BEDROPPED_DEPENDENCY)) {
+ if (seq && sql_trans_get_dependency_type(tr, seq->base.id,
BEDROPPED_DEPENDENCY) > 0) {
sys_drop_sequence(tr, seq, drop_action);
seq->base.wtime = syss->base.wtime = tr->wtime =
tr->wstime;
cs_del(&syss->seqs, n, seq->base.flags);
@@ -4371,6 +4375,7 @@ sys_drop_column(sql_trans *tr, sql_colum
sql_trans_drop_all_dependencies(tr, col->t->s, col->base.id,
COLUMN_DEPENDENCY);
if (col->type.type->s)
sql_trans_drop_dependency(tr, col->base.id,
col->type.type->base.id, TYPE_DEPENDENCY);
+ return 0;
}
static void
@@ -4399,7 +4404,7 @@ sys_drop_idxs(sql_trans *tr, sql_table *
}
}
-static void
+static int
sys_drop_columns(sql_trans *tr, sql_table *t, int drop_action)
{
node *n;
@@ -4408,8 +4413,10 @@ sys_drop_columns(sql_trans *tr, sql_tabl
for (n = t->columns.set->h; n; n = n->next) {
sql_column *c = n->data;
- sys_drop_column(tr, c, drop_action);
+ if(sys_drop_column(tr, c, drop_action))
+ return -1;
}
+ return 0;
}
static void
@@ -4429,7 +4436,7 @@ sys_drop_parts(sql_trans *tr, sql_table
}
-static void
+static int
sys_drop_table(sql_trans *tr, sql_table *t, int drop_action)
{
sql_schema *syss = find_sql_schema(tr, isGlobal(t)?"sys":"tmp");
@@ -4438,7 +4445,7 @@ sys_drop_table(sql_trans *tr, sql_table
oid rid = table_funcs.column_find_row(tr, syscol, &t->base.id, NULL);
if (is_oid_nil(rid))
- return ;
+ return 0;
table_funcs.table_delete(tr, systable, rid);
sys_drop_keys(tr, t, drop_action);
sys_drop_idxs(tr, t, drop_action);
@@ -4460,13 +4467,15 @@ sys_drop_table(sql_trans *tr, sql_table
sql_trans_drop_dependencies(tr, t->base.id);
if (isKindOfTable(t) || isView(t))
- sys_drop_columns(tr, t, drop_action);
+ if(sys_drop_columns(tr, t, drop_action))
+ return -1;
if (isGlobal(t))
tr->schema_updates ++;
if (drop_action)
sql_trans_drop_all_dependencies(tr, t->s, t->base.id,
!isView(t) ? TABLE_DEPENDENCY : VIEW_DEPENDENCY);
+ return 0;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list