Hi,
We are using H2 (h2-2012-05-23) and we faced a few issues.
One of them is that I replaced a VARCHAR field with a Java object (OTHER)
that contains the string and some additional information.
The problem now is that it breaks existing ORDER BY clauses and equality
tests with VARCHARs, though it implements the CompareTo method (for objects
of same type) and the toString() method.
I think that comparing the serialized bytes is nonsense for the Java object
case, and I think that a Java Object's toString and compareTo method should
be used when appropriate.
As a temporary(?) solution, I changed the following code:
* In "Value.getHigherOrder(int t1, int t2)", line 325, I added:
if(t1 == Value.STRING && t2 == Value.JAVA_OBJECT || t2 ==
Value.STRING && t1 == Value.JAVA_OBJECT) {
return Value.STRING;
}
* In "ValueJavaObject", I added these:
@Override
protected int compareSecure(Value v, CompareMode mode) {
if(v.getType() == Value.STRING) {
Object o = Utils.deserialize(getBytesNoCopy());
return o.toString().compareTo(v.getString());
}
if(v.getType() == Value.JAVA_OBJECT) {
Object o = Utils.deserialize(getBytesNoCopy());
if(o instanceof Comparable) {
Object o2 = Utils.deserialize(v.getBytesNoCopy());
if(o.getClass() == o2.getClass()) {
return ((Comparable)o).compareTo(o2);
}
}
}
return super.compareSecure(v, mode);
}
@Override
public String getString() {
return Utils.deserialize(getBytesNoCopy()).toString();
}
Note: I think JAVA_OBJECT should take low order only for String case which
is why I did not try to change "Value.getOrder(int type)".
What do you think of my solution, can there be any problems with what I
changed?
Is there something that could be done in H2 itself to solve my issue?
Cheers,
-Christopher
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/h2-database/-/hhqWqrVav4cJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/h2-database?hl=en.