User: olegnitz
Date: 01/08/09 14:51:14
Modified: src/main/org/jboss/ejb/plugins/cmp/ejbql NumberState.java
Log:
After careful reading of the EJB QL specification we came to conclusion that
0xffffffff literal should be treated as long.
Revision Changes Path
1.4 +19 -22 jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/NumberState.java
Index: NumberState.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/NumberState.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- NumberState.java 2001/08/09 20:24:32 1.3
+++ NumberState.java 2001/08/09 21:51:14 1.4
@@ -174,32 +174,29 @@
if(number.endsWith("l") || number.endsWith("L")) {
// chop off the suffix
number = number.substring(0, number.length() - 1);
- System.out.println("decode long number [" + number + "]");
- if (number.startsWith("0X") || number.startsWith("0x")) { // hex
- // handle literals from 0x8000000000000000L to 0xffffffffffffffffL:
- // remove sign bit, parse as positive, then calculate the negative
value with the sign bit
- if (number.length() == 18) {
- first = Byte.decode(number.substring(0, 3)).byteValue();
- if (first >= 8) {
- number = "0x" + (first - 8) + number.substring(3);
- return new
ExactNumericToken(Long.decode(number).longValue() - Long.MAX_VALUE - 1);
- }
+ }
+ System.out.println("decode exact number [" + number + "]");
+ if (number.startsWith("0X") || number.startsWith("0x")) { // hex
+ // handle literals from 0x8000000000000000L to 0xffffffffffffffffL:
+ // remove sign bit, parse as positive, then calculate the negative
value with the sign bit
+ if (number.length() == 18) {
+ first = Byte.decode(number.substring(0, 3)).byteValue();
+ if (first >= 8) {
+ number = "0x" + (first - 8) + number.substring(3);
+ return new ExactNumericToken(Long.decode(number).longValue() -
Long.MAX_VALUE - 1);
}
- } else if (number.startsWith("0")) { // octal
- // handle literals from 01000000000000000000000L to
01777777777777777777777L
- // remove sign bit, parse as positive, then calculate the negative
value with the sign bit
- if (number.length() == 23) {
- if (number.charAt(1) == '1') {
- number = "0" + number.substring(2);
- return new
ExactNumericToken(Long.decode(number).longValue() - Long.MAX_VALUE - 1);
- }
+ }
+ } else if (number.startsWith("0")) { // octal
+ // handle literals from 01000000000000000000000L to
01777777777777777777777L
+ // remove sign bit, parse as positive, then calculate the negative
value with the sign bit
+ if (number.length() == 23) {
+ if (number.charAt(1) == '1') {
+ number = "0" + number.substring(2);
+ return new ExactNumericToken(Long.decode(number).longValue() -
Long.MAX_VALUE - 1);
}
}
- return new ExactNumericToken(Long.decode(number).longValue());
- } else {
- // integer hex and octal literals like 0xffffffff are handled by
Long.decode()
- return new ExactNumericToken(Long.decode(number).intValue());
}
+ return new ExactNumericToken(Long.decode(number).longValue());
}
private ApproximateNumericToken createApproximateNumericToken(String number)
throws IOException {
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development