You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ad...@apache.org on 2007/05/25 11:29:05 UTC
svn commit: r541596 [1/2] - in /incubator/tuscany/java/das/rdb/src:
main/java/org/apache/tuscany/das/rdb/
main/java/org/apache/tuscany/das/rdb/config/wrapper/
main/java/org/apache/tuscany/das/rdb/generator/impl/
main/java/org/apache/tuscany/das/rdb/gra...
Author: adrianocrestani
Date: Fri May 25 02:29:02 2007
New Revision: 541596
URL: http://svn.apache.org/viewvc?view=rev&rev=541596
Log:
applied JIRA TUSCANY-952
Added:
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/MultiSchemaTests.java
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/MultiSchemaData.java
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig1.xml
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig12.xml
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig13.xml
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig14.xml
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig2.xml
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig3.xml
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig5.xml
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig6.xml
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig7.xml
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig8.xml
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig9.xml
incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaInvalidDasConfig.xml
Modified:
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java
incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java
incubator/tuscany/java/das/rdb/src/main/resources/config.xsd
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java Fri May 25 02:29:02 2007
@@ -67,6 +67,9 @@
public Table addTable(String name, String typeName) {
return configWrapper.addTable(name, typeName);
}
+ public Table addTable(String name, String schemaName, String typeName) {
+ return configWrapper.addTable(name, schemaName, typeName);
+ }
public Column addColumn(Table table, String columnName, String propertyName) {
return configWrapper.addColumn(table, columnName, propertyName);
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java Fri May 25 02:29:02 2007
@@ -54,14 +54,34 @@
public MappingWrapper() {
config = FACTORY.createConfig();
+ //JIRA-952
+ this.checkSchemaNameSupport();
}
+ //JIRA-952 - check if there is any entry with no schemaName when support is ON
+ public void checkSchemaNameSupport(){
+ if(config.isDatabaseSchemaNameSupported()){
+ List tableList = config.getTable();
+ for(int i=0; i<tableList.size(); i++){
+ Table t = (Table)tableList.get(i);
+ if(t.getSchemaName() == null || t.getSchemaName().equals("")){
+ throw new RuntimeException("No schemaName provided for tableName "+t.getTableName()+" when schemaNameSupport is ON");
+ }
+
+ if(t.getTypeName()==null){
+ t.setTypeName(t.getSchemaName()+"."+t.getTableName());
+ }
+ }
+ }
+ }
public MappingWrapper(Config mapping) {
if (mapping == null) {
this.config = FACTORY.createConfig();
} else {
this.config = mapping;
}
+ //JIRA-952
+ checkSchemaNameSupport();
}
public Config getConfig() {
@@ -77,8 +97,15 @@
Iterator i = config.getTable().iterator();
while (i.hasNext()) {
Table t = (Table) i.next();
+ //JIRA-952
+ if(this.config.isDatabaseSchemaNameSupported()){
+ if (tableName.equalsIgnoreCase(t.getSchemaName()+"."+t.getTableName())) {
+ return t;
+ }
+ }else{
if (tableName.equalsIgnoreCase(t.getTableName())) {
return t;
+ }
}
}
@@ -136,13 +163,31 @@
public Relationship addRelationship(String parentName, String childName) {
- QualifiedColumn parent = new QualifiedColumn(parentName);
- QualifiedColumn child = new QualifiedColumn(childName);
-
+ //JIRA-952
+ QualifiedColumn parent = null;
+ QualifiedColumn child = null;
+
+ if(this.config.isDatabaseSchemaNameSupported()){
+ parent = new QualifiedColumn(parentName, true);
+ child = new QualifiedColumn(childName, true);
+ }
+ else{
+ parent = new QualifiedColumn(parentName);
+ child = new QualifiedColumn(childName);
+ }
+
Relationship r = FACTORY.createRelationship();
+ //JIRA-952
+ if(this.config.isDatabaseSchemaNameSupported()){
+ r.setName(child.getSchemaName()+"."+child.getTableName());
+ r.setPrimaryKeyTable(parent.getSchemaName()+"."+parent.getTableName());
+ r.setForeignKeyTable(child.getSchemaName()+"."+child.getTableName());
+ }
+ else{
r.setName(child.getTableName());
r.setPrimaryKeyTable(parent.getTableName());
r.setForeignKeyTable(child.getTableName());
+ }
if (this.logger.isDebugEnabled()) {
this.logger.debug("Created relationship from " + r.getPrimaryKeyTable()
@@ -172,8 +217,17 @@
Vector childColumns = new Vector();
for(int i=0; i<parentNames.size(); i++){
- QualifiedColumn parent = new QualifiedColumn((String)parentNames.get(i));
- QualifiedColumn child = new QualifiedColumn((String)childNames.get(i));
+ QualifiedColumn parent = null;
+ QualifiedColumn child = null;
+
+ if(this.config.isDatabaseSchemaNameSupported()){
+ parent = new QualifiedColumn((String)parentNames.get(i), true);
+ child = new QualifiedColumn((String)childNames.get(i), true);
+ }
+ else{
+ parent = new QualifiedColumn((String)parentNames.get(i));
+ child = new QualifiedColumn((String)childNames.get(i));
+ }
parentColumns.add(parent);
childColumns.add(child);
@@ -182,23 +236,32 @@
//all parent columns should be from same table and schema
//all child columns should be from same table and schema
checkTableNames(parentColumns);
- //checkSchemaNames(parentColumns);
+ checkSchemaNames(parentColumns);
checkTableNames(childColumns);
- //checkSchemaNames(childColumns);
+ checkSchemaNames(childColumns);
Relationship r = FACTORY.createRelationship();
-
+ //JIRA-952
+ if(this.config.isDatabaseSchemaNameSupported()){
+ r.setName(((QualifiedColumn)childColumns.get(0)).getSchemaName()+"."
+ +((QualifiedColumn)childColumns.get(0)).getTableName());
+ r.setPrimaryKeyTable(((QualifiedColumn)parentColumns.get(0)).getSchemaName()+"."
+ +((QualifiedColumn)parentColumns.get(0)).getTableName());
+ r.setForeignKeyTable(((QualifiedColumn)childColumns.get(0)).getSchemaName()+"."
+ +((QualifiedColumn)childColumns.get(0)).getTableName());
+ }
+ else{
r.setName(((QualifiedColumn)childColumns.get(0)).getTableName());
r.setPrimaryKeyTable(((QualifiedColumn)parentColumns.get(0)).getTableName());
r.setForeignKeyTable(((QualifiedColumn)childColumns.get(0)).getTableName());
-
+ }
if (this.logger.isDebugEnabled()) {
this.logger.debug("Created relationship from " + r.getPrimaryKeyTable()
+ " to " + r.getForeignKeyTable() + " named " + r.getName());
}
-
+
KeyPair pair = null;
for(int i=0; i<parentColumns.size(); i++){
@@ -227,6 +290,22 @@
}
}
+ public void checkSchemaNames(Vector columns){
+ if(!this.config.isDatabaseSchemaNameSupported()){
+ return;
+ }
+
+ String expectedSchemaName = ((QualifiedColumn)columns.get(0)).getSchemaName();
+
+ for(int i=0; i<columns.size(); i++){
+ QualifiedColumn currColumns = (QualifiedColumn)columns.get(i);
+ String currSchemaName = ((QualifiedColumn)columns.get(i)).getSchemaName();
+
+ if(!currSchemaName.equals(expectedSchemaName)){
+ throw new RuntimeException("Columns in one side of relationship can not be from different schema");
+ }
+ }
+ }
public void addPrimaryKey(String columnName) {
addPrimaryKey(Collections.singletonList(columnName));
}
@@ -237,8 +316,10 @@
while (i.hasNext()) {
String columnName = (String) i.next();
- QualifiedColumn pkColumn = new QualifiedColumn(columnName);
- Table t = findOrCreateTable(pkColumn.getTableName());
+ QualifiedColumn pkColumn = null;
+ pkColumn = new QualifiedColumn(columnName, this.config.isDatabaseSchemaNameSupported());
+ //Table t = findOrCreateTable(pkColumn.getTableName());
+ Table t = findOrCreateTable(pkColumn);
Column c = findOrCreateColumn(t, pkColumn.getColumnName());
c.setPrimaryKey(true);
}
@@ -281,9 +362,11 @@
if (t == null) {
return null;
}
+
Iterator i = t.getColumn().iterator();
while (i.hasNext()) {
Column c = (Column) i.next();
+
if (c.getColumnName().equals(propertyName)) {
return c;
}
@@ -329,6 +412,41 @@
return table;
}
+ //JIRA-952
+ public Table addTable(String tableName, String schemaName, String typeName) {
+ Table table = null;
+
+ if(this.config.isDatabaseSchemaNameSupported()){
+ table = getTable(schemaName+"."+tableName);
+ }
+ else{
+ table = getTable(tableName);
+ }
+
+ if (table != null) {
+ if(this.config.isDatabaseSchemaNameSupported()){
+ throw new RuntimeException("Table " + schemaName+"."+tableName + "already exists");
+ }
+ else{
+ throw new RuntimeException("Table " + tableName + "already exists");
+ }
+ }
+
+ table = ConfigFactory.INSTANCE.createTable();
+ table.setTableName(tableName);
+
+ if(this.config.isDatabaseSchemaNameSupported()){
+ table.setSchemaName(schemaName);
+ }
+ else{
+ table.setSchemaName("");
+ }
+
+ table.setTypeName(typeName);
+ config.getTable().add(table);
+
+ return table;
+ }
public Column addColumn(Table table, String name, String propertyName) {
Column column = ConfigFactory.INSTANCE.createColumn();
column.setColumnName(name);
@@ -338,17 +456,52 @@
return column;
}
- private Table findOrCreateTable(String tableName) {
- Table table = getTable(tableName);
+ //JIRA-952
+ private Table findOrCreateTable(String schemaName, String tableName) {
+ Table table = null;
+
+ if(this.config.isDatabaseSchemaNameSupported()){
+ table = getTable(schemaName+"."+tableName);
+ }
+ else{
+ table = getTable(tableName);
+ }
if (table == null) {
table = ConfigFactory.INSTANCE.createTable();
table.setTableName(tableName);
+ table.setSchemaName(schemaName);
+
+ if(this.config.isDatabaseSchemaNameSupported()){
+ table.setTypeName(schemaName+"."+tableName);
+ }
+ else{
+ table.setTypeName(tableName);
+ }
config.getTable().add(table);
}
return table;
}
+ //JIRA-952
+ private Table findOrCreateTable(QualifiedColumn column) {
+ Table table = null;
+ if(this.config.isDatabaseSchemaNameSupported()){
+ table = getTable(column.getSchemaName()+"."+column.getTableName());
+ }
+ else{
+ table = getTable(column.getTableName());
+ }
+
+ if (table == null) {
+ table = ConfigFactory.INSTANCE.createTable();
+ table.setTableName(column.getTableName());
+ table.setSchemaName(column.getSchemaName());
+ config.getTable().add(table);
+ }
+ return table;
+
+ }
private Column findOrCreateColumn(Table t, String name) {
Iterator i = t.getColumn().iterator();
while (i.hasNext()) {
@@ -443,13 +596,13 @@
return deleteOrder;
}
+ //JIRA-952
public void addConverter(String name, String converter) {
-
- QualifiedColumn column = new QualifiedColumn(name);
- Table t = findOrCreateTable(column.getTableName());
+ QualifiedColumn column = new QualifiedColumn(name, this.config.isDatabaseSchemaNameSupported());
+ Table t = null;
+ t = findOrCreateTable(column);
Column c = findOrCreateColumn(t, column.getColumnName());
c.setConverterClassName(converter);
-
}
public String getConverter(String tableName, String columnName) {
@@ -539,6 +692,7 @@
public void addConnectionInfo(String driverClass, String connectionURL, String user, String password, int loginTimeout) {
ConnectionInfo info = ConfigFactory.INSTANCE.createConnectionInfo();
+ info.setDataSource(connectionURL);
ConnectionProperties connectionProperties = ConfigFactory.INSTANCE.createConnectionProperties();
connectionProperties.setDriverClass(driverClass);
connectionProperties.setDatabaseURL(connectionURL);
@@ -562,8 +716,9 @@
return cmd;
}
- public void addImpliedPrimaryKey(String tableName, String columnName) {
- Table t = findOrCreateTable(tableName);
+ //JIRA-952
+ public void addImpliedPrimaryKey(String schemaName, String tableName, String columnName) {
+ Table t = findOrCreateTable(schemaName, tableName);//JIRA-952
Iterator i = t.getColumn().iterator();
boolean hasPK = false;
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/QualifiedColumn.java Fri May 25 02:29:02 2007
@@ -26,10 +26,12 @@
private final String tableName;
private final String columnName;
+ private final String schemaName;//JIRA-952
private final Logger logger = LoggerFactory.INSTANCE.getLogger(QualifiedColumn.class);
public QualifiedColumn(String name) {
+ this.schemaName = "";
int index = name.indexOf('.');
if ( index == -1 ) {
throw new RuntimeException("Column " + name + " must be qualified with a table name");
@@ -43,11 +45,51 @@
}
}
+ //JIRA-952
+ public QualifiedColumn(String name, boolean isDatabaseSchemaNameSupported) {
+ int index = name.indexOf('.');
+ if ( index == -1 ) {
+ throw new RuntimeException("Column " + name + " must be qualified with a table name and optional schema name");
+ }
+
+ int lastIndex = name.lastIndexOf('.');
+
+ if(index == lastIndex && isDatabaseSchemaNameSupported){
+ throw new RuntimeException("Column " + name + " must be qualified with a table name and schema name");
+ }
+
+ if(isDatabaseSchemaNameSupported){
+ schemaName = name.substring(0, index);
+ tableName = name.substring(index+1, lastIndex);
+ columnName = name.substring(lastIndex + 1);
+ }
+ else{
+ schemaName = "";
+ tableName = name.substring(0, index);
+ columnName = name.substring(index + 1);
+ }
+
+ if (this.logger.isDebugEnabled()) {
+ this.logger.debug("Table name: " + tableName);
+ this.logger.debug("Column name: " + columnName);
+ }
+ }
public String getTableName() {
return this.tableName;
}
+ //JIRA-952
+ public String getSchemaName() {
+ return this.schemaName;
+ }
public String getColumnName() {
return this.columnName;
+ }
+ //JIRA-952
+ public String toString(){
+ if(this.schemaName == null || this.schemaName.equals(""))
+ return this.tableName+"."+this.columnName;
+ else
+ return this.schemaName+"."+this.tableName+"."+this.columnName;
}
}
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/DeleteGenerator.java Fri May 25 02:29:02 2007
@@ -22,6 +22,7 @@
import org.apache.log4j.Logger;
import org.apache.tuscany.das.rdb.config.Table;
+import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper;
import org.apache.tuscany.das.rdb.impl.DeleteCommandImpl;
import org.apache.tuscany.das.rdb.impl.ParameterImpl;
@@ -38,12 +39,18 @@
super();
}
- private String getDeleteStatement(Table t) {
+ //JIRA-952
+ private String getDeleteStatement(MappingWrapper mapping, Table t) {
TableWrapper table = new TableWrapper(t);
StringBuffer statement = new StringBuffer();
statement.append("delete from ");
+ if(mapping.getConfig().isDatabaseSchemaNameSupported()){
+ statement.append(t.getSchemaName()+"."+t.getTableName());
+ }
+ else{
statement.append(t.getTableName());
+ }
statement.append(" where ");
Iterator names = table.getPrimaryKeyNames().iterator();
@@ -64,9 +71,9 @@
return statement.toString();
}
- public DeleteCommandImpl getDeleteCommand(Table t) {
+ public DeleteCommandImpl getDeleteCommand(MappingWrapper mapping, Table t) {
TableWrapper tw = new TableWrapper(t);
- DeleteCommandImpl deleteCommand = new DeleteCommandImpl(getDeleteStatement(t));
+ DeleteCommandImpl deleteCommand = new DeleteCommandImpl(getDeleteStatement(mapping, t));
Iterator i = tw.getPrimaryKeyProperties().iterator();
for (int idx = 1; i.hasNext(); idx++) {
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/InsertGenerator.java Fri May 25 02:29:02 2007
@@ -52,8 +52,13 @@
List parameters = new ArrayList();
TableWrapper table = new TableWrapper(t);
StringBuffer statement = new StringBuffer("insert into ");
+ //JIRA-952
+ if(config.getConfig().isDatabaseSchemaNameSupported()){
+ statement.append(t.getSchemaName()+"."+t.getTableName());
+ }
+ else{
statement.append(t.getTableName());
-
+ }
HashSet changedProperties = getAttributeProperties(changedObject, config, table);
Iterator i;
if ( changedProperties.isEmpty() ) {
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/UpdateGenerator.java Fri May 25 02:29:02 2007
@@ -57,7 +57,13 @@
Type type = changedObject.getType();
TableWrapper tableWrapper = new TableWrapper(table);
StringBuffer statement = new StringBuffer("update ");
+ //JIRA-952
+ if(mapping.getConfig().isDatabaseSchemaNameSupported()){
+ statement.append(table.getSchemaName()+"."+table.getTableName());
+ }
+ else{
statement.append(table.getTableName());
+ }
statement.append(" set ");
ChangeSummary summary = changedObject.getDataGraph().getChangeSummary();
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/graphbuilder/impl/ResultMetadata.java Fri May 25 02:29:02 2007
@@ -54,13 +54,14 @@
private Converter[] converters;
+ //JIRA-952
public ResultMetadata(ResultSet rs, MappingWrapper cfgWrapper, ResultSetShape shape) throws SQLException {
this.resultSet = rs;
this.configWrapper = cfgWrapper;
if (shape == null) {
- this.resultSetShape = new ResultSetShape(rs.getMetaData());
+ this.resultSetShape = new ResultSetShape(rs.getMetaData(), configWrapper.getConfig());
} else {
this.resultSetShape = shape;
}
@@ -68,23 +69,53 @@
this.converters = new Converter[resultSetShape.getColumnCount()];
Map impliedRelationships = new HashMap();
+ String schemaName = "";
for (int i = 1; i <= resultSetShape.getColumnCount(); i++) {
String tableName = resultSetShape.getTableName(i);
+ schemaName = resultSetShape.getSchemaName(i);
if (( tableName == null ) || ( tableName.equals(""))) {
throw new RuntimeException("Unable to obtain table information from JDBC. DAS configuration must specify ResultDescriptors");
}
+ String typeName = null;
- String typeName = configWrapper.getTableTypeName(tableName);
+ if(this.configWrapper.getConfig().isDatabaseSchemaNameSupported()){
+ typeName = configWrapper.getTableTypeName(schemaName+"."+tableName);
+ }
+ else{
+ typeName = configWrapper.getTableTypeName(tableName);
+ }
String columnName = resultSetShape.getColumnName(i);
if (columnName.contains("_ID")) {
- impliedRelationships.put(columnName, tableName);
+ String colName = "";
+ if(this.configWrapper.getConfig().isDatabaseSchemaNameSupported()){
+ colName = schemaName+"."+columnName;
+ impliedRelationships.put(colName, schemaName+"."+tableName);
+ }
+ else{
+ colName = columnName;
+ impliedRelationships.put(colName, tableName);
+ }
} else if (columnName.equalsIgnoreCase("ID")) {
- configWrapper.addImpliedPrimaryKey(tableName, columnName);
+ configWrapper.addImpliedPrimaryKey(schemaName, tableName, columnName);
}
- String propertyName = configWrapper.getColumnPropertyName(tableName, columnName);
- String converterName = configWrapper.getConverter(tableName, resultSetShape.getColumnName(i));
+ String propertyName = null;
+
+ if(this.configWrapper.getConfig().isDatabaseSchemaNameSupported()){
+ propertyName = configWrapper.getColumnPropertyName(schemaName+"."+tableName, columnName);
+ }
+ else{
+ propertyName = configWrapper.getColumnPropertyName(tableName, columnName);
+ }
+ String converterName = null;
+
+ if(this.configWrapper.getConfig().isDatabaseSchemaNameSupported()){
+ converterName = configWrapper.getConverter(schemaName+"."+tableName, resultSetShape.getColumnName(i));
+ }
+ else{
+ converterName = configWrapper.getConverter(tableName, resultSetShape.getColumnName(i));
+ }
converters[i - 1] = loadConverter(converterName);
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ChangeFactory.java Fri May 25 02:29:02 2007
@@ -128,7 +128,7 @@
Delete delete = table.getDelete();
if (delete == null) {
- deleteCommand = DeleteGenerator.INSTANCE.getDeleteCommand(table);
+ deleteCommand = DeleteGenerator.INSTANCE.getDeleteCommand(mapping, table);//JIRA-952
} else {
deleteCommand = new DeleteCommandImpl(delete);
}
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DatabaseObject.java Fri May 25 02:29:02 2007
@@ -18,20 +18,26 @@
*/
package org.apache.tuscany.das.rdb.impl;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
+import org.apache.tuscany.das.rdb.ConfigHelper;
import org.apache.tuscany.das.rdb.config.Column;
import org.apache.tuscany.das.rdb.config.Config;
import org.apache.tuscany.das.rdb.config.KeyPair;
import org.apache.tuscany.das.rdb.config.Relationship;
import org.apache.tuscany.das.rdb.config.Table;
import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.config.wrapper.TableWrapper;
import org.apache.tuscany.das.rdb.util.LoggerFactory;
+import commonj.sdo.DataGraph;
import commonj.sdo.DataObject;
import commonj.sdo.Property;
@@ -67,13 +73,19 @@
Relationship r = (Relationship) i.next();
if (this.logger.isDebugEnabled()) {
this.logger.debug("Initializing relationship: " + r.getName());
+ this.logger.debug("r.getForeignKeyTable():"+r.getForeignKeyTable());
+ this.logger.debug("getTypeName():"+getTypeName());
}
+
if (r.getForeignKeyTable().equals(getTypeName())) {
List pairs = r.getKeyPair();
Iterator iter = pairs.iterator();
while (iter.hasNext()) {
KeyPair pair = (KeyPair) iter.next();
keyMappings.put(pair.getForeignKeyColumn(), r);
+ if (this.logger.isDebugEnabled()) {
+ this.logger.debug("Putting key pair: " + pair.getPrimaryKeyColumn()+","+pair.getForeignKeyColumn());
+ }
}
}
}
@@ -81,7 +93,6 @@
}
public Object get(String parameter) {
-
if (isPartOfPrimaryKey(parameter)) {
return dataObject.get(parameter);
}
@@ -91,8 +102,23 @@
return dataObject.get(parameter);
}
- Property parentRef = getParentReference(r.getPrimaryKeyTable());
+ //JIRA-952
+ Table tbl = this.mappingWrapper.getTable(r.getPrimaryKeyTable());
+ Property parentRef = null;
+ if(tbl == null){
+ //this is case when config file is not present and
+ //ConfigHelper helper = new ConfigHelper(); is used
+ parentRef = getParentReference(r.getPrimaryKeyTable());
+ }
+ else{
+ //other cases, its better to use typeName as r.getPrimaryKeyTable()
+ //gives tableName and tableName and typeName can be different
+ //and SDO looks for typeName and not tableName.
+ parentRef = getParentReference((new TableWrapper(tbl)).getTypeName());
+ }
+
DataObject parent = dataObject.getDataObject(parentRef);
+
if (parent == null) {
return null;
}
@@ -115,7 +141,6 @@
public Property getParentReference(String parentName) {
if (this.parentReference == null) {
-
Iterator i = dataObject.getType().getProperties().iterator();
while (i.hasNext()) {
Property ref = (Property) i.next();
@@ -127,14 +152,35 @@
return this.parentReference;
}
+ //JIRA-952
public String getTableName() {
if (mappingWrapper.getConfig() != null) {
- return mappingWrapper.getTableByTypeName(getTypeName()).getTableName();
+
+ if(mappingWrapper.getConfig().isDatabaseSchemaNameSupported()){
+ if (this.logger.isDebugEnabled()) {
+ this.logger.debug("DatabaseObject.getTableName:(schemaName.tableName) " +
+ mappingWrapper.getTableByTypeName(getTypeName()).getSchemaName()+"."+
+ mappingWrapper.getTableByTypeName(getTypeName()).getTableName());
+ }
+
+ return (mappingWrapper.getTableByTypeName(getTypeName()).getSchemaName()+"."+
+ mappingWrapper.getTableByTypeName(getTypeName()).getTableName());
+ }
+ else{
+ if (this.logger.isDebugEnabled()) {
+ this.logger.debug("DatabaseObject.getTableName: " + mappingWrapper.getTableByTypeName(getTypeName()).getTableName());
+ }
+
+ return mappingWrapper.getTableByTypeName(getTypeName()).getTableName();
+ }
}
return null;
}
public String getTypeName() {
+ if (this.logger.isDebugEnabled()) {
+ this.logger.debug("DatabaseObject.getTypeName: " + dataObject.getType().getName());
+ }
return dataObject.getType().getName();
}
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ReadCommandImpl.java Fri May 25 02:29:02 2007
@@ -41,7 +41,7 @@
this.configWrapper = mapping;
if (resultDescriptor != null && !resultDescriptor.isEmpty()) {
- this.resultSetShape = new ResultSetShape(resultDescriptor);
+ this.resultSetShape = new ResultSetShape(resultDescriptor, configWrapper.getConfig());//JIRA-952
}
}
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/ResultSetShape.java Fri May 25 02:29:02 2007
@@ -22,6 +22,7 @@
import java.sql.SQLException;
import java.util.List;
+import org.apache.tuscany.das.rdb.config.Config;
import org.apache.tuscany.das.rdb.config.ResultDescriptor;
import org.apache.tuscany.das.rdb.graphbuilder.schema.ResultSetTypeMap;
@@ -47,29 +48,60 @@
private final Type[] types;
- public ResultSetShape(ResultSetMetaData metadata) throws SQLException {
+ private final String[] schema;//JIRA-952
+ //JIRA-952
+ public ResultSetShape(ResultSetMetaData metadata, Config model) throws SQLException {
columns = new String[metadata.getColumnCount()];
tables = new String[metadata.getColumnCount()];
types = new Type[metadata.getColumnCount()];
+ schema = new String[metadata.getColumnCount()];
ResultSetTypeMap typeMap = ResultSetTypeMap.INSTANCE;
for (int i = 1; i <= metadata.getColumnCount(); i++) {
- tables[i - 1] = metadata.getTableName(i);
+ if(model.isDatabaseSchemaNameSupported()){
+ if(metadata.getSchemaName(i) != null && !metadata.getSchemaName(i).equals("")){
+ //tables[i - 1] = metadata.getSchemaName(i)+"."+metadata.getTableName(i);
+ tables[i - 1] = metadata.getTableName(i);
+ schema[i - 1] = metadata.getSchemaName(i);
+ }
+ else{
+ tables[i - 1] = metadata.getTableName(i);
+ schema[i - 1] = "";
+ }
+ }
+ else{
+ tables[i - 1] = metadata.getTableName(i);
+ schema[i - 1] = "";
+ }
columns[i - 1] = metadata.getColumnName(i);
types[i - 1] = typeMap.getType(metadata.getColumnType(i), true);
}
}
- public ResultSetShape(List resultDescriptor) {
+ //JIRA-952
+ public ResultSetShape(List resultDescriptor, Config model) {
TypeHelper helper = TypeHelper.INSTANCE;
int size = resultDescriptor.size();
columns = new String[size];
tables = new String[size];
types = new Type[size];
+ schema = new String[size];
for (int i = 0; i < size; i++) {
ResultDescriptor desc = (ResultDescriptor) resultDescriptor.get(i);
- tables[i] = desc.getTableName();
+ if(model.isDatabaseSchemaNameSupported()){
+ if(desc.getSchemaName() != null && !desc.getSchemaName().equals("")){
+ tables[i] = desc.getTableName();
+ schema[i] = desc.getSchemaName();
+ }else{
+ tables[i] = desc.getTableName();
+ schema[i] = "";
+ }
+
+ }else{
+ tables[i] = desc.getTableName();
+ schema[i] = "";
+ }
columns[i] = desc.getColumnName();
int idx = desc.getColumnType().lastIndexOf('.');
@@ -93,6 +125,10 @@
return tables[i - 1];
}
+ //JIRA-952
+ public String getSchemaName(int i) {
+ return schema[i - 1];
+ }
public String getColumnName(int i) {
return columns[i - 1];
}
@@ -103,11 +139,13 @@
public String toString() {
StringBuffer result = new StringBuffer();
- result.append(" column/table/type: ");
+ result.append(" column/table/schema/type: ");
for (int i = 0; i < columns.length; i++) {
result.append(columns[i]);
result.append('\t');
result.append(tables[i]);
+ result.append('\t');
+ result.append(schema[i]);
result.append('\t');
if (types[i] == null) {
result.append("null");
Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/merge/impl/GraphMerger.java Fri May 25 02:29:02 2007
@@ -46,12 +46,19 @@
private Map keys = new HashMap();
private TableRegistry registry = new MultiTableRegistry();
+
+ private Config config = null;//JIRA-962 for any new tests with schema , we need this
// TODO lots of cleanup/design
public GraphMerger() {
// Empty Constructor
}
+ //JIRA-952
+ public GraphMerger(Config cfg) {
+ this.config = cfg;
+ }
+
// TODO Replace EMF reference with SDOUtil function when available
// (Tuscany-583)
public DataObject emptyGraph(Config config) {
@@ -187,8 +194,16 @@
return (String) keys.get(object.getType().getName());
}
+ //JIRA-952
public void addPrimaryKey(String key) {
- QualifiedColumn column = new QualifiedColumn(key);
+ QualifiedColumn column = null;
+ if(this.config != null && this.config.isDatabaseSchemaNameSupported()){
+ column = new QualifiedColumn(key, this.config.isDatabaseSchemaNameSupported());
+ }
+ else{
+ column = new QualifiedColumn(key);
+ }
+
logger.finest("Adding " + column.getTableName() + " " + column.getColumnName() + " to keys");
keys.put(column.getTableName(), column.getColumnName());
}
Modified: incubator/tuscany/java/das/rdb/src/main/resources/config.xsd
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/resources/config.xsd?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/resources/config.xsd (original)
+++ incubator/tuscany/java/das/rdb/src/main/resources/config.xsd Fri May 25 02:29:02 2007
@@ -37,6 +37,7 @@
</xsd:sequence>
<xsd:attribute name="uri" type="xsd:string"/>
<xsd:attribute name="dataObjectModel" type="xsd:string"/>
+ <xsd:attribute name="databaseSchemaNameSupported" type="xsd:boolean" default="false"/>
</xsd:complexType>
<xsd:complexType name="ConnectionProperties">
@@ -93,6 +94,7 @@
</xsd:sequence>
<xsd:attribute name="tableName" type="xsd:string"/>
<xsd:attribute name="typeName" type="xsd:string"/>
+ <xsd:attribute name="schemaName" type="xsd:string" default=""/>
</xsd:complexType>
<xsd:complexType name="Create">
<xsd:attribute name="sql" type="xsd:string"/>
@@ -122,6 +124,7 @@
<xsd:complexType name="ResultDescriptor">
<xsd:attribute name="columnName" type="xsd:string"/>
<xsd:attribute name="tableName" type="xsd:string"/>
+ <xsd:attribute name="schemaName" type="xsd:string"/>
<xsd:attribute name="columnType" type="xsd:string"/>
</xsd:complexType>
Added: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/MultiSchemaTests.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/MultiSchemaTests.java?view=auto&rev=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/MultiSchemaTests.java (added)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/MultiSchemaTests.java Fri May 25 02:29:02 2007
@@ -0,0 +1,718 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.tuscany.das.rdb.test;
+
+import java.io.InputStream;
+import java.sql.Connection;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.das.rdb.test.data.MultiSchemaData;
+import org.apache.tuscany.das.rdb.test.framework.DasTest;
+import org.apache.tuscany.das.rdb.util.ConfigUtil;
+
+import commonj.sdo.DataObject;
+
+public class MultiSchemaTests extends DasTest{
+ protected void setUp() throws Exception {
+ super.setUp();
+ new MultiSchemaData(getAutoConnection()).refresh();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**If database is present connect to it and create necessary tables, procedures, data etc.
+ *
+ * Below is test database schema required.
+ * Schema Layout -
+ * Database: DASTEST
+ * Schema: DASTEST1
+ * Tables: CUSTOMER, EMPLOYEE, CITY, ORDERDETAILS
+ * Schema: DASTEST2
+ * Tables: CUSTOMER, ACCOUNT, CITY
+ * Schema: DASTEST3
+ * Tables: CUSTOMER, CUSTORDER, ORDERDETAILSDESC
+ */
+
+ public void testMulitiSchemaCase1() throws Exception {
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig1.xml"), getConnection());
+ //test case 1 - CRUD when schemaName, tableName, typeName present - DASTEST1.CUSTOMER
+ //System.out.println("Result:test case 1 - CRUD when schemaName, tableName, typeName present:DASTEST1.CUSTOMER");
+ //test select
+ //System.out.println("Result:test case 1 - SELECT");
+ assertEquals(getCustomers(das).size(), 3);
+
+ //test insert - basic
+ //System.out.println("Result:test case 1 - INSERT(execute())");
+ addCustomer(das);
+ assertEquals(getCustomers(das).size(), 4);
+
+ //test insert - use SDO
+ //System.out.println("Result:test case 1 - INSERT(applyChanges())");
+ addSDOCustomer(das);
+ assertEquals(getCustomers(das).size(), 5);
+
+ //test delete - basic
+ //System.out.println("Result:test case 1 - DELETE(execute())");
+ deleteCustomer(das);
+ assertEquals(getCustomers(das).size(), 4);
+
+ //test delete - SDO
+ //System.out.println("Result:test case 1 - DELETE(applyChanges())");
+ deleteSDOCustomer(das);
+ assertEquals(getCustomers(das).size(), 3);
+
+ //test update
+ //System.out.println("Result:test case 1 - UPDATE");
+ changeFirstCustomerName(das);
+ assertEquals( ((DataObject)getCustomers(das).get(0)).get("LASTNAME"), "Williams");
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase2()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig2.xml"), getConnection());
+ //test case 1 - CRUD when schemaName, tableName present, typeName not present - DASTEST2.ACCOUNT
+ //System.out.println("Result:test case 2 - CRUD when schemaName, tableName present, typeName not present:DASTEST2.ACCOUNT");
+ //test select
+ //System.out.println("Result:test case 2 - SELECT");
+ assertEquals(getAccounts(das).size(), 4);
+
+ //test insert - basic
+ //System.out.println("Result:test case 2 - INSERT(execute())");
+ addAccount(das);
+ assertEquals(getAccounts(das).size(), 5);
+
+ //test insert - SDO
+ //System.out.println("Result:test case 2 - INSERT(applyChanges())");
+ addSDOAccount(das);
+ assertEquals(getAccounts(das).size(), 6);
+
+ //test delete - basic
+ //System.out.println("Result:test case 2 - DELETE(execute())");
+ deleteAccount(das);
+ assertEquals(getAccounts(das).size(), 5);
+
+ //test delete - SDO
+ //System.out.println("Result:test case 2 - DELETE(applyChanges())");
+ deleteSDOAccount(das);
+ assertEquals(getAccounts(das).size(), 4);
+
+ //test update
+ //System.out.println("Result:test case 2 - UPDATE");
+ changeFirstAccountBalance(das);
+ assertEquals( ((DataObject)getAccounts(das).get(0)).get("BALANCE"), 45000);
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase3() throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig3.xml"), getConnection());
+ //test case 3 - CRUD when <Table> is not there in config - DASTEST1.CITY
+ //System.out.println("Result:test case 3 - CRUD when <Table> is not there in config:DASTEST1.CITY");
+ //test select
+ //System.out.println("Result:test case 3 - SELECT");
+ assertEquals(getCities(das).size(), 2);
+
+ //test insert - basic
+ //System.out.println("Result:test case 3 - INSERT(execute())");
+ addCity(das);
+ assertEquals(getCities(das).size(), 3);
+
+ //test insert - SDO
+ //System.out.println("Result:test case 3 - INSERT(applyChanges())");
+ assertEquals(addSDOCity(das),"Expected failure to insert");
+ assertEquals(getCities(das).size(), 3);
+
+ //test delete - basic
+ //System.out.println("Result:test case 3 - DELETE(execute())");
+ deleteCity(das);
+ assertEquals(getCities(das).size(), 2);
+
+ //test delete - SDO
+ //System.out.println("Result:test case 3 - DELETE(applyChanges())");
+ assertEquals(deleteSDOCity(das), "Expected failure to delete");
+ assertEquals(getCities(das).size(), 2);
+
+ //test update
+ //System.out.println("Result:test case 3 - UPDATE");
+ assertEquals(changeFirstCityName(das), "Expected failure to update");
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase4() throws Exception{
+ //System.out.println("Result:test case 4 - with multi schema support ON, have table with no schemaName");
+ try{
+ //get das handle for invalid config
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaInvalidDasConfig.xml"), getConnection());
+ }catch(Exception e){
+ //No schemaName provided for tableName CUSTORDER when schemaNameSupport is ON
+ assertEquals("No schemaName provided for tableName CUSTORDER when schemaNameSupport is ON",
+ e.getMessage());
+ }
+
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase5() throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig5.xml"), getConnection());
+
+ //test case 5 - SELECT when CUSTOMER.ID is present in DASTEST1 and DASTEST2
+ //and DASTEST2.CUSTOMER <Table> not in config
+ //System.out.println("Result:test case 5 - SELECT when CUSTOMER.ID is present in DASTEST1 and DASTEST2 and"+
+ // " DASTEST2.CUSTOMER <Table> not in config");
+ DataObject root = getCustomersFrom2SchemasWithOneSchemaNotInConfig(das);
+ assertEquals(root.getList("DASTEST1_CUSTOMER").size(), 3);
+ assertEquals(root.getList("DASTEST2.CUSTOMER").size(), 3);
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase6()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig6.xml"), getConnection());
+ //test case 6 - SELECT when CUSTOMER.ID is present in DASTEST1 and DB2ADMIN - and both <table> entries are in Config
+ //System.out.println("Result:test case 6 - SELECT when CUSTOMER.ID is present in DASTEST1 and DB2ADMIN, and both <table> in config");
+ //test select
+ //System.out.println("Result:test case 6 - SELECT");
+ DataObject root = getCustomersFrom2SchemasBothSchemaInConfig(das);
+ assertEquals(root.getList("DASTEST1_CUSTOMER").size(),3);
+ assertEquals(root.getList("DASTEST3_CUSTOMER").size(),3);
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase7()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig7.xml"), getConnection());
+ //test case 7 - SELECT when CITY.INDX is present in DASTEST1 and DASTEST2 and no enrty for
+ //any <Table> in config
+ //System.out.println("Result:test case 7 - SELECT when CITY.INDX is present in DASTEST1 and DASTEST2, and no <table> in config");
+ //test select
+ //System.out.println("Result:test case 7 - SELECT");
+ DataObject root = getCitiesFrom2SchemasNoneInConfig(das);
+ assertEquals(root.getList("DASTEST1.CITY").size(), 2);
+ assertEquals(root.getList("DASTEST2.CITY").size(), 2);
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase8()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig8.xml"), getConnection());
+
+ //test case 8 - SELECT using ResultDescriptor - DASTEST2.ACCOUNT
+ //System.out.println("Result:test case 8 - SELECT using ResultDescriptor:DASTEST2.ACCOUNT");
+ assertEquals(getAccountRSDesc(das).size(), 4);
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase9()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig9.xml"), getConnection());
+ //test case 9, 11 - Implied relationship , PK when both tables in same schema DASTEST2.CUSTOMER, DASTEST2.ACCOUNT
+ //System.out.println("Result:test case 9, 11 - Implied relationship when both tables in same schema DASTEST2.CUSTOMER, DASTEST2.ACCOUNT");
+ DataObject root = getSingleSchemaCustomersAccounts(das);
+ assertEquals(root.getList("DASTEST2.CUSTOMER").size(), 2);
+ assertEquals(root.getList("DASTEST2.ACCOUNT").size(), 4);
+ //System.out.println("******************************************");
+ }
+
+ private static Date kbday;
+ private static Date tbday;
+ private static DateFormat myformat = new SimpleDateFormat("yyyy.MM.dd");
+ static {
+ try {
+ kbday = myformat.parse("1957.09.27");
+ tbday = myformat.parse("1966.12.20");
+ } catch (ParseException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void testMultiSchemaCase12()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig12.xml"), getConnection());
+ //test case 12 - use converter with multi-schema ON:DASTEST1.EMPLOYEE
+ //System.out.println("Result:test case 12 - converter on DASTEST1.EMPLOYEE.LASTNAME");
+ Command read = das.getCommand("testArbitraryConverter");
+ // Read
+ DataObject root = read.executeQuery();
+
+ // Verify
+ assertEquals(kbday,root.getDate("DASTEST1.EMPLOYEE[1]/LASTNAME"));
+
+ // Modify
+ root.setDate("DASTEST1.EMPLOYEE[1]/LASTNAME", tbday);
+ das.applyChanges(root);
+
+ // Read
+ root = read.executeQuery();
+
+ // Verify
+ assertEquals(tbday, root.getDate("DASTEST1.EMPLOYEE[1]/LASTNAME"));
+
+ //System.out.println("******************************************");
+ }
+
+ public void testMultiSchemaCase13()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig13.xml"), getConnection());
+
+ //Explicit relationship between DASTEST1.CUSTOMER and DASTEST2.ACCOUNT
+ //System.out.println("Result:test case13 - Explicit relationship when both tables in different schema DASTEST1.CUSTOMER, DASTEST2.ACCOUNT");
+ // Read some customers and related accounts
+ Command select = das
+ .createCommand("SELECT * FROM DASTEST1.CUSTOMER LEFT JOIN DASTEST2.ACCOUNT "+
+ " ON DASTEST1.CUSTOMER.ID = DASTEST2.ACCOUNT.CUSTOMER_ID");
+
+ DataObject root = select.executeQuery();
+
+ DataObject cust1 = root.getDataObject("DASTEST1_CUSTOMER[1]");
+ DataObject cust2 = root.getDataObject("DASTEST1_CUSTOMER[2]");
+
+ // Save IDs
+ Integer cust1ID = (Integer) cust1.get("ID");
+ Integer cust2ID = (Integer) cust2.get("ID");
+
+ //System.out.println("cust 1 ID :"+cust1ID);
+ //System.out.println("cust 2 ID :"+cust2ID);
+ // save account count
+ Integer cust1AccountCount = Integer.valueOf(cust1.getList("accounts").size());
+ Integer cust2AccountCount = Integer.valueOf(cust2.getList("accounts").size());
+
+ // Move an account to cust1 from cust2
+ DataObject account = (DataObject) cust2.getList("accounts").get(0);
+ cust1.getList("accounts").add(account);
+
+ // Flush changes
+ das.applyChanges(root);
+
+ // verify cust1 relationship updates
+ select = das
+ .createCommand("SELECT * FROM DASTEST1.CUSTOMER LEFT JOIN DASTEST2.ACCOUNT ON "
+ + "DASTEST1.CUSTOMER.ID = DASTEST2.ACCOUNT.CUSTOMER_ID where DASTEST1.CUSTOMER.ID = ?");
+ select.setParameter(1, cust1ID);
+
+ root = select.executeQuery();
+ assertEquals((cust1AccountCount.intValue() + 1), root.getList("DASTEST1_CUSTOMER[1]/accounts").size());
+
+ // verify cust2 relationship updates
+ select.setParameter(1, cust2ID);
+ root = select.executeQuery();
+ assertEquals((cust2AccountCount.intValue() - 1),root.getList("DASTEST1_CUSTOMER[1]/accounts").size());
+ //System.out.println("******************************************");
+ }
+
+ //steer away from implied relationships - we dont support multi schema there!!!
+ public void testMultiSchemaCase14()throws Exception{
+ DAS das = DAS.FACTORY.createDAS(getConfig("MultiSchemaDasConfig14.xml"), getConnection());
+
+ //Explicit compound key relationship between DASTEST1.ORDERDETAILS and DASTEST3.ORDERDETAILSDESC
+ //ORDERID <-> ORDERID, PRODUCTID<->PRODUCTID
+ //System.out.println("Result:test case14 - Explicit compound key relationship when both " +
+ // "tables in different schema DASTEST1.ORDERDETAILS, DASTEST3.ORDERDETAILSDESC");
+
+ // Read some order details and related order details descs
+ Command select = das
+ .createCommand("SELECT * FROM DASTEST1.ORDERDETAILS LEFT JOIN DASTEST3.ORDERDETAILSDESC " +
+ " ON DASTEST1.ORDERDETAILS.ORDERID = DASTEST3.ORDERDETAILSDESC.ORDERID " +
+ " AND DASTEST1.ORDERDETAILS.PRODUCTID = DASTEST3.ORDERDETAILSDESC.PRODUCTID");
+
+ DataObject root = select.executeQuery();
+
+ DataObject ordDet1 = root.getDataObject("DASTEST1.ORDERDETAILS[1]");
+ DataObject ordDet2 = root.getDataObject("DASTEST1.ORDERDETAILS[2]");
+
+ // Save IDs
+ Integer ord1ID = (Integer) ordDet1.get("ORDERID");
+ Integer prod1ID = (Integer) ordDet1.get("PRODUCTID");
+
+ Integer ord2ID = (Integer) ordDet2.get("ORDERID");
+ Integer prod2ID = (Integer) ordDet2.get("PRODUCTID");
+
+ // save order count
+ Integer order1DetDescCount = Integer.valueOf(ordDet1.getList("orderDetailsDesc").size());
+ Integer order2DetDescCount = Integer.valueOf(ordDet2.getList("orderDetailsDesc").size());
+
+ // Move an order detail desc to ord det1 from ord det2
+ DataObject orderDetailsDesc = (DataObject) ordDet2.getList("orderDetailsDesc").get(0);
+ ordDet1.getList("orderDetailsDesc").add(orderDetailsDesc);
+
+ // Flush changes
+ das.applyChanges(root);
+
+ // verify ord det1 relationship updates
+ select = das
+ .createCommand("SELECT * FROM DASTEST1.ORDERDETAILS LEFT JOIN DASTEST3.ORDERDETAILSDESC " +
+ " ON DASTEST1.ORDERDETAILS.ORDERID = DASTEST3.ORDERDETAILSDESC.ORDERID " +
+ " AND DASTEST1.ORDERDETAILS.PRODUCTID = DASTEST3.ORDERDETAILSDESC.PRODUCTID " +
+ " where DASTEST1.ORDERDETAILS.ORDERID = ? AND DASTEST1.ORDERDETAILS.PRODUCTID = ?");
+ select.setParameter(1, ord1ID);
+ select.setParameter(2, prod1ID);
+
+ root = select.executeQuery();
+ assertEquals((order1DetDescCount.intValue() + 1),
+ root.getList("DASTEST1.ORDERDETAILS[1]/orderDetailsDesc").size());
+
+ // verify ord det2 relationship updates
+ select.setParameter(1, ord2ID);
+ select.setParameter(2, prod2ID);
+
+ root = select.executeQuery();
+ assertEquals((order2DetDescCount.intValue() - 1),
+ root.getList("DASTEST1.ORDERDETAILS[1]/orderDetailsDesc").size());
+ }
+
+ /**
+ * Display result
+ * @param list
+ * @param numCols - number of columns in each row
+ */
+ public static void printList(List list, int numCols){
+ if(list != null)
+ System.out.println("list size:"+list.size());
+
+ for(int i=0; i<list.size(); i++){
+ for(int j=0; j<numCols; j++){
+ System.out.print(" col"+(j+1)+":"+(((DataObject)list.get(i)).getString(j)) );
+ }
+ System.out.println();
+ }
+ }
+
+ public static void printMultiSchemaList(DataObject root, String[] lists, String[] cols){
+ if(lists != null && cols != null){
+ if(lists.length != cols.length) return;
+
+ for(int ii=0; ii<lists.length; ii++){
+ List list = root.getList(lists[ii]);
+ printList(list, Integer.parseInt(cols[ii]));
+ }
+ }
+ }
+
+ /**********START TEST CASE 1***********************************************/
+ /**
+ * select
+ * @return
+ */
+ public final List getCustomers(DAS das) {
+
+ Command read = das.getCommand("SelectDASTEST1CUSTOMER");
+ DataObject root = read.executeQuery();
+ return root.getList("DASTEST1_CUSTOMER");
+ }
+ /**
+ * insert
+ *
+ */
+ public final void addCustomer(DAS das){
+ Command insert = das.getCommand("InsertDASTEST1CUSTOMER");
+ insert.execute();
+ }
+
+ public final void addSDOCustomer(DAS das){
+ Command read = das.getCommand("SelectDASTEST1CUSTOMER");
+ DataObject root = read.executeQuery();
+
+ DataObject newCustomer = root.createDataObject("DASTEST1_CUSTOMER");
+
+ newCustomer.setInt("ID", 5);
+ newCustomer.setString("LASTNAME", "PennyDAS");
+ newCustomer.setString("ADDRESS", "HSRDAS");
+
+ das.applyChanges(root);
+ root = read.executeQuery();
+ }
+
+ /**
+ * delete
+ *
+ */
+ public final void deleteCustomer(DAS das){
+ Command delete = das.getCommand("DeleteDASTEST1CUSTOMER");
+ delete.execute();
+ }
+
+ public final void deleteSDOCustomer(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST1CUSTOMER");
+ DataObject root = readAll.executeQuery();
+
+ List allCustomers = root.getList("DASTEST1_CUSTOMER");
+
+ DataObject lastCustomer = (DataObject)allCustomers.get(allCustomers.size()-1);
+ if(lastCustomer != null){
+ //System.out.println("Deleting customer named: " + lastCustomer.getString("LASTNAME"));
+ lastCustomer.delete();
+ }
+
+ das.applyChanges(root);
+ }
+
+ /**
+ * update
+ *
+ */
+ public final void changeFirstCustomerName(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST1CUSTOMER");
+ DataObject root = readAll.executeQuery();
+
+ DataObject firstCustomer = root.getDataObject("DASTEST1_CUSTOMER[1]");
+ firstCustomer.set("LASTNAME", "Williams");
+
+ das.applyChanges(root);
+ }
+ /**********END TEST CASE 1***********************************************/
+
+ /**********START TEST CASE 2***********************************************/
+ /**
+ * select
+ * @return
+ */
+ public final List getAccounts(DAS das){
+ Command read = das.getCommand("SelectDASTEST2ACCOUNT");
+ DataObject root = read.executeQuery();
+ return root.getList("DASTEST2.ACCOUNT");
+ }
+ /**
+ * insert
+ *
+ */
+ public final void addAccount(DAS das){
+ Command insert = das.getCommand("InsertDASTEST2ACCOUNT");
+ insert.execute();
+ }
+
+ public final void addSDOAccount(DAS das){
+ Command read = das.getCommand("SelectDASTEST2ACCOUNT");
+ DataObject root = read.executeQuery();
+
+ List custList = root.getList("DASTEST1_CUSTOMER");
+ DataObject curCust = null;
+ for(int i=0; i<custList.size(); i++){
+ curCust = (DataObject)custList.get(i);
+ if(curCust.getInt("ID") == 2) {
+ break;
+ }
+ }
+
+ List acctList = null;
+ if(curCust != null){
+ acctList = curCust.getList("accounts");
+
+ DataObject newAccount = root.createDataObject("DASTEST2.ACCOUNT");
+ newAccount.setInt("ACCOUNT_ID", 60);
+ //newAccount.setInt("CUSTOMER_ID", 2); - taken from parent, so dont set here,else will throw exception
+ newAccount.setInt("BALANCE",104);
+
+ acctList.add(newAccount);
+ das.applyChanges(root);
+ }
+ }
+
+ /**
+ * delete
+ *
+ */
+ public final void deleteAccount(DAS das){
+ Command delete = das.getCommand("DeleteDASTEST2ACCOUNT");
+ delete.execute();
+ }
+
+ public final void deleteSDOAccount(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST2ACCOUNT");
+ DataObject root = readAll.executeQuery();
+
+ List custList = root.getList("DASTEST1_CUSTOMER");
+
+ DataObject curCust = null;
+ for(int i=0; i<custList.size(); i++){
+ curCust = (DataObject)custList.get(i);
+ if(curCust.getInt("ID") == 2) {
+ break;
+ }
+ }
+
+ List acctList = null;
+ if(curCust != null){
+ acctList = curCust.getList("accounts");
+ if(acctList != null){
+ ((DataObject)acctList.get(acctList.size()-1)).delete();
+ }
+ }
+
+ das.applyChanges(root);
+ }
+
+ /**
+ * update
+ *
+ */
+ public final void changeFirstAccountBalance(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST2ACCOUNT");
+ DataObject root = readAll.executeQuery();
+
+ DataObject firstAccount = root.getDataObject("DASTEST2.ACCOUNT[1]");
+ firstAccount.set("BALANCE", 45000);
+
+ das.applyChanges(root);
+ }
+ /**********END TEST CASE 2***********************************************/
+
+ /**********START TEST CASE 3***********************************************/
+ /**
+ * select
+ * @return
+ */
+ public final List getCities(DAS das){
+ Command read = das.getCommand("SelectDASTEST1CITY");
+ DataObject root = read.executeQuery();
+ return root.getList("DASTEST1.CITY");
+ }
+ /**
+ * insert
+ *
+ */
+ public final void addCity(DAS das){
+ Command insert = das.getCommand("InsertDASTEST1CITY");
+ insert.execute();
+ }
+
+ public final String addSDOCity(DAS das){
+ Command read = das.getCommand("SelectDASTEST1CITY");
+ DataObject root = read.executeQuery();
+
+ DataObject newCity = root.createDataObject("DASTEST1.CITY");
+ newCity.setInt("INDX", 3);
+ newCity.setString("NAME", "San Jose");
+
+ try{
+ das.applyChanges(root);
+ }catch(Exception e){
+ if(e.getMessage().equals("Table DASTEST1.CITY was changed in the DataGraph but is not present in the Config")){
+ //ignore
+ return "Expected failure to insert";
+ }
+ else{
+ throw new RuntimeException(e);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * delete
+ *
+ */
+ public final void deleteCity(DAS das){
+ Command delete = das.getCommand("DeleteDASTEST1CITY");
+ delete.execute();
+ }
+
+ public final String deleteSDOCity(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST1CITY");
+ DataObject root = readAll.executeQuery();
+
+ List allCities = root.getList("DASTEST1.CITY");
+
+ DataObject lastCity = (DataObject)allCities.get(allCities.size()-1);
+ if(lastCity != null){
+ //System.out.println("Deleting city: " + lastCity.getString("NAME"));
+ lastCity.delete();
+ }
+
+ try{
+ das.applyChanges(root);
+ }catch(Exception e){
+ if(e.getMessage().equals("Table DASTEST1.CITY was changed in the DataGraph but is not present in the Config")){
+ //ignore
+ return "Expected failure to delete";
+ }
+ else{
+ throw new RuntimeException(e);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * update
+ *
+ */
+ public final String changeFirstCityName(DAS das) {
+ Command readAll = das.getCommand("SelectDASTEST1CITY");
+ DataObject root = readAll.executeQuery();
+
+ DataObject firstCity = root.getDataObject("DASTEST1.CITY[1]");
+ firstCity.set("NAME", "New York");
+
+ try{
+ das.applyChanges(root);
+ }catch(Exception e){
+ if(e.getMessage().equals("Table DASTEST1.CITY was changed in the DataGraph but is not present in the Config")){
+ //ignore
+ return "Expected failure to update";
+ }
+ else{
+ throw new RuntimeException(e);
+ }
+ }
+ return null;
+ }
+ /**********END TEST CASE 3***********************************************/
+ /**********START TEST CASE 5***********************************************/
+ public final DataObject getCustomersFrom2SchemasWithOneSchemaNotInConfig(DAS das) {
+ Command read = das.getCommand("Select2SchemasWithOneSchemaNotInConfig");
+ DataObject root = read.executeQuery();
+ return root;
+ }
+ /**********END TEST CASE 5***********************************************/
+
+ /**********START TEST CASE 6***********************************************/
+
+ public final DataObject getCustomersFrom2SchemasBothSchemaInConfig(DAS das) {
+
+ Command read = das.getCommand("Select2IDsBothInConfig");
+ DataObject root = read.executeQuery();
+ return root;
+ }
+
+ /**********END TEST CASE 6***********************************************/
+ /**********START TEST CASE 7***********************************************/
+ public final DataObject getCitiesFrom2SchemasNoneInConfig(DAS das){
+ Command read = das.getCommand("Select2CitiesNoneInConfig");
+ DataObject root = read.executeQuery();
+ return root;
+ }
+ /**********END TEST CASE 7***********************************************/
+ /**********START TEST CASE 8***********************************************/
+
+ public final List getAccountRSDesc(DAS das){
+ Command read = das.getCommand("ResultDescriptorAccountSelect");
+ DataObject root = read.executeQuery();
+ return root.getList("DASTEST2.ACCOUNT");
+ }
+ /**********END TEST CASE 8***********************************************/
+
+ /**********START TEST CASE 9***********************************************/
+
+ public final DataObject getSingleSchemaCustomersAccounts(DAS das){
+ Command read = das.getCommand("ImpliedRelationshipSelect");
+ DataObject root = read.executeQuery();
+ return root;
+ }
+ /**********END TEST CASE 9***********************************************/
+}
Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java Fri May 25 02:29:02 2007
@@ -379,7 +379,7 @@
try {
helper.addPrimaryKey("PK");
} catch (RuntimeException ex) {
- assertEquals ("Column PK must be qualified with a table name", ex.getMessage());
+ this.assertEquals ("Column PK must be qualified with a table name and optional schema name", ex.getMessage());
}
}
}
Added: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/MultiSchemaData.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/MultiSchemaData.java?view=auto&rev=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/MultiSchemaData.java (added)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/data/MultiSchemaData.java Fri May 25 02:29:02 2007
@@ -0,0 +1,80 @@
+package org.apache.tuscany.das.rdb.test.data;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+//JIRA-952
+public class MultiSchemaData {
+ Connection con;
+
+ public MultiSchemaData(Connection connection){
+ this.con = connection;
+ }
+
+ public void refresh() throws SQLException{
+ //System.out.println("Inserting data in multi schema tables");
+ Statement s = this.con.createStatement();
+
+ String[] statements = {
+ "DELETE FROM DASTEST1.CUSTOMER",
+ "DELETE FROM DASTEST1.EMPLOYEE",
+ "DELETE FROM DASTEST1.CITY",
+ "DELETE FROM DASTEST1.ORDERDETAILS",
+ "DELETE FROM DASTEST2.CUSTOMER",
+ "DELETE FROM DASTEST2.CITY",
+ "DELETE FROM DASTEST2.ACCOUNT",
+ "DELETE FROM DASTEST3.CUSTOMER",
+ "DELETE FROM DASTEST3.CUSTORDER",
+ "DELETE FROM DASTEST3.ORDERDETAILSDESC",
+
+ "INSERT INTO DASTEST1.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (1,'Williams','USA')",
+ "INSERT INTO DASTEST1.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (2,'Amita1','INDIA')",
+ "INSERT INTO DASTEST1.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (3,'Patrick1','UK')",
+
+ "INSERT INTO DASTEST1.EMPLOYEE (ID, LASTNAME, ADDRESS) VALUES (1,'Williams','USA')",
+ "INSERT INTO DASTEST1.EMPLOYEE (ID, LASTNAME, ADDRESS) VALUES (2,'Amita1','INDIA')",
+ "INSERT INTO DASTEST1.EMPLOYEE (ID, LASTNAME, ADDRESS) VALUES (3,'Patrick1','UK')",
+
+ "INSERT INTO DASTEST2.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (1,'John2','USA')",
+ "INSERT INTO DASTEST2.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (2,'Amita2','INDIA')",
+ "INSERT INTO DASTEST2.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (3,'Patrick2','UK')",
+
+ "INSERT INTO DASTEST3.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (1,'JohnAdm','USA')",
+ "INSERT INTO DASTEST3.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (2,'AmitaAdm','INDIA')",
+ "INSERT INTO DASTEST3.CUSTOMER (ID, LASTNAME, ADDRESS) VALUES (3,'PatrickAdm','UK')",
+
+ "INSERT INTO DASTEST1.CITY (INDX, NAME) VALUES (1,'Fremont')",
+ "INSERT INTO DASTEST1.CITY (INDX, NAME) VALUES (2,'Belmont')",
+
+ "INSERT INTO DASTEST2.CITY (INDX, NAME) VALUES (1,'Milipitas')",
+ "INSERT INTO DASTEST2.CITY (INDX, NAME) VALUES (2,'Newark')",
+
+ "INSERT INTO DASTEST2.ACCOUNT (ACCOUNT_ID, CUSTOMER_ID, BALANCE) VALUES (10, 1, 101)",
+ "INSERT INTO DASTEST2.ACCOUNT (ACCOUNT_ID, CUSTOMER_ID, BALANCE) VALUES (20, 1, 202)",
+ "INSERT INTO DASTEST2.ACCOUNT (ACCOUNT_ID, CUSTOMER_ID, BALANCE) VALUES (30, 2, 303)",
+ "INSERT INTO DASTEST2.ACCOUNT (ACCOUNT_ID, CUSTOMER_ID, BALANCE) VALUES (40, 2, 404)",
+
+ "INSERT INTO DASTEST3.CUSTORDER (ORDER_ID, CUSTOMER_ID, ORDER_COUNT) VALUES (100,1,150)",
+ "INSERT INTO DASTEST3.CUSTORDER (ORDER_ID, CUSTOMER_ID, ORDER_COUNT) VALUES (200,1,250)",
+ "INSERT INTO DASTEST3.CUSTORDER (ORDER_ID, CUSTOMER_ID, ORDER_COUNT) VALUES (300,2,150)",
+ "INSERT INTO DASTEST3.CUSTORDER (ORDER_ID, CUSTOMER_ID, ORDER_COUNT) VALUES (400,2,250)",
+
+ "INSERT INTO DASTEST1.ORDERDETAILS (ORDERID, PRODUCTID, PRICE) VALUES (1,1,101)",
+ "INSERT INTO DASTEST1.ORDERDETAILS (ORDERID, PRODUCTID, PRICE) VALUES (1,2,102)",
+ "INSERT INTO DASTEST1.ORDERDETAILS (ORDERID, PRODUCTID, PRICE) VALUES (2,1,201)",
+ "INSERT INTO DASTEST1.ORDERDETAILS (ORDERID, PRODUCTID, PRICE) VALUES (2,2,202)",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (10,1,1, 'DESC 10,1,1')",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (20,1,1, 'DESC 20,1,1')",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (30,1,2, 'DESC 30,1,2')",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (40,1,2, 'DESC 40,1,2')",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (50,2,1, 'DESC 50,2,1')",
+ "INSERT INTO DASTEST3.ORDERDETAILSDESC (ID, ORDERID, PRODUCTID, DESCR) VALUES (60,2,2, 'DESC 60,2,2')"
+ };
+
+ for (int i = 0; i < statements.length; i++) {
+ s.execute(statements[i]);
+ }
+ s.close();
+ //System.out.println("Multi schema database setup complete!");
+ }
+}
Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/framework/DatabaseSetup.java Fri May 25 02:29:02 2007
@@ -106,7 +106,9 @@
dropSequences();
dropTables();
dropProcedures();
+ dropSchema();//JIRA-952
+ createSchema();//JIRA-952
createSequences();
createTables();
createTriggers();
@@ -125,6 +127,26 @@
}
+ //JIRA-952
+ private void dropSchema(){
+ String[] statements = {"DROP SCHEMA DASTEST1 RESTRICT",
+ "DROP SCHEMA DASTEST2 RESTRICT",
+ "DROP SCHEMA DASTEST3 RESTRICT",
+ };
+
+ for (int i = 0; i < statements.length; i++) {
+ try {
+ s.execute(statements[i]);
+ } catch (SQLException e) {
+ // If the table does not exist then ignore the exception on drop
+ if ((!e.getMessage().contains("does not exist")) && (!e.getMessage().contains("Unknown table"))
+ && (!e.getMessage().contains("42704"))) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ }
+
private void dropTables() {
String[] statements = {
@@ -134,7 +156,13 @@
"DROP TABLE PART", "DROP TABLE TYPETEST", "DROP TABLE CITIES",
"DROP TABLE STATES", "DROP TABLE conmgt.SERVERSTATUS",
"DROP TABLE DOG", "DROP TABLE OWNER", "DROP TABLE KENNEL",
- "DROP TABLE VISIT"
+ "DROP TABLE VISIT",
+ "DROP TABLE DASTEST1.CUSTOMER" ,"DROP TABLE DASTEST2.CUSTOMER","DROP TABLE DASTEST3.CUSTOMER",
+ "DROP TABLE DASTEST1.CITY", "DROP TABLE DASTEST2.CITY",
+ "DROP TABLE DASTEST2.ACCOUNT",
+ "DROP TABLE DASTEST3.CUSTORDER",
+ "DROP TABLE DASTEST3.ORDERDETAILSDESC", "DROP TABLE DASTEST1.ORDERDETAILS",
+ "DROP TABLE DASTEST1.EMPLOYEE"
};
for (int i = 0; i < statements.length; i++) {
@@ -190,6 +218,18 @@
}
}
+ //JIRA-952
+ private void createSchema() {
+ // System.out.println("Creating schema");
+ try {
+
+ s.execute("CREATE SCHEMA DASTEST1");
+ s.execute("CREATE SCHEMA DASTEST2");
+ s.execute("CREATE SCHEMA DASTEST3");
+ }catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
private void createTables() {
// System.out.println("Creating tables");
@@ -215,7 +255,19 @@
s.execute(getCreateKennel());
s.execute(getCreateVisit());
s.execute(getCreateOrderDetailsDesc());//JIRA-841
-
+
+ //JIRA-952 start
+ s.execute(getCreateDASTEST1Customer());
+ s.execute(getCreateDASTEST1Employee());
+ s.execute(getCreateDASTEST2Customer());
+ s.execute(getCreateDASTEST3Customer());
+ s.execute(getCreateDASTEST1City());
+ s.execute(getCreateDASTEST2City());
+ s.execute(getCreateDASTEST2Account());
+ s.execute(getCreateDASTEST3CustOrder());
+ s.execute(getCreateDASTEST1OrderDetails());
+ s.execute(getCreateDASTEST3OrderDetailsDesc());
+ //JIRA-952 end
} catch (SQLException e) {
throw new RuntimeException(e);
}
@@ -372,7 +424,65 @@
return "CREATE TABLE ORDERDETAILSDESC ("+ getIntegerColumn("ID") + " NOT NULL, " + getIntegerColumn("ORDERID") + " NOT NULL, "
+ getIntegerColumn("PRODUCTID")
+ " NOT NULL,"+ getStringColumn("DESCR", 20)+", PRIMARY KEY (ID))";
+ }
+
+ //JIRA-952 start
+ protected String getCreateDASTEST1Customer() {
+ return "CREATE TABLE DASTEST1.CUSTOMER (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("LASTNAME", 30)
+ + " DEFAULT 'Garfugengheist', " + getStringColumn("ADDRESS", 30) + ")";
+ }
+
+ protected String getCreateDASTEST1Employee() {
+ return "CREATE TABLE DASTEST1.EMPLOYEE (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("LASTNAME", 30)
+ + " DEFAULT 'Garfugengheist', " + getStringColumn("ADDRESS", 30) + ")";
+ }
+
+ protected String getCreateDASTEST2Customer() {
+ return "CREATE TABLE DASTEST2.CUSTOMER (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("LASTNAME", 30)
+ + " DEFAULT 'Garfugengheist', " + getStringColumn("ADDRESS", 30) + ")";
+ }
+
+ protected String getCreateDASTEST3Customer() {
+ return "CREATE TABLE DASTEST3.CUSTOMER (" + getIntegerColumn("ID") + " PRIMARY KEY NOT NULL, "
+ + getStringColumn("LASTNAME", 30)
+ + " DEFAULT 'Garfugengheist', " + getStringColumn("ADDRESS", 30) + ")";
+ }
+
+ protected String getCreateDASTEST1City() {
+ return "CREATE TABLE DASTEST1.CITY (" + getIntegerColumn("INDX") + " PRIMARY KEY NOT NULL,"
+ + getStringColumn("NAME", 50) + ")";
+ }
+
+ protected String getCreateDASTEST2City() {
+ return "CREATE TABLE DASTEST2.CITY (" + getIntegerColumn("INDX") + " PRIMARY KEY NOT NULL,"
+ + getStringColumn("NAME", 50) + ")";
+ }
+
+ protected String getCreateDASTEST2Account() {
+ return "CREATE TABLE DASTEST2.ACCOUNT ("+ getIntegerColumn("ACCOUNT_ID") + " PRIMARY KEY NOT NULL," +
+ getIntegerColumn("CUSTOMER_ID") +", "+ getIntegerColumn("BALANCE") + ")";
+ }
+
+ protected String getCreateDASTEST3CustOrder() {
+ return "CREATE TABLE DASTEST3.CUSTORDER ("+ getIntegerColumn("ORDER_ID") + " PRIMARY KEY NOT NULL," +
+ getIntegerColumn("CUSTOMER_ID") +", "+getIntegerColumn("ORDER_COUNT")+ ")";
}
+
+ protected String getCreateDASTEST1OrderDetails() {
+ return "CREATE TABLE DASTEST1.ORDERDETAILS (" + getIntegerColumn("ORDERID") + " NOT NULL, "
+ + getIntegerColumn("PRODUCTID")
+ + " NOT NULL, PRICE FLOAT, PRIMARY KEY (ORDERID, PRODUCTID))";
+ }
+
+ protected String getCreateDASTEST3OrderDetailsDesc() {
+ return "CREATE TABLE DASTEST3.ORDERDETAILSDESC ("+ getIntegerColumn("ID") + " NOT NULL, " + getIntegerColumn("ORDERID") + " NOT NULL, "
+ + getIntegerColumn("PRODUCTID")
+ + " NOT NULL,"+ getStringColumn("DESCR", 20)+", PRIMARY KEY (ID))";
+ }
+ //JIRA-952 end
// /////////////////
protected String getForeignKeyConstraint(String pkTable, String pkColumn, String foreignKey) {
Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java?view=diff&rev=541596&r1=541595&r2=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/suites/AllCommonTests.java Fri May 25 02:29:02 2007
@@ -37,6 +37,7 @@
import org.apache.tuscany.das.rdb.test.GraphMergeTests;
import org.apache.tuscany.das.rdb.test.ImpliedRelationshipTests;
import org.apache.tuscany.das.rdb.test.KennelTests;
+import org.apache.tuscany.das.rdb.test.MultiSchemaTests;
import org.apache.tuscany.das.rdb.test.OCCTests;
import org.apache.tuscany.das.rdb.test.OneToOneRelationshipTests;
import org.apache.tuscany.das.rdb.test.OperationOrderingTests;
@@ -106,6 +107,7 @@
suite.addTest(new TestSuite(KennelTests.class));
suite.addTest(new TestSuite(TransactionTests.class));
+ suite.addTest(new TestSuite(MultiSchemaTests.class));
//$JUnit-END$
return suite;
Added: incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig1.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig1.xml?view=auto&rev=541596
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig1.xml (added)
+++ incubator/tuscany/java/das/rdb/src/test/resources/MultiSchemaDasConfig1.xml Fri May 25 02:29:02 2007
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you 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.
+ -->
+ <Config xmlns="http:///org.apache.tuscany.das.rdb/config.xsd" databaseSchemaNameSupported="true">
+
+ <Command name="SelectDASTEST1CUSTOMER" SQL="select * from DASTEST1.CUSTOMER" kind="Select"/>
+
+ <Command name="InsertDASTEST1CUSTOMER"
+ SQL="INSERT INTO DASTEST1.CUSTOMER VALUES (4, 'JENNYDAS', 'UKDAS')"
+ kind="Insert" />
+
+ <Command name="DeleteDASTEST1CUSTOMER"
+ SQL="DELETE FROM DASTEST1.CUSTOMER WHERE ID=4"
+ kind="Delete" />
+
+ <Table tableName="CUSTOMER" schemaName="DASTEST1" typeName="DASTEST1_CUSTOMER">
+ <Column columnName="ID" primaryKey="true"/>
+ </Table>
+
+</Config>
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org