本文整理汇总了Java中org.apache.metamodel.query.Query.clone方法的典型用法代码示例。如果您正苦于以下问题:Java Query.clone方法的具体用法?Java Query.clone怎么用?Java Query.clone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类org.apache.metamodel.query.Query
的用法示例。
在下文中一共展示了Query.clone方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: getOptimizedQuery
import org.apache.metamodel.query.Query; //导入方法依赖的package包/类
@Override
public Query getOptimizedQuery() {
Query query = _baseQuery;
final Set<Entry<FilterConsumer, FilterOutcome>> entries = _optimizedFilters.entrySet();
if (!entries.isEmpty()) {
// create a copy/clone of the original query
query = query.clone();
for (final Entry<FilterConsumer, FilterOutcome> entry : entries) {
final FilterConsumer consumer = entry.getKey();
final FilterOutcome outcome = entry.getValue();
final Filter<?> filter = consumer.getComponent();
@SuppressWarnings("rawtypes") final QueryOptimizedFilter queryOptimizedFilter =
(QueryOptimizedFilter) filter;
@SuppressWarnings("unchecked") final Query newQuery =
queryOptimizedFilter.optimizeQuery(query, outcome.getCategory());
query = newQuery;
}
}
return query;
}
示例2: createExpectedRowsRef
import org.apache.metamodel.query.Query; //导入方法依赖的package包/类
private Supplier<Integer> createExpectedRowsRef() {
// TODO: This only seems valid for source tables
return new LazyRef<Integer>() {
@Override
protected Integer fetch() {
int expectedRows = -1;
{
final Query originalQuery = getQuery();
final Query countQuery = originalQuery.clone();
countQuery.setMaxRows(null);
countQuery.setFirstRow(null);
countQuery.getSelectClause().removeItems();
countQuery.getOrderByClause().removeItems();
countQuery.selectCount();
countQuery.getSelectClause().getItem(0).setFunctionApproximationAllowed(true);
final Datastore datastore = _publisher.getStream().getAnalysisJob().getDatastore();
try (DatastoreConnection connection = datastore.openConnection()) {
try (DataSet countDataSet = connection.getDataContext().executeQuery(countQuery)) {
if (countDataSet.next()) {
final Number count =
ConvertToNumberTransformer.transformValue(countDataSet.getRow().getValue(0));
if (count != null) {
expectedRows = count.intValue();
}
}
}
}
final Integer maxRows = originalQuery.getMaxRows();
if (maxRows != null) {
expectedRows = Math.min(expectedRows, maxRows.intValue());
}
}
return expectedRows;
}
};
}
示例3: createExpectedRowsRef
import org.apache.metamodel.query.Query; //导入方法依赖的package包/类
private Ref<Integer> createExpectedRowsRef() {
return new LazyRef<Integer>() {
@Override
protected Integer fetch() {
int expectedRows = -1;
{
final Query originalQuery = getQuery();
final Query countQuery = originalQuery.clone();
countQuery.setMaxRows(null);
countQuery.setFirstRow(null);
countQuery.getSelectClause().removeItems();
countQuery.getOrderByClause().removeItems();
countQuery.selectCount();
countQuery.getSelectClause().getItem(0).setFunctionApproximationAllowed(true);
final Datastore datastore = _publishers.getDatastore();
try (final DatastoreConnection connection = datastore.openConnection()) {
try (final DataSet countDataSet = connection.getDataContext().executeQuery(countQuery)) {
if (countDataSet.next()) {
final Number count = ConvertToNumberTransformer.transformValue(countDataSet.getRow()
.getValue(0));
if (count != null) {
expectedRows = count.intValue();
}
}
}
}
final Integer maxRows = originalQuery.getMaxRows();
if (maxRows != null) {
expectedRows = Math.min(expectedRows, maxRows.intValue());
}
}
return expectedRows;
}
};
}
示例4: getRowCount
import org.apache.metamodel.query.Query; //导入方法依赖的package包/类
private long getRowCount(Query q) {
q = q.clone();
SelectItem countAllItem = SelectItem.getCountAllItem();
if (q.getGroupByClause().getItemCount() > 0) {
q = new Query().from(new FromItem(q).setAlias("sq")).select(countAllItem);
} else {
q.getSelectClause().removeItems();
q.select(countAllItem);
}
Row row = MetaModelHelper.executeSingleRowQuery(_dataContext, q);
Number count = (Number) row.getValue(countAllItem);
return count.longValue();
}
示例5: rewriteQuery
import org.apache.metamodel.query.Query; //导入方法依赖的package包/类
@Override
public String rewriteQuery(Query query) {
final Integer firstRow = query.getFirstRow();
final Integer maxRows = query.getMaxRows();
if (maxRows == null && (firstRow == null || firstRow.intValue() == 1)) {
return super.rewriteQuery(query);
}
if ((firstRow == null || firstRow.intValue() == 1) && maxRows != null && maxRows > 0) {
// We prefer to use the "FETCH FIRST [n] ROWS ONLY" approach, if
// firstRow is not specified.
return super.rewriteQuery(query) + " FETCH FIRST " + maxRows + " ROWS ONLY";
} else {
// build a ROW_NUMBER() query like this:
// SELECT [original select clause]
// FROM ([original select clause],
// ROW_NUMBER() AS metamodel_row_number
// FROM [remainder of regular query])
// WHERE metamodel_row_number BETWEEN [firstRow] and [maxRows];
final Query innerQuery = query.clone();
innerQuery.setFirstRow(null);
innerQuery.setMaxRows(null);
final Query outerQuery = new Query();
final FromItem subQuerySelectItem = new FromItem(innerQuery).setAlias("metamodel_subquery");
outerQuery.from(subQuerySelectItem);
final List<SelectItem> innerSelectItems = innerQuery.getSelectClause().getItems();
for (SelectItem selectItem : innerSelectItems) {
outerQuery.select(new SelectItem(selectItem, subQuerySelectItem));
}
final String rewrittenOrderByClause = rewriteOrderByClause(innerQuery, innerQuery.getOrderByClause());
final String rowOver = "ROW_NUMBER() " + "OVER(" + rewrittenOrderByClause + ")";
innerQuery.select(new SelectItem(rowOver, "metamodel_row_number"));
innerQuery.getOrderByClause().removeItems();
final String baseQueryString = rewriteQuery(outerQuery);
if (maxRows == null) {
return baseQueryString + " WHERE metamodel_row_number > " + (firstRow - 1);
}
return baseQueryString + " WHERE metamodel_row_number BETWEEN " + firstRow + " AND "
+ (firstRow - 1 + maxRows);
}
}