@Override public final synchronized CompiledStatement compile(CompileContext compileContext) { if (compiledArgumentResolver == null) { SqlBuilder builder = buildSql(compileContext, true, false); compiledArgumentResolver = new CompiledArgumentResolver(builder); } return compiledArgumentResolver.resolveToCompiledStatement(); }
private String resolveSqlString(String cacheKey, boolean largeArgMode) { if (hasCollectionArgs()) { if (!largeArgMode) { String cachedResult = compiledSqlCache.get(cacheKey); SqlUtils.addInlineCollectionToSqlString(result, compileContext.getArgumentResolver(), values); } else { appendCollectionVariableStringForSize(result, values.size());
private Object[] resolveSqlArguments(String cacheKey, int totalArgSize, boolean largeArgMode) { if (hasCollectionArgs()) { Object[] cachedResult = argArrayCache.get(cacheKey); if (cachedResult == null) { int size = largeArgMode ? calculateArgsSizeWithoutCollectionArgs() : totalArgSize; if (compiledArgs == null || compiledArgs.length != size) { cachedResult = new Object[size]; } else { cachedResult = compiledArgs; } argArrayCache.put(cacheKey, cachedResult); } compiledArgs = cachedResult; populateCompiledArgs(largeArgMode); } else { if (compiledArgs == null) { compiledArgs = sqlArgs.toArray(new Object[sqlArgs.size()]); } } return applyArgumentResolver(compiledArgs); }
public CompiledStatement resolveToCompiledStatement() { String cacheKey = hasCollectionArgs() ? getCacheKey() : null; int totalArgSize = calculateArgsSizeWithCollectionArgs(); boolean largeArgMode = totalArgSize > SqlStatement.MAX_VARIABLE_NUMBER; return new CompiledStatement(resolveSqlString(cacheKey, largeArgMode), resolveSqlArguments(cacheKey, totalArgSize, largeArgMode), needsValidation); }
private int calculateArgsSizeWithCollectionArgs() { int startSize = sqlArgs.size(); if (hasCollectionArgs()) { for (Collection<?> collection : collectionArgs) { startSize += (collection.size() - 1); } } return startSize; }
public CompiledArgumentResolver(SqlBuilder builder) { this.compiledSql = builder.getSqlString(); this.sqlArgs = builder.getBoundArguments(); this.compileContext = builder.compileContext; this.needsValidation = builder.needsValidation(); if (compiledSql.contains(SqlStatement.REPLACEABLE_ARRAY_PARAMETER)) { collectionArgs = new ArrayList<>(); findCollectionArgs(); compiledSqlCache = new SimpleLruCache<>(CACHE_SIZE); argArrayCache = new SimpleLruCache<>(CACHE_SIZE); } }
public CompiledStatement resolveToCompiledStatement() { String cacheKey = hasCollectionArgs() ? getCacheKey() : null; int totalArgSize = calculateArgsSizeWithCollectionArgs(); boolean largeArgMode = totalArgSize > SqlStatement.MAX_VARIABLE_NUMBER; return new CompiledStatement(resolveSqlString(cacheKey, largeArgMode), resolveSqlArguments(cacheKey, totalArgSize, largeArgMode), needsValidation); }
private int calculateArgsSizeWithoutCollectionArgs() { return sqlArgs.size() - (hasCollectionArgs() ? collectionArgs.size() : 0); }
public CompiledArgumentResolver(SqlBuilder builder) { this.compiledSql = builder.getSqlString(); this.sqlArgs = builder.getBoundArguments(); this.compileContext = builder.compileContext; this.needsValidation = builder.needsValidation(); if (compiledSql.contains(SqlStatement.REPLACEABLE_ARRAY_PARAMETER)) { collectionArgs = new ArrayList<>(); findCollectionArgs(); compiledSqlCache = new SimpleLruCache<>(CACHE_SIZE); argArrayCache = new SimpleLruCache<>(CACHE_SIZE); } }
private Object[] resolveSqlArguments(String cacheKey, int totalArgSize, boolean largeArgMode) { if (hasCollectionArgs()) { Object[] cachedResult = argArrayCache.get(cacheKey); if (cachedResult == null) { int size = largeArgMode ? calculateArgsSizeWithoutCollectionArgs() : totalArgSize; if (compiledArgs == null || compiledArgs.length != size) { cachedResult = new Object[size]; } else { cachedResult = compiledArgs; } argArrayCache.put(cacheKey, cachedResult); } compiledArgs = cachedResult; populateCompiledArgs(largeArgMode); } else { if (compiledArgs == null) { compiledArgs = sqlArgs.toArray(new Object[sqlArgs.size()]); } } return applyArgumentResolver(compiledArgs); }
public final String sqlForValidation(CompileContext compileContext) { SqlBuilder builder = buildSql(compileContext, true, true); return new CompiledArgumentResolver(builder).resolveToCompiledStatement().sql; }
private String resolveSqlString(String cacheKey, boolean largeArgMode) { if (hasCollectionArgs()) { if (!largeArgMode) { String cachedResult = compiledSqlCache.get(cacheKey); SqlUtils.addInlineCollectionToSqlString(result, compileContext.getArgumentResolver(), values); } else { appendCollectionVariableStringForSize(result, values.size());
private String getCacheKey() { StringBuilder cacheKey = new StringBuilder(); if (hasCollectionArgs()) { for (Collection<?> collection : collectionArgs) { cacheKey.append(collection.size()).append(":"); } } return cacheKey.toString(); }
public final String sqlForValidation(CompileContext compileContext) { SqlBuilder builder = buildSql(compileContext, true, true); return new CompiledArgumentResolver(builder).resolveToCompiledStatement().sql; }
private int calculateArgsSizeWithCollectionArgs() { int startSize = sqlArgs.size(); if (hasCollectionArgs()) { for (Collection<?> collection : collectionArgs) { startSize += (collection.size() - 1); } } return startSize; }
@Override public final synchronized CompiledStatement compile(CompileContext compileContext) { if (compiledArgumentResolver == null) { SqlBuilder builder = buildSql(compileContext, true, false); compiledArgumentResolver = new CompiledArgumentResolver(builder); } return compiledArgumentResolver.resolveToCompiledStatement(); }
private String getCacheKey() { StringBuilder cacheKey = new StringBuilder(); if (hasCollectionArgs()) { for (Collection<?> collection : collectionArgs) { cacheKey.append(collection.size()).append(":"); } } return cacheKey.toString(); }
private int calculateArgsSizeWithoutCollectionArgs() { return sqlArgs.size() - (hasCollectionArgs() ? collectionArgs.size() : 0); }