You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2019/07/18 13:54:59 UTC

[empire-db] branch master updated: EMPIREDB-297: Bugfix for sql data types NCHAR, NVARCHAR and NCLOB.

This is an automated email from the ASF dual-hosted git repository.

doebele pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/empire-db.git


The following commit(s) were added to refs/heads/master by this push:
     new a9f2110  EMPIREDB-297: Bugfix for sql data types NCHAR, NVARCHAR and NCLOB.
     new 90c3686  Merge branch 'master' of https://gitbox.apache.org/repos/asf/empire-db
a9f2110 is described below

commit a9f2110e04c636aae90ed2fda64174be3b931b1d
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Thu Jul 18 15:52:44 2019 +0200

    EMPIREDB-297: Bugfix for sql data types NCHAR, NVARCHAR and NCLOB.
---
 empire-db-codegen/config.xml                       | 26 +++++++++++-------
 empire-db-codegen/pom.xml                          | 32 ++++++++++++----------
 .../apache/empire/db/codegen/CodeGenConfig.java    | 14 +++++++++-
 .../apache/empire/db/codegen/CodeGenParser.java    | 17 ++++++++++--
 .../src/main/resources/templates/Database.vm       |  5 ++--
 5 files changed, 65 insertions(+), 29 deletions(-)

diff --git a/empire-db-codegen/config.xml b/empire-db-codegen/config.xml
index d14c590..7904781 100644
--- a/empire-db-codegen/config.xml
+++ b/empire-db-codegen/config.xml
@@ -20,23 +20,28 @@
 <config>
 
 	<properties>
-		<!-- provider name must match the property-section containing the connection data -->
+		<!-- JDBC connection data -->
+		
+		<!-- ORACLE example 
 		<jdbcClass>oracle.jdbc.driver.OracleDriver</jdbcClass>
 		<jdbcURL>jdbc:oracle:thin:@192.168.0.2:1521:ora10</jdbcURL>
 		<jdbcUser>DBSAMPLE</jdbcUser>
 		<jdbcPwd>DBSAMPLE</jdbcPwd>
-		<!-- 
-		<jdbcClass>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbcClass>
-		<jdbcURL>jdbc:sqlserver://localhost:1433</jdbcURL>
-		<jdbcUser>empire-db</jdbcUser>
-		<jdbcPwd>empire-db</jdbcPwd>
-		-->
-
-		<!-- Schema options -->
 		<dbCatalog></dbCatalog>
 		<dbSchema>DBSAMPLE</dbSchema>
 		<dbTablePattern></dbTablePattern>
-		<timestampColumn>CREATIONDATE</timestampColumn>
+		<timestampColumn>UPDATE_TIMESTAMP</timestampColumn>
+		-->
+
+		<!-- SQL-Server example -->		
+        <jdbcClass>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbcClass>
+        <jdbcURL>jdbc:sqlserver://vm010</jdbcURL>
+        <jdbcUser>jdbcUser</jdbcUser>
+        <jdbcPwd>jdbcPwd</jdbcPwd>
+		<dbCatalog>DBSAMPLE</dbCatalog>
+		<dbSchema>dbo</dbSchema>
+		<dbTablePattern></dbTablePattern>
+		<timestampColumn>UPDATE_TIMESTAMP</timestampColumn>
 		
 		<!-- generation options -->
 		<targetFolder>target/generated/dbsample</targetFolder>
@@ -44,6 +49,7 @@
 		<tablePackageName>org.apache.empire.db.samples.dbsample.tables</tablePackageName>
 		<viewPackageName>org.apache.empire.db.samples.dbsample.views</viewPackageName>
 		<recordPackageName>org.apache.empire.db.samples.dbsample.records</recordPackageName>
+		<generateViews>true</generateViews>
 		<dbClassName>SampleDB</dbClassName>
 		<tableBaseName>SampleTable</tableBaseName>
 		<viewBaseName>SampleView</viewBaseName>
diff --git a/empire-db-codegen/pom.xml b/empire-db-codegen/pom.xml
index 7f20538..b0a17be 100644
--- a/empire-db-codegen/pom.xml
+++ b/empire-db-codegen/pom.xml
@@ -53,28 +53,32 @@
 		    <scope>test</scope>
 		</dependency>
 
-		<!-- mysql -->
-		<!-- <dependency>
-		    <groupId>mysql</groupId>
-		    <artifactId>mysql-connector-java</artifactId>
-		    <version>5.1.1</version>
-		</dependency>-->
+        <!-- msssql -->
+		<!--   
+        <dependency>
+            <groupId>com.microsoft.sqlserver</groupId>
+            <artifactId>mssql-jdbc</artifactId>
+            <version>7.0.0.jre8</version>
+        </dependency>
+		-->
 		
-		<!-- ojdbc   
+		<!-- oracle -->
+		<!--   
 		<dependency>
 		    <groupId>com.oracle</groupId>
-			<artifactId>ojdbc5</artifactId>
-			<version>11.2.0.3</version>
+			<artifactId>ojdbc6</artifactId>
+			<version>11.2.0.3.0</version>
 		</dependency>
 		-->
 
-		<!-- msssql 
+		<!-- mysql -->
+		<!-- 
 		<dependency>
-		    <groupId>com.microsoft</groupId>
-		    <artifactId>sqljdbc</artifactId>
-		    <version>1.0</version>
+		    <groupId>mysql</groupId>
+		    <artifactId>mysql-connector-java</artifactId>
+		    <version>5.1.6</version>
 		</dependency>
-		--> 
+		-->
 		
 	</dependencies>
 	
diff --git a/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenConfig.java b/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenConfig.java
index 8c92d95..92f7d93 100644
--- a/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenConfig.java
+++ b/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenConfig.java
@@ -58,6 +58,10 @@ public class CodeGenConfig extends XMLConfiguration {
 	 */
 	private String dbTablePattern = null;
 	/**
+	 * flag whether to parse and generate views
+	 */
+	private boolean generateViews = true;
+	/**
 	 * Name of the timestamp column used for optimistic locking (may be null)
 	 * e.g. "UPDATE_TIMESTAMP";
 	 */
@@ -321,7 +325,15 @@ public class CodeGenConfig extends XMLConfiguration {
 		this.dbTablePattern = dbTablePattern;
 	}
 
-	public String getTimestampColumn() {
+    public boolean isGenerateViews() {
+        return generateViews;
+    }
+
+    public void setGenerateViews(boolean generateViews) {
+        this.generateViews = generateViews;
+    }
+
+    public String getTimestampColumn() {
 		return timestampColumn;
 	}
 
diff --git a/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenParser.java b/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenParser.java
index 44a187c..4f2b112 100644
--- a/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenParser.java
+++ b/empire-db-codegen/src/main/java/org/apache/empire/db/codegen/CodeGenParser.java
@@ -53,6 +53,12 @@ public class CodeGenParser {
 
 	public static class InMemoryDatabase extends DBDatabase {
         private static final long serialVersionUID = 1L;
+        
+        @Override
+        public List<DBRelation> getRelations()
+        {
+            return relations;
+        }
 	}
 	
 	public static class InMemoryView extends DBView {
@@ -141,13 +147,15 @@ public class CodeGenParser {
             int tableCount = 0; // Moved to be outside table pattern loop.
             int viewCount = 0;
             for(String pattern : tablePatterns){
-            
+                // types
+                String[] types = config.isGenerateViews() ? new String[] { "TABLE", "VIEW" }
+                                                          : new String[] { "TABLE" }; 
 			    // Get table metadata
 	            tables = dbMeta.getTables(
 			            config.getDbCatalog(), 
 			            config.getDbSchema(), 
 			            pattern == null ? pattern: pattern.trim(),
-						new String[] { "TABLE", "VIEW" });
+						types);
 	            
 	            // Add all tables and views 
 				while (tables.next()) {
@@ -248,6 +256,7 @@ public class CodeGenParser {
 		        		refs[i]=refsOld[i];
 	        		refs[i]=reference;
 		        	// remove old relation
+                    log.warn("Duplicate relation {}", r.getName());
 	        		db.getRelations().remove(r);
 		        } else {
 		        	refs = new DBRelation.DBReference[] { reference };
@@ -467,6 +476,7 @@ public class CodeGenParser {
 			empireType = DataType.INTEGER;
 			break;
 		case Types.VARCHAR:
+		case Types.NVARCHAR:
 			empireType = DataType.VARCHAR;
 			break;
 		case Types.DATE:
@@ -477,6 +487,7 @@ public class CodeGenParser {
 			empireType = DataType.DATETIME;
 			break;
 		case Types.CHAR:
+        case Types.NCHAR:
 			empireType = DataType.CHAR;
 			break;
 		case Types.DOUBLE:
@@ -493,7 +504,9 @@ public class CodeGenParser {
 			empireType = DataType.BOOL;
 			break;
 		case Types.CLOB:
+		case Types.NCLOB:
 		case Types.LONGVARCHAR:
+		case Types.LONGNVARCHAR:
 			empireType = DataType.CLOB;
 			break;
 		case Types.BINARY:
diff --git a/empire-db-codegen/src/main/resources/templates/Database.vm b/empire-db-codegen/src/main/resources/templates/Database.vm
index 69590a3..aafa65c 100644
--- a/empire-db-codegen/src/main/resources/templates/Database.vm
+++ b/empire-db-codegen/src/main/resources/templates/Database.vm
@@ -93,12 +93,13 @@ public class $dbClassName extends DBDatabase {
 #foreach ($relation in $database.relations)
 #if($relation.references.size()==1)
 #foreach ($reference in $relation.references)
-		addRelation( ${parser.getRowsetName($reference.sourceColumn.rowSet)}.${parser.getColumnName($reference.sourceColumn)}.referenceOn(${parser.getRowsetName($reference.targetColumn.rowSet)}.${parser.getColumnName($reference.targetColumn)}));
+		addRelation( "$relation.name", ${parser.getRowsetName($reference.sourceColumn.rowSet)}.${parser.getColumnName($reference.sourceColumn)}.referenceOn(${parser.getRowsetName($reference.targetColumn.rowSet)}.${parser.getColumnName($reference.targetColumn)}));
 #end
 #else
 #foreach ($reference in $relation.references)
 #if($foreach.isFirst())
-		addRelation( ${parser.getRowsetName($reference.sourceColumn.rowSet)}.${parser.getColumnName($reference.sourceColumn)}.referenceOn(${parser.getRowsetName($reference.targetColumn.rowSet)}.$parser.getColumnName($reference.targetColumn)),
+		addRelation( "$relation.name", 
+					 ${parser.getRowsetName($reference.sourceColumn.rowSet)}.${parser.getColumnName($reference.sourceColumn)}.referenceOn(${parser.getRowsetName($reference.targetColumn.rowSet)}.$parser.getColumnName($reference.targetColumn)),
 #else
 #if($foreach.isLast())
         	         ${parser.getRowsetName($reference.sourceColumn.rowSet)}.${parser.getColumnName($reference.sourceColumn)}.referenceOn(${parser.getRowsetName($reference.targetColumn.rowSet)}.$parser.getColumnName($reference.targetColumn)));