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