/** * Helper method for getting runtime {@link org.teiid.connector.metadata.runtime.Element} from a * {@link org.teiid.language.DerivedColumn}. * @param symbol Input ISelectSymbol * @return Element returned metadata runtime Element */ private Column getElementFromSymbol(DerivedColumn symbol) { ColumnReference expr = (ColumnReference) symbol.getExpression(); return expr.getMetadataObject(); }
public DerivedColumn createSelectSymbol(String name, Expression expression) { return new DerivedColumn(name, expression); }
public void visit(DerivedColumn obj) { append(obj.getExpression()); if (obj.getAlias() != null) { buffer.append(Tokens.SPACE) .append(AS) .append(Tokens.SPACE) .append(obj.getAlias()); } }
private void addCast(String nativeType, DerivedColumn dc) { if (nativeType != null) { Function cast = ConvertModifier.createConvertFunction(getLanguageFactory(), dc.getExpression(), nativeType); cast.setName("cast"); //$NON-NLS-1$ dc.setExpression(cast); } else { dc.setExpression(ConvertModifier.createConvertFunction(getLanguageFactory(), dc.getExpression(), TypeFacility.getDataTypeName(dc.getExpression().getType()))); } }
@Override public List<?> translate(LanguageObject obj, ExecutionContext context) { if (obj instanceof DerivedColumn) { DerivedColumn derived = (DerivedColumn)obj; if (derived.isProjected() && derived.getExpression() instanceof ColumnReference) { ColumnReference elem = (ColumnReference)derived.getExpression(); if (elem.getMetadataObject() != null) { String nativeType = elem.getMetadataObject().getNativeType(); if (nativeType != null && TypeFacility.RUNTIME_TYPES.STRING.equals(elem.getType()) && PIMetadataProcessor.guidPattern.matcher(nativeType).find()) { return Arrays.asList("cast(", elem, " as String)"); //$NON-NLS-1$ //$NON-NLS-2$ } } } } return super.translate(obj, context); }
@Override public List<?> translateCommand(Command command, ExecutionContext context) { if (command instanceof SetQuery) { SetQuery set = (SetQuery)command; if (!set.isAll()) { //distinct is not supported, convert to an inline view and add distinct Select s = new Select(); s.setDistinct(true); s.setDerivedColumns(new ArrayList<DerivedColumn>()); s.setOrderBy(set.getOrderBy()); for (DerivedColumn dc : set.getProjectedQuery().getDerivedColumns()) { Assertion.assertTrue(dc.getAlias() != null); //it's expected that the columns will be aliases ColumnReference cr = new ColumnReference(null, dc.getAlias(), null, dc.getExpression().getType()); s.getDerivedColumns().add(new DerivedColumn(null, cr)); } set.setOrderBy(null); s.setLimit(set.getLimit()); set.setLimit(null); set.setAll(true); s.setFrom(Arrays.asList((TableReference)new DerivedTable(set, "x"))); //$NON-NLS-1$ return Arrays.asList(s); } } return super.translateCommand(command, context); }
if (obj.getExpression() instanceof Literal) { String castType = null; if (obj.getExpression().getType() == TypeFacility.RUNTIME_TYPES.STRING) { castType = "bpchar"; //$NON-NLS-1$ } else if (obj.getExpression().getType() == TypeFacility.RUNTIME_TYPES.VARBINARY) { castType = "bytea"; //$NON-NLS-1$ obj.setExpression(postgreSQLExecutionFactory.getLanguageFactory().createFunction("cast", //$NON-NLS-1$ new Expression[] {obj.getExpression(), postgreSQLExecutionFactory.getLanguageFactory().createLiteral(castType, TypeFacility.RUNTIME_TYPES.STRING)}, TypeFacility.RUNTIME_TYPES.STRING)); } else if (obj.isProjected() && obj.getExpression() instanceof ColumnReference) { ColumnReference elem = (ColumnReference)obj.getExpression(); if (elem.getMetadataObject() != null) { String nativeType = elem.getMetadataObject().getNativeType(); && nativeType != null && nativeType.equalsIgnoreCase(PostgreSQLExecutionFactory.UUID_TYPE)) { obj.setExpression(postgreSQLExecutionFactory.getLanguageFactory().createFunction("cast", //$NON-NLS-1$ new Expression[] {obj.getExpression(), postgreSQLExecutionFactory.getLanguageFactory().createLiteral("varchar", TypeFacility.RUNTIME_TYPES.STRING)}, //$NON-NLS-1$ TypeFacility.RUNTIME_TYPES.STRING));
if (selectSymbol.getAlias() == null) { allAliased = false; break; windowSpecification.setOrderBy(orderBy); expression.setWindowSpecification(windowSpecification); select.getDerivedColumns().add(new DerivedColumn("ROWNUM_", expression)); //$NON-NLS-1$ parts.add(" FROM ("); //$NON-NLS-1$ parts.add(select);
/** * Get the derived column names. Note this only reports alias names. * Any other names may not be consistent throughout the translation process. * @return a String[] containing the column names * @since 4.3 */ public String[] getColumnNames() { List<DerivedColumn> selectSymbols = getProjectedQuery().getDerivedColumns(); String[] columnNames = new String[selectSymbols.size()]; int symbolIndex = 0; for (DerivedColumn column : selectSymbols) { columnNames[symbolIndex++] = column.getAlias(); } return columnNames; }
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()); } }
@Override public void visit(SetQuery obj) { for (int i = 0; i < obj.getColumnNames().length; i++) { DerivedColumn leftDerivedColumn = obj.getLeftQuery().getProjectedQuery().getDerivedColumns().get(i); boolean left_i18n = OracleExecutionFactory.this.isNonAscii(leftDerivedColumn.getExpression()); DerivedColumn rightDerivedColumn = obj.getRightQuery().getProjectedQuery().getDerivedColumns().get(i); boolean right_i18n = OracleExecutionFactory.this.isNonAscii(rightDerivedColumn.getExpression()); if (left_i18n ^ right_i18n) { if (!left_i18n) { leftDerivedColumn.setExpression(toNChar(leftDerivedColumn.getExpression())); } else if (!right_i18n) { rightDerivedColumn.setExpression(toNChar(rightDerivedColumn.getExpression())); } } } super.visit(obj); }
if (dc.isProjected()) { Expression expr = dc.getExpression(); if (expr.getType() == TypeFacility.RUNTIME_TYPES.GEOMETRY) { dc.setExpression(translateGeometrySelect(expr)); } else if (expr.getType() == TypeFacility.RUNTIME_TYPES.GEOGRAPHY) { dc.setExpression(translateGeographySelect(expr));
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 void visit(DerivedColumn obj) { visitNode(obj.getExpression()); }
@Override public List<?> translate(LanguageObject obj, ExecutionContext context) { if (obj instanceof DerivedColumn) { DerivedColumn selectSymbol = (DerivedColumn)obj; if (selectSymbol.getExpression().getType() == TypeFacility.RUNTIME_TYPES.XML) { if (selectSymbol.getAlias() == null) { return Arrays.asList("XMLSERIALIZE(", selectSymbol.getExpression(), " AS CLOB)"); //$NON-NLS-1$//$NON-NLS-2$ } //we're assuming that alias quoting shouldn't be needed return Arrays.asList("XMLSERIALIZE(", selectSymbol.getExpression(), " AS CLOB) AS ", selectSymbol.getAlias()); //$NON-NLS-1$//$NON-NLS-2$ } } return super.translate(obj, context); }
@Override public List<?> translateCommand(Command command, ExecutionContext context) { if (!supportsLiteralOnlyWithGrouping() && (command instanceof Select)) { Select select = (Select)command; if (select.getGroupBy() != null && select.getDerivedColumns().size() == 1) { DerivedColumn dc = select.getDerivedColumns().get(0); if (dc.getExpression() instanceof Literal) { dc.setExpression(select.getGroupBy().getElements().get(0)); } } } return super.translateCommand(command, context); }
public void testGetColumnDataTypes(){ Class<?>[] expectedResults = new Class[2]; List<DerivedColumn> symbols = new ArrayList<DerivedColumn>(); symbols.add(new DerivedColumn("c1", new Literal("3", DataTypeManager.DefaultDataClasses.STRING))); //$NON-NLS-1$//$NON-NLS-2$ expectedResults[0] = DataTypeManager.DefaultDataClasses.STRING; symbols.add(new DerivedColumn("c2", new Literal(new Integer(5), DataTypeManager.DefaultDataClasses.INTEGER))); //$NON-NLS-1$ expectedResults[1] = DataTypeManager.DefaultDataClasses.INTEGER; Select query = new Select(symbols, false, null, null, null, null, null); Class<?>[] results = query.getColumnTypes(); assertEquals( results[0], expectedResults[0]); assertEquals( results[1], expectedResults[1]); }
public void testGetOutputName() throws Exception { assertEquals("testAlias", example("testName", "testAlias").getAlias()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ }
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()); } }