Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 61175 invoked from network); 27 Aug 2009 14:34:04 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 27 Aug 2009 14:34:04 -0000 Received: (qmail 19024 invoked by uid 500); 27 Aug 2009 14:34:04 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 18961 invoked by uid 500); 27 Aug 2009 14:34:04 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 18952 invoked by uid 99); 27 Aug 2009 14:34:04 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 27 Aug 2009 14:34:04 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 27 Aug 2009 14:34:01 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 0E865238888E; Thu, 27 Aug 2009 14:33:41 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r808431 - /jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java Date: Thu, 27 Aug 2009 14:33:40 -0000 To: commits@jackrabbit.apache.org From: thomasm@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090827143341.0E865238888E@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: thomasm Date: Thu Aug 27 14:33:40 2009 New Revision: 808431 URL: http://svn.apache.org/viewvc?rev=808431&view=rev Log: JCR-2282 SQL2 parser must not infer type for UncastLiteral from static analysis Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java?rev=808431&r1=808430&r2=808431&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java (original) +++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java Thu Aug 27 14:33:40 2009 @@ -455,7 +455,7 @@ } } if (currentTokenType == VALUE) { - Literal literal = factory.literal(currentValue); + Literal literal = getUncastLiteral(currentValue); read(); return literal; } else if (currentTokenType == PARAMETER) { @@ -471,10 +471,10 @@ } return var; } else if (readIf("TRUE")) { - Literal literal = factory.literal(valueFactory.createValue(true)); + Literal literal = getUncastLiteral(valueFactory.createValue(true)); return literal; } else if (readIf("FALSE")) { - Literal literal = factory.literal(valueFactory.createValue(false)); + Literal literal = getUncastLiteral(valueFactory.createValue(false)); return literal; } else if (readIf("CAST")) { read("("); @@ -487,6 +487,7 @@ read("AS"); value = parseCastAs(value); read(")"); + // CastLiteral literal = factory.literal(value); return literal; } else { @@ -494,6 +495,19 @@ } } + /** + * Create uncast literal from a value. According to the JCR specification, + * "an UncastLiteral is always interpreted as a Value of property type STRING" + * (JCR 2.0 Core Specification, 6.7.34 Literal, page 124). + * That means the value is converted to a String first. + * + * @param value the original value + * @return the literal + */ + private Literal getUncastLiteral(Value value) throws RepositoryException { + return factory.literal(valueFactory.createValue(value.getString())); + } + private Value parseCastAs(Value value) throws RepositoryException { if (readIf("STRING")) { return valueFactory.createValue(value.getString());