grn_bool grn_obj_is_index_column(grn_ctx *ctx, grn_obj *obj) { if (!grn_obj_is_column(ctx, obj)) { return GRN_FALSE; } return obj->header.type == GRN_COLUMN_INDEX; }
void test_is_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("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_string(data, "expected")) { cut_assert_true(grn_obj_is_column(context, object)); } else { cut_assert_false(grn_obj_is_column(context, object)); } }
static mrb_value indexable_index_ids(mrb_state *mrb, mrb_value self) { grn_ctx *ctx = (grn_ctx *)mrb->ud; grn_obj *object; grn_hook_entry entry; int i; int n_indexes; mrb_value mrb_index_ids; grn_obj hook_data; object = DATA_PTR(self); if (grn_obj_is_key_accessor(ctx, object)) { object = grn_ctx_at(ctx, object->header.domain); } if (grn_obj_is_table(ctx, object)) { entry = GRN_HOOK_INSERT; } else if (grn_obj_is_column(ctx, object)) { entry = GRN_HOOK_SET; } else { return mrb_ary_new(mrb); } n_indexes = grn_obj_get_nhooks(ctx, object, entry); mrb_index_ids = mrb_ary_new_capa(mrb, n_indexes); GRN_TEXT_INIT(&hook_data, 0); for (i = 0; i < n_indexes; i++) { GRN_BULK_REWIND(&hook_data); grn_obj_get_hook(ctx, object, entry, i, &hook_data); if (GRN_BULK_VSIZE(&hook_data) == sizeof(grn_obj_default_set_value_hook_data)) { grn_obj_default_set_value_hook_data *data; data = (grn_obj_default_set_value_hook_data *)GRN_TEXT_VALUE(&hook_data); mrb_ary_push(mrb, mrb_index_ids, mrb_fixnum_value(data->target)); } } return mrb_index_ids; }
grn_bool grn_obj_is_reference_column(grn_ctx *ctx, grn_obj *obj) { grn_obj *range; if (!grn_obj_is_column(ctx, obj)) { return GRN_FALSE; } range = grn_ctx_at(ctx, grn_obj_get_range(ctx, obj)); if (!range) { return GRN_FALSE; } switch (range->header.type) { case GRN_TABLE_HASH_KEY: case GRN_TABLE_PAT_KEY: case GRN_TABLE_DAT_KEY: case GRN_TABLE_NO_KEY: return GRN_TRUE; default: return GRN_FALSE; } }