Search in sources :

Example 31 with Column

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;
}
Also used : OProperty(org.odata4j.core.OProperty) Column(org.teiid.metadata.Column) Expression(org.teiid.language.Expression) ArrayList(java.util.ArrayList) ExpressionValueSource(org.teiid.language.ExpressionValueSource)

Example 32 with Column

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;
}
Also used : NamespacedAnnotation(org.odata4j.core.NamespacedAnnotation) KeyRecord(org.teiid.metadata.KeyRecord) Column(org.teiid.metadata.Column) PrefixedNamespace(org.odata4j.core.PrefixedNamespace)

Example 33 with Column

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);
    }
}
Also used : Table(org.teiid.metadata.Table) BaseColumn(org.teiid.metadata.BaseColumn) Column(org.teiid.metadata.Column) TranslatorException(org.teiid.translator.TranslatorException)

Example 34 with Column

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;
}
Also used : Column(org.teiid.metadata.Column) ColumnReference(org.teiid.language.ColumnReference)

Example 35 with Column

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());
    }
}
Also used : Column(org.teiid.metadata.Column) TranslatorException(org.teiid.translator.TranslatorException)

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