Search in sources :

Example 81 with Column

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

the class JPAMetadataProcessor method addSingularAttributes.

private void addSingularAttributes(MetadataFactory mf, Metamodel model, ManagedType<?> entity, Table entityTable) throws TranslatorException {
    for (Attribute<?, ?> attr : entity.getAttributes()) {
        if (!attr.isCollection()) {
            boolean simpleType = isSimpleType(attr.getJavaType());
            if (simpleType) {
                Column column = addColumn(mf, attr.getName(), TypeFacility.getDataTypeName(getJavaDataType(attr.getJavaType())), entityTable);
                if (((SingularAttribute) attr).isOptional()) {
                    column.setDefaultValue(null);
                }
            } else {
                boolean classFound = false;
                // this tables columns
                for (EmbeddableType<?> embeddable : model.getEmbeddables()) {
                    if (embeddable.getJavaType().equals(attr.getJavaType())) {
                        addSingularAttributes(mf, model, embeddable, entityTable);
                        classFound = true;
                        break;
                    }
                }
                if (!classFound) {
                    // table, then add that column as FK
                    for (EntityType et : model.getEntities()) {
                        if (et.getJavaType().equals(attr.getJavaType())) {
                            Table attributeTable = addEntity(mf, model, et);
                            KeyRecord pk = attributeTable.getPrimaryKey();
                            if (pk != null) {
                                // TODO: entities must have PK, so this check is not needed.
                                ArrayList<String> keys = new ArrayList<String>();
                                for (Column column : pk.getColumns()) {
                                    addColumn(mf, column.getName(), column.getDatatype().getRuntimeTypeName(), entityTable);
                                    keys.add(column.getName());
                                }
                                if (!foreignKeyExists(keys, entityTable)) {
                                    addForeignKey(mf, attr.getName(), keys, attributeTable.getName(), entityTable);
                                }
                            } else {
                                throw new TranslatorException(JPAPlugin.Util.gs(JPAPlugin.Event.TEIID14001, attributeTable.getName()));
                            }
                            classFound = true;
                            break;
                        }
                    }
                }
                if (!classFound) {
                    throw new TranslatorException(JPAPlugin.Util.gs(JPAPlugin.Event.TEIID14002, attr.getName()));
                }
            }
        }
    }
}
Also used : EntityType(javax.persistence.metamodel.EntityType) KeyRecord(org.teiid.metadata.KeyRecord) SingularAttribute(javax.persistence.metamodel.SingularAttribute) Table(org.teiid.metadata.Table) Column(org.teiid.metadata.Column) ArrayList(java.util.ArrayList) TranslatorException(org.teiid.translator.TranslatorException)

Example 82 with Column

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

the class Create method clone.

/**
 * @see org.teiid.query.sql.lang.Command#clone()
 * @since 5.5
 */
public Object clone() {
    Create copy = new Create();
    GroupSymbol copyTable = table.clone();
    copy.setTable(copyTable);
    copy.columns = new ArrayList<Column>(columns.size());
    for (Column column : columns) {
        Column copyColumn = new Column();
        copyColumn.setName(column.getName());
        copyColumn.setRuntimeType(column.getRuntimeType());
        copyColumn.setAutoIncremented(column.isAutoIncremented());
        copyColumn.setNullType(column.getNullType());
        copy.columns.add(copyColumn);
    }
    copy.primaryKey = LanguageObject.Util.deepClone(primaryKey, ElementSymbol.class);
    copyMetadataState(copy);
    copy.setTableMetadata(this.tableMetadata);
    copy.on = this.on;
    copy.commitAction = this.commitAction;
    return copy;
}
Also used : ElementSymbol(org.teiid.query.sql.symbol.ElementSymbol) Column(org.teiid.metadata.Column) GroupSymbol(org.teiid.query.sql.symbol.GroupSymbol)

Example 83 with Column

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

the class Create method getColumnSymbols.

/**
 * Derived ElementSymbol list.  Do not modify without also modifying the columns.
 * @return
 */
public List<ElementSymbol> getColumnSymbols() {
    if (columnSymbols == null) {
        columnSymbols = new ArrayList<ElementSymbol>(columns.size());
        for (Column column : columns) {
            ElementSymbol es = new ElementSymbol(column.getName());
            es.setType(DataTypeManager.getDataTypeClass(column.getRuntimeType()));
            es.setGroupSymbol(table);
            columnSymbols.add(es);
        }
    }
    return columnSymbols;
}
Also used : ElementSymbol(org.teiid.query.sql.symbol.ElementSymbol) Column(org.teiid.metadata.Column)

Example 84 with Column

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

the class Create method equals.

public boolean equals(Object obj) {
    // Quick same object test
    if (this == obj) {
        return true;
    }
    // Quick fail tests
    if (!(obj instanceof Create)) {
        return false;
    }
    Create other = (Create) obj;
    if (other.columns.size() != this.columns.size()) {
        return false;
    }
    for (int i = 0; i < this.columns.size(); i++) {
        Column c = this.columns.get(i);
        Column o = other.columns.get(i);
        if (!c.getName().equalsIgnoreCase(o.getName()) || DataTypeManager.getDataTypeClass(c.getRuntimeType().toLowerCase()) != DataTypeManager.getDataTypeClass(o.getRuntimeType().toLowerCase()) || c.isAutoIncremented() != o.isAutoIncremented() || c.getNullType() != o.getNullType()) {
            return false;
        }
    }
    return this.commitAction == other.commitAction && EquivalenceUtil.areEqual(getTable(), other.getTable()) && EquivalenceUtil.areEqual(getPrimaryKey(), other.getPrimaryKey()) && EquivalenceUtil.areEqual(this.on, other.on) && // metadata equality methods are basically identity based, so we need a better check
    ((tableMetadata == null && other.tableMetadata == null) || (tableMetadata != null && other.tableMetadata != null && this.toString().equals(other.toString())));
}
Also used : Column(org.teiid.metadata.Column)

Example 85 with Column

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

the class Create method setElementSymbolsAsColumns.

public void setElementSymbolsAsColumns(List<ElementSymbol> columns) {
    this.columns.clear();
    for (ElementSymbol elementSymbol : columns) {
        Column c = new Column();
        c.setName(elementSymbol.getShortName());
        c.setRuntimeType(DataTypeManager.getDataTypeName(elementSymbol.getType()));
        c.setNullType(NullType.Nullable);
        this.columns.add(c);
    }
}
Also used : ElementSymbol(org.teiid.query.sql.symbol.ElementSymbol) Column(org.teiid.metadata.Column)

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