Search in sources :

Example 26 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class BaseQueryExecution method buildRow.

@SuppressWarnings("unchecked")
<T extends AbstractMetadataRecord> List<?> buildRow(T record, List<Column> columns, Class<?>[] expectedType, Map<String, Object> values) throws TranslatorException {
    List<Object> results = new ArrayList<Object>();
    for (int i = 0; i < columns.size(); i++) {
        Column column = columns.get(i);
        T columnParent = (T) column.getParent();
        String colName = column.getName();
        if (!columnParent.equals(record)) {
            // $NON-NLS-1$
            colName = getName(columnParent) + "/" + column.getName();
        }
        Object value;
        try {
            value = ODataTypeManager.convertToTeiidRuntimeType(expectedType[i], values.get(colName), ODataMetadataProcessor.getNativeType(column));
        } catch (TeiidException e) {
            throw new TranslatorException(e);
        }
        results.add(value);
    }
    return results;
}
Also used : Column(org.teiid.metadata.Column) ArrayList(java.util.ArrayList) TranslatorException(org.teiid.translator.TranslatorException) TeiidException(org.teiid.core.TeiidException)

Example 27 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class ODataUpdateVisitor method visit.

@Override
public void visit(Insert obj) {
    this.operationType = OperationType.INSERT;
    visitNode(obj.getTable());
    try {
        // read the properties
        int elementCount = obj.getColumns().size();
        for (int i = 0; i < elementCount; i++) {
            Column column = obj.getColumns().get(i).getMetadataObject();
            List<Expression> values = ((ExpressionValueSource) obj.getValueSource()).getValues();
            Expression expr = values.get(i);
            Object value = resolveExpressionValue(expr);
            this.odataQuery.addInsertProperty(column, ODataMetadataProcessor.getNativeType(column), value);
        }
    } catch (TranslatorException e) {
        this.exceptions.add(e);
    }
}
Also used : Column(org.teiid.metadata.Column) Expression(org.teiid.language.Expression) TranslatorException(org.teiid.translator.TranslatorException) ExpressionValueSource(org.teiid.language.ExpressionValueSource)

Example 28 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class InsertExecutionImpl method buildBulkRowPayload.

protected List<com.sforce.async.SObject> buildBulkRowPayload(Insert insert, Iterator<? extends List<?>> it, int rowCount) throws TranslatorException {
    List<com.sforce.async.SObject> rows = new ArrayList<com.sforce.async.SObject>();
    List<ColumnReference> columns = insert.getColumns();
    int boundCount = 0;
    List<Expression> literalValues = ((ExpressionValueSource) insert.getValueSource()).getValues();
    while (it.hasNext()) {
        if (boundCount >= rowCount) {
            break;
        }
        boundCount++;
        List<?> values = it.next();
        com.sforce.async.SObject sobj = new com.sforce.async.SObject();
        for (int i = 0; i < columns.size(); i++) {
            Expression ex = literalValues.get(i);
            ColumnReference element = columns.get(i);
            Column column = element.getMetadataObject();
            Class<?> type = ex.getType();
            Object value = null;
            if (ex instanceof Parameter) {
                value = values.get(((Parameter) ex).getValueIndex());
            } else if (!(ex instanceof Literal)) {
                throw new TranslatorException(SalesForcePlugin.Util.gs(SalesForcePlugin.Event.TEIID13007));
            } else {
                value = ((Literal) ex).getValue();
            }
            sobj.setField(column.getSourceName(), getStringValue(value, type));
        }
        rows.add(sobj);
    }
    return rows;
}
Also used : ArrayList(java.util.ArrayList) Expression(org.teiid.language.Expression) Column(org.teiid.metadata.Column) Literal(org.teiid.language.Literal) SObject(com.sforce.async.SObject) Parameter(org.teiid.language.Parameter) SObject(com.sforce.async.SObject) TranslatorException(org.teiid.translator.TranslatorException) SObject(com.sforce.async.SObject) ColumnReference(org.teiid.language.ColumnReference) ExpressionValueSource(org.teiid.language.ExpressionValueSource)

Example 29 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class InsertExecutionImpl method buildSingleRowInsertPayload.

private void buildSingleRowInsertPayload(Insert insert, DataPayload data) throws TranslatorException {
    List<ColumnReference> columns = insert.getColumns();
    List<Expression> values = ((ExpressionValueSource) insert.getValueSource()).getValues();
    if (columns.size() != values.size()) {
        throw new TranslatorException(SalesForcePlugin.Util.gs(SalesForcePlugin.Event.TEIID13006));
    }
    for (int i = 0; i < columns.size(); i++) {
        Column column = columns.get(i).getMetadataObject();
        Object value = values.get(i);
        if (!(value instanceof Literal)) {
            throw new TranslatorException(SalesForcePlugin.Util.gs(SalesForcePlugin.Event.TEIID13007));
        }
        Literal literalValue = (Literal) values.get(i);
        Object val = literalValue.getValue();
        if (val instanceof Timestamp) {
            Calendar cal = Calendar.getInstance();
            cal.setTime((Timestamp) val);
            val = cal;
        }
        data.addField(column.getSourceName(), val);
    }
}
Also used : Expression(org.teiid.language.Expression) Column(org.teiid.metadata.Column) Literal(org.teiid.language.Literal) Calendar(java.util.Calendar) TranslatorException(org.teiid.translator.TranslatorException) SObject(com.sforce.async.SObject) Timestamp(java.sql.Timestamp) ColumnReference(org.teiid.language.ColumnReference) ExpressionValueSource(org.teiid.language.ExpressionValueSource)

Example 30 with Column

use of org.teiid.metadata.Column in project teiid by teiid.

the class QueryExecutionImpl method extractValuesFromElement.

// TODO: this looks inefficient as getChild is linear
private List<Object[]> extractValuesFromElement(XmlObject sObject, List<Object[]> result, String sObjectName) throws TranslatorException {
    Object[] row = new Object[visitor.getSelectSymbolCount()];
    for (int j = 0; j < visitor.getSelectSymbolCount(); j++) {
        // must be a column reference as we won't allow an agg over a join
        Column element = ((ColumnReference) visitor.getSelectSymbolMetadata(j)).getMetadataObject();
        AbstractMetadataRecord table = element.getParent();
        if (table.getSourceName().equals(sObjectName)) {
            XmlObject child = sObject.getChild(element.getSourceName());
            Object cell = getCellDatum(element.getSourceName(), element.getJavaType(), child);
            setElementValueInColumn(j, cell, row);
        }
    }
    result.add(row);
    return result;
}
Also used : Column(org.teiid.metadata.Column) XmlObject(com.sforce.ws.bind.XmlObject) SObject(com.sforce.soap.partner.sobject.SObject) XmlObject(com.sforce.ws.bind.XmlObject) AbstractMetadataRecord(org.teiid.metadata.AbstractMetadataRecord)

Aggregations

Column (org.teiid.metadata.Column)210 Table (org.teiid.metadata.Table)72 ArrayList (java.util.ArrayList)47 TranslatorException (org.teiid.translator.TranslatorException)47 Test (org.junit.Test)39 TransformationMetadata (org.teiid.query.metadata.TransformationMetadata)21 MetadataFactory (org.teiid.metadata.MetadataFactory)20 ElementSymbol (org.teiid.query.sql.symbol.ElementSymbol)19 KeyRecord (org.teiid.metadata.KeyRecord)18 Schema (org.teiid.metadata.Schema)18 MetadataStore (org.teiid.metadata.MetadataStore)17 Procedure (org.teiid.metadata.Procedure)14 RealMetadataFactory (org.teiid.query.unittest.RealMetadataFactory)14 ColumnReference (org.teiid.language.ColumnReference)12 DerivedColumn (org.teiid.language.DerivedColumn)12 Expression (org.teiid.language.Expression)12 Literal (org.teiid.language.Literal)10 QueryNode (org.teiid.query.mapping.relational.QueryNode)9 Connection (java.sql.Connection)7 ResultSet (java.sql.ResultSet)7