@Test public void testUpdatablesUK() throws Exception { jOOQAbstractTest.reset = false; S store = create().newRecord(TBookStore()); try { store.refresh(); } catch (InvalidResultException expected) {} store.setValue(TBookStore_NAME(), "Rösslitor"); assertEquals(1, store.store()); store = create().fetchOne(TBookStore(), TBookStore_NAME().equal("Rösslitor")); assertEquals("Rösslitor", store.getValue(TBookStore_NAME())); // Updating the main unique key should result in a new record store.setValue(TBookStore_NAME(), "Amazon"); assertEquals(1, store.store()); store = create().fetchOne(TBookStore(), TBookStore_NAME().equal("Amazon")); assertEquals("Amazon", store.getValue(TBookStore_NAME())); // Delete and re-create the store store.delete(); assertEquals("Amazon", store.getValue(TBookStore_NAME())); assertEquals(null, create().fetchOne(TBookStore(), TBookStore_NAME().equal("Amazon"))); switch (getDialect()) { // Sybase ASE and SQL server do not allow for explicitly setting // values on IDENTITY columns case ASE: case SQLSERVER: log.info("SKIPPING", "Storing previously deleted UpdatableRecords"); break; default: store.store(); assertEquals("Amazon", store.getValue(TBookStore_NAME())); store.refresh(); assertEquals("Amazon", store.getValue(TBookStore_NAME())); } store = create().fetchOne(TBookStore(), TBookStore_NAME().equal("Rösslitor")); assertEquals("Rösslitor", store.getValue(TBookStore_NAME())); }
@Test public void testUpdatablesPK() throws Exception { jOOQAbstractTest.reset = false; B book = create().newRecord(TBook()); try { book.refresh(); } catch (InvalidResultException expected) {} // Fetch the original record B book1 = create().fetchOne(TBook(), TBook_TITLE().equal("1984")); // Another copy of the original record B book2 = create().fetchOne(TBook(), TBook_TITLE().equal("1984")); // Immediately store the original record. That shouldn't have any effect assertEquals(0, book1.store()); // Modify and store the original record Integer id = book1.getValue(TBook_ID()); book1.setValue(TBook_TITLE(), "1985"); assertEquals(1, book1.store()); // Fetch the modified record book1 = create().fetchOne(TBook(), TBook_ID().equal(id)); // Modify the record book1.setValue(TBook_TITLE(), "1999"); assertEquals("1999", book1.getValue(TBook_TITLE())); // And refresh it again book1.refresh(); assertEquals("1985", book1.getValue(TBook_TITLE())); assertEquals(0, book1.store()); // Refresh the other copy of the original record assertEquals(id, book2.getValue(TBook_ID())); assertEquals("1984", book2.getValue(TBook_TITLE())); book2.refresh(); assertEquals(id, book1.getValue(TBook_ID())); assertEquals(id, book2.getValue(TBook_ID())); assertEquals("1985", book1.getValue(TBook_TITLE())); assertEquals("1985", book2.getValue(TBook_TITLE())); // No ON DELETE CASCADE constraints for Sybase ASE if (getDialect() == SQLDialect.ASE) { create().truncate(table("t_book_to_book_store")).execute(); } // Delete the modified record assertEquals(1, book1.delete()); assertEquals(0, book1.delete()); assertEquals(0, book2.delete()); // Fetch the remaining records assertEquals(null, create().fetchOne(TBook(), TBook_ID().equal(id))); // Store the record again from memory assertEquals(1, book1.store()); book1.refresh(); book2.refresh(); assertEquals(id, book1.getValue(TBook_ID())); assertEquals(id, book2.getValue(TBook_ID())); assertEquals("1985", book1.getValue(TBook_TITLE())); assertEquals("1985", book2.getValue(TBook_TITLE())); // Copy the records and store them again as another one book1 = book1.copy(); book2 = book2.copy(); assertNull(book1.getValue(TBook_ID())); assertNull(book2.getValue(TBook_ID())); assertEquals("1985", book1.getValue(TBook_TITLE())); assertEquals("1985", book2.getValue(TBook_TITLE())); // Can't store the copies yet, as the primary key is null try { book1.store(); } catch (DataAccessException expected) {} try { book2.store(); } catch (DataAccessException expected) {} book1.setValue(TBook_ID(), 11); book2.setValue(TBook_ID(), 12); assertEquals(1, book1.store()); assertEquals(1, book2.store()); // Refresh the books book1 = create().newRecord(TBook()); book2 = create().newRecord(TBook()); book1.setValue(TBook_ID(), 11); book2.setValue(TBook_ID(), 12); book1.refresh(); book2.refresh(); assertEquals(Integer.valueOf(11), book1.getValue(TBook_ID())); assertEquals(Integer.valueOf(12), book2.getValue(TBook_ID())); assertEquals("1985", book1.getValue(TBook_TITLE())); assertEquals("1985", book2.getValue(TBook_TITLE())); // Store a partial record A author = create().newRecord(TAuthor()); author.setValue(TAuthor_ID(), 77); author.setValue(TAuthor_LAST_NAME(), "Döblin"); assertEquals(1, author.store()); assertEquals(Integer.valueOf(77), create().fetchOne(TAuthor(), TAuthor_LAST_NAME().equal("Döblin")).getValue(TAuthor_ID())); // Store an empty record S store = create().newRecord(TBookStore()); assertEquals(0, store.store()); // [#787] Store the same record twice. author = create().newRecord(TAuthor()); author.setValue(TAuthor_ID(), 78); author.setValue(TAuthor_LAST_NAME(), "Cohen"); assertEquals(1, author.store()); assertEquals(0, author.store()); // No INSERT/UPDATE should be made author.setValue(TAuthor_FIRST_NAME(), "Arthur"); assertEquals(1, author.store()); // This should produce an UPDATE assertEquals(1, create() .select(count()) .from(TAuthor()) .where(TAuthor_FIRST_NAME().equal("Arthur")) .and(TAuthor_LAST_NAME().equal("Cohen")) .fetchOne(0)); // [#945] Set the same value twice author = create().selectFrom(TAuthor()) .where(TAuthor_FIRST_NAME().equal("Arthur")) .fetchOne(); author.setValue(TAuthor_FIRST_NAME(), "Leonard"); author.setValue(TAuthor_FIRST_NAME(), "Leonard"); assertEquals(1, author.store()); assertEquals(1, create() .select(count()) .from(TAuthor()) .where(TAuthor_FIRST_NAME().equal("Leonard")) .and(TAuthor_LAST_NAME().equal("Cohen")) .fetchOne(0)); }