null+****@clear*****
null+****@clear*****
2010年 6月 15日 (火) 00:53:50 JST
Daijiro MORI 2010-06-14 15:53:50 +0000 (Mon, 14 Jun 2010) New Revision: f8ca91608603371a3fda5f393ffa90a605abdab5 Log: Removed grn_proc_get_info() call from many procs. Modified files: lib/proc.c Modified: lib/proc.c (+328 -513) =================================================================== --- lib/proc.c 2010-06-14 14:50:48 +0000 (f0b8195) +++ lib/proc.c 2010-06-14 15:53:50 +0000 (55e2dd1) @@ -43,56 +43,46 @@ const char *grn_admin_html_path = NULL; static grn_obj * proc_select(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_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 16) { - int offset = GRN_TEXT_LEN(VAR(7)) - ? grn_atoi(GRN_TEXT_VALUE(VAR(7)), GRN_BULK_CURR(VAR(7)), NULL) - : 0; - int limit = GRN_TEXT_LEN(VAR(8)) - ? grn_atoi(GRN_TEXT_VALUE(VAR(8)), GRN_BULK_CURR(VAR(8)), NULL) - : DEFAULT_LIMIT; - char *output_columns = GRN_TEXT_VALUE(VAR(6)); - uint32_t output_columns_len = GRN_TEXT_LEN(VAR(6)); - char *drilldown_output_columns = GRN_TEXT_VALUE(VAR(11)); - uint32_t drilldown_output_columns_len = GRN_TEXT_LEN(VAR(11)); - int drilldown_offset = GRN_TEXT_LEN(VAR(12)) - ? grn_atoi(GRN_TEXT_VALUE(VAR(12)), GRN_BULK_CURR(VAR(12)), NULL) - : 0; - int drilldown_limit = GRN_TEXT_LEN(VAR(13)) - ? grn_atoi(GRN_TEXT_VALUE(VAR(13)), GRN_BULK_CURR(VAR(13)), NULL) - : DEFAULT_DRILLDOWN_LIMIT; - if (!output_columns_len) { - output_columns = DEFAULT_OUTPUT_COLUMNS; - output_columns_len = strlen(DEFAULT_OUTPUT_COLUMNS); - } - if (!drilldown_output_columns_len) { - drilldown_output_columns = DEFAULT_DRILLDOWN_OUTPUT_COLUMNS; - drilldown_output_columns_len = strlen(DEFAULT_DRILLDOWN_OUTPUT_COLUMNS); - } - - if (grn_select(ctx, outbuf, ct, - GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)), - GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1)), - GRN_TEXT_VALUE(VAR(2)), GRN_TEXT_LEN(VAR(2)), - GRN_TEXT_VALUE(VAR(3)), GRN_TEXT_LEN(VAR(3)), - GRN_TEXT_VALUE(VAR(4)), GRN_TEXT_LEN(VAR(4)), - GRN_TEXT_VALUE(VAR(5)), GRN_TEXT_LEN(VAR(5)), - output_columns, output_columns_len, - offset, limit, - GRN_TEXT_VALUE(VAR(9)), GRN_TEXT_LEN(VAR(9)), - GRN_TEXT_VALUE(VAR(10)), GRN_TEXT_LEN(VAR(10)), - drilldown_output_columns, drilldown_output_columns_len, - drilldown_offset, drilldown_limit, - GRN_TEXT_VALUE(VAR(14)), GRN_TEXT_LEN(VAR(14)))) { - } - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 15); + int offset = GRN_TEXT_LEN(VAR(7)) + ? grn_atoi(GRN_TEXT_VALUE(VAR(7)), GRN_BULK_CURR(VAR(7)), NULL) + : 0; + int limit = GRN_TEXT_LEN(VAR(8)) + ? grn_atoi(GRN_TEXT_VALUE(VAR(8)), GRN_BULK_CURR(VAR(8)), NULL) + : DEFAULT_LIMIT; + char *output_columns = GRN_TEXT_VALUE(VAR(6)); + uint32_t output_columns_len = GRN_TEXT_LEN(VAR(6)); + char *drilldown_output_columns = GRN_TEXT_VALUE(VAR(11)); + uint32_t drilldown_output_columns_len = GRN_TEXT_LEN(VAR(11)); + int drilldown_offset = GRN_TEXT_LEN(VAR(12)) + ? grn_atoi(GRN_TEXT_VALUE(VAR(12)), GRN_BULK_CURR(VAR(12)), NULL) + : 0; + int drilldown_limit = GRN_TEXT_LEN(VAR(13)) + ? grn_atoi(GRN_TEXT_VALUE(VAR(13)), GRN_BULK_CURR(VAR(13)), NULL) + : DEFAULT_DRILLDOWN_LIMIT; + if (!output_columns_len) { + output_columns = DEFAULT_OUTPUT_COLUMNS; + output_columns_len = strlen(DEFAULT_OUTPUT_COLUMNS); + } + if (!drilldown_output_columns_len) { + drilldown_output_columns = DEFAULT_DRILLDOWN_OUTPUT_COLUMNS; + drilldown_output_columns_len = strlen(DEFAULT_DRILLDOWN_OUTPUT_COLUMNS); + } + if (grn_select(ctx, outbuf, ct, + GRN_TEXT_VALUE(VAR(0)), GRN_TEXT_LEN(VAR(0)), + GRN_TEXT_VALUE(VAR(1)), GRN_TEXT_LEN(VAR(1)), + GRN_TEXT_VALUE(VAR(2)), GRN_TEXT_LEN(VAR(2)), + GRN_TEXT_VALUE(VAR(3)), GRN_TEXT_LEN(VAR(3)), + GRN_TEXT_VALUE(VAR(4)), GRN_TEXT_LEN(VAR(4)), + GRN_TEXT_VALUE(VAR(5)), GRN_TEXT_LEN(VAR(5)), + output_columns, output_columns_len, + offset, limit, + GRN_TEXT_VALUE(VAR(9)), GRN_TEXT_LEN(VAR(9)), + GRN_TEXT_VALUE(VAR(10)), GRN_TEXT_LEN(VAR(10)), + drilldown_output_columns, drilldown_output_columns_len, + drilldown_offset, drilldown_limit, + GRN_TEXT_VALUE(VAR(14)), GRN_TEXT_LEN(VAR(14)))) { } return NULL; } @@ -139,8 +129,6 @@ proc_load(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) } /* maybe necessary : grn_ctx_loader_clear(ctx); */ } - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 6); } return NULL; } @@ -148,41 +136,31 @@ proc_load(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) static grn_obj * proc_status(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_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 1) { - grn_timeval now; - grn_timeval_now(ctx, &now); - - switch (ct) { - case GRN_CONTENT_TSV: - /* TODO: implement */ - break; - case GRN_CONTENT_JSON: - { - GRN_TEXT_PUTS(ctx, outbuf, "{\"alloc_count\":"); - grn_text_itoa(ctx, outbuf, grn_alloc_count()); - GRN_TEXT_PUTS(ctx, outbuf, ",\"starttime\":"); - grn_text_itoa(ctx, outbuf, grn_starttime.tv_sec); - GRN_TEXT_PUTS(ctx, outbuf, ",\"uptime\":"); - grn_text_itoa(ctx, outbuf, now.tv_sec - grn_starttime.tv_sec); - GRN_TEXT_PUTS(ctx, outbuf, ",\"version\":\""); - GRN_TEXT_PUTS(ctx, outbuf, grn_get_version()); - GRN_TEXT_PUTC(ctx, outbuf, '"'); - GRN_TEXT_PUTC(ctx, outbuf, '}'); - } - break; - case GRN_CONTENT_XML: - case GRN_CONTENT_NONE: - break; + grn_timeval now; + grn_timeval_now(ctx, &now); + switch (ct) { + case GRN_CONTENT_TSV: + /* TODO: implement */ + break; + case GRN_CONTENT_JSON: + { + GRN_TEXT_PUTS(ctx, outbuf, "{\"alloc_count\":"); + grn_text_itoa(ctx, outbuf, grn_alloc_count()); + GRN_TEXT_PUTS(ctx, outbuf, ",\"starttime\":"); + grn_text_itoa(ctx, outbuf, grn_starttime.tv_sec); + GRN_TEXT_PUTS(ctx, outbuf, ",\"uptime\":"); + grn_text_itoa(ctx, outbuf, now.tv_sec - grn_starttime.tv_sec); + GRN_TEXT_PUTS(ctx, outbuf, ",\"version\":\""); + GRN_TEXT_PUTS(ctx, outbuf, grn_get_version()); + GRN_TEXT_PUTC(ctx, outbuf, '"'); + GRN_TEXT_PUTC(ctx, outbuf, '}'); } - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 1); + break; + case GRN_CONTENT_XML: + case GRN_CONTENT_NONE: + break; } return NULL; } @@ -329,45 +307,36 @@ grn_column_create_flags_to_text(grn_ctx *ctx, grn_obj *buf, grn_obj_flags flags) static grn_obj * proc_table_create(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 6) { - grn_obj *table; - const char *rest; - grn_obj_flags flags = grn_atoi(GRN_TEXT_VALUE(VAR(1)), - GRN_BULK_CURR(VAR(1)), &rest); - if (GRN_TEXT_VALUE(VAR(1)) == rest) { - flags = grn_parse_table_create_flags(ctx, GRN_TEXT_VALUE(VAR(1)), - GRN_BULK_CURR(VAR(1))); - if (ctx->rc) { - return NULL; - } + grn_obj *table; + const char *rest; + grn_obj_flags flags = grn_atoi(GRN_TEXT_VALUE(VAR(1)), + GRN_BULK_CURR(VAR(1)), &rest); + if (GRN_TEXT_VALUE(VAR(1)) == rest) { + flags = grn_parse_table_create_flags(ctx, GRN_TEXT_VALUE(VAR(1)), + GRN_BULK_CURR(VAR(1))); + if (ctx->rc) { + return NULL; } - if (GRN_TEXT_LEN(VAR(0))) { - flags |= GRN_OBJ_PERSISTENT; - table = grn_table_create(ctx, - GRN_TEXT_VALUE(VAR(0)), - GRN_TEXT_LEN(VAR(0)), - NULL, flags, - grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(2)), - GRN_TEXT_LEN(VAR(2))), - grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(3)), - GRN_TEXT_LEN(VAR(3)))); - if (table) { - grn_obj_set_info(ctx, table, - GRN_INFO_DEFAULT_TOKENIZER, - grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(4)), - GRN_TEXT_LEN(VAR(4)))); - grn_obj_unlink(ctx, table); - } - } else { - ERR(GRN_INVALID_ARGUMENT, "should not create anonymous table"); + } + if (GRN_TEXT_LEN(VAR(0))) { + flags |= GRN_OBJ_PERSISTENT; + table = grn_table_create(ctx, + GRN_TEXT_VALUE(VAR(0)), + GRN_TEXT_LEN(VAR(0)), + NULL, flags, + grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(2)), + GRN_TEXT_LEN(VAR(2))), + grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(3)), + GRN_TEXT_LEN(VAR(3)))); + if (table) { + grn_obj_set_info(ctx, table, + GRN_INFO_DEFAULT_TOKENIZER, + grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(4)), + GRN_TEXT_LEN(VAR(4)))); + grn_obj_unlink(ctx, table); } } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 6); + ERR(GRN_INVALID_ARGUMENT, "should not create anonymous table"); } return NULL; } @@ -375,24 +344,13 @@ proc_table_create(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_d static grn_obj * proc_table_remove(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 2) { - grn_obj *table; - - table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), - GRN_TEXT_LEN(VAR(0))); - - if (table) { - grn_obj_remove(ctx,table); - } else { - ERR(GRN_INVALID_ARGUMENT, "table not found."); - } + grn_obj *table; + table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), + GRN_TEXT_LEN(VAR(0))); + if (table) { + grn_obj_remove(ctx,table); } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 2); + ERR(GRN_INVALID_ARGUMENT, "table not found."); } return NULL; } @@ -400,104 +358,85 @@ proc_table_remove(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_d static grn_obj * proc_column_create(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 6) { - grn_obj *column, *table, *type; - const char *rest; - grn_obj_flags flags = grn_atoi(GRN_TEXT_VALUE(VAR(2)), - GRN_BULK_CURR(VAR(2)), &rest); - if (GRN_TEXT_VALUE(VAR(2)) == rest) { - flags = grn_parse_column_create_flags(ctx, GRN_TEXT_VALUE(VAR(2)), - GRN_BULK_CURR(VAR(2))); - if (ctx->rc) { - return NULL; - } + grn_obj *column, *table, *type; + const char *rest; + grn_obj_flags flags = grn_atoi(GRN_TEXT_VALUE(VAR(2)), + GRN_BULK_CURR(VAR(2)), &rest); + if (GRN_TEXT_VALUE(VAR(2)) == rest) { + flags = grn_parse_column_create_flags(ctx, GRN_TEXT_VALUE(VAR(2)), + GRN_BULK_CURR(VAR(2))); + if (ctx->rc) { + return NULL; } - table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), - GRN_TEXT_LEN(VAR(0))); - type = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(3)), - GRN_TEXT_LEN(VAR(3))); - if (GRN_TEXT_LEN(VAR(1))) { flags |= GRN_OBJ_PERSISTENT; } - column = grn_column_create(ctx, table, - GRN_TEXT_VALUE(VAR(1)), - GRN_TEXT_LEN(VAR(1)), - NULL, flags, type); - if (column) { - if (GRN_TEXT_LEN(VAR(4))) { - grn_obj sources, source_ids, **p, **pe; - GRN_PTR_INIT(&sources, GRN_OBJ_VECTOR, GRN_ID_NIL); - GRN_UINT32_INIT(&source_ids, GRN_OBJ_VECTOR); - grn_obj_columns(ctx, type, - GRN_TEXT_VALUE(VAR(4)), - GRN_TEXT_LEN(VAR(4)), - &sources); - p = (grn_obj **)GRN_BULK_HEAD(&sources); - pe = (grn_obj **)GRN_BULK_CURR(&sources); - for (; p < pe; p++) { - grn_id source_id = grn_obj_id(ctx, *p); - if ((*p)->header.type == GRN_ACCESSOR) { - /* todo : if "_key" assigned */ - source_id = grn_obj_id(ctx, type); - } - if (source_id) { - GRN_UINT32_PUT(ctx, &source_ids, source_id); - } - grn_obj_unlink(ctx, *p); + } + table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), + GRN_TEXT_LEN(VAR(0))); + type = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(3)), + GRN_TEXT_LEN(VAR(3))); + if (GRN_TEXT_LEN(VAR(1))) { flags |= GRN_OBJ_PERSISTENT; } + column = grn_column_create(ctx, table, + GRN_TEXT_VALUE(VAR(1)), + GRN_TEXT_LEN(VAR(1)), + NULL, flags, type); + if (column) { + if (GRN_TEXT_LEN(VAR(4))) { + grn_obj sources, source_ids, **p, **pe; + GRN_PTR_INIT(&sources, GRN_OBJ_VECTOR, GRN_ID_NIL); + GRN_UINT32_INIT(&source_ids, GRN_OBJ_VECTOR); + grn_obj_columns(ctx, type, + GRN_TEXT_VALUE(VAR(4)), + GRN_TEXT_LEN(VAR(4)), + &sources); + p = (grn_obj **)GRN_BULK_HEAD(&sources); + pe = (grn_obj **)GRN_BULK_CURR(&sources); + for (; p < pe; p++) { + grn_id source_id = grn_obj_id(ctx, *p); + if ((*p)->header.type == GRN_ACCESSOR) { + /* todo : if "_key" assigned */ + source_id = grn_obj_id(ctx, type); } - if (GRN_BULK_VSIZE(&source_ids)) { - grn_obj_set_info(ctx, column, GRN_INFO_SOURCE, &source_ids); + if (source_id) { + GRN_UINT32_PUT(ctx, &source_ids, source_id); } - GRN_OBJ_FIN(ctx, &source_ids); - GRN_OBJ_FIN(ctx, &sources); + grn_obj_unlink(ctx, *p); } - grn_obj_unlink(ctx, column); + if (GRN_BULK_VSIZE(&source_ids)) { + grn_obj_set_info(ctx, column, GRN_INFO_SOURCE, &source_ids); + } + GRN_OBJ_FIN(ctx, &source_ids); + GRN_OBJ_FIN(ctx, &sources); } - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 6); + grn_obj_unlink(ctx, column); } return NULL; } - static grn_obj * proc_column_remove(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 3) { - grn_obj *table, *col; - char *colname,fullname[GRN_TABLE_MAX_KEY_SIZE]; - unsigned colname_len,fullname_len; - - table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), - GRN_TEXT_LEN(VAR(0))); - - colname = GRN_TEXT_VALUE(VAR(1)); - colname_len = GRN_TEXT_LEN(VAR(1)); - - if ((fullname_len = grn_obj_name(ctx, table, fullname, GRN_TABLE_MAX_KEY_SIZE))) { - fullname[fullname_len] = GRN_DB_DELIMITER; - memcpy((fullname + fullname_len + 1), colname, colname_len); - fullname_len += colname_len + 1; - //TODO:check fullname_len < GRN_TABLE_MAX_KEY_SIZE - col = grn_ctx_get(ctx, fullname, fullname_len); - if (col) { - grn_obj_remove(ctx, col); - } else { - ERR(GRN_INVALID_ARGUMENT, "column not found."); - } + grn_obj *table, *col; + char *colname,fullname[GRN_TABLE_MAX_KEY_SIZE]; + unsigned colname_len,fullname_len; + + table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), + GRN_TEXT_LEN(VAR(0))); + + colname = GRN_TEXT_VALUE(VAR(1)); + colname_len = GRN_TEXT_LEN(VAR(1)); + + if ((fullname_len = grn_obj_name(ctx, table, fullname, GRN_TABLE_MAX_KEY_SIZE))) { + fullname[fullname_len] = GRN_DB_DELIMITER; + memcpy((fullname + fullname_len + 1), colname, colname_len); + fullname_len += colname_len + 1; + //TODO:check fullname_len < GRN_TABLE_MAX_KEY_SIZE + col = grn_ctx_get(ctx, fullname, fullname_len); + if (col) { + grn_obj_remove(ctx, col); } else { - ERR(GRN_INVALID_ARGUMENT, "table not found."); + ERR(GRN_INVALID_ARGUMENT, "column not found."); } } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 3); + ERR(GRN_INVALID_ARGUMENT, "table not found."); } return NULL; } @@ -700,67 +639,55 @@ print_tableinfo(grn_ctx *ctx, grn_obj *table, grn_obj *buf, grn_content_type oty static grn_obj * proc_column_list(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; + if ((table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), + GRN_TEXT_LEN(VAR(0))))) { + grn_hash *cols; + if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, + GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) { + if (grn_table_columns(ctx, table, NULL, 0, (grn_obj *)cols) >= 0) { + grn_id *key; + char line_delimiter, column_delimiter; + + switch (ct) { + case GRN_CONTENT_TSV: + line_delimiter = '\n'; + column_delimiter = '\t'; + GRN_TEXT_PUTS(ctx, outbuf, "id\tname\tpath\ttype\tflags\tdomain\trange"); + break; + case GRN_CONTENT_JSON: + line_delimiter = ','; + column_delimiter = ','; + GRN_TEXT_PUTS(ctx, outbuf, "[[[\"id\", \"UInt32\"],[\"name\",\"ShortText\"],[\"path\",\"ShortText\"],[\"type\",\"ShortText\"],[\"flags\",\"ShortText\"],[\"domain\", \"ShortText\"],[\"range\", \"ShortText\"],[\"source\",\"ShortText\"]]"); + break; + case GRN_CONTENT_XML: + case GRN_CONTENT_NONE: + break; + } - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 2) { - grn_obj *table; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if ((table = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), - GRN_TEXT_LEN(VAR(0))))) { - grn_hash *cols; - if ((cols = grn_hash_create(ctx, NULL, sizeof(grn_id), 0, - GRN_OBJ_TABLE_HASH_KEY|GRN_HASH_TINY))) { - if (grn_table_columns(ctx, table, NULL, 0, (grn_obj *)cols) >= 0) { - grn_id *key; - char line_delimiter, column_delimiter; - - switch (ct) { - case GRN_CONTENT_TSV: - line_delimiter = '\n'; - column_delimiter = '\t'; - GRN_TEXT_PUTS(ctx, outbuf, "id\tname\tpath\ttype\tflags\tdomain\trange"); - break; - case GRN_CONTENT_JSON: - line_delimiter = ','; - column_delimiter = ','; - GRN_TEXT_PUTS(ctx, outbuf, "[[[\"id\", \"UInt32\"],[\"name\",\"ShortText\"],[\"path\",\"ShortText\"],[\"type\",\"ShortText\"],[\"flags\",\"ShortText\"],[\"domain\", \"ShortText\"],[\"range\", \"ShortText\"],[\"source\",\"ShortText\"]]"); - break; - case GRN_CONTENT_XML: - case GRN_CONTENT_NONE: - break; - } - - GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, { - grn_obj *col; - if ((col = grn_ctx_at(ctx, *key))) { - GRN_TEXT_PUTC(ctx, outbuf, line_delimiter); - if (!print_columninfo(ctx, col, outbuf, ct)) { - grn_bulk_truncate(ctx, outbuf, GRN_BULK_VSIZE(outbuf) - 1); - } - grn_obj_unlink(ctx, col); + GRN_HASH_EACH(ctx, cols, id, &key, NULL, NULL, { + grn_obj *col; + if ((col = grn_ctx_at(ctx, *key))) { + GRN_TEXT_PUTC(ctx, outbuf, line_delimiter); + if (!print_columninfo(ctx, col, outbuf, ct)) { + grn_bulk_truncate(ctx, outbuf, GRN_BULK_VSIZE(outbuf) - 1); } - }); - if (ct == GRN_CONTENT_JSON) { - GRN_TEXT_PUTC(ctx, outbuf, ']'); + grn_obj_unlink(ctx, col); } + }); + if (ct == GRN_CONTENT_JSON) { + GRN_TEXT_PUTC(ctx, outbuf, ']'); } - grn_hash_close(ctx, cols); } - grn_obj_unlink(ctx, table); - } else { - ERR(GRN_INVALID_ARGUMENT, "table '%.*s' is not exist.", - GRN_TEXT_LEN(VAR(0)), - GRN_TEXT_VALUE(VAR(0))); + grn_hash_close(ctx, cols); } + grn_obj_unlink(ctx, table); } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 2); + ERR(GRN_INVALID_ARGUMENT, "table '%.*s' is not exist.", + GRN_TEXT_LEN(VAR(0)), + GRN_TEXT_VALUE(VAR(0))); } return NULL; } @@ -768,55 +695,43 @@ proc_column_list(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_da static grn_obj * proc_table_list(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_table_cursor *cur; - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 1) { - grn_table_cursor *cur; - - if ((cur = grn_table_cursor_open(ctx, ctx->impl->db, NULL, 0, NULL, 0, 0, -1, 0))) { - grn_id id; - char line_delimiter, column_delimiter; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - switch (ct) { - case GRN_CONTENT_TSV: - line_delimiter = '\n'; - column_delimiter = '\t'; - GRN_TEXT_PUTS(ctx, outbuf, "id\tname\tpath\tflags\tdomain\trange"); - break; - case GRN_CONTENT_JSON: - line_delimiter = ','; - column_delimiter = ','; - GRN_TEXT_PUTS(ctx, outbuf, "[[[\"id\", \"UInt32\"],[\"name\",\"ShortText\"],[\"path\",\"ShortText\"],[\"flags\",\"ShortText\"],[\"domain\", \"ShortText\"],[\"range\",\"ShortText\"]]"); - break; - case GRN_CONTENT_XML: - case GRN_CONTENT_NONE: - break; - } - while ((id = grn_table_cursor_next(ctx, cur)) != GRN_ID_NIL) { - grn_obj *o; + if ((cur = grn_table_cursor_open(ctx, ctx->impl->db, NULL, 0, NULL, 0, 0, -1, 0))) { + grn_id id; + char line_delimiter, column_delimiter; + switch (ct) { + case GRN_CONTENT_TSV: + line_delimiter = '\n'; + column_delimiter = '\t'; + GRN_TEXT_PUTS(ctx, outbuf, "id\tname\tpath\tflags\tdomain\trange"); + break; + case GRN_CONTENT_JSON: + line_delimiter = ','; + column_delimiter = ','; + GRN_TEXT_PUTS(ctx, outbuf, "[[[\"id\", \"UInt32\"],[\"name\",\"ShortText\"],[\"path\",\"ShortText\"],[\"flags\",\"ShortText\"],[\"domain\", \"ShortText\"],[\"range\",\"ShortText\"]]"); + break; + case GRN_CONTENT_XML: + case GRN_CONTENT_NONE: + break; + } + while ((id = grn_table_cursor_next(ctx, cur)) != GRN_ID_NIL) { + grn_obj *o; - if ((o = grn_ctx_at(ctx, id))) { - GRN_TEXT_PUTC(ctx, outbuf, line_delimiter); - if (!print_tableinfo(ctx, o, outbuf, ct)) { - grn_bulk_truncate(ctx, outbuf, GRN_BULK_VSIZE(outbuf) - 1); - } - grn_obj_unlink(ctx, o); + if ((o = grn_ctx_at(ctx, id))) { + GRN_TEXT_PUTC(ctx, outbuf, line_delimiter); + if (!print_tableinfo(ctx, o, outbuf, ct)) { + grn_bulk_truncate(ctx, outbuf, GRN_BULK_VSIZE(outbuf) - 1); } + grn_obj_unlink(ctx, o); } - if (ct == GRN_CONTENT_JSON) { - GRN_TEXT_PUTC(ctx, outbuf, ']'); - } - grn_table_cursor_close(ctx, cur); } - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 1); + if (ct == GRN_CONTENT_JSON) { + GRN_TEXT_PUTC(ctx, outbuf, ']'); + } + grn_table_cursor_close(ctx, cur); } return NULL; } @@ -870,9 +785,8 @@ exit : static grn_obj * proc_missing(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars, plen; + uint32_t plen; grn_obj *outbuf = ctx->impl->outbuf; - grn_expr_var *vars; static int grn_admin_html_path_len = -1; if (!grn_admin_html_path) { return NULL; } if (grn_admin_html_path_len < 0) { @@ -883,9 +797,7 @@ proc_missing(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) grn_admin_html_path_len = (int)l; if (l > 0 && grn_admin_html_path[l - 1] == PATH_SEPARATOR[0]) { grn_admin_html_path_len--; } } - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - if (nvars == 2 && - (plen = GRN_TEXT_LEN(VAR(0))) + grn_admin_html_path_len < PATH_MAX) { + if ((plen = GRN_TEXT_LEN(VAR(0))) + grn_admin_html_path_len < PATH_MAX) { char path[PATH_MAX]; memcpy(path, grn_admin_html_path, grn_admin_html_path_len); path[grn_admin_html_path_len] = PATH_SEPARATOR[0]; @@ -895,8 +807,6 @@ proc_missing(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) path + grn_admin_html_path_len + 1, PATH_MAX - grn_admin_html_path_len - 1); grn_bulk_put_from_file(ctx, outbuf, path); - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 2); } return NULL; } @@ -904,55 +814,28 @@ proc_missing(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) static grn_obj * proc_view_add(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 3) { - grn_obj *view = 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(1)), - GRN_TEXT_LEN(VAR(1))); - grn_view_add(ctx, view, table); - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 3); - } + grn_obj *view = 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(1)), + GRN_TEXT_LEN(VAR(1))); + grn_view_add(ctx, view, table); return NULL; } static grn_obj * proc_quit(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 1) { - ctx->stat = GRN_CTX_QUITTING; - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 1); - } + ctx->stat = GRN_CTX_QUITTING; return NULL; } static grn_obj * proc_shutdown(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 1) { - grn_gctx.stat = GRN_CTX_QUIT; - ctx->stat = GRN_CTX_QUITTING; - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 1); - } + grn_gctx.stat = GRN_CTX_QUIT; + ctx->stat = GRN_CTX_QUITTING; return NULL; } @@ -960,28 +843,19 @@ static grn_obj * proc_clearlock(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { int olen; - uint32_t nvars; - grn_expr_var *vars; grn_obj *obj; + olen = GRN_TEXT_LEN(VAR(0)); - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 2) { - olen = GRN_TEXT_LEN(VAR(0)); - - if (olen) { - obj = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), olen); - } else { - obj = ctx->impl->db; - } + if (olen) { + obj = grn_ctx_get(ctx, GRN_TEXT_VALUE(VAR(0)), olen); + } else { + obj = ctx->impl->db; + } - if (obj) { - grn_obj_clear_lock(ctx, obj); - } else { - ERR(GRN_INVALID_ARGUMENT, "clear object not found"); - } + if (obj) { + grn_obj_clear_lock(ctx, obj); } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 2); + ERR(GRN_INVALID_ARGUMENT, "clear object not found"); } return NULL; } @@ -993,25 +867,16 @@ static grn_logger_info info; static grn_obj * proc_log_level(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 2) { - char *p; - if (GRN_TEXT_LEN(VAR(0)) && - (p = strchr(slev, GRN_TEXT_VALUE(VAR(0))[0]))) { - info.max_level = (int)(p - slev); - info.flags = GRN_LOG_TIME|GRN_LOG_MESSAGE; - info.func = NULL; - info.func_arg = NULL; - grn_logger_info_set(ctx, &info); - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid log level."); - } + char *p; + if (GRN_TEXT_LEN(VAR(0)) && + (p = strchr(slev, GRN_TEXT_VALUE(VAR(0))[0]))) { + info.max_level = (int)(p - slev); + info.flags = GRN_LOG_TIME|GRN_LOG_MESSAGE; + info.func = NULL; + info.func_arg = NULL; + grn_logger_info_set(ctx, &info); } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 2); + ERR(GRN_INVALID_ARGUMENT, "invalid log level."); } return NULL; } @@ -1019,22 +884,13 @@ proc_log_level(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data static grn_obj * proc_log_put(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 3) { - char *p; - if (GRN_TEXT_LEN(VAR(0)) && - (p = strchr(slev, GRN_TEXT_VALUE(VAR(0))[0]))) { - GRN_TEXT_PUTC(ctx, VAR(1), '\0'); - GRN_LOG(ctx, (int)(p - slev), "%s", GRN_TEXT_VALUE(VAR(1))); - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid log level."); - } + char *p; + if (GRN_TEXT_LEN(VAR(0)) && + (p = strchr(slev, GRN_TEXT_VALUE(VAR(0))[0]))) { + GRN_TEXT_PUTC(ctx, VAR(1), '\0'); + GRN_LOG(ctx, (int)(p - slev), "%s", GRN_TEXT_VALUE(VAR(1))); } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 3); + ERR(GRN_INVALID_ARGUMENT, "invalid log level."); } return NULL; } @@ -1042,16 +898,7 @@ proc_log_put(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) static grn_obj * proc_log_reopen(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 1) { - grn_log_reopen(ctx); - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 1); - } + grn_log_reopen(ctx); return NULL; } @@ -1066,71 +913,62 @@ 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) { - uint32_t nvars; - grn_expr_var *vars; grn_content_type ct = ctx->impl->output_type; grn_obj *outbuf = ctx->impl->outbuf; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 6) { - 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_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_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_text_esc(ctx, outbuf, ctx->errbuf, strlen(ctx->errbuf)); } - GRN_OBJ_FORMAT_FIN(ctx, &format); + 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; } - } else { - /* todo : error handling */ + GRN_OBJ_FORMAT_FIN(ctx, &format); } } else { - /* todo : get_by_id */ + /* todo : error handling */ } } else { - /* todo : error handling */ + /* todo : get_by_id */ } } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 6); + /* todo : error handling */ } return NULL; } @@ -1281,36 +1119,27 @@ static grn_obj * proc_delete(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { grn_rc rc; - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - - if (nvars == 4) { - grn_obj *table = grn_ctx_get(ctx, - GRN_TEXT_VALUE(VAR(0)), - GRN_TEXT_LEN(VAR(0))); - if (table) { - if (GRN_TEXT_LEN(VAR(1)) && GRN_TEXT_LEN(VAR(3))) { - ERR(GRN_INVALID_ARGUMENT, "both id and key are specified"); - } else if (GRN_TEXT_LEN(VAR(1))) { - rc = grn_table_delete(ctx, table, GRN_TEXT_VALUE(VAR(1)), - GRN_TEXT_LEN(VAR(1))); - } else if (GRN_TEXT_LEN(VAR(3))) { - const char *end; - grn_id id = grn_atoui(GRN_TEXT_VALUE(VAR(3)), - GRN_BULK_CURR(VAR(3)), &end); - if (end == GRN_BULK_CURR(VAR(3))) { - rc = grn_table_delete_by_id(ctx, table, id); - } else { - ERR(GRN_INVALID_ARGUMENT, "invalid id"); - } + grn_obj *table = grn_ctx_get(ctx, + GRN_TEXT_VALUE(VAR(0)), + GRN_TEXT_LEN(VAR(0))); + if (table) { + if (GRN_TEXT_LEN(VAR(1)) && GRN_TEXT_LEN(VAR(3))) { + ERR(GRN_INVALID_ARGUMENT, "both id and key are specified"); + } else if (GRN_TEXT_LEN(VAR(1))) { + rc = grn_table_delete(ctx, table, GRN_TEXT_VALUE(VAR(1)), + GRN_TEXT_LEN(VAR(1))); + } else if (GRN_TEXT_LEN(VAR(3))) { + const char *end; + grn_id id = grn_atoui(GRN_TEXT_VALUE(VAR(3)), + GRN_BULK_CURR(VAR(3)), &end); + if (end == GRN_BULK_CURR(VAR(3))) { + rc = grn_table_delete_by_id(ctx, table, id); + } else { + ERR(GRN_INVALID_ARGUMENT, "invalid id"); } - } else { - ERR(GRN_INVALID_ARGUMENT, "unknown table name"); } } else { - ERR(GRN_INVALID_ARGUMENT, "invalid argument number. %d for %d", nvars, 4); + ERR(GRN_INVALID_ARGUMENT, "unknown table name"); } return NULL; } @@ -1834,11 +1663,7 @@ dump_all_records(grn_ctx *ctx, grn_obj *outbuf) static grn_obj * proc_dump(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; grn_obj *outbuf = ctx->impl->outbuf; - grn_expr_var *vars; - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - dump_scheme(ctx, outbuf); /* To update index columns correctly, we first create the whole scheme, then load non-derivative records, while skipping records of index columns. That @@ -1857,15 +1682,10 @@ proc_dump(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) static grn_obj * proc_cache_limit(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - grn_obj *outbuf = ctx->impl->outbuf; uint32_t *mp = grn_cach_max_nentries(); - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - grn_text_lltoa(ctx, outbuf, *mp); - if (nvars == 2 && GRN_TEXT_LEN(VAR(0))) { + if (GRN_TEXT_LEN(VAR(0))) { const char *rest; uint32_t max = grn_atoui(GRN_TEXT_VALUE(VAR(0)), GRN_BULK_CURR(VAR(0)), &rest); @@ -1877,11 +1697,6 @@ proc_cache_limit(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_da static grn_obj * proc_register(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - uint32_t nvars; - grn_expr_var *vars; - - grn_proc_get_info(ctx, user_data, &vars, &nvars, NULL); - if (GRN_TEXT_LEN(VAR(0))) { const char *name; name = GRN_TEXT_VALUE(VAR(0));