You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by to...@apache.org on 2009/09/10 10:36:58 UTC
svn commit: r813306 - in /cayenne/main/trunk: docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/
framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/
Author: torehalset
Date: Thu Sep 10 08:36:57 2009
New Revision: 813306
URL: http://svn.apache.org/viewvc?rev=813306&view=rev
Log:
CAY-1274: CreateTableToDb token should not create existing AUTO_PK_SUPPORT
Modified:
cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/AbstractToDbToken.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/CreateTableToDb.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/ExecutingMergerContext.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/MergerContext.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=813306&r1=813305&r2=813306&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Thu Sep 10 08:36:57 2009
@@ -42,6 +42,7 @@
CAY-1250 Prefetching doesn't work with prefetched subentity
CAY-1252 Bad XML generated when saving DBEntity qualifiers
CAY-1265 error while search inheritance relationship
+CAY-1274 CreateTableToDb should not create existing AUTO_PK_SUPPORT
----------------------------------
Release: 3.0M6
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/AbstractToDbToken.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/AbstractToDbToken.java?rev=813306&r1=813305&r2=813306&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/AbstractToDbToken.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/AbstractToDbToken.java Thu Sep 10 08:36:57 2009
@@ -18,30 +18,66 @@
****************************************************************/
package org.apache.cayenne.merge;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
import java.util.List;
+import org.apache.cayenne.access.QueryLogger;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.dba.QuotingStrategy;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.validation.SimpleValidationFailure;
/**
* Common abstract superclass for all {@link MergerToken}s going from the model to the
* database.
- *
*/
public abstract class AbstractToDbToken implements MergerToken, Comparable<MergerToken> {
-
+
public final MergeDirection getDirection() {
return MergeDirection.TO_DB;
}
public void execute(MergerContext mergerContext) {
for (String sql : createSql(mergerContext.getAdapter())) {
- mergerContext.executeSql(sql);
+ executeSql(mergerContext, sql);
+ }
+ }
+
+ protected void executeSql(MergerContext mergerContext, String sql) {
+ Connection conn = null;
+ Statement st = null;
+ try {
+ QueryLogger.log(sql);
+ conn = mergerContext.getDataNode().getDataSource().getConnection();
+ st = conn.createStatement();
+ st.execute(sql);
+ }
+ catch (SQLException e) {
+ mergerContext.getValidationResult().addFailure(
+ new SimpleValidationFailure(sql, e.getMessage()));
+ QueryLogger.logQueryError(e);
+ }
+ finally {
+ if (st != null) {
+ try {
+ st.close();
+ }
+ catch (SQLException e) {
+ }
+ }
+ if (conn != null) {
+ try {
+ conn.close();
+ }
+ catch (SQLException e) {
+ }
+ }
}
}
-
+
@Override
public String toString() {
StringBuilder ts = new StringBuilder();
@@ -54,9 +90,9 @@
}
public abstract List<String> createSql(DbAdapter adapter);
-
+
abstract static class Entity extends AbstractToDbToken {
-
+
private DbEntity entity;
public Entity(DbEntity entity) {
@@ -70,13 +106,13 @@
public String getTokenValue() {
return getEntity().getName();
}
-
+
protected QuotingStrategy getQuotingStrategy(DbAdapter adapter) {
return adapter.getQuotingStrategy(getEntity()
.getDataMap()
.isQuotingSQLIdentifiers());
}
-
+
public int compareTo(MergerToken o) {
// default order as tokens are created
return 0;
@@ -85,9 +121,9 @@
}
abstract static class EntityAndColumn extends Entity {
-
+
private DbAttribute column;
-
+
public EntityAndColumn(DbEntity entity, DbAttribute column) {
super(entity);
this.column = column;
@@ -96,11 +132,11 @@
public DbAttribute getColumn() {
return column;
}
-
+
@Override
public String getTokenValue() {
return getEntity().getName() + "." + getColumn().getName();
}
-
+
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/CreateTableToDb.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/CreateTableToDb.java?rev=813306&r1=813305&r2=813306&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/CreateTableToDb.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/CreateTableToDb.java Thu Sep 10 08:36:57 2009
@@ -22,8 +22,10 @@
import java.util.Collections;
import java.util.List;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.validation.SimpleValidationFailure;
public class CreateTableToDb extends AbstractToDbToken.Entity {
@@ -40,6 +42,22 @@
return sqls;
}
+ @Override
+ public void execute(MergerContext mergerContext) {
+ try {
+ DataNode node = mergerContext.getDataNode();
+ DbAdapter adapter = mergerContext.getAdapter();
+ adapter.getPkGenerator().createAutoPk(
+ node,
+ Collections.singletonList(getEntity()));
+ executeSql(mergerContext, adapter.createTable(getEntity()));
+ }
+ catch (Exception e) {
+ mergerContext.getValidationResult().addFailure(
+ new SimpleValidationFailure(this, e.getMessage()));
+ }
+ }
+
public String getTokenName() {
return "Create Table";
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/ExecutingMergerContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/ExecutingMergerContext.java?rev=813306&r1=813305&r2=813306&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/ExecutingMergerContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/ExecutingMergerContext.java Thu Sep 10 08:36:57 2009
@@ -34,31 +34,34 @@
public class ExecutingMergerContext implements MergerContext {
private DataMap map;
- private DbAdapter adapter;
- private DataSource dataSource;
+ private DataNode node;
private ValidationResult result = new ValidationResult();
private ModelMergeDelegate delegate;
public ExecutingMergerContext(DataMap map, DataNode node) {
this.map = map;
- this.dataSource = node.getDataSource();
- this.adapter = node.getAdapter();
+ this.node = node;
this.delegate = new DefaultModelMergeDelegate();
}
- public ExecutingMergerContext(DataMap map, DataSource dataSource, DbAdapter adapter, ModelMergeDelegate delegate) {
+ public ExecutingMergerContext(DataMap map, DataSource dataSource, DbAdapter adapter,
+ ModelMergeDelegate delegate) {
this.map = map;
- this.dataSource = dataSource;
- this.adapter = adapter;
+ // create a fake DataNode as lots of DbAdapter/PkGenerator methods
+ // take a DataNode instead of just a DataSource
+ this.node = new DataNode();
+ this.node.setDataSource(dataSource);
+ this.node.setAdapter(adapter);
this.delegate = delegate;
}
+ @Deprecated
public void executeSql(String sql) {
Connection conn = null;
Statement st = null;
try {
QueryLogger.log(sql);
- conn = dataSource.getConnection();
+ conn = getDataNode().getDataSource().getConnection();
st = conn.createStatement();
st.execute(sql);
}
@@ -85,13 +88,17 @@
}
public DbAdapter getAdapter() {
- return adapter;
+ return getDataNode().getAdapter();
}
public DataMap getDataMap() {
return map;
}
+ public DataNode getDataNode() {
+ return node;
+ }
+
public ValidationResult getValidationResult() {
return result;
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/MergerContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/MergerContext.java?rev=813306&r1=813305&r2=813306&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/MergerContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/merge/MergerContext.java Thu Sep 10 08:36:57 2009
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.cayenne.merge;
+import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.dba.DbAdapter;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.validation.ValidationResult;
@@ -29,6 +30,7 @@
*/
public interface MergerContext {
+ @Deprecated
public void executeSql(String sql);
public ModelMergeDelegate getModelMergeDelegate();
@@ -37,6 +39,8 @@
public DataMap getDataMap();
+ public DataNode getDataNode();
+
public ValidationResult getValidationResult();
}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java?rev=813306&r1=813305&r2=813306&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/MergerOptions.java Thu Sep 10 08:36:57 2009
@@ -46,6 +46,7 @@
import org.apache.cayenne.map.ObjRelationship;
import org.apache.cayenne.map.event.EntityEvent;
import org.apache.cayenne.map.event.MapEvent;
+import org.apache.cayenne.merge.AbstractToDbToken;
import org.apache.cayenne.merge.DbMerger;
import org.apache.cayenne.merge.ExecutingMergerContext;
import org.apache.cayenne.merge.MergeDirection;
@@ -187,38 +188,16 @@
+ batchTerminator
+ "\n\n" : "\n\n";
- MergerContext context = new MergerContext() {
-
- public void executeSql(String sql) {
- buf.append(sql);
- buf.append(lineEnd);
- }
-
- public DbAdapter getAdapter() {
- return adapter;
- }
-
- public DataMap getDataMap() {
- return dataMap;
- }
-
- public ValidationResult getValidationResult() {
- return new ValidationResult();
- }
-
- public ModelMergeDelegate getModelMergeDelegate() {
- return null;
- }
-
- };
-
while (it.hasNext()) {
MergerToken token = it.next();
-
- if (token.getDirection() == MergeDirection.TO_DB) {
- token.execute(context);
+
+ if (token instanceof AbstractToDbToken) {
+ AbstractToDbToken tdb = (AbstractToDbToken) token;
+ for (String sql : tdb.createSql(adapter)) {
+ buf.append(sql);
+ buf.append(lineEnd);
+ }
}
- // buf.append(token.createSql(adapter)).append(lineEnd);
}
textForSQL = buf.toString();