Changeset: c75a65435b81 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c75a65435b81 Modified Files: gdk/gdk_join.c sql/server/rel_select.c sql/server/rel_unnest.c sql/storage/store.c sql/test/BugTracker-2009/Tests/assert_in_update.SF-2807336.stable.err sql/test/BugTracker-2009/Tests/assert_in_update.SF-2807336.stable.out sql/test/BugTracker-2015/Tests/All sql/test/miscellaneous/Tests/simple_selects.sql sql/test/miscellaneous/Tests/simple_selects.stable.out sql/test/subquery/Tests/subquery4.stable.out Branch: default Log Message:
Merge with Jun2020 branch. diffs (242 lines): diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c --- a/gdk/gdk_join.c +++ b/gdk/gdk_join.c @@ -3940,7 +3940,7 @@ BATjoin(BAT **r1p, BAT **r2p, BAT *l, BA swap = (lcost < rcost); if ((BATordered(r) || BATordered_rev(r)) && - (lci.ncand * (log2(rci.ncand) + 1) < (swap ? lcost : rcost))) { + (lci.ncand * (log2((double) rci.ncand) + 1) < (swap ? lcost : rcost))) { /* r is sorted and it is cheaper to do multiple binary * searches than it is to use a hash */ return mergejoin(r1p, r2p, l, r, &lci, &rci, @@ -3948,7 +3948,7 @@ BATjoin(BAT **r1p, BAT **r2p, BAT *l, BA estimate, t0, false, __func__); } if ((BATordered(l) || BATordered_rev(l)) && - (rci.ncand * (log2(lci.ncand) + 1) < (swap ? lcost : rcost))) { + (rci.ncand * (log2((double) lci.ncand) + 1) < (swap ? lcost : rcost))) { /* l is sorted and it is cheaper to do multiple binary * searches than it is to use a hash */ rc = mergejoin(r2p ? r2p : &r2, r1p, r, l, &rci, &lci, 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 @@ -5585,6 +5585,7 @@ rel_query(sql_query *query, sql_rel *rel res = rel_crossproduct(sql->sa, res, fnd, op_join); if (lateral) set_dependent(res); + res = rel_select(sql->sa, res, NULL); } else { res = fnd; } diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -2012,6 +2012,8 @@ rewrite_anyequal(mvc *sql, sql_rel *rel, sql_rel *sq = lsq; sql_subfunc *ea = sql_bind_func(sql->sa, sql->session->schema, is_anyequal(sf)?"anyequal":"allnotequal", exp_subtype(re), NULL, F_AGGR); + /* we introduced extra selects */ + assert(is_project(rel->op) || is_select(rel->op)); rsq = rel_add_identity2(sql, rsq, &rid); rid = exp_ref(sql->sa, rid); diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -5131,24 +5131,15 @@ sys_drop_statistics(sql_trans *tr, sql_c } static int -sys_drop_column(sql_trans *tr, sql_column *col, int drop_action) -{ - str seq_pos = NULL; +sys_drop_default_object(sql_trans *tr, sql_column *col, int drop_action) +{ + char *seq_pos = NULL; const char *next_value_for = "next value for \"sys\".\"seq_"; sql_schema *syss = find_sql_schema(tr, isGlobal(col->t)?"sys":"tmp"); - sql_table *syscolumn = find_sql_table(syss, "_columns"); - oid rid = table_funcs.column_find_row(tr, find_sql_column(syscolumn, "id"), - &col->base.id, NULL); - - if (is_oid_nil(rid)) - 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); - sql_trans_drop_obj_priv(tr, col->base.id); - + + /* Drop sequence for generated column if it's the case */ if (col->def && (seq_pos = strstr(col->def, next_value_for))) { - sql_sequence * seq = NULL; + sql_sequence *seq = NULL; char *seq_name = _STRDUP(seq_pos + (strlen(next_value_for) - strlen("seq_"))); node *n = NULL; @@ -5164,6 +5155,25 @@ sys_drop_column(sql_trans *tr, sql_colum } _DELETE(seq_name); } + return 0; +} + +static int +sys_drop_column(sql_trans *tr, sql_column *col, int drop_action) +{ + sql_schema *syss = find_sql_schema(tr, isGlobal(col->t)?"sys":"tmp"); + sql_table *syscolumn = find_sql_table(syss, "_columns"); + oid rid = table_funcs.column_find_row(tr, find_sql_column(syscolumn, "id"), + &col->base.id, NULL); + + if (is_oid_nil(rid)) + 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); + sql_trans_drop_obj_priv(tr, col->base.id); + if (sys_drop_default_object(tr, col, drop_action) == -1) + return -1; if (isGlobal(col->t)) tr->schema_updates ++; @@ -6495,6 +6505,8 @@ sql_trans_alter_default(sql_trans *tr, s if (is_oid_nil(rid)) return NULL; + if (sys_drop_default_object(tr, col, 0) == -1) + return NULL; table_funcs.column_update_value(tr, col_dfs, rid, p); col->def = NULL; if (val) diff --git a/sql/test/BugTracker-2009/Tests/assert_in_update.SF-2807336.stable.err b/sql/test/BugTracker-2009/Tests/assert_in_update.SF-2807336.stable.err --- a/sql/test/BugTracker-2009/Tests/assert_in_update.SF-2807336.stable.err +++ b/sql/test/BugTracker-2009/Tests/assert_in_update.SF-2807336.stable.err @@ -65,17 +65,7 @@ stderr of test 'assert_in_update.SF-2807 #warning: please don't forget to set your vault key! #(see /ufs/niels/scratch/rc/Linux-x86_64/etc/monetdb5.conf) -# 10:38:04 > -# 10:38:04 > mclient -lsql -umonetdb -Pmonetdb --host=alf --port=36216 -# 10:38:04 > +# 15:04:33 > +# 15:04:33 > "Done." +# 15:04:33 > -MAPI = (monetdb) /var/tmp/mtest-27483/.s.monetdb.35395 -QUERY = update anbi set kvk = (select kvk from kvk,anbi where lower(naam) - = lower(bedrijfsnaam) and lower(plaats) = lower(vestigingsplaats)); -ERROR = !SELECT: identifier 'kvk' ambiguous -CODE = 42000 - -# 10:38:04 > -# 10:38:04 > Done. -# 10:38:04 > - diff --git a/sql/test/BugTracker-2009/Tests/assert_in_update.SF-2807336.stable.out b/sql/test/BugTracker-2009/Tests/assert_in_update.SF-2807336.stable.out --- a/sql/test/BugTracker-2009/Tests/assert_in_update.SF-2807336.stable.out +++ b/sql/test/BugTracker-2009/Tests/assert_in_update.SF-2807336.stable.out @@ -27,6 +27,11 @@ stdout of test 'assert_in_update.SF-2807 % kvk # name % bigint # type % 1 # length +#update anbi set kvk = (select kvk.kvk from kvk,anbi where lower(naam) +#= lower(bedrijfsnaam) and lower(plaats) = lower(vestigingsplaats)); +[ 0 ] +#update anbi set kvk = (select kvk from kvk,anbi where lower(naam) +#= lower(bedrijfsnaam) and lower(plaats) = lower(vestigingsplaats)); [ 0 ] # 10:38:04 > diff --git a/sql/test/BugTracker-2015/Tests/All b/sql/test/BugTracker-2015/Tests/All --- a/sql/test/BugTracker-2015/Tests/All +++ b/sql/test/BugTracker-2015/Tests/All @@ -74,7 +74,7 @@ fractional_precision_limitation.Bug-3808 not-like-without-wildcard.Bug-3811 HAVE_LIBZ?copy_into.Bug-3813 select-tilde-arg.Bug-3814 -timestamp_convert.Bug-3815 +KNOWNFAIL?timestamp_convert.Bug-3815 crash_timestamp_convert.Bug-3816 crash_in_reduce_groupby.Bug-3818 duplicate-constraint.Bug-3820 diff --git a/sql/test/miscellaneous/Tests/simple_selects.sql b/sql/test/miscellaneous/Tests/simple_selects.sql --- a/sql/test/miscellaneous/Tests/simple_selects.sql +++ b/sql/test/miscellaneous/Tests/simple_selects.sql @@ -120,3 +120,16 @@ drop table x; create table x (x int null not null); --error, multiple null constraints create table x (a int default '1' GENERATED ALWAYS AS IDENTITY); --error, multiple default values + +DECLARE myvar bigint; +SET myvar = (SELECT COUNT(*) FROM sequences); +create table x (a int GENERATED ALWAYS AS IDENTITY); +alter table x alter a set default 1; --ok, remove sequence +SELECT CAST(COUNT(*) - myvar AS BIGINT) FROM sequences; --the total count, cannot change +drop table x; + +SET myvar = (SELECT COUNT(*) FROM sequences); +create table x (a int GENERATED ALWAYS AS IDENTITY); +alter table x alter a drop default; --ok, remove sequence +SELECT CAST(COUNT(*) - myvar AS BIGINT) FROM sequences; --the total count, cannot change +drop table x; diff --git a/sql/test/miscellaneous/Tests/simple_selects.stable.out b/sql/test/miscellaneous/Tests/simple_selects.stable.out --- a/sql/test/miscellaneous/Tests/simple_selects.stable.out +++ b/sql/test/miscellaneous/Tests/simple_selects.stable.out @@ -341,6 +341,27 @@ stdout of test 'simple_selects` in direc % tinyint # type % 1 # length #drop table x; +#DECLARE myvar bigint; +#SET myvar = (SELECT COUNT(*) FROM sequences); +#create table x (a int GENERATED ALWAYS AS IDENTITY); +#alter table x alter a set default 1; --ok, remove sequence +#SELECT CAST(COUNT(*) - myvar AS BIGINT) FROM sequences; --the total count, cannot change +% . # table_name +% %2 # name +% bigint # type +% 1 # length +[ 0 ] +#drop table x; +#SET myvar = (SELECT COUNT(*) FROM sequences); +#create table x (a int GENERATED ALWAYS AS IDENTITY); +#alter table x alter a drop default; --ok, remove sequence +#SELECT CAST(COUNT(*) - myvar AS BIGINT) FROM sequences; --the total count, cannot change +% . # table_name +% %2 # name +% bigint # type +% 1 # length +[ 0 ] +#drop table x; # 17:31:38 > # 17:31:38 > "Done." diff --git a/sql/test/subquery/Tests/subquery4.stable.out b/sql/test/subquery/Tests/subquery4.stable.out --- a/sql/test/subquery/Tests/subquery4.stable.out +++ b/sql/test/subquery/Tests/subquery4.stable.out @@ -283,6 +283,23 @@ stdout of test 'subquery4` in directory [ NULL, 2 ] [ NULL, 3 ] [ NULL, NULL ] +#SELECT i1.i, i2.i FROM integers i1, integers i2 WHERE (i1.i <= ANY (SELECT i1.i)) = (i1.i) IN (SELECT i1.i); +% sys.i1, sys.i2 # table_name +% i, i # name +% int, int # type +% 1, 1 # length +[ 1, 1 ] +[ 1, 2 ] +[ 1, 3 ] +[ 1, NULL ] +[ 2, 1 ] +[ 2, 2 ] +[ 2, 3 ] +[ 2, NULL ] +[ 3, 1 ] +[ 3, 2 ] +[ 3, 3 ] +[ 3, NULL ] #UPDATE another_T SET col4 = (SELECT SUM(col4 + ColID) FROM tbl_ProductSales); --4 rows affected [ 4 ] #SELECT col4 FROM another_T; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list