in metacat-connector-hive/src/main/java/com/netflix/metacat/connector/hive/sql/DirectSqlGetPartition.java [915:967]
private <T> List<T> getSubHandlerAuditTableResults(
final String databaseName,
final String tableName,
@Nullable final String filterExpression,
@Nullable final List<String> partitionIds,
final String sql,
final ResultSetExtractor resultSetExtractor,
@Nullable final String joinSql,
@Nullable final String filterSql,
@Nullable final List<Object> filterParams,
@Nullable final Sort sort,
@Nullable final Pageable pageable,
final boolean forceDisableAudit
) {
final Optional<QualifiedName> sourceTableName = getSourceTableName(databaseName, tableName, forceDisableAudit);
List<T> partitions = Lists.newArrayList();
if (sourceTableName.isPresent()) {
final StringBuilder auditTableQueryBuilder = getBasicPartitionQuery(partitionIds, sql, joinSql, filterSql);
final StringBuilder sourceTableQueryBuilder = getBasicPartitionQuery(partitionIds, sql, joinSql, filterSql)
.append(SQL.SQL_NOT_IN_AUTDI_TABLE_PARTITIONS);
//union the two queries, using ALL for optimization since the above sql already filtered out the overlap
//partitions from the source table
auditTableQueryBuilder.append(" UNION ALL ").append(sourceTableQueryBuilder);
addSortPageableFilter(auditTableQueryBuilder, filterExpression, sort, pageable);
// Params
final ImmutableList.Builder<Object> paramsBuilder = ImmutableList.builder().add(databaseName, tableName);
if (partitionIds != null && !partitionIds.isEmpty()) {
paramsBuilder.addAll(partitionIds);
}
if (filterSql != null && filterParams != null) {
paramsBuilder.addAll(filterParams);
}
paramsBuilder.add(sourceTableName.get().getDatabaseName(), sourceTableName.get().getTableName());
if (partitionIds != null && !partitionIds.isEmpty()) {
paramsBuilder.addAll(partitionIds);
}
if (filterSql != null && filterParams != null) {
paramsBuilder.addAll(filterParams);
}
paramsBuilder.add(databaseName, tableName);
final List<Object> params = paramsBuilder.build();
final Object[] oParams = new Object[params.size()];
partitions = (List) jdbcTemplate.query(
auditTableQueryBuilder.toString(), params.toArray(oParams), resultSetExtractor);
if (pageable != null && pageable.isPageable() && !Strings.isNullOrEmpty(filterExpression)) {
partitions = processPageable(partitions, pageable);
}
}
return partitions;
}