You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fg...@apache.org on 2010/03/15 18:26:21 UTC
svn commit: r923348 - in
/incubator/chemistry/trunk/chemistry/chemistry-commons/src:
main/antlr3/org/apache/chemistry/cmissql/
main/antlr3/org/apache/chemistry/impl/simple/
test/gunit/org/apache/chemistry/cmissql/
test/java/org/apache/chemistry/impl/si...
Author: fguillaume
Date: Mon Mar 15 17:26:21 2010
New Revision: 923348
URL: http://svn.apache.org/viewvc?rev=923348&view=rev
Log:
CMIS-160: Implement decimal literals in CMISQL parser
Modified:
incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g
incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g
incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite
incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g?rev=923348&r1=923347&r2=923348&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/cmissql/CmisSqlLexer.g Mon Mar 15 17:26:21 2010
@@ -106,7 +106,11 @@ GTEQ : '>=';
BOOL_LIT : 'TRUE' | 'true' | 'FALSE' | 'false';
-NUM_LIT : '0' | '-'? ('1'..'9')('0'..'9')*;
+fragment Sign : ('+'|'-')?;
+fragment Digits : ('0'..'9')+;
+fragment ExactNumLit : Digits DOT Digits | Digits DOT | DOT Digits | Digits;
+fragment ApproxNumLit : ExactNumLit ('e'|'E') Sign Digits;
+NUM_LIT : Sign (ExactNumLit | ApproxNumLit);
STRING_LIT : '\'' (~'\''|'\'\'')* '\'';
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g?rev=923348&r1=923347&r2=923348&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/antlr3/org/apache/chemistry/impl/simple/CmisSqlSimpleWalker.g Mon Mar 15 17:26:21 2010
@@ -48,6 +48,8 @@ options {
*/
package org.apache.chemistry.impl.simple;
+import java.math.BigDecimal;
+
import org.apache.chemistry.impl.simple.SimpleData;
import org.apache.chemistry.util.GregorianCalendar;
}
@@ -255,7 +257,11 @@ arg returns [Object value]
literal returns [Object value]:
NUM_LIT
{
- $value = Long.valueOf($NUM_LIT.text);
+ try {
+ $value = Long.valueOf($NUM_LIT.text);
+ } catch (NumberFormatException e) {
+ $value = new BigDecimal($NUM_LIT.text);
+ }
}
| STRING_LIT
{
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite?rev=923348&r1=923347&r2=923348&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/gunit/org/apache/chemistry/cmissql/CmisSql.testsuite Mon Mar 15 17:26:21 2010
@@ -37,13 +37,27 @@ ID:
NUM_LIT:
"123" OK
"0" OK
-"-0" FAIL
+"-0" OK
"1" OK
"-1" OK
"-123" OK
-"0123" FAIL
-"-0123" FAIL
+"0123" OK
+"-0123" OK
"123abc" FAIL
+"123E" FAIL
+"123.456" OK
+"+123.456" OK
+"-123.456" OK
+".456" OK
+"+.456" OK
+"-.456" OK
+"123." OK
+"+123." OK
+"-123." OK
+"+123.456E78" OK
+"-123.456E-78" OK
+".456E78" OK
+"+123.E+78" OK
STRING_LIT:
"'abc'" OK
@@ -69,10 +83,11 @@ literal:
"123" OK
"-123" OK
"0" OK
-"0123" FAIL
+"0123" OK
"abc123" OK
"123abc" FAIL
"'abc'" OK
+"123.345E78" OK
order_by_clause:
"ORDER BY foo" -> (ORDER_BY (COL foo) ASC)
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java?rev=923348&r1=923347&r2=923348&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java Mon Mar 15 17:26:21 2010
@@ -18,6 +18,7 @@
package org.apache.chemistry.impl.simple;
import java.io.InputStream;
+import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -67,11 +68,15 @@ public class TestSimpleRepository extend
"def:bool", null, "bool", "Bool", "", false,
PropertyType.BOOLEAN, false, null, false, false, null,
Updatability.READ_WRITE, true, true, 0, null, null, -1, null);
+ PropertyDefinition d5 = new SimplePropertyDefinition("dec", "def:dec",
+ null, "dec", "Decimal", "", false, PropertyType.DECIMAL, false,
+ null, false, false, null, Updatability.READ_WRITE, true, true,
+ 0, null, null, -1, null);
SimpleType mt1 = new SimpleType("doc", BaseType.DOCUMENT.getId(),
"doc", null, "Doc", "My Doc Type", BaseType.DOCUMENT, "", true,
true, true, true, true, true, true, true,
ContentStreamPresence.ALLOWED, null, null, Arrays.asList(d1,
- d2, d3, d4));
+ d2, d3, d4, d5));
SimpleType mt2 = new SimpleType("fold", BaseType.FOLDER.getId(),
"fold", null, "Fold", "My Folder Type", BaseType.FOLDER, "",
true, true, true, true, true, true, false, false,
@@ -191,7 +196,7 @@ public class TestSimpleRepository extend
Connection conn = repo.getConnection(null);
Folder root = conn.getRootFolder();
Document d1 = root.newDocument("doc");
- assertEquals(SimpleType.PROPS_DOCUMENT_BASE.size() + 4,
+ assertEquals(SimpleType.PROPS_DOCUMENT_BASE.size() + 5,
d1.getType().getPropertyDefinitions().size());
d1.save();
@@ -274,6 +279,7 @@ public class TestSimpleRepository extend
d1.setValue("date",
GregorianCalendar.fromAtomPub("2010-01-01T01:01:01.000Z"));
d1.setValue("bool", Boolean.TRUE);
+ d1.setValue("dec", BigDecimal.valueOf(123.456));
d1.save();
Collection<CMISObject> res = conn.query("SELECT * FROM cmis:folder",
@@ -301,6 +307,11 @@ public class TestSimpleRepository extend
res = conn.query("SELECT * FROM doc WHERE bool <> FALSE", false);
assertEquals(1, res.size());
+ res = conn.query("SELECT * FROM doc WHERE dec = 123.456", false);
+ assertEquals(1, res.size());
+ res = conn.query("SELECT * FROM doc WHERE dec <> 123", false);
+ assertEquals(1, res.size());
+
res = conn.query(
"SELECT * FROM doc WHERE date <> TIMESTAMP '1999-09-09T01:01:01Z'",
false);