Kouhei Sutou
null+****@clear*****
Wed Jun 26 18:27:54 JST 2013
Kouhei Sutou 2013-06-26 18:27:54 +0900 (Wed, 26 Jun 2013) New Revision: 98e1ba1d7703e97266ecb822ce53e0c466cb482e https://github.com/groonga/groonga/commit/98e1ba1d7703e97266ecb822ce53e0c466cb482e Message: html_untag: support cast for HTML argument Added files: test/command/suite/select/function/html_untag/cast.expected test/command/suite/select/function/html_untag/cast.test Modified files: lib/proc.c Modified: lib/proc.c (+32 -6) =================================================================== --- lib/proc.c 2013-06-26 18:22:24 +0900 (8a8b5d8) +++ lib/proc.c 2013-06-26 18:27:54 +0900 (9670ca6) @@ -4015,7 +4015,9 @@ static grn_obj * func_html_untag(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data) { - grn_obj *html; + grn_obj *html_arg; + int html_arg_domain; + grn_obj html; grn_obj *text; const char *html_raw; int i, length; @@ -4026,16 +4028,38 @@ func_html_untag(grn_ctx *ctx, int nargs, grn_obj **args, return NULL; } - /* TODO: type check */ - html = args[0]; + html_arg = args[0]; + html_arg_domain = html_arg->header.domain; + switch (html_arg_domain) { + case GRN_DB_SHORT_TEXT : + case GRN_DB_TEXT : + case GRN_DB_LONG_TEXT : + GRN_VALUE_VAR_SIZE_INIT(&html, GRN_OBJ_DO_SHALLOW_COPY, html_arg_domain); + GRN_TEXT_SET(ctx, &html, GRN_TEXT_VALUE(html_arg), GRN_TEXT_LEN(html_arg)); + break; + default : + GRN_TEXT_INIT(&html, 0); + if (grn_obj_cast(ctx, html_arg, &html, GRN_FALSE)) { + grn_obj inspected; + GRN_TEXT_INIT(&inspected, 0); + grn_inspect(ctx, &inspected, html_arg); + ERR(GRN_INVALID_ARGUMENT, "failed to cast to text: <%.*s>", + (int)GRN_TEXT_LEN(&inspected), GRN_TEXT_VALUE(&inspected)); + GRN_OBJ_FIN(ctx, &inspected); + GRN_OBJ_FIN(ctx, &html); + return NULL; + } + break; + } - text = GRN_PROC_ALLOC(html->header.domain, 0); + text = GRN_PROC_ALLOC(html.header.domain, 0); if (!text) { + GRN_OBJ_FIN(ctx, &html); return NULL; } - html_raw = GRN_TEXT_VALUE(html); - length = GRN_TEXT_LEN(html); + html_raw = GRN_TEXT_VALUE(&html); + length = GRN_TEXT_LEN(&html); for (i = 0; i < length; i++) { switch (html_raw[i]) { case '<' : @@ -4052,6 +4076,8 @@ func_html_untag(grn_ctx *ctx, int nargs, grn_obj **args, } } + GRN_OBJ_FIN(ctx, &html); + return text; } Added: test/command/suite/select/function/html_untag/cast.expected (+11 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/select/function/html_untag/cast.expected 2013-06-26 18:27:54 +0900 (0c4052b) @@ -0,0 +1,11 @@ +table_create Entries TABLE_NO_KEY +[[0,0.0,0.0],true] +column_create Entries id COLUMN_SCALAR Int32 +[[0,0.0,0.0],true] +load --table Entries +[ +{"id": 29} +] +[[0,0.0,0.0],1] +select Entries --output_columns "html_untag(id)" --command_version 2 +[[0,0.0,0.0],[[[1],[["html_untag","null"]],["29"]]]] Added: test/command/suite/select/function/html_untag/cast.test (+11 -0) 100644 =================================================================== --- /dev/null +++ test/command/suite/select/function/html_untag/cast.test 2013-06-26 18:27:54 +0900 (80cfeec) @@ -0,0 +1,11 @@ +table_create Entries TABLE_NO_KEY +column_create Entries id COLUMN_SCALAR Int32 + +load --table Entries +[ +{"id": 29} +] + +select Entries \ + --output_columns "html_untag(id)" \ + --command_version 2 -------------- next part -------------- HTML����������������������������...Download