Kouhei Sutou
null+****@clear*****
Fri Mar 24 13:46:37 JST 2017
Kouhei Sutou 2017-03-24 13:46:37 +0900 (Fri, 24 Mar 2017) New Revision: 2f4a19f8d2e2ff9ea4cff8aa15bc9a28d2621775 https://github.com/groonga/groonga/commit/2f4a19f8d2e2ff9ea4cff8aa15bc9a28d2621775 Message: Add grn_obj_is_scalar_column() predicate Modified files: include/groonga/obj.h lib/obj.c test/unit/core/test-object.c Modified: include/groonga/obj.h (+1 -0) =================================================================== --- include/groonga/obj.h 2017-03-24 13:13:00 +0900 (d00458e) +++ include/groonga/obj.h 2017-03-24 13:46:37 +0900 (7b14ce6) @@ -35,6 +35,7 @@ GRN_API grn_bool grn_obj_is_bulk(grn_ctx *ctx, grn_obj *obj); GRN_API grn_bool grn_obj_is_text_family_bulk(grn_ctx *ctx, grn_obj *obj); GRN_API grn_bool grn_obj_is_table(grn_ctx *ctx, grn_obj *obj); GRN_API grn_bool grn_obj_is_column(grn_ctx *ctx, grn_obj *obj); +GRN_API grn_bool grn_obj_is_scalar_column(grn_ctx *ctx, grn_obj *obj); GRN_API grn_bool grn_obj_is_vector_column(grn_ctx *ctx, grn_obj *obj); GRN_API grn_bool grn_obj_is_weight_vector_column(grn_ctx *ctx, grn_obj *obj); GRN_API grn_bool grn_obj_is_reference_column(grn_ctx *ctx, grn_obj *obj); Modified: lib/obj.c (+10 -0) =================================================================== --- lib/obj.c 2017-03-24 13:13:00 +0900 (a9ca53d) +++ lib/obj.c 2017-03-24 13:46:37 +0900 (51404e3) @@ -139,6 +139,16 @@ grn_obj_is_column(grn_ctx *ctx, grn_obj *obj) } grn_bool +grn_obj_is_scalar_column(grn_ctx *ctx, grn_obj *obj) +{ + if (!grn_obj_is_column(ctx, obj)) { + return GRN_FALSE; + } + + return (obj->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) == GRN_OBJ_COLUMN_SCALAR; +} + +grn_bool grn_obj_is_vector_column(grn_ctx *ctx, grn_obj *obj) { if (!grn_obj_is_column(ctx, obj)) { Modified: test/unit/core/test-object.c (+42 -0) =================================================================== --- test/unit/core/test-object.c 2017-03-24 13:13:00 +0900 (ec2bc36) +++ test/unit/core/test-object.c 2017-03-24 13:46:37 +0900 (99857b1) @@ -33,6 +33,8 @@ void data_is_table(void); void test_is_table(gconstpointer data); void data_is_column(void); void test_is_column(gconstpointer data); +void data_is_scalar_column(void); +void test_is_scalar_column(gconstpointer data); void data_is_vector_column(void); void test_is_vector_column(gconstpointer data); void data_is_weight_vector_column(void); @@ -273,6 +275,46 @@ test_is_column(gconstpointer data) } void +data_is_scalar_column(void) +{ +#define ADD_DATUM(label, expected, name) \ + gcut_add_datum(label, \ + "expected", G_TYPE_BOOLEAN, expected, \ + "name", G_TYPE_STRING, name, \ + NULL) + + ADD_DATUM("table", FALSE, "Users"); + ADD_DATUM("fix size scalar column", TRUE, "Users.age"); + ADD_DATUM("var size scalar column", TRUE, "Users.name"); + ADD_DATUM("vector column", FALSE, "Users.tags"); + ADD_DATUM("index column", FALSE, "Names.users"); + +#undef ADD_DATUM +} + +void +test_is_scalar_column(gconstpointer data) +{ + const gchar *name; + grn_obj *object; + + assert_send_command("table_create Users TABLE_HASH_KEY ShortText"); + assert_send_command("column_create Users age COLUMN_SCALAR UInt8"); + assert_send_command("column_create Users name COLUMN_SCALAR ShortText"); + assert_send_command("column_create Users tags COLUMN_VECTOR ShortText"); + assert_send_command("table_create Names TABLE_PAT_KEY ShortText"); + assert_send_command("column_create Names users COLUMN_INDEX Users name"); + + name = gcut_data_get_string(data, "name"); + object = grn_ctx_get(context, name, strlen(name)); + if (gcut_data_get_boolean(data, "expected")) { + cut_assert_true(grn_obj_is_scalar_column(context, object)); + } else { + cut_assert_false(grn_obj_is_scalar_column(context, object)); + } +} + +void data_is_vector_column(void) { #define ADD_DATUM(label, expected, name) \ -------------- next part -------------- HTML����������������������������...Download