susumu.yata
null+****@clear*****
Mon Nov 16 17:52:43 JST 2015
susumu.yata 2015-11-16 17:52:43 +0900 (Mon, 16 Nov 2015) New Revision: efcb145592cceda3eb6130d991becb84cac55952 https://github.com/groonga/groonga/commit/efcb145592cceda3eb6130d991becb84cac55952 Message: grn_ts: add grn_ts_expr_builder_get_max_n_args() Modified files: lib/ts/ts_expr_builder.c Modified: lib/ts/ts_expr_builder.c (+18 -12) =================================================================== --- lib/ts/ts_expr_builder.c 2015-11-16 16:42:11 +0900 (e0a7d6a) +++ lib/ts/ts_expr_builder.c 2015-11-16 17:52:43 +0900 (0bbe4a8) @@ -607,6 +607,20 @@ grn_ts_expr_builder_push_column(grn_ctx *ctx, grn_ts_expr_builder *builder, return rc; } +/* + * grn_ts_expr_builder_get_max_n_args() returns the number of nodes in the + * current subexpression. + */ +static size_t +grn_ts_expr_builder_get_max_n_args(grn_ctx *ctx, grn_ts_expr_builder *builder) +{ + size_t max_n_args = builder->n_nodes; + if (builder->n_bridges) { + max_n_args -= builder->bridges[builder->n_bridges - 1].n_nodes; + } + return max_n_args; +} + grn_rc grn_ts_expr_builder_push_op(grn_ctx *ctx, grn_ts_expr_builder *builder, grn_ts_op_type op_type) @@ -626,10 +640,7 @@ grn_ts_expr_builder_push_op(grn_ctx *ctx, grn_ts_expr_builder *builder, "invalid #arguments: %" GRN_FMT_SIZE, n_args); } - max_n_args = builder->n_nodes; - if (builder->n_bridges) { - max_n_args -= builder->bridges[builder->n_bridges - 1].n_nodes; - } + max_n_args = grn_ts_expr_builder_get_max_n_args(ctx, builder); if (n_args > max_n_args) { GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid #arguments: %" GRN_FMT_SIZE ", %" GRN_FMT_SIZE, @@ -703,10 +714,7 @@ grn_ts_expr_builder_begin_subexpr(grn_ctx *ctx, grn_ts_expr_builder *builder) if (!builder) { GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid argument"); } - max_n_args = builder->n_nodes; - if (builder->n_bridges) { - max_n_args -= builder->bridges[builder->n_bridges - 1].n_nodes; - } + max_n_args = grn_ts_expr_builder_get_max_n_args(ctx, builder); if (!max_n_args) { GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid argument"); } @@ -743,14 +751,12 @@ grn_ts_expr_builder_end_subexpr(grn_ctx *ctx, grn_ts_expr_builder *builder) { grn_rc rc; grn_ts_expr_node **args, *node; - grn_ts_expr_bridge *bridge; if (!ctx || !builder || (builder->n_nodes < 2) || !builder->n_bridges) { return GRN_INVALID_ARGUMENT; } /* Check whehter or not the subexpression is complete.*/ - bridge = &builder->bridges[builder->n_bridges - 1]; - if (builder->n_nodes != (bridge->n_nodes + 1)) { - return GRN_INVALID_ARGUMENT; + if (grn_ts_expr_builder_get_max_n_args(ctx, builder) != 1) { + GRN_TS_ERR_RETURN(GRN_INVALID_ARGUMENT, "invalid argument"); } /* Creates a bridge node. */ args = &builder->nodes[builder->n_nodes - 2]; -------------- next part -------------- HTML����������������������������...다운로드