MonetDB: label - merged with default

2024-06-01 Thread Niels Nes via checkin-list
Changeset: a3cfb5549512 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a3cfb5549512
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
sql/include/sql_relation.h
sql/server/rel_dump.c
sql/server/rel_exp.c
sql/server/rel_optimize_others.c
sql/server/rel_optimize_proj.c
sql/server/rel_optimize_sel.c
sql/server/rel_optimizer.c
sql/server/rel_propagate.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_schema.c
sql/server/rel_select.c
sql/server/rel_statistics.c
sql/server/rel_unnest.c

sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.test
sql/test/BugTracker-2016/Tests/merge_project.Bug-3955.test
sql/test/BugTracker-2021/Tests/plan-not-optimal-view.Bug-7140.test
sql/test/BugTracker-2024/Tests/atom_cmp-Bug-7477.test
sql/test/SQLancer/Tests/sqlancer17.test
sql/test/bugs/Tests/rtrim_bug.test
sql/test/merge-partitions/Tests/mergepart31.test
sql/test/miscellaneous/Tests/simple_plans.test
sql/test/pg_regress/Tests/alter_table.test
sql/test/prepare/Tests/prepare-complex.stable.out
sql/test/prepare/Tests/rename_exps.Bug-3974.stable.out
sql/test/prepare/Tests/sqlancer_prepare.stable.out
sql/test/prepare/Tests/sqlancer_prepare.stable.out.int128
Branch: label
Log Message:

merged with default
fixed issues on munion
reimplemented code generation for check constraint


diffs (truncated from 5007 to 300 lines):

diff --git a/clients/odbc/driver/CMakeLists.txt 
b/clients/odbc/driver/CMakeLists.txt
--- a/clients/odbc/driver/CMakeLists.txt
+++ b/clients/odbc/driver/CMakeLists.txt
@@ -124,14 +124,9 @@ target_include_directories(MonetODBC
   $
   $)
 
-target_compile_definitions(MonetODBC
-  PRIVATE
-  LIBMONETODBCS)
-
 target_link_libraries(MonetODBC
   PRIVATE
   monetdb_config_header
-  mutils
   mapi
   mutf8
   ${ODBCINST_LIBRARIES})
diff --git a/clients/odbc/driver/ODBCGlobal.h b/clients/odbc/driver/ODBCGlobal.h
--- a/clients/odbc/driver/ODBCGlobal.h
+++ b/clients/odbc/driver/ODBCGlobal.h
@@ -49,16 +49,6 @@
 
 #define ODBCDEBUG  1
 
-#ifdef WIN32
-#ifndef LIBMONETODBC
-#define odbc_export extern __declspec(dllimport)
-#else
-#define odbc_export extern __declspec(dllexport)
-#endif
-#else
-#define odbc_export extern
-#endif
-
 /* standard ODBC driver include files */
 #include   /* ODBC C typedefs */
 /* Note: sqlext.h includes sql.h so it is not needed here to be included */
diff --git a/clients/odbc/setup/drvcfg.h b/clients/odbc/setup/drvcfg.h
--- a/clients/odbc/setup/drvcfg.h
+++ b/clients/odbc/setup/drvcfg.h
@@ -32,16 +32,6 @@
 
 #define ODBCVER 0x0351
 
-#ifdef WIN32
-#ifndef LIBMONETODBCS
-#define odbc_export extern __declspec(dllimport)
-#else
-#define odbc_export extern __declspec(dllexport)
-#endif
-#else
-#define odbc_export extern
-#endif
-
 #include 
 
 /
@@ -148,7 +138,7 @@ extern "C" {
 #endif
 
 /* ONLY IMPLEMENTED IN DRIVER SETUP (not in ODBCINST) */
-   odbc_export int ODBCINSTGetProperties(HODBCINSTPROPERTY hFirstProperty);
+   extern int ODBCINSTGetProperties(HODBCINSTPROPERTY hFirstProperty);
 
 #if defined(__cplusplus)
 }
diff --git a/clients/odbc/winsetup/setup.c b/clients/odbc/winsetup/setup.c
--- a/clients/odbc/winsetup/setup.c
+++ b/clients/odbc/winsetup/setup.c
@@ -22,10 +22,6 @@
 #define ALREADY_HAVE_WINDOWS_TYPE 1
 #include 
 #include 
-#ifdef EXPORT
-#undef EXPORT
-#endif
-#define EXPORT __declspec(dllexport)
 #include 
 #include "resource.h"
 
diff --git a/common/stream/text_stream.c b/common/stream/text_stream.c
--- a/common/stream/text_stream.c
+++ b/common/stream/text_stream.c
@@ -30,6 +30,7 @@ struct inner_state {
pump_buffer src_win;
pump_buffer dst_win;
pump_buffer putback_win;
+   pump_state *outer_state;
char putback_buf[UTF8BOMLENGTH];
bool crlf_pending;
char buffer[BUFFER_SIZE];
@@ -88,42 +89,69 @@ take_byte(inner_state_t *ist)
 static pump_result
 text_pump_in(inner_state_t *ist, pump_action action)
 {
-   bool crlf_pending = ist->crlf_pending;
+   assert(ist->dst_win.count > 0);
+   assert(ist->src_win.count > 0 || action == PUMP_FINISH);
 
-   while (ist->src_win.count > 0 && ist->dst_win.count > 0) {
-   char c = take_byte(ist);
-   switch (c) {
-   case '\r':
-   if (crlf_pending) {
-   // put the previous one, which is 
clearly not followed by an \n
-   put_byte(ist, '\r');
-   }
-   crlf_pending = true;
-   continue;
-   case '\n':
-  

MonetDB: label - only dump check expression

2024-06-01 Thread Niels Nes via checkin-list
Changeset: fd16ecb2cf0a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fd16ecb2cf0a
Modified Files:
clients/Tests/MAL-signatures-hge.test
clients/Tests/MAL-signatures.test
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/scripts/76_dump.sql
sql/server/rel_dump.c
sql/server/rel_dump.h
sql/server/rel_schema.c
Branch: label
Log Message:

only dump check expression
added v1 of exp2sql to be used via  select check_constraint('schema', 
'constraint name');


diffs (truncated from 388 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
@@ -48969,6 +48969,11 @@ pattern sql.bind_idxbat(X_0:int, X_1:str
 mvc_bind_idxbat_wrap;
 Bind the 'schema.table.index' BAT with access kind:@0 - base table@1 - 
inserts@2 - updates
 sql
+check
+pattern sql.check(X_0:str, X_1:str):str
+SQLcheck;
+Return sql string of check constraint.
+sql
 claim
 unsafe pattern sql.claim(X_0:int, X_1:str, X_2:str, X_3:lng) (X_4:oid, 
X_5:bat[:oid])
 mvc_claim_wrap;
diff --git a/clients/Tests/MAL-signatures.test 
b/clients/Tests/MAL-signatures.test
--- a/clients/Tests/MAL-signatures.test
+++ b/clients/Tests/MAL-signatures.test
@@ -37429,6 +37429,11 @@ pattern sql.bind_idxbat(X_0:int, X_1:str
 mvc_bind_idxbat_wrap;
 Bind the 'schema.table.index' BAT with access kind:@0 - base table@1 - 
inserts@2 - updates
 sql
+check
+pattern sql.check(X_0:str, X_1:str):str
+SQLcheck;
+Return sql string of check constraint.
+sql
 claim
 unsafe pattern sql.claim(X_0:int, X_1:str, X_2:str, X_3:lng) (X_4:oid, 
X_5:bat[:oid])
 mvc_claim_wrap;
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
@@ -5143,25 +5143,22 @@ sql_insert_check(backend *be, sql_key *k
 {
mvc *sql = be->mvc;
int pos = 0;
-   sql_rel* rel = rel_read(sql, sa_strdup(sql->sa, key->check), &pos, 
sa_list(sql->sa)), *br = rel->l;
-
-   assert(is_basetable(br->op));
+   sql_rel *rel = rel_basetable(sql, key->t, key->t->base.name);
+   sql_exp *exp = exp_read(sql, rel, NULL, NULL, sa_strdup(sql->sa, 
key->check), &pos, 0);
+   rel->exps = rel_base_projection(sql, rel, 0);
+
/* create new sub stmt with needed inserts */
list *ins = sa_list(sql->sa);
for(node *n = key->columns->h; n; n = n->next) {
sql_kc *kc = n->data;
stmt *in = list_fetch(inserts, kc->c->colnr);
 
-   sql_exp *e = rel_base_bind_column2(sql, br, 
kc->c->t->base.name, kc->c->base.name);
+   sql_exp *e = rel_base_bind_column2(sql, rel, 
kc->c->t->base.name, kc->c->base.name);
in = stmt_alias(be, in, e->alias.label, kc->c->t->base.name, 
kc->c->base.name);
append(ins, in);
}
stmt *sub = stmt_list(be, ins);
-   /* TODO: need exp here */
-   assert(list_length(rel->exps) == 1);
-   sql_exp *e = rel->exps->h->data;
-   stmt *s = exp_bin(be, e, sub, NULL, NULL, NULL, NULL, NULL, 0, 0, 0);
-
+   stmt *s = exp_bin(be, exp, sub, NULL, NULL, NULL, NULL, NULL, 0, 0, 0);
sql_subfunc *cnt = sql_bind_func(sql, "sys", "count", 
sql_bind_localtype("void"), NULL, F_AGGR, true, true);
s = stmt_uselect(be, column(be, s), stmt_bool(be, 0), cmp_equal, NULL, 
0, 1);
s = stmt_aggr(be, s, NULL, NULL, cnt, 1, 0, 1);
@@ -6159,22 +6156,9 @@ sql_update_check(backend *be, stmt **upd
 {
mvc *sql = be->mvc;
int pos = 0;
-   sql_rel *rel = NULL;
-
-   if (key->t->persistence == SQL_DECLARED_TABLE) {
-   stack_push_frame(be->mvc, "ALTER TABLE ADD CONSTRAINT CHECK");
-   sql_schema* ss = key->t->s;
-   frame_push_table(sql, key->t);
-   key->t->s = ss; // recover the schema because frame_push_table 
removes it
-
-   rel = rel_read(sql, sa_strdup(sql->sa, key->check), &pos, 
sa_list(sql->sa));
-   stack_pop_frame(sql);
-   } else {
-   rel = rel_read(sql, sa_strdup(sql->sa, key->check), &pos, 
sa_list(sql->sa));
-   }
-
-   sql_rel *br = rel->l;
-   assert(is_basetable(br->op));
+   sql_rel *rel = rel_basetable(sql, key->t, key->t->base.name);
+   sql_exp *exp = exp_read(sql, rel, NULL, NULL, sa_strdup(sql->sa, 
key->check), &pos, 0);
+   rel->exps = rel_base_projection(sql, rel, 0);
 
/* create sub stmt with needed updates (or projected col from to be 
updated table) */
list *ups = sa_list(sql->sa);
@@ -6187,16 +6171,13 @@ sql_update_check(backend *be, stmt **upd
} else {
upd = stmt_col(be, kc->c, u_tids, u_tids->partition);
}
-   sql_exp *e = rel_base_bind_column2(sql, br, 
kc->c->t->base.name, kc->c->base.name);
+   sql_ex