Author: doogie
Date: Wed May 26 14:22:21 2010
New Revision: 948440
URL: http://svn.apache.org/viewvc?rev=948440&view=rev
Log:
Add support for UPPER and LOWER functions in index fields.
Modified:
ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/DatabaseUtil.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelIndex.java
Modified: ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/dtd/entitymodel.xsd?rev=948440&r1=948439&r2=948440&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/dtd/entitymodel.xsd (original)
+++ ofbiz/trunk/framework/entity/dtd/entitymodel.xsd Wed May 26 14:22:21 2010
@@ -202,6 +202,14 @@ under the License.
</xs:element>
<xs:attributeGroup name="attlist.index-field">
<xs:attribute name="name" type="xs:string" use="required"/>
+ <xs:attribute name="function">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="lower"/>
+ <xs:enumeration value="upper"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
</xs:attributeGroup>
<!-- ================== view-entity ===================== -->
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/DatabaseUtil.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/DatabaseUtil.java?rev=948440&r1=948439&r2=948440&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/DatabaseUtil.java
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/jdbc/DatabaseUtil.java
Wed May 26 14:22:21 2010
@@ -2800,16 +2800,23 @@ public class DatabaseUtil {
}
public String makeIndexClause(ModelEntity entity, ModelIndex modelIndex) {
- Iterator<String> fieldNamesIter = modelIndex.getIndexFieldsIterator();
+ Iterator<ModelIndex.Field> fieldsIter = modelIndex.getFieldsIterator();
StringBuilder mainCols = new StringBuilder();
- while (fieldNamesIter.hasNext()) {
- String fieldName = fieldNamesIter.next();
- ModelField mainField = entity.getField(fieldName);
+ while (fieldsIter.hasNext()) {
+ ModelIndex.Field field = fieldsIter.next();
+ ModelIndex.Function function = field.getFunction();
if (mainCols.length() > 0) {
mainCols.append(", ");
}
+ if (function != null) {
+ mainCols.append(function.toString()).append('(');
+ }
+ ModelField mainField = entity.getField(field.getFieldName());
mainCols.append(mainField.getColName());
+ if (function != null) {
+ mainCols.append(')');
+ }
}
StringBuilder indexSqlBuf = new StringBuilder("CREATE ");
Modified:
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelIndex.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelIndex.java?rev=948440&r1=948439&r2=948440&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelIndex.java
(original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelIndex.java Wed
May 26 14:22:21 2010
@@ -27,7 +27,9 @@ import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.ofbiz.base.util.StringUtil;
+import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.base.util.UtilXml;
+import org.ofbiz.base.util.collections.IteratorWrapper;
/**
* Generic Entity - Relation model class
@@ -42,7 +44,7 @@ public class ModelIndex extends ModelChi
protected boolean unique;
/** list of the field names included in this index */
- protected List<String> fieldNames = new ArrayList<String>();
+ protected List<Field> fields = new ArrayList<Field>();
/** Default Constructor */
public ModelIndex() {
@@ -71,7 +73,8 @@ public class ModelIndex extends ModelChi
if (indexFieldElement.getParentNode() == indexElement) {
String fieldName =
indexFieldElement.getAttribute("name").intern();
- this.fieldNames.add(fieldName);
+ String function = indexFieldElement.getAttribute("function");
+ this.fields.add(new Field(fieldName,
UtilValidate.isNotEmpty(function) ? Function.valueOf(function.toUpperCase()) :
null));
}
}
}
@@ -94,24 +97,45 @@ public class ModelIndex extends ModelChi
this.unique = unique;
}
+ /** @deprecated use getFieldsIterator() */
+ @Deprecated
public Iterator<String> getIndexFieldsIterator() {
- return this.fieldNames.iterator();
+ return new IteratorWrapper<String, Field>(this.fields.iterator()) {
+ protected void noteRemoval(String dest, Field src) {
+ }
+
+ protected String convert(Field src) {
+ return src.getFieldName();
+ }
+ };
+ }
+
+ public Iterator<Field> getFieldsIterator() {
+ return this.fields.iterator();
}
public int getIndexFieldsSize() {
- return this.fieldNames.size();
+ return this.fields.size();
}
public String getIndexField(int index) {
- return this.fieldNames.get(index);
+ return this.fields.get(index).getFieldName();
}
public void addIndexField(String fieldName) {
- this.fieldNames.add(fieldName);
+ this.fields.add(new Field(fieldName, null));
+ }
+
+ public void addIndexField(String fieldName, String functionName) {
+ this.fields.add(new Field(fieldName, Function.valueOf(functionName)));
+ }
+
+ public void addIndexField(String fieldName, Function function) {
+ this.fields.add(new Field(fieldName, function));
}
public String removeIndexField(int index) {
- return this.fieldNames.remove(index);
+ return this.fields.remove(index).getFieldName();
}
public Element toXmlElement(Document document) {
@@ -121,12 +145,43 @@ public class ModelIndex extends ModelChi
root.setAttribute("unique", "true");
}
- for (String fieldName: this.fieldNames) {
+ for (Field field: this.fields) {
Element fn = document.createElement("index-field");
- fn.setAttribute("name", fieldName);
+ fn.setAttribute("name", field.getFieldName());
+ if (field.getFunction() != null) {
+ fn.setAttribute("function", field.getFunction().toString());
+ }
root.appendChild(fn);
}
return root;
}
+
+ public static final class Field {
+ private final String fieldName;
+ private final Function function;
+
+ public Field(String fieldName, Function function) {
+ this.fieldName = fieldName;
+ this.function = function;
+ }
+
+ public String getFieldName() {
+ return this.fieldName;
+ }
+
+ public Function getFunction() {
+ return function;
+ }
+
+ public String toString() {
+ if (function == null) {
+ return fieldName;
+ } else {
+ return function.toString() + '(' + fieldName + ')';
+ }
+ }
+ }
+
+ public enum Function { LOWER, UPPER }
}