From 8fa81b2885d2597cb90e31294595a09ce62ffa44 Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Sun, 25 Mar 2018 18:10:14 -0700 Subject: Fix load by alternate key with Automatic primary key Storables ignore @Automatic properties when checking if the primary key is initialized. This makes sense for insert, because the Repository is responsible for populating the @Automatic property. However, this doesn't work for load--when the @Automatic property is also the primary key-- because it won't attempt to load by alternate key when it must. --- .../carbonado/repo/jdbc/H2SchemaResolver.java | 4 +++ .../com/amazon/carbonado/repo/jdbc/TestH2.java | 31 ++++++++++++++++++++++ 2 files changed, 35 insertions(+) (limited to 'src/test/java/com/amazon/carbonado/repo') diff --git a/src/test/java/com/amazon/carbonado/repo/jdbc/H2SchemaResolver.java b/src/test/java/com/amazon/carbonado/repo/jdbc/H2SchemaResolver.java index 9afeb43..bc82139 100644 --- a/src/test/java/com/amazon/carbonado/repo/jdbc/H2SchemaResolver.java +++ b/src/test/java/com/amazon/carbonado/repo/jdbc/H2SchemaResolver.java @@ -135,6 +135,10 @@ public class H2SchemaResolver implements SchemaResolver { b.append(" NOT NULL"); } + if (property.isAutomatic()) { + b.append(" AUTO_INCREMENT"); + } + if (property.getSequenceName() != null) { sequenceNames.add(property.getSequenceName()); } diff --git a/src/test/java/com/amazon/carbonado/repo/jdbc/TestH2.java b/src/test/java/com/amazon/carbonado/repo/jdbc/TestH2.java index c969838..8f2cfaa 100644 --- a/src/test/java/com/amazon/carbonado/repo/jdbc/TestH2.java +++ b/src/test/java/com/amazon/carbonado/repo/jdbc/TestH2.java @@ -25,6 +25,7 @@ import java.io.*; import java.sql.DriverManager; +import com.amazon.carbonado.stored.AutomaticAndAltKey; import junit.framework.TestSuite; import org.apache.commons.dbcp.BasicDataSource; @@ -77,6 +78,36 @@ public class TestH2 extends com.amazon.carbonado.TestStorables { } } + public void test_automaticProperty() throws Exception { + Storage storage = + getRepository().storageFor(AutomaticAndAltKey.class); + + // Insert some record and expect the ID to be set automatically. + for (int i=1; i <= 5; i++) { + AutomaticAndAltKey record = storage.prepare(); + record.setName("row" + i); + record.insert(); + } + + // Load by primary key + for (int i=1; i <= 5; i++) { + AutomaticAndAltKey record = storage.prepare(); + record.setID(i); + assertTrue(record.tryLoad()); + assertEquals(i, record.getID()); + assertEquals("row" + i, record.getName()); + } + + // Load by alternate key + for (int i=1; i <= 5; i++) { + AutomaticAndAltKey record = storage.prepare(); + record.setName("row" + i); + assertTrue(record.tryLoad()); + assertEquals(i, record.getID()); + assertEquals("row" + i, record.getName()); + } + } + public void test_propertyOther() throws Exception { Storage storage = getRepository().storageFor(WithPropertyOther.class); WithPropertyOther other = storage.prepare(); -- cgit v1.2.3