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

Reply via email to