private List getSubHandlerAuditTableResults()

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;
    }