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/06/28 09:19:05 UTC
cvs commit: ws-jaxme/src/js/org/apache/ws/jaxme/sqls/junit CreateTest.java
jochen 2004/06/28 00:19:05
Modified: src/js/org/apache/ws/jaxme/sqls/impl StatementMetaData.java
SQLGeneratorImpl.java
src/js/org/apache/ws/jaxme/sqls/junit CreateTest.java
Log:
More work on bulk inserts.
Revision Changes Path
1.3 +21 -0 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- StatementMetaData.java 25 Jun 2004 10:28:27 -0000 1.2
+++ StatementMetaData.java 28 Jun 2004 07:19:05 -0000 1.3
@@ -26,6 +26,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.InsertStatement;
import org.apache.ws.jaxme.sqls.JoinReference;
@@ -35,6 +36,7 @@
import org.apache.ws.jaxme.sqls.SetStatement;
import org.apache.ws.jaxme.sqls.Table;
import org.apache.ws.jaxme.sqls.TableReference;
+import org.apache.ws.jaxme.sqls.UpdateStatement;
import org.apache.ws.jaxme.sqls.Value;
@@ -56,6 +58,20 @@
private final List tables = new ArrayList();
+ public StatementMetaData(DeleteStatement pQuery) {
+ addTable(pQuery.getTableReference());
+ addCombinedConstraint(pQuery.getWhere());
+ createTableAliases();
+ createColumnNames();
+ }
+
+ public StatementMetaData(UpdateStatement pQuery, ColumnReference[] pColumns) {
+ addSetStatement(pQuery, pColumns);
+ addCombinedConstraint(pQuery.getWhere());
+ createTableAliases();
+ createColumnNames();
+ }
+
public StatementMetaData(InsertStatement pQuery, ColumnReference[] pColumns) {
addSetStatement(pQuery, pColumns);
SelectStatement subSelect = pQuery.getSubSelect();
@@ -165,6 +181,11 @@
|| pPart instanceof Value
|| pPart instanceof RawSQLCode) {
// Ignore me
+ } else if (pPart.getClass().isArray()) {
+ Object[] o = (Object[]) pPart;
+ for (int i = 0; i < o.length; i++) {
+ addPart(o[i]);
+ }
} else {
throw new IllegalStateException("Invalid part type: " + pPart);
}
1.21 +21 -9 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.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- SQLGeneratorImpl.java 25 Jun 2004 09:14:38 -0000 1.20
+++ SQLGeneratorImpl.java 28 Jun 2004 07:19:05 -0000 1.21
@@ -355,15 +355,22 @@
return result;
}
- private ColumnReference[] getInsertStatementsColumns(InsertStatement pStatement) {
+ private ColumnReference[] getSetStatementsColumns(SetStatement pStatement) {
List result = new ArrayList();
for (Iterator iter = pStatement.getSetValues(); iter.hasNext(); ) {
SetStatement.SetValue setValue = (SetStatement.SetValue) iter.next();
result.add(setValue.getColumnReference());
}
+ return (ColumnReference[]) result.toArray(new ColumnReference[result.size()]);
+ }
+
+ private ColumnReference[] getInsertStatementsColumns(InsertStatement pStatement) {
SelectStatement subSelect = pStatement.getSubSelect();
- if (subSelect != null) {
- for (Iterator iter = subSelect.getResultColumns(); iter.hasNext(); ) {
+ if (subSelect == null) {
+ return getSetStatementsColumns(pStatement);
+ } else {
+ List result = new ArrayList();
+ for (Iterator iter = subSelect.getResultColumns(); iter.hasNext(); ) {
ColumnReference cRef = (ColumnReference) iter.next();
Column.Name name;
if (cRef.getAlias() == null) {
@@ -378,8 +385,8 @@
}
result.add(pStatement.getTableReference().newColumnReference(col));
}
+ return (ColumnReference[]) result.toArray(new ColumnReference[result.size()]);
}
- return (ColumnReference[]) result.toArray(new ColumnReference[result.size()]);
}
private void addSetValuesToInsertStatement(StringBuffer pBuffer,
@@ -471,9 +478,12 @@
}
protected String getUpdateQuery(UpdateStatement pQuery) {
+ ColumnReference[] columns = getSetStatementsColumns(pQuery);
+ StatementMetaData smd = new StatementMetaData(pQuery, columns);
+
StringBuffer sb = new StringBuffer();
sb.append("UPDATE ");
- sb.append(getTableAlias(null, pQuery.getTableReference()));
+ sb.append(getTableAlias(smd, pQuery.getTableReference()));
sb.append(" SET ");
boolean first = true;
for (Iterator iter = pQuery.getSetValues(); iter.hasNext(); ) {
@@ -483,11 +493,11 @@
} else {
sb.append(", ");
}
- sb.append(getColumnAlias(null, setValue.getColumnReference()));
+ sb.append(getColumnAlias(smd, setValue.getColumnReference()));
sb.append("=");
sb.append(getValue(setValue.getValue()));
}
- String s = getWhereClause(null, pQuery.getWhere());
+ String s = getWhereClause(smd, pQuery.getWhere());
if (s != null) {
sb.append(" WHERE ").append(s);
}
@@ -495,9 +505,11 @@
}
protected String getDeleteQuery(DeleteStatement pQuery) {
+ StatementMetaData smd = new StatementMetaData(pQuery);
+
StringBuffer result = new StringBuffer("DELETE FROM ");
- result.append(getTableAlias(null, pQuery.getTableReference()));
- String s = getWhereClause(null, pQuery.getWhere());
+ result.append(getTableAlias(smd, pQuery.getTableReference()));
+ String s = getWhereClause(smd, pQuery.getWhere());
if (s != null) {
result.append(" WHERE ");
result.append(s);
1.10 +1 -1 ws-jaxme/src/js/org/apache/ws/jaxme/sqls/junit/CreateTest.java
Index: CreateTest.java
===================================================================
RCS file: /home/cvs/ws-jaxme/src/js/org/apache/ws/jaxme/sqls/junit/CreateTest.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- CreateTest.java 25 Jun 2004 10:28:27 -0000 1.9
+++ CreateTest.java 28 Jun 2004 07:19:05 -0000 1.10
@@ -378,7 +378,7 @@
BooleanConstraint bc = deleteStatement.getWhere().createIN();
bc.addPart((ColumnReference[]) columns.toArray(new ColumnReference[columns.size()]));
bc.addPart(selectStatement);
- String expect = "DELETE FROM MySchema.MyTable WHERE (MyIndex, VerNum) IN ((SELECT RefMyIndex, RefVerNum FROM MySchema.OtherTable WHERE RefMyName=?))";
+ String expect = "DELETE FROM MySchema.MyTable WHERE (MyTable.MyIndex, VerNum) IN ((SELECT RefMyIndex, RefVerNum FROM MySchema.OtherTable WHERE RefMyName=?))";
String got = gen.getQuery(deleteStatement);
assertEquals(expect, got);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jaxme-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: jaxme-dev-help@ws.apache.org