diff options
author | Fedor Yudanov <fedwiz@academ.org> | 2013-04-04 19:30:39 +0700 |
---|---|---|
committer | Fedor Yudanov <fedwiz@academ.org> | 2013-04-04 19:30:39 +0700 |
commit | 0ae6a4039efebe8991a2394eb6f50789d245595c (patch) | |
tree | 2cb2e6873908dc784300d4a0ff61602ad65ec940 | |
parent | e70404dda9377a9e68a320711364e481d222ff1f (diff) | |
download | ejdb-0ae6a4039efebe8991a2394eb6f50789d245595c.tar.gz ejdb-0ae6a4039efebe8991a2394eb6f50789d245595c.tar.bz2 ejdb-0ae6a4039efebe8991a2394eb6f50789d245595c.zip |
#50 - advanced tests (tests 9)
-rw-r--r-- | rbejdb/src/rbejdb.c | 12 | ||||
-rw-r--r-- | rbejdb/test/t2.rb | 29 |
2 files changed, 40 insertions, 1 deletions
diff --git a/rbejdb/src/rbejdb.c b/rbejdb/src/rbejdb.c index ac8aaa7..1c4f6ab 100644 --- a/rbejdb/src/rbejdb.c +++ b/rbejdb/src/rbejdb.c @@ -163,6 +163,8 @@ VALUE EJDB_save(int argc, VALUE *argv, VALUE self) { VALUE collName = argv[0]; Check_Type(collName, T_STRING); + bool merge = TYPE(argv[argc - 1]) == T_TRUE; + EJDB* ejdb = getEJDB(self); EJCOLL *coll = ejdbcreatecoll(ejdb, StringValuePtr(collName), NULL); @@ -174,6 +176,9 @@ VALUE EJDB_save(int argc, VALUE *argv, VALUE self) { int i; for (i = 1; i < argc; i++) { VALUE rbobj = argv[i]; + + if (merge && i == argc - 1) break; + if (NIL_P(rbobj)) { rb_ary_push(oids, Qnil); continue; @@ -183,7 +188,7 @@ VALUE EJDB_save(int argc, VALUE *argv, VALUE self) { ruby_to_bson(rbobj, &bsonval, 0); bson_oid_t oid; - if (!ejdbsavebson2(coll, bsonval, &oid, true /*TODO read this param*/)) { + if (!ejdbsavebson2(coll, bsonval, &oid, merge)) { bson_destroy(bsonval); raise_ejdb_error(ejdb); } @@ -310,6 +315,10 @@ VALUE EJDB_find_one(int argc, VALUE* argv, VALUE self) { return results; } +VALUE EJDB_update(int argc, VALUE* argv, VALUE self) { + return EJDB_find(argc, argv, self); +} + void EJDB_set_index_internal(VALUE self, VALUE collName, VALUE fpath, int flags) { SafeStringValue(collName); @@ -551,6 +560,7 @@ Init_rbejdb() { rb_define_method(ejdbClass, "load", RUBY_METHOD_FUNC(EJDB_load), 2); rb_define_method(ejdbClass, "find", RUBY_METHOD_FUNC(EJDB_find), -1); rb_define_method(ejdbClass, "find_one", RUBY_METHOD_FUNC(EJDB_find_one), -1); + rb_define_method(ejdbClass, "update", RUBY_METHOD_FUNC(EJDB_update), -1); rb_define_method(ejdbClass, "drop_collection", RUBY_METHOD_FUNC(EJDB_drop_collection), 2); rb_define_method(ejdbClass, "ensure_collection", RUBY_METHOD_FUNC(EJDB_ensure_collection), -1); diff --git a/rbejdb/test/t2.rb b/rbejdb/test/t2.rb index 597923a..d0dc958 100644 --- a/rbejdb/test/t2.rb +++ b/rbejdb/test/t2.rb @@ -263,4 +263,33 @@ class EJDBTestUnit < Test::Unit::TestCase puts "test_ejdb8_cmeta has passed successfull" end + def test_ejdb9_test_update1 + assert_not_nil $jb + assert $jb.is_open? + + result = $jb.update("parrots", {"name" => {"$icase" => "GRENNY"}, "$inc" => {"age" => 10}}, {:explain => true}) + assert_equal(1, result.count) + + log = result.log + assert_not_nil log + assert log.include?("UPDATING MODE: YES") + + obj = $jb.find_one("parrots", {"age" => 11}) + assert_not_nil obj + assert_equal("Grenny", obj["name"]) + + id = $jb.save("parrots", {"_id" => obj["_id"], "extra1" => 1}, true) + assert_not_nil id + + obj = $jb.load("parrots", id) + assert_not_nil obj + assert_equal("Grenny", obj["name"]) + assert_equal(1, obj["extra1"]) + + q = {"_id" => {"$in" => [id]}, "$set" => {"stime" => Time.now}} + result = $jb.update("parrots", q) + assert_equal(1, result.count) + + puts "test_ejdb9_test_update1 has passed successfull" + end end |