/** * This is a utility method for a common use of this visitor, which is to collect * all groups used by all elements in an object tree. * @param type Language object type to look for * @param object Root of the language object tree * @return Set of IGroup */ public static Set<NamedTable> collectGroupsUsedByElements(LanguageObject object) { Set<NamedTable> groups = new HashSet<NamedTable>(); for (ColumnReference element : CollectorVisitor.collectElements(object)) { if(element.getTable() != null) { groups.add(element.getTable()); } } return groups; }
private Object getValueFromRowInfo(ColumnReference column, Object value) { String tableName = column.getTable().getMetadataObject().getName(); if (this.rowInfo.tableName.equals(tableName) || this.rowInfo.mergedTableName.equals(tableName)) { // one to one case value = this.rowInfo.PK; } else { // one to many case RowInfo info = this.rowInfo; while(info.parent != null) { info = info.parent; if (info.tableName.equals(tableName) || info.mergedTableName.equals(tableName)) { value = info.PK; break; } } } return value; }
@Override public void visit(ColumnReference column) { Column record = column.getMetadataObject(); if (record != null) { String name = record.getProperty(JPAMetadataProcessor.KEY_ASSOSIATED_WITH_FOREIGN_TABLE, false); if (name == null) { buffer.append(column.getTable().getCorrelationName()).append(Tokens.DOT) .append(record.getSourceName()); } else { String attrName = record.getProperty(JPAMetadataProcessor.RELATION_PROPERTY, false); String attrColumnName = record.getProperty(JPAMetadataProcessor.RELATION_KEY, false); String groupName = column.getTable().getCorrelationName() + Tokens.DOT + attrName; String correlationName = this.visitor.implicitGroups.get(groupName).getCorrelationName(); buffer.append(correlationName).append(Tokens.DOT).append(attrColumnName); } } else { buffer.append(column.getName()); } }
@Override public void visit(ColumnReference column) { AbstractMetadataRecord record = column.getMetadataObject(); if (record != null) { String name = record.getProperty(JPAMetadataProcessor.KEY_ASSOSIATED_WITH_FOREIGN_TABLE, false); if (name == null) { buffer.append(this.visitor.correlatedName.get(column.getTable().getMetadataObject().getName())).append(Tokens.DOT).append(column.getMetadataObject().getName()); } else { buffer.append(this.visitor.correlatedName.get(name)).append(Tokens.DOT).append(column.getMetadataObject().getName()); } } else { buffer.append(column.getName()); } } }
NamedTable nt = ((ColumnReference)expr).getTable(); if (nt.getCorrelationName() != null) { objs.add(nt.getCorrelationName());
@Override public void visit(ColumnReference obj) { AbstractMetadataRecord record = obj.getMetadataObject(); if (record != null) { String name = record.getProperty(JPAMetadataProcessor.KEY_ASSOSIATED_WITH_FOREIGN_TABLE, false); if (name != null) { try { Table t = this.metadata.getTable(name); String correlationName = obj.getTable().getCorrelationName(); String attrName = record.getProperty(JPAMetadataProcessor.RELATION_PROPERTY, false); String groupName = correlationName + Tokens.DOT + attrName; NamedTable nt = this.implicitGroups.get(groupName); if (nt == null) { nt = new NamedTable(groupName, "J_"+this.aliasCounter.getAndIncrement(), t); this.implicitGroups.put(groupName, nt); //$NON-NLS-1$ } } catch (TranslatorException e) { exceptions.add(e); } } } }
private String getElementName(ColumnReference obj, boolean qualify) { String groupName = null; NamedTable group = obj.getTable(); if (group != null && qualify) { if(group.getCorrelationName() != null) {
public void testGetGroup() throws Exception { Object metadataID = TstLanguageBridgeFactory.metadata.getElementID("pm1.g1.e1"); //$NON-NLS-1$ assertNotNull(example("pm1.g1", "e1", metadataID).getTable()); //$NON-NLS-1$ //$NON-NLS-2$ }
@Override public void visit(Comparison obj) { // this for $cond in the select statement, and formatting of command for $cond vs $match is different if (this.processingDerivedColumn) { visitDerivedExpression(obj); return; } // this for the normal where clause ColumnDetail leftExprDetails = getExpressionAlias(obj.getLeftExpression()); append(obj.getRightExpression()); Object rightExpr = this.onGoingExpression.pop(); if (this.expressionMap.get(rightExpr) != null) { rightExpr = this.expressionMap.get(rightExpr).getProjectedName(); } QueryBuilder query = leftExprDetails.getQueryBuilder(); rightExpr = checkAndConvertToObjectId(obj.getLeftExpression(), obj.getRightExpression(), rightExpr); buildComparisionQuery(obj, rightExpr, query); if (leftExprDetails.partOfProject || obj.getLeftExpression() instanceof ColumnReference) { this.onGoingExpression.push(query.get()); } else { this.onGoingExpression.push(buildFunctionQuery(obj, (BasicDBObject)leftExprDetails.expression, rightExpr)); } if (obj.getLeftExpression() instanceof ColumnReference) { ColumnReference column = (ColumnReference)obj.getLeftExpression(); this.mongoDoc.updateReferenceColumnValue(column.getTable().getName(), column.getName(), rightExpr); } }
this.mongoDoc.updateReferenceColumnValue(column.getTable().getName(), column.getName(), rightExpr);
private Object getRowValue(Expression obj) throws TranslatorException { if (!(obj instanceof ColumnReference)) { throw new TranslatorException(MongoDBPlugin.Util.gs(MongoDBPlugin.Event.TEIID18017)); } ColumnReference column = (ColumnReference)obj; Object value = null; if (MongoDBSelectVisitor.isPartOfPrimaryKey(column.getTable().getMetadataObject(), column.getName())) { // this is true one to many case value = this.row.get("_id"); //$NON-NLS-1$ if (value == null) { value = getValueFromRowInfo(column, value); } } if (value == null && MongoDBSelectVisitor.isPartOfForeignKey(column.getTable().getMetadataObject(), column.getName())) { value = getValueFromRowInfo(column, value); } if (value == null) { value = this.row.get(column.getName()); } if (value instanceof DBRef) { value = ((DBRef)value).getId(); } if (value instanceof DBObject) { value = ((DBObject) value).get(column.getName()); } return this.executionFactory.retrieveValue(value, column.getType(), this.mongoDB, column.getName(), column.getName()); }
ColumnReference translate(ElementSymbol symbol) { ColumnReference element = new ColumnReference(translate(symbol.getGroupSymbol()), Symbol.getShortName(symbol.getOutputName()), null, symbol.getType()); if (element.getTable().getMetadataObject() == null) { //handle procedure resultset columns if (symbol.getMetadataID() instanceof TempMetadataID) { TempMetadataID tid = (TempMetadataID)symbol.getMetadataID(); if (tid.getOriginalMetadataID() instanceof Column && !(((Column)tid.getOriginalMetadataID()).getParent() instanceof Table)) { element.setMetadataObject(metadataFactory.getElement(tid.getOriginalMetadataID())); } } return element; } Object mid = symbol.getMetadataID(); element.setMetadataObject(metadataFactory.getElement(mid)); return element; }
ColumnReference translate(ElementSymbol symbol) { ColumnReference element = new ColumnReference(translate(symbol.getGroupSymbol()), Symbol.getShortName(symbol.getOutputName()), null, symbol.getType()); if (element.getTable().getMetadataObject() == null) { //handle procedure resultset columns if (symbol.getMetadataID() instanceof TempMetadataID) { TempMetadataID tid = (TempMetadataID)symbol.getMetadataID(); if (tid.getOriginalMetadataID() instanceof Column && !(((Column)tid.getOriginalMetadataID()).getParent() instanceof Table)) { element.setMetadataObject(metadataFactory.getElement(tid.getOriginalMetadataID())); } } return element; } Object mid = symbol.getMetadataID(); element.setMetadataObject(metadataFactory.getElement(mid)); return element; }
ColumnReference translate(ElementSymbol symbol) { ColumnReference element = new ColumnReference(translate(symbol.getGroupSymbol()), Symbol.getShortName(symbol.getOutputName()), null, symbol.getType()); if (element.getTable().getMetadataObject() == null) { //handle procedure resultset columns if (symbol.getMetadataID() instanceof TempMetadataID) { TempMetadataID tid = (TempMetadataID)symbol.getMetadataID(); if (tid.getOriginalMetadataID() instanceof Column && !(((Column)tid.getOriginalMetadataID()).getParent() instanceof Table)) { element.setMetadataObject(metadataFactory.getElement(tid.getOriginalMetadataID())); } } return element; } Object mid = symbol.getMetadataID(); element.setMetadataObject(metadataFactory.getElement(mid)); return element; }
ColumnDetail buildColumnDetail(ColumnReference obj) throws TranslatorException { MongoDocument columnDocument = getDocument(obj.getTable().getMetadataObject()); MongoDocument targetDocument = this.mongoDoc.getTargetDocument();
private boolean addEnityKey(Comparison obj) { if (obj.getOperator().equals(Comparison.Operator.EQ)) { if (obj.getLeftExpression() instanceof ColumnReference && obj.getRightExpression() instanceof Literal) { ColumnReference columnRef = (ColumnReference)obj.getLeftExpression(); Table parentTable = columnRef.getTable().getMetadataObject(); Entity entity = getEntity(parentTable); if (entity != null) { Column column = columnRef.getMetadataObject(); if (parentTable.getPrimaryKey().getColumnByName(column.getName())!=null) { entity.addKeyValue(column, (Literal)obj.getRightExpression()); return true; } } } 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 Entity leftEntity = getEntity((Table)left.getParent()); Entity rightEntity = getEntity((Table)right.getParent()); leftEntity.addRelation(left, right, rightEntity); rightEntity.addRelation(right,left, leftEntity); return true; } } } return false; }