[prev in list] [next in list] [prev in thread] [next in thread]
List: jaxme-dev
Subject: cvs commit: ws-jaxme/src/js/org/apache/ws/jaxme/sqls InsertStatement.java
From: jochen () apache ! org
Date: 2004-06-25 9:14:38
Message-ID: 20040625091438.89718.qmail () minotaur ! apache ! org
[Download RAW message or body]
jochen 2004/06/25 02:14:38
Modified: src/js/org/apache/ws/jaxme/sqls/impl
InsertStatementImpl.java SQLGeneratorImpl.java
src/js/org/apache/ws/jaxme/sqls/junit CreateTest.java
src/js/org/apache/ws/jaxme/sqls/oracle
OraSQLGeneratorImpl.java
OraSelectStatementMetaData.java
src/js/org/apache/ws/jaxme/sqls InsertStatement.java
Added: src/js/org/apache/ws/jaxme/sqls/impl StatementMetaData.java
Removed: src/js/org/apache/ws/jaxme/sqls/impl
SelectStatementMetaData.java
Log:
Added support for bulk inserts.
Revision Changes Path
1.3 +13 -2 \
ws-jaxme/src/js/org/apache/ws/jaxme/sqls/impl/InsertStatementImpl.java
Index: InsertStatementImpl.java
===================================================================
RCS file: /home/cvs/ws-jaxme/src/js/org/apache/ws/jaxme/sqls/impl/InsertStatementImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- InsertStatementImpl.java 16 Feb 2004 23:39:49 -0000 1.2
+++ InsertStatementImpl.java 25 Jun 2004 09:14:38 -0000 1.3
@@ -18,15 +18,26 @@
import org.apache.ws.jaxme.sqls.InsertStatement;
import org.apache.ws.jaxme.sqls.SQLFactory;
+import org.apache.ws.jaxme.sqls.SelectStatement;
/**
* @author <a href="mailto:joe@ispsoft.de">Jochen Wiedmann</a>
*/
public class InsertStatementImpl extends SetStatementImpl implements \
InsertStatement {
- /** <p>Creates a new instance of InsertStatementImpl.</p>
- */
+ private SelectStatement st;
+
+ /** <p>Creates a new instance of InsertStatementImpl.</p>
+ */
InsertStatementImpl(SQLFactory pFactory) {
super(pFactory);
+ }
+
+ public void setSubSelect(SelectStatement pStatement) {
+ st = pStatement;
+ }
+
+ public SelectStatement getSubSelect() {
+ return st;
}
}
1.20 +101 -48 \
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.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- SQLGeneratorImpl.java 17 Jun 2004 09:57:01 -0000 1.19
+++ SQLGeneratorImpl.java 25 Jun 2004 09:14:38 -0000 1.20
@@ -354,37 +354,90 @@
result.add(newStatement("DROP TABLE " + pTable.getQName()));
return result;
}
-
+
+ private ColumnReference[] getInsertStatementsColumns(InsertStatement \
pStatement) { + List result = new ArrayList();
+ for (Iterator iter = pStatement.getSetValues(); iter.hasNext(); ) {
+ SetStatement.SetValue setValue = (SetStatement.SetValue) iter.next();
+ result.add(setValue.getColumnReference());
+ }
+ SelectStatement subSelect = pStatement.getSubSelect();
+ if (subSelect != null) {
+ for (Iterator iter = subSelect.getResultColumns(); iter.hasNext(); ) {
+ ColumnReference cRef = (ColumnReference) iter.next();
+ Column.Name name;
+ if (cRef.getAlias() == null) {
+ name = cRef.getColumn().getName();
+ } else {
+ name = cRef.getAlias();
+ }
+ Column col = pStatement.getTableReference().getTable().getColumn(name);
+ if (col == null) {
+ throw new IllegalStateException("A result column " + name
+ + " is used in the subselect, which is not present in the insert \
statements table."); + }
+ result.add(pStatement.getTableReference().newColumnReference(col));
+ }
+ }
+ return (ColumnReference[]) result.toArray(new \
ColumnReference[result.size()]); + }
+
+ private void addSetValuesToInsertStatement(StringBuffer pBuffer,
+ StatementMetaData pData,
+ InsertStatement pQuery) {
+ pBuffer.append(" VALUES (");
+ boolean first = true;
+ for (Iterator iter = pQuery.getSetValues(); iter.hasNext(); ) {
+ if (first) {
+ first = false;
+ } else {
+ pBuffer.append(", ");
+ }
+ SetStatement.SetValue setValue = (SetStatement.SetValue) iter.next();
+ pBuffer.append(getValue(setValue.getValue()));
+ }
+ pBuffer.append(")");
+ }
+
+ private void addSubSelectToInsertStatement(StringBuffer pBuffer, \
StatementMetaData pData, + \
InsertStatement pStatement) { + pBuffer.append(" (");
+ pBuffer.append(getSelectQuery(pStatement.getSubSelect(), pData));
+ pBuffer.append(")");
+ }
+
public String getInsertQuery(InsertStatement pQuery) {
+ ColumnReference[] columns = getInsertStatementsColumns(pQuery);
+ StatementMetaData smd = new StatementMetaData(pQuery, columns);
+
StringBuffer result = new StringBuffer();
result.append("INSERT INTO ");
- result.append(getTableAlias(null, pQuery.getTableReference()));
- boolean first = true;
- for (Iterator iter = pQuery.getSetValues(); iter.hasNext(); ) {
- if (first) {
- result.append(" (");
- first = false;
- } else {
- result.append(", ");
+ result.append(getTableAlias(smd, pQuery.getTableReference()));
+ if (columns.length > 0) {
+ result.append(" (");
+ for (int i = 0; i < columns.length; i++) {
+ if (i > 0) {
+ result.append(", ");
+ }
+ result.append(getColumnAlias(smd, columns[i]));
}
- SetStatement.SetValue setValue = (SetStatement.SetValue) iter.next();
- result.append(getColumnAlias(null, setValue.getColumnReference()));
- }
- if (!first) {
result.append(")");
}
- result.append(" VALUES (");
- first = true;
- for (Iterator iter = pQuery.getSetValues(); iter.hasNext(); ) {
- if (first) {
- first = false;
+ boolean hasSetValues = pQuery.getSetValues().hasNext();
+ boolean hasSubselect = pQuery.getSubSelect() != null;
+ if (hasSetValues) {
+ if (hasSubselect) {
+ throw new IllegalStateException("Using values \
(InsertStatement.addFoo(..)) and subselects (InsertStatement.setSubSelect(...)) is \
mutually exclusive."); } else {
- result.append(", ");
+ addSetValuesToInsertStatement(result, smd, pQuery);
+ }
+ } else {
+ if (hasSubselect) {
+ addSubSelectToInsertStatement(result, smd, pQuery);
+ } else {
+ throw new IllegalStateException("Neither values \
(InsertStatement.addFoo(..)) nor a subselect (InsertStatement.setSubSelect(...)) are \
set."); }
- SetStatement.SetValue setValue = (SetStatement.SetValue) iter.next();
- result.append(getValue(setValue.getValue()));
}
- result.append(")");
return newStatement(result.toString());
}
@@ -452,7 +505,7 @@
return result.toString();
}
- protected boolean isQualifiedColumn(SelectStatementMetaData pData, \
ColumnReference pColumn) { + protected boolean \
isQualifiedColumn(StatementMetaData pData, ColumnReference pColumn) { if (pData == \
null) { return false;
}
@@ -464,11 +517,11 @@
return num.intValue() > 1;
}
- protected String getFunction(SelectStatementMetaData pData, Function f) {
+ protected String getFunction(StatementMetaData pData, Function f) {
return f.getName() + '(' + getParts(pData, f.getParts()) + ')';
}
- protected String getColumnAlias(SelectStatementMetaData pData, ColumnReference \
pColumn) { + protected String getColumnAlias(StatementMetaData pData, \
ColumnReference pColumn) { Column col = pColumn.getColumn();
String s = col.getName().toString();
if (col.isVirtual()) {
@@ -500,7 +553,7 @@
return s;
}
- protected String getColumnAlias(SelectStatementMetaData pData, \
ColumnReference[] pColumn) { + protected String getColumnAlias(StatementMetaData \
pData, ColumnReference[] pColumn) { StringBuffer sb = new StringBuffer("(");
for (int i = 0; i < pColumn.length; i++) {
if (i > 0) sb.append(", ");
@@ -512,7 +565,7 @@
protected boolean isTableAliasUsingAs() { return true; }
- protected String getTableAlias(SelectStatementMetaData pData, TableReference \
pTable) { + protected String getTableAlias(StatementMetaData pData, \
TableReference pTable) { Table t = pTable.getTable();
String tableName;
Table.Name alias = pTable.getAlias();
@@ -533,7 +586,7 @@
}
}
- protected String getJoinAlias(SelectStatementMetaData pData, JoinReference \
pJoinReference) { + protected String getJoinAlias(StatementMetaData pData, \
JoinReference pJoinReference) { StringBuffer result = new StringBuffer();
if (pJoinReference.isLeftOuterJoin()) {
result.append(" LEFT OUTER JOIN ");
@@ -561,7 +614,7 @@
return "'" + s + "'";
}
- protected String getParts(SelectStatementMetaData pData, Iterator pParts) {
+ protected String getParts(StatementMetaData pData, Iterator pParts) {
StringBuffer sb = new StringBuffer();
while (pParts.hasNext()) {
if (sb.length() > 0) {
@@ -572,7 +625,7 @@
return sb.toString();
}
- protected String getBooleanConstraintPart(SelectStatementMetaData pData, \
Object o) { + protected String getBooleanConstraintPart(StatementMetaData pData, \
Object o) { if (o instanceof Value) {
return getValue((Value) o);
} else if (o instanceof ColumnReference) {
@@ -610,7 +663,7 @@
}
}
- protected String getBooleanConstraint(SelectStatementMetaData pData,
+ protected String getBooleanConstraint(StatementMetaData pData,
BooleanConstraint pConstraint) {
BooleanConstraint.Type type = pConstraint.getType();
Iterator parts = pConstraint.getParts();
@@ -660,7 +713,7 @@
return result.toString();
}
- protected String getCombinedConstraint(SelectStatementMetaData pData,
+ protected String getCombinedConstraint(StatementMetaData pData,
CombinedConstraint pConstraint) {
if (pConstraint.getNumParts() == 0) {
return null;
@@ -716,7 +769,7 @@
}
}
- public String getConstraint(SelectStatementMetaData pData, Constraint \
pConstraint) { + public String getConstraint(StatementMetaData pData, Constraint \
pConstraint) { if (pConstraint instanceof CombinedConstraint) {
return getWhereClause(pData, (CombinedConstraint) pConstraint);
} else if (pConstraint instanceof BooleanConstraint) {
@@ -727,18 +780,18 @@
}
}
- protected String getWhereClause(SelectStatementMetaData pData,
+ protected String getWhereClause(StatementMetaData pData,
CombinedConstraint pWhereClause) {
return getCombinedConstraint(pData, pWhereClause);
}
protected String getSelectQuery(SelectStatement pQuery) {
- SelectStatementMetaData selectStatementMetaData = \
newSelectStatementMetaData(pQuery); + StatementMetaData \
selectStatementMetaData = newSelectStatementMetaData(pQuery); return \
getSelectQuery(pQuery, selectStatementMetaData); }
- protected String getSelectQueryResultColumns(SelectStatement pQuery, \
SelectStatementMetaData pData) { + protected String \
getSelectQueryResultColumns(SelectStatement pQuery, StatementMetaData pData) { \
StringBuffer sb = new StringBuffer(); if (pQuery.isDistinct()) {
sb.append(" DISTINCT");
@@ -762,7 +815,7 @@
return sb.toString();
}
- protected String getSelectQueryFromClause(SelectStatement pQuery, \
SelectStatementMetaData pData) { + protected String \
getSelectQueryFromClause(SelectStatement pQuery, StatementMetaData \
pData) {
SelectTableReference selectTableReference = \
pQuery.getSelectTableReference(); if (selectTableReference == null) {
return null;
@@ -778,8 +831,8 @@
return sb.toString();
}
- protected String getSelectQueryConstraints(SelectStatement pQuery, \
SelectStatementMetaData pData,
- SelectStatementMetaData.LocalData \
pLocalData) { + protected String getSelectQueryConstraints(SelectStatement \
pQuery, StatementMetaData pData, + \
StatementMetaData.LocalData pLocalData) { String s = getWhereClause(pData, \
pQuery.getWhere()); if (pLocalData != null && s != null && s.length() > 0) {
pLocalData.setWhereClause(true);
@@ -787,7 +840,7 @@
return s;
}
- protected String getSelectQuery(SelectStatement pQuery, \
SelectStatementMetaData pData) { + protected String \
getSelectQuery(SelectStatement pQuery, StatementMetaData pData) { StringBuffer sb = \
new StringBuffer("SELECT"); String s = getSelectQueryResultColumns(pQuery, pData);
if (s != null) {
@@ -799,7 +852,7 @@
sb.append(s);
}
- SelectStatementMetaData.LocalData localData = new \
SelectStatementMetaData.LocalData(); + StatementMetaData.LocalData localData \
= new StatementMetaData.LocalData(); s = getSelectQueryConstraints(pQuery, pData, \
localData); if (s != null && s.length() > 0) {
if (localData.hasWhereClause()) {
@@ -815,7 +868,7 @@
return sb.toString();
}
- protected String getSelectQueryOrderClause(SelectStatementMetaData pData, \
SelectStatement pQuery) { + protected String \
getSelectQueryOrderClause(StatementMetaData pData, SelectStatement pQuery) { \
StringBuffer sb = new StringBuffer();
for (Iterator iter = pQuery.getOrderColumns(); iter.hasNext(); ) {
SelectStatement.OrderColumn col = (SelectStatement.OrderColumn) \
iter.next(); @@ -965,15 +1018,15 @@
return Collections.EMPTY_SET;
}
- protected SelectStatementMetaData newSelectStatementMetaData(SelectStatement \
pQuery) {
- return new SelectStatementMetaData(pQuery);
+ protected StatementMetaData newSelectStatementMetaData(SelectStatement pQuery) \
{ + return new StatementMetaData(pQuery);
}
public String getWhereClause(SelectStatement pQuery) {
- SelectStatementMetaData metaData = newSelectStatementMetaData(pQuery);
+ StatementMetaData metaData = newSelectStatementMetaData(pQuery);
StringBuffer sb = new StringBuffer();
- SelectStatementMetaData.LocalData localData = new \
SelectStatementMetaData.LocalData(); + StatementMetaData.LocalData localData \
= new StatementMetaData.LocalData();
String s = getSelectQueryConstraints(pQuery, metaData, localData);
if (s != null) {
sb.append(s);
@@ -992,7 +1045,7 @@
CombinedConstraint cc = (CombinedConstraint) pConstraint;
Statement st = cc.getConstrainedStatement();
if (st instanceof SelectStatement) {
- SelectStatementMetaData selectStatementMetaData = \
newSelectStatementMetaData((SelectStatement) st); + StatementMetaData \
selectStatementMetaData = \
newSelectStatementMetaData((SelectStatement) st);
return getCombinedConstraint(selectStatementMetaData, cc);
} else {
return getCombinedConstraint(null, cc);
@@ -1001,7 +1054,7 @@
BooleanConstraint bc = (BooleanConstraint) pConstraint;
Statement st = bc.getConstrainedStatement();
if (st instanceof SelectStatement) {
- SelectStatementMetaData selectStatementMetaData = \
newSelectStatementMetaData((SelectStatement) st); + StatementMetaData \
selectStatementMetaData = \
newSelectStatementMetaData((SelectStatement) st);
return getBooleanConstraint(selectStatementMetaData, bc);
} else {
return getBooleanConstraint(null, bc);
1.1 \
ws-jaxme/src/js/org/apache/ws/jaxme/sqls/impl/StatementMetaData.java
Index: StatementMetaData.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.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.ws.jaxme.sqls.BooleanConstraint;
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.Function;
import org.apache.ws.jaxme.sqls.InsertStatement;
import org.apache.ws.jaxme.sqls.JoinReference;
import org.apache.ws.jaxme.sqls.Parts;
import org.apache.ws.jaxme.sqls.RawSQLCode;
import org.apache.ws.jaxme.sqls.SelectStatement;
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.Value;
public class StatementMetaData {
public static class LocalData {
private boolean hasWhereClause;
public boolean hasWhereClause() {
return hasWhereClause;
}
public void setWhereClause(boolean pHasWhereClause) {
hasWhereClause = pHasWhereClause;
}
}
private final Map aliases = new HashMap();
private final Map columnNames = new HashMap();
private final List tables = new ArrayList();
public StatementMetaData(InsertStatement pQuery, ColumnReference[] pColumns) {
addSetStatement(pQuery, pColumns);
SelectStatement subSelect = pQuery.getSubSelect();
if (subSelect != null) {
addSelectStatement(subSelect);
}
}
public StatementMetaData(SelectStatement pQuery) {
addSelectStatement(pQuery);
createTableAliases();
createColumnNames();
}
protected void addSetStatement(SetStatement pQuery, ColumnReference[] pColumns) \
{ addTable(pQuery.getTableReference());
for (int i = 0; i < pColumns.length; i++) {
addColumn(pColumns[i], false);
}
for (Iterator iter = pQuery.getSetValues(); iter.hasNext(); ) {
addPart(((SetStatement.SetValue) iter.next()).getValue());
}
}
protected void addTable(TableReference pTableReference) {
Table t = pTableReference.getTable();
Table.Name alias = pTableReference.getAlias();
if (alias != null) {
if (aliases.containsKey(alias.getName())) {
throw new IllegalStateException("The alias " + alias +
" is used twice ");
}
aliases.put(alias.getName(), pTableReference);
}
tables.add(pTableReference);
if (t instanceof ViewImpl) {
ViewImpl v = (ViewImpl) t;
addSelectStatement(v.getViewStatement());
}
if (pTableReference instanceof JoinReference) {
addCombinedConstraint(((JoinReference) pTableReference).getOn());
}
}
protected void addSelectStatement(SelectStatement pQuery) {
for (Iterator tableIter = pQuery.getSelectTableReferences(); \
tableIter.hasNext(); ) { addTable((TableReference) tableIter.next());
}
addCombinedConstraint(pQuery.getWhere());
for (Iterator iter = pQuery.getResultColumns(); iter.hasNext(); ) {
addColumn((ColumnReference) iter.next(), true);
}
}
protected void addColumn(ColumnReference pColumn, boolean pIgnoreTrueRefs) {
if (pColumn instanceof VirtualColumn) {
VirtualColumn vc = (VirtualColumn) pColumn;
Object o = vc.getValue();
if (o instanceof SelectStatement) {
addSelectStatement((SelectStatement) o);
} else if (o instanceof Function) {
addParts((Function) o);
} else if (o instanceof String) {
// Do nothing
} else {
throw new IllegalStateException("Invalid type of VirtualColumn: " + \
o); }
addColumnName(vc.getName());
} else if (!pIgnoreTrueRefs) {
Column.Name alias = pColumn.getAlias();
if (alias == null) {
alias = pColumn.getColumn().getName();
}
addColumnName(alias);
}
}
private void addColumnName(Column.Name pName) {
String key = pName.toString().toUpperCase();
Integer num = (Integer) columnNames.get(key);
if (num == null) {
num = new Integer(1);
} else {
num = new Integer(num.intValue() + 1);
}
columnNames.put(key, num);
}
protected void addCombinedConstraint(CombinedConstraint pConstraint) {
for (Iterator iter = pConstraint.getParts(); iter.hasNext(); ) {
Object o = iter.next();
if (o instanceof CombinedConstraint) {
addCombinedConstraint((CombinedConstraint) o);
} else if (o instanceof BooleanConstraint) {
addBooleanConstraint((BooleanConstraint) o);
} else {
throw new IllegalStateException("Invalid part type in CombinedConstraint: \
" + o); }
}
}
protected void addPart(Object pPart) {
if (pPart instanceof SelectStatement) {
addSelectStatement((SelectStatement) pPart);
} else if (pPart instanceof CombinedConstraint) {
addCombinedConstraint((CombinedConstraint) pPart);
} else if (pPart instanceof Function) {
addParts((Function) pPart);
} else if (pPart instanceof ColumnReference
|| pPart instanceof Value
|| pPart instanceof RawSQLCode) {
// Ignore me
} else {
throw new IllegalStateException("Invalid part type: " + pPart);
}
}
protected void addParts(Parts pParts) {
for (Iterator iter = pParts.getParts(); iter.hasNext(); ) {
addPart(iter.next());
}
}
protected void addBooleanConstraint(BooleanConstraint pConstraint) {
BooleanConstraint.Type type = pConstraint.getType();
if (BooleanConstraint.Type.EQ.equals(type)
|| BooleanConstraint.Type.EXISTS.equals(type)
|| BooleanConstraint.Type.GE.equals(type)
|| BooleanConstraint.Type.GT.equals(type)
|| BooleanConstraint.Type.IN.equals(type)
|| BooleanConstraint.Type.ISNULL.equals(type)
|| BooleanConstraint.Type.LE.equals(type)
|| BooleanConstraint.Type.LIKE.equals(type)
|| BooleanConstraint.Type.LT.equals(type)
|| BooleanConstraint.Type.NE.equals(type)) {
addParts(pConstraint);
} else {
throw new IllegalStateException("Invalid part type in BooleanConstraint: " \
+ type); }
}
protected String getUniqueAlias(String pSuggestion, Map pAliases) {
String prefix;
if (pSuggestion == null) {
prefix = "";
} else {
prefix = pSuggestion;
}
if (!pAliases.containsKey(prefix)) {
return prefix;
}
for (char c = '0'; c <= '9'; c++) {
String s = prefix + c;
if (!pAliases.containsKey(s)) {
return s;
}
}
for (char c = 'A'; c <= 'Z'; c++) {
String s = prefix + c;
if (!pAliases.containsKey(s)) {
return s;
}
}
return getUniqueAlias(prefix + '0', pAliases);
}
protected void createTableAliases() {
if (tables.size() > 1) {
// Make sure that all tables have an alias
for (Iterator iter = tables.iterator(); iter.hasNext(); ) {
TableReference tableReference = (TableReference) iter.next();
if (tableReference.getAlias() == null) {
String alias = \
getUniqueAlias(tableReference.getTable().getName().getName(), aliases); \
aliases.put(alias, tableReference);
if \
(!alias.equals(tableReference.getTable().getName().getName())) { \
tableReference.setAlias(alias); }
}
}
}
}
protected void createColumnNames() {
// Create a Map of all column names, that may be referenced.
// maps key is the column name, and the maps value is the
// number of possible references. In other words: If an entry
// in the map has a value > 1, then its column name must be
// qualified, because it is used in multiple tables.
for (int i = 0; i < tables.size(); i++) {
TableReference table = (TableReference) tables.get(i);
for (Iterator iter = table.getTable().getColumns(); iter.hasNext(); ) {
Column col = (Column) iter.next();
addColumnName(col.getName());
}
}
}
public Map getColumnNames() {
return columnNames;
}
}
1.8 +14 -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.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- CreateTest.java 11 Mar 2004 11:03:13 -0000 1.7
+++ CreateTest.java 25 Jun 2004 09:14:38 -0000 1.8
@@ -145,7 +145,20 @@
String s = generator.getQuery(insertStatement);
assertEquals("INSERT INTO MySchema.MyTable (MyIndex, MyName, MyDate) \
VALUES (?, ?, ?)", s); }
-
+
+ public void testBulkInsert() {
+ Table table = getBasicTable();
+ InsertStatement insertStatement = getSQLFactory().newInsertStatement();
+ insertStatement.setTable(table);
+ SelectStatement st = table.getSelectStatement();
+ SQLGenerator generator = getSQLGenerator();
+ generator.setLineTerminator("\n");
+ insertStatement.setSubSelect(st);
+ String got = generator.getQuery(insertStatement);
+ String expect = "INSERT INTO MySchema.MyTable (MyIndex, MyName, MyDate) \
(SELECT MyIndex, MyName, MyDate FROM MySchema.MyTable)"; + \
assertEquals(expect, got); + }
+
/** <p>Basic test for creating a <code>SELECT</code> statement.</p>
*/
public void testBasicSelect() {
1.10 +6 -6 \
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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- OraSQLGeneratorImpl.java 17 Jun 2004 09:57:01 -0000 1.9
+++ OraSQLGeneratorImpl.java 25 Jun 2004 09:14:38 -0000 1.10
@@ -21,7 +21,7 @@
import org.apache.ws.jaxme.sqls.SelectStatement;
import org.apache.ws.jaxme.sqls.SelectTableReference;
import org.apache.ws.jaxme.sqls.impl.SQLGeneratorImpl;
-import org.apache.ws.jaxme.sqls.impl.SelectStatementMetaData;
+import org.apache.ws.jaxme.sqls.impl.StatementMetaData;
public class OraSQLGeneratorImpl extends SQLGeneratorImpl implements \
OraSQLGenerator { @@ -41,11 +41,11 @@
return isOracle8Compatibility;
}
- protected SelectStatementMetaData newSelectStatementMetaData(SelectStatement \
pQuery) { + protected StatementMetaData \
newSelectStatementMetaData(SelectStatement pQuery) { return new \
OraSelectStatementMetaData(pQuery); }
- protected String getSelectQueryFromClause(SelectStatement pQuery, \
SelectStatementMetaData pData) { + protected String \
getSelectQueryFromClause(SelectStatement pQuery, StatementMetaData pData) { if \
(isOracle8Compatibility()) {
SelectTableReference tableReference = \
pQuery.getSelectTableReference(); if (tableReference == null) {
@@ -65,8 +65,8 @@
}
}
- protected String getSelectQueryConstraints(SelectStatement pQuery, \
SelectStatementMetaData pData,
- SelectStatementMetaData.LocalData \
pLocalData) { + protected String getSelectQueryConstraints(SelectStatement \
pQuery, StatementMetaData pData, + \
StatementMetaData.LocalData pLocalData) { String result;
if (isOracle8Compatibility()) {
SelectTableReference tableReference = \
pQuery.getSelectTableReference(); @@ -128,7 +128,7 @@
return result;
}
- protected String getColumnAlias(SelectStatementMetaData pData, ColumnReference \
pColumn) { + protected String getColumnAlias(StatementMetaData pData, \
ColumnReference pColumn) { String s = super.getColumnAlias(pData, pColumn);
if (pColumn.getTableReference() instanceof OraJoinReferenceImpl) {
OraJoinReferenceImpl oraJoin = (OraJoinReferenceImpl) \
pColumn.getTableReference();
1.2 +2 -2 \
ws-jaxme/src/js/org/apache/ws/jaxme/sqls/oracle/OraSelectStatementMetaData.java
Index: OraSelectStatementMetaData.java
===================================================================
RCS file: /home/cvs/ws-jaxme/src/js/org/apache/ws/jaxme/sqls/oracle/OraSelectStatementMetaData.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- OraSelectStatementMetaData.java 11 Mar 2004 11:03:12 -0000 1.1
+++ OraSelectStatementMetaData.java 25 Jun 2004 09:14:38 -0000 1.2
@@ -17,10 +17,10 @@
package org.apache.ws.jaxme.sqls.oracle;
import org.apache.ws.jaxme.sqls.SelectStatement;
-import org.apache.ws.jaxme.sqls.impl.SelectStatementMetaData;
+import org.apache.ws.jaxme.sqls.impl.StatementMetaData;
-public class OraSelectStatementMetaData extends SelectStatementMetaData {
+public class OraSelectStatementMetaData extends StatementMetaData {
public OraSelectStatementMetaData(SelectStatement pQuery) {
super(pQuery);
}
1.3 +12 -0 ws-jaxme/src/js/org/apache/ws/jaxme/sqls/InsertStatement.java
Index: InsertStatement.java
===================================================================
RCS file: /home/cvs/ws-jaxme/src/js/org/apache/ws/jaxme/sqls/InsertStatement.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- InsertStatement.java 16 Feb 2004 23:39:53 -0000 1.2
+++ InsertStatement.java 25 Jun 2004 09:14:38 -0000 1.3
@@ -22,4 +22,16 @@
* @author <a href="mailto:joe@ispsoft.de">Jochen Wiedmann</a>
*/
public interface InsertStatement extends SetStatement {
+ /** <p>Adds a subselect; the columns returned by the subselect
+ * will be inserted. This is used for bulk inserts like
+ * <code>INSERT INTO foo (col1, col2, col2) (SELECT * FROM ...)</code>.</p>
+ * @param pStatement The statement being performed to create
+ * the rows being inserted.
+ */
+ public void setSubSelect(SelectStatement pStatement);
+
+ /** <p>Returns a subselect previously being added with
+ * {@link #setSubSelect(SelectStatement)}, or null.</p>
+ */
+ public SelectStatement getSubSelect();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jaxme-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: jaxme-dev-help@ws.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic