package org.nutz.dao.test.normal; import static org.junit.Assert.*; import org.junit.Test; import org.nutz.dao.Chain; import org.nutz.dao.Cnd; import org.nutz.dao.FieldFilter; import org.nutz.dao.test.DaoCase; import org.nutz.dao.test.meta.BeanWithDefault; import org.nutz.dao.test.meta.Fighter; import org.nutz.dao.test.meta.Pet; import org.nutz.dao.test.meta.Platoon; import org.nutz.lang.Lang; import org.nutz.trans.Atom; public class UpdateTest extends DaoCase { /** * For issue #557 */ @Test public void test_update_ignore_null() { dao.create(Pet.class, true); final Pet pet = Pet.create("XiaoBai").setAge(20); dao.insert(pet); FieldFilter.create(Pet.class, true).run(new Atom() { public void run() { Pet p1 = new Pet().setAge(12).setId(pet.getId()); dao.update(p1); } }); Pet p2 = dao.fetch(Pet.class, pet.getId()); assertEquals("XiaoBai", p2.getName()); } /** * For issue #84 */ @Test public void test_updateIgnoreNull_width_default() { dao.create(BeanWithDefault.class, true); BeanWithDefault bean = new BeanWithDefault(); bean.setName("abc"); dao.insert(bean); BeanWithDefault b2 = dao.fetch(BeanWithDefault.class); assertEquals("--", b2.getAlias()); b2.setAlias("AAA"); dao.update(b2); b2 = dao.fetch(BeanWithDefault.class, "abc"); assertEquals("AAA", b2.getAlias()); b2.setAlias(null); dao.updateIgnoreNull(b2); b2 = dao.fetch(BeanWithDefault.class, "abc"); assertEquals("AAA", b2.getAlias()); } @Test public void test_update_chain_and_cnd_by_in() { dao.create(Pet.class, true); Pet pet = Pet.create("xb"); pet.setNickName("XB"); dao.insert(pet); dao.update(Pet.class, Chain.make("name", "xiaobai"), Cnd.where("nickName", "in", Lang.array("XB"))); pet = dao.fetch(Pet.class, "xiaobai"); assertEquals("XB", pet.getNickName()); } @Test public void test_update_chain_and_cnd() { dao.create(Pet.class, true); Pet pet = Pet.create("xb"); pet.setNickName("XB"); dao.insert(pet); dao.update(Pet.class, Chain.make("name", "xiaobai"), Cnd.where("nickName", "=", "XB")); pet = dao.fetch(Pet.class, "xiaobai"); assertEquals("XB", pet.getNickName()); } @Test public void batch_update_all() { pojos.initData(); dao.update(Fighter.class, Chain.make("type", Fighter.TYPE.SU_35.name()), null); assertEquals(13, dao.count(Fighter.class, Cnd.where("type", "=", Fighter.TYPE.SU_35.name()))); } @Test public void batch_update_partly() { pojos.initData(); int re = dao.update(Fighter.class, Chain.make("type", "F15"), Cnd.where("type", "=", "SU_35")); assertEquals(1, re); int maxId = dao.getMaxId(Fighter.class); re = dao.update(Fighter.class, Chain.make("type", "UFO"), Cnd.where("id", ">", maxId - 5)); assertEquals(5, re); assertEquals(re, dao.count(Fighter.class, Cnd.where("type", "=", "UFO"))); } @Test public void batch_update_relation() { pojos.initData(); dao.updateRelation(Fighter.class, "base", Chain.make("bname", "blue"), Cnd.where("bname", "=", "red")); assertEquals(13, dao.count("dao_m_base_fighter", Cnd.where("bname", "=", "blue"))); } @Test public void fetch_by_name_ignorecase() { pojos.initData(); Platoon p = dao.fetch(Platoon.class, "sF"); assertEquals("SF", p.getName()); } @Test public void test_update_obj_with_readonly_field() { dao.create(Plant.class, true); Plant p = new Plant(); p.setNumber(100); p.setColor("red"); p.setName("Rose"); dao.insert(p); p = dao.fetch(Plant.class, "Rose"); assertNull(p.getColor()); assertEquals(100, p.getNumber()); p.setColor("black"); p.setNumber(88); dao.update(p); p = dao.fetch(Plant.class, "Rose"); assertNull(p.getColor()); assertEquals(88, p.getNumber()); } @Test public void update_with_null_links() { pojos.initData(); Platoon p = dao.fetch(Platoon.class, "sF"); p.setLeaderName("xyz"); dao.updateWith(p, null); p = dao.fetch(Platoon.class, "sF"); assertEquals("xyz", p.getLeaderName()); } @Test public void test_updateIgnoreNull() { pojos.initData(); Platoon p = dao.fetch(Platoon.class, "sF"); p.setLeaderName("xyz"); dao.update(p); p = dao.fetch(Platoon.class, "sF"); String name = p.getLeaderName(); // xyz assertNotNull(name); p.setLeaderName(null); int re = dao.updateIgnoreNull(p); assertEquals(1, re); p = dao.fetch(Platoon.class, "sF"); assertEquals(name, p.getLeaderName()); p.setLeaderName(null); dao.update(p); p = dao.fetch(Platoon.class, "sF"); assertNull(p.getLeaderName()); p.setLeaderName("ABC"); dao.update(p); p = dao.fetch(Platoon.class, "sF"); assertEquals("ABC", p.getLeaderName()); FieldFilter.create(Platoon.class, true).run(new Atom() { public void run() { System.out.println(FieldFilter.get(Platoon.class)); Platoon p = dao.fetch(Platoon.class, "sF"); p.setLeaderName(null); dao.update(p); } }); p = dao.fetch(Platoon.class, "sF"); assertEquals("ABC", p.getLeaderName()); } @Test public void test_updateIgnoreNull_by_list() { pojos.initData(); Platoon p = dao.fetch(Platoon.class, "sF"); p.setLeaderName("xyz"); dao.update(p); p = dao.fetch(Platoon.class, "sF"); String name = p.getLeaderName(); // xyz assertNotNull(name); p.setLeaderName(null); int re = dao.updateIgnoreNull(Lang.list(p)); assertEquals(1, re); p = dao.fetch(Platoon.class, "sF"); assertEquals(name, p.getLeaderName()); p.setLeaderName(null); dao.update(p); p = dao.fetch(Platoon.class, "sF"); assertNull(p.getLeaderName()); } @Test public void test_update_self_plus() { dao.create(Pet.class, true); Pet pet = Pet.create("Xy"); pet.setAge(98); dao.insert(pet); pet = dao.fetch(Pet.class, (Cnd) null); dao.update(Pet.class, Chain.makeSpecial("age", "+1"), null); assertEquals(pet.getAge() + 1, dao.fetch(Pet.class, pet.getId()) .getAge()); } @Test public void testZZ() { } }