use of org.teiid.metadata.Column in project teiid by teiid.
the class ODataUpdateVisitor method visit.
@Override
public void visit(Insert obj) {
// $NON-NLS-1$
this.method = "POST";
this.entity = obj.getTable().getMetadataObject();
this.uri = this.entity.getName();
final List<OProperty<?>> props = new ArrayList<OProperty<?>>();
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();
OProperty<?> property = readProperty(column, values.get(i));
props.add(property);
}
this.payload = props;
}
use of org.teiid.metadata.Column in project teiid by teiid.
the class SAPMetadataProcessor method buildColumn.
@Override
protected Column buildColumn(MetadataFactory mf, Table table, EdmProperty ep, EdmEntitySet entitySet, String prefix) {
boolean creatable = true;
boolean updatable = true;
boolean filterable = true;
boolean required_in_filter = false;
String columnName = ep.getName();
if (prefix != null) {
// $NON-NLS-1$
columnName = prefix + "_" + columnName;
}
Column c = mf.addColumn(columnName, ODataTypeManager.teiidType(ep.getType().getFullyQualifiedTypeName()), table);
c.setNameInSource(ep.getName());
Iterable<? extends NamespacedAnnotation> annotations = ep.getAnnotations();
for (NamespacedAnnotation annotation : annotations) {
PrefixedNamespace namespace = annotation.getNamespace();
if (namespace.getUri().equals(SAPURI)) {
String name = annotation.getName();
if (name.equalsIgnoreCase("label")) {
// $NON-NLS-1$
c.setAnnotation((String) annotation.getValue());
} else if (name.equalsIgnoreCase("creatable")) {
// $NON-NLS-1$
creatable = Boolean.parseBoolean((String) annotation.getValue());
}
if (name.equalsIgnoreCase("visible")) {
// $NON-NLS-1$
c.setSelectable(Boolean.parseBoolean((String) annotation.getValue()));
}
if (name.equalsIgnoreCase("updatable")) {
// $NON-NLS-1$
updatable = Boolean.parseBoolean((String) annotation.getValue());
}
if (name.equalsIgnoreCase("sortable")) {
// $NON-NLS-1$
if (!Boolean.parseBoolean((String) annotation.getValue())) {
c.setSearchType(SearchType.Unsearchable);
}
}
if (name.equalsIgnoreCase("filterable")) {
// $NON-NLS-1$
filterable = Boolean.parseBoolean((String) annotation.getValue());
}
if (name.equalsIgnoreCase("required-in-filter")) {
// $NON-NLS-1$
required_in_filter = Boolean.parseBoolean((String) annotation.getValue());
}
if (name.equalsIgnoreCase("filter-restriction")) {
// $NON-NLS-1$
// TODO:
}
}
}
c.setUpdatable(creatable && updatable);
if (!filterable) {
c.setSearchType(SearchType.Unsearchable);
}
if (required_in_filter) {
if (this.accessPatterns.get(table) == null) {
KeyRecord record = new KeyRecord(Type.AccessPattern);
record.addColumn(c);
this.accessPatterns.put(table, record);
} else {
this.accessPatterns.get(table).addColumn(c);
}
}
// entity set defined to as must have filter
// $NON-NLS-1$
boolean requiresFilter = Boolean.parseBoolean(getProperty(entitySet, "requires-filter"));
if (requiresFilter && filterable && !required_in_filter) {
KeyRecord record = new KeyRecord(Type.AccessPattern);
record.addColumn(c);
table.getAccessPatterns().add(record);
}
return c;
}
use of org.teiid.metadata.Column in project teiid by teiid.
the class ODataFilterVisitor method visit.
@Override
public void visit(ColumnReference obj) {
Column column = obj.getMetadataObject();
ODataDocumentNode schemaElement = this.query.getSchemaElement((Table) column.getParent());
// check if the column on pseudo column, then move it to the parent.
if (ODataMetadataProcessor.isPseudo(column)) {
try {
Column realColumn = ODataMetadataProcessor.normalizePseudoColumn(this.metadata, column);
schemaElement = this.query.getSchemaElement((Table) realColumn.getParent());
} catch (TranslatorException e) {
this.exceptions.add(e);
}
}
if (this.filterOnElement == null) {
this.filterOnElement = schemaElement;
} else if (schemaElement.isExpandType() && (!this.filterOnElement.isExpandType())) {
this.exceptions.add(new TranslatorException(ODataPlugin.Util.gs(ODataPlugin.Event.TEIID17026)));
}
try {
if (this.filterOnElement.isComplexType()) {
if (ODataMetadataProcessor.isPseudo(column)) {
Column realColumn = ODataMetadataProcessor.normalizePseudoColumn(this.metadata, column);
this.filter.append(realColumn.getName());
} else {
this.filter.append(this.filterOnElement.getName()).append("/").append(column.getName());
}
} else {
if (ODataMetadataProcessor.isPseudo(column)) {
Column realColumn = ODataMetadataProcessor.normalizePseudoColumn(this.metadata, column);
this.filter.append(realColumn.getName());
} else {
this.filter.append(column.getName());
}
}
} catch (TranslatorException e) {
this.exceptions.add(e);
}
}
use of org.teiid.metadata.Column in project teiid by teiid.
the class ODataQuery method parseKeySegmentFromComparison.
private boolean parseKeySegmentFromComparison(Comparison obj) throws TranslatorException {
if (obj.getOperator().equals(Comparison.Operator.EQ)) {
if (obj.getLeftExpression() instanceof ColumnReference && obj.getRightExpression() instanceof ColumnReference) {
Column left = ((ColumnReference) obj.getLeftExpression()).getMetadataObject();
Column right = ((ColumnReference) obj.getRightExpression()).getMetadataObject();
if (isJoinOrPkColumn(left) && isJoinOrPkColumn(right)) {
// in odata the navigation from parent to child implicit by their keys
return true;
}
}
}
return false;
}
use of org.teiid.metadata.Column in project teiid by teiid.
the class ODataSQLVisitor method visit.
@Override
public void visit(SortSpecification obj) {
if (this.orderBy.length() > 0) {
this.orderBy.append(Tokens.COMMA);
}
ColumnReference column = (ColumnReference) obj.getExpression();
try {
Column c = ODataMetadataProcessor.normalizePseudoColumn(this.metadata, column.getMetadataObject());
this.orderBy.append(c.getName());
} catch (TranslatorException e) {
this.exceptions.add(e);
}
// default is ascending
if (obj.getOrdering() == Ordering.DESC) {
this.orderBy.append(Tokens.SPACE).append(DESC.toLowerCase());
}
}
Aggregations