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