Navigation Menu

Skip to content

Commit

Permalink
html_untag: support cast for HTML argument
Browse files Browse the repository at this point in the history
  • Loading branch information
kou committed Jun 26, 2013
1 parent fbae529 commit 98e1ba1
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 6 deletions.
38 changes: 32 additions & 6 deletions lib/proc.c
Expand Up @@ -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;
Expand All @@ -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 '<' :
Expand All @@ -4052,6 +4076,8 @@ func_html_untag(grn_ctx *ctx, int nargs, grn_obj **args,
}
}

GRN_OBJ_FIN(ctx, &html);

return text;
}

Expand Down
11 changes: 11 additions & 0 deletions test/command/suite/select/function/html_untag/cast.expected
@@ -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"]]]]
11 changes: 11 additions & 0 deletions test/command/suite/select/function/html_untag/cast.test
@@ -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

0 comments on commit 98e1ba1

Please sign in to comment.