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