These patches are about adding a case sensitive mode to filter, and support for CLOB.
We have some more sensible changes, like a fix for navigation with orderBy, a complete rewriting of field formatting, evolved from the date formatting ideas (which come from us), a new "copy" event, to copy the data from the current record into the "new" page. We start sending these, hope in the next few days to follow with some more contributions.
cheers, Sergio Moretti
CASE SENSITIVE FILTER PATCH:
------------------------- CUT HERE ----------------------------------
Index: src/org/dbforms/FieldValue.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/FieldValue.java,v
retrieving revision 1.13
diff -u -r1.13 FieldValue.java
--- src/org/dbforms/FieldValue.java 22 Feb 2003 18:36:20 -0000 1.13
+++ src/org/dbforms/FieldValue.java 2 Jul 2003 09:55:37 -0000
@@ -144,6 +144,8 @@
/** specifies whether to OR all values or AND them... */
private boolean logicalOR = false;+ /** specifies the string comparing mode */ + private boolean isCaseSensitive = true;
/**
* Creates a new FieldValue object.
@@ -216,6 +218,21 @@
this.logicalOR = isLogicalOR;
}+ /**
+ * constructor
+ *
+ * @param field
+ * @param fieldValue
+ * @param renderHiddenHtmlTag
+ * @param operator
+ * @param isLogicalOr
+ * @param isCaseSensitive
+ */
+ public FieldValue(Field field, String fieldValue, boolean renderHiddenHtmlTag, int operator, boolean isLogicalOR, boolean isCaseSensitive) {
+ this(field,fieldValue,renderHiddenHtmlTag,operator,isLogicalOR);
+ this.isCaseSensitive = isCaseSensitive;
+ }
+
/**
* Gets the operator attribute of the FieldValue object
@@ -381,6 +398,20 @@
logicalOR = newLogicalOR;
}+ /**
+ * @return boolean
+ */
+ public boolean isCaseSensitive() {
+ return isCaseSensitive;
+ }
+
+ /**
+ * Sets the isCaseSensitive.
+ * @param isCaseSensitive The isCaseSensitive to set
+ */
+ public void setCaseSensitive(boolean isCaseSensitive) {
+ this.isCaseSensitive = isCaseSensitive;
+ } /**
* Build the WHERE clause string using the input field values.
@@ -420,7 +451,12 @@
}
else
{
- buf.append(f.getName());
+ //Borghi case insensitive search
+ if(!fv[i].isCaseSensitive() &&
f.getType()==FieldTypes.CHAR)
+
+ buf.append("UPPER("+f.getName()+")");
+ else
+ buf.append(f.getName());
} // Check what type of operator is required
@@ -855,7 +891,10 @@
break;default:
- SqlUtil.fillPreparedStatement(ps, curCol, valueStr, curField.getType());
+ if(!cur.isCaseSensitive() && curField.getType()==FieldTypes.CHAR)
+ SqlUtil.fillPreparedStatement(ps, curCol, valueStr.toUpperCase(), curField.getType());
+ else
+ SqlUtil.fillPreparedStatement(ps, curCol, valueStr, curField.getType());
curCol++;
}
return curCol;
@@ -912,4 +951,5 @@
return buf.toString();
}
+
}
Index: src/org/dbforms/taglib/DbFormTag.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/taglib/DbFormTag.java,v
retrieving revision 1.42
diff -u -r1.42 DbFormTag.java
--- src/org/dbforms/taglib/DbFormTag.java 5 Mar 2003 08:28:35 -0000 1.42
+++ src/org/dbforms/taglib/DbFormTag.java 2 Jul 2003 09:55:40 -0000
@@ -1988,7 +1988,8 @@
private void initFilterFieldValues()
{
// 1 to n fields may be mapped
- Vector keyValPairs = ParseUtil.splitString(filter, ",;");
+ boolean isCaseSensitive = ParseUtil.isCaseSensitive(filter);
+ Vector keyValPairs = ParseUtil.parseFilter(filter); // ~ no longer used as separator!
int len = keyValPairs.size();
@@ -2092,7 +2093,7 @@
logCat.debug("Filter value=" + value);// Create a new instance of FieldValue and set the operator variable
- filterFieldValues[i] = new FieldValue(filterField, value, false, operator, isLogicalOR);
+ filterFieldValues[i] = new FieldValue(filterField, value, false, operator, isLogicalOR, isCaseSensitive);
logCat.debug("and fv is =" + filterFieldValues[i].toString());
}
}
Index: src/org/dbforms/util/ParseUtil.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/util/ParseUtil.java,v
retrieving revision 1.9
diff -u -r1.9 ParseUtil.java
--- src/org/dbforms/util/ParseUtil.java 18 Feb 2003 11:49:38 -0000 1.9
+++ src/org/dbforms/util/ParseUtil.java 2 Jul 2003 09:55:42 -0000
@@ -239,6 +239,47 @@
return result;
}
+
+ /**
+ *Borghi: parseFilter comma-safe
+ */
+ public static Vector parseFilter(String str) {
+ Vector temp = splitString(str, ",");
+ Vector result = new Vector();
+ int len = temp.size();
+ StringBuffer token = new StringBuffer();
+ for (int i = len - 1; i >= 0; i--) {
+ if (((String) temp.elementAt(i))
+ .trim()
+ .toLowerCase()
+ .startsWith("iscasesensitive"))
+ continue;
+ token.insert(0, (String) temp.elementAt(i));
+ if (token.toString().indexOf('=') != -1
+ || token.toString().indexOf('<') != -1
+ || token.toString().indexOf('>') != -1
+ || token.toString().indexOf('~') != -1) {
+ result.addElement(token.toString());
+ token = new StringBuffer();
+ } else {
+ token.insert(0, ',');
+ }
+ logCat.debug("########Filter token=" + token.toString());
+ }
+ Collections.reverse(result);
+ return result;
+ }
+
+ public static boolean isCaseSensitive(String filter) {
+ logCat.debug("The filter is: " + filter);
+ if (filter.toLowerCase().trim().indexOf("iscasesensitive,") != -1) {
+ logCat.debug("The filter is case sensitive");
+ return true;
+ } else {
+ logCat.debug("The filter is not case sensitive");
+ return false;
+ }
+ }
/** ----------------------------------- CUT HERE ----------------------
CLOB SUPPORT PATCH:
--------------------------- CUT HERE ------------------------------
Index: ResultSetVector.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/util/ResultSetVector.java,v
retrieving revision 1.8
diff -u -r1.8 ResultSetVector.java
--- ResultSetVector.java 15 Nov 2002 10:52:56 -0000 1.8
+++ ResultSetVector.java 3 Jul 2003 07:56:31 -0000
@@ -97,7 +97,13 @@
if (tmpObj != null)
{
objectRow[i] = tmpObj;
- stringRow[i] = tmpObj.toString();
+ if(rsmd.getColumnType(i+1)==Types.CLOB) {
+ logCat.debug("###########CLOB TYPE!###############");
+ stringRow[i] = ((Clob)tmpObj).getSubString((long)1,(int)((Clob)tmpObj).length());
+ objectRow[i] = stringRow[i];
+ }
+ else
+ stringRow[i] = tmpObj.toString();
}
else
{
------------------------------ CUT HERE ------------------------------
Index: ResultSetVector.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/util/ResultSetVector.java,v
retrieving revision 1.8
diff -u -r1.8 ResultSetVector.java
--- ResultSetVector.java 15 Nov 2002 10:52:56 -0000 1.8
+++ ResultSetVector.java 3 Jul 2003 07:56:31 -0000
@@ -97,7 +97,13 @@
if (tmpObj != null)
{
objectRow[i] = tmpObj;
- stringRow[i] = tmpObj.toString();
+
if(rsmd.getColumnType(i+1)==Types.CLOB) {
+ logCat.debug("###########CLOB
TYPE!###############");
+ stringRow[i] =
((Clob)tmpObj).getSubString((long)1,(int)((Clob)tmpObj).length());
+ objectRow[i] = stringRow[i];
+ }
+ else
+ stringRow[i] =
tmpObj.toString();
}
else
{
Index: src/org/dbforms/FieldValue.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/FieldValue.java,v
retrieving revision 1.13
diff -u -r1.13 FieldValue.java
--- src/org/dbforms/FieldValue.java 22 Feb 2003 18:36:20 -0000 1.13
+++ src/org/dbforms/FieldValue.java 2 Jul 2003 09:55:37 -0000
@@ -144,6 +144,8 @@
/** specifies whether to OR all values or AND them... */
private boolean logicalOR = false;
+ /** specifies the string comparing mode */
+ private boolean isCaseSensitive = true;
/**
* Creates a new FieldValue object.
@@ -216,6 +218,21 @@
this.logicalOR = isLogicalOR;
}
+ /**
+ * constructor
+ *
+ * @param field
+ * @param fieldValue
+ * @param renderHiddenHtmlTag
+ * @param operator
+ * @param isLogicalOr
+ * @param isCaseSensitive
+ */
+ public FieldValue(Field field, String fieldValue, boolean
renderHiddenHtmlTag, int operator, boolean isLogicalOR, boolean isCaseSensitive) {
+ this(field,fieldValue,renderHiddenHtmlTag,operator,isLogicalOR);
+ this.isCaseSensitive = isCaseSensitive;
+ }
+
/**
* Gets the operator attribute of the FieldValue object
@@ -381,6 +398,20 @@
logicalOR = newLogicalOR;
}
+ /**
+ * @return boolean
+ */
+ public boolean isCaseSensitive() {
+ return isCaseSensitive;
+ }
+
+ /**
+ * Sets the isCaseSensitive.
+ * @param isCaseSensitive The isCaseSensitive to set
+ */
+ public void setCaseSensitive(boolean isCaseSensitive) {
+ this.isCaseSensitive = isCaseSensitive;
+ }
/**
* Build the WHERE clause string using the input field values.
@@ -420,7 +451,12 @@
}
else
{
- buf.append(f.getName());
+ //Borghi case insensitive search
+ if(!fv[i].isCaseSensitive() &&
f.getType()==FieldTypes.CHAR)
+
+ buf.append("UPPER("+f.getName()+")");
+ else
+ buf.append(f.getName());
}
// Check what type of operator is required
@@ -855,7 +891,10 @@
break;
default:
- SqlUtil.fillPreparedStatement(ps, curCol, valueStr,
curField.getType());
+ if(!cur.isCaseSensitive() &&
curField.getType()==FieldTypes.CHAR)
+ SqlUtil.fillPreparedStatement(ps, curCol,
valueStr.toUpperCase(), curField.getType());
+ else
+ SqlUtil.fillPreparedStatement(ps, curCol,
valueStr, curField.getType());
curCol++;
}
return curCol;
@@ -912,4 +951,5 @@
return buf.toString();
}
+
}
Index: src/org/dbforms/taglib/DbFormTag.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/taglib/DbFormTag.java,v
retrieving revision 1.42
diff -u -r1.42 DbFormTag.java
--- src/org/dbforms/taglib/DbFormTag.java 5 Mar 2003 08:28:35 -0000 1.42
+++ src/org/dbforms/taglib/DbFormTag.java 2 Jul 2003 09:55:40 -0000
@@ -1988,7 +1988,8 @@
private void initFilterFieldValues()
{
// 1 to n fields may be mapped
- Vector keyValPairs = ParseUtil.splitString(filter, ",;");
+ boolean isCaseSensitive = ParseUtil.isCaseSensitive(filter);
+ Vector keyValPairs = ParseUtil.parseFilter(filter);
// ~ no longer used as separator!
int len = keyValPairs.size();
@@ -2092,7 +2093,7 @@
logCat.debug("Filter value=" + value);
// Create a new instance of FieldValue and set the operator variable
- filterFieldValues[i] = new FieldValue(filterField, value, false,
operator, isLogicalOR);
+ filterFieldValues[i] = new FieldValue(filterField, value, false,
operator, isLogicalOR, isCaseSensitive);
logCat.debug("and fv is =" + filterFieldValues[i].toString());
}
}
Index: src/org/dbforms/util/ParseUtil.java
===================================================================
RCS file: /cvsroot/jdbforms/dbforms/src/org/dbforms/util/ParseUtil.java,v
retrieving revision 1.9
diff -u -r1.9 ParseUtil.java
--- src/org/dbforms/util/ParseUtil.java 18 Feb 2003 11:49:38 -0000 1.9
+++ src/org/dbforms/util/ParseUtil.java 2 Jul 2003 09:55:42 -0000
@@ -239,6 +239,47 @@
return result;
}
+
+ /**
+ *Borghi: parseFilter comma-safe
+ */
+ public static Vector parseFilter(String str) {
+ Vector temp = splitString(str, ",");
+ Vector result = new Vector();
+ int len = temp.size();
+ StringBuffer token = new StringBuffer();
+ for (int i = len - 1; i >= 0; i--) {
+ if (((String) temp.elementAt(i))
+ .trim()
+ .toLowerCase()
+ .startsWith("iscasesensitive"))
+ continue;
+ token.insert(0, (String) temp.elementAt(i));
+ if (token.toString().indexOf('=') != -1
+ || token.toString().indexOf('<') != -1
+ || token.toString().indexOf('>') != -1
+ || token.toString().indexOf('~') != -1) {
+ result.addElement(token.toString());
+ token = new StringBuffer();
+ } else {
+ token.insert(0, ',');
+ }
+ logCat.debug("########Filter token=" + token.toString());
+ }
+ Collections.reverse(result);
+ return result;
+ }
+
+ public static boolean isCaseSensitive(String filter) {
+ logCat.debug("The filter is: " + filter);
+ if (filter.toLowerCase().trim().indexOf("iscasesensitive,") != -1) {
+ logCat.debug("The filter is case sensitive");
+ return true;
+ } else {
+ logCat.debug("The filter is not case sensitive");
+ return false;
+ }
+ }
/**
