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