1 // ================================================================ 2 // Data structures for mlr join, sorted case. Please see descriptive 3 // comments at the top of join_bucket_keeper.h. 4 // ================================================================ 5 6 #ifndef JOIN_BUCKET_KEEPER_H 7 #define JOIN_BUCKET_KEEPER_H 8 9 #include "lib/context.h" 10 #include "cli/mlrcli.h" 11 #include "containers/lrec.h" 12 #include "containers/slls.h" 13 #include "containers/sllv.h" 14 #include "input/lrec_reader.h" 15 16 // ---------------------------------------------------------------- 17 typedef struct _join_bucket_t { 18 slls_t* pleft_field_values; 19 sllv_t* precords; 20 int was_paired; 21 } join_bucket_t; 22 23 typedef struct _join_bucket_keeper_t { 24 lrec_reader_t* plrec_reader; 25 void* pvhandle; 26 context_t* pctx; 27 28 slls_t* pleft_field_names; 29 30 join_bucket_t* pbucket; 31 lrec_t* prec_peek; 32 33 int leof; 34 int state; 35 } join_bucket_keeper_t; 36 37 // ---------------------------------------------------------------- 38 join_bucket_keeper_t* join_bucket_keeper_alloc( 39 char* prepipe, 40 char* left_file_name, 41 cli_reader_opts_t* popts, 42 slls_t* pleft_field_names); 43 44 join_bucket_keeper_t* join_bucket_keeper_alloc_from_reader( 45 lrec_reader_t* plrec_reader, 46 char* prepipe, 47 char* left_file_name, 48 slls_t* pleft_field_names); 49 50 void join_bucket_keeper_free(join_bucket_keeper_t* pkeeper, char* prepipe); 51 52 // *pprecords_paired should not be freed by the caller. 53 // *pprecords_left_unpaired should be freed by the caller. 54 void join_bucket_keeper_emit( 55 join_bucket_keeper_t* pkeeper, 56 slls_t* pright_field_values, 57 sllv_t** pprecords_paired, 58 sllv_t** pprecords_left_unpaired); 59 60 void join_bucket_print(join_bucket_t* pbucket, char* indent); 61 void join_bucket_keeper_print(join_bucket_keeper_t* pkeeper); 62 void join_bucket_keeper_print_aux(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values, 63 sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired); 64 65 #endif // JOIN_BUCKET_KEEPER_H 66