http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLMapEntityStoreMixin.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLMapEntityStoreMixin.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLMapEntityStoreMixin.java new file mode 100644 index 0000000..95c9c5e --- /dev/null +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLMapEntityStoreMixin.java @@ -0,0 +1,237 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.entitystore.sql; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; +import javax.json.Json; +import javax.sql.DataSource; +import org.apache.polygene.api.common.Optional; +import org.apache.polygene.api.configuration.Configuration; +import org.apache.polygene.api.entity.EntityDescriptor; +import org.apache.polygene.api.entity.EntityReference; +import org.apache.polygene.api.injection.scope.Service; +import org.apache.polygene.api.injection.scope.This; +import org.apache.polygene.api.injection.scope.Uses; +import org.apache.polygene.api.service.ServiceActivation; +import org.apache.polygene.api.service.ServiceDescriptor; +import org.apache.polygene.library.sql.common.SQLConfiguration; +import org.apache.polygene.spi.entitystore.EntityNotFoundException; +import org.apache.polygene.spi.entitystore.EntityStoreException; +import org.apache.polygene.spi.entitystore.helpers.JSONKeys; +import org.apache.polygene.spi.entitystore.helpers.MapEntityStore; +import org.jooq.DSLContext; +import org.jooq.Field; +import org.jooq.Query; +import org.jooq.Record; +import org.jooq.SQLDialect; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.conf.Settings; +import org.jooq.impl.DSL; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +// TODO Implement optimistic locking! Maybe as a SPI helper +public class SQLMapEntityStoreMixin + implements ServiceActivation, MapEntityStore +{ + private static final Logger LOGGER = LoggerFactory.getLogger( SQLMapEntityStoreService.class ); + + @Service + private DataSource dataSource; + + @Uses + private ServiceDescriptor descriptor; + + @This + @Optional + private Configuration<SQLConfiguration> configuration; + + private Schema schema; + private Table<Record> table; + private Field<String> identityColumn; + private Field<String> versionColumn; + private Field<String> stateColumn; + private DSLContext dsl; + + @Override + public void activateService() throws Exception + { + SQLDialect dialect = descriptor.metaInfo( SQLDialect.class ); + Settings settings = descriptor.metaInfo( Settings.class ); + SQLMapEntityStoreMapping mapping = descriptor.metaInfo( SQLMapEntityStoreMapping.class ); + String schemaName = getConfiguredSchemaName( mapping.defaultSchemaName() ); + if( schemaName == null ) + { + throw new EntityStoreException( "Schema name must not be null." ); + } + schema = DSL.schema( DSL.name( schemaName.toUpperCase() ) ); + table = DSL.table( + dialect.equals( SQLDialect.SQLITE ) + ? DSL.name( mapping.tableName() ) + : DSL.name( schema.getName(), mapping.tableName() ) + ); + identityColumn = DSL.field( mapping.identityColumnName(), String.class ); + versionColumn = DSL.field( mapping.versionColumnName(), String.class ); + stateColumn = DSL.field( mapping.stateColumnName(), String.class ); + + dsl = DSL.using( dataSource, dialect, settings ); + + if( !dialect.equals( SQLDialect.SQLITE ) + && dsl.meta().getSchemas().stream().noneMatch( s -> schema.getName().equals( s.getName() ) ) ) + { + dsl.createSchema( schema ).execute(); + } + + if( dsl.meta().getTables().stream().noneMatch( t -> table.getName().equals( t.getName() ) ) ) + { + dsl.createTable( table ) + .column( identityColumn, mapping.identityDataType().nullable( false ) ) + .column( versionColumn, mapping.versionDataType().nullable( false ) ) + .column( stateColumn, mapping.stateDataType().nullable( false ) ) + .constraint( DSL.constraint( "ENTITY_IDENTITY_CONSTRAINT" ).primaryKey( identityColumn ) ) + .execute(); + } + } + + @Override + public void passivateService() throws Exception + { + dsl = null; + schema = null; + table = null; + identityColumn = null; + versionColumn = null; + stateColumn = null; + } + + @Override + public Reader get( EntityReference entityReference ) + { + String state = dsl.select( stateColumn ) + .from( table ) + .where( identityColumn.equal( entityReference.identity().toString() ) ) + .fetchOptional( stateColumn ) + .orElseThrow( () -> new EntityNotFoundException( entityReference ) ); + return new StringReader( state ); + } + + @Override + public Stream<Reader> entityStates() + { + return dsl.select( stateColumn ) + .from( table ) + .fetch( stateColumn ) + .stream() + .map( StringReader::new ); + } + + @Override + public void applyChanges( MapChanges changes ) throws Exception + { + List<Query> operations = new ArrayList<>(); + changes.visitMap( new MapChanger() + { + @Override + public Writer newEntity( EntityReference ref, EntityDescriptor entityDescriptor ) + { + return new StringWriter( 1000 ) + { + @Override + public void close() throws IOException + { + super.close(); + String state = toString(); + String version = Json.createReader( new StringReader( state ) ).readObject() + .getString( JSONKeys.VERSION ); + operations.add( + dsl.insertInto( table ) + .columns( identityColumn, versionColumn, stateColumn ) + .values( ref.identity().toString(), version, state ) + ); + } + }; + } + + @Override + public Writer updateEntity( MapChange mapChange ) + { + return new StringWriter( 1000 ) + { + @Override + public void close() throws IOException + { + super.close(); + String state = toString(); + operations.add( + dsl.update( table ) + .set( versionColumn, mapChange.newVersion() ) + .set( stateColumn, state ) + .where( identityColumn.equal( mapChange.reference().identity().toString() ) ) + .and( versionColumn.equal( mapChange.previousVersion() ) ) + ); + } + }; + } + + @Override + public void removeEntity( EntityReference ref, EntityDescriptor entityDescriptor ) + { + operations.add( + dsl.deleteFrom( table ) + .where( identityColumn.equal( ref.identity().toString() ) ) + ); + } + } ); + dsl.batch( operations ).execute(); + } + + + /** + * Configuration is optional at both assembly and runtime. + */ + protected String getConfiguredSchemaName( String defaultSchemaName ) + { + if( configuration == null ) + { + Objects.requireNonNull( defaultSchemaName, "default schema name" ); + LOGGER.debug( "No configuration, will use default schema name: '{}'", defaultSchemaName ); + return defaultSchemaName; + } + String result = configuration.get().schemaName().get(); + if( result == null ) + { + Objects.requireNonNull( defaultSchemaName, "default schema name" ); + result = defaultSchemaName; + LOGGER.debug( "No database schema name in configuration, will use default: '{}'", defaultSchemaName ); + } + else + { + LOGGER.debug( "Will use configured database schema name: '{}'", result ); + } + return result; + } +}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLMapEntityStoreService.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLMapEntityStoreService.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLMapEntityStoreService.java new file mode 100644 index 0000000..0ff1e59 --- /dev/null +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/SQLMapEntityStoreService.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.entitystore.sql; + +import org.apache.polygene.api.concern.Concerns; +import org.apache.polygene.api.configuration.Configuration; +import org.apache.polygene.api.mixin.Mixins; +import org.apache.polygene.api.service.ServiceActivation; +import org.apache.polygene.api.service.ServiceComposite; +import org.apache.polygene.spi.entitystore.ConcurrentModificationCheckConcern; +import org.apache.polygene.spi.entitystore.EntityStateVersions; +import org.apache.polygene.spi.entitystore.EntityStore; +import org.apache.polygene.spi.entitystore.StateChangeNotificationConcern; +import org.apache.polygene.spi.entitystore.helpers.JSONMapEntityStoreActivation; +import org.apache.polygene.spi.entitystore.helpers.JSONMapEntityStoreMixin; + +/** + * SQL EntityStore service. + */ +@Concerns( { StateChangeNotificationConcern.class, ConcurrentModificationCheckConcern.class } ) +@Mixins( { JSONMapEntityStoreMixin.class, SQLMapEntityStoreMixin.class } ) +public interface SQLMapEntityStoreService + extends ServiceActivation, + JSONMapEntityStoreActivation, + EntityStore, + EntityStateVersions, + ServiceComposite, + Configuration +{ +} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/AbstractSQLEntityStoreAssembler.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/AbstractSQLEntityStoreAssembler.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/AbstractSQLEntityStoreAssembler.java deleted file mode 100644 index 1713300..0000000 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/AbstractSQLEntityStoreAssembler.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ -package org.apache.polygene.entitystore.sql.assembly; - -import java.io.IOException; -import org.apache.polygene.api.common.Visibility; -import org.apache.polygene.api.identity.Identity; -import org.apache.polygene.api.identity.StringIdentity; -import org.apache.polygene.bootstrap.Assemblers; -import org.apache.polygene.bootstrap.AssemblyException; -import org.apache.polygene.bootstrap.ModuleAssembly; -import org.apache.polygene.entitystore.sql.SQLEntityStoreService; -import org.apache.polygene.entitystore.sql.internal.DatabaseSQLService.DatabaseSQLServiceComposite; -import org.apache.polygene.entitystore.sql.internal.DatabaseSQLServiceCoreMixin; -import org.apache.polygene.entitystore.sql.internal.DatabaseSQLServiceSpi; -import org.apache.polygene.entitystore.sql.internal.DatabaseSQLServiceStatementsMixin; -import org.apache.polygene.entitystore.sql.internal.DatabaseSQLStringsBuilder; -import org.apache.polygene.library.sql.common.SQLConfiguration; -import org.sql.generation.api.vendor.SQLVendor; -import org.sql.generation.api.vendor.SQLVendorProvider; - -/** - * Base SQL EntityStore assembly. - */ -@SuppressWarnings( "unchecked" ) -abstract class AbstractSQLEntityStoreAssembler<AssemblerType> - extends Assemblers.VisibilityIdentityConfig<AssemblerType> -{ - - public static final Identity DEFAULT_ENTITYSTORE_IDENTITY = new StringIdentity( "entitystore-sql" ); - - protected SQLVendor getSQLVendor() - throws IOException - { - return SQLVendorProvider.createVendor( SQLVendor.class ); - } - - protected Class<?> getDatabaseStringBuilderMixin() - { - return DatabaseSQLStringsBuilder.CommonMixin.class; - } - - protected abstract Class<?> getDatabaseSQLServiceSpecializationMixin(); - - @Override - public final void assemble( ModuleAssembly module ) - throws AssemblyException - { - try - { - SQLVendor sqlVendor = this.getSQLVendor(); - if( sqlVendor == null ) - { - throw new AssemblyException( "SQL Vendor could not be determined." ); - } - module.services( DatabaseSQLServiceComposite.class ) - .withMixins( DatabaseSQLServiceCoreMixin.class, - DatabaseSQLServiceSpi.CommonMixin.class, - getDatabaseStringBuilderMixin(), - DatabaseSQLServiceStatementsMixin.class, - getDatabaseSQLServiceSpecializationMixin() ) - .identifiedBy( ( hasIdentity() ? identity().toString() : DEFAULT_ENTITYSTORE_IDENTITY ).toString() ). - visibleIn( Visibility.module ). - setMetaInfo( sqlVendor ); - } - catch( IOException ioe ) - { - throw new AssemblyException( ioe ); - } - module.services( SQLEntityStoreService.class ).visibleIn( visibility() ); - if( hasConfig() ) - { - configModule().entities( SQLConfiguration.class ).visibleIn( configVisibility() ); - } - } -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/AbstractSQLMapEntityStoreAssembler.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/AbstractSQLMapEntityStoreAssembler.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/AbstractSQLMapEntityStoreAssembler.java new file mode 100644 index 0000000..4e205d1 --- /dev/null +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/AbstractSQLMapEntityStoreAssembler.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.polygene.entitystore.sql.assembly; + +import org.apache.polygene.api.identity.Identity; +import org.apache.polygene.api.identity.StringIdentity; +import org.apache.polygene.bootstrap.Assemblers; +import org.apache.polygene.bootstrap.AssemblyException; +import org.apache.polygene.bootstrap.ModuleAssembly; +import org.apache.polygene.entitystore.sql.SQLMapEntityStoreMapping; +import org.apache.polygene.entitystore.sql.SQLMapEntityStoreService; +import org.apache.polygene.library.sql.common.SQLConfiguration; +import org.jooq.SQLDialect; +import org.jooq.conf.Settings; + +/** + * Base SQL EntityStore assembly. + */ +public abstract class AbstractSQLMapEntityStoreAssembler<AssemblerType> + extends Assemblers.VisibilityIdentityConfig<AssemblerType> +{ + public static final Identity DEFAULT_ENTITYSTORE_IDENTITY = new StringIdentity( "entitystore-sql" ); + + @Override + public void assemble( ModuleAssembly module ) + { + SQLDialect dialect = getSQLDialect(); + if( dialect == null ) + { + throw new AssemblyException( "SQLDialect must not be null" ); + } + Settings settings = getSettings(); + if( settings == null ) + { + throw new AssemblyException( "Settings must not be null" ); + } + SQLMapEntityStoreMapping mapping = getMapping(); + if( settings == null ) + { + throw new AssemblyException( "SQLMapEntityStoreSchema must not be null" ); + } + + module.services( SQLMapEntityStoreService.class ) + .identifiedBy( ( hasIdentity() ? identity() : DEFAULT_ENTITYSTORE_IDENTITY ).toString() ) + .visibleIn( visibility() ) + .setMetaInfo( dialect ) + .setMetaInfo( settings ) + .setMetaInfo( mapping ); + + if( hasConfig() ) + { + configModule().entities( SQLConfiguration.class ).visibleIn( configVisibility() ); + } + } + + protected Settings getSettings() + { + return new Settings(); + } + + protected SQLDialect getSQLDialect() + { + return SQLDialect.DEFAULT; + } + + protected SQLMapEntityStoreMapping getMapping() + { + return new SQLMapEntityStoreMapping() {}; + } +} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/DerbySQLEntityStoreAssembler.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/DerbySQLEntityStoreAssembler.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/DerbySQLEntityStoreAssembler.java index dc91d76..6288d85 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/DerbySQLEntityStoreAssembler.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/DerbySQLEntityStoreAssembler.java @@ -19,30 +19,17 @@ */ package org.apache.polygene.entitystore.sql.assembly; -import java.io.IOException; -import org.apache.polygene.entitystore.sql.internal.DerbySQLDatabaseSQLServiceMixin; -import org.sql.generation.api.vendor.DerbyVendor; -import org.sql.generation.api.vendor.SQLVendor; -import org.sql.generation.api.vendor.SQLVendorProvider; +import org.jooq.SQLDialect; /** * Derby EntityStore assembly. */ public class DerbySQLEntityStoreAssembler - extends AbstractSQLEntityStoreAssembler<DerbySQLEntityStoreAssembler> + extends AbstractSQLMapEntityStoreAssembler<DerbySQLEntityStoreAssembler> { - - @Override - protected Class<?> getDatabaseSQLServiceSpecializationMixin() - { - return DerbySQLDatabaseSQLServiceMixin.class; - } - @Override - protected SQLVendor getSQLVendor() - throws IOException + protected SQLDialect getSQLDialect() { - return SQLVendorProvider.createVendor( DerbyVendor.class ); + return SQLDialect.DERBY; } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/H2SQLEntityStoreAssembler.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/H2SQLEntityStoreAssembler.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/H2SQLEntityStoreAssembler.java index e596fba..018251e 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/H2SQLEntityStoreAssembler.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/H2SQLEntityStoreAssembler.java @@ -19,30 +19,17 @@ */ package org.apache.polygene.entitystore.sql.assembly; -import java.io.IOException; -import org.apache.polygene.entitystore.sql.internal.H2SQLDatabaseSQLServiceMixin; -import org.sql.generation.api.vendor.H2Vendor; -import org.sql.generation.api.vendor.SQLVendor; -import org.sql.generation.api.vendor.SQLVendorProvider; +import org.jooq.SQLDialect; /** * H2 EntityStore assembly. */ public class H2SQLEntityStoreAssembler - extends AbstractSQLEntityStoreAssembler<H2SQLEntityStoreAssembler> + extends AbstractSQLMapEntityStoreAssembler<H2SQLEntityStoreAssembler> { - - @Override - protected Class<?> getDatabaseSQLServiceSpecializationMixin() - { - return H2SQLDatabaseSQLServiceMixin.class; - } - @Override - protected SQLVendor getSQLVendor() - throws IOException + protected SQLDialect getSQLDialect() { - return SQLVendorProvider.createVendor( H2Vendor.class ); + return SQLDialect.H2; } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/MySQLEntityStoreAssembler.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/MySQLEntityStoreAssembler.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/MySQLEntityStoreAssembler.java index e3ea6d1..ff46c82 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/MySQLEntityStoreAssembler.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/MySQLEntityStoreAssembler.java @@ -19,30 +19,17 @@ */ package org.apache.polygene.entitystore.sql.assembly; -import java.io.IOException; -import org.apache.polygene.entitystore.sql.internal.MySQLDatabaseSQLServiceMixin; -import org.sql.generation.api.vendor.MySQLVendor; -import org.sql.generation.api.vendor.SQLVendor; -import org.sql.generation.api.vendor.SQLVendorProvider; +import org.jooq.SQLDialect; /** * MySQL EntityStore assembly. */ public class MySQLEntityStoreAssembler - extends AbstractSQLEntityStoreAssembler<MySQLEntityStoreAssembler> + extends AbstractSQLMapEntityStoreAssembler<MySQLEntityStoreAssembler> { - - @Override - protected Class<?> getDatabaseSQLServiceSpecializationMixin() - { - return MySQLDatabaseSQLServiceMixin.class; - } - @Override - protected SQLVendor getSQLVendor() - throws IOException + protected SQLDialect getSQLDialect() { - return SQLVendorProvider.createVendor( MySQLVendor.class ); + return SQLDialect.MYSQL; } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/PostgreSQLEntityStoreAssembler.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/PostgreSQLEntityStoreAssembler.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/PostgreSQLEntityStoreAssembler.java index a7f0a23..4400b8e 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/PostgreSQLEntityStoreAssembler.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/PostgreSQLEntityStoreAssembler.java @@ -19,37 +19,17 @@ */ package org.apache.polygene.entitystore.sql.assembly; -import java.io.IOException; -import org.apache.polygene.entitystore.sql.internal.PostgreSQLDatabaseSQLServiceMixin; -import org.apache.polygene.entitystore.sql.internal.PostgreSQLStringBuilderMixin; -import org.sql.generation.api.vendor.PostgreSQLVendor; -import org.sql.generation.api.vendor.SQLVendor; -import org.sql.generation.api.vendor.SQLVendorProvider; +import org.jooq.SQLDialect; /** * PostgreSQL EntityStore assembly. */ public class PostgreSQLEntityStoreAssembler - extends AbstractSQLEntityStoreAssembler<PostgreSQLEntityStoreAssembler> + extends AbstractSQLMapEntityStoreAssembler<PostgreSQLEntityStoreAssembler> { - - @Override - protected Class<?> getDatabaseSQLServiceSpecializationMixin() - { - return PostgreSQLDatabaseSQLServiceMixin.class; - } - @Override - protected Class<?> getDatabaseStringBuilderMixin() + protected SQLDialect getSQLDialect() { - return PostgreSQLStringBuilderMixin.class; + return SQLDialect.POSTGRES; } - - @Override - protected SQLVendor getSQLVendor() - throws IOException - { - return SQLVendorProvider.createVendor( PostgreSQLVendor.class ); - } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/SQLiteEntityStoreAssembler.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/SQLiteEntityStoreAssembler.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/SQLiteEntityStoreAssembler.java index 7c043e7..1b7fa5e 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/SQLiteEntityStoreAssembler.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/assembly/SQLiteEntityStoreAssembler.java @@ -19,30 +19,17 @@ */ package org.apache.polygene.entitystore.sql.assembly; -import java.io.IOException; -import org.apache.polygene.entitystore.sql.internal.SQLiteDatabaseSQLServiceMixin; -import org.sql.generation.api.vendor.SQLVendor; -import org.sql.generation.api.vendor.SQLVendorProvider; -import org.sql.generation.api.vendor.SQLiteVendor; +import org.jooq.SQLDialect; /** * SQLite EntityStore assembly. */ public class SQLiteEntityStoreAssembler - extends AbstractSQLEntityStoreAssembler<SQLiteEntityStoreAssembler> + extends AbstractSQLMapEntityStoreAssembler<SQLiteEntityStoreAssembler> { - - @Override - protected Class<?> getDatabaseSQLServiceSpecializationMixin() - { - return SQLiteDatabaseSQLServiceMixin.class; - } - @Override - protected SQLVendor getSQLVendor() - throws IOException + protected SQLDialect getSQLDialect() { - return SQLVendorProvider.createVendor( SQLiteVendor.class ); + return SQLDialect.SQLITE; } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLService.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLService.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLService.java index 03ce525..fddb19f 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLService.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLService.java @@ -24,59 +24,32 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.time.Instant; import org.apache.polygene.api.entity.EntityReference; import org.apache.polygene.api.service.ServiceComposite; @SuppressWarnings( "PublicInnerClass" ) public interface DatabaseSQLService { - - public interface DatabaseSQLServiceComposite - extends DatabaseSQLService, ServiceComposite + interface DatabaseSQLServiceComposite extends DatabaseSQLService, ServiceComposite { } - public final class EntityValueResult + final class EntityValueResult { - - private final Long entityPK; - - private final Long entityOptimisticLock; - private final Reader reader; - public EntityValueResult( Long entityPK, Long entityOptimisticLock, Reader reader ) + EntityValueResult( Reader reader ) { - this.entityPK = entityPK; - this.entityOptimisticLock = entityOptimisticLock; this.reader = reader; } /** - * @return the entityPK - */ - public Long getEntityPK() - { - return entityPK; - } - - /** - * @return the entityOptimisticLock - */ - public Long getEntityOptimisticLock() - { - return entityOptimisticLock; - } - - /** * @return the reader */ public Reader getReader() { return reader; } - } void startDatabase() @@ -109,16 +82,15 @@ public interface DatabaseSQLService void populateGetAllEntitiesStatement( PreparedStatement ps ) throws SQLException; - void populateInsertEntityStatement( PreparedStatement ps, EntityReference ref, String entity, Instant lastModified ) + void populateInsertEntityStatement( PreparedStatement ps, EntityReference ref, String entity ) throws SQLException; - void populateUpdateEntityStatement( PreparedStatement ps, Long entityPK, Long entityOptimisticLock, EntityReference ref, String entity, Instant lastModified ) + void populateUpdateEntityStatement( PreparedStatement ps, EntityReference ref, String entity ) throws SQLException; - void populateRemoveEntityStatement( PreparedStatement ps, Long entityPK, EntityReference ref ) + void populateRemoveEntityStatement( PreparedStatement ps, EntityReference ref ) throws SQLException; - EntityValueResult getEntityValue( ResultSet rs ) + Reader getEntityStateReader( ResultSet rs ) throws SQLException; - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLServiceState.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLServiceState.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLServiceState.java index 31c4751..3e3926d 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLServiceState.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLServiceState.java @@ -25,11 +25,9 @@ import org.sql.generation.api.vendor.SQLVendor; public interface DatabaseSQLServiceState { - @Optional - public Property<String> schemaName(); + Property<String> schemaName(); @Optional - public Property<SQLVendor> vendor(); - + Property<SQLVendor> vendor(); } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLServiceStatementsMixin.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLServiceStatementsMixin.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLServiceStatementsMixin.java index 8406e05..cce4568 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLServiceStatementsMixin.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLServiceStatementsMixin.java @@ -22,7 +22,6 @@ package org.apache.polygene.entitystore.sql.internal; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.time.Instant; import org.apache.polygene.api.entity.EntityReference; import org.apache.polygene.api.injection.scope.This; @@ -89,30 +88,26 @@ public abstract class DatabaseSQLServiceStatementsMixin } @Override - public void populateInsertEntityStatement( PreparedStatement ps, EntityReference ref, String entity, Instant lastModified ) + public void populateInsertEntityStatement( PreparedStatement ps, EntityReference ref, String entity ) throws SQLException { ps.setString( 1, ref.identity().toString() ); ps.setString( 2, entity ); - ps.setLong( 3, lastModified.toEpochMilli() ); } @Override - public void populateRemoveEntityStatement( PreparedStatement ps, Long entityPK, EntityReference ref ) + public void populateRemoveEntityStatement( PreparedStatement ps, EntityReference ref ) throws SQLException { - ps.setLong( 1, entityPK ); + ps.setString( 1, ref.identity().toString() ); } @Override - public void populateUpdateEntityStatement( PreparedStatement ps, Long entityPK, Long entityOptimisticLock, EntityReference ref, String entity, Instant lastModified ) + public void populateUpdateEntityStatement( PreparedStatement ps, EntityReference ref, String entity ) throws SQLException { - ps.setLong( 1, entityOptimisticLock + 1 ); + ps.setString( 1, ref.identity().toString() ); ps.setString( 2, entity ); - ps.setLong( 3, lastModified.toEpochMilli() ); - ps.setLong( 4, entityPK ); - ps.setLong( 5, entityOptimisticLock ); } } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLStringsBuilder.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLStringsBuilder.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLStringsBuilder.java index f75ba5a..6fb04cb 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLStringsBuilder.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DatabaseSQLStringsBuilder.java @@ -1,10 +1,10 @@ /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file + * distributed with work for additional information + * regarding copyright ownership. The ASF licenses file * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance + * "License"); you may not use file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 @@ -29,7 +29,6 @@ import org.sql.generation.api.grammar.builders.modification.DeleteBySearchBuilde import org.sql.generation.api.grammar.builders.modification.UpdateBySearchBuilder; import org.sql.generation.api.grammar.common.SQLStatement; import org.sql.generation.api.grammar.common.datatypes.SQLDataType; -import org.sql.generation.api.grammar.definition.table.AutoGenerationPolicy; import org.sql.generation.api.grammar.definition.table.UniqueSpecification; import org.sql.generation.api.grammar.factories.BooleanFactory; import org.sql.generation.api.grammar.factories.ColumnsFactory; @@ -60,91 +59,68 @@ public interface DatabaseSQLStringsBuilder String buildSQLForRemoveEntityStatement(); - @SuppressWarnings("PublicInnerClass") abstract class CommonMixin implements DatabaseSQLStringsBuilder { - private static final Logger LOGGER = LoggerFactory.getLogger( DatabaseSQLStringsBuilder.class ); @This - private DatabaseSQLServiceState _state; + private DatabaseSQLServiceState dbState; private SQLVendor vendor; - private String schemaName; private String[] schemaCreationSQLs; - private String[] indexCreationSQLs; - private String[] tableCreationSQLs; private String selectAllEntitiesSQL; - private String selectEntitySQL; - private String insertEntitySQL; - private String updateEntitySQL; - private String removeEntitySQL; @Override public void init() { - this.vendor = this._state.vendor().get(); - - this.schemaName = this._state.schemaName().get(); + vendor = dbState.vendor().get(); + schemaName = dbState.schemaName().get(); + schemaCreationSQLs = toString( createSchemaStatements( vendor ) ); + indexCreationSQLs = toString( createIndicesStatements( vendor ) ); + tableCreationSQLs = toString( createTableStatements( vendor ) ); + selectAllEntitiesSQL = vendor.toString( createSelectAllEntitiesStatement( vendor ) ); + selectEntitySQL = vendor.toString( createSelectEntityStatement( vendor ) ); + insertEntitySQL = vendor.toString( createInsertEntityStatement( vendor ) ); + updateEntitySQL = vendor.toString( createUpdateEntityStatement( vendor ) ); + removeEntitySQL = vendor.toString( createRemoveEntityStatement( vendor ) ); - this.schemaCreationSQLs = this.toString( this.createSchemaStatements( this.vendor ) ); if( LOGGER.isTraceEnabled() ) { - LOGGER.trace( "SQL for schema creation: {}", Arrays.asList( this.schemaCreationSQLs ) ); + LOGGER.trace( "SQL for schema creation: {}", Arrays.asList( schemaCreationSQLs ) ); + LOGGER.trace( "SQL for index creation: {}", Arrays.asList( indexCreationSQLs ) ); + LOGGER.trace( "SQL for table creation: {}", Arrays.asList( tableCreationSQLs ) ); + LOGGER.trace( "SQL for select all entities: {}", selectAllEntitiesSQL ); + LOGGER.trace( "SQL for select entity: {}", selectEntitySQL ); + LOGGER.trace( "SQL for insert entity: {}", insertEntitySQL ); + LOGGER.trace( "SQL for update entity: {}", updateEntitySQL ); + LOGGER.trace( "SQL for remove entity: {}", removeEntitySQL ); } - - this.indexCreationSQLs = this.toString( this.createIndicesStatements( this.vendor ) ); - if( LOGGER.isTraceEnabled() ) - { - LOGGER.trace( "SQL for index creation: {}", Arrays.asList( this.indexCreationSQLs ) ); - } - - this.tableCreationSQLs = this.toString( this.createTableStatements( this.vendor ) ); - if( LOGGER.isTraceEnabled() ) - { - LOGGER.trace( "SQL for table creation: {}", Arrays.asList( this.tableCreationSQLs ) ); - } - - this.selectAllEntitiesSQL = this.vendor.toString( this.createSelectAllEntitiesStatement( this.vendor ) ); - LOGGER.trace( "SQL for select all entities: {}", this.selectAllEntitiesSQL ); - - this.selectEntitySQL = this.vendor.toString( this.createSelectEntityStatement( this.vendor ) ); - LOGGER.trace( "SQL for select entity: {}", this.selectEntitySQL ); - - this.insertEntitySQL = this.vendor.toString( this.createInsertEntityStatement( this.vendor ) ); - LOGGER.trace( "SQL for insert entity: {}", this.insertEntitySQL ); - - this.updateEntitySQL = this.vendor.toString( this.createUpdateEntityStatement( this.vendor ) ); - LOGGER.trace( "SQL for update entity: {}", this.updateEntitySQL ); - - this.removeEntitySQL = this.vendor.toString( this.createRemoveEntityStatement( this.vendor ) ); - LOGGER.trace( "SQL for remove entity: {}", this.removeEntitySQL ); } protected String[] toString( SQLStatement[] stmts ) { - List<String> result = new ArrayList<String>(); + List<String> result = new ArrayList<>(); if( stmts != null ) { for( Integer idx = 0; idx < stmts.length; ++idx ) { - SQLStatement statement = stmts[idx]; + SQLStatement statement = stmts[ idx ]; if( statement != null ) { - String stringStatement = this.vendor.toString( statement ); + String stringStatement = vendor.toString( statement ); if( stringStatement != null && stringStatement.length() > 0 ) { - result.add( this.vendor.toString( statement ) ); + result.add( vendor.toString( statement ) ); } } } @@ -154,29 +130,24 @@ public interface DatabaseSQLStringsBuilder protected SQLVendor getVendor() { - return this.vendor; + return vendor; } protected String getSchemaName() { - return this.schemaName; + return schemaName; } protected SQLStatement[] createSchemaStatements( SQLVendor vendor ) { - // @formatter:off - return new SQLStatement[] - { + return new SQLStatement[] { vendor.getDefinitionFactory().createSchemaDefinitionBuilder() - .setSchemaName( this.schemaName ) - .createExpression() + .setSchemaName( schemaName ).createExpression() }; - // @formatter:on } protected SQLStatement[] createIndicesStatements( SQLVendor vendor ) { - // TODO return new SQLStatement[] {}; } @@ -185,31 +156,25 @@ public interface DatabaseSQLStringsBuilder DefinitionFactory d = vendor.getDefinitionFactory(); TableReferenceFactory t = vendor.getTableReferenceFactory(); - - // @formatter:off - return new SQLStatement[] - { + return new SQLStatement[] { d.createTableDefinitionBuilder() - .setTableName( t.tableName( this.getSchemaName(), SQLs.TABLE_NAME ) ) - .setTableContentsSource( d.createTableElementListBuilder() - .addTableElement( d.createColumnDefinition( SQLs.ENTITY_PK_COLUMN_NAME, this.getPKType(), false, AutoGenerationPolicy.BY_DEFAULT ) ) - .addTableElement( d.createColumnDefinition( SQLs.ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME, this.getOptimisticLockType(), false ) ) - .addTableElement( d.createColumnDefinition( SQLs.ENTITY_IDENTITY_COLUMN_NAME, this.getIDType(), false ) ) - .addTableElement( d.createColumnDefinition( SQLs.ENTITY_STATE_COLUMN_NAME, this.getStateType(), false ) ) - .addTableElement( d.createColumnDefinition( SQLs.ENTITY_LAST_MODIFIED_COLUMN_NAME, this.getLastModifiedType(), false ) ) - .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder() - .setUniqueness( UniqueSpecification.PRIMARY_KEY ) - .addColumns( SQLs.ENTITY_PK_COLUMN_NAME ) - .createExpression() ) ) - .addTableElement( d.createTableConstraintDefinition( d.createUniqueConstraintBuilder() - .setUniqueness( UniqueSpecification.UNIQUE ) - .addColumns( SQLs.ENTITY_IDENTITY_COLUMN_NAME ) - .createExpression() ) ) - .createExpression() - ) - .createExpression() + .setTableName( t.tableName( getSchemaName(), SQLs.TABLE_NAME ) ) + .setTableContentsSource( + d.createTableElementListBuilder() + .addTableElement( d.createColumnDefinition( SQLs.ENTITY_IDENTITY_COLUMN_NAME, + getIDType(), false ) ) + .addTableElement( d.createColumnDefinition( SQLs.ENTITY_VERSION_COLUMN_NAME, + getVersionType(), false ) ) + .addTableElement( d.createColumnDefinition( SQLs.ENTITY_STATE_COLUMN_NAME, + getStateType(), false ) ) + .addTableElement( d.createTableConstraintDefinition( + d.createUniqueConstraintBuilder() + .setUniqueness( UniqueSpecification.PRIMARY_KEY ) + .addColumns( SQLs.ENTITY_IDENTITY_COLUMN_NAME ) + .createExpression() ) + ).createExpression() + ).createExpression() }; - // @formatter:on } protected SQLStatement createSelectAllEntitiesStatement( SQLVendor vendor ) @@ -217,12 +182,10 @@ public interface DatabaseSQLStringsBuilder QueryFactory q = vendor.getQueryFactory(); TableReferenceFactory t = vendor.getTableReferenceFactory(); - // @formatter:off return q.simpleQueryBuilder() - .select( SQLs.ENTITY_PK_COLUMN_NAME, SQLs.ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME, SQLs.ENTITY_STATE_COLUMN_NAME ) - .from( t.tableName( this.schemaName, SQLs.TABLE_NAME ) ) - .createExpression(); - // @formatter:on + .select( SQLs.ENTITY_STATE_COLUMN_NAME ) + .from( t.tableName( schemaName, SQLs.TABLE_NAME ) ) + .createExpression(); } protected SQLStatement createSelectEntityStatement( SQLVendor vendor ) @@ -233,13 +196,11 @@ public interface DatabaseSQLStringsBuilder ColumnsFactory c = vendor.getColumnsFactory(); LiteralFactory l = vendor.getLiteralFactory(); - // @formatter:off return q.simpleQueryBuilder() - .select( SQLs.ENTITY_PK_COLUMN_NAME, SQLs.ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME, SQLs.ENTITY_STATE_COLUMN_NAME ) - .from( t.tableName( this.schemaName, SQLs.TABLE_NAME ) ) - .where( b.eq( c.colName( SQLs.ENTITY_IDENTITY_COLUMN_NAME ), l.param() ) ) - .createExpression(); - // @formatter:on + .select( SQLs.ENTITY_STATE_COLUMN_NAME ) + .from( t.tableName( schemaName, SQLs.TABLE_NAME ) ) + .where( b.eq( c.colName( SQLs.ENTITY_IDENTITY_COLUMN_NAME ), l.param() ) ) + .createExpression(); } protected SQLStatement createInsertEntityStatement( SQLVendor vendor ) @@ -248,26 +209,15 @@ public interface DatabaseSQLStringsBuilder TableReferenceFactory t = vendor.getTableReferenceFactory(); LiteralFactory l = vendor.getLiteralFactory(); - // @formatter:off return m.insert() - .setTableName( t.tableName( this.schemaName, SQLs.TABLE_NAME ) ) - .setColumnSource( m.columnSourceByValues() - .addColumnNames( - SQLs.ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME, - SQLs.ENTITY_IDENTITY_COLUMN_NAME, - SQLs.ENTITY_STATE_COLUMN_NAME, - SQLs.ENTITY_LAST_MODIFIED_COLUMN_NAME - ) - .addValues( - l.n( 0 ), - l.param(), - l.param(), - l.param() - ) - .createExpression() - ) - .createExpression(); - // @formatter:on + .setTableName( t.tableName( schemaName, SQLs.TABLE_NAME ) ) + .setColumnSource( m.columnSourceByValues() + .addColumnNames( SQLs.ENTITY_IDENTITY_COLUMN_NAME, + SQLs.ENTITY_STATE_COLUMN_NAME ) + .addValues( l.param(), + l.param() ) + .createExpression() + ).createExpression(); } protected SQLStatement createUpdateEntityStatement( SQLVendor vendor ) @@ -278,20 +228,18 @@ public interface DatabaseSQLStringsBuilder BooleanFactory b = vendor.getBooleanFactory(); ColumnsFactory c = vendor.getColumnsFactory(); - // @formatter:off - UpdateBySearchBuilder builder = m.updateBySearch() - .setTargetTable( m.createTargetTable( t.tableName( this.schemaName, SQLs.TABLE_NAME ) ) ) - .addSetClauses( - m.setClause( SQLs.ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME, m.updateSourceByExp( l.param() ) ), - m.setClause( SQLs.ENTITY_STATE_COLUMN_NAME, m.updateSourceByExp( l.param() ) ), - m.setClause( SQLs.ENTITY_LAST_MODIFIED_COLUMN_NAME, m.updateSourceByExp( l.param() ) ) - ); - builder - .getWhereBuilder() - .reset( b.eq( c.colName( SQLs.ENTITY_PK_COLUMN_NAME ), l.param() ) ) - .and( b.eq( c.colName( SQLs.ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME ), l.param() ) ); + UpdateBySearchBuilder builder = m.updateBySearch().setTargetTable( + m.createTargetTable( t.tableName( schemaName, SQLs.TABLE_NAME ) ) + ).addSetClauses( + m.setClause( SQLs.ENTITY_VERSION_COLUMN_NAME, m.updateSourceByExp( l.param() ) ), + m.setClause( SQLs.ENTITY_STATE_COLUMN_NAME, m.updateSourceByExp( l.param() ) ) + ); + builder.getWhereBuilder().reset( + b.eq( c.colName( SQLs.ENTITY_IDENTITY_COLUMN_NAME ), l.param() ) + ).and( + b.eq( c.colName( SQLs.ENTITY_VERSION_COLUMN_NAME ), l.param() ) + ); return builder.createExpression(); - // @formatter:on } protected SQLStatement createRemoveEntityStatement( SQLVendor vendor ) @@ -302,88 +250,76 @@ public interface DatabaseSQLStringsBuilder BooleanFactory b = vendor.getBooleanFactory(); ColumnsFactory c = vendor.getColumnsFactory(); - // @formatter:off - DeleteBySearchBuilder builder = m.deleteBySearch() - .setTargetTable( m.createTargetTable( t.tableName( this.schemaName, SQLs.TABLE_NAME ) ) ); - builder.getWhere() - .reset( b.eq( c.colName( SQLs.ENTITY_PK_COLUMN_NAME ), l.param() ) ); + DeleteBySearchBuilder builder = m.deleteBySearch().setTargetTable( + m.createTargetTable( t.tableName( schemaName, SQLs.TABLE_NAME ) ) + ); + builder.getWhere().reset( + b.eq( c.colName( SQLs.ENTITY_IDENTITY_COLUMN_NAME ), l.param() ) + ); return builder.createExpression(); - // @formatter:on - } - - protected SQLDataType getPKType() - { - return this.vendor.getDataTypeFactory().bigInt(); - } - - protected SQLDataType getOptimisticLockType() - { - return this.vendor.getDataTypeFactory().bigInt(); } protected SQLDataType getIDType() { - return this.vendor.getDataTypeFactory().sqlVarChar( 64 ); + return vendor.getDataTypeFactory().sqlVarChar( 64 ); } - protected SQLDataType getStateType() + protected SQLDataType getVersionType() { - return this.vendor.getDataTypeFactory().sqlVarChar( 10000 ); + return vendor.getDataTypeFactory().sqlVarChar( 64 ); } - protected SQLDataType getLastModifiedType() + protected SQLDataType getStateType() { - return this.vendor.getDataTypeFactory().bigInt(); + return vendor.getDataTypeFactory().sqlVarChar( 10000 ); } @Override public String[] buildSQLForSchemaCreation() { - return this.schemaCreationSQLs; + return schemaCreationSQLs; } @Override public String[] buildSQLForIndexCreation() { - return this.indexCreationSQLs; + return indexCreationSQLs; } @Override public String buildSQLForSelectAllEntitiesStatement() { - return this.selectAllEntitiesSQL; + return selectAllEntitiesSQL; } @Override public String buildSQLForSelectEntityStatement() { - return this.selectEntitySQL; + return selectEntitySQL; } @Override public String buildSQLForInsertEntityStatement() { - return this.insertEntitySQL; + return insertEntitySQL; } @Override public String buildSQLForUpdateEntityStatement() { - return this.updateEntitySQL; + return updateEntitySQL; } @Override public String buildSQLForRemoveEntityStatement() { - return this.removeEntitySQL; + return removeEntitySQL; } @Override public String[] buildSQLForTableCreation() { - return this.tableCreationSQLs; + return tableCreationSQLs; } - } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DerbySQLDatabaseSQLServiceMixin.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DerbySQLDatabaseSQLServiceMixin.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DerbySQLDatabaseSQLServiceMixin.java index 527cdab..083d79e 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DerbySQLDatabaseSQLServiceMixin.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/DerbySQLDatabaseSQLServiceMixin.java @@ -19,6 +19,7 @@ */ package org.apache.polygene.entitystore.sql.internal; +import java.io.Reader; import java.io.StringReader; import java.sql.Connection; import java.sql.ResultSet; @@ -28,11 +29,10 @@ import org.apache.polygene.library.sql.common.SQLUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@SuppressWarnings("ProtectedField") +@SuppressWarnings( "ProtectedField" ) public abstract class DerbySQLDatabaseSQLServiceMixin implements DatabaseSQLService, DatabaseSQLStringsBuilder, DatabaseSQLServiceSpi { - private static final Logger LOGGER = LoggerFactory.getLogger( DerbySQLDatabaseSQLServiceMixin.class ); @This @@ -46,10 +46,8 @@ public abstract class DerbySQLDatabaseSQLServiceMixin try { String tableNameForQuery = SQLs.TABLE_NAME.toUpperCase(); - rs = connection.getMetaData().getTables( null, null, tableNameForQuery, new String[] - { - "TABLE" - } ); + rs = connection.getMetaData().getTables( null, null, tableNameForQuery, + new String[] { "TABLE" } ); boolean tableExists = rs.next(); LOGGER.trace( "Found table {}? {}", tableNameForQuery, tableExists ); return tableExists; @@ -61,12 +59,9 @@ public abstract class DerbySQLDatabaseSQLServiceMixin } @Override - public EntityValueResult getEntityValue( ResultSet rs ) + public Reader getEntityStateReader( ResultSet rs ) throws SQLException { - return new EntityValueResult( rs.getLong( SQLs.ENTITY_PK_COLUMN_NAME ), - rs.getLong( SQLs.ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME ), new StringReader( - rs.getString( SQLs.ENTITY_STATE_COLUMN_NAME ) ) ); + return new StringReader( rs.getString( SQLs.ENTITY_STATE_COLUMN_NAME ) ); } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/H2SQLDatabaseSQLServiceMixin.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/H2SQLDatabaseSQLServiceMixin.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/H2SQLDatabaseSQLServiceMixin.java index ba34b36..3b870c6 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/H2SQLDatabaseSQLServiceMixin.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/H2SQLDatabaseSQLServiceMixin.java @@ -19,6 +19,7 @@ */ package org.apache.polygene.entitystore.sql.internal; +import java.io.Reader; import java.io.StringReader; import java.sql.Connection; import java.sql.ResultSet; @@ -29,35 +30,35 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class H2SQLDatabaseSQLServiceMixin - implements DatabaseSQLService, DatabaseSQLStringsBuilder, DatabaseSQLServiceSpi + implements DatabaseSQLService, DatabaseSQLStringsBuilder, DatabaseSQLServiceSpi { - private static final Logger LOGGER = LoggerFactory.getLogger( H2SQLDatabaseSQLServiceMixin.class ); @This protected DatabaseSQLServiceSpi spi; public boolean tableExists( Connection connection ) - throws SQLException + throws SQLException { ResultSet rs = null; - try { + try + { String tableNameForQuery = SQLs.TABLE_NAME.toUpperCase(); - rs = connection.getMetaData().getTables( null, null, tableNameForQuery, new String[]{ "TABLE" } ); + rs = connection.getMetaData().getTables( null, null, tableNameForQuery, + new String[] { "TABLE" } ); boolean tableExists = rs.next(); LOGGER.trace( "Found table {}? {}", tableNameForQuery, tableExists ); return tableExists; - } finally { + } + finally + { SQLUtil.closeQuietly( rs ); } } - public EntityValueResult getEntityValue( ResultSet rs ) - throws SQLException + public Reader getEntityStateReader( ResultSet rs ) + throws SQLException { - return new EntityValueResult( rs.getLong( SQLs.ENTITY_PK_COLUMN_NAME ), - rs.getLong( SQLs.ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME ), - new StringReader( rs.getString( SQLs.ENTITY_STATE_COLUMN_NAME ) ) ); + return new StringReader( rs.getString( SQLs.ENTITY_STATE_COLUMN_NAME ) ); } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/MySQLDatabaseSQLServiceMixin.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/MySQLDatabaseSQLServiceMixin.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/MySQLDatabaseSQLServiceMixin.java index da3479d..1c6c534 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/MySQLDatabaseSQLServiceMixin.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/MySQLDatabaseSQLServiceMixin.java @@ -19,6 +19,7 @@ */ package org.apache.polygene.entitystore.sql.internal; +import java.io.Reader; import java.io.StringReader; import java.sql.Connection; import java.sql.ResultSet; @@ -28,7 +29,7 @@ import org.apache.polygene.library.sql.common.SQLUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@SuppressWarnings("ProtectedField") +@SuppressWarnings( "ProtectedField" ) public abstract class MySQLDatabaseSQLServiceMixin implements DatabaseSQLService, DatabaseSQLStringsBuilder, DatabaseSQLServiceSpi { @@ -45,11 +46,9 @@ public abstract class MySQLDatabaseSQLServiceMixin ResultSet rs = null; try { - String tableNameForQuery = SQLs.TABLE_NAME; - rs = connection.getMetaData().getTables( null, null, tableNameForQuery, new String[] - { - "TABLE" - } ); + String tableNameForQuery = SQLs.TABLE_NAME.toUpperCase(); + rs = connection.getMetaData().getTables( null, null, tableNameForQuery, + new String[] { "TABLE" } ); boolean tableExists = rs.next(); LOGGER.trace( "Found table {}? {}", tableNameForQuery, tableExists ); return tableExists; @@ -61,12 +60,9 @@ public abstract class MySQLDatabaseSQLServiceMixin } @Override - public EntityValueResult getEntityValue( ResultSet rs ) + public Reader getEntityStateReader( ResultSet rs ) throws SQLException { - return new EntityValueResult( rs.getLong( SQLs.ENTITY_PK_COLUMN_NAME ), - rs.getLong( SQLs.ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME ), new StringReader( - rs.getString( SQLs.ENTITY_STATE_COLUMN_NAME ) ) ); + return new StringReader( rs.getString( SQLs.ENTITY_STATE_COLUMN_NAME ) ); } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/PostgreSQLDatabaseSQLServiceMixin.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/PostgreSQLDatabaseSQLServiceMixin.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/PostgreSQLDatabaseSQLServiceMixin.java index 9052146..a4cf014 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/PostgreSQLDatabaseSQLServiceMixin.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/PostgreSQLDatabaseSQLServiceMixin.java @@ -19,6 +19,7 @@ */ package org.apache.polygene.entitystore.sql.internal; +import java.io.Reader; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; @@ -28,9 +29,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class PostgreSQLDatabaseSQLServiceMixin - implements DatabaseSQLServiceSpi, DatabaseSQLStringsBuilder, DatabaseSQLService + implements DatabaseSQLServiceSpi, DatabaseSQLStringsBuilder, DatabaseSQLService { - private static final Logger LOGGER = LoggerFactory.getLogger( PostgreSQLDatabaseSQLServiceMixin.class ); @This @@ -38,31 +38,27 @@ public abstract class PostgreSQLDatabaseSQLServiceMixin @Override public boolean tableExists( Connection connection ) - throws SQLException + throws SQLException { ResultSet rs = null; - try { - - rs = connection.getMetaData().getTables( null, - this.spi.getCurrentSchemaName(), - SQLs.TABLE_NAME, - new String[]{ "TABLE" } ); + try + { + rs = connection.getMetaData().getTables( null, spi.getCurrentSchemaName(), SQLs.TABLE_NAME, + new String[] { "TABLE" } ); boolean tableExists = rs.next(); LOGGER.trace( "Found table {}? {}", SQLs.TABLE_NAME, tableExists ); return tableExists; - - } finally { + } + finally + { SQLUtil.closeQuietly( rs ); } } @Override - public EntityValueResult getEntityValue( ResultSet rs ) - throws SQLException + public Reader getEntityStateReader( ResultSet rs ) + throws SQLException { - return new EntityValueResult( rs.getLong( SQLs.ENTITY_PK_COLUMN_NAME ), - rs.getLong( SQLs.ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME ), - rs.getCharacterStream( SQLs.ENTITY_STATE_COLUMN_NAME ) ); + return rs.getCharacterStream( SQLs.ENTITY_STATE_COLUMN_NAME ); } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/SQLiteDatabaseSQLServiceMixin.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/SQLiteDatabaseSQLServiceMixin.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/SQLiteDatabaseSQLServiceMixin.java index 2715a00..d762f8b 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/SQLiteDatabaseSQLServiceMixin.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/SQLiteDatabaseSQLServiceMixin.java @@ -19,6 +19,7 @@ */ package org.apache.polygene.entitystore.sql.internal; +import java.io.Reader; import java.io.StringReader; import java.sql.Connection; import java.sql.ResultSet; @@ -29,9 +30,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class SQLiteDatabaseSQLServiceMixin - implements DatabaseSQLService, DatabaseSQLStringsBuilder, DatabaseSQLServiceSpi + implements DatabaseSQLService, DatabaseSQLStringsBuilder, DatabaseSQLServiceSpi { - private static final Logger LOGGER = LoggerFactory.getLogger( SQLiteDatabaseSQLServiceMixin.class ); @This @@ -39,27 +39,28 @@ public abstract class SQLiteDatabaseSQLServiceMixin @Override public boolean tableExists( Connection connection ) - throws SQLException + throws SQLException { ResultSet rs = null; - try { + try + { String tableNameForQuery = SQLs.TABLE_NAME.toUpperCase(); - rs = connection.getMetaData().getTables( null, null, tableNameForQuery, new String[]{ "TABLE" } ); + rs = connection.getMetaData().getTables( null, null, tableNameForQuery, + new String[] { "TABLE" } ); boolean tableExists = rs.next(); LOGGER.trace( "Found table {}? {}", tableNameForQuery, tableExists ); return tableExists; - } finally { + } + finally + { SQLUtil.closeQuietly( rs ); } } @Override - public EntityValueResult getEntityValue( ResultSet rs ) - throws SQLException + public Reader getEntityStateReader( ResultSet rs ) + throws SQLException { - return new EntityValueResult( rs.getLong( SQLs.ENTITY_PK_COLUMN_NAME ), - rs.getLong( SQLs.ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME ), - new StringReader( rs.getString( SQLs.ENTITY_STATE_COLUMN_NAME ) ) ); + return new StringReader( rs.getString( SQLs.ENTITY_STATE_COLUMN_NAME ) ); } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/SQLs.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/SQLs.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/SQLs.java index bcadde1..8555a5d 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/SQLs.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/internal/SQLs.java @@ -21,19 +21,9 @@ package org.apache.polygene.entitystore.sql.internal; public interface SQLs { - - String DEFAULT_SCHEMA_NAME = "polygene_es"; - - String TABLE_NAME = "polygene_entities"; - - String ENTITY_PK_COLUMN_NAME = "entity_pk"; - - String ENTITY_IDENTITY_COLUMN_NAME = "entity_id"; - - String ENTITY_STATE_COLUMN_NAME = "entity_state"; - - String ENTITY_OPTIMISTIC_LOCK_COLUMN_NAME = "entity_optimistic_lock"; - - String ENTITY_LAST_MODIFIED_COLUMN_NAME = "entity_last_modified"; - + String DEFAULT_SCHEMA_NAME = "POLYGENE_ES"; + String TABLE_NAME = "POLYGENE_ENTITIES"; + String ENTITY_IDENTITY_COLUMN_NAME = "ENTITY_IDENTITY"; + String ENTITY_VERSION_COLUMN_NAME = "ENTITY_VERSION"; + String ENTITY_STATE_COLUMN_NAME = "ENTITY_STATE"; } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/DerbySQLEntityStoreTest.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/DerbySQLEntityStoreTest.java b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/DerbySQLEntityStoreTest.java index 498fb41..6d849cc 100644 --- a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/DerbySQLEntityStoreTest.java +++ b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/DerbySQLEntityStoreTest.java @@ -19,11 +19,9 @@ */ package org.apache.polygene.entitystore.sql; -import java.io.File; import java.sql.Connection; import java.sql.Statement; import javax.sql.DataSource; -import org.apache.derby.iapi.services.io.FileUtil; import org.apache.polygene.api.common.Visibility; import org.apache.polygene.api.unitofwork.UnitOfWork; import org.apache.polygene.api.usecase.UsecaseBuilder; @@ -36,7 +34,6 @@ import org.apache.polygene.library.sql.common.SQLConfiguration; import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler; import org.apache.polygene.test.EntityTestAssembler; import org.apache.polygene.test.entity.AbstractEntityStoreTest; -import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler; public class DerbySQLEntityStoreTest extends AbstractEntityStoreTest @@ -50,29 +47,28 @@ public class DerbySQLEntityStoreTest super.assemble( module ); ModuleAssembly config = module.layer().module( "config" ); new EntityTestAssembler().assemble( config ); - new OrgJsonValueSerializationAssembler().assemble( module ); // START SNIPPET: assembly // DataSourceService - new DBCPDataSourceServiceAssembler(). - identifiedBy( "derby-datasource-service" ). - visibleIn( Visibility.module ). - withConfig( config, Visibility.layer ). - assemble( module ); + new DBCPDataSourceServiceAssembler() + .identifiedBy( "derby-datasource-service" ) + .visibleIn( Visibility.module ) + .withConfig( config, Visibility.layer ) + .assemble( module ); // DataSource - new DataSourceAssembler(). - withDataSourceServiceIdentity( "derby-datasource-service" ). - identifiedBy( "derby-datasource" ). - visibleIn( Visibility.module ). - withCircuitBreaker(). - assemble( module ); + new DataSourceAssembler() + .withDataSourceServiceIdentity( "derby-datasource-service" ) + .identifiedBy( "derby-datasource" ) + .visibleIn( Visibility.module ) + .withCircuitBreaker() + .assemble( module ); // SQL EntityStore - new DerbySQLEntityStoreAssembler(). - visibleIn( Visibility.application ). - withConfig( config, Visibility.layer ). - assemble( module ); + new DerbySQLEntityStoreAssembler() + .visibleIn( Visibility.application ) + .withConfig( config, Visibility.layer ) + .assemble( module ); } // END SNIPPET: assembly @@ -84,7 +80,8 @@ public class DerbySQLEntityStoreTest "Delete " + getClass().getSimpleName() + " test data" ) ); try { - SQLConfiguration config = uow.get( SQLConfiguration.class, DerbySQLEntityStoreAssembler.DEFAULT_ENTITYSTORE_IDENTITY ); + SQLConfiguration config = uow.get( SQLConfiguration.class, + DerbySQLEntityStoreAssembler.DEFAULT_ENTITYSTORE_IDENTITY ); Connection connection = serviceFinder.findService( DataSource.class ).get().getConnection(); connection.setAutoCommit( false ); String schemaName = config.schemaName().get(); @@ -94,10 +91,9 @@ public class DerbySQLEntityStoreTest } try( Statement stmt = connection.createStatement() ) { - stmt.execute( String.format( "DELETE FROM %s." + SQLs.TABLE_NAME, schemaName ) ); + stmt.execute( String.format( "DELETE FROM %s.%s", schemaName, SQLs.TABLE_NAME ) ); connection.commit(); } - FileUtil.removeDirectory( new File( "target/polygene-data" ) ); } finally { @@ -105,5 +101,4 @@ public class DerbySQLEntityStoreTest super.tearDown(); } } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/H2SQLEntityStoreTest.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/H2SQLEntityStoreTest.java b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/H2SQLEntityStoreTest.java index 8b54b3d..1aed71f 100644 --- a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/H2SQLEntityStoreTest.java +++ b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/H2SQLEntityStoreTest.java @@ -19,8 +19,6 @@ */ package org.apache.polygene.entitystore.sql; -import java.io.File; -import org.apache.derby.iapi.services.io.FileUtil; import org.apache.polygene.api.common.Visibility; import org.apache.polygene.bootstrap.AssemblyException; import org.apache.polygene.bootstrap.ModuleAssembly; @@ -29,7 +27,6 @@ import org.apache.polygene.library.sql.assembly.DataSourceAssembler; import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler; import org.apache.polygene.test.EntityTestAssembler; import org.apache.polygene.test.entity.AbstractEntityStoreTest; -import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler; public class H2SQLEntityStoreTest extends AbstractEntityStoreTest @@ -43,44 +40,28 @@ public class H2SQLEntityStoreTest super.assemble( module ); ModuleAssembly config = module.layer().module( "config" ); new EntityTestAssembler().assemble( config ); - new OrgJsonValueSerializationAssembler().assemble( module ); // START SNIPPET: assembly // DataSourceService - new DBCPDataSourceServiceAssembler(). - identifiedBy( "h2-datasource-service" ). - visibleIn( Visibility.module ). - withConfig( config, Visibility.layer ). - assemble( module ); + new DBCPDataSourceServiceAssembler() + .identifiedBy( "h2-datasource-service" ) + .visibleIn( Visibility.module ) + .withConfig( config, Visibility.layer ) + .assemble( module ); // DataSource - new DataSourceAssembler(). - withDataSourceServiceIdentity( "h2-datasource-service" ). - identifiedBy( "h2-datasource" ). - visibleIn( Visibility.module ). - withCircuitBreaker(). - assemble( module ); + new DataSourceAssembler() + .withDataSourceServiceIdentity( "h2-datasource-service" ) + .identifiedBy( "h2-datasource" ) + .visibleIn( Visibility.module ) + .withCircuitBreaker() + .assemble( module ); // SQL EntityStore - new H2SQLEntityStoreAssembler(). - visibleIn( Visibility.application ). - withConfig( config, Visibility.layer ). - assemble( module ); + new H2SQLEntityStoreAssembler() + .visibleIn( Visibility.application ) + .withConfig( config, Visibility.layer ) + .assemble( module ); } // END SNIPPET: assembly - - @Override - public void tearDown() - throws Exception - { - try - { - FileUtil.removeDirectory( new File( "target/polygene-data" ) ); - } - finally - { - super.tearDown(); - } - } - } http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java index 0718ddb..059301c 100644 --- a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java +++ b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java @@ -36,7 +36,6 @@ import org.apache.polygene.library.sql.datasource.DataSourceConfiguration; import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler; import org.apache.polygene.test.EntityTestAssembler; import org.apache.polygene.test.entity.AbstractEntityStoreTest; -import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler; import org.junit.ClassRule; public class MySQLEntityStoreTest @@ -64,29 +63,28 @@ public class MySQLEntityStoreTest super.assemble( module ); ModuleAssembly config = module.layer().module( "config" ); new EntityTestAssembler().assemble( config ); - new OrgJsonValueSerializationAssembler().assemble( module ); // START SNIPPET: assembly // DataSourceService - new DBCPDataSourceServiceAssembler(). - identifiedBy( "mysql-datasource-service" ). - visibleIn( Visibility.module ). - withConfig( config, Visibility.layer ). - assemble( module ); + new DBCPDataSourceServiceAssembler() + .identifiedBy( "mysql-datasource-service" ) + .visibleIn( Visibility.module ) + .withConfig( config, Visibility.layer ) + .assemble( module ); // DataSource - new DataSourceAssembler(). - withDataSourceServiceIdentity( "mysql-datasource-service" ). - identifiedBy( "mysql-datasource" ). - visibleIn( Visibility.module ). - withCircuitBreaker(). - assemble( module ); + new DataSourceAssembler() + .withDataSourceServiceIdentity( "mysql-datasource-service" ) + .identifiedBy( "mysql-datasource" ) + .visibleIn( Visibility.module ) + .withCircuitBreaker() + .assemble( module ); // SQL EntityStore - new MySQLEntityStoreAssembler(). - visibleIn( Visibility.application ). - withConfig( config, Visibility.layer ). - assemble( module ); + new MySQLEntityStoreAssembler() + .visibleIn( Visibility.application ) + .withConfig( config, Visibility.layer ) + .assemble( module ); // END SNIPPET: assembly String mysqlHost = DOCKER.getDockerHost(); int mysqlPort = DOCKER.getExposedContainerPort( "3306/tcp" ); http://git-wip-us.apache.org/repos/asf/polygene-java/blob/7c2814ee/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/PostgreSQLEntityStoreTest.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/PostgreSQLEntityStoreTest.java b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/PostgreSQLEntityStoreTest.java index 49d5a13..c6dd48c 100644 --- a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/PostgreSQLEntityStoreTest.java +++ b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/PostgreSQLEntityStoreTest.java @@ -36,7 +36,6 @@ import org.apache.polygene.library.sql.datasource.DataSourceConfiguration; import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler; import org.apache.polygene.test.EntityTestAssembler; import org.apache.polygene.test.entity.AbstractEntityStoreTest; -import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler; import org.junit.ClassRule; /** @@ -88,29 +87,28 @@ public class PostgreSQLEntityStoreTest super.assemble( module ); ModuleAssembly config = module.layer().module( "config" ); new EntityTestAssembler().assemble( config ); - new OrgJsonValueSerializationAssembler().assemble( module ); // START SNIPPET: assembly // DataSourceService - new DBCPDataSourceServiceAssembler(). - identifiedBy( "postgresql-datasource-service" ). - visibleIn( Visibility.module ). - withConfig( config, Visibility.layer ). - assemble( module ); + new DBCPDataSourceServiceAssembler() + .identifiedBy( "postgresql-datasource-service" ) + .visibleIn( Visibility.module ) + .withConfig( config, Visibility.layer ) + .assemble( module ); // DataSource - new DataSourceAssembler(). - withDataSourceServiceIdentity( "postgresql-datasource-service" ). - identifiedBy( "postgresql-datasource" ). - visibleIn( Visibility.module ). - withCircuitBreaker(). - assemble( module ); + new DataSourceAssembler() + .withDataSourceServiceIdentity( "postgresql-datasource-service" ) + .identifiedBy( "postgresql-datasource" ) + .visibleIn( Visibility.module ) + .withCircuitBreaker() + .assemble( module ); // SQL EntityStore - new PostgreSQLEntityStoreAssembler(). - visibleIn( Visibility.application ). - withConfig( config, Visibility.layer ). - assemble( module ); + new PostgreSQLEntityStoreAssembler() + .visibleIn( Visibility.application ) + .withConfig( config, Visibility.layer ) + .assemble( module ); // END SNIPPET: assembly String host = DOCKER.getDockerHost(); int port = DOCKER.getExposedContainerPort( "5432/tcp" ); @@ -129,7 +127,8 @@ public class PostgreSQLEntityStoreTest ); try { - SQLConfiguration config = uow.get( SQLConfiguration.class, PostgreSQLEntityStoreAssembler.DEFAULT_ENTITYSTORE_IDENTITY ); + SQLConfiguration config = uow.get( SQLConfiguration.class, + PostgreSQLEntityStoreAssembler.DEFAULT_ENTITYSTORE_IDENTITY ); Connection connection = serviceFinder.findService( DataSource.class ).get().getConnection(); connection.setAutoCommit( false ); String schemaName = config.schemaName().get(); @@ -139,7 +138,7 @@ public class PostgreSQLEntityStoreTest } try( Statement stmt = connection.createStatement() ) { - stmt.execute( String.format( "DELETE FROM %s." + SQLs.TABLE_NAME, schemaName ) ); + stmt.execute( String.format( "DROP SCHEMA \"%s\" CASCADE", schemaName ) ); connection.commit(); } } @@ -149,5 +148,4 @@ public class PostgreSQLEntityStoreTest super.tearDown(); } } - }
