From f051acf3f6766d8921ba70e5705458cf5139b7bd Mon Sep 17 00:00:00 2001 From: Dean Hiller Date: Thu, 26 Jul 2012 08:58:15 -0600 Subject: [PATCH] adding support for BigDecimal/BigInteger storage mechanism and also saving the meta data now and have a test for that --- bldfiles/configDesign.xml | 4 +- .../orm/api/base/AbstractBootstrap.java | 14 +++-- .../orm/api/base/NoSqlEntityManager.java | 2 + .../api/base/NoSqlEntityManagerFactory.java | 19 +------ .../orm/api/spi/db/NoSqlRawSession.java | 2 +- .../orm/api/spi/layer2/DboDatabaseMeta.java | 6 ++- .../orm/api/spi/layer2/DboTableMeta.java | 4 ++ .../orm/api/spi/layer2/NoSqlSession.java | 2 + .../alvazan/orm/impl/bindings/Bootstrap.java | 10 +++- .../orm/layer1/base/AutoCreateEnum.java | 28 ++++++++++ .../base/BaseEntityManagerFactoryImpl.java | 51 +++++++++++++++++-- .../layer1/base/BaseEntityManagerImpl.java | 1 + .../nosql/cache/NoSqlReadCacheImpl.java | 5 ++ .../nosql/cache/NoSqlWriteCacheImpl.java | 8 ++- .../spi/db/cassandra/CassandraSession.java | 45 +++++++++++----- .../layer3/spi/db/hadoop/HadoopSession.java | 2 +- .../spi/db/inmemory/InMemorySession.java | 2 +- .../com/alvazan/test/FactorySingleton.java | 8 ++- .../com/alvazan/test/TestAdHocTool.java | 15 ++++++ .../com/alvazan/test/TestColumnSlice.java | 13 +++-- 20 files changed, 188 insertions(+), 53 deletions(-) create mode 100644 input/javasrc/com/alvazan/orm/layer1/base/AutoCreateEnum.java diff --git a/bldfiles/configDesign.xml b/bldfiles/configDesign.xml index c6a0ad7c..18c8f7bf 100755 --- a/bldfiles/configDesign.xml +++ b/bldfiles/configDesign.xml @@ -79,7 +79,9 @@ - RawNoSqlSpi + RawNoSqlSpi + api + NoSqlApi astyanax diff --git a/input/javasrc/com/alvazan/orm/api/base/AbstractBootstrap.java b/input/javasrc/com/alvazan/orm/api/base/AbstractBootstrap.java index 53920f8b..989fcdc0 100755 --- a/input/javasrc/com/alvazan/orm/api/base/AbstractBootstrap.java +++ b/input/javasrc/com/alvazan/orm/api/base/AbstractBootstrap.java @@ -2,18 +2,22 @@ import java.util.Map; +import com.alvazan.orm.api.spi.layer2.Converter; +@SuppressWarnings("rawtypes") public abstract class AbstractBootstrap { - public synchronized static NoSqlEntityManagerFactory create(DbTypeEnum type, Map properties) { - return create(type, "com.alvazan.orm.impl.bindings.Bootstrap", properties); + public synchronized static NoSqlEntityManagerFactory create(DbTypeEnum type, Map properties, Map converters) { + return create(type, "com.alvazan.orm.impl.bindings.Bootstrap", properties, converters); } - public synchronized static NoSqlEntityManagerFactory create(DbTypeEnum type, String impl, Map properties) { + public synchronized static NoSqlEntityManagerFactory create(DbTypeEnum type, String impl, Map properties, Map converters) { try { Class clazz = Class.forName(impl); AbstractBootstrap newInstance = (AbstractBootstrap) clazz.newInstance(); - return newInstance.createInstance(type, properties); + NoSqlEntityManagerFactory inst = newInstance.createInstance(type, properties, converters); + + return inst; } catch (ClassNotFoundException e) { throw new RuntimeException(e); } catch (InstantiationException e) { @@ -23,6 +27,6 @@ public synchronized static NoSqlEntityManagerFactory create(DbTypeEnum type, Str } } - protected abstract NoSqlEntityManagerFactory createInstance(DbTypeEnum type, Map properties); + protected abstract NoSqlEntityManagerFactory createInstance(DbTypeEnum type, Map properties, Map converters); } diff --git a/input/javasrc/com/alvazan/orm/api/base/NoSqlEntityManager.java b/input/javasrc/com/alvazan/orm/api/base/NoSqlEntityManager.java index ec174dab..b1e2c905 100755 --- a/input/javasrc/com/alvazan/orm/api/base/NoSqlEntityManager.java +++ b/input/javasrc/com/alvazan/orm/api/base/NoSqlEntityManager.java @@ -9,6 +9,8 @@ @ImplementedBy(BaseEntityManagerImpl.class) public interface NoSqlEntityManager { + public static final String META_DB_KEY = "nosqlorm"; + /** * Retrieve underlying interface to write raw columns to. This works the same as the NoSqlEntityManager * in that you must call flush to execute all the calls to persist. diff --git a/input/javasrc/com/alvazan/orm/api/base/NoSqlEntityManagerFactory.java b/input/javasrc/com/alvazan/orm/api/base/NoSqlEntityManagerFactory.java index c1fc967f..17a0b130 100755 --- a/input/javasrc/com/alvazan/orm/api/base/NoSqlEntityManagerFactory.java +++ b/input/javasrc/com/alvazan/orm/api/base/NoSqlEntityManagerFactory.java @@ -1,27 +1,12 @@ package com.alvazan.orm.api.base; -import java.util.Map; - -import com.alvazan.orm.api.spi.layer2.Converter; import com.alvazan.orm.layer1.base.BaseEntityManagerFactoryImpl; import com.google.inject.ImplementedBy; @ImplementedBy(BaseEntityManagerFactoryImpl.class) public interface NoSqlEntityManagerFactory { - /** - * setup scans all classes in a folder or jar with the class nosql.Persistence. EVERY - * jar or folder with that class is scanned not just the first one on the classpath!!! - * are specified, it scans only the jars with those packages. The converters is - * a Map of converters you can supply. When a field is found, we first check - * if the field has it's own converter then check this Map below for converters - * then we check in the standard converters Map which has converters for all - * primitives, etc. etc. - * - * @param converters - * @param packages - */ - @SuppressWarnings("rawtypes") - public void setup(Map converters); + + public String AUTO_CREATE_KEY = "autoCreateKey"; public NoSqlEntityManager createEntityManager(); diff --git a/input/javasrc/com/alvazan/orm/api/spi/db/NoSqlRawSession.java b/input/javasrc/com/alvazan/orm/api/spi/db/NoSqlRawSession.java index c8cfd216..56b2b9be 100755 --- a/input/javasrc/com/alvazan/orm/api/spi/db/NoSqlRawSession.java +++ b/input/javasrc/com/alvazan/orm/api/spi/db/NoSqlRawSession.java @@ -21,7 +21,7 @@ public interface NoSqlRawSession { * in the order we are given here * @param actions */ - public void sendChanges(List actions); + public void sendChanges(List actions, Object session); public void clearDatabaseIfInMemoryType(); diff --git a/input/javasrc/com/alvazan/orm/api/spi/layer2/DboDatabaseMeta.java b/input/javasrc/com/alvazan/orm/api/spi/layer2/DboDatabaseMeta.java index c8cfdf7f..c2d70cf2 100755 --- a/input/javasrc/com/alvazan/orm/api/spi/layer2/DboDatabaseMeta.java +++ b/input/javasrc/com/alvazan/orm/api/spi/layer2/DboDatabaseMeta.java @@ -1,5 +1,6 @@ package com.alvazan.orm.api.spi.layer2; +import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -7,7 +8,7 @@ import com.alvazan.orm.api.base.anno.NoSqlEntity; import com.alvazan.orm.api.base.anno.OneToMany; -@NoSqlEntity +@NoSqlEntity() public class DboDatabaseMeta { @Id(usegenerator=false) @@ -32,4 +33,7 @@ public DboTableMeta getMeta(String tableName) { return colFamilyToMeta.get(tableName); } + public Collection getAllTables() { + return colFamilyToMeta.values(); + } } diff --git a/input/javasrc/com/alvazan/orm/api/spi/layer2/DboTableMeta.java b/input/javasrc/com/alvazan/orm/api/spi/layer2/DboTableMeta.java index 17836011..30d63d59 100755 --- a/input/javasrc/com/alvazan/orm/api/spi/layer2/DboTableMeta.java +++ b/input/javasrc/com/alvazan/orm/api/spi/layer2/DboTableMeta.java @@ -1,5 +1,6 @@ package com.alvazan.orm.api.spi.layer2; +import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -80,4 +81,7 @@ public void setForeignKeyToExtensions(String foreignKeyToExtensions) { this.foreignKeyToExtensions = foreignKeyToExtensions; } + public Collection getAllColumns() { + return nameToField.values(); + } } \ No newline at end of file diff --git a/input/javasrc/com/alvazan/orm/api/spi/layer2/NoSqlSession.java b/input/javasrc/com/alvazan/orm/api/spi/layer2/NoSqlSession.java index 406f68d7..cd2acaef 100755 --- a/input/javasrc/com/alvazan/orm/api/spi/layer2/NoSqlSession.java +++ b/input/javasrc/com/alvazan/orm/api/spi/layer2/NoSqlSession.java @@ -76,4 +76,6 @@ public interface NoSqlSession { public Iterable columnRangeScan(String colFamily, byte[] rowKey, byte[] from, byte[] to, int batchSize); + public void setOrmSessionForMeta(Object session); + } diff --git a/input/javasrc/com/alvazan/orm/impl/bindings/Bootstrap.java b/input/javasrc/com/alvazan/orm/impl/bindings/Bootstrap.java index 319a7a0e..def2bce2 100755 --- a/input/javasrc/com/alvazan/orm/impl/bindings/Bootstrap.java +++ b/input/javasrc/com/alvazan/orm/impl/bindings/Bootstrap.java @@ -6,6 +6,7 @@ import com.alvazan.orm.api.base.DbTypeEnum; import com.alvazan.orm.api.base.NoSqlEntityManagerFactory; import com.alvazan.orm.api.spi.db.NoSqlRawSession; +import com.alvazan.orm.api.spi.layer2.Converter; import com.alvazan.orm.api.spi.layer2.DboDatabaseMeta; import com.alvazan.orm.api.spi.layer2.NoSqlSessionFactory; import com.alvazan.orm.layer1.base.BaseEntityManagerFactoryImpl; @@ -14,8 +15,9 @@ public class Bootstrap extends AbstractBootstrap { + @SuppressWarnings("rawtypes") @Override - public NoSqlEntityManagerFactory createInstance(DbTypeEnum type, Map properties) { + public NoSqlEntityManagerFactory createInstance(DbTypeEnum type, Map properties, Map converters) { Injector injector = Guice.createInjector(new ProductionBindings(type)); NoSqlEntityManagerFactory factory = injector.getInstance(NoSqlEntityManagerFactory.class); @@ -24,7 +26,11 @@ public NoSqlEntityManagerFactory createInstance(DbTypeEnum type, Map mapping = new HashMap(); + static { + for(AutoCreateEnum a : AutoCreateEnum.values()) { + mapping.put(a.getValue(), a); + } + } + + private String value; + private AutoCreateEnum(String val) { + this.value = val; + } + + public String getValue() { + return value; + } + + public static AutoCreateEnum translate(String val) { + return mapping.get(val); + } +} diff --git a/input/javasrc/com/alvazan/orm/layer1/base/BaseEntityManagerFactoryImpl.java b/input/javasrc/com/alvazan/orm/layer1/base/BaseEntityManagerFactoryImpl.java index a1c409f7..13e72ad8 100755 --- a/input/javasrc/com/alvazan/orm/layer1/base/BaseEntityManagerFactoryImpl.java +++ b/input/javasrc/com/alvazan/orm/layer1/base/BaseEntityManagerFactoryImpl.java @@ -18,6 +18,9 @@ import com.alvazan.orm.api.base.anno.NoSqlQueries; import com.alvazan.orm.api.base.anno.NoSqlQuery; import com.alvazan.orm.api.spi.layer2.Converter; +import com.alvazan.orm.api.spi.layer2.DboColumnMeta; +import com.alvazan.orm.api.spi.layer2.DboDatabaseMeta; +import com.alvazan.orm.api.spi.layer2.DboTableMeta; import com.alvazan.orm.api.spi.layer2.MetaQuery; import com.alvazan.orm.api.spi.layer2.NoSqlSessionFactory; import com.alvazan.orm.impl.meta.data.MetaClass; @@ -43,7 +46,9 @@ public class BaseEntityManagerFactoryImpl implements NoSqlEntityManagerFactory { private boolean isScanned; @Inject private MetaInfo metaInfo; - + @Inject + private DboDatabaseMeta databaseInfo; + private Object injector; @Override @@ -54,11 +59,17 @@ public NoSqlEntityManager createEntityManager() { } @SuppressWarnings("rawtypes") - @Override - public void setup(Map converters) { + public void setup(Map properties, Map converters) { if(isScanned) throw new IllegalStateException("scanForEntities can only be called once"); + String val = properties.get(NoSqlEntityManagerFactory.AUTO_CREATE_KEY); + if(val == null) + throw new IllegalArgumentException("Must provide property with key NoSqlEntityManagerFactory.AUTO_CREATE_KEY so we know to update or validate existing schema"); + AutoCreateEnum autoCreate = AutoCreateEnum.translate(val); + if(autoCreate == null) + throw new IllegalArgumentException("Property NoSqlEntityManagerFactory.AUTO_CREATE_KEY can only have values validate,update, or create"); + inspectorField.setCustomConverters(converters); log.info("Begin scanning for jars with nosql.Persistence.class"); @@ -84,8 +95,40 @@ public void setup(Map converters) { setupQueryStuff(meta); } - log.info("Finished scanning classes"); + log.info("Finished scanning classes, saving meta data"); isScanned = true; + + if(AutoCreateEnum.CREATE_ONLY != autoCreate) + throw new UnsupportedOperationException("not implemented yet"); + + + NoSqlEntityManager tempMgr = createEntityManager(); + + saveMetaData(tempMgr); + + tempMgr.flush(); + log.info("Finished saving meta data, complelety done initializing"); + } + + private void saveMetaData(NoSqlEntityManager tempMgr) { + DboDatabaseMeta existing = tempMgr.find(DboDatabaseMeta.class, NoSqlEntityManager.META_DB_KEY); + if(existing != null) + throw new IllegalStateException("Your property NoSqlEntityManagerFactory.AUTO_CREATE_KEY which only creates meta data if none exist already but meta already exists"); + + for(DboTableMeta table : databaseInfo.getAllTables()) { + + for(DboColumnMeta col : table.getAllColumns()) { + tempMgr.put(col); + } + + tempMgr.put(table.getIdColumnMeta()); + + tempMgr.put(table); + } + + databaseInfo.setId(NoSqlEntityManager.META_DB_KEY); + + tempMgr.put(databaseInfo); } @SuppressWarnings({ "unchecked", "rawtypes" }) diff --git a/input/javasrc/com/alvazan/orm/layer1/base/BaseEntityManagerImpl.java b/input/javasrc/com/alvazan/orm/layer1/base/BaseEntityManagerImpl.java index 81d7ef14..09a21ab5 100755 --- a/input/javasrc/com/alvazan/orm/layer1/base/BaseEntityManagerImpl.java +++ b/input/javasrc/com/alvazan/orm/layer1/base/BaseEntityManagerImpl.java @@ -117,6 +117,7 @@ public T getReference(Class entityType, Object key) { @Override public NoSqlSession getSession() { + session.setOrmSessionForMeta(this); return session; } diff --git a/input/javasrc/com/alvazan/orm/layer2/nosql/cache/NoSqlReadCacheImpl.java b/input/javasrc/com/alvazan/orm/layer2/nosql/cache/NoSqlReadCacheImpl.java index 6c855716..baf00299 100755 --- a/input/javasrc/com/alvazan/orm/layer2/nosql/cache/NoSqlReadCacheImpl.java +++ b/input/javasrc/com/alvazan/orm/layer2/nosql/cache/NoSqlReadCacheImpl.java @@ -84,5 +84,10 @@ public Iterable columnRangeScan(String colFamily, byte[] rowKey, return session.columnRangeScan(colFamily, rowKey, from, to, batchSize); } + @Override + public void setOrmSessionForMeta(Object ormSession) { + session.setOrmSessionForMeta(ormSession); + } + } diff --git a/input/javasrc/com/alvazan/orm/layer2/nosql/cache/NoSqlWriteCacheImpl.java b/input/javasrc/com/alvazan/orm/layer2/nosql/cache/NoSqlWriteCacheImpl.java index b198206b..d3870da3 100755 --- a/input/javasrc/com/alvazan/orm/layer2/nosql/cache/NoSqlWriteCacheImpl.java +++ b/input/javasrc/com/alvazan/orm/layer2/nosql/cache/NoSqlWriteCacheImpl.java @@ -29,6 +29,7 @@ public class NoSqlWriteCacheImpl implements NoSqlSession { private Map> removeFromIndex = new HashMap>(); private List actions = new ArrayList(); private Map> addToIndex = new HashMap>(); + private Object ormSession; @Override public void persist(String colFamily, byte[] rowKey, List columns) { @@ -73,7 +74,7 @@ public void flush() { //REMOVE from index BEFORE removing the entity. ie. If we do the reverse, you do a query and get //an id of entity that is about to be removed and if removed before you, you don't get the entity indexWriter.sendRemoves(removeFromIndex); - rawSession.sendChanges(actions); + rawSession.sendChanges(actions, ormSession); indexWriter.sendAdds(addToIndex); } @@ -151,4 +152,9 @@ public Iterable columnRangeScan(String colFamily, byte[] rowKey, return rawSession.columnRangeScan(colFamily, rowKey, from, to, batchSize); } + @Override + public void setOrmSessionForMeta(Object session) { + this.ormSession = session; + } + } diff --git a/input/javasrc/com/alvazan/orm/layer3/spi/db/cassandra/CassandraSession.java b/input/javasrc/com/alvazan/orm/layer3/spi/db/cassandra/CassandraSession.java index 60bac4ba..01f8a0e9 100755 --- a/input/javasrc/com/alvazan/orm/layer3/spi/db/cassandra/CassandraSession.java +++ b/input/javasrc/com/alvazan/orm/layer3/spi/db/cassandra/CassandraSession.java @@ -10,12 +10,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.alvazan.orm.api.base.NoSqlEntityManager; import com.alvazan.orm.api.spi.db.Action; import com.alvazan.orm.api.spi.db.Column; import com.alvazan.orm.api.spi.db.NoSqlRawSession; import com.alvazan.orm.api.spi.db.Persist; import com.alvazan.orm.api.spi.db.Remove; import com.alvazan.orm.api.spi.db.Row; +import com.alvazan.orm.api.spi.layer2.DboDatabaseMeta; +import com.alvazan.orm.api.spi.layer2.DboTableMeta; import com.netflix.astyanax.AstyanaxContext; import com.netflix.astyanax.AstyanaxContext.Builder; import com.netflix.astyanax.Cluster; @@ -114,7 +117,7 @@ public List findImpl(String colFamily, List keys) throws Connection return createEmptyList(keys); } - ColumnFamily cf = lookupOrCreate(colFamily); + ColumnFamily cf = lookupOrCreate(colFamily, null); ColumnFamilyQuery query = keyspace.prepareQuery(cf); RowSliceQuery slice = query.getKeySlice(keys); OperationResult> result = slice.execute(); @@ -165,17 +168,17 @@ private void processColumns( } @Override - public void sendChanges(List actions) { + public void sendChanges(List actions, Object ormSession) { try { - sendChangesImpl(actions); + sendChangesImpl(actions, (NoSqlEntityManager) ormSession); } catch (ConnectionException e) { throw new RuntimeException(e); } } - public void sendChangesImpl(List actions) throws ConnectionException { + public void sendChangesImpl(List actions, NoSqlEntityManager mgr) throws ConnectionException { MutationBatch m = keyspace.prepareMutationBatch(); for(Action action : actions) { - ColumnFamily cf = lookupOrCreate(action.getColFamily()); + ColumnFamily cf = lookupOrCreate(action.getColFamily(), mgr); if(action instanceof Persist) { persist((Persist)action, cf, m); @@ -187,17 +190,35 @@ public void sendChangesImpl(List actions) throws ConnectionException { m.execute(); } - private ColumnFamily lookupOrCreate(String colFamily) throws ConnectionException { + private ColumnFamily lookupOrCreate(String colFamily, NoSqlEntityManager mgr) throws ConnectionException { if(!existingColumnFamilies.contains(colFamily)) { log.info("CREATING column family="+colFamily+" in cassandra"); - cluster.addColumnFamily(cluster.makeColumnFamilyDefinition() + + DboDatabaseMeta db = mgr.find(DboDatabaseMeta.class, NoSqlEntityManager.META_DB_KEY); + DboTableMeta cf = db.getMeta(colFamily); + Class columnNameType = cf.getColumnNameType(); + + ColumnFamilyDefinition def = cluster.makeColumnFamilyDefinition() .setName(colFamily) - .setKeyspace(keyspace.getKeyspaceName()) - ); + .setKeyspace(keyspace.getKeyspaceName()); + + if(String.class.equals(columnNameType)) + def = def.setComparatorType("UTF8Type"); + else if(Integer.class.equals(columnNameType) + || Long.class.equals(columnNameType) + || Short.class.equals(columnNameType) + || Byte.class.equals(columnNameType)) + def = def.setComparatorType("IntegerType"); + else if(Float.class.equals(columnNameType) + || Double.class.equals(columnNameType)) + def = def.setComparatorType("DecimalType"); + else + throw new UnsupportedOperationException("Not supported yet, we need a BigDecimal comparator type here for sure"); + + cluster.addColumnFamily(def); existingColumnFamilies.add(colFamily); } - //should we cache this and just look it up each time or is KISS fine for now.... ColumnFamily cf = new ColumnFamily(colFamily, BytesArraySerializer.get(), BytesArraySerializer.get()); return cf; @@ -250,7 +271,7 @@ public void clearDatabaseIfInMemoryType() { } public void clearImpl() throws ConnectionException { for(String cf : existingColumnFamilies) { - ColumnFamily colFamily = lookupOrCreate(cf); + ColumnFamily colFamily = lookupOrCreate(cf, null); keyspace.truncateColumnFamily(colFamily); } } @@ -273,7 +294,7 @@ public Iterable columnSliceImpl(String colFamily, byte[] rowKey, return new ArrayList(); } - ColumnFamily cf = lookupOrCreate(colFamily); + ColumnFamily cf = lookupOrCreate(colFamily, null); ByteBufferRange build = new RangeBuilder().setStart(from).setEnd(to).setLimit(batchSize).build(); diff --git a/input/javasrc/com/alvazan/orm/layer3/spi/db/hadoop/HadoopSession.java b/input/javasrc/com/alvazan/orm/layer3/spi/db/hadoop/HadoopSession.java index 7cd35cf7..7ebd1d92 100755 --- a/input/javasrc/com/alvazan/orm/layer3/spi/db/hadoop/HadoopSession.java +++ b/input/javasrc/com/alvazan/orm/layer3/spi/db/hadoop/HadoopSession.java @@ -16,7 +16,7 @@ public List find(String colFamily, List key) { } @Override - public void sendChanges(List actions) { + public void sendChanges(List actions, Object ormSession) { } @Override diff --git a/input/javasrc/com/alvazan/orm/layer3/spi/db/inmemory/InMemorySession.java b/input/javasrc/com/alvazan/orm/layer3/spi/db/inmemory/InMemorySession.java index 3dfc70e4..8c22b9ac 100755 --- a/input/javasrc/com/alvazan/orm/layer3/spi/db/inmemory/InMemorySession.java +++ b/input/javasrc/com/alvazan/orm/layer3/spi/db/inmemory/InMemorySession.java @@ -39,7 +39,7 @@ private Row findRow(String colFamily, byte[] key) { } @Override - public void sendChanges(List actions) { + public void sendChanges(List actions, Object ormSession) { for(Action action : actions) { Table table = database.findOrCreateTable(action.getColFamily()); if(action instanceof Persist) { diff --git a/input/javasrc/com/alvazan/test/FactorySingleton.java b/input/javasrc/com/alvazan/test/FactorySingleton.java index c2d04080..a2f8994f 100755 --- a/input/javasrc/com/alvazan/test/FactorySingleton.java +++ b/input/javasrc/com/alvazan/test/FactorySingleton.java @@ -1,5 +1,8 @@ package com.alvazan.test; +import java.util.HashMap; +import java.util.Map; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,8 +19,9 @@ public class FactorySingleton { public synchronized static NoSqlEntityManagerFactory createFactoryOnce() { if(factory == null) { log.info("CREATING FACTORY FOR TESTS"); - factory = AbstractBootstrap.create(DbTypeEnum.IN_MEMORY, null); - factory.setup(null); + Map props = new HashMap(); + props.put(NoSqlEntityManagerFactory.AUTO_CREATE_KEY, "create"); + factory = AbstractBootstrap.create(DbTypeEnum.IN_MEMORY, props, null); } return factory; } diff --git a/input/javasrc/com/alvazan/test/TestAdHocTool.java b/input/javasrc/com/alvazan/test/TestAdHocTool.java index 05fdee18..19320080 100755 --- a/input/javasrc/com/alvazan/test/TestAdHocTool.java +++ b/input/javasrc/com/alvazan/test/TestAdHocTool.java @@ -9,6 +9,8 @@ import org.junit.Test; import com.alvazan.orm.api.base.DbTypeEnum; +import com.alvazan.orm.api.base.NoSqlEntityManager; +import com.alvazan.orm.api.base.NoSqlEntityManagerFactory; import com.alvazan.orm.api.spi.db.Column; import com.alvazan.orm.api.spi.db.Row; import com.alvazan.orm.api.spi.layer2.DboColumnMeta; @@ -20,6 +22,19 @@ public class TestAdHocTool { + @Test + public void testOrmLayerMetaSaved() { + NoSqlEntityManagerFactory factory = FactorySingleton.createFactoryOnce(); + NoSqlEntityManager mgr = factory.createEntityManager(); + + DboDatabaseMeta database = mgr.find(DboDatabaseMeta.class, NoSqlEntityManager.META_DB_KEY); + DboTableMeta table = database.getMeta("Activity"); + DboColumnMeta columnMeta = table.getColumnMeta("account"); + + Assert.assertEquals("id", columnMeta.getFkToColumnFamily().getIdColumnMeta().getColumnName()); + + } + @Test public void testBasic() { DboDatabaseMeta metaDb = new DboDatabaseMeta(); diff --git a/input/javasrc/com/alvazan/test/TestColumnSlice.java b/input/javasrc/com/alvazan/test/TestColumnSlice.java index 6e14eae0..45206a0f 100644 --- a/input/javasrc/com/alvazan/test/TestColumnSlice.java +++ b/input/javasrc/com/alvazan/test/TestColumnSlice.java @@ -40,17 +40,20 @@ public void clearDatabase() { @Test public void testColumnSlice() throws UnsupportedEncodingException { NoSqlSession session = mgr.getSession(); + + + String colFamily = "time_indexes"; byte[] rowKey = "myone_index".getBytes("UTF8"); List columns = new ArrayList(); - columns.add(new Column(toBytes("asdfsd"), new byte[0])); - columns.add(new Column(toBytes("ewrwerewrewr"), new byte[0])); - columns.add(new Column(toBytes("eeeee"), new byte[0])); - columns.add(new Column(toBytes("0000000000"), new byte[0])); - columns.add(new Column(toBytes("a"), new byte[0])); + //columns.add(new Column(toBytes("asdfsd"), new byte[0])); + //columns.add(new Column(toBytes("ewrwerewrewr"), new byte[0])); + //columns.add(new Column(toBytes("eeeee"), new byte[0])); + //columns.add(new Column(toBytes("0000000000"), new byte[0])); + //columns.add(new Column(toBytes("a"), new byte[0])); columns.add(new Column(toBytes(500), new byte[0])); columns.add(new Column(toBytes(20), new byte[0]));