Changeset: f44a840e3e89 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f44a840e3e89
Modified Files:
sql/storage/bat/bat_logger.c
Branch: mangled
Log Message:
Clean up bat logger code.
diffs (truncated from 535 to 300 lines):
diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c
--- a/sql/storage/bat/bat_logger.c
+++ b/sql/storage/bat/bat_logger.c
@@ -3115,96 +3115,214 @@ bl_postversion(void *Store, void *Lg)
if (store->catalog_version <= CATALOG_JAN2022) {
/* sys.functions i.e. deleted rows */
- BAT *del_funcs = temp_descriptor(logger_find_bat(lg, 2016));
+ BAT *del_funcs = temp_descriptor(logger_find_bat(lg, 2016));
// deletes sys.functions
+ BAT *del_args = temp_descriptor(logger_find_bat(lg, 2028));
// deletes sys.args
+
+ if (del_funcs == NULL || del_args == NULL) {
+ bat_destroy(del_funcs);
+ bat_destroy(del_args);
+ return GDK_FAIL;
+ }
+
BAT *funcs_tid = BATmaskedcands(0, BATcount(del_funcs),
del_funcs, false);
- BAT *funcs_id = temp_descriptor(logger_find_bat(lg, 2017));
- BAT *funcs_name = temp_descriptor(logger_find_bat(lg, 2018));
- BAT *funcs_type = temp_descriptor(logger_find_bat(lg, 2022));
-
- BAT *del_args = temp_descriptor(logger_find_bat(lg, 2028));
BAT *args_tid = BATmaskedcands(0, BATcount(del_args), del_args,
false);
- BAT *args_func_id = temp_descriptor(logger_find_bat(lg, 2030));
- BAT *args_type = temp_descriptor(logger_find_bat(lg, 2032));
- BAT *args_digits = temp_descriptor(logger_find_bat(lg, 2033));
- BAT *args_scale = temp_descriptor(logger_find_bat(lg, 2034));
- BAT *args_inout = temp_descriptor(logger_find_bat(lg, 2035));
// 1 is input 0 is output
- BAT *args_number = temp_descriptor(logger_find_bat(lg, 2036));
// inputs first outputs are last
+
+ if (funcs_tid == NULL || args_tid == NULL) {
+ bat_destroy(del_funcs);
+ bat_destroy(del_args);
+
+ bat_destroy(funcs_tid);
+ bat_destroy(args_tid);
+ return GDK_FAIL;
+ }
+
+ bat_destroy(del_funcs);
+ bat_destroy(del_args);
+
+ BAT *funcs_id = temp_descriptor(logger_find_bat(lg, 2017));
// sys.functions.id
+ BAT *funcs_name = temp_descriptor(logger_find_bat(lg, 2018));
// sys.functions.name
+ BAT *funcs_type = temp_descriptor(logger_find_bat(lg, 2022));
// sys.functions.type
+
+ BAT *args_func_id = temp_descriptor(logger_find_bat(lg, 2030));
// sys.args.func_id
+ BAT *args_type = temp_descriptor(logger_find_bat(lg, 2032));
// sys.args.type
+ BAT *args_digits = temp_descriptor(logger_find_bat(lg, 2033));
// sys.args.digits
+ BAT *args_scale = temp_descriptor(logger_find_bat(lg, 2034));
// sys.args.scale
+ BAT *args_inout = temp_descriptor(logger_find_bat(lg, 2035));
// sys.args.inout: 1 is input 0 is output
+ BAT *args_number = temp_descriptor(logger_find_bat(lg, 2036));
// sys.args.number: inputs first outputs are last
+
+ BAT* args_cands = NULL;
+ BAT* funcs_cands = NULL;
- BAT* args_cands;
- BAT* funcs_cands;
+ BAT* funcs_name_ordered = NULL;
+ BAT* funcs_type_ordered = NULL;
+ BAT* args_number_ordered = NULL;
+ BAT* args_number_order = NULL;
+ BAT* args_inout_ordered = NULL;
+ BAT* args_type_ordered = NULL;
+ BAT* args_digits_ordered = NULL;
+ BAT* args_scale_ordered = NULL;
+
+ BAT* funcs_name_mangled = NULL;
+ BAT* funcs_name_mangled_rid = NULL;
+
+ BAT* funcs_name_mirror = NULL;
+ BAT* _funcs_name_argless = NULL;
+ BAT* funcs_argless_tid = NULL;
+ BAT* funcs_name_argless= NULL;
+ BAT* funcs_type_argless= NULL;
+
+ if (
+ funcs_id == NULL ||
+ funcs_name == NULL ||
+ funcs_type == NULL ||
+ args_func_id == NULL ||
+ args_type == NULL ||
+ args_digits == NULL ||
+ args_scale == NULL ||
+ args_inout == NULL ||
+ args_number == NULL
+ )
+ goto bailout;
if (BATleftjoin(
&funcs_cands, &args_cands,
funcs_id,
args_func_id,
funcs_tid,
args_tid,
- false, BATcount(args_tid) *
BATcount(funcs_tid)) != GDK_SUCCEED) {
- // TODO ERROR
- }
+ false, BATcount(args_tid) *
BATcount(funcs_tid)) != GDK_SUCCEED)
+ goto bailout;
+
+ if ((funcs_name_ordered = BATproject(funcs_cands, funcs_name))
== NULL || (funcs_type_ordered = BATproject(funcs_cands, funcs_type)) == NULL)
+ goto bailout;
+
+ if (BATsort(&args_number_ordered, &args_number_order, NULL,
args_number, args_cands, funcs_cands, false, false, false) != GDK_SUCCEED)
+ goto bailout;
+
+ if (
+ (args_inout_ordered = BATproject(args_number_order,
args_inout)) == NULL ||
+ (args_type_ordered = BATproject(args_number_order,
args_type)) == NULL ||
+ (args_digits_ordered = BATproject(args_number_order,
args_digits)) == NULL ||
+ (args_scale_ordered = BATproject(args_number_order,
args_scale)) == NULL)
+ goto bailout;
+
+ if ((funcs_name_mangled = COLnew(funcs_name->hseqbase,
TYPE_str, funcs_name->batCapacity, TRANSIENT)) == NULL ||
+ (funcs_name_mangled_rid = COLnew(funcs_name->hseqbase,
TYPE_oid, funcs_name->batCapacity, TRANSIENT)) == NULL)
+ goto bailout;
+
+
+ {
+ BATiter bi_funcs = bat_iterator(funcs_cands);
+ BATiter bi_funcs_name =
bat_iterator(funcs_name_ordered);
+ BATiter bi_args_type = bat_iterator(args_type_ordered);
+
+ oid func_rid = oid_nil;
+
+ char prefix[4098] = {0};
+ char postfix[4098] = {0};
+ size_t postfix_pos = 0;
+ int argc = 0;
+ int retc = 0;
+ char mangled[2*4098] = {0};
+
+ for (size_t i = 0; i < BATcount(funcs_cands); i ++ ) {
+ oid frid = *(oid*) BUNtail(bi_funcs, i);
+
+ if (func_rid != frid) {
+ if (func_rid != oid_nil) {
+ size_t pos = snprintf(mangled,
2*4098, "%s(%d,%d)%s", prefix, retc, argc, postfix);
+ (void) pos;
+ assert (pos < 2*4098);
+ retc = 0;
+ argc = 0;
+ postfix_pos = 0;
- BAT* funcs_name_ordered = BATproject(funcs_cands, funcs_name);
- BAT* funcs_type_ordered = BATproject(funcs_cands, funcs_type);
- // TODO ERROR
+ if (
+
BUNappend(funcs_name_mangled, mangled, false) != GDK_SUCCEED ||
+
BUNappend(funcs_name_mangled_rid, &func_rid, false) != GDK_SUCCEED) {
+
bat_iterator_end(&bi_funcs);
+
bat_iterator_end(&bi_funcs_name);
+
bat_iterator_end(&bi_args_type);
+ goto bailout;
+ }
+ }
+
+ func_rid = frid;
+ str name = (str) BUNtvar(bi_funcs_name,
i);
+ int type = *(int*)
Tloc(funcs_type_ordered, i);
+
+ size_t pos = 0;
- BAT* args_number_ordered;
- BAT* args_number_order;
- if (BATsort(&args_number_ordered, &args_number_order, NULL,
args_number, args_cands, funcs_cands, false, false, false) != GDK_SUCCEED) {
- // TODO ERROR
+ switch (type) {
+ case F_FUNC:
+ case F_AGGR:
+ case F_FILT:
+ pos = snprintf(prefix, 4098,
"faf%%%s", name);break;
+ case F_ANALYTIC:
+ pos = snprintf(prefix, 4098,
"win%%%s", name);break;
+ case F_UNION:
+ pos = snprintf(prefix, 4098,
"trf%%%s", name);break;
+ case F_PROC:
+ pos = snprintf(prefix, 4098,
"prc%%%s", name);break;
+ case F_LOADER:
+ pos = snprintf(prefix, 4098,
"ldr%%%s", name);break;
+ default:
+ assert(0); // Should not happen.
+ }
+ (void) pos;
+ assert(pos < 4098);
+ }
+
+ str type = (str) BUNtvar(bi_args_type, i);
+ int digits = *(int*) Tloc(args_digits_ordered,
i);
+ int scale = *(int*) Tloc(args_scale_ordered, i);
+
+ bte inout = *(bte*) Tloc(args_inout_ordered, i);
+ argc++;
+ retc += (int) !inout;
+
+ postfix_pos += snprintf(postfix + postfix_pos,
4098 - postfix_pos, "%%%s(%d,%d) ", type, digits, scale);
+ assert(postfix_pos < 4098);
+ }
+
+ // flush the last name
+ size_t pos = snprintf(mangled, 2*4098, "%s(%d,%d)%s",
prefix, retc, argc, postfix);
+ (void) pos;
+ assert (pos < 2*4098);
+
+ bat_iterator_end(&bi_funcs);
+ bat_iterator_end(&bi_funcs_name);
+ bat_iterator_end(&bi_args_type);
+
+ if (BUNappend(funcs_name_mangled, mangled, false)
!= GDK_SUCCEED ||
+ BUNappend(funcs_name_mangled_rid, &func_rid,
false) != GDK_SUCCEED)
+ goto bailout;
}
- BAT* args_inout_ordered = BATproject(args_number_order,
args_inout);
- // TODO ERROR
-
- BAT* args_type_ordered = BATproject(args_number_order,
args_type);
- // TODO ERROR
-
- BAT* args_digits_ordered = BATproject(args_number_order,
args_digits);
- // TODO ERROR
+ if ((funcs_name_mirror = BATdense(funcs_name->hseqbase,
funcs_name->hseqbase, BATcount(funcs_name))) == NULL)
+ goto bailout;
- BAT* args_scale_ordered = BATproject(args_number_order,
args_scale);
- // TODO ERROR
+ if ((_funcs_name_argless = BATdiff(
+
funcs_name_mirror, funcs_name_mangled_rid, funcs_tid,
+ NULL,
false, false, BATcount(funcs_name)-BATcount(funcs_name_mangled_rid))) == NULL)
+ goto bailout;
- // BATiter bi_args = bat_iterator(args_cands);
- BATiter bi_funcs = bat_iterator(funcs_cands);
- BATiter bi_funcs_name = bat_iterator(funcs_name_ordered);
- BATiter bi_args_type = bat_iterator(args_type_ordered);
- //BATiter bi_args_digits = bat_iterator(args_digits_ordered);
- //BATiter bi_args_scale = bat_iterator(args_scale_ordered);
-
- oid func_rid = oid_nil;
+ if ((funcs_argless_tid = BATproject(_funcs_name_argless,
funcs_name_mirror)) == NULL)
+ goto bailout;
- char prefix[4098] = {0};
- char postfix[4098] = {0};
- size_t postfix_pos = 0;
- int argc = 0;
- int retc = 0;
- char mangled[2*4098] = {0};
+ if ((funcs_name_argless= BATproject(funcs_argless_tid,
funcs_name)) == NULL)
+ goto bailout;
- BAT* funcs_name_mangled = COLnew(funcs_name->hseqbase,
TYPE_str, funcs_name->batCapacity, TRANSIENT);
- BAT* funcs_name_mangled_rid = COLnew(funcs_name->hseqbase,
TYPE_oid, funcs_name->batCapacity, TRANSIENT);
- // TODO errors
-
- for (size_t i = 0; i < BATcount(funcs_cands); i ++ ) {
- oid frid = *(oid*) BUNtail(bi_funcs, i);
+ if ((funcs_type_argless= BATproject(funcs_argless_tid,
funcs_type)) == NULL)
+ goto bailout;
- if (func_rid != frid) {
- if (func_rid != oid_nil) {
- size_t pos = snprintf(mangled, 2*4098,
"%s(%d,%d)%s", prefix, retc, argc, postfix);
- assert (pos < 2*4098);
- retc = 0;
- argc = 0;
- postfix_pos = 0;
+ {
+ char mangled[2*4098] = {0};
+ BATiter bi_argless_tid =
bat_iterator(funcs_argless_tid);
+ BATiter bi_name_argless =
bat_iterator(funcs_name_argless);
- if (BUNappend(funcs_name_mangled,
mangled, false) != GDK_SUCCEED) {
- // TODO ERROR
- }
- if (BUNappend(funcs_name_mangled_rid,
&func_rid, false) != GDK_SUCCEED) {
- // TODO ERROR
- }
- }
+ for (size_t i = 0; i < BATcount(funcs_argless_tid); i
++ ) {
- func_rid = frid;
- str name = (str) BUNtvar(bi_funcs_name, i);
- int type = *(int*) Tloc(funcs_type_ordered, i);
+ str name = (str) BUNtvar(bi_name_argless, i);
+ int type = *(int*) Tloc(funcs_type_argless, i);
size_t pos = 0;
@@ -3212,125 +3330,56 @@ bl_postversion(void *Store, void *Lg)
case F_FUNC:
case F_AGGR:
case F_FILT:
- pos = snprintf(prefix, 4098, "faf%%%s",
name);break;
+ pos = snprintf(mangled, 4098,
"faf%%%s(0,0)", name);break;
case F_ANALYTIC:
- pos = snprintf(prefix, 4098, "win%%%s",
name);break;
+ pos = snprintf(mangled, 4098,
"win%%%s(0,0)", name);break;
case F_UNION:
- pos = snprintf(prefix, 4098, "trf%%%s",
name);break;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list