static grn_obj * command_echo(grn_ctx *ctx, GNUC_UNUSED int nargs, GNUC_UNUSED grn_obj **args, grn_user_data *user_data) { grn_obj *var; char *input = NULL; unsigned int input_len = 0; var = grn_plugin_proc_get_var(ctx, user_data, "input", -1); GRN_PLUGIN_LOG(ctx, GRN_LOG_NOTICE, "[echo] input = %.*s", (int)GRN_TEXT_LEN(var), GRN_TEXT_VALUE(var)); if(GRN_TEXT_LEN(var) != 0) { input = GRN_TEXT_VALUE(var); input_len = GRN_TEXT_LEN(var); } grn_ctx_output_array_open(ctx, "RESULT", 2); grn_ctx_output_cstr(ctx, input); grn_ctx_output_int64(ctx, input_len); grn_ctx_output_array_close(ctx); return NULL; }
static void output_tokens(grn_ctx *ctx, grn_obj *tokens, grn_obj *lexicon, grn_obj *index_column) { int i, n_tokens, n_elements; grn_obj estimated_size; n_tokens = GRN_BULK_VSIZE(tokens) / sizeof(tokenize_token); n_elements = 3; if (index_column) { n_elements++; GRN_UINT32_INIT(&estimated_size, 0); } grn_ctx_output_array_open(ctx, "TOKENS", n_tokens); for (i = 0; i < n_tokens; i++) { tokenize_token *token; char value[GRN_TABLE_MAX_KEY_SIZE]; unsigned int value_size; token = ((tokenize_token *)(GRN_BULK_HEAD(tokens))) + i; grn_ctx_output_map_open(ctx, "TOKEN", n_elements); grn_ctx_output_cstr(ctx, "value"); value_size = grn_table_get_key(ctx, lexicon, token->id, value, GRN_TABLE_MAX_KEY_SIZE); grn_ctx_output_str(ctx, value, value_size); grn_ctx_output_cstr(ctx, "position"); grn_ctx_output_int32(ctx, token->position); grn_ctx_output_cstr(ctx, "force_prefix"); grn_ctx_output_bool(ctx, token->force_prefix); if (index_column) { GRN_BULK_REWIND(&estimated_size); grn_obj_get_value(ctx, index_column, token->id, &estimated_size); grn_ctx_output_cstr(ctx, "estimated_size"); grn_ctx_output_int64(ctx, GRN_UINT32_VALUE(&estimated_size)); } grn_ctx_output_map_close(ctx); } if (index_column) { GRN_OBJ_FIN(ctx, &estimated_size); } grn_ctx_output_array_close(ctx); }
static void command_schema_output_types(grn_ctx *ctx) { grn_obj types; unsigned int i, n; GRN_PTR_INIT(&types, GRN_OBJ_VECTOR, GRN_DB_OBJECT); grn_ctx_get_all_types(ctx, &types); grn_ctx_output_cstr(ctx, "types"); n = GRN_BULK_VSIZE(&types) / sizeof(grn_obj *); grn_ctx_output_map_open(ctx, "types", n); for (i = 0; i < n; i++) { grn_obj *type; type = GRN_PTR_VALUE_AT(&types, i); command_schema_output_name(ctx, type); grn_ctx_output_map_open(ctx, "type", 4); grn_ctx_output_cstr(ctx, "name"); command_schema_output_name(ctx, type); grn_ctx_output_cstr(ctx, "size"); grn_ctx_output_int64(ctx, grn_type_size(ctx, type)); grn_ctx_output_cstr(ctx, "can_be_key_type"); grn_ctx_output_bool(ctx, grn_type_size(ctx, type) <= GRN_TABLE_MAX_KEY_SIZE); grn_ctx_output_cstr(ctx, "can_be_value_type"); grn_ctx_output_bool(ctx, !(type->header.flags & GRN_OBJ_KEY_VAR_SIZE)); grn_ctx_output_map_close(ctx); } grn_ctx_output_map_close(ctx); GRN_OBJ_FIN(ctx, &types); }