[teiid-commits] teiid SVN: r4474 - in trunk: connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc and 6 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Sep 26 13:05:51 EDT 2012


Author: rareddy
Date: 2012-09-26 13:05:51 -0400 (Wed, 26 Sep 2012)
New Revision: 4474

Added:
   trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPQLDirectQueryExecution.java
   trunk/connectors/translator-jpa/src/test/java/org/teiid/translator/jpa/TestJPADirectQueryExecution.java
Modified:
   trunk/api/src/main/java/org/teiid/translator/BaseDelegatingExecutionFactory.java
   trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java
   trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
   trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPA2ExecutionFactory.java
   trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPAPlugin.java
   trunk/connectors/translator-jpa/src/main/resources/org/teiid/translator/jpa/i18n.properties
   trunk/connectors/translator-ldap/src/main/java/org/teiid/translator/ldap/LDAPExecutionFactory.java
   trunk/connectors/translator-olap/src/main/java/org/teiid/translator/olap/OlapExecutionFactory.java
   trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java
Log:
TEIID-2176: Adding the native query procedures JPA2 translator. 

Modified: trunk/api/src/main/java/org/teiid/translator/BaseDelegatingExecutionFactory.java
===================================================================
--- trunk/api/src/main/java/org/teiid/translator/BaseDelegatingExecutionFactory.java	2012-09-26 00:32:18 UTC (rev 4473)
+++ trunk/api/src/main/java/org/teiid/translator/BaseDelegatingExecutionFactory.java	2012-09-26 17:05:51 UTC (rev 4474)
@@ -461,7 +461,7 @@
 		return delegate.supportsNativeQueries();
 	}
 	@Override
-	public ResultSetExecution createDirectExecution(List<Argument> arguments,
+	public ProcedureExecution createDirectExecution(List<Argument> arguments,
 			Command command, ExecutionContext executionContext,
 			RuntimeMetadata metadata, C connection) throws TranslatorException {
 		 return delegate.createDirectExecution(arguments, command, executionContext, metadata, connection);

Modified: trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java
===================================================================
--- trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java	2012-09-26 00:32:18 UTC (rev 4473)
+++ trunk/api/src/main/java/org/teiid/translator/ExecutionFactory.java	2012-09-26 17:05:51 UTC (rev 4474)
@@ -302,7 +302,7 @@
 	}   
 	
 	@SuppressWarnings("unused")
-	public ResultSetExecution createDirectExecution(List<Argument> arguments, Command command, ExecutionContext executionContext, RuntimeMetadata metadata, C connection) throws TranslatorException {
+	public ProcedureExecution createDirectExecution(List<Argument> arguments, Command command, ExecutionContext executionContext, RuntimeMetadata metadata, C connection) throws TranslatorException {
 		 throw new TranslatorException(DataPlugin.Event.TEIID60001, DataPlugin.Util.gs(DataPlugin.Event.TEIID60001, "createDirectExecution")); //$NON-NLS-1$
 	}	
 	

Modified: trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java	2012-09-26 00:32:18 UTC (rev 4473)
+++ trunk/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/JDBCExecutionFactory.java	2012-09-26 17:05:51 UTC (rev 4474)
@@ -208,7 +208,7 @@
     }
     
     @Override
-    public ResultSetExecution createDirectExecution(List<Argument> arguments, Command command, ExecutionContext executionContext, RuntimeMetadata metadata, Connection conn)
+    public ProcedureExecution createDirectExecution(List<Argument> arguments, Command command, ExecutionContext executionContext, RuntimeMetadata metadata, Connection conn)
     		throws TranslatorException {
     	//TODO: This is not correct; this should be only called once for connection creation    	
     	obtainedConnection(conn);

Modified: trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPA2ExecutionFactory.java
===================================================================
--- trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPA2ExecutionFactory.java	2012-09-26 00:32:18 UTC (rev 4473)
+++ trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPA2ExecutionFactory.java	2012-09-26 17:05:51 UTC (rev 4474)
@@ -31,6 +31,7 @@
 import javax.persistence.EntityManagerFactory;
 
 import org.teiid.core.util.PropertiesUtils;
+import org.teiid.language.Argument;
 import org.teiid.language.Call;
 import org.teiid.language.Command;
 import org.teiid.language.QueryExpression;
@@ -51,6 +52,10 @@
 public class JPA2ExecutionFactory extends ExecutionFactory<EntityManagerFactory, EntityManager> {
 	private Map<String, FunctionModifier> functionModifiers = new TreeMap<String, FunctionModifier>(String.CASE_INSENSITIVE_ORDER);
 	
+	public JPA2ExecutionFactory() {
+		setSupportsNativeQueries(true);
+	}
+	
 	@Override
 	public void start() throws TranslatorException {
 		super.start();
@@ -95,6 +100,12 @@
 	}
 	
 	@Override
+	public ProcedureExecution createDirectExecution(List<Argument> arguments, Command command, ExecutionContext executionContext, RuntimeMetadata metadata, EntityManager connection) throws TranslatorException {
+		 return new JPQLDirectQueryExecution(arguments, command, executionContext, metadata, connection);
+	}	
+	
+	
+	@Override
 	public void getMetadata(MetadataFactory mf, EntityManager em) throws TranslatorException {
 		JPAMetadataProcessor metadataProcessor = new JPAMetadataProcessor();
 		PropertiesUtils.setBeanProperties(metadataProcessor, mf.getImportProperties(), "importer"); //$NON-NLS-1$

Modified: trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPAPlugin.java
===================================================================
--- trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPAPlugin.java	2012-09-26 00:32:18 UTC (rev 4473)
+++ trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPAPlugin.java	2012-09-26 17:05:51 UTC (rev 4474)
@@ -40,6 +40,7 @@
     	TEIID14004,
     	TEIID14005,
     	TEIID14006,
-    	TEIID14007
+    	TEIID14007,
+    	TEIID14008
     }
 }

Added: trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPQLDirectQueryExecution.java
===================================================================
--- trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPQLDirectQueryExecution.java	                        (rev 0)
+++ trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPQLDirectQueryExecution.java	2012-09-26 17:05:51 UTC (rev 4474)
@@ -0,0 +1,131 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+package org.teiid.translator.jpa;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.teiid.language.Argument;
+import org.teiid.language.Command;
+import org.teiid.logging.LogConstants;
+import org.teiid.logging.LogManager;
+import org.teiid.metadata.RuntimeMetadata;
+import org.teiid.translator.DataNotAvailableException;
+import org.teiid.translator.ExecutionContext;
+import org.teiid.translator.ProcedureExecution;
+import org.teiid.translator.TranslatorException;
+
+public class JPQLDirectQueryExecution extends JPQLBaseExecution implements ProcedureExecution{
+	private Iterator resultsIterator;
+	private List<Argument> arguments;
+	private int updateCount = -1;
+	private boolean updateQuery;
+
+	@SuppressWarnings("unused")
+	public JPQLDirectQueryExecution(List<Argument> arguments, Command command, ExecutionContext executionContext, RuntimeMetadata metadata, EntityManager em) {
+		super(executionContext, metadata, em);
+		this.arguments = arguments;
+	}
+
+	@Override
+	public void execute() throws TranslatorException {
+		String query = (String)arguments.get(0).getArgumentValue().getValue();
+		String firstToken = null;
+		
+		StringTokenizer st = new StringTokenizer(query, ";"); //$NON-NLS-1$
+		if (st.hasMoreTokens()) {
+			firstToken = st.nextToken();
+			if (!firstToken.equalsIgnoreCase("search") && !firstToken.equalsIgnoreCase("create") && !firstToken.equalsIgnoreCase("update") && !firstToken.equalsIgnoreCase("delete")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+				throw new TranslatorException(JPAPlugin.Util.gs(JPAPlugin.Event.TEIID14008));
+			}
+		}
+
+		String jpql = query.substring(7);
+		LogManager.logTrace(LogConstants.CTX_CONNECTOR, "JPA Source-Query:", jpql); //$NON-NLS-1$
+
+		if (firstToken.equalsIgnoreCase("search")) { // //$NON-NLS-1$
+			Query queryCommand = this.enityManager.createQuery(jpql);
+			List results = queryCommand.getResultList();
+			this.resultsIterator = results.iterator();
+		}		
+		else if (firstToken.equalsIgnoreCase("create")) { // //$NON-NLS-1$
+			Object entity = arguments.get(1).getArgumentValue().getValue();
+			this.enityManager.merge(entity);
+			this.updateCount = 1;
+			this.updateQuery = true;
+		}
+		else if (firstToken.equalsIgnoreCase("update") || firstToken.equalsIgnoreCase("delete")) { // //$NON-NLS-1$ //$NON-NLS-2$
+			Query queryCmd = this.enityManager.createQuery(jpql);
+			this.updateCount = queryCmd.executeUpdate();
+			this.updateQuery = true;
+		}
+	}
+
+	@Override
+	public List<?> next() throws TranslatorException, DataNotAvailableException {
+		
+		// for insert/update/delete clauses
+		if (this.updateQuery) {
+			if (this.updateCount != -1) {
+				List<Object[]> row = new ArrayList<Object[]>(1);
+				row.add(new Object[] {this.updateCount});
+				this.updateCount = -1;
+				return row;
+			}
+			return null;
+		}		
+		
+		if (this.resultsIterator != null && this.resultsIterator.hasNext()) {
+			Object obj = this.resultsIterator.next();
+			if (obj instanceof Object[]) {
+				List<Object[]> row = new ArrayList<Object[]>(1);
+				row.add((Object[])obj);
+				return row;
+			}
+			return Arrays.asList(new Object[] {obj});
+		}
+		return null;
+	}
+	
+	@Override
+	public void close() {
+		// no close
+		this.resultsIterator = null;
+
+	}
+
+	@Override
+	public void cancel() throws TranslatorException {
+		// no cancel
+	}
+
+	@Override
+	public List<?> getOutputParameterValues() throws TranslatorException {
+		return null;
+	}
+}


Property changes on: trunk/connectors/translator-jpa/src/main/java/org/teiid/translator/jpa/JPQLDirectQueryExecution.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/connectors/translator-jpa/src/main/resources/org/teiid/translator/jpa/i18n.properties
===================================================================
--- trunk/connectors/translator-jpa/src/main/resources/org/teiid/translator/jpa/i18n.properties	2012-09-26 00:32:18 UTC (rev 4473)
+++ trunk/connectors/translator-jpa/src/main/resources/org/teiid/translator/jpa/i18n.properties	2012-09-26 17:05:51 UTC (rev 4474)
@@ -4,4 +4,5 @@
 TEIID14004=No parent table found for {0}
 TEIID14005=Bushy joins are not supported.
 TEIID14006=Unsupported join semantics, join can only be done where relationship exists
-TEIID14007=Columns.size and values.size are not the same
\ No newline at end of file
+TEIID14007=Columns.size and values.size are not the same
+TEIID14008=Unknown JPAQL Request; the query string must start with [search|create|update|delete]
\ No newline at end of file

Added: trunk/connectors/translator-jpa/src/test/java/org/teiid/translator/jpa/TestJPADirectQueryExecution.java
===================================================================
--- trunk/connectors/translator-jpa/src/test/java/org/teiid/translator/jpa/TestJPADirectQueryExecution.java	                        (rev 0)
+++ trunk/connectors/translator-jpa/src/test/java/org/teiid/translator/jpa/TestJPADirectQueryExecution.java	2012-09-26 17:05:51 UTC (rev 4474)
@@ -0,0 +1,132 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+package org.teiid.translator.jpa;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
+import org.teiid.cdk.api.TranslationUtility;
+import org.teiid.cdk.unittest.FakeTranslationFactory;
+import org.teiid.language.Command;
+import org.teiid.metadata.RuntimeMetadata;
+import org.teiid.translator.ExecutionContext;
+import org.teiid.translator.TranslatorException;
+
+ at SuppressWarnings("nls")
+public class TestJPADirectQueryExecution {
+
+    private static JPA2ExecutionFactory TRANSLATOR; 
+
+    @BeforeClass
+    public static void setUp() throws TranslatorException {
+        TRANSLATOR = new JPA2ExecutionFactory();
+        TRANSLATOR.start();
+    }	
+    
+    @Test public void testSearch() throws Exception {
+        String input = "exec native('search;SELECT Account.Id, Account.Type, Account.Name FROM Account')"; 
+
+        TranslationUtility util = FakeTranslationFactory.getInstance().getExampleTranslationUtility();
+        Command command = util.parseCommand(input);
+        ExecutionContext ec = Mockito.mock(ExecutionContext.class);
+        RuntimeMetadata rm = Mockito.mock(RuntimeMetadata.class);
+        EntityManager connection = Mockito.mock(EntityManager.class);
+        Query query = Mockito.mock(Query.class);
+        
+        Mockito.stub(connection.createQuery("SELECT Account.Id, Account.Type, Account.Name FROM Account")).toReturn(query);
+        
+        JPQLDirectQueryExecution execution = (JPQLDirectQueryExecution)TRANSLATOR.createExecution(command, ec, rm, connection);
+        execution.execute();
+        
+        Mockito.verify(connection, Mockito.times(1)).createQuery("SELECT Account.Id, Account.Type, Account.Name FROM Account");
+    }    
+    
+    @Test public void testWithoutMarker() throws Exception {
+        String input = "exec native('jpa query')"; 
+
+        TranslationUtility util = FakeTranslationFactory.getInstance().getExampleTranslationUtility();
+        Command command = util.parseCommand(input);
+        ExecutionContext ec = Mockito.mock(ExecutionContext.class);
+        RuntimeMetadata rm = Mockito.mock(RuntimeMetadata.class);
+        EntityManager connection = Mockito.mock(EntityManager.class);
+        
+        try {
+        	JPQLDirectQueryExecution execution = (JPQLDirectQueryExecution)TRANSLATOR.createExecution(command, ec, rm, connection);
+			execution.execute();
+			fail("the above should have thrown exception");
+		} catch (TranslatorException e) {
+		}
+    }    
+    
+    @Test public void testDelete() throws Exception {
+        String input = "exec native('delete;delete-query')"; 
+
+        TranslationUtility util = FakeTranslationFactory.getInstance().getExampleTranslationUtility();
+        Command command = util.parseCommand(input);
+        ExecutionContext ec = Mockito.mock(ExecutionContext.class);
+        RuntimeMetadata rm = Mockito.mock(RuntimeMetadata.class);
+        EntityManager connection = Mockito.mock(EntityManager.class);
+
+        Query query = Mockito.mock(Query.class);
+        Mockito.stub(query.executeUpdate()).toReturn(12);
+        Mockito.stub(connection.createQuery("delete-query")).toReturn(query);
+        
+		ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
+		
+		JPQLDirectQueryExecution execution = (JPQLDirectQueryExecution)TRANSLATOR.createExecution(command, ec, rm, connection);
+		execution.execute();
+
+		Mockito.verify(connection, Mockito.times(1)).createQuery(argument.capture());
+		
+		assertEquals("delete-query", argument.getValue());
+		
+		assertArrayEquals(new Object[] {12}, (Object[])execution.next().get(0));
+    }      
+    
+    @Test public void testCreate() throws Exception {
+    	String input = "exec native('create;', 'one')"; 
+
+        TranslationUtility util = FakeTranslationFactory.getInstance().getExampleTranslationUtility();
+        Command command = util.parseCommand(input);
+        ExecutionContext ec = Mockito.mock(ExecutionContext.class);
+        RuntimeMetadata rm = Mockito.mock(RuntimeMetadata.class);
+        EntityManager connection = Mockito.mock(EntityManager.class);
+        
+        ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
+        Mockito.stub(connection.merge(argument.capture())).toReturn(new String("one"));
+        
+        JPQLDirectQueryExecution execution = (JPQLDirectQueryExecution)TRANSLATOR.createExecution(command, ec, rm, connection);
+		execution.execute();
+		
+		Mockito.verify(connection).merge(argument.capture());
+		
+		assertEquals("one", argument.getValue());
+    }
+}


Property changes on: trunk/connectors/translator-jpa/src/test/java/org/teiid/translator/jpa/TestJPADirectQueryExecution.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/connectors/translator-ldap/src/main/java/org/teiid/translator/ldap/LDAPExecutionFactory.java
===================================================================
--- trunk/connectors/translator-ldap/src/main/java/org/teiid/translator/ldap/LDAPExecutionFactory.java	2012-09-26 00:32:18 UTC (rev 4473)
+++ trunk/connectors/translator-ldap/src/main/java/org/teiid/translator/ldap/LDAPExecutionFactory.java	2012-09-26 17:05:51 UTC (rev 4474)
@@ -33,6 +33,7 @@
 import org.teiid.metadata.RuntimeMetadata;
 import org.teiid.translator.ExecutionContext;
 import org.teiid.translator.ExecutionFactory;
+import org.teiid.translator.ProcedureExecution;
 import org.teiid.translator.ResultSetExecution;
 import org.teiid.translator.Translator;
 import org.teiid.translator.TranslatorException;
@@ -105,7 +106,7 @@
 	}	
 	
 	@Override
-	public ResultSetExecution createDirectExecution(List<Argument> arguments,Command command, ExecutionContext executionContext,RuntimeMetadata metadata, LdapContext context) throws TranslatorException {
+	public ProcedureExecution createDirectExecution(List<Argument> arguments,Command command, ExecutionContext executionContext,RuntimeMetadata metadata, LdapContext context) throws TranslatorException {
 		String query = (String) arguments.get(0).getArgumentValue().getValue();
 		if (query.startsWith("search;")) { //$NON-NLS-1$
 			return new LDAPDirectSearchQueryExecution(arguments, this, executionContext, context);

Modified: trunk/connectors/translator-olap/src/main/java/org/teiid/translator/olap/OlapExecutionFactory.java
===================================================================
--- trunk/connectors/translator-olap/src/main/java/org/teiid/translator/olap/OlapExecutionFactory.java	2012-09-26 00:32:18 UTC (rev 4473)
+++ trunk/connectors/translator-olap/src/main/java/org/teiid/translator/olap/OlapExecutionFactory.java	2012-09-26 17:05:51 UTC (rev 4474)
@@ -36,7 +36,7 @@
 import org.teiid.metadata.RuntimeMetadata;
 import org.teiid.translator.ExecutionContext;
 import org.teiid.translator.ExecutionFactory;
-import org.teiid.translator.ResultSetExecution;
+import org.teiid.translator.ProcedureExecution;
 import org.teiid.translator.Translator;
 import org.teiid.translator.TranslatorException;
 
@@ -51,7 +51,7 @@
 	}
 	
     @Override
-   	public ResultSetExecution createDirectExecution(List<Argument> arguments, Command command, ExecutionContext executionContext, RuntimeMetadata metadata, Connection connection) throws TranslatorException {
+   	public ProcedureExecution createDirectExecution(List<Argument> arguments, Command command, ExecutionContext executionContext, RuntimeMetadata metadata, Connection connection) throws TranslatorException {
     	return new OlapQueryExecution(arguments, command, unwrap(connection), executionContext, this);
 	}    
 

Modified: trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java
===================================================================
--- trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java	2012-09-26 00:32:18 UTC (rev 4473)
+++ trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java	2012-09-26 17:05:51 UTC (rev 4474)
@@ -118,7 +118,7 @@
 	}
 
 	@Override
-	public ResultSetExecution createDirectExecution(List<Argument> arguments, Command command, ExecutionContext executionContext, RuntimeMetadata metadata, SalesforceConnection connection) throws TranslatorException {
+	public ProcedureExecution createDirectExecution(List<Argument> arguments, Command command, ExecutionContext executionContext, RuntimeMetadata metadata, SalesforceConnection connection) throws TranslatorException {
 		 return new DirectQueryExecution(arguments, command, connection, metadata, executionContext);
 	}	
 	



More information about the teiid-commits mailing list