Search in sources :

Example 91 with Column

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

the class ParmHolder method addColumn.

protected void addColumn(String columnName, String nameInSource, String dataType, Table t) throws TranslatorException {
    // $NON-NLS-1$
    Column c = metadataFactory.addColumn(columnName, dataType, t);
    c.setNameInSource(nameInSource);
}
Also used : Column(org.teiid.metadata.Column)

Example 92 with Column

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

the class CoherenceVisitor method visit.

public void visit(Select query) {
    super.visit(query);
    Iterator<DerivedColumn> selectSymbolItr = query.getDerivedColumns().iterator();
    attributeNames = new String[query.getDerivedColumns().size()];
    attributeTypes = new Class[query.getDerivedColumns().size()];
    int i = 0;
    while (selectSymbolItr.hasNext()) {
        Column e = getElementFromSymbol(selectSymbolItr.next());
        attributeNames[i] = this.getNameFromElement(e);
        attributeTypes[i] = e.getJavaType();
        i++;
    }
    List<TableReference> tables = query.getFrom();
    TableReference t = tables.get(0);
    if (t instanceof NamedTable) {
        Table group = ((NamedTable) t).getMetadataObject();
        tableName = group.getName();
    }
}
Also used : NamedTable(org.teiid.language.NamedTable) TableReference(org.teiid.language.TableReference) NamedTable(org.teiid.language.NamedTable) Table(org.teiid.metadata.Table) Column(org.teiid.metadata.Column) DerivedColumn(org.teiid.language.DerivedColumn) DerivedColumn(org.teiid.language.DerivedColumn)

Example 93 with Column

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

the class GlobalTableStoreImpl method getGlobalTempTableMetadataId.

@Override
public TempMetadataID getGlobalTempTableMetadataId(Object viewId) throws TeiidProcessingException, TeiidComponentException {
    String matViewName = metadata.getFullName(viewId);
    String matTableName = RelationalPlanner.MAT_PREFIX + matViewName.toUpperCase();
    GroupSymbol group = new GroupSymbol(matViewName);
    group.setMetadataID(viewId);
    TempMetadataID id = tableStore.getMetadataStore().getTempGroupID(matTableName);
    // define the table preserving the key/index information and ensure that only a single instance exists
    if (id == null) {
        synchronized (viewId) {
            id = tableStore.getMetadataStore().getTempGroupID(matTableName);
            LinkedHashMap<Expression, Integer> newExprs = null;
            if (id == null) {
                List<ElementSymbol> allCols = ResolverUtil.resolveElementsInGroup(group, metadata);
                QueryNode qnode = metadata.getVirtualPlan(viewId);
                if (viewId instanceof Table) {
                    Table t = (Table) viewId;
                    List<KeyRecord> fbis = t.getFunctionBasedIndexes();
                    if (!fbis.isEmpty()) {
                        List<GroupSymbol> groups = Arrays.asList(group);
                        int i = 0;
                        newExprs = new LinkedHashMap<Expression, Integer>();
                        for (KeyRecord keyRecord : fbis) {
                            for (int j = 0; j < keyRecord.getColumns().size(); j++) {
                                Column c = keyRecord.getColumns().get(j);
                                if (c.getParent() != keyRecord) {
                                    continue;
                                }
                                String exprString = c.getNameInSource();
                                Expression ex = QueryParser.getQueryParser().parseExpression(exprString);
                                Integer index = newExprs.get(ex);
                                if (index == null) {
                                    ResolverVisitor.resolveLanguageObject(ex, groups, metadata);
                                    ex = QueryRewriter.rewriteExpression(ex, null, metadata);
                                    String colName = TEIID_FBI + i;
                                    while (t.getColumnByName(colName) != null) {
                                        colName = TEIID_FBI + (++i);
                                    }
                                    ElementSymbol es = new ElementSymbol(colName);
                                    es.setType(ex.getType());
                                    allCols.add(es);
                                    c.setPosition(allCols.size());
                                    newExprs.put(ex, allCols.size());
                                    ex = (Expression) ex.clone();
                                } else {
                                    c.setPosition(index);
                                }
                            }
                        }
                        ResolverUtil.clearGroupInfo(group, metadata);
                        // $NON-NLS-1$
                        StringBuilder query = new StringBuilder("SELECT ");
                        // $NON-NLS-1$
                        query.append(group).append(".*, ");
                        for (Iterator<Expression> iter = newExprs.keySet().iterator(); iter.hasNext(); ) {
                            query.append(iter.next());
                            if (iter.hasNext()) {
                                // $NON-NLS-1$
                                query.append(", ");
                            }
                        }
                        // $NON-NLS-1$ //$NON-NLS-2$
                        query.append(" FROM ").append(group).append(" option nocache ").append(group);
                        qnode = new QueryNode(query.toString());
                    }
                }
                id = tableStore.getMetadataStore().addTempGroup(matTableName, allCols, false, true);
                id.setQueryNode(qnode);
                id.setCardinality((int) metadata.getCardinality(viewId));
                id.setOriginalMetadataID(viewId);
                Object pk = metadata.getPrimaryKey(viewId);
                if (pk != null) {
                    ArrayList<TempMetadataID> primaryKey = resolveIndex(metadata, id, pk);
                    id.setPrimaryKey(primaryKey);
                }
                Collection keys = metadata.getUniqueKeysInGroup(viewId);
                for (Object key : keys) {
                    id.addUniqueKey(resolveIndex(metadata, id, key));
                }
                Collection indexes = metadata.getIndexesInGroup(viewId);
                for (Object index : indexes) {
                    id.addIndex(index, resolveIndex(metadata, id, index));
                }
                if (newExprs != null) {
                    Table table = (Table) viewId;
                    List<KeyRecord> fbis = table.getFunctionBasedIndexes();
                    for (KeyRecord keyRecord : fbis) {
                        id.addIndex(keyRecord, resolveIndex(metadata, id, keyRecord));
                    }
                    GroupSymbol gs = new GroupSymbol(matTableName);
                    gs.setMetadataID(id);
                    SymbolMap map = SymbolMap.createSymbolMap(group, ResolverUtil.resolveElementsInGroup(gs, metadata).subList(0, allCols.size() - newExprs.size()), metadata);
                    LinkedHashMap<Expression, Integer> mappedExprs = new LinkedHashMap<Expression, Integer>();
                    for (Map.Entry<Expression, Integer> entry : newExprs.entrySet()) {
                        Expression ex = (Expression) entry.getKey().clone();
                        ExpressionMappingVisitor.mapExpressions(ex, map.asMap());
                        mappedExprs.put(ex, entry.getValue());
                    }
                    id.getTableData().setFunctionBasedExpressions(mappedExprs);
                }
            }
        }
    }
    updateCacheHint(viewId, group, id);
    return id;
}
Also used : ElementSymbol(org.teiid.query.sql.symbol.ElementSymbol) Table(org.teiid.metadata.Table) TempMetadataID(org.teiid.query.metadata.TempMetadataID) SymbolMap(org.teiid.query.sql.util.SymbolMap) CacheHint(org.teiid.query.sql.lang.CacheHint) LinkedHashMap(java.util.LinkedHashMap) KeyRecord(org.teiid.metadata.KeyRecord) Expression(org.teiid.query.sql.symbol.Expression) Column(org.teiid.metadata.Column) QueryNode(org.teiid.query.mapping.relational.QueryNode) GroupSymbol(org.teiid.query.sql.symbol.GroupSymbol) Collection(java.util.Collection) ReplicatedObject(org.teiid.query.ReplicatedObject) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) SymbolMap(org.teiid.query.sql.util.SymbolMap)

Example 94 with Column

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

the class SQLStringVisitor method visit.

@Override
public void visit(Create obj) {
    append(CREATE);
    append(SPACE);
    if (obj.getTableMetadata() != null) {
        append(FOREIGN);
        append(SPACE);
        append(TEMPORARY);
        append(SPACE);
        append(TABLE);
        append(SPACE);
        new DDLVisitor().addTableBody(obj.getTableMetadata());
        append(SPACE);
        append(ON);
        append(SPACE);
        outputLiteral(String.class, false, obj.getOn());
        return;
    }
    append(LOCAL);
    append(SPACE);
    append(TEMPORARY);
    append(SPACE);
    append(TABLE);
    append(SPACE);
    visitNode(obj.getTable());
    append(SPACE);
    // Columns clause
    List<Column> columns = obj.getColumns();
    // $NON-NLS-1$
    append("(");
    Iterator<Column> iter = columns.iterator();
    while (iter.hasNext()) {
        Column element = iter.next();
        outputDisplayName(element.getName());
        append(SPACE);
        if (element.isAutoIncremented()) {
            append(NonReserved.SERIAL);
        } else {
            append(element.getRuntimeType());
            if (element.getNullType() == NullType.No_Nulls) {
                append(SPACE);
                append(NOT);
                append(SPACE);
                append(NULL);
            }
        }
        if (iter.hasNext()) {
            // $NON-NLS-1$
            append(", ");
        }
    }
    if (!obj.getPrimaryKey().isEmpty()) {
        // $NON-NLS-1$
        append(", ");
        append(PRIMARY);
        // $NON-NLS-1$
        append(" ");
        append(NonReserved.KEY);
        append(Tokens.LPAREN);
        Iterator<ElementSymbol> pkiter = obj.getPrimaryKey().iterator();
        while (pkiter.hasNext()) {
            outputShortName(pkiter.next());
            if (pkiter.hasNext()) {
                // $NON-NLS-1$
                append(", ");
            }
        }
        append(Tokens.RPAREN);
    }
    append(Tokens.RPAREN);
    CommitAction commitAction = obj.getCommitAction();
    if (commitAction != null) {
        append(Tokens.SPACE);
        append(Reserved.ON);
        append(Tokens.SPACE);
        append(Reserved.COMMIT);
        append(Tokens.SPACE);
        switch(commitAction) {
            case PRESERVE_ROWS:
                append(NonReserved.PRESERVE);
                append(Tokens.SPACE);
                append(Reserved.ROWS);
                break;
        }
    }
}
Also used : ObjectColumn(org.teiid.query.sql.lang.ObjectTable.ObjectColumn) TextColumn(org.teiid.query.sql.lang.TextTable.TextColumn) XMLColumn(org.teiid.query.sql.lang.XMLTable.XMLColumn) ProjectedColumn(org.teiid.query.sql.lang.TableFunctionReference.ProjectedColumn) Column(org.teiid.metadata.Column) CommitAction(org.teiid.query.sql.lang.Create.CommitAction)

Example 95 with Column

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

the class TestValidator method exampleMetadata4.

public static TransformationMetadata exampleMetadata4() {
    MetadataStore metadataStore = new MetadataStore();
    // Create metadata objects
    // $NON-NLS-1$
    Schema modelObj = RealMetadataFactory.createPhysicalModel("test", metadataStore);
    // $NON-NLS-1$
    Table groupObj = RealMetadataFactory.createPhysicalGroup("group", modelObj);
    // $NON-NLS-1$
    RealMetadataFactory.createElement("e0", groupObj, DataTypeManager.DefaultDataTypes.INTEGER);
    // $NON-NLS-1$
    RealMetadataFactory.createElement("e1", groupObj, DataTypeManager.DefaultDataTypes.STRING);
    // $NON-NLS-1$
    RealMetadataFactory.createElement("e2", groupObj, DataTypeManager.DefaultDataTypes.STRING);
    // $NON-NLS-1$
    Schema vModelObj = RealMetadataFactory.createVirtualModel("vTest", metadataStore);
    // $NON-NLS-1$ //$NON-NLS-2$
    QueryNode vNode = new QueryNode("SELECT * FROM test.group");
    // $NON-NLS-1$
    Table vGroupObj = RealMetadataFactory.createVirtualGroup("vGroup", vModelObj, vNode);
    // $NON-NLS-1$
    Column vElemObj0 = RealMetadataFactory.createElement("e0", vGroupObj, DataTypeManager.DefaultDataTypes.INTEGER);
    // $NON-NLS-1$
    Column vElemObj1 = RealMetadataFactory.createElement("e1", vGroupObj, DataTypeManager.DefaultDataTypes.STRING);
    // $NON-NLS-1$
    RealMetadataFactory.createElement("e2", vGroupObj, DataTypeManager.DefaultDataTypes.STRING);
    List<Column> elements = new ArrayList<Column>(2);
    elements.add(vElemObj0);
    elements.add(vElemObj1);
    // e1 //$NON-NLS-1$
    RealMetadataFactory.createAccessPattern("ap1", vGroupObj, elements);
    // $NON-NLS-1$ //$NON-NLS-2$
    QueryNode vNode2 = new QueryNode("SELECT * FROM vTest.vGroup");
    // $NON-NLS-1$
    Table vGroupObj2 = RealMetadataFactory.createVirtualGroup("vGroup2", vModelObj, vNode2);
    // $NON-NLS-1$
    Column vElemObj20 = RealMetadataFactory.createElement("e0", vGroupObj2, DataTypeManager.DefaultDataTypes.INTEGER);
    // $NON-NLS-1$
    Column vElemObj21 = RealMetadataFactory.createElement("e1", vGroupObj2, DataTypeManager.DefaultDataTypes.STRING);
    // $NON-NLS-1$
    RealMetadataFactory.createElement("e2", vGroupObj2, DataTypeManager.DefaultDataTypes.STRING);
    elements = new ArrayList<Column>(2);
    elements.add(vElemObj20);
    elements.add(vElemObj21);
    // e1 //$NON-NLS-1$
    RealMetadataFactory.createAccessPattern("vTest.vGroup2.ap1", vGroupObj2, elements);
    return RealMetadataFactory.createTransformationMetadata(metadataStore, "example4");
}
Also used : MetadataStore(org.teiid.metadata.MetadataStore) Table(org.teiid.metadata.Table) Column(org.teiid.metadata.Column) QueryNode(org.teiid.query.mapping.relational.QueryNode) Schema(org.teiid.metadata.Schema) ArrayList(java.util.ArrayList)

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