/** * @param metadata The metadata describing the datasource which the query is for. */ public CommandBuilder(QueryMetadataInterface metadata) { this.metadata = metadata; this.languageBridgeFactory = new LanguageBridgeFactory(metadata); }
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)); }
Select result = translate((Query)command); result.setDependentValues(this.dependentSets); setProjected(result); return result; } else if (command instanceof SetQuery) { org.teiid.language.SetQuery result = translate((SetQuery)command); setProjected(result); return result; } else if (command instanceof Insert) { return translate((Insert)command); } else if (command instanceof Update) { return translate((Update)command); } else if (command instanceof Delete) { return translate((Delete)command); } else if (command instanceof StoredProcedure) { return translate((StoredProcedure)command); } else if (command instanceof BatchedUpdateCommand) { return translate((BatchedUpdateCommand)command);
org.teiid.language.Update translate(Update update) { org.teiid.language.Update result = new org.teiid.language.Update(translate(update.getGroup()), translate(update.getChangeList()), translate(update.getCriteria())); setBatchValues(result); return result; }
this.securityContext.setRuntimeMetadata(this.queryMetadata); this.securityContext.setTransactional(requestMsg.isTransactional()); LanguageBridgeFactory factory = new LanguageBridgeFactory(this.queryMetadata); try { SourceCapabilities capabilities = manager.getCapabilities(); factory.setSupportsConcat2(capabilities.supportsFunction(SourceSystemFunctions.CONCAT2)); factory.setSupportFromUnixtime(capabilities.supportsFunction(SourceSystemFunctions.FROM_UNIXTIME)); factory.setConvertIn(!this.connector.supportsInCriteria()); factory.setMaxInPredicateSize((Integer) capabilities.getSourceProperty(Capability.MAX_IN_CRITERIA_SIZE)); factory.setCommandContext(requestMsg.getCommandContext()); factory.setExcludeWithName((String) capabilities.getSourceProperty(Capability.EXCLUDE_COMMON_TABLE_EXPRESSION_NAME)); } catch (TranslatorException e) { throw new TeiidComponentException(e); translatedCommand = factory.translate(message.getCommand()); List<Expression> symbols = this.requestMsg.getCommand().getProjectedSymbols(); this.schema = new Class[symbols.size()];
@Test public void testExpansion() throws Exception { SetCriteria inCriteria = helpExample(false); LanguageBridgeFactory lbf = new LanguageBridgeFactory(RealMetadataFactory.example1Cached()); lbf.setConvertIn(true); AndOr or = (AndOr) lbf.translate(inCriteria); assertEquals(Operator.OR, or.getOperator()); inCriteria.setNegated(true); AndOr and = (AndOr) lbf.translate(inCriteria); assertEquals(Operator.AND, and.getOperator()); }
@Test public void testStripAliases1() throws Exception { String sql = "select intkey as a, stringkey as b from BQT1.SmallA ORDER BY a, b"; //$NON-NLS-1$ String expected = "SELECT BQT1.SmallA.IntKey, BQT1.SmallA.StringKey FROM BQT1.SmallA ORDER BY BQT1.SmallA.IntKey, BQT1.SmallA.StringKey"; //$NON-NLS-1$ Command command = helpTest(sql, expected, false, true, RealMetadataFactory.exampleBQTCached()); LanguageBridgeFactory lbf = new LanguageBridgeFactory(RealMetadataFactory.exampleBQTCached()); org.teiid.language.Command c = lbf.translate(command); assertEquals("SELECT SmallA.IntKey, SmallA.StringKey FROM SmallA ORDER BY SmallA.IntKey, SmallA.StringKey", c.toString()); }
@Test public void testExpansion1() throws Exception { SetCriteria inCriteria = helpExample(false); LanguageBridgeFactory lbf = new LanguageBridgeFactory(RealMetadataFactory.example1Cached()); lbf.setMaxInPredicateSize(2); AndOr or = (AndOr) lbf.translate(inCriteria); assertEquals(Operator.OR, or.getOperator()); assertEquals(2, ((In)or.getRightCondition()).getRightExpressions().size()); inCriteria.setNegated(true); AndOr and = (AndOr) lbf.translate(inCriteria); assertEquals(Operator.AND, and.getOperator()); assertEquals("300 NOT IN (100, 200) AND 300 NOT IN (300, 400)", and.toString()); }
org.teiid.language.Comparison translate(DependentSetCriteria criteria) { Operator operator = Operator.EQ; org.teiid.language.Expression arg = null; final TupleBuffer tb = criteria.getDependentValueSource().getTupleBuffer(); if (criteria.getValueExpression() instanceof Array) { Array array = (Array)criteria.getValueExpression(); List<org.teiid.language.Expression> params = new ArrayList<org.teiid.language.Expression>(); Class<?> baseType = null; for (Expression ex : array.getExpressions()) { if (baseType == null) { baseType = ex.getType(); } else if (!baseType.equals(ex.getType())) { baseType = DataTypeManager.DefaultDataClasses.OBJECT; } params.add(createParameter(criteria, tb, ex)); } arg = new org.teiid.language.Array(baseType, params); } else { Expression ex = criteria.getValueExpression(); arg = createParameter(criteria, tb, ex); } if (this.dependentSets == null) { this.dependentSets = new HashMap<String, List<? extends List<?>>>(); } this.dependentSets.put(criteria.getContextSymbol(), new TupleBufferList(tb)); Comparison result = new org.teiid.language.Comparison(translate(criteria.getExpression()), arg, operator); return result; }
value = translate(param.getExpression()); Call call = new Call(removeSchemaName(sp.getProcedureName()), translatedParameters, proc); call.setReturnType(returnType); return call;
org.teiid.language.WindowFunction translate(WindowFunction windowFunction) { org.teiid.language.WindowFunction result = new org.teiid.language.WindowFunction(); result.setFunction(translate(windowFunction.getFunction())); WindowSpecification ws = new WindowSpecification(); ws.setOrderBy(translate(windowFunction.getWindowSpecification().getOrderBy(), false)); List<Expression> partition = windowFunction.getWindowSpecification().getPartition(); if (partition != null) { ArrayList<org.teiid.language.Expression> partitionList = translateExpressionList(partition); ws.setPartition(partitionList); } result.setWindowSpecification(ws); return result; }
private void setProjected(QueryExpression qe) { if (qe instanceof Select) { Select select = (Select)qe; for (DerivedColumn dc : select.getDerivedColumns()) { dc.setProjected(true); } } else { org.teiid.language.SetQuery sq = (org.teiid.language.SetQuery)qe; setProjected(sq.getLeftQuery()); setProjected(sq.getRightQuery()); } }
public NamedTable translate(GroupSymbol symbol) { String alias = null; String fullGroup = symbol.getOutputName(); if(symbol.getOutputDefinition() != null) { alias = symbol.getOutputName(); fullGroup = symbol.getOutputDefinition(); if (remappedGroups != null) { GroupSymbol remappedGroup = remappedGroups.get(symbol.getMetadataID()); if (remappedGroup != null && remappedGroup != symbol) { fullGroup = remappedGroup.getName(); } } } fullGroup = removeSchemaName(fullGroup); NamedTable group = new NamedTable(fullGroup, alias, null); try { group.setMetadataObject(metadataFactory.getGroup(symbol.getMetadataID())); } catch (QueryMetadataException e) { throw new TeiidRuntimeException(QueryPlugin.Event.TEIID30487, e); } catch (TeiidComponentException e) { throw new TeiidRuntimeException(QueryPlugin.Event.TEIID30488, e); } return group; }
HardcodedDataManager dataManager = new HardcodedDataManager(metadata); int maxInSize = 4; dataManager.getLanguageBridgeFactory().setMaxInPredicateSize(maxInSize); //normally set in the connectorworkitem dataManager.addData("SELECT g_0.e1 FROM g1 AS g_0 WHERE g_0.e2 IN (1, 2, 3, 4) OR g_0.e2 IN (5, 6, 7, 8)", new List<?>[] {Arrays.asList("a"), Arrays.asList("b")}); BasicSourceCapabilities bsc = TestOptimizer.getTypicalCapabilities();
this.securityContext.setRuntimeMetadata(this.queryMetadata); this.securityContext.setTransactional(requestMsg.isTransactional()); LanguageBridgeFactory factory = new LanguageBridgeFactory(this.queryMetadata); CommandContext context = requestMsg.getCommandContext(); try { factory.setConvertIn(!this.connector.supportsInCriteria()); translatedCommand = factory.translate(message.getCommand()); List<Expression> symbols = this.requestMsg.getCommand().getProjectedSymbols(); this.schema = new Class[symbols.size()];
org.teiid.language.Delete translate(Delete delete) { org.teiid.language.Delete deleteImpl = new org.teiid.language.Delete(translate(delete.getGroup()), translate(delete.getCriteria())); setBatchValues(deleteImpl); return deleteImpl; }
@Test public void testInlineViewOrderBy() throws Exception { String sql = "select intnum from (select intnum from bqt1.smallb) b order by b.intnum"; //$NON-NLS-1$ String expected = "SELECT v_0.c_0 FROM (SELECT g_0.IntNum AS c_0 FROM BQT1.SmallB AS g_0) AS v_0 ORDER BY c_0"; //$NON-NLS-1$ Command command = helpTest(sql, expected, true, false, RealMetadataFactory.exampleBQTCached()); LanguageBridgeFactory lbf = new LanguageBridgeFactory(RealMetadataFactory.exampleBQTCached()); org.teiid.language.Command c = lbf.translate(command); assertEquals("SELECT v_0.c_0 FROM (SELECT g_0.IntNum AS c_0 FROM SmallB AS g_0) AS v_0 ORDER BY v_0.c_0", c.toString()); }
org.teiid.language.Comparison translate(DependentSetCriteria criteria) { Operator operator = Operator.EQ; org.teiid.language.Expression arg = null; final TupleBuffer tb = criteria.getDependentValueSource().getTupleBuffer(); if (criteria.getValueExpression() instanceof Array) { Array array = (Array)criteria.getValueExpression(); List<org.teiid.language.Expression> params = new ArrayList<org.teiid.language.Expression>(); Class<?> baseType = null; for (Expression ex : array.getExpressions()) { if (baseType == null) { baseType = ex.getType(); } else if (!baseType.equals(ex.getType())) { baseType = DataTypeManager.DefaultDataClasses.OBJECT; } params.add(createParameter(criteria, tb, ex)); } arg = new org.teiid.language.Array(baseType, params); } else { Expression ex = criteria.getValueExpression(); arg = createParameter(criteria, tb, ex); } if (this.dependentSets == null) { this.dependentSets = new HashMap<String, List<? extends List<?>>>(); } this.dependentSets.put(criteria.getContextSymbol(), new TupleBufferList(tb)); Comparison result = new org.teiid.language.Comparison(translate(criteria.getExpression()), arg, operator); return result; }
Select result = translate((Query)command); result.setDependentValues(this.dependentSets); setProjected(result); return result; } else if (command instanceof SetQuery) { org.teiid.language.SetQuery result = translate((SetQuery)command); setProjected(result); return result; } else if (command instanceof Insert) { return translate((Insert)command); } else if (command instanceof Update) { return translate((Update)command); } else if (command instanceof Delete) { return translate((Delete)command); } else if (command instanceof StoredProcedure) { return translate((StoredProcedure)command); } else if (command instanceof BatchedUpdateCommand) { return translate((BatchedUpdateCommand)command);