ext/rb-grn-column.c in groonga-0.0.5 vs ext/rb-grn-column.c in groonga-0.0.6

- old
+ new

@@ -168,14 +168,18 @@ grn_obj *table, *column, *result, *expression; grn_operator operator = GRN_OP_OR; grn_rc rc; VALUE options; VALUE rb_query, rb_name, rb_operator, rb_result; - VALUE rb_expression, builder; + char *name = NULL, *query; + unsigned name_size = 0, query_size; rb_scan_args(argc, argv, "11", &rb_query, &options); + query = StringValueCStr(rb_query); + query_size = RSTRING_LEN(rb_query); + rb_grn_column_deconstruct(SELF(self), &column, &context, NULL, NULL, NULL, NULL, NULL); table = grn_column_table(context, column); @@ -183,10 +187,15 @@ "operator", &rb_operator, "result", &rb_result, "name", &rb_name, NULL); + if (!NIL_P(rb_name)) { + name = StringValueCStr(rb_name); + name_size = RSTRING_LEN(rb_name); + } + if (!NIL_P(rb_operator)) operator = NUM2INT(rb_operator); if (NIL_P(rb_result)) { result = grn_table_create(context, NULL, 0, NULL, @@ -196,16 +205,12 @@ rb_result = GRNTABLE2RVAL(context, result, RB_GRN_TRUE); } else { result = RVAL2GRNTABLE(rb_result, &context); } - builder = rb_grn_column_expression_builder_new(self, rb_name, rb_query); - rb_expression = rb_grn_column_expression_builder_build(builder); - - rb_grn_object_deconstruct(RB_GRN_OBJECT(DATA_PTR(rb_expression)), - &expression, NULL, - NULL, NULL, NULL, NULL); - + expression = grn_expr_create_from_str(context, name, name_size, + query, query_size, + table, column); rc = grn_table_select(context, table, expression, result, operator); rb_grn_context_check(context, self); rb_grn_rc_check(rc, self); return rb_result;