After a long, long time away from the list, with a lot of work. I'm back :-)


I found a problem in my installation with db2, and I don't know if this problem 
exist with other databases too.

The problem is :
I have a long var char column, and use a textarea to update this column.
dbforms use the method
PreparedStatement.setObject to update the value passing fieldtype CHAR. And in 
this case the value is truncated at 255 chars.
Passing the fieldtype LONGVARCHAR works fine.

I have made a patch and want to more people review and test it.




-- 
Ivan F. Martinez
Index: src/org/dbforms/config/Field.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/config/Field.java,v
retrieving revision 1.35
diff -u -r1.35 Field.java
--- src/org/dbforms/config/Field.java	28 Nov 2005 20:34:13 -0000	1.35
+++ src/org/dbforms/config/Field.java	5 Jan 2006 17:03:12 -0000
@@ -226,12 +226,16 @@
 	public void setFieldType(String aFieldType) {
 		this.fieldType = aFieldType.toLowerCase();
 
-		if (fieldType.startsWith("char") || fieldType.startsWith("varchar")
-				|| fieldType.startsWith("nvarchar")
-				|| fieldType.startsWith("longchar")
-				|| fieldType.startsWith("long varchar")
+		//  FIXME - someone check is this types are good for all databases
+		if (fieldType.startsWith("char")
 				|| fieldType.startsWith("text")) {
 			type = FieldTypes.CHAR;
+		} else if (fieldType.startsWith("varchar")
+				|| fieldType.startsWith("nvarchar")
+				|| fieldType.startsWith("longchar")) {
+			type = FieldTypes.VARCHAR;
+		} else if (fieldType.startsWith("long varchar")) {
+			type = FieldTypes.LONGVARCHAR;
 		} else if (fieldType.startsWith("int")
 				|| fieldType.startsWith("smallint")
 				|| fieldType.startsWith("long")
@@ -494,6 +498,7 @@
 		Vector v = StringUtil.splitString(clazz.getName().toLowerCase(), ".");
 		fieldType = (String) v.lastElement();
 
+		// FIXME Not possible to detect CHAR variants
 		if (clazz.isAssignableFrom(java.lang.Integer.class)) {
 			type = FieldTypes.INTEGER;
 		} else if (clazz.isAssignableFrom(java.lang.Long.class)) {
Index: src/org/dbforms/config/FieldTypes.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/config/FieldTypes.java,v
retrieving revision 1.6
diff -u -r1.6 FieldTypes.java
--- src/org/dbforms/config/FieldTypes.java	20 Oct 2004 14:46:23 -0000	1.6
+++ src/org/dbforms/config/FieldTypes.java	5 Jan 2006 17:03:12 -0000
@@ -36,6 +36,8 @@
 
    /** DOCUMENT ME! */
    public static final int CHAR = java.sql.Types.CHAR;
+   public static final int VARCHAR = java.sql.Types.VARCHAR;
+   public static final int LONGVARCHAR = java.sql.Types.LONGVARCHAR;
 
    /** DOCUMENT ME! */
    public static final int DATE = java.sql.Types.DATE;
@@ -63,4 +65,9 @@
 
    /** DOCUMENT ME! */
    public static final int BOOLEAN = java.sql.Types.BOOLEAN;
+   
+   
+   public static boolean isCHAR(int type) {
+       return (type == CHAR) || (type == VARCHAR) || (type == LONGVARCHAR);
+   }
 }
Index: src/org/dbforms/config/FieldValue.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/config/FieldValue.java,v
retrieving revision 1.21
diff -u -r1.21 FieldValue.java
--- src/org/dbforms/config/FieldValue.java	9 Dec 2005 20:16:51 -0000	1.21
+++ src/org/dbforms/config/FieldValue.java	5 Jan 2006 17:03:13 -0000
@@ -551,6 +551,8 @@
 
 			break;
 
+		case FieldTypes.LONGVARCHAR:
+		case FieldTypes.VARCHAR:
 		case FieldTypes.CHAR:
 			res = parseCHAR(value);
 
Index: src/org/dbforms/config/JDBCDataHelper.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/config/JDBCDataHelper.java,v
retrieving revision 1.15
diff -u -r1.15 JDBCDataHelper.java
--- src/org/dbforms/config/JDBCDataHelper.java	28 Nov 2005 20:34:13 -0000	1.15
+++ src/org/dbforms/config/JDBCDataHelper.java	5 Jan 2006 17:03:13 -0000
@@ -207,12 +207,14 @@
             }
             break;
 
+        case FieldTypes.LONGVARCHAR:
+        case FieldTypes.VARCHAR:
         case FieldTypes.CHAR:
             if (value == null) {
-                ps.setNull(col, FieldTypes.CHAR);
+                ps.setNull(col, fieldType);
             } else {
             ps.setObject(col, (escaper == null) ? value : escaper
-                    .escapeJDBC((String) value), FieldTypes.CHAR);
+                    .escapeJDBC((String) value), fieldType);
 
             }
             break;
Index: src/org/dbforms/config/Table.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/config/Table.java,v
retrieving revision 1.70
diff -u -r1.70 Table.java
--- src/org/dbforms/config/Table.java	14 Dec 2005 20:04:11 -0000	1.70
+++ src/org/dbforms/config/Table.java	5 Jan 2006 17:03:13 -0000
@@ -2279,7 +2279,7 @@
 
 		case Constants.FILTER_LIKE:
 
-			if (f.getType() == FieldTypes.CHAR) {
+			if (FieldTypes.isCHAR(f.getType())) {
 				buf.append(" LIKE ");
 			} else {
 				buf.append(" = ");
@@ -2301,7 +2301,7 @@
 
 		case Constants.FILTER_EMPTY:
 
-			if (f.getType() == FieldTypes.CHAR) {
+			if (FieldTypes.isCHAR(f.getType())) {
 				buf.append(" = '' ");
 				buf.append(" OR ");
 			}
@@ -2313,7 +2313,7 @@
 
 		case Constants.FILTER_NOT_EMPTY:
 
-			if (f.getType() == FieldTypes.CHAR) {
+			if (FieldTypes.isCHAR(f.getType())) {
 				buf.append(" <> '' ");
 				buf.append(" OR ");
 			}
@@ -2720,7 +2720,7 @@
 		// 20020703-HKK: Extending search algorithm with WEAK_START, WEAK_END,
 		// WEAK_START_END
 		// results in like '%search', 'search%', '%search%'
-		if (curField.getType() == FieldTypes.CHAR) {
+		if (FieldTypes.isCHAR(curField.getType())) {
 			String valueStr = cur.getFieldValue();
 
 			switch (cur.getSearchAlgorithm()) {
Index: src/org/dbforms/devgui/XMLConfigGenerator.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/devgui/XMLConfigGenerator.java,v
retrieving revision 1.17
diff -u -r1.17 XMLConfigGenerator.java
--- src/org/dbforms/devgui/XMLConfigGenerator.java	18 Aug 2004 12:25:57 -0000	1.17
+++ src/org/dbforms/devgui/XMLConfigGenerator.java	5 Jan 2006 17:03:13 -0000
@@ -693,9 +693,15 @@
                         break;
 
                      case java.sql.Types.CHAR:
+                        typeName = "char";
+                        break;
+                        
                      case java.sql.Types.LONGVARCHAR:
+                        typeName = "long varchar";
+
+                        break;
                      case java.sql.Types.VARCHAR:
-                        typeName = "char";
+                        typeName = "varchar";
 
                         break;
 
Index: src/org/dbforms/taglib/AbstractDbBaseHandlerTag.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/taglib/AbstractDbBaseHandlerTag.java,v
retrieving revision 1.5
diff -u -r1.5 AbstractDbBaseHandlerTag.java
--- src/org/dbforms/taglib/AbstractDbBaseHandlerTag.java	16 Dec 2005 07:40:53 -0000	1.5
+++ src/org/dbforms/taglib/AbstractDbBaseHandlerTag.java	5 Jan 2006 17:03:13 -0000
@@ -633,6 +633,8 @@
 				case FieldTypes.BLOB:
 				case FieldTypes.DISKBLOB:
 				case FieldTypes.CHAR:
+				case FieldTypes.VARCHAR:
+				case FieldTypes.LONGVARCHAR:
 				default:
 					res = fieldValueObj.toString();
 

Reply via email to