You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by br...@apache.org on 2004/02/04 22:07:34 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/util SqlHelper.java
brj 2004/02/04 13:07:34
Modified: src/java/org/apache/ojb/broker/util SqlHelper.java
Log:
check if braceEnd > braceBegin (by Andrew Geery)
Revision Changes Path
1.22 +122 -134 db-ojb/src/java/org/apache/ojb/broker/util/SqlHelper.java
Index: SqlHelper.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/util/SqlHelper.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- SqlHelper.java 12 Dec 2003 16:30:37 -0000 1.21
+++ SqlHelper.java 4 Feb 2004 21:07:34 -0000 1.22
@@ -1,148 +1,136 @@
package org.apache.ojb.broker.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation. All rights
- * reserved.
- *
+/*
+ * ==================================================================== The
+ * Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001 The Apache Software Foundation. All rights reserved.
+ *
* Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Apache" and "Apache Software Foundation" and
- * "Apache ObjectRelationalBridge" must not be used to endorse or promote products
- * derived from this software without prior written permission. For
- * written permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- * "Apache ObjectRelationalBridge", nor may "Apache" appear in their name, without
- * prior written permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
+ * modification, are permitted provided that the following conditions are met: 1.
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer. 2. Redistributions in
+ * binary form must reproduce the above copyright notice, this list of
+ * conditions and the following disclaimer in the documentation and/or other
+ * materials provided with the distribution. 3. The end-user documentation
+ * included with the redistribution, if any, must include the following
+ * acknowledgment: "This product includes software developed by the Apache
+ * Software Foundation (http://www.apache.org/)." Alternately, this
+ * acknowledgment may appear in the software itself, if and wherever such
+ * third-party acknowledgments normally appear. 4. The names "Apache" and
+ * "Apache Software Foundation" and "Apache ObjectRelationalBridge" must not be
+ * used to endorse or promote products derived from this software without prior
+ * written permission. For written permission, please contact
+ * apache@apache.org. 5. Products derived from this software may not be called
+ * "Apache", "Apache ObjectRelationalBridge", nor may "Apache" appear in their
+ * name, without prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation. For more information on the
+ * Apache Software Foundation, please see <http://www.apache.org/>.
*/
/**
* Helper class for all SQL related stuff.
- *
- * @author <a href="mailto:armin@codeAuLait.de">Armin Waibel</a>
+ *
+ * @author <a href="mailto:armin@codeAuLait.de">Armin Waibel </a>
* @version $Id$
*/
public class SqlHelper
{
- /**
- * Helper Class for a split column<br>
- * ie: sum (distinct amount) as theAmount
- * <pre>
- * prefix = 'sum (distinct '
- * column = 'amount'
- * suffix = ') as theAmount'
- * </pre>
- */
- public static final class PathInfo
- {
- public String column;
- public String prefix;
- public String suffix;
-
- PathInfo(String aPrefix, String aColumn, String aSuffix)
- {
- column = aColumn;
- prefix = aPrefix;
- suffix = aSuffix;
- }
- }
-
- /**
- * remove functions and () from path <br>
- * ie: avg(amount) -> amount <br>
- * ie: sum (accounts.amount) -> accounts.amount <br>
- * ie: count(distinct id) as theCount-> id <br>
- * @param aPath the path to the attribute
- */
- public static String cleanPath(String aPath)
- {
- return splitPath(aPath).column;
- }
-
- /**
- * Split a path into column , prefix and suffix, the prefix contains all info
- * up to the column<br>
- * ie: avg(amount) -> amount , avg( , ) <br>
- * ie: sum (accounts.amount) as theSum -> accounts.amount , sum( , ) as theSum <br>
- * ie: count( distinct id ) as bla -> id , count(distinct , ) as bla<br>
- * @param aPath
- * @return PathInfo
- */
- public static PathInfo splitPath(String aPath)
- {
- String prefix = null;
- String suffix = null;
- String colName = aPath;
+ /**
+ * Helper Class for a split column <br>
+ * ie: sum (distinct amount) as theAmount
+ *
+ * <pre>
+ * prefix = 'sum (distinct '
+ * column = 'amount'
+ * suffix = ') as theAmount'
+ * </pre>
+ */
+ public static final class PathInfo
+ {
+ public String column;
+ public String prefix;
+ public String suffix;
- if (aPath == null)
+ PathInfo(String aPrefix, String aColumn, String aSuffix)
{
- return new PathInfo(null, null, null);
- }
-
- // ignore leading ( and trailing ) ie: sum(avg(col1))
- int braceBegin = aPath.lastIndexOf("(");
- int braceEnd = aPath.indexOf(")");
-
- if (braceBegin >= 0 && braceEnd >= 0)
- {
- int colBegin;
- int colEnd;
- String betweenBraces;
-
- betweenBraces = aPath.substring(braceBegin + 1, braceEnd).trim();
-
- // look for ie 'distinct name'
- colBegin = betweenBraces.indexOf(" ");
- // look for multiarg function like to_char(col,'format_mask')
- colEnd = betweenBraces.indexOf(",");
- colEnd = colEnd > 0 ? colEnd : betweenBraces.length();
-
- prefix = aPath.substring(0, braceBegin + 1) +
- betweenBraces.substring(0, colBegin + 1);
- colName = betweenBraces.substring(colBegin + 1, colEnd);
- suffix = betweenBraces.substring(colEnd) +
- aPath.substring(braceEnd);
- }
-
- return new PathInfo(prefix, colName.trim(), suffix);
- }
+ column = aColumn;
+ prefix = aPrefix;
+ suffix = aSuffix;
+ }
+ }
+
+ /**
+ * remove functions and () from path <br>
+ * ie: avg(amount) -> amount <br>
+ * ie: sum (accounts.amount) -> accounts.amount <br>
+ * ie: count(distinct id) as theCount-> id <br>
+ *
+ * @param aPath
+ * the path to the attribute
+ */
+ public static String cleanPath(String aPath)
+ {
+ return splitPath(aPath).column;
+ }
+
+ /**
+ * Split a path into column , prefix and suffix, the prefix contains all
+ * info up to the column <br>
+ * ie: avg(amount) -> amount , avg( , )<br>
+ * ie: sum (accounts.amount) as theSum -> accounts.amount , sum( , ) as
+ * theSum <br>
+ * ie: count( distinct id ) as bla -> id , count(distinct , ) as bla <br>
+ *
+ * @param aPath
+ * @return PathInfo
+ */
+ public static PathInfo splitPath(String aPath)
+ {
+ String prefix = null;
+ String suffix = null;
+ String colName = aPath;
+
+ if (aPath == null)
+ {
+ return new PathInfo(null, null, null);
+ }
+
+ // ignore leading ( and trailing ) ie: sum(avg(col1))
+ int braceBegin = aPath.lastIndexOf("(");
+ int braceEnd = aPath.indexOf(")");
+
+ if (braceBegin >= 0 && braceEnd >= 0 && braceEnd > braceBegin)
+ {
+ int colBegin;
+ int colEnd;
+ String betweenBraces;
+
+ betweenBraces = aPath.substring(braceBegin + 1, braceEnd).trim();
+ // look for ie 'distinct name'
+ colBegin = betweenBraces.indexOf(" ");
+ // look for multiarg function like to_char(col,'format_mask')
+ colEnd = betweenBraces.indexOf(",");
+ colEnd = colEnd > 0 ? colEnd : betweenBraces.length();
+ prefix = aPath.substring(0, braceBegin + 1) + betweenBraces.substring(0, colBegin + 1);
+ colName = betweenBraces.substring(colBegin + 1, colEnd);
+ suffix = betweenBraces.substring(colEnd) + aPath.substring(braceEnd);
+ }
+
+ return new PathInfo(prefix, colName.trim(), suffix);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org