Changeset: 2ea4647d0d5c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2ea4647d0d5c
Modified Files:
        clients/Tests/MAL-signatures-hge.test
        gdk/gdk_select.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_cat.c
        sql/server/rel_optimize_sel.c
        sql/server/rel_propagate.c
        sql/test/information-schema/Tests/columns.test
Branch: default
Log Message:

merged with dec2023


diffs (truncated from 1188 to 300 lines):

diff --git a/clients/Tests/MAL-signatures-hge.test 
b/clients/Tests/MAL-signatures-hge.test
--- a/clients/Tests/MAL-signatures-hge.test
+++ b/clients/Tests/MAL-signatures-hge.test
@@ -50440,7 +50440,12 @@ SQLwindow_bound;
 computes window ranges for each row
 sqlcatalog
 alter_add_range_partition
-pattern sqlcatalog.alter_add_range_partition(X_0:str, X_1:str, X_2:str, 
X_3:str, X_4:any_1, X_5:any_1, X_6:bit, X_7:int):void 
+pattern sqlcatalog.alter_add_range_partition(X_0:str, X_1:str, X_2:str, 
X_3:str, X_4:any_1, X_5:any_1, X_6:bit, X_7:int, X_8:bat[:lng]):void 
+SQLalter_add_range_partition;
+Catalog operation alter_add_range_partition
+sqlcatalog
+alter_add_range_partition
+pattern sqlcatalog.alter_add_range_partition(X_0:str, X_1:str, X_2:str, 
X_3:str, X_4:any_1, X_5:any_1, X_6:bit, X_7:int, X_8:lng):void 
 SQLalter_add_range_partition;
 Catalog operation alter_add_range_partition
 sqlcatalog
@@ -50450,12 +50455,22 @@ SQLalter_add_table;
 Catalog operation alter_add_table
 sqlcatalog
 alter_add_value_partition
-pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str, 
X_3:str, X_4:bit, X_5:int):void 
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str, 
X_3:str, X_4:bit, X_5:int, X_6:bat[:lng]):void 
 SQLalter_add_value_partition;
 Catalog operation alter_add_value_partition
 sqlcatalog
 alter_add_value_partition
-pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str, 
X_3:str, X_4:bit, X_5:int, X_6:any...):void 
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str, 
X_3:str, X_4:bit, X_5:int, X_6:bat[:lng], X_7:any...):void 
+SQLalter_add_value_partition;
+Catalog operation alter_add_value_partition
+sqlcatalog
+alter_add_value_partition
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str, 
X_3:str, X_4:bit, X_5:int, X_6:lng):void 
+SQLalter_add_value_partition;
+Catalog operation alter_add_value_partition
+sqlcatalog
+alter_add_value_partition
+pattern sqlcatalog.alter_add_value_partition(X_0:str, X_1:str, X_2:str, 
X_3:str, X_4:bit, X_5:int, X_6:lng, X_7:any...):void 
 SQLalter_add_value_partition;
 Catalog operation alter_add_value_partition
 sqlcatalog
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1199,6 +1199,7 @@ BATrange(BATiter *bi, const void *tl, co
        const ValRecord *minprop = NULL, *maxprop = NULL;
        const void *minval = NULL, *maxval = NULL;
        bool maxincl = true;
+       BAT *pb = NULL;
        int c;
        int (*atomcmp) (const void *, const void *) = ATOMcompare(bi->type);
 
@@ -1222,6 +1223,27 @@ BATrange(BATiter *bi, const void *tl, co
                maxval = VALptr(maxprop);
                maxincl = false;
        }
+       if (minprop == NULL || maxprop == NULL) {
+               if (VIEWtparent(bi->b) &&
+                   (pb = BATdescriptor(VIEWtparent(bi->b))) != NULL) {
+                       bool keep = false;
+                       MT_lock_set(&pb->theaplock);
+                       if (minprop == NULL && (minprop = BATgetprop_nolock(pb, 
GDK_MIN_BOUND)) != NULL) {
+                               keep = true;
+                               minval = VALptr(minprop);
+                       }
+                       if (maxprop == NULL && (maxprop = BATgetprop_nolock(pb, 
GDK_MAX_BOUND)) != NULL) {
+                               keep = true;
+                               maxval = VALptr(maxprop);
+                               maxincl = true;
+                       }
+                       if (!keep) {
+                               MT_lock_unset(&pb->theaplock);
+                               BBPreclaim(pb);
+                               pb = NULL;
+                       }
+               }
+       }
 
        if (minprop == NULL && maxprop == NULL) {
                range = range_inside; /* strictly: unknown */
@@ -1306,6 +1328,11 @@ BATrange(BATiter *bi, const void *tl, co
                }
        }
 
+       if (pb) {
+               MT_lock_unset(&pb->theaplock);
+               BBPreclaim(pb);
+       }
+
        MT_lock_unset(&bi->b->theaplock);
        return range;
 }
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4355,8 +4355,10 @@ rel2bin_select(backend *be, sql_rel *rel
                        return NULL;
                }
                if (s->nrcols == 0){
-                       if (!predicate && sub)
+                       if (!predicate && sub && !list_empty(sub->op4.lval))
                                predicate = stmt_const(be, 
bin_find_smallest_column(be, sub), stmt_bool(be, 1));
+                       else
+                               predicate = const_column(be, stmt_bool(be, 1));
                        if (e->type != e_cmp) {
                                sql_subtype *bt = sql_bind_localtype("bit");
 
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -6047,9 +6047,12 @@ pattern("sql", "decypher", SQLdecypher, 
  pattern("sqlcatalog", "alter_add_table", SQLalter_add_table, false, "Catalog 
operation alter_add_table", args(0,5, 
arg("sname",str),arg("mtnme",str),arg("psnme",str),arg("ptnme",str),arg("action",int))),
  pattern("sqlcatalog", "alter_del_table", SQLalter_del_table, false, "Catalog 
operation alter_del_table", args(0,5, 
arg("sname",str),arg("mtnme",str),arg("psnme",str),arg("ptnme",str),arg("action",int))),
  pattern("sqlcatalog", "alter_set_table", SQLalter_set_table, false, "Catalog 
operation alter_set_table", args(0,3, 
arg("sname",str),arg("tnme",str),arg("access",int))),
- pattern("sqlcatalog", "alter_add_range_partition", 
SQLalter_add_range_partition, false, "Catalog operation 
alter_add_range_partition", args(0,8, 
arg("sname",str),arg("mtnme",str),arg("psnme",str),arg("ptnme",str),argany("min",1),argany("max",1),arg("nills",bit),arg("update",int))),
- pattern("sqlcatalog", "alter_add_value_partition", 
SQLalter_add_value_partition, false, "Catalog operation 
alter_add_value_partition", args(0,6, 
arg("sname",str),arg("mtnme",str),arg("psnme",str),arg("ptnme",str),arg("nills",bit),arg("update",int))),
- pattern("sqlcatalog", "alter_add_value_partition", 
SQLalter_add_value_partition, false, "Catalog operation 
alter_add_value_partition", args(0,7, 
arg("sname",str),arg("mtnme",str),arg("psnme",str),arg("ptnme",str),arg("nills",bit),arg("update",int),varargany("arg",0))),
+ pattern("sqlcatalog", "alter_add_range_partition", 
SQLalter_add_range_partition, false, "Catalog operation 
alter_add_range_partition", args(0,9, 
arg("sname",str),arg("mtnme",str),arg("psnme",str),arg("ptnme",str),argany("min",1),argany("max",1),arg("nills",bit),arg("update",int),arg("assert",lng))),
+ pattern("sqlcatalog", "alter_add_range_partition", 
SQLalter_add_range_partition, false, "Catalog operation 
alter_add_range_partition", args(0,9, 
arg("sname",str),arg("mtnme",str),arg("psnme",str),arg("ptnme",str),argany("min",1),argany("max",1),arg("nills",bit),arg("update",int),batarg("assert",lng))),
+ pattern("sqlcatalog", "alter_add_value_partition", 
SQLalter_add_value_partition, false, "Catalog operation 
alter_add_value_partition", args(0,7, 
arg("sname",str),arg("mtnme",str),arg("psnme",str),arg("ptnme",str),arg("nills",bit),arg("update",int),arg("assert",lng))),
+ pattern("sqlcatalog", "alter_add_value_partition", 
SQLalter_add_value_partition, false, "Catalog operation 
alter_add_value_partition", args(0,8, 
arg("sname",str),arg("mtnme",str),arg("psnme",str),arg("ptnme",str),arg("nills",bit),arg("update",int),arg("assert",lng),
 varargany("arg",0))),
+ pattern("sqlcatalog", "alter_add_value_partition", 
SQLalter_add_value_partition, false, "Catalog operation 
alter_add_value_partition", args(0,7, 
arg("sname",str),arg("mtnme",str),arg("psnme",str),arg("ptnme",str),arg("nills",bit),arg("update",int),batarg("assert",lng))),
+ pattern("sqlcatalog", "alter_add_value_partition", 
SQLalter_add_value_partition, false, "Catalog operation 
alter_add_value_partition", args(0,8, 
arg("sname",str),arg("mtnme",str),arg("psnme",str),arg("ptnme",str),arg("nills",bit),arg("update",int),batarg("assert",lng),
 varargany("arg",0))),
  pattern("sqlcatalog", "comment_on", SQLcomment_on, false, "Catalog operation 
comment_on", args(0,2, arg("objid",int),arg("remark",str))),
  pattern("sqlcatalog", "rename_schema", SQLrename_schema, false, "Catalog 
operation rename_schema", args(0,2, arg("sname",str),arg("newnme",str))),
  pattern("sqlcatalog", "rename_table", SQLrename_table, false, "Catalog 
operation rename_table", args(0,4, 
arg("osname",str),arg("nsname",str),arg("otname",str),arg("ntname",str))),
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -228,9 +228,10 @@ alter_table_add_table(mvc *sql, char *ms
        return msg;
 }
 
+
 static char *
 alter_table_add_range_partition(mvc *sql, char *msname, char *mtname, char 
*psname, char *ptname, ptr min, ptr max,
-                                                               bit with_nills, 
int update)
+                                                               bit with_nills, 
int update, lng cnt)
 {
        sql_table *mt = NULL, *pt = NULL;
        sql_part *err = NULL;
@@ -239,8 +240,7 @@ alter_table_add_range_partition(mvc *sql
        size_t length = 0;
        sql_subtype tpe;
 
-       if ((msg = validate_alter_table_add_table(sql, 
"sql.alter_table_add_range_partition", msname, mtname, psname, ptname,
-                                                                               
         &mt, &pt, update))) {
+       if ((msg = validate_alter_table_add_table(sql, 
"sql.alter_table_add_range_partition", msname, mtname, psname, ptname, &mt, 
&pt, update))) {
                return msg;
        } else if (!isRangePartitionTable(mt)) {
                msg = 
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000)
@@ -268,6 +268,16 @@ alter_table_add_range_partition(mvc *sql
                goto finish;
        }
 
+       if (cnt) {
+               if (isPartitionedByColumnTable(mt)) {
+                       throw(SQL, "sql.alter_table_add_range_partition", 
SQLSTATE(M0M29) "ALTER TABLE: there are values in column %s outside the 
partition range", mt->part.pcol->base.name);
+               } else if (isPartitionedByExpressionTable(mt)) {
+                       throw(SQL, "sql.alter_table_add_range_partition", 
SQLSTATE(M0M29) "ALTER TABLE: there are values in the expression outside the 
partition range");
+               } else {
+                       assert(0);
+               }
+       }
+
        errcode = sql_trans_add_range_partition(sql->session->tr, mt, pt, tpe, 
min, max, with_nills, update, &err);
        switch (errcode) {
                case 0:
@@ -366,7 +376,7 @@ finish:
 
 static char *
 alter_table_add_value_partition(mvc *sql, MalStkPtr stk, InstrPtr pci, char 
*msname, char *mtname, char *psname,
-                                                               char *ptname, 
bit with_nills, int update)
+                                                               char *ptname, 
bit with_nills, int update, lng cnt)
 {
        sql_table *mt = NULL, *pt = NULL;
        str msg = MAL_SUCCEED;
@@ -392,13 +402,24 @@ alter_table_add_value_partition(mvc *sql
        }
 
        find_partition_type(&tpe, mt);
-       ninserts = pci->argc - pci->retc - 6;
+       ninserts = pci->argc - pci->retc - 7;
        if (ninserts <= 0 && !with_nills) {
                msg = 
createException(SQL,"sql.alter_table_add_value_partition",SQLSTATE(42000) 
"ALTER TABLE: no values in the list");
                goto finish;
        }
+
+       if (cnt) {
+               if (isPartitionedByColumnTable(mt)) {
+                       throw(SQL, "sql.alter_table_add_value_partition", 
SQLSTATE(M0M29) "ALTER TABLE: there are values in column %s outside the 
partition list of values", mt->part.pcol->base.name);
+               } else if (isPartitionedByExpressionTable(mt)) {
+                       throw(SQL, "sql.alter_table_add_value_partition", 
SQLSTATE(M0M29) "ALTER TABLE: there are values in the expression outside the 
partition list of values");
+               } else {
+                       assert(0);
+               }
+       }
+
        values = list_create((fdestroy) &part_value_destroy);
-       for ( i = pci->retc+6; i < pci->argc; i++){
+       for ( i = pci->retc+7; i < pci->argc; i++){
                sql_part_value *nextv = NULL;
                ValRecord *vnext = &(stk)->stk[(pci)->argv[i]];
                ptr pnext = VALget(vnext);
@@ -1966,9 +1987,20 @@ SQLalter_add_range_partition(Client cntx
        ValRecord *max = &(stk)->stk[(pci)->argv[6]];
        bit with_nills = *getArgReference_bit(stk, pci, 7);
        int update = *getArgReference_int(stk, pci, 8);
+       lng cnt = 0;
+
+       if (getArgType(mb, pci, 9) == TYPE_lng) {
+               cnt = *getArgReference_lng(stk, pci, 9);
+       } else {
+               BAT *c = BATdescriptor(*getArgReference_bat(stk, pci, 9));
+               if (c && BATcount(c) == 1)
+                       cnt = *(lng*)Tloc(c, 0);
+               if (c)
+                       BBPunfix(c->batCacheid);
+       }
 
        initcontext();
-       msg = alter_table_add_range_partition(sql, sname, mtname, psname, 
ptname, VALget(min), VALget(max), with_nills, update);
+       msg = alter_table_add_range_partition(sql, sname, mtname, psname, 
ptname, VALget(min), VALget(max), with_nills, update, cnt);
        return msg;
 }
 
@@ -1982,9 +2014,20 @@ SQLalter_add_value_partition(Client cntx
        char *ptname = SaveArgReference(stk, pci, 4);
        bit with_nills = *getArgReference_bit(stk, pci, 5);
        int update = *getArgReference_int(stk, pci, 6);
+       lng cnt = 0;
+
+       if (getArgType(mb, pci, 7) == TYPE_lng) {
+               cnt = *getArgReference_lng(stk, pci, 7);
+       } else {
+               BAT *c = BATdescriptor(*getArgReference_bat(stk, pci, 7));
+               if (c && BATcount(c) == 1)
+                       cnt = *(lng*)Tloc(c, 0);
+               if (c)
+                       BBPunfix(c->batCacheid);
+       }
 
        initcontext();
-       msg = alter_table_add_value_partition(sql, stk, pci, sname, mtname, 
psname, ptname, with_nills, update);
+       msg = alter_table_add_value_partition(sql, stk, pci, sname, mtname, 
psname, ptname, with_nills, update, cnt);
        return msg;
 }
 
diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c
--- a/sql/server/rel_optimize_sel.c
+++ b/sql/server/rel_optimize_sel.c
@@ -2397,6 +2397,11 @@ rel_join_order_(visitor *v, sql_rel *rel
 {
        if (!rel)
                return rel;
+       /*
+       if (is_join(rel->op))
+               rel = reorder_join(v, rel);
+       return rel;
+       */
 
        switch (rel->op) {
        case op_basetable:
@@ -2454,6 +2459,10 @@ rel_join_order(visitor *v, global_props 
 {
        (void) gp;
        return rel_join_order_(v, rel);
+       /*
+       rel = rel_visitor_bottomup(v, rel, &rel_join_order_);
+       return rel;
+       */
 }
 
 run_optimizer
diff --git a/sql/server/rel_propagate.c b/sql/server/rel_propagate.c
--- a/sql/server/rel_propagate.c
+++ b/sql/server/rel_propagate.c
@@ -110,20 +110,6 @@ rel_generate_anti_insert_expression(mvc 
        return res;
 }
 
-static void
-generate_alter_table_error_message(char* buf, sql_table *mt)
-{
-       char *s1 = isRangePartitionTable(mt) ? "range":"list of values";
-       if (isPartitionedByColumnTable(mt)) {
-               sql_column* col = mt->part.pcol;
-               snprintf(buf, BUFSIZ, "ALTER TABLE: there are values in column 
%s outside the partition %s", col->base.name, s1);
-       } else if (isPartitionedByExpressionTable(mt)) {
-               snprintf(buf, BUFSIZ, "ALTER TABLE: there are values in the 
expression outside the partition %s", s1);
-       } else {
-               assert(0);
-       }
-}
-
 static sql_exp *
 generate_partition_limits(sql_query *query, sql_rel **r, symbol *s, 
sql_subtype tpe, bool nilok)
 {
@@ -162,14 +148,13 @@ generate_partition_limits(sql_query *que
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to