Return-Path: X-Original-To: apmail-db-torque-dev-archive@www.apache.org Delivered-To: apmail-db-torque-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id C93D89AA5 for ; Sat, 26 Nov 2011 11:00:33 +0000 (UTC) Received: (qmail 45632 invoked by uid 500); 26 Nov 2011 11:00:33 -0000 Delivered-To: apmail-db-torque-dev-archive@db.apache.org Received: (qmail 45550 invoked by uid 500); 26 Nov 2011 11:00:33 -0000 Mailing-List: contact torque-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Help: List-Post: List-Id: "Apache Torque Developers List" Reply-To: "Apache Torque Developers List" Delivered-To: mailing list torque-dev@db.apache.org Received: (qmail 45542 invoked by uid 500); 26 Nov 2011 11:00:33 -0000 Received: (qmail 45539 invoked by uid 99); 26 Nov 2011 11:00:33 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 26 Nov 2011 11:00:33 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.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; Sat, 26 Nov 2011 11:00:24 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 94A4A2388AB9; Sat, 26 Nov 2011 11:00:01 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1206426 [4/7] - in /db/torque/torque4/trunk: torque-runtime/src/main/java/org/apache/torque/ torque-runtime/src/main/java/org/apache/torque/avalon/ torque-runtime/src/main/java/org/apache/torque/dsfactory/ torque-runtime/src/main/java/org/... Date: Sat, 26 Nov 2011 10:59:52 -0000 To: torque-commits@db.apache.org From: tfischer@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111126110001.94A4A2388AB9@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/SummaryHelper.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/SummaryHelper.java?rev=1206426&r1=1206425&r2=1206426&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/SummaryHelper.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/SummaryHelper.java Sat Nov 26 10:59:15 2011 @@ -33,6 +33,8 @@ import java.util.Vector; import org.apache.commons.collections.OrderedMapIterator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.torque.Column; +import org.apache.torque.ColumnImpl; import org.apache.torque.TorqueException; import org.apache.torque.om.mapper.ObjectListMapper; import org.apache.torque.om.mapper.RecordMapper; @@ -92,8 +94,8 @@ public class SummaryHelper /** The class log. */ private static Log logger = LogFactory.getLog(SummaryHelper.class); - /** A list of the group by columns names (e.g. TABLE.COLUMN) */ - private List groupByColumns; + /** A list of the group by columns. */ + private List groupByColumns; /** A ListOrderMapCI with the aggregate functions * to use in generating results. */ private ListOrderedMapCI aggregates; @@ -268,19 +270,9 @@ public class SummaryHelper List resultsList = new Vector(rows.size()); List columnNames = new ArrayList(); - for (String columnName : c.getSelectColumns()) + for (Column column : c.getSelectColumns()) { - int dotPos = columnName.lastIndexOf("."); - String unqualifiedColumnName; - if (dotPos == -1) - { - unqualifiedColumnName = columnName; - } - else - { - unqualifiedColumnName = columnName.substring(dotPos + 1); - } - columnNames.add(unqualifiedColumnName); + columnNames.add(column.getColumnName()); } columnNames.addAll(c.getAsColumns().keySet()); for (List row : rows) @@ -329,11 +321,9 @@ public class SummaryHelper } c.setIgnoreCase(false); - List cols = null; - - cols = getGroupByColumns(); + List cols = getGroupByColumns(); boolean haveFromTable = !cols.isEmpty(); // Group By cols define src table. - for (String col : cols) + for (Column col : cols) { c.addGroupByColumn(col); c.addSelectColumn(col); @@ -356,18 +346,24 @@ public class SummaryHelper { String key = (String) iMap.next(); SQLFunction f = (SQLFunction) iMap.getValue(); - c.addAsColumn(key, f.toSQL()); + Column col = f.getColumn(); + c.addAsColumn(key, new ColumnImpl( + null, + col.getTableName(), + col.getColumnName(), + f.toSQL())); if (!haveFromTable) // Last chance. Get it from the func. { - String col = f.getArgument(0).toString(); - if (col.contains(".")) { // Kludgy Where table.col = table.col clause to force // from table identification. - c.add(col, (Object) (col + "=" + col), SqlEnum.CUSTOM); + c.add(col, + (col.getColumnName() + + "=" + col.getColumnName()), + SqlEnum.CUSTOM); haveFromTable = true; - String table = col.substring(0, col.indexOf('.')); + String table = col.getTableName(); logger.debug("From table, '" + table + "', defined from aggregate column"); } @@ -396,7 +392,7 @@ public class SummaryHelper * * @param column */ - public void addGroupBy(String column) + public void addGroupBy(Column column) { getGroupByColumns().add(column); } @@ -424,11 +420,11 @@ public class SummaryHelper setExcludeExprColumns(false); } - public List getGroupByColumns() + public List getGroupByColumns() { if (groupByColumns == null) { - groupByColumns = new Vector(); + groupByColumns = new Vector(); } return groupByColumns; } @@ -524,5 +520,4 @@ public class SummaryHelper { this.excludeExprColumns = excludeExprColumns; } - } Added: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/UniqueColumnList.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/UniqueColumnList.java?rev=1206426&view=auto ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/UniqueColumnList.java (added) +++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/UniqueColumnList.java Sat Nov 26 10:59:15 2011 @@ -0,0 +1,100 @@ +package org.apache.torque.util; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.ArrayList; + +import org.apache.torque.Column; + +/** + * List with unique entries. UniqueList does not allow null nor will + * Columns with the same SQL expression be added twice. + * + * @author Martin Poeschl + * @version $Id: UniqueList.java 1003834 2010-10-02 16:51:32Z tfischer $ + */ +public class UniqueColumnList extends ArrayList +{ + /** + * Serial version + */ + private static final long serialVersionUID = 4467847559423445120L; + + /** + * Constructs an empty UniqueList. + */ + public UniqueColumnList() + { + } + + /** + * Copy-constructor. Creates a shallow copy of an UniqueList. + * @param list the uniqueList to copy + */ + public UniqueColumnList(UniqueColumnList list) + { + this.addAll(list); + } + + /** + * Adds a Column to the list, if no column with the same SQL Expression + * is not already contained. + * + * @param column the Column to add, not null. + * + * @return true if the Object is added. + * + * @throws NullPointerException if column is null. + */ + public boolean add(Column column) + { + if (column == null) + { + throw new NullPointerException("column must not be null"); + } + if (!containsSqlExpression(column)) + { + return super.add(column); + } + return false; + } + + /** + * Checks if this list already contains a column with the same + * SQL expression. + * + * @param column the column to check, not null. + * + * @return true if a column with the same Sql Expression is contained, + * false otherwise. + */ + public boolean containsSqlExpression(Column column) + { + for (Column candidate : this) + { + if (candidate.getSqlExpression().equals( + column.getSqlExpression())) + { + return true; + } + } + return false; + } +} Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/AbstractFunction.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/AbstractFunction.java?rev=1206426&r1=1206425&r2=1206426&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/AbstractFunction.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/AbstractFunction.java Sat Nov 26 10:59:15 2011 @@ -22,6 +22,7 @@ package org.apache.torque.util.functions import java.util.List; import java.util.Vector; +import org.apache.torque.Column; import org.apache.torque.Torque; /** @@ -56,16 +57,6 @@ public abstract class AbstractFunction i public abstract String toSQL(); /** - * Return a string representation of the function parameter - * at the specified index. Should be null if parameter does not exist. - * - * @param index The 0 based index of the parameter to get. - * @return A String representation of the parameter. Null if one does not - * exist. - */ - public abstract String getArgument(int i); - - /** * Return all the parameters as an object array. This allow for * processing of the parameters in their original format rather * than just in String format. E.g. a parameter might be specified @@ -85,6 +76,27 @@ public abstract class AbstractFunction i } /** + * Returns the column to which this function is applied. + * + * @return the column, not null. + * + * @throws IllegalStateException if the column cannot be determined. + */ + public Column getColumn() + { + for (Object argument : getArgumentList()) + { + if (argument instanceof Column) + { + return (Column) argument; + } + } + throw new IllegalStateException( + "Column could not be determined from arguments " + + getArgumentList()); + } + + /** * Get the name of the Torque Database associated with this function. * * @return The DB name. Should not be null (use default DB in this case). @@ -113,7 +125,7 @@ public abstract class AbstractFunction i * @return The parameter object. Null if one does not * exist. */ - protected Object getArgumentObject(int index) + public Object getArgument(int index) { List argList = getArgumentList(); if (index >= argList.size()) Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/Aggregate.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/Aggregate.java?rev=1206426&r1=1206425&r2=1206426&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/Aggregate.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/Aggregate.java Sat Nov 26 10:59:15 2011 @@ -19,6 +19,7 @@ package org.apache.torque.util.functions * under the License. */ +import org.apache.torque.Column; /** *

A container for classes that will generate SQL for the SQL99 Standard @@ -98,7 +99,12 @@ public class Aggregate } this.distinct = ((Boolean) args[1]).booleanValue(); } - addArgument(args[0].toString()); + if (!(args[0] instanceof Column)) + { + throw new IllegalArgumentException( + "First argument object is not type Column!"); + } + addArgument(args[0]); this.argumentsSet = true; } @@ -150,18 +156,11 @@ public class Aggregate { sb.append("DISTINCT "); } - sb.append(getArgument(0).toString()).append(")"); + sb.append(((Column) getArgument(0)).getSqlExpression()) + .append(")"); return sb.toString(); } - /* (non-Javadoc) - * @see org.apache.torque.util.functions.AbstractFunction#getArgument(int) - */ - public String getArgument(int index) - { - return (String) getArgumentObject(index); - } - } /** Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/FunctionFactory.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/FunctionFactory.java?rev=1206426&r1=1206425&r2=1206426&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/FunctionFactory.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/FunctionFactory.java Sat Nov 26 10:59:15 2011 @@ -21,6 +21,7 @@ package org.apache.torque.util.functions import java.lang.reflect.Constructor; +import org.apache.torque.Column; import org.apache.torque.Torque; import org.apache.torque.adapter.DB; @@ -35,7 +36,7 @@ import org.apache.torque.adapter.DB; * specific functions, e.g. avg( Object ) and the like.

* * @see SQLFunction - * @see SummaryHelper + * @see org.apache.torque.util.SummaryHelper * * @author Greg Monroe * @version $Id @@ -53,185 +54,165 @@ public final class FunctionFactory * Create an AVG SQL function implementation. * * @param dbName The name of the Torque db - * @param expr1 The expression to apply the function to. Generally a - * column name in table.column format. It is assumed - * that the "toString()" method of this object will be - * acceptable for an argument. + * @param column The column or pseudocolumn to apply the function to. * @param distinct If true, the function expr will have be prefaced * with "DISTINCT", e.g. function(DISTINCT column). + * * @return The function object to use. * @throws Exception */ - public static SQLFunction avg (String dbName, Object expr1, + public static SQLFunction avg (String dbName, Column column, boolean distinct) throws Exception { return functionInstance(dbName, FunctionEnum.AVG, - new Object[]{expr1, new Boolean(distinct)}); + new Object[]{column, new Boolean(distinct)}); } /** * Convenience method for creating a non-distinct function that uses * the default DB. * - * @param expr1 The expression to apply the function to. Generally a - * column name in table.column format. It is assumed - * that the "toString()" method of this object will be - * acceptable for an argument. + * @param column The column or pseudocolumn to apply the function to. + * * @return The function object to use. * @throws Exception */ - public static SQLFunction avg (Object expr1) + public static SQLFunction avg (Column column) throws Exception { - return avg (null, expr1, false); + return avg (null, column, false); } /** * Create a COUNT SQL function implementation. * * @param dbName The name of the Torque db - * @param expr1 The expression to apply the function to. Generally a - * column name in table.column format. It is assumed - * that the "toString()" method of this object will be - * acceptable for an argument. + * @param column The column or pseudocolumn to apply the function to. * @param distinct If true, the function expr will have be prefaced * with "DISTINCT", e.g. function(DISTINCT column). + * * @return The function object to use. * @throws Exception */ - public static SQLFunction count (String dbName, Object expr1, + public static SQLFunction count (String dbName, Column column, boolean distinct) throws Exception { return functionInstance(dbName, FunctionEnum.COUNT, - new Object[]{expr1, new Boolean(distinct)}); + new Object[]{column, new Boolean(distinct)}); } /** * Convenience method for creating a non-distinct function that uses * the default DB. * - * @param expr1 The expression to apply the function to. Generally a - * column name in table.column format. It is assumed - * that the "toString()" method of this object will be - * acceptable for an argument. + * @param column The column or pseudocolumn to apply the function to. + * * @return The function object to use. * @throws Exception */ - public static SQLFunction count (Object expr1) + public static SQLFunction count (Column column) throws Exception { - return count(null, expr1, false); + return count(null, column, false); } /** * Create a MAX SQL function implementation. * * @param dbName The name of the Torque db - * @param expr1 The expression to apply the function to. Generally a - * column name in table.column format. It is assumed - * that the "toString()" method of this object will be - * acceptable for an argument. + * @param column The column or pseudocolumn to apply the function to. * @param distinct If true, the function expr will have be prefaced * with "DISTINCT", e.g. function(DISTINCT column). + * * @return The function object to use. * @throws Exception */ - public static SQLFunction max(String dbName, Object expr1, + public static SQLFunction max(String dbName, Column column, boolean distinct) throws Exception { return functionInstance(dbName, FunctionEnum.MAX, - new Object[]{expr1, new Boolean(distinct)}); + new Object[]{column, new Boolean(distinct)}); } /** * Convenience method for creating a non-distinct function that uses * the default DB. * - * @param expr1 The expression to apply the function to. Generally a - * column name in table.column format. It is assumed - * that the "toString()" method of this object will be - * acceptable for an argument. + * @param column The column or pseudocolumn to apply the function to. + * * @return The function object to use. * @throws Exception */ - public static SQLFunction max(Object expr1) + public static SQLFunction max(Column column) throws Exception { - return max(null, expr1, false); + return max(null, column, false); } /** * Create a MIN SQL function implementation. * * @param dbName The name of the Torque db - * @param expr1 The expression to apply the function to. Generally a - * column name in table.column format. It is assumed - * that the "toString()" method of this object will be - * acceptable for an argument. + * @param column The column or pseudocolumn to apply the function to. * @param distinct If true, the function expr will have be prefaced * with "DISTINCT", e.g. function(DISTINCT column). + * * @return The function object to use. * @throws Exception */ - public static SQLFunction min(String dbName, Object expr1, + public static SQLFunction min(String dbName, Column column, boolean distinct) throws Exception { return functionInstance(dbName, FunctionEnum.MIN, - new Object[]{expr1, new Boolean(distinct)}); + new Object[]{column, new Boolean(distinct)}); } /** * Convenience method for creating a non-distinct function that uses * the default DB. * - * @param expr1 The expression to apply the function to. Generally a - * column name in table.column format. It is assumed - * that the "toString()" method of this object will be - * acceptable for an argument. + * @param column The column or pseudocolumn to apply the function to. + * * @return The function object to use. * @throws Exception */ - public static SQLFunction min (Object expr1) + public static SQLFunction min (Column column) throws Exception { - return min (null, expr1, false); + return min (null, column, false); } /** * Create a SUM SQL function implementation. * * @param dbName The name of the Torque db - * @param expr1 The expression to apply the function to. Generally a - * column name in table.column format. It is assumed - * that the "toString()" method of this object will be - * acceptable for an argument. + * @param column The column or pseudocolumn to apply the function to. * @param distinct If true, the function expr will have be prefaced * with "DISTINCT", e.g. function(DISTINCT column). + * * @return The function object to use. * @throws Exception */ - public static SQLFunction sum (String dbName, Object expr1, + public static SQLFunction sum (String dbName, Column column, boolean distinct) throws Exception { return functionInstance(dbName, FunctionEnum.SUM, - new Object[]{expr1, new Boolean(distinct)}); + new Object[]{column, new Boolean(distinct)}); } /** * Convenience method for creating a non-distinct function that uses * the default DB. * - * @param expr1 The expression to apply the function to. Generally a - * column name in table.column format. It is assumed - * that the "toString()" method of this object will be - * acceptable for an argument. + * @param column The column or pseudocolumn to apply the function to. + * * @return The function object to use. * @throws Exception */ - public static SQLFunction sum (Object expr1) + public static SQLFunction sum (Column column) throws Exception { - return sum (null, expr1, false); + return sum (null, column, false); } /** Modified: db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/SQLFunction.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/SQLFunction.java?rev=1206426&r1=1206425&r2=1206426&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/SQLFunction.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/main/java/org/apache/torque/util/functions/SQLFunction.java Sat Nov 26 10:59:15 2011 @@ -19,6 +19,8 @@ package org.apache.torque.util.functions * under the License. */ +import org.apache.torque.Column; + /** * Define the basic methods that classes that support SQL Functions * need to implement for Classes that use them. This is intended to @@ -43,14 +45,22 @@ public interface SQLFunction String toSQL(); /** - * Return a string representation of the function parameters - * at index i. Should be null if parameter does not exist. + * Returns the function parameters at index i. + * Should be null if parameter does not exist. * * @param i The 0 based parameter to get. - * @return A String representation of the parameter. Null if one does not - * exist. + * @return The parameter. Null if one does not exist. + */ + Object getArgument(int i); + + /** + * Returns the column to which this function is applied. + * + * @return the column, not null. + * + * @throws IllegalStateException if the column cannot be determined. */ - String getArgument(int i); + Column getColumn(); /** * Return all the parameters as an object array. This allow for Modified: db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/BaseTestCase.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/BaseTestCase.java?rev=1206426&r1=1206425&r2=1206426&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/BaseTestCase.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/BaseTestCase.java Sat Nov 26 10:59:15 2011 @@ -21,6 +21,10 @@ package org.apache.torque; import junit.framework.TestCase; +import org.apache.torque.map.ColumnMap; +import org.apache.torque.map.DatabaseMap; +import org.apache.torque.map.TableMap; + /** * Base functionality to be extended by all Torque test cases. Test * case implementations are used to automate unit testing via JUnit. @@ -32,37 +36,61 @@ import junit.framework.TestCase; public abstract class BaseTestCase extends TestCase { /** The path to the configuration file. */ - protected static final String CONFIG_FILE + public static final String CONFIG_FILE = "src/test/resources/Torque.properties"; - /** Whether torque has been initialized. */ - private static boolean hasInitialized = false; + /** A pre-filled table map. */ + protected TableMap tableMap; - /** - * Creates a new instance. - * - * @param name the name of the test case to run - */ - public BaseTestCase(String name) - { - super(name); - } + /** A pre-filled database map. */ + protected DatabaseMap databaseMap; + + /** A pre-filled database. */ + protected Database database; + + /** A pre-filled String column map. */ + protected ColumnMap stringColumnMap; + + /** A pre-filled Integer column map. */ + protected ColumnMap integerColumnMap; /** - * Initialize Torque on the first setUp(). Subclasses which + * Re-Initialize Torque and fill supplied data. Subclasses which * override setUp() must call super.setUp() as their first action. * - * @throws TorqueException if initialisation fails. + * @throws Exception if initialisation fails. */ - public void setUp() throws TorqueException + public void setUp() throws Exception { - synchronized (BaseTestCase.class) + Torque.setInstance(null); + Torque.init(CONFIG_FILE); + + databaseMap = Torque.getDatabaseMap("postgresql"); + database = databaseMap.getDatabase(); + tableMap = databaseMap.addTable("TABLE"); + { + stringColumnMap = new ColumnMap("COLUMN1", tableMap); + stringColumnMap.setType(new String("")); + stringColumnMap.setJavaType("String"); + tableMap.addColumn(stringColumnMap); + } + { + ColumnMap columnMap2 = new ColumnMap("COLUMN2", tableMap); + columnMap2.setType(new String("")); + columnMap2.setJavaType("String"); + tableMap.addColumn(columnMap2); + } + { + ColumnMap columnMap3 = new ColumnMap("COLUMN3", tableMap); + columnMap3.setType(new String("")); + columnMap3.setJavaType("String"); + tableMap.addColumn(columnMap3); + } { - if (!hasInitialized) - { - Torque.init(CONFIG_FILE); - hasInitialized = true; - } + integerColumnMap = new ColumnMap("COLUMN4", tableMap); + integerColumnMap.setType(new Integer(0)); + integerColumnMap.setJavaType("Integer"); + tableMap.addColumn(integerColumnMap); } } } Added: db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/ColumnImplTest.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/ColumnImplTest.java?rev=1206426&view=auto ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/ColumnImplTest.java (added) +++ db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/ColumnImplTest.java Sat Nov 26 10:59:15 2011 @@ -0,0 +1,506 @@ +package org.apache.torque; + + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Test for the class ColumnImpl. + * + * @version $Id: $ + */ +public class ColumnImplTest extends BaseTestCase +{ + public void testTableColumnConstructor() + { + ColumnImpl column = new ColumnImpl( + "tableName", + "columnName"); + assertEquals(null, column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals( + "tableName.columnName", + column.getSqlExpression()); + } + + public void testTableColumnConstructorWithSchemaInTable() + { + ColumnImpl column = new ColumnImpl( + "schemaName.tableName", + "columnName"); + assertEquals("schemaName", column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals( + "schemaName.tableName.columnName", + column.getSqlExpression()); + } + + public void testTableColumnConstructorNullTableName() + { + try + { + new ColumnImpl(null, "columnName"); + fail("Exception expected"); + } + catch (NullPointerException e) + { + // expected + } + } + + public void testTableColumnConstructorBlankTableName() + { + try + { + new ColumnImpl(" ", "columnName"); + fail("Exception expected"); + } + catch (IllegalArgumentException e) + { + // expected + } + } + + public void testTableColumnConstructorNullColumnName() + { + try + { + new ColumnImpl("tableName", null); + fail("Exception expected"); + } + catch (NullPointerException e) + { + // expected + } + } + + public void testTableColumnConstructorBlankColumnName() + { + try + { + new ColumnImpl("tableName", " "); + fail("Exception expected"); + } + catch (IllegalArgumentException e) + { + // expected + } + } + + public void testSchemaTableColumnConstructor() + { + ColumnImpl column = new ColumnImpl( + "schemaName", + "tableName", + "columnName"); + assertEquals("schemaName", column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals( + "tableName.columnName", + column.getSqlExpression()); + } + + public void testSchemaTableColumnConstructorWithSchemaInConstructorAndTable() + { + ColumnImpl column = new ColumnImpl( + "schemaName", + "otherSchema.tableName", + "columnName"); + assertEquals("schemaName", column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals( + "tableName.columnName", + column.getSqlExpression()); + } + + public void testSchemaTableColumnConstructorWithSchemaInTable() + { + ColumnImpl column = new ColumnImpl( + null, + "schemaName.tableName", + "columnName"); + assertEquals("schemaName", column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals( + "tableName.columnName", + column.getSqlExpression()); + } + + public void testSchemaTableColumnConstructorNullSchemaName() + { + ColumnImpl column = new ColumnImpl( + null, + "tableName", + "columnName"); + assertEquals(null, column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals("tableName.columnName", column.getSqlExpression()); + } + + public void testSchemaTableColumnConstructorNullTableName() + { + ColumnImpl column = new ColumnImpl("schemaName", null, "columnName"); + assertEquals("schemaName", column.getSchemaName()); + assertEquals(null, column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals("columnName", column.getSqlExpression()); + } + + public void testSchemaTableColumnConstructorBlankSchemaName() + { + try + { + new ColumnImpl(" ", "tableName", "columnName"); + fail("Exception expected"); + } + catch (IllegalArgumentException e) + { + // expected + } + } + + public void testSchemaTableColumnConstructorBlankTableName() + { + try + { + new ColumnImpl("schemaName", " ", "columnName"); + fail("Exception expected"); + } + catch (IllegalArgumentException e) + { + // expected + } + } + + public void testSchemaTableColumnConstructorNullColumnName() + { + try + { + new ColumnImpl("schemaName", "tableName", null); + fail("Exception expected"); + } + catch (NullPointerException e) + { + // expected + } + } + + public void testSchemaTableColumnConstructorBlankColumnName() + { + try + { + new ColumnImpl("schemaName", "tableName", " "); + fail("Exception expected"); + } + catch (IllegalArgumentException e) + { + // expected + } + } + + public void testSqlExpressionConstructor() + { + ColumnImpl column = new ColumnImpl("schemaName.tableName.columnName"); + assertEquals("schemaName", column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals("tableName.columnName", column.getSqlExpression()); + } + + public void testSqlExpressionConstructorNull() + { + try + { + new ColumnImpl(null); + fail("Exception expected"); + } + catch (IllegalArgumentException e) + { + // expected + } + } + + public void testSqlExpressionConstructorBlank() + { + try + { + new ColumnImpl(""); + fail("Exception expected"); + } + catch (IllegalArgumentException e) + { + // expected + } + } + + public void testSqlExpressionConstructorNoDot() + { + ColumnImpl column = new ColumnImpl("columnName"); + assertEquals(null, column.getSchemaName()); + assertEquals(null, column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals("columnName", column.getSqlExpression()); + } + + public void testSqlExpressionConstructorAsterisk() + { + ColumnImpl column = new ColumnImpl("tableName.*"); + assertEquals(null, column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals(null, column.getColumnName()); + assertEquals("tableName.*", column.getSqlExpression()); + } + + public void testSqlExpressionConstructorAsteriskAndSchema() + { + ColumnImpl column = new ColumnImpl("schemaName.tableName.*"); + assertEquals("schemaName", column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals(null, column.getColumnName()); + assertEquals("tableName.*", column.getSqlExpression()); + } + + public void testSqlExpressionConstructorBlankColumnName() + { + try + { + new ColumnImpl("tableName."); + } + catch (IllegalArgumentException e) + { + // expected + } + } + + public void testSqlExpressionConstructorBlankTableName() + { + try + { + new ColumnImpl(".columnName"); + fail("Exception expected"); + } + catch (IllegalArgumentException e) + { + // expected + } + } + + public void testSqlExpressionConstructorCount() + { + ColumnImpl column + = new ColumnImpl("count(schemaName.tableName.columnName)"); + assertEquals("schemaName", column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals( + "count(tableName.columnName)", + column.getSqlExpression()); + } + + public void testSqlExpressionConstructorSqlFunction() + { + ColumnImpl column = new ColumnImpl( + "function(1, schemaName.tableName.columnName ,2)"); + assertEquals("schemaName", column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals( + "function(1, tableName.columnName ,2)", + column.getSqlExpression()); + } + + public void testSqlExpressionConstructorComparisonAfter() + { + ColumnImpl column = new ColumnImpl("tableName.columnName < 10"); + assertEquals(null, column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals( + "tableName.columnName < 10", + column.getSqlExpression()); + } + + public void testSqlExpressionConstructorComparisonBefore() + { + ColumnImpl column = new ColumnImpl("10 < tableName.columnName"); + assertEquals(null, column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals( + "10 < tableName.columnName", + column.getSqlExpression()); + } + + public void testSqlExpressionConstructorInClause() + { + ColumnImpl column = new ColumnImpl("tableName.columnName in (1,2,3)"); + assertEquals(null, column.getSchemaName()); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals( + "tableName.columnName in (1,2,3)", + column.getSqlExpression()); + } + + public void testSqlExpressionConstructorSqlFunctionAsteriskColumnName() + { + ColumnImpl column = new ColumnImpl("count(tableName.*)"); + assertEquals("tableName", column.getTableName()); + assertEquals(null, column.getColumnName()); + assertEquals("count(tableName.*)", column.getSqlExpression()); + } + + public void testSqlExpressionConstructorSqlFunctionAsteriskOnly() + { + ColumnImpl column = new ColumnImpl("count(*)"); + assertEquals(null, column.getTableName()); + assertEquals(null, column.getColumnName()); + assertEquals("count(*)", column.getSqlExpression()); + } + + public void testSqlExpressionConstructorSqlFunctionEmptyTableName() + { + try + { + new ColumnImpl("count(.columnName)"); + fail("Exception expected"); + } + catch (IllegalArgumentException e) + { + // expected + } + } + + public void testSqlExpressionConstructorAlias() + { + ColumnImpl column = new ColumnImpl("tableName.columnName AS x"); + assertEquals("tableName", column.getTableName()); + assertEquals("columnName", column.getColumnName()); + assertEquals( + "tableName.columnName AS x", + column.getSqlExpression()); + } + + public void testGetSqlExpressionNoSchema() + { + ColumnImpl column = new ColumnImpl(null, "tableName", "columnName"); + assertEquals("tableName.columnName", column.getSqlExpression()); + } + + public void testGetSqlExpressionWithSchema() + { + ColumnImpl column + = new ColumnImpl("schemaName", "tableName", "columnName"); + assertEquals( + "tableName.columnName", + column.getSqlExpression()); + } + + public void testEquals() + { + ColumnImpl column1 = new ColumnImpl( + "schemaName", + "tableName", + "columnName", + "tableName.columnName AS x"); + ColumnImpl column2 = new ColumnImpl( + "schemaName", + "tableName", + "columnName", + "tableName.columnName AS x"); + assertTrue(column1.equals(column2)); + } + + public void testEqualsSchemaTableColumnNull() + { + ColumnImpl column1 = new ColumnImpl( + null, + null, + null, + "*"); + ColumnImpl column2 = new ColumnImpl( + null, + null, + null, + "*"); + assertTrue(column1.equals(column2)); + } + + public void testEqualsWrongColumn() + { + ColumnImpl column1 = new ColumnImpl( + "schemaName", + "tableName", + "columnName1"); + ColumnImpl column2 = new ColumnImpl( + "schemaName", + "tableName", + "columnName2"); + assertFalse(column1.equals(column2)); + } + + public void testEqualsWrongTable() + { + ColumnImpl column1 = new ColumnImpl( + "schemaName", + "tableName1", + "columnName"); + ColumnImpl column2 = new ColumnImpl( + "schemaName", + "tableName2", + "columnName"); + assertFalse(column1.equals(column2)); + } + + public void testEqualsWrongSchema() + { + ColumnImpl column1 = new ColumnImpl( + "schemaName1", + "tableName", + "columnName"); + ColumnImpl column2 = new ColumnImpl( + "schemaName2", + "tableName", + "columnName"); + assertFalse(column1.equals(column2)); + } + + public void testEqualsWrongSqlExpression() + { + ColumnImpl column1 = new ColumnImpl("tableName.columnName AS x"); + ColumnImpl column2 = new ColumnImpl("tableName.columnName AS y"); + assertFalse(column1.equals(column2)); + } + + public void testToString() + { + ColumnImpl column = new ColumnImpl( + "schemaName1.tableName1.columnName1 AS x"); + assertEquals("ColumnImpl [columnName=columnName1, tableName=" + + "tableName1, schemaName=schemaName1, " + + "sqlExpression=tableName1.columnName1 AS x]", + column.toString()); + } +} Modified: db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/TorqueInstanceTest.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/TorqueInstanceTest.java?rev=1206426&r1=1206425&r2=1206426&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/TorqueInstanceTest.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/TorqueInstanceTest.java Sat Nov 26 10:59:15 2011 @@ -1,20 +1,5 @@ package org.apache.torque; -import java.util.Map; - -import junit.framework.TestCase; - -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.torque.adapter.DB; -import org.apache.torque.dsfactory.DataSourceFactory; -import org.apache.torque.map.ColumnMap; -import org.apache.torque.map.DatabaseMap; -import org.apache.torque.map.MapBuilder; -import org.apache.torque.map.TableMap; -import org.apache.torque.util.BasePeer; - /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -34,6 +19,16 @@ import org.apache.torque.util.BasePeer; * under the License. */ +import java.util.Map; + +import junit.framework.TestCase; + +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.torque.adapter.DB; +import org.apache.torque.dsfactory.DataSourceFactory; + /** * Tests the TorqueInstance Class. * @@ -61,19 +56,16 @@ public class TorqueInstanceTest extends } /** - * Tests whether registration of Map Builders works before and after - * initialisation of Torque. - * @throws Exception if an error occurs during the Test. + * Performs initialisations before the test. + * + * @throws Exception if the initialisation fails. */ - public void testClassLoading() throws Exception + protected void setUp() throws Exception { - Torque.registerMapBuilder(MapBuilderA.CLASS_NAME); - Torque.init(getConfiguration()); - BasePeer.getMapBuilder(MapBuilderB.CLASS_NAME); - - DatabaseMap databaseMap = Torque.getDatabaseMap(Torque.getDefaultDB()); - assertNotNull(databaseMap.getTable(MapBuilderA.TABLE_NAME)); - assertNotNull(databaseMap.getTable(MapBuilderB.TABLE_NAME)); + if (!Torque.isInit()) + { + Torque.init(getConfiguration()); + } } /** @@ -161,115 +153,11 @@ public class TorqueInstanceTest extends * @return * @throws ConfigurationException */ - private Configuration getConfiguration() throws ConfigurationException + private static Configuration getConfiguration() + throws ConfigurationException { Configuration conf = new PropertiesConfiguration(BaseTestCase.CONFIG_FILE); return conf; } - - /** - * The base class for the Map Builders used in this testbed. - */ - public abstract static class MapBuilderBase implements MapBuilder - { - - /** The name of the associated table. */ - private String tableName; - - /** The database map. */ - private DatabaseMap dbMap = null; - - /** - * Constructs a MapBuilder. - * @param tableName the name of the table to register. - */ - public MapBuilderBase(String tableName) - { - this.tableName = tableName; - } - - /** - * Tells us if this DatabaseMapBuilder is built so that we - * don't have to re-build it every time. - * - * @return true if this DatabaseMapBuilder is built - */ - public boolean isBuilt() - { - return (dbMap != null); - } - - /** - * Gets the databasemap this map builder built. - * - * @return the databasemap - */ - public DatabaseMap getDatabaseMap() - { - return this.dbMap; - } - - /** - * Builds the DatabaseMap. - * - * @throws TorqueException in an error occurs during building. - */ - public void doBuild() throws TorqueException - { - dbMap = Torque.getDatabaseMap(MYSQL_NAME); - - dbMap.addTable(tableName); - TableMap tMap = dbMap.getTable(tableName); - - tMap.setPrimaryKeyMethod(TableMap.NATIVE); - - tMap.setPrimaryKeyMethodInfo(tableName); - - ColumnMap idColumn = new ColumnMap(tableName + "ID", tMap); - idColumn.setType(new Integer(0)); - idColumn.setPrimaryKey(true); - tMap.addColumn(idColumn); - ColumnMap nameColumn = new ColumnMap(tableName + "ID", tMap); - nameColumn.setType(""); - nameColumn.setSize(50); - tMap.addColumn(nameColumn); - } - } - - /** - * Map builder implementation for testing. - */ - public static class MapBuilderA extends MapBuilderBase implements MapBuilder - { - /** The name of this class. */ - public static final String CLASS_NAME = - MapBuilderA.class.getName(); - - /** The name of the associated table. */ - public static final String TABLE_NAME = "a"; - - public MapBuilderA() - { - super(TABLE_NAME); - } - } - - /** - * Second map builder implementation for testing. - */ - public static class MapBuilderB extends MapBuilderBase implements MapBuilder - { - /** The name of this class. */ - public static final String CLASS_NAME = - MapBuilderB.class.getName(); - - /** The name of the associated table. */ - public static final String TABLE_NAME = "b"; - - public MapBuilderB() - { - super(TABLE_NAME); - } - } } Modified: db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/TorqueRuntimeExceptionTest.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/TorqueRuntimeExceptionTest.java?rev=1206426&r1=1206425&r2=1206426&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/TorqueRuntimeExceptionTest.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/TorqueRuntimeExceptionTest.java Sat Nov 26 10:59:15 2011 @@ -28,16 +28,6 @@ import java.io.StringWriter; public class TorqueRuntimeExceptionTest extends BaseTestCase { /** - * Creates a new instance. - * - * @param name the name of the test case. - */ - public TorqueRuntimeExceptionTest(String name) - { - super(name); - } - - /** * Tests whether printstackTrace works. */ public void testPrintStackTrace() @@ -57,6 +47,6 @@ public class TorqueRuntimeExceptionTest "org.apache.torque.TorqueRuntimeExceptionTest.testPrintStackTrace") > 0); } - + } } Modified: db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/avalon/AvalonTest.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/avalon/AvalonTest.java?rev=1206426&r1=1206425&r2=1206426&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/avalon/AvalonTest.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/avalon/AvalonTest.java Sat Nov 26 10:59:15 2011 @@ -18,8 +18,8 @@ package org.apache.torque.avalon; * under the License. */ -import org.apache.avalon.framework.component.ComponentException; import org.apache.fulcrum.testcontainer.BaseUnitTest; +import org.apache.torque.BaseTestCase; /** * Basic testing of the Torque Avalon Component @@ -38,30 +38,39 @@ public class AvalonTest extends BaseUnit */ public AvalonTest(String name) { - super( name ); + super(name); } public void setUp() throws Exception { - setConfigurationFileName("src/test/resources/TestComponentConfig.xml"); - setRoleFileName("src/test/resources/TestRoleConfig.xml"); + } + + /** + * Verifies that the container initialization and lookup works properly. + */ + public void testAvalonTorqueNotInitialized() throws Exception + { + setConfigurationFileName("src/test/resources/TestComponentConfig.xml"); + setRoleFileName("src/test/resources/TestRoleConfig.xml"); super.setUp(); - try - { - torque = (Torque) this.resolve( Torque.class.getName() ); - } - catch (ComponentException e) - { - e.printStackTrace(); - fail(e.getMessage()); - } + torque = (Torque) this.resolve(Torque.class.getName()); + + assertTrue(torque.isInit()); + assertTrue("Instances should be identical", torque == org.apache.torque.Torque.getInstance()); } /** * Verifies that the container initialization and lookup works properly. */ - public void testAvalon() + public void testAvalonTorqueInitialized() throws Exception { + org.apache.torque.Torque.setInstance(null); + org.apache.torque.Torque.init(BaseTestCase.CONFIG_FILE); + setConfigurationFileName("src/test/resources/TestComponentConfig.xml"); + setRoleFileName("src/test/resources/TestRoleConfig.xml"); + super.setUp(); + torque = (Torque) this.resolve(Torque.class.getName()); + assertTrue(torque.isInit()); assertTrue("Instances should be identical", torque == org.apache.torque.Torque.getInstance()); } Added: db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/map/ColumnMapTest.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/map/ColumnMapTest.java?rev=1206426&view=auto ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/map/ColumnMapTest.java (added) +++ db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/map/ColumnMapTest.java Sat Nov 26 10:59:15 2011 @@ -0,0 +1,54 @@ +package org.apache.torque.map; + +import org.apache.torque.BaseTestCase; + + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Test for the class ColumnMap. + * + * @version $Id: $ + */ +public class ColumnMapTest extends BaseTestCase +{ + public void testGetSqlExpressionNoSchemaDefaultSchemaNull() + { + ColumnMap column = new ColumnMap("columnName", tableMap); + assertEquals("TABLE.columnName", column.getSqlExpression()); + } + + public void testGetFullTableNameWithoutDefaultSchema() + { + ColumnMap column = new ColumnMap("columnName", tableMap); + assertEquals( + "TABLE", + column.getFullTableName()); + } + + public void testGetFullTableNameWithDefaultSchema() + { + tableMap = databaseMap.addTable("schemaName.TABLE"); + ColumnMap column = new ColumnMap("columnName", tableMap); + assertEquals( + "schemaName.TABLE", + column.getFullTableName()); + } +} Modified: db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/QueryTest.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/QueryTest.java?rev=1206426&r1=1206425&r2=1206426&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/QueryTest.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/QueryTest.java Sat Nov 26 10:59:15 2011 @@ -31,16 +31,6 @@ import org.apache.torque.util.UniqueList */ public class QueryTest extends BaseTestCase { - - /** - * Constructor for QueryTest. - * @param arg0 - */ - public QueryTest(String arg0) - { - super(arg0); - } - /** * Test for String toString() */ Modified: db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java?rev=1206426&r1=1206425&r2=1206426&view=diff ============================================================================== --- db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java (original) +++ db/torque/torque4/trunk/torque-runtime/src/test/java/org/apache/torque/sql/SqlBuilderTest.java Sat Nov 26 10:59:15 2011 @@ -23,9 +23,11 @@ import java.lang.reflect.Array; import java.util.List; import org.apache.torque.BaseTestCase; +import org.apache.torque.Database; import org.apache.torque.TorqueException; import org.apache.torque.adapter.DB; import org.apache.torque.adapter.DBFactory; +import org.apache.torque.util.Criteria; import org.apache.torque.util.SqlEnum; /** @@ -40,18 +42,9 @@ public class SqlBuilderTest extends Base private DB db = null; /** - * Constructor for SqlExpressionTest. - * @param arg0 - */ - public SqlBuilderTest(String arg0) - { - super(arg0); - } - - /** * set up environment */ - public void setUp() throws TorqueException + public void setUp() throws Exception { super.setUp(); try @@ -162,95 +155,408 @@ public class SqlBuilderTest extends Base assertEquals(1, replacements.size()); assertEquals("50%", replacements.get(0)); } - - public void testExtractTableName() throws TorqueException + + /** + * Test that unknown columns are treated case-insensitive if ignoreCase + * is set. + */ + public void testignoreCaseUnknownColumnType() throws Exception { - // standard cases with / without schema - String columnName = "table.column"; - String tableName = SqlBuilder.getTableName(columnName, null); - assertEquals("table", tableName); - - columnName = "schema.table.column"; - tableName = SqlBuilder.getTableName(columnName, null); - assertEquals("schema.table", tableName); - - // functions - columnName = "function(table.column)"; - tableName = SqlBuilder.getTableName(columnName, null); - assertEquals("table", tableName); - - columnName = "function(1,table.column,2)"; - tableName = SqlBuilder.getTableName(columnName, null); - assertEquals("table", tableName); - - // comparisons - columnName = "table.column < 10"; - tableName = SqlBuilder.getTableName(columnName, null); - assertEquals("table", tableName); - - columnName = "table.column<10"; - tableName = SqlBuilder.getTableName(columnName, null); - assertEquals("table", tableName); - - columnName = "10 > table.column"; - tableName = SqlBuilder.getTableName(columnName, null); - assertEquals("table", tableName); - - columnName = "10>table.column"; - tableName = SqlBuilder.getTableName(columnName, null); - assertEquals("table", tableName); - - columnName = "10>table.column"; - tableName = SqlBuilder.getTableName(columnName, null); - assertEquals("table", tableName); - - // in clause - columnName = "table.column in (1,2,3)"; - tableName = SqlBuilder.getTableName(columnName, null); - assertEquals("table", tableName); - - // wildcard - columnName = "*"; - tableName = SqlBuilder.getTableName(columnName, null); - assertEquals(null, tableName); - - // function with wildcard - columnName = "count(*)"; - tableName = SqlBuilder.getTableName(columnName, null); - assertEquals(null, tableName); + Criteria criteria = new Criteria(); + criteria.addSelectColumn("unknownTable.column1"); + criteria.add("column1", "1"); + criteria.setIgnoreCase(true); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT unknownTable.column1 FROM unknownTable " + + "WHERE UPPER(column1)=UPPER(?)", + query.toString()); + } - // empty String and null - columnName = ""; - try - { - tableName = SqlBuilder.getTableName(columnName, null); - fail("getTableName() should fail for empty column name"); - } - catch (TorqueException e) - { - } + public void testIgnoreCaseStringColumnType() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addSelectColumn(stringColumnMap); + criteria.add(stringColumnMap, "1"); + criteria.setIgnoreCase(true); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT TABLE.COLUMN1 FROM TABLE " + + "WHERE UPPER(TABLE.COLUMN1)=UPPER(?)", + query.toString()); + } - columnName = null; - try - { - tableName = SqlBuilder.getTableName(columnName, null); - fail("getTableName() should fail for null as column name"); - } - catch (TorqueException e) - { - } + public void testIgnoreCaseIntegerColumnType() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addSelectColumn(integerColumnMap); + criteria.add(integerColumnMap, "1"); + criteria.setIgnoreCase(true); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT TABLE.COLUMN4 FROM TABLE " + + "WHERE TABLE.COLUMN4=?", + query.toString()); + } - // failure: no dot or wildcard - columnName = "column"; - try - { - tableName = SqlBuilder.getTableName(columnName, null); - fail("getTableName() should fail for column name " - + "without a dot or wildcard"); - } - catch (TorqueException e) - { - } + public void testOrderByDesc() throws TorqueException + { + Criteria criteria = new Criteria(); + criteria.addDescendingOrderByColumn("table.column1"); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT table.column1 FROM table ORDER BY table.column1 DESC", + query.toString()); + } + + public void testOrderByAsc() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAscendingOrderByColumn("table.column1"); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT table.column1 FROM table ORDER BY table.column1 ASC", + query.toString()); + } + + public void testMultipleOrderBy() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAscendingOrderByColumn("table.column1"); + criteria.addDescendingOrderByColumn("table2.column2"); + criteria.addAscendingOrderByColumn("table3.column1"); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT table.column1, table2.column2, table3.column1" + + " FROM table, table2, table3" + + " ORDER BY table.column1 ASC," + + " table2.column2 DESC," + + " table3.column1 ASC", + query.toString()); + } + + public void testOrderByWithDefaultSchema() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAscendingOrderByColumn("table.column1"); + Database database = databaseMap.getDatabase(); + database.setSchema("schema1"); + criteria.setDbName(database.getName()); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT table.column1 FROM schema1.table " + + "ORDER BY table.column1 ASC", + query.toString()); + } + + public void testOrderByIgnoreCase() + { + // TODO implement + } + + public void testAlias() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAlias("alias", "table"); + criteria.addSelectColumn("alias.column1"); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT alias.column1 FROM table alias", + query.toString()); + } + + public void testAliasWithDefaultSchema() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAlias("alias", "table"); + criteria.addSelectColumn("alias.column1"); + Database database = databaseMap.getDatabase(); + database.setSchema("schema1"); + criteria.setDbName(database.getName()); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT alias.column1 FROM schema1.table alias", + query.toString()); + } + + public void testAliasWithIgnoreCaseUnknownColumnType() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAlias("alias", "table"); + criteria.addSelectColumn("alias.column1"); + criteria.add("alias.column1", "1"); + criteria.setIgnoreCase(true); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT alias.column1 FROM table alias " + + "WHERE UPPER(alias.column1)=UPPER(?)", + query.toString()); + } + + public void testAliasWithIgnoreCaseStringColumnType() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAlias("alias", tableMap.getName()); + criteria.addSelectColumn("alias.COLUMN1"); + criteria.add("alias.COLUMN1", "1"); + criteria.setIgnoreCase(true); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT alias.COLUMN1 FROM TABLE alias " + + "WHERE UPPER(alias.COLUMN1)=UPPER(?)", + query.toString()); + } + + public void testAliasWithIgnoreCaseIntegerColumnType() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAlias("alias", tableMap.getName()); + criteria.addSelectColumn("alias.COLUMN4"); + criteria.add("alias.COLUMN4", "1"); + criteria.setIgnoreCase(true); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT alias.COLUMN4 FROM TABLE alias " + + "WHERE alias.COLUMN4=?", + query.toString()); + } + + public void testAliasWithIgnoreCaseStringColumnTypeAndDefaultSchema() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAlias("alias", tableMap.getName()); + criteria.addSelectColumn("alias.COLUMN1"); + criteria.add("alias.COLUMN1", "1"); + criteria.setIgnoreCase(true); + Database database = databaseMap.getDatabase(); + database.setSchema("schema1"); + criteria.setDbName(database.getName()); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT alias.COLUMN1 FROM schema1.TABLE alias " + + "WHERE UPPER(alias.COLUMN1)=UPPER(?)", + query.toString()); + } + + public void testAliasWithIgnoreCaseIntegerColumnTypeAndDefaultSchema() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAlias("alias", tableMap.getName()); + criteria.addSelectColumn("alias.COLUMN4"); + criteria.add("alias.COLUMN4", "1"); + criteria.setIgnoreCase(true); + Database database = databaseMap.getDatabase(); + database.setSchema("schema1"); + criteria.setDbName(database.getName()); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT alias.COLUMN4 FROM schema1.TABLE alias " + + "WHERE alias.COLUMN4=?", + query.toString()); + } + + public void testAsColumn() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAsColumn("columnAlias", stringColumnMap); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT TABLE.COLUMN1 AS columnAlias FROM TABLE", + query.toString()); + } + + public void testAsColumnWithIgnoreCaseUnknownColumn() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAsColumn("columnAlias", "table.column"); + criteria.add("columnAlias", "1"); + criteria.setIgnoreCase(true); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT table.column AS columnAlias FROM table" + + " WHERE UPPER(columnAlias)=UPPER(?)", + query.toString()); + } + + public void testAsColumnWithIgnoreCaseStringColumn() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAsColumn("columnAlias", stringColumnMap); + criteria.add("columnAlias", "1"); + criteria.setIgnoreCase(true); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT TABLE.COLUMN1 AS columnAlias FROM TABLE" + + " WHERE UPPER(columnAlias)=UPPER(?)", + query.toString()); + } + + public void testAsColumnWithIgnoreCaseIntegerColumn() throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAsColumn("columnAlias", integerColumnMap); + criteria.add("columnAlias", "1"); + criteria.setIgnoreCase(true); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT TABLE.COLUMN4 AS columnAlias FROM TABLE" + + " WHERE columnAlias=?", + query.toString()); + } + + public void testAsColumnWithIgnoreCaseStringColumnAndDefaultSchema() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAsColumn("columnAlias", stringColumnMap); + criteria.addSelectColumn("columnAlias"); + criteria.add("columnAlias", "1"); + criteria.setIgnoreCase(true); + Database database = databaseMap.getDatabase(); + database.setSchema("schema1"); + criteria.setDbName(database.getName()); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT TABLE.COLUMN1 AS columnAlias FROM schema1.TABLE" + + " WHERE UPPER(columnAlias)=UPPER(?)", + query.toString()); + } + public void testAsColumnWithIgnoreCaseIntegerColumnAndDefaultSchema() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAsColumn("columnAlias", integerColumnMap); + criteria.addSelectColumn("columnAlias"); + criteria.add("columnAlias", "1"); + criteria.setIgnoreCase(true); + Database database = databaseMap.getDatabase(); + database.setSchema("schema1"); + criteria.setDbName(database.getName()); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT TABLE.COLUMN4 AS columnAlias FROM schema1.TABLE" + + " WHERE columnAlias=?", + query.toString()); + } + + public void testInnerJoin() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addSelectColumn("table1.column1"); + criteria.addJoin("table1.column", "table2.column"); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT table1.column1 FROM table1, table2" + + " WHERE table1.column=table2.column", + query.toString()); + } + + public void testLeftJoin() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addSelectColumn("table1.column1"); + criteria.addJoin("table1.column", "table2.column", Criteria.LEFT_JOIN); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT table1.column1" + + " FROM table1 LEFT JOIN table2" + + " ON table1.column=table2.column", + query.toString()); + } + + public void testRightJoin() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addSelectColumn("table1.column1"); + criteria.addJoin("table1.column", "table2.column", Criteria.RIGHT_JOIN); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT table1.column1" + + " FROM table1 RIGHT JOIN table2" + + " ON table1.column=table2.column", + query.toString()); + } + + public void testInnerJoinWithAlias() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addSelectColumn("alias.column1"); + criteria.addAlias("alias", "table1"); + criteria.addJoin("alias.column", "table2.column"); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT alias.column1 FROM table1 alias, table2" + + " WHERE alias.column=table2.column", + query.toString()); + } + + public void testInnerJoinWithAliasAndAsColumn() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addAsColumn("x", "alias.column"); + criteria.addAlias("alias", "table1"); + criteria.addJoin("x", "table2.column"); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT alias.column AS x FROM table2, table1 alias" + + " WHERE x=table2.column", + query.toString()); + } + + + public void testInnerJoinWithDefaultSchema() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addSelectColumn("*"); + criteria.addJoin("table1.column", "table2.column"); + Database database = databaseMap.getDatabase(); + database.setSchema("schema1"); + criteria.setDbName(database.getName()); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT *" + + " FROM schema1.table1, schema1.table2" + + " WHERE table1.column=table2.column", + query.toString()); + } + + public void testInnerJoinWithAliasAndDefaultSchema() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addSelectColumn("alias.column1"); + criteria.addAlias("alias", "table1"); + criteria.addJoin("alias.column", "table2.column"); + Database database = databaseMap.getDatabase(); + database.setSchema("schema1"); + criteria.setDbName(database.getName()); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT alias.column1 FROM schema1.table1 alias, schema1.table2" + + " WHERE alias.column=table2.column", + query.toString()); + } + + public void testInnerJoinWithAliasAndSchema() + throws Exception + { + Criteria criteria = new Criteria(); + criteria.addSelectColumn("schema1.alias.column1"); + criteria.addAlias("alias", "table1"); + criteria.addJoin("schema1.alias.column", "schema2.table2.column"); + Query query = SqlBuilder.buildQuery(criteria); + assertEquals( + "SELECT alias.column1 FROM schema1.table1 alias, schema2.table2" + + " WHERE alias.column=table2.column", + query.toString()); } } --------------------------------------------------------------------- To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org For additional commands, e-mail: torque-dev-help@db.apache.org