You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jaxme-dev@ws.apache.org by jo...@apache.org on 2007/08/20 10:21:50 UTC

svn commit: r567590 - in /webservices/jaxme/branches/b0_5: .settings/ src/jaxme/org/apache/ws/jaxme/junit/ src/js/org/apache/ws/jaxme/sqls/ src/js/org/apache/ws/jaxme/sqls/impl/ src/js/org/apache/ws/jaxme/sqls/junit/

Author: jochen
Date: Mon Aug 20 01:21:49 2007
New Revision: 567590

URL: http://svn.apache.org/viewvc?rev=567590&view=rev
Log: (empty)

Added:
    webservices/jaxme/branches/b0_5/.settings/org.eclipse.core.resources.prefs
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/IntersectionStatement.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/MinusStatement.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/SelectCombinationStatement.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/UnionStatement.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/IntersectionStatementImpl.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/MinusStatementImpl.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SelectCombinationStatementImpl.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/UnionStatementImpl.java
Modified:
    webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BindingsTest.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/SQLFactory.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/ColumnImpl.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SQLFactoryImpl.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SQLGeneratorImpl.java
    webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/junit/CreateTest.java

Added: webservices/jaxme/branches/b0_5/.settings/org.eclipse.core.resources.prefs
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/.settings/org.eclipse.core.resources.prefs?rev=567590&view=auto
==============================================================================
--- webservices/jaxme/branches/b0_5/.settings/org.eclipse.core.resources.prefs (added)
+++ webservices/jaxme/branches/b0_5/.settings/org.eclipse.core.resources.prefs Mon Aug 20 01:21:49 2007
@@ -0,0 +1,3 @@
+#Fri Apr 13 22:08:28 CEST 2007
+eclipse.preferences.version=1
+encoding//src/test/jaxb/enumeration.xsd=UTF8

Modified: webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BindingsTest.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BindingsTest.java?rev=567590&r1=567589&r2=567590&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BindingsTest.java (original)
+++ webservices/jaxme/branches/b0_5/src/jaxme/org/apache/ws/jaxme/junit/BindingsTest.java Mon Aug 20 01:21:49 2007
@@ -61,4 +61,22 @@
 		impFoo.setRequiredLong(1L);
         impFoo.setOptionalLong(new Long(1));
 	}
+
+    /**
+     * Tests running the generator with a binding file.
+     */
+    public void testDatmlRaw() throws Exception {
+        try {
+            Generator g = new GeneratorImpl();
+            g.setTargetDirectory(new File("build/tests/datml/src"));
+            g.setResourceTargetDirectory(new File("build/tests/datml/src"));
+            g.addBindings(new InputSource(new File("src/test/jaxb/datml-raw-de-2_0.jxb").toURI().toURL().toExternalForm()));
+            SchemaReader sr = new JAXBSchemaReader();
+            sr.setGenerator(g);
+            g.setSchemaReader(sr);
+            g.generate(new File("src/test/jaxb/datml-raw-de-2_0.foo"));
+        } catch (Throwable t) {
+            t.printStackTrace();
+        }
+    }
 }

Added: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/IntersectionStatement.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/IntersectionStatement.java?rev=567590&view=auto
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/IntersectionStatement.java (added)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/IntersectionStatement.java Mon Aug 20 01:21:49 2007
@@ -0,0 +1,5 @@
+package org.apache.ws.jaxme.sqls;
+
+public interface IntersectionStatement extends SelectCombinationStatement {
+
+}

Added: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/MinusStatement.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/MinusStatement.java?rev=567590&view=auto
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/MinusStatement.java (added)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/MinusStatement.java Mon Aug 20 01:21:49 2007
@@ -0,0 +1,9 @@
+package org.apache.ws.jaxme.sqls;
+
+
+/**
+ * Interface of a "select ... MINUS select ..." statement.
+ */
+public interface MinusStatement extends SelectCombinationStatement {
+
+}

Modified: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/SQLFactory.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/SQLFactory.java?rev=567590&r1=567589&r2=567590&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/SQLFactory.java (original)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/SQLFactory.java Mon Aug 20 01:21:49 2007
@@ -89,6 +89,21 @@
    */
   public DeleteStatement newDeleteStatement();
 
+  /**
+   * <p>Creates a new UNION statement.</p>
+   */
+  public UnionStatement newUnionStatement();
+
+  /**
+   * <p>Creates a new INTERSECTION statement.</p>
+   */
+  public IntersectionStatement newIntersectionStatement();
+
+  /**
+   * <p>Creates a new MINUS statement.</p>
+   */
+  public MinusStatement newMinusStatement();
+
   /** <p>Creates a new {@link Schema} with the given name.</p>
    */
   public Schema newSchema(String pName);

Added: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/SelectCombinationStatement.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/SelectCombinationStatement.java?rev=567590&view=auto
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/SelectCombinationStatement.java (added)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/SelectCombinationStatement.java Mon Aug 20 01:21:49 2007
@@ -0,0 +1,21 @@
+package org.apache.ws.jaxme.sqls;
+
+import java.util.Iterator;
+
+
+/**
+ * Common base interface for {@link UnionStatement}, and
+ * {@link IntersectionStatement}.
+ */
+public interface SelectCombinationStatement extends Statement {
+    /**
+     * Adds a select statement to the given "union", or
+     * "intersection" statement.
+     */
+    void addStatement(SelectStatement pStatement);
+
+    /**
+     * Returns an iterator over all the select statements.
+     */
+    Iterator getSelectStatements();
+}

Added: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/UnionStatement.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/UnionStatement.java?rev=567590&view=auto
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/UnionStatement.java (added)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/UnionStatement.java Mon Aug 20 01:21:49 2007
@@ -0,0 +1,19 @@
+package org.apache.ws.jaxme.sqls;
+
+
+/**
+ * Interface of a "select .... union select ..." statement.
+ */
+public interface UnionStatement extends SelectCombinationStatement {
+    /**
+     * Sets, whether this is a "union all" statement. By default,
+     * it isn't.
+     */
+    void setAll(boolean pAll);
+
+    /**
+     * Returns, whether this is a "union all" statement. By default,
+     * it isn't.
+     */
+    boolean isAll();
+}

Modified: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/ColumnImpl.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/ColumnImpl.java?rev=567590&r1=567589&r2=567590&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/ColumnImpl.java (original)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/ColumnImpl.java Mon Aug 20 01:21:49 2007
@@ -36,16 +36,30 @@
       return o != null  &&  (o instanceof Column.Name)  &&  super.equals(o);
     }
   }
-  public static class TypeImpl extends SQLFactoryImpl.IdentImpl implements Column.Type {
-    private int jdbcType;
-    public TypeImpl(String pName, int pJDBCType) {
-      super(pName);
-      jdbcType = pJDBCType;
+
+    public static class TypeImpl extends SQLFactoryImpl.IdentImpl implements Column.Type {
+        private int jdbcType;
+        public TypeImpl(String pName, int pJDBCType) {
+            super(pName);
+            jdbcType = pJDBCType;
+        }
+        public int getJDBCType() {
+            return jdbcType;
+        }
+        public int hashCode() {
+            return 31 * jdbcType;
+        }
+        public boolean equals(Object obj) {
+            if (this == obj)
+                return true;
+            if (!super.equals(obj))
+                return false;
+            if (getClass() != obj.getClass())
+                return false;
+            final TypeImpl other = (TypeImpl) obj;
+            return jdbcType == other.jdbcType;
+        }
     }
-    public int getJDBCType() {
-      return jdbcType;
-    }
-  }
 
 
   private Table table;

Added: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/IntersectionStatementImpl.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/IntersectionStatementImpl.java?rev=567590&view=auto
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/IntersectionStatementImpl.java (added)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/IntersectionStatementImpl.java Mon Aug 20 01:21:49 2007
@@ -0,0 +1,15 @@
+package org.apache.ws.jaxme.sqls.impl;
+
+import org.apache.ws.jaxme.sqls.IntersectionStatement;
+import org.apache.ws.jaxme.sqls.SQLFactory;
+
+
+/**
+ * Default implementation of {@link IntersectionStatement}.
+ */
+public class IntersectionStatementImpl extends SelectCombinationStatementImpl
+        implements IntersectionStatement {
+    protected IntersectionStatementImpl(SQLFactory pFactory) {
+        super(pFactory);
+    }
+}

Added: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/MinusStatementImpl.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/MinusStatementImpl.java?rev=567590&view=auto
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/MinusStatementImpl.java (added)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/MinusStatementImpl.java Mon Aug 20 01:21:49 2007
@@ -0,0 +1,31 @@
+package org.apache.ws.jaxme.sqls.impl;
+
+import java.util.Iterator;
+
+import org.apache.ws.jaxme.sqls.MinusStatement;
+import org.apache.ws.jaxme.sqls.SQLFactory;
+import org.apache.ws.jaxme.sqls.SelectStatement;
+
+
+
+/**
+ * Default implementation of {@link MinusStatement}.
+ */
+public class MinusStatementImpl extends SelectCombinationStatementImpl
+        implements MinusStatement {
+    protected MinusStatementImpl(SQLFactory pFactory) {
+        super(pFactory);
+    }
+
+    public void addStatement(SelectStatement pStatement) {
+        super.addStatement(pStatement);
+        Iterator iter = getSelectStatements();
+        iter.next();
+        if (iter.hasNext()) {
+            iter.next();
+            if (iter.hasNext()) {
+                throw new IllegalArgumentException("A MINUS statement must not have more than two SELECT statements.");
+            }
+        }
+    }
+}

Modified: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SQLFactoryImpl.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SQLFactoryImpl.java?rev=567590&r1=567589&r2=567590&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SQLFactoryImpl.java (original)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SQLFactoryImpl.java Mon Aug 20 01:21:49 2007
@@ -34,6 +34,8 @@
 import org.apache.ws.jaxme.sqls.ForeignKey;
 import org.apache.ws.jaxme.sqls.Index;
 import org.apache.ws.jaxme.sqls.InsertStatement;
+import org.apache.ws.jaxme.sqls.IntersectionStatement;
+import org.apache.ws.jaxme.sqls.MinusStatement;
 import org.apache.ws.jaxme.sqls.ObjectFactory;
 import org.apache.ws.jaxme.sqls.SQLFactory;
 import org.apache.ws.jaxme.sqls.SQLGenerator;
@@ -41,6 +43,7 @@
 import org.apache.ws.jaxme.sqls.SelectStatement;
 import org.apache.ws.jaxme.sqls.StringColumn;
 import org.apache.ws.jaxme.sqls.Table;
+import org.apache.ws.jaxme.sqls.UnionStatement;
 import org.apache.ws.jaxme.sqls.UpdateStatement;
 
 
@@ -608,4 +611,16 @@
   public Table getTable(Connection pConnection, String pSchema, String pTable) throws SQLException {
     return getTable(pConnection, pSchema == null ? null : new SchemaImpl.NameImpl(pSchema), new TableImpl.NameImpl(pTable));
   }
+
+    public IntersectionStatement newIntersectionStatement() {
+        return new IntersectionStatementImpl(this);
+    }
+
+    public UnionStatement newUnionStatement() {
+        return new UnionStatementImpl(this);
+    }
+
+    public MinusStatement newMinusStatement() {
+        return new MinusStatementImpl(this);
+    }
 }

Modified: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SQLGeneratorImpl.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SQLGeneratorImpl.java?rev=567590&r1=567589&r2=567590&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SQLGeneratorImpl.java (original)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SQLGeneratorImpl.java Mon Aug 20 01:21:49 2007
@@ -34,11 +34,14 @@
 import org.apache.ws.jaxme.sqls.ForeignKey;
 import org.apache.ws.jaxme.sqls.Function;
 import org.apache.ws.jaxme.sqls.Index;
+import org.apache.ws.jaxme.sqls.IntersectionStatement;
+import org.apache.ws.jaxme.sqls.MinusStatement;
 import org.apache.ws.jaxme.sqls.RawSQLCode;
 import org.apache.ws.jaxme.sqls.SQLGenerator;
 import org.apache.ws.jaxme.sqls.InsertStatement;
 import org.apache.ws.jaxme.sqls.JoinReference;
 import org.apache.ws.jaxme.sqls.Schema;
+import org.apache.ws.jaxme.sqls.SelectCombinationStatement;
 import org.apache.ws.jaxme.sqls.SelectStatement;
 import org.apache.ws.jaxme.sqls.SelectTableReference;
 import org.apache.ws.jaxme.sqls.SetStatement;
@@ -46,6 +49,7 @@
 import org.apache.ws.jaxme.sqls.StringColumn;
 import org.apache.ws.jaxme.sqls.Table;
 import org.apache.ws.jaxme.sqls.TableReference;
+import org.apache.ws.jaxme.sqls.UnionStatement;
 import org.apache.ws.jaxme.sqls.UpdateStatement;
 import org.apache.ws.jaxme.sqls.Value;
 
@@ -979,9 +983,66 @@
         }
         return sb.toString();
     }
-    
+
+    protected void checkSameStructure(SelectStatement pSt1, SelectStatement pSt2) {
+        final Iterator it1 = pSt1.getResultColumns();
+        final Iterator it2 = pSt2.getResultColumns();
+        while (it1.hasNext()) {
+            if (!it2.hasNext()) {
+                throw new IllegalArgumentException("The SELECT statements in the UNION, INTERSECT, or MINUS statements have different number of columns.");
+            }
+            final ColumnReference cr1 = (ColumnReference) it1.next();
+            final ColumnReference cr2 = (ColumnReference) it2.next();
+            final Column c1 = cr1.getColumn();
+            final Column c2 = cr2.getColumn();
+            final Column.Name n1 = cr1.getAlias() == null ? c1.getName() : cr1.getAlias(); 
+            final Column.Name n2 = cr2.getAlias() == null ? c2.getName() : cr2.getAlias();
+            if (!n1.getName().equals(n2.getName())) {
+                throw new IllegalArgumentException("The SELECT statements in the UNION, INTERSECT, or MINUS statements have varying names: " +
+                		n1.getName() + " vs. " + n2.getName());
+            }
+            if (!c1.getType().equals(c2.getType())) {
+                throw new IllegalArgumentException("The SELECT statements in the UNION, INTERSECT, or MINUS statements have varying types: " +
+                        c1.getType().getName() + " vs. " + c2.getType().getName());
+            }
+        }
+        if (it2.hasNext()) {
+            throw new IllegalArgumentException("The SELECT statements in the UNION, INTERSECT, or MINUS statements have different number of columns.");
+        }
+    }
+
+    protected String getSelectCombinationStatement(SelectCombinationStatement pStatement, String pSep) {
+        final Iterator iter = pStatement.getSelectStatements();
+        if (!iter.hasNext()) {
+            throw new IllegalArgumentException("A UNION, INTERSECT, or MINUS statement requires at least on SELECT statement.");
+        }
+        final SelectStatement first = (SelectStatement) iter.next();
+        final String s = getQuery(first);
+        if (!iter.hasNext()) {
+            return s;
+        }
+        StringBuffer sb = new StringBuffer();
+        sb.append('(');
+        sb.append(s);
+        sb.append(')');
+        int i = 0;
+        while (iter.hasNext()) {
+            if (++i > 2  &&  pStatement instanceof MinusStatement) {
+                throw new IllegalArgumentException("A MINUS statement must not have more that two SELECT statements.");
+            }
+            SelectStatement other = (SelectStatement) iter.next();
+            checkSameStructure(first, other);
+            sb.append(' ');
+            sb.append(pSep);
+            sb.append(" (");
+            sb.append(getQuery(other));
+            sb.append(')');
+        }
+        return sb.toString();
+    }
+
     public String getQuery(Statement pStatement) {
-        String s;
+        final String s;
         if (pStatement instanceof InsertStatement) {
             s = getInsertQuery((InsertStatement) pStatement);
         } else if (pStatement instanceof UpdateStatement) {
@@ -990,8 +1051,16 @@
             s =  getDeleteQuery((DeleteStatement) pStatement);
         } else if (pStatement instanceof SelectStatement) {
             s = getSelectQuery((SelectStatement) pStatement);
+        } else if (pStatement instanceof UnionStatement) {
+            final UnionStatement us = (UnionStatement) pStatement;
+            final boolean all = us.isAll();
+            s = getSelectCombinationStatement(us, all ? "UNION ALL" : "UNION");
+        } else if (pStatement instanceof IntersectionStatement) {
+            s = getSelectCombinationStatement((IntersectionStatement) pStatement, "INTERSECT");
+        } else if (pStatement instanceof MinusStatement) {
+            s = getSelectCombinationStatement((MinusStatement) pStatement, "MINUS");
         } else {
-            throw new IllegalArgumentException("The Statement is neither an INSERT, UPDATE, DELETE nor a SELECT statement.");
+            throw new IllegalArgumentException("The Statement is neither an INSERT, UPDATE, DELETE, SELECT, UNION, INTERSECT, nor MINUS statement.");
         }
         return newStatement(s);
     }

Added: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SelectCombinationStatementImpl.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SelectCombinationStatementImpl.java?rev=567590&view=auto
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SelectCombinationStatementImpl.java (added)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/SelectCombinationStatementImpl.java Mon Aug 20 01:21:49 2007
@@ -0,0 +1,29 @@
+package org.apache.ws.jaxme.sqls.impl;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.ws.jaxme.sqls.SQLFactory;
+import org.apache.ws.jaxme.sqls.SelectCombinationStatement;
+import org.apache.ws.jaxme.sqls.SelectStatement;
+
+
+/**
+ * Default implementation of {@link SelectStatement}.
+ */
+public abstract class SelectCombinationStatementImpl extends StatementImpl implements SelectCombinationStatement {
+    private final List statements = new ArrayList();
+
+    protected SelectCombinationStatementImpl(SQLFactory pFactory) {
+        super(pFactory);
+    }
+
+    public void addStatement(SelectStatement pStatement) {
+        statements.add(pStatement);
+    }
+
+    public Iterator getSelectStatements() {
+        return statements.iterator();
+    }
+}

Added: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/UnionStatementImpl.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/UnionStatementImpl.java?rev=567590&view=auto
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/UnionStatementImpl.java (added)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/impl/UnionStatementImpl.java Mon Aug 20 01:21:49 2007
@@ -0,0 +1,24 @@
+package org.apache.ws.jaxme.sqls.impl;
+
+import org.apache.ws.jaxme.sqls.SQLFactory;
+import org.apache.ws.jaxme.sqls.UnionStatement;
+
+
+/**
+ * Default implementation of {@link UnionStatement}.
+ */
+public class UnionStatementImpl extends SelectCombinationStatementImpl implements UnionStatement {
+    private boolean all;
+    
+    protected UnionStatementImpl(SQLFactory pFactory) {
+        super(pFactory);
+    }
+
+    public boolean isAll() {
+        return all;
+    }
+
+    public void setAll(boolean pAll) {
+        all = pAll;
+    }
+}

Modified: webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/junit/CreateTest.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/junit/CreateTest.java?rev=567590&r1=567589&r2=567590&view=diff
==============================================================================
--- webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/junit/CreateTest.java (original)
+++ webservices/jaxme/branches/b0_5/src/js/org/apache/ws/jaxme/sqls/junit/CreateTest.java Mon Aug 20 01:21:49 2007
@@ -31,15 +31,19 @@
 import org.apache.ws.jaxme.sqls.ForeignKey;
 import org.apache.ws.jaxme.sqls.Index;
 import org.apache.ws.jaxme.sqls.InsertStatement;
+import org.apache.ws.jaxme.sqls.IntersectionStatement;
 import org.apache.ws.jaxme.sqls.JoinReference;
+import org.apache.ws.jaxme.sqls.MinusStatement;
 import org.apache.ws.jaxme.sqls.SQLFactory;
 import org.apache.ws.jaxme.sqls.SQLGenerator;
 import org.apache.ws.jaxme.sqls.Schema;
+import org.apache.ws.jaxme.sqls.SelectCombinationStatement;
 import org.apache.ws.jaxme.sqls.SelectStatement;
 import org.apache.ws.jaxme.sqls.SelectTableReference;
 import org.apache.ws.jaxme.sqls.StringColumn;
 import org.apache.ws.jaxme.sqls.Table;
 import org.apache.ws.jaxme.sqls.TableReference;
+import org.apache.ws.jaxme.sqls.UnionStatement;
 import org.apache.ws.jaxme.sqls.UpdateStatement;
 import org.apache.ws.jaxme.sqls.impl.SQLFactoryImpl;
 import org.apache.ws.jaxme.sqls.impl.VirtualColumn;
@@ -453,4 +457,63 @@
 		String expect = "SELECT MyIndex, MyName, MyDate FROM MySchema.MyTable WHERE (MyIndex+3)>5";
 		assertEquals(expect, got);
 	}
+
+	/** Test for UNION and UNION ALL.
+	 */
+	public void testUnion() {
+        UnionStatement us = getSQLFactory().newUnionStatement();
+	    createSelectCombinationStatement(us);
+        SQLGenerator gen = getSQLGenerator();
+        String got = gen.getQuery(us);
+        String expect = "(SELECT MyIndex, MyName, MyDate FROM MySchema.MyTable WHERE 'MyIndex'>5) UNION (SELECT MyIndex, MyName, MyDate FROM MySchema.MyTable WHERE 'MyName' LIKE 'x%')";
+        assertEquals(expect, got);
+        us.setAll(true);
+        String gotAll = gen.getQuery(us);
+        String expectAll = "(SELECT MyIndex, MyName, MyDate FROM MySchema.MyTable WHERE 'MyIndex'>5) UNION ALL (SELECT MyIndex, MyName, MyDate FROM MySchema.MyTable WHERE 'MyName' LIKE 'x%')";
+        assertEquals(expectAll, gotAll);
+	}
+
+    private void createSelectCombinationStatement(SelectCombinationStatement pStatement) {
+        Table t = getBasicTable();
+	    SelectStatement st1 = t.getSelectStatement();
+        SelectStatement st2 = t.getSelectStatement();
+        BooleanConstraint bc1 = st1.getWhere().createGT();
+        bc1.addPart("MyIndex");
+        bc1.addPart(5);
+        BooleanConstraint bc2 = st2.getWhere().createLIKE();
+        bc2.addPart("MyName");
+        bc2.addPart("x%");
+        pStatement.addStatement(st1);
+        pStatement.addStatement(st2);
+    }
+
+    /** Test for INTERSECT.
+     */
+    public void testIntersect() {
+        IntersectionStatement is = getSQLFactory().newIntersectionStatement();
+        createSelectCombinationStatement(is);
+        SQLGenerator gen = getSQLGenerator();
+        String got = gen.getQuery(is);
+        String expect = "(SELECT MyIndex, MyName, MyDate FROM MySchema.MyTable WHERE 'MyIndex'>5) INTERSECT (SELECT MyIndex, MyName, MyDate FROM MySchema.MyTable WHERE 'MyName' LIKE 'x%')";
+        assertEquals(expect, got);
+    }
+
+    /** Test for MINUS.
+     */
+    public void testMinus() {
+        MinusStatement ms = getSQLFactory().newMinusStatement();
+        createSelectCombinationStatement(ms);
+        SQLGenerator gen = getSQLGenerator();
+        String got = gen.getQuery(ms);
+        String expect = "(SELECT MyIndex, MyName, MyDate FROM MySchema.MyTable WHERE 'MyIndex'>5) MINUS (SELECT MyIndex, MyName, MyDate FROM MySchema.MyTable WHERE 'MyName' LIKE 'x%')";
+        assertEquals(expect, got);
+
+        SelectStatement st = getSQLFactory().newSelectStatement();
+        try {
+            ms.addStatement(st);
+            fail("Expected exception");
+        } catch (IllegalArgumentException e) {
+            // Ok
+        }
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: jaxme-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: jaxme-dev-help@ws.apache.org