From commits-return-2305-apmail-openjpa-commits-archive=openjpa.apache.org@openjpa.apache.org Mon Aug 27 20:52:15 2007 Return-Path: Delivered-To: apmail-openjpa-commits-archive@www.apache.org Received: (qmail 60232 invoked from network); 27 Aug 2007 20:52:14 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 27 Aug 2007 20:52:14 -0000 Received: (qmail 98669 invoked by uid 500); 27 Aug 2007 20:52:10 -0000 Delivered-To: apmail-openjpa-commits-archive@openjpa.apache.org Received: (qmail 98656 invoked by uid 500); 27 Aug 2007 20:52:10 -0000 Mailing-List: contact commits-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list commits@openjpa.apache.org Received: (qmail 98647 invoked by uid 99); 27 Aug 2007 20:52:10 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 27 Aug 2007 13:52:10 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 27 Aug 2007 20:53:04 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id D5AC71A9832; Mon, 27 Aug 2007 13:51:50 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r570240 - in /openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql: DB2Dictionary.java SQLBuffer.java Date: Mon, 27 Aug 2007 20:51:50 -0000 To: commits@openjpa.apache.org From: kwsutter@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20070827205150.D5AC71A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: kwsutter Date: Mon Aug 27 13:51:49 2007 New Revision: 570240 URL: http://svn.apache.org/viewvc?rev=570240&view=rev Log: OPENJPA-338. Committing Teresa's patch for correcting CASTing with DB2. Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java?rev=570240&r1=570239&r2=570240&view=diff ============================================================================== --- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java (original) +++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DB2Dictionary.java Mon Aug 27 13:51:49 2007 @@ -696,4 +696,45 @@ } buf.append(") - 1)"); } + + /** + * Cast the specified value to the specified type. + * + * @param buf the buffer to append the cast to + * @param val the value to cast + * @param type the type of the case, e.g. {@link Types#NUMERIC} + */ + public void appendCast(SQLBuffer buf, FilterValue val, int type) { + + // Convert the cast function: "CAST({0} AS {1})" + int firstParam = castFunction.indexOf("{0}"); + String pre = castFunction.substring(0, firstParam); // "CAST(" + String mid = castFunction.substring(firstParam + 3); + int secondParam = mid.indexOf("{1}"); + String post; + if (secondParam > -1) { + post = mid.substring(secondParam + 3); // ")" + mid = mid.substring(0, secondParam); // " AS " + } else + post = ""; + + // No need to add CAST if the value is a constant + if (val instanceof Lit || val instanceof Param) { + buf.append(pre); + val.appendTo(buf); + buf.append(mid); + buf.append(getTypeName(type)); + appendLength(buf, type); + buf.append(post); + } else { + val.appendTo(buf); + String sqlString = buf.getSQL(false); + if (sqlString.endsWith("?")) { + // case "(?" - convert to "CAST(? AS type" + String str = "CAST(? AS " + getTypeName(type) + ")"; + buf.replaceSqlString(sqlString.length() - 1, + sqlString.length(), str); + } + } + } } Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java?rev=570240&r1=570239&r2=570240&view=diff ============================================================================== --- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java (original) +++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SQLBuffer.java Mon Aug 27 13:51:49 2007 @@ -607,6 +607,17 @@ } /** + * Replace current buffer string with the new string + * + * @param start replace start position + * @param end replace end position + * @param newString + */ + public void replaceSqlString(int start, int end, String newString) { + _sql.replace(start, end, newString); + } + + /** * Represents a subselect. */ private static class Subselect {