ext/groonga/rb-grn-column.c in rroonga-1.0.1 vs ext/groonga/rb-grn-column.c in rroonga-1.0.2

- old
+ new

@@ -550,10 +550,72 @@ id = NUM2UINT(rb_id); return CBOOL2RVAL(grn_obj_is_locked(context, column)); } +/* + * Document-method: reference_column? + * + * call-seq: + * column.reference_column? -> true/false + * + * _column_の値がテーブルのレコードとなる場合は+true+を返し、 + * そうでない場合は+false+を返す。 + */ +static VALUE +rb_grn_column_reference_column_p (VALUE self) +{ + grn_ctx *context; + grn_obj *column; + grn_id range_id; + grn_obj *range; + unsigned short int type; + + rb_grn_column_deconstruct(SELF(self), &column, &context, + NULL, NULL, + NULL, NULL, NULL); + + range_id = grn_obj_get_range(context, column); + range = grn_ctx_at(context, range_id); + type = range->header.type; + grn_obj_unlink(context, range); + switch (type) { + case GRN_TABLE_HASH_KEY: + case GRN_TABLE_PAT_KEY: + case GRN_TABLE_NO_KEY: + return Qtrue; + default: + return Qfalse; + } +} + +/* + * Document-method: index_column? + * + * call-seq: + * column.index_column? -> true/false + * + * _column_がGroonga::IndexColumnの場合は+true+を返し、 + * そうでない場合は+false+を返す。 + */ +static VALUE +rb_grn_column_index_column_p (VALUE self) +{ + grn_ctx *context; + grn_obj *column; + + rb_grn_column_deconstruct(SELF(self), &column, &context, + NULL, NULL, + NULL, NULL, NULL); + + if (column->header.type == GRN_COLUMN_INDEX) { + return Qtrue; + } else { + return Qfalse; + } +} + void rb_grn_init_column (VALUE mGrn) { rb_cGrnColumn = rb_define_class_under(mGrn, "Column", rb_cGrnObject); @@ -564,9 +626,13 @@ rb_define_method(rb_cGrnColumn, "select", rb_grn_column_select, -1); rb_define_method(rb_cGrnColumn, "lock", rb_grn_column_lock, -1); rb_define_method(rb_cGrnColumn, "unlock", rb_grn_column_unlock, -1); rb_define_method(rb_cGrnColumn, "clear_lock", rb_grn_column_clear_lock, -1); rb_define_method(rb_cGrnColumn, "locked?", rb_grn_column_is_locked, -1); + rb_define_method(rb_cGrnColumn, "reference_column?", + rb_grn_column_reference_column_p, 0); + rb_define_method(rb_cGrnColumn, "index_column?", + rb_grn_column_index_column_p, 0); rb_grn_init_fix_size_column(mGrn); rb_grn_init_variable_size_column(mGrn); rb_grn_init_index_column(mGrn); }