[teiid-commits] teiid SVN: r4067 - in trunk/engine/src: main/javacc/org/teiid/query/parser and 2 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Mon May 7 14:26:08 EDT 2012


Author: rareddy
Date: 2012-05-07 14:26:07 -0400 (Mon, 07 May 2012)
New Revision: 4067

Modified:
   trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java
   trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
   trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java
   trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java
Log:
TEIID-2032, TEIID-2033: Adding OPTIONS on KEYS

Modified: trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java	2012-05-07 18:23:09 UTC (rev 4066)
+++ trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java	2012-05-07 18:26:07 UTC (rev 4067)
@@ -359,19 +359,29 @@
 		setCommonProperties(c, props);
     	
         String v = props.remove("CASE_SENSITIVE"); //$NON-NLS-1$
-    	c.setCaseSensitive(isTrue(v));
+        if (v != null) {
+        	c.setCaseSensitive(isTrue(v));
+        }
     	
     	v = props.remove("SELECTABLE"); //$NON-NLS-1$
-    	c.setSelectable(isTrue(v));
+    	if (v != null) {
+    		c.setSelectable(isTrue(v));
+    	}
     	
     	v = props.remove("UPDATABLE"); //$NON-NLS-1$
-    	c.setUpdatable(isTrue(v));
+    	if (v != null) {
+    		c.setUpdatable(isTrue(v));
+    	}
     	
     	v = props.remove("SIGNED"); //$NON-NLS-1$
-    	c.setSigned(isTrue(v));
+    	if (v != null) {
+    		c.setSigned(isTrue(v));
+    	}
     	
     	v = props.remove("CURRENCY"); //$NON-NLS-1$
-    	c.setSigned(isTrue(v));
+    	if (v != null) {
+    		c.setSigned(isTrue(v));
+    	}
 
     	v = props.remove("FIXED_LENGTH"); //$NON-NLS-1$
     	c.setFixedLength(isTrue(v));
@@ -382,10 +392,14 @@
     	}
     	
     	v = props.remove("MIN_VALUE"); //$NON-NLS-1$
-    	c.setMinimumValue(v);
+    	if (v != null) {
+    		c.setMinimumValue(v);
+    	}
     	
     	v = props.remove("MAX_VALUE"); //$NON-NLS-1$
-    	c.setMaximumValue(v);
+    	if (v != null) {
+    		c.setMaximumValue(v);
+    	}
     	
     	v = props.remove("CHAR_OCTET_LENGTH"); //$NON-NLS-1$
     	if (v != null) {
@@ -393,7 +407,9 @@
     	}
         
     	v = props.remove("NATIVE_TYPE"); //$NON-NLS-1$
-    	c.setNativeType(v);
+    	if (v != null) {
+    		c.setNativeType(v);
+    	}
 
     	v = props.remove("RADIX"); //$NON-NLS-1$
     	if (v != null) {
@@ -411,15 +427,21 @@
     	}
     }
 
-	private void setCommonProperties(AbstractMetadataRecord c, Map<String, String> props) {
+	void setCommonProperties(AbstractMetadataRecord c, Map<String, String> props) {
 		String v = props.remove("UUID"); //$NON-NLS-1$
-		c.setUUID(v);
+		if (v != null) {
+			c.setUUID(v);
+		}
 		
     	v = props.remove("ANNOTATION"); //$NON-NLS-1$
-    	c.setAnnotation(v);
+    	if (v != null) {
+    		c.setAnnotation(v);
+    	}
 		
 		v = props.remove("NAMEINSOURCE"); //$NON-NLS-1$
-    	c.setNameInSource(v);
+		if (v != null) {
+			c.setNameInSource(v);
+		}
 	}
     
     void setTableOptions(Table table) {
@@ -427,7 +449,9 @@
     	setCommonProperties(table, props);
     	
     	String value = props.remove("MATERIALIZED"); //$NON-NLS-1$
-		table.setMaterialized(isTrue(value));
+    	if (value != null) {
+    		table.setMaterialized(isTrue(value));
+    	}
 		
 		value = props.remove("MATERIALIZED_TABLE"); //$NON-NLS-1$
 		if (value != null) {
@@ -437,7 +461,9 @@
     	}
 		
 		value = props.remove("UPDATABLE"); //$NON-NLS-1$
-		table.setSupportsUpdate(isTrue(value));
+		if (value != null) {
+			table.setSupportsUpdate(isTrue(value));
+		}
 		
     	value = props.remove("CARDINALITY"); //$NON-NLS-1$
     	if (value != null) {

Modified: trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
===================================================================
--- trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj	2012-05-07 18:23:09 UTC (rev 4066)
+++ trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj	2012-05-07 18:26:07 UTC (rev 4067)
@@ -4271,6 +4271,7 @@
 	KeyRecord pk = null;
 	Column column = null;
 	List<String> pkColumnNames = null;
+	KeyRecord key = null;
 }
 {
 	<FOREIGN> nonReserved("KEY")
@@ -4285,17 +4286,23 @@
     [pkColumnNames = getColumnNames()]
     {
 	    try{
-		    factory.addForiegnKey("FK"+table.getForeignKeys().size(), columnNames, pkColumnNames, viewName, table);   
+		    key = factory.addForiegnKey("FK"+table.getForeignKeys().size(), columnNames, pkColumnNames, viewName, table);   
 	    } catch (TranslatorException e){
 	    	throw new ParseException(e.getMessage());
 	    }
     }
+    [optionsClause(key, factory)
+	   {
+	      setCommonProperties(key, key.getProperties());
+	   }
+	]
 }
 
 void primaryKeys(MetadataFactory factory, Table table) :
 {
 	List<String> columnNames = null;
 	Column column = null;
+	KeyRecord key = null;
 }
 {
 	<PRIMARY> nonReserved("KEY")
@@ -4308,11 +4315,16 @@
 	    	throw new ParseException(QueryPlugin.Util.getString("SQLParser.pk_exists", table.getName()));
 	 	}
 	 	try{
-	 		factory.addPrimaryKey("PK", columnNames, table);
+	 		key = factory.addPrimaryKey("PK", columnNames, table);
 	 	} catch(TranslatorException e){
 	 		throw new ParseException(e.getMessage());
 	 	}
     }
+    [optionsClause(key, factory)
+	   {
+	      setCommonProperties(key, key.getProperties());
+	   }
+	]    
 }
 
 void constraints(MetadataFactory factory, Table table) :
@@ -4321,6 +4333,7 @@
 	Column column = null;
 	List<String> columnNames = null;
 	String type = null;
+	KeyRecord key = null;
 }
 {
 	( <UNIQUE> { type = "UNIQUE"; } | type = nonReserved("INDEX","ACCESSPATTERN"))
@@ -4331,18 +4344,23 @@
 	    }
 	    try{
 	    	if (type.equalsIgnoreCase("INDEX")) { 
-	    		factory.addIndex("INDEX"+table.getIndexes().size(), true, columnNames, table);
+	    		key = factory.addIndex("INDEX"+table.getIndexes().size(), true, columnNames, table);
 	    	}
 	    	if (type.equalsIgnoreCase("UNIQUE")) { 
-	    		factory.addIndex("UNIQUE"+table.getUniqueKeys().size(), false, columnNames, table);
+	    		key = factory.addIndex("UNIQUE"+table.getUniqueKeys().size(), false, columnNames, table);
 	    	}	    
 	    	if (type.equalsIgnoreCase("ACCESSPATTERN")) { 
-	    		factory.addAccessPattern("AP"+table.getAccessPatterns().size(), columnNames, table);
+	    		key = factory.addAccessPattern("AP"+table.getAccessPatterns().size(), columnNames, table);
 	    	}
     	}catch(TranslatorException e){
     		throw new ParseException(e.getMessage());
     	}	    
     }
+    [optionsClause(key, factory)
+	   {
+	      setCommonProperties(key, key.getProperties());
+	   }
+	]    
 }
 
 ArrayList<String> getColumnNames() :

Modified: trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java	2012-05-07 18:23:09 UTC (rev 4066)
+++ trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java	2012-05-07 18:26:07 UTC (rev 4067)
@@ -22,6 +22,8 @@
  */
 import static org.junit.Assert.*;
 
+import java.io.File;
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -31,8 +33,9 @@
 import org.teiid.adminapi.impl.ModelMetaData;
 import org.teiid.adminapi.impl.VDBMetaData;
 import org.teiid.core.types.DataTypeManager;
+import org.teiid.core.util.ObjectConverterUtil;
+import org.teiid.metadata.BaseColumn.NullType;
 import org.teiid.metadata.*;
-import org.teiid.metadata.BaseColumn.NullType;
 import org.teiid.query.metadata.MetadataValidator;
 import org.teiid.query.validator.ValidatorReport;
 
@@ -140,6 +143,18 @@
 	}
 	
 	@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'))";
+		Schema s = helpParse(ddl, "model");
+		Map<String, Table> tableMap = s.getTables();	
+		
+		assertTrue("Table not found", tableMap.containsKey("G1"));
+		Table table = tableMap.get("G1");
+		KeyRecord record = table.getAllKeys().iterator().next();
+		assertEquals("VALUE", record.getProperty("CUSTOM_PROP", false));
+	}
+	
+	@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)," +
@@ -604,6 +619,12 @@
 		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;		
+	}
+	
 	//TODO: could elevate type logic out of metadata
 	public static Map<String, Datatype> getDataTypes() {
 		Map<String, Datatype> datatypes = new HashMap<String, Datatype>();

Modified: trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java	2012-05-07 18:23:09 UTC (rev 4066)
+++ trunk/engine/src/test/java/org/teiid/query/unittest/RealMetadataFactory.java	2012-05-07 18:26:07 UTC (rev 4067)
@@ -22,6 +22,7 @@
 
 package org.teiid.query.unittest;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -41,8 +42,8 @@
 import org.teiid.core.types.DataTypeManager.DefaultDataClasses;
 import org.teiid.core.types.DataTypeManager.DefaultDataTypes;
 import org.teiid.dqp.internal.process.DQPWorkContext;
-import org.teiid.metadata.*;
 import org.teiid.metadata.BaseColumn.NullType;
+import org.teiid.metadata.*;
 import org.teiid.metadata.Column.SearchType;
 import org.teiid.metadata.ProcedureParameter.Type;
 import org.teiid.metadata.Table.TriggerEvent;
@@ -50,18 +51,12 @@
 import org.teiid.query.function.SystemFunctionManager;
 import org.teiid.query.function.UDFSource;
 import org.teiid.query.mapping.relational.QueryNode;
-import org.teiid.query.mapping.xml.MappingAttribute;
-import org.teiid.query.mapping.xml.MappingDocument;
-import org.teiid.query.mapping.xml.MappingElement;
-import org.teiid.query.mapping.xml.MappingNode;
-import org.teiid.query.mapping.xml.MappingOutputter;
-import org.teiid.query.mapping.xml.MappingSequenceNode;
-import org.teiid.query.mapping.xml.MappingVisitor;
-import org.teiid.query.mapping.xml.Navigator;
+import org.teiid.query.mapping.xml.*;
 import org.teiid.query.metadata.CompositeMetadataStore;
 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;
 
 @SuppressWarnings("nls")
@@ -2651,5 +2646,9 @@
 			
 		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);
+	}	
 }



More information about the teiid-commits mailing list