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 2004/08/18 12:05:27 UTC

cvs commit: ws-jaxme/src/js/org/apache/ws/jaxme/sqls/junit JoinTest.java

jochen      2004/08/18 03:05:27

  Modified:    src/js/org/apache/ws/jaxme/sqls/impl StatementMetaData.java
                        SQLGeneratorImpl.java
               src/js/org/apache/ws/jaxme/sqls/oracle
                        OraSQLGeneratorImpl.java
               src/js/org/apache/ws/jaxme/sqls/junit JoinTest.java
  Added:       src/js/org/apache/ws/jaxme/sqls/oracle
                        OraStatementMetaData.java
  Removed:     src/js/org/apache/ws/jaxme/sqls/oracle
                        OraSelectStatementMetaData.java
  Log:
  The creation of StatementData has not been delegated to subclasses properly.
  
  Revision  Changes    Path
  1.4       +2 -1      ws-jaxme/src/js/org/apache/ws/jaxme/sqls/impl/StatementMetaData.java
  
  Index: StatementMetaData.java
  ===================================================================
  RCS file: /home/cvs/ws-jaxme/src/js/org/apache/ws/jaxme/sqls/impl/StatementMetaData.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- StatementMetaData.java	28 Jun 2004 07:19:05 -0000	1.3
  +++ StatementMetaData.java	18 Aug 2004 10:05:25 -0000	1.4
  @@ -121,7 +121,8 @@
   
       protected void addSelectStatement(SelectStatement pQuery) {
           for (Iterator tableIter = pQuery.getSelectTableReferences();  tableIter.hasNext();  ) {
  -            addTable((TableReference) tableIter.next());
  +            TableReference ref = (TableReference) tableIter.next();
  +            addTable(ref);
           }
           addCombinedConstraint(pQuery.getWhere());
           for (Iterator iter = pQuery.getResultColumns();  iter.hasNext();  ) {
  
  
  
  1.22      +20 -8     ws-jaxme/src/js/org/apache/ws/jaxme/sqls/impl/SQLGeneratorImpl.java
  
  Index: SQLGeneratorImpl.java
  ===================================================================
  RCS file: /home/cvs/ws-jaxme/src/js/org/apache/ws/jaxme/sqls/impl/SQLGeneratorImpl.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- SQLGeneratorImpl.java	28 Jun 2004 07:19:05 -0000	1.21
  +++ SQLGeneratorImpl.java	18 Aug 2004 10:05:25 -0000	1.22
  @@ -415,7 +415,7 @@
   
       public String getInsertQuery(InsertStatement pQuery) {
           ColumnReference[] columns = getInsertStatementsColumns(pQuery);
  -        StatementMetaData smd = new StatementMetaData(pQuery, columns);
  +        StatementMetaData smd = newStatementMetaData(pQuery, columns);
           
           StringBuffer result = new StringBuffer();
           result.append("INSERT INTO ");
  @@ -479,7 +479,7 @@
       
       protected String getUpdateQuery(UpdateStatement pQuery) {
           ColumnReference[] columns = getSetStatementsColumns(pQuery);
  -        StatementMetaData smd = new StatementMetaData(pQuery, columns);
  +        StatementMetaData smd = newStatementMetaData(pQuery, columns);
   
           StringBuffer sb = new StringBuffer();
           sb.append("UPDATE ");
  @@ -505,7 +505,7 @@
       }
       
       protected String getDeleteQuery(DeleteStatement pQuery) {
  -        StatementMetaData smd = new StatementMetaData(pQuery);
  +        StatementMetaData smd = newStatementMetaData(pQuery);
           
           StringBuffer result = new StringBuffer("DELETE FROM ");
           result.append(getTableAlias(smd, pQuery.getTableReference()));
  @@ -798,7 +798,7 @@
       }
       
       protected String getSelectQuery(SelectStatement pQuery) {
  -        StatementMetaData selectStatementMetaData = newSelectStatementMetaData(pQuery);
  +        StatementMetaData selectStatementMetaData = newStatementMetaData(pQuery);
           return getSelectQuery(pQuery, selectStatementMetaData);
       }
       
  @@ -1030,12 +1030,24 @@
           return Collections.EMPTY_SET;
       }
       
  -    protected StatementMetaData newSelectStatementMetaData(SelectStatement pQuery) {
  +    protected StatementMetaData newStatementMetaData(SelectStatement pQuery) {
           return new StatementMetaData(pQuery);
       }
   
  +    protected StatementMetaData newStatementMetaData(DeleteStatement pQuery) {
  +        return new StatementMetaData(pQuery);
  +    }
  +
  +    protected StatementMetaData newStatementMetaData(UpdateStatement pQuery, ColumnReference[] pColumns) {
  +        return new StatementMetaData(pQuery, pColumns);
  +    }
  +
  +    protected StatementMetaData newStatementMetaData(InsertStatement pQuery, ColumnReference[] pColumns) {
  +        return new StatementMetaData(pQuery, pColumns);
  +    }
  +
       public String getWhereClause(SelectStatement pQuery) {
  -        StatementMetaData metaData = newSelectStatementMetaData(pQuery);
  +        StatementMetaData metaData = newStatementMetaData(pQuery);
           StringBuffer sb = new StringBuffer();
   
           StatementMetaData.LocalData localData = new StatementMetaData.LocalData();
  @@ -1057,7 +1069,7 @@
               CombinedConstraint cc = (CombinedConstraint) pConstraint;
               Statement st = cc.getConstrainedStatement();
               if (st instanceof SelectStatement) {
  -                StatementMetaData selectStatementMetaData = newSelectStatementMetaData((SelectStatement) st);
  +                StatementMetaData selectStatementMetaData = newStatementMetaData((SelectStatement) st);
                   return getCombinedConstraint(selectStatementMetaData, cc);
               } else {
                   return getCombinedConstraint(null, cc);
  @@ -1066,7 +1078,7 @@
               BooleanConstraint bc = (BooleanConstraint) pConstraint;
               Statement st = bc.getConstrainedStatement();
               if (st instanceof SelectStatement) {
  -                StatementMetaData selectStatementMetaData = newSelectStatementMetaData((SelectStatement) st);
  +                StatementMetaData selectStatementMetaData = newStatementMetaData((SelectStatement) st);
                   return getBooleanConstraint(selectStatementMetaData, bc);
               } else {
                   return getBooleanConstraint(null, bc);
  
  
  
  1.11      +17 -2     ws-jaxme/src/js/org/apache/ws/jaxme/sqls/oracle/OraSQLGeneratorImpl.java
  
  Index: OraSQLGeneratorImpl.java
  ===================================================================
  RCS file: /home/cvs/ws-jaxme/src/js/org/apache/ws/jaxme/sqls/oracle/OraSQLGeneratorImpl.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- OraSQLGeneratorImpl.java	25 Jun 2004 09:14:38 -0000	1.10
  +++ OraSQLGeneratorImpl.java	18 Aug 2004 10:05:26 -0000	1.11
  @@ -17,9 +17,12 @@
   package org.apache.ws.jaxme.sqls.oracle;
   
   import org.apache.ws.jaxme.sqls.ColumnReference;
  +import org.apache.ws.jaxme.sqls.DeleteStatement;
  +import org.apache.ws.jaxme.sqls.InsertStatement;
   import org.apache.ws.jaxme.sqls.JoinReference;
   import org.apache.ws.jaxme.sqls.SelectStatement;
   import org.apache.ws.jaxme.sqls.SelectTableReference;
  +import org.apache.ws.jaxme.sqls.UpdateStatement;
   import org.apache.ws.jaxme.sqls.impl.SQLGeneratorImpl;
   import org.apache.ws.jaxme.sqls.impl.StatementMetaData;
   
  @@ -41,8 +44,20 @@
           return isOracle8Compatibility;
       }
       
  -    protected StatementMetaData newSelectStatementMetaData(SelectStatement pQuery) {
  -        return new OraSelectStatementMetaData(pQuery);
  +    protected StatementMetaData newStatementMetaData(SelectStatement pQuery) {
  +        return new OraStatementMetaData(pQuery);
  +    }
  +
  +    protected StatementMetaData newStatementMetaData(DeleteStatement pQuery) {
  +        return new OraStatementMetaData(pQuery);
  +    }
  +
  +    protected StatementMetaData newStatementMetaData(UpdateStatement pQuery, ColumnReference[] pColumns) {
  +        return new OraStatementMetaData(pQuery, pColumns);
  +    }
  +
  +    protected StatementMetaData newStatementMetaData(InsertStatement pQuery, ColumnReference[] pColumns) {
  +        return new OraStatementMetaData(pQuery, pColumns);
       }
   
       protected String getSelectQueryFromClause(SelectStatement pQuery, StatementMetaData pData) {
  
  
  
  1.1                  ws-jaxme/src/js/org/apache/ws/jaxme/sqls/oracle/OraStatementMetaData.java
  
  Index: OraStatementMetaData.java
  ===================================================================
  /*
   * Copyright 2003, 2004  The Apache Software Foundation
   * 
   * Licensed 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.
  
   */
  package org.apache.ws.jaxme.sqls.oracle;
  
  import org.apache.ws.jaxme.sqls.ColumnReference;
  import org.apache.ws.jaxme.sqls.DeleteStatement;
  import org.apache.ws.jaxme.sqls.InsertStatement;
  import org.apache.ws.jaxme.sqls.SelectStatement;
  import org.apache.ws.jaxme.sqls.UpdateStatement;
  import org.apache.ws.jaxme.sqls.impl.StatementMetaData;
  
  
  /** <p>Oracle specific version of {@link StatementMetaData}.</p>
   */
  public class OraStatementMetaData extends StatementMetaData {
  	/** <p>Creates new meta data for the given
       * {@link org.apache.ws.jaxme.sqls.SelectStatement}.</p>
       */
      public OraStatementMetaData(SelectStatement pQuery) {
          super(pQuery);
      }
  
      /** <p>Creates new meta data for the given
       * {@link org.apache.ws.jaxme.sqls.DeleteStatement}.</p>
       */
      public OraStatementMetaData(DeleteStatement pQuery) {
          super(pQuery);
      }
  
      /** <p>Creates new meta data for the given
       * {@link org.apache.ws.jaxme.sqls.InsertStatement}.</p>
       */
      public OraStatementMetaData(InsertStatement pQuery, ColumnReference[] pColumns) {
          super(pQuery, pColumns);
      }
  
      /** <p>Creates new meta data for the given
       * {@link org.apache.ws.jaxme.sqls.UpdateStatement}.</p>
       */
      public OraStatementMetaData(UpdateStatement pQuery, ColumnReference[] pColumns) {
          super(pQuery, pColumns);
      }
  
      protected void addSelectStatement(SelectStatement pQuery) {
          super.addSelectStatement(pQuery);
          if (pQuery instanceof OraSelectStatement) {
              OraSelectStatement oQuery = (OraSelectStatement) pQuery;
              addCombinedConstraint(oQuery.getStartWith());
              addCombinedConstraint(oQuery.getConnectByPrior());
          }
      }
  }
  
  
  
  1.4       +119 -6    ws-jaxme/src/js/org/apache/ws/jaxme/sqls/junit/JoinTest.java
  
  Index: JoinTest.java
  ===================================================================
  RCS file: /home/cvs/ws-jaxme/src/js/org/apache/ws/jaxme/sqls/junit/JoinTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JoinTest.java	17 Jun 2004 09:57:01 -0000	1.3
  +++ JoinTest.java	18 Aug 2004 10:05:26 -0000	1.4
  @@ -19,6 +19,7 @@
   import org.apache.ws.jaxme.sqls.Column;
   import org.apache.ws.jaxme.sqls.ColumnReference;
   import org.apache.ws.jaxme.sqls.CombinedConstraint;
  +import org.apache.ws.jaxme.sqls.DeleteStatement;
   import org.apache.ws.jaxme.sqls.Function;
   import org.apache.ws.jaxme.sqls.JoinReference;
   import org.apache.ws.jaxme.sqls.Schema;
  @@ -30,6 +31,7 @@
   import org.apache.ws.jaxme.sqls.oracle.OraSQLFactory;
   import org.apache.ws.jaxme.sqls.oracle.OraSQLFactoryImpl;
   import org.apache.ws.jaxme.sqls.oracle.OraSQLGenerator;
  +import org.apache.ws.jaxme.sqls.oracle.OraSelectStatement;
   
   import junit.framework.TestCase;
   
  @@ -41,7 +43,10 @@
       private OraSQLGenerator sqlGenerator;
       private Schema schema;
       private Table dbAkte, dbBeteiligte, dbAktenzeichen;
  +    private Table kettenElement, vertreterKette;
   
  +    /** <p>Creates a new instance with the given name.</p>
  +     */
       public JoinTest(String pName) {
           super(pName);
       }
  @@ -63,7 +68,15 @@
           dbAktenzeichen.newColumn("aAktenId", Column.Type.BIGINT);
           dbAktenzeichen.newColumn("aFilter", Column.Type.VARCHAR);
           dbAktenzeichen.newColumn("aId", Column.Type.BIGINT);
  -   }
  +
  +        kettenElement = schema.newTable("KettenElement");
  +        kettenElement.newColumn("aId", Column.Type.BIGINT);
  +        kettenElement.newColumn("aVertreterId", Column.Type.BIGINT);
  +        kettenElement.newColumn("organisationsId", Column.Type.BIGINT);
  +
  +        vertreterKette = schema.newTable("VertreterKette");
  +        vertreterKette.newColumn("wurzelElement", Column.Type.BIGINT);
  +    }
   
       /** <p>Creates the WHERE clause
        * <pre>
  @@ -237,7 +250,7 @@
           return result;
       }
   
  -    public SelectStatement newStatement(boolean pUseView) {
  +    private SelectStatement newStatement(boolean pUseView) {
           SelectStatement st = sqlFactory.newSelectStatement();
           st.setTable(dbAkte);
           SelectTableReference akte = st.getSelectTableReference();
  @@ -273,6 +286,8 @@
           return st;
       }
   
  +    /** <p>Creates a complex SELECT statement and runs the generator on it.</p>
  +     */
       public void testCreate1() {
           SelectStatement st = newStatement(false);
           String got = sqlGenerator.getQuery(st);
  @@ -290,15 +305,14 @@
               + " MIN(UPPER(bemin.aName)) AS MIN FROM DBBeteiligte bemin WHERE"
               + " (be.aAktenId(+)=bemin.aAktenId AND bemin.aFilter='Beklagter'))) AND"
               + " (ber.aAktenId(+)=a.aId AND ber.aFilter(+)='Beklagter')";
  -        System.out.println(expect);
  -        System.out.println(got);
           assertEquals(expect, got);
       }
   
  +    /** <p>Creates another complex SELECT statement and runs the generator on it.</p>
  +     */
       public void testCreate2() {
           SelectStatement st = newStatement(true);
           String got = sqlGenerator.getQuery(st);
  -        System.out.println(got);
           String expect = "SELECT * FROM DBAkte a, DBAktenzeichen az,"
               + " (SELECT DBBeteiligte.NUM, DBBeteiligte.aName, DBBeteiligte.aVorname,"
               + " DBBeteiligte.aAktenId FROM (SELECT COUNT(*) OVER (PARTITION BY aAktenId) AS NUM,"
  @@ -321,5 +335,104 @@
               + " (ber.aAktenId(+)=a.aId AND ber.aFilter(+)='Beklagter')";
           assertEquals(expect, got);
       }
  -}
   
  +    private void addEQ(TableReference pRef1, TableReference pRef2,
  +                       CombinedConstraint pConstraint,
  +                       Column pCol1, Column pCol2) {
  +        BooleanConstraint bc = pConstraint.createEQ();
  +        bc.addPart(pRef1.newColumnReference(pCol1));
  +        bc.addPart(pRef2.newColumnReference(pCol2));
  +    }
  +
  +    private void addEQ(TableReference pRef1, CombinedConstraint pConstraint,
  +                       Column pCol1) {
  +    	BooleanConstraint bc = pConstraint.createEQ();
  +    	bc.addPart(pRef1.newColumnReference(pCol1));
  +    	bc.addPlaceholder();
  +    }
  +
  +    /**
  +     * Returns the Statment
  +     * <pre> 
  +     *   SELECT KE.AID FROM KETTENELEMENT KE JOIN VERTRETREKETTE VK
  +     *     ON KE.AID = VK.WURZELELEMENT
  +     *     WHERE KE.ORGANISATIONSID = ? 
  +     * </pre>
  +     */
  +    private SelectStatement getSelectAidByOrganisationsId() {
  +        SelectStatement stmt = sqlFactory.newSelectStatement();
  +        stmt.setTable(kettenElement);
  +        SelectTableReference kettenElementRef = stmt.getSelectTableReference();
  +        JoinReference vertreterKetteRef = kettenElementRef.join(vertreterKette);
  +        addEQ(kettenElementRef, vertreterKetteRef, vertreterKetteRef.getOn(),
  +              kettenElement.getColumn("aId"),
  +              vertreterKette.getColumn("wurzelElement"));
  +        addEQ(kettenElementRef, stmt.getWhere(), kettenElement.getColumn("organisationsId"));
  +        stmt.addResultColumn(kettenElementRef.newColumnReference(kettenElement.getColumn("aId")));
  +        return stmt;
  +    }
  +
  +    /**
  +     *  <p>Creates the statement
  +     * <pre>
  +     *    SELECT AID FROM KETTENELEMENT 
  +     *    START WITH KE.AID IN
  +     *    ( SELECT KE.AID FROM KETTENELEMENT KE JOIN VERTRETREKETTE VK
  +     *      ON KE.AID = VK.WURZELELEMENT
  +     *      WHERE KE.ORGANISATIONSID = ?
  +     *    )
  +     *    CONNECT BY PRIOR KE.AID=KE.AVERTRETERID 
  +     * </pre></p>
  +     */
  +    private SelectStatement getSelectAllChildsByOrganisationsId() {
  +        OraSelectStatement stmt = (OraSelectStatement) sqlFactory.newSelectStatement();
  +        stmt.setTable(kettenElement);
  +        TableReference tRef  = stmt.getTableReference();
  +
  +        BooleanConstraint in = stmt.getStartWith().createIN();
  +        in.addPart(tRef.newColumnReference(kettenElement.getColumn("aId")));
  +        in.addPart(getSelectAidByOrganisationsId());
  +        
  +        addEQ(tRef, tRef, stmt.getConnectByPrior(),
  +              kettenElement.getColumn("aId"),
  +              kettenElement.getColumn("aVertreterId"));
  +        return stmt;
  +    }
  +
  +    /** <p>Creates the statement
  +     * <pre>
  +     *    DELETE FROM KETTENELEMENT KE WHERE AID IN
  +     *   ( SELECT AID FROM KETTENELEMENT 
  +     *     START WITH KE.AID IN
  +     *     ( SELECT KE.AID FROM KETTENELEMENT KE JOIN VERTRETREKETTE VK
  +     *        ON KE.AID = VK.WURZELELEMENT
  +     *        WHERE KE.ORGANISATIONSID = ?
  +     *     )
  +     *     CONNECT BY PRIOR KE.AID=KE.AVERTRETERID
  +     *   )
  +     * </pre></p>
  +     */
  +    private DeleteStatement getDeleteAllChildsByOrganisationsId() {
  +        DeleteStatement dstmt = sqlFactory.newDeleteStatement();
  +        dstmt.setTable(kettenElement);
  +        TableReference tRef  = dstmt.getTableReference();
  +        CombinedConstraint whereClause = dstmt.getWhere();
  +        BooleanConstraint bc = whereClause.createIN();
  +        bc.addPart(tRef.newColumnReference(kettenElement.getColumn("aId")));
  +        bc.addPart(getSelectAllChildsByOrganisationsId());
  +        return dstmt;
  +    }
  +
  +    /** <p>Creates the query
  +     * <pre>
  +     * </pre>
  +     * and verifies the generator results.</p>
  +     */
  +    public void testDelete1() {
  +    	DeleteStatement ds = getDeleteAllChildsByOrganisationsId();
  +        String expect = "DELETE FROM KettenElement WHERE KettenElement.aId IN" +
  +                        " ((SELECT * FROM KettenElement KettenElement0 START WITH KettenElement0.aId IN ((SELECT KettenElement1.aId FROM KettenElement KettenElement1, VertreterKette WHERE KettenElement1.aId=wurzelElement AND KettenElement1.organisationsId=?)) CONNECT BY PRIOR KettenElement0.aId=KettenElement0.aVertreterId))";
  +        String got = sqlGenerator.getQuery(ds);
  +        assertEquals(expect, got);
  +    }
  +}
  
  
  

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