Skip to content

Commit

Permalink
TEIID-4835 adding column level dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
shawkins committed Apr 4, 2017
1 parent c72a23c commit 33addd7
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 14 deletions.
Expand Up @@ -924,7 +924,11 @@ public void fillRow(List<Object> row, AbstractMetadataRecord entry, VDBMetaData
row.add(getType(currentParent));
row.add(currentParent.getParent().getName());
row.add(currentParent.getName());
row.add(null); //column usage not yet supported
if (currentParent instanceof Column) {
row.add(currentParent.getName());
} else {
row.add(null);
}
row.add(entry.getUUID());
row.add(getType(entry));
if (entry instanceof Column) {
Expand Down
Expand Up @@ -54,7 +54,9 @@
import org.teiid.query.resolver.util.ResolverVisitor;
import org.teiid.query.sql.lang.CacheHint;
import org.teiid.query.sql.lang.Command;
import org.teiid.query.sql.lang.Query;
import org.teiid.query.sql.lang.QueryCommand;
import org.teiid.query.sql.lang.SetQuery;
import org.teiid.query.sql.navigator.PreOrPostOrderNavigator;
import org.teiid.query.sql.proc.CreateProcedureCommand;
import org.teiid.query.sql.symbol.ElementSymbol;
Expand Down Expand Up @@ -634,18 +636,33 @@ private void validate(VDBMetaData vdb, ModelMetaData model, AbstractMetadataReco
}

public static void determineDependencies(AbstractMetadataRecord p, Command command) {
Collection<GroupSymbol> groups = GroupCollectorVisitor.getGroupsIgnoreInlineViews(command, true);
LinkedHashSet<AbstractMetadataRecord> values = new LinkedHashSet<AbstractMetadataRecord>();
for (GroupSymbol group : groups) {
Object mid = group.getMetadataID();
if (mid instanceof TempMetadataAdapter) {
mid = ((TempMetadataID)mid).getOriginalMetadataID();
}
if (mid instanceof AbstractMetadataRecord) {
values.add((AbstractMetadataRecord)mid);
}
collectDependencies(command, values);
p.setIncomingObjects(new ArrayList<AbstractMetadataRecord>(values));
if (p instanceof Table) {
Table t = (Table)p;
for (int i = 0; i < t.getColumns().size(); i++) {
LinkedHashSet<AbstractMetadataRecord> columnValues = new LinkedHashSet<AbstractMetadataRecord>();
Column c = t.getColumns().get(i);
c.setIncomingObjects(columnValues);
determineDependencies(command, c, i, columnValues);
}
}
Collection<ElementSymbol> elems = ElementCollectorVisitor.getElements(command, true, true);
}

private static void collectDependencies(org.teiid.query.sql.LanguageObject lo,
LinkedHashSet<AbstractMetadataRecord> values) {
Collection<GroupSymbol> groups = GroupCollectorVisitor.getGroupsIgnoreInlineViews(lo, true);
for (GroupSymbol group : groups) {
Object mid = group.getMetadataID();
if (mid instanceof TempMetadataAdapter) {
mid = ((TempMetadataID)mid).getOriginalMetadataID();
}
if (mid instanceof AbstractMetadataRecord) {
values.add((AbstractMetadataRecord)mid);
}
}
Collection<ElementSymbol> elems = ElementCollectorVisitor.getElements(lo, true, true);
for (ElementSymbol elem : elems) {
Object mid = elem.getMetadataID();
if (mid instanceof TempMetadataAdapter) {
Expand All @@ -655,8 +672,17 @@ public static void determineDependencies(AbstractMetadataRecord p, Command comma
values.add((AbstractMetadataRecord)mid);
}
}
p.setIncomingObjects(new ArrayList<AbstractMetadataRecord>(values));
}
}

private static void determineDependencies(Command command, Column c, int index, LinkedHashSet<AbstractMetadataRecord> columnValues) {
if (command instanceof Query) {
Expression ex = command.getProjectedSymbols().get(index);
collectDependencies(ex, columnValues);
} else if (command instanceof SetQuery) {
determineDependencies(((SetQuery)command).getLeftQuery(), c, index, columnValues);
determineDependencies(((SetQuery)command).getRightQuery(), c, index, columnValues);
}
}

private static Table findTableByName(MetadataStore store, String name) {

Expand Down

0 comments on commit 33addd7

Please sign in to comment.