mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-22 07:30:43 +00:00
unset iterate
This commit is contained in:
parent
1bc6e34628
commit
7f273dec04
5 changed files with 16 additions and 6 deletions
|
|
@ -285,7 +285,7 @@ mv_t* mlhmmv_get(mlhmmv_t* pmap, sllmv_t* pmvkeys, int* perror) {
|
|||
return NULL;
|
||||
}
|
||||
mlhmmv_level_t* plevel = pmap->proot_level;
|
||||
mlhmmv_level_value_t* plevel_value = mlhmmv_level_get(plevel, &prest_keys->value);
|
||||
mlhmmv_level_value_t* plevel_value = mlhmmv_get_next_level(plevel, &prest_keys->value);
|
||||
while (prest_keys->pnext != NULL) {
|
||||
if (plevel_value == NULL) {
|
||||
return NULL;
|
||||
|
|
@ -296,7 +296,7 @@ mv_t* mlhmmv_get(mlhmmv_t* pmap, sllmv_t* pmvkeys, int* perror) {
|
|||
}
|
||||
plevel = plevel_value->u.pnext_level;
|
||||
prest_keys = prest_keys->pnext;
|
||||
plevel_value = mlhmmv_level_get(plevel, &prest_keys->value);
|
||||
plevel_value = mlhmmv_get_next_level(plevel, &prest_keys->value);
|
||||
}
|
||||
if (plevel_value == NULL) {
|
||||
return NULL;
|
||||
|
|
@ -308,7 +308,7 @@ mv_t* mlhmmv_get(mlhmmv_t* pmap, sllmv_t* pmvkeys, int* perror) {
|
|||
return &plevel_value->u.mlrval;
|
||||
}
|
||||
|
||||
mlhmmv_level_value_t* mlhmmv_level_get(mlhmmv_level_t* plevel, mv_t* plevel_key) {
|
||||
mlhmmv_level_value_t* mlhmmv_get_next_level(mlhmmv_level_t* plevel, mv_t* plevel_key) {
|
||||
int ideal_index = 0;
|
||||
int index = mlhmmv_level_find_index_for_key(plevel, plevel_key, &ideal_index);
|
||||
mlhmmv_level_entry_t* pentry = &plevel->entries[index];
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ void mlhmmv_put(mlhmmv_t* pmap, sllmv_t* pmvkeys, mv_t* pterminal_value);
|
|||
mv_t* mlhmmv_get(mlhmmv_t* pmap, sllmv_t* pmvkeys, int* perror);
|
||||
|
||||
// Made public for the oosvar-emitter.
|
||||
mlhmmv_level_value_t* mlhmmv_level_get(mlhmmv_level_t* pmap, mv_t* plevel_key);
|
||||
mlhmmv_level_value_t* mlhmmv_get_next_level(mlhmmv_level_t* pmap, mv_t* plevel_key);
|
||||
|
||||
void mlhmmv_print_json_stacked(mlhmmv_t* pmap, int quote_values_always);
|
||||
void mlhmmv_print_json_single_line(mlhmmv_t* pmap, int quote_values_always);
|
||||
|
|
|
|||
|
|
@ -505,6 +505,15 @@ md_emit(A) ::= MD_TOKEN_EMIT(O) md_oosvar_name(B) MD_TOKEN_COMMA md_emit_args(C)
|
|||
B = mlr_dsl_ast_node_prepend_arg(C, B);
|
||||
A = mlr_dsl_ast_node_set_function_name(B, O->text);
|
||||
}
|
||||
|
||||
md_emit(A) ::= MD_TOKEN_EMIT(O) md_keyed_oosvar_name(B). {
|
||||
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMIT, B);
|
||||
}
|
||||
md_emit(A) ::= MD_TOKEN_EMIT(O) md_keyed_oosvar_name(B) MD_TOKEN_COMMA md_emit_args(C). {
|
||||
B = mlr_dsl_ast_node_prepend_arg(C, B);
|
||||
A = mlr_dsl_ast_node_set_function_name(B, O->text);
|
||||
}
|
||||
|
||||
md_emit_args(A) ::= md_rhs(B). {
|
||||
A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_EMIT, B);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -590,7 +590,7 @@ static void mlr_dsl_cst_node_evaluate_emit(
|
|||
// xxx alloc once & keep in item struct. or not. no huge impact (and, zero-copy).
|
||||
mv_t mv0 = mv_from_string_no_free(pitem->output_field_name);
|
||||
|
||||
mlhmmv_level_value_t* proot_value = mlhmmv_level_get(poosvars->proot_level, &mv0);
|
||||
mlhmmv_level_value_t* proot_value = mlhmmv_get_next_level(poosvars->proot_level, &mv0);
|
||||
if (proot_value == NULL) {
|
||||
mv_free(&mv0);
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -55,7 +55,8 @@ UNSET
|
|||
PARAMETERIZED EMIT
|
||||
|
||||
!! need submaps:
|
||||
mlr put -v 'emit @a["sums"]'
|
||||
o mlr put -v 'emit @a["sums"]'
|
||||
o various-level emit and emitf. only req't for emitf is all args must be single at that level.
|
||||
|
||||
* evolve & extend the UTs
|
||||
* handle too-short, too-long, just-right cases
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue