Search in sources :

Example 1 with AccessControlInfo

use of com.facebook.presto.sql.analyzer.Analysis.AccessControlInfo in project presto by prestodb.

the class UtilizedColumnsAnalyzer method analyze.

public void analyze(Node node) {
    UtilizedFieldsBuilderVisitor visitor = new UtilizedFieldsBuilderVisitor(analysis);
    ImmutableSet.Builder<Field> utilizedFieldsBuilder = ImmutableSet.builder();
    visitor.process(node, new Context(utilizedFieldsBuilder));
    // Keep only the utilized fields that are actual table columns
    HashMultimap<QualifiedObjectName, String> utilizedTableColumns = HashMultimap.create();
    for (Field field : utilizedFieldsBuilder.build()) {
        if (field.getOriginTable().isPresent() && field.getOriginColumnName().isPresent()) {
            utilizedTableColumns.put(field.getOriginTable().get(), field.getOriginColumnName().get());
        }
    }
    // For each access control, keep only the table columns that impact the final results
    for (Entry<AccessControlInfo, Map<QualifiedObjectName, Set<String>>> entry : analysis.getTableColumnReferences().entrySet()) {
        AccessControlInfo accessControlInfo = entry.getKey();
        Map<QualifiedObjectName, Set<String>> tableColumnsForThisAccessControl = entry.getValue();
        Map<QualifiedObjectName, Set<String>> utilizedTableColumnsForThisAccessControl = new HashMap<>();
        for (QualifiedObjectName table : tableColumnsForThisAccessControl.keySet()) {
            utilizedTableColumnsForThisAccessControl.put(table, intersection(utilizedTableColumns.get(table), tableColumnsForThisAccessControl.get(table)));
        }
        analysis.addUtilizedTableColumnReferences(accessControlInfo, utilizedTableColumnsForThisAccessControl);
    }
}
Also used : ImmutableSet(com.google.common.collect.ImmutableSet) Set(java.util.Set) HashMap(java.util.HashMap) QualifiedObjectName(com.facebook.presto.common.QualifiedObjectName) AccessControlInfo(com.facebook.presto.sql.analyzer.Analysis.AccessControlInfo) ImmutableSet(com.google.common.collect.ImmutableSet) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

QualifiedObjectName (com.facebook.presto.common.QualifiedObjectName)1 AccessControlInfo (com.facebook.presto.sql.analyzer.Analysis.AccessControlInfo)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 Set (java.util.Set)1