mirror of
https://github.com/johnkerl/miller.git
synced 2026-01-23 02:14:13 +00:00
65 lines
2 KiB
C
65 lines
2 KiB
C
// ================================================================
|
|
// Data structures for mlr join, sorted case. Please see descriptive
|
|
// comments at the top of join_bucket_keeper.h.
|
|
// ================================================================
|
|
|
|
#ifndef JOIN_BUCKET_KEEPER_H
|
|
#define JOIN_BUCKET_KEEPER_H
|
|
|
|
#include "lib/context.h"
|
|
#include "cli/mlrcli.h"
|
|
#include "containers/lrec.h"
|
|
#include "containers/slls.h"
|
|
#include "containers/sllv.h"
|
|
#include "input/lrec_reader.h"
|
|
|
|
// ----------------------------------------------------------------
|
|
typedef struct _join_bucket_t {
|
|
slls_t* pleft_field_values;
|
|
sllv_t* precords;
|
|
int was_paired;
|
|
} join_bucket_t;
|
|
|
|
typedef struct _join_bucket_keeper_t {
|
|
lrec_reader_t* plrec_reader;
|
|
void* pvhandle;
|
|
context_t* pctx;
|
|
|
|
slls_t* pleft_field_names;
|
|
|
|
join_bucket_t* pbucket;
|
|
lrec_t* prec_peek;
|
|
|
|
int leof;
|
|
int state;
|
|
} join_bucket_keeper_t;
|
|
|
|
// ----------------------------------------------------------------
|
|
join_bucket_keeper_t* join_bucket_keeper_alloc(
|
|
char* prepipe,
|
|
char* left_file_name,
|
|
cli_reader_opts_t* popts,
|
|
slls_t* pleft_field_names);
|
|
|
|
join_bucket_keeper_t* join_bucket_keeper_alloc_from_reader(
|
|
lrec_reader_t* plrec_reader,
|
|
char* prepipe,
|
|
char* left_file_name,
|
|
slls_t* pleft_field_names);
|
|
|
|
void join_bucket_keeper_free(join_bucket_keeper_t* pkeeper, char* prepipe);
|
|
|
|
// *pprecords_paired should not be freed by the caller.
|
|
// *pprecords_left_unpaired should be freed by the caller.
|
|
void join_bucket_keeper_emit(
|
|
join_bucket_keeper_t* pkeeper,
|
|
slls_t* pright_field_values,
|
|
sllv_t** pprecords_paired,
|
|
sllv_t** pprecords_left_unpaired);
|
|
|
|
void join_bucket_print(join_bucket_t* pbucket, char* indent);
|
|
void join_bucket_keeper_print(join_bucket_keeper_t* pkeeper);
|
|
void join_bucket_keeper_print_aux(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values,
|
|
sllv_t** pprecords_paired, sllv_t** pprecords_left_unpaired);
|
|
|
|
#endif // JOIN_BUCKET_KEEPER_H
|