public SelectItem getSelectItem(Column column) { if (column != null) { for (SelectItem item : getItems()) { if (column.equals(item.getColumn())) { return item; } } } return null; }
protected String rewriteSelectClause(Query query, SelectClause selectClause) { StringBuilder sb = new StringBuilder(); if (selectClause.getItemCount() > 0) { sb.append(AbstractQueryClause.PREFIX_SELECT); if (selectClause.isDistinct()) { sb.append("DISTINCT "); } List<SelectItem> items = selectClause.getItems(); for (int i = 0; i < items.size(); i++) { SelectItem item = items.get(i); if (i != 0) { sb.append(AbstractQueryClause.DELIM_COMMA); } final ScalarFunction scalarFunction = item.getScalarFunction(); if (scalarFunction != null && !isScalarFunctionSupported(scalarFunction)) { // replace with a SelectItem without the function - the // function will be applied in post-processing. item = item.replaceFunction(null); } sb.append(rewriteSelectItem(query, item)); } } return sb.toString(); }
public Query selectDistinct() { _selectClause.setDistinct(true); return this; }
/** * Determines if all the select items are 'simple' meaning that they just represent scans of values in columns. * * @param clause * @return */ private boolean isSimpleSelect(SelectClause clause) { if (clause.isDistinct()) { return false; } for (SelectItem item : clause.getItems()) { if (item.getAggregateFunction() != null || item.getExpression() != null) { return false; } } return true; }
@Override public DataSet executeQuery(final Query query) { final List<SelectItem> selectItems = query.getSelectClause().getItems(); final List<FromItem> fromItems = query.getFromClause().getItems(); final List<FilterItem> whereItems = query.getWhereClause().getItems(); final SelectItem selectItem = query.getSelectClause().getItem(0); if (SelectItem.isCountAllItem(selectItem)) { final boolean functionApproximationAllowed = selectItem.isFunctionApproximationAllowed(); if (query.getSelectClause().isDistinct()) { dataSet = MetaModelHelper.getSelection(selectItems, dataSet); dataSet = MetaModelHelper.getDistinct(dataSet);
@Override public Query clone() { final Query q = new Query(); q.setMaxRows(_maxRows); q.setFirstRow(_firstRow); q.getSelectClause().setDistinct(_selectClause.isDistinct()); for (FromItem item : _fromClause.getItems()) { q.from(item.clone()); } for (SelectItem item : _selectClause.getItems()) { q.select(item.clone(q)); } for (FilterItem item : _whereClause.getItems()) { q.where(item.clone()); } for (GroupByItem item : _groupByClause.getItems()) { q.groupBy(item.clone()); } for (FilterItem item : _havingClause.getItems()) { q.having(item.clone()); } for (OrderByItem item : _orderByClause.getItems()) { q.orderBy(item.clone()); } return q; } }
countQuery.setMaxRows(null); countQuery.setFirstRow(null); countQuery.getSelectClause().removeItems(); countQuery.getOrderByClause().removeItems(); countQuery.selectCount(); countQuery.getSelectClause().getItem(0).setFunctionApproximationAllowed(true);
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(); }
@Override protected String rewriteSelectClause(Query query, SelectClause selectClause) { String result = super.rewriteSelectClause(query, selectClause); Integer maxRows = query.getMaxRows(); if (maxRows != null) { if (query.getSelectClause().isDistinct()) { result = "SELECT DISTINCT TOP " + maxRows + " " + result.substring("SELECT DISTINCT ".length()); } else { result = "SELECT TOP " + maxRows + " " + result.substring("SELECT ".length()); } } return result; }
public Query() { _selectClause = new SelectClause(this); _fromClause = new FromClause(this); _whereClause = new FilterClause(this, AbstractQueryClause.PREFIX_WHERE); _groupByClause = new GroupByClause(this); _havingClause = new FilterClause(this, AbstractQueryClause.PREFIX_HAVING); _orderByClause = new OrderByClause(this); }
@Override public DataSet executeQuery(final Query query) { final List<SelectItem> selectItems = query.getSelectClause().getItems(); final List<FromItem> fromItems = query.getFromClause().getItems(); final List<FilterItem> whereItems = query.getWhereClause().getItems(); final SelectItem selectItem = query.getSelectClause().getItem(0); if (SelectItem.isCountAllItem(selectItem)) { final boolean functionApproximationAllowed = selectItem.isFunctionApproximationAllowed(); if (query.getSelectClause().isDistinct()) { dataSet = MetaModelHelper.getSelection(selectItems, dataSet); dataSet = MetaModelHelper.getDistinct(dataSet);
@Override public Query clone() { final Query q = new Query(); q.setMaxRows(_maxRows); q.setFirstRow(_firstRow); q.getSelectClause().setDistinct(_selectClause.isDistinct()); for (FromItem item : _fromClause.getItems()) { q.from(item.clone()); } for (SelectItem item : _selectClause.getItems()) { q.select(item.clone(q)); } for (FilterItem item : _whereClause.getItems()) { q.where(item.clone()); } for (GroupByItem item : _groupByClause.getItems()) { q.groupBy(item.clone()); } for (FilterItem item : _havingClause.getItems()) { q.having(item.clone()); } for (OrderByItem item : _orderByClause.getItems()) { q.orderBy(item.clone()); } return q; } }
/** * Determines if all the select items are 'simple' meaning that they just represent scans of values in columns. * * @param clause * @return */ private boolean isSimpleSelect(SelectClause clause) { if (clause.isDistinct()) { return false; } for (SelectItem item : clause.getItems()) { if (item.getAggregateFunction() != null || item.getExpression() != null) { return false; } } return true; }
countQuery.setMaxRows(null); countQuery.setFirstRow(null); countQuery.getSelectClause().removeItems(); countQuery.getOrderByClause().removeItems(); countQuery.selectCount(); countQuery.getSelectClause().getItem(0).setFunctionApproximationAllowed(true);
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(); }
@Override protected String rewriteSelectClause(Query query, SelectClause selectClause) { String result = super.rewriteSelectClause(query, selectClause); Integer maxRows = query.getMaxRows(); if (maxRows != null) { if (query.getSelectClause().isDistinct()) { result = "SELECT DISTINCT TOP " + maxRows + " " + result.substring("SELECT DISTINCT ".length()); } else { result = "SELECT TOP " + maxRows + " " + result.substring("SELECT ".length()); } } return result; }
public Query() { _selectClause = new SelectClause(this); _fromClause = new FromClause(this); _whereClause = new FilterClause(this, AbstractQueryClause.PREFIX_WHERE); _groupByClause = new GroupByClause(this); _havingClause = new FilterClause(this, AbstractQueryClause.PREFIX_HAVING); _orderByClause = new OrderByClause(this); }
public SelectItem getSelectItem(Column column) { if (column != null) { for (SelectItem item : getItems()) { if (column.equals(item.getColumn())) { return item; } } } return null; }
protected String rewriteSelectClause(Query query, SelectClause selectClause) { StringBuilder sb = new StringBuilder(); if (selectClause.getItemCount() > 0) { sb.append(AbstractQueryClause.PREFIX_SELECT); if (selectClause.isDistinct()) { sb.append("DISTINCT "); } List<SelectItem> items = selectClause.getItems(); for (int i = 0; i < items.size(); i++) { SelectItem item = items.get(i); if (i != 0) { sb.append(AbstractQueryClause.DELIM_COMMA); } final ScalarFunction scalarFunction = item.getScalarFunction(); if (scalarFunction != null && !isScalarFunctionSupported(scalarFunction)) { // replace with a SelectItem without the function - the // function will be applied in post-processing. item = item.replaceFunction(null); } sb.append(rewriteSelectItem(query, item)); } } return sb.toString(); }
public Query selectDistinct() { _selectClause.setDistinct(true); return this; }