mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-27 09:48:46 +00:00
multi-emit iterate
This commit is contained in:
parent
668de97181
commit
ba91428996
4 changed files with 47 additions and 0 deletions
|
|
@ -169,10 +169,20 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) {
|
|||
case MD_AST_NODE_TYPE_FILTER: return "filter"; break;
|
||||
case MD_AST_NODE_TYPE_UNSET: return "unset"; break;
|
||||
case MD_AST_NODE_TYPE_EMITF: return "emitf"; break;
|
||||
case MD_AST_NODE_TYPE_EMITF_WRITE: return "emitf_write"; break;
|
||||
case MD_AST_NODE_TYPE_EMITF_APPEND: return "emitf_append"; break;
|
||||
case MD_AST_NODE_TYPE_EMITP: return "emitp"; break;
|
||||
case MD_AST_NODE_TYPE_EMITP_WRITE: return "emitp_write"; break;
|
||||
case MD_AST_NODE_TYPE_EMITP_APPEND: return "emitp_append"; break;
|
||||
case MD_AST_NODE_TYPE_EMIT: return "emit"; break;
|
||||
case MD_AST_NODE_TYPE_EMIT_WRITE: return "emit_write"; break;
|
||||
case MD_AST_NODE_TYPE_EMIT_APPEND: return "emit_append"; break;
|
||||
case MD_AST_NODE_TYPE_EMITP_LASHED: return "emitp_lashed"; break;
|
||||
case MD_AST_NODE_TYPE_EMITP_LASHED_WRITE: return "emitp_lashed_write"; break;
|
||||
case MD_AST_NODE_TYPE_EMITP_LASHED_APPEND: return "emitp_lashed_append"; break;
|
||||
case MD_AST_NODE_TYPE_EMIT_LASHED: return "emit_lashed"; break;
|
||||
case MD_AST_NODE_TYPE_EMIT_LASHED_WRITE: return "emit_lashed_write"; break;
|
||||
case MD_AST_NODE_TYPE_EMIT_LASHED_APPEND: return "emit_lashed_append"; break;
|
||||
case MD_AST_NODE_TYPE_DUMP: return "dump"; break;
|
||||
case MD_AST_NODE_TYPE_DUMP_WRITE: return "dump_write"; break;
|
||||
case MD_AST_NODE_TYPE_DUMP_APPEND: return "dump_append"; break;
|
||||
|
|
|
|||
|
|
@ -34,10 +34,20 @@ typedef enum _mlr_dsl_ast_node_type_t {
|
|||
MD_AST_NODE_TYPE_FILTER,
|
||||
MD_AST_NODE_TYPE_UNSET,
|
||||
MD_AST_NODE_TYPE_EMITF,
|
||||
MD_AST_NODE_TYPE_EMITF_WRITE,
|
||||
MD_AST_NODE_TYPE_EMITF_APPEND,
|
||||
MD_AST_NODE_TYPE_EMITP,
|
||||
MD_AST_NODE_TYPE_EMITP_WRITE,
|
||||
MD_AST_NODE_TYPE_EMITP_APPEND,
|
||||
MD_AST_NODE_TYPE_EMIT,
|
||||
MD_AST_NODE_TYPE_EMIT_WRITE,
|
||||
MD_AST_NODE_TYPE_EMIT_APPEND,
|
||||
MD_AST_NODE_TYPE_EMITP_LASHED,
|
||||
MD_AST_NODE_TYPE_EMITP_LASHED_WRITE,
|
||||
MD_AST_NODE_TYPE_EMITP_LASHED_APPEND,
|
||||
MD_AST_NODE_TYPE_EMIT_LASHED,
|
||||
MD_AST_NODE_TYPE_EMIT_LASHED_WRITE,
|
||||
MD_AST_NODE_TYPE_EMIT_LASHED_APPEND,
|
||||
MD_AST_NODE_TYPE_DUMP,
|
||||
MD_AST_NODE_TYPE_DUMP_WRITE,
|
||||
MD_AST_NODE_TYPE_DUMP_APPEND,
|
||||
|
|
|
|||
|
|
@ -138,11 +138,23 @@ md_statement_not_braced_end ::= md_bare_boolean.
|
|||
md_statement_not_braced_end ::= md_oosvar_assignment.
|
||||
md_statement_not_braced_end ::= md_filter.
|
||||
md_statement_not_braced_end ::= md_unset.
|
||||
|
||||
md_statement_not_braced_end ::= md_emitf.
|
||||
md_statement_not_braced_end ::= md_emitf_write.
|
||||
md_statement_not_braced_end ::= md_emitf_append.
|
||||
md_statement_not_braced_end ::= md_emitp.
|
||||
//md_statement_not_braced_end ::= md_emitp_write.
|
||||
//md_statement_not_braced_end ::= md_emitp_append.
|
||||
md_statement_not_braced_end ::= md_emit.
|
||||
//md_statement_not_braced_end ::= md_emit_write.
|
||||
//md_statement_not_braced_end ::= md_emit_append.
|
||||
md_statement_not_braced_end ::= md_emitp_lashed.
|
||||
//md_statement_not_braced_end ::= md_emitp_lashed_write.
|
||||
//md_statement_not_braced_end ::= md_emitp_lashed_append.
|
||||
md_statement_not_braced_end ::= md_emit_lashed.
|
||||
//md_statement_not_braced_end ::= md_emit_lashed_write.
|
||||
//md_statement_not_braced_end ::= md_emit_lashed_append.
|
||||
|
||||
md_statement_not_braced_end ::= md_dump.
|
||||
md_statement_not_braced_end ::= md_dump_write.
|
||||
md_statement_not_braced_end ::= md_dump_append.
|
||||
|
|
@ -601,6 +613,15 @@ md_emitf_args(A) ::= md_emitf_args(B) MD_TOKEN_COMMA md_oosvar_keylist(C). {
|
|||
A = mlr_dsl_ast_node_append_arg(B, C);
|
||||
}
|
||||
|
||||
md_emitf_write(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_emitf_args(B). {
|
||||
B = mlr_dsl_ast_node_set_function_name(B, O->text);
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF_WRITE, B, F);
|
||||
}
|
||||
md_emitf_append(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_emitf_args(B). {
|
||||
B = mlr_dsl_ast_node_set_function_name(B, O->text);
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF_APPEND, B, F);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
md_emitp(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_ALL(B). {
|
||||
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EMITP, B);
|
||||
|
|
|
|||
|
|
@ -1948,6 +1948,12 @@ static void handle_emit(
|
|||
sllmv_free(pmvkeys);
|
||||
}
|
||||
|
||||
// xxx if to file:
|
||||
// * mlhmmv_to_lrecs not to pcsv_outputs->poutrecs but to local list
|
||||
// * hand those off to multi_lrec_writer keyed by filename.
|
||||
// * multi_lrec_writer needs to have open fp (from write/append) as well as lrec_writer object.
|
||||
// * multi_lrec_writer needs drain-all on its close method, invokved from mapper_put.
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
static void handle_emitp_lashed(
|
||||
mlr_dsl_cst_statement_t* pnode,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue