You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2011/06/20 16:09:28 UTC

svn commit: r1137635 - /jackrabbit/branches/2.2/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java

Author: thomasm
Date: Mon Jun 20 14:09:28 2011
New Revision: 1137635

URL: http://svn.apache.org/viewvc?rev=1137635&view=rev
Log:
JCR-2996: QOM to SQL2 doesn't cast numeric literals

Modified:
    jackrabbit/branches/2.2/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java

Modified: jackrabbit/branches/2.2/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java?rev=1137635&r1=1137634&r2=1137635&view=diff
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java (original)
+++ jackrabbit/branches/2.2/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/sql2/ParserTest.java Mon Jun 20 14:09:28 2011
@@ -149,6 +149,58 @@ public class ParserTest extends TestCase
         }
     }
 
+    public void testFormatLiterals() throws Exception {
+        formatLiteral("true", "true");
+        formatLiteral("false", "false");
+
+        formatLiteral("CAST('2000-01-01T12:00:00.000Z' AS DATE)",
+                "CAST('2000-01-01T12:00:00.000Z' AS DATE)");
+        formatLiteral("CAST(0 AS DATE)",
+                "CAST('1970-01-01T00:00:00.000Z' AS DATE)");
+
+        formatLiteral("1", "CAST('1' AS LONG)");
+        formatLiteral("-1", "CAST('-1' AS LONG)");
+        formatLiteral("CAST(" + Long.MAX_VALUE + " AS LONG)",
+                "CAST('" + Long.MAX_VALUE + "' AS LONG)");
+        formatLiteral("CAST(" + Long.MIN_VALUE + " AS LONG)",
+                "CAST('" + Long.MIN_VALUE + "' AS LONG)");
+
+        formatLiteral("1.0", "CAST('1.0' AS DECIMAL)");
+        formatLiteral("-1.0", "CAST('-1.0' AS DECIMAL)");
+        formatLiteral("100000000000000000000",
+            "CAST('100000000000000000000' AS DECIMAL)");
+        formatLiteral("-100000000000000000000",
+            "CAST('-100000000000000000000' AS DECIMAL)");
+
+        formatLiteral("CAST(1.0 AS DOUBLE)", "CAST('1.0' AS DOUBLE)");
+        formatLiteral("CAST(-1.0 AS DOUBLE)", "CAST('-1.0' AS DOUBLE)");
+
+        formatLiteral("CAST('X' AS NAME)", "CAST('X' AS NAME)");
+        formatLiteral("CAST('X' AS PATH)", "CAST('X' AS PATH)");
+        formatLiteral("CAST('X' AS REFERENCE)", "CAST('X' AS REFERENCE)");
+        formatLiteral("CAST('X' AS WEAKREFERENCE)", "CAST('X' AS WEAKREFERENCE)");
+        formatLiteral("CAST('X' AS URI)", "CAST('X' AS URI)");
+
+        formatLiteral("''", "''");
+        formatLiteral("' '", "' '");
+        formatLiteral("CAST(0 AS STRING)", "'0'");
+        formatLiteral("CAST(-1000000000000 AS STRING)", "'-1000000000000'");
+        formatLiteral("CAST(false AS STRING)", "'false'");
+        formatLiteral("CAST(true AS STRING)", "'true'");
+    }
+
+    private void formatLiteral(String literal, String cast) throws Exception {
+        String s = "SELECT TEST.* FROM TEST WHERE ID=" + literal;
+        QueryObjectModel qom = parser.createQueryObjectModel(s);
+        String s2 = QOMFormatter.format(qom);
+        String cast2 = s2.substring(s2.indexOf('=') + 1).trim();
+        assertEquals(cast, cast2);
+        qom = parser.createQueryObjectModel(s);
+        s2 = QOMFormatter.format(qom);
+        cast2 = s2.substring(s2.indexOf('=') + 1).trim();
+        assertEquals(cast, cast2);
+    }
+
     public void testParseScript() throws Exception {
         LineNumberReader reader = openScript("test.sql2.txt");
         while (true) {