@Override public SqlStatement createCountStatement(QueryContext context, Object p) { Params params = createParameters(context, p); DynamicSql.ExecutionSqls sqls = sql.resolveExecutionSqls(context, params); createSqlForCount(sqls); DefaultSqlStatementBuilder statement = new DefaultSqlStatementBuilder(context, sqls.sqlForCount, true); sqls.sqlForCount.buildStatement(context, statement, params); return statement.build(); }
@Override protected void prepareBatchStatement_(SqlContext context, PreparedBatchSqlStatementBuilder stm,Object[] params) throws IOException { stm.append(JDBC.PARAMETER_PLACEHOLDER_CHAR); stm.addBatchParameter(new JdbcSqlParameter(stm.increaseAndGetParameterIndex())); }
private void createSqlWithoutOrderBy(DynamicSql.ExecutionSqls sqls) { if(null == sqls.sqlWithoutOrderByRaw) { if(lang.isSimple()) { sqls.sqlWithoutOrderByRaw = createSqlWithoutOrderBySimple(sqls, sqls.raw); sqls.sqlWithoutOrderByResolved = createSqlWithoutOrderBySimple(sqls, sqls.sql); }else{ sqls.sqlWithoutOrderByRaw = createSqlWithoutOrderByComplex(sqls, sqls.raw); sqls.sqlWithoutOrderByResolved = createSqlWithoutOrderByComplex(sqls, sqls.sql); } } }
@Override public SqlCommand prepare(MetadataContext context) { if(prepared) { return this; } try { this.clauses = info.getLang().parseClauses(context,prepareSql(context, info.getContent()),this).toArray(new SqlClause[0]); } catch (Exception e) { throw new SqlConfigException("Error parsing sql (" + desc() + "), source : " + info.getSource(),e); } prepared = true; return this; }
void process() { if(sql.isDelete() || sql.isSelect() || sql.isUpdate()) { sql.traverse(node -> { if(node instanceof SqlQuery) { processQuery((SqlQuery)node); } return true; }); } }
@Override public SqlStatement createUpdateStatement(SqlContext context, Object p) { Params params = createParameters(context, p); DynamicSql.ExecutionSqls sqls = sql.resolveExecutionSqls(context, params); return doCreateStatement(context, sqls, params, false); }
protected SqlStatement doCreateStatement(SqlContext context, Sql sql, Params params, boolean query){ DefaultSqlStatementBuilder statement = new DefaultSqlStatementBuilder(context, sql, query); sql.buildStatement(context, statement, params); return statement.build(); }
public DynamicSql(DynamicSqlLanguage lang, MetadataContext context, Sql sql, SqlLanguage.Options options) { this.lang = lang; this.context = context; this.sql = sql; this.options = options; if(!sql.isDynamic()) { sqls = lang.parseExecutionSqls(context, sql.toSql(), options); }else{ sqls = null; } }
@Override protected void prepareBatchStatement_(SqlContext context, PreparedBatchSqlStatementBuilder stm,Object[] params) throws IOException { stm.append(JDBC.PARAMETER_PLACEHOLDER_CHAR); stm.addBatchParameter(new ExpressionSqlParameter(expression)); }
protected PreparedBatchSqlStatement prepareBatchSqlStatement(SqlContext context, DynamicSql.ExecutionSqls sqls,Object[] params) { if(null == preparedBatchStatement) { synchronized (this) { if(null == preparedBatchStatement){ DefaultPreparedBatchSqlStatementBuilder builder = new DefaultPreparedBatchSqlStatementBuilder(sqls.sql); sqls.sql.prepareBatchSqlStatement(context, builder,params); preparedBatchStatement = builder.build(); } } } return preparedBatchStatement; }
@Override public SqlClause parseClause(MetadataContext context, String sql, Options options) throws SqlClauseException { List<Sql> sqls = doParseDynaSql(context, sql); return new DynamicSqlClause(this, new DynamicSql(this, context, sqls.get(0), options)); }
protected void mustPrepare(SqlContext context) { if(!prepared) { prepare(context.getOrmContext()); } }
@Override public String getSqlWithoutOrderBy(Db db) { return mergeMultipleSelect(sqls.sqlWithoutOrderByRaw).toSql(); }
@Override public SqlStatement createCountStatement(QueryContext context, Object params) { if(null == countSql) { countSql = "select count(*) from (" + sql + ") t"; } return doCreateStatement(context, countSql, params); }
/** * Returns true if the value is not null. */ default boolean isPresent() { return null != get(); }
@Override public SqlInfo build() { return new SqlInfo(source, desc, dbType, lang, content, dataSourceName); } }