@Override public PerformanceCharacteristics getPerformanceCharacteristics() { boolean queryOptimizationPreferred = true; boolean naturalRecordOrderConsistent = true; for (final Datastore datastore : _datastores) { final PerformanceCharacteristics performanceCharacteristics = datastore.getPerformanceCharacteristics(); queryOptimizationPreferred = queryOptimizationPreferred && performanceCharacteristics.isQueryOptimizationPreferred(); naturalRecordOrderConsistent = naturalRecordOrderConsistent && performanceCharacteristics.isNaturalRecordOrderConsistent(); } return new PerformanceCharacteristicsImpl(queryOptimizationPreferred, naturalRecordOrderConsistent); }
/** * Creates a slave job by copying the original job and adding a * {@link MaxRowsFilter} as a default requirement. * * @param job * @param firstRow * @param maxRows * @return */ private AnalysisJob buildSlaveJob(final AnalysisJob job, final int slaveJobIndex, final int firstRow, final int maxRows) { logger.info("Building slave job {} with firstRow={} and maxRow={}", slaveJobIndex + 1, firstRow, maxRows); try (AnalysisJobBuilder jobBuilder = new AnalysisJobBuilder(_configuration, job)) { final FilterComponentBuilder<MaxRowsFilter, Category> maxRowsFilter = jobBuilder.addFilter(MaxRowsFilter.class); maxRowsFilter.getComponentInstance().setFirstRow(firstRow); maxRowsFilter.getComponentInstance().setMaxRows(maxRows); final boolean naturalRecordOrderConsistent = jobBuilder.getDatastore().getPerformanceCharacteristics().isNaturalRecordOrderConsistent(); if (!naturalRecordOrderConsistent) { final InputColumn<?> orderColumn = findOrderByColumn(jobBuilder); maxRowsFilter.getComponentInstance().setOrderColumn(orderColumn); } jobBuilder.setDefaultRequirement(maxRowsFilter, MaxRowsFilter.Category.VALID); // in assertion/test mode do an early validation assert jobBuilder.isConfigured(true); return jobBuilder.toAnalysisJob(); } }
if (!_datastore.getPerformanceCharacteristics().isQueryOptimizationPreferred()) {
public SimpleDictionary loadIntoMemory(final DatastoreConnection datastoreConnection) { final DataContext dataContext = datastoreConnection.getDataContext(); final Column column = getColumn(datastoreConnection); final Query query = dataContext.query().from(column.getTable()).select(column).toQuery(); if (datastoreConnection.getDatastore().getPerformanceCharacteristics().isQueryOptimizationPreferred()) { query.getSelectClause().setDistinct(true); } final Set<String> values = new HashSet<>(); try (DataSet dataSet = dataContext.executeQuery(query)) { while (dataSet.next()) { final Object value = dataSet.getRow().getValue(0); if (value != null) { values.add(value.toString()); } } } return new SimpleDictionary(getName(), values); }