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

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Apr 11 11:38:11 EDT 2012


Author: shawkins
Date: 2012-04-11 11:38:10 -0400 (Wed, 11 Apr 2012)
New Revision: 3992

Modified:
   trunk/api/src/main/java/org/teiid/metadata/MetadataFactory.java
   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
Log:
TEIID-1280 adding namespace prefix resolution

Modified: trunk/api/src/main/java/org/teiid/metadata/MetadataFactory.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/MetadataFactory.java	2012-04-11 15:17:17 UTC (rev 3991)
+++ trunk/api/src/main/java/org/teiid/metadata/MetadataFactory.java	2012-04-11 15:38:10 UTC (rev 3992)
@@ -385,4 +385,8 @@
 	public int getVdbVersion() {
 		return vdbVersion;
 	}	
+	
+	public Map<String, String> getNamespaces() {
+		return namespaces;
+	}
 }

Modified: trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java	2012-04-11 15:17:17 UTC (rev 3991)
+++ trunk/engine/src/main/java/org/teiid/query/parser/SQLParserUtil.java	2012-04-11 15:38:10 UTC (rev 3992)
@@ -572,6 +572,19 @@
 		}	
 	}	
 	
+	static String resolvePropertyKey(MetadataFactory factory, String key) {
+	 	int index = key.indexOf(':');
+	 	if (index > 0 && index < key.length() - 1) {
+	 		String prefix = key.substring(0, index);
+	 		String uri = factory.getNamespaces().get(prefix);
+	 		if (uri != null) {
+	 			key = '{' +uri + '}' + key.substring(index + 1, key.length());
+	 		}
+	 		//TODO warnings or errors if not resolvable 
+	 	}
+	 	return key;
+	}
+	
 	static class  ParsedDataType{
 		String type;
 		Integer length;

Modified: trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj
===================================================================
--- trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj	2012-04-11 15:17:17 UTC (rev 3991)
+++ trunk/engine/src/main/javacc/org/teiid/query/parser/SQLParser.jj	2012-04-11 15:38:10 UTC (rev 3992)
@@ -3855,11 +3855,11 @@
 }
 {
  	<XMLNAMESPACES> <LPAREN>
-	item = namespaceItem(info)
+	item = namespaceItem()
 	{
 		namespaces.add(item);
 	}
-	(<COMMA> item = namespaceItem(info)
+	(<COMMA> item = namespaceItem()
 	 {
 		 namespaces.add(item);
 	 }
@@ -3870,7 +3870,7 @@
 	}
 }
 
-XMLNamespaces.NamespaceItem namespaceItem(ParseInfo info) :
+XMLNamespaces.NamespaceItem namespaceItem() :
 {
 	String uri = null;
 	String prefix = null;
@@ -4094,13 +4094,12 @@
 
 void createNameSpace(MetadataFactory factory) :
 {
-	String uri = null;
-	String prefix = null; 
+	XMLNamespaces.NamespaceItem item = null; 
 }
 { 
-	<SET> nonReserved ("NAMESPACE") uri = stringVal() <AS> prefix = stringVal()
+	<SET> nonReserved ("NAMESPACE") item = namespaceItem()
 	{
-		factory.addNamespace(prefix, uri);
+		factory.addNamespace(item.getPrefix(), item.getUri());
 	}
 }
 
@@ -4137,7 +4136,7 @@
 		
 		<RETURNS> (readProcedureReturn(factory, proc) | returnDataType = parseDataType())
 		
-	    [ optionsClause(proc)
+	    [ optionsClause(proc, factory)
 		   {
 		      setProcedureOptions(proc);
 		   }
@@ -4259,7 +4258,7 @@
         )*
     ]    
     <RPAREN>]    
-    [optionsClause(table)
+    [optionsClause(table, factory)
 	   {
 	      setTableOptions(table);
 	   }
@@ -4434,7 +4433,7 @@
 	  |(<PRIMARY> nonReserved("KEY") { pk = true; })	 
 	  ])
 	 [<DEFAULT_KEYWORD> defalt = stringVal()]
-	 [optionsClause(column)
+	 [optionsClause(column, factory)
 	   {
 	      setColumnOptions(column);
 	   }
@@ -4467,16 +4466,16 @@
 	 }
 }
 
-void optionsClause(AbstractMetadataRecord record) :
+void optionsClause(AbstractMetadataRecord record, MetadataFactory factory) :
 {
 }
 {
   <OPTIONS> <LPAREN>
-  readOption(record) (<COMMA> readOption(record))*	   
+  optionPair(record, factory) (<COMMA> optionPair(record, factory))*	   
   <RPAREN> 
 }
 
-void readOption(AbstractMetadataRecord record) :
+void optionPair(AbstractMetadataRecord record, MetadataFactory factory) :
 {
 	String value = null;
 	String key = null;
@@ -4493,6 +4492,7 @@
 	 	if (t != null) {
 	 		value = t.image;
 	 	}
+	 	key = resolvePropertyKey(factory, key);
 	 	record.setProperty(key, value); 
 	 } 
 }

Modified: trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java	2012-04-11 15:17:17 UTC (rev 3991)
+++ trunk/engine/src/test/java/org/teiid/query/parser/TestDDLParser.java	2012-04-11 15:38:10 UTC (rev 3992)
@@ -569,7 +569,7 @@
 	
 	@Test
 	public void testNamespace() throws Exception {
-		String ddl = 	"set namespace 'http://teiid.org' AS 'teiid'";
+		String ddl = 	"set namespace 'http://teiid.org' AS teiid";
 
 		MetadataStore mds = new MetadataStore();
 		MetadataFactory mf = new MetadataFactory(null, 1, "model", getDataTypes(), new Properties(), null); 
@@ -601,4 +601,11 @@
 		datatypes.put("decimal", datatypes.get(DataTypeManager.DefaultDataTypes.BIG_DECIMAL));
 		return datatypes;
 	}
+	
+	@Test public void testKeyResolve() {
+		MetadataFactory mf = new MetadataFactory(null, 1, "foo", getDataTypes(), new Properties(), null);
+		mf.addNamespace("x", "http://x");
+		assertEquals("{http://x}z", SQLParserUtil.resolvePropertyKey(mf, "x:z"));
+		assertEquals("y:z", SQLParserUtil.resolvePropertyKey(mf, "y:z"));
+	}
 }



More information about the teiid-commits mailing list