mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-22 07:30:43 +00:00
indexed-emit iterate
This commit is contained in:
parent
86da3202a3
commit
6606e4eefb
3 changed files with 66 additions and 110 deletions
|
|
@ -35,8 +35,10 @@ static mlhmmv_level_t* mlhmmv_get_or_create_level_aux_no_enlarge(mlhmmv_level_t*
|
|||
|
||||
static mlhmmv_level_entry_t* mlhmmv_get_next_level_entry(mlhmmv_level_t* pmap, mv_t* plevel_key, int* pindex);
|
||||
|
||||
static void mlhmmv_to_lrecs_aux(mlhmmv_level_t* plevel, char* prefix, sllmve_t* prestnames,
|
||||
static void mlhmmv_to_lrecs_aux_vert(mlhmmv_level_t* plevel, char* prefix, sllmve_t* prestnames,
|
||||
lrec_t* ptemplate, sllv_t* poutrecs);
|
||||
static void mlhmmv_to_lrecs_aux_horiz(mlhmmv_level_t* plevel, char* prefix,
|
||||
lrec_t* poutrec);
|
||||
|
||||
static void mlhmmv_level_print_stacked(mlhmmv_level_t* plevel, int depth,
|
||||
int do_final_comma, int quote_values_always);
|
||||
|
|
@ -646,14 +648,15 @@ void mlhmmv_to_lrecs(mlhmmv_t* pmap, sllmv_t* pkeys, sllmv_t* pnames, sllv_t* po
|
|||
} else {
|
||||
lrec_t* ptemplate = lrec_unbacked_alloc();
|
||||
char* oosvar_name = mv_alloc_format_val(pfirstkey);
|
||||
mlhmmv_to_lrecs_aux(ptop_entry->level_value.u.pnext_level, oosvar_name, pnames->phead,
|
||||
////printf("OON=[%s]\n", oosvar_name);
|
||||
mlhmmv_to_lrecs_aux_vert(ptop_entry->level_value.u.pnext_level, oosvar_name, pnames->phead,
|
||||
ptemplate, poutrecs);
|
||||
free(oosvar_name);
|
||||
lrec_free(ptemplate);
|
||||
}
|
||||
}
|
||||
|
||||
static void mlhmmv_to_lrecs_aux(
|
||||
static void mlhmmv_to_lrecs_aux_vert(
|
||||
mlhmmv_level_t* plevel,
|
||||
char* prefix,
|
||||
sllmve_t* prestnames,
|
||||
|
|
@ -661,6 +664,7 @@ static void mlhmmv_to_lrecs_aux(
|
|||
sllv_t* poutrecs)
|
||||
{
|
||||
if (prestnames != NULL) {
|
||||
////printf("AUX REC\n");
|
||||
for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) {
|
||||
mlhmmv_level_value_t* plevel_value = &pe->level_value;
|
||||
lrec_t* pnextrec = lrec_copy(ptemplate);
|
||||
|
|
@ -671,29 +675,51 @@ static void mlhmmv_to_lrecs_aux(
|
|||
mv_alloc_format_val(&plevel_value->u.mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE);
|
||||
sllv_append(poutrecs, pnextrec);
|
||||
} else {
|
||||
mlhmmv_to_lrecs_aux(pe->level_value.u.pnext_level,
|
||||
mlhmmv_to_lrecs_aux_vert(pe->level_value.u.pnext_level,
|
||||
prefix, prestnames->pnext, pnextrec, poutrecs);
|
||||
lrec_free(pnextrec);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// xxx split out vert & horiz auxes
|
||||
////printf("AUX 2 HRZ\n");
|
||||
lrec_t* pnextrec = lrec_copy(ptemplate);
|
||||
for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) {
|
||||
mlhmmv_level_value_t* plevel_value = &pe->level_value;
|
||||
lrec_t* pnextrec = lrec_copy(ptemplate);
|
||||
// xxx rename
|
||||
char* foo = mv_alloc_format_val(&pe->level_key);
|
||||
char* name = mlr_paste_3_strings(prefix, TEMP_FLATTEN_SEP, foo);
|
||||
free(foo);
|
||||
if (plevel_value->is_terminal) {
|
||||
lrec_put(pnextrec, name,
|
||||
char* foo = mv_alloc_format_val(&pe->level_key);
|
||||
char* name = mlr_paste_3_strings(prefix, TEMP_FLATTEN_SEP, foo);
|
||||
free(foo);
|
||||
lrec_put(pnextrec, mlr_strdup_or_die(name),
|
||||
mv_alloc_format_val(&plevel_value->u.mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE);
|
||||
sllv_append(poutrecs, pnextrec);
|
||||
} else {
|
||||
mlhmmv_to_lrecs_aux(plevel_value->u.pnext_level, name, NULL, pnextrec, poutrecs);
|
||||
lrec_free(pnextrec);
|
||||
char* foo = mv_alloc_format_val(&pe->level_key);
|
||||
char* name = mlr_paste_3_strings(prefix, TEMP_FLATTEN_SEP, foo);
|
||||
free(foo);
|
||||
mlhmmv_to_lrecs_aux_horiz(plevel_value->u.pnext_level, name, pnextrec);
|
||||
}
|
||||
}
|
||||
sllv_append(poutrecs, pnextrec);
|
||||
}
|
||||
}
|
||||
|
||||
static void mlhmmv_to_lrecs_aux_horiz(
|
||||
mlhmmv_level_t* plevel,
|
||||
char* prefix,
|
||||
lrec_t* poutrec)
|
||||
{
|
||||
for (mlhmmv_level_entry_t* pe = plevel->phead; pe != NULL; pe = pe->pnext) {
|
||||
mlhmmv_level_value_t* plevel_value = &pe->level_value;
|
||||
// xxx rename
|
||||
char* foo = mv_alloc_format_val(&pe->level_key);
|
||||
char* name = mlr_paste_3_strings(prefix, TEMP_FLATTEN_SEP, foo);
|
||||
free(foo);
|
||||
if (plevel_value->is_terminal) {
|
||||
////printf("PFX=[%s] NAME=[%s] LK=[%s]\n", prefix, name, mv_alloc_format_val(&pe->level_key));
|
||||
lrec_put(poutrec, name,
|
||||
mv_alloc_format_val(&plevel_value->u.mlrval), FREE_ENTRY_KEY|FREE_ENTRY_VALUE);
|
||||
} else {
|
||||
mlhmmv_to_lrecs_aux_horiz(plevel_value->u.pnext_level, name, poutrec);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13089,11 +13089,7 @@ AST END STATEMENTS (1):
|
|||
PARAMETERIZED EMIT
|
||||
|
||||
mlr put -q @sum[$a] = $x; end{ emit @sum; } ./reg_test/input/abixy
|
||||
sum:pan=0.502626
|
||||
sum:eks=0.611784
|
||||
sum:wye=0.573289
|
||||
sum:zee=0.598554
|
||||
sum:hat=0.031442
|
||||
sum:pan=0.502626,sum:eks=0.611784,sum:wye=0.573289,sum:zee=0.598554,sum:hat=0.031442
|
||||
|
||||
mlr put -q @sum[$a] = $x; end{ emit @sum,"a"; } ./reg_test/input/abixy
|
||||
a=pan,sum=0.502626
|
||||
|
|
@ -13110,27 +13106,13 @@ a=zee,sum=0.598554
|
|||
a=hat,sum=0.031442
|
||||
|
||||
mlr put -q @sum[$a][$b] = $x; end{ emit @sum; } ./reg_test/input/abixy
|
||||
sum:pan:pan=0.346790
|
||||
sum:pan:wye=0.502626
|
||||
sum:eks:pan=0.758680
|
||||
sum:eks:wye=0.381399
|
||||
sum:eks:zee=0.611784
|
||||
sum:wye:wye=0.204603
|
||||
sum:wye:pan=0.573289
|
||||
sum:zee:pan=0.527126
|
||||
sum:zee:wye=0.598554
|
||||
sum:hat:wye=0.031442
|
||||
sum:pan:pan=0.346790,sum:pan:wye=0.502626,sum:eks:pan=0.758680,sum:eks:wye=0.381399,sum:eks:zee=0.611784,sum:wye:wye=0.204603,sum:wye:pan=0.573289,sum:zee:pan=0.527126,sum:zee:wye=0.598554,sum:hat:wye=0.031442
|
||||
|
||||
mlr put -q @sum[$a][$b] = $x; end{ emit @sum,"a"; } ./reg_test/input/abixy
|
||||
a=pan,sum:pan=0.346790
|
||||
a=pan,sum:wye=0.502626
|
||||
a=eks,sum:pan=0.758680
|
||||
a=eks,sum:wye=0.381399
|
||||
a=eks,sum:zee=0.611784
|
||||
a=wye,sum:wye=0.204603
|
||||
a=wye,sum:pan=0.573289
|
||||
a=zee,sum:pan=0.527126
|
||||
a=zee,sum:wye=0.598554
|
||||
a=pan,sum:pan=0.346790,sum:wye=0.502626
|
||||
a=eks,sum:pan=0.758680,sum:wye=0.381399,sum:zee=0.611784
|
||||
a=wye,sum:wye=0.204603,sum:pan=0.573289
|
||||
a=zee,sum:pan=0.527126,sum:wye=0.598554
|
||||
a=hat,sum:wye=0.031442
|
||||
|
||||
mlr put -q @sum[$a][$b] = $x; end{ emit @sum,"a","b"; } ./reg_test/input/abixy
|
||||
|
|
@ -13197,25 +13179,13 @@ mlr put -q @sum += $nonesuch; end {emit @sum, "extra" } ./reg_test/input/abixy
|
|||
sum=
|
||||
|
||||
mlr put -q @sum[$a] += $i; end {emit @sum } ./reg_test/input/abixy
|
||||
sum:pan=11
|
||||
sum:eks=13
|
||||
sum:wye=8
|
||||
sum:zee=14
|
||||
sum:hat=9
|
||||
sum:pan=11,sum:eks=13,sum:wye=8,sum:zee=14,sum:hat=9
|
||||
|
||||
mlr put -q @sum[$a] += $x; end {emit @sum } ./reg_test/input/abixy
|
||||
sum:pan=0.849416
|
||||
sum:eks=1.751863
|
||||
sum:wye=0.777892
|
||||
sum:zee=1.125680
|
||||
sum:hat=0.031442
|
||||
sum:pan=0.849416,sum:eks=1.751863,sum:wye=0.777892,sum:zee=1.125680,sum:hat=0.031442
|
||||
|
||||
mlr put -q @sum[$a] += $nonesuch; end {emit @sum } ./reg_test/input/abixy
|
||||
sum:pan=
|
||||
sum:eks=
|
||||
sum:wye=
|
||||
sum:zee=
|
||||
sum:hat=
|
||||
sum:pan=,sum:eks=,sum:wye=,sum:zee=,sum:hat=
|
||||
|
||||
mlr put -q @sum[$a] += $i; end {emit @sum, "a" } ./reg_test/input/abixy
|
||||
a=pan,sum=11
|
||||
|
|
@ -13260,75 +13230,33 @@ a=zee,sum=
|
|||
a=hat,sum=
|
||||
|
||||
mlr put -q @sum[$a][$b] += $i; end {emit @sum } ./reg_test/input/abixy
|
||||
sum:pan:pan=1
|
||||
sum:pan:wye=10
|
||||
sum:eks:pan=2
|
||||
sum:eks:wye=4
|
||||
sum:eks:zee=7
|
||||
sum:wye:wye=3
|
||||
sum:wye:pan=5
|
||||
sum:zee:pan=6
|
||||
sum:zee:wye=8
|
||||
sum:hat:wye=9
|
||||
sum:pan:pan=1,sum:pan:wye=10,sum:eks:pan=2,sum:eks:wye=4,sum:eks:zee=7,sum:wye:wye=3,sum:wye:pan=5,sum:zee:pan=6,sum:zee:wye=8,sum:hat:wye=9
|
||||
|
||||
mlr put -q @sum[$a][$b] += $x; end {emit @sum } ./reg_test/input/abixy
|
||||
sum:pan:pan=0.346790
|
||||
sum:pan:wye=0.502626
|
||||
sum:eks:pan=0.758680
|
||||
sum:eks:wye=0.381399
|
||||
sum:eks:zee=0.611784
|
||||
sum:wye:wye=0.204603
|
||||
sum:wye:pan=0.573289
|
||||
sum:zee:pan=0.527126
|
||||
sum:zee:wye=0.598554
|
||||
sum:hat:wye=0.031442
|
||||
sum:pan:pan=0.346790,sum:pan:wye=0.502626,sum:eks:pan=0.758680,sum:eks:wye=0.381399,sum:eks:zee=0.611784,sum:wye:wye=0.204603,sum:wye:pan=0.573289,sum:zee:pan=0.527126,sum:zee:wye=0.598554,sum:hat:wye=0.031442
|
||||
|
||||
mlr put -q @sum[$a][$b] += $nonesuch; end {emit @sum } ./reg_test/input/abixy
|
||||
sum:pan:pan=
|
||||
sum:pan:wye=
|
||||
sum:eks:pan=
|
||||
sum:eks:wye=
|
||||
sum:eks:zee=
|
||||
sum:wye:wye=
|
||||
sum:wye:pan=
|
||||
sum:zee:pan=
|
||||
sum:zee:wye=
|
||||
sum:hat:wye=
|
||||
sum:pan:pan=,sum:pan:wye=,sum:eks:pan=,sum:eks:wye=,sum:eks:zee=,sum:wye:wye=,sum:wye:pan=,sum:zee:pan=,sum:zee:wye=,sum:hat:wye=
|
||||
|
||||
mlr put -q @sum[$a][$b] += $i; end {emit @sum, "a" } ./reg_test/input/abixy
|
||||
a=pan,sum:pan=1
|
||||
a=pan,sum:wye=10
|
||||
a=eks,sum:pan=2
|
||||
a=eks,sum:wye=4
|
||||
a=eks,sum:zee=7
|
||||
a=wye,sum:wye=3
|
||||
a=wye,sum:pan=5
|
||||
a=zee,sum:pan=6
|
||||
a=zee,sum:wye=8
|
||||
a=pan,sum:pan=1,sum:wye=10
|
||||
a=eks,sum:pan=2,sum:wye=4,sum:zee=7
|
||||
a=wye,sum:wye=3,sum:pan=5
|
||||
a=zee,sum:pan=6,sum:wye=8
|
||||
a=hat,sum:wye=9
|
||||
|
||||
mlr put -q @sum[$a][$b] += $x; end {emit @sum, "a" } ./reg_test/input/abixy
|
||||
a=pan,sum:pan=0.346790
|
||||
a=pan,sum:wye=0.502626
|
||||
a=eks,sum:pan=0.758680
|
||||
a=eks,sum:wye=0.381399
|
||||
a=eks,sum:zee=0.611784
|
||||
a=wye,sum:wye=0.204603
|
||||
a=wye,sum:pan=0.573289
|
||||
a=zee,sum:pan=0.527126
|
||||
a=zee,sum:wye=0.598554
|
||||
a=pan,sum:pan=0.346790,sum:wye=0.502626
|
||||
a=eks,sum:pan=0.758680,sum:wye=0.381399,sum:zee=0.611784
|
||||
a=wye,sum:wye=0.204603,sum:pan=0.573289
|
||||
a=zee,sum:pan=0.527126,sum:wye=0.598554
|
||||
a=hat,sum:wye=0.031442
|
||||
|
||||
mlr put -q @sum[$a][$b] += $nonesuch; end {emit @sum, "a" } ./reg_test/input/abixy
|
||||
a=pan,sum:pan=
|
||||
a=pan,sum:wye=
|
||||
a=eks,sum:pan=
|
||||
a=eks,sum:wye=
|
||||
a=eks,sum:zee=
|
||||
a=wye,sum:wye=
|
||||
a=wye,sum:pan=
|
||||
a=zee,sum:pan=
|
||||
a=zee,sum:wye=
|
||||
a=pan,sum:pan=,sum:wye=
|
||||
a=eks,sum:pan=,sum:wye=,sum:zee=
|
||||
a=wye,sum:wye=,sum:pan=
|
||||
a=zee,sum:pan=,sum:wye=
|
||||
a=hat,sum:wye=
|
||||
|
||||
mlr put -q @sum[$a][$b] += $i; end {emit @sum, "a", "b" } ./reg_test/input/abixy
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ TOP-OF-LIST SUMMARY
|
|||
! subselector emits
|
||||
! horizontality of emits
|
||||
|
||||
* \" in string-literal reader ... fix up in the parser or in rval_expr.
|
||||
|
||||
* neaten/xxxes/valgrind/UT/doc for unset/tri-split-null/+=etal/parameterized emit
|
||||
* double-check oosvar+emit+tri-split-null by re-implementing as many mappers as possible using ossvars + emit
|
||||
* readme re srec vs lrec
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue