teiid SVN: r2826 - in trunk: client/src/main/java/org/teiid/adminapi and 16 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-01-10 21:17:53 -0500 (Mon, 10 Jan 2011)
New Revision: 2826
Added:
trunk/metadata/src/test/resources/Test.vdb
Modified:
trunk/api/src/main/java/org/teiid/metadata/Schema.java
trunk/client/src/main/java/org/teiid/adminapi/Transaction.java
trunk/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadata.java
trunk/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadataMapper.java
trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java
trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java
trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/JoinQueryVisitor.java
trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java
trunk/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/visitors/TestVisitors.java
trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java
trunk/documentation/reference/src/main/docbook/en-US/content/federated_planning.xml
trunk/engine/src/main/java/org/teiid/dqp/internal/process/TransactionServerImpl.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java
trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestTransactionServer.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestLimit.java
trunk/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java
trunk/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataFactory.java
trunk/metadata/src/test/java/org/teiid/metadata/index/TestMultipleModelIndexes.java
Log:
forward merge of 7.1.1
Modified: trunk/api/src/main/java/org/teiid/metadata/Schema.java
===================================================================
--- trunk/api/src/main/java/org/teiid/metadata/Schema.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/api/src/main/java/org/teiid/metadata/Schema.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -39,7 +39,9 @@
public void addTable(Table table) {
table.setParent(this);
- this.tables.put(table.getName().toLowerCase(), table);
+ if (this.tables.put(table.getName().toLowerCase(), table) != null) {
+ throw new AssertionError("Duplicate Table " + table.getName()); //$NON-NLS-1$
+ }
}
public void addProcedure(Procedure procedure) {
Modified: trunk/client/src/main/java/org/teiid/adminapi/Transaction.java
===================================================================
--- trunk/client/src/main/java/org/teiid/adminapi/Transaction.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/client/src/main/java/org/teiid/adminapi/Transaction.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -30,7 +30,7 @@
* May be null for an unassociated Global transaction.
* @return
*/
- long getAssociatedSession();
+ String getAssociatedSession();
/**
* Get the scope for the transaction. Will be one of GLOBAL, LOCAL, or REQUEST
Modified: trunk/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadata.java
===================================================================
--- trunk/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadata.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadata.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -33,18 +33,18 @@
public class TransactionMetadata extends AdminObjectImpl implements Transaction {
private static final long serialVersionUID = -8588785315218789068L;
- private long associatedSession;
+ private String associatedSession;
private String scope;
private String id;
private long createdTime;
@Override
@ManagementProperty(description="Session ID", readOnly=true)
- public long getAssociatedSession() {
+ public String getAssociatedSession() {
return associatedSession;
}
- public void setAssociatedSession(long associatedSession) {
+ public void setAssociatedSession(String associatedSession) {
this.associatedSession = associatedSession;
}
Modified: trunk/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadataMapper.java
===================================================================
--- trunk/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadataMapper.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadataMapper.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -45,7 +45,7 @@
static {
metaType = new MutableCompositeMetaType(TransactionMetadata.class.getName(), "The Transaction domain meta data"); //$NON-NLS-1$
- metaType.addItem(ASSOCIATED_SESSION, ASSOCIATED_SESSION, SimpleMetaType.LONG_PRIMITIVE);
+ metaType.addItem(ASSOCIATED_SESSION, ASSOCIATED_SESSION, SimpleMetaType.STRING);
metaType.addItem(CREATED_TIME, CREATED_TIME, SimpleMetaType.LONG_PRIMITIVE);
metaType.addItem(SCOPE, SCOPE, SimpleMetaType.STRING);
metaType.addItem(XID, XID, SimpleMetaType.STRING);
@@ -89,7 +89,7 @@
CompositeValue compositeValue = (CompositeValue) metaValue;
TransactionMetadata transaction = new TransactionMetadata();
- transaction.setAssociatedSession((Long) metaValueFactory.unwrap(compositeValue.get(ASSOCIATED_SESSION)));
+ transaction.setAssociatedSession((String) metaValueFactory.unwrap(compositeValue.get(ASSOCIATED_SESSION)));
transaction.setCreatedTime((Long) metaValueFactory.unwrap(compositeValue.get(CREATED_TIME)));
transaction.setScope((String) metaValueFactory.unwrap(compositeValue.get(SCOPE)));
transaction.setId((String) metaValueFactory.unwrap(compositeValue.get("id"))); //$NON-NLS-1$
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 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -59,7 +59,8 @@
private static final String EXCLUDES = "excludes";//$NON-NLS-1$
private static final String INCLUDES = "includes";//$NON-NLS-1$
private String connectorStateClass;
- private boolean auditModelFields = false;
+ private boolean auditModelFields = false;
+ private int maxInSize = 300;
public SalesForceExecutionFactory() {
// http://jira.jboss.org/jira/browse/JBEDSP-306
@@ -124,9 +125,14 @@
}
@Override
+ @TranslatorProperty(display="Max number of IN predicate entries", advanced=true)
public int getMaxInCriteriaSize() {
- return 700;
+ return maxInSize;
}
+
+ public void setMaxInCriteriaSize(int maxInSize) {
+ this.maxInSize = maxInSize;
+ }
@Override
public List getSupportedFunctions() {
Modified: trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java
===================================================================
--- trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -63,14 +63,16 @@
public class QueryExecutionImpl implements ResultSetExecution {
- private static final String SF_ID = "sf:Id";
+ private static final String SF_ID = "sf:Id"; //$NON-NLS-1$
- private static final String SF_TYPE = "sf:type";
+ private static final String SF_TYPE = "sf:type"; //$NON-NLS-1$
- private static final String SF_S_OBJECT = "sf:sObject";
+ private static final String SF_S_OBJECT = "sf:sObject"; //$NON-NLS-1$
- private static final String XSI_TYPE = "xsi:type";
-
+ private static final String XSI_TYPE = "xsi:type"; //$NON-NLS-1$
+
+ private static final String XSI_NIL = "xsi:nil"; //$NON-NLS-1$
+
private SalesforceConnection connection;
private RuntimeMetadata metadata;
@@ -272,7 +274,7 @@
}
} else {
Object cell;
- cell = sObject.getElementsByTagName("sf:" + element.getNameInSource()).item(0);
+ cell = sObject.getElementsByTagName("sf:" + element.getNameInSource()).item(0); //$NON-NLS-1$
setElementValueInColumn(j, cell, row);
}
}
@@ -320,7 +322,14 @@
private void setElementValueInColumn(int columnIndex, Object value, Object[] row) {
if(value instanceof Element) {
- row[columnIndex] = ((Element)value).getFirstChild().getNodeValue();
+ Element element = (Element)value;
+ if (!Boolean.parseBoolean(element.getAttribute(XSI_NIL))) {
+ if (element.getFirstChild() != null) {
+ row[columnIndex] = element.getFirstChild().getNodeValue();
+ } else {
+ row[columnIndex] = ""; //$NON-NLS-1$
+ }
+ }
} else {
row[columnIndex] = value;
}
Modified: trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/JoinQueryVisitor.java
===================================================================
--- trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/JoinQueryVisitor.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/JoinQueryVisitor.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -110,12 +110,12 @@
}
StringBuffer select = new StringBuffer();
select.append(SELECT).append(SPACE);
- addSelectSymbols(leftTableInJoin.getNameInSource(), select);
- select.append(COMMA).append(SPACE).append(OPEN);
+ addSelect(leftTableInJoin.getNameInSource(), select, true);
+ select.append(OPEN);
StringBuffer subselect = new StringBuffer();
subselect.append(SELECT).append(SPACE);
- addSelectSymbols(rightTableInJoin.getNameInSource(), subselect);
+ addSelect(rightTableInJoin.getNameInSource(), subselect, false);
subselect.append(SPACE);
subselect.append(FROM).append(SPACE);
subselect.append(rightTableInJoin.getNameInSource()).append('s');
@@ -133,7 +133,7 @@
return childTable.equals(leftTableInJoin);
}
- protected void addSelectSymbols(String tableNameInSource, StringBuffer result) throws TranslatorException {
+ void addSelect(String tableNameInSource, StringBuffer result, boolean addComma) {
boolean firstTime = true;
for (DerivedColumn symbol : selectSymbols) {
Expression expression = symbol.getExpression();
@@ -143,23 +143,30 @@
if(!isParentToChildJoin() && tableNameInSource.equals(tableName) ||
isParentToChildJoin()) {
if (!firstTime) {
- result.append(", ");
+ result.append(", "); //$NON-NLS-1$
} else {
firstTime = false;
}
result.append(tableName);
result.append('.');
result.append(element.getNameInSource());
+ } else {
+ continue;
}
} else if (expression instanceof AggregateFunction) {
if (!firstTime) {
- result.append(", ");
+ result.append(", "); //$NON-NLS-1$
} else {
firstTime = false;
}
result.append("count()"); //$NON-NLS-1$
+ } else {
+ throw new AssertionError("Unknown select symbol type" + symbol); //$NON-NLS-1$
}
}
+ if (!firstTime && addComma) {
+ result.append(", "); //$NON-NLS-1$
+ }
}
}
Modified: trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java
===================================================================
--- trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/visitors/SelectVisitor.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -122,7 +122,7 @@
}
StringBuffer result = new StringBuffer();
result.append(SELECT).append(SPACE);
- addSelectSymbols(table.getNameInSource(), result);
+ addSelectSymbols(result);
result.append(SPACE);
result.append(FROM).append(SPACE);
result.append(table.getNameInSource()).append(SPACE);
@@ -133,7 +133,7 @@
return result.toString();
}
- protected void addSelectSymbols(String tableNameInSource, StringBuffer result) throws TranslatorException {
+ private void addSelectSymbols(StringBuffer result) throws TranslatorException {
boolean firstTime = true;
for (DerivedColumn symbol : selectSymbols) {
if (!firstTime) {
@@ -204,7 +204,7 @@
public String getRetrieveFieldList() throws TranslatorException {
assertRetrieveValidated();
StringBuffer result = new StringBuffer();
- addSelectSymbols(table.getNameInSource(), result);
+ addSelectSymbols(result);
return result.toString();
}
Modified: trunk/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/visitors/TestVisitors.java
===================================================================
--- trunk/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/visitors/TestVisitors.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/connectors/translator-salesforce/src/test/java/org/teiid/translator/salesforce/execution/visitors/TestVisitors.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -169,6 +169,13 @@
assertEquals("SELECT Account.AccountName, (SELECT Contact.ContactName FROM Contacts) FROM Account", visitor.getQuery().toString().trim()); //$NON-NLS-1$
}
+ @Test public void testJoin3() throws Exception {
+ Select command = (Select)translationUtility.parseCommand("SELECT Contacts.Name FROM Account LEFT OUTER JOIN Contacts ON Account.Id = Contacts.AccountId"); //$NON-NLS-1$
+ SelectVisitor visitor = new JoinQueryVisitor(translationUtility.createRuntimeMetadata());
+ visitor.visit(command);
+ assertEquals("SELECT (SELECT Contact.ContactName FROM Contacts) FROM Account", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ }
+
@Test public void testInWithNameInSourceDifferent() throws Exception {
Select command = (Select)translationUtility.parseCommand("SELECT Contacts.Name FROM Contacts WHERE Contacts.Name in ('x', 'y')"); //$NON-NLS-1$
SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
Modified: trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java
===================================================================
--- trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/console/src/main/java/org/teiid/rhq/admin/DQPManagementView.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -250,7 +250,7 @@
final Map<String, Object> valueMap) throws Exception {
Collection<ArrayList<String>> sqlResultsObject = new ArrayList<ArrayList<String>>();
Collection<Request> resultObject = new ArrayList<Request>();
- Collection<MetaValue> activeSessionsCollection = new ArrayList<MetaValue>();
+ Collection<Session> activeSessionsCollection = new ArrayList<Session>();
String vdbName = (String) valueMap.get(PluginConstants.ComponentType.VDB.NAME);
vdbName = formatVdbName(vdbName);
String vdbVersion = (String) valueMap.get(PluginConstants.ComponentType.VDB.VERSION);
@@ -308,7 +308,7 @@
private String formatVdbName(String vdbName) {
- return vdbName.substring(0, vdbName.indexOf(".")); //$NON-NLS-1$
+ return vdbName.substring(0, vdbName.lastIndexOf(".")); //$NON-NLS-1$
}
public MetaValue getProperties(ProfileServiceConnection connection, final String component) {
@@ -754,13 +754,15 @@
}
}
- public static <T> void getSessionCollectionValueForVDB(MetaValue pValue,Collection<MetaValue> list, String vdbName) throws Exception {
+ public static <T> void getSessionCollectionValueForVDB(MetaValue pValue,Collection<Session> list, String vdbName) throws Exception {
MetaType metaType = pValue.getMetaType();
if (metaType.isCollection()) {
for (MetaValue value : ((CollectionValueSupport) pValue).getElements()) {
if (value.getMetaType().isComposite()) {
if (ProfileServiceUtil.stringValue(((CompositeValueSupport)value).get("VDBName")).equals(vdbName)) { //$NON-NLS-1$
- list.add(value);
+ SessionMetadataMapper rmm = new SessionMetadataMapper();
+ Session session = rmm.unwrapMetaValue(value);
+ list.add(session);
}
} else {
throw new IllegalStateException(pValue+ " is not a Composite type"); //$NON-NLS-1$
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/federated_planning.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/federated_planning.xml 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/federated_planning.xml 2011-01-11 02:17:53 UTC (rev 2826)
@@ -793,12 +793,12 @@
be true regardless of which version of Teiid is used.</para>
</listitem>
<listitem>
- <para>RulePushNonJoinCriteria – this rule will push criteria out of
+ <para>RulePushNonJoinCriteria - this rule will push criteria out of
an on clause if it is not necessary for the correctness of the join.
</para>
</listitem>
<listitem>
- <para>RuleRaiseNull – this rule will raise null nodes to their
+ <para>RuleRaiseNull - this rule will raise null nodes to their
highest possible point. Raising a null node removes the need to
consider any part of the old plan that was below the null node.
</para>
@@ -814,12 +814,12 @@
together.</para>
</listitem>
<listitem>
- <para>RuleRemoveOptionalJoins – removes optional join nodes form
+ <para>RuleRemoveOptionalJoins - removes optional join nodes form
the plan tree as soon as possible so that planning will be more
optimal.</para>
</listitem>
<listitem>
- <para>RulePlanJoins – this rule attempts to find an optimal
+ <para>RulePlanJoins - this rule attempts to find an optimal
ordering of the joins performed in the plan, while ensuring that
<xref linkend='access_patterns'/> dependencies are met. This rule has three main
steps. First it must determine an ordering of joins that satisfy
@@ -916,7 +916,7 @@
retrieved from B, thus greatly speeding the overall query.</para>
</listitem>
<listitem>
- <para>RuleChooseJoinStrategy – Determines the base join strategy.
+ <para>RuleChooseJoinStrategy - Determines the base join strategy.
Currently this is a decision as to whether to use a merge join rather
than the default strategy, which is a nested loop join. Ideally the
choice of a hash join would also be evaluated here. Also costing
@@ -945,9 +945,12 @@
model option.</para>
</listitem>
<listitem>
- <para>RuleAccessPatternValidation – validates that all access
+ <para>RuleAccessPatternValidation - validates that all access
patterns have been satisfied.</para>
</listitem>
+ <listitem>
+ <para>RulePushLimit - pushes limit and offset information as far as possible in the plan.</para>
+ </listitem>
</itemizedlist>
</section>
<section>
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/TransactionServerImpl.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/TransactionServerImpl.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/TransactionServerImpl.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -517,7 +517,7 @@
continue;
}
TransactionMetadata txnImpl = new TransactionMetadata();
- txnImpl.setAssociatedSession(Long.parseLong(transactionContext.getThreadId()));
+ txnImpl.setAssociatedSession(transactionContext.getThreadId());
txnImpl.setCreatedTime(transactionContext.getCreationTime());
txnImpl.setScope(transactionContext.getTransactionType().toString());
txnImpl.setId(transactionContext.getTransactionId());
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -142,7 +142,8 @@
}
case NodeConstants.Types.SET_OP:
{
- if (!SetQuery.Operation.UNION.equals(child.getProperty(NodeConstants.Info.SET_OPERATION))) {
+ if (!SetQuery.Operation.UNION.equals(child.getProperty(NodeConstants.Info.SET_OPERATION))
+ || !child.hasBooleanProperty(NodeConstants.Info.USE_ALL)) {
return false;
}
//distribute the limit
@@ -166,8 +167,6 @@
return child.getProperty(NodeConstants.Info.INTO_GROUP) == null;
}
case NodeConstants.Types.SOURCE:
- case NodeConstants.Types.SELECT:
- case NodeConstants.Types.DUP_REMOVE:
{
return true;
}
@@ -211,12 +210,6 @@
return null;
}
- List<PlanNode> setops = NodeEditor.findAllNodes(accessNode, NodeConstants.Types.SET_OP, NodeConstants.Types.SOURCE);
-
- if (!setops.isEmpty()) {
- return null;
- }
-
Expression limit = (Expression)parentNode.getProperty(NodeConstants.Info.MAX_TUPLE_LIMIT);
if (limit != null && !CapabilitiesUtil.supportsRowLimit(modelID, metadata, capFinder)) {
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -263,9 +263,7 @@
return areAggregatesCardinalityDependent(aggs);
}
case NodeConstants.Types.TUPLE_LIMIT: {
- if (FrameUtil.isOrderedLimit(parent)) {
- return true;
- }
+ return true;
}
//we assmue that projects of non-deterministic expressions do not matter
}
Modified: trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/engine/src/main/java/org/teiid/query/rewriter/QueryRewriter.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -433,7 +433,7 @@
* @throws QueryValidatorException
*/
private void rewriteSubqueryContainer(SubqueryContainer container, boolean removeOrderBy) throws TeiidComponentException, TeiidProcessingException{
- if (rewriteSubcommands && container.getCommand() != null && container.getCommand().getProcessorPlan() == null) {
+ if (rewriteSubcommands && container.getCommand() != null && (container.getCommand().getProcessorPlan() == null || processing)) {
container.setCommand(rewriteCommand(container.getCommand(), removeOrderBy));
}
}
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -49,12 +49,13 @@
import org.teiid.query.optimizer.capabilities.FakeCapabilitiesFinder;
import org.teiid.query.optimizer.capabilities.SourceCapabilities.Capability;
import org.teiid.query.processor.FakeDataManager;
+import org.teiid.query.processor.HardcodedDataManager;
import org.teiid.query.processor.ProcessorDataManager;
import org.teiid.query.processor.TestProcessor;
import org.teiid.query.unittest.FakeMetadataFacade;
import org.teiid.query.unittest.FakeMetadataFactory;
-
+@SuppressWarnings("nls")
public class TestPreparedStatement {
private static final int SESSION_ID = 6;
@@ -418,4 +419,23 @@
helpTestProcessing(preparedSql, values, expected, dataManager, FakeMetadataFactory.example1Cached(), false, false,FakeMetadataFactory.example1VDB());
}
+ @Test public void testWithSubqueryPushdown() throws Exception {
+ String preparedSql = "SELECT pm1.g1.e1 FROM pm1.g1 WHERE pm1.g1.e2 IN (SELECT pm1.g2.e2 FROM pm1.g2 WHERE pm1.g2.e1 = ?)"; //$NON-NLS-1$
+
+ List[] expected = new List[] {
+ Arrays.asList("a"),
+ };
+
+ List values = Arrays.asList("a"); //$NON-NLS-1$
+
+ QueryMetadataInterface metadata = FakeMetadataFactory.example1Cached();
+ HardcodedDataManager dataManager = new HardcodedDataManager(metadata);
+ dataManager.addData("SELECT g_0.e1 FROM g1 AS g_0 WHERE g_0.e2 IN (SELECT g_1.e2 FROM g2 AS g_1 WHERE g_1.e1 = 'a')", new List[] {Arrays.asList("a")});
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
+
+ helpTestProcessing(preparedSql, values, expected, dataManager, new DefaultCapabilitiesFinder(caps), metadata, null, false, false, false, FakeMetadataFactory.example1VDB());
+ }
+
}
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestTransactionServer.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestTransactionServer.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestTransactionServer.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -45,8 +45,8 @@
private TransactionManager tm;
private javax.transaction.Transaction txn;
- private static final String THREAD1 = "1"; //$NON-NLS-1$
- private static final String THREAD2 = "2"; //$NON-NLS-1$
+ private static final String THREAD1 = "abc1"; //$NON-NLS-1$
+ private static final String THREAD2 = "abc2"; //$NON-NLS-1$
private static final XidImpl XID1 = new XidImpl(0, new byte[] {
1
@@ -167,7 +167,7 @@
try {
server.commit(THREAD1);
} catch (XATransactionException e) {
- assertEquals("No transaction found for client 1.", e.getMessage()); //$NON-NLS-1$
+ assertEquals("No transaction found for client abc1.", e.getMessage()); //$NON-NLS-1$
}
}
@@ -187,7 +187,7 @@
try {
server.rollback(THREAD1);
} catch (XATransactionException e) {
- assertEquals("No transaction found for client 1.", e.getMessage()); //$NON-NLS-1$
+ assertEquals("No transaction found for client abc1.", e.getMessage()); //$NON-NLS-1$
}
}
@@ -225,7 +225,7 @@
server.start(THREAD2, XID1, XAResource.TMRESUME, 100,false);
fail("exception expected"); //$NON-NLS-1$
} catch (XATransactionException ex) {
- assertEquals("Cannot resume, transaction Teiid-Xid global:1 branch:null format:0 was not suspended by client 2.", ex.getMessage()); //$NON-NLS-1$
+ assertEquals("Cannot resume, transaction Teiid-Xid global:1 branch:null format:0 was not suspended by client abc2.", ex.getMessage()); //$NON-NLS-1$
}
}
@@ -273,7 +273,7 @@
assertEquals(1, server.getTransactions().size());
Transaction t = server.getTransactions().iterator().next();
- assertEquals(Long.parseLong(THREAD1), t.getAssociatedSession());
+ assertEquals(THREAD1, t.getAssociatedSession());
assertNotNull(t.getId());
}
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestLimit.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestLimit.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestLimit.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -56,11 +56,7 @@
import junit.framework.TestCase;
-
-
-/**
- * @since 4.3
- */
+@SuppressWarnings("nls")
public class TestLimit extends TestCase {
private static final int[] FULL_PUSHDOWN = new int[] {
@@ -460,24 +456,56 @@
public void testLimitNotPushedWithUnion() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.ROW_LIMIT, true);
// pm1 model supports order by
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
String sql = "SELECT * FROM pm1.g1 UNION SELECT * FROM PM1.g2 LIMIT 100";//$NON-NLS-1$
String[] expectedSql = new String[] {
- "SELECT pm1.g1.e1, pm1.g1.e2, pm1.g1.e3, pm1.g1.e4 FROM pm1.g1 UNION SELECT pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4 FROM PM1.g2" //$NON-NLS-1$
+ "SELECT pm1.g1.e1, pm1.g1.e2, pm1.g1.e3, pm1.g1.e4 FROM pm1.g1", "SELECT pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4 FROM PM1.g2" //$NON-NLS-1$
};
ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
null, capFinder, expectedSql, true);
TestOptimizer.checkNodeTypes(plan, new int[] {
+ 2, // Access
+ 0, // DependentAccess
+ 0, // DependentSelect
+ 0, // DependentProject
+ 1, // DupRemove
+ 0, // Grouping
+ 1, // Limit
+ 0, // NestedLoopJoinStrategy
+ 0, // MergeJoinStrategy
+ 0, // Null
+ 0, // PlanExecution
+ 0, // Project
+ 0, // Select
+ 0, // Sort
+ 1 // UnionAll
+ }, NODE_TYPES);
+ }
+
+ public void testLimitNotPushedWithDupRemove() {
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = new BasicSourceCapabilities();
+ caps.setCapabilitySupport(Capability.ROW_LIMIT, true);
+ // pm1 model supports order by
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ String sql = "SELECT distinct * FROM pm1.g1 LIMIT 100";//$NON-NLS-1$
+ String[] expectedSql = new String[] {
+ "SELECT pm1.g1.e1, pm1.g1.e2, pm1.g1.e3, pm1.g1.e4 FROM pm1.g1" //$NON-NLS-1$
+ };
+ ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
+ null, capFinder, expectedSql, true);
+
+ TestOptimizer.checkNodeTypes(plan, new int[] {
1, // Access
0, // DependentAccess
0, // DependentSelect
0, // DependentProject
- 0, // DupRemove
+ 1, // DupRemove
0, // Grouping
1, // Limit
0, // NestedLoopJoinStrategy
@@ -491,14 +519,14 @@
}, NODE_TYPES);
}
- public void testLimitPushedWithUnion() {
+ public void testLimitPushedWithUnionAll() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.ROW_LIMIT, true);
// pm1 model supports order by
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- String sql = "SELECT * FROM pm1.g1 UNION SELECT * FROM PM1.g2 LIMIT 100";//$NON-NLS-1$
+ String sql = "SELECT * FROM pm1.g1 UNION ALL SELECT * FROM PM1.g2 LIMIT 100";//$NON-NLS-1$
String[] expectedSql = new String[] {
"SELECT pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4 FROM PM1.g2 LIMIT 100", "SELECT pm1.g1.e1, pm1.g1.e2, pm1.g1.e3, pm1.g1.e4 FROM pm1.g1 LIMIT 100" //$NON-NLS-1$ //$NON-NLS-2$
};
@@ -510,7 +538,7 @@
0, // DependentAccess
0, // DependentSelect
0, // DependentProject
- 1, // DupRemove
+ 0, // DupRemove
0, // Grouping
1, // Limit
0, // NestedLoopJoinStrategy
@@ -533,7 +561,7 @@
// pm1 model supports order by
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- String sql = "SELECT * FROM pm1.g1 UNION SELECT * FROM PM1.g2 LIMIT 50, 100";//$NON-NLS-1$
+ String sql = "SELECT * FROM pm1.g1 UNION ALL SELECT * FROM PM1.g2 LIMIT 50, 100";//$NON-NLS-1$
String[] expectedSql = new String[] {
"SELECT PM1.g2.e1 AS c_0, PM1.g2.e2 AS c_1, PM1.g2.e3 AS c_2, PM1.g2.e4 AS c_3 FROM PM1.g2 LIMIT 150", "SELECT pm1.g1.e1 AS c_0, pm1.g1.e2 AS c_1, pm1.g1.e3 AS c_2, pm1.g1.e4 AS c_3 FROM pm1.g1 LIMIT 150" //$NON-NLS-1$ //$NON-NLS-2$
};
@@ -545,7 +573,7 @@
0, // DependentAccess
0, // DependentSelect
0, // DependentProject
- 1, // DupRemove
+ 0, // DupRemove
0, // Grouping
1, // Limit
0, // NestedLoopJoinStrategy
Modified: trunk/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/engine/src/test/java/org/teiid/query/processor/HardcodedDataManager.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -31,6 +31,8 @@
import org.teiid.common.buffer.BlockedException;
import org.teiid.common.buffer.TupleSource;
import org.teiid.core.TeiidComponentException;
+import org.teiid.dqp.internal.datamgr.LanguageBridgeFactory;
+import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.util.CommandContext;
@@ -55,10 +57,17 @@
// Collect all commands run against this class
private List<Command> commandHistory = new ArrayList<Command>(); // Commands
+ private LanguageBridgeFactory lbf;
+
public HardcodedDataManager() {
this(true);
}
+ public HardcodedDataManager(QueryMetadataInterface metadata) {
+ this(true);
+ this.lbf = new LanguageBridgeFactory(metadata);
+ }
+
public HardcodedDataManager(boolean mustRegisterCommands) {
this.mustRegisterCommands = mustRegisterCommands;
}
@@ -123,10 +132,17 @@
List projectedSymbols = command.getProjectedSymbols();
- List[] rows = data.get(command.toString());
+ String commandString = null;
+ if (lbf == null) {
+ commandString = command.toString();
+ } else {
+ commandString = lbf.translate(command).toString();
+ }
+
+ List[] rows = data.get(commandString);
if(rows == null) {
if (mustRegisterCommands) {
- throw new TeiidComponentException("Unknown command: " + command.toString()); //$NON-NLS-1$
+ throw new TeiidComponentException("Unknown command: " + commandString); //$NON-NLS-1$
}
// Create one row of nulls
rows = new List[1];
Modified: trunk/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataFactory.java
===================================================================
--- trunk/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataFactory.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/metadata/src/main/java/org/teiid/metadata/index/IndexMetadataFactory.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -603,7 +603,7 @@
* recordType|pathInModel|UUID|nameInSource|parentObjectID|
* @param name The partially/fully qualified name for which
* the pattern match string is to be constructed.
- * @return The pattern match string of the form: recordType|*name|*
+ * @return The pattern match string of the form: recordType|name|*
*/
private String getMatchPattern(final char recordType, final String name) {
ArgCheck.isNotNull(name);
@@ -611,8 +611,7 @@
// construct the pattern string
String patternStr = "" //$NON-NLS-1$
+ recordType
- + IndexConstants.RECORD_STRING.RECORD_DELIMITER
- + IndexConstants.RECORD_STRING.MATCH_CHAR;
+ + IndexConstants.RECORD_STRING.RECORD_DELIMITER;
if(name != null) {
patternStr = patternStr + name.trim().toUpperCase()
+ IndexConstants.RECORD_STRING.RECORD_DELIMITER
Modified: trunk/metadata/src/test/java/org/teiid/metadata/index/TestMultipleModelIndexes.java
===================================================================
--- trunk/metadata/src/test/java/org/teiid/metadata/index/TestMultipleModelIndexes.java 2011-01-10 22:09:53 UTC (rev 2825)
+++ trunk/metadata/src/test/java/org/teiid/metadata/index/TestMultipleModelIndexes.java 2011-01-11 02:17:53 UTC (rev 2826)
@@ -46,4 +46,12 @@
assertNotNull(t.getColumns().get(0).getDatatype());
}
+ @Test public void testSchemaLoad() throws Exception {
+ TransformationMetadata tm = VDBMetadataFactory.getVDBMetadata(UnitTestUtil.getTestDataPath() + "/Test.vdb");
+
+ //ensure that datatypes are set
+ Table t = tm.getGroupID("Northwind.Northwind.dbo.Employees");
+ assertFalse(t.isVirtual());
+ }
+
}
Copied: trunk/metadata/src/test/resources/Test.vdb (from rev 2825, branches/7.1.x/metadata/src/test/resources/Test.vdb)
===================================================================
(Binary files differ)
13 years, 4 months
teiid SVN: r2825 - in trunk: connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce and 17 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-01-10 17:09:53 -0500 (Mon, 10 Jan 2011)
New Revision: 2825
Modified:
trunk/common-core/src/main/java/org/teiid/core/util/SqlUtil.java
trunk/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java
trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
trunk/engine/src/main/java/org/teiid/query/optimizer/xml/QueryUtil.java
trunk/engine/src/main/java/org/teiid/query/resolver/CommandResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/DeleteResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/DynamicCommandResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/ExecResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/InsertResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/SimpleQueryResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/TempTableResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateProcedureResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateResolver.java
trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java
trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java
trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
trunk/engine/src/main/resources/org/teiid/query/i18n.properties
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java
trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java
trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java
trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java
trunk/engine/src/test/java/org/teiid/query/sql/util/TestElementSymbolOptimizer.java
trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java
trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java
trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java
trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/BaseQueryTest.java
Log:
consolidating view resolving in anticipation of TEIID-1326. also simplifying resolving arguments and adding a resolving hook for trigger actions for designer integration
Modified: trunk/common-core/src/main/java/org/teiid/core/util/SqlUtil.java
===================================================================
--- trunk/common-core/src/main/java/org/teiid/core/util/SqlUtil.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/common-core/src/main/java/org/teiid/core/util/SqlUtil.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -56,56 +56,6 @@
return PATTERN.matcher(sql).matches();
}
- /**
- * Simple method which normalizes a SQL string by replacing CR characters, new line characters and Tab characters with spaces,
- * then trimming the string to remove unneeded spaces.
- *
- * @param inputSqlString
- * @return
- * @since 5.0
- */
- public static String normalize(String inputSqlString) {
- String normalizedString = inputSqlString;
- if (inputSqlString != null && inputSqlString.length() > 0) {
- if ( inputSqlString.indexOf(NL_CHAR) > -1 ||
- inputSqlString.indexOf(CR_CHAR) > -1 ||
- inputSqlString.indexOf(TAB_CHAR) > -1 ||
- inputSqlString.indexOf(StringUtil.Constants.DBL_SPACE) > -1) {
- normalizedString = normalizedString.replace(NL_CHAR, SPACE_CHAR);
- normalizedString = normalizedString.replace(CR_CHAR, SPACE_CHAR);
- normalizedString = normalizedString.replace(TAB_CHAR, SPACE_CHAR);
- normalizedString = StringUtil.replaceAll(normalizedString,
- StringUtil.Constants.DBL_SPACE,
- StringUtil.Constants.SPACE);
-
- }
- normalizedString = StringUtil.collapseWhitespace(normalizedString);
- }
- return normalizedString;
- }
-
- /**
- * determine if the supplied sql Strings are different
- * @param newSql the new SQL String
- * @param oldSql the old SQL String
- * @return 'true' if strings differ, 'false' if same
- */
- public static boolean stringsAreDifferent(String newSql, String oldSql) {
- boolean isDifferent = true;
- if(newSql==null) {
- if(oldSql==null) {
- isDifferent = false;
- }
- } else if(oldSql!=null) {
- String normalizedNewSql = normalize(newSql);
- String normalizedOldSql = normalize(oldSql);
- if(normalizedNewSql.equals(normalizedOldSql)) {
- isDifferent=false;
- }
- }
- return isDifferent;
- }
-
public static SQLException createFeatureNotSupportedException() {
return new SQLFeatureNotSupportedException();
}
Modified: trunk/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java
===================================================================
--- trunk/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/connectors/connector-salesforce/src/main/java/org/teiid/resource/adapter/salesforce/SalesforceConnectionImpl.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -162,7 +162,7 @@
QueryOptions qo = partnerFactory.createQueryOptions();
qo.setBatchSize(batchSize);
try {
- if(queryAll) {
+ if(queryAll != null && queryAll) {
qr = sfSoap.queryAll(queryString, sh);
} else {
MruHeader mruHeader = partnerFactory.createMruHeader();
Modified: trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/common/buffer/impl/BufferManagerImpl.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -65,6 +65,7 @@
import org.teiid.logging.LogManager;
import org.teiid.query.QueryPlugin;
import org.teiid.query.processor.relational.ListNestedSortComparator;
+import org.teiid.query.sql.symbol.Expression;
/**
@@ -582,7 +583,41 @@
@Override
public int getSchemaSize(List elements) {
- return elements.size();
+ int total = 0;
+ //we make a assumption that the average column size under 64bits is approximately 128bytes
+ //this includes alignment, row/array, and reference overhead
+ for (Object element : elements) {
+ Class<?> type = ((Expression)element).getType();
+ if (type == DataTypeManager.DefaultDataClasses.STRING) {
+ total += 256; //assumes an "average" string length of approximately 100 chars
+ } else if (type == DataTypeManager.DefaultDataClasses.DATE
+ || type == DataTypeManager.DefaultDataClasses.TIME
+ || type == DataTypeManager.DefaultDataClasses.TIMESTAMP) {
+ total += 32;
+ } else if (type == DataTypeManager.DefaultDataClasses.LONG
+ || type == DataTypeManager.DefaultDataClasses.DOUBLE) {
+ total += 20;
+ } else if (type == DataTypeManager.DefaultDataClasses.INTEGER
+ || type == DataTypeManager.DefaultDataClasses.FLOAT) {
+ total += 14;
+ } else if (type == DataTypeManager.DefaultDataClasses.CHAR
+ || type == DataTypeManager.DefaultDataClasses.SHORT) {
+ total += 10;
+ } else if (type == DataTypeManager.DefaultDataClasses.BOOLEAN
+ || type == DataTypeManager.DefaultDataClasses.BYTE
+ || type == DataTypeManager.DefaultDataClasses.NULL) {
+ //even if value caching is turned off we don't bother counting
+ //the additional references that may exist to boolean and byte values
+ total += 8;
+ } else if (type == DataTypeManager.DefaultDataClasses.OBJECT) {
+ total += 1024;
+ } else {
+ total += 512; //assumes buffer overhead in the case of lobs
+ //however the account for lobs is misleading as the lob
+ //references are not actually removed from memory
+ }
+ }
+ return Math.max(1, total/128);
}
public void setMaxReserveBatchColumns(int maxReserve) {
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/MetaDataProcessor.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -22,7 +22,6 @@
package org.teiid.dqp.internal.process;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -43,7 +42,6 @@
import org.teiid.dqp.internal.process.SessionAwareCache.CacheID;
import org.teiid.dqp.internal.process.multisource.MultiSourceMetadataWrapper;
import org.teiid.dqp.message.RequestID;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.SupportConstants;
import org.teiid.query.metadata.TempMetadataAdapter;
@@ -213,7 +211,7 @@
command = plan.getCommand();
} else {
command = QueryParser.getQueryParser().parseCommand(sql, info);
- QueryResolver.resolveCommand(command, Collections.EMPTY_MAP, this.metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, this.metadata);
}
return getMetadataForCommand(command);
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/Request.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -280,7 +280,7 @@
}
//ensure that the user command is distinct from the processing command
//rewrite and planning may alter options, symbols, etc.
- QueryResolver.resolveCommand(command, metadata, analysisRecord);
+ QueryResolver.resolveCommand(command, metadata);
this.userCommand = (Command)command.clone();
}
Modified: trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/metadata/TempMetadataAdapter.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -180,9 +180,7 @@
if (tempID.getType() != null) {
return DataTypeManager.getDataTypeName( tempID.getType() );
}
- // If type is null, check element ID stored in temp group store.
- TempMetadataID storedTempID = this.tempStore.getTempElementID(tempID.getID());
- return DataTypeManager.getDataTypeName( storedTempID.getType() );
+ throw new AssertionError("No type set for element " + elementID); //$NON-NLS-1$
}
return this.actualMetadata.getElementType(elementID);
}
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -25,7 +25,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -33,7 +32,6 @@
import java.util.Set;
import org.teiid.api.exception.query.QueryMetadataException;
-import org.teiid.api.exception.query.QueryParserException;
import org.teiid.api.exception.query.QueryPlannerException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.api.exception.query.QueryValidatorException;
@@ -66,13 +64,11 @@
import org.teiid.query.optimizer.relational.rules.RuleCollapseSource;
import org.teiid.query.optimizer.relational.rules.RuleConstants;
import org.teiid.query.optimizer.relational.rules.RuleMergeCriteria;
-import org.teiid.query.parser.QueryParser;
import org.teiid.query.processor.ProcessorPlan;
import org.teiid.query.processor.relational.RelationalPlan;
import org.teiid.query.processor.relational.JoinNode.JoinStrategyType;
import org.teiid.query.resolver.ProcedureContainerResolver;
import org.teiid.query.resolver.QueryResolver;
-import org.teiid.query.resolver.util.BindVariableVisitor;
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.rewriter.QueryRewriter;
import org.teiid.query.sql.LanguageObject;
@@ -1095,7 +1091,7 @@
qnode = metadata.getVirtualPlan(metadataID);
}
- Command result = getCommand(virtualGroup, qnode, cacheString, metadata, analysisRecord);
+ Command result = QueryResolver.resolveView(virtualGroup, qnode, cacheString, metadata);
return QueryRewriter.rewrite(result, metadata, context);
}
@@ -1136,7 +1132,7 @@
for (Object index : indexes) {
id.addIndex(resolveIndex(metadata, id, index));
}
- Command c = getCommand(table, metadata.getVirtualPlan(table.getMetadataID()), SQLConstants.Reserved.SELECT, metadata, analysisRecord);
+ Command c = QueryResolver.resolveView(table, metadata.getVirtualPlan(table.getMetadataID()), SQLConstants.Reserved.SELECT, metadata);
CacheHint hint = c.getCacheHint();
if (hint != null) {
recordAnnotation(analysisRecord, Annotation.MATERIALIZED_VIEW, Priority.LOW, "SimpleQueryResolver.cache_hint_used", table, matTableName, id.getCacheHint()); //$NON-NLS-1$
@@ -1162,36 +1158,6 @@
return primaryKey;
}
- private static Command getCommand(GroupSymbol virtualGroup, QueryNode qnode,
- String cacheString, QueryMetadataInterface qmi, AnalysisRecord analysisRecord) throws TeiidComponentException,
- QueryMetadataException, QueryResolverException,
- QueryValidatorException {
- Command result = (Command)qmi.getFromMetadataCache(virtualGroup.getMetadataID(), "transformation/" + cacheString); //$NON-NLS-1$
- if (result != null) {
- result = (Command)result.clone();
- } else {
- result = qnode.getCommand();
-
- if (result == null) {
- try {
- result = QueryParser.getQueryParser().parseCommand(qnode.getQuery());
- } catch(QueryParserException e) {
- throw new QueryResolverException(e, "ERR.015.008.0011", QueryPlugin.Util.getString("ERR.015.008.0011", qnode.getGroupName())); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- //Handle bindings and references
- List bindings = qnode.getBindings();
- if (bindings != null){
- BindVariableVisitor.bindReferences(result, bindings, qmi);
- }
- }
- QueryResolver.resolveCommand(result, Collections.EMPTY_MAP, qmi, analysisRecord);
- Request.validateWithVisitor(new ValidationVisitor(), qmi, result);
- qmi.addToMetadataCache(virtualGroup.getMetadataID(), "transformation/" + cacheString, result.clone()); //$NON-NLS-1$
- }
- return result;
- }
-
public static boolean isNoCacheGroup(QueryMetadataInterface metadata,
Object metadataID,
Option option) throws QueryMetadataException,
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/xml/QueryUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/xml/QueryUtil.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/xml/QueryUtil.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -37,7 +37,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.TeiidProcessingException;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
@@ -101,7 +100,7 @@
throws TeiidComponentException, QueryPlannerException {
// Run resolver
try {
- QueryResolver.resolveCommand(query, Collections.EMPTY_MAP, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(query, metadata);
} catch(QueryResolverException e) {
throw new QueryPlannerException(e, e.getMessage());
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/CommandResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/CommandResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/CommandResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -25,7 +25,6 @@
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.sql.lang.Command;
@@ -40,14 +39,13 @@
* Resolve the command using the metadata.
* @param command The command to resolve
* @param metadata Metadata
- * @param analysis
* @param resolveNullLiterals true if the resolver should consider replacing null literals with more appropriate types
* @return the TempMetadataStore containing the metadata defined by this command
* @throws QueryMetadataException If there is a metadata problem
* @throws QueryResolverException If the query cannot be resolved
* @throws TeiidComponentException If there is an internal error
*/
- void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException;
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -23,7 +23,6 @@
package org.teiid.query.resolver;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
import org.teiid.api.exception.query.QueryMetadataException;
@@ -60,8 +59,7 @@
public abstract class ProcedureContainerResolver implements CommandResolver {
public abstract void resolveProceduralCommand(Command command,
- TempMetadataAdapter metadata,
- AnalysisRecord analysis) throws QueryMetadataException,
+ TempMetadataAdapter metadata) throws QueryMetadataException,
QueryResolverException,
TeiidComponentException;
@@ -114,8 +112,8 @@
ta.setView(procCommand.getGroup());
TempMetadataAdapter tma = new TempMetadataAdapter(metadata, new TempMetadataStore());
ta.setTemporaryMetadata(tma.getMetadataStore().getData());
- GroupContext externalGroups = procCommand.getExternalGroupContexts();
-
+ GroupContext externalGroups = ta.getExternalGroupContexts();
+ //TODO: it seems easier to just inline the handling here rather than have each of the resolvers check for trigger actions
List<ElementSymbol> viewElements = ResolverUtil.resolveElementsInGroup(ta.getView(), metadata);
if (procCommand instanceof Update || procCommand instanceof Insert) {
addChanging(tma.getMetadataStore(), externalGroups, viewElements);
@@ -124,10 +122,9 @@
if (procCommand instanceof Update || procCommand instanceof Delete) {
ProcedureContainerResolver.addScalarGroup(SQLConstants.Reserved.OLD, tma.getMetadataStore(), externalGroups, viewElements);
}
-
- new UpdateProcedureResolver().resolveBlock(new CreateUpdateProcedureCommand(), ta.getBlock(), externalGroups, tma, analysis);
-
- return subCommand;
+ QueryResolver.setChildMetadata(subCommand, tma.getMetadataStore().getData(), externalGroups);
+ QueryResolver.resolveCommand(subCommand, metadata);
+ return ta;
}
//find the childMetadata using a clean metadata store
@@ -138,7 +135,7 @@
QueryResolver.setChildMetadata(subCommand, childMetadata.getData(), externalGroups);
- QueryResolver.resolveCommand(subCommand, Collections.EMPTY_MAP, metadata, analysis);
+ QueryResolver.resolveCommand(subCommand, metadata);
return subCommand;
}
@@ -215,16 +212,16 @@
}
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
ProcedureContainer procCommand = (ProcedureContainer)command;
resolveGroup(metadata, procCommand);
- resolveProceduralCommand(procCommand, metadata, analysis);
+ resolveProceduralCommand(procCommand, metadata);
getPlan(metadata, procCommand);
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/QueryResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -25,19 +25,24 @@
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.teiid.api.exception.query.QueryMetadataException;
+import org.teiid.api.exception.query.QueryParserException;
import org.teiid.api.exception.query.QueryResolverException;
+import org.teiid.api.exception.query.QueryValidatorException;
import org.teiid.core.TeiidComponentException;
+import org.teiid.dqp.internal.process.Request;
import org.teiid.logging.LogManager;
+import org.teiid.query.QueryPlugin;
import org.teiid.query.analysis.AnalysisRecord;
+import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.metadata.TempMetadataStore;
+import org.teiid.query.parser.QueryParser;
import org.teiid.query.resolver.command.BatchedUpdateResolver;
import org.teiid.query.resolver.command.DeleteResolver;
import org.teiid.query.resolver.command.DynamicCommandResolver;
@@ -49,6 +54,7 @@
import org.teiid.query.resolver.command.UpdateProcedureResolver;
import org.teiid.query.resolver.command.UpdateResolver;
import org.teiid.query.resolver.command.XMLQueryResolver;
+import org.teiid.query.resolver.util.BindVariableVisitor;
import org.teiid.query.resolver.util.ResolverUtil;
import org.teiid.query.resolver.util.ResolverVisitor;
import org.teiid.query.sql.lang.Command;
@@ -60,9 +66,11 @@
import org.teiid.query.sql.lang.Query;
import org.teiid.query.sql.lang.SubqueryContainer;
import org.teiid.query.sql.lang.UnaryFromClause;
+import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
+import org.teiid.query.validator.ValidationVisitor;
/**
@@ -91,67 +99,34 @@
return cr.expandCommand(proc, metadata, analysisRecord);
}
- /**
- * This implements an algorithm to resolve all the symbols created by the parser into real metadata IDs
- * @param command Command the SQL command we are running (Select, Update, Insert, Delete)
- * @param metadata QueryMetadataInterface the metadata
- * @param analysis The analysis record which can be used to add anotations and debug information.
- */
- public static void resolveCommand(Command command, QueryMetadataInterface metadata, AnalysisRecord analysis)
- throws QueryResolverException, TeiidComponentException {
+ /**
+ * This implements an algorithm to resolve all the symbols created by the
+ * parser into real metadata IDs
+ *
+ * @param command
+ * Command the SQL command we are running (Select, Update,
+ * Insert, Delete)
+ * @param metadata
+ * QueryMetadataInterface the metadata
+ * @return
+ */
+ public static TempMetadataStore resolveCommand(Command command,
+ QueryMetadataInterface metadata) throws QueryResolverException,
+ TeiidComponentException {
- resolveCommand(command, Collections.EMPTY_MAP, metadata, analysis);
- }
+ return resolveCommand(command, metadata, true);
+ }
- /**
- * This implements an algorithm to resolve all the symbols created by the parser into real metadata IDs
- * @param command Command the SQL command we are running (Select, Update, Insert, Delete)
- * @param metadata QueryMetadataInterface the metadata
- */
- public static void resolveCommand(Command command, QueryMetadataInterface metadata)
- throws QueryResolverException, TeiidComponentException {
-
- resolveCommand(command, Collections.EMPTY_MAP, metadata, AnalysisRecord.createNonRecordingRecord());
- }
-
- /**
- * This implements an algorithm to resolve all the symbols created by the parser into real metadata IDs
- * @param externalMetadata Map of GroupSymbol to a List of ElementSymbol that identifies
- * valid external groups that can be resolved against. Any elements resolved against external
- * groups will be treated as variables
- * @param metadata QueryMetadataInterface the metadata
- * @param analysis The analysis record which can be used to add anotations and debug information.
- * @param command Command the SQL command we are running (Select, Update, Insert, Delete)
- */
- public static TempMetadataStore resolveCommand(Command currentCommand, Map externalMetadata, QueryMetadataInterface metadata,
- AnalysisRecord analysis)
- throws QueryResolverException, TeiidComponentException {
- return resolveCommand(currentCommand, externalMetadata, metadata, analysis, true);
- }
-
- public static TempMetadataStore resolveCommand(Command currentCommand, Map externalMetadata, QueryMetadataInterface metadata,
- AnalysisRecord analysis, boolean resolveNullLiterals)
+ public static TempMetadataStore resolveCommand(Command currentCommand, QueryMetadataInterface metadata, boolean resolveNullLiterals)
throws QueryResolverException, TeiidComponentException {
LogManager.logTrace(org.teiid.logging.LogConstants.CTX_QUERY_RESOLVER, new Object[]{"Resolving command", currentCommand}); //$NON-NLS-1$
TempMetadataAdapter resolverMetadata = null;
try {
- TempMetadataStore rootExternalStore = new TempMetadataStore();
- if(externalMetadata != null) {
- for(Iterator iter = externalMetadata.entrySet().iterator(); iter.hasNext();) {
- Map.Entry entry = (Map.Entry)iter.next();
- GroupSymbol group = (GroupSymbol) entry.getKey();
- List elements = (List) entry.getValue();
- rootExternalStore.addTempGroup(group.getName(), elements);
- currentCommand.addExternalGroupToContext(group);
- }
- }
Map tempMetadata = currentCommand.getTemporaryMetadata();
if(tempMetadata == null) {
- currentCommand.setTemporaryMetadata(new HashMap(rootExternalStore.getData()));
- } else {
- tempMetadata.putAll(rootExternalStore.getData());
+ currentCommand.setTemporaryMetadata(new HashMap());
}
TempMetadataStore discoveredMetadata = new TempMetadataStore(currentCommand.getTemporaryMetadata());
@@ -159,12 +134,11 @@
resolverMetadata = new TempMetadataAdapter(metadata, discoveredMetadata);
// Resolve external groups for command
- Collection externalGroups = currentCommand.getAllExternalGroups();
- Iterator extIter = externalGroups.iterator();
- while(extIter.hasNext()) {
- GroupSymbol extGroup = (GroupSymbol) extIter.next();
+ Collection<GroupSymbol> externalGroups = currentCommand.getAllExternalGroups();
+ for (GroupSymbol extGroup : externalGroups) {
Object metadataID = extGroup.getMetadataID();
//make sure that the group is resolved and that it is pointing to the appropriate temp group
+ //TODO: this is mainly for XML resolving since it sends external groups in unresolved
if (metadataID == null || (!(extGroup.getMetadataID() instanceof TempMetadataID) && discoveredMetadata.getTempGroupID(extGroup.getName()) != null)) {
metadataID = resolverMetadata.getGroupID(extGroup.getName());
extGroup.setMetadataID(metadataID);
@@ -174,7 +148,7 @@
CommandResolver resolver = chooseResolver(currentCommand, resolverMetadata);
// Resolve this command
- resolver.resolveCommand(currentCommand, resolverMetadata, analysis, resolveNullLiterals);
+ resolver.resolveCommand(currentCommand, resolverMetadata, resolveNullLiterals);
} catch(QueryMetadataException e) {
throw new QueryResolverException(e, e.getMessage());
}
@@ -207,6 +181,7 @@
case Command.TYPE_UPDATE: return UPDATE_RESOLVER;
case Command.TYPE_DELETE: return DELETE_RESOLVER;
case Command.TYPE_STORED_PROCEDURE: return EXEC_RESOLVER;
+ case Command.TYPE_TRIGGER_ACTION: return UPDATE_PROCEDURE_RESOLVER;
case Command.TYPE_UPDATE_PROCEDURE: return UPDATE_PROCEDURE_RESOLVER;
case Command.TYPE_BATCHED_UPDATE: return BATCHED_UPDATE_RESOLVER;
case Command.TYPE_DYNAMIC: return DYNAMIC_COMMAND_RESOLVER;
@@ -300,15 +275,61 @@
}
public static void resolveSubqueries(Command command,
- TempMetadataAdapter metadata, AnalysisRecord analysis, Collection<GroupSymbol> externalGroups)
+ TempMetadataAdapter metadata, Collection<GroupSymbol> externalGroups)
throws QueryResolverException, TeiidComponentException {
for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(command)) {
QueryResolver.setChildMetadata(container.getCommand(), command);
if (externalGroups != null) {
container.getCommand().pushNewResolvingContext(externalGroups);
}
- QueryResolver.resolveCommand(container.getCommand(), Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
+ QueryResolver.resolveCommand(container.getCommand(), metadata.getMetadata());
}
}
+
+ public static Command resolveView(GroupSymbol virtualGroup, QueryNode qnode,
+ String cacheString, QueryMetadataInterface qmi) throws TeiidComponentException,
+ QueryMetadataException, QueryResolverException,
+ QueryValidatorException {
+ Command result = (Command)qmi.getFromMetadataCache(virtualGroup.getMetadataID(), "transformation/" + cacheString); //$NON-NLS-1$
+ if (result != null) {
+ result = (Command)result.clone();
+ } else {
+ result = qnode.getCommand();
+
+ if (result == null) {
+ try {
+ result = QueryParser.getQueryParser().parseCommand(qnode.getQuery());
+ } catch(QueryParserException e) {
+ throw new QueryResolverException(e, "ERR.015.008.0011", QueryPlugin.Util.getString("ERR.015.008.0011", qnode.getGroupName())); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ //Handle bindings and references
+ List bindings = qnode.getBindings();
+ if (bindings != null){
+ BindVariableVisitor.bindReferences(result, bindings, qmi);
+ }
+ }
+ QueryResolver.resolveCommand(result, qmi);
+ Request.validateWithVisitor(new ValidationVisitor(), qmi, result);
+ qmi.addToMetadataCache(virtualGroup.getMetadataID(), "transformation/" + cacheString, result.clone()); //$NON-NLS-1$
+ }
+ return result;
+ }
+
+ public static void buildExternalGroups(Map<GroupSymbol, List<ElementSymbol>> externalMetadata, Command currentCommand) {
+ TempMetadataStore rootExternalStore = new TempMetadataStore();
+ for(Map.Entry<GroupSymbol, List<ElementSymbol>> entry : externalMetadata.entrySet()) {
+ GroupSymbol group = entry.getKey();
+ List<ElementSymbol> elements = entry.getValue();
+ rootExternalStore.addTempGroup(group.getName(), elements);
+ currentCommand.addExternalGroupToContext(group);
+ }
+ Map tempMetadata = currentCommand.getTemporaryMetadata();
+ if(tempMetadata == null) {
+ currentCommand.setTemporaryMetadata(rootExternalStore.getData());
+ } else {
+ tempMetadata.putAll(rootExternalStore.getData());
+ }
+ }
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/BatchedUpdateResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -22,13 +22,11 @@
package org.teiid.query.resolver.command;
-import java.util.Collections;
import java.util.Iterator;
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.resolver.CommandResolver;
import org.teiid.query.resolver.QueryResolver;
@@ -42,7 +40,7 @@
*/
public class BatchedUpdateResolver implements CommandResolver {
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
BatchedUpdateCommand batchedUpdateCommand = (BatchedUpdateCommand) command;
@@ -50,7 +48,7 @@
for (Iterator i = batchedUpdateCommand.getSubCommands().iterator(); i.hasNext();) {
Command subCommand = (Command)i.next();
QueryResolver.setChildMetadata(subCommand, command);
- QueryResolver.resolveCommand(subCommand, Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
+ QueryResolver.resolveCommand(subCommand, metadata.getMetadata());
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/DeleteResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/DeleteResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/DeleteResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -28,7 +28,6 @@
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataStore;
@@ -48,9 +47,9 @@
public class DeleteResolver extends ProcedureContainerResolver {
/**
- * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord)
+ * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter)
*/
- public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis)
+ public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
//Cast to known type
@@ -58,7 +57,7 @@
Set<GroupSymbol> groups = new HashSet<GroupSymbol>();
groups.add(delete.getGroup());
- QueryResolver.resolveSubqueries(command, metadata, analysis, groups);
+ QueryResolver.resolveSubqueries(command, metadata, groups);
ResolverVisitor.resolveLanguageObject(delete, groups, delete.getExternalGroupContexts(), metadata);
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/DynamicCommandResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/DynamicCommandResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/DynamicCommandResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -32,7 +32,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.resolver.CommandResolver;
@@ -50,9 +49,9 @@
public class DynamicCommandResolver implements CommandResolver {
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
DynamicCommand dynamicCmd = (DynamicCommand)command;
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/ExecResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/ExecResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/ExecResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -23,10 +23,8 @@
package org.teiid.query.resolver.command;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -36,7 +34,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.StoredProcedureInfo;
@@ -239,9 +236,7 @@
// Look through parameters to find input elements - these become child metadata
List<ElementSymbol> tempElements = new ArrayList<ElementSymbol>();
- Iterator iter = storedProcedureCommand.getParameters().iterator();
- while(iter.hasNext()) {
- SPParameter param = (SPParameter) iter.next();
+ for (SPParameter param : storedProcedureCommand.getParameters()) {
if(param.getParameterType() == ParameterInfo.IN || param.getParameterType() == ParameterInfo.INOUT) {
ElementSymbol symbol = param.getParameterSymbol();
tempElements.add(symbol);
@@ -254,58 +249,53 @@
}
/**
- * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord)
+ * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter)
*/
- public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis)
+ public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
findCommandMetadata(command, metadata.getMetadataStore(), metadata);
//Resolve expressions on input parameters
StoredProcedure storedProcedureCommand = (StoredProcedure) command;
- List params = storedProcedureCommand.getParameters();
- if(params.size() > 0) {
- GroupContext externalGroups = storedProcedureCommand.getExternalGroupContexts();
- Iterator paramIter = params.iterator();
- while(paramIter.hasNext()) {
- SPParameter param = (SPParameter) paramIter.next();
- Expression expr = param.getExpression();
- if(expr == null) {
- continue;
- }
- for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(expr)) {
- QueryResolver.setChildMetadata(container.getCommand(), command);
-
- QueryResolver.resolveCommand(container.getCommand(), Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
- }
- ResolverVisitor.resolveLanguageObject(expr, null, externalGroups, metadata);
- Class paramType = param.getClassType();
-
- ResolverUtil.setDesiredType(expr, paramType, storedProcedureCommand);
+ GroupContext externalGroups = storedProcedureCommand.getExternalGroupContexts();
+ for (SPParameter param : storedProcedureCommand.getParameters()) {
+ Expression expr = param.getExpression();
+ if(expr == null) {
+ continue;
+ }
+ for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(expr)) {
+ QueryResolver.setChildMetadata(container.getCommand(), command);
- // Compare type of parameter expression against parameter type
- // and add implicit conversion if necessary
- Class exprType = expr.getType();
- if(paramType == null || exprType == null) {
- throw new QueryResolverException("ERR.015.008.0061", QueryPlugin.Util.getString("ERR.015.008.0061", storedProcedureCommand.getProcedureName(), param.getName())); //$NON-NLS-1$ //$NON-NLS-2$
- }
- String tgtType = DataTypeManager.getDataTypeName(paramType);
- String srcType = DataTypeManager.getDataTypeName(exprType);
- Expression result = null;
-
- if (param.getParameterType() == SPParameter.RETURN_VALUE || param.getParameterType() == SPParameter.OUT) {
- if (!ResolverUtil.canImplicitlyConvert(tgtType, srcType)) {
- throw new QueryResolverException(QueryPlugin.Util.getString("ExecResolver.out_type_mismatch", param.getParameterSymbol(), tgtType, srcType)); //$NON-NLS-1$
- }
- } else {
- try {
- result = ResolverUtil.convertExpression(expr, tgtType, metadata);
- } catch (QueryResolverException e) {
- throw new QueryResolverException(e, QueryPlugin.Util.getString("ExecResolver.Param_convert_fail", new Object[] { srcType, tgtType})); //$NON-NLS-1$
- }
- param.setExpression(result);
- }
+ QueryResolver.resolveCommand(container.getCommand(), metadata.getMetadata());
}
+ ResolverVisitor.resolveLanguageObject(expr, null, externalGroups, metadata);
+ Class<?> paramType = param.getClassType();
+
+ ResolverUtil.setDesiredType(expr, paramType, storedProcedureCommand);
+
+ // Compare type of parameter expression against parameter type
+ // and add implicit conversion if necessary
+ Class<?> exprType = expr.getType();
+ if(paramType == null || exprType == null) {
+ throw new QueryResolverException("ERR.015.008.0061", QueryPlugin.Util.getString("ERR.015.008.0061", storedProcedureCommand.getProcedureName(), param.getName())); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ String tgtType = DataTypeManager.getDataTypeName(paramType);
+ String srcType = DataTypeManager.getDataTypeName(exprType);
+ Expression result = null;
+
+ if (param.getParameterType() == SPParameter.RETURN_VALUE || param.getParameterType() == SPParameter.OUT) {
+ if (!ResolverUtil.canImplicitlyConvert(tgtType, srcType)) {
+ throw new QueryResolverException(QueryPlugin.Util.getString("ExecResolver.out_type_mismatch", param.getParameterSymbol(), tgtType, srcType)); //$NON-NLS-1$
+ }
+ } else {
+ try {
+ result = ResolverUtil.convertExpression(expr, tgtType, metadata);
+ } catch (QueryResolverException e) {
+ throw new QueryResolverException(e, QueryPlugin.Util.getString("ExecResolver.Param_convert_fail", new Object[] { srcType, tgtType})); //$NON-NLS-1$
+ }
+ param.setExpression(result);
+ }
}
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/InsertResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/InsertResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/InsertResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -24,7 +24,6 @@
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -38,7 +37,6 @@
import org.teiid.core.types.DataTypeManager;
import org.teiid.core.util.Assertion;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.resolver.ProcedureContainerResolver;
@@ -66,16 +64,16 @@
/**
* Resolve an INSERT. Need to resolve elements, constants, types, etc.
- * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord)
+ * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter)
*/
- public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis)
+ public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
// Cast to known type
Insert insert = (Insert) command;
if (insert.getValues() != null) {
- QueryResolver.resolveSubqueries(command, metadata, analysis, null);
+ QueryResolver.resolveSubqueries(command, metadata, null);
//variables and values must be resolved separately to account for implicitly defined temp groups
resolveList(insert.getValues(), metadata, insert.getExternalGroupContexts(), null);
}
@@ -83,7 +81,7 @@
if(insert.getQueryExpression() != null) {
QueryResolver.setChildMetadata(insert.getQueryExpression(), command);
- QueryResolver.resolveCommand(insert.getQueryExpression(), Collections.EMPTY_MAP, metadata.getMetadata(), analysis, false);
+ QueryResolver.resolveCommand(insert.getQueryExpression(), metadata.getMetadata(), false);
}
Set<GroupSymbol> groups = new HashSet<GroupSymbol>();
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/SetQueryResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -23,7 +23,6 @@
package org.teiid.query.resolver.command;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -33,7 +32,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.resolver.CommandResolver;
@@ -50,19 +48,19 @@
public class SetQueryResolver implements CommandResolver {
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
SetQuery setQuery = (SetQuery) command;
- SimpleQueryResolver.resolveWith(metadata, analysis, setQuery);
+ SimpleQueryResolver.resolveWith(metadata, setQuery);
QueryCommand firstCommand = setQuery.getLeftQuery();
QueryResolver.setChildMetadata(firstCommand, setQuery);
- QueryResolver.resolveCommand(firstCommand, Collections.EMPTY_MAP, metadata.getMetadata(), analysis, false);
+ QueryResolver.resolveCommand(firstCommand, metadata.getMetadata(), false);
List firstProject = firstCommand.getProjectedSymbols();
List<Class<?>> firstProjectTypes = new ArrayList<Class<?>>();
@@ -74,7 +72,7 @@
QueryCommand rightCommand = setQuery.getRightQuery();
QueryResolver.setChildMetadata(rightCommand, setQuery);
- QueryResolver.resolveCommand(rightCommand, Collections.EMPTY_MAP, metadata.getMetadata(), analysis, false);
+ QueryResolver.resolveCommand(rightCommand, metadata.getMetadata(), false);
if (firstProject.size() != rightCommand.getProjectedSymbols().size()) {
throw new QueryResolverException(QueryPlugin.Util.getString("ERR.015.012.0035", setQuery.getOperation())); //$NON-NLS-1$
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/SimpleQueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/SimpleQueryResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/SimpleQueryResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -42,7 +42,6 @@
import org.teiid.core.TeiidRuntimeException;
import org.teiid.core.types.DataTypeManager;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.StoredProcedureInfo;
import org.teiid.query.metadata.SupportConstants;
@@ -92,17 +91,17 @@
private static final String ALL_IN_GROUP_SUFFIX = ".*"; //$NON-NLS-1$
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
Query query = (Query) command;
- resolveWith(metadata, analysis, query);
+ resolveWith(metadata, query);
try {
- QueryResolverVisitor qrv = new QueryResolverVisitor(query, metadata, analysis);
+ QueryResolverVisitor qrv = new QueryResolverVisitor(query, metadata);
qrv.visit(query);
ResolverVisitor visitor = (ResolverVisitor)qrv.getVisitor();
visitor.throwException(true);
@@ -138,7 +137,7 @@
}
static void resolveWith(TempMetadataAdapter metadata,
- AnalysisRecord analysis, QueryCommand query) throws QueryResolverException, TeiidComponentException {
+ QueryCommand query) throws QueryResolverException, TeiidComponentException {
if (query.getWith() == null) {
return;
}
@@ -149,7 +148,7 @@
QueryResolver.setChildMetadata(queryExpression, query);
try {
- QueryResolver.resolveCommand(queryExpression, Collections.EMPTY_MAP, metadata.getMetadata(), analysis, false);
+ QueryResolver.resolveCommand(queryExpression, metadata.getMetadata(), false);
} catch (TeiidException err) {
throw new TeiidRuntimeException(err);
}
@@ -211,16 +210,14 @@
private List<GroupSymbol> implicitGroups = new LinkedList<GroupSymbol>();
private TempMetadataAdapter metadata;
private Query query;
- private AnalysisRecord analysis;
private boolean allowImplicit = true;
- public QueryResolverVisitor(Query query, TempMetadataAdapter metadata, AnalysisRecord record) {
+ public QueryResolverVisitor(Query query, TempMetadataAdapter metadata) {
super(new ResolverVisitor(metadata, null, query.getExternalGroupContexts()));
ResolverVisitor visitor = (ResolverVisitor)getVisitor();
visitor.setGroups(currentGroups);
this.query = query;
this.metadata = metadata;
- this.analysis = record;
}
protected void postVisitVisitor(LanguageObject obj) {
@@ -260,7 +257,7 @@
command.pushNewResolvingContext(externalGroups);
try {
- QueryResolver.resolveCommand(command, Collections.EMPTY_MAP, metadata.getMetadata(), analysis, false);
+ QueryResolver.resolveCommand(command, metadata.getMetadata(), false);
} catch (TeiidException err) {
throw new TeiidRuntimeException(err);
}
@@ -496,7 +493,7 @@
}
}
- QueryResolver.resolveCommand(procQuery, Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
+ QueryResolver.resolveCommand(procQuery, metadata.getMetadata());
List<SingleElementSymbol> projectedSymbols = procQuery.getProjectedSymbols();
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/TempTableResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/TempTableResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/TempTableResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -31,7 +31,6 @@
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.resolver.CommandResolver;
@@ -51,9 +50,9 @@
public class TempTableResolver implements CommandResolver {
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
if(command.getType() == Command.TYPE_CREATE) {
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateProcedureResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateProcedureResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateProcedureResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -25,27 +25,24 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.teiid.api.exception.query.QueryMetadataException;
-import org.teiid.api.exception.query.QueryParserException;
import org.teiid.api.exception.query.QueryResolverException;
+import org.teiid.api.exception.query.QueryValidatorException;
import org.teiid.api.exception.query.UnresolvedSymbolDescription;
import org.teiid.client.metadata.ParameterInfo;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
+import org.teiid.language.SQLConstants;
import org.teiid.logging.LogManager;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
-import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.metadata.TempMetadataID;
import org.teiid.query.metadata.TempMetadataStore;
-import org.teiid.query.parser.QueryParser;
import org.teiid.query.resolver.CommandResolver;
import org.teiid.query.resolver.ProcedureContainerResolver;
import org.teiid.query.resolver.QueryResolver;
@@ -69,10 +66,12 @@
import org.teiid.query.sql.proc.IfStatement;
import org.teiid.query.sql.proc.LoopStatement;
import org.teiid.query.sql.proc.Statement;
+import org.teiid.query.sql.proc.TriggerAction;
import org.teiid.query.sql.proc.WhileStatement;
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.sql.symbol.Expression;
import org.teiid.query.sql.symbol.GroupSymbol;
+import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.SymbolMap;
import org.teiid.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
@@ -89,9 +88,7 @@
// not set by user command resolver in case of modeler
if(virtualGroup == null) {
- Iterator groupIter = procCommand.getAllExternalGroups().iterator();
- while(groupIter.hasNext()) {
- GroupSymbol groupSymbol = (GroupSymbol) groupIter.next();
+ for (GroupSymbol groupSymbol : procCommand.getAllExternalGroups()) {
String groupName = groupSymbol.getName();
if(!groupName.equalsIgnoreCase(ProcedureReservedWords.INPUT) &&
!groupName.equalsIgnoreCase(ProcedureReservedWords.INPUTS) &&
@@ -127,35 +124,31 @@
*/
public static Command getQueryTransformCmd(GroupSymbol virtualGroup, QueryMetadataInterface metadata)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
- Command transformCmd = (Command)metadata.getFromMetadataCache(virtualGroup.getMetadataID(), "transformation/select"); //$NON-NLS-1$
- if (transformCmd != null) {
- return transformCmd;
- }
- QueryNode queryNode = metadata.getVirtualPlan(virtualGroup.getMetadataID());
- String transformQuery = queryNode.getQuery();
- try {
- transformCmd = QueryParser.getQueryParser().parseCommand(transformQuery);
- } catch(QueryParserException e) {
- throw new QueryResolverException(e, "ERR.015.008.0013", QueryPlugin.Util.getString("ERR.015.008.0013", virtualGroup)); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
- QueryResolver.resolveCommand(transformCmd, metadata);
-
- return transformCmd;
+ try {
+ return QueryResolver.resolveView(virtualGroup, metadata.getVirtualPlan(virtualGroup.getMetadataID()), SQLConstants.Reserved.SELECT, metadata);
+ } catch (QueryValidatorException e) {
+ throw new QueryResolverException(e, e.getMessage());
+ }
}
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
+
+ if (command instanceof TriggerAction) {
+ TriggerAction ta = (TriggerAction)command;
+ resolveBlock(new CreateUpdateProcedureCommand(), ta.getBlock(), ta.getExternalGroupContexts(), metadata);
+ return;
+ }
CreateUpdateProcedureCommand procCommand = (CreateUpdateProcedureCommand) command;
//by creating a new group context here it means that variables will resolve with a higher precedence than input/changing
GroupContext externalGroups = command.getExternalGroupContexts();
- List symbols = new LinkedList();
+ List<ElementSymbol> symbols = new LinkedList<ElementSymbol>();
// virtual group elements in HAS and TRANSLATE criteria have to be resolved
if(procCommand.isUpdateProcedure()){
@@ -174,11 +167,11 @@
symbols.add(updateCount);
ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.VARIABLES, metadata.getMetadataStore(), externalGroups, symbols);
- resolveBlock(procCommand, procCommand.getBlock(), externalGroups, metadata, analysis);
+ resolveBlock(procCommand, procCommand.getBlock(), externalGroups, metadata);
}
public void resolveBlock(CreateUpdateProcedureCommand command, Block block, GroupContext externalGroups,
- TempMetadataAdapter metadata, AnalysisRecord analysis)
+ TempMetadataAdapter metadata)
throws QueryResolverException, QueryMetadataException, TeiidComponentException {
LogManager.logTrace(org.teiid.logging.LogConstants.CTX_QUERY_RESOLVER, new Object[]{"Resolving block", block}); //$NON-NLS-1$
@@ -190,13 +183,12 @@
//create a new variables group for this block
GroupSymbol variables = ProcedureContainerResolver.addScalarGroup(ProcedureReservedWords.VARIABLES, store, externalGroups, new LinkedList());
- Iterator stmtIter = block.getStatements().iterator();
- while(stmtIter.hasNext()) {
- resolveStatement(command, (Statement)stmtIter.next(), externalGroups, variables, metadata, analysis);
+ for (Statement statement : block.getStatements()) {
+ resolveStatement(command, statement, externalGroups, variables, metadata);
}
}
- private void resolveStatement(CreateUpdateProcedureCommand command, Statement statement, GroupContext externalGroups, GroupSymbol variables, TempMetadataAdapter metadata, AnalysisRecord analysis)
+ private void resolveStatement(CreateUpdateProcedureCommand command, Statement statement, GroupContext externalGroups, GroupSymbol variables, TempMetadataAdapter metadata)
throws QueryResolverException, QueryMetadataException, TeiidComponentException {
LogManager.logTrace(org.teiid.logging.LogConstants.CTX_QUERY_RESOLVER, new Object[]{"Resolving statement", statement}); //$NON-NLS-1$
@@ -205,19 +197,19 @@
IfStatement ifStmt = (IfStatement) statement;
Criteria ifCrit = ifStmt.getCondition();
for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(ifCrit)) {
- resolveEmbeddedCommand(metadata, externalGroups, container.getCommand(), analysis);
+ resolveEmbeddedCommand(metadata, externalGroups, container.getCommand());
}
ResolverVisitor.resolveLanguageObject(ifCrit, null, externalGroups, metadata);
- resolveBlock(command, ifStmt.getIfBlock(), externalGroups, metadata, analysis);
+ resolveBlock(command, ifStmt.getIfBlock(), externalGroups, metadata);
if(ifStmt.hasElseBlock()) {
- resolveBlock(command, ifStmt.getElseBlock(), externalGroups, metadata, analysis);
+ resolveBlock(command, ifStmt.getElseBlock(), externalGroups, metadata);
}
break;
case Statement.TYPE_COMMAND:
CommandStatement cmdStmt = (CommandStatement) statement;
Command subCommand = cmdStmt.getCommand();
- TempMetadataStore discoveredMetadata = resolveEmbeddedCommand(metadata, externalGroups, subCommand, analysis);
+ TempMetadataStore discoveredMetadata = resolveEmbeddedCommand(metadata, externalGroups, subCommand);
if (subCommand instanceof StoredProcedure) {
StoredProcedure sp = (StoredProcedure)subCommand;
@@ -274,7 +266,7 @@
if (exprStmt.getExpression() != null) {
Expression expr = exprStmt.getExpression();
for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(expr)) {
- resolveEmbeddedCommand(metadata, externalGroups, container.getCommand(), analysis);
+ resolveEmbeddedCommand(metadata, externalGroups, container.getCommand());
}
ResolverVisitor.resolveLanguageObject(expr, null, externalGroups, metadata);
}
@@ -307,10 +299,10 @@
WhileStatement whileStmt = (WhileStatement) statement;
Criteria whileCrit = whileStmt.getCondition();
for (SubqueryContainer container : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(whileCrit)) {
- resolveEmbeddedCommand(metadata, externalGroups, container.getCommand(), analysis);
+ resolveEmbeddedCommand(metadata, externalGroups, container.getCommand());
}
ResolverVisitor.resolveLanguageObject(whileCrit, null, externalGroups, metadata);
- resolveBlock(command, whileStmt.getBlock(), externalGroups, metadata, analysis);
+ resolveBlock(command, whileStmt.getBlock(), externalGroups, metadata);
break;
case Statement.TYPE_LOOP:
LoopStatement loopStmt = (LoopStatement) statement;
@@ -326,8 +318,8 @@
throw new QueryResolverException(errorMsg);
}
Command cmd = loopStmt.getCommand();
- resolveEmbeddedCommand(metadata, externalGroups, cmd, analysis);
- List symbols = cmd.getProjectedSymbols();
+ resolveEmbeddedCommand(metadata, externalGroups, cmd);
+ List<SingleElementSymbol> symbols = cmd.getProjectedSymbols();
//add the loop cursor group into its own context
TempMetadataStore store = new TempMetadataStore(new HashMap(metadata.getMetadataStore().getData()));
@@ -336,7 +328,7 @@
ProcedureContainerResolver.addScalarGroup(groupName, store, externalGroups, symbols);
- resolveBlock(command, loopStmt.getBlock(), externalGroups, metadata, analysis);
+ resolveBlock(command, loopStmt.getBlock(), externalGroups, metadata);
break;
case Statement.TYPE_BREAK:
case Statement.TYPE_CONTINUE:
@@ -347,11 +339,11 @@
}
private TempMetadataStore resolveEmbeddedCommand(TempMetadataAdapter metadata, GroupContext groupContext,
- Command cmd, AnalysisRecord analysis) throws TeiidComponentException,
+ Command cmd) throws TeiidComponentException,
QueryResolverException {
QueryResolver.setChildMetadata(cmd, metadata.getMetadataStore().getData(), groupContext);
- return QueryResolver.resolveCommand(cmd, Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
+ return QueryResolver.resolveCommand(cmd, metadata.getMetadata());
}
private void collectDeclareVariable(DeclareStatement obj, GroupSymbol variables, TempMetadataAdapter metadata, GroupContext externalGroups) throws QueryResolverException, TeiidComponentException {
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/UpdateResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -35,7 +35,6 @@
import org.teiid.api.exception.query.QueryMetadataException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.resolver.ProcedureContainerResolver;
@@ -59,9 +58,9 @@
public class UpdateResolver extends ProcedureContainerResolver implements VariableResolver {
/**
- * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter, org.teiid.query.analysis.AnalysisRecord)
+ * @see org.teiid.query.resolver.ProcedureContainerResolver#resolveProceduralCommand(org.teiid.query.sql.lang.Command, org.teiid.query.metadata.TempMetadataAdapter)
*/
- public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis)
+ public void resolveProceduralCommand(Command command, TempMetadataAdapter metadata)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
//Cast to known type
@@ -73,7 +72,7 @@
for (SetClause clause : update.getChangeList().getClauses()) {
ResolverVisitor.resolveLanguageObject(clause.getSymbol(), groups, null, metadata);
}
- QueryResolver.resolveSubqueries(command, metadata, analysis, groups);
+ QueryResolver.resolveSubqueries(command, metadata, groups);
ResolverVisitor.resolveLanguageObject(update, groups, update.getExternalGroupContexts(), metadata);
}
Modified: trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/resolver/command/XMLQueryResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -33,7 +33,6 @@
import org.teiid.core.TeiidComponentException;
import org.teiid.core.util.StringUtil;
import org.teiid.query.QueryPlugin;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
import org.teiid.query.resolver.CommandResolver;
@@ -63,9 +62,9 @@
public class XMLQueryResolver implements CommandResolver {
/**
- * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, AnalysisRecord, boolean)
+ * @see org.teiid.query.resolver.CommandResolver#resolveCommand(org.teiid.query.sql.lang.Command, TempMetadataAdapter, boolean)
*/
- public void resolveCommand(Command command, TempMetadataAdapter metadata, AnalysisRecord analysis, boolean resolveNullLiterals)
+ public void resolveCommand(Command command, TempMetadataAdapter metadata, boolean resolveNullLiterals)
throws QueryMetadataException, QueryResolverException, TeiidComponentException {
Query query = (Query) command;
@@ -96,7 +95,7 @@
QueryResolver.setChildMetadata(subCommand, command);
- QueryResolver.resolveCommand(subCommand, Collections.EMPTY_MAP, metadata.getMetadata(), analysis);
+ QueryResolver.resolveCommand(subCommand, metadata.getMetadata());
}
if(crit != null) {
Modified: trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/sql/lang/Command.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -165,7 +165,7 @@
getExternalGroupContexts().addGroup(group);
}
- public void addExternalGroupsToContext(Collection groups) {
+ public void addExternalGroupsToContext(Collection<GroupSymbol> groups) {
getExternalGroupContexts().getGroups().addAll(groups);
}
@@ -177,8 +177,8 @@
}
}
- public void pushNewResolvingContext(Collection groups) {
- externalGroups = new GroupContext(externalGroups, new LinkedList(groups));
+ public void pushNewResolvingContext(Collection<GroupSymbol> groups) {
+ externalGroups = new GroupContext(externalGroups, new LinkedList<GroupSymbol>(groups));
}
public GroupContext getExternalGroupContexts() {
@@ -188,9 +188,9 @@
return this.externalGroups;
}
- public List getAllExternalGroups() {
+ public List<GroupSymbol> getAllExternalGroups() {
if (externalGroups == null) {
- return Collections.EMPTY_LIST;
+ return Collections.emptyList();
}
return externalGroups.getAllGroups();
Modified: trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/java/org/teiid/query/validator/ValidationVisitor.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -476,44 +476,18 @@
validateAssignment(obj, obj.getVariable());
}
-
- public void visit(IfStatement obj) {
- Criteria criteria = obj.getCondition();
-
- validatorCriteriaStatement(obj, criteria);
- }
- public void visit(WhileStatement obj) {
- Criteria criteria = obj.getCondition();
-
- validatorCriteriaStatement(obj, criteria);
- }
-
- /**
- * @param obj
- * @param criteria
- */
- private void validatorCriteriaStatement(LanguageObject obj,
- Criteria criteria) {
- Iterator criteriaIter = PredicateCollectorVisitor.getPredicates(criteria).iterator();
- while(criteriaIter.hasNext()) {
- Criteria predicateCriteria = (Criteria) criteriaIter.next();
- Iterator elmntIter = ElementCollectorVisitor.getElements(predicateCriteria, true).iterator();
- if(predicateCriteria instanceof TranslateCriteria) {
- handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0019"), obj); //$NON-NLS-1$
- } else if(!(predicateCriteria instanceof HasCriteria)) {
- while(elmntIter.hasNext()) {
- ElementSymbol element = (ElementSymbol) elmntIter.next();
- if(!element.isExternalReference()) {
- handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0020"), obj); //$NON-NLS-1$
- }
- }
- }
+ @Override
+ public void visit(HasCriteria obj) {
+ if (this.updateProc == null || !this.updateProc.isUpdateProcedure()) {
+ handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0019"), obj); //$NON-NLS-1$
}
}
-
+
public void visit(TranslateCriteria obj) {
-
+ if (this.updateProc == null || !this.updateProc.isUpdateProcedure()) {
+ handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0019"), obj); //$NON-NLS-1$
+ }
if(obj.hasTranslations()) {
Collection selectElmnts = null;
if(obj.getSelector().hasElements()) {
@@ -522,9 +496,9 @@
Iterator critIter = obj.getTranslations().iterator();
while(critIter.hasNext()) {
CompareCriteria transCrit = (CompareCriteria) critIter.next();
- Collection leftElmnts = ElementCollectorVisitor.getElements(transCrit.getLeftExpression(), true);
+ Collection<ElementSymbol> leftElmnts = ElementCollectorVisitor.getElements(transCrit.getLeftExpression(), true);
// there is always only one element
- ElementSymbol leftExpr = (ElementSymbol)leftElmnts.iterator().next();
+ ElementSymbol leftExpr = leftElmnts.iterator().next();
if(selectElmnts != null && !selectElmnts.contains(leftExpr)) {
handleValidationError(QueryPlugin.Util.getString("ERR.015.012.0021"), leftExpr); //$NON-NLS-1$
@@ -581,7 +555,7 @@
*/
protected void validateTranslateCriteria(TranslateCriteria obj) {
if(this.currentCommand == null) {
- return;
+ return;
}
Map symbolMap = this.updateProc.getSymbolMap();
Command userCommand = this.updateProc.getUserCommand();
Modified: trunk/engine/src/main/resources/org/teiid/query/i18n.properties
===================================================================
--- trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/main/resources/org/teiid/query/i18n.properties 2011-01-10 22:09:53 UTC (rev 2825)
@@ -183,8 +183,7 @@
ERR.015.012.0016 = Variable {0} not assigned any value in this procedure.
ERR.015.012.0017 = Variables declared the procedure''s DeclareStatement cannot be one of the special variables: {0}, {1} and {2}.
ERR.015.012.0018 = Inherent INSERT is not possible on a view defined by a UNION.
-ERR.015.012.0019 = TranslateCriteria cannot be used in on an if or while statement.
-ERR.015.012.0020 = Elements used on the criteria of an if or while statement should be variables declared in the procedure, virtual group elements can be used in the HAS Criteria
+ERR.015.012.0019 = Translate/HasCriteria cannot be used in a non-update procedure.
ERR.015.012.0021 = Element being translated in the WITH clause not among the elements on the ON clause of the TranslateCriteria.
ERR.015.012.0022 = Unable to translate criteria on the update command against the virtual group, the element {0} is mapped to an aggregate symbol in the virtual group''s query transform, and cannot be translated.
ERR.015.012.0023 = Unable to translate criteria on the update command against the virtual group, the element {0} is mapped to an expression whose elements are not present on the command in the procedure using the translated criteria.
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestMetaDataProcessor.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -22,7 +22,6 @@
package org.teiid.dqp.internal.process;
-import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
@@ -36,7 +35,6 @@
import org.teiid.core.types.DataTypeManager;
import org.teiid.dqp.internal.datamgr.FakeTransactionService;
import org.teiid.dqp.message.RequestID;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.parser.QueryParser;
import org.teiid.query.resolver.QueryResolver;
@@ -55,7 +53,7 @@
public Map[] helpGetMetadata(String sql, QueryMetadataInterface metadata, VDBMetaData vdb) throws Exception {
// Prepare sql
Command command = QueryParser.getQueryParser().parseCommand(sql);
- QueryResolver.resolveCommand(command, Collections.EMPTY_MAP, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
// Create components
SessionAwareCache<PreparedPlan> prepPlanCache = new SessionAwareCache<PreparedPlan>();
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestRequest.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -23,7 +23,6 @@
package org.teiid.dqp.internal.process;
import java.util.ArrayList;
-import java.util.Collections;
import junit.framework.TestCase;
@@ -36,7 +35,6 @@
import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository;
import org.teiid.dqp.internal.datamgr.FakeTransactionService;
import org.teiid.dqp.service.AutoGenDataService;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.parser.QueryParser;
import org.teiid.query.processor.FakeDataManager;
@@ -75,7 +73,7 @@
Request request = new Request();
Command command = QueryParser.getQueryParser().parseCommand(QUERY);
- QueryResolver.resolveCommand(command, Collections.EMPTY_MAP, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
RequestMessage message = new RequestMessage();
DQPWorkContext workContext = FakeMetadataFactory.buildWorkContext(metadata, FakeMetadataFactory.example1VDB());
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestProcedureResolving.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -36,7 +36,6 @@
import org.teiid.client.metadata.ParameterInfo;
import org.teiid.core.TeiidComponentException;
import org.teiid.core.types.DataTypeManager;
-import org.teiid.query.analysis.AnalysisRecord;
import org.teiid.query.mapping.relational.QueryNode;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.metadata.TempMetadataAdapter;
@@ -844,8 +843,9 @@
Command procCommand = QueryParser.getQueryParser().parseCommand(procedure);
GroupSymbol virtualGroup = new GroupSymbol("vm1.g1"); //$NON-NLS-1$
virtualGroup.setMetadataID(metadata.getGroupID("vm1.g1")); //$NON-NLS-1$
- Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
- QueryResolver.resolveCommand(procCommand, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
+ QueryResolver.buildExternalGroups(externalMetadata, procCommand);
+ QueryResolver.resolveCommand(procCommand, metadata);
}
// special variable CHANGING compared against integer no implicit conversion available
@@ -881,8 +881,9 @@
GroupSymbol virtualGroup = new GroupSymbol("vm1.g1"); //$NON-NLS-1$
virtualGroup.setMetadataID(metadata.getGroupID("vm1.g1")); //$NON-NLS-1$
- Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
- QueryResolver.resolveCommand(procCommand, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
+ QueryResolver.buildExternalGroups(externalMetadata, procCommand);
+ QueryResolver.resolveCommand(procCommand, metadata);
}
// special variable CHANGING compared against integer no implicit conversion available
@@ -899,8 +900,9 @@
GroupSymbol virtualGroup = new GroupSymbol("vm1.g1"); //$NON-NLS-1$
virtualGroup.setMetadataID(metadata.getGroupID("vm1.g1")); //$NON-NLS-1$
- Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
- QueryResolver.resolveCommand(procCommand, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ Map externalMetadata = getProcedureExternalMetadata(virtualGroup, metadata);
+ QueryResolver.buildExternalGroups(externalMetadata, procCommand);
+ QueryResolver.resolveCommand(procCommand, metadata);
}
// TranslateCriteria on criteria of the if statement
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -167,7 +167,7 @@
}
public static Command helpResolve(String sql, QueryMetadataInterface queryMetadata, AnalysisRecord analysis){
- return helpResolve(helpParse(sql), queryMetadata, analysis);
+ return helpResolve(helpParse(sql), queryMetadata);
}
private Command helpResolve(String sql) {
@@ -175,13 +175,13 @@
}
private Command helpResolve(Command command) {
- return helpResolve(command, this.metadata, AnalysisRecord.createNonRecordingRecord());
+ return helpResolve(command, this.metadata);
}
- static Command helpResolve(Command command, QueryMetadataInterface queryMetadataInterface, AnalysisRecord analysis) {
+ static Command helpResolve(Command command, QueryMetadataInterface queryMetadataInterface) {
// resolve
try {
- QueryResolver.resolveCommand(command, queryMetadataInterface, analysis);
+ QueryResolver.resolveCommand(command, queryMetadataInterface);
} catch(TeiidException e) {
throw new RuntimeException(e);
}
@@ -985,8 +985,8 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
-
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
// Verify results
helpCheckFrom((Query)command, new String[] { "pm1.g1" }); //$NON-NLS-1$
@@ -1005,8 +1005,8 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
-
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
// Verify results
helpCheckFrom((Query)command, new String[] { "pm1.g1" }); //$NON-NLS-1$
@@ -1025,9 +1025,9 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
-
// Verify results
Collection vars = getVariables(command);
assertEquals("Did not find variable in resolved query", 1, vars.size()); //$NON-NLS-1$
@@ -1047,7 +1047,7 @@
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
fail("Expected exception on invalid variable pm1.sq2.in"); //$NON-NLS-1$
} catch(QueryResolverException e) {
@@ -1966,7 +1966,7 @@
@Test public void testDefect10809(){
String sql = "select * from LOB_TESTING_ONE where CLOB_COLUMN LIKE '%fff%'"; //$NON-NLS-1$
- helpResolve(helpParse(sql), FakeMetadataFactory.exampleBQTCached(), AnalysisRecord.createNonRecordingRecord());
+ helpResolve(helpParse(sql), FakeMetadataFactory.exampleBQTCached());
}
@Test public void testNonAutoConversionOfLiteralIntegerToShort() throws Exception {
@@ -2080,7 +2080,7 @@
helpResolve(
helpParse("SELECT myModel.myTable.myColumn AS myColumn from myModel.myTable UNION " + //$NON-NLS-1$
"SELECT convert(null, string) AS myColumn From myModel2.mySchema.myTable2"), //$NON-NLS-1$
- example_12968(), AnalysisRecord.createNonRecordingRecord());
+ example_12968());
}
@@ -2216,7 +2216,7 @@
String userSql = "SELECT null as x"; //$NON-NLS-1$
Query query = (Query)helpParse(userSql);
- QueryResolver.resolveCommand(query, FakeMetadataFactory.exampleBQTCached(), AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(query, FakeMetadataFactory.exampleBQTCached());
// Check type of resolved null constant
SingleElementSymbol symbol = (SingleElementSymbol) query.getSelect().getSymbols().get(0);
@@ -2233,7 +2233,7 @@
inputSetElements.add(inputSetElement);
externalMetadata.put(inputSet, inputSetElements);
Query command = (Query)helpParse(sql);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
Collection groups = GroupCollectorVisitor.getGroups(command, false);
assertFalse(groups.contains(inputSet));
}
@@ -2251,7 +2251,8 @@
param.setType(String.class);
procPrarms.add(param);
externalMetadata.put(procGroup, procPrarms);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
CreateUpdateProcedureCommand proc = (CreateUpdateProcedureCommand)command;
Query query = (Query)proc.getSubCommands().get(0);
ElementSymbol inElement = (ElementSymbol)((CompareCriteria)query.getCriteria()).getLeftExpression();
@@ -2521,7 +2522,8 @@
param.setType(DataTypeManager.DefaultDataClasses.STRING);
procPrarms.add(param);
externalMetadata.put(proc, procPrarms);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
}
@Test public void testBatchedUpdateResolver() throws Exception {
Modified: trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/resolver/TestXMLResolver.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -399,8 +399,8 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
-
- QueryResolver.resolveCommand(command, externalMetadata, FakeMetadataFactory.example1Cached(), AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, FakeMetadataFactory.example1Cached());
// Verify results
Collection vars = TestResolver.getVariables(command);
@@ -443,7 +443,7 @@
expected.setOperator(CompareCriteria.EQ);
expected.setRightExpression(new Constant("yyz")); //$NON-NLS-1$
- Query query = (Query) TestResolver.helpResolve(QueryParser.getQueryParser().parseCommand("select \"xml\" from xmltest.doc1 where node1 = 'yyz'"), FakeMetadataFactory.example1Cached(), null); //$NON-NLS-1$
+ Query query = (Query) TestResolver.helpResolve(QueryParser.getQueryParser().parseCommand("select \"xml\" from xmltest.doc1 where node1 = 'yyz'"), FakeMetadataFactory.example1Cached()); //$NON-NLS-1$
Criteria actual = query.getCriteria();
assertEquals("Did not match expected criteria", expected, actual); //$NON-NLS-1$
}
Modified: trunk/engine/src/test/java/org/teiid/query/sql/util/TestElementSymbolOptimizer.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/sql/util/TestElementSymbolOptimizer.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/sql/util/TestElementSymbolOptimizer.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -28,7 +28,7 @@
import org.teiid.api.exception.query.QueryParserException;
import org.teiid.api.exception.query.QueryResolverException;
import org.teiid.core.TeiidComponentException;
-import org.teiid.query.analysis.AnalysisRecord;
+import org.teiid.core.types.DataTypeManager;
import org.teiid.query.metadata.QueryMetadataInterface;
import org.teiid.query.parser.QueryParser;
import org.teiid.query.resolver.QueryResolver;
@@ -55,9 +55,8 @@
public Command helpResolve(String sql, QueryMetadataInterface metadata, Map externalMetadata) throws QueryParserException, QueryResolverException, TeiidComponentException {
Command command = QueryParser.getQueryParser().parseCommand(sql);
-
- final boolean USE_METADATA_COMMANDS = true;
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
return command;
}
@@ -69,7 +68,7 @@
public void helpTestOptimize(String sql, QueryMetadataInterface metadata, String expected, Map externalMetadata) throws QueryMetadataException, TeiidComponentException, QueryParserException, QueryResolverException {
- Command command = helpResolve(sql, metadata, externalMetadata);
+ Command command = helpResolve(sql, metadata, externalMetadata);
ElementSymbolOptimizer.optimizeElements(command, metadata);
String actual = command.toString();
@@ -153,40 +152,6 @@
"EXEC pm1.vsp7(5)"); //$NON-NLS-1$
}
- public void testStoredQueryTransform() throws Exception {
-
- // Set up external metadata - stored query pm1.sq3 with
- // params in and in2
- Map externalMetadata = new HashMap();
- GroupSymbol gs = new GroupSymbol("pm1.sq3"); //$NON-NLS-1$
- List elements = new ArrayList(2);
- elements.add(new ElementSymbol("pm1.sq3.in")); //$NON-NLS-1$
- elements.add(new ElementSymbol("pm1.sq3.in2")); //$NON-NLS-1$
- externalMetadata.put(gs, elements);
-
- helpTestOptimize("SELECT pm1.g6.in, pm1.g6.in3 FROM pm1.g6 WHERE pm1.g6.in=pm1.sq3.in AND pm1.g6.in3=pm1.sq3.in2", //$NON-NLS-1$
- FakeMetadataFactory.example1Cached(),
- "SELECT pm1.g6.\"in\", in3 FROM pm1.g6 WHERE (pm1.g6.\"in\" = pm1.sq3.\"in\") AND (in3 = in2)", //$NON-NLS-1$
- externalMetadata);
- }
-
- /** Test stored query whose transformation is another stored query */
- public void testStoredQueryTransform2() throws Exception {
- // Set up external metadata - stored query pm1.sq3 with
- // params in and in2
- Map externalMetadata = new HashMap();
- GroupSymbol gs = new GroupSymbol("pm1.sq3"); //$NON-NLS-1$
- List elements = new ArrayList(2);
- elements.add(new ElementSymbol("pm1.sq3.in")); //$NON-NLS-1$
- elements.add(new ElementSymbol("pm1.sq3.in2")); //$NON-NLS-1$
- externalMetadata.put(gs, elements);
-
- helpTestOptimize("EXEC pm1.sq2(pm1.sq3.in)", //$NON-NLS-1$
- FakeMetadataFactory.example1Cached(),
- "EXEC pm1.sq2(\"in\")", //$NON-NLS-1$
- externalMetadata);
- }
-
public void testStoredQuerySubquery() throws Exception {
helpTestOptimize("select x.e1 from (EXEC pm1.sq1()) as x", //$NON-NLS-1$
FakeMetadataFactory.example1Cached(),
@@ -205,8 +170,9 @@
// params in and in2
Map externalMetadata = new HashMap();
GroupSymbol gs = new GroupSymbol("SYSTEM.DESCRIBE"); //$NON-NLS-1$
- List elements = new ArrayList(2);
+ List<ElementSymbol> elements = new ArrayList<ElementSymbol>(2);
elements.add(new ElementSymbol("SYSTEM.DESCRIBE.entity")); //$NON-NLS-1$
+ elements.get(0).setType(DataTypeManager.DefaultDataClasses.STRING);
externalMetadata.put(gs, elements);
Modified: trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/unittest/FakeMetadataFactory.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -1856,7 +1856,7 @@
QueryNode vm1g2n1 = new QueryNode("vm1.g2", "SELECT pm1.g2.e1, pm1.g2.e2, pm1.g2.e3 FROM pm1.g2"); //$NON-NLS-1$ //$NON-NLS-2$
FakeMetadataObject vm1g2 = createUpdatableVirtualGroup("vm1.g2", vm1, vm1g2n1); //$NON-NLS-1$
- QueryNode vm1g3n1 = new QueryNode("vm1.g3", "SELECT CONCAT(e1, 'm') as x, (e2 +1) as y, Count(*) as e3, e4*50 as e4 FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
+ QueryNode vm1g3n1 = new QueryNode("vm1.g3", "SELECT CONCAT(e1, 'm') as x, (e2 +1) as y, 1 as e3, e4*50 as e4 FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
FakeMetadataObject vm1g3 = createUpdatableVirtualGroup("vm1.g3", vm1, vm1g3n1); //$NON-NLS-1$
QueryNode vm1g4n1 = new QueryNode("vm1.g4", "SELECT * FROM pm1.g1"); //$NON-NLS-1$ //$NON-NLS-2$
Modified: trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/engine/src/test/java/org/teiid/query/validator/TestValidator.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -328,7 +328,8 @@
try {
command = QueryParser.getQueryParser().parseCommand(sql);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
} catch(Exception e) {
throw new TeiidRuntimeException(e);
}
@@ -612,9 +613,9 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
-
helpRunValidator(command, new String[] {}, metadata);
}
@@ -631,9 +632,9 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
-
helpRunValidator(command, new String[] {}, metadata);
}
@@ -702,9 +703,9 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
-
helpRunValidator(command, new String[] {}, metadata);
}
@@ -721,8 +722,8 @@
sqParams.add(in);
Map externalMetadata = new HashMap();
externalMetadata.put(sqGroup, sqParams);
-
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
helpRunValidator(command, new String[] {}, metadata);
}
@@ -1162,7 +1163,7 @@
String userUpdateStr = "UPDATE vm1.g1 SET e1='x'"; //$NON-NLS-1$
- helpFailProcedure(procedure, userUpdateStr,
+ helpValidateProcedure(procedure, userUpdateStr,
FakeMetadataObject.Props.UPDATE_PROCEDURE);
}
@@ -1199,6 +1200,7 @@
// virtual group elements used in procedure in if statement(TRANSLATE CRITERIA)
// failure, aggregate function in query transform
+ @Ignore
@Test public void testCreateUpdateProcedure18() {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
@@ -1215,6 +1217,7 @@
// virtual group elements used in procedure in if statement(TRANSLATE CRITERIA)
// failure, aggregate function in query transform
+ @Ignore
@Test public void testCreateUpdateProcedure18a() {
String procedure = "CREATE PROCEDURE "; //$NON-NLS-1$
procedure = procedure + "BEGIN\n"; //$NON-NLS-1$
@@ -1603,7 +1606,8 @@
GroupSymbol group = new GroupSymbol(procName);
Map externalMetadata = getStoredProcedureExternalMetadata(group, metadata);
- QueryResolver.resolveCommand(command, externalMetadata, metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.buildExternalGroups(externalMetadata, command);
+ QueryResolver.resolveCommand(command, metadata);
// Validate
return Validator.validate(command, metadata);
@@ -1665,7 +1669,7 @@
QueryMetadataInterface metadata = FakeMetadataFactory.example1Cached();
Command command = new QueryParser().parseCommand(sql);
- QueryResolver.resolveCommand(command, new HashMap(), metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
// Validate
ValidatorReport report = Validator.validate(command, metadata);
@@ -1680,7 +1684,7 @@
e1.putProperty(FakeMetadataObject.Props.UPDATE, Boolean.FALSE);
Command command = new QueryParser().parseCommand(sql);
- QueryResolver.resolveCommand(command, new HashMap(), metadata, AnalysisRecord.createNonRecordingRecord());
+ QueryResolver.resolveCommand(command, metadata);
// Validate
ValidatorReport report = Validator.validate(command, metadata);
@@ -1751,6 +1755,7 @@
FakeMetadataObject paramID = (FakeMetadataObject)i.next();
if (paramID.getProperty(FakeMetadataObject.Props.DIRECTION).equals(new Integer(ParameterInfo.IN))) {
param.setMetadataID(paramID);
+ param.setType(DataTypeManager.getDataTypeClass((String)paramID.getProperty(FakeMetadataObject.Props.TYPE)));
break;
}
}
Modified: trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java
===================================================================
--- trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/runtime/src/main/java/org/teiid/services/SessionServiceImpl.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -111,6 +111,9 @@
@Override
public void closeSession(String sessionID) throws InvalidSessionException {
LogManager.logDetail(LogConstants.CTX_SECURITY, new Object[] {"closeSession", sessionID}); //$NON-NLS-1$
+ if (sessionID == null) {
+ throw new InvalidSessionException(RuntimePlugin.Util.getString("SessionServiceImpl.invalid_session", sessionID)); //$NON-NLS-1$
+ }
SessionMetadata info = this.sessionCache.remove(sessionID);
if (info == null) {
throw new InvalidSessionException(RuntimePlugin.Util.getString("SessionServiceImpl.invalid_session", sessionID)); //$NON-NLS-1$
Modified: trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/BaseQueryTest.java
===================================================================
--- trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/BaseQueryTest.java 2011-01-10 21:56:13 UTC (rev 2824)
+++ trunk/test-integration/common/src/test/java/org/teiid/dqp/internal/process/BaseQueryTest.java 2011-01-10 22:09:53 UTC (rev 2825)
@@ -56,6 +56,7 @@
protected void doProcess(QueryMetadataInterface metadata, String sql, CapabilitiesFinder capFinder, ProcessorDataManager dataManager, List[] expectedResults, boolean debug) throws Exception {
CommandContext context = createCommandContext();
+ context.setMetadata(metadata);
Command command = TestOptimizer.helpGetCommand(sql, metadata, null);
// plan
13 years, 4 months
teiid SVN: r2824 - trunk/documentation/quick-start-example/src/main/docbook/en-US/content.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-01-10 16:56:13 -0500 (Mon, 10 Jan 2011)
New Revision: 2824
Modified:
trunk/documentation/quick-start-example/src/main/docbook/en-US/content/connect-vdb.xml
Log:
TEIID-1372 changing the user credentials to user/user
Modified: trunk/documentation/quick-start-example/src/main/docbook/en-US/content/connect-vdb.xml
===================================================================
--- trunk/documentation/quick-start-example/src/main/docbook/en-US/content/connect-vdb.xml 2011-01-10 21:47:23 UTC (rev 2823)
+++ trunk/documentation/quick-start-example/src/main/docbook/en-US/content/connect-vdb.xml 2011-01-10 21:56:13 UTC (rev 2824)
@@ -17,7 +17,7 @@
<para>
For a Java application to connect to a JDBC source, it needs a URL, user-id, and password. To
connect to your VDB all you need is a URL and any additional optional properties that you would like to set.
- Teiid defaults to allowing the "admin" as user with password as "teiid". Additional user accounts can be added.
+ Teiid defaults to allowing the "user" as user with password as "user". Additional user accounts can be added.
A JDBC connection can be obtained through the Teiid driver
<code>"org.teiid.jdbc.TeiidDriver"</code>
with the URL syntax of
@@ -44,7 +44,7 @@
Connection connection;
try{
- connection = DriverManager.getConnection(url, "admin", "teiid");
+ connection = DriverManager.getConnection(url, "user", "user");
Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery(sql);
while(results.next()) {
@@ -70,8 +70,8 @@
connection to the VDB and issuing the query exactly same as in the above example</para>
<programlisting><![CDATA[TeiidDataSource ds = new TeiidDataSource();
ds.setDatabaseName("Portfolio");
-ds.setUser("admin");
-ds.setPassword("teiid");
+ds.setUser("user");
+ds.setPassword("user");
Connection connection = ds.getConnection();
...]]></programlisting>
13 years, 4 months
teiid SVN: r2823 - in trunk/build/kits: jboss-container and 1 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-01-10 16:47:23 -0500 (Mon, 10 Jan 2011)
New Revision: 2823
Modified:
trunk/build/kits/adminshell/connection.properties
trunk/build/kits/jboss-container/conf/props/teiid-security-users.properties
trunk/build/kits/jboss-container/teiid-releasenotes.html
Log:
TEIID-1372 changing the user credentials to user/user
Modified: trunk/build/kits/adminshell/connection.properties
===================================================================
--- trunk/build/kits/adminshell/connection.properties 2011-01-10 19:51:55 UTC (rev 2822)
+++ trunk/build/kits/adminshell/connection.properties 2011-01-10 21:47:23 UTC (rev 2823)
@@ -1,5 +1,5 @@
-jdbc.user=admin
-jdbc.password=teiid
+jdbc.user=user
+jdbc.password=user
jdbc.url=jdbc:teiid:admin@mm://localhost:31000;
admin.url=mms://localhost:31443
Modified: trunk/build/kits/jboss-container/conf/props/teiid-security-users.properties
===================================================================
--- trunk/build/kits/jboss-container/conf/props/teiid-security-users.properties 2011-01-10 19:51:55 UTC (rev 2822)
+++ trunk/build/kits/jboss-container/conf/props/teiid-security-users.properties 2011-01-10 21:47:23 UTC (rev 2823)
@@ -1,3 +1,3 @@
# A users.properties file for use with the UsersRolesLoginModule
# username=password
-admin=teiid
+user=user
Modified: trunk/build/kits/jboss-container/teiid-releasenotes.html
===================================================================
--- trunk/build/kits/jboss-container/teiid-releasenotes.html 2011-01-10 19:51:55 UTC (rev 2822)
+++ trunk/build/kits/jboss-container/teiid-releasenotes.html 2011-01-10 21:47:23 UTC (rev 2823)
@@ -49,6 +49,7 @@
</ul>
<h4>from 7.1</h4>
<ul>
+ <li>The default JDBC credentials are user/user - not admin/teiid
<li>Subqueries are no longer allowed to be SELECT INTO.
<li>INSERT/UPDATE/DELETE cannot be used to create implicit return cursors in non-update virtual procedures. You can instead use "UPDATE ...; SELECT VARIABLES.ROWCOUNT;".
<li>The SYSADMIN schema was created to hold procedures and tables that should not be generally accessible. SYS and pg_catalog are now always accessible - permissions do not apply to these schemas. The SYS.getBinaryVDBResource, SYS.getCharacterVDBResource, and SYS.getVDBResourcePaths have been replaced with the
13 years, 4 months
teiid SVN: r2822 - in branches/7.1.x: engine/src/main/java/org/teiid/query/optimizer/relational/rules and 1 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-01-10 14:51:55 -0500 (Mon, 10 Jan 2011)
New Revision: 2822
Modified:
branches/7.1.x/documentation/reference/src/main/docbook/en-US/content/federated_planning.xml
branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java
branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java
branches/7.1.x/engine/src/test/java/org/teiid/query/optimizer/TestLimit.java
Log:
TEIID-1422 fix for pushing limits too far
Modified: branches/7.1.x/documentation/reference/src/main/docbook/en-US/content/federated_planning.xml
===================================================================
--- branches/7.1.x/documentation/reference/src/main/docbook/en-US/content/federated_planning.xml 2011-01-10 17:20:37 UTC (rev 2821)
+++ branches/7.1.x/documentation/reference/src/main/docbook/en-US/content/federated_planning.xml 2011-01-10 19:51:55 UTC (rev 2822)
@@ -785,12 +785,12 @@
be true regardless of which version of Teiid is used.</para>
</listitem>
<listitem>
- <para>RulePushNonJoinCriteria – this rule will push criteria out of
+ <para>RulePushNonJoinCriteria - this rule will push criteria out of
an on clause if it is not necessary for the correctness of the join.
</para>
</listitem>
<listitem>
- <para>RuleRaiseNull – this rule will raise null nodes to their
+ <para>RuleRaiseNull - this rule will raise null nodes to their
highest possible point. Raising a null node removes the need to
consider any part of the old plan that was below the null node.
</para>
@@ -806,12 +806,12 @@
together.</para>
</listitem>
<listitem>
- <para>RuleRemoveOptionalJoins – removes optional join nodes form
+ <para>RuleRemoveOptionalJoins - removes optional join nodes form
the plan tree as soon as possible so that planning will be more
optimal.</para>
</listitem>
<listitem>
- <para>RulePlanJoins – this rule attempts to find an optimal
+ <para>RulePlanJoins - this rule attempts to find an optimal
ordering of the joins performed in the plan, while ensuring that
&access_patterns; dependencies are met. This rule has three main
steps. First it must determine an ordering of joins that satisfy
@@ -908,7 +908,7 @@
retrieved from B, thus greatly speeding the overall query.</para>
</listitem>
<listitem>
- <para>RuleChooseJoinStrategy – Determines the base join strategy.
+ <para>RuleChooseJoinStrategy - Determines the base join strategy.
Currently this is a decision as to whether to use a merge join rather
than the default strategy, which is a nested loop join. Ideally the
choice of a hash join would also be evaluated here. Also costing
@@ -932,9 +932,12 @@
model option.</para>
</listitem>
<listitem>
- <para>RuleAccessPatternValidation – validates that all access
+ <para>RuleAccessPatternValidation - validates that all access
patterns have been satisfied.</para>
</listitem>
+ <listitem>
+ <para>RulePushLimit - pushes limit and offset information as far as possible in the plan.</para>
+ </listitem>
</itemizedlist>
</section>
<section>
Modified: branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java 2011-01-10 17:20:37 UTC (rev 2821)
+++ branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java 2011-01-10 19:51:55 UTC (rev 2822)
@@ -142,7 +142,8 @@
}
case NodeConstants.Types.SET_OP:
{
- if (!SetQuery.Operation.UNION.equals(child.getProperty(NodeConstants.Info.SET_OPERATION))) {
+ if (!SetQuery.Operation.UNION.equals(child.getProperty(NodeConstants.Info.SET_OPERATION))
+ || !child.hasBooleanProperty(NodeConstants.Info.USE_ALL)) {
return false;
}
//distribute the limit
@@ -166,8 +167,6 @@
return child.getProperty(NodeConstants.Info.INTO_GROUP) == null;
}
case NodeConstants.Types.SOURCE:
- case NodeConstants.Types.SELECT:
- case NodeConstants.Types.DUP_REMOVE:
{
return true;
}
@@ -211,12 +210,6 @@
return null;
}
- List<PlanNode> setops = NodeEditor.findAllNodes(accessNode, NodeConstants.Types.SET_OP, NodeConstants.Types.SOURCE);
-
- if (!setops.isEmpty()) {
- return null;
- }
-
Expression limit = (Expression)parentNode.getProperty(NodeConstants.Info.MAX_TUPLE_LIMIT);
if (limit != null && !CapabilitiesUtil.supportsRowLimit(modelID, metadata, capFinder)) {
Modified: branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java 2011-01-10 17:20:37 UTC (rev 2821)
+++ branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRemoveOptionalJoins.java 2011-01-10 19:51:55 UTC (rev 2822)
@@ -263,9 +263,7 @@
return areAggregatesCardinalityDependent(aggs);
}
case NodeConstants.Types.TUPLE_LIMIT: {
- if (FrameUtil.isOrderedLimit(parent)) {
- return true;
- }
+ return true;
}
//we assmue that projects of non-deterministic expressions do not matter
}
Modified: branches/7.1.x/engine/src/test/java/org/teiid/query/optimizer/TestLimit.java
===================================================================
--- branches/7.1.x/engine/src/test/java/org/teiid/query/optimizer/TestLimit.java 2011-01-10 17:20:37 UTC (rev 2821)
+++ branches/7.1.x/engine/src/test/java/org/teiid/query/optimizer/TestLimit.java 2011-01-10 19:51:55 UTC (rev 2822)
@@ -56,11 +56,7 @@
import junit.framework.TestCase;
-
-
-/**
- * @since 4.3
- */
+@SuppressWarnings("nls")
public class TestLimit extends TestCase {
private static final int[] FULL_PUSHDOWN = new int[] {
@@ -460,24 +456,56 @@
public void testLimitNotPushedWithUnion() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.ROW_LIMIT, true);
// pm1 model supports order by
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
String sql = "SELECT * FROM pm1.g1 UNION SELECT * FROM PM1.g2 LIMIT 100";//$NON-NLS-1$
String[] expectedSql = new String[] {
- "SELECT pm1.g1.e1, pm1.g1.e2, pm1.g1.e3, pm1.g1.e4 FROM pm1.g1 UNION SELECT pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4 FROM PM1.g2" //$NON-NLS-1$
+ "SELECT pm1.g1.e1, pm1.g1.e2, pm1.g1.e3, pm1.g1.e4 FROM pm1.g1", "SELECT pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4 FROM PM1.g2" //$NON-NLS-1$
};
ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
null, capFinder, expectedSql, true);
TestOptimizer.checkNodeTypes(plan, new int[] {
+ 2, // Access
+ 0, // DependentAccess
+ 0, // DependentSelect
+ 0, // DependentProject
+ 1, // DupRemove
+ 0, // Grouping
+ 1, // Limit
+ 0, // NestedLoopJoinStrategy
+ 0, // MergeJoinStrategy
+ 0, // Null
+ 0, // PlanExecution
+ 0, // Project
+ 0, // Select
+ 0, // Sort
+ 1 // UnionAll
+ }, NODE_TYPES);
+ }
+
+ public void testLimitNotPushedWithDupRemove() {
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = new BasicSourceCapabilities();
+ caps.setCapabilitySupport(Capability.ROW_LIMIT, true);
+ // pm1 model supports order by
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ String sql = "SELECT distinct * FROM pm1.g1 LIMIT 100";//$NON-NLS-1$
+ String[] expectedSql = new String[] {
+ "SELECT pm1.g1.e1, pm1.g1.e2, pm1.g1.e3, pm1.g1.e4 FROM pm1.g1" //$NON-NLS-1$
+ };
+ ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
+ null, capFinder, expectedSql, true);
+
+ TestOptimizer.checkNodeTypes(plan, new int[] {
1, // Access
0, // DependentAccess
0, // DependentSelect
0, // DependentProject
- 0, // DupRemove
+ 1, // DupRemove
0, // Grouping
1, // Limit
0, // NestedLoopJoinStrategy
@@ -491,14 +519,14 @@
}, NODE_TYPES);
}
- public void testLimitPushedWithUnion() {
+ public void testLimitPushedWithUnionAll() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.ROW_LIMIT, true);
// pm1 model supports order by
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- String sql = "SELECT * FROM pm1.g1 UNION SELECT * FROM PM1.g2 LIMIT 100";//$NON-NLS-1$
+ String sql = "SELECT * FROM pm1.g1 UNION ALL SELECT * FROM PM1.g2 LIMIT 100";//$NON-NLS-1$
String[] expectedSql = new String[] {
"SELECT pm1.g2.e1, pm1.g2.e2, pm1.g2.e3, pm1.g2.e4 FROM PM1.g2 LIMIT 100", "SELECT pm1.g1.e1, pm1.g1.e2, pm1.g1.e3, pm1.g1.e4 FROM pm1.g1 LIMIT 100" //$NON-NLS-1$ //$NON-NLS-2$
};
@@ -510,7 +538,7 @@
0, // DependentAccess
0, // DependentSelect
0, // DependentProject
- 1, // DupRemove
+ 0, // DupRemove
0, // Grouping
1, // Limit
0, // NestedLoopJoinStrategy
@@ -533,7 +561,7 @@
// pm1 model supports order by
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- String sql = "SELECT * FROM pm1.g1 UNION SELECT * FROM PM1.g2 LIMIT 50, 100";//$NON-NLS-1$
+ String sql = "SELECT * FROM pm1.g1 UNION ALL SELECT * FROM PM1.g2 LIMIT 50, 100";//$NON-NLS-1$
String[] expectedSql = new String[] {
"SELECT PM1.g2.e1 AS c_0, PM1.g2.e2 AS c_1, PM1.g2.e3 AS c_2, PM1.g2.e4 AS c_3 FROM PM1.g2 LIMIT 150", "SELECT pm1.g1.e1 AS c_0, pm1.g1.e2 AS c_1, pm1.g1.e3 AS c_2, pm1.g1.e4 AS c_3 FROM pm1.g1 LIMIT 150" //$NON-NLS-1$ //$NON-NLS-2$
};
@@ -545,7 +573,7 @@
0, // DependentAccess
0, // DependentSelect
0, // DependentProject
- 1, // DupRemove
+ 0, // DupRemove
0, // Grouping
1, // Limit
0, // NestedLoopJoinStrategy
13 years, 4 months
teiid SVN: r2821 - branches/7.1.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-01-10 12:20:37 -0500 (Mon, 10 Jan 2011)
New Revision: 2821
Modified:
branches/7.1.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java
Log:
TEIID-1426 fix for npe extracting null values in a join result
Modified: branches/7.1.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java
===================================================================
--- branches/7.1.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java 2011-01-10 15:50:25 UTC (rev 2820)
+++ branches/7.1.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/execution/QueryExecutionImpl.java 2011-01-10 17:20:37 UTC (rev 2821)
@@ -63,14 +63,16 @@
public class QueryExecutionImpl implements ResultSetExecution {
- private static final String SF_ID = "sf:Id";
+ private static final String SF_ID = "sf:Id"; //$NON-NLS-1$
- private static final String SF_TYPE = "sf:type";
+ private static final String SF_TYPE = "sf:type"; //$NON-NLS-1$
- private static final String SF_S_OBJECT = "sf:sObject";
+ private static final String SF_S_OBJECT = "sf:sObject"; //$NON-NLS-1$
- private static final String XSI_TYPE = "xsi:type";
-
+ private static final String XSI_TYPE = "xsi:type"; //$NON-NLS-1$
+
+ private static final String XSI_NIL = "xsi:nil"; //$NON-NLS-1$
+
private SalesforceConnection connection;
private RuntimeMetadata metadata;
@@ -272,7 +274,7 @@
}
} else {
Object cell;
- cell = sObject.getElementsByTagName("sf:" + element.getNameInSource()).item(0);
+ cell = sObject.getElementsByTagName("sf:" + element.getNameInSource()).item(0); //$NON-NLS-1$
setElementValueInColumn(j, cell, row);
}
}
@@ -320,7 +322,14 @@
private void setElementValueInColumn(int columnIndex, Object value, Object[] row) {
if(value instanceof Element) {
- row[columnIndex] = ((Element)value).getFirstChild().getNodeValue();
+ Element element = (Element)value;
+ if (!Boolean.parseBoolean(element.getAttribute(XSI_NIL))) {
+ if (element.getFirstChild() != null) {
+ row[columnIndex] = element.getFirstChild().getNodeValue();
+ } else {
+ row[columnIndex] = ""; //$NON-NLS-1$
+ }
+ }
} else {
row[columnIndex] = value;
}
13 years, 4 months
teiid SVN: r2820 - branches/7.1.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-01-10 10:50:25 -0500 (Mon, 10 Jan 2011)
New Revision: 2820
Modified:
branches/7.1.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java
Log:
TEIID-1412 reducing the max in size to a safer value. it's also changed into a translator property in case it needs further adjustment
Modified: branches/7.1.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java
===================================================================
--- branches/7.1.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java 2011-01-05 19:25:12 UTC (rev 2819)
+++ branches/7.1.x/connectors/translator-salesforce/src/main/java/org/teiid/translator/salesforce/SalesForceExecutionFactory.java 2011-01-10 15:50:25 UTC (rev 2820)
@@ -52,7 +52,8 @@
public class SalesForceExecutionFactory extends ExecutionFactory<ConnectionFactory, SalesforceConnection> {
private String connectorStateClass;
- private boolean auditModelFields = false;
+ private boolean auditModelFields = false;
+ private int maxInSize = 300;
public SalesForceExecutionFactory() {
// http://jira.jboss.org/jira/browse/JBEDSP-306
@@ -117,9 +118,14 @@
}
@Override
+ @TranslatorProperty(display="Max number of IN predicate entries", advanced=true)
public int getMaxInCriteriaSize() {
- return 700;
+ return maxInSize;
}
+
+ public void setMaxInCriteriaSize(int maxInSize) {
+ this.maxInSize = maxInSize;
+ }
@Override
public List getSupportedFunctions() {
13 years, 4 months
teiid SVN: r2819 - in trunk: build/assembly/jboss-container and 2 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-01-05 14:25:12 -0500 (Wed, 05 Jan 2011)
New Revision: 2819
Added:
trunk/api/src/main/java/org/teiid/translator/BaseDelegatingExecutionFactory.java
Removed:
trunk/connectors/translator-delegate/
Modified:
trunk/build/assembly/jboss-container/dist.xml
trunk/connectors/pom.xml
trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml
Log:
TEIID-1330 refining the delegating translator to just base classes.
Copied: trunk/api/src/main/java/org/teiid/translator/BaseDelegatingExecutionFactory.java (from rev 2800, trunk/connectors/translator-delegate/src/main/java/org/teiid/translator/delegate/BaseDelegatingExecutionFactory.java)
===================================================================
--- trunk/api/src/main/java/org/teiid/translator/BaseDelegatingExecutionFactory.java (rev 0)
+++ trunk/api/src/main/java/org/teiid/translator/BaseDelegatingExecutionFactory.java 2011-01-05 19:25:12 UTC (rev 2819)
@@ -0,0 +1,392 @@
+/*
+ * 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;
+
+import java.util.List;
+
+import org.teiid.language.Call;
+import org.teiid.language.Command;
+import org.teiid.language.LanguageFactory;
+import org.teiid.language.QueryExpression;
+import org.teiid.metadata.FunctionMethod;
+import org.teiid.metadata.MetadataFactory;
+import org.teiid.metadata.RuntimeMetadata;
+
+/**
+ * Delegate translator. User can define a {@link ExecutionFactory} of their own and have this translator
+ * delegate all the calls to that class. Please note that your 'vdb.xml' file will contain
+ * an xml fragment like the following to configure a delegating translator.
+ * <pre>
+ * {@code
+ <translator type="delegate" name="my-translator" description="custom translator">
+ <property value="delegateName" name="name of the delegate instance"/>
+ </translator>
+ }
+ * </pre>
+ *
+ */
+public class BaseDelegatingExecutionFactory<F, C> extends ExecutionFactory<F, C> implements DelegatingExecutionFactory<F, C> {
+
+ private String delegateName;
+ private ExecutionFactory<F, C> delegate;
+
+ /**
+ * For testing only
+ */
+ ExecutionFactory<F, C> getDelegate() {
+ return this.delegate;
+ }
+
+ public void setDelegate(ExecutionFactory<F, C> delegate) {
+ this.delegate = delegate;
+ }
+
+ @TranslatorProperty(display="Delegate name", required = true)
+ public String getDelegateName() {
+ return this.delegateName;
+ }
+
+ public void setDelegateName(String delegateName) {
+ this.delegateName = delegateName;
+ }
+
+ @Override
+ public void start() throws TranslatorException {
+ this.delegate.start();
+ }
+
+ @Override
+ public boolean areLobsUsableAfterClose() {
+ return delegate.areLobsUsableAfterClose();
+ }
+ @Override
+ public void closeConnection(C connection, F factory) {
+ delegate.closeConnection(connection, factory);
+ }
+ @Override
+ public Execution createExecution(Command command,
+ ExecutionContext executionContext, RuntimeMetadata metadata,
+ C connection) throws TranslatorException {
+ return delegate.createExecution(command, executionContext, metadata,
+ connection);
+ }
+ @Override
+ public ProcedureExecution createProcedureExecution(Call command,
+ ExecutionContext executionContext, RuntimeMetadata metadata,
+ C connection) throws TranslatorException {
+ return delegate.createProcedureExecution(command, executionContext,
+ metadata, connection);
+ }
+ @Override
+ public ResultSetExecution createResultSetExecution(QueryExpression command,
+ ExecutionContext executionContext, RuntimeMetadata metadata,
+ C connection) throws TranslatorException {
+ return delegate.createResultSetExecution(command, executionContext,
+ metadata, connection);
+ }
+ @Override
+ public UpdateExecution createUpdateExecution(Command command,
+ ExecutionContext executionContext, RuntimeMetadata metadata,
+ C connection) throws TranslatorException {
+ return delegate.createUpdateExecution(command, executionContext,
+ metadata, connection);
+ }
+ @Override
+ public C getConnection(F factory) throws TranslatorException {
+ return delegate.getConnection(factory);
+ }
+ @Override
+ public NullOrder getDefaultNullOrder() {
+ return delegate.getDefaultNullOrder();
+ }
+ @Override
+ public LanguageFactory getLanguageFactory() {
+ return delegate.getLanguageFactory();
+ }
+ @Override
+ public int getMaxFromGroups() {
+ return delegate.getMaxFromGroups();
+ }
+ @Override
+ public int getMaxInCriteriaSize() {
+ return delegate.getMaxInCriteriaSize();
+ }
+ @Override
+ public void getMetadata(MetadataFactory metadataFactory, C conn)
+ throws TranslatorException {
+ delegate.getMetadata(metadataFactory, conn);
+ }
+ @Override
+ public List<FunctionMethod> getPushDownFunctions() {
+ return delegate.getPushDownFunctions();
+ }
+ @Override
+ public List<String> getSupportedFunctions() {
+ return delegate.getSupportedFunctions();
+ }
+ @Override
+ public TypeFacility getTypeFacility() {
+ return delegate.getTypeFacility();
+ }
+ @Override
+ public boolean isImmutable() {
+ return delegate.isImmutable();
+ }
+ @Override
+ public boolean isSourceRequired() {
+ return delegate.isSourceRequired();
+ }
+ @Override
+ public void setImmutable(boolean arg0) {
+ delegate.setImmutable(arg0);
+ }
+ @Override
+ public void setRequiresCriteria(boolean requiresCriteria) {
+ delegate.setRequiresCriteria(requiresCriteria);
+ }
+ @Override
+ public void setSourceRequired(boolean value) {
+ delegate.setSourceRequired(value);
+ }
+ @Override
+ public void setSupportedJoinCriteria(
+ SupportedJoinCriteria supportedJoinCriteria) {
+ delegate.setSupportedJoinCriteria(supportedJoinCriteria);
+ }
+ @Override
+ public void setSupportsFullOuterJoins(boolean supportsFullOuterJoins) {
+ delegate.setSupportsFullOuterJoins(supportsFullOuterJoins);
+ }
+ @Override
+ public void setSupportsInnerJoins(boolean supportsInnerJoins) {
+ delegate.setSupportsInnerJoins(supportsInnerJoins);
+ }
+ @Override
+ public void setSupportsOrderBy(boolean supportsOrderBy) {
+ delegate.setSupportsOrderBy(supportsOrderBy);
+ }
+ @Override
+ public void setSupportsOuterJoins(boolean supportsOuterJoins) {
+ delegate.setSupportsOuterJoins(supportsOuterJoins);
+ }
+ @Override
+ public void setSupportsSelectDistinct(boolean supportsSelectDistinct) {
+ delegate.setSupportsSelectDistinct(supportsSelectDistinct);
+ }
+ @Override
+ public boolean supportsAggregatesAvg() {
+ return delegate.supportsAggregatesAvg();
+ }
+ @Override
+ public boolean supportsAggregatesCount() {
+ return delegate.supportsAggregatesCount();
+ }
+ @Override
+ public boolean supportsAggregatesCountStar() {
+ return delegate.supportsAggregatesCountStar();
+ }
+ @Override
+ public boolean supportsAggregatesDistinct() {
+ return delegate.supportsAggregatesDistinct();
+ }
+ @Override
+ public boolean supportsAggregatesEnhancedNumeric() {
+ return delegate.supportsAggregatesEnhancedNumeric();
+ }
+ @Override
+ public boolean supportsAggregatesMax() {
+ return delegate.supportsAggregatesMax();
+ }
+ @Override
+ public boolean supportsAggregatesMin() {
+ return delegate.supportsAggregatesMin();
+ }
+ @Override
+ public boolean supportsAggregatesSum() {
+ return delegate.supportsAggregatesSum();
+ }
+ @Override
+ public boolean supportsAliasedTable() {
+ return delegate.supportsAliasedTable();
+ }
+ @Override
+ public boolean supportsBatchedUpdates() {
+ return delegate.supportsBatchedUpdates();
+ }
+ @Override
+ public boolean supportsBetweenCriteria() {
+ return delegate.supportsBetweenCriteria();
+ }
+ @Override
+ public boolean supportsBulkUpdate() {
+ return delegate.supportsBulkUpdate();
+ }
+ @Override
+ public boolean supportsCaseExpressions() {
+ return delegate.supportsCaseExpressions();
+ }
+ @Override
+ public boolean supportsCommonTableExpressions() {
+ return delegate.supportsCommonTableExpressions();
+ }
+ @Override
+ public boolean supportsCompareCriteriaEquals() {
+ return delegate.supportsCompareCriteriaEquals();
+ }
+ @Override
+ public boolean supportsCompareCriteriaOrdered() {
+ return delegate.supportsCompareCriteriaOrdered();
+ }
+ @Override
+ public boolean supportsCorrelatedSubqueries() {
+ return delegate.supportsCorrelatedSubqueries();
+ }
+ @Override
+ public boolean supportsExcept() {
+ return delegate.supportsExcept();
+ }
+ @Override
+ public boolean supportsExistsCriteria() {
+ return delegate.supportsExistsCriteria();
+ }
+ @Override
+ public boolean supportsFunctionsInGroupBy() {
+ return delegate.supportsFunctionsInGroupBy();
+ }
+ @Override
+ public boolean supportsGroupBy() {
+ return delegate.supportsGroupBy();
+ }
+ @Override
+ public boolean supportsHaving() {
+ return delegate.supportsHaving();
+ }
+ @Override
+ public boolean supportsInCriteria() {
+ return delegate.supportsInCriteria();
+ }
+ @Override
+ public boolean supportsInCriteriaSubquery() {
+ return delegate.supportsInCriteriaSubquery();
+ }
+ @Override
+ public boolean supportsInlineViews() {
+ return delegate.supportsInlineViews();
+ }
+ @Override
+ public boolean supportsInsertWithIterator() {
+ return delegate.supportsInsertWithIterator();
+ }
+ @Override
+ public boolean supportsInsertWithQueryExpression() {
+ return delegate.supportsInsertWithQueryExpression();
+ }
+ @Override
+ public boolean supportsIntersect() {
+ return delegate.supportsIntersect();
+ }
+ @Override
+ public boolean supportsIsNullCriteria() {
+ return delegate.supportsIsNullCriteria();
+ }
+ @Override
+ public boolean supportsLikeCriteria() {
+ return delegate.supportsLikeCriteria();
+ }
+ @Override
+ public boolean supportsLikeCriteriaEscapeCharacter() {
+ return delegate.supportsLikeCriteriaEscapeCharacter();
+ }
+ @Override
+ public boolean supportsNotCriteria() {
+ return delegate.supportsNotCriteria();
+ }
+ @Override
+ public boolean supportsOrCriteria() {
+ return delegate.supportsOrCriteria();
+ }
+ @Override
+ public boolean supportsOrderByNullOrdering() {
+ return delegate.supportsOrderByNullOrdering();
+ }
+ @Override
+ public boolean supportsOrderByUnrelated() {
+ return delegate.supportsOrderByUnrelated();
+ }
+ @Override
+ public boolean supportsQuantifiedCompareCriteriaAll() {
+ return delegate.supportsQuantifiedCompareCriteriaAll();
+ }
+ @Override
+ public boolean supportsQuantifiedCompareCriteriaSome() {
+ return delegate.supportsQuantifiedCompareCriteriaSome();
+ }
+ @Override
+ public boolean supportsRowLimit() {
+ return delegate.supportsRowLimit();
+ }
+ @Override
+ public boolean supportsRowOffset() {
+ return delegate.supportsRowOffset();
+ }
+ @Override
+ public boolean supportsScalarSubqueries() {
+ return delegate.supportsScalarSubqueries();
+ }
+ @Override
+ public boolean supportsSearchedCaseExpressions() {
+ return delegate.supportsSearchedCaseExpressions();
+ }
+ @Override
+ public boolean supportsSelectExpression() {
+ return delegate.supportsSelectExpression();
+ }
+ @Override
+ public boolean supportsSelfJoins() {
+ return delegate.supportsSelfJoins();
+ }
+ @Override
+ public boolean supportsSetQueryOrderBy() {
+ return delegate.supportsSetQueryOrderBy();
+ }
+ @Override
+ public boolean supportsUnions() {
+ return delegate.supportsUnions();
+ }
+ @Override
+ public String toString() {
+ return delegate.toString();
+ }
+ @Override
+ public boolean useAnsiJoin() {
+ return delegate.useAnsiJoin();
+ }
+ @Override
+ public boolean equals(Object obj) {
+ return delegate.equals(obj);
+ }
+ @Override
+ public int hashCode() {
+ return delegate.hashCode();
+ }
+}
Modified: trunk/build/assembly/jboss-container/dist.xml
===================================================================
--- trunk/build/assembly/jboss-container/dist.xml 2011-01-05 16:34:06 UTC (rev 2818)
+++ trunk/build/assembly/jboss-container/dist.xml 2011-01-05 19:25:12 UTC (rev 2819)
@@ -184,7 +184,6 @@
<include>org.jboss.teiid.connectors:translator-ldap</include>
<include>org.jboss.teiid.connectors:translator-salesforce</include>
<include>org.jboss.teiid.connectors:translator-ws</include>
- <include>org.jboss.teiid.connectors:translator-delegate</include>
</includes>
<binaries>
Modified: trunk/connectors/pom.xml
===================================================================
--- trunk/connectors/pom.xml 2011-01-05 16:34:06 UTC (rev 2818)
+++ trunk/connectors/pom.xml 2011-01-05 19:25:12 UTC (rev 2819)
@@ -76,20 +76,15 @@
<modules>
<module>translator-jdbc</module>
<module>translator-ldap</module>
-
<module>translator-loopback</module>
<module>translator-file</module>
<module>translator-salesforce</module>
- <module>translator-delegate</module>
-
<module>connector-file</module>
<module>connector-salesforce</module>
<module>connector-ldap</module>
<module>salesforce-api</module>
<module>connector-ws</module>
-
<module>sandbox</module>
-
<module>translator-ws</module>
</modules>
</project>
Modified: trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml
===================================================================
--- trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml 2011-01-05 16:34:06 UTC (rev 2818)
+++ trunk/documentation/reference/src/main/docbook/en-US/content/translators.xml 2011-01-05 19:25:12 UTC (rev 2819)
@@ -1010,12 +1010,11 @@
</section>
</section>
<section>
- <title>Delegate Translator</title>
+ <title>Delegating Translators</title>
<para>
- The Delegate translator, known by the type name <emphasis>delegate</emphasis>,
- provides way to delegate all the translator calls to yet another translator whoose name is supplied. This does not provide
- any functionality on its own, other than delegation. This translator can be used a base class to intercept the calls to the user
- supplied translator and modify them as they see fit.
+ You may create a delegating translator by extending the <code>org.teiid.translator.BaseDelegatingExecutionFactory</code>.
+ Once your classes are then packaged as a custom translator, you will be able to wire another translator instance into your delegating translator at runtime in order to intercept
+ all of the calls to the delegate. This base class does not provide any functionality on its own, other than delegation.
</para>
<table>
@@ -1034,7 +1033,7 @@
<tbody>
<row>
<entry>delegateName</entry>
- <entry>Translator instance to delegate to</entry>
+ <entry>Translator instance name to delegate to</entry>
<entry></entry>
</row>
</tbody>
13 years, 4 months
teiid SVN: r2818 - in trunk/client/src: test/java/org/teiid/jdbc and 1 other directory.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-01-05 11:34:06 -0500 (Wed, 05 Jan 2011)
New Revision: 2818
Modified:
trunk/client/src/main/java/org/teiid/jdbc/BatchResults.java
trunk/client/src/main/java/org/teiid/jdbc/ResultSetImpl.java
trunk/client/src/test/java/org/teiid/jdbc/TestBatchResults.java
Log:
TEIID-1421 making better use cached results (or any results where the final row is known) with scrollable result sets
Modified: trunk/client/src/main/java/org/teiid/jdbc/BatchResults.java
===================================================================
--- trunk/client/src/main/java/org/teiid/jdbc/BatchResults.java 2011-01-04 22:16:41 UTC (rev 2817)
+++ trunk/client/src/main/java/org/teiid/jdbc/BatchResults.java 2011-01-05 16:34:06 UTC (rev 2818)
@@ -43,14 +43,26 @@
private int beginRow;
private int endRow;
private boolean isLast;
+ private int lastRow = -1;
Batch(List[] batch, int beginRow, int endRow, boolean isLast){
this.batch = batch;
this.beginRow = beginRow;
this.endRow = endRow;
this.isLast = isLast;
+ if (isLast) {
+ this.lastRow = endRow;
+ }
}
+ int getLastRow() {
+ return lastRow;
+ }
+
+ void setLastRow(int lastRow) {
+ this.lastRow = lastRow;
+ }
+
int getLength() {
return batch.length;
}
@@ -219,10 +231,12 @@
private void setBatch(Batch batch) {
Assertion.assertTrue(batch.getLength() != 0 || batch.isLast());
- if (batch.isLast()) {
- this.lastRowNumber = batch.getEndRow();
+ if (batch.getLastRow() != -1) {
+ this.lastRowNumber = batch.getLastRow();
+ this.highestRowNumber = batch.getLastRow();
+ } else {
+ highestRowNumber = Math.max(batch.getEndRow(), highestRowNumber);
}
- highestRowNumber = Math.max(batch.getEndRow(), highestRowNumber);
this.batches.add(0, batch);
}
Modified: trunk/client/src/main/java/org/teiid/jdbc/ResultSetImpl.java
===================================================================
--- trunk/client/src/main/java/org/teiid/jdbc/ResultSetImpl.java 2011-01-04 22:16:41 UTC (rev 2817)
+++ trunk/client/src/main/java/org/teiid/jdbc/ResultSetImpl.java 2011-01-05 16:34:06 UTC (rev 2818)
@@ -381,7 +381,9 @@
private Batch getCurrentBatch(ResultsMessage currentResultMsg) {
this.updatedPlanDescription = currentResultMsg.getPlanDescription();
boolean isLast = currentResultMsg.getResults().length == 0 || currentResultMsg.getFinalRow() == currentResultMsg.getLastRow();
- return new Batch(currentResultMsg.getResults(), currentResultMsg.getFirstRow(), currentResultMsg.getLastRow(), isLast);
+ Batch result = new Batch(currentResultMsg.getResults(), currentResultMsg.getFirstRow(), currentResultMsg.getLastRow(), isLast);
+ result.setLastRow(currentResultMsg.getFinalRow());
+ return result;
}
protected int getFinalRowNumber() {
Modified: trunk/client/src/test/java/org/teiid/jdbc/TestBatchResults.java
===================================================================
--- trunk/client/src/test/java/org/teiid/jdbc/TestBatchResults.java 2011-01-04 22:16:41 UTC (rev 2817)
+++ trunk/client/src/test/java/org/teiid/jdbc/TestBatchResults.java 2011-01-05 16:34:06 UTC (rev 2818)
@@ -26,6 +26,7 @@
import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.junit.Test;
@@ -42,6 +43,7 @@
private int totalRows = 50;
private boolean throwException;
+ private boolean useLastRow;
List<Integer> batchCalls = new ArrayList<Integer>();
public MockBatchFetcher() {
@@ -51,7 +53,11 @@
public MockBatchFetcher(int totalRows) {
this.totalRows = totalRows;
}
-
+
+ public void setUseLastRow(boolean useLastRow) {
+ this.useLastRow = useLastRow;
+ }
+
public Batch requestBatch(int beginRow) throws SQLException {
batchCalls.add(beginRow);
if (throwException) {
@@ -73,7 +79,11 @@
endRow = totalRows;
isLast = true;
}
- return new Batch(createBatch(beginRow, endRow), beginRow, endRow, isLast);
+ Batch batch = new Batch(createBatch(beginRow, endRow), beginRow, endRow, isLast);
+ if (useLastRow) {
+ batch.setLastRow(totalRows);
+ }
+ return batch;
}
public void throwException() {
@@ -306,6 +316,18 @@
assertFalse(batchResults.absolute(-100));
}
+
+ @Test public void testAbsoluteWithLastRow() throws Exception{
+ Batch batch = new Batch(createBatch(1, 10), 1, 10, false);
+ batch.setLastRow(50);
+ MockBatchFetcher mbf = new MockBatchFetcher();
+ mbf.setUseLastRow(true);
+ BatchResults batchResults = new BatchResults(mbf, batch, BatchResults.DEFAULT_SAVED_BATCHES);
+ assertTrue(batchResults.absolute(41));
+ assertEquals(Arrays.asList(41), batchResults.getCurrentRow());
+ //check to ensure that we skipped all the other batches
+ assertEquals(Arrays.asList(41), mbf.batchCalls);
+ }
@Test public void testCurrentRowNumber() throws Exception {
BatchResults batchResults = new BatchResults(createBatch(1, 1), 1, 1, true);
13 years, 4 months
teiid SVN: r2817 - in branches/7.1.x: client/src/main/java/org/teiid/adminapi/impl and 2 other directories.
by teiid-commits@lists.jboss.org
Author: shawkins
Date: 2011-01-04 17:16:41 -0500 (Tue, 04 Jan 2011)
New Revision: 2817
Modified:
branches/7.1.x/client/src/main/java/org/teiid/adminapi/Transaction.java
branches/7.1.x/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadata.java
branches/7.1.x/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadataMapper.java
branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/TransactionServerImpl.java
branches/7.1.x/engine/src/test/java/org/teiid/dqp/internal/process/TestTransactionServer.java
Log:
TEIID-1420 fixing getTransactions
Modified: branches/7.1.x/client/src/main/java/org/teiid/adminapi/Transaction.java
===================================================================
--- branches/7.1.x/client/src/main/java/org/teiid/adminapi/Transaction.java 2011-01-04 22:14:35 UTC (rev 2816)
+++ branches/7.1.x/client/src/main/java/org/teiid/adminapi/Transaction.java 2011-01-04 22:16:41 UTC (rev 2817)
@@ -30,7 +30,7 @@
* May be null for an unassociated Global transaction.
* @return
*/
- long getAssociatedSession();
+ String getAssociatedSession();
/**
* Get the scope for the transaction. Will be one of GLOBAL, LOCAL, or REQUEST
Modified: branches/7.1.x/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadata.java
===================================================================
--- branches/7.1.x/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadata.java 2011-01-04 22:14:35 UTC (rev 2816)
+++ branches/7.1.x/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadata.java 2011-01-04 22:16:41 UTC (rev 2817)
@@ -33,18 +33,18 @@
public class TransactionMetadata extends AdminObjectImpl implements Transaction {
private static final long serialVersionUID = -8588785315218789068L;
- private long associatedSession;
+ private String associatedSession;
private String scope;
private String id;
private long createdTime;
@Override
@ManagementProperty(description="Session ID", readOnly=true)
- public long getAssociatedSession() {
+ public String getAssociatedSession() {
return associatedSession;
}
- public void setAssociatedSession(long associatedSession) {
+ public void setAssociatedSession(String associatedSession) {
this.associatedSession = associatedSession;
}
Modified: branches/7.1.x/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadataMapper.java
===================================================================
--- branches/7.1.x/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadataMapper.java 2011-01-04 22:14:35 UTC (rev 2816)
+++ branches/7.1.x/client/src/main/java/org/teiid/adminapi/impl/TransactionMetadataMapper.java 2011-01-04 22:16:41 UTC (rev 2817)
@@ -45,7 +45,7 @@
static {
metaType = new MutableCompositeMetaType(TransactionMetadata.class.getName(), "The Transaction domain meta data"); //$NON-NLS-1$
- metaType.addItem(ASSOCIATED_SESSION, ASSOCIATED_SESSION, SimpleMetaType.LONG_PRIMITIVE);
+ metaType.addItem(ASSOCIATED_SESSION, ASSOCIATED_SESSION, SimpleMetaType.STRING);
metaType.addItem(CREATED_TIME, CREATED_TIME, SimpleMetaType.LONG_PRIMITIVE);
metaType.addItem(SCOPE, SCOPE, SimpleMetaType.STRING);
metaType.addItem(XID, XID, SimpleMetaType.STRING);
@@ -89,7 +89,7 @@
CompositeValue compositeValue = (CompositeValue) metaValue;
TransactionMetadata transaction = new TransactionMetadata();
- transaction.setAssociatedSession((Long) metaValueFactory.unwrap(compositeValue.get(ASSOCIATED_SESSION)));
+ transaction.setAssociatedSession((String) metaValueFactory.unwrap(compositeValue.get(ASSOCIATED_SESSION)));
transaction.setCreatedTime((Long) metaValueFactory.unwrap(compositeValue.get(CREATED_TIME)));
transaction.setScope((String) metaValueFactory.unwrap(compositeValue.get(SCOPE)));
transaction.setId((String) metaValueFactory.unwrap(compositeValue.get("id"))); //$NON-NLS-1$
Modified: branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/TransactionServerImpl.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/TransactionServerImpl.java 2011-01-04 22:14:35 UTC (rev 2816)
+++ branches/7.1.x/engine/src/main/java/org/teiid/dqp/internal/process/TransactionServerImpl.java 2011-01-04 22:16:41 UTC (rev 2817)
@@ -517,7 +517,7 @@
continue;
}
TransactionMetadata txnImpl = new TransactionMetadata();
- txnImpl.setAssociatedSession(Long.parseLong(transactionContext.getThreadId()));
+ txnImpl.setAssociatedSession(transactionContext.getThreadId());
txnImpl.setCreatedTime(transactionContext.getCreationTime());
txnImpl.setScope(transactionContext.getTransactionType().toString());
txnImpl.setId(transactionContext.getTransactionId());
Modified: branches/7.1.x/engine/src/test/java/org/teiid/dqp/internal/process/TestTransactionServer.java
===================================================================
--- branches/7.1.x/engine/src/test/java/org/teiid/dqp/internal/process/TestTransactionServer.java 2011-01-04 22:14:35 UTC (rev 2816)
+++ branches/7.1.x/engine/src/test/java/org/teiid/dqp/internal/process/TestTransactionServer.java 2011-01-04 22:16:41 UTC (rev 2817)
@@ -45,8 +45,8 @@
private TransactionManager tm;
private javax.transaction.Transaction txn;
- private static final String THREAD1 = "1"; //$NON-NLS-1$
- private static final String THREAD2 = "2"; //$NON-NLS-1$
+ private static final String THREAD1 = "abc1"; //$NON-NLS-1$
+ private static final String THREAD2 = "abc2"; //$NON-NLS-1$
private static final XidImpl XID1 = new XidImpl(0, new byte[] {
1
@@ -167,7 +167,7 @@
try {
server.commit(THREAD1);
} catch (XATransactionException e) {
- assertEquals("No transaction found for client 1.", e.getMessage()); //$NON-NLS-1$
+ assertEquals("No transaction found for client abc1.", e.getMessage()); //$NON-NLS-1$
}
}
@@ -187,7 +187,7 @@
try {
server.rollback(THREAD1);
} catch (XATransactionException e) {
- assertEquals("No transaction found for client 1.", e.getMessage()); //$NON-NLS-1$
+ assertEquals("No transaction found for client abc1.", e.getMessage()); //$NON-NLS-1$
}
}
@@ -225,7 +225,7 @@
server.start(THREAD2, XID1, XAResource.TMRESUME, 100,false);
fail("exception expected"); //$NON-NLS-1$
} catch (XATransactionException ex) {
- assertEquals("Cannot resume, transaction Teiid-Xid global:1 branch:null format:0 was not suspended by client 2.", ex.getMessage()); //$NON-NLS-1$
+ assertEquals("Cannot resume, transaction Teiid-Xid global:1 branch:null format:0 was not suspended by client abc2.", ex.getMessage()); //$NON-NLS-1$
}
}
@@ -273,7 +273,7 @@
assertEquals(1, server.getTransactions().size());
Transaction t = server.getTransactions().iterator().next();
- assertEquals(Long.parseLong(THREAD1), t.getAssociatedSession());
+ assertEquals(THREAD1, t.getAssociatedSession());
assertNotNull(t.getId());
}
13 years, 4 months