Capability() { this.toString = name(); }
public void testFindCapabilities() throws Exception { CapabilitiesFinder capFinder = new DefaultCapabilitiesFinder(); SourceCapabilities caps = capFinder.findCapabilities("blah"); //$NON-NLS-1$ assertNotNull("Default capabilities should not be null", caps); //$NON-NLS-1$ }
private FakeCapabilitiesFinder getFinder(Capability property, boolean supported) { // Set up capabilities FakeCapabilitiesFinder finder = new FakeCapabilitiesFinder(); BasicSourceCapabilities sourceCaps = new BasicSourceCapabilities(); sourceCaps.setCapabilitySupport(property, supported); finder.addCapabilities("pm1", sourceCaps); //$NON-NLS-1$ return finder; }
public void testPutGet() { BasicSourceCapabilities caps = new BasicSourceCapabilities(); // Check initial state 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_INNER, true); // Check current state assertEquals("Changed value for capability should be true", true, caps.supportsCapability(Capability.QUERY_FROM_JOIN_INNER)); //$NON-NLS-1$ }
private FakeCapabilitiesFinder getWhereAllCapabilities() { FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder(); BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities(); caps.setCapabilitySupport(Capability.REQUIRES_CRITERIA, true); capFinder.addCapabilities("pm1", TestOptimizer.getTypicalCapabilities()); //$NON-NLS-1$ capFinder.addCapabilities("pm6", caps); //$NON-NLS-1$ return capFinder; }
@Test public void testCase4312() { FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder(); BasicSourceCapabilities caps = getTypicalCapabilities(); caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true); caps.setFunctionSupport("+", true); //$NON-NLS-1$ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$ helpPlan("select ? + 1, pm1.g1.e1 AS EXPR_1 FROM pm1.g1", example1(), null, capFinder, //$NON-NLS-1$ new String[] { "SELECT (? + 1) AS expr, pm1.g1.e1 FROM pm1.g1"}, true); //$NON-NLS-1$ }
public static void initLanguageBridgeFactory(LanguageBridgeFactory factory, CommandContext context, SourceCapabilities capabilities) { factory.setCommandContext(context); factory.setSupportsConcat2(capabilities.supportsFunction(SourceSystemFunctions.CONCAT2)); factory.setSupportsCountBig(capabilities.supportsCapability(Capability.QUERY_AGGREGATES_COUNT_BIG)); factory.setMaxInPredicateSize((Integer) capabilities.getSourceProperty(Capability.MAX_IN_CRITERIA_SIZE)); factory.setExcludeWithName((String) capabilities.getSourceProperty(Capability.EXCLUDE_COMMON_TABLE_EXPRESSION_NAME)); factory.setSourceNullOrder((NullOrder) capabilities.getSourceProperty(Capability.QUERY_ORDERBY_DEFAULT_NULL_ORDER)); factory.setSupportsNullOrdering(capabilities.supportsCapability(Capability.QUERY_ORDERBY_NULL_ORDERING)); }
public static CapabilitiesFinder getGenericFinder(boolean supportsJoins) { final BasicSourceCapabilities caps = getTypicalCapabilities(); if (!supportsJoins) { caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, false); caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_OUTER, false); caps.setCapabilitySupport(Capability.QUERY_ORDERBY, false); } return new DefaultCapabilitiesFinder(caps); }
static SourceCapabilities getCapabilities(Object modelID, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException { // Find capabilities String modelName = metadata.getFullName(modelID); return capFinder.findCapabilities(modelName); }
public void visit(SearchedCaseExpression obj) { if(! this.caps.supportsCapability(Capability.QUERY_SEARCHED_CASE) && !willBecomeConstant(obj)) { markInvalid(obj, "SearchedCase is not supported by source"); //$NON-NLS-1$ } }
public boolean supportsCapability(Capability capability) { return !capability.equals(Capability.BATCHED_UPDATES) || supportsBatching; } }
@Test public void testSubqueryInWhereClause1() throws TeiidComponentException, TeiidProcessingException { FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder(); BasicSourceCapabilities caps = getTypicalCapabilities(); caps.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true); caps.setCapabilitySupport(Capability.QUERY_FROM_JOIN_INNER, true); caps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true); capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$ ProcessorPlan plan = helpPlan("Select e1 from pm1.g1 where e1 in /*+ mj */ (select e1 FROM pm1.g2)", example1(), //$NON-NLS-1$ null, capFinder, new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0, (SELECT DISTINCT g_1.e1 AS c_0 FROM pm1.g2 AS g_1) AS v_0 WHERE g_0.e1 = v_0.c_0"}, ComparisonMode.EXACT_COMMAND_STRING ); //$NON-NLS-1$ checkNodeTypes(plan, FULL_PUSHDOWN); }
@Test public void testConformedSubquery() throws Exception { String sql = "select pm2.g2.e1 from pm2.g2 where e1 in /*+ no_unnest */ (select e1 from pm1.g1)"; BasicSourceCapabilities bsc = getTypicalCapabilities(); bsc.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true); helpPlan(sql, tm, new String[] {"SELECT g_0.e1 FROM pm2.g2 AS g_0 WHERE g_0.e1 IN /*+ NO_UNNEST */ (SELECT g_1.e1 FROM pm1.g1 AS g_1)"}, new DefaultCapabilitiesFinder(bsc), ComparisonMode.EXACT_COMMAND_STRING); //TODO: it should work either way, but for now we expect the subquery to conform to the parent sql = "select pm1.g1.e1 from pm1.g1 where e2 in (select e2 from pm2.g2)"; }
Capability() { this.toString = name(); }
public void visit(CaseExpression obj) { if(! this.caps.supportsCapability(Capability.QUERY_CASE) && !willBecomeConstant(obj)) { markInvalid(obj, "CaseExpression pushdown not supported by source"); //$NON-NLS-1$ } }
@Test public void testPushSubqueryInWhereClause2() { FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder(); BasicSourceCapabilities caps = getTypicalCapabilities(); 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$ ProcessorPlan plan = helpPlan("Select e1 from pm1.g1 where e1 in /*+ no_unnest */ (select max(e1) FROM pm1.g2)", example1(), //$NON-NLS-1$ null, capFinder, new String[] { "SELECT e1 FROM pm1.g1 WHERE e1 IN /*+ NO_UNNEST */ (SELECT MAX(e1) FROM pm1.g2)" }, SHOULD_SUCCEED); //$NON-NLS-1$ checkNodeTypes(plan, FULL_PUSHDOWN); }
@Test public void testConformedSubquery1() throws Exception { String sql = "select pm2.g3.e1 from pm2.g3 where e1 in /*+ no_unnest */ (select e1 from pm1.g1)"; BasicSourceCapabilities bsc = getTypicalCapabilities(); bsc.setCapabilitySupport(Capability.CRITERIA_IN_SUBQUERY, true); helpPlan(sql, tm, new String[] {"SELECT g_0.e1 FROM pm2.g3 AS g_0 WHERE g_0.e1 IN /*+ NO_UNNEST */ (SELECT g_1.e1 FROM pm1.g1 AS g_1)"}, new DefaultCapabilitiesFinder(bsc), ComparisonMode.EXACT_COMMAND_STRING); }
Capability() { this.toString = name(); }
@Test public void testCase3367() throws Exception { FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder(); QueryMetadataInterface metadata = example1(); BasicSourceCapabilities caps = getTypicalCapabilities(); 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$ ProcessorPlan plan = helpPlan("select e1 from pm1.g1 where pm1.g1.e1 IN /*+ no_unnest */ (SELECT pm1.g2.e1 FROM pm1.g2 WHERE (pm1.g1.e1 = 2))", metadata, //$NON-NLS-1$ null, capFinder, new String[] { "SELECT g_0.e1 FROM pm1.g1 AS g_0 WHERE g_0.e1 IN /*+ NO_UNNEST */ (SELECT g_1.e1 FROM pm1.g2 AS g_1 WHERE g_0.e1 = '2')" }, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ checkNodeTypes(plan, FULL_PUSHDOWN); }
@Test public void testNestedTable() throws Exception { FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder(); BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities(); caps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true); capFinder.addCapabilities("pm2", caps); //$NON-NLS-1$ ProcessorPlan plan = helpPlan("select pm2.g1.e1, x.e1 from pm2.g1, table(select * from pm2.g2 where pm2.g1.e1=pm2.g2.e1) x where pm2.g1.e2 IN (1, 2)", example1(), //$NON-NLS-1$ new String[] { "SELECT g_0.e1 FROM pm2.g2 AS g_0 WHERE g_0.e1 = pm2.g1.e1", "SELECT g_0.e1 FROM pm2.g1 AS g_0 WHERE g_0.e2 IN (1, 2)" }, capFinder, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$ checkNodeTypes(plan, new int[] {1}, new Class[] {NestedTableJoinStrategy.class}); }