null+****@clear*****
null+****@clear*****
2010年 6月 20日 (日) 16:42:47 JST
Daijiro MORI 2010-06-20 07:42:47 +0000 (Sun, 20 Jun 2010) New Revision: 8481ed64ea31b182ed7d02ed048c9b086c810b90 Log: Got rid of all "switch (content_type)" in proc.c Modified files: lib/proc.c Modified: lib/proc.c (+20 -78) =================================================================== --- lib/proc.c 2010-06-20 07:11:38 +0000 (8a94b17) +++ lib/proc.c 2010-06-20 07:42:47 +0000 (ea57f1b) @@ -351,7 +351,6 @@ proc_define_selector(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *use static grn_obj * proc_load(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - grn_obj *outbuf = ctx->impl->outbuf; grn_load(ctx, grn_get_ctype(VAR(4)), GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1)), GRN_TEXT_VALUE(VAR(2)), GRN_TEXT_LEN(VAR(2)), @@ -360,7 +359,7 @@ proc_load(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) if (ctx->impl->loader.stat != GRN_LOADER_END) { grn_ctx_set_next_expr(ctx, grn_proc_get_info(ctx, user_data, NULL, NULL, NULL)); } else { - grn_text_itoa(ctx, outbuf, ctx->impl->loader.nrecords); + grn_output_int64(ctx, ctx->impl->loader.nrecords); if (ctx->impl->loader.table) { grn_db_touch(ctx, DB_OBJ(ctx->impl->loader.table)->db); } @@ -1071,54 +1070,22 @@ proc_add(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) static grn_obj * proc_set(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - grn_content_type ct = ctx->impl->output_type; - grn_obj *outbuf = ctx->impl->outbuf; - grn_obj *table = grn_ctx_get(ctx, - GRN_TEXT_VALUE(VAR(0)), - GRN_TEXT_LEN(VAR(0))); + grn_obj *table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0))); if (table) { grn_id id; if (GRN_TEXT_LEN(VAR(1))) { - if ((id = grn_table_get(ctx, table, - GRN_TEXT_VALUE(VAR(1)), - GRN_TEXT_LEN(VAR(1))))) { - /* todo */ - { - grn_obj obj; - grn_obj_format format; - GRN_RECORD_INIT(&obj, 0, ((grn_db_obj *)table)->id); - GRN_OBJ_FORMAT_INIT(&format, 1, 0, 1, 0); - GRN_RECORD_SET(ctx, &obj, id); - grn_obj_columns(ctx, table, - GRN_TEXT_VALUE(VAR(4)), - GRN_TEXT_LEN(VAR(4)), &format.columns); - switch (ct) { - case GRN_CONTENT_JSON: - format.flags = 0 /* GRN_OBJ_FORMAT_WITH_COLUMN_NAMES */; - GRN_TEXT_PUTS(ctx, outbuf, "[["); - grn_text_itoa(ctx, outbuf, ctx->rc); - if (ctx->rc) { - GRN_TEXT_PUTC(ctx, outbuf, ','); - grn_text_esc(ctx, outbuf, ctx->errbuf, strlen(ctx->errbuf)); - } - GRN_TEXT_PUTC(ctx, outbuf, ']'); - GRN_TEXT_PUTC(ctx, outbuf, ','); - grn_text_otoj(ctx, outbuf, &obj, &format); - GRN_TEXT_PUTC(ctx, outbuf, ']'); - break; - case GRN_CONTENT_TSV: - GRN_TEXT_PUTC(ctx, outbuf, '\n'); - /* TODO: implement */ - break; - case GRN_CONTENT_XML: - format.flags = GRN_OBJ_FORMAT_XML_ELEMENT_RESULTSET; - grn_text_otoxml(ctx, outbuf, &obj, &format); - break; - case GRN_CONTENT_NONE: - break; - } - GRN_OBJ_FORMAT_FIN(ctx, &format); - } + if ((id = grn_table_get(ctx, table, GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1))))) { + grn_obj obj; + grn_obj_format format; + GRN_RECORD_INIT(&obj, 0, ((grn_db_obj *)table)->id); + GRN_OBJ_FORMAT_INIT(&format, 1, 0, 1, 0); + GRN_RECORD_SET(ctx, &obj, id); + grn_obj_columns(ctx, table, + GRN_TEXT_VALUE(VAR(4)), + GRN_TEXT_LEN(VAR(4)), &format.columns); + format.flags = 0 /* GRN_OBJ_FORMAT_WITH_COLUMN_NAMES */; + grn_output_obj(ctx, &obj, &format); + GRN_OBJ_FORMAT_FIN(ctx, &format); } else { /* todo : error handling */ } @@ -1132,9 +1099,7 @@ proc_set(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) } static grn_rc -proc_get_resolve_parameters(grn_ctx *ctx, grn_user_data *user_data, - grn_expr_var *vars, grn_obj *outbuf, - grn_obj **table, grn_id *id) +proc_get_resolve_parameters(grn_ctx *ctx, grn_user_data *user_data, grn_obj **table, grn_id *id) { const char *table_text, *id_text, *key_text; int table_length, id_length, key_length; @@ -1229,40 +1194,17 @@ proc_get_resolve_parameters(grn_ctx *ctx, grn_user_data *user_data, static grn_obj * proc_get(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - grn_content_type ct = ctx->impl->output_type; - grn_obj *outbuf = ctx->impl->outbuf; - grn_obj *table = NULL; grn_id id; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (!proc_get_resolve_parameters(ctx, user_data, vars, outbuf, &table, &id)) { + grn_obj *table = NULL; + if (!proc_get_resolve_parameters(ctx, user_data, &table, &id)) { grn_obj obj; grn_obj_format format; GRN_RECORD_INIT(&obj, 0, ((grn_db_obj *)table)->id); GRN_OBJ_FORMAT_INIT(&format, 1, 0, 1, 0); GRN_RECORD_SET(ctx, &obj, id); - grn_obj_columns(ctx, table, - GRN_TEXT_VALUE(VAR(2)), - GRN_TEXT_LEN(VAR(2)), &format.columns); - switch (ct) { - case GRN_CONTENT_JSON: - format.flags = 0 /* GRN_OBJ_FORMAT_WITH_COLUMN_NAMES */; - grn_text_otoj(ctx, outbuf, &obj, &format); - break; - case GRN_CONTENT_TSV: - GRN_TEXT_PUTC(ctx, outbuf, '\n'); - /* TODO: implement */ - break; - case GRN_CONTENT_XML: - format.flags = GRN_OBJ_FORMAT_XML_ELEMENT_RESULTSET; - grn_text_otoxml(ctx, outbuf, &obj, &format); - break; - case GRN_CONTENT_NONE: - break; - } + grn_obj_columns(ctx, table, GRN_TEXT_VALUE(VAR(2)), GRN_TEXT_LEN(VAR(2)), &format.columns); + format.flags = 0 /* GRN_OBJ_FORMAT_WITH_COLUMN_NAMES */; + grn_output_obj(ctx, &obj, &format); GRN_OBJ_FORMAT_FIN(ctx, &format); } return NULL;