Exemplo n.º 1
0
/*
 * 主キーが _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);
        }
    }
}
Exemplo n.º 2
0
/*
 * 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);
    }
}