[teiid-commits] teiid SVN: r4401 - in trunk: build/kits/jboss-as7/docs/teiid and 8 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Sep 5 22:46:12 EDT 2012


Author: shawkins
Date: 2012-09-05 22:46:11 -0400 (Wed, 05 Sep 2012)
New Revision: 4401

Modified:
   trunk/api/src/main/java/org/teiid/metadata/ColumnSet.java
   trunk/api/src/main/java/org/teiid/metadata/Table.java
   trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html
   trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPAMetadataProcessor.java
   trunk/connectors/translator-jpa/src/test/java/org/teiid/translator/jpa/TestJSelectJPQLVisitor.java
   trunk/connectors/translator-jpa/src/test/resources/sakila.ddl
   trunk/engine/src/main/java/org/teiid/query/metadata/DDLStringVisitor.java
   trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
   trunk/engine/src/test/java/org/teiid/query/metadata/TestDDLStringVisitor.java
   trunk/engine/src/test/java/org/teiid/query/metadata/TestMetadataValidator.java
   trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java
   trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java
Log:
TEIID-2187 fixing constraint parsing

Modified: trunk/api/src/main/java/org/teiid/metadata/ColumnSet.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/ColumnSet.java	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/api/src/main/java/org/teiid/metadata/ColumnSet.java	2012-09-06 02:46:11 UTC (rev 4401)
@@ -50,7 +50,7 @@
     	}
     	Map<String, Column> map = columnMap;
     	if (map == null) {
-    		map = new TreeMap<String, Column>();
+    		map = new TreeMap<String, Column>(String.CASE_INSENSITIVE_ORDER);
     		for (Column c : columns) {
 				map.put(c.getName(), c);
 			}
@@ -84,12 +84,4 @@
 		this.parent = parent;
 	}
 
-    public Column getColumn(String name) {
-    	for (Column c:columns) {
-    		if (c.getCanonicalName().equals(name.toUpperCase())) {
-    			return c;
-    		}
-    	}
-    	return null;
-    }
 }
\ No newline at end of file

Modified: trunk/api/src/main/java/org/teiid/metadata/Table.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/Table.java	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/api/src/main/java/org/teiid/metadata/Table.java	2012-09-06 02:46:11 UTC (rev 4401)
@@ -22,6 +22,7 @@
 
 package org.teiid.metadata;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -57,10 +58,10 @@
     private boolean isSystem;
     private boolean isMaterialized;
     private boolean supportsUpdate;
-    private List<ForeignKey> foriegnKeys = new LinkedList<ForeignKey>();
-    private List<KeyRecord> indexes = new LinkedList<KeyRecord>();
-    private List<KeyRecord> uniqueKeys = new LinkedList<KeyRecord>();
-    private List<KeyRecord> accessPatterns = new LinkedList<KeyRecord>();
+    private List<ForeignKey> foriegnKeys = new ArrayList<ForeignKey>(2);
+    private List<KeyRecord> indexes = new ArrayList<KeyRecord>(2);
+    private List<KeyRecord> uniqueKeys = new ArrayList<KeyRecord>(2);
+    private List<KeyRecord> accessPatterns = new ArrayList<KeyRecord>(2);
     private KeyRecord primaryKey;
 
     //view information
@@ -209,15 +210,6 @@
 		this.foriegnKeys = foriegnKeys;
 	}
     
-    public ForeignKey getForeignKey(String name) {
-    	for (ForeignKey fk:this.foriegnKeys) {
-    		if (fk.getName().equals(name)) {
-    			return fk;
-    		}
-    	}
-    	return null;
-    }
-    
     public List<KeyRecord> getIndexes() {
     	return this.indexes;
     }

Modified: trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html
===================================================================
--- trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/build/kits/jboss-as7/docs/teiid/teiid-releasenotes.html	2012-09-06 02:46:11 UTC (rev 4401)
@@ -47,7 +47,8 @@
   <li>TEIID-2166 array_get will return null if the index is out of bounds rather than raising an error.
   <li>TEIID-2175 for 8.0 and 8.1 clients the server will check if serialized date/time values fall outside of 32-bit value ranges (year 1900 - 9999 for dates and times between years 1901 and 2038) and throw an exception.  The previous behavior was
   to truncate.  The exception and the use of 32 bit serialization can be avoided by setting the system property org.teiid.longDatesTimes to true.
-  <li>TEIID-2184 to be consistent with the rest of Teiid's logic the system functions dayName and monthName will return values from the default locale, rather than only the English names.  Use the system property org.teiid.enDateNames true to revert to the pre-8.2 behavior.   
+  <li>TEIID-2184 to be consistent with the rest of Teiid's logic the system functions dayName and monthName will return values from the default locale, rather than only the English names.  Use the system property org.teiid.enDateNames true to revert to the pre-8.2 behavior.
+  <li>TEIID-2187 the CONSTRAINT keyword is not correctly used in table DDL.  It should be replaced with a comma from scripts to be compatible with 8.2.  If desired, 8.2 now supports the CONSTRAINT keyword to provide a name for each constraint.
 </ul>
 
 <h4>from 8.0</h4>

Modified: trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPAMetadataProcessor.java
===================================================================
--- trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPAMetadataProcessor.java	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPAMetadataProcessor.java	2012-09-06 02:46:11 UTC (rev 4401)
@@ -126,13 +126,13 @@
 			c.setUpdatable(true);
 			return c;
 		}
-		return entityTable.getColumn(name);
+		return entityTable.getColumnByName(name);
 	}
 	
 	private void addForiegnKey(MetadataFactory mf, String name, List<String> columnNames, String referenceTable, Table table) throws TranslatorException {
 		ForeignKey fk = mf.addForiegnKey("FK_"+name, columnNames, referenceTable, table);
 		for (String column:columnNames) {
-			Column c = table.getColumn(column);
+			Column c = table.getColumnByName(column);
 			c.setProperty(KEY_ASSOSIATED_WITH_FOREIGN_TABLE, mf.getName()+Tokens.DOT+referenceTable);
 		}
 		fk.setNameInSource(name);

Modified: trunk/connectors/translator-jpa/src/test/java/org/teiid/translator/jpa/TestJSelectJPQLVisitor.java
===================================================================
--- trunk/connectors/translator-jpa/src/test/java/org/teiid/translator/jpa/TestJSelectJPQLVisitor.java	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/connectors/translator-jpa/src/test/java/org/teiid/translator/jpa/TestJSelectJPQLVisitor.java	2012-09-06 02:46:11 UTC (rev 4401)
@@ -21,11 +21,12 @@
  */
 package org.teiid.translator.jpa;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.*;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.teiid.cdk.api.TranslationUtility;
+import org.teiid.core.util.ObjectConverterUtil;
 import org.teiid.core.util.UnitTestUtil;
 import org.teiid.language.Select;
 import org.teiid.query.metadata.TransformationMetadata;
@@ -41,7 +42,7 @@
     	jpaTranslator = new JPA2ExecutionFactory();
     	jpaTranslator.start();
     	
-    	TransformationMetadata metadata = RealMetadataFactory.fromDDL(UnitTestUtil.getTestDataFile("sakila.ddl"), "sakila", "sakila");
+    	TransformationMetadata metadata = RealMetadataFactory.fromDDL(ObjectConverterUtil.convertFileToString(UnitTestUtil.getTestDataFile("sakila.ddl")), "sakila", "sakila");
     	utility = new TranslationUtility(metadata);
     	
     }

Modified: trunk/connectors/translator-jpa/src/test/resources/sakila.ddl
===================================================================
--- trunk/connectors/translator-jpa/src/test/resources/sakila.ddl	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/connectors/translator-jpa/src/test/resources/sakila.ddl	2012-09-06 02:46:11 UTC (rev 4401)
@@ -1,16 +1,16 @@
 CREATE FOREIGN TABLE country (
   country_id integer  NOT NULL AUTO_INCREMENT,
   country varchar(50) NOT NULL,
-  last_update timestamp NOT NULL
-  CONSTRAINT PRIMARY KEY  (country_id)
+  last_update timestamp NOT NULL,
+  PRIMARY KEY  (country_id)
 );
 
 CREATE FOREIGN TABLE city (
   city_id integer  NOT NULL AUTO_INCREMENT,
   city varchar(50) NOT NULL,
   country_id integer  NOT NULL OPTIONS (assosiated_with_table 'sakila.country'),
-  last_update timestamp NOT NULL
-  CONSTRAINT PRIMARY KEY  (city_id),
+  last_update timestamp NOT NULL,
+  PRIMARY KEY  (city_id),
   FOREIGN KEY (country_id) REFERENCES country (country_id) OPTIONS(NAMEINSOURCE 'country')
 );
 
@@ -22,8 +22,8 @@
   city_id integer  NOT NULL OPTIONS (assosiated_with_table 'sakila.city'),
   postal_code varchar(10),
   phone varchar(20) NOT NULL,
-  last_update timestamp NOT NULL
-  CONSTRAINT PRIMARY KEY  (address_id),
+  last_update timestamp NOT NULL,
+  PRIMARY KEY  (address_id),
   FOREIGN KEY (city_id) REFERENCES city (city_id) OPTIONS(NAMEINSOURCE 'city')
 );
 
@@ -37,8 +37,8 @@
   active boolean NOT NULL,
   username varchar(16) NOT NULL,
   password varchar(40),
-  last_update timestamp
-  CONSTRAINT PRIMARY KEY  (staff_id),
+  last_update timestamp,
+  PRIMARY KEY  (staff_id),
   FOREIGN KEY (store_id) REFERENCES store (store_id) OPTIONS(NAMEINSOURCE 'store'),
   FOREIGN KEY (address_id) REFERENCES address (address_id) OPTIONS(NAMEINSOURCE 'address')
 );
@@ -47,8 +47,8 @@
   store_id byte  NOT NULL AUTO_INCREMENT,
   manager_staff_id byte NOT NULL OPTIONS (assosiated_with_table 'sakila.staff'),
   address_id integer NOT NULL OPTIONS (assosiated_with_table 'sakila.store'),
-  last_update timestamp NOT NULL
-  CONSTRAINT PRIMARY KEY  (store_id),
+  last_update timestamp NOT NULL,
+  PRIMARY KEY  (store_id),
   FOREIGN KEY (manager_staff_id) REFERENCES staff (staff_id) OPTIONS(NAMEINSOURCE 'staff'),
   FOREIGN KEY (address_id) REFERENCES address (address_id) OPTIONS(NAMEINSOURCE 'address')
 );
@@ -62,8 +62,8 @@
   address_id integer  NOT NULL OPTIONS (assosiated_with_table 'sakila.address'),
   active boolean NOT NULL,
   create_date timestamp NOT NULL,
-  last_update timestamp
-  constraint PRIMARY KEY  (customer_id),
+  last_update timestamp,
+  PRIMARY KEY  (customer_id),
   FOREIGN KEY (address_id) REFERENCES address (address_id) OPTIONS(NAMEINSOURCE 'address'),
   FOREIGN KEY (store_id) REFERENCES store (store_id) OPTIONS(NAMEINSOURCE 'store')
 );
\ No newline at end of file

Modified: trunk/engine/src/main/java/org/teiid/query/metadata/DDLStringVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/DDLStringVisitor.java	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/DDLStringVisitor.java	2012-09-06 02:46:11 UTC (rev 4401)
@@ -156,14 +156,7 @@
 				}
 				visit(c, table);
 			}
-			
-			// constraints
-			String contraints = buildContraints(table);
-			if (!contraints.isEmpty()) {
-				buffer.append(NEWLINE).append(TAB);
-				buffer.append(CONSTRAINT);
-				buffer.append(contraints);
-			}
+			buildContraints(table);
 			buffer.append(NEWLINE);
 			buffer.append(RPAREN);			
 		}
@@ -237,80 +230,50 @@
 		}
 	}
 	
-	private String buildContraints(Table table) {
-		StringBuilder options = new StringBuilder();
+	private void buildContraints(Table table) {
+		addConstraints(table.getAccessPatterns(), "AP", ACCESSPATTERN); //$NON-NLS-1$
 		
-		boolean first = true;
-		for (KeyRecord key:table.getAccessPatterns()) {
-			if (first) {
-				first = false;
-			}
-			else {
-				options.append(COMMA);
-			}			
-			options.append(SPACE).append(ACCESSPATTERN);
-			addColumns(options, key.getColumns(), false);
-		}
-		
-		
 		KeyRecord pk = table.getPrimaryKey();
-		if (pk != null && pk.getColumns().size() > 1) {
-			if (first) {
-				first = false;
-			}
-			else {
-				options.append(COMMA);
-			}
-			options.append(SPACE).append(PRIMARY_KEY);
-			addColumns(options, pk.getColumns(), false);
+		if (pk != null) {
+			addConstraint("PK", PRIMARY_KEY, pk); //$NON-NLS-1$
 		}
-		
-		for (KeyRecord key:table.getUniqueKeys()) {
-			if (key != null && key.getColumns().size() > 1) {
-				if (first) {
-					first = false;
-				}
-				else {
-					options.append(COMMA);
-				}
-				options.append(SPACE).append(UNIQUE);
-				addColumns(options, key.getColumns(), false);
-			}
-		}
-		
-		for (KeyRecord key:table.getIndexes()) {
-			if (key != null && key.getColumns().size() > 1) {
-				if (first) {
-					first = false;
-				}
-				else {
-					options.append(COMMA);
-				}				
-				options.append(SPACE).append(INDEX);
-				addColumns(options, key.getColumns(), false);
-			}
-		}		
 
-		for (ForeignKey key:table.getForeignKeys()) {
-			if (first) {
-				first = false;
-			}
-			else {
-				options.append(COMMA);
-			}			
-			options.append(SPACE).append(FOREIGN_KEY);
-			addColumns(options, key.getColumns(), false);
-			options.append(SPACE).append(REFERENCES);
+		addConstraints(table.getUniqueKeys(), UNIQUE, UNIQUE);
+		addConstraints(table.getIndexes(), INDEX, INDEX);
+
+		for (int i = 0; i < table.getForeignKeys().size(); i++) {
+			ForeignKey key = table.getForeignKeys().get(i);
+			addConstraint("FK" + i, FOREIGN_KEY, key); //$NON-NLS-1$
+			buffer.append(SPACE).append(REFERENCES);
 			if (key.getReferenceTableName() != null) {
-				options.append(SPACE).append(key.getReferenceTableName());
+				buffer.append(SPACE).append(key.getReferenceTableName());
 			}
-			options.append(SPACE);
-			addNames(options, key.getReferenceColumns());
+			buffer.append(SPACE);
+			addNames(buffer, key.getReferenceColumns());
 		}
-		
-		return options.toString();
 	}
 
+	private void addConstraints(List<KeyRecord> constraints, String defaultName, String type) {
+		for (int i = 0; i < constraints.size(); i++) {
+			KeyRecord constraint = constraints.get(i);
+			addConstraint(defaultName + i, type, constraint);
+		}
+	}
+
+	private void addConstraint(String defaultName, String type,
+			KeyRecord constraint) {
+		if (constraint.getType() != KeyRecord.Type.AccessPattern && constraint.getColumns().size() <= 1) {
+			return;
+		}
+		buffer.append(COMMA).append(NEWLINE).append(TAB);
+		boolean nameMatches = defaultName.equals(constraint.getName());
+		if (!nameMatches) {
+			buffer.append(CONSTRAINT).append(SPACE).append(SQLStringVisitor.escapeSinglePart(constraint.getName())).append(SPACE);	
+		}
+		buffer.append(type);
+		addColumns(buffer, constraint.getColumns(), false);
+	}
+
 	private void addColumns(StringBuilder builder, List<Column> columns, boolean includeType) {
 		builder.append(LPAREN);
 		boolean first = true;

Modified: trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
===================================================================
--- trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj	2012-09-06 02:46:11 UTC (rev 4401)
@@ -4689,6 +4689,7 @@
 	boolean view = false;
 	Command query = null;
 	Token comment = null;
+	String name = null;
 }
 {
 	<CREATE> (<FOREIGN> <TABLE> | [<VIRTUAL>] <VIEW> {view = true;}) 
@@ -4703,14 +4704,10 @@
 	}
 	[<LPAREN>
     createColumn(factory, table)
-    (LOOKAHEAD(2) <COMMA>
+    (LOOKAHEAD(3) <COMMA>
       createColumn(factory, table)
     )*	
-    [<CONSTRAINT> (primaryKeys(factory, table) | constraints(factory, table) | foreignKeys(factory, table))
-        (<COMMA>
-         (primaryKeys(factory, table) | constraints(factory, table)|foreignKeys(factory, table))
-        )*
-    ]    
+    (<COMMA>{name=null;} [<CONSTRAINT> name = id()] (primaryKeys(factory, table, name) | constraints(factory, table, name) | foreignKeys(factory, table, name)))*
     <RPAREN>]    
     [optionsClause(table, factory)
 	   {
@@ -4740,7 +4737,7 @@
 description=Defines the foreign key referential constraint.
 example={code:sql}FOREIGN KEY (a, b) REFERENCES tbl (x, y){code}
 */
-void foreignKeys(MetadataFactory factory, Table table) :
+void foreignKeys(MetadataFactory factory, Table table, String name) :
 {
 	List<String> columnNames = null;
 	String viewName = null;
@@ -4763,7 +4760,7 @@
     [pkColumnNames = getColumnNames()]
     {
 	    try{
-		    key = factory.addForiegnKey("FK"+table.getForeignKeys().size(), columnNames, pkColumnNames, viewName, table);   
+		    key = factory.addForiegnKey(name != null?name:("FK"+table.getForeignKeys().size()), columnNames, pkColumnNames, viewName, table);   
 	    } catch (TranslatorException e){
 	    	throw new ParseException(e.getMessage());
 	    }
@@ -4780,7 +4777,7 @@
 description=Defines the primary key.
 example={code:sql}PRIMARY KEY (a, b){code}
 */
-void primaryKeys(MetadataFactory factory, Table table) :
+void primaryKeys(MetadataFactory factory, Table table, String name) :
 {
 	List<String> columnNames = null;
 	Column column = null;
@@ -4797,7 +4794,7 @@
 	    	throw new ParseException(QueryPlugin.Util.getString("SQLParser.pk_exists", table.getName()));
 	 	}
 	 	try{
-	 		key = factory.addPrimaryKey("PK", columnNames, table);
+	 		key = factory.addPrimaryKey(name!=null?name:"PK", columnNames, table);
 	 	} catch(TranslatorException e){
 	 		throw new ParseException(e.getMessage());
 	 	}
@@ -4814,7 +4811,7 @@
 description=Defines ACCESSPATTERN and UNIQUE constraints and INDEXes. 
 example={code:sql}UNIQUE (a){code}
 */
-void constraints(MetadataFactory factory, Table table) :
+void constraints(MetadataFactory factory, Table table, String name) :
 {
 	KeyRecord keyrecord = null;
 	Column column = null;
@@ -4824,21 +4821,19 @@
 }
 {
 	( type = <UNIQUE> | type = <INDEX> | type = <ACCESSPATTERN>)
-    {
+	{
 	    columnNames = getColumnNames();	    
 	    for (String col: columnNames) {
 	    	column = getColumn(col, table);
 	    }
 	    try{
 	    	if (type.image.equalsIgnoreCase("INDEX")) { 
-	    		key = factory.addIndex("INDEX"+table.getIndexes().size(), true, columnNames, table);
+	    		key = factory.addIndex(name != null?name:("INDEX"+table.getIndexes().size()), true, columnNames, table);
+	    	} else if (type.image.equalsIgnoreCase("UNIQUE")) { 
+	    		key = factory.addIndex(name != null?name:("UNIQUE"+table.getUniqueKeys().size()), false, columnNames, table);
+	    	} else if (type.image.equalsIgnoreCase("ACCESSPATTERN")) { 
+	    		key = factory.addAccessPattern(name != null?name:("AP"+table.getAccessPatterns().size()), columnNames, table);
 	    	}
-	    	if (type.image.equalsIgnoreCase("UNIQUE")) { 
-	    		key = factory.addIndex("UNIQUE"+table.getUniqueKeys().size(), false, columnNames, table);
-	    	}	    
-	    	if (type.image.equalsIgnoreCase("ACCESSPATTERN")) { 
-	    		key = factory.addAccessPattern("AP"+table.getAccessPatterns().size(), columnNames, table);
-	    	}
     	}catch(TranslatorException e){
     		throw new ParseException(e.getMessage());
     	}	    
@@ -4928,18 +4923,14 @@
 	 {
 	 	try{
 		    if (index){
-		 		factory.addIndex(element, true, columnName, table);
-		 	}
-		 	
-		    if (unique){
-		 		factory.addIndex(element, false, columnName, table);
-		 	}	 	
-		 	
-		    if (pk) {
+		 		factory.addIndex("INDEX"+table.getIndexes().size(), true, columnName, table);
+		 	} else if (unique){
+		 		factory.addIndex("UNIQUE"+table.getIndexes().size(), false, columnName, table);
+		 	} else if (pk) {
 		    	if (table.getPrimaryKey() != null) {
 		    		throw new ParseException(QueryPlugin.Util.getString("SQLParser.pk_exists", table.getName()));
 		    	}
-		 		factory.addPrimaryKey(element, columnName, table);
+		 		factory.addPrimaryKey("PK", columnName, table);
 		 	}
     	}catch(TranslatorException e){
     		throw new ParseException(e.getMessage());

Modified: trunk/engine/src/test/java/org/teiid/query/metadata/TestDDLStringVisitor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/metadata/TestDDLStringVisitor.java	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/engine/src/test/java/org/teiid/query/metadata/TestDDLStringVisitor.java	2012-09-06 02:46:11 UTC (rev 4401)
@@ -78,10 +78,10 @@
 		e6.setDefaultValue("hello");
 		
 		mf.addPrimaryKey("PK", Arrays.asList("e1"), table);
-		mf.addIndex("UK", false, Arrays.asList("e2"), table);
-		mf.addIndex("UK2", false, Arrays.asList("e3"), table);
-		mf.addIndex("IDX", true, Arrays.asList("e5"), table);
-		mf.addIndex("IDX2", true, Arrays.asList("e6"), table);
+		mf.addIndex("UNIQUE0", false, Arrays.asList("e2"), table);
+		mf.addIndex("UNIQUE1", false, Arrays.asList("e3"), table);
+		mf.addIndex("INDEX0", true, Arrays.asList("e5"), table);
+		mf.addIndex("INDEX1", true, Arrays.asList("e6"), table);
 		
 		Map<String, String> options = new HashMap<String, String>();
 		options.put("CARDINALITY", "12");
@@ -97,45 +97,45 @@
 	
 	@Test
 	public void testMultiKeyPK() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date CONSTRAINT PRIMARY KEY (e1, e2))";
+		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date, PRIMARY KEY (e1, e2))";
 		String expected = "CREATE FOREIGN TABLE G1 (\n" + 
 				"	e1 integer,\n" + 
 				"	e2 string,\n" + 
-				"	e3 date\n" + 
-				"	CONSTRAINT PRIMARY KEY(e1, e2)\n" + 
+				"	e3 date,\n" + 
+				"	PRIMARY KEY(e1, e2)\n" + 
 				");";
 		helpTest(ddl, expected);
 	}	
 	
 	@Test
 	public void testConstraints2() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date CONSTRAINT " +
+		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date, " +
 				"ACCESSPATTERN(e1), UNIQUE(e1), ACCESSPATTERN(e2, e3))";
 		String expected = "CREATE FOREIGN TABLE G1 (\n" + 
 				"	e1 integer UNIQUE,\n" + 
 				"	e2 string,\n" + 
-				"	e3 date\n" + 
-				"	CONSTRAINT ACCESSPATTERN(e1), ACCESSPATTERN(e2, e3)\n" + 
+				"	e3 date,\n" + 
+				"	ACCESSPATTERN(e1),\n	ACCESSPATTERN(e2, e3)\n" + 
 				");";
 		helpTest(ddl, expected);
 	}		
 	
 	@Test
 	public void testFK() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1(\"g1-e1\" integer, g1e2 varchar CONSTRAINT PRIMARY KEY(\"g1-e1\", g1e2));\n" +
-				"CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar CONSTRAINT " +
+		String ddl = "CREATE FOREIGN TABLE G1(\"g1-e1\" integer, g1e2 varchar, PRIMARY KEY(\"g1-e1\", g1e2));\n" +
+				"CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar, " +
 				"FOREIGN KEY (g2e1, g2e2) REFERENCES G1 (g1e1, g1e2))";
 		
 		String expected = "CREATE FOREIGN TABLE G1 (\n" + 
 				"	\"g1-e1\" integer,\n" + 
-				"	g1e2 string\n" + 
-				"	CONSTRAINT PRIMARY KEY(\"g1-e1\", g1e2)\n" + 
+				"	g1e2 string,\n" + 
+				"	PRIMARY KEY(\"g1-e1\", g1e2)\n" + 
 				");\n" + 
 				"\n" + 
 				"CREATE FOREIGN TABLE G2 (\n" + 
 				"	g2e1 integer,\n" + 
-				"	g2e2 string\n" + 
-				"	CONSTRAINT FOREIGN KEY(g2e1, g2e2) REFERENCES G1 (g1e1, g1e2)\n" + 
+				"	g2e2 string,\n" + 
+				"	FOREIGN KEY(g2e1, g2e2) REFERENCES G1 (g1e1, g1e2)\n" + 
 				");";
 		
 		helpTest(ddl, expected);
@@ -143,19 +143,19 @@
 	
 	@Test
 	public void testOptionalFK() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE \"G1+\"(g1e1 integer, g1e2 varchar CONSTRAINT PRIMARY KEY(g1e1, g1e2));\n" +
-				"CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar CONSTRAINT PRIMARY KEY(g2e1, g2e2)," +
+		String ddl = "CREATE FOREIGN TABLE \"G1+\"(g1e1 integer, g1e2 varchar, PRIMARY KEY(g1e1, g1e2));\n" +
+				"CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar, PRIMARY KEY(g2e1, g2e2)," +
 				"FOREIGN KEY (g2e1, g2e2) REFERENCES G1)";
 		String expected = "CREATE FOREIGN TABLE \"G1+\" (\n" + 
 				"	g1e1 integer,\n" + 
-				"	g1e2 string\n" + 
-				"	CONSTRAINT PRIMARY KEY(g1e1, g1e2)\n" + 
+				"	g1e2 string,\n" + 
+				"	PRIMARY KEY(g1e1, g1e2)\n" + 
 				");\n" + 
 				"\n" + 
 				"CREATE FOREIGN TABLE G2 (\n" + 
 				"	g2e1 integer,\n" + 
-				"	g2e2 string\n" + 
-				"	CONSTRAINT PRIMARY KEY(g2e1, g2e2), FOREIGN KEY(g2e1, g2e2) REFERENCES G1 \n" + 
+				"	g2e2 string,\n" + 
+				"	PRIMARY KEY(g2e1, g2e2),\n	FOREIGN KEY(g2e1, g2e2) REFERENCES G1 \n" + 
 				");";
 		helpTest(ddl, expected);
 	}	

Modified: trunk/engine/src/test/java/org/teiid/query/metadata/TestMetadataValidator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/metadata/TestMetadataValidator.java	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/engine/src/test/java/org/teiid/query/metadata/TestMetadataValidator.java	2012-09-06 02:46:11 UTC (rev 4401)
@@ -178,8 +178,8 @@
 	
 	@Test
 	public void testCrossReferenceFK() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar CONSTRAINT PRIMARY KEY(g1e1, g1e2));";
-		String ddl2 = "CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar CONSTRAINT PRIMARY KEY(g2e1, g2e2), FOREIGN KEY (g2e1, g2e2) REFERENCES pm1.G1(g1e1, g1e2))";		
+		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar, PRIMARY KEY(g1e1, g1e2));";
+		String ddl2 = "CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar, PRIMARY KEY(g2e1, g2e2), FOREIGN KEY (g2e1, g2e2) REFERENCES pm1.G1(g1e1, g1e2))";		
 		
 		buildModel("pm1", true, this.vdb, this.store, ddl);
 		buildModel("pm2", true, this.vdb, this.store, ddl2);
@@ -197,8 +197,8 @@
 	
 	@Test
 	public void testCrossReferenceFKFromUniqueKey() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar CONSTRAINT UNIQUE(g1e2));";
-		String ddl2 = "CREATE FOREIGN TABLE G2(g2e1 integer, g2e2 varchar CONSTRAINT FOREIGN KEY (g2e2) REFERENCES pm1.G1(g1e2))";		
+		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar, UNIQUE(g1e2));";
+		String ddl2 = "CREATE FOREIGN TABLE G2(g2e1 integer, g2e2 varchar, FOREIGN KEY (g2e2) REFERENCES pm1.G1(g1e2))";		
 		
 		buildModel("pm1", true, this.vdb, this.store, ddl);
 		buildModel("pm2", true, this.vdb, this.store, ddl2);
@@ -216,8 +216,8 @@
 
 	@Test
 	public void testCrossReferenceResoveOptionalFK() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar CONSTRAINT PRIMARY KEY(g1e1, g1e2));";
-		String ddl2 = "CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar CONSTRAINT FOREIGN KEY (g2e1, g2e2) REFERENCES pm1.G1)";		
+		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar, PRIMARY KEY(g1e1, g1e2));";
+		String ddl2 = "CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar, FOREIGN KEY (g2e1, g2e2) REFERENCES pm1.G1)";		
 		
 		buildModel("pm1", true, this.vdb, this.store, ddl);
 		buildModel("pm2", true, this.vdb, this.store, ddl2);
@@ -236,8 +236,8 @@
 	@Test
 	public void testCrossReferenceFKNoPKonRefTable() throws Exception {
 		// note here the unique here does not matter for non-existent reference columns, only primary key counted.
-		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar CONSTRAINT UNIQUE(g1e1, g1e2));";
-		String ddl2 = "CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar CONSTRAINT PRIMARY KEY(g2e1, g2e2), FOREIGN KEY (g2e1, g2e2) REFERENCES pm1.G1)";		
+		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar, UNIQUE(g1e1, g1e2));";
+		String ddl2 = "CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar, PRIMARY KEY(g2e1, g2e2), FOREIGN KEY (g2e1, g2e2) REFERENCES pm1.G1)";		
 		
 		buildModel("pm1", true, this.vdb, this.store, ddl);
 		buildModel("pm2", true, this.vdb, this.store, ddl2);

Modified: trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java	2012-09-06 02:46:11 UTC (rev 4401)
@@ -22,8 +22,6 @@
  */
 import static org.junit.Assert.*;
 
-import java.io.File;
-import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -31,7 +29,6 @@
 import org.junit.Test;
 import org.teiid.adminapi.impl.ModelMetaData;
 import org.teiid.adminapi.impl.VDBMetaData;
-import org.teiid.core.util.ObjectConverterUtil;
 import org.teiid.metadata.*;
 import org.teiid.metadata.BaseColumn.NullType;
 import org.teiid.query.metadata.MetadataValidator;
@@ -146,7 +143,7 @@
 	
 	@Test
 	public void testMultiKeyPK() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date CONSTRAINT PRIMARY KEY (e1, e2))";
+		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date, PRIMARY KEY (e1, e2))";
 
 		Schema s = helpParse(ddl, "model").getSchema();
 		Map<String, Table> tableMap = s.getTables();	
@@ -159,7 +156,7 @@
 	
 	@Test
 	public void testOptionsKey() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date CONSTRAINT UNIQUE (e1) OPTIONS (CUSTOM_PROP 'VALUE'))";
+		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date, UNIQUE (e1) OPTIONS (CUSTOM_PROP 'VALUE'))";
 		Schema s = helpParse(ddl, "model").getSchema();
 		Map<String, Table> tableMap = s.getTables();	
 		
@@ -171,8 +168,8 @@
 	
 	@Test
 	public void testConstraints() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date " +
-				" CONSTRAINT PRIMARY KEY (e1, e2), INDEX(e2, e3), ACCESSPATTERN(e1), UNIQUE(e1)," +
+		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date, " +
+				" PRIMARY KEY (e1, e2), INDEX(e2, e3), ACCESSPATTERN(e1), UNIQUE(e1)," +
 				" ACCESSPATTERN(e2, e3))";
 
 		Schema s = helpParse(ddl, "model").getSchema();
@@ -191,7 +188,7 @@
 	
 	@Test
 	public void testConstraints2() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date CONSTRAINT " +
+		String ddl = "CREATE FOREIGN TABLE G1( e1 integer, e2 varchar, e3 date, " +
 				"ACCESSPATTERN(e1), UNIQUE(e1), ACCESSPATTERN(e2, e3))";
 
 		Schema s = helpParse(ddl, "model").getSchema();
@@ -218,8 +215,8 @@
 
 	@Test
 	public void testFK() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar CONSTRAINT PRIMARY KEY(g1e1, g1e2));\n" +
-				"CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar CONSTRAINT " +
+		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar, PRIMARY KEY(g1e1, g1e2));\n" +
+				"CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar, " +
 				"FOREIGN KEY (g2e1, g2e2) REFERENCES G1 (g1e1, g1e2))";
 		
 		Schema s = helpParse(ddl, "model").getSchema();
@@ -237,8 +234,8 @@
 	
 	@Test
 	public void testOptionalFK() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar CONSTRAINT PRIMARY KEY(g1e1, g1e2));\n" +
-				"CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar CONSTRAINT PRIMARY KEY(g2e1, g2e2)," +
+		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar, PRIMARY KEY(g1e1, g1e2));\n" +
+				"CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar, PRIMARY KEY(g2e1, g2e2)," +
 				"FOREIGN KEY (g2e1, g2e2) REFERENCES G1)";
 		
 		MetadataFactory s = helpParse(ddl, "model");
@@ -269,7 +266,7 @@
 	@Test
 	public void testOptionalFKFail() throws Exception {
 		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar);\n" +
-				"CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar CONSTRAINT PRIMARY KEY(g2e1, g2e2)," +
+				"CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar, PRIMARY KEY(g2e1, g2e2)," +
 				"FOREIGN KEY (g2e1, g2e2) REFERENCES G1)";
 		
 		MetadataFactory s = helpParse(ddl, "model");
@@ -297,9 +294,9 @@
 	
 	@Test
 	public void testFKAccrossSchemas() throws Exception {
-		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar CONSTRAINT PRIMARY KEY(g1e1, g1e2));\n";
+		String ddl = "CREATE FOREIGN TABLE G1(g1e1 integer, g1e2 varchar, PRIMARY KEY(g1e1, g1e2));\n";
 		
-		String ddl2 = "CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar CONSTRAINT PRIMARY KEY(g2e1, g2e2)," +
+		String ddl2 = "CREATE FOREIGN TABLE G2( g2e1 integer, g2e2 varchar, PRIMARY KEY(g2e1, g2e2)," +
 				"FOREIGN KEY (g2e1, g2e2) REFERENCES model.G1)";		
 		
 		MetadataFactory f1 = helpParse(ddl, "model");
@@ -648,12 +645,6 @@
 		return mf;
 	}
 	
-	public MetadataFactory buildMetadataFactory(File ddlFile, String model) throws IOException, ParseException {
-		MetadataFactory mf = new MetadataFactory(null, 1, model, getDataTypes(), new Properties(), null); 
-		parser.parseDDL(mf, ObjectConverterUtil.convertFileToString(ddlFile));
-		return mf;		
-	}
-	
 	public static Map<String, Datatype> getDataTypes() {
 		return SystemMetadata.getInstance().getRuntimeTypeMap();
 	}

Modified: trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java	2012-09-05 18:24:43 UTC (rev 4400)
+++ trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java	2012-09-06 02:46:11 UTC (rev 4401)
@@ -22,7 +22,6 @@
 
 package org.teiid.query.unittest;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -61,11 +60,13 @@
 import org.teiid.query.mapping.xml.MappingVisitor;
 import org.teiid.query.mapping.xml.Navigator;
 import org.teiid.query.metadata.CompositeMetadataStore;
+import org.teiid.query.metadata.MetadataValidator;
 import org.teiid.query.metadata.QueryMetadataInterface;
 import org.teiid.query.metadata.TransformationMetadata;
 import org.teiid.query.optimizer.FakeFunctionMetadataSource;
 import org.teiid.query.parser.TestDDLParser;
 import org.teiid.query.sql.lang.SPParameter;
+import org.teiid.query.validator.ValidatorReport;
 
 @SuppressWarnings("nls")
 public class RealMetadataFactory {
@@ -342,7 +343,10 @@
 				udfs.add(new FunctionTree(schema.getName(), new UDFSource(schema.getFunctions().values()), true));
 			}
 		}
-    	return new TransformationMetadata(vdbMetaData, store, null, SFM.getSystemFunctions(), udfs);
+    	TransformationMetadata metadata = new TransformationMetadata(vdbMetaData, store, null, SFM.getSystemFunctions(), udfs);
+    	vdbMetaData.addAttchment(TransformationMetadata.class, metadata);
+    	vdbMetaData.addAttchment(QueryMetadataInterface.class, metadata);
+    	return metadata;
 	}
 	
     /** 
@@ -2666,8 +2670,13 @@
 		return createTransformationMetadata(metadataStore, "example4");
 	}
 	
-	public static TransformationMetadata fromDDL(File ddlFile, String vdbName, String modelName) throws Exception {
-		MetadataFactory mf = new TestDDLParser().buildMetadataFactory(ddlFile, modelName);
-		return createTransformationMetadata(mf.asMetadataStore(), vdbName);
+	public static TransformationMetadata fromDDL(String ddl, String vdbName, String modelName) throws Exception {
+		MetadataFactory mf = TestDDLParser.helpParse(ddl, modelName);
+		TransformationMetadata tm = createTransformationMetadata(mf.asMetadataStore(), vdbName);
+    	ValidatorReport report = new MetadataValidator().validate(tm.getVdbMetaData(), tm.getMetadataStore());
+    	if (report.hasItems()) {
+    		throw new RuntimeException(report.getFailureMessage());
+    	}
+    	return tm;
 	}	
 }



More information about the teiid-commits mailing list