You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/08/05 18:34:47 UTC

[1/3] cayenne git commit: CAY-2098 correctly distinguish CLOB columns from VARCHAR. Tested only with a PostgreSQL based model.

Repository: cayenne
Updated Branches:
  refs/heads/master 697f38e51 -> 3591c2626


CAY-2098 correctly distinguish CLOB columns from VARCHAR. Tested only with a PostgreSQL based model.


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/ee22c10d
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/ee22c10d
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/ee22c10d

Branch: refs/heads/master
Commit: ee22c10da10c672e2c19b16c7f3a36d27025d18b
Parents: 8e6ba19
Author: Maik Musall <ma...@selbstdenker.ag>
Authored: Fri Aug 5 13:58:10 2016 +0200
Committer: Maik Musall <ma...@selbstdenker.ag>
Committed: Fri Aug 5 13:58:10 2016 +0200

----------------------------------------------------------------------
 .../apache/cayenne/wocompat/EOModelHelper.java  |  5 +-
 .../cayenne/wocompat/EOModelProcessor.java      | 64 +++++++++++---------
 2 files changed, 36 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/ee22c10d/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelHelper.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelHelper.java b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelHelper.java
index b78b068..fd05744 100644
--- a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelHelper.java
+++ b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelHelper.java
@@ -273,9 +273,7 @@ public class EOModelHelper {
 
 					String attrName = (String) attrMap.get("name");
 
-					// TODO: why are we copying the original map? can we just
-					// use it as
-					// is?
+					// TODO: why are we copying the original map? can we just use it as is?
 					Map prototypeAttrMap = new HashMap();
 					prototypeValues.put(attrName, prototypeAttrMap);
 
@@ -287,6 +285,7 @@ public class EOModelHelper {
 					prototypeAttrMap.put("allowsNull", attrMap.get("allowsNull"));
 					prototypeAttrMap.put("scale", attrMap.get("scale"));
 					prototypeAttrMap.put("valueType", attrMap.get("valueType"));
+					prototypeAttrMap.put("externalType", attrMap.get("externalType"));
 				}
 			}
 		}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/ee22c10d/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
index 1e7cf02..9daaa15 100644
--- a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
+++ b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
@@ -22,6 +22,7 @@ package org.apache.cayenne.wocompat;
 import java.io.File;
 import java.io.InputStream;
 import java.net.URL;
+import java.sql.Types;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -30,7 +31,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
-
 import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.exp.ExpressionException;
 import org.apache.cayenne.map.*;
@@ -57,6 +57,7 @@ public class EOModelProcessor {
 	public EOModelProcessor() {
 		prototypeChecker = new Predicate() {
 
+			@Override
 			public boolean evaluate(Object object) {
 				if (object == null) {
 					return false;
@@ -416,6 +417,11 @@ public class EOModelProcessor {
 
 		return objEntity;
 	}
+	
+	private static boolean externalTypeIsClob(String type) {
+		if( type == null ) return false;
+		return "CLOB".equalsIgnoreCase(type) || "TEXT".equalsIgnoreCase(type);
+	}
 
 	/**
 	 * Create ObjAttributes of the specified entity, as well as DbAttributes of
@@ -476,25 +482,11 @@ public class EOModelProcessor {
 			String prototypeName = (String) attrMap.get("prototypeName");
 			Map prototypeAttrMap = helper.getPrototypeAttributeMapFor(prototypeName);
 
-			String dbAttrName = (String) attrMap.get("columnName");
-			if (null == dbAttrName) {
-				dbAttrName = (String) prototypeAttrMap.get("columnName");
-			}
-
-			String attrName = (String) attrMap.get("name");
-			if (null == attrName) {
-				attrName = (String) prototypeAttrMap.get("name");
-			}
-
-			String attrType = (String) attrMap.get("valueClassName");
-			if (null == attrType) {
-				attrType = (String) prototypeAttrMap.get("valueClassName");
-			}
-
-			String valueType = (String) attrMap.get("valueType");
-			if (valueType == null) {
-				valueType = (String) prototypeAttrMap.get("valueType");
-			}
+			String dbAttrName = getStringValueFromMap( "columnName", attrMap, prototypeAttrMap );
+			String attrName = getStringValueFromMap( "name", attrMap, prototypeAttrMap );
+			String attrType = getStringValueFromMap( "valueClassName", attrMap, prototypeAttrMap );
+			String valueType = getStringValueFromMap( "valueType", attrMap, prototypeAttrMap );
+			String externalType = getStringValueFromMap( "externalType", attrMap, prototypeAttrMap );
 
 			String javaType = helper.javaTypeForEOModelerType(attrType, valueType);
 			EODbAttribute dbAttr = null;
@@ -504,21 +496,26 @@ public class EOModelProcessor {
 				// if inherited attribute, skip it for DbEntity...
 				if (!singleTableInheritance || dbEntity.getAttribute(dbAttrName) == null) {
 
-					// create DbAttribute...since EOF allows the same column
-					// name for
-					// more than one Java attribute, we need to check for name
-					// duplicates
+					// create DbAttribute...since EOF allows the same column name for
+					// more than one Java attribute, we need to check for name duplicates
 					int i = 0;
 					String dbAttributeBaseName = dbAttrName;
 					while (dbEntity.getAttribute(dbAttrName) != null) {
 						dbAttrName = dbAttributeBaseName + i++;
 					}
 
-					dbAttr = new EODbAttribute(dbAttrName, TypesMapping.getSqlTypeByJava(javaType), dbEntity);
+					int sqlType = TypesMapping.getSqlTypeByJava(javaType);
+					int width = getInt("width", attrMap, prototypeAttrMap, -1);
+					if (sqlType == Types.VARCHAR && width < 0 && externalTypeIsClob(externalType)) {
+						// CLOB, or TEXT as PostgreSQL calls it, is usally noted as having no width. In order to
+						// not mistake any VARCHAR columns that just happen to have no width set in the model
+						// for CLOB columns, use externalType as an additional check.
+						sqlType = Types.CLOB;
+					}
+					dbAttr = new EODbAttribute(dbAttrName, sqlType, dbEntity);
 					dbAttr.setEoAttributeName(attrName);
 					dbEntity.addAttribute(dbAttr);
 
-					int width = getInt("width", attrMap, prototypeAttrMap, -1);
 					if (width >= 0) {
 						dbAttr.setMaxLength(width);
 					}
@@ -532,10 +529,8 @@ public class EOModelProcessor {
 						dbAttr.setPrimaryKey(true);
 
 					Object allowsNull = attrMap.get("allowsNull");
-					// TODO: Unclear that allowsNull should be inherited from
-					// EOPrototypes
-					// if (null == allowsNull) allowsNull =
-					// prototypeAttrMap.get("allowsNull");;
+					// TODO: Unclear that allowsNull should be inherited from EOPrototypes
+					// if (null == allowsNull) allowsNull = prototypeAttrMap.get("allowsNull");;
 
 					dbAttr.setMandatory(!"Y".equals(allowsNull));
 				}
@@ -560,6 +555,14 @@ public class EOModelProcessor {
 		}
 	}
 
+	private String getStringValueFromMap( String key, Map attrMap, Map prototypeAttrMap ) {
+		String dbAttrName = (String) attrMap.get(key);
+		if (null == dbAttrName) {
+			dbAttrName = (String) prototypeAttrMap.get(key);
+		}
+		return dbAttrName;
+	}
+
 	int getInt(String key, Map map, Map prototypes, int defaultValue) {
 
 		Object value = map.get(key);
@@ -816,6 +819,7 @@ public class EOModelProcessor {
 			this.dataMap = dataMap;
 		}
 
+		@Override
 		public int compare(Object o1, Object o2) {
 			if (o1 == null) {
 				return o2 != null ? -1 : 0;


[3/3] cayenne git commit: Merge branch 'master' into modeler_fixes

Posted by aa...@apache.org.
Merge branch 'master' into modeler_fixes


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/3591c262
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/3591c262
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/3591c262

Branch: refs/heads/master
Commit: 3591c2626b61357f0b3f589ab69265bda312ef9f
Parents: bc4f9a3 697f38e
Author: Maik Musall <ma...@selbstdenker.ag>
Authored: Fri Aug 5 15:58:08 2016 +0200
Committer: Maik Musall <ma...@selbstdenker.ag>
Committed: Fri Aug 5 15:58:08 2016 +0200

----------------------------------------------------------------------
 .../cayenne/access/DataDomainDBDiffBuilder.java | 33 ++++++------
 .../cayenne/access/VerticalInheritanceIT.java   | 30 ++++++++---
 .../apache/cayenne/map/ObjRelationshipIT.java   |  2 +-
 .../testdo/inheritance_vertical/IvAbstract.java |  9 ++++
 .../testdo/inheritance_vertical/IvConcrete.java |  9 ++++
 .../inheritance_vertical/auto/_Iv1Root.java     | 15 +++---
 .../inheritance_vertical/auto/_Iv1Sub1.java     |  9 ++--
 .../inheritance_vertical/auto/_Iv2Root.java     |  9 ++--
 .../inheritance_vertical/auto/_Iv2Sub1.java     |  9 ++--
 .../testdo/inheritance_vertical/auto/_Iv2X.java |  2 +
 .../inheritance_vertical/auto/_IvAbstract.java  | 27 ++++++++++
 .../inheritance_vertical/auto/_IvConcrete.java  | 53 ++++++++++++++++++++
 .../inheritance_vertical/auto/_IvRoot.java      | 15 +++---
 .../inheritance_vertical/auto/_IvSub1.java      |  9 ++--
 .../inheritance_vertical/auto/_IvSub1Sub1.java  |  9 ++--
 .../inheritance_vertical/auto/_IvSub2.java      | 15 +++---
 .../test/resources/inheritance-vertical.map.xml | 32 +++++++++++-
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  1 +
 18 files changed, 226 insertions(+), 62 deletions(-)
----------------------------------------------------------------------



[2/3] cayenne git commit: CAY-2099 guess sql type of prototyped custom Java attributes based on externalType in model plist

Posted by aa...@apache.org.
CAY-2099 guess sql type of prototyped custom Java attributes based on externalType in model plist


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/bc4f9a36
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/bc4f9a36
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/bc4f9a36

Branch: refs/heads/master
Commit: bc4f9a3608b9e80ab03ea0bc46bb15cfe395e1d3
Parents: ee22c10
Author: Maik Musall <ma...@selbstdenker.ag>
Authored: Fri Aug 5 15:57:01 2016 +0200
Committer: Maik Musall <ma...@selbstdenker.ag>
Committed: Fri Aug 5 15:57:01 2016 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/cayenne/wocompat/EOModelProcessor.java | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/bc4f9a36/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
index 9daaa15..9c2f561 100644
--- a/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
+++ b/modeler/cayenne-wocompat/src/main/java/org/apache/cayenne/wocompat/EOModelProcessor.java
@@ -511,6 +511,11 @@ public class EOModelProcessor {
 						// not mistake any VARCHAR columns that just happen to have no width set in the model
 						// for CLOB columns, use externalType as an additional check.
 						sqlType = Types.CLOB;
+					} else if(sqlType == TypesMapping.NOT_DEFINED && externalType != null) {
+						// At this point we usually hit a custom Java class through a prototype, which isn't resolvable
+						// with the model alone. But we can use the externalType as a hint. If that still doesn't match
+						// anything, sqlType will still be NOT_DEFINED.
+						sqlType = TypesMapping.getSqlTypeByName(externalType.toUpperCase());
 					}
 					dbAttr = new EODbAttribute(dbAttrName, sqlType, dbEntity);
 					dbAttr.setEoAttributeName(attrName);