mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-23 07:59:37 +00:00
join iterate
This commit is contained in:
parent
6d63fb8e57
commit
35fcba3b2c
5 changed files with 82 additions and 63 deletions
|
|
@ -214,7 +214,7 @@ static void join_bucket_keeper_fill(join_bucket_keeper_t* pkeeper) {
|
|||
static void join_bucket_keeper_advance_to(join_bucket_keeper_t* pkeeper, slls_t* pright_field_values,
|
||||
sllv_t** ppbucket_paired, sllv_t** ppbucket_left_unpaired)
|
||||
{
|
||||
if (pkeeper->pbucket->was_paired) {
|
||||
if (!pkeeper->pbucket->was_paired) {
|
||||
*ppbucket_left_unpaired = pkeeper->pbucket->precords;
|
||||
} else {
|
||||
sllv_free(pkeeper->pbucket->precords);
|
||||
|
|
|
|||
|
|
@ -39,3 +39,17 @@ hss_t* hss_from_slls(slls_t* plist) {
|
|||
hss_add(pset, pe->value);
|
||||
return pset;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
void lrec_print_list(sllv_t* plist) {
|
||||
for (sllve_t* pe = plist->phead; pe != NULL; pe = pe->pnext) {
|
||||
lrec_print(pe->pvdata);
|
||||
}
|
||||
}
|
||||
|
||||
void lrec_print_list_with_prefix(sllv_t* plist, char* prefix) {
|
||||
for (sllve_t* pe = plist->phead; pe != NULL; pe = pe->pnext) {
|
||||
printf("%s", prefix);
|
||||
lrec_print(pe->pvdata);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,4 +7,6 @@
|
|||
slls_t* mlr_keys_from_record(lrec_t* prec);
|
||||
slls_t* mlr_selected_values_from_record(lrec_t* prec, slls_t* pselected_field_names);
|
||||
hss_t* hss_from_slls(slls_t* plist);
|
||||
void lrec_print_list(sllv_t* plist);
|
||||
void lrec_print_list_with_prefix(sllv_t* plist, char* prefix);
|
||||
#endif // MIXUTIL_H
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
#include "containers/sllv.h"
|
||||
#include "input/lrec_readers.h"
|
||||
#include "containers/join_bucket_keeper.h"
|
||||
#include "containers/mixutil.h"
|
||||
|
||||
#ifdef __TEST_JOIN_BUCKET_KEEPER_MAIN__
|
||||
int tests_run = 0;
|
||||
|
|
@ -35,6 +36,11 @@ static void set_up(
|
|||
*ppreader = preader;
|
||||
}
|
||||
|
||||
// xxx temp fix me
|
||||
//static char* assert_null_list(sllv_t* plist, char* file, int line) {
|
||||
// mu_assert_lf_spec(plist == NULL, file, line);
|
||||
//}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
// xxx cases:
|
||||
//
|
||||
|
|
@ -49,9 +55,6 @@ static void set_up(
|
|||
// * double-key left, right between then >
|
||||
// * double-key left, right between then == then >
|
||||
|
||||
|
||||
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static char* test1() {
|
||||
printf("test1 enter\n");
|
||||
|
|
@ -69,11 +72,13 @@ static char* test1() {
|
|||
sllv_t* pbucket_paired;
|
||||
sllv_t* pbucket_left_unpaired;
|
||||
|
||||
char* rval = "0";
|
||||
slls_t* pright_field_values = slls_alloc();
|
||||
slls_add_no_free(pright_field_values, rval);
|
||||
slls_t* pright_field_values = slls_single_no_free("0");
|
||||
|
||||
join_bucket_keeper_emit(pkeeper, pright_field_values, &pbucket_paired, &pbucket_left_unpaired);
|
||||
printf("match %s:\n", rval);
|
||||
|
||||
printf("match %s:\n", pright_field_values->phead->value);
|
||||
// xxx fcn for null-and-dump; __FILE__/__LINE__
|
||||
// xxx fcn for spec-len-and-dump; __FILE__/__LINE__
|
||||
mu_assert_lf(pbucket_paired == NULL);
|
||||
mu_assert_lf(pbucket_left_unpaired == NULL);
|
||||
|
||||
|
|
@ -83,10 +88,8 @@ static char* test1() {
|
|||
mu_assert_lf(pbucket_left_unpaired != NULL);
|
||||
printf("#lunp=%d\n", pbucket_left_unpaired->length);
|
||||
mu_assert_lf(pbucket_left_unpaired->length == 6);
|
||||
for (sllve_t* pe = pbucket_left_unpaired->phead; pe != NULL; pe = pe->pnext) {
|
||||
lrec_t* prec = pe->pvdata;
|
||||
lrec_print(prec);
|
||||
}
|
||||
// xxx make a util fcn for this
|
||||
lrec_print_list_with_prefix(pbucket_left_unpaired, " ");
|
||||
|
||||
printf("test1 exit\n");
|
||||
printf("\n");
|
||||
|
|
@ -104,26 +107,24 @@ static char* test2() {
|
|||
void* pvhandle = NULL; // xxx move these into the jbk obj?
|
||||
context_t* pctx = NULL; // xxx revisit
|
||||
|
||||
join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, pvhandle, pctx,
|
||||
pleft_field_names);
|
||||
join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, pvhandle, pctx, pleft_field_names);
|
||||
|
||||
sllv_t* pbucket_paired;
|
||||
sllv_t* pbucket_left_unpaired;
|
||||
|
||||
char* rval = "6";
|
||||
slls_t* pright_field_values = slls_alloc();
|
||||
slls_add_no_free(pright_field_values, rval);
|
||||
slls_t* pright_field_values = slls_single_no_free("6");
|
||||
|
||||
join_bucket_keeper_emit(pkeeper, pright_field_values, &pbucket_paired, &pbucket_left_unpaired);
|
||||
printf("match %s:\n", rval);
|
||||
|
||||
printf("match %s:\n", pright_field_values->phead->value);
|
||||
mu_assert_lf(pbucket_paired == NULL);
|
||||
printf(" null\n");
|
||||
|
||||
printf("unpaired %s:\n", pright_field_values->phead->value);
|
||||
mu_assert_lf(pbucket_left_unpaired != NULL);
|
||||
printf("#lunp=%d\n", pbucket_left_unpaired->length);
|
||||
lrec_print_list_with_prefix(pbucket_left_unpaired, " ");
|
||||
mu_assert_lf(pbucket_left_unpaired->length == 6);
|
||||
mu_assert_lf(pbucket_left_unpaired == NULL);
|
||||
for (sllve_t* pe = pbucket_left_unpaired->phead; pe != NULL; pe = pe->pnext) {
|
||||
lrec_t* prec = pe->pvdata;
|
||||
lrec_print(prec);
|
||||
}
|
||||
|
||||
printf("test2 exit\n");
|
||||
printf("\n");
|
||||
|
|
@ -147,66 +148,66 @@ static char* test3() {
|
|||
sllv_t* pbucket_paired;
|
||||
sllv_t* pbucket_left_unpaired;
|
||||
|
||||
slls_t* pright_field_values = slls_alloc();
|
||||
slls_add_no_free(pright_field_values, "0");
|
||||
slls_t* pright_field_values = slls_single_no_free("0");
|
||||
|
||||
join_bucket_keeper_emit(pkeeper, pright_field_values, &pbucket_paired, &pbucket_left_unpaired);
|
||||
printf("match 0:\n");
|
||||
|
||||
printf("match %s:\n", pright_field_values->phead->value);
|
||||
mu_assert_lf(pbucket_paired == NULL);
|
||||
mu_assert_lf(pbucket_left_unpaired == NULL);
|
||||
printf(" null\n");
|
||||
|
||||
pright_field_values = slls_single_no_free("1");
|
||||
|
||||
pright_field_values = slls_alloc();
|
||||
slls_add_no_free(pright_field_values, "1");
|
||||
join_bucket_keeper_emit(pkeeper, pright_field_values, &pbucket_paired, &pbucket_left_unpaired);
|
||||
printf("match 2:\n");
|
||||
|
||||
printf("match %s:\n", pright_field_values->phead->value);
|
||||
mu_assert_lf(pbucket_paired != NULL);
|
||||
mu_assert_lf(pbucket_paired->length == 2);
|
||||
lrec_print_list_with_prefix(pbucket_paired, " ");
|
||||
mu_assert_lf(pbucket_left_unpaired == NULL);
|
||||
for (sllve_t* pe = pbucket_paired->phead; pe != NULL; pe = pe->pnext) {
|
||||
lrec_t* prec = pe->pvdata;
|
||||
lrec_print(prec);
|
||||
}
|
||||
|
||||
printf("test3 exit\n");
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static char* test4() {
|
||||
printf("test4 enter\n");
|
||||
|
||||
slls_t* pleft_field_names;
|
||||
lrec_reader_t* preader;
|
||||
set_up(&pleft_field_names, &preader);
|
||||
|
||||
void* pvhandle = NULL; // xxx move these into the jbk obj?
|
||||
context_t* pctx = NULL; // xxx revisit
|
||||
|
||||
join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, pvhandle, pctx,
|
||||
pleft_field_names);
|
||||
|
||||
sllv_t* pbucket_paired;
|
||||
sllv_t* pbucket_left_unpaired;
|
||||
|
||||
slls_t* pright_field_values = slls_alloc();
|
||||
slls_add_no_free(pright_field_values, "2");
|
||||
|
||||
join_bucket_keeper_emit(pkeeper, pright_field_values, &pbucket_paired, &pbucket_left_unpaired);
|
||||
mu_assert_lf(pbucket_paired == NULL);
|
||||
mu_assert_lf(pbucket_left_unpaired != NULL);
|
||||
mu_assert_lf(pbucket_left_unpaired->length == 2);
|
||||
|
||||
printf("test4 exit\n");
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
||||
//// ----------------------------------------------------------------
|
||||
//static char* test4() {
|
||||
// printf("test4 enter\n");
|
||||
//
|
||||
// slls_t* pleft_field_names;
|
||||
// lrec_reader_t* preader;
|
||||
// set_up(&pleft_field_names, &preader);
|
||||
//
|
||||
// void* pvhandle = NULL; // xxx move these into the jbk obj?
|
||||
// context_t* pctx = NULL; // xxx revisit
|
||||
//
|
||||
// join_bucket_keeper_t* pkeeper = join_bucket_keeper_alloc_from_reader(preader, pvhandle, pctx,
|
||||
// pleft_field_names);
|
||||
//
|
||||
// sllv_t* pbucket_paired;
|
||||
// sllv_t* pbucket_left_unpaired;
|
||||
//
|
||||
// slls_t* pright_field_values = slls_alloc();
|
||||
// slls_add_no_free(pright_field_values, "2");
|
||||
//
|
||||
// join_bucket_keeper_emit(pkeeper, pright_field_values, &pbucket_paired, &pbucket_left_unpaired);
|
||||
// mu_assert_lf(pbucket_paired == NULL);
|
||||
// mu_assert_lf(pbucket_left_unpaired != NULL);
|
||||
// mu_assert_lf(pbucket_left_unpaired->length == 2);
|
||||
//
|
||||
// printf("test4 exit\n");
|
||||
// printf("\n");
|
||||
// return 0;
|
||||
//}
|
||||
|
||||
// ================================================================
|
||||
static char * run_all_tests() {
|
||||
mu_run_test(test1);
|
||||
mu_run_test(test2);
|
||||
mu_run_test(test3);
|
||||
mu_run_test(test4);
|
||||
// xxx temp mu_run_test(test4);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
#define MU_STRINGIFY_2(x) #x
|
||||
#define MU_STRINGIFY_1(x) MU_STRINGIFY_2(x)
|
||||
|
||||
// xxx temp #define mu_assert_lf_spec(test, file, line) mu_assert(file " line " MU_STRINGIFY_1(line), test)
|
||||
|
||||
#define mu_assert_lf(test) mu_assert(__FILE__ " line " MU_STRINGIFY_1(__LINE__), test)
|
||||
|
||||
#define mu_assert(message, test) do { assertions_run++; if (!(test)) {assertions_failed++; return message;} } while (0)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue