Repository: polygene-java Updated Branches: refs/heads/develop 826cb7be4 -> f6a5b3384
Adding tests for MariaDb as well. Updating inaccurate Javdocs. Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/0de78c44 Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/0de78c44 Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/0de78c44 Branch: refs/heads/develop Commit: 0de78c44eb6ed32e4907fa4e8ea85d4963f31ce1 Parents: 826cb7b Author: niclas <[email protected]> Authored: Thu Oct 26 18:39:28 2017 +0800 Committer: niclas <[email protected]> Committed: Thu Oct 26 18:39:28 2017 +0800 ---------------------------------------------------------------------- .../polygene/entitystore/sql/EntitiesTable.java | 5 +- .../entitystore/sql/MariaDbEntityStoreTest.java | 111 +++++++++++++++++++ .../sql/MariaDbEntityStoreTestSuite.java | 93 ++++++++++++++++ 3 files changed, 206 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0de78c44/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/EntitiesTable.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/EntitiesTable.java b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/EntitiesTable.java index e201b12..943d274 100644 --- a/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/EntitiesTable.java +++ b/extensions/entitystore-sql/src/main/java/org/apache/polygene/entitystore/sql/EntitiesTable.java @@ -281,9 +281,8 @@ public class EntitiesTable * </p> * <code><pre> * SELECT * FROM ENTITIES - * JOIN Person ON identity = ENTITIES.value_id - * JOIN LegalEntity ON identity = ENTITIES.value_id - * JOIN Person_Assoc ON identity = ENTITIES.value_id + * LEFT OUTER JOIN Person ON ENTITIES.value_id = Person.identity + * LEFT OUTER JOIN LegalEntity ON ENTITIES.value_id = LegalEntity.identity * WHERE ENTITIES.identity = '123' * </pre></code> * http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0de78c44/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MariaDbEntityStoreTest.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MariaDbEntityStoreTest.java b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MariaDbEntityStoreTest.java new file mode 100644 index 0000000..d1594e7 --- /dev/null +++ b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MariaDbEntityStoreTest.java @@ -0,0 +1,111 @@ +/* + * 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.util.HashMap; +import org.apache.polygene.api.common.Visibility; +import org.apache.polygene.api.structure.Module; +import org.apache.polygene.bootstrap.AssemblyException; +import org.apache.polygene.bootstrap.ModuleAssembly; +import org.apache.polygene.entitystore.sql.assembly.MariaDbSQLEntityStoreAssembler; +import org.apache.polygene.entitystore.sql.assembly.MySQLEntityStoreAssembler; +import org.apache.polygene.library.sql.assembly.DataSourceAssembler; +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.docker.DockerRule; +import org.apache.polygene.test.entity.AbstractEntityStoreTest; +import org.junit.ClassRule; +import org.junit.Ignore; + +@Ignore( "Waiting response from JOOQ to fix SQL generation. VARCHAR instead of CHAR") +public class MariaDbEntityStoreTest + extends AbstractEntityStoreTest +{ + @ClassRule + public static final DockerRule DOCKER = new DockerRule( + "mariadb", + new HashMap<String, String>() + {{ + put( "MYSQL_ROOT_PASSWORD", "" ); + put( "MYSQL_ALLOW_EMPTY_PASSWORD", "yes" ); + put( "MYSQL_DATABASE", "jdbc_test_db" ); + put( "MYSQL_ROOT_HOST", "172.17.0.1" ); + }}, + 30000L +// , "mysqld: ready for connections" TODO: add this after next release of tdomzal/junit-docker-rule + ); + + private String storageModuleName; + private String storageLayerName; + + @Override + // START SNIPPET: assembly + public void assemble( ModuleAssembly module ) + throws AssemblyException + { + // END SNIPPET: assembly + super.assemble( module ); + storageModuleName = module.name(); + storageLayerName = module.layer().name(); + ModuleAssembly config = module.layer().module( "config" ); + new EntityTestAssembler().defaultServicesVisibleIn( Visibility.layer ).assemble( config ); + + // START SNIPPET: assembly + // DataSourceService + new DBCPDataSourceServiceAssembler() + .identifiedBy( "mariadb-datasource-service" ) + .visibleIn( Visibility.module ) + .withConfig( config, Visibility.layer ) + .assemble( module ); + + // DataSource + new DataSourceAssembler() + .withDataSourceServiceIdentity( "mariadb-datasource-service" ) + .identifiedBy( "mariadb-datasource" ) + .visibleIn( Visibility.module ) + .withCircuitBreaker() + .assemble( module ); + + // SQL EntityStore + new MariaDbSQLEntityStoreAssembler() + .visibleIn( Visibility.application ) + .withConfig( config, Visibility.layer ) + .assemble( module ); + // END SNIPPET: assembly + String host = DOCKER.getDockerHost(); + int port = DOCKER.getExposedContainerPort( "3306/tcp" ); + config.forMixin( DataSourceConfiguration.class ).declareDefaults() + .url().set( "jdbc:mysql://" + host + ":" + port + + "/jdbc_test_db?profileSQL=false&useLegacyDatetimeCode=false&serverTimezone=UTC" + + "&nullCatalogMeansCurrent=true&nullNamePatternMatchesAll=true" ); + // START SNIPPET: assembly + } + // END SNIPPET: assembly + + @Override + public void tearDown() + throws Exception + { + Module storageModule = application.findModule( storageLayerName, storageModuleName ); + TearDownUtil.dropSchema( storageModule, getClass().getSimpleName() ); + super.tearDown(); + } +} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0de78c44/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MariaDbEntityStoreTestSuite.java ---------------------------------------------------------------------- diff --git a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MariaDbEntityStoreTestSuite.java b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MariaDbEntityStoreTestSuite.java new file mode 100644 index 0000000..e3d9254 --- /dev/null +++ b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MariaDbEntityStoreTestSuite.java @@ -0,0 +1,93 @@ +/* + * 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.util.HashMap; +import org.apache.polygene.api.common.Visibility; +import org.apache.polygene.api.structure.Module; +import org.apache.polygene.bootstrap.ModuleAssembly; +import org.apache.polygene.entitystore.sql.assembly.MySQLEntityStoreAssembler; +import org.apache.polygene.library.sql.assembly.DataSourceAssembler; +import org.apache.polygene.library.sql.datasource.DataSourceConfiguration; +import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler; +import org.apache.polygene.test.docker.DockerRule; +import org.apache.polygene.test.entity.model.EntityStoreTestSuite; +import org.junit.ClassRule; +import org.junit.Ignore; + +@Ignore( "Waiting response from JOOQ to fix SQL generation. VARCHAR instead of CHAR") +public class MariaDbEntityStoreTestSuite extends EntityStoreTestSuite +{ + @ClassRule + public static final DockerRule DOCKER = new DockerRule( + "mysql", + new HashMap<String, String>() + {{ + put( "MYSQL_ROOT_PASSWORD", "" ); + put( "MYSQL_ALLOW_EMPTY_PASSWORD", "yes" ); + put( "MYSQL_DATABASE", "jdbc_test_db" ); + put( "MYSQL_ROOT_HOST", "172.17.0.1" ); + }}, + 30000L +// , "mysqld: ready for connections" TODO: add this after next release of tdomzal/junit-docker-rule + ); + + @Override + protected void defineStorageModule( ModuleAssembly module ) + { + module.defaultServices(); + // DataSourceService + new DBCPDataSourceServiceAssembler() + .identifiedBy( "mysql-datasource-service" ) + .visibleIn( Visibility.module ) + .withConfig( configModule, Visibility.application ) + .assemble( module ); + + // DataSource + new DataSourceAssembler() + .withDataSourceServiceIdentity( "mysql-datasource-service" ) + .identifiedBy( "mysql-datasource" ) + .visibleIn( Visibility.module ) + .withCircuitBreaker() + .assemble( module ); + + // SQL EntityStore + new MySQLEntityStoreAssembler() + .visibleIn( Visibility.application ) + .withConfig( configModule, Visibility.application ) + .assemble( module ); + + String mysqlHost = DOCKER.getDockerHost(); + int mysqlPort = DOCKER.getExposedContainerPort( "3306/tcp" ); + configModule.forMixin( DataSourceConfiguration.class ).declareDefaults() + .url().set( "jdbc:mysql://" + mysqlHost + ":" + mysqlPort + + "/jdbc_test_db?profileSQL=false&useLegacyDatetimeCode=false&serverTimezone=UTC" + + "&nullCatalogMeansCurrent=true&nullNamePatternMatchesAll=true" ); + } + + @Override + public void tearDown() + throws Exception + { + Module storageModule = application.findModule( "Infrastructure Layer", "Storage Module" ); + TearDownUtil.dropSchema( storageModule, getClass().getSimpleName() ); + super.tearDown(); + } +}
