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

Reply via email to