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);
}