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;
}
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);
}
}
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;
}
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);
}
}
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;
}
Aggregations