@Override public SqlLimitResponse limit(SqlLimitRequest request) { StringBuilder sb = new StringBuilder(512); sb.append("select "); if (request.isDistinct()) { sb.append("distinct "); } sb.append(request.getDbSql()); int maxRows = request.getMaxRows(); if (maxRows > 0) { sb.append(" ").append(NEW_LINE).append("FETCH FIRST ").append(maxRows).append(" ROWS ONLY"); } String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery()); return new SqlLimitResponse(sql, false); } }
/** * Create a query plan based on a OrmQueryRequest. */ public CQueryPlan(OrmQueryRequest<?> request, SqlLimitResponse sqlRes, SqlTree sqlTree, boolean rawSql, String logWhereSql, String luceneQueryDescription) { this.hash = request.getQueryPlanHash(); this.autofetchTuned = request.getQuery().isAutofetchTuned(); if (sqlRes != null){ this.sql = sqlRes.getSql(); this.rowNumberIncluded = sqlRes.isIncludesRowNumberColumn(); } else { this.sql = luceneQueryDescription; this.rowNumberIncluded = false; } this.sqlTree = sqlTree; this.rawSql = rawSql; this.logWhereSql = logWhereSql; this.encryptedProps = sqlTree.getEncryptedProps(); }
private <T> String buildDeleteSql(OrmQueryRequest<T> request, String rootTableAlias, CQueryPredicates predicates, SqlTree sqlTree) { if (!sqlTree.isIncludeJoins()) { // simple - delete from table ... return aliasStrip(buildSql("delete", request, predicates, sqlTree).getSql()); } // wrap as - delete from table where id in (select id ...) String sql = buildSql(null, request, predicates, sqlTree).getSql(); sql = request.getBeanDescriptor().getDeleteByIdInSql() + "in (" + sql + ")"; String alias = (rootTableAlias == null) ? "t0" : rootTableAlias; sql = aliasReplace(sql, alias); return sql; }
private <T> String buildUpdateSql(OrmQueryRequest<T> request, String rootTableAlias, CQueryPredicates predicates, SqlTree sqlTree) { String updateClause = "update " + request.getBeanDescriptor().getBaseTable() + " set " + predicates.getDbUpdateClause(); if (!sqlTree.isIncludeJoins()) { // simple - update table set ... where ... return aliasStrip(buildSqlUpdate(updateClause, request, predicates, sqlTree).getSql()); } // wrap as - update table set ... where id in (select id ...) String sql = buildSqlUpdate(null, request, predicates, sqlTree).getSql(); sql = updateClause + " " + request.getBeanDescriptor().getWhereIdInSql() + "in (" + sql + ")"; String alias = (rootTableAlias == null) ? "t0" : rootTableAlias; sql = aliasReplace(sql, alias); return sql; }
/** * Create a query plan based on a OrmQueryRequest. */ public CQueryPlan(OrmQueryRequest<?> request, SqlLimitResponse sqlRes, SqlTree sqlTree, boolean rawSql, String logWhereSql, String luceneQueryDescription) { this.hash = request.getQueryPlanHash(); this.autofetchTuned = request.getQuery().isAutofetchTuned(); if (sqlRes != null){ this.sql = sqlRes.getSql(); this.rowNumberIncluded = sqlRes.isIncludesRowNumberColumn(); } else { this.sql = luceneQueryDescription; this.rowNumberIncluded = false; } this.sqlTree = sqlTree; this.rawSql = rawSql; this.logWhereSql = logWhereSql; this.encryptedProps = sqlTree.getEncryptedProps(); }
public SqlLimitResponse limit(SqlLimitRequest request) { String dbSql = request.getDbSql(); StringBuilder sb = new StringBuilder(50 + dbSql.length()); int firstRow = request.getFirstRow(); int maxRows = request.getMaxRows(); if (firstRow < 1) { // just use top n sb.append("select "); if (request.isDistinct()) { sb.append("distinct "); } sb.append("top ").append(maxRows).append(" "); sb.append(dbSql); return new SqlLimitResponse(sb.toString(), false); } sb.append("select "); if (request.isDistinct()) { sb.append("distinct "); } sb.append(dbSql); if (firstRow > 0) { sb.append(" ").append("offset"); sb.append(" ").append(firstRow).append(" rows"); } if (maxRows > 0) { sb.append(" fetch next ").append(maxRows).append(" rows only"); } String sql = sb.toString(); return new SqlLimitResponse(sql, false); }
/** * Create a query plan based on a OrmQueryRequest. */ CQueryPlan(OrmQueryRequest<?> request, SqlLimitResponse sqlRes, SqlTree sqlTree, boolean rawSql, String logWhereSql) { this.server = request.getServer(); this.dataTimeZone = server.getDataTimeZone(); this.beanType = request.getBeanDescriptor().getBeanType(); this.planKey = request.getQueryPlanKey(); this.autoTuned = request.getQuery().isAutoTuned(); this.asOfTableCount = request.getQuery().getAsOfTableCount(); this.sql = sqlRes.getSql(); this.rowNumberIncluded = sqlRes.isIncludesRowNumberColumn(); this.sqlTree = sqlTree; this.rawSql = rawSql; this.logWhereSql = logWhereSql; this.encryptedProps = sqlTree.getEncryptedProps(); this.stats = new CQueryPlanStats(this, server.isCollectQueryOrigins()); }
public SqlLimitResponse limit(SqlLimitRequest request) { String dbSql = request.getDbSql(); StringBuilder sb = new StringBuilder(50 + dbSql.length()); sb.append("select "); if (request.isDistinct()) { sb.append("distinct "); } sb.append(dbSql); int firstRow = request.getFirstRow(); int maxRows = request.getMaxRows(); if (maxRows > 0 || firstRow > 0) { sb.append(" ").append(LIMIT).append(" ").append(maxRows); if (firstRow > 0) { sb.append(" ").append(OFFSET).append(" "); sb.append(firstRow); } } String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery()); return new SqlLimitResponse(sql, false); }
CQueryFetchSingleAttribute buildFetchAttributeQuery(OrmQueryRequest<?> request) { SpiQuery<?> query = request.getQuery(); query.setSingleAttribute(); CQueryPredicates predicates = new CQueryPredicates(binder, request); CQueryPlan queryPlan = request.getQueryPlan(); if (queryPlan != null) { predicates.prepare(false); return new CQueryFetchSingleAttribute(request, predicates, queryPlan); } // use RawSql or generated Sql predicates.prepare(true); SqlTree sqlTree = createSqlTree(request, predicates, getHistorySupport(query), getDraftSupport(query)); SqlLimitResponse s = buildSql(null, request, predicates, sqlTree); queryPlan = new CQueryPlan(request, s.getSql(), sqlTree, false, s.isIncludesRowNumberColumn(), predicates.getLogWhereSql()); request.putQueryPlan(queryPlan); return new CQueryFetchSingleAttribute(request, predicates, queryPlan); }
public SqlLimitResponse limit(SqlLimitRequest request) { StringBuilder sb = new StringBuilder(512); sb.append("select "); if (request.isDistinct()){ sb.append("distinct "); } sb.append(request.getDbSql()); int firstRow = request.getFirstRow(); int maxRows = request.getMaxRows(); if (maxRows > 0) { maxRows = maxRows + 1; } sb.append(" ").append(NEW_LINE).append(LIMIT).append(" "); if (maxRows > 0) { sb.append(maxRows); } if (firstRow > 0) { sb.append(" ").append(OFFSET).append(" "); sb.append(firstRow); } String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery()); return new SqlLimitResponse(sql, false); }
/** * Build the row count query. */ public <T> CQueryFetchIds buildFetchIdsQuery(OrmQueryRequest<T> request) { SpiQuery<T> query = request.getQuery(); query.setSelectId(); CQueryPredicates predicates = new CQueryPredicates(binder, request); CQueryPlan queryPlan = request.getQueryPlan(); if (queryPlan != null) { // skip building the SqlTree and Sql string predicates.prepare(false); String sql = queryPlan.getSql(); return new CQueryFetchIds(request, predicates, sql, backgroundExecutor); } // use RawSql or generated Sql predicates.prepare(true); SqlTree sqlTree = createSqlTree(request, predicates); SqlLimitResponse s = buildSql(null, request, predicates, sqlTree); String sql = s.getSql(); // cache the query plan queryPlan = new CQueryPlan(sql, sqlTree, false, s.isIncludesRowNumberColumn(), predicates.getLogWhereSql()); request.putQueryPlan(queryPlan); return new CQueryFetchIds(request, predicates, sql, backgroundExecutor); }
public SqlLimitResponse limit(SqlLimitRequest request) { StringBuilder sb = new StringBuilder(512); sb.append("select "); if (request.isDistinct()) { sb.append("distinct "); } sb.append(request.getDbSql()); int firstRow = request.getFirstRow(); int maxRows = request.getMaxRows(); if (maxRows > 0) { maxRows = maxRows + 1; } sb.append(" ").append(NEW_LINE).append(LIMIT).append(" "); if (maxRows > 0) { sb.append(maxRows); } if (firstRow > 0) { sb.append(" ").append(OFFSET).append(" "); sb.append(firstRow); } String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery()); return new SqlLimitResponse(sql, false); }
/** * Build the row count query. */ public <T> CQueryFetchIds buildFetchIdsQuery(OrmQueryRequest<T> request) { SpiQuery<T> query = request.getQuery(); query.setSelectId(); CQueryPredicates predicates = new CQueryPredicates(binder, request); CQueryPlan queryPlan = request.getQueryPlan(); if (queryPlan != null) { // skip building the SqlTree and Sql string predicates.prepare(false); String sql = queryPlan.getSql(); return new CQueryFetchIds(request, predicates, sql, backgroundExecutor); } // use RawSql or generated Sql predicates.prepare(true); SqlTree sqlTree = createSqlTree(request, predicates); SqlLimitResponse s = buildSql(null, request, predicates, sqlTree); String sql = s.getSql(); // cache the query plan queryPlan = new CQueryPlan(sql, sqlTree, false, s.isIncludesRowNumberColumn(), predicates.getLogWhereSql()); request.putQueryPlan(queryPlan); return new CQueryFetchIds(request, predicates, sql, backgroundExecutor); }
public SqlLimitResponse limit(SqlLimitRequest request) { String dbSql = request.getDbSql(); StringBuilder sb = new StringBuilder(60 + dbSql.length()); int firstRow = request.getFirstRow(); int maxRows = request.getMaxRows(); /* * SELECT TOP xx START AT xx ... FROM ... */ sb.append("select "); if (request.isDistinct()) { sb.append("distinct "); } if (maxRows > 0) { sb.append("top ").append(maxRows).append(" "); } if (firstRow > 0) { sb.append("start at ").append(firstRow + 1).append(" "); } sb.append(dbSql); String sql = request.getDbPlatform().completeSql(sb.toString(), request.getOrmQuery()); return new SqlLimitResponse(sql, false); }
includeRowNumColumn = limitSql.isIncludesRowNumberColumn(); sql = limitSql.getSql(); } else {
return new SqlLimitResponse(sql, true);
includeRowNumColumn = limitSql.isIncludesRowNumberColumn(); sql = limitSql.getSql(); } else {
return new SqlLimitResponse(sql, true);
String sql = s.getSql(); if (hasMany) { sql = "select count(*) from ( " + sql + ")"; queryPlan = new CQueryPlan(sql, sqlTree, false, s.isIncludesRowNumberColumn(), predicates.getLogWhereSql()); request.putQueryPlan(queryPlan);
return new SqlLimitResponse(sql, true);