/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002, 2015 Oracle and/or its affiliates. All rights reserved. * */ package com.sleepycat.persist.test; import static org.junit.Assert.assertEquals; import java.io.File; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.sleepycat.db.Environment; import com.sleepycat.db.EnvironmentConfig; import com.sleepycat.db.util.DualTestCase; import com.sleepycat.persist.EntityStore; import com.sleepycat.persist.PrimaryIndex; import com.sleepycat.persist.StoreConfig; import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.KeyField; import com.sleepycat.persist.model.Persistent; import com.sleepycat.persist.model.PrimaryKey; import com.sleepycat.util.test.SharedTestUtils; import com.sleepycat.util.test.TestEnv; /** * @author Mark Hayes */ public class SequenceTest extends DualTestCase { private File envHome; private Environment env; @Before public void setUp() throws Exception { super.setUp(); envHome = SharedTestUtils.getTestDir(); } @After public void tearDown() throws Exception { super.tearDown(); envHome = null; env = null; } @Test public void testSequenceKeys() throws Exception { Class[] classes = { SequenceEntity_Long.class, SequenceEntity_Integer.class, SequenceEntity_Short.class, SequenceEntity_Byte.class, SequenceEntity_tlong.class, SequenceEntity_tint.class, SequenceEntity_tshort.class, SequenceEntity_tbyte.class, SequenceEntity_Long_composite.class, SequenceEntity_Integer_composite.class, SequenceEntity_Short_composite.class, SequenceEntity_Byte_composite.class, SequenceEntity_tlong_composite.class, SequenceEntity_tint_composite.class, SequenceEntity_tshort_composite.class, SequenceEntity_tbyte_composite.class, }; EnvironmentConfig envConfig = TestEnv.TXN.getConfig(); envConfig.setAllowCreate(true); env = create(envHome, envConfig); StoreConfig storeConfig = new StoreConfig(); storeConfig.setAllowCreate(true); storeConfig.setTransactional(true); EntityStore store = new EntityStore(env, "foo", storeConfig); long seq = 0; for (int i = 0; i < classes.length; i += 1) { Class entityCls = classes[i]; SequenceEntity entity = (SequenceEntity) entityCls.newInstance(); Class keyCls = entity.getKeyClass(); PrimaryIndex<Object, SequenceEntity> index = store.getPrimaryIndex(keyCls, entityCls); index.putNoReturn(entity); seq += 1; assertEquals(seq, entity.getKey()); index.putNoReturn(entity); assertEquals(seq, entity.getKey()); entity.nullifyKey(); index.putNoReturn(entity); seq += 1; assertEquals(seq, entity.getKey()); } store.close(); close(env); env = null; } interface SequenceEntity { Class getKeyClass(); long getKey(); void nullifyKey(); } @Entity static class SequenceEntity_Long implements SequenceEntity { @PrimaryKey(sequence="X") Long priKey; public Class getKeyClass() { return Long.class; } public long getKey() { return priKey; } public void nullifyKey() { priKey = null; } } @Entity static class SequenceEntity_Integer implements SequenceEntity { @PrimaryKey(sequence="X") Integer priKey; public Class getKeyClass() { return Integer.class; } public long getKey() { return priKey; } public void nullifyKey() { priKey = null; } } @Entity static class SequenceEntity_Short implements SequenceEntity { @PrimaryKey(sequence="X") Short priKey; public Class getKeyClass() { return Short.class; } public long getKey() { return priKey; } public void nullifyKey() { priKey = null; } } @Entity static class SequenceEntity_Byte implements SequenceEntity { @PrimaryKey(sequence="X") Byte priKey; public Class getKeyClass() { return Byte.class; } public long getKey() { return priKey; } public void nullifyKey() { priKey = null; } } @Entity static class SequenceEntity_tlong implements SequenceEntity { @PrimaryKey(sequence="X") long priKey; public Class getKeyClass() { return Long.class; } public long getKey() { return priKey; } public void nullifyKey() { priKey = 0; } } @Entity static class SequenceEntity_tint implements SequenceEntity { @PrimaryKey(sequence="X") int priKey; public Class getKeyClass() { return Integer.class; } public long getKey() { return priKey; } public void nullifyKey() { priKey = 0; } } @Entity static class SequenceEntity_tshort implements SequenceEntity { @PrimaryKey(sequence="X") short priKey; public Class getKeyClass() { return Short.class; } public long getKey() { return priKey; } public void nullifyKey() { priKey = 0; } } @Entity static class SequenceEntity_tbyte implements SequenceEntity { @PrimaryKey(sequence="X") byte priKey; public Class getKeyClass() { return Byte.class; } public long getKey() { return priKey; } public void nullifyKey() { priKey = 0; } } @Entity static class SequenceEntity_Long_composite implements SequenceEntity { @PrimaryKey(sequence="X") Key priKey; @Persistent static class Key { @KeyField(1) Long priKey; } public Class getKeyClass() { return Key.class; } public long getKey() { return priKey.priKey; } public void nullifyKey() { priKey = null; } } @Entity static class SequenceEntity_Integer_composite implements SequenceEntity { @PrimaryKey(sequence="X") Key priKey; @Persistent static class Key { @KeyField(1) Integer priKey; } public Class getKeyClass() { return Key.class; } public long getKey() { return priKey.priKey; } public void nullifyKey() { priKey = null; } } @Entity static class SequenceEntity_Short_composite implements SequenceEntity { @PrimaryKey(sequence="X") Key priKey; @Persistent static class Key { @KeyField(1) Short priKey; } public Class getKeyClass() { return Key.class; } public long getKey() { return priKey.priKey; } public void nullifyKey() { priKey = null; } } @Entity static class SequenceEntity_Byte_composite implements SequenceEntity { @PrimaryKey(sequence="X") Key priKey; @Persistent static class Key { @KeyField(1) Byte priKey; } public Class getKeyClass() { return Key.class; } public long getKey() { return priKey.priKey; } public void nullifyKey() { priKey = null; } } @Entity static class SequenceEntity_tlong_composite implements SequenceEntity { @PrimaryKey(sequence="X") Key priKey; @Persistent static class Key { @KeyField(1) long priKey; } public Class getKeyClass() { return Key.class; } public long getKey() { return priKey.priKey; } public void nullifyKey() { priKey = null; } } @Entity static class SequenceEntity_tint_composite implements SequenceEntity { @PrimaryKey(sequence="X") Key priKey; @Persistent static class Key { @KeyField(1) int priKey; } public Class getKeyClass() { return Key.class; } public long getKey() { return priKey.priKey; } public void nullifyKey() { priKey = null; } } @Entity static class SequenceEntity_tshort_composite implements SequenceEntity { @PrimaryKey(sequence="X") Key priKey; @Persistent static class Key { @KeyField(1) short priKey; } public Class getKeyClass() { return Key.class; } public long getKey() { return priKey.priKey; } public void nullifyKey() { priKey = null; } } @Entity static class SequenceEntity_tbyte_composite implements SequenceEntity { @PrimaryKey(sequence="X") Key priKey; @Persistent static class Key { @KeyField(1) byte priKey; } public Class getKeyClass() { return Key.class; } public long getKey() { return priKey.priKey; } public void nullifyKey() { priKey = null; } } }