|
30 | 30 | import java.util.Map; |
31 | 31 | import java.util.Objects; |
32 | 32 | import java.util.Set; |
| 33 | +import java.util.function.Function; |
33 | 34 |
|
34 | 35 | import static com.facebook.presto.plugin.clp.ClpConnectorFactory.CONNECTOR_NAME; |
35 | 36 | import static com.facebook.presto.plugin.clp.ClpErrorCode.CLP_MANDATORY_METADATA_FILTER_NOT_VALID; |
@@ -97,7 +98,7 @@ public void checkContainsRequiredFilters(SchemaTableName schemaTableName, String |
97 | 98 | { |
98 | 99 | boolean hasRequiredMetadataFilterColumns = true; |
99 | 100 | ImmutableList.Builder<String> notFoundListBuilder = ImmutableList.builder(); |
100 | | - for (String columnName : getRequiredFilterNames(format("%s.%s", CONNECTOR_NAME, schemaTableName))) { |
| 101 | + for (String columnName : getRequiredColumnNames(format("%s.%s", CONNECTOR_NAME, schemaTableName))) { |
101 | 102 | if (!metadataFilterSql.contains(columnName)) { |
102 | 103 | hasRequiredMetadataFilterColumns = false; |
103 | 104 | notFoundListBuilder.add(columnName); |
@@ -166,52 +167,42 @@ public String remapFilterSql(String scope, String sql) |
166 | 167 | return remappedSql; |
167 | 168 | } |
168 | 169 |
|
169 | | - public Set<String> getFilterNames(String scope) |
| 170 | + public Set<String> getColumnNames(String scope) |
170 | 171 | { |
171 | | - String[] splitScope = scope.split("\\."); |
172 | | - if (0 == splitScope.length) { |
173 | | - return ImmutableSet.of(); |
174 | | - } |
175 | | - ImmutableSet.Builder<String> builder = ImmutableSet.builder(); |
176 | | - builder.addAll(getAllFilterNamesFromFilters(filterMap.get(splitScope[0]))); |
177 | | - |
178 | | - if (1 < splitScope.length) { |
179 | | - builder.addAll(getAllFilterNamesFromFilters(filterMap.get(splitScope[0] + "." + splitScope[1]))); |
180 | | - } |
181 | | - |
182 | | - if (3 == splitScope.length) { |
183 | | - builder.addAll(getAllFilterNamesFromFilters(filterMap.get(scope))); |
184 | | - } |
185 | | - return builder.build(); |
| 172 | + return collectColumnNamesFromScopes(scope, this::getAllColumnNamesFromFilters); |
186 | 173 | } |
187 | 174 |
|
188 | | - private Set<String> getAllFilterNamesFromFilters(List<Filter> filters) |
| 175 | + private Set<String> getRequiredColumnNames(String scope) |
189 | 176 | { |
190 | | - return null != filters ? filters.stream() |
191 | | - .map(filter -> filter.columnName) |
192 | | - .collect(toImmutableSet()) : ImmutableSet.of(); |
| 177 | + return collectColumnNamesFromScopes(scope, this::getRequiredColumnNamesFromFilters); |
193 | 178 | } |
194 | 179 |
|
195 | | - private Set<String> getRequiredFilterNames(String scope) |
| 180 | + private Set<String> collectColumnNamesFromScopes(String scope, Function<List<Filter>, Set<String>> extractor) |
196 | 181 | { |
197 | 182 | String[] splitScope = scope.split("\\."); |
198 | | - if (0 == splitScope.length) { |
199 | | - return ImmutableSet.of(); |
200 | | - } |
201 | 183 | ImmutableSet.Builder<String> builder = ImmutableSet.builder(); |
202 | | - builder.addAll(getRequiredFilterNamesFromFilters(filterMap.get(splitScope[0]))); |
203 | 184 |
|
204 | | - if (1 < splitScope.length) { |
205 | | - builder.addAll(getRequiredFilterNamesFromFilters(filterMap.get(splitScope[0] + "." + splitScope[1]))); |
| 185 | + builder.addAll(extractor.apply(filterMap.get(splitScope[0]))); |
| 186 | + |
| 187 | + if (splitScope.length > 1) { |
| 188 | + builder.addAll(extractor.apply(filterMap.get(splitScope[0] + "." + splitScope[1]))); |
206 | 189 | } |
207 | 190 |
|
208 | | - if (3 == splitScope.length) { |
209 | | - builder.addAll(getRequiredFilterNamesFromFilters(filterMap.get(scope))); |
| 191 | + if (splitScope.length == 3) { |
| 192 | + builder.addAll(extractor.apply(filterMap.get(scope))); |
210 | 193 | } |
| 194 | + |
211 | 195 | return builder.build(); |
212 | 196 | } |
213 | 197 |
|
214 | | - private Set<String> getRequiredFilterNamesFromFilters(List<Filter> filters) |
| 198 | + private Set<String> getAllColumnNamesFromFilters(List<Filter> filters) |
| 199 | + { |
| 200 | + return null != filters ? filters.stream() |
| 201 | + .map(filter -> filter.columnName) |
| 202 | + .collect(toImmutableSet()) : ImmutableSet.of(); |
| 203 | + } |
| 204 | + |
| 205 | + private Set<String> getRequiredColumnNamesFromFilters(List<Filter> filters) |
215 | 206 | { |
216 | 207 | return null != filters ? filters.stream() |
217 | 208 | .filter(filter -> filter.required) |
|
0 commit comments