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(); }
/** * 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(); }
/** * 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()); }
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); }
/** * 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); }
/** * 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); }
includeRowNumColumn = limitSql.isIncludesRowNumberColumn(); sql = limitSql.getSql(); } else {
includeRowNumColumn = limitSql.isIncludesRowNumberColumn(); sql = limitSql.getSql(); } else {
String sql = s.getSql(); if (hasMany) { sql = "select count(*) from ( " + sql + ")";
String sql = s.getSql(); if (hasMany) { sql = "select count(*) from ( " + sql + ")";
String sql = s.getSql(); if (hasMany || query.isRawSql()) { sql = "select count(*) from ( " + sql + ")";