[teiid-commits] teiid SVN: r868 - in trunk: connector-api/src/main/java/org/teiid/connector/basic and 46 other directories.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Wed May 6 16:38:38 EDT 2009
Author: shawkins
Date: 2009-05-06 16:38:38 -0400 (Wed, 06 May 2009)
New Revision: 868
Added:
trunk/connectors/connector-salesforce/src/test/java/com/metamatrix/connector/salesforce/execution/
trunk/connectors/connector-salesforce/src/test/java/com/metamatrix/connector/salesforce/execution/visitors/
trunk/connectors/connector-salesforce/src/test/java/com/metamatrix/connector/salesforce/execution/visitors/TestVisitors.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestComparableMetadataPushdown.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestJoinPushdownRestrictions.java
trunk/test-integration/teiid/
Modified:
trunk/connector-api/src/main/java/org/teiid/connector/api/ConnectorCapabilities.java
trunk/connector-api/src/main/java/org/teiid/connector/basic/BasicConnectorCapabilities.java
trunk/connector-metadata/src/main/java/com/metamatrix/connector/metadata/adapter/ObjectConnectorCapabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCCapabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/SimpleCapabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2Capabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyCapabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mm/MMCapabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleCapabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLCapabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerCapabilities.java
trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseCapabilities.java
trunk/connectors/connector-ldap/src/main/java/com/metamatrix/connector/ldap/IQueryToLdapSearchParser.java
trunk/connectors/connector-ldap/src/main/java/com/metamatrix/connector/ldap/LDAPConnectorCapabilities.java
trunk/connectors/connector-ldap/src/test/java/com/metamatrix/connector/ldap/TestIQueryToLdapSearchParser.java
trunk/connectors/connector-loopback/src/main/java/com/metamatrix/connector/loopback/LoopbackCapabilities.java
trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/SalesforceCapabilities.java
trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/QueryExecutionImpl.java
trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/CriteriaVisitor.java
trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/DeleteVisitor.java
trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/SelectVisitor.java
trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/UpdateVisitor.java
trunk/connectors/connector-xml/src/main/java/com/metamatrix/connector/xml/base/XMLCapabilities.java
trunk/connectors/connector-xml/src/test/java/com/metamatrix/connector/xml/base/TestXMLCapabilities.java
trunk/connectors/sandbox/connector-exec/src/main/java/com/metamatrix/connector/exec/ExecCapabilities.java
trunk/connectors/sandbox/connector-object/src/main/java/com/metamatrix/connector/object/ObjectConnectorCapabilities.java
trunk/connectors/sandbox/connector-yahoo/src/main/java/com/metamatrix/connector/yahoo/YahooCapabilities.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/capabilities/BasicSourceCapabilities.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/capabilities/SourceCapabilities.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/plantree/NodeConstants.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/JoinRegion.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleChooseDependent.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleChooseJoinStrategy.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCollapseSource.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCopyCriteria.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePlanJoins.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushSelectCriteria.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRaiseAccess.java
trunk/engine/src/main/java/com/metamatrix/query/sql/lang/CompareCriteria.java
trunk/engine/src/main/java/com/metamatrix/query/sql/lang/Criteria.java
trunk/engine/src/main/java/com/metamatrix/query/sql/visitor/ElementCollectorVisitor.java
trunk/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java
trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/CapabilitiesConverter.java
trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourceCapabilitiesFinder.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAnsiJoinPushdown.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestDependentJoins.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestExpressionsInGroupBy.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestJoinOptimization.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestLimit.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptimizer.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptionalJoins.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestPartitionedJoinPlanning.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleMergeVirtual.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleRaiseNull.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestStoredProcedurePlanning.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestSubqueryPushdown.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestUnionPlanning.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/capabilities/TestBasicSourceCapabilities.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCriteriaCapabilityValidatorVisitor.java
trunk/engine/src/test/java/com/metamatrix/query/processor/TestDependentJoins.java
trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java
trunk/engine/src/test/java/com/metamatrix/query/processor/TestVirtualDepJoin.java
trunk/engine/src/test/java/com/metamatrix/query/processor/xml/TestXMLProcessor.java
trunk/engine/src/test/java/com/metamatrix/query/sql/lang/TestCriteria.java
trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFacade.java
trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java
trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataObject.java
trunk/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java
trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/impl/TestConnectorManagerImpl.java
trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestElementImpl.java
trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/metadata/TestMetadataFactory.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java
trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourceCapabilitiesFinder.java
trunk/test-integration/src/test/java/com/metamatrix/server/integration/TestTPCR.java
Log:
TEIID-556 TEIID-103 TEIID-555 TEIID-553 TEIID-552 TEIID-203 TEIID-529 changes to simplify and expand the coverage of capabilities. Also added new abilities to the salesforce and ldap connectors.
Modified: trunk/connector-api/src/main/java/org/teiid/connector/api/ConnectorCapabilities.java
===================================================================
--- trunk/connector-api/src/main/java/org/teiid/connector/api/ConnectorCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connector-api/src/main/java/org/teiid/connector/api/ConnectorCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -33,7 +33,27 @@
* supports.
*/
public interface ConnectorCapabilities {
-
+
+ public enum SupportedJoinCriteria {
+ /**
+ * Indicates that any supported criteria is allowed.
+ */
+ ANY,
+ /**
+ * Indicates that any simple comparison of elements is allowed.
+ */
+ THETA,
+ /**
+ * Indicates that only equality predicates of elements are allowed.
+ */
+ EQUI,
+ /**
+ * Indicates that only equality predicates between
+ * exactly one primary and foreign key is allowed per join.
+ */
+ KEY
+ }
+
/**
* Support indicates connector can accept queries with SELECT DISTINCT
* @since 3.1 SP2
@@ -41,22 +61,31 @@
boolean supportsSelectDistinct();
/**
- * Support indicates connector can accept literals in the SELECT clause
- * @since 4.1.2
+ * Support indicates connector can accept expressions other than element
+ * symbols in the SELECT clause. Specific supports for the expression
+ * type are still checked.
+ * @since 6.1.0
*/
- boolean supportsSelectLiterals();
+ boolean supportsSelectExpression();
/**
* Support indicates connector can accept groups with aliases
* @since 3.1 SP2
*/
boolean supportsAliasedGroup();
+
+ /**
+ * Get the supported join criteria. A null return value will be treated
+ * as {@link SupportedJoinCriteria#ANY}
+ * @since 6.1.0
+ */
+ SupportedJoinCriteria getSupportedJoinCriteria();
/**
- * Support indicates connector can accept joins
- * @since 3.1 SP2
+ * Support indicates connector can accept inner or cross joins
+ * @since 6.1.0
*/
- boolean supportsJoins();
+ boolean supportsInnerJoins();
/**
* Support indicates connector can accept self-joins where a
@@ -67,7 +96,7 @@
boolean supportsSelfJoins();
/**
- * Support indicates connector can accept right or left outer joins
+ * Support indicates connector can accept left outer joins
* @since 3.1 SP2
*/
boolean supportsOuterJoins();
@@ -86,67 +115,34 @@
boolean supportsInlineViews();
/**
- * Support indicates connector can accept a WHERE criteria on queries
- * @since 3.1 SP2
- */
- boolean supportsCriteria();
-
- /**
- * Support indicates connector accepts criteria of form (element BETWEEN constant AND constant)
+ * Support indicates connector accepts criteria of form (element BETWEEN constant AND constant)
+ * <br>NOT CURRENTLY USED - between is rewritten as compound compare criteria
* @since 4.0
*/
boolean supportsBetweenCriteria();
/**
- * Support indicates connector accepts criteria of form (element operator constant)
- * @since 3.1 SP2
- */
- boolean supportsCompareCriteria();
-
- /**
* Support indicates connector accepts criteria of form (element = constant)
* @since 3.1 SP2
*/
boolean supportsCompareCriteriaEquals();
/**
- * Support indicates connector accepts criteria of form (element <> constant)
+ * Support indicates connector accepts criteria of form (element <=|>= constant)
+ * <br>The query engine will may pushdown queries containing < or > if NOT is also
+ * supported.
* @since 3.1 SP2
*/
- boolean supportsCompareCriteriaNotEquals();
+ boolean supportsCompareCriteriaOrdered();
/**
- * Support indicates connector accepts criteria of form (element < constant)
- * @since 3.1 SP2
- */
- boolean supportsCompareCriteriaLessThan();
-
- /**
- * Support indicates connector accepts criteria of form (element <= constant)
- * @since 3.1 SP2
- */
- boolean supportsCompareCriteriaLessThanOrEqual();
-
- /**
- * Support indicates connector accepts criteria of form (element > constant)
- * @since 3.1 SP2
- */
- boolean supportsCompareCriteriaGreaterThan();
-
- /**
- * Support indicates connector accepts criteria of form (element >= constant)
- * @since 3.1 SP2
- */
- boolean supportsCompareCriteriaGreaterThanOrEqual();
-
- /**
* Support indicates connector accepts criteria of form (element LIKE constant)
* @since 3.1 SP2
*/
boolean supportsLikeCriteria();
-
+
/**
- * Support indicates connector accepts criteria of form (element LIKE constant ESCAPE char) - CURRENTLY NOT USED
+ * Support indicates connector accepts criteria of form (element LIKE constant ESCAPE char)
* @since 3.1 SP2
*/
boolean supportsLikeCriteriaEscapeCharacter();
@@ -170,12 +166,6 @@
boolean supportsIsNullCriteria();
/**
- * Support indicates connector accepts logical criteria connected by AND
- * @since 3.1 SP2
- */
- boolean supportsAndCriteria();
-
- /**
* Support indicates connector accepts logical criteria connected by OR
* @since 3.1 SP2
*/
@@ -194,12 +184,6 @@
boolean supportsExistsCriteria();
/**
- * Support indicates connector accepts quantified subquery comparison criteria
- * @since 4.0
- */
- boolean supportsQuantifiedCompareCriteria();
-
- /**
* Support indicates connector accepts the quantified comparison criteria that
* use SOME
* @since 4.0
@@ -219,14 +203,19 @@
* @since 3.1 SP2
*/
boolean supportsOrderBy();
-
- /**
- * Support indicates connector accepts GROUP BY and HAVING clauses as well as
- * aggregate functions in the SELECT clause.
- * @since 3.1 SP2
+
+ /**
+ * Whether the source supports an explicit GROUP BY clause
+ * @since 6.1
*/
- boolean supportsAggregates();
+ boolean supportsGroupBy();
+ /**
+ * Whether the source supports the HAVING clause
+ * @since 6.1
+ */
+ boolean supportsHaving();
+
/**
* Support indicates connector can accept the SUM aggregate function
* @since 3.1 SP2
@@ -277,7 +266,7 @@
boolean supportsScalarSubqueries();
/**
- * Support indicates connector can accept correalted subqueries wherever subqueries
+ * Support indicates connector can accept correlated subqueries wherever subqueries
* are accepted
* @since 4.0
*/
@@ -286,6 +275,7 @@
/**
* Support indicates connector can accept queries with non-searched
* CASE <expression> WHEN <expression> ... END
+ * <br>NOT CURRENTLY USED - case is pushed down as searched case
* @since 4.0
*/
boolean supportsCaseExpressions();
@@ -297,12 +287,6 @@
boolean supportsSearchedCaseExpressions();
/**
- * Support indicates that the connector supports scalar functions.
- * @since 3.1 SP3
- */
- boolean supportsScalarFunctions();
-
- /**
* Support indicates that the connector supports the UNION of two queries.
* @since 4.2
*/
@@ -344,9 +328,7 @@
* <p>Support indicates that the connector supports functions in GROUP BY, such as:
* <code>SELECT dayofmonth(theDate), COUNT(*) FROM table GROUP BY dayofmonth(theDate)</code></p>
*
- * <p>This capability requires both {@link #supportsAggregates()} and
- * {@link #supportsScalarFunctions()} to be true as well to take effective.</p>
- *
+ * <br>NOT CURRENTLY USED - group by expressions create an inline view for pushdown
* @since 5.0
*/
boolean supportsFunctionsInGroupBy();
@@ -394,11 +376,5 @@
* @since 6.0
*/
boolean supportsBulkInsert();
-
- /**
- * Whether the source supports an explicit GROUP BY clause
- * @since 6.0
- */
- boolean supportsGroupBy();
-
+
}
Modified: trunk/connector-api/src/main/java/org/teiid/connector/basic/BasicConnectorCapabilities.java
===================================================================
--- trunk/connector-api/src/main/java/org/teiid/connector/basic/BasicConnectorCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connector-api/src/main/java/org/teiid/connector/basic/BasicConnectorCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -50,14 +50,6 @@
return false;
}
- /**
- * @see org.teiid.connector.api.ConnectorCapabilities#supportsSelectLiterals()
- * @since 4.2
- */
- public boolean supportsSelectLiterals() {
- return false;
- }
-
/*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsAliasedGroup()
*/
@@ -66,13 +58,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsJoins()
- */
- public boolean supportsJoins() {
- return false;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsSelfJoins()
*/
public boolean supportsSelfJoins() {
@@ -94,13 +79,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCriteria()
- */
- public boolean supportsCriteria() {
- return false;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsBetweenCriteria()
*/
public boolean supportsBetweenCriteria() {
@@ -108,13 +86,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteria()
- */
- public boolean supportsCompareCriteria() {
- return false;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaEquals()
*/
public boolean supportsCompareCriteriaEquals() {
@@ -122,41 +93,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaNotEquals()
- */
- public boolean supportsCompareCriteriaNotEquals() {
- return false;
- }
-
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaLessThan()
- */
- public boolean supportsCompareCriteriaLessThan() {
- return false;
- }
-
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaLessThanOrEqual()
- */
- public boolean supportsCompareCriteriaLessThanOrEqual() {
- return false;
- }
-
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaGreaterThan()
- */
- public boolean supportsCompareCriteriaGreaterThan() {
- return false;
- }
-
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaGreaterThanOrEqual()
- */
- public boolean supportsCompareCriteriaGreaterThanOrEqual() {
- return false;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsLikeCriteria()
*/
public boolean supportsLikeCriteria() {
@@ -192,13 +128,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsAndCriteria()
- */
- public boolean supportsAndCriteria() {
- return false;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsOrCriteria()
*/
public boolean supportsOrCriteria() {
@@ -220,13 +149,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsQuantifiedCompareCriteria()
- */
- public boolean supportsQuantifiedCompareCriteria() {
- return false;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsQuantifiedCompareCriteriaSome()
*/
public boolean supportsQuantifiedCompareCriteriaSome() {
@@ -248,13 +170,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsAggregates()
- */
- public boolean supportsAggregates() {
- return false;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsAggregatesSum()
*/
public boolean supportsAggregatesSum() {
@@ -331,19 +246,12 @@
return false;
}
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsScalarFunctions()
- */
- public boolean supportsScalarFunctions() {
- return false;
- }
-
/**
* Return null to indicate no functions are supported.
* @return null
* @see org.teiid.connector.api.ConnectorCapabilities#getSupportedFunctions()
*/
- public List getSupportedFunctions() {
+ public List<String> getSupportedFunctions() {
return null;
}
@@ -435,4 +343,30 @@
public boolean supportsGroupBy() {
return false;
}
+
+ @Override
+ public boolean supportsHaving() {
+ return false;
+ }
+
+ @Override
+ public boolean supportsInnerJoins() {
+ return false;
+ }
+
+ @Override
+ public boolean supportsSelectExpression() {
+ return false;
+ }
+
+ @Override
+ public SupportedJoinCriteria getSupportedJoinCriteria() {
+ return SupportedJoinCriteria.ANY;
+ }
+
+ @Override
+ public boolean supportsCompareCriteriaOrdered() {
+ return false;
+ }
+
}
Modified: trunk/connector-metadata/src/main/java/com/metamatrix/connector/metadata/adapter/ObjectConnectorCapabilities.java
===================================================================
--- trunk/connector-metadata/src/main/java/com/metamatrix/connector/metadata/adapter/ObjectConnectorCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connector-metadata/src/main/java/com/metamatrix/connector/metadata/adapter/ObjectConnectorCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -44,20 +44,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsAndCriteria()
- */
- public boolean supportsAndCriteria() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteria()
- */
- public boolean supportsCompareCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaEquals()
*/
public boolean supportsCompareCriteriaEquals() {
@@ -72,22 +58,7 @@
return true;
}
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCriteria()
- */
- public boolean supportsCriteria() {
- return true;
- }
-
/**
- * @see org.teiid.connector.basic.BasicConnectorCapabilities#supportsScalarFunctions()
- * @since 4.3
- */
- public boolean supportsScalarFunctions() {
- return true;
- }
-
- /**
* @see org.teiid.connector.basic.BasicConnectorCapabilities#getSupportedFunctions()
* @since 4.3
*/
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCCapabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/JDBCCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -66,13 +66,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsAggregates()
- */
- public boolean supportsAggregates() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsAggregatesAvg()
*/
public boolean supportsAggregatesAvg() {
@@ -129,13 +122,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsAndCriteria()
- */
- public boolean supportsAndCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsBetweenCriteria()
*/
public boolean supportsBetweenCriteria() {
@@ -150,13 +136,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteria()
- */
- public boolean supportsCompareCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaEquals()
*/
public boolean supportsCompareCriteriaEquals() {
@@ -164,41 +143,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaGreaterThan()
- */
- public boolean supportsCompareCriteriaGreaterThan() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaGreaterThanOrEqual()
- */
- public boolean supportsCompareCriteriaGreaterThanOrEqual() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaLessThan()
- */
- public boolean supportsCompareCriteriaLessThan() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaLessThanOrEqual()
- */
- public boolean supportsCompareCriteriaLessThanOrEqual() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaNotEquals()
- */
- public boolean supportsCompareCriteriaNotEquals() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsCorrelatedSubqueries()
*/
public boolean supportsCorrelatedSubqueries() {
@@ -206,13 +150,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCriteria()
- */
- public boolean supportsCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsExistsCriteria()
*/
public boolean supportsExistsCriteria() {
@@ -248,13 +185,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsJoins()
- */
- public boolean supportsJoins() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsLikeCriteria()
*/
public boolean supportsLikeCriteria() {
@@ -297,13 +227,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsQuantifiedCompareCriteria()
- */
- public boolean supportsQuantifiedCompareCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsQuantifiedCompareCriteriaAll()
*/
public boolean supportsQuantifiedCompareCriteriaAll() {
@@ -311,13 +234,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsScalarFunctions()
- */
- public boolean supportsScalarFunctions() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsScalarSubqueries()
*/
public boolean supportsScalarSubqueries() {
@@ -339,13 +255,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsSelectLiterals()
- */
- public boolean supportsSelectLiterals() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsSelfJoins()
*/
public boolean supportsSelfJoins() {
@@ -390,5 +299,30 @@
public boolean supportsBatchedUpdates() {
return true;
}
+
+ @Override
+ public boolean supportsCompareCriteriaOrdered() {
+ return true;
+ }
+
+ @Override
+ public SupportedJoinCriteria getSupportedJoinCriteria() {
+ return SupportedJoinCriteria.ANY;
+ }
+
+ @Override
+ public boolean supportsHaving() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsInnerJoins() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsSelectExpression() {
+ return true;
+ }
}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/SimpleCapabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/SimpleCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/SimpleCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -24,16 +24,14 @@
import java.util.List;
-import org.teiid.connector.api.ConnectorCapabilities;
-
/**
* This is a "simple" capabilities class that allows criteria but no
* complicated joins, subqueries, etc to be passed to the connector.
* This capabilities class may come in handy for testing and for
* sources that support JDBC but don't support extended JDBC capabilities.
*/
-public class SimpleCapabilities extends JDBCCapabilities implements ConnectorCapabilities {
+public class SimpleCapabilities extends JDBCCapabilities {
public SimpleCapabilities() {
// Max acceptable by all BQT dbs (Sybase=250, Oracle=1000)
@@ -41,20 +39,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsAndCriteria()
- */
- public boolean supportsAndCriteria() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteria()
- */
- public boolean supportsCompareCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaEquals()
*/
public boolean supportsCompareCriteriaEquals() {
@@ -62,48 +46,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaGreaterThan()
- */
- public boolean supportsCompareCriteriaGreaterThan() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaGreaterThanOrEqual()
- */
- public boolean supportsCompareCriteriaGreaterThanOrEqual() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaLessThan()
- */
- public boolean supportsCompareCriteriaLessThan() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaLessThanOrEqual()
- */
- public boolean supportsCompareCriteriaLessThanOrEqual() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCompareCriteriaNotEquals()
- */
- public boolean supportsCompareCriteriaNotEquals() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsCriteria()
- */
- public boolean supportsCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsInCriteria()
*/
public boolean supportsInCriteria() {
@@ -118,13 +60,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsJoins()
- */
- public boolean supportsJoins() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsLikeCriteria()
*/
public boolean supportsLikeCriteria() {
@@ -152,14 +87,6 @@
return true;
}
- /**
- * @see org.teiid.connector.api.ConnectorCapabilities#supportsSelectLiterals()
- * @since 4.2
- */
- public boolean supportsSelectLiterals() {
- return false;
- }
-
/*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsAliasedGroup()
*/
@@ -218,13 +145,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsQuantifiedCompareCriteria()
- */
- public boolean supportsQuantifiedCompareCriteria() {
- return false;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsQuantifiedCompareCriteriaSome()
*/
public boolean supportsQuantifiedCompareCriteriaSome() {
@@ -246,13 +166,6 @@
}
/*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsAggregates()
- */
- public boolean supportsAggregates() {
- return false;
- }
-
- /*
* @see com.metamatrix.data.api.ConnectorCapabilities#supportsAggregatesSum()
*/
public boolean supportsAggregatesSum() {
@@ -329,13 +242,6 @@
return false;
}
- /*
- * @see com.metamatrix.data.api.ConnectorCapabilities#supportsScalarFunctions()
- */
- public boolean supportsScalarFunctions() {
- return false;
- }
-
/**
* Return null to indicate no functions are supported.
* @return null
@@ -349,19 +255,7 @@
return false;
}
- public boolean supportsOrderByInInlineViews() {
- return false;
- }
-
/**
- * @see org.teiid.connector.api.ConnectorCapabilities#supportsUnionOrderBy()
- * @since 4.2
- */
- public boolean supportsUnionOrderBy() {
- return false;
- }
-
- /**
* @see org.teiid.connector.api.ConnectorCapabilities#supportsUnions()
* @since 4.2
*/
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2Capabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2Capabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/db2/DB2Capabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -114,10 +114,6 @@
return true;
}
- public boolean supportsOrderByInInlineViews() {
- return true;
- }
-
/**
* @see org.teiid.connector.api.ConnectorCapabilities#supportsFunctionsInGroupBy()
* @since 5.0
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyCapabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/derby/DerbyCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -152,15 +152,6 @@
return true;
}
- /**
- * UNION is supported, but not UNIONs with a final ORDER BY.
- * @see org.teiid.connector.api.ConnectorCapabilities#supportsUnionOrderBy()
- * @since 5.0
- */
- public boolean supportsUnionOrderBy() {
- return false;
- }
-
@Override
public boolean supportsSetQueryOrderBy() {
return false;
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mm/MMCapabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mm/MMCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/mm/MMCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -139,10 +139,6 @@
return true;
}
- public boolean supportsOrderByInInlineViews() {
- return true;
- }
-
/**
* @see org.teiid.connector.api.ConnectorCapabilities#supportsFunctionsInGroupBy()
* @since 5.0
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleCapabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/oracle/OracleCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -115,10 +115,6 @@
return true;
}
- public boolean supportsOrderByInInlineViews() {
- return true;
- }
-
/**
* @see org.teiid.connector.api.ConnectorCapabilities#supportsFunctionsInGroupBy()
* @since 5.0
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLCapabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/postgresql/PostgreSQLCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -248,10 +248,6 @@
return true;
}
- public boolean supportsOrderByInInlineViews() {
- return true;
- }
-
public boolean supportsRowLimit() {
return true;
}
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerCapabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sqlserver/SqlServerCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -118,10 +118,6 @@
return true;
}
- public boolean supportsOrderByInInlineViews() {
- return false;
- }
-
/**
* @see org.teiid.connector.api.ConnectorCapabilities#supportsFunctionsInGroupBy()
* @since 5.0
Modified: trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseCapabilities.java
===================================================================
--- trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-jdbc/src/main/java/org/teiid/connector/jdbc/sybase/SybaseCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -98,10 +98,6 @@
return true;
}
- public boolean supportsOrderByInInlineViews() {
- return false;
- }
-
/**
* @see org.teiid.connector.api.ConnectorCapabilities#supportsFunctionsInGroupBy()
* @since 5.0
Modified: trunk/connectors/connector-ldap/src/main/java/com/metamatrix/connector/ldap/IQueryToLdapSearchParser.java
===================================================================
--- trunk/connectors/connector-ldap/src/main/java/com/metamatrix/connector/ldap/IQueryToLdapSearchParser.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-ldap/src/main/java/com/metamatrix/connector/ldap/IQueryToLdapSearchParser.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -29,8 +29,6 @@
* This class should remove all the MMX-specific stuff, and turn it into something any
* LDAP implementation can understand.
*
- * TODO: Escape all special characters according to http://www.ietf.org/rfc/rfc2254.txt.
- *
*/
package com.metamatrix.connector.ldap;
@@ -66,6 +64,7 @@
import org.teiid.connector.language.ILikeCriteria;
import org.teiid.connector.language.ILimit;
import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.INotCriteria;
import org.teiid.connector.language.IOrderBy;
import org.teiid.connector.language.IOrderByItem;
import org.teiid.connector.language.IQuery;
@@ -463,6 +462,7 @@
if(criteria == null) {
filterList.add("(objectClass=*)"); //$NON-NLS-1$
}
+ boolean isNegated = false;
// Recursive case: compound criteria
if(criteria instanceof ICompoundCriteria) {
logger.logTrace("Parsing compound criteria."); //$NON-NLS-1$
@@ -485,6 +485,8 @@
logger.logTrace("Parsing compare criteria."); //$NON-NLS-1$
ICompareCriteria.Operator op = ((ICompareCriteria) criteria).getOperator();
+ isNegated = op == Operator.NE || op == Operator.GT || op == Operator.LT;
+
IExpression lhs = ((ICompareCriteria) criteria).getLeftExpression();
IExpression rhs = ((ICompareCriteria) criteria).getRightExpression();
@@ -503,6 +505,7 @@
// Base case
} else if(criteria instanceof ILikeCriteria) {
logger.logTrace("Parsing LIKE criteria."); //$NON-NLS-1$
+ isNegated = ((ILikeCriteria) criteria).isNegated();
// Convert LIKE to Equals, where any "%" symbol is replaced with "*".
ICompareCriteria.Operator op = Operator.EQ;
IExpression lhs = ((ILikeCriteria) criteria).getLeftExpression();
@@ -516,12 +519,23 @@
// Base case
} else if(criteria instanceof IInCriteria) {
logger.logTrace("Parsing IN criteria."); //$NON-NLS-1$
+ isNegated = ((IInCriteria) criteria).isNegated();
IExpression lhs = ((IInCriteria)criteria).getLeftExpression();
List rhsList = ((IInCriteria)criteria).getRightExpressions();
// Recursively add each IN expression to the filter list.
processInCriteriaList(filterList, rhsList, lhs);
+ } else if (criteria instanceof INotCriteria) {
+ logger.logTrace("Parsing NOT criteria."); //$NON-NLS-1$
+ isNegated = true;
+ filterList = getSearchFilterFromWhereClause(((INotCriteria)criteria).getCriteria(), filterList);
}
+ if (isNegated) {
+ filterList.add(0, "("); //$NON-NLS-1$
+ filterList.add(1, "!"); //$NON-NLS-1$
+ filterList.add(")"); //$NON-NLS-1$
+ }
+
return filterList;
}
@@ -554,10 +568,6 @@
// Push the comparison statement into the list, e.g.:
// (sn=Mike)
// !(empNum>=100)
- if(op == Operator.NE || op == Operator.GT || op == Operator.LT) {
- filterList.add("("); //$NON-NLS-1$
- filterList.add("!"); //$NON-NLS-1$
- }
filterList.add("("); //$NON-NLS-1$
filterList.add(lhs);
@@ -581,9 +591,6 @@
}
filterList.add(rhs);
filterList.add(")"); //$NON-NLS-1$
- if(op == Operator.NE || op == Operator.GT || op == Operator.LT) {
- filterList.add(")"); //$NON-NLS-1$
- }
}
/**
Modified: trunk/connectors/connector-ldap/src/main/java/com/metamatrix/connector/ldap/LDAPConnectorCapabilities.java
===================================================================
--- trunk/connectors/connector-ldap/src/main/java/com/metamatrix/connector/ldap/LDAPConnectorCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-ldap/src/main/java/com/metamatrix/connector/ldap/LDAPConnectorCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -33,42 +33,10 @@
this.maxInCriteriaSize = maxInCriteriaSize;
}
- public boolean supportsAndCriteria() {
+ public boolean supportsCompareCriteriaEquals() {
return true;
}
- public boolean supportsCompareCriteria() {
- return true;
- }
-
- public boolean supportsCompareCriteriaEquals() {
- return true;
- }
-
- public boolean supportsCompareCriteriaGreaterThan() {
- return true;
- }
-
- public boolean supportsCompareCriteriaGreaterThanOrEqual() {
- return true;
- }
-
- public boolean supportsCompareCriteriaLessThan() {
- return true;
- }
-
- public boolean supportsCompareCriteriaLessThanOrEqual() {
- return true;
- }
-
- public boolean supportsCompareCriteriaNotEquals() {
- return true;
- }
-
- public boolean supportsCriteria() {
- return true;
- }
-
public boolean supportsInCriteria() {
return true;
}
@@ -99,5 +67,15 @@
// won't do it alone.
return false;
}
+
+ @Override
+ public boolean supportsCompareCriteriaOrdered() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsNotCriteria() {
+ return true;
+ }
}
Modified: trunk/connectors/connector-ldap/src/test/java/com/metamatrix/connector/ldap/TestIQueryToLdapSearchParser.java
===================================================================
--- trunk/connectors/connector-ldap/src/test/java/com/metamatrix/connector/ldap/TestIQueryToLdapSearchParser.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-ldap/src/test/java/com/metamatrix/connector/ldap/TestIQueryToLdapSearchParser.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -159,6 +159,53 @@
}
+ /**
+ * Test a Query with a criteria
+ */
+ public void testEscaping() throws Exception {
+ LDAPSearchDetails searchDetails = helpGetSearchDetails("SELECT UserID, Name FROM LdapModel.People WHERE Name = 'R*'"); //$NON-NLS-1$
+
+ //-----------------------------------
+ // Set Expected SearchDetails Values
+ //-----------------------------------
+ String expectedContextName = "ou=people,dc=metamatrix,dc=com"; //$NON-NLS-1$
+ String expectedContextFilter = "(cn=R\\2a)"; //$NON-NLS-1$
+
+ List expectedAttrNameList = new ArrayList();
+ expectedAttrNameList.add("uid"); //$NON-NLS-1$
+ expectedAttrNameList.add("cn"); //$NON-NLS-1$
+
+ long expectedCountLimit = -1;
+ int expectedSearchScope = SearchControls.ONELEVEL_SCOPE;
+ SortKey[] expectedSortKeys = null;
+
+ helpTestSearchDetails(searchDetails, expectedContextName, expectedContextFilter, expectedAttrNameList,
+ expectedCountLimit, expectedSearchScope, expectedSortKeys);
+
+ }
+
+ public void testNot() throws Exception {
+ LDAPSearchDetails searchDetails = helpGetSearchDetails("SELECT UserID, Name FROM LdapModel.People WHERE not (Name like 'R%' or Name like 'S%')"); //$NON-NLS-1$
+
+ //-----------------------------------
+ // Set Expected SearchDetails Values
+ //-----------------------------------
+ String expectedContextName = "ou=people,dc=metamatrix,dc=com"; //$NON-NLS-1$
+ String expectedContextFilter = "(!(|(cn=R*)(cn=S*)))"; //$NON-NLS-1$
+
+ List expectedAttrNameList = new ArrayList();
+ expectedAttrNameList.add("uid"); //$NON-NLS-1$
+ expectedAttrNameList.add("cn"); //$NON-NLS-1$
+
+ long expectedCountLimit = -1;
+ int expectedSearchScope = SearchControls.ONELEVEL_SCOPE;
+ SortKey[] expectedSortKeys = null;
+
+ helpTestSearchDetails(searchDetails, expectedContextName, expectedContextFilter, expectedAttrNameList,
+ expectedCountLimit, expectedSearchScope, expectedSortKeys);
+
+ }
+
public void testGT() throws Exception {
LDAPSearchDetails searchDetails = helpGetSearchDetails("SELECT UserID, Name FROM LdapModel.People WHERE Name > 'R'"); //$NON-NLS-1$
@@ -215,7 +262,6 @@
return searchDetails;
}
-
public static FakeMetadataFacade exampleLdap() {
// Create models
FakeMetadataObject ldapModel = FakeMetadataFactory.createPhysicalModel("LdapModel"); //$NON-NLS-1$
Modified: trunk/connectors/connector-loopback/src/main/java/com/metamatrix/connector/loopback/LoopbackCapabilities.java
===================================================================
--- trunk/connectors/connector-loopback/src/main/java/com/metamatrix/connector/loopback/LoopbackCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-loopback/src/main/java/com/metamatrix/connector/loopback/LoopbackCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -42,13 +42,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsExecutionMode(int)
- */
- public boolean supportsExecutionMode(int executionMode) {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#getSupportedFunctions()
*/
public List getSupportedFunctions() {
@@ -74,13 +67,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsAggregates()
- */
- public boolean supportsAggregates() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsAggregatesAvg()
*/
public boolean supportsAggregatesAvg() {
@@ -137,13 +123,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsAndCriteria()
- */
- public boolean supportsAndCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsBetweenCriteria()
*/
public boolean supportsBetweenCriteria() {
@@ -158,13 +137,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteria()
- */
- public boolean supportsCompareCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaEquals()
*/
public boolean supportsCompareCriteriaEquals() {
@@ -172,41 +144,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaGreaterThan()
- */
- public boolean supportsCompareCriteriaGreaterThan() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaGreaterThanOrEqual()
- */
- public boolean supportsCompareCriteriaGreaterThanOrEqual() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaLessThan()
- */
- public boolean supportsCompareCriteriaLessThan() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaLessThanOrEqual()
- */
- public boolean supportsCompareCriteriaLessThanOrEqual() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaNotEquals()
- */
- public boolean supportsCompareCriteriaNotEquals() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsCorrelatedSubqueries()
*/
public boolean supportsCorrelatedSubqueries() {
@@ -214,13 +151,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCriteria()
- */
- public boolean supportsCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsExistsCriteria()
*/
public boolean supportsExistsCriteria() {
@@ -256,13 +186,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsJoins()
- */
- public boolean supportsJoins() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsLikeCriteria()
*/
public boolean supportsLikeCriteria() {
@@ -305,13 +228,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsQuantifiedCompareCriteria()
- */
- public boolean supportsQuantifiedCompareCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsQuantifiedCompareCriteriaAll()
*/
public boolean supportsQuantifiedCompareCriteriaAll() {
@@ -319,20 +235,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsQuantifiedCompareCriteriaAny()
- */
- public boolean supportsQuantifiedCompareCriteriaAny() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsScalarFunctions()
- */
- public boolean supportsScalarFunctions() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsScalarSubqueries()
*/
public boolean supportsScalarSubqueries() {
@@ -364,10 +266,6 @@
return true;
}
- public boolean supportsOrderByInInlineViews() {
- return true;
- }
-
public boolean supportsQuantifiedCompareCriteriaSome() {
return true;
}
@@ -377,10 +275,10 @@
}
@Override
- public boolean supportsSelectLiterals() {
+ public boolean supportsSelectExpression() {
return true;
}
-
+
@Override
public boolean supportsSetQueryOrderBy() {
return true;
@@ -390,4 +288,30 @@
public boolean supportsUnions() {
return true;
}
+
+ @Override
+ public boolean supportsCompareCriteriaOrdered() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsInnerJoins() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsExcept() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsHaving() {
+ return true;
+ }
+
+ @Override
+ public boolean supportsIntersect() {
+ return true;
+ }
+
}
Modified: trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/SalesforceCapabilities.java
===================================================================
--- trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/SalesforceCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/SalesforceCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -45,31 +45,11 @@
}
- @Override
- public boolean supportsScalarFunctions() {
- return true;
- }
-
- public boolean supportsCompareCriteria() {
+ public boolean supportsCompareCriteriaEquals() {
return true;
}
-
- public boolean supportsCompareCriteriaEquals() {
- return true;
- }
-
- public boolean supportsCriteria() {
- return true;
- }
-
-
- public boolean supportsAndCriteria() {
- return true;
- }
-
-
public boolean supportsInCriteria() {
return true;
}
@@ -89,23 +69,24 @@
return false;
}
- public boolean supportsCompareCriteriaGreaterThan() {
+ @Override
+ public boolean supportsAggregatesCountStar() {
return true;
}
- public boolean supportsCompareCriteriaGreaterThanOrEqual() {
+ @Override
+ public boolean supportsNotCriteria() {
return true;
}
-
- public boolean supportsCompareCriteriaLessThan() {
+
+ @Override
+ public boolean supportsOrCriteria() {
return true;
}
-
- public boolean supportsCompareCriteriaLessThanOrEqual() {
+
+ @Override
+ public boolean supportsCompareCriteriaOrdered() {
return true;
}
- public boolean supportsCompareCriteriaNotEquals() {
- return true;
- }
}
Modified: trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/QueryExecutionImpl.java
===================================================================
--- trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/QueryExecutionImpl.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/QueryExecutionImpl.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -24,6 +24,7 @@
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -37,6 +38,7 @@
import org.teiid.connector.api.ExecutionContext;
import org.teiid.connector.api.ResultSetExecution;
import org.teiid.connector.basic.BasicExecution;
+import org.teiid.connector.language.IAggregate;
import org.teiid.connector.language.IQueryCommand;
import org.teiid.connector.metadata.runtime.Element;
import org.teiid.connector.metadata.runtime.RuntimeMetadata;
@@ -119,6 +121,11 @@
@Override
public List next() throws ConnectorException, DataNotAvailableException {
while (results != null) {
+ if (query.getProjectedQuery().getSelect().getSelectSymbols().get(0).getExpression() instanceof IAggregate) {
+ List<?> result = Arrays.asList(results.getSize());
+ results = null;
+ return result;
+ }
if (i < results.getSize()) {
SObject sObject = results.getRecords(i++);
org.apache.axis.message.MessageElement[] fields = sObject.get_any();
Modified: trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/CriteriaVisitor.java
===================================================================
--- trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/CriteriaVisitor.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/CriteriaVisitor.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -25,10 +25,13 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.teiid.connector.api.ConnectorException;
import org.teiid.connector.language.ICompareCriteria;
+import org.teiid.connector.language.ICompoundCriteria;
+import org.teiid.connector.language.ICriteria;
import org.teiid.connector.language.IElement;
import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFunction;
@@ -36,6 +39,7 @@
import org.teiid.connector.language.IInCriteria;
import org.teiid.connector.language.ILikeCriteria;
import org.teiid.connector.language.ILiteral;
+import org.teiid.connector.language.INotCriteria;
import org.teiid.connector.language.ICompareCriteria.Operator;
import org.teiid.connector.metadata.runtime.Element;
import org.teiid.connector.metadata.runtime.Group;
@@ -98,7 +102,6 @@
@Override
public void visit( ILikeCriteria criteria ) {
- super.visit(criteria);
try {
if (isIdColumn(criteria.getLeftExpression())) {
ConnectorException e = new ConnectorException(Messages.getString("CriteriaVisitor.LIKE.not.supported.on.Id"));
@@ -112,14 +115,58 @@
} catch (ConnectorException e) {
exceptions.add(e);
}
+ boolean negated = criteria.isNegated();
+ criteria.setNegated(false);
criteriaList.add(criteria.toString());
+ if (negated) {
+ addNot();
+ criteria.setNegated(true);
+ }
// don't check if it's ID, Id LIKE '123%' still requires a query
setHasCriteria(true, false);
}
+
+ @Override
+ public void visit(ICompoundCriteria obj) {
+ List<List<String>> savedCriteria = new LinkedList<List<String>>();
+ for (ICriteria crit : obj.getCriteria()) {
+ super.visitNode(crit);
+ if (!this.criteriaList.isEmpty()) {
+ savedCriteria.add(this.criteriaList);
+ }
+ this.criteriaList = new LinkedList<String>();
+ }
+ if (savedCriteria.size() == 1) {
+ this.criteriaList = savedCriteria.get(0);
+ } else if (savedCriteria.size() > 1){
+ for (Iterator<List<String>> listIter = savedCriteria.iterator(); listIter.hasNext();) {
+ this.criteriaList.add(OPEN);
+ this.criteriaList.addAll(listIter.next());
+ this.criteriaList.add(CLOSE);
+ if (listIter.hasNext()) {
+ this.criteriaList.add(SPACE);
+ this.criteriaList.add(obj.getOperator().toString());
+ this.criteriaList.add(SPACE);
+ }
+ }
+ }
+ }
+
+ @Override
+ public void visit(INotCriteria obj) {
+ super.visit(obj);
+ addNot();
+ }
+ private void addNot() {
+ if (!criteriaList.isEmpty()) {
+ criteriaList.add(0, "NOT ("); //$NON-NLS-1$
+ criteriaList.add(CLOSE);
+ }
+ }
+
@Override
public void visit( IInCriteria criteria ) {
- super.visit(criteria);
try {
IExpression lExpr = criteria.getLeftExpression();
String columnName = lExpr.toString();
@@ -129,7 +176,7 @@
&& (column.getNativeType().equals("multipicklist") || column.getNativeType().equals("restrictedmultiselectpicklist"))) {
appendMultiselectIn(column, criteria);
} else {
- appendCriteria(criteriaList, criteria);
+ appendCriteria(criteria);
}
}
setHasCriteria(true, isIdColumn(criteria.getLeftExpression()));
@@ -139,7 +186,6 @@
}
public void parseFunction( IFunction func ) {
- super.visit(func);
String functionName = func.getName();
try {
if (functionName.equalsIgnoreCase("includes")) {
@@ -264,12 +310,14 @@
}
}
- private void appendCriteria( List criteriaList,
- IInCriteria criteria ) throws ConnectorException {
+ private void appendCriteria( IInCriteria criteria ) throws ConnectorException {
StringBuffer queryString = new StringBuffer();
queryString.append(' ');
queryString.append(getValue(criteria.getLeftExpression()));
queryString.append(' ');
+ if (criteria.isNegated()) {
+ queryString.append("NOT ");
+ }
queryString.append("IN");
queryString.append('(');
Element column = ((IElement)criteria.getLeftExpression()).getMetadataObject();
@@ -382,4 +430,14 @@
public String getTableName() throws ConnectorException {
return table.getNameInSource();
}
+
+ protected void addCriteriaString(StringBuffer result) {
+ if(hasCriteria()) {
+ result.append(WHERE).append(SPACE);
+ for (String string : criteriaList) {
+ result.append(string);
+ }
+ result.append(SPACE);
+ }
+ }
}
Modified: trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/DeleteVisitor.java
===================================================================
--- trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/DeleteVisitor.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/DeleteVisitor.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -59,18 +59,7 @@
result.append("Id").append(SPACE);
result.append(FROM).append(SPACE);
result.append(table.getNameInSource()).append(SPACE);
- result.append(WHERE).append(SPACE);
- boolean first = true;
- Iterator<String> iter = criteriaList.iterator();
- while(iter.hasNext()) {
- String criterion = (String) iter.next();
- if(first) {
- result.append(criterion).append(SPACE);
- first = false;
- } else {
- result.append("AND").append(SPACE).append(criterion).append(SPACE);;
- }
- }
+ addCriteriaString(result);
return result.toString();
}
}
Modified: trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/SelectVisitor.java
===================================================================
--- trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/SelectVisitor.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/SelectVisitor.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -27,6 +27,7 @@
import java.util.Map;
import org.teiid.connector.api.ConnectorException;
+import org.teiid.connector.language.IAggregate;
import org.teiid.connector.language.IElement;
import org.teiid.connector.language.IExpression;
import org.teiid.connector.language.IFrom;
@@ -76,7 +77,7 @@
boolean firstTime = true;
int index = 0;
while (symbolIter.hasNext()) {
- ISelectSymbol symbol = (ISelectSymbol) symbolIter.next();
+ ISelectSymbol symbol = symbolIter.next();
// get the name in source
IExpression expression = symbol.getExpression();
if (expression instanceof IElement) {
@@ -99,6 +100,8 @@
firstTime = false;
}
selectSymbols.append(nameInSource);
+ } else if (expression instanceof IAggregate) {
+ selectSymbols.append("count()"); //$NON-NLS-1$
}
++index;
}
@@ -147,20 +150,7 @@
result.append(selectSymbols).append(SPACE);
result.append(FROM).append(SPACE);
result.append(table.getNameInSource()).append(SPACE);
- if(hasCriteria()) {
- result.append(WHERE).append(SPACE);
- boolean first = true;
- Iterator<String> iter = criteriaList.iterator();
- while(iter.hasNext()) {
- String criterion = iter.next();
- if(first) {
- result.append(criterion).append(SPACE);
- first = false;
- } else {
- result.append("AND").append(SPACE).append(criterion).append(SPACE);;
- }
- }
- }
+ addCriteriaString(result);
//result.append(orderByClause).append(SPACE);
result.append(limitClause);
Util.validateQueryLength(result);
Modified: trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/UpdateVisitor.java
===================================================================
--- trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/UpdateVisitor.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-salesforce/src/main/java/com/metamatrix/connector/salesforce/execution/visitors/UpdateVisitor.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -61,18 +61,8 @@
result.append("Id").append(SPACE);
result.append(FROM).append(SPACE);
result.append(table.getNameInSource()).append(SPACE);
- result.append(WHERE).append(SPACE);
- boolean first = true;
- Iterator<String> iter = criteriaList.iterator();
- while(iter.hasNext()) {
- String criterion = iter.next();
- if(first) {
- result.append(criterion).append(SPACE);
- first = false;
- } else {
- result.append("AND").append(SPACE).append(criterion).append(SPACE);;
- }
- }
+ addCriteriaString(result);
return result.toString();
}
+
}
Added: trunk/connectors/connector-salesforce/src/test/java/com/metamatrix/connector/salesforce/execution/visitors/TestVisitors.java
===================================================================
--- trunk/connectors/connector-salesforce/src/test/java/com/metamatrix/connector/salesforce/execution/visitors/TestVisitors.java (rev 0)
+++ trunk/connectors/connector-salesforce/src/test/java/com/metamatrix/connector/salesforce/execution/visitors/TestVisitors.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -0,0 +1,109 @@
+/*
+ * 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 com.metamatrix.connector.salesforce.execution.visitors;
+
+import static org.junit.Assert.*;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.teiid.connector.language.IQuery;
+
+import com.metamatrix.cdk.api.TranslationUtility;
+import com.metamatrix.common.types.DataTypeManager;
+import com.metamatrix.query.unittest.FakeMetadataFacade;
+import com.metamatrix.query.unittest.FakeMetadataFactory;
+import com.metamatrix.query.unittest.FakeMetadataObject;
+import com.metamatrix.query.unittest.FakeMetadataStore;
+
+public class TestVisitors {
+
+ public static FakeMetadataFacade exampleSalesforce() {
+ // Create models
+ FakeMetadataObject salesforceModel = FakeMetadataFactory.createPhysicalModel("SalesforceModel"); //$NON-NLS-1$
+
+ // Create physical groups
+ FakeMetadataObject table = FakeMetadataFactory.createPhysicalGroup("SalesforceModel.Account", salesforceModel); //$NON-NLS-1$
+ table.putProperty(FakeMetadataObject.Props.NAME_IN_SOURCE, "Account"); //$NON-NLS-1$
+ table.setExtensionProp("Supports Query", Boolean.TRUE.toString()); //$NON-NLS-1$
+ // Create physical elements
+ String[] elemNames = new String[] {
+ "AccountID", "Name", "Stuff" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ };
+ String[] elemTypes = new String[] {
+ DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.STRING
+ };
+
+ List<FakeMetadataObject> cols = FakeMetadataFactory.createElements(table, elemNames, elemTypes);
+ cols.get(2).putProperty(FakeMetadataObject.Props.NATIVE_TYPE, "multipicklist"); //$NON-NLS-1$
+ cols.get(2).putProperty(FakeMetadataObject.Props.SEARCHABLE_COMPARE, false);
+ cols.get(2).putProperty(FakeMetadataObject.Props.SEARCHABLE_LIKE, true);
+ // Set name in source on each column
+ String[] nameInSource = new String[] {
+ "id", "AccountName", "Stuff" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ };
+ for(int i=0; i<2; i++) {
+ FakeMetadataObject obj = cols.get(i);
+ obj.putProperty(FakeMetadataObject.Props.NAME_IN_SOURCE, nameInSource[i]);
+ }
+
+ // Add all objects to the store
+ FakeMetadataStore store = new FakeMetadataStore();
+ store.addObject(salesforceModel);
+ store.addObject(table);
+ store.addObjects(cols);
+
+ // Create the facade from the store
+ return new FakeMetadataFacade(store);
+ }
+
+ private static TranslationUtility translationUtility = new TranslationUtility(exampleSalesforce());
+
+ @Test public void testOr() throws Exception {
+ IQuery command = (IQuery)translationUtility.parseCommand("select * from Account where Name = 'foo' or Stuff = 'bar'"); //$NON-NLS-1$
+ SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
+ visitor.visit(command);
+ assertEquals("SELECT id, AccountName, Stuff FROM Account WHERE (AccountName = 'foo') OR (Stuff = 'bar')", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ }
+
+ @Test public void testNot() throws Exception {
+ IQuery command = (IQuery)translationUtility.parseCommand("select * from Account where not (Name = 'foo' and Stuff = 'bar')"); //$NON-NLS-1$
+ SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
+ visitor.visit(command);
+ assertEquals("SELECT id, AccountName, Stuff FROM Account WHERE NOT ((AccountName = 'foo') AND (Stuff = 'bar'))", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ }
+
+ @Test public void testCountStart() throws Exception {
+ IQuery command = (IQuery)translationUtility.parseCommand("select count(*) from Account"); //$NON-NLS-1$
+ SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
+ visitor.visit(command);
+ assertEquals("SELECT count() FROM Account", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ }
+
+ @Test public void testNotLike() throws Exception {
+ IQuery command = (IQuery)translationUtility.parseCommand("select * from Account where Name not like '%foo' or Stuff = 'bar'"); //$NON-NLS-1$
+ SelectVisitor visitor = new SelectVisitor(translationUtility.createRuntimeMetadata());
+ visitor.visit(command);
+ assertEquals("SELECT id, AccountName, Stuff FROM Account WHERE (NOT (Account.AccountName LIKE '%foo')) OR (Stuff = 'bar')", visitor.getQuery().toString().trim()); //$NON-NLS-1$
+ }
+
+}
Property changes on: trunk/connectors/connector-salesforce/src/test/java/com/metamatrix/connector/salesforce/execution/visitors/TestVisitors.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/connectors/connector-xml/src/main/java/com/metamatrix/connector/xml/base/XMLCapabilities.java
===================================================================
--- trunk/connectors/connector-xml/src/main/java/com/metamatrix/connector/xml/base/XMLCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-xml/src/main/java/com/metamatrix/connector/xml/base/XMLCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -45,26 +45,11 @@
}
- public final boolean supportsCompareCriteria() {
- return true;
- }
-
-
public final boolean supportsCompareCriteriaEquals() {
return true;
}
- public final boolean supportsCriteria() {
- return true;
- }
-
-
- public final boolean supportsAndCriteria() {
- return true;
- }
-
-
public final boolean supportsInCriteria() {
return true;
}
Modified: trunk/connectors/connector-xml/src/test/java/com/metamatrix/connector/xml/base/TestXMLCapabilities.java
===================================================================
--- trunk/connectors/connector-xml/src/test/java/com/metamatrix/connector/xml/base/TestXMLCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/connector-xml/src/test/java/com/metamatrix/connector/xml/base/TestXMLCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -50,14 +50,6 @@
assertEquals(Integer.MAX_VALUE, m_caps.getMaxInCriteriaSize());
}
- public void testSupportsCriteria() {
- assertTrue(m_caps.supportsCriteria());
- }
-
- public void testSupportsCompareCriteria() {
- assertTrue(m_caps.supportsCompareCriteria());
- }
-
public void testSupportsCompareCriteriaEquals() {
assertTrue(m_caps.supportsCompareCriteriaEquals());
}
@@ -66,10 +58,6 @@
assertTrue(m_caps.supportsInCriteria());
}
- public void testSupportsAndCriteria() {
- assertTrue(m_caps.supportsAndCriteria());
- }
-
public void testXMLCapabilities() {
XMLCapabilities caps = new XMLCapabilities();
assertNotNull(caps);
@@ -86,16 +74,12 @@
assertFalse(m_caps.supportsSelectDistinct());
}
- public void testSupportsSelectLiterals() {
- assertFalse(m_caps.supportsSelectLiterals());
- }
-
public void testSupportsAliasedGroup() {
assertFalse(m_caps.supportsAliasedGroup());
}
public void testSupportsJoins() {
- assertFalse(m_caps.supportsJoins());
+ assertFalse(m_caps.supportsInnerJoins());
}
public void testSupportsSelfJoins() {
@@ -114,26 +98,6 @@
assertFalse(m_caps.supportsBetweenCriteria());
}
- public void testSupportsCompareCriteriaNotEquals() {
- assertFalse(m_caps.supportsCompareCriteriaNotEquals());
- }
-
- public void testSupportsCompareCriteriaLessThan() {
- assertFalse(m_caps.supportsCompareCriteriaLessThan());
- }
-
- public void testSupportsCompareCriteriaLessThanOrEqual() {
- assertFalse(m_caps.supportsCompareCriteriaLessThanOrEqual());
- }
-
- public void testSupportsCompareCriteriaGreaterThan() {
- assertFalse(m_caps.supportsCompareCriteriaGreaterThan());
- }
-
- public void testSupportsCompareCriteriaGreaterThanOrEqual() {
- assertFalse(m_caps.supportsCompareCriteriaGreaterThanOrEqual());
- }
-
public void testSupportsLikeCriteria() {
assertFalse(m_caps.supportsLikeCriteria());
}
@@ -162,10 +126,6 @@
assertFalse(m_caps.supportsExistsCriteria());
}
- public void testSupportsQuantifiedCompareCriteria() {
- assertFalse(m_caps.supportsQuantifiedCompareCriteria());
- }
-
public void testSupportsQuantifiedCompareCriteriaSome() {
assertFalse(m_caps.supportsQuantifiedCompareCriteriaSome());
}
@@ -178,10 +138,6 @@
assertFalse(m_caps.supportsOrderBy());
}
- public void testSupportsAggregates() {
- assertFalse(m_caps.supportsAggregates());
- }
-
public void testSupportsAggregatesSum() {
assertFalse(m_caps.supportsAggregatesSum());
}
@@ -226,10 +182,6 @@
assertFalse(m_caps.supportsSearchedCaseExpressions());
}
- public void testSupportsScalarFunctions() {
- assertFalse(m_caps.supportsScalarFunctions());
- }
-
public void testSupportsInlineViews() {
assertFalse(m_caps.supportsInlineViews());
}
Modified: trunk/connectors/sandbox/connector-exec/src/main/java/com/metamatrix/connector/exec/ExecCapabilities.java
===================================================================
--- trunk/connectors/sandbox/connector-exec/src/main/java/com/metamatrix/connector/exec/ExecCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/sandbox/connector-exec/src/main/java/com/metamatrix/connector/exec/ExecCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -46,13 +46,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteria()
- */
- public boolean supportsCompareCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaEquals()
*/
public boolean supportsCompareCriteriaEquals() {
@@ -60,13 +53,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCriteria()
- */
- public boolean supportsCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsInCriteria()
*/
public boolean supportsInCriteria() {
Modified: trunk/connectors/sandbox/connector-object/src/main/java/com/metamatrix/connector/object/ObjectConnectorCapabilities.java
===================================================================
--- trunk/connectors/sandbox/connector-object/src/main/java/com/metamatrix/connector/object/ObjectConnectorCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/sandbox/connector-object/src/main/java/com/metamatrix/connector/object/ObjectConnectorCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -29,20 +29,6 @@
public class ObjectConnectorCapabilities extends BasicConnectorCapabilities {
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsAndCriteria()
- */
- public boolean supportsAndCriteria() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteria()
- */
- public boolean supportsCompareCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaEquals()
*/
public boolean supportsCompareCriteriaEquals() {
@@ -50,48 +36,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaGreaterThan()
- */
- public boolean supportsCompareCriteriaGreaterThan() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaGreaterThanOrEqual()
- */
- public boolean supportsCompareCriteriaGreaterThanOrEqual() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaLessThan()
- */
- public boolean supportsCompareCriteriaLessThan() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaLessThanOrEqual()
- */
- public boolean supportsCompareCriteriaLessThanOrEqual() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaNotEquals()
- */
- public boolean supportsCompareCriteriaNotEquals() {
- return true;
- }
-
- /*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCriteria()
- */
- public boolean supportsCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsInCriteria()
*/
public boolean supportsInCriteria() {
@@ -125,5 +69,10 @@
public boolean supportsOrCriteria() {
return true;
}
+
+ @Override
+ public boolean supportsCompareCriteriaOrdered() {
+ return true;
+ }
}
Modified: trunk/connectors/sandbox/connector-yahoo/src/main/java/com/metamatrix/connector/yahoo/YahooCapabilities.java
===================================================================
--- trunk/connectors/sandbox/connector-yahoo/src/main/java/com/metamatrix/connector/yahoo/YahooCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/connectors/sandbox/connector-yahoo/src/main/java/com/metamatrix/connector/yahoo/YahooCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -57,13 +57,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteria()
- */
- public boolean supportsCompareCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsCompareCriteriaEquals()
*/
public boolean supportsCompareCriteriaEquals() {
@@ -71,13 +64,6 @@
}
/*
- * @see com.metamatrix.data.ConnectorCapabilities#supportsCriteria()
- */
- public boolean supportsCriteria() {
- return true;
- }
-
- /*
* @see com.metamatrix.data.ConnectorCapabilities#supportsInCriteria()
*/
public boolean supportsInCriteria() {
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/capabilities/BasicSourceCapabilities.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/capabilities/BasicSourceCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/capabilities/BasicSourceCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -59,8 +59,10 @@
public void setCapabilitySupport(Capability capability, boolean supports) {
if (supports && capability == Capability.QUERY_AGGREGATES) {
capabilityMap.put(Capability.QUERY_GROUP_BY, true);
+ capabilityMap.put(Capability.QUERY_HAVING, true);
+ } else {
+ capabilityMap.put(capability, supports);
}
- capabilityMap.put(capability, supports);
}
public void setFunctionSupport(String function, boolean supports) {
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/capabilities/SourceCapabilities.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/capabilities/SourceCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/capabilities/SourceCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -30,9 +30,9 @@
*/
QUERY_SELECT_DISTINCT,
/**
- * Support indicates connector can accept queries with literals in the SELECT
+ * Support indicates connector can accept queries non-elements in the SELECT
*/
- QUERY_SELECT_LITERALS,
+ QUERY_SELECT_EXPRESSION,
/**
* Support indicates connector can accept joins where groups have aliases (required for QUERY_FROM_JOIN_SELFJOIN)
*
@@ -44,11 +44,15 @@
*/
MAX_QUERY_FROM_GROUPS,
/**
- * Support indicates connector can accept joins
+ * @since 6.1.0
+ */
+ JOIN_CRITERIA_ALLOWED,
+ /**
+ * Support indicates connector can accept inner joins
*
* @since 3.1 SP2
*/
- QUERY_FROM_JOIN,
+ QUERY_FROM_JOIN_INNER,
/**
* Indicates that the source prefers ANSI style joins
*
@@ -74,143 +78,84 @@
*/
QUERY_FROM_INLINE_VIEWS,
/**
- * Support indicates connector can push down an ORDER BY in inline views
- *
- * @since 5.0 SP1
- */
- QUERY_FROM_INLINE_VIEWS_ORDER_BY,
- /**
* Support indicates connector can accept full outer joins
*
* @since 3.1 SP2
*/
QUERY_FROM_JOIN_OUTER_FULL,
/**
- * Support indicates connector can accept a WHERE criteria on queries
- *
- * @since 3.1 SP2
- */
- QUERY_WHERE,
- /**
* Support indicates connector accepts criteria of form (element BETWEEN constant AND constant)
*
* @since 4.0
*/
- QUERY_WHERE_BETWEEN,
+ CRITERIA_BETWEEN,
/**
* Support indicates connector accepts criteria of form (element operator constant)
*
* @since 3.1 SP2
*/
- QUERY_WHERE_COMPARE,
+ CRITERIA_COMPARE_EQ,
+ CRITERIA_COMPARE_ORDERED,
/**
- * Support indicates connector accepts criteria of form (element,
- *
- * @since 3.1 SP2
- */
- QUERY_WHERE_COMPARE_EQ,
- /**
- * Support indicates connector accepts criteria of form (element <> constant)
- *
- * @since 3.1 SP2
- */
- QUERY_WHERE_COMPARE_NE,
- /**
- * Support indicates connector accepts criteria of form (element < constant)
- *
- * @since 3.1 SP2
- */
- QUERY_WHERE_COMPARE_LT,
- /**
- * Support indicates connector accepts criteria of form (element <= constant)
- *
- * @since 3.1 SP2
- */
- QUERY_WHERE_COMPARE_LE,
- /**
- * Support indicates connector accepts criteria of form (element > constant)
- *
- * @since 3.1 SP2
- */
- QUERY_WHERE_COMPARE_GT,
- /**
- * Support indicates connector accepts criteria of form (element >= constant)
- *
- * @since 3.1 SP2
- */
- QUERY_WHERE_COMPARE_GE,
- /**
* Support indicates connector accepts criteria of form (element LIKE constant)
*
* @since 3.1 SP2
*/
- QUERY_WHERE_LIKE,
+ CRITERIA_LIKE,
/**
* Support indicates connector accepts criteria of form (element LIKE constant ESCAPE char) - CURRENTLY NOT USED
*
* @since 3.1 SP2
*/
- QUERY_WHERE_LIKE_ESCAPE,
+ CRITERIA_LIKE_ESCAPE,
/**
* Support indicates connector accepts criteria of form (element IN set)
*
* @since 3.1 SP2
*/
- QUERY_WHERE_IN,
+ CRITERIA_IN,
/**
* Support indicates connector accepts IN criteria with a subquery on the right side
*
* @since 4.0
*/
- QUERY_WHERE_IN_SUBQUERY,
+ CRITERIA_IN_SUBQUERY,
/**
* Support indicates connector accepts criteria of form (element IS NULL)
*
* @since 3.1 SP2
*/
- QUERY_WHERE_ISNULL,
+ CRITERIA_ISNULL,
/**
- * Support indicates connector accepts logical criteria connected by AND
- *
- * @since 3.1 SP2
- */
- QUERY_WHERE_AND,
- /**
* Support indicates connector accepts logical criteria connected by OR
*
* @since 3.1 SP2
*/
- QUERY_WHERE_OR,
+ CRITERIA_OR,
/**
* Support indicates connector accepts logical criteria NOT
*
* @since 3.1 SP2
*/
- QUERY_WHERE_NOT,
+ CRITERIA_NOT,
/**
* Support indicates connector accepts the EXISTS criteria
*
* @since 4.0
*/
- QUERY_WHERE_EXISTS,
+ CRITERIA_EXISTS,
/**
- * Support indicates connector accepts quantified subquery comparison criteria
- *
- * @since 4.0
- */
- QUERY_WHERE_QUANTIFIED_COMPARISON,
- /**
* Support indicates connector accepts the quantified comparison criteria that use SOME
*
* @since 4.0
*/
- QUERY_WHERE_QUANTIFIED_SOME,
+ CRITERIA_QUANTIFIED_SOME,
/**
* Support indicates connector accepts the quantified comparison criteria that use ALL
*
* @since 4.0
*/
- QUERY_WHERE_QUANTIFIED_ALL,
+ CRITERIA_QUANTIFIED_ALL,
/**
* Support indicates connector accepts ORDER BY clause
*
@@ -218,12 +163,19 @@
*/
QUERY_ORDERBY,
/**
- * Support indicates connector accepts GROUP BY and HAVING clauses
- *
- * @since 3.1 SP2
+ * Composite support for group by and having - not
+ * used by the connector layer
*/
QUERY_AGGREGATES,
/**
+ * @since 6.1.0 indicates support for GROUP BY
+ */
+ QUERY_GROUP_BY,
+ /**
+ * @since 6.1.0 indicates support for HAVING
+ */
+ QUERY_HAVING,
+ /**
* Support indicates connector can accept the SUM aggregate function
*
* @since 3.1 SP2
@@ -345,12 +297,6 @@
*/
ROW_OFFSET,
/**
- * Support indicates connector allows functions in expressions
- *
- * @since 3.1 SP2
- */
- FUNCTION,
- /**
* The Maximum number of values allowed in an IN criteria (Integer)
*
* @since 4.4
@@ -374,10 +320,6 @@
* @since 6.0.0 indicates support for where all
*/
REQUIRES_CRITERIA,
- /**
- * @since 6.1.0 indicates support for GROUP BY
- */
- QUERY_GROUP_BY
}
public enum Scope {
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/plantree/NodeConstants.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/plantree/NodeConstants.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/plantree/NodeConstants.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -89,7 +89,6 @@
NON_EQUI_JOIN_CRITERIA, // List <CompareCriteria>
SORT_LEFT, // SortOption
SORT_RIGHT, // SortOption
- REMOVED_JOIN_GROUPS, //Set<GroupSymbol>
IS_OPTIONAL, // Boolean
IS_LEFT_DISTINCT, // Boolean
IS_RIGHT_DISTINCT, // Boolean
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CapabilitiesUtil.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -22,9 +22,13 @@
package com.metamatrix.query.optimizer.relational.rules;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import org.teiid.connector.api.ConnectorCapabilities.SupportedJoinCriteria;
+
import com.metamatrix.api.exception.MetaMatrixComponentException;
import com.metamatrix.api.exception.query.QueryMetadataException;
import com.metamatrix.common.types.DataTypeManager;
@@ -33,6 +37,7 @@
import com.metamatrix.query.optimizer.capabilities.CapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
+import com.metamatrix.query.sql.LanguageObject;
import com.metamatrix.query.sql.ReservedWords;
import com.metamatrix.query.sql.lang.JoinType;
import com.metamatrix.query.sql.lang.SetQuery.Operation;
@@ -41,7 +46,7 @@
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
import com.metamatrix.query.sql.symbol.Function;
-import com.metamatrix.query.sql.symbol.ScalarSubquery;
+import com.metamatrix.query.sql.visitor.ElementCollectorVisitor;
/**
*/
@@ -55,30 +60,9 @@
static boolean supportsInlineView(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.QUERY_FROM_INLINE_VIEWS);
+ return supports(Capability.QUERY_FROM_INLINE_VIEWS, modelID, metadata, capFinder);
}
-
- public static boolean supportsJoins(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
- throws QueryMetadataException, MetaMatrixComponentException {
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.QUERY_FROM_JOIN);
- }
-
public static boolean supportsSelfJoins(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
@@ -95,18 +79,10 @@
public static boolean supportsGroupAliases(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.QUERY_FROM_GROUP_ALIAS);
+ return supports(Capability.QUERY_FROM_GROUP_ALIAS, modelID, metadata, capFinder);
}
- public static boolean supportsOuterJoin(Object modelID, JoinType joinType, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
+ public static boolean supportsJoin(Object modelID, JoinType joinType, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
if (metadata.isVirtualModel(modelID)){
@@ -116,6 +92,10 @@
// Find capabilities
SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
+ if (!joinType.isOuter()) {
+ return caps.supportsCapability(Capability.QUERY_FROM_JOIN_INNER);
+ }
+
if(! caps.supportsCapability(Capability.QUERY_FROM_JOIN_OUTER)) {
return false;
}
@@ -133,9 +113,6 @@
// Find capabilities
SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
- if (!caps.supportsCapability(Capability.QUERY_AGGREGATES)) {
- return false;
- }
if (groupCols != null && !groupCols.isEmpty()) {
if (!caps.supportsCapability(Capability.QUERY_GROUP_BY)) {
return false;
@@ -166,11 +143,6 @@
// Find capabilities
SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
- // Check for basic aggregate function support
- if(! caps.supportsCapability(Capability.QUERY_AGGREGATES)) {
- return false;
- }
-
// Check particular function
String func = aggregate.getAggregateFunction();
if(func.equals(ReservedWords.COUNT)) {
@@ -202,10 +174,8 @@
}
// Check DISTINCT if necessary
- if(aggregate.isDistinct()) {
- if(! caps.supportsCapability(Capability.QUERY_AGGREGATES_DISTINCT)) {
- return false;
- }
+ if(aggregate.isDistinct() && ! caps.supportsCapability(Capability.QUERY_AGGREGATES_DISTINCT)) {
+ return false;
}
// Passed all the checks!
@@ -224,10 +194,6 @@
// Find capabilities
SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
- if(! caps.supportsCapability(Capability.FUNCTION)) {
- return false;
- }
-
if (!caps.supportsFunction(function.getName().toLowerCase())) {
return false;
}
@@ -253,69 +219,19 @@
public static boolean supportsSelectDistinct(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.QUERY_SELECT_DISTINCT);
+ return supports(Capability.QUERY_SELECT_DISTINCT, modelID, metadata, capFinder);
}
public static boolean supportsSelectLiterals(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.QUERY_SELECT_LITERALS);
+ return supports(Capability.QUERY_SELECT_EXPRESSION, modelID, metadata, capFinder);
}
public static boolean supportsOrderBy(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.QUERY_ORDERBY);
+ return supports(Capability.QUERY_ORDERBY, modelID, metadata, capFinder);
}
- public static boolean supportsScalarSubquery(Object modelID, ScalarSubquery subquery, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
- throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.QUERY_SUBQUERIES_SCALAR);
- }
-
- public static boolean supportsCorrelatedSubquery(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
- throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.QUERY_SUBQUERIES_CORRELATED);
- }
-
public static boolean supportsSetOp(Object modelID, Operation setOp, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
@@ -340,41 +256,17 @@
public static boolean supportsSetQueryOrderBy(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.QUERY_SET_ORDER_BY);
+ return supports(Capability.QUERY_SET_ORDER_BY, modelID, metadata, capFinder);
}
public static boolean supportsCaseExpression(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.QUERY_CASE);
+ return supports(Capability.QUERY_CASE, modelID, metadata, capFinder);
}
public static boolean supportsSearchedCaseExpression(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.QUERY_SEARCHED_CASE);
+ return supports(Capability.QUERY_SEARCHED_CASE, modelID, metadata, capFinder);
}
public static int getMaxInCriteriaSize(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
@@ -421,31 +313,26 @@
return value;
}
-
- public static boolean supportsRowLimit(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
- throws QueryMetadataException, MetaMatrixComponentException {
-
+ public static SupportedJoinCriteria getSupportedJoinCriteria(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, MetaMatrixComponentException {
if (metadata.isVirtualModel(modelID)){
- return false;
+ return SupportedJoinCriteria.ANY;
}
-
- // Find capabilities
SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.ROW_LIMIT);
+ SupportedJoinCriteria crits = (SupportedJoinCriteria)caps.getSourceProperty(Capability.JOIN_CRITERIA_ALLOWED);
+ if (crits == null) {
+ return SupportedJoinCriteria.ANY;
+ }
+ return crits;
}
+
+ public static boolean supportsRowLimit(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
+ throws QueryMetadataException, MetaMatrixComponentException {
+ return supports(Capability.ROW_LIMIT, modelID, metadata, capFinder);
+ }
public static boolean supportsRowOffset(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.ROW_OFFSET);
+ return supports(Capability.ROW_OFFSET, modelID, metadata, capFinder);
}
public static boolean isSameConnector(Object modelID, Object modelID1, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
@@ -478,28 +365,39 @@
public static boolean requiresCriteria(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
- return false;
- }
-
- // Find capabilities
- SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
-
- return caps.supportsCapability(Capability.REQUIRES_CRITERIA);
+ return supports(Capability.REQUIRES_CRITERIA, modelID, metadata, capFinder);
}
public static boolean useAnsiJoin(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
throws QueryMetadataException, MetaMatrixComponentException {
-
- if (metadata.isVirtualModel(modelID)){
+ return supports(Capability.QUERY_FROM_ANSI_JOIN, modelID, metadata, capFinder);
+ }
+
+ public static boolean supports(Capability cap, Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
+ throws QueryMetadataException, MetaMatrixComponentException {
+ if (metadata.isVirtualModel(modelID)){
return false;
}
// Find capabilities
SourceCapabilities caps = getCapabilities(modelID, metadata, capFinder);
- return caps.supportsCapability(Capability.QUERY_FROM_ANSI_JOIN);
- }
+ return caps.supportsCapability(cap);
+ }
+ /**
+ * Validate that the elements are searchable and can be used in a criteria against this source.
+ * TODO: this check is too general and not type based
+ */
+ static boolean checkElementsAreSearchable(List<? extends LanguageObject> objs, QueryMetadataInterface metadata, int searchableType)
+ throws QueryMetadataException, MetaMatrixComponentException {
+ Collection<ElementSymbol> elements = new ArrayList<ElementSymbol>();
+ ElementCollectorVisitor.getElements(objs, elements);
+ for (ElementSymbol elementSymbol : elements) {
+ if (!metadata.elementSupports(elementSymbol.getMetadataID(), searchableType)) {
+ return false;
+ }
+ }
+ return true;
+ }
}
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -22,20 +22,27 @@
package com.metamatrix.query.optimizer.relational.rules;
+import java.util.Arrays;
import java.util.Collection;
-import java.util.Iterator;
import com.metamatrix.api.exception.MetaMatrixComponentException;
import com.metamatrix.api.exception.query.QueryMetadataException;
+import com.metamatrix.query.execution.QueryExecPlugin;
import com.metamatrix.query.function.metadata.FunctionMethod;
import com.metamatrix.query.metadata.QueryMetadataInterface;
import com.metamatrix.query.metadata.SupportConstants;
import com.metamatrix.query.optimizer.capabilities.CapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
+import com.metamatrix.query.processor.ProcessorPlan;
+import com.metamatrix.query.processor.relational.AccessNode;
+import com.metamatrix.query.processor.relational.RelationalNode;
+import com.metamatrix.query.processor.relational.RelationalPlan;
import com.metamatrix.query.sql.LanguageObject;
import com.metamatrix.query.sql.LanguageVisitor;
-import com.metamatrix.query.sql.lang.BetweenCriteria;
+import com.metamatrix.query.sql.lang.AbstractCompareCriteria;
+import com.metamatrix.query.sql.lang.AbstractSetCriteria;
+import com.metamatrix.query.sql.lang.Command;
import com.metamatrix.query.sql.lang.CompareCriteria;
import com.metamatrix.query.sql.lang.CompoundCriteria;
import com.metamatrix.query.sql.lang.DependentSetCriteria;
@@ -43,18 +50,21 @@
import com.metamatrix.query.sql.lang.IsNullCriteria;
import com.metamatrix.query.sql.lang.MatchCriteria;
import com.metamatrix.query.sql.lang.NotCriteria;
-import com.metamatrix.query.sql.lang.PredicateCriteria;
+import com.metamatrix.query.sql.lang.Query;
import com.metamatrix.query.sql.lang.SetCriteria;
import com.metamatrix.query.sql.lang.SubqueryCompareCriteria;
+import com.metamatrix.query.sql.lang.SubqueryContainer;
import com.metamatrix.query.sql.lang.SubquerySetCriteria;
import com.metamatrix.query.sql.navigator.PreOrderNavigator;
import com.metamatrix.query.sql.symbol.AggregateSymbol;
import com.metamatrix.query.sql.symbol.CaseExpression;
-import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Function;
+import com.metamatrix.query.sql.symbol.GroupSymbol;
+import com.metamatrix.query.sql.symbol.ScalarSubquery;
import com.metamatrix.query.sql.symbol.SearchedCaseExpression;
-import com.metamatrix.query.sql.visitor.ElementCollectorVisitor;
+import com.metamatrix.query.sql.util.SymbolMap;
import com.metamatrix.query.sql.visitor.EvaluatableVisitor;
+import com.metamatrix.query.sql.visitor.GroupCollectorVisitor;
/**
*/
@@ -74,36 +84,17 @@
/**
* @param iterator
+ * @throws MetaMatrixComponentException
+ * @throws QueryMetadataException
*/
- public CriteriaCapabilityValidatorVisitor(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) {
+ CriteriaCapabilityValidatorVisitor(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, SourceCapabilities caps) throws QueryMetadataException, MetaMatrixComponentException {
this.modelID = modelID;
this.metadata = metadata;
this.capFinder = capFinder;
- loadCapabilities();
+ this.caps = caps;
}
- /**
- * Load the capabilities and cache locally once they are loaded.
- */
- private void loadCapabilities() {
- if(capFinder != null) {
- try {
- String modelName = metadata.getFullName(modelID);
- caps = capFinder.findCapabilities(modelName);
-
- } catch(QueryMetadataException e) {
- handleException(new MetaMatrixComponentException(e));
- } catch(MetaMatrixComponentException e) {
- handleException(e);
- }
- }
- }
-
public void visit(AggregateSymbol obj) {
- if(this.caps == null) {
- return;
- }
-
try {
if(! CapabilitiesUtil.supportsAggregateFunction(modelID, obj, metadata, capFinder)) {
markInvalid();
@@ -115,83 +106,41 @@
}
}
- public void visit(BetweenCriteria obj) {
- if (this.caps == null) {
- return;
- }
-
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE)) {
- markInvalid();
- return;
- }
-
- // Check if compares are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_BETWEEN)) {
- markInvalid();
- return;
- }
-
- // Check capabilities of the elements
- try {
- checkElementsAreSearchable(obj, SupportConstants.Element.SEARCHABLE_COMPARE);
- } catch(QueryMetadataException e) {
- handleException(new MetaMatrixComponentException(e));
- } catch(MetaMatrixComponentException e) {
- handleException(e);
- }
- }
-
public void visit(CaseExpression obj) {
- if (this.caps == null) {
- return;
- }
-
if(! this.caps.supportsCapability(Capability.QUERY_CASE)) {
markInvalid();
}
}
public void visit(CompareCriteria obj) {
- if(this.caps != null) {
- // Check if criteria are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE)) {
- markInvalid();
- return;
- }
+ checkCompareCriteria(obj);
+ }
+
+ public void checkCompareCriteria(AbstractCompareCriteria obj) {
+ boolean negated = false;
+ // Check if operation is allowed
+ Capability operatorCap = null;
+ switch(obj.getOperator()) {
+ case CompareCriteria.NE:
+ negated = true;
+ case CompareCriteria.EQ:
+ operatorCap = Capability.CRITERIA_COMPARE_EQ;
+ break;
+ case CompareCriteria.LT:
+ case CompareCriteria.GT:
+ negated = true;
+ case CompareCriteria.LE:
+ case CompareCriteria.GE:
+ operatorCap = Capability.CRITERIA_COMPARE_ORDERED;
+ break;
+ }
- // Check if compares are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_COMPARE)) {
- markInvalid();
- return;
- }
-
- // Check if operation is allowed
- Capability operatorCap = null;
- switch(obj.getOperator()) {
- case CompareCriteria.EQ:
- operatorCap = Capability.QUERY_WHERE_COMPARE_EQ;
- break;
- case CompareCriteria.NE:
- operatorCap = Capability.QUERY_WHERE_COMPARE_NE;
- break;
- case CompareCriteria.LT:
- operatorCap = Capability.QUERY_WHERE_COMPARE_LT;
- break;
- case CompareCriteria.GT:
- operatorCap = Capability.QUERY_WHERE_COMPARE_GT;
- break;
- case CompareCriteria.LE:
- operatorCap = Capability.QUERY_WHERE_COMPARE_LE;
- break;
- case CompareCriteria.GE:
- operatorCap = Capability.QUERY_WHERE_COMPARE_GE;
- break;
- }
-
- // Check if compares are allowed
- if(! this.caps.supportsCapability(operatorCap)) {
- markInvalid();
- }
+ // Check if compares are allowed
+ if(! this.caps.supportsCapability(operatorCap)) {
+ markInvalid();
+ }
+ if (negated && !this.caps.supportsCapability(Capability.CRITERIA_NOT)) {
+ markInvalid();
}
// Check capabilities of the elements
@@ -208,21 +157,13 @@
int operator = crit.getOperator();
// Verify capabilities are supported
- if(this.caps != null) {
- if(operator == CompoundCriteria.AND) {
- // Check if AND is allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_AND)) {
- markInvalid();
- return;
- }
- } else {
- // Check if OR is allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_OR)) {
- markInvalid();
- return;
- }
- }
- }
+ if(operator == CompoundCriteria.OR) {
+ // Check if OR is allowed
+ if(! this.caps.supportsCapability(Capability.CRITERIA_OR)) {
+ markInvalid();
+ return;
+ }
+ }
}
public void visit(Function obj) {
@@ -242,79 +183,54 @@
}
public void visit(IsNullCriteria obj) {
- if(this.caps != null) {
- // Check if criteria are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE)) {
- markInvalid();
- return;
- }
-
- // Check if compares are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_ISNULL)) {
- markInvalid();
- return;
- }
-
- // Check capabilities of the elements
- try {
- checkElementsAreSearchable(obj, SupportConstants.Element.SEARCHABLE_COMPARE);
- } catch(QueryMetadataException e) {
- handleException(new MetaMatrixComponentException(e));
- } catch(MetaMatrixComponentException e) {
- handleException(e);
- }
+ // Check if compares are allowed
+ if(! this.caps.supportsCapability(Capability.CRITERIA_ISNULL)) {
+ markInvalid();
+ return;
}
+
+ if (obj.isNegated() && !this.caps.supportsCapability(Capability.CRITERIA_NOT)) {
+ markInvalid();
+ return;
+ }
}
public void visit(MatchCriteria obj) {
- if(this.caps != null) {
- // Check if criteria are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE)) {
+ // Check if compares are allowed
+ if(! this.caps.supportsCapability(Capability.CRITERIA_LIKE)) {
+ markInvalid();
+ return;
+ }
+
+ // Check ESCAPE char if necessary
+ if(obj.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR) {
+ if(! this.caps.supportsCapability(Capability.CRITERIA_LIKE_ESCAPE)) {
markInvalid();
return;
- }
+ }
+ }
+
+ //check NOT
+ if(obj.isNegated() && ! this.caps.supportsCapability(Capability.CRITERIA_NOT)) {
+ markInvalid();
+ return;
+ }
- // Check if compares are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_LIKE)) {
- markInvalid();
- return;
- }
-
- // Check ESCAPE char if necessary
- if(obj.getEscapeChar() != MatchCriteria.NULL_ESCAPE_CHAR) {
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_LIKE_ESCAPE)) {
- markInvalid();
- return;
- }
- }
-
- //check NOT
- if(obj.isNegated()) {
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_NOT)) {
- markInvalid();
- return;
- }
- }
-
- // Check capabilities of the elements
- try {
- checkElementsAreSearchable(obj, SupportConstants.Element.SEARCHABLE_LIKE);
- } catch(QueryMetadataException e) {
- handleException(new MetaMatrixComponentException(e));
- } catch(MetaMatrixComponentException e) {
- handleException(e);
- }
-
+ // Check capabilities of the elements
+ try {
+ checkElementsAreSearchable(obj, SupportConstants.Element.SEARCHABLE_LIKE);
+ } catch(QueryMetadataException e) {
+ handleException(new MetaMatrixComponentException(e));
+ } catch(MetaMatrixComponentException e) {
+ handleException(e);
}
}
public void visit(NotCriteria obj) {
- if(this.caps != null) {
- // Check if compares are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_NOT)) {
- markInvalid();
- return;
- }
+ // Check if compares are allowed
+ if(! this.caps.supportsCapability(Capability.CRITERIA_NOT)) {
+ markInvalid();
+ return;
}
}
@@ -329,31 +245,14 @@
}
public void visit(SetCriteria crit) {
+ checkAbstractSetCriteria(crit);
try {
- if(this.caps != null) {
- // Check if criteria are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE)) {
- markInvalid();
- return;
- }
-
- // Check if compares are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_IN)) {
- markInvalid();
- return;
- }
-
- int maxSize = CapabilitiesUtil.getMaxInCriteriaSize(modelID, metadata, capFinder);
-
- if (maxSize > 0 && crit.getValues().size() > maxSize) {
- markInvalid();
- return;
- }
+ int maxSize = CapabilitiesUtil.getMaxInCriteriaSize(modelID, metadata, capFinder);
+
+ if (maxSize > 0 && crit.getValues().size() > maxSize) {
+ markInvalid();
+ return;
}
-
- // Check capabilities of the elements
- checkElementsAreSearchable(crit, SupportConstants.Element.SEARCHABLE_COMPARE);
-
} catch(QueryMetadataException e) {
handleException(new MetaMatrixComponentException(e));
} catch(MetaMatrixComponentException e) {
@@ -365,94 +264,68 @@
* @see com.metamatrix.query.sql.LanguageVisitor#visit(com.metamatrix.query.sql.lang.ExistsCriteria)
*/
public void visit(ExistsCriteria crit) {
- if(this.caps != null) {
- // Check if criteria are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE)) {
- markInvalid();
- return;
- }
-
- // Check if exists criteria are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_EXISTS)) {
- markInvalid();
- return;
- }
- }
+ // Check if exists criteria are allowed
+ if(! this.caps.supportsCapability(Capability.CRITERIA_EXISTS)) {
+ markInvalid();
+ return;
+ }
+
+ try {
+ if (validateSubqueryPushdown(crit, modelID, metadata, capFinder) == null) {
+ markInvalid();
+ }
+ } catch (MetaMatrixComponentException e) {
+ handleException(e);
+ }
}
/**
* @see com.metamatrix.query.sql.LanguageVisitor#visit(com.metamatrix.query.sql.lang.SubqueryCompareCriteria)
*/
public void visit(SubqueryCompareCriteria crit) {
- if(this.caps != null) {
- // Check if criteria are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE)) {
- markInvalid();
- return;
+ // Check if quantification operator is allowed
+ Capability capability = null;
+ switch(crit.getPredicateQuantifier()) {
+ case SubqueryCompareCriteria.ALL:
+ capability = Capability.CRITERIA_QUANTIFIED_ALL;
+ break;
+ case SubqueryCompareCriteria.ANY:
+ capability = Capability.CRITERIA_QUANTIFIED_SOME;
+ break;
+ case SubqueryCompareCriteria.SOME:
+ capability = Capability.CRITERIA_QUANTIFIED_SOME;
+ break;
+ }
+ if(! this.caps.supportsCapability(capability)) {
+ markInvalid();
+ return;
+ }
+
+ checkCompareCriteria(crit);
+
+ // Check capabilities of the elements
+ try {
+ if (validateSubqueryPushdown(crit, modelID, metadata, capFinder) == null) {
+ markInvalid();
}
-
+ } catch(QueryMetadataException e) {
+ handleException(new MetaMatrixComponentException(e));
+ } catch(MetaMatrixComponentException e) {
+ handleException(e);
+ }
+ }
+
+ @Override
+ public void visit(ScalarSubquery obj) {
+ try {
// Check if compares are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_COMPARE)) {
+ if(! this.caps.supportsCapability(Capability.QUERY_SUBQUERIES_SCALAR)) {
markInvalid();
return;
}
-
- // Check if quantified compares are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON)) {
- markInvalid();
- return;
+ if (validateSubqueryPushdown(obj, modelID, metadata, capFinder) == null) {
+ markInvalid();
}
-
- // Check if quantification operator is allowed
- Capability capability = null;
- switch(crit.getPredicateQuantifier()) {
- case SubqueryCompareCriteria.ALL:
- capability = Capability.QUERY_WHERE_QUANTIFIED_ALL;
- break;
- case SubqueryCompareCriteria.ANY:
- capability = Capability.QUERY_WHERE_QUANTIFIED_SOME;
- break;
- case SubqueryCompareCriteria.SOME:
- capability = Capability.QUERY_WHERE_QUANTIFIED_SOME;
- break;
- }
- if(! this.caps.supportsCapability(capability)) {
- markInvalid();
- return;
- }
-
- // Check if operation is allowed
- Capability operatorCap = null;
- switch(crit.getOperator()) {
- case CompareCriteria.EQ:
- operatorCap = Capability.QUERY_WHERE_COMPARE_EQ;
- break;
- case CompareCriteria.NE:
- operatorCap = Capability.QUERY_WHERE_COMPARE_NE;
- break;
- case CompareCriteria.LT:
- operatorCap = Capability.QUERY_WHERE_COMPARE_LT;
- break;
- case CompareCriteria.GT:
- operatorCap = Capability.QUERY_WHERE_COMPARE_GT;
- break;
- case CompareCriteria.LE:
- operatorCap = Capability.QUERY_WHERE_COMPARE_LE;
- break;
- case CompareCriteria.GE:
- operatorCap = Capability.QUERY_WHERE_COMPARE_GE;
- break;
- }
-
- // Check if compares are allowed
- if(! this.caps.supportsCapability(operatorCap)) {
- markInvalid();
- }
- }
-
- // Check capabilities of the elements
- try {
- checkElementsAreSearchable(crit, SupportConstants.Element.SEARCHABLE_COMPARE);
} catch(QueryMetadataException e) {
handleException(new MetaMatrixComponentException(e));
} catch(MetaMatrixComponentException e) {
@@ -461,53 +334,36 @@
}
public void visit(SubquerySetCriteria crit) {
+ checkAbstractSetCriteria(crit);
try {
- if(this.caps != null) {
- // Check if criteria are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE)) {
- markInvalid();
- return;
- }
-
- // Check if compares are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_IN)) {
- markInvalid();
- return;
- }
-
- // Check if compares with subqueries are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_IN_SUBQUERY)) {
- markInvalid();
- return;
- }
+ // Check if compares with subqueries are allowed
+ if(! this.caps.supportsCapability(Capability.CRITERIA_IN_SUBQUERY)) {
+ markInvalid();
+ return;
}
- // Check capabilities of the elements
- checkElementsAreSearchable(crit, SupportConstants.Element.SEARCHABLE_COMPARE);
-
+ if (validateSubqueryPushdown(crit, modelID, metadata, capFinder) == null) {
+ markInvalid();
+ }
} catch(QueryMetadataException e) {
handleException(new MetaMatrixComponentException(e));
} catch(MetaMatrixComponentException e) {
handleException(e);
}
}
-
- public void visit(DependentSetCriteria crit) {
+
+ public void checkAbstractSetCriteria(AbstractSetCriteria crit) {
try {
- if(this.caps != null) {
- // Check if criteria are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE)) {
- markInvalid();
- return;
- }
-
- // Check if compares are allowed
- if(! this.caps.supportsCapability(Capability.QUERY_WHERE_IN)) {
- markInvalid();
- return;
- }
+ // Check if compares are allowed
+ if(! this.caps.supportsCapability(Capability.CRITERIA_IN)) {
+ markInvalid();
+ return;
}
-
+
+ if (crit.isNegated() && !this.caps.supportsCapability(Capability.CRITERIA_NOT)) {
+ markInvalid();
+ return;
+ }
// Check capabilities of the elements
checkElementsAreSearchable(crit, SupportConstants.Element.SEARCHABLE_COMPARE);
@@ -516,23 +372,92 @@
} catch(MetaMatrixComponentException e) {
handleException(e);
}
+
}
+ public void visit(DependentSetCriteria crit) {
+ checkAbstractSetCriteria(crit);
+ }
+
+ private void checkElementsAreSearchable(LanguageObject crit, int searchableType)
+ throws QueryMetadataException, MetaMatrixComponentException {
+ if (!CapabilitiesUtil.checkElementsAreSearchable(Arrays.asList(crit), metadata, searchableType)) {
+ markInvalid();
+ }
+ }
+
/**
- * Validate that the elements are searchable and can be used in a criteria against this source.
+ * Return null if the subquery cannot be pushed down, otherwise the model
+ * id of the pushdown target.
+ * @param subqueryContainer
+ * @param critNodeModelID
+ * @param metadata
+ * @param capFinder
+ * @return
+ * @throws MetaMatrixComponentException
*/
- private void checkElementsAreSearchable(PredicateCriteria crit, int searchableType)
- throws QueryMetadataException, MetaMatrixComponentException {
-
- Collection elements = ElementCollectorVisitor.getElements(crit, false);
- Iterator iter = elements.iterator();
- while(iter.hasNext()) {
- ElementSymbol element = (ElementSymbol) iter.next();
- if (!metadata.elementSupports(element.getMetadataID(), searchableType)) {
- markInvalid();
- return;
- }
+ static Object validateSubqueryPushdown(SubqueryContainer subqueryContainer, Object critNodeModelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws MetaMatrixComponentException {
+ ProcessorPlan plan = subqueryContainer.getCommand().getProcessorPlan();
+ if (plan != null) {
+ if(!(plan instanceof RelationalPlan)) {
+ return null;
+ }
+
+ RelationalPlan rplan = (RelationalPlan) plan;
+
+ // Check that the plan is just an access node
+ RelationalNode accessNode = rplan.getRootNode();
+ if(accessNode == null || ! (accessNode instanceof AccessNode) || accessNode.getChildren()[0] != null) {
+ return null;
+ }
+
+ // Check that command in access node is a query
+ Command command = ((AccessNode)accessNode).getCommand();
+ if(command == null || !(command instanceof Query) || ((Query)command).getIsXML()) {
+ return null;
+ }
+
+ // Check that query in access node is for the same model as current node
+ try {
+ Collection subQueryGroups = GroupCollectorVisitor.getGroupsIgnoreInlineViews(command, false);
+ if(subQueryGroups.size() == 0) {
+ // No FROM?
+ return null;
+ }
+ GroupSymbol subQueryGroup = (GroupSymbol)subQueryGroups.iterator().next();
+
+ Object modelID = metadata.getModelID(subQueryGroup.getMetadataID());
+ if (critNodeModelID == null) {
+ critNodeModelID = modelID;
+ } else if(!CapabilitiesUtil.isSameConnector(critNodeModelID, modelID, metadata, capFinder)) {
+ return null;
+ }
+ } catch(QueryMetadataException e) {
+ throw new MetaMatrixComponentException(e, QueryExecPlugin.Util.getString("RulePushSelectCriteria.Error_getting_modelID")); //$NON-NLS-1$
+ }
+ }
+ if (critNodeModelID == null) {
+ return null;
+ }
+ // Check whether source supports correlated subqueries and if not, whether criteria has them
+ SymbolMap refs = subqueryContainer.getCommand().getCorrelatedReferences();
+ try {
+ if(refs != null && !refs.asMap().isEmpty()) {
+ if(! CapabilitiesUtil.supports(Capability.QUERY_SUBQUERIES_CORRELATED, critNodeModelID, metadata, capFinder)) {
+ return null;
+ }
+ //TODO: this check sees as correlated references as coming from the containing scope
+ //but this is only an issue with deeply nested subqueries
+ if (!CriteriaCapabilityValidatorVisitor.canPushLanguageObject(subqueryContainer.getCommand(), critNodeModelID, metadata, capFinder)) {
+ return null;
+ }
+ }
+ } catch(QueryMetadataException e) {
+ throw new MetaMatrixComponentException(e);
}
+
+ // Found no reason why this node is not eligible
+ return critNodeModelID;
}
private void handleException(MetaMatrixComponentException e) {
@@ -563,8 +488,15 @@
// Couldn't determine model ID, so give up
return false;
}
+
+ String modelName = metadata.getFullName(modelID);
+ SourceCapabilities caps = capFinder.findCapabilities(modelName);
- CriteriaCapabilityValidatorVisitor visitor = new CriteriaCapabilityValidatorVisitor(modelID, metadata, capFinder);
+ if (caps == null) {
+ return true; //this doesn't seem right, but tests were expecting it...
+ }
+
+ CriteriaCapabilityValidatorVisitor visitor = new CriteriaCapabilityValidatorVisitor(modelID, metadata, capFinder, caps);
PreOrderNavigator.doVisit(obj, visitor);
if(visitor.getException() != null) {
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/JoinRegion.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/JoinRegion.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/JoinRegion.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -40,7 +40,6 @@
import com.metamatrix.query.optimizer.relational.GenerateCanonical;
import com.metamatrix.query.optimizer.relational.plantree.NodeConstants;
import com.metamatrix.query.optimizer.relational.plantree.PlanNode;
-import com.metamatrix.query.optimizer.relational.plantree.NodeConstants.Info;
import com.metamatrix.query.resolver.util.AccessPattern;
import com.metamatrix.query.sql.lang.CompareCriteria;
import com.metamatrix.query.sql.lang.Criteria;
@@ -50,6 +49,7 @@
import com.metamatrix.query.sql.symbol.GroupSymbol;
import com.metamatrix.query.sql.visitor.ElementCollectorVisitor;
import com.metamatrix.query.sql.visitor.FunctionCollectorVisitor;
+import com.metamatrix.query.sql.visitor.GroupsUsedByElementsVisitor;
/**
* A join region is a set of cross and inner joins whose ordering is completely interchangable.
@@ -81,11 +81,9 @@
private List unsatisfiedAccessPatterns = new LinkedList();
- private Map dependentCriteriaElements;
+ private Map<ElementSymbol, Set<Collection<GroupSymbol>>> dependentCriteriaElements;
private Map critieriaToSourceMap;
- private Set<GroupSymbol> removedJoinGroups;
-
public PlanNode getJoinRoot() {
return joinRoot;
}
@@ -102,7 +100,7 @@
return dependentJoinSourceNodes;
}
- public List getCriteriaNodes() {
+ public List<PlanNode> getCriteriaNodes() {
return criteriaNodes;
}
@@ -110,7 +108,7 @@
return dependentCritieraNodes;
}
- public Map getDependentCriteriaElements() {
+ public Map<ElementSymbol, Set<Collection<GroupSymbol>>> getDependentCriteriaElements() {
return this.dependentCriteriaElements;
}
@@ -158,17 +156,6 @@
}
}
- public void addRemovedJoinGroups(PlanNode joinNode) {
- Set<GroupSymbol> groups = (Set<GroupSymbol>) joinNode.getProperty(Info.REMOVED_JOIN_GROUPS);
- if (groups == null) {
- return;
- }
- if (this.removedJoinGroups == null) {
- this.removedJoinGroups = new HashSet<GroupSymbol>();
- }
- this.removedJoinGroups.addAll(groups);
- }
-
/**
* This will rebuild the join tree starting at the join root.
*
@@ -428,39 +415,49 @@
}
}
- dependentCriteriaElements = new HashMap();
+ dependentCriteriaElements = new HashMap<ElementSymbol, Set<Collection<GroupSymbol>>>();
for (Iterator i = dependentCritieraNodes.iterator(); i.hasNext();) {
PlanNode critNode = (PlanNode)i.next();
Criteria crit = (Criteria)critNode.getProperty(NodeConstants.Info.SELECT_CRITERIA);
- Collection[] groups = RuleChooseDependent.isEqualityCriteria(crit);
- if (groups != null) {
- CompareCriteria compareCriteria = (CompareCriteria)crit;
- //this may be a proper dependent join criteria
- Collection[] critElements = new Collection[2];
- critElements[0] = ElementCollectorVisitor.getElements(compareCriteria.getLeftExpression(), true);
- critElements[1] = ElementCollectorVisitor.getElements(compareCriteria.getRightExpression(), true);
- for (int expr = 0; expr < critElements.length; expr++) {
- //simplifying assumption that there will be a single element on the dependent side
- if (critElements[expr].size() != 1) {
- continue;
- }
- ElementSymbol elem = (ElementSymbol)critElements[expr].iterator().next();
- if (!dependentGroupToSourceMap.containsKey(elem.getGroupSymbol())) {
- continue;
- }
- //this is also a simplifying assumption. don't consider criteria that can't be pushed
- if (containsFunctionsThatCannotBePushed(expr==0?compareCriteria.getRightExpression():compareCriteria.getLeftExpression())) {
- continue;
- }
- Set independentGroups = (HashSet)dependentCriteriaElements.get(elem);
- if (independentGroups == null) {
- independentGroups = new HashSet();
- dependentCriteriaElements.put(elem, independentGroups);
- }
- //set the other side as independent elements
- independentGroups.add(groups[(expr+1)%2]);
+ if(!(crit instanceof CompareCriteria)) {
+ continue;
+ }
+ CompareCriteria compCrit = (CompareCriteria) crit;
+ if(compCrit.getOperator() != CompareCriteria.EQ) {
+ continue;
+ }
+ CompareCriteria compareCriteria = (CompareCriteria)crit;
+ //this may be a proper dependent join criteria
+ Collection<ElementSymbol>[] critElements = new Collection[2];
+ critElements[0] = ElementCollectorVisitor.getElements(compareCriteria.getLeftExpression(), true);
+ if (critElements[0].isEmpty()) {
+ continue;
+ }
+ critElements[1] = ElementCollectorVisitor.getElements(compareCriteria.getRightExpression(), true);
+ if (critElements[1].isEmpty()) {
+ continue;
+ }
+ for (int expr = 0; expr < critElements.length; expr++) {
+ //simplifying assumption that there will be a single element on the dependent side
+ if (critElements[expr].size() != 1) {
+ continue;
}
+ ElementSymbol elem = critElements[expr].iterator().next();
+ if (!dependentGroupToSourceMap.containsKey(elem.getGroupSymbol())) {
+ continue;
+ }
+ //this is also a simplifying assumption. don't consider criteria that can't be pushed
+ if (containsFunctionsThatCannotBePushed(expr==0?compareCriteria.getRightExpression():compareCriteria.getLeftExpression())) {
+ continue;
+ }
+ Set<Collection<GroupSymbol>> independentGroups = dependentCriteriaElements.get(elem);
+ if (independentGroups == null) {
+ independentGroups = new HashSet<Collection<GroupSymbol>>();
+ dependentCriteriaElements.put(elem, independentGroups);
+ }
+ //set the other side as independent elements
+ independentGroups.add(GroupsUsedByElementsVisitor.getGroups(critElements[(expr+1)%2]));
}
}
}
@@ -515,8 +512,4 @@
}
}
- public Set<GroupSymbol> getRemovedJoinGroups() {
- return removedJoinGroups;
- }
-
}
\ No newline at end of file
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleChooseDependent.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleChooseDependent.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleChooseDependent.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -23,7 +23,6 @@
package com.metamatrix.query.optimizer.relational.rules;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -43,13 +42,10 @@
import com.metamatrix.query.optimizer.relational.plantree.NodeEditor;
import com.metamatrix.query.optimizer.relational.plantree.PlanNode;
import com.metamatrix.query.processor.relational.JoinNode.JoinStrategyType;
-import com.metamatrix.query.sql.lang.CompareCriteria;
-import com.metamatrix.query.sql.lang.Criteria;
import com.metamatrix.query.sql.lang.DependentSetCriteria;
import com.metamatrix.query.sql.lang.JoinType;
import com.metamatrix.query.sql.symbol.Expression;
import com.metamatrix.query.sql.util.SymbolMap;
-import com.metamatrix.query.sql.visitor.GroupsUsedByElementsVisitor;
import com.metamatrix.query.util.CommandContext;
import com.metamatrix.query.util.LogConstants;
@@ -229,32 +225,6 @@
return true;
}
-
- /**
- * @param foundEquality
- * @param theCrit
- * @return
- */
- static Collection[] isEqualityCriteria(Criteria theCrit) {
- if(!(theCrit instanceof CompareCriteria)) {
- return null;
- }
- CompareCriteria compCrit = (CompareCriteria) theCrit;
- if(compCrit.getOperator() != CompareCriteria.EQ) {
- return null;
- }
- Collection groups[] = new Collection[2];
- groups[0] = GroupsUsedByElementsVisitor.getGroups(compCrit.getLeftExpression());
- groups[1] = GroupsUsedByElementsVisitor.getGroups(compCrit.getRightExpression());
-
- Collection allGroups = GroupsUsedByElementsVisitor.getGroups(compCrit);
-
- if(groups[0].size() > 0 && groups[0].size() + groups[1].size() == allGroups.size()) {
- return groups;
- }
-
- return null;
- }
PlanNode chooseDepWithoutCosting(PlanNode rootNode1, PlanNode rootNode2) {
PlanNode sourceNode1 = FrameUtil.findJoinSourceNode(rootNode1);
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleChooseJoinStrategy.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleChooseJoinStrategy.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleChooseJoinStrategy.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -120,6 +120,10 @@
continue;
}
+ if (crit.isOptional()) {
+ continue;
+ }
+
Expression leftExpr = crit.getLeftExpression();
Expression rightExpr = crit.getRightExpression();
@@ -145,7 +149,12 @@
//make use of the one side criteria
joinNode.setProperty(NodeConstants.Info.JOIN_STRATEGY, JoinStrategyType.MERGE);
joinNode.setProperty(NodeConstants.Info.NON_EQUI_JOIN_CRITERIA, nonEquiJoinCriteria);
- }
+ } else if (nonEquiJoinCriteria.isEmpty()) {
+ joinNode.setProperty(NodeConstants.Info.JOIN_CRITERIA, nonEquiJoinCriteria);
+ if (joinNode.getProperty(NodeConstants.Info.JOIN_TYPE) == JoinType.JOIN_INNER) {
+ joinNode.setProperty(NodeConstants.Info.JOIN_TYPE, JoinType.JOIN_CROSS);
+ }
+ }
}
private static AtomicInteger EXPRESSION_INDEX = new AtomicInteger(0);
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCollapseSource.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCollapseSource.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCollapseSource.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -23,7 +23,6 @@
package com.metamatrix.query.optimizer.relational.rules;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
@@ -172,10 +171,10 @@
{
replaceCorrelatedReferences(node.getSubqueryContainers());
JoinType joinType = (JoinType) node.getProperty(NodeConstants.Info.JOIN_TYPE);
- List crits = (List) node.getProperty(NodeConstants.Info.JOIN_CRITERIA);
+ List<Criteria> crits = (List<Criteria>) node.getProperty(NodeConstants.Info.JOIN_CRITERIA);
if (crits == null || crits.isEmpty()) {
- crits = new ArrayList();
+ crits = new ArrayList<Criteria>();
}
PlanNode left = node.getFirstChild();
@@ -184,23 +183,18 @@
/* special handling is needed to determine criteria placement.
*
* if the join is a left outer join, criteria from the right side will be added to the on clause
- * if the join is a right outer join, criteria from the left side will be added to the on clause
*/
Criteria savedCriteria = null;
buildQuery(accessRoot, left, query, metadata, capFinder);
if (joinType == JoinType.JOIN_LEFT_OUTER) {
savedCriteria = query.getCriteria();
query.setCriteria(null);
- } else if (joinType == JoinType.JOIN_RIGHT_OUTER || joinType == JoinType.JOIN_CROSS || joinType == JoinType.JOIN_INNER) {
- moveWhereClauseIntoOnClause(query, crits);
- }
+ }
buildQuery(accessRoot, right, query, metadata, capFinder);
if (joinType == JoinType.JOIN_LEFT_OUTER) {
moveWhereClauseIntoOnClause(query, crits);
query.setCriteria(savedCriteria);
- } else if (joinType == JoinType.JOIN_CROSS || joinType == JoinType.JOIN_INNER) {
- moveWhereClauseIntoOnClause(query, crits);
- }
+ }
// Get last two clauses added to the FROM and combine them into a JoinPredicate
From from = query.getFrom();
@@ -397,15 +391,15 @@
} else {
JoinPredicate jp = (JoinPredicate) clause;
- // Add criteria to query
- Criteria crit = query.getCriteria();
- List crits = jp.getJoinCriteria();
- if(crits != null && crits.size() > 0) {
- Iterator critIter = crits.iterator();
- while(critIter.hasNext()) {
- crit = CompoundCriteria.combineCriteria(crit, (Criteria) critIter.next());
- }
- query.setCriteria(crit);
+ List<Criteria> crits = jp.getJoinCriteria();
+ if(crits != null && crits.size() > 0) {
+ Criteria joinCrit = null;
+ if (crits.size() > 1) {
+ joinCrit = new CompoundCriteria(crits);
+ } else {
+ joinCrit = crits.get(0);
+ }
+ query.setCriteria(CompoundCriteria.combineCriteria(joinCrit, query.getCriteria()));
}
// Recurse through tree
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCopyCriteria.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCopyCriteria.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCopyCriteria.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -43,14 +43,12 @@
import com.metamatrix.query.optimizer.relational.plantree.NodeConstants;
import com.metamatrix.query.optimizer.relational.plantree.NodeEditor;
import com.metamatrix.query.optimizer.relational.plantree.PlanNode;
-import com.metamatrix.query.optimizer.relational.plantree.NodeConstants.Info;
import com.metamatrix.query.sql.lang.CompareCriteria;
import com.metamatrix.query.sql.lang.Criteria;
import com.metamatrix.query.sql.lang.IsNullCriteria;
import com.metamatrix.query.sql.lang.JoinType;
import com.metamatrix.query.sql.symbol.Constant;
import com.metamatrix.query.sql.symbol.ElementSymbol;
-import com.metamatrix.query.sql.symbol.GroupSymbol;
import com.metamatrix.query.sql.visitor.GroupsUsedByElementsVisitor;
import com.metamatrix.query.util.CommandContext;
import com.metamatrix.query.util.LogConstants;
@@ -82,11 +80,9 @@
throws QueryPlannerException, MetaMatrixComponentException {
//do an initial check to see if an execution will be necessary
- List critNodes = NodeEditor.findAllNodes(plan, NodeConstants.Types.SELECT);
- Iterator i = critNodes.iterator();
+ List<PlanNode> critNodes = NodeEditor.findAllNodes(plan, NodeConstants.Types.SELECT);
boolean shouldRun = false;
- while (i.hasNext()) {
- PlanNode critNode = (PlanNode)i.next();
+ for (PlanNode critNode : critNodes) {
if (!critNode.hasBooleanProperty(NodeConstants.Info.IS_COPIED)) {
shouldRun = true;
break;
@@ -104,10 +100,8 @@
}
//mark the old criteria nodes as copied. this will prevent RulePushSelectCriteria from considering them again
- i = critNodes.iterator();
- while (i.hasNext()) {
- PlanNode critNode = (PlanNode)i.next();
- critNode.setProperty(NodeConstants.Info.IS_COPIED, Boolean.TRUE);
+ for (PlanNode critNode : critNodes) {
+ critNode.setProperty(NodeConstants.Info.IS_COPIED, Boolean.TRUE);
}
return plan;
@@ -224,12 +218,7 @@
srcToTgt = buildElementMap(allCriteria);
- Set<GroupSymbol> joinGroups = (Set<GroupSymbol>) node.getProperty(Info.REMOVED_JOIN_GROUPS);
- if (joinGroups == null) {
- joinGroups = new HashSet<GroupSymbol>();
- node.setProperty(Info.REMOVED_JOIN_GROUPS, joinGroups);
- }
- changedTree = createCriteriaFromJoinCriteria(changedTree, joinCrits, combinedCriteria, srcToTgt, newJoinCrits, joinGroups);
+ changedTree = createCriteriaFromJoinCriteria(changedTree, joinCrits, combinedCriteria, srcToTgt, newJoinCrits);
joinCrits.addAll(newJoinCrits);
}
@@ -292,8 +281,7 @@
List joinCrits,
Set combinedCriteria,
Map srcToTgt,
- List newJoinCrits,
- Set<GroupSymbol> joinGroups) {
+ List newJoinCrits) {
if (srcToTgt.size() == 0) {
return changedTree;
}
@@ -302,9 +290,16 @@
Criteria crit = (Criteria)i.next();
if (copyCriteria(crit, srcToTgt, newJoinCrits, combinedCriteria, true)) {
+ changedTree = true;
+ if (crit instanceof CompareCriteria) {
+ CompareCriteria cc = (CompareCriteria)crit;
+ if (cc.getLeftExpression() instanceof ElementSymbol && cc.getRightExpression() instanceof ElementSymbol) {
+ //don't remove theta criteria, just mark it as optional
+ cc.setOptional(true);
+ continue;
+ }
+ }
i.remove();
- joinGroups.addAll(GroupsUsedByElementsVisitor.getGroups(crit));
- changedTree = true;
}
}
return changedTree;
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePlanJoins.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePlanJoins.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePlanJoins.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -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.Iterator;
@@ -34,6 +33,8 @@
import java.util.Map;
import java.util.Set;
+import org.teiid.connector.api.ConnectorCapabilities.SupportedJoinCriteria;
+
import com.metamatrix.api.exception.MetaMatrixComponentException;
import com.metamatrix.api.exception.query.QueryMetadataException;
import com.metamatrix.api.exception.query.QueryPlannerException;
@@ -49,9 +50,9 @@
import com.metamatrix.query.optimizer.relational.plantree.PlanNode;
import com.metamatrix.query.processor.relational.JoinNode.JoinStrategyType;
import com.metamatrix.query.resolver.util.AccessPattern;
+import com.metamatrix.query.sql.lang.Criteria;
import com.metamatrix.query.sql.lang.JoinType;
import com.metamatrix.query.sql.symbol.ElementSymbol;
-import com.metamatrix.query.sql.symbol.GroupSymbol;
import com.metamatrix.query.util.CommandContext;
/**
@@ -104,14 +105,14 @@
- List joinRegions = new ArrayList();
+ List<JoinRegion> joinRegions = new LinkedList<JoinRegion>();
findJoinRegions(plan, null, joinRegions);
//dependency phase
- for (Iterator joinRegionIter = joinRegions.iterator(); joinRegionIter.hasNext();) {
- JoinRegion joinRegion = (JoinRegion)joinRegionIter.next();
+ for (Iterator<JoinRegion> joinRegionIter = joinRegions.iterator(); joinRegionIter.hasNext();) {
+ JoinRegion joinRegion = joinRegionIter.next();
//skip regions that have nothing to plan
if (joinRegion.getJoinSourceNodes().size() + joinRegion.getDependentJoinSourceNodes().size() < 2) {
@@ -135,15 +136,12 @@
}
//optimization phase
-
- for (Iterator joinRegionIter = joinRegions.iterator(); joinRegionIter.hasNext();) {
- JoinRegion joinRegion = (JoinRegion)joinRegionIter.next();
-
+ for (JoinRegion joinRegion : joinRegions) {
groupJoinsForPushing(metadata, capabilitiesFinder, joinRegion, context);
}
- for (Iterator joinRegionIter = joinRegions.iterator(); joinRegionIter.hasNext();) {
- JoinRegion joinRegion = (JoinRegion)joinRegionIter.next();
+ for (Iterator<JoinRegion> joinRegionIter = joinRegions.iterator(); joinRegionIter.hasNext();) {
+ JoinRegion joinRegion = joinRegionIter.next();
//move the dependent nodes back into all joinSources
joinRegion.getJoinSourceNodes().putAll(joinRegion.getDependentJoinSourceNodes());
@@ -216,24 +214,24 @@
PlanNode accessNode2 = (PlanNode)accessNodes.get(k);
- List criteriaNodes = joinRegion.getCriteriaNodes();
+ List<PlanNode> criteriaNodes = joinRegion.getCriteriaNodes();
- List joinCriteriaNodes = new LinkedList();
+ List<PlanNode> joinCriteriaNodes = new LinkedList<PlanNode>();
/* hasJoinCriteria will be true if
* 1. there is criteria between accessNode1 and accessNode2 exclusively
* 2. there is criteria between some other source (not the same logical connector) and accessNode1 or accessNode2
*
* Ideally we should be a little smarter in case 2
- * - pushing down a same source cross join can be done if we known that a dependent join will be performed
+ * - pushing down a same source cross join can be done if we know that a dependent join will be performed
*/
boolean hasJoinCriteria = false;
-
- for (Iterator critIter = criteriaNodes.iterator(); critIter.hasNext();) {
- PlanNode critNode = (PlanNode)critIter.next();
-
+ LinkedList<Criteria> joinCriteria = new LinkedList<Criteria>();
+ Object modelId = RuleRaiseAccess.getModelIDFromAccess(accessNode1, metadata);
+ SupportedJoinCriteria sjc = CapabilitiesUtil.getSupportedJoinCriteria(modelId, metadata, capFinder);
+ for (PlanNode critNode : criteriaNodes) {
Set sources = (Set)joinRegion.getCritieriaToSourceMap().get(critNode);
-
+
if (sources == null) {
continue;
}
@@ -241,13 +239,13 @@
if (sources.contains(accessNode1)) {
if (sources.contains(accessNode2) && sources.size() == 2) {
hasJoinCriteria = true;
- if (RuleRaiseAccess.canRaiseOverSelect(accessNode2, metadata, capFinder, critNode)) {
- joinCriteriaNodes.add(critNode);
- }
- } else {
- if (!accessNodes.containsAll(sources)) {
- hasJoinCriteria = true;
+ Criteria crit = (Criteria)critNode.getProperty(NodeConstants.Info.SELECT_CRITERIA);
+ if (RuleRaiseAccess.isSupportedJoinCriteria(sjc, crit, modelId, metadata, capFinder)) {
+ joinCriteriaNodes.add(critNode);
+ joinCriteria.add(crit);
}
+ } else if (!accessNodes.containsAll(sources)) {
+ hasJoinCriteria = true;
}
} else if (sources.contains(accessNode2) && !accessNodes.containsAll(sources)) {
hasJoinCriteria = true;
@@ -258,16 +256,18 @@
* If we failed to find direct criteria, but still have non-pushable or criteria to
* other groups we'll use additional checks
*/
- if (hasJoinCriteria && joinCriteriaNodes.isEmpty() && !canPushCrossJoin(joinRegion, metadata, context, accessNode1, accessNode2)) {
+ if ((!hasJoinCriteria || (hasJoinCriteria && joinCriteriaNodes.isEmpty())) && !canPushCrossJoin(metadata, context, accessNode1, accessNode2)) {
continue;
- }
+ }
List toTest = new ArrayList(2);
toTest.add(accessNode1);
toTest.add(accessNode2);
+ JoinType joinType = joinCriteria.isEmpty()?JoinType.JOIN_CROSS:JoinType.JOIN_INNER;
+
//try to push to the source
- if (RuleRaiseAccess.canRaiseOverJoin(toTest, metadata, capFinder, Collections.EMPTY_LIST, JoinType.JOIN_CROSS) == null) {
+ if (RuleRaiseAccess.canRaiseOverJoin(toTest, metadata, capFinder, joinCriteria, joinType) == null) {
continue;
}
@@ -287,16 +287,14 @@
joinNode.getGroups().addAll(accessNode2.getGroups());
joinNode.addFirstChild(accessNode2);
joinNode.addLastChild(accessNode1);
+ joinNode.setProperty(NodeConstants.Info.JOIN_TYPE, joinType);
+ joinNode.setProperty(NodeConstants.Info.JOIN_CRITERIA, joinCriteria);
- //raise access and place criteria
PlanNode newAccess = RuleRaiseAccess.raiseAccessOverJoin(joinNode, entry.getKey(), false);
for (Iterator joinCriteriaIter = joinCriteriaNodes.iterator(); joinCriteriaIter.hasNext();) {
PlanNode critNode = (PlanNode)joinCriteriaIter.next();
critNode.removeFromParent();
critNode.removeAllChildren();
- critNode.setProperty(NodeConstants.Info.IS_COPIED, Boolean.FALSE);
- critNode.setProperty(NodeConstants.Info.IS_PUSHED, Boolean.FALSE);
- newAccess.getFirstChild().addAsParent(critNode);
}
//update with the new source
@@ -323,17 +321,9 @@
}
}
- private boolean canPushCrossJoin(JoinRegion joinRegion, QueryMetadataInterface metadata,
- CommandContext context, PlanNode accessNode1, PlanNode accessNode2)
+ private boolean canPushCrossJoin(QueryMetadataInterface metadata, CommandContext context,
+ PlanNode accessNode1, PlanNode accessNode2)
throws QueryMetadataException, MetaMatrixComponentException {
- /*
- * Check for the possibility that the join criteria was removed by rule copy criteria
- */
- Set<GroupSymbol> removedGroups = joinRegion.getRemovedJoinGroups();
- if (removedGroups != null && !Collections.disjoint(removedGroups, accessNode1.getGroups()) && !Collections.disjoint(removedGroups, accessNode2.getGroups())) {
- return true;
- }
-
float cost1 = NewCalculateCostUtil.computeCostForTree(accessNode1, metadata);
float cost2 = NewCalculateCostUtil.computeCostForTree(accessNode2, metadata);
float acceptableCost = context == null? 45.0f : (float)Math.sqrt(context.getProcessorBatchSize());
@@ -361,7 +351,7 @@
}
Object accessModelID = RuleRaiseAccess.getModelIDFromAccess(node, metadata);
- if (accessModelID == null || !CapabilitiesUtil.supportsJoins(accessModelID, metadata, capFinder)) {
+ if (accessModelID == null || !CapabilitiesUtil.supportsJoin(accessModelID, JoinType.JOIN_INNER, metadata, capFinder)) {
continue;
}
@@ -461,13 +451,13 @@
/**
* Finds all regions of inner and cross joins
*
- * Join regions have boundries at source nodes, outer joins, and unsatisfied dependencies
+ * Join regions have boundaries at source nodes, outer joins, and unsatisfied dependencies
*
* @param root
* @param currentRegion
* @param joinRegions
*/
- static void findJoinRegions(PlanNode root, JoinRegion currentRegion, List joinRegions) {
+ static void findJoinRegions(PlanNode root, JoinRegion currentRegion, List<JoinRegion> joinRegions) {
switch (root.getType()) {
case NodeConstants.Types.JOIN:
{
@@ -485,10 +475,8 @@
currentRegion.addParentCriteria(root);
currentRegion.addJoinCriteriaList((List)root.getProperty(NodeConstants.Info.JOIN_CRITERIA));
}
- currentRegion.addRemovedJoinGroups(root);
- for (Iterator i = root.getChildren().iterator(); i.hasNext();) {
- PlanNode child = (PlanNode)i.next();
+ for (PlanNode child : root.getChildren()) {
findJoinRegions(child, treatJoinAsSource?null:currentRegion, joinRegions);
}
@@ -514,8 +502,7 @@
if (root.getChildCount() == 0) {
return;
}
- for (Iterator i = root.getChildren().iterator(); i.hasNext();) {
- PlanNode child = (PlanNode)i.next();
+ for (PlanNode child : root.getChildren()) {
findJoinRegions(child, root.getChildCount()==1?currentRegion:null, joinRegions);
}
}
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushSelectCriteria.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushSelectCriteria.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePushSelectCriteria.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -49,6 +49,7 @@
import com.metamatrix.query.sql.lang.CompoundCriteria;
import com.metamatrix.query.sql.lang.Criteria;
import com.metamatrix.query.sql.lang.JoinType;
+import com.metamatrix.query.sql.lang.SubqueryContainer;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
import com.metamatrix.query.sql.symbol.GroupSymbol;
@@ -117,8 +118,11 @@
}
case NodeConstants.Types.JOIN:
{
- moved = handleJoinCriteria(sourceNode, critNode, metadata);
- break;
+ //pushing below a join is not necessary under an access node
+ if (NodeEditor.findParent(critNode, NodeConstants.Types.ACCESS) == null) {
+ moved = handleJoinCriteria(sourceNode, critNode, metadata);
+ break;
+ }
}
}
@@ -137,7 +141,7 @@
CapabilitiesFinder capFinder, PlanNode critNode)
throws MetaMatrixComponentException, QueryMetadataException {
if (critNode.getGroups().isEmpty()) {
- Object modelId = RuleRaiseAccess.isEligibleSubquery(critNode, null, metadata, capFinder);
+ Object modelId = getSubqueryModelId(metadata, capFinder, critNode);
if (modelId != null) {
for (PlanNode node : NodeEditor.findAllNodes(critNode, NodeConstants.Types.SOURCE)) {
GroupSymbol group = node.getGroups().iterator().next();
@@ -150,6 +154,24 @@
}
return FrameUtil.findOriginatingNode(critNode, critNode.getGroups());
}
+
+ private Object getSubqueryModelId(QueryMetadataInterface metadata,
+ CapabilitiesFinder capFinder, PlanNode critNode)
+ throws MetaMatrixComponentException, QueryMetadataException {
+ Object modelId = null;
+ for (SubqueryContainer subqueryContainer : critNode.getSubqueryContainers()) {
+ Object validId = CriteriaCapabilityValidatorVisitor.validateSubqueryPushdown(subqueryContainer, null, metadata, capFinder);
+ if (validId == null) {
+ return null;
+ }
+ if (modelId == null) {
+ modelId = validId;
+ } else if (!CapabilitiesUtil.isSameConnector(modelId, validId, metadata, capFinder)) {
+ return null;
+ }
+ }
+ return modelId;
+ }
/**
* Handles multi-group criteria originating at the given joinNode
@@ -267,6 +289,11 @@
throw new QueryPlannerException(e, QueryExecPlugin.Util.getString(ErrorMessageKeys.OPTIMIZER_0020, currentNode.getGroups()));
}
} else if(currentNode.getType() == NodeConstants.Types.JOIN) {
+ //pushing below a join is not necessary under an access node
+ if (NodeEditor.findParent(currentNode, NodeConstants.Types.ACCESS) != null) {
+ return currentNode;
+ }
+
// Check whether this criteria is on the inner side of an outer join.
// If so, can't push past the join
JoinType jt = JoinUtil.getJoinTypePreventingCriteriaOptimization(currentNode, critNode);
Modified: trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRaiseAccess.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRaiseAccess.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleRaiseAccess.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -25,32 +25,28 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Set;
+import org.teiid.connector.api.ConnectorCapabilities.SupportedJoinCriteria;
+
import com.metamatrix.api.exception.MetaMatrixComponentException;
import com.metamatrix.api.exception.query.QueryMetadataException;
import com.metamatrix.api.exception.query.QueryPlannerException;
import com.metamatrix.query.analysis.AnalysisRecord;
-import com.metamatrix.query.execution.QueryExecPlugin;
import com.metamatrix.query.metadata.QueryMetadataInterface;
+import com.metamatrix.query.metadata.SupportConstants;
import com.metamatrix.query.optimizer.capabilities.CapabilitiesFinder;
+import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
import com.metamatrix.query.optimizer.relational.OptimizerRule;
import com.metamatrix.query.optimizer.relational.RuleStack;
import com.metamatrix.query.optimizer.relational.plantree.NodeConstants;
import com.metamatrix.query.optimizer.relational.plantree.NodeEditor;
import com.metamatrix.query.optimizer.relational.plantree.NodeFactory;
import com.metamatrix.query.optimizer.relational.plantree.PlanNode;
-import com.metamatrix.query.processor.ProcessorPlan;
-import com.metamatrix.query.processor.relational.AccessNode;
-import com.metamatrix.query.processor.relational.RelationalNode;
-import com.metamatrix.query.processor.relational.RelationalPlan;
-import com.metamatrix.query.sql.lang.Command;
+import com.metamatrix.query.sql.lang.CompareCriteria;
import com.metamatrix.query.sql.lang.Criteria;
import com.metamatrix.query.sql.lang.JoinType;
-import com.metamatrix.query.sql.lang.Query;
-import com.metamatrix.query.sql.lang.SubqueryContainer;
import com.metamatrix.query.sql.lang.SetQuery.Operation;
import com.metamatrix.query.sql.symbol.AggregateSymbol;
import com.metamatrix.query.sql.symbol.Constant;
@@ -60,8 +56,6 @@
import com.metamatrix.query.sql.symbol.SingleElementSymbol;
import com.metamatrix.query.sql.util.SymbolMap;
import com.metamatrix.query.sql.visitor.EvaluateExpressionVisitor;
-import com.metamatrix.query.sql.visitor.GroupCollectorVisitor;
-import com.metamatrix.query.sql.visitor.ValueIteratorProviderCollectorVisitor;
import com.metamatrix.query.util.CommandContext;
public final class RuleRaiseAccess implements OptimizerRule {
@@ -107,7 +101,7 @@
switch(parentNode.getType()) {
case NodeConstants.Types.JOIN:
{
- modelID = canRaiseOverJoin(parentNode, metadata, capFinder, afterJoinPlanning);
+ modelID = canRaiseOverJoin(modelID, parentNode, metadata, capFinder, afterJoinPlanning);
if(modelID != null) {
raiseAccessOverJoin(parentNode, modelID, true);
return rootNode;
@@ -119,10 +113,6 @@
// Check that the PROJECT contains only functions that can be pushed
List projectCols = (List) parentNode.getProperty(NodeConstants.Info.PROJECT_COLS);
- if(isEligibleSubquery(parentNode, modelID, metadata, capFinder) == null){
- return null;
- }
-
for (int i = 0; i < projectCols.size(); i++) {
SingleElementSymbol symbol = (SingleElementSymbol)projectCols.get(i);
if(! canPushSymbol(symbol, true, modelID, metadata, capFinder)) {
@@ -135,10 +125,15 @@
case NodeConstants.Types.DUP_REMOVE:
{
// If model supports the support constant parameter, then move access node
- if(CapabilitiesUtil.supportsSelectDistinct(modelID, metadata, capFinder)) {
- return performRaise(rootNode, accessNode, parentNode);
+ if(!CapabilitiesUtil.supportsSelectDistinct(modelID, metadata, capFinder)) {
+ return null;
}
- return null;
+
+ if (!CapabilitiesUtil.checkElementsAreSearchable((List)NodeEditor.findNodePreOrder(parentNode, NodeConstants.Types.PROJECT).getProperty(NodeConstants.Info.PROJECT_COLS), metadata, SupportConstants.Element.SEARCHABLE_COMPARE)) {
+ return null;
+ }
+
+ return performRaise(rootNode, accessNode, parentNode);
}
case NodeConstants.Types.SORT:
{
@@ -245,7 +240,7 @@
}
}
}
- return true;
+ return CapabilitiesUtil.checkElementsAreSearchable(groupCols, metadata, SupportConstants.Element.SEARCHABLE_COMPARE);
}
static boolean canRaiseOverSort(PlanNode accessNode,
@@ -279,11 +274,12 @@
}
}
+ if (!CapabilitiesUtil.checkElementsAreSearchable(sortCols, metadata, SupportConstants.Element.SEARCHABLE_COMPARE)) {
+ return false;
+ }
+
// If model supports the support constant parameter, then move access node
- if(CapabilitiesUtil.supportsOrderBy(modelID, metadata, capFinder)) {
- return true;
- }
- return false;
+ return CapabilitiesUtil.supportsOrderBy(modelID, metadata, capFinder);
}
/**
@@ -313,6 +309,10 @@
return false;
}
+ if (parentNode.hasBooleanProperty(NodeConstants.Info.IS_HAVING) && !CapabilitiesUtil.supports(Capability.QUERY_HAVING, modelID, metadata, capFinder)) {
+ return false;
+ }
+
//don't push criteria into an invalid location above an ordered limit - shouldn't happen
PlanNode limitNode = NodeEditor.findNodePreOrder(accessNode, NodeConstants.Types.TUPLE_LIMIT, NodeConstants.Types.SOURCE);
if (limitNode != null && NodeEditor.findNodePreOrder(limitNode, NodeConstants.Types.SORT, NodeConstants.Types.SOURCE) != null) {
@@ -321,10 +321,6 @@
Criteria crit = (Criteria) parentNode.getProperty(NodeConstants.Info.SELECT_CRITERIA);
- if(isEligibleSubquery(parentNode, modelID, metadata, capFinder) == null){
- return false;
- }
-
if(!CriteriaCapabilityValidatorVisitor.canPushLanguageObject(crit, modelID, metadata, capFinder) ) {
return false;
}
@@ -332,81 +328,10 @@
if (accessNode.getFirstChild() != null && accessNode.getFirstChild().getType() == NodeConstants.Types.SET_OP) {
return false; //inconsistent select position - RulePushSelectCriteria is too greedy
}
-
- //TODO: check for "and" support
-
+
return true;
}
-
- /**
- * Check whether the subquery in the node is eligible to be pushed.
- */
- static Object isEligibleSubquery(PlanNode critNode, Object critNodeModelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws MetaMatrixComponentException {
- return isEligibleSubquery(critNode.getSubqueryContainers(), critNodeModelID, metadata, capFinder);
- }
-
- static Object isEligibleSubquery(List<SubqueryContainer> plans, Object critNodeModelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws MetaMatrixComponentException {
- for (SubqueryContainer subqueryContainer : plans) {
- ProcessorPlan plan = subqueryContainer.getCommand().getProcessorPlan();
- if(!(plan instanceof RelationalPlan)) {
- return null;
- }
- RelationalPlan rplan = (RelationalPlan) plan;
-
- // Check that the plan is just an access node
- RelationalNode accessNode = rplan.getRootNode();
- if(accessNode == null || ! (accessNode instanceof AccessNode) || accessNode.getChildren()[0] != null) {
- return null;
- }
-
- // Check that command in access node is a query
- Command command = ((AccessNode)accessNode).getCommand();
- if(command == null || !(command instanceof Query) || ((Query)command).getIsXML()) {
- return null;
- }
-
- // Check that query in access node is for the same model as current node
- try {
- Collection subQueryGroups = GroupCollectorVisitor.getGroupsIgnoreInlineViews(command, false);
- if(subQueryGroups.size() == 0) {
- // No FROM?
- return null;
- }
- GroupSymbol subQueryGroup = (GroupSymbol)subQueryGroups.iterator().next();
-
- Object modelID = metadata.getModelID(subQueryGroup.getMetadataID());
- if (critNodeModelID == null) {
- critNodeModelID = modelID;
- } else if(!CapabilitiesUtil.isSameConnector(critNodeModelID, modelID, metadata, capFinder)) {
- return null;
- }
- } catch(QueryMetadataException e) {
- throw new MetaMatrixComponentException(e, QueryExecPlugin.Util.getString("RulePushSelectCriteria.Error_getting_modelID")); //$NON-NLS-1$
- }
-
- // Check whether source supports correlated subqueries and if not, whether criteria has them
- SymbolMap refs = subqueryContainer.getCommand().getCorrelatedReferences();
- try {
- if(refs != null && !refs.asMap().isEmpty()) {
- if(! CapabilitiesUtil.supportsCorrelatedSubquery(critNodeModelID, metadata, capFinder)) {
- return null;
- }
- //TODO: this check sees as correlated references as coming from the containing scope
- //but this is only an issue with deeply nested subqueries
- if (!CriteriaCapabilityValidatorVisitor.canPushLanguageObject(command, critNodeModelID, metadata, capFinder)) {
- return null;
- }
- }
- } catch(QueryMetadataException e) {
- throw new MetaMatrixComponentException(e);
- }
- }
-
- // Found no reason why this node is not eligible
- return critNodeModelID;
- }
-
/**
*
* @param symbol Symbol to check
@@ -429,9 +354,11 @@
return false;
}
- if(inSelectClause && !(expr instanceof ElementSymbol) && !CapabilitiesUtil.supportsSelectLiterals(modelID, metadata, capFinder)
+ if(inSelectClause && !(expr instanceof ElementSymbol)) {
+ if (!CapabilitiesUtil.supportsSelectLiterals(modelID, metadata, capFinder)
&& (expr instanceof Constant || EvaluateExpressionVisitor.willBecomeConstant(expr))) {
- return false;
+ return false;
+ }
}
// By default, no reason we can't push
@@ -462,7 +389,7 @@
* @return The modelID if the raise can proceed and what common model these combined
* nodes will be sent to
*/
- private static Object canRaiseOverJoin(PlanNode joinNode, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, boolean afterJoinPlanning)
+ private static Object canRaiseOverJoin(Object modelId, PlanNode joinNode, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, boolean afterJoinPlanning)
throws QueryMetadataException, MetaMatrixComponentException {
List crits = (List) joinNode.getProperty(NodeConstants.Info.JOIN_CRITERIA);
@@ -485,28 +412,41 @@
return null;
}
+ //if I'm on the inner side of an outer join, then and we have a criteria restriction, then I can't be pushed
+ if (type.isOuter() && CapabilitiesUtil.getSupportedJoinCriteria(modelId, metadata, capFinder) != SupportedJoinCriteria.ANY) {
+ PlanNode critNode = NodeEditor.findNodePreOrder(joinNode.getLastChild(), NodeConstants.Types.SELECT, NodeConstants.Types.SOURCE);
+ if (critNode != null) {
+ return null;
+ }
+ if (type == JoinType.JOIN_FULL_OUTER) {
+ critNode = NodeEditor.findNodePreOrder(joinNode.getFirstChild(), NodeConstants.Types.SELECT, NodeConstants.Types.SOURCE);
+ if (critNode != null) {
+ return null;
+ }
+ }
+ }
+
return canRaiseOverJoin(joinNode.getChildren(), metadata, capFinder, crits, type);
}
- static Object canRaiseOverJoin(List children,
+ static Object canRaiseOverJoin(List<PlanNode> children,
QueryMetadataInterface metadata,
CapabilitiesFinder capFinder,
List<Criteria> crits,
JoinType type) throws QueryMetadataException,
MetaMatrixComponentException {
- Object modelID = null;
- Set groupIDs = new HashSet();
+ //we only want to consider binary joins
+ if (children.size() != 2) {
+ return null;
+ }
+
+ Object modelID = null;
+ Set<Object> groupIDs = new HashSet<Object>();
int groupCount = 0;
- // Walk through each of the join node children - all of them should be access nodes
- // if the raise can occur.
- Iterator childIter = children.iterator();
- while(childIter.hasNext()) {
- PlanNode childNode = (PlanNode) childIter.next();
-
- if(childNode.getType() != NodeConstants.Types.ACCESS) {
- // If one of the children is not an access node (or, in a rare case, a join node),
- // then we can't raise the access nodes
+ for (PlanNode childNode : children) {
+ if(childNode.getType() != NodeConstants.Types.ACCESS
+ || childNode.hasCollectionProperty(NodeConstants.Info.ACCESS_PATTERNS)) {
return null;
}
Object accessModelID = getModelIDFromAccess(childNode, metadata);
@@ -531,30 +471,67 @@
}
}
}
-
+
+ //check the join criteria now that we know the model
if(modelID == null) {
- // Check that model supports join
- if(!CapabilitiesUtil.supportsJoins(accessModelID, metadata, capFinder)) {
- return null;
- }
- // Check that if join is outer, model supports it
+ if (!CapabilitiesUtil.supportsJoin(accessModelID, type, metadata, capFinder)) {
+ return null;
+ }
+ SupportedJoinCriteria sjc = CapabilitiesUtil.getSupportedJoinCriteria(accessModelID, metadata, capFinder);
- if(type.isOuter() && !CapabilitiesUtil.supportsOuterJoin(accessModelID, type, metadata, capFinder)) {
- //join is outer and model does not support
- return null;
- }
-
- // Check that model supports join expressions
+ /*
+ * Key joins must be left linear
+ */
+ if (sjc == SupportedJoinCriteria.KEY && children.get(1).getGroups().size() != 1) {
+ return null;
+ }
+
if(crits != null && !crits.isEmpty()) {
+ List<Object> leftIds = null;
+ List<Object> rightIds = null;
+ GroupSymbol leftGroup = null;
for (Criteria crit : crits) {
- if(!CriteriaCapabilityValidatorVisitor.canPushLanguageObject(crit, accessModelID, metadata, capFinder) ) {
- return null;
- }
+ if (!isSupportedJoinCriteria(sjc, crit, accessModelID, metadata, capFinder)) {
+ return null;
+ }
+ if (sjc != SupportedJoinCriteria.KEY) {
+ continue;
+ }
+ //key join
+ //TODO: this would be much simpler if we could rely on rulechoosejoinstrategy running first
+ if (leftIds == null) {
+ leftIds = new ArrayList<Object>();
+ rightIds = new ArrayList<Object>();
+ }
+ ElementSymbol leftSymbol = (ElementSymbol)((CompareCriteria)crit).getLeftExpression();
+ ElementSymbol rightSymbol = (ElementSymbol)((CompareCriteria)crit).getRightExpression();
+ if ((children.get(0).getGroups().contains(leftSymbol.getGroupSymbol()) && children.get(1).getGroups().contains(rightSymbol.getGroupSymbol()))
+ || (children.get(1).getGroups().contains(leftSymbol.getGroupSymbol()) && children.get(0).getGroups().contains(rightSymbol.getGroupSymbol()))) {
+ boolean left = children.get(0).getGroups().contains(leftSymbol.getGroupSymbol());
+ if (leftGroup == null) {
+ leftGroup = left?leftSymbol.getGroupSymbol():rightSymbol.getGroupSymbol();
+ } else if (!leftGroup.equals(left?leftSymbol.getGroupSymbol():rightSymbol.getGroupSymbol())) {
+ return null;
+ }
+ if (left) {
+ leftIds.add(leftSymbol.getMetadataID());
+ rightIds.add(rightSymbol.getMetadataID());
+ } else {
+ rightIds.add(leftSymbol.getMetadataID());
+ leftIds.add(rightSymbol.getMetadataID());
+ }
+ } else {
+ return null;
+ }
}
- if(isEligibleSubquery(ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(crits), accessModelID, metadata, capFinder) == null){
- return null;
- }
+ if (leftIds != null &&
+ !matchesForeignKey(metadata, leftIds, rightIds, leftGroup)
+ && !matchesForeignKey(metadata, rightIds, leftIds, children.get(1).getGroups().iterator().next())) {
+ return null;
+ }
+ } else if (sjc != SupportedJoinCriteria.ANY) {
+ return null; //cross join not supported
}
modelID = accessModelID;
@@ -562,13 +539,6 @@
} else if(!CapabilitiesUtil.isSameConnector(modelID, accessModelID, metadata, capFinder)) {
return null;
}
-
- if (childNode.hasCollectionProperty(NodeConstants.Info.ACCESS_PATTERNS)) {
- return null;
- }
-
- //check the group count
-
} // end walking through join node's children
int maxGroups = CapabilitiesUtil.getMaxFromGroups(modelID, metadata, capFinder);
@@ -579,7 +549,60 @@
return modelID;
}
-
+
+ /**
+ * Checks criteria one predicate at a time. Only tests up to the equi restriction.
+ */
+ static boolean isSupportedJoinCriteria(SupportedJoinCriteria sjc, Criteria crit, Object accessModelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder)
+ throws QueryMetadataException, MetaMatrixComponentException {
+ if(!CriteriaCapabilityValidatorVisitor.canPushLanguageObject(crit, accessModelID, metadata, capFinder) ) {
+ return false;
+ }
+ if (sjc == SupportedJoinCriteria.ANY) {
+ return true;
+ }
+ //theta join must be between elements with a compare predicate
+ if (!(crit instanceof CompareCriteria)) {
+ return false;
+ }
+ CompareCriteria cc = (CompareCriteria)crit;
+ if (!(cc.getLeftExpression() instanceof ElementSymbol)) {
+ return false;
+ }
+ if (!(cc.getRightExpression() instanceof ElementSymbol)) {
+ return false;
+ }
+ if (sjc == SupportedJoinCriteria.THETA) {
+ return true;
+ }
+ //equi must use the equality operator
+ if (cc.getOperator() != CompareCriteria.EQ) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * TODO: gracefully handle too much criteria
+ */
+ private static boolean matchesForeignKey(QueryMetadataInterface metadata,
+ List<Object> leftIds, List<Object> rightIds, GroupSymbol leftGroup)
+ throws MetaMatrixComponentException, QueryMetadataException {
+ Collection fks = metadata.getForeignKeysInGroup(leftGroup.getMetadataID());
+ for (Object fk : fks) {
+ List fkColumns = metadata.getElementIDsInKey(fk);
+ if (!leftIds.containsAll(fkColumns) || leftIds.size() != fkColumns.size()) {
+ continue;
+ }
+ Object pk = metadata.getPrimaryKeyIDForForeignKeyID(fk);
+ List pkColumns = metadata.getElementIDsInKey(pk);
+ if (rightIds.containsAll(pkColumns) && rightIds.size() == pkColumns.size()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
static PlanNode raiseAccessOverJoin(PlanNode joinNode, Object modelID, boolean insert) {
PlanNode leftAccess = joinNode.getFirstChild();
PlanNode rightAccess = joinNode.getLastChild();
@@ -676,6 +699,11 @@
} else if(!CapabilitiesUtil.isSameConnector(modelID, accessModelID, metadata, capFinder)) {
return false;
}
+ if (!setOpNode.hasBooleanProperty(NodeConstants.Info.USE_ALL)
+ && !CapabilitiesUtil.checkElementsAreSearchable((List)NodeEditor.findNodePreOrder(childNode, NodeConstants.Types.PROJECT).getProperty(NodeConstants.Info.PROJECT_COLS), metadata, SupportConstants.Element.SEARCHABLE_COMPARE)) {
+ return false;
+ }
+
}
return true;
}
Modified: trunk/engine/src/main/java/com/metamatrix/query/sql/lang/CompareCriteria.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/sql/lang/CompareCriteria.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/sql/lang/CompareCriteria.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -44,6 +44,7 @@
/** The right-hand expression. */
private Expression rightExpression;
+ private boolean isOptional;
/**
* Constructs a default instance of this class.
@@ -94,6 +95,24 @@
setOperator(operator);
setRightExpression(rightExpression);
}
+
+ /**
+ * Set during planning to indicate that this criteria is no longer needed
+ * to correctly process a join
+ * @param isOptional
+ */
+ public void setOptional(boolean isOptional) {
+ this.isOptional = isOptional;
+ }
+
+ /**
+ * Returns true if the compare criteria is used as join criteria, but not needed
+ * during processing.
+ * @return
+ */
+ public boolean isOptional() {
+ return isOptional;
+ }
public void acceptVisitor(LanguageVisitor visitor) {
visitor.visit(this);
@@ -148,7 +167,9 @@
rightCopy = (Expression) getRightExpression().clone();
}
- return new CompareCriteria(leftCopy, getOperator(), rightCopy);
+ CompareCriteria result = new CompareCriteria(leftCopy, getOperator(), rightCopy);
+ result.isOptional = isOptional;
+ return result;
}
} // END CLASS
Modified: trunk/engine/src/main/java/com/metamatrix/query/sql/lang/Criteria.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/sql/lang/Criteria.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/sql/lang/Criteria.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -128,18 +128,23 @@
public static Criteria combineCriteria(Criteria primaryCrit, Criteria additionalCrit, boolean disjunctively) {
if(primaryCrit == null) {
return additionalCrit;
- } else if(additionalCrit == null) {
+ }
+ if(additionalCrit == null) {
return primaryCrit;
- } else if((primaryCrit instanceof CompoundCriteria) && ((CompoundCriteria)primaryCrit).getOperator() == (disjunctively?CompoundCriteria.OR:CompoundCriteria.AND)) {
- ((CompoundCriteria)primaryCrit).addCriteria(additionalCrit);
- return primaryCrit;
+ }
+ CompoundCriteria compCrit = new CompoundCriteria();
+ compCrit.setOperator((disjunctively?CompoundCriteria.OR:CompoundCriteria.AND));
+ if ((primaryCrit instanceof CompoundCriteria) && ((CompoundCriteria)primaryCrit).getOperator() == (disjunctively?CompoundCriteria.OR:CompoundCriteria.AND)) {
+ compCrit.getCriteria().addAll(((CompoundCriteria)primaryCrit).getCriteria());
} else {
- CompoundCriteria compCrit = new CompoundCriteria();
- compCrit.setOperator((disjunctively?CompoundCriteria.OR:CompoundCriteria.AND));
compCrit.addCriteria(primaryCrit);
+ }
+ if ((additionalCrit instanceof CompoundCriteria) && ((CompoundCriteria)additionalCrit).getOperator() == (disjunctively?CompoundCriteria.OR:CompoundCriteria.AND)) {
+ compCrit.getCriteria().addAll(((CompoundCriteria)additionalCrit).getCriteria());
+ } else {
compCrit.addCriteria(additionalCrit);
- return compCrit;
- }
+ }
+ return compCrit;
}
public static Criteria toDisjunctiveNormalForm(Criteria input) {
Modified: trunk/engine/src/main/java/com/metamatrix/query/sql/visitor/ElementCollectorVisitor.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/sql/visitor/ElementCollectorVisitor.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/sql/visitor/ElementCollectorVisitor.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -117,7 +117,7 @@
PreOrderNavigator.doVisit(obj, visitor);
}
- public static final void getElements(Collection<LanguageObject> objs, Collection<ElementSymbol> elements) {
+ public static final void getElements(Collection<? extends LanguageObject> objs, Collection<ElementSymbol> elements) {
if(objs == null) {
return;
}
Modified: trunk/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java
===================================================================
--- trunk/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/com/metamatrix/query/validator/ValidationVisitor.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -41,7 +41,6 @@
import com.metamatrix.query.function.FunctionLibrary;
import com.metamatrix.query.metadata.SupportConstants;
import com.metamatrix.query.resolver.util.ResolverUtil;
-import com.metamatrix.query.resolver.util.ResolverUtil.ResolvedLookup;
import com.metamatrix.query.sql.LanguageObject;
import com.metamatrix.query.sql.LanguageVisitor;
import com.metamatrix.query.sql.ProcedureReservedWords;
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/CapabilitiesConverter.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/CapabilitiesConverter.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/datamgr/CapabilitiesConverter.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -22,7 +22,8 @@
package org.teiid.dqp.internal.datamgr;
-import java.util.*;
+import java.util.Iterator;
+import java.util.List;
import org.teiid.connector.api.ConnectorCapabilities;
@@ -46,37 +47,27 @@
public static BasicSourceCapabilities convertCapabilities(ConnectorCapabilities srcCaps, String connectorID, boolean isXa) {
BasicSourceCapabilities tgtCaps = new BasicSourceCapabilities();
+ tgtCaps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, srcCaps.supportsSelectExpression());
tgtCaps.setCapabilitySupport(Capability.QUERY_SELECT_DISTINCT, srcCaps.supportsSelectDistinct());
- tgtCaps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, srcCaps.supportsSelectLiterals());
tgtCaps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, srcCaps.supportsAliasedGroup());
- tgtCaps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, srcCaps.supportsJoins());
+ tgtCaps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, srcCaps.supportsInnerJoins());
tgtCaps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, srcCaps.supportsSelfJoins());
tgtCaps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, srcCaps.supportsOuterJoins());
tgtCaps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, srcCaps.supportsFullOuterJoins());
tgtCaps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, srcCaps.supportsInlineViews());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE, srcCaps.supportsCriteria());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_BETWEEN, srcCaps.supportsBetweenCriteria());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, srcCaps.supportsCompareCriteria());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, srcCaps.supportsCompareCriteriaEquals());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_NE, srcCaps.supportsCompareCriteriaNotEquals());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_LT, srcCaps.supportsCompareCriteriaLessThan());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_LE, srcCaps.supportsCompareCriteriaLessThanOrEqual());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, srcCaps.supportsCompareCriteriaGreaterThan());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, srcCaps.supportsCompareCriteriaGreaterThanOrEqual());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, srcCaps.supportsLikeCriteria());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE_ESCAPE, srcCaps.supportsLikeCriteriaEscapeCharacter());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_IN, srcCaps.supportsInCriteria());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, srcCaps.supportsInCriteriaSubquery());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_ISNULL, srcCaps.supportsIsNullCriteria());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_AND, srcCaps.supportsAndCriteria());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_OR, srcCaps.supportsOrCriteria());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_NOT, srcCaps.supportsNotCriteria());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_EXISTS, srcCaps.supportsExistsCriteria());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, srcCaps.supportsQuantifiedCompareCriteria());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, srcCaps.supportsQuantifiedCompareCriteriaSome());
- tgtCaps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_ALL, srcCaps.supportsQuantifiedCompareCriteriaAll());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, srcCaps.supportsCompareCriteriaEquals());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, srcCaps.supportsCompareCriteriaOrdered());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_LIKE, srcCaps.supportsLikeCriteria());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_LIKE_ESCAPE, srcCaps.supportsLikeCriteriaEscapeCharacter());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_IN, srcCaps.supportsInCriteria());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, srcCaps.supportsInCriteriaSubquery());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_ISNULL, srcCaps.supportsIsNullCriteria());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_OR, srcCaps.supportsOrCriteria());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_NOT, srcCaps.supportsNotCriteria());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_EXISTS, srcCaps.supportsExistsCriteria());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, srcCaps.supportsQuantifiedCompareCriteriaSome());
+ tgtCaps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_ALL, srcCaps.supportsQuantifiedCompareCriteriaAll());
tgtCaps.setCapabilitySupport(Capability.QUERY_ORDERBY, srcCaps.supportsOrderBy());
- tgtCaps.setCapabilitySupport(Capability.QUERY_AGGREGATES, srcCaps.supportsAggregates());
tgtCaps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, srcCaps.supportsAggregatesSum());
tgtCaps.setCapabilitySupport(Capability.QUERY_AGGREGATES_AVG, srcCaps.supportsAggregatesAvg());
tgtCaps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MIN, srcCaps.supportsAggregatesMin());
@@ -94,14 +85,14 @@
tgtCaps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, srcCaps.supportsSetQueryOrderBy());
tgtCaps.setCapabilitySupport(Capability.BULK_INSERT , srcCaps.supportsBulkInsert());
tgtCaps.setCapabilitySupport(Capability.BATCHED_UPDATES, srcCaps.supportsBatchedUpdates());
- tgtCaps.setCapabilitySupport(Capability.FUNCTION, srcCaps.supportsScalarFunctions());
tgtCaps.setCapabilitySupport(Capability.QUERY_FUNCTIONS_IN_GROUP_BY, srcCaps.supportsFunctionsInGroupBy());
tgtCaps.setCapabilitySupport(Capability.ROW_LIMIT, srcCaps.supportsRowLimit());
tgtCaps.setCapabilitySupport(Capability.ROW_OFFSET, srcCaps.supportsRowOffset());
tgtCaps.setCapabilitySupport(Capability.QUERY_FROM_ANSI_JOIN, srcCaps.useAnsiJoin());
tgtCaps.setCapabilitySupport(Capability.REQUIRES_CRITERIA, srcCaps.requiresCriteria());
tgtCaps.setCapabilitySupport(Capability.QUERY_GROUP_BY, srcCaps.supportsGroupBy());
-
+ tgtCaps.setCapabilitySupport(Capability.QUERY_HAVING, srcCaps.supportsHaving());
+
List functions = srcCaps.getSupportedFunctions();
if(functions != null && functions.size() > 0) {
Iterator iter = functions.iterator();
@@ -115,6 +106,7 @@
tgtCaps.setSourceProperty(Capability.CONNECTOR_ID, connectorID);
tgtCaps.setSourceProperty(Capability.MAX_QUERY_FROM_GROUPS, new Integer(srcCaps.getMaxFromGroups()));
tgtCaps.setSourceProperty(Capability.TRANSACTIONS_XA, isXa);
+ tgtCaps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, srcCaps.getSupportedJoinCriteria());
return tgtCaps;
}
Modified: trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourceCapabilitiesFinder.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourceCapabilitiesFinder.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourceCapabilitiesFinder.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -88,7 +88,15 @@
Capability.QUERY_UNION,
Capability.QUERY_EXCEPT,
Capability.QUERY_INTERSECT,
- Capability.QUERY_AGGREGATES,
+ Capability.QUERY_AGGREGATES_AVG,
+ Capability.QUERY_AGGREGATES_COUNT,
+ Capability.QUERY_AGGREGATES_COUNT_STAR,
+ Capability.QUERY_AGGREGATES_DISTINCT,
+ Capability.QUERY_AGGREGATES_MAX,
+ Capability.QUERY_AGGREGATES_MIN,
+ Capability.QUERY_AGGREGATES_SUM,
+ Capability.QUERY_GROUP_BY,
+ Capability.QUERY_HAVING,
Capability.QUERY_ORDERBY,
Capability.QUERY_SELECT_DISTINCT,
Capability.ROW_LIMIT,
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAggregatePushdown.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -22,8 +22,9 @@
package com.metamatrix.query.optimizer;
-import junit.framework.TestCase;
+import org.junit.Test;
+import com.metamatrix.query.optimizer.TestOptimizer.ComparisonMode;
import com.metamatrix.query.optimizer.capabilities.BasicSourceCapabilities;
import com.metamatrix.query.optimizer.capabilities.FakeCapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
@@ -31,7 +32,7 @@
import com.metamatrix.query.unittest.FakeMetadataFacade;
import com.metamatrix.query.unittest.FakeMetadataFactory;
-public class TestAggregatePushdown extends TestCase {
+public class TestAggregatePushdown {
private FakeCapabilitiesFinder getAggregatesFinder() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
@@ -45,7 +46,7 @@
return capFinder;
}
- public void testCase6327() {
+ @Test public void testCase6327() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -85,7 +86,7 @@
*
* Note also that this test shows that the max aggregate is not placed on the bqt2 query since it would be on one of the group by expressions
*/
- public void testAggregateOfJoinExpression() throws Exception {
+ @Test public void testAggregateOfJoinExpression() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -124,7 +125,7 @@
* Note that even though this grouping is join invariant, we still do not remove the top level group by
* since we are not checking the uniqueness of the x side join expressions
*/
- public void testInvariantAggregate() throws Exception {
+ @Test public void testInvariantAggregate() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -158,7 +159,7 @@
/**
* Test of an aggregate nested in an expression symbol
*/
- public void testCase6211() throws Exception {
+ @Test public void testCase6211() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -195,7 +196,7 @@
/**
* Note that until we can test the other side cardinality, we cannot fully push the group node
*/
- public void testAggregatePushdown1() throws Exception {
+ @Test public void testAggregatePushdown1() throws Exception {
FakeMetadataFacade metadata = FakeMetadataFactory.exampleAggregatesCached();
String sql = "SELECT o_dealerid, o_productid, sum(o_amount) FROM m1.order, m1.dealer, m2.product " + //$NON-NLS-1$
"WHERE o_dealerid=d_dealerid AND o_productid=p_productid AND d_state = 'CA' AND p_divid = 100 " + //$NON-NLS-1$
@@ -204,7 +205,7 @@
ProcessorPlan plan = TestOptimizer.helpPlan(sql,
metadata,
null, getAggregatesFinder(),
- new String[] {"SELECT g_0.p_productid AS c_0 FROM m2.product AS g_0 WHERE g_0.p_divid = 100 ORDER BY c_0", "SELECT g_0.o_productid AS c_0, g_0.o_dealerid AS c_1, SUM(g_0.o_amount) AS c_2 FROM m1.\"order\" AS g_0, m1.dealer AS g_1 WHERE (g_0.o_productid IN (<dependent values>)) AND (g_0.o_dealerid = g_1.d_dealerid) AND (g_1.d_state = 'CA') GROUP BY g_0.o_productid, g_0.o_dealerid ORDER BY c_0"}, //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] {"SELECT g_0.p_productid AS c_0 FROM m2.product AS g_0 WHERE g_0.p_divid = 100 ORDER BY c_0", "SELECT g_0.o_productid AS c_0, g_0.o_dealerid AS c_1, SUM(g_0.o_amount) AS c_2 FROM m1.\"order\" AS g_0, m1.dealer AS g_1 WHERE (g_0.o_dealerid = g_1.d_dealerid) AND (g_1.d_state = 'CA') AND (g_0.o_productid IN (<dependent values>)) GROUP BY g_0.o_productid, g_0.o_dealerid ORDER BY c_0"}, //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING );
TestOptimizer.checkNodeTypes(plan, new int[] {
@@ -225,7 +226,7 @@
});
}
- public void testAggregatePushdown2() throws Exception {
+ @Test public void testAggregatePushdown2() throws Exception {
FakeMetadataFacade metadata = FakeMetadataFactory.exampleAggregatesCached();
String sql = "SELECT o_dealerid, o_productid, sum(o_amount) FROM m1.order, m1.dealer, m2.product " + //$NON-NLS-1$
"WHERE o_dealerid=d_dealerid AND o_productid=p_productid AND d_state = 'CA' AND p_divid = 100 " + //$NON-NLS-1$
@@ -234,7 +235,7 @@
ProcessorPlan plan = TestOptimizer.helpPlan(sql,
metadata,
null, getAggregatesFinder(),
- new String[] {"SELECT g_0.p_productid AS c_0 FROM m2.product AS g_0 WHERE g_0.p_divid = 100 ORDER BY c_0", "SELECT g_0.o_productid AS c_0, g_0.o_dealerid AS c_1, MAX(g_0.o_amount) AS c_2, SUM(g_0.o_amount) AS c_3 FROM m1.\"order\" AS g_0, m1.dealer AS g_1 WHERE (g_0.o_productid IN (<dependent values>)) AND (g_0.o_dealerid = g_1.d_dealerid) AND (g_1.d_state = 'CA') GROUP BY g_0.o_productid, g_0.o_dealerid ORDER BY c_0"}, //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] {"SELECT g_0.p_productid AS c_0 FROM m2.product AS g_0 WHERE g_0.p_divid = 100 ORDER BY c_0", "SELECT g_0.o_productid AS c_0, g_0.o_dealerid AS c_1, MAX(g_0.o_amount) AS c_2, SUM(g_0.o_amount) AS c_3 FROM m1.\"order\" AS g_0, m1.dealer AS g_1 WHERE (g_0.o_dealerid = g_1.d_dealerid) AND (g_1.d_state = 'CA') AND (g_0.o_productid IN (<dependent values>)) GROUP BY g_0.o_productid, g_0.o_dealerid ORDER BY c_0"}, //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING );
TestOptimizer.checkNodeTypes(plan, new int[] {
@@ -258,7 +259,7 @@
/**
* Average requires the creation of staged sum and count aggregates
*/
- public void testAvgAggregate() throws Exception {
+ @Test public void testAvgAggregate() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -290,7 +291,7 @@
});
}
- public void testCountAggregate() throws Exception {
+ @Test public void testCountAggregate() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -322,7 +323,7 @@
});
}
- public void testOuterJoinPreventsPushdown() throws Exception {
+ @Test public void testOuterJoinPreventsPushdown() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -358,7 +359,7 @@
* Test to ensure count(*) isn't mistakenly pushed to either side, but that
* grouping can still be.
*/
- public void testCase5724() {
+ @Test public void testCase5724() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -394,7 +395,7 @@
});
}
- public void testCase6210() throws Exception {
+ @Test public void testCase6210() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -431,10 +432,11 @@
});
}
- public void testNoGroupAggregatePushdown() {
+ @Test public void testNoGroupAggregatePushdown() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
+ caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, false);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -450,4 +452,64 @@
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
+ @Test public void testNoHavingAggregate() throws Exception {
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
+ caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
+ caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
+ capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
+ FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
+
+ ProcessorPlan plan = TestOptimizer.helpPlan(
+ "select stringkey, max(intkey) from bqt1.smalla group by stringkey having count(intkey) = 1", //$NON-NLS-1$
+ metadata, null, capFinder,
+ new String[] {
+ "SELECT COUNT(g_0.intkey), g_0.stringkey, MAX(g_0.intkey) FROM bqt1.smalla AS g_0 GROUP BY g_0.stringkey"}, //$NON-NLS-1$
+ ComparisonMode.EXACT_COMMAND_STRING);
+
+ TestOptimizer.checkNodeTypes(plan, new int[] {
+ 1, // Access
+ 0, // DependentAccess
+ 0, // DependentSelect
+ 0, // DependentProject
+ 0, // DupRemove
+ 0, // Grouping
+ 0, // NestedLoopJoinStrategy
+ 0, // MergeJoinStrategy
+ 0, // Null
+ 0, // PlanExecution
+ 1, // Project
+ 1, // Select
+ 0, // Sort
+ 0 // UnionAll
+ });
+ }
+
+ @Test public void testHavingCriteriaPushDown() {
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, false);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ ProcessorPlan plan = TestOptimizer.helpPlan("select X.e1 FROM vm1.g1 X group by X.e1 having X.e1 = 1 and sum(X.e2) = 2", FakeMetadataFactory.example1Cached(), null, capFinder, //$NON-NLS-1$
+ new String[]{"SELECT pm1.g1.e1, pm1.g1.e2 FROM pm1.g1 WHERE pm1.g1.e1 = '1'"}, true); //$NON-NLS-1$
+ TestOptimizer.checkNodeTypes(plan, new int[] {
+ 1, // Access
+ 0, // DependentAccess
+ 0, // DependentSelect
+ 0, // DependentProject
+ 0, // DupRemove
+ 1, // Grouping
+ 0, // NestedLoopJoinStrategy
+ 0, // MergeJoinStrategy
+ 0, // Null
+ 0, // PlanExecution
+ 1, // Project
+ 1, // Select
+ 0, // Sort
+ 0 // UnionAll
+ });
+ }
+
}
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAnsiJoinPushdown.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAnsiJoinPushdown.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAnsiJoinPushdown.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -22,22 +22,23 @@
package com.metamatrix.query.optimizer;
-import junit.framework.TestCase;
+import org.junit.Test;
import com.metamatrix.query.optimizer.TestOptimizer.ComparisonMode;
import com.metamatrix.query.optimizer.capabilities.BasicSourceCapabilities;
import com.metamatrix.query.optimizer.capabilities.FakeCapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
import com.metamatrix.query.processor.ProcessorPlan;
+import com.metamatrix.query.unittest.FakeMetadataFactory;
-public class TestAnsiJoinPushdown extends TestCase {
+public class TestAnsiJoinPushdown {
/**
* See {@link TestOptimizer.testPushMultiGroupCriteria}
*
* Notice that the non-join criteria is still in the on clause.
*/
- public void testAnsiInnerJoin() throws Exception {
+ @Test public void testAnsiInnerJoin() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_ANSI_JOIN, true);
@@ -45,10 +46,10 @@
ProcessorPlan plan = TestOptimizer.helpPlan(
"select pm2.g1.e1 from pm2.g1, pm2.g2 where pm2.g1.e1 = pm2.g2.e1 and (pm2.g1.e2 = 1 OR pm2.g2.e2 = 2) and pm2.g2.e3 = 1", //$NON-NLS-1$
- TestOptimizer.example1(),
+ FakeMetadataFactory.example1Cached(),
null,
capFinder,
- new String[] { "SELECT g_0.e1 FROM pm2.g1 AS g_0 INNER JOIN pm2.g2 AS g_1 ON g_0.e1 = g_1.e1 AND ((g_0.e2 = 1) OR (g_1.e2 = 2)) AND g_1.e3 = TRUE" }, //$NON-NLS-1$
+ new String[] { "SELECT g_0.e1 FROM pm2.g1 AS g_0 INNER JOIN pm2.g2 AS g_1 ON g_0.e1 = g_1.e1 AND ((g_0.e2 = 1) OR (g_1.e2 = 2)) WHERE g_1.e3 = TRUE" }, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING);
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
Added: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestComparableMetadataPushdown.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestComparableMetadataPushdown.java (rev 0)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestComparableMetadataPushdown.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -0,0 +1,78 @@
+/*
+ * 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 com.metamatrix.query.optimizer;
+
+import org.junit.Test;
+
+import com.metamatrix.query.optimizer.capabilities.BasicSourceCapabilities;
+import com.metamatrix.query.optimizer.capabilities.FakeCapabilitiesFinder;
+import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
+import com.metamatrix.query.validator.TestValidator;
+
+public class TestComparableMetadataPushdown {
+
+ @Test public void testCantPushSort() throws Exception {
+ String sql = "select e3, e2 from test.group order by e3, e2"; //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ capFinder.addCapabilities("test", TestOptimizer.getTypicalCapabilities()); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan(sql, TestValidator.exampleMetadata(),
+ new String[] {"SELECT g_0.e3, g_0.e2 FROM test.\"group\" AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ }
+
+ @Test public void testCantPushGroupBy() throws Exception {
+ String sql = "select e3, e2 from test.group group by e3, e2"; //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
+ capFinder.addCapabilities("test", caps); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan(sql, TestValidator.exampleMetadata(),
+ new String[] {"SELECT g_0.e3, g_0.e2 FROM test.\"group\" AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ }
+
+ @Test public void testCantPushDup() throws Exception {
+ String sql = "select distinct e3, e2 from test.group"; //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ capFinder.addCapabilities("test", TestOptimizer.getTypicalCapabilities()); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan(sql, TestValidator.exampleMetadata(),
+ new String[] {"SELECT g_0.e3, g_0.e2 FROM test.\"group\" AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ }
+
+ @Test public void testCantPushSetOp() throws Exception {
+ String sql = "select e3, e2 from test.group union select e0, e1 from test.group2"; //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = new BasicSourceCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_UNION, true);
+ capFinder.addCapabilities("test", caps); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan(sql, TestValidator.exampleMetadata(),
+ new String[] {"SELECT test.\"group\".e3, test.\"group\".e2 FROM test.\"group\"", "SELECT test.group2.e0, test.group2.e1 FROM test.group2"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+}
Property changes on: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestComparableMetadataPushdown.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestDependentJoins.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestDependentJoins.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestDependentJoins.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -487,13 +487,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(10));
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -530,10 +526,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -569,13 +562,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -614,13 +603,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -665,14 +650,10 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -711,14 +692,10 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -754,13 +731,10 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
caps.setFunctionSupport("||", true); //$NON-NLS-1$
@@ -803,13 +777,10 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
caps.setFunctionSupport("||", true); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestExpressionsInGroupBy.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestExpressionsInGroupBy.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestExpressionsInGroupBy.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -46,12 +46,10 @@
// Create capabilities
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
+ caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_FUNCTIONS_IN_GROUP_BY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -72,12 +70,10 @@
// Create capabilities
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
+ caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_FUNCTIONS_IN_GROUP_BY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -125,13 +121,10 @@
// Create capabilities
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.FUNCTION, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
// Plan query
@@ -166,11 +159,9 @@
// Create capabilities
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -233,12 +224,9 @@
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_CASE, true);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan(sql,
@@ -278,12 +266,9 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_CASE, false);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -326,12 +311,9 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_CASE, false);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -371,12 +353,9 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_CASE, false);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -441,7 +420,7 @@
public void testDontPushGroupByUnsupportedFunction() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
+ caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan(
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestJoinOptimization.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestJoinOptimization.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestJoinOptimization.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -22,17 +22,19 @@
package com.metamatrix.query.optimizer;
+import static org.junit.Assert.*;
+
import java.util.ArrayList;
import java.util.List;
+import org.junit.Test;
import org.teiid.connector.api.SourceSystemFunctions;
-import junit.framework.TestCase;
-
import com.metamatrix.api.exception.MetaMatrixComponentException;
import com.metamatrix.api.exception.query.QueryMetadataException;
import com.metamatrix.api.exception.query.QueryParserException;
import com.metamatrix.api.exception.query.QueryResolverException;
+import com.metamatrix.query.optimizer.TestOptimizer.ComparisonMode;
import com.metamatrix.query.optimizer.capabilities.BasicSourceCapabilities;
import com.metamatrix.query.optimizer.capabilities.FakeCapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
@@ -49,17 +51,12 @@
import com.metamatrix.query.unittest.FakeMetadataObject;
import com.metamatrix.query.unittest.FakeMetadataStore;
-
-public class TestJoinOptimization extends TestCase {
+public class TestJoinOptimization {
- public TestJoinOptimization(String name) {
- super(name);
- }
-
/**
* Single group criteria should get pushed and be eligible for copy criteria
*/
- public void testInnerJoinPushAndCopyNonJoinCriteria() {
+ @Test public void testInnerJoinPushAndCopyNonJoinCriteria() {
String sql = "select bqt1.smalla.intkey, bqt2.smalla.intkey from bqt1.smalla inner join bqt2.smalla on (bqt1.smalla.intkey = bqt2.smalla.intkey and bqt2.smalla.intkey = 1)"; //$NON-NLS-1$
// Plan query
@@ -86,7 +83,7 @@
/**
* Single group criteria should get pushed when it is on the inner side
*/
- public void testOuterJoinPushNonJoinCriteria() {
+ @Test public void testOuterJoinPushNonJoinCriteria() {
String sql = "select bqt1.smalla.intkey from bqt1.smalla left outer join bqt2.smalla on (bqt1.smalla.intkey = bqt2.smalla.intkey and bqt2.smalla.stringkey = 1)"; //$NON-NLS-1$
// Plan query
@@ -113,7 +110,7 @@
/**
* Single group criteria should not be pushed when it is on the outer side
*/
- public void testOuterJoinPushNonJoinCriteriaA() {
+ @Test public void testOuterJoinPushNonJoinCriteriaA() {
String sql = "select bqt1.smalla.intkey from bqt1.smalla left outer join bqt2.smalla on (bqt1.smalla.intkey = bqt2.smalla.intkey and bqt1.smalla.stringkey = 1)"; //$NON-NLS-1$
// Plan query
@@ -137,7 +134,7 @@
});
}
- public void testOuterJoinPushNonJoinCriteria_Case5547() {
+ @Test public void testOuterJoinPushNonJoinCriteria_Case5547() {
String sql = "select bqt1.smalla.intkey from bqt1.smalla left outer join bqt2.smalla on (1=1) option debug"; //$NON-NLS-1$
String BQT1 = "BQT1"; //$NON-NLS-1$
String BQT2 = "BQT2"; //$NON-NLS-1$
@@ -182,7 +179,7 @@
* Single group criteria should not be pushed when it is used in a full outer join
* Note that the join has also degraded into a cross join rather than an outer join
*/
- public void testFullOuterJoinPushNonJoinCriteria() {
+ @Test public void testFullOuterJoinPushNonJoinCriteria() {
String sql = "select bqt1.smalla.intkey, bqt2.smalla.intkey from bqt1.smalla full outer join bqt2.smalla on (bqt1.smalla.intkey = bqt2.smalla.intkey and bqt1.smalla.stringkey = 1 and bqt2.smalla.stringkey = 1)"; //$NON-NLS-1$
// Plan query
@@ -210,7 +207,7 @@
* Copy criteria should still work here even though the join criteria has an implicit type conversion because
* the equality operation on the select criteria can be used.
*/
- public void testCopyCriteriaWithFunction1() {
+ @Test public void testCopyCriteriaWithFunction1() {
String sql = "select bqt1.smalla.intkey, bqt2.smalla.intkey from bqt1.smalla, bqt2.smalla where bqt1.smalla.stringkey = bqt2.smalla.intkey and bqt2.smalla.intkey = 1"; //$NON-NLS-1$
// Plan query
@@ -237,7 +234,7 @@
/**
* Copy criteria should not work here as the join criteria has an implicit convert and the where criteria is a non-equality predicate
*/
- public void testCopyCriteriaWithFunction2() {
+ @Test public void testCopyCriteriaWithFunction2() {
String sql = "select bqt1.smalla.intkey, bqt2.smalla.intkey from bqt1.smalla, bqt2.smalla where bqt1.smalla.stringkey = bqt2.smalla.intkey and bqt2.smalla.intkey <> 1"; //$NON-NLS-1$
// Plan query
@@ -264,7 +261,7 @@
/**
* The intkey criteria should not be copied above to bqt1.smalla since the criteria is comming from the inner side in the join below
*/
- public void testInvalidCopyCriteria() {
+ @Test public void testInvalidCopyCriteria() {
String sql = "select bqt1.smalla.intkey from bqt1.smalla inner join (select bqt3.smalla.intkey from bqt2.smalla left outer join bqt3.smalla on bqt2.smalla.intkey = bqt3.smalla.intkey and bqt3.smalla.intkey = 1) foo on bqt1.smalla.intkey = foo.intkey"; //$NON-NLS-1$
// Plan query
@@ -291,11 +288,11 @@
/*
* Note that the criteria does not get copied to the outer side.
*/
- public void testCopyCriteriaFromInnerSide() {
+ @Test public void testCopyCriteriaFromInnerSide() throws Exception {
String sql = "select bqt1.smalla.intkey from bqt1.smalla left outer join (select bqt3.smalla.intkey from bqt3.smalla where bqt3.smalla.intkey = 1) foo on bqt1.smalla.intkey = foo.intkey"; //$NON-NLS-1$
// Plan query
- ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.exampleBQTCached(), new String[] {"SELECT bqt1.smalla.intkey FROM bqt1.smalla", "SELECT BQT3.SmallA.IntKey FROM bqt3.smalla WHERE bqt3.smalla.intkey = 1"}); //$NON-NLS-1$ //$NON-NLS-2$
+ ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.exampleBQTCached(), new String[] {"SELECT g_0.intkey FROM bqt3.smalla AS g_0 WHERE g_0.intkey = 1", "SELECT g_0.intkey FROM bqt1.smalla AS g_0"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
2, // Access
@@ -318,7 +315,7 @@
/**
* Check to ensure that the full outer join does not get merged since the where criteria cannot be moved
*/
- public void testFullOuterJoinPreservation() {
+ @Test public void testFullOuterJoinPreservation() {
String sql = "select bqt2.mediumb.intkey from bqt2.mediumb full outer join (select bqt2.smallb.intkey from bqt2.smalla left outer join bqt2.smallb on bqt2.smalla.intkey = bqt2.smallb.intkey where bqt2.smalla.stringkey = 1) foo on bqt2.mediumb.intkey = foo.intkey"; //$NON-NLS-1$
// Plan query
@@ -346,11 +343,11 @@
/**
* Same as above but with a 0 group criteria
*/
- public void testFullOuterJoinPreservation1() {
+ @Test public void testFullOuterJoinPreservation1() {
String sql = "select bqt2.mediumb.intkey from bqt2.mediumb full outer join (select bqt2.smallb.intkey from bqt2.smalla inner join bqt2.smallb on bqt2.smalla.intkey = bqt2.smallb.intkey where ? = 1) foo on bqt2.mediumb.intkey = foo.intkey"; //$NON-NLS-1$
// Plan query
- ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.exampleBQTCached(), new String[] {"SELECT g_0.intkey AS c_0 FROM bqt2.mediumb AS g_0 ORDER BY c_0", "SELECT g_1.intkey FROM bqt2.smalla AS g_0, bqt2.smallb AS g_1 WHERE (? = 1) AND (g_0.intkey = g_1.intkey)"}); //$NON-NLS-1$ //$NON-NLS-2$
+ ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.exampleBQTCached(), new String[] {"SELECT g_0.intkey AS c_0 FROM bqt2.mediumb AS g_0 ORDER BY c_0", "SELECT g_1.intkey FROM bqt2.smalla AS g_0, bqt2.smallb AS g_1 WHERE (g_0.intkey = g_1.intkey) AND (? = 1)"}); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
2, // Access
@@ -373,11 +370,11 @@
/**
* Same as above but with a left outer join
*/
- public void testOuterJoinPreservation() {
+ @Test public void testOuterJoinPreservation() {
String sql = "select bqt2.mediumb.intkey from bqt2.mediumb left outer join (select bqt2.smallb.intkey from bqt2.smalla inner join bqt2.smallb on bqt2.smalla.intkey = bqt2.smallb.intkey where ? = 1) foo on bqt2.mediumb.intkey = foo.intkey"; //$NON-NLS-1$
// Plan query
- ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.exampleBQTCached(), new String[] {"SELECT g_0.intkey AS c_0 FROM bqt2.mediumb AS g_0 ORDER BY c_0", "SELECT g_1.intkey FROM bqt2.smalla AS g_0, bqt2.smallb AS g_1 WHERE (? = 1) AND (g_0.intkey = g_1.intkey)"}); //$NON-NLS-1$ //$NON-NLS-2$
+ ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.exampleBQTCached(), new String[] {"SELECT g_0.intkey AS c_0 FROM bqt2.mediumb AS g_0 ORDER BY c_0", "SELECT g_1.intkey FROM bqt2.smalla AS g_0, bqt2.smallb AS g_1 WHERE (g_0.intkey = g_1.intkey) AND (? = 1)"}); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
2, // Access
@@ -397,7 +394,7 @@
});
}
- public void testCopyCriteriaCreatesFalseCriteria() {
+ @Test public void testCopyCriteriaCreatesFalseCriteria() {
String sql = "select bqt1.smalla.intkey, bqt2.smalla.intkey from bqt1.smalla, bqt2.smalla where bqt1.smalla.stringkey = bqt2.smalla.intkey and bqt2.smalla.intkey = 1 and bqt1.smalla.stringkey = '2'"; //$NON-NLS-1$
// Plan query
@@ -406,7 +403,7 @@
TestOptimizer.checkNodeTypes(plan, TestRuleRaiseNull.FULLY_NULL);
}
- public void testPushNonJoinCriteriaWithFalse() {
+ @Test public void testPushNonJoinCriteriaWithFalse() {
String sql = "select bqt1.smalla.intkey, bqt2.smalla.intkey from bqt1.smalla left outer join bqt2.smalla on (bqt1.smalla.stringkey = bqt2.smalla.intkey and bqt2.smalla.intkey = null)"; //$NON-NLS-1$
// Plan query
@@ -430,20 +427,18 @@
});
}
- public void testPushMultiGroupJoinCriteria() {
+ @Test public void testPushMultiGroupJoinCriteria() throws Exception {
String sql = "select bqt1.smalla.intkey, bqt1.smallb.intkey from bqt1.smalla right outer join (bqt1.smallb cross join (bqt1.mediuma cross join bqt1.mediumb)) on bqt1.smalla.stringkey = bqt1.smallb.stringkey" //$NON-NLS-1$
+" where bqt1.smallb.intkey + bqt1.mediuma.intkey + bqt1.mediumb.intkey = 1"; //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("+", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
// Plan query
ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.exampleBQTCached(), null, capFinder,
- new String[] {"SELECT g_3.intkey, g_0.intkey FROM (bqt1.smallb AS g_0 INNER JOIN (bqt1.mediuma AS g_1 CROSS JOIN bqt1.mediumb AS g_2) ON ((g_0.intkey + g_1.intkey) + g_2.intkey) = 1) LEFT OUTER JOIN bqt1.smalla AS g_3 ON g_3.stringkey = g_0.stringkey"}, true); //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] {"SELECT g_3.intkey, g_0.intkey FROM ((bqt1.smallb AS g_0 CROSS JOIN bqt1.mediuma AS g_1) INNER JOIN bqt1.mediumb AS g_2 ON ((g_0.intkey + g_1.intkey) + g_2.intkey) = 1) LEFT OUTER JOIN bqt1.smalla AS g_3 ON g_3.stringkey = g_0.stringkey"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
@@ -451,20 +446,18 @@
/**
* Since the multigroup criteria spans the inner side, it should not be pushed.
*/
- public void testPushMultiGroupJoinCriteria1() {
+ @Test public void testPushMultiGroupJoinCriteria1() {
String sql = "select bqt1.smalla.intkey, bqt1.smallb.intkey from bqt1.smalla right outer join (bqt1.smallb cross join (bqt1.mediuma cross join bqt1.mediumb)) on bqt1.smalla.stringkey = bqt1.smallb.stringkey" //$NON-NLS-1$
+" where bqt1.smalla.intkey + bqt1.mediuma.intkey + bqt1.mediumb.intkey is null"; //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("+", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
// Plan query
ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.exampleBQTCached(), null, capFinder,
- new String[] {"SELECT g_3.intkey, g_0.intkey FROM (bqt1.smallb AS g_0 CROSS JOIN (bqt1.mediuma AS g_1 CROSS JOIN bqt1.mediumb AS g_2)) LEFT OUTER JOIN bqt1.smalla AS g_3 ON g_3.stringkey = g_0.stringkey WHERE ((g_3.intkey + g_1.intkey) + g_2.intkey) IS NULL"}, true); //$NON-NLS-1$
+ new String[] {"SELECT g_3.intkey, g_0.intkey FROM ((bqt1.smallb AS g_0 CROSS JOIN bqt1.mediuma AS g_1) CROSS JOIN bqt1.mediumb AS g_2) LEFT OUTER JOIN bqt1.smalla AS g_3 ON g_3.stringkey = g_0.stringkey WHERE ((g_3.intkey + g_1.intkey) + g_2.intkey) IS NULL"}, true); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
@@ -472,20 +465,18 @@
/**
* Since the multigroup criteria is not null dependent, it should get pushed.
*/
- public void testPushMultiGroupJoinCriteria2() {
+ @Test public void testPushMultiGroupJoinCriteria2() {
String sql = "select bqt1.smalla.intkey, bqt1.smallb.intkey from bqt1.smalla right outer join (bqt1.smallb cross join (bqt1.mediuma cross join bqt1.mediumb)) on bqt1.smalla.stringkey = bqt1.smallb.stringkey" //$NON-NLS-1$
+" where bqt1.smalla.intkey + bqt1.mediuma.intkey + bqt1.mediumb.intkey = 1"; //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("+", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
// Plan query
ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.exampleBQTCached(), null, capFinder,
- new String[] {"SELECT bqt1.smalla.intkey, bqt1.smallb.intkey FROM bqt1.mediuma, bqt1.smallb, bqt1.mediumb, bqt1.smalla WHERE (((bqt1.smalla.intkey + bqt1.mediuma.intkey) + bqt1.mediumb.intkey) = 1) AND (bqt1.smalla.stringkey = bqt1.smallb.stringkey)"}, true); //$NON-NLS-1$
+ new String[] {"SELECT g_3.intkey, g_2.intkey FROM bqt1.mediuma AS g_0, bqt1.mediumb AS g_1, bqt1.smallb AS g_2, bqt1.smalla AS g_3 WHERE (g_3.stringkey = g_2.stringkey) AND (((g_3.intkey + g_0.intkey) + g_1.intkey) = 1)"}, true); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
@@ -494,14 +485,13 @@
/**
* Having criteria should not be considered as regular criteria (unless it contains no aggregate expressions).
*/
- public void testHavingCriteriaNotUsedAsJoinCriteria() {
+ @Test public void testHavingCriteriaNotUsedAsJoinCriteria() {
String sql = "select bqt1.smalla.intkey, max(bqt1.smallb.intkey) from bqt1.smalla, bqt1.smallb where bqt1.smalla.intkey = bqt1.smallb.intnum group by bqt1.smallb.intkey, bqt1.smalla.intkey having max(bqt1.smallb.intkey) = bqt1.smalla.intkey"; //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
+ caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
+ caps.setCapabilitySupport(Capability.QUERY_HAVING, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -515,12 +505,12 @@
/**
* Ensure that subqueries not initially pushable to the source still get replaced
*/
- public void testSubqueryReplacement() {
+ @Test public void testSubqueryReplacement() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
@@ -534,7 +524,7 @@
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
- public void testRulePushNonJoinCriteriaPreservesOuterJoin() throws Exception {
+ @Test public void testRulePushNonJoinCriteriaPreservesOuterJoin() throws Exception {
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
String sql = "select b.intkey from (select intkey from bqt1.smalla) a left outer join (select intkey from bqt1.smallb) b on (1 = 1)"; //$NON-NLS-1$
@@ -544,7 +534,7 @@
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
- public void testOuterToInnerJoinConversion() {
+ @Test public void testOuterToInnerJoinConversion() {
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
String sql = "select bqt1.smalla.intkey from bqt1.smalla left outer join bqt1.smallb on (bqt1.smalla.intkey = bqt1.smallb.intkey) where bqt1.smallb.intnum = 1"; //$NON-NLS-1$
@@ -552,21 +542,21 @@
}
//same as above, but with a right outer join
- public void testOuterToInnerJoinConversion1() {
+ @Test public void testOuterToInnerJoinConversion1() {
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
String sql = "select bqt1.smalla.intkey from bqt1.smalla right outer join bqt1.smallb on (bqt1.smalla.intkey = bqt1.smallb.intkey) where bqt1.smalla.intnum = 1"; //$NON-NLS-1$
TestOptimizer.helpPlan(sql, metadata, new String[]{"SELECT bqt1.smalla.intkey FROM bqt1.smallb, bqt1.smalla WHERE (bqt1.smalla.intkey = bqt1.smallb.intkey) AND (bqt1.smalla.intnum = 1)"}); //$NON-NLS-1$
}
- public void testOuterToInnerJoinConversion2() {
+ @Test public void testOuterToInnerJoinConversion2() {
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
String sql = "select bqt1.smalla.intkey from bqt1.smalla full outer join bqt1.smallb on (bqt1.smalla.intkey = bqt1.smallb.intkey) where bqt1.smallb.intnum = 1"; //$NON-NLS-1$
TestOptimizer.helpPlan(sql, metadata, new String[]{"SELECT bqt1.smalla.intkey FROM bqt1.smallb LEFT OUTER JOIN bqt1.smalla ON bqt1.smalla.intkey = bqt1.smallb.intkey WHERE bqt1.smallb.intnum = 1"}); //$NON-NLS-1$
}
- public void testOuterToInnerJoinConversion3() {
+ @Test public void testOuterToInnerJoinConversion3() {
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
String sql = "select bqt1.smalla.intkey from bqt1.smalla full outer join bqt1.smallb on (bqt1.smalla.intkey = bqt1.smallb.intkey) where bqt1.smalla.intnum = 1"; //$NON-NLS-1$
@@ -576,7 +566,7 @@
/**
* non-depenent criteria on each side of a full outer creates an inner join
*/
- public void testOuterToInnerJoinConversion4() {
+ @Test public void testOuterToInnerJoinConversion4() {
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
String sql = "select bqt1.smalla.intkey from bqt1.smalla full outer join bqt1.smallb on (bqt1.smalla.intkey = bqt1.smallb.intkey) where bqt1.smalla.intnum = bqt1.smallb.intnum"; //$NON-NLS-1$
@@ -586,10 +576,10 @@
/**
* Since concat2 is null dependent the join will not be changed
*/
- public void testOuterToInnerJoinConversionNullDependent() {
+ @Test public void testOuterToInnerJoinConversionNullDependent() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
@@ -602,10 +592,11 @@
TestOptimizer.helpPlan(sql, metadata, null, capFinder, new String[]{"SELECT bqt1.smallb.intnum, bqt1.smalla.intkey FROM bqt1.smalla LEFT OUTER JOIN bqt1.smallb ON bqt1.smalla.intkey = bqt1.smallb.intkey"}, TestOptimizer.SHOULD_SUCCEED); //$NON-NLS-1$
}
- public void testInlineViewToHaving() {
+ @Test public void testInlineViewToHaving() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
+ caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
+ caps.setCapabilitySupport(Capability.QUERY_HAVING, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -642,7 +633,7 @@
*
* This tests now passes with RulePlanJoins
*/
- public void testPathologicalAccessPatternCaseCase2976Defect19018() throws Exception{
+ @Test public void testPathologicalAccessPatternCaseCase2976Defect19018() throws Exception{
FakeMetadataFacade metadata = FakeMetadataFactory.example2();
// add single access pattern to pm1.g4 containing elements e1, e2, and e3
@@ -681,54 +672,25 @@
0 // UnionAll
});
}
-
- public void testHavingCriteriaPushDown() {
- FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
- BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, false);
- capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
-
- ProcessorPlan plan = TestOptimizer.helpPlan("select X.e1 FROM vm1.g1 X group by X.e1 having X.e1 = 1 and sum(X.e2) = 2", FakeMetadataFactory.example1Cached(), null, capFinder, //$NON-NLS-1$
- new String[]{"SELECT pm1.g1.e1, pm1.g1.e2 FROM pm1.g1 WHERE pm1.g1.e1 = '1'"}, true); //$NON-NLS-1$
- TestOptimizer.checkNodeTypes(plan, new int[] {
- 1, // Access
- 0, // DependentAccess
- 0, // DependentSelect
- 0, // DependentProject
- 0, // DupRemove
- 1, // Grouping
- 0, // NestedLoopJoinStrategy
- 0, // MergeJoinStrategy
- 0, // Null
- 0, // PlanExecution
- 1, // Project
- 1, // Select
- 0, // Sort
- 0 // UnionAll
- });
- }
/**
* non-null dependent criteria should get pushed down
*/
- public void testPushMultiGroupCriteriaOuterJoin() {
+ @Test public void testPushMultiGroupCriteriaOuterJoin() {
String sql = "select m.intkey, m.intnum, s.intkey, s.intnum from BQT2.mediuma m left outer join BQT2.smalla s on m.intkey = s.intkey where not (m.intkey + s.intnum = 26)"; //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_NOT, true); //TODO is this being enforced?!
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("+", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT2", caps); //$NON-NLS-1$
@@ -775,60 +737,60 @@
assertEquals(dependent, JoinUtil.isNullDependent(FakeMetadataFactory.example1Cached(), innerGroups, expr));
}
- public void testNullDependentVisitor() throws Exception {
+ @Test public void testNullDependentVisitor() throws Exception {
helpTestNullDependentVisitor("nvl(pm1.g1.e1, 1) = 1", true); //$NON-NLS-1$
}
- public void testNullDependentVisitor1() throws Exception {
+ @Test public void testNullDependentVisitor1() throws Exception {
helpTestNullDependentVisitor("ifnull(pm1.g1.e1, 1) = 1", true); //$NON-NLS-1$
}
- public void testNullDependentVisitor2() throws Exception {
+ @Test public void testNullDependentVisitor2() throws Exception {
helpTestNullDependentVisitor("rand(pm1.g1.e2) = 1", true); //$NON-NLS-1$
}
- public void testNullDependentVisitor3() throws Exception {
+ @Test public void testNullDependentVisitor3() throws Exception {
helpTestNullDependentVisitor("concat2(pm1.g1.e1, pm1.g1.e2) = '1'", false); //$NON-NLS-1$
}
- public void testNullDependentVisitor4() throws Exception {
+ @Test public void testNullDependentVisitor4() throws Exception {
helpTestNullDependentVisitor("nvl(pm1.g2.e1, 1) = 1", true); //$NON-NLS-1$
}
- public void testNullDependentVisitor5() throws Exception {
+ @Test public void testNullDependentVisitor5() throws Exception {
helpTestNullDependentVisitor("pm1.g1.e1 is null", true); //$NON-NLS-1$
}
- public void testNullDependentVisitor6() throws Exception {
+ @Test public void testNullDependentVisitor6() throws Exception {
helpTestNullDependentVisitor("pm1.g1.e1 is not null", false); //$NON-NLS-1$
}
- public void testNullDependentVisitor7() throws Exception {
+ @Test public void testNullDependentVisitor7() throws Exception {
helpTestNullDependentVisitor("pm1.g2.e1 is not null", true); //$NON-NLS-1$
}
//this is an important test, the or causes this criteria to be null dependent
- public void testNullDependentVisitor8() throws Exception {
+ @Test public void testNullDependentVisitor8() throws Exception {
helpTestNullDependentVisitor("pm1.g1.e1 = 1 or pm1.g2.e1 = 1", true); //$NON-NLS-1$
}
- public void testNullDependentVisitor9() throws Exception {
+ @Test public void testNullDependentVisitor9() throws Exception {
helpTestNullDependentVisitor("pm1.g1.e1 = 1 or pm1.g1.e2 = 2", false); //$NON-NLS-1$
}
- public void testNullDependentVisitor10() throws Exception {
+ @Test public void testNullDependentVisitor10() throws Exception {
helpTestNullDependentVisitor("pm1.g1.e1 in (1, pm1.g2.e1)", false); //$NON-NLS-1$
}
- public void testNullDependentVisitor11() throws Exception {
+ @Test public void testNullDependentVisitor11() throws Exception {
helpTestNullDependentVisitor("pm1.g2.e1 in (1, pm1.g1.e1)", true); //$NON-NLS-1$
}
- public void testIsNullDependent() throws Exception {
+ @Test public void testIsNullDependent() throws Exception {
helpTestNullDependent("pm1.g1.e2 + 1", false); //$NON-NLS-1$
}
- public void testIsNullDependent1() throws Exception {
+ @Test public void testIsNullDependent1() throws Exception {
helpTestNullDependent("pm1.g2.e2 + 1", true); //$NON-NLS-1$
}
@@ -836,17 +798,14 @@
* The criteria will still get pushed to appropriate location, and
* the other side of the join will be removed
*/
- public void testCriteriaPushedWithUnionJoin() throws Exception {
+ @Test public void testCriteriaPushedWithUnionJoin() throws Exception {
String sql = "select * from pm1.g1 union join pm1.g2 where g1.e1 = 1"; //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
@@ -877,20 +836,17 @@
/**
* union joins allow RuleRemoveVirtual to still take effect
*/
- public void testCriteriaPushedWithUnionJoin1() throws Exception {
+ @Test public void testCriteriaPushedWithUnionJoin1() throws Exception {
String sql = "select vm1.g1.e1 from vm1.g1 union join vm1.g2 where g2.e1 = 1"; //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
@@ -898,8 +854,8 @@
ProcessorPlan plan = TestOptimizer.helpPlan(sql, metadata,
null, capFinder,
new String[] {
- "SELECT g1__1.e1 FROM pm1.g1 AS g1__1, pm1.g2 WHERE (g1__1.e1 = '1') AND (pm1.g2.e1 = '1')" }, //$NON-NLS-1$
- TestOptimizer.SHOULD_SUCCEED);
+ "SELECT g_0.e1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE (g_0.e1 = g_1.e1) AND (g_0.e1 = '1') AND (g_1.e1 = '1')" }, //$NON-NLS-1$
+ ComparisonMode.EXACT_COMMAND_STRING);
TestOptimizer.checkNodeTypes(plan, new int[] {
1, // Access
@@ -923,22 +879,19 @@
/**
* null-dependent expressions should prevent merging of virtual layers
*/
- public void testNullDependentPreventsMerge() throws Exception {
+ @Test public void testNullDependentPreventsMerge() throws Exception {
String sql = "select x from pm1.g1 left outer join (select nvl(e2, 1) x from pm1.g2) y on e2 = x"; //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true);
- caps.setFunctionSupport(SourceSystemFunctions.IFNULL, true); //$NON-NLS-1$
+ caps.setFunctionSupport(SourceSystemFunctions.IFNULL, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
@@ -957,13 +910,13 @@
* RuleCopyCriteria will remove the first join criteria and the source doesn't support the * function. However we still
* want the join to be pushed since it originally contained proper criteria.
*/
- public void testCopyCriteriaJoinPushed() throws Exception {
- String sql = "select pm1.g1.e1 from pm1.g1, pm1.g2 where pm1.g1.e1 = pm1.g2.e1 and pm1.g1.e1 = 5 and pm1.g1.e2 * 5 = pm1.g2.e2";
+ @Test public void testCopyCriteriaJoinPushed() throws Exception {
+ String sql = "select pm1.g1.e1 from pm1.g1, pm1.g2 where pm1.g1.e1 = pm1.g2.e1 and pm1.g1.e1 = 5 and pm1.g1.e2 * 5 = pm1.g2.e2"; //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
ProcessorPlan plan = TestOptimizer.helpPlan(sql,metadata,
- new String[] { "SELECT g_0.e2, g_1.e2, g_0.e1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE (g_0.e1 = '5') AND (g_1.e1 = '5')" }); //$NON-NLS-1$
+ new String[] { "SELECT g_0.e2, g_1.e2, g_0.e1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE (g_0.e1 = g_1.e1) AND (g_0.e1 = '5') AND (g_1.e1 = '5')" }, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, new int[] {
1, // Access
Added: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestJoinPushdownRestrictions.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestJoinPushdownRestrictions.java (rev 0)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestJoinPushdownRestrictions.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -0,0 +1,143 @@
+/*
+ * 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 com.metamatrix.query.optimizer;
+
+import org.junit.Test;
+import org.teiid.connector.api.ConnectorCapabilities.SupportedJoinCriteria;
+
+import com.metamatrix.query.optimizer.capabilities.BasicSourceCapabilities;
+import com.metamatrix.query.optimizer.capabilities.FakeCapabilitiesFinder;
+import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
+import com.metamatrix.query.unittest.FakeMetadataFactory;
+
+public class TestJoinPushdownRestrictions {
+
+ @Test public void testThetaRestriction() throws Exception {
+ String sql = "select pm1.g1.e2, pm1.g2.e2 from pm1.g1 inner join pm1.g2 on (pm1.g1.e2 + pm1.g2.e2 = 5)"; //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
+ caps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, SupportedJoinCriteria.THETA);
+ caps.setFunctionSupport("+", true); //$NON-NLS-1$
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
+ new String[] {"SELECT g_0.e2 FROM pm1.g2 AS g_0", "SELECT g_0.e2 FROM pm1.g1 AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+
+ caps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, SupportedJoinCriteria.ANY);
+
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
+ new String[] {"SELECT g_0.e2, g_1.e2 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE (g_0.e2 + g_1.e2) = 5"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ }
+
+ @Test public void testEquiRestriction() throws Exception {
+ String sql = "select pm1.g1.e2, pm1.g2.e2 from pm1.g1 inner join pm1.g2 on (pm1.g1.e2 < pm1.g2.e2)"; //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
+ caps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, SupportedJoinCriteria.EQUI);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
+ new String[] {"SELECT g_0.e2 FROM pm1.g2 AS g_0", "SELECT g_0.e2 FROM pm1.g1 AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+
+ caps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, SupportedJoinCriteria.THETA);
+
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
+ new String[] {"SELECT g_0.e2, g_1.e2 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE g_0.e2 < g_1.e2"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ }
+
+ @Test public void testKeyRestriction() throws Exception {
+ String sql = "select pm1.g1.e2, pm1.g2.e2 from pm1.g1 inner join pm1.g2 on (pm1.g1.e2 = pm1.g2.e2)"; //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
+ caps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, SupportedJoinCriteria.KEY);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
+ new String[] {"SELECT g_0.e2 AS c_0 FROM pm1.g1 AS g_0 ORDER BY c_0", "SELECT g_0.e2 AS c_0 FROM pm1.g2 AS g_0 ORDER BY c_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+
+ caps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, SupportedJoinCriteria.EQUI);
+
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
+ new String[] {"SELECT g_0.e2, g_1.e2 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE g_0.e2 = g_1.e2"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ }
+
+ @Test public void testKeyPasses() throws Exception {
+ String sql = "select a.e1, b.e1 from pm4.g1 a, pm4.g2 b where a.e1 = b.e1 and a.e2 = b.e2"; //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
+ caps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, SupportedJoinCriteria.KEY);
+ capFinder.addCapabilities("pm4", caps); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example4(),
+ new String[] {"SELECT g_0.e1, g_1.e1 FROM pm4.g1 AS g_0, pm4.g2 AS g_1 WHERE (g_0.e1 = g_1.e1) AND (g_0.e2 = g_1.e2)"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ }
+
+ @Test public void testCrossJoinWithRestriction() throws Exception {
+ String sql = "select pm1.g1.e2, pm1.g2.e2 from pm1.g1, pm1.g2"; //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
+ caps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, SupportedJoinCriteria.THETA);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
+ new String[] {"SELECT g_0.e2 FROM pm1.g2 AS g_0", "SELECT g_0.e2 FROM pm1.g1 AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ @Test public void testOuterRestriction() throws Exception {
+ String sql = "select pm1.g1.e2, pm1.g2.e2 from pm1.g1 inner join pm1.g2 on (pm1.g1.e2 + pm1.g2.e2 = 5)"; //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, false);
+ caps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, SupportedJoinCriteria.ANY);
+ caps.setFunctionSupport("+", true); //$NON-NLS-1$
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
+ new String[] {"SELECT g_0.e2 FROM pm1.g2 AS g_0", "SELECT g_0.e2 FROM pm1.g1 AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ @Test public void testCriteriaRestrictionWithNonJoinCriteria() throws Exception {
+ String sql = "select pm1.g1.e2, pm1.g2.e2 from pm1.g1 left outer join pm1.g2 on (pm1.g1.e2 = pm1.g2.e2 and pm1.g2.e1 = 'hello')"; //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
+ caps.setSourceProperty(Capability.JOIN_CRITERIA_ALLOWED, SupportedJoinCriteria.THETA);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
+ new String[] {"SELECT g_0.e2 AS c_0 FROM pm1.g1 AS g_0 ORDER BY c_0", "SELECT g_0.e2 AS c_0 FROM pm1.g2 AS g_0 WHERE g_0.e1 = 'hello' ORDER BY c_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+}
Property changes on: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestJoinPushdownRestrictions.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestLimit.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestLimit.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestLimit.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -698,9 +698,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.ROW_LIMIT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
// pm3 model supports order by
capFinder.addCapabilities("pm3", caps); //$NON-NLS-1$
@@ -850,11 +848,10 @@
String sql = "select a from (SELECT MAX(e2) as a FROM pm1.g1 GROUP BY e2 LIMIT 1) x where a = 0"; //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.ROW_LIMIT, true);
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
+ caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
+ caps.setCapabilitySupport(Capability.QUERY_HAVING, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptimizer.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptimizer.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptimizer.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -130,36 +130,20 @@
public static BasicSourceCapabilities getTypicalCapabilities() {
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_SELECT_DISTINCT, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_BETWEEN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_NE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_LT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_LE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE_ESCAPE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_ISNULL, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_OR, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_NOT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_EXISTS, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_ALL, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_BETWEEN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE_ESCAPE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_ISNULL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_OR, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, false);
- caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, false);
- caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, false);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
// set typical max set size
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
@@ -169,7 +153,7 @@
public static CapabilitiesFinder getGenericFinder(boolean supportsJoins) {
final BasicSourceCapabilities caps = getTypicalCapabilities();
if (!supportsJoins) {
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, false);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, false);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, false);
}
CapabilitiesFinder finder = new CapabilitiesFinder() {
@@ -492,8 +476,8 @@
public static void checkSubPlanCount(ProcessorPlan plan, int expectedCount) {
assertEquals("Checking plan count", expectedCount, plan.getChildPlans().size()); //$NON-NLS-1$
}
-
- public static FakeMetadataFacade example1() {
+
+ public static FakeMetadataFacade example1() {
// Create models
FakeMetadataObject pm1 = FakeMetadataFactory.createPhysicalModel("pm1"); //$NON-NLS-1$
FakeMetadataObject pm2 = FakeMetadataFactory.createPhysicalModel("pm2"); //$NON-NLS-1$
@@ -810,9 +794,9 @@
checkNodeTypes(plan, FULL_PUSHDOWN);
}
- public void testPhysicalVirtualJoinWithCriteria() {
+ public void testPhysicalVirtualJoinWithCriteria() throws Exception {
ProcessorPlan plan = helpPlan("SELECT vm1.g2.e1 from vm1.g2, pm1.g3 where vm1.g2.e1=pm1.g3.e1 and vm1.g2.e2 > 0", FakeMetadataFactory.example1Cached(), //$NON-NLS-1$
- new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1, pm1.g3 AS g_2 WHERE (g_0.e1 = g_2.e1) AND (g_0.e1 = g_1.e1) AND (g_0.e2 > 0)" } ); //$NON-NLS-1$
+ new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1, pm1.g3 AS g_2 WHERE (g_0.e1 = g_1.e1) AND (g_0.e1 = g_2.e1) AND (g_0.e2 > 0)" }, ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$
checkNodeTypes(plan, FULL_PUSHDOWN);
}
@@ -1840,7 +1824,7 @@
public void testPushSelfJoin1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -1861,7 +1845,7 @@
public void testPushSelfJoin2() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -1897,7 +1881,7 @@
public void testPushOuterJoin1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -1917,8 +1901,7 @@
public void testPushOuterJoin2() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
// Add join capability to pm1
@@ -1953,10 +1936,9 @@
public void testPushOuterJoin3() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
// Add join capability to pm1
@@ -2091,9 +2073,7 @@
public void testPushHaving1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -2225,9 +2205,7 @@
public void testPushAggregate4() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
@@ -2249,9 +2227,7 @@
public void testPushAggregate5() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, false);
@@ -2358,13 +2334,10 @@
public void testPushAggregate8() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
@@ -2388,11 +2361,11 @@
checkNodeTypes(plan, FULL_PUSHDOWN);
}
- public void testQueryManyJoin() {
+ public void testQueryManyJoin() throws Exception {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
ProcessorPlan plan = helpPlan("SELECT pm1.g1.e1 FROM pm1.g1 JOIN ((pm1.g2 JOIN pm1.g3 ON pm1.g2.e1=pm1.g3.e1) JOIN pm1.g4 ON pm1.g3.e1=pm1.g4.e1) ON pm1.g1.e1=pm1.g4.e1", //$NON-NLS-1$
metadata,
- new String[] { "SELECT pm1.g1.e1 FROM pm1.g1, pm1.g2, pm1.g3, pm1.g4 WHERE (pm1.g1.e1 = pm1.g4.e1) AND (pm1.g3.e1 = pm1.g4.e1) AND (pm1.g2.e1 = pm1.g3.e1)"} ); //$NON-NLS-1$
+ new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1, pm1.g3 AS g_2, pm1.g4 AS g_3 WHERE (g_1.e1 = g_2.e1) AND (g_2.e1 = g_3.e1) AND (g_0.e1 = g_3.e1)"}, ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$
checkNodeTypes(plan, FULL_PUSHDOWN);
}
@@ -2407,10 +2380,7 @@
public void testPushFunctionInCriteria1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -2430,10 +2400,7 @@
public void testPushFunctionInSelect1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
caps.setFunctionSupport(SourceSystemFunctions.LCASE, true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -2454,10 +2421,7 @@
public void testPushFunctionInSelect2() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
caps.setFunctionSupport(SourceSystemFunctions.LCASE, true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -2478,10 +2442,7 @@
public void testPushFunctionInSelect3() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
caps.setFunctionSupport(SourceSystemFunctions.LCASE, false); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -2517,10 +2478,7 @@
public void testPushFunctionInSelect4() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
caps.setFunctionSupport(SourceSystemFunctions.LCASE, true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -2541,10 +2499,7 @@
public void testPushFunctionInSelect5() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
caps.setFunctionSupport(SourceSystemFunctions.LCASE, true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -2565,7 +2520,6 @@
public void testPushFunctionInSelect6_defect_10081() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("upper", true); //$NON-NLS-1$
caps.setFunctionSupport("lower", false); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -2601,10 +2555,7 @@
public void testPushFunctionInSelectWithOrderBy1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
caps.setFunctionSupport(SourceSystemFunctions.LCASE, true); //$NON-NLS-1$
@@ -2627,10 +2578,7 @@
public void testPushFunctionInSelectWithOrderBy1a() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
caps.setFunctionSupport(SourceSystemFunctions.LCASE, true); //$NON-NLS-1$
@@ -2653,10 +2601,7 @@
public void testPushFunctionInSelectWithOrderBy2() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
caps.setFunctionSupport(SourceSystemFunctions.LCASE, true); //$NON-NLS-1$
@@ -2678,11 +2623,8 @@
public void testPushFunctionInJoin1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -2703,11 +2645,8 @@
public void testPushFunctionInJoin2() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -2744,11 +2683,8 @@
public void testPushFunctionInJoin3() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setFunctionSupport(SourceSystemFunctions.UCASE, true); //$NON-NLS-1$
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -2785,11 +2721,8 @@
public void testUnionOverFunctions() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -2903,8 +2836,8 @@
public void testCrossJoinNoElementCriteriaOptimization4() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = helpPlan("select Y.e1, Y.e2 FROM vm1.g1 X, vm1.g1 Y where {b'true'} in (select e3 FROM vm1.g1)", example1(), null, capFinder, //$NON-NLS-1$
@@ -2943,7 +2876,7 @@
public void testCopyCriteriaWithOuterJoin2_defect10050(){
ProcessorPlan plan = helpPlan("select pm2.g1.e1, pm2.g2.e1 from pm2.g1 left outer join pm2.g2 on pm2.g1.e1=pm2.g2.e1 and pm2.g1.e2=pm2.g2.e2 where pm2.g1.e1 = 'a' and pm2.g1.e2 = 1", example1(), //$NON-NLS-1$
- new String[] { "SELECT pm2.g1.e1, pm2.g2.e1 FROM pm2.g1 LEFT OUTER JOIN pm2.g2 ON pm2.g2.e2 = 1 AND pm2.g2.e1 = 'a' WHERE (pm2.g1.e1 = 'a') AND (pm2.g1.e2 = 1)" }); //$NON-NLS-1$
+ new String[] { "SELECT g_0.e1, g_1.e1 FROM pm2.g1 AS g_0 LEFT OUTER JOIN pm2.g2 AS g_1 ON g_0.e1 = g_1.e1 AND g_0.e2 = g_1.e2 AND g_1.e2 = 1 AND g_1.e1 = 'a' WHERE (g_0.e1 = 'a') AND (g_0.e2 = 1)" }); //$NON-NLS-1$
checkNodeTypes(plan, FULL_PUSHDOWN);
}
@@ -2954,7 +2887,7 @@
ProcessorPlan plan = helpPlan(
"select pm2.g1.e1, pm2.g2.e1, pm2.g3.e1 from ( (pm2.g1 right outer join pm2.g2 on pm2.g1.e1=pm2.g2.e1) right outer join pm2.g3 on pm2.g2.e1=pm2.g3.e1) where pm2.g3.e1 = 'a'", example1(), //$NON-NLS-1$
- new String[] { "SELECT pm2.g1.e1, pm2.g2.e1, pm2.g3.e1 FROM pm2.g3 LEFT OUTER JOIN (pm2.g2 LEFT OUTER JOIN pm2.g1 ON pm2.g1.e1 = 'a') ON pm2.g2.e1 = 'a' WHERE pm2.g3.e1 = 'a'" }); //$NON-NLS-1$
+ new String[] { "SELECT g_2.e1, g_1.e1, g_0.e1 FROM pm2.g3 AS g_0 LEFT OUTER JOIN (pm2.g2 AS g_1 LEFT OUTER JOIN pm2.g1 AS g_2 ON g_2.e1 = g_1.e1 AND g_2.e1 = 'a') ON g_1.e1 = g_0.e1 AND g_1.e1 = 'a' WHERE g_0.e1 = 'a'" }); //$NON-NLS-1$
checkNodeTypes(plan, FULL_PUSHDOWN);
}
@@ -2988,14 +2921,14 @@
public void testCleanCriteria2(){
ProcessorPlan plan = helpPlan("select pm2.g1.e1, pm2.g2.e1 from pm2.g1, pm2.g2 where pm2.g1.e1=pm2.g2.e1 and pm2.g1.e1 = 'a'", example1(), //$NON-NLS-1$
- new String[] { "SELECT pm2.g1.e1, pm2.g2.e1 FROM pm2.g1, pm2.g2 WHERE (pm2.g1.e1 = 'a') AND (pm2.g2.e1 = 'a')" }); //$NON-NLS-1$
+ new String[] { "SELECT g_0.e1, g_1.e1 FROM pm2.g1 AS g_0, pm2.g2 AS g_1 WHERE (g_0.e1 = g_1.e1) AND (g_0.e1 = 'a') AND (g_1.e1 = 'a')" }); //$NON-NLS-1$
checkNodeTypes(plan, FULL_PUSHDOWN);
}
public void testCleanCriteria3(){
ProcessorPlan plan = helpPlan("select pm2.g1.e1, pm2.g2.e1 from pm2.g1 inner join pm2.g2 on pm2.g1.e1=pm2.g2.e1 where pm2.g1.e1 = 'a'", example1(), //$NON-NLS-1$
- new String[] { "SELECT pm2.g1.e1, pm2.g2.e1 FROM pm2.g1, pm2.g2 WHERE (pm2.g1.e1 = 'a') AND (pm2.g2.e1 = 'a')" }); //$NON-NLS-1$
+ new String[] { "SELECT g_0.e1, g_1.e1 FROM pm2.g1 AS g_0, pm2.g2 AS g_1 WHERE (g_0.e1 = g_1.e1) AND (g_0.e1 = 'a') AND (g_1.e1 = 'a')" }); //$NON-NLS-1$
checkNodeTypes(plan, FULL_PUSHDOWN);
}
@@ -3003,7 +2936,7 @@
public void testPushSubqueryInWhereClause1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = helpPlan("Select e1 from pm1.g1 where e1 in (select e1 FROM pm1.g2)", example1(), //$NON-NLS-1$
@@ -3015,7 +2948,7 @@
public void testPushSubqueryInWhereClause2() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -3032,10 +2965,8 @@
public void testPushSubqueryInWhereClause3() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setFunctionSupport("ltrim", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", new BasicSourceCapabilities()); //$NON-NLS-1$
@@ -3052,10 +2983,8 @@
public void testPushSubqueryInWhereClause4() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setFunctionSupport("ltrim", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", new BasicSourceCapabilities()); //$NON-NLS-1$
@@ -3074,13 +3003,11 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
@@ -3099,14 +3026,11 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
@@ -3127,16 +3051,12 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
@@ -3157,10 +3077,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -3197,10 +3114,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -3239,10 +3153,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -3276,15 +3187,11 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm2", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.example1();
@@ -3321,14 +3228,10 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
capFinder.addCapabilities("pm2", caps); //$NON-NLS-1$
@@ -3366,12 +3269,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -3413,12 +3313,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -3458,10 +3355,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
@@ -3502,8 +3396,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1));
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -3537,12 +3430,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -3599,11 +3489,8 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, false);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -3751,18 +3638,16 @@
});
}
- public void testDefect12298(){
+ public void testDefect12298() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_NE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
capFinder.addCapabilities("SystemPhysical", caps); //$NON-NLS-1$
ProcessorPlan plan = helpPlan(
@@ -3771,9 +3656,9 @@
FakeMetadataFactory.exampleSystemPhysical(),
null, capFinder,
new String[] {
- "SELECT RT_VIRTUAL_DBS__1.VDB_NM, RT_GRPS__1.PATH_1, RT_ELMNTS__1.ELMNT_NM, RT_GRPS.PATH_1, RT_ELMNTS.ELMNT_NM, RT_KY_IDX_ELMNTS.POSITION, RT_KY_IDXES.KEY_NM, RT_KY_IDXES__1.KEY_NM FROM ((((SystemPhysical.RT_KY_IDXES AS RT_KY_IDXES__1 INNER JOIN ((SystemPhysical.RT_GRPS AS RT_GRPS__1 INNER JOIN ((SystemPhysical.RT_VIRTUAL_DBS AS RT_VIRTUAL_DBS__1 INNER JOIN SystemPhysical.RT_VDB_MDLS AS RT_VDB_MDLS__1 ON RT_VIRTUAL_DBS__1.VDB_UID = RT_VDB_MDLS__1.VDB_UID AND RT_VDB_MDLS__1.VISIBILITY = 0) INNER JOIN SystemPhysical.RT_MDLS AS RT_MDLS__1 ON RT_VDB_MDLS__1.MDL_UID = RT_MDLS__1.MDL_UID) ON RT_GRPS__1.MDL_UID = RT_MDLS__1.MDL_UID AND RT_GRPS__1.TABLE_TYPE <> 5) INNER JOIN SystemPhysical.RT_TABLE_TYPES AS RT_TABLE_TYPES__1 ON RT_GRPS__1.TABLE_TYPE = RT_TABLE_TYPES__1.TABLE_TYPE_CODE AND RT_TABLE_TYPES__1.TABLE_TYPE_CODE <> 5) ON RT_KY_IDXES__1.GRP_UID = RT_GRPS__1.GRP_UID) INNER JOIN SystemPhysical.RT_KEY_TYPES AS RT_KEY_TYPES__1 ON RT_KY_IDXES__1.KEY_!
TYPE = RT_KEY_TYPES__1.KEY_TYPE_CODE AND RT_KEY_TYPES__1.KEY_TYPE_NM = 'Primary') LEFT OUTER JOIN SystemPhysical.RT_KY_IDX_ELMNTS AS RT_KY_IDX_ELMNTS__1 ON RT_KY_IDX_ELMNTS__1.KEY_UID = RT_KY_IDXES__1.KEY_UID) INNER JOIN SystemPhysical.RT_ELMNTS AS RT_ELMNTS__1 ON RT_KY_IDX_ELMNTS__1.ELMNT_UID = RT_ELMNTS__1.ELMNT_UID) INNER JOIN ((((SystemPhysical.RT_KY_IDXES AS RT_KY_IDXES INNER JOIN ((SystemPhysical.RT_GRPS AS RT_GRPS INNER JOIN ((SystemPhysical.RT_VIRTUAL_DBS AS RT_VIRTUAL_DBS INNER JOIN SystemPhysical.RT_VDB_MDLS AS RT_VDB_MDLS ON RT_VIRTUAL_DBS.VDB_UID = RT_VDB_MDLS.VDB_UID AND RT_VDB_MDLS.VISIBILITY = 0) INNER JOIN SystemPhysical.RT_MDLS AS RT_MDLS ON RT_VDB_MDLS.MDL_UID = RT_MDLS.MDL_UID) ON RT_GRPS.MDL_UID = RT_MDLS.MDL_UID AND RT_GRPS.TABLE_TYPE <> 5 AND RT_GRPS.PATH_1 = 'PartsOracle.SUPPLIER_PARTS') INNER JOIN SystemPhysical.RT_TABLE_TYPES AS RT_TABLE_TYPES ON RT_GRPS.TABLE_TYPE = RT_TABLE_TYPES.TABLE_TYPE_CODE AND RT_TABLE_TYPES.TABLE_TYPE_CODE <> 5) ON RT_KY_ID!
XES.GRP_UID = RT_GRPS.GRP_UID) INNER JOIN SystemPhysical.RT_KEY_TYPES
AS RT_KEY_TYPES ON RT_KY_IDXES.KEY_TYPE = RT_KEY_TYPES.KEY_TYPE_CODE AND RT_KEY_TYPES.KEY_TYPE_NM = 'Foreign') LEFT OUTER JOIN SystemPhysical.RT_KY_IDX_ELMNTS AS RT_KY_IDX_ELMNTS ON RT_KY_IDX_ELMNTS.KEY_UID = RT_KY_IDXES.KEY_UID) INNER JOIN SystemPhysical.RT_ELMNTS AS RT_ELMNTS ON RT_KY_IDX_ELMNTS.ELMNT_UID = RT_ELMNTS.ELMNT_UID) ON RT_KY_IDXES__1.KEY_UID = RT_KY_IDXES.REF_KEY_UID AND RT_KY_IDX_ELMNTS__1.POSITION = RT_KY_IDX_ELMNTS.POSITION" //$NON-NLS-1$
+ "SELECT g_2.VDB_NM, g_1.PATH_1, g_8.ELMNT_NM, g_10.PATH_1, g_17.ELMNT_NM, g_16.POSITION, g_9.KEY_NM, g_0.KEY_NM FROM ((((SystemPhysical.RT_KY_IDXES AS g_0 INNER JOIN ((SystemPhysical.RT_GRPS AS g_1 INNER JOIN ((SystemPhysical.RT_VIRTUAL_DBS AS g_2 INNER JOIN SystemPhysical.RT_VDB_MDLS AS g_3 ON g_2.VDB_UID = g_3.VDB_UID) INNER JOIN SystemPhysical.RT_MDLS AS g_4 ON g_3.MDL_UID = g_4.MDL_UID) ON g_1.MDL_UID = g_4.MDL_UID) INNER JOIN SystemPhysical.RT_TABLE_TYPES AS g_5 ON g_1.TABLE_TYPE = g_5.TABLE_TYPE_CODE) ON g_0.GRP_UID = g_1.GRP_UID) INNER JOIN SystemPhysical.RT_KEY_TYPES AS g_6 ON g_0.KEY_TYPE = g_6.KEY_TYPE_CODE) LEFT OUTER JOIN SystemPhysical.RT_KY_IDX_ELMNTS AS g_7 ON g_7.KEY_UID = g_0.KEY_UID) INNER JOIN SystemPhysical.RT_ELMNTS AS g_8 ON g_7.ELMNT_UID = g_8.ELMNT_UID) INNER JOIN ((((SystemPhysical.RT_KY_IDXES AS g_9 INNER JOIN ((SystemPhysical.RT_GRPS AS g_10 INNER JOIN ((SystemPhysical.RT_VIRTUAL_DBS AS g_11 INNER JOIN SystemPhysical.RT!
_VDB_MDLS AS g_12 ON g_11.VDB_UID = g_12.VDB_UID) INNER JOIN SystemPhysical.RT_MDLS AS g_13 ON g_12.MDL_UID = g_13.MDL_UID) ON g_10.MDL_UID = g_13.MDL_UID) INNER JOIN SystemPhysical.RT_TABLE_TYPES AS g_14 ON g_10.TABLE_TYPE = g_14.TABLE_TYPE_CODE) ON g_9.GRP_UID = g_10.GRP_UID) INNER JOIN SystemPhysical.RT_KEY_TYPES AS g_15 ON g_9.KEY_TYPE = g_15.KEY_TYPE_CODE) LEFT OUTER JOIN SystemPhysical.RT_KY_IDX_ELMNTS AS g_16 ON g_16.KEY_UID = g_9.KEY_UID) INNER JOIN SystemPhysical.RT_ELMNTS AS g_17 ON g_16.ELMNT_UID = g_17.ELMNT_UID) ON g_0.KEY_UID = g_9.REF_KEY_UID AND g_7.POSITION = g_16.POSITION WHERE (g_1.TABLE_TYPE <> 5) AND (g_3.VISIBILITY = 0) AND (g_5.TABLE_TYPE_CODE <> 5) AND (g_6.KEY_TYPE_NM = 'Primary') AND (g_10.TABLE_TYPE <> 5) AND (g_10.PATH_1 = 'PartsOracle.SUPPLIER_PARTS') AND (g_12.VISIBILITY = 0) AND (g_14.TABLE_TYPE_CODE <> 5) AND (g_15.KEY_TYPE_NM = 'Foreign')" //$NON-NLS-1$
},
- SHOULD_SUCCEED);
+ ComparisonMode.EXACT_COMMAND_STRING);
checkNodeTypes(plan, new int[] {
1, // Access
0, // DependentAccess
@@ -3903,7 +3788,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, hasUnionCapability);
caps.setCapabilitySupport((Capability.QUERY_ORDERBY), hasUnionOrderByCapability);
caps.setCapabilitySupport((Capability.QUERY_SET_ORDER_BY), hasUnionOrderByCapability);
@@ -4001,7 +3886,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4031,7 +3916,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4061,7 +3946,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4091,7 +3976,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4108,7 +3993,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4141,7 +4026,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4158,7 +4043,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4190,10 +4075,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, false);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("+", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4209,11 +4093,10 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, false);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("+", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4229,7 +4112,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
caps.setCapabilitySupport(Capability.QUERY_SELECT_DISTINCT, true);
@@ -4250,10 +4133,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, false);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("+", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4284,10 +4166,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, false);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("+", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4303,10 +4184,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -4322,7 +4202,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, true);
capFinder.addCapabilities("pm3", caps); //$NON-NLS-1$
@@ -4339,7 +4219,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4373,10 +4253,10 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
ProcessorPlan plan = helpPlan("SELECT * FROM (SELECT intkey, 5 FROM BQT1.SmallA UNION ALL SELECT intnum, 10 FROM bqt1.smalla) AS x", //$NON-NLS-1$
@@ -4391,9 +4271,7 @@
public void testPushCaseInSelect() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_CASE, true);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -4414,11 +4292,8 @@
public void testCantPushCaseInSelectWithFunction() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_CASE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
// Add join capability to pm1
@@ -4452,9 +4327,7 @@
public void testPushSearchedCaseInSelect() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -4474,11 +4347,8 @@
public void testCantPushSearchedCaseInSelectWithFunction() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
// Add join capability to pm1
@@ -4514,11 +4384,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, true);
caps.setFunctionSupport("xyz", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -4562,13 +4430,10 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4608,13 +4473,10 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4655,13 +4517,10 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4697,23 +4556,21 @@
});
}
- public void testCase2125() {
+ public void testCase2125() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_AVG, false);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -4726,8 +4583,8 @@
ProcessorPlan plan = helpPlan(sql,
FakeMetadataFactory.exampleBQTCached(),
null, capFinder,
- new String[] {"SELECT P.longnum, O.datevalue, OD.IntKEy, P.IntKEy, O.IntKey FROM bqt1.smalla AS OD, bqt1.smallb AS P, bqt1.mediuma AS O WHERE (O.IntKey = OD.IntKey) AND (OD.StringKey = P.StringKey) AND (OD.IntNum > (SELECT SUM(IntNum) FROM bqt1.smalla))"}, //$NON-NLS-1$
- SHOULD_SUCCEED );
+ new String[] {"SELECT g_1.longnum, g_2.datevalue, g_0.IntKEy, g_1.IntKEy, g_2.IntKey FROM bqt1.smalla AS g_0, bqt1.smallb AS g_1, bqt1.mediuma AS g_2 WHERE (g_0.StringKey = g_1.StringKey) AND (g_2.IntKey = g_0.IntKey) AND (g_0.IntNum > (SELECT SUM(g_3.IntNum) FROM bqt1.smalla AS g_3))"}, //$NON-NLS-1$
+ ComparisonMode.EXACT_COMMAND_STRING );
checkNodeTypes(plan, new int[] {
1, // Access
@@ -4754,8 +4611,8 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
@@ -4793,8 +4650,8 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
@@ -4832,8 +4689,8 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
@@ -4872,12 +4729,10 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
ProcessorPlan plan = helpPlan(sql,
@@ -4892,10 +4747,8 @@
public void testUpdateWithElement() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
String sql = "UPDATE BQT1.SmallA SET IntKey = IntKey + 1"; //$NON-NLS-1$
@@ -4912,12 +4765,10 @@
public void testCase2187() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
@@ -4941,7 +4792,7 @@
public void testBusObjQuestion1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -4988,7 +4839,7 @@
public void testBusObjQuestion2() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -5036,7 +4887,7 @@
public void testBusObjQuestion2Hint() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -5084,7 +4935,7 @@
public void testBusObjQuestion2HintVariation() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -5106,7 +4957,7 @@
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
- new String[] {"SELECT g_0.MONTH AS c_0, g_1.REGION AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0, db2model.GEOGRAPHY2 AS g_1 WHERE (g_0.MONTH IN (<dependent values>)) AND (g_0.CITY = g_1.CITY) AND (g_1.REGION IN ('BORDEAUX', 'POLINESIA')) GROUP BY g_0.MONTH, g_1.REGION ORDER BY c_0", //$NON-NLS-1$
+ new String[] {"SELECT g_0.MONTH AS c_0, g_1.REGION AS c_1, SUM(g_0.SALES) AS c_2 FROM db2model.SALES AS g_0, db2model.GEOGRAPHY2 AS g_1 WHERE (g_0.CITY = g_1.CITY) AND (g_1.REGION IN ('BORDEAUX', 'POLINESIA')) AND (g_0.MONTH IN (<dependent values>)) GROUP BY g_0.MONTH, g_1.REGION ORDER BY c_0", //$NON-NLS-1$
"SELECT g_0.MONTH AS c_0, g_0.YEAR AS c_1 FROM msModel.\"TIME\" AS g_0 WHERE g_0.YEAR = '1999' ORDER BY c_0"}, //$NON-NLS-1$
ComparisonMode.EXACT_COMMAND_STRING );
@@ -5131,7 +4982,7 @@
public void testBusObjQuestion3() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -5182,8 +5033,8 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -5203,10 +5054,8 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
ProcessorPlan plan = helpPlan(sql,
@@ -5270,7 +5119,6 @@
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("+", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -5352,14 +5200,11 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, false);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, false);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, false);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -5396,16 +5241,13 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, false);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -5434,7 +5276,7 @@
String sql = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN " + //$NON-NLS-1$
"VQT.SmallA_2589a ON MediumA.IntKey = SmallA_2589a.IntKey"; //$NON-NLS-1$
- String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.IntKey = BQT1.SmallB.IntKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey"; //$NON-NLS-1$
+ String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.IntKey = BQT1.SmallB.IntKey) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey AND BQT1.SmallA.StringNum = '10'"; //$NON-NLS-1$
helpTestCase2589(sql, expected);
}
@@ -5442,7 +5284,7 @@
String sql = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN " + //$NON-NLS-1$
"VQT.SmallA_2589b ON MediumA.IntKey = SmallA_2589b.IntKey"; //$NON-NLS-1$
- String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey"; //$NON-NLS-1$
+ String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey AND BQT1.SmallA.StringNum = '10'"; //$NON-NLS-1$
helpTestCase2589(sql, expected);
}
@@ -5451,7 +5293,7 @@
"VQT.SmallA_2589b ON MediumA.IntKey = SmallA_2589b.IntKey " + //$NON-NLS-1$
"WHERE BQT1.MediumB.IntKey = BQT1.MediumA.IntKey"; //$NON-NLS-1$
- String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumB INNER JOIN (BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey) ON BQT1.MediumB.IntKey = BQT1.MediumA.IntKey"; //$NON-NLS-1$
+ String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumB INNER JOIN (BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumB.IntKey = BQT1.MediumA.IntKey"; //$NON-NLS-1$
helpTestCase2589(sql, expected);
}
@@ -5460,7 +5302,7 @@
"(BQT1.MediumA LEFT OUTER JOIN VQT.SmallA_2589b ON MediumA.IntKey = SmallA_2589b.IntKey) " + //$NON-NLS-1$
"ON BQT1.MediumB.IntKey = BQT1.MediumA.IntKey"; //$NON-NLS-1$
- String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumB INNER JOIN (BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey) ON BQT1.MediumB.IntKey = BQT1.MediumA.IntKey"; //$NON-NLS-1$
+ String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumB INNER JOIN (BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumB.IntKey = BQT1.MediumA.IntKey"; //$NON-NLS-1$
helpTestCase2589(sql, expected);
}
@@ -5469,7 +5311,7 @@
"(BQT1.MediumA LEFT OUTER JOIN VQT.SmallA_2589b ON MediumA.IntKey = SmallA_2589b.IntKey) " + //$NON-NLS-1$
"ON BQT1.MediumB.IntKey = BQT1.MediumA.IntKey"; //$NON-NLS-1$
- String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumB LEFT OUTER JOIN (BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey) ON BQT1.MediumB.IntKey = BQT1.MediumA.IntKey"; //$NON-NLS-1$
+ String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumB LEFT OUTER JOIN (BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumB.IntKey = BQT1.MediumA.IntKey"; //$NON-NLS-1$
helpTestCase2589(sql, expected);
}
@@ -5478,7 +5320,7 @@
"(BQT1.MediumA INNER JOIN VQT.SmallA_2589b ON MediumA.IntKey = SmallA_2589b.IntKey) " + //$NON-NLS-1$
"ON BQT1.MediumB.IntKey = BQT1.MediumA.IntKey"; //$NON-NLS-1$
- String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumB LEFT OUTER JOIN (BQT1.MediumA INNER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey) ON BQT1.MediumB.IntKey = BQT1.MediumA.IntKey";//$NON-NLS-1$";
+ String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumB LEFT OUTER JOIN (BQT1.MediumA INNER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey) ON BQT1.MediumB.IntKey = BQT1.MediumA.IntKey AND BQT1.SmallA.StringNum = '10'";//$NON-NLS-1$";
helpTestCase2589(sql, expected);
}
@@ -5507,7 +5349,7 @@
String sql = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN VQT.SmallA_2589d " + //$NON-NLS-1$
"ON MediumA.IntKey = SmallA_2589d.IntKey"; //$NON-NLS-1$
- String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey AND BQT1.SmallA.StringNum = '10' AND BQT1.SmallA.IntNum = 10) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey"; //$NON-NLS-1$
+ String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey AND BQT1.SmallA.StringNum = '10' AND BQT1.SmallA.IntNum = 10"; //$NON-NLS-1$
helpTestCase2589(sql, expected);
}
@@ -5530,7 +5372,7 @@
String sql = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA INNER JOIN " + //$NON-NLS-1$
"VQT.SmallA_2589b ON MediumA.IntKey = SmallA_2589b.IntKey"; //$NON-NLS-1$
- String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA, BQT1.SmallA, BQT1.SmallB WHERE (BQT1.MediumA.IntKey = BQT1.SmallA.IntKey) AND (BQT1.SmallA.StringKey = BQT1.SmallB.StringKey) AND (BQT1.SmallA.StringNum = '10')"; //$NON-NLS-1$
+ String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA, BQT1.SmallA, BQT1.SmallB WHERE (BQT1.SmallA.StringKey = BQT1.SmallB.StringKey) AND (BQT1.MediumA.IntKey = BQT1.SmallA.IntKey) AND (BQT1.SmallA.StringNum = '10')"; //$NON-NLS-1$
helpTestCase2589(sql, expected);
@@ -5598,7 +5440,7 @@
String sql = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN " + //$NON-NLS-1$
"VQT.SmallA_2589g ON MediumA.IntKey = SmallA_2589g.IntKey"; //$NON-NLS-1$
- String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey"; //$NON-NLS-1$
+ String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey AND BQT1.SmallA.StringNum = '10'"; //$NON-NLS-1$
helpTestCase2589(sql, expected);
}
@@ -5610,7 +5452,7 @@
String sql = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN " + //$NON-NLS-1$
"VQT.SmallA_2589h ON MediumA.IntKey = SmallA_2589h.IntKey"; //$NON-NLS-1$
- String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey"; //$NON-NLS-1$
+ String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey AND BQT1.SmallA.StringNum = '10'"; //$NON-NLS-1$
helpTestCase2589(sql, expected);
}
@@ -5622,7 +5464,7 @@
String sql = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN " + //$NON-NLS-1$
"VQT.SmallA_2589i ON MediumA.IntKey = SmallA_2589i.IntKey"; //$NON-NLS-1$
- String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey AND BQT1.SmallA.StringNum = '10' AND BQT1.SmallB.StringNum = '10') ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey"; //$NON-NLS-1$
+ String expected = "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.StringKey = BQT1.SmallB.StringKey) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey AND BQT1.SmallA.StringNum = '10' AND BQT1.SmallB.StringNum = '10'"; //$NON-NLS-1$
helpTestCase2589(sql, expected);
}
@@ -5684,14 +5526,11 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, false);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, false);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, false);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -5738,14 +5577,11 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, false);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, false);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -5800,14 +5636,11 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, false);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -5909,21 +5742,18 @@
String expected[] = new String[] {
"SELECT BQT2.SmallA.IntKey FROM BQT2.SmallA", //$NON-NLS-1$
- "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.IntKey = BQT1.SmallB.IntKey AND BQT1.SmallA.StringNum = '10') ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey" //$NON-NLS-1$
+ "SELECT BQT1.MediumA.IntKey FROM BQT1.MediumA LEFT OUTER JOIN (BQT1.SmallA INNER JOIN BQT1.SmallB ON BQT1.SmallA.IntKey = BQT1.SmallB.IntKey) ON BQT1.MediumA.IntKey = BQT1.SmallA.IntKey AND BQT1.SmallA.StringNum = '10'" //$NON-NLS-1$
};
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, false);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -5978,12 +5808,10 @@
public void testOrderByDuplicates() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
@@ -6008,18 +5836,15 @@
public void testCase2507() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("||", true); //$NON-NLS-1$
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -6040,18 +5865,15 @@
public void testCase2507A() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -6071,18 +5893,15 @@
public void testCase2507B() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -6099,15 +5918,17 @@
checkNodeTypes(plan, FULL_PUSHDOWN);
}
- public void testPushCrossJoins() {
+ /**
+ * RulePlanJoins does not initially allow the cross join push.
+ * The subsequent RuleRaiseAccess does since we believe it was the intent of the user
+ */
+ public void testPushCrossJoins() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
@@ -6122,8 +5943,8 @@
ProcessorPlan plan = helpPlan(sql,
metadata,
null, capFinder,
- new String[] {"SELECT b1.intkey FROM (bqt1.SmallA AS a1 CROSS JOIN (bqt1.smalla AS a2 CROSS JOIN bqt1.mediuma AS b1)) LEFT OUTER JOIN bqt1.mediumb AS b2 ON b1.intkey = b2.intkey"}, //$NON-NLS-1$
- SHOULD_SUCCEED );
+ new String[] {"SELECT g_2.intkey FROM ((bqt1.SmallA AS g_0 CROSS JOIN bqt1.smalla AS g_1) CROSS JOIN bqt1.mediuma AS g_2) LEFT OUTER JOIN bqt1.mediumb AS g_3 ON g_2.intkey = g_3.intkey"}, //$NON-NLS-1$
+ ComparisonMode.EXACT_COMMAND_STRING );
checkNodeTypes(plan, FULL_PUSHDOWN);
}
@@ -6131,18 +5952,15 @@
public void testCase3023() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -6163,9 +5981,8 @@
FakeMetadataFacade metadata = example1();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -6183,19 +6000,19 @@
* of a virtual table containing a join in it's transformation. All virtual
* models use the same physical model pm1.
*/
- public void testCase3778() {
+ public void testCase3778() throws Exception {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
BasicSourceCapabilities caps = getTypicalCapabilities();
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = helpPlan(
"select a.e1, b.e1 from vm2.g1 a, vm2.g1 b where a.e1 = b.e1 and a.e2 in (select e2 from vm1.g1)", //$NON-NLS-1$
- metadata, null, capFinder, new String[] {"SELECT g_1.e1, g_3.e1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1, pm1.g1 AS g_2, pm1.g2 AS g_3 WHERE (g_1.e1 = g_3.e1) AND (g_0.e2 = g_1.e2) AND (g_1.e2 IN (SELECT g_4.e2 FROM pm1.g1 AS g_4)) AND (g_2.e2 = g_3.e2)"}, true); //$NON-NLS-1$
+ metadata, null, capFinder, new String[] {"SELECT g_1.e1, g_3.e1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1, pm1.g1 AS g_2, pm1.g2 AS g_3 WHERE (g_2.e2 = g_3.e2) AND (g_0.e2 = g_1.e2) AND (g_1.e1 = g_3.e1) AND (g_1.e2 IN (SELECT g_4.e2 FROM pm1.g1 AS g_4))"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
checkNodeTypes(plan, FULL_PUSHDOWN);
@@ -6208,14 +6025,11 @@
public void testCase3832() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
capFinder.addCapabilities("BQT2", caps); //$NON-NLS-1$
@@ -6241,11 +6055,8 @@
public void testDefect21972() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -6264,13 +6075,11 @@
public void testExpressionSymbolPreservation() throws Exception {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("BQT2", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
@@ -6355,7 +6164,6 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
String sql = "select convert(e2+1,string) from pm1.g1 union all select e1 from pm1.g2";//$NON-NLS-1$
@@ -6422,13 +6230,13 @@
* Test of RuleCopyCriteria. Criteria should NOT be copied across a join if the join has any other operator
* other than an equality operator, but if the single group criteria is equality, then we can copy into a join criteria
*/
- public void testCase4265() {
+ public void testCase4265() throws Exception {
String sql = "SELECT X.intkey, Y.intkey FROM BQT1.SmallA X, BQT1.SmallA Y WHERE X.IntKey <> Y.IntKey and Y.IntKey = 1"; //$NON-NLS-1$
ProcessorPlan plan = helpPlan(sql, FakeMetadataFactory.exampleBQTCached(),
new String[] {
- "SELECT X.intkey FROM BQT1.SmallA AS X WHERE X.IntKey <> 1", //$NON-NLS-1$
- "SELECT Y.intkey FROM BQT1.SmallA AS Y WHERE Y.IntKey = 1" }); //$NON-NLS-1$
+ "SELECT g_0.IntKey FROM BQT1.SmallA AS g_0 WHERE g_0.IntKey <> 1", //$NON-NLS-1$
+ "SELECT g_0.IntKey FROM BQT1.SmallA AS g_0 WHERE g_0.IntKey = 1" }, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
checkNodeTypes(plan, new int[] {
2, // Access
@@ -6453,13 +6261,12 @@
* Test of RuleCopyCriteria. Criteria should be copied across a join only for an equality operator in
* the join criteria.
*/
- public void testCase4265ControlTest() {
+ public void testCase4265ControlTest() throws Exception {
String sql = "SELECT X.intkey, Y.intkey FROM BQT1.SmallA X, BQT1.SmallA Y WHERE X.IntKey = Y.IntKey and Y.IntKey = 1"; //$NON-NLS-1$
ProcessorPlan plan = helpPlan(sql, FakeMetadataFactory.exampleBQTCached(),
new String[] {
- "SELECT X.intkey FROM BQT1.SmallA AS X WHERE X.IntKey = 1", //$NON-NLS-1$
- "SELECT Y.intkey FROM BQT1.SmallA AS Y WHERE Y.IntKey = 1" }); //$NON-NLS-1$
+ "SELECT g_0.intkey FROM BQT1.SmallA AS g_0 WHERE g_0.IntKey = 1" }, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
checkNodeTypes(plan, new int[] {
2, // Access
@@ -6543,8 +6350,8 @@
FakeMetadataFacade metadata = example1();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
+ caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
@@ -6564,7 +6371,6 @@
FakeMetadataFacade metadata = example1();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
@@ -6601,7 +6407,6 @@
FakeMetadataFacade metadata = example1();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
@@ -6613,7 +6418,7 @@
ProcessorPlan plan = helpPlan("select * from (select v1.e1, v2.e1 as e1_1, v1.e2, v2.e2 as e2_2 from (select * from vm1.g7 where vm1.g7.e2 = 1) v1 left outer join (select * from vm1.g7 where vm1.g7.e2 = 1) v2 on v1.e2 = v2.e2) as v3 where v3.e2 = 1", metadata, //$NON-NLS-1$
null, capFinder,
- new String[] { "SELECT CASE WHEN g_0.e1 = 'S' THEN 'Pay' WHEN g_0.e1 = 'P' THEN 'Rec' ELSE g_0.e1 END, CASE WHEN g_1.e1 = 'S' THEN 'Pay' WHEN g_1.e1 = 'P' THEN 'Rec' ELSE g_1.e1 END, g_0.e2, g_1.e2 FROM pm1.g1 AS g_0 LEFT OUTER JOIN pm1.g1 AS g_1 ON g_1.e2 = 1 WHERE g_0.e2 = 1" }, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ new String[] { "SELECT CASE WHEN g_0.e1 = 'S' THEN 'Pay' WHEN g_0.e1 = 'P' THEN 'Rec' ELSE g_0.e1 END, CASE WHEN g_1.e1 = 'S' THEN 'Pay' WHEN g_1.e1 = 'P' THEN 'Rec' ELSE g_1.e1 END, g_0.e2, g_1.e2 FROM pm1.g1 AS g_0 LEFT OUTER JOIN pm1.g1 AS g_1 ON g_0.e2 = g_1.e2 AND g_1.e2 = 1 WHERE g_0.e2 = 1" }, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
checkNodeTypes(plan, FULL_PUSHDOWN);
checkSubPlanCount(plan, 0);
@@ -6622,9 +6427,7 @@
public void testCase4312() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setFunctionSupport("+", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -6645,14 +6448,11 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -6673,18 +6473,15 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
caps.setFunctionSupport("+", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -6742,11 +6539,8 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -6768,14 +6562,11 @@
public void testDefect23614() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_ALL, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_ALL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -6812,8 +6603,7 @@
public void testSameConnector() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
@@ -6850,7 +6640,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
@@ -6902,7 +6692,7 @@
public void testCase5067() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -6920,10 +6710,7 @@
public void testDontPushConvertObject() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -6958,10 +6745,7 @@
public void testDontPushConvertClobToString() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("LOB", caps); //$NON-NLS-1$
@@ -7011,12 +6795,10 @@
public void testCorrelatedSubqueryOverJoin() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_EXISTS, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_EXISTS, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
@@ -7075,7 +6857,7 @@
caps.setCapabilitySupport(Capability.QUERY_CASE, true);
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -7159,8 +6941,8 @@
public void testCase6597() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_NOT, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
// Create query
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptionalJoins.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptionalJoins.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestOptionalJoins.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -24,6 +24,7 @@
import junit.framework.TestCase;
+import com.metamatrix.query.optimizer.TestOptimizer.ComparisonMode;
import com.metamatrix.query.processor.ProcessorPlan;
import com.metamatrix.query.unittest.FakeMetadataFactory;
@@ -277,9 +278,9 @@
TestOptimizer.checkSubPlanCount(plan, 0);
}
- public void testOptionalJoinWithIntersection() {
+ public void testOptionalJoinWithIntersection() throws Exception {
ProcessorPlan plan = TestOptimizer.helpPlan("SELECT pm1.g3.e1 FROM pm1.g3 inner join (select pm1.g1.e2 as y from /* optional */ pm1.g1 inner join pm1.g2 on pm1.g1.e1 = pm1.g2.e1) AS x on pm1.g3.e2=x.y", FakeMetadataFactory.example1Cached(), //$NON-NLS-1$
- new String[] {"SELECT g_0.e1 FROM pm1.g3 AS g_0, pm1.g1 AS g_1, pm1.g2 AS g_2 WHERE (g_0.e2 = g_1.e2) AND (g_1.e1 = g_2.e1)"} ); //$NON-NLS-1$
+ new String[] {"SELECT g_0.e1 FROM pm1.g3 AS g_0, pm1.g1 AS g_1, pm1.g2 AS g_2 WHERE (g_1.e1 = g_2.e1) AND (g_0.e2 = g_1.e2)"}, ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestPartitionedJoinPlanning.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestPartitionedJoinPlanning.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestPartitionedJoinPlanning.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -44,10 +44,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleMergeVirtual.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleMergeVirtual.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleMergeVirtual.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -155,9 +155,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
caps.setCapabilitySupport(Capability.QUERY_SELECT_DISTINCT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan("SELECT x FROM (SELECT e1, max(e2) as x FROM pm1.g1 GROUP BY e1) AS z where z.x = 1", //$NON-NLS-1$
@@ -174,9 +172,7 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
caps.setCapabilitySupport(Capability.QUERY_SELECT_DISTINCT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan("SELECT x FROM (SELECT e1, max(e2) as x FROM pm1.g1 GROUP BY e1) AS z where z.x = 1", //$NON-NLS-1$
@@ -208,7 +204,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan("SELECT x FROM (select '1' as x, e2 from pm1.g1 union all select e1, 1 from pm1.g2) x", //$NON-NLS-1$
@@ -223,7 +219,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan("SELECT distinct x FROM (select '1' as x, e2 from pm1.g1 union all select e1, 1 from pm1.g2) x", //$NON-NLS-1$
@@ -241,7 +237,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan("SELECT distinct x || 'b' FROM (select '1' as x, e2 from pm1.g1 union all select e1, 1 from pm1.g2) x", //$NON-NLS-1$
@@ -271,7 +267,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
ProcessorPlan plan = TestOptimizer.helpPlan("select * from (SELECT distinct x FROM (select '1' as x, e2 from pm1.g1 union all select e1, 1 from pm1.g2) x) y, pm1.g2", //$NON-NLS-1$
@@ -359,9 +355,8 @@
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -384,10 +379,10 @@
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
RelationalPlan plan = (RelationalPlan)TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(),
- new String[] {"SELECT g_0.e1 FROM pm1.g1 AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] {"SELECT g_0.e1 FROM pm1.g1 AS g_0"}, capFinder, TestOptimizer.ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
SortNode node = (SortNode)plan.getRootNode();
- assertTrue("Alias was not accounted for in sort node", node.getElements().containsAll(node.getSortElements()));
+ assertTrue("Alias was not accounted for in sort node", node.getElements().containsAll(node.getSortElements())); //$NON-NLS-1$
}
}
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleRaiseNull.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleRaiseNull.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestRuleRaiseNull.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -146,7 +146,7 @@
public void testRaiseNullWithOuterJoin1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
String sql = "select smallb.intkey, smalla.intkey from bqt1.smalla left outer join bqt1.smallb on (1 = 2)"; //$NON-NLS-1$
@@ -272,7 +272,7 @@
public void testRaiseNullWithOuterJoinAndHaving() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
String sql = "select smallb.intkey, smalla.intkey from bqt1.smalla left outer join bqt1.smallb on (1 = 2) group by smalla.intkey, smallb.intkey having max(smallb.intkey) = 1"; //$NON-NLS-1$
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestStoredProcedurePlanning.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestStoredProcedurePlanning.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestStoredProcedurePlanning.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -298,7 +298,7 @@
public void testStoredQuery22() {
ProcessorPlan plan = TestOptimizer.helpPlan("select e1 from (EXEC pm1.sq1()) as x where e1='a' union (select e1 from vm1.g2 where e1='b')", new TempMetadataAdapter(FakeMetadataFactory.example1Cached(), new TempMetadataStore()), //$NON-NLS-1$
- new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0 WHERE g_0.e1 = 'a'", "SELECT g_0.e1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE (g_0.e1 = 'b') AND (g_1.e1 = 'b')" }); //$NON-NLS-1$ //$NON-NLS-2$
+ new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0 WHERE g_0.e1 = 'a'", "SELECT g_0.e1 FROM pm1.g1 AS g_0, pm1.g2 AS g_1 WHERE (g_0.e1 = g_1.e1) AND (g_0.e1 = 'b') AND (g_1.e1 = 'b')" }); //$NON-NLS-1$ //$NON-NLS-2$
TestOptimizer.checkNodeTypes(plan, new int[] {
2, // Access
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestSubqueryPushdown.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestSubqueryPushdown.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestSubqueryPushdown.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -43,7 +43,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_EXISTS, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_EXISTS, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
@@ -83,7 +83,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_EXISTS, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_EXISTS, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
@@ -115,14 +115,11 @@
@Test public void testPushCorrelatedSubquery1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_ALL, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_ALL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -139,24 +136,19 @@
@Test public void testPushCorrelatedSubquery2() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_ALL, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_ALL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport(SourceSystemFunctions.CONCAT, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -184,24 +176,19 @@
@Test public void testPushCorrelatedSubquery3() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_ALL, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_ALL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("||", true); //$NON-NLS-1$
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -230,9 +217,7 @@
public void DEFER_testPushSubqueryInSelectClause1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
@@ -395,7 +380,7 @@
@Test public void testNoPushSubqueryInWhereClause1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -427,7 +412,7 @@
@Test public void testNoPushSubqueryInWhereClause2() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", getTypicalCapabilities()); //$NON-NLS-1$
@@ -459,9 +444,8 @@
public void defer_testNoPushSubqueryInWhereClause3() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", new BasicSourceCapabilities()); //$NON-NLS-1$
@@ -493,9 +477,8 @@
@Test public void testNoPushSubqueryInWhereClause4() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", new BasicSourceCapabilities()); //$NON-NLS-1$
@@ -526,9 +509,8 @@
@Test public void testNoPushSubqueryInWhereClause5() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", new BasicSourceCapabilities()); //$NON-NLS-1$
@@ -559,9 +541,8 @@
@Test public void testNoPushSubqueryInWhereClause6() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", new BasicSourceCapabilities()); //$NON-NLS-1$
@@ -593,10 +574,8 @@
@Test public void testNoPushSubqueryInWhereClause7() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setFunctionSupport("ltrim", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", new BasicSourceCapabilities()); //$NON-NLS-1$
@@ -631,9 +610,8 @@
@Test public void testNoPushSubqueryInWhereClause8() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", new BasicSourceCapabilities()); //$NON-NLS-1$
@@ -664,9 +642,8 @@
@Test public void testNoPushSubqueryInWhereClause9() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -694,15 +671,12 @@
@Test public void testPushMultipleCorrelatedSubquery1() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_OR, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_ALL, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_OR, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_ALL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -725,12 +699,10 @@
FakeMetadataFacade metadata = example1();
BasicSourceCapabilities caps = getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_MAX, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("+", true); //$NON-NLS-1$
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestUnionPlanning.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestUnionPlanning.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestUnionPlanning.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -36,7 +36,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
capFinder.addCapabilities("BQT2", caps); //$NON-NLS-1$
@@ -68,7 +68,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
capFinder.addCapabilities("BQT2", caps); //$NON-NLS-1$
@@ -97,7 +97,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
capFinder.addCapabilities("BQT2", caps); //$NON-NLS-1$
BasicSourceCapabilities caps1 = TestOptimizer.getTypicalCapabilities();
@@ -128,7 +128,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
capFinder.addCapabilities("BQT2", caps); //$NON-NLS-1$
BasicSourceCapabilities caps1 = TestOptimizer.getTypicalCapabilities();
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/capabilities/TestBasicSourceCapabilities.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/capabilities/TestBasicSourceCapabilities.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/capabilities/TestBasicSourceCapabilities.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -38,13 +38,13 @@
BasicSourceCapabilities caps = new BasicSourceCapabilities();
// Check initial state
- assertEquals("Default value for capability should be false", false, caps.supportsCapability(Capability.QUERY_FROM_JOIN)); //$NON-NLS-1$
+ assertEquals("Default value for capability should be false", false, caps.supportsCapability(Capability.QUERY_FROM_JOIN_INNER)); //$NON-NLS-1$
// Change state
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
// Check current state
- assertEquals("Changed value for capability should be true", true, caps.supportsCapability(Capability.QUERY_FROM_JOIN)); //$NON-NLS-1$
+ assertEquals("Changed value for capability should be true", true, caps.supportsCapability(Capability.QUERY_FROM_JOIN_INNER)); //$NON-NLS-1$
}
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCapabilitiesUtil.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -28,17 +28,13 @@
import junit.framework.TestCase;
import com.metamatrix.api.exception.MetaMatrixComponentException;
-import com.metamatrix.api.exception.MetaMatrixException;
import com.metamatrix.api.exception.query.QueryMetadataException;
import com.metamatrix.query.optimizer.capabilities.BasicSourceCapabilities;
import com.metamatrix.query.optimizer.capabilities.DefaultCapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.FakeCapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
-import com.metamatrix.query.parser.QueryParser;
-import com.metamatrix.query.resolver.QueryResolver;
import com.metamatrix.query.sql.ReservedWords;
-import com.metamatrix.query.sql.lang.Command;
import com.metamatrix.query.sql.lang.JoinType;
import com.metamatrix.query.sql.lang.SetQuery.Operation;
import com.metamatrix.query.sql.symbol.AggregateSymbol;
@@ -47,7 +43,6 @@
import com.metamatrix.query.sql.symbol.Expression;
import com.metamatrix.query.sql.symbol.ExpressionSymbol;
import com.metamatrix.query.sql.symbol.Function;
-import com.metamatrix.query.sql.symbol.ScalarSubquery;
import com.metamatrix.query.unittest.FakeMetadataFacade;
import com.metamatrix.query.unittest.FakeMetadataFactory;
import com.metamatrix.query.unittest.FakeMetadataObject;
@@ -117,7 +112,7 @@
finder.addCapabilities("pm1", sourceCaps); //$NON-NLS-1$
// Test capabilities util
- boolean actual = CapabilitiesUtil.supportsOuterJoin(modelID, joinType, metadata, finder);
+ boolean actual = CapabilitiesUtil.supportsJoin(modelID, joinType, metadata, finder);
assertEquals("Got wrong answer for supports", expectedValue, actual); //$NON-NLS-1$
}
@@ -162,23 +157,7 @@
public void testSupportsAggregates1() throws Exception {
helpTestSupportsAggregates(true, true, null);
}
-
- // Test where capabilities don't support aggregates
- public void testSupportsAggregates2() throws Exception {
- helpTestSupportsAggregates(false, true, null);
- }
-
- // Test where no capabilities exist
- public void testSupportsAggregates3() throws Exception {
- // Set up metadata
- FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
- FakeMetadataObject modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
- // Test capabilities util
- boolean actual = CapabilitiesUtil.supportsAggregates(null, modelID, metadata, new DefaultCapabilitiesFinder());
- assertEquals("Got wrong answer for supports", false, actual); //$NON-NLS-1$
- }
-
/**
* Supports functions in group by is misleading. It should actually
* be called supports expression in group by. Thus the example below
@@ -405,7 +384,6 @@
// Test where capabilities don't support scalar functions
public void testSupportsScalar1() throws Exception {
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.FUNCTION, false);
Function func = new Function("+", new Expression[] { new ElementSymbol("x"), new ElementSymbol("y") }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
helpTestSupportsScalar(caps, func, false);
@@ -414,7 +392,6 @@
// Test where capabilities doesn't support function
public void testSupportsScalar3() throws Exception {
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("now", false); //$NON-NLS-1$
Function func = new Function("NOW", new Expression[] { }); //$NON-NLS-1$
@@ -424,7 +401,6 @@
// Test where capabilities do support function
public void testSupportsScalar4() throws Exception {
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("now", true); //$NON-NLS-1$
Function func = new Function("NOW", new Expression[] { }); //$NON-NLS-1$
@@ -434,7 +410,6 @@
// Test where function is unknown
public void testSupportsScalar5() throws Exception {
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.FUNCTION, true);
Function func = new Function("sasquatch", new Expression[] { }); //$NON-NLS-1$
helpTestSupportsScalar(caps, func, false);
@@ -502,57 +477,6 @@
assertEquals("Got wrong answer for supports", false, actual); //$NON-NLS-1$
}
- public void helpTestSupportsScalarSubquery(boolean supportsScalarSubquery, ScalarSubquery subquery, FakeMetadataFacade metadata, boolean expectedValue) throws QueryMetadataException, MetaMatrixComponentException {
- // Set up metadata
- FakeMetadataObject modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
-
- // Set up capabilities
- FakeCapabilitiesFinder finder = new FakeCapabilitiesFinder();
- BasicSourceCapabilities sourceCaps = new BasicSourceCapabilities();
- sourceCaps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, supportsScalarSubquery);
- finder.addCapabilities("pm1", sourceCaps); //$NON-NLS-1$
-
- // Test capabilities util
- boolean actual = CapabilitiesUtil.supportsScalarSubquery(modelID, subquery, metadata, finder);
- assertEquals("Got wrong answer for supports", expectedValue, actual); //$NON-NLS-1$
- }
-
- private ScalarSubquery exampleSubquery1(FakeMetadataFacade metadata) {
- try {
- QueryParser parser = new QueryParser();
- Command command = parser.parseCommand("SELECT e1 FROM pm1.g1"); //$NON-NLS-1$
- QueryResolver.resolveCommand(command, metadata);
- ScalarSubquery ss = new ScalarSubquery(command);
- return ss;
- } catch(MetaMatrixException e) {
- e.printStackTrace();
- fail(e.getMessage());
- return null;
- }
- }
-
- public void testSupportsScalarSubquery1() throws Exception {
- FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
- ScalarSubquery ss = exampleSubquery1(metadata);
- helpTestSupportsScalarSubquery(false, ss, metadata, false);
- }
-
- public void testSupportsScalarSubquery2() throws Exception {
- FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
- ScalarSubquery ss = exampleSubquery1(metadata);
- helpTestSupportsScalarSubquery(true, ss, metadata, true);
- }
-
- public void testSupportsScalarSubquery3() throws Exception {
- // Set up metadata
- FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
- FakeMetadataObject modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
-
- // Test capabilities util
- boolean actual = CapabilitiesUtil.supportsScalarSubquery(modelID, exampleSubquery1(metadata), metadata, new DefaultCapabilitiesFinder());
- assertEquals("Got wrong answer for supports", false, actual); //$NON-NLS-1$
- }
-
public void helpTestSupportsUnion(boolean supports) throws QueryMetadataException, MetaMatrixComponentException {
// Set up metadata
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
@@ -585,7 +509,7 @@
// Set up capabilities
FakeCapabilitiesFinder finder = new FakeCapabilitiesFinder();
BasicSourceCapabilities sourceCaps = new BasicSourceCapabilities();
- sourceCaps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, supports);
+ sourceCaps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, supports);
finder.addCapabilities("pm1", sourceCaps); //$NON-NLS-1$
// Test capabilities util
Modified: trunk/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCriteriaCapabilityValidatorVisitor.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCriteriaCapabilityValidatorVisitor.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/optimizer/relational/rules/TestCriteriaCapabilityValidatorVisitor.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -22,208 +22,167 @@
package com.metamatrix.query.optimizer.relational.rules;
-import junit.framework.TestCase;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
import com.metamatrix.api.exception.MetaMatrixException;
+import com.metamatrix.api.exception.query.QueryMetadataException;
import com.metamatrix.query.optimizer.capabilities.BasicSourceCapabilities;
import com.metamatrix.query.optimizer.capabilities.CapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.FakeCapabilitiesFinder;
import com.metamatrix.query.optimizer.capabilities.SourceCapabilities.Capability;
import com.metamatrix.query.parser.QueryParser;
import com.metamatrix.query.resolver.QueryResolver;
+import com.metamatrix.query.sql.lang.Command;
import com.metamatrix.query.sql.lang.Criteria;
-import com.metamatrix.query.sql.lang.Query;
-import com.metamatrix.query.sql.navigator.PreOrderNavigator;
import com.metamatrix.query.unittest.FakeMetadataFacade;
import com.metamatrix.query.unittest.FakeMetadataFactory;
import com.metamatrix.query.unittest.FakeMetadataObject;
/**
*/
-public class TestCriteriaCapabilityValidatorVisitor extends TestCase {
+public class TestCriteriaCapabilityValidatorVisitor {
- /**
- * Constructor for TestCriteriaCapabilityValidatorVisitor.
- * @param name
- */
- public TestCriteriaCapabilityValidatorVisitor(String name) {
- super(name);
- }
-
-
public void helpTestVisitor(String sql, Object modelID, FakeMetadataFacade metadata, CapabilitiesFinder capFinder, boolean isValid, boolean expectException) {
try {
Criteria criteria = QueryParser.getQueryParser().parseCriteria(sql);
QueryResolver.resolveCriteria(criteria, metadata);
- CriteriaCapabilityValidatorVisitor visitor = new CriteriaCapabilityValidatorVisitor(modelID, metadata, capFinder);
- PreOrderNavigator.doVisit(criteria, visitor);
-
- assertEquals("Got incorrect isValid flag", isValid, visitor.isValid()); //$NON-NLS-1$
- assertEquals("Got incorrect exception", expectException, visitor.getException() != null); //$NON-NLS-1$
-
+ assertEquals("Got incorrect isValid flag", isValid, CriteriaCapabilityValidatorVisitor.canPushLanguageObject(criteria, modelID, metadata, capFinder)); //$NON-NLS-1$
+ } catch(QueryMetadataException e) {
+ if (!expectException) {
+ throw new RuntimeException(e);
+ }
} catch(MetaMatrixException e) {
- fail(e.getMessage());
+ throw new RuntimeException(e);
}
}
// Assume there is a wrapped command - this will allow subqueries to be properly resolved
public void helpTestVisitorWithCommand(String sql, Object modelID, FakeMetadataFacade metadata, CapabilitiesFinder capFinder, boolean isValid, boolean expectException) {
try {
- QueryParser parser = new QueryParser();
- Query query = (Query) parser.parseCommand(sql);
+ Command command = QueryParser.getQueryParser().parseCommand(sql);
- QueryResolver.resolveCommand(query, metadata);
+ QueryResolver.resolveCommand(command, metadata);
- CriteriaCapabilityValidatorVisitor visitor = new CriteriaCapabilityValidatorVisitor(modelID, metadata, capFinder);
- PreOrderNavigator.doVisit(query.getCriteria(), visitor);
-
- assertEquals("Got incorrect isValid flag", isValid, visitor.isValid()); //$NON-NLS-1$
- assertEquals("Got incorrect exception", expectException, visitor.getException() != null); //$NON-NLS-1$
-
+ assertEquals("Got incorrect isValid flag", isValid, CriteriaCapabilityValidatorVisitor.canPushLanguageObject(command, modelID, metadata, capFinder)); //$NON-NLS-1$
+ } catch(QueryMetadataException e) {
+ if (!expectException) {
+ throw new RuntimeException(e);
+ }
} catch(MetaMatrixException e) {
- fail(e.getMessage());
+ throw new RuntimeException(e);
}
}
// has all capabilities
- public void testCompareCriteriaSuccess() {
+ @Test public void testCompareCriteriaSuccess() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 = 'x'", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
// does not have where capability
- public void testCompareCriteriaCapFail1() {
+ @Test public void testCompareCriteriaCapFail1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 = 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
- // does not have compare capability
- public void testCompareCriteriaCapFail2() {
- FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
- Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
-
- FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
- BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
-
- helpTestVisitor("pm1.g1.e1 = 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
- }
-
// does not have = capability
- public void testCompareCriteriaOpCapFail1() {
+ @Test public void testCompareCriteriaOpCapFail1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 = 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have <> capability
- public void testCompareCriteriaOpCapFail2() {
+ @Test public void testCompareCriteriaOpCapFail2() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_NE, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 <> 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have < capability
- public void testCompareCriteriaOpCapFail3() {
+ @Test public void testCompareCriteriaOpCapFail3() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_LT, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 < 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have <= capability
- public void testCompareCriteriaOpCapFail4() {
+ @Test public void testCompareCriteriaOpCapFail4() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_LE, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 <= 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have > capability
- public void testCompareCriteriaOpCapFail5() {
+ @Test public void testCompareCriteriaOpCapFail5() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 > 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have >= capability
- public void testCompareCriteriaOpCapFail6() {
+ @Test public void testCompareCriteriaOpCapFail6() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 >= 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// element not searchable
- public void testCompareCriteriaSearchableFail() {
+ @Test public void testCompareCriteriaSearchableFail() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeMetadataObject e1 = metadata.getStore().findObject("pm1.g1.e1", FakeMetadataObject.ELEMENT); //$NON-NLS-1$
@@ -231,16 +190,14 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 = 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// no caps
- public void testCompareCriteriaNoCaps() {
+ @Test public void testCompareCriteriaNoCaps() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
@@ -249,76 +206,54 @@
helpTestVisitor("pm1.g1.e1 = 'x'", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testCompoundCriteriaAnd1() {
+ @Test public void testCompoundCriteriaAnd1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 = 'x' AND 0 = 1", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testCompoundCriteriaAnd2() {
+ @Test public void testCompoundCriteriaAnd4() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
- BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, false);
- capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- helpTestVisitor("pm1.g1.e1 = 'x' AND 0 = 1", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
- }
-
- public void testCompoundCriteriaAnd4() {
- FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
- Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
-
- FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
-
helpTestVisitor("pm1.g1.e1 = 'x' AND 0 = 1", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testCompoundCriteriaOr1() {
+ @Test public void testCompoundCriteriaOr1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_OR, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_OR, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 = 'x' OR 0 = 1", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testCompoundCriteriaOr2() {
+ @Test public void testCompoundCriteriaOr2() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_OR, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_OR, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 = 'x' OR 0 = 1", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
- public void testCompoundCriteriaOr4() {
+ @Test public void testCompoundCriteriaOr4() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
FakeMetadataObject modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
@@ -327,16 +262,13 @@
helpTestVisitor("pm1.g1.e1 = 'x' OR 0 = 1", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testScalarFunction1() {
+ @Test public void testScalarFunction1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport("curtime", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -347,16 +279,13 @@
* Since this will always get pre-evaluated, this should also be true
*
*/
- public void testScalarFunction2() {
+ @Test public void testScalarFunction2() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport("+", false); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -366,16 +295,13 @@
/**
* since curtime is command deterministic and not supported, it will be evaluated
*/
- public void testScalarFunction2a() {
+ @Test public void testScalarFunction2a() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport("curtime", false); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -385,16 +311,13 @@
/**
* since rand is non-deterministic and not supported, it will be evaluated for every row
*/
- public void testScalarFunction2b() {
+ @Test public void testScalarFunction2b() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport("rand", false); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -402,33 +325,31 @@
}
- public void testIsNull1() {
+ @Test public void testIsNull1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_ISNULL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_ISNULL, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 IS NULL", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testIsNull2() {
+ @Test public void testIsNull2() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_ISNULL, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_ISNULL, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 IS NULL", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
- public void testIsNull3() {
+ @Test public void testIsNull3() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
@@ -437,7 +358,10 @@
helpTestVisitor("pm1.g1.e1 IS NULL", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testIsNull4() {
+ /**
+ * Is null is not a comparison operation
+ */
+ @Test public void testIsNull4() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeMetadataObject e1 = metadata.getStore().findObject("pm1.g1.e1", FakeMetadataObject.ELEMENT); //$NON-NLS-1$
@@ -445,116 +369,119 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_ISNULL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_ISNULL, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- helpTestVisitor("pm1.g1.e1 IS NULL", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
+ helpTestVisitor("pm1.g1.e1 IS NULL", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testIsNull5() {
+ @Test public void testIsNull6() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_ISNULL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_ISNULL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- helpTestVisitor("pm1.g1.e1 IS NULL", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
+ helpTestVisitor("pm1.g1.e1 IS NOT NULL", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
-
- public void testIsNull6() {
+
+ @Test public void testIsNull6fails() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_ISNULL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_ISNULL, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- helpTestVisitor("pm1.g1.e1 IS NOT NULL", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
+ helpTestVisitor("pm1.g1.e1 IS NOT NULL", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// has all capabilities
- public void testMatchCriteriaSuccess() {
+ @Test public void testMatchCriteriaSuccess() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE_ESCAPE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 LIKE 'x'", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- // does not have escape char capability
- public void testMatchCriteriaSuccess2() {
+ @Test public void testMatchCriteriaSuccess2() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE_ESCAPE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE_ESCAPE, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 LIKE 'x' ESCAPE '#'", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
// Test for NOT LIKE
- public void testMatchCriteriaSuccess3() {
+ @Test public void testMatchCriteriaSuccess3() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_NOT, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 NOT LIKE 'x'", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
+
+ @Test public void testMatchCriteriaSuccess3fails() {
+ FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
+ Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = new BasicSourceCapabilities();
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE, true);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ helpTestVisitor("pm1.g1.e1 NOT LIKE 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
+ }
// does not have compare capability
- public void testMatchCriteriaCapFail1() {
+ @Test public void testMatchCriteriaCapFail1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE_ESCAPE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE_ESCAPE, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 LIKE 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have escape char capability
- public void testMatchCriteriaCapFail2() {
+ @Test public void testMatchCriteriaCapFail2() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE_ESCAPE, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE_ESCAPE, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 LIKE 'x' ESCAPE '#'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// element not searchable
- public void testMatchCriteriaMatchableFail() {
+ @Test public void testMatchCriteriaMatchableFail() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeMetadataObject e1 = metadata.getStore().findObject("pm1.g1.e1", FakeMetadataObject.ELEMENT); //$NON-NLS-1$
@@ -562,16 +489,15 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE_ESCAPE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_LIKE_ESCAPE, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 LIKE 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// no caps
- public void testMatchCriteriaNoCaps() {
+ @Test public void testMatchCriteriaNoCaps() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
@@ -580,77 +506,57 @@
helpTestVisitor("pm1.g1.e1 LIKE 'x'", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testMatchCriteriaNoCrit() {
+ @Test public void testNotCriteria1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
-
- FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
- BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_LIKE_ESCAPE, true);
- capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
-
- helpTestVisitor("pm1.g1.e1 LIKE 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
- }
-
- public void testNotCriteria1() {
- FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
- Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_NOT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("NOT pm1.g1.e1 = 'x'", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testNotCriteria2() {
+ @Test public void testNotCriteria2() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_NOT, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("NOT pm1.g1.e1 = 'x'", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
- public void testSetCriteria1() {
+ @Test public void testSetCriteria1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 IN ('x')", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testSetCriteria2() {
+ @Test public void testSetCriteria2() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 IN ('x')", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
- public void testSetCriteria3() {
+ @Test public void testSetCriteria3() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
@@ -659,7 +565,7 @@
helpTestVisitor("pm1.g1.e1 IN ('x')", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testSetCriteria5() {
+ @Test public void testSetCriteria5() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1();
FakeMetadataObject modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeMetadataObject elementID = metadata.getStore().findObject("pm1.g1.e1" , FakeMetadataObject.ELEMENT); //$NON-NLS-1$
@@ -667,296 +573,269 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 IN ('x')", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
- public void testSetCriteria6() {
+ //Test for success NOT IN
+ @Test public void testSetCriteria7() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- helpTestVisitor("pm1.g1.e1 IN ('x')", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
+ helpTestVisitor("pm1.g1.e1 NOT IN ('x')", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- //Test for success NOT IN
- public void testSetCriteria7() {
+ @Test public void testSetCriteria7fails() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- helpTestVisitor("pm1.g1.e1 NOT IN ('x')", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
+ helpTestVisitor("pm1.g1.e1 NOT IN ('x')", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
- public void testSetCriteria8() {
+ @Test public void testSetCriteria8() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(2));
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 IN ('x', 'y', 'z')", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
- public void testSetCriteria9() {
+ @Test public void testSetCriteria9() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(2));
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 IN ('x', 'y')", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testSubquerySetCriteria() {
+ @Test public void testSubquerySetCriteria() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitor("pm1.g1.e1 IN (SELECT 'xyz' FROM pm1.g1)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
+ @Test public void testSearchCase() {
+ FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
+ Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
+
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = new BasicSourceCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ helpTestVisitor("pm1.g1.e1 = case when pm1.g1.e2 = 1 then 1 else 2 end", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
+ }
// has all capabilities
- public void testSubqueryCompareCriteriaSuccess() {
+ @Test public void testSubqueryCompareCriteriaSuccess() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 = ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
// does not have where capability
- public void testSubqueryCompareCriteriaCapFail1() {
+ @Test public void testSubqueryCompareCriteriaCapFail1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 = ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have compare capability
- public void testSubqueryCompareCriteriaCapFail2() {
+ @Test public void testSubqueryCompareCriteriaCapFail2() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 = ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have subquery capability
- public void testSubqueryCompareCriteriaFail3() {
+ @Test public void testSubqueryCompareCriteriaFail3() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 = ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have quantified subquery comparison capability
- public void testSubqueryCompareCriteriaFail4() {
+ @Test public void testSubqueryCompareCriteriaFail4() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 = ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have quantified subquery comparison capability for ANY
- public void testSubqueryCompareCriteriaFail5() {
+ @Test public void testSubqueryCompareCriteriaFail5() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_ALL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_ALL, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 = ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have quantified subquery comparison capability for ALL
- public void testSubqueryCompareCriteriaFail6() {
+ @Test public void testSubqueryCompareCriteriaFail6() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_SOME, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_ALL, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_SOME, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_ALL, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 = ALL (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have = capability
- public void testSubqueryCompareCriteriaOpCapFail1() {
+ @Test public void testSubqueryCompareCriteriaOpCapFail1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 = ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have <> capability
- public void testSubqueryCompareCriteriaOpCapFail2() {
+ @Test public void testSubqueryCompareCriteriaOpCapFail2() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_NE, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 <> ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have < capability
- public void testSubqueryCompareCriteriaOpCapFail3() {
+ @Test public void testSubqueryCompareCriteriaOpCapFail3() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_LT, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 < ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have <= capability
- public void testSubqueryCompareCriteriaOpCapFail4() {
+ @Test public void testSubqueryCompareCriteriaOpCapFail4() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_LE, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 <= ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have > capability
- public void testSubqueryCompareCriteriaOpCapFail5() {
+ @Test public void testSubqueryCompareCriteriaOpCapFail5() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 > ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// does not have >= capability
- public void testSubqueryCompareCriteriaOpCapFail6() {
+ @Test public void testSubqueryCompareCriteriaOpCapFail6() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 >= ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
// element not searchable
- public void testSubqueryCompareCriteriaSearchableFail() {
+ @Test public void testSubqueryCompareCriteriaSearchableFail() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeMetadataObject e1 = metadata.getStore().findObject("pm1.g1.e1", FakeMetadataObject.ELEMENT); //$NON-NLS-1$
@@ -964,63 +843,45 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE pm1.g1.e1 = ANY (SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
- public void testExistsCriteria1() {
+ @Test public void testExistsCriteria1() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_EXISTS, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_EXISTS, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE EXISTS(SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
- public void testExistsCriteria2() {
+ @Test public void testExistsCriteria2() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_EXISTS, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_EXISTS, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE EXISTS(SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
}
- public void testExistsCriteria4() {
+ @Test public void testExistsCriteria5() {
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_EXISTS, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_EXISTS, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
- helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE EXISTS(SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, false, false); //$NON-NLS-1$
- }
-
- public void testExistsCriteria5() {
- FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
- Object modelID = metadata.getStore().findObject("pm1", FakeMetadataObject.MODEL); //$NON-NLS-1$
-
- FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
- BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_EXISTS, true);
- capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
-
helpTestVisitorWithCommand("SELECT e1 FROM pm1.g1 WHERE EXISTS(SELECT e1 FROM pm1.g2)", modelID, metadata, capFinder, true, false); //$NON-NLS-1$
}
}
Modified: trunk/engine/src/test/java/com/metamatrix/query/processor/TestDependentJoins.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/processor/TestDependentJoins.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/processor/TestDependentJoins.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -422,16 +422,13 @@
BasicSourceCapabilities depcaps = new BasicSourceCapabilities();
depcaps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1));
- depcaps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- depcaps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- depcaps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ depcaps.setCapabilitySupport(Capability.CRITERIA_IN, true);
if(accessNodeHandlesAliases) {
depcaps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
}
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
capFinder.addCapabilities("pm4", depcaps); //$NON-NLS-1$
@@ -597,14 +594,12 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities depcaps = new BasicSourceCapabilities();
- depcaps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- depcaps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ depcaps.setCapabilitySupport(Capability.CRITERIA_IN, true);
depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1));
depcaps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm6", depcaps); //$NON-NLS-1$
@@ -634,14 +629,11 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities depcaps = new BasicSourceCapabilities();
- depcaps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- depcaps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ depcaps.setCapabilitySupport(Capability.CRITERIA_IN, true);
depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1));
- depcaps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", depcaps); //$NON-NLS-1$
@@ -692,13 +684,10 @@
BasicSourceCapabilities depcaps = new BasicSourceCapabilities();
depcaps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
depcaps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1));
- depcaps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- depcaps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- depcaps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
+ depcaps.setCapabilitySupport(Capability.CRITERIA_IN, true);
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
capFinder.addCapabilities("pm4", depcaps); //$NON-NLS-1$
@@ -766,8 +755,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", caps); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/processor/TestProcessor.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -2567,15 +2567,11 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_LT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_COMPARISON, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_QUANTIFIED_ALL, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_QUANTIFIED_ALL, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
@@ -2623,11 +2619,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
@@ -2663,11 +2657,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
@@ -4643,7 +4635,6 @@
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, false);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.FUNCTION, false);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
// Parse query
@@ -4888,7 +4879,7 @@
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
FakeCapabilitiesFinder finder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, pushDown);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, pushDown);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, pushDown);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(2));
caps.setFunctionSupport("+", pushDown); //$NON-NLS-1$
@@ -5312,8 +5303,7 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
capFinder.addCapabilities("pm2", caps); //$NON-NLS-1$
@@ -5342,11 +5332,8 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_AND, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_NE, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, false);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
Command command = helpParse("SELECT e5, e2, e3, e4 FROM vm1.g1c WHERE e5 >= {ts'2004-08-01 00:00:00.0'}"); //$NON-NLS-1$
@@ -5393,10 +5380,8 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1000));
caps.setFunctionSupport("||", true); //$NON-NLS-1$
caps.setFunctionSupport("rtrim", true); //$NON-NLS-1$
@@ -5439,10 +5424,8 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setSourceProperty(Capability.MAX_IN_CRITERIA_SIZE, new Integer(1));
caps.setFunctionSupport("||", true); //$NON-NLS-1$
caps.setFunctionSupport("rtrim", true); //$NON-NLS-1$
@@ -5516,8 +5499,8 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT, true);
@@ -5554,12 +5537,10 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
caps.setCapabilitySupport(Capability.QUERY_SET_ORDER_BY, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
@@ -5588,10 +5569,7 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport("myrtrim", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
@@ -5629,10 +5607,7 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport("myrtrim", true); //$NON-NLS-1$
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("pm4", caps); //$NON-NLS-1$
@@ -5661,11 +5636,9 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, false);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
@@ -5676,7 +5649,7 @@
Set atomicQueries = TestOptimizer.getAtomicQueries(plan);
assertEquals("Expected one query to get pushed down", 1, atomicQueries.size()); //$NON-NLS-1$
String atomicSql = atomicQueries.iterator().next().toString();
- String expectedSql = "SELECT BQT1.SmallA.IntKey, BQT1.SmallB.IntKey FROM BQT1.SmallA, BQT1.SmallB WHERE (BQT1.SmallA.IntKey = 5) AND (BQT1.SmallB.IntKey = 5)"; //$NON-NLS-1$
+ String expectedSql = "SELECT BQT1.SmallA.IntKey, BQT1.SmallB.IntKey FROM BQT1.SmallA, BQT1.SmallB WHERE (BQT1.SmallA.IntKey = BQT1.SmallB.IntKey) AND (BQT1.SmallA.IntKey = 5) AND (BQT1.SmallB.IntKey = 5)"; //$NON-NLS-1$
assertEquals(expectedSql, atomicSql);
List[] expected = new List[] {
@@ -5695,9 +5668,8 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, false);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, false);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
@@ -5742,11 +5714,9 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, false);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
capFinder.addCapabilities("BQT2", caps); //$NON-NLS-1$
@@ -5758,7 +5728,7 @@
Set atomicQueries = TestOptimizer.getAtomicQueries(plan);
assertEquals("Expected 2 queries to get pushed down", 2, atomicQueries.size()); //$NON-NLS-1$
- String expectedSql = "SELECT BQT1.SmallA.IntKey FROM BQT1.SmallA, BQT1.SmallB WHERE (BQT1.SmallA.IntKey = 5) AND (BQT1.SmallB.IntKey = 5)"; //$NON-NLS-1$
+ String expectedSql = "SELECT BQT1.SmallA.IntKey FROM BQT1.SmallA, BQT1.SmallB WHERE (BQT1.SmallA.IntKey = BQT1.SmallB.IntKey) AND (BQT1.SmallA.IntKey = 5) AND (BQT1.SmallB.IntKey = 5)"; //$NON-NLS-1$
String expectedSql2 = "SELECT BQT2.SmallA.IntKey FROM BQT2.SmallA WHERE BQT2.SmallA.IntKey = 5"; //$NON-NLS-1$
Set expectedQueries = new HashSet();
@@ -5792,9 +5762,7 @@
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -5831,9 +5799,7 @@
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, false); // Can't push GROUP BY
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
@@ -5872,9 +5838,6 @@
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, false); // Can't push GROUP BY
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
@@ -5914,9 +5877,6 @@
caps.setCapabilitySupport(Capability.QUERY_SEARCHED_CASE, false); // Can't push GROUP BY
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES, true);
caps.setCapabilitySupport(Capability.QUERY_AGGREGATES_SUM, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GE, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.exampleBQTCached();
@@ -5987,7 +5947,7 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -6083,11 +6043,8 @@
// Plan query
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("concat", true); //$NON-NLS-1$
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
@@ -6555,7 +6512,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("p1", caps); //$NON-NLS-1$
Command command = helpParse(sql);
@@ -6665,7 +6622,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_UNION, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("BQT1", caps); //$NON-NLS-1$
capFinder.addCapabilities("BQT2", caps); //$NON-NLS-1$
@@ -7273,9 +7230,9 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
caps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true);
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN_SUBQUERY, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
Command command = helpParse(sql);
@@ -7290,9 +7247,7 @@
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
// Plan query
@@ -7984,7 +7939,7 @@
public void testPushdownNonAliasedSelectLiteral() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_SELECT_LITERALS, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
Modified: trunk/engine/src/test/java/com/metamatrix/query/processor/TestVirtualDepJoin.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/processor/TestVirtualDepJoin.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/processor/TestVirtualDepJoin.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -248,8 +248,8 @@
Command command = TestProcessor.helpParse(sql);
FakeCapabilitiesFinder finder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, false);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, setPushdown);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, false);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, setPushdown);
finder.addCapabilities("US", caps); //$NON-NLS-1$
finder.addCapabilities("Europe", caps);//$NON-NLS-1$
finder.addCapabilities("CustomerMaster", caps);//$NON-NLS-1$
@@ -315,7 +315,7 @@
FakeCapabilitiesFinder finder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps1 = TestOptimizer.getTypicalCapabilities();
BasicSourceCapabilities caps2 = TestOptimizer.getTypicalCapabilities();
- caps2.setCapabilitySupport(Capability.QUERY_WHERE_IN, false);
+ caps2.setCapabilitySupport(Capability.CRITERIA_IN, false);
finder.addCapabilities("US", caps1); //$NON-NLS-1$
finder.addCapabilities("Europe", caps2);//$NON-NLS-1$
finder.addCapabilities("CustomerMaster", caps1);//$NON-NLS-1$
@@ -530,7 +530,7 @@
Command command = TestProcessor.helpParse(sql);
FakeCapabilitiesFinder finder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, pushCriteria);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, pushCriteria);
finder.addCapabilities("US", caps); //$NON-NLS-1$
finder.addCapabilities("Europe", caps);//$NON-NLS-1$
finder.addCapabilities("CustomerMaster", caps);//$NON-NLS-1$
Modified: trunk/engine/src/test/java/com/metamatrix/query/processor/xml/TestXMLProcessor.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/processor/xml/TestXMLProcessor.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/processor/xml/TestXMLProcessor.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -10062,10 +10062,7 @@
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_CORRELATED, true);
caps.setCapabilitySupport(Capability.QUERY_SUBQUERIES_SCALAR, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
CapabilitiesFinder capFinder = new SimpleCapabilitiesFinder(caps);
Modified: trunk/engine/src/test/java/com/metamatrix/query/sql/lang/TestCriteria.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/sql/lang/TestCriteria.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/sql/lang/TestCriteria.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -176,8 +176,8 @@
CompoundCriteria compCrit2 = new CompoundCriteria();
compCrit2.setOperator(CompoundCriteria.AND);
compCrit2.addCriteria(crit3);
- compCrit2.addCriteria(compCrit);
-
+ compCrit2.addCriteria(crit1);
+ compCrit2.addCriteria(crit2);
helpTestCombineCriteria(crit3, compCrit, compCrit2);
}
Modified: trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFacade.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFacade.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFacade.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -559,7 +559,8 @@
public Properties getExtensionProperties(Object metadataID)
throws MetaMatrixComponentException, QueryMetadataException {
- return null;
+ ArgCheck.isInstanceOf(FakeMetadataObject.class, metadataID);
+ return ((FakeMetadataObject)metadataID).getExtensionProps();
}
public int getElementLength(Object elementID) throws MetaMatrixComponentException, QueryMetadataException {
Modified: trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -30,7 +30,6 @@
import java.util.List;
import com.metamatrix.common.types.DataTypeManager;
-import com.metamatrix.common.types.DataTypeManager.DefaultDataClasses;
import com.metamatrix.dqp.message.ParameterInfo;
import com.metamatrix.query.mapping.relational.QueryNode;
import com.metamatrix.query.mapping.xml.MappingAttribute;
@@ -1738,6 +1737,7 @@
FakeMetadataObject pm3g2 = createPhysicalGroup("pm3.g2", pm3); //$NON-NLS-1$
FakeMetadataObject pm3g3 = createPhysicalGroup("pm3.g3", pm3); //$NON-NLS-1$
FakeMetadataObject pm4g1 = createPhysicalGroup("pm4.g1", pm4); //$NON-NLS-1$
+ FakeMetadataObject pm4g2 = createPhysicalGroup("pm4.g2", pm4); //$NON-NLS-1$
// Add group cardinality metadata
pm1g1.putProperty(FakeMetadataObject.Props.CARDINALITY, new Integer(10));
pm1g2.putProperty(FakeMetadataObject.Props.CARDINALITY, new Integer(10));
@@ -1780,23 +1780,16 @@
List pm4g1e = createElements(pm4g1,
new String[] { "e1", "e2", "e3", "e4" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.BOOLEAN, DataTypeManager.DefaultDataTypes.DOUBLE });
+ List pm4g2e = createElements(pm4g2,
+ new String[] { "e1", "e2", "e3", "e4" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+ new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.BOOLEAN, DataTypeManager.DefaultDataTypes.DOUBLE });
// Add key metadata
- List keyElements = new ArrayList(1);
- keyElements.add(pm1g1e.iterator().next());
- FakeMetadataObject pm1g1key1 = createKey("pm1.g1.key1", pm1g1, keyElements); //e1 //$NON-NLS-1$
- keyElements = new ArrayList(1);
- keyElements.add(pm3g1e.iterator().next());
- FakeMetadataObject pm3g1key1 = createKey("pm3.g1.key1", pm3g1, keyElements); //e1 //$NON-NLS-1$
- keyElements = new ArrayList(1);
- keyElements.add(pm3g3e.iterator().next());
- FakeMetadataObject pm3g3key1 = createKey("pm3.g3.key1", pm3g3, keyElements); //e1 //$NON-NLS-1$
- keyElements = new ArrayList(1);
- Iterator i = pm4g1e.iterator();
- keyElements.add(i.next());
- keyElements.add(i.next());
- FakeMetadataObject pm4g1key1 = createKey("pm4.g1.key1", pm4g1, keyElements); //e1, e2 //$NON-NLS-1$
-
+ FakeMetadataObject pm1g1key1 = createKey("pm1.g1.key1", pm1g1, pm1g1e.subList(0, 1)); //e1 //$NON-NLS-1$
+ FakeMetadataObject pm3g1key1 = createKey("pm3.g1.key1", pm3g1, pm3g1e.subList(0, 1)); //e1 //$NON-NLS-1$
+ FakeMetadataObject pm3g3key1 = createKey("pm3.g3.key1", pm3g3, pm3g3e.subList(0, 1)); //e1 //$NON-NLS-1$
+ FakeMetadataObject pm4g1key1 = createKey("pm4.g1.key1", pm4g1, pm4g1e.subList(0, 2)); //e1, e2 //$NON-NLS-1$
+ FakeMetadataObject pm4g2key1 = createForeignKey("pm4.g2.fk", pm4g2, pm4g2e.subList(0, 2), pm4g1key1); //$NON-NLS-1$
// Add access pattern metadata
// Create access patterns - pm1
List elements = new ArrayList(1);
@@ -1876,7 +1869,10 @@
store.addObject(pm4g1);
store.addObjects(pm4g1e);
store.addObject(pm4g1key1);
-
+ store.addObject(pm4g2);
+ store.addObjects(pm4g2e);
+ store.addObject(pm4g2key1);
+
store.addObject(vm1);
store.addObject(vm1g1);
store.addObjects(vm1g1e);
@@ -4125,29 +4121,9 @@
* @param index Column index in group
* @return FakeMetadataObject Metadata object for element
*/
- public static FakeMetadataObject createElement(String name, FakeMetadataObject group, String type, int index) {
- FakeMetadataObject obj = new FakeMetadataObject(name, FakeMetadataObject.ELEMENT);
- obj.putProperty(FakeMetadataObject.Props.MODEL, group.getProperty(FakeMetadataObject.Props.MODEL));
- obj.putProperty(FakeMetadataObject.Props.GROUP, group);
- obj.putProperty(FakeMetadataObject.Props.TYPE, type);
-
- obj.putProperty(FakeMetadataObject.Props.SELECT, Boolean.TRUE);
- if(type.equals(DataTypeManager.DefaultDataTypes.STRING)) {
- obj.putProperty(FakeMetadataObject.Props.SEARCHABLE_LIKE, Boolean.TRUE);
- } else {
- obj.putProperty(FakeMetadataObject.Props.SEARCHABLE_LIKE, Boolean.FALSE);
- }
- obj.putProperty(FakeMetadataObject.Props.SEARCHABLE_COMPARE, Boolean.TRUE);
- obj.putProperty(FakeMetadataObject.Props.NULL, Boolean.TRUE);
- obj.putProperty(FakeMetadataObject.Props.AUTO_INCREMENT, Boolean.FALSE);
- obj.putProperty(FakeMetadataObject.Props.CASE_SENSITIVE, Boolean.FALSE);
- obj.putProperty(FakeMetadataObject.Props.DEFAULT_VALUE, null);
- obj.putProperty(FakeMetadataObject.Props.INDEX, new Integer(index));
- obj.putProperty(FakeMetadataObject.Props.UPDATE, Boolean.TRUE);
- obj.putProperty(FakeMetadataObject.Props.LENGTH, "100"); //$NON-NLS-1$
- obj.putProperty(FakeMetadataObject.Props.NAME_IN_SOURCE, (name.lastIndexOf(".") == -1)? name : name.substring(name.lastIndexOf(".") + 1) ); //$NON-NLS-1$ //$NON-NLS-2$
- return obj;
- }
+ public static FakeMetadataObject createElement(String name, FakeMetadataObject group, String type, int index) {
+ return createElement(name, group, type, index, true);
+ }
public static FakeMetadataObject createElement(String name, FakeMetadataObject group, String type, int index, boolean flag) {
FakeMetadataObject obj = new FakeMetadataObject(name, FakeMetadataObject.ELEMENT);
@@ -4169,11 +4145,11 @@
obj.putProperty(FakeMetadataObject.Props.UPDATE, Boolean.TRUE);
obj.putProperty(FakeMetadataObject.Props.LENGTH, "100"); //$NON-NLS-1$
- int indexOfDot = name.indexOf("."); //$NON-NLS-1$
+ int indexOfDot = name.lastIndexOf("."); //$NON-NLS-1$
if (flag) {
name = name.substring(indexOfDot+1);
} else {
- name = "" + index; //$NON-NLS-1$
+ name = String.valueOf(index);
}
obj.putProperty(FakeMetadataObject.Props.NAME_IN_SOURCE, name);
Modified: trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataObject.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataObject.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataObject.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -22,8 +22,10 @@
package com.metamatrix.query.unittest;
-import java.util.*;
import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
public class FakeMetadataObject implements Comparable, Serializable {
@@ -46,6 +48,7 @@
private String type;
private Object defaultValue;
private Map props = new HashMap();
+ private Properties extensionProps;
public FakeMetadataObject(String name, String type) {
this.name = name;
@@ -133,6 +136,16 @@
}
}
+ public void setExtensionProp(String name, String value) {
+ if (this.extensionProps == null) {
+ this.extensionProps = new Properties();
+ }
+ this.extensionProps.setProperty(name, value);
+ }
+
+ public Properties getExtensionProps() {
+ return extensionProps;
+ }
public String toString() {
return getType() + "(" + getName() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
Modified: trunk/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java
===================================================================
--- trunk/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/com/metamatrix/query/validator/TestValidator.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -104,7 +104,7 @@
return externalMetadata;
}
- public FakeMetadataFacade exampleMetadata() {
+ public static FakeMetadataFacade exampleMetadata() {
// Create metadata objects
FakeMetadataObject modelObj = FakeMetadataFactory.createPhysicalModel("test"); //$NON-NLS-1$
FakeMetadataObject vModelObj2 = FakeMetadataFactory.createVirtualModel("vTest"); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/impl/TestConnectorManagerImpl.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/impl/TestConnectorManagerImpl.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/impl/TestConnectorManagerImpl.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -102,7 +102,7 @@
AtomicRequestMessage request = TestConnectorWorkItem.createNewAtomicRequestMessage(1, 1);
SourceCapabilities caps = cm.getCapabilities(request.getRequestID(), null, Mockito.mock(DQPWorkContext.class));
- assertFalse(caps.supportsCapability(Capability.QUERY_WHERE_EXISTS));
+ assertFalse(caps.supportsCapability(Capability.CRITERIA_EXISTS));
assertFalse(caps.supportsCapability(Capability.QUERY_EXCEPT));
@@ -113,7 +113,7 @@
startConnectorManager(cmnew, props);
SourceCapabilities capsnew = cmnew.getCapabilities(request.getRequestID(), null, Mockito.mock(DQPWorkContext.class));
- assertTrue(capsnew.supportsCapability(Capability.QUERY_WHERE_EXISTS));
+ assertTrue(capsnew.supportsCapability(Capability.CRITERIA_EXISTS));
assertTrue(capsnew.supportsCapability(Capability.QUERY_EXCEPT));
}
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestElementImpl.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestElementImpl.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/language/TestElementImpl.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -22,17 +22,15 @@
package org.teiid.dqp.internal.datamgr.language;
+import junit.framework.TestCase;
+
import org.teiid.connector.language.IElement;
import org.teiid.connector.language.IGroup;
import org.teiid.connector.metadata.runtime.Element;
-import org.teiid.dqp.internal.datamgr.language.ElementImpl;
-import org.teiid.dqp.internal.datamgr.language.GroupImpl;
-import org.teiid.dqp.internal.datamgr.metadata.TestMetadataFactory;
-import junit.framework.TestCase;
-
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.query.sql.symbol.ElementSymbol;
+import com.metamatrix.query.unittest.FakeMetadataFactory;
import com.metamatrix.query.unittest.FakeMetadataObject;
public class TestElementImpl extends TestCase {
@@ -96,8 +94,8 @@
}
public void testGetMetadataID() throws Exception {
- FakeMetadataObject group = TestMetadataFactory.createGroup("pm1.g1", null); //$NON-NLS-1$
- FakeMetadataObject metadataID = TestMetadataFactory.createElement("e", group, DataTypeManager.DefaultDataTypes.STRING, 0); //$NON-NLS-1$
+ FakeMetadataObject group = FakeMetadataFactory.createPhysicalGroup("pm1.g1", FakeMetadataFactory.createPhysicalModel("pm1.g1")); //$NON-NLS-1$ //$NON-NLS-2$
+ FakeMetadataObject metadataID = FakeMetadataFactory.createElement("e", group, DataTypeManager.DefaultDataTypes.STRING, 0); //$NON-NLS-1$
assertNotNull(example("pm1.g1", "e", metadataID).getMetadataObject()); //$NON-NLS-1$ //$NON-NLS-2$
}
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/metadata/TestMetadataFactory.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/metadata/TestMetadataFactory.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/datamgr/metadata/TestMetadataFactory.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -24,17 +24,13 @@
*/
package org.teiid.dqp.internal.datamgr.metadata;
-import java.util.ArrayList;
import java.util.List;
-import org.teiid.dqp.internal.datamgr.metadata.ElementImpl;
-import org.teiid.dqp.internal.datamgr.metadata.GroupImpl;
-import org.teiid.dqp.internal.datamgr.metadata.RuntimeMetadataImpl;
-
import junit.framework.TestCase;
import com.metamatrix.common.types.DataTypeManager;
import com.metamatrix.query.unittest.FakeMetadataFacade;
+import com.metamatrix.query.unittest.FakeMetadataFactory;
import com.metamatrix.query.unittest.FakeMetadataObject;
import com.metamatrix.query.unittest.FakeMetadataStore;
@@ -49,8 +45,8 @@
public void setUp(){
FakeMetadataStore store = new FakeMetadataStore();
- pm1g1 = createGroup("pm1.g1", null); //$NON-NLS-1$
- List pm1g1e = createElements(pm1g1,
+ pm1g1 = FakeMetadataFactory.createPhysicalGroup("pm1.g1", FakeMetadataFactory.createPhysicalModel("pm1.g1")); //$NON-NLS-1$ //$NON-NLS-2$
+ List pm1g1e = FakeMetadataFactory.createElements(pm1g1,
new String[] { "e1", "e2", "e3", "e4" }, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
new String[] { DataTypeManager.DefaultDataTypes.STRING, DataTypeManager.DefaultDataTypes.INTEGER, DataTypeManager.DefaultDataTypes.BOOLEAN, DataTypeManager.DefaultDataTypes.DOUBLE });
pm1g1e1 = (FakeMetadataObject)pm1g1e.get(0);
@@ -58,53 +54,7 @@
store.addObjects(pm1g1e);
metadataFactory = new RuntimeMetadataImpl(new FakeMetadataFacade(store));
}
-
-
- public static FakeMetadataObject createGroup(String name, FakeMetadataObject model) {
- FakeMetadataObject obj = new FakeMetadataObject(name, FakeMetadataObject.GROUP);
- obj.putProperty(FakeMetadataObject.Props.MODEL, model);
- obj.putProperty(FakeMetadataObject.Props.IS_VIRTUAL, Boolean.FALSE);
- obj.putProperty(FakeMetadataObject.Props.UPDATE, Boolean.TRUE);
- obj.putProperty(FakeMetadataObject.Props.TEMP, Boolean.FALSE);
- obj.putProperty(FakeMetadataObject.Props.NAME_IN_SOURCE, name.substring(name.lastIndexOf(".")+1)); //$NON-NLS-1$
- return obj;
- }
- public static FakeMetadataObject createElement(String name, FakeMetadataObject group, String type, int index) {
- FakeMetadataObject obj = new FakeMetadataObject(name, FakeMetadataObject.ELEMENT);
- obj.putProperty(FakeMetadataObject.Props.MODEL, group.getProperty(FakeMetadataObject.Props.MODEL));
- obj.putProperty(FakeMetadataObject.Props.GROUP, group);
- obj.putProperty(FakeMetadataObject.Props.TYPE, type);
-
- obj.putProperty(FakeMetadataObject.Props.SELECT, Boolean.TRUE);
- if(type.equals("string")) { //$NON-NLS-1$
- obj.putProperty(FakeMetadataObject.Props.SEARCHABLE_LIKE, Boolean.TRUE);
- } else {
- obj.putProperty(FakeMetadataObject.Props.SEARCHABLE_LIKE, Boolean.FALSE);
- }
- obj.putProperty(FakeMetadataObject.Props.SEARCHABLE_COMPARE, Boolean.TRUE);
- obj.putProperty(FakeMetadataObject.Props.NULL, Boolean.TRUE);
- obj.putProperty(FakeMetadataObject.Props.AUTO_INCREMENT, Boolean.FALSE);
- obj.putProperty(FakeMetadataObject.Props.DEFAULT_VALUE, null);
- obj.putProperty(FakeMetadataObject.Props.INDEX, new Integer(index));
- obj.putProperty(FakeMetadataObject.Props.UPDATE, Boolean.TRUE);
- obj.putProperty(FakeMetadataObject.Props.LENGTH, "100"); //$NON-NLS-1$
- obj.putProperty(FakeMetadataObject.Props.NAME_IN_SOURCE, name.substring(name.lastIndexOf(".")+1)); //$NON-NLS-1$
- return obj;
- }
-
- public static List createElements(FakeMetadataObject group, String[] names, String[] types) {
- String groupRoot = group.getName() + "."; //$NON-NLS-1$
- List elements = new ArrayList();
-
- for(int i=0; i<names.length; i++) {
- FakeMetadataObject element = createElement(groupRoot + names[i], group, types[i], i);
- elements.add(element);
- }
-
- return elements;
- }
-
//tests
public void testCreateMetadataID() throws Exception {
@@ -127,7 +77,7 @@
ElementImpl element = metadataFactory.getElement(pm1g1e1);
assertEquals(element.getLength(), 100);
assertEquals(element.getJavaType(), DataTypeManager.DefaultDataClasses.STRING);
- assertEquals(element.getNameInSource(), "e1"); //$NON-NLS-1$
+ assertEquals("e1", element.getNameInSource()); //$NON-NLS-1$
assertEquals(element.getActualID(), pm1g1e1);
}
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 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/TestPreparedStatement.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -190,19 +190,16 @@
//Create plan
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
- caps.setCapabilitySupport(Capability.QUERY_WHERE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_EQ, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_COMPARE_GT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_NOT, true);
- caps.setCapabilitySupport(Capability.QUERY_WHERE_IN, true);
- caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_EQ, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_COMPARE_ORDERED, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_NOT, true);
+ caps.setCapabilitySupport(Capability.CRITERIA_IN, true);
+ caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER_FULL, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_SELFJOIN, true);
caps.setCapabilitySupport(Capability.QUERY_FROM_GROUP_ALIAS, true);
caps.setCapabilitySupport(Capability.QUERY_ORDERBY, true);
- caps.setCapabilitySupport(Capability.FUNCTION, true);
caps.setFunctionSupport("+", false); //$NON-NLS-1$
caps.setFunctionSupport("convert", true); //$NON-NLS-1$
capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
Modified: trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourceCapabilitiesFinder.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourceCapabilitiesFinder.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourceCapabilitiesFinder.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -58,16 +58,14 @@
assertEquals(true, singleCaps.supportsCapability(Capability.QUERY_UNION));
assertEquals(true, singleCaps.supportsCapability(Capability.QUERY_ORDERBY));
assertEquals(true, singleCaps.supportsCapability(Capability.QUERY_SELECT_DISTINCT));
- assertEquals(true, singleCaps.supportsCapability(Capability.QUERY_AGGREGATES));
- assertEquals(true, singleCaps.supportsCapability(Capability.QUERY_WHERE_COMPARE));
+ assertEquals(true, singleCaps.supportsCapability(Capability.QUERY_AGGREGATES_AVG));
// Test the multi model to show that it IS affected
SourceCapabilities multiCaps = finder.findCapabilities(MULTI_MODEL);
assertEquals(false, multiCaps.supportsCapability(Capability.QUERY_UNION));
assertEquals(false, multiCaps.supportsCapability(Capability.QUERY_ORDERBY));
assertEquals(false, multiCaps.supportsCapability(Capability.QUERY_SELECT_DISTINCT));
- assertEquals(false, multiCaps.supportsCapability(Capability.QUERY_AGGREGATES));
- assertEquals(true, multiCaps.supportsCapability(Capability.QUERY_WHERE_COMPARE));
+ assertEquals(false, multiCaps.supportsCapability(Capability.QUERY_AGGREGATES_AVG));
}
}
Modified: trunk/test-integration/src/test/java/com/metamatrix/server/integration/TestTPCR.java
===================================================================
--- trunk/test-integration/src/test/java/com/metamatrix/server/integration/TestTPCR.java 2009-05-06 17:19:14 UTC (rev 867)
+++ trunk/test-integration/src/test/java/com/metamatrix/server/integration/TestTPCR.java 2009-05-06 20:38:38 UTC (rev 868)
@@ -32,6 +32,7 @@
import com.metamatrix.core.util.UnitTestUtil;
import com.metamatrix.query.metadata.QueryMetadataInterface;
import com.metamatrix.query.optimizer.TestOptimizer;
+import com.metamatrix.query.optimizer.TestOptimizer.ComparisonMode;
import com.metamatrix.query.optimizer.capabilities.FakeCapabilitiesFinder;
import com.metamatrix.query.processor.HardcodedDataManager;
import com.metamatrix.query.processor.ProcessorPlan;
@@ -75,7 +76,7 @@
Arrays.asList(new Object[] { new Double(3459808.0), new BigDecimal("405838.6989"), TimestampUtil.createDate(95, 2, 4), new Double(0.0) }), //$NON-NLS-1$
Arrays.asList(new Object[] { new Double(492164.0), new BigDecimal("390324.0610"), TimestampUtil.createDate(95, 1, 19), new Double(0.0) }) }; //$NON-NLS-1$
- dataMgr.addData("SELECT g_2.l_orderkey AS c_0, SUM((g_2.l_extendedprice * (1 - g_2.l_discount))) AS c_1, g_1.o_orderdate AS c_2, g_1.o_shippriority AS c_3 FROM TPCR_Oracle_9i.CUSTOMER AS g_0, TPCR_Oracle_9i.ORDERS AS g_1, TPCR_Oracle_9i.LINEITEM AS g_2 WHERE (g_2.l_orderkey = g_1.o_orderkey) AND (g_2.l_shipdate > {ts'1995-03-15 00:00:00.0'}) AND (g_0.c_custkey = g_1.o_custkey) AND (g_0.c_mktsegment = 'BUILDING') AND (g_1.o_orderdate < {d'1995-03-15'}) GROUP BY g_2.l_orderkey, g_1.o_orderdate, g_1.o_shippriority ORDER BY c_1 DESC, c_2", //$NON-NLS-1$
+ dataMgr.addData("SELECT g_2.l_orderkey AS c_0, SUM((g_2.l_extendedprice * (1 - g_2.l_discount))) AS c_1, g_1.o_orderdate AS c_2, g_1.o_shippriority AS c_3 FROM TPCR_Oracle_9i.CUSTOMER AS g_0, TPCR_Oracle_9i.ORDERS AS g_1, TPCR_Oracle_9i.LINEITEM AS g_2 WHERE (g_0.c_custkey = g_1.o_custkey) AND (g_2.l_orderkey = g_1.o_orderkey) AND (g_0.c_mktsegment = 'BUILDING') AND (g_1.o_orderdate < {d'1995-03-15'}) AND (g_2.l_shipdate > {ts'1995-03-15 00:00:00.0'}) GROUP BY g_2.l_orderkey, g_1.o_orderdate, g_1.o_shippriority ORDER BY c_1 DESC, c_2", //$NON-NLS-1$
expected);
doProcess(plan, dataMgr, expected, DEBUG);
@@ -212,7 +213,7 @@
ProcessorPlan plan = TestOptimizer.helpPlan("select S_ACCTBAL, S_NAME, N_NAME, P_PARTKEY, P_MFGR, S_ADDRESS, S_PHONE, S_COMMENT from (SELECT SUPPLIER.S_ACCTBAL, SUPPLIER.S_NAME, NATION.N_NAME, PART.P_PARTKEY, PART.P_MFGR, SUPPLIER.S_ADDRESS, SUPPLIER.S_PHONE, SUPPLIER.S_COMMENT FROM PART, SUPPLIER, PARTSUPP, NATION, REGION WHERE (PART.P_PARTKEY = PS_PARTKEY) AND (S_SUPPKEY = PS_SUPPKEY) AND (P_SIZE = 15) AND (P_TYPE LIKE '%BRASS') AND (S_NATIONKEY = N_NATIONKEY) AND (N_REGIONKEY = R_REGIONKEY) AND (R_NAME = 'EUROPE') AND (PS_SUPPLYCOST = (SELECT MIN(PS_SUPPLYCOST) FROM PARTSUPP, SUPPLIER, NATION, REGION WHERE (PART.P_PARTKEY = PS_PARTKEY) AND (S_SUPPKEY = PS_SUPPKEY) AND (S_NATIONKEY = N_NATIONKEY) AND (N_REGIONKEY = R_REGIONKEY) AND (R_NAME = 'EUROPE'))) ORDER BY SUPPLIER.S_ACCTBAL DESC, NATION.N_NAME, SUPPLIER.S_NAME, PART.P_PARTKEY) as x", //$NON-NLS-1$
METADATA, null, finder,
- new String[] {"SELECT g_1.S_ACCTBAL, g_1.S_NAME, g_3.N_NAME, g_0.P_PARTKEY, g_0.P_MFGR, g_1.S_ADDRESS, g_1.S_PHONE, g_1.S_COMMENT FROM TPCR_Oracle_9i.PART AS g_0, TPCR_Oracle_9i.SUPPLIER AS g_1, TPCR_Oracle_9i.PARTSUPP AS g_2, TPCR_Oracle_9i.NATION AS g_3, TPCR_Oracle_9i.REGION AS g_4 WHERE (g_0.P_PARTKEY = g_2.PS_PARTKEY) AND (g_2.PS_SUPPLYCOST = (SELECT MIN(g_5.PS_SUPPLYCOST) FROM TPCR_Oracle_9i.PARTSUPP AS g_5, TPCR_Oracle_9i.SUPPLIER AS g_6, TPCR_Oracle_9i.NATION AS g_7, TPCR_Oracle_9i.REGION AS g_8 WHERE (g_7.N_REGIONKEY = g_8.R_REGIONKEY) AND (g_8.R_NAME = 'EUROPE') AND (g_6.S_NATIONKEY = g_7.N_NATIONKEY) AND (g_6.S_SUPPKEY = g_5.PS_SUPPKEY) AND (g_5.PS_PARTKEY = g_0.P_PARTKEY))) AND (g_0.P_SIZE = 15.0) AND (g_0.P_TYPE LIKE '%BRASS') AND (g_1.S_NATIONKEY = g_3.N_NATIONKEY) AND (g_1.S_SUPPKEY = g_2.PS_SUPPKEY) AND (g_3.N_REGIONKEY = g_4.R_REGIONKEY) AND (g_4.R_NAME = 'EUROPE')"}, true); //$NON-NLS-1$
+ new String[] {"SELECT g_1.S_ACCTBAL, g_1.S_NAME, g_3.N_NAME, g_0.P_PARTKEY, g_0.P_MFGR, g_1.S_ADDRESS, g_1.S_PHONE, g_1.S_COMMENT FROM TPCR_Oracle_9i.PART AS g_0, TPCR_Oracle_9i.SUPPLIER AS g_1, TPCR_Oracle_9i.PARTSUPP AS g_2, TPCR_Oracle_9i.NATION AS g_3, TPCR_Oracle_9i.REGION AS g_4 WHERE (g_3.N_REGIONKEY = g_4.R_REGIONKEY) AND (g_1.S_NATIONKEY = g_3.N_NATIONKEY) AND (g_1.S_SUPPKEY = g_2.PS_SUPPKEY) AND (g_0.P_PARTKEY = g_2.PS_PARTKEY) AND (g_2.PS_SUPPLYCOST = (SELECT MIN(g_5.PS_SUPPLYCOST) FROM TPCR_Oracle_9i.PARTSUPP AS g_5, TPCR_Oracle_9i.SUPPLIER AS g_6, TPCR_Oracle_9i.NATION AS g_7, TPCR_Oracle_9i.REGION AS g_8 WHERE (g_6.S_SUPPKEY = g_5.PS_SUPPKEY) AND (g_6.S_NATIONKEY = g_7.N_NATIONKEY) AND (g_7.N_REGIONKEY = g_8.R_REGIONKEY) AND (g_5.PS_PARTKEY = g_0.P_PARTKEY) AND (g_8.R_NAME = 'EUROPE'))) AND (g_0.P_SIZE = 15.0) AND (g_0.P_TYPE LIKE '%BRASS') AND (g_4.R_NAME = 'EUROPE')"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
TestOptimizer.checkNodeTypes(plan, TestOptimizer.FULL_PUSHDOWN);
}
More information about the teiid-commits
mailing list