/* * 主キーが _key_ のレコード追加し、追加したレコードを返す。レ * コードの追加に失敗した場合は +nil+ を返す。 * * すでに同じキーのレコードが存在する場合は追加せずに同じレ * コードを返す。追加されたかどうかは * {Groonga::Record#added?} で調べることができる。 +true+ を返 * したら追加されたということを示す。 * * _values_ にはレコードのカラムに設定する値を指定する。省略 * した場合または +nil+ を指定した場合はカラムは設定しない。カ * ラムの値は @{:カラム名1 => 値1, :カラム名2 => 値2, * ...}@ と指定する。 * * @overload add(key, values=nil) * @return [Groonga::Recordまたはnil] */ static VALUE rb_grn_table_key_support_add (int argc, VALUE *argv, VALUE self) { grn_id id; VALUE key, values; int added = GRN_FALSE; rb_scan_args(argc, argv, "11", &key, &values); id = rb_grn_table_key_support_add_raw(self, key, &added); if (GRN_ID_NIL == id) { return Qnil; } else { if (added) { return rb_grn_record_new_added(self, id, values); } else { return rb_grn_record_new(self, id, values); } } }
/* * call-seq: * array.add(values=nil) -> Groonga::Recordまたはnil * * レコード追加し、追加したレコードを返す。レコードの追加に失 * 敗した場合は +nil+ を返す。 * * _values_ にはレコードのカラムに設定する値を指定する。省略 * した場合または +nil+ を指定した場合はカラムは設定しない。カ * ラムの値は<tt>{:カラム名1 => 値1, :カラム名2 => 値2, * ...}</tt>と指定する。 * * @example * #以下のようなユーザを格納するGroonga::Arrayが * #定義されているものとする。 * users = Groonga::Array.create(:name => "Users") * users.define_column("name", "ShortText") * users.define_column("uri", "ShortText") * #ユーザを追加する。 * user = users.add * * #daijiroユーザを追加する。 * daijiro = users.add(:name => "daijiro") * * #gunyara-kunユーザを追加する。 * gunyara_kun = users.add(:name => "gunyara-kun", * :uri => "http://d.hatena.ne.jp/tasukuchan/") */ static VALUE rb_grn_array_add (int argc, VALUE *argv, VALUE self) { grn_ctx *context = NULL; grn_obj *table; grn_id id; VALUE values; rb_scan_args(argc, argv, "01", &values); table = SELF(self, &context); id = grn_table_add(context, table, NULL, 0, NULL); rb_grn_context_check(context, self); if (GRN_ID_NIL == id) { return Qnil; } else { return rb_grn_record_new_added(self, id, values); } }