[#2694] Unify RenderContext and BindContext traversal

This commit is contained in:
Lukas Eder 2014-06-06 12:55:41 +02:00
parent 451c02d819
commit 65999dc6f6
4 changed files with 11 additions and 128 deletions

View File

@ -1723,7 +1723,7 @@ xxxxxx xxxxx xxxxxxxxxx xxxxxxx xxxxxxxxxxxxxxxxx
xxxxx
xxxxxx xxxx xxxxxxxxxxxxxxxxxxxxx x
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxx x xxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxxxxxxxxx
xxxxxxxxxx xxxxx

View File

@ -45,12 +45,10 @@ import static org.jooq.conf.ParamType.INLINED;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.val;
import org.jooq.BindContext;
import org.jooq.Clause;
import org.jooq.Context;
import org.jooq.Field;
import org.jooq.Param;
import org.jooq.RenderContext;
import org.jooq.RenderContext.CastMode;
import org.jooq.conf.ParamType;
import org.jooq.exception.DataAccessException;
@ -72,7 +70,7 @@ class Limit extends AbstractQueryPart {
private boolean rendersParams;
@Override
public final void toSQL(RenderContext context) {
public final void accept(Context<?> context) {
ParamType paramType = context.paramType();
CastMode castMode = context.castMode();
@ -227,121 +225,6 @@ class Limit extends AbstractQueryPart {
}
}
@Override
public final void bind(BindContext context) {
switch (context.configuration().dialect()) {
// OFFSET .. LIMIT support provided by the following dialects
// ----------------------------------------------------------
/* [pro] xx
xxxx xxxxxxxxxx
xxxx xxxxxxxxxxxxxx
xx [/pro] */
case DERBY: {
context.visit(offsetOrZero);
context.visit(numberOfRows);
break;
}
// LIMIT .. OFFSET support provided by the following dialects
// ----------------------------------------------------------
case MARIADB:
case MYSQL:
case HSQLDB:
case H2:
case POSTGRES:
case SQLITE: {
context.visit(numberOfRows);
context.visit(offsetOrZero);
break;
}
// LIMIT [offset], [limit] supported by CUBRID
// -------------------------------------------
case CUBRID: {
context.visit(offsetOrZero);
context.visit(numberOfRows);
break;
}
// No bind variables in the FIRST .. SKIP clause
// ---------------------------------------------
case FIREBIRD: {
context.visit(getLowerRownum());
context.visit(getUpperRownum());
break;
}
/* [pro] xx
xx xxxxx xxxxxxxx xxxxx xxxxxxx xxxx xxxxxxxxx xx xxx
xxxx xxxx
xxxx xxxxxxx x
xxxxxx
x
xx xx xxxx xxxxxxxxx xx xxx xxx xx xxxxx xx xxxxxx
xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx xxxxxxx x
xx xxx xx xxxxx xx xxxxxxx xxxxxxx xxxx xxxxxxxxx
xx xxxxxxxxxxxxxxxx x
x
xx xxxx xxxxxxxxx xxxxxxxx xx xxxxxx xxxx xxxxxxx
xxxx x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
x
xxxxxx
x
xx xxxxx xxxxxxxx xxxxx xxxxx xxxx xxxxxxxxx xx xxxxx xxx xxxxxxx
xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx xxxxxxx
xxxx xxxxxxxxxxx
xxxx xxxx
xxxx xxxxxx
xxxx xxxxxxx
xxxx xxxxxxxxxxxxxx x
xx xxx xxxxxxx xxxxxxx xxxx xxxxxxxxx
xx xxxxxxx xx xxxx xx xxxxxxxxxxxxxxx x
x
xx xxxx xxxxxxxxx xxxxxxxx xx xxxxxx xxxx xxxxxxx
xxxx x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
x
xxxxxx
x
xx xxxxxx xxxxx xx xxxxx xx xxx xxxxxxx xxxxxx xxx xxxxxx xxxxx
xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxx xxxxxxx
xxxx xxxxxxxxxx
xxxx xxxxxxxxxx
xxxx xxxxxxxxxx x
xx xxxxxxx xxxx xxx xxxxxx xxxxxxxxx xxxxxxxxxxxx xxx xxxxx
xx xxxxx xx xxxxx xxxxxx xxx xxxxx xxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxx
x
xx [/pro] */
// [#2057] Bind the same values as rendered in toSQL() by default
default: {
context.visit(numberOfRows);
context.visit(offsetOrZero);
break;
}
}
}
@Override
public final Clause[] clauses(Context<?> ctx) {
return null;

View File

@ -69,6 +69,7 @@ import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
// ...
import static org.jooq.SortOrder.ASC;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.name;
@ -626,7 +627,7 @@ class SelectQueryImpl<R extends Record> extends AbstractSelect<R> implements Sel
context.visit(getSelect1());
}
context.declareFields(false)
.end(SELECT_SELECT);
@ -793,7 +794,7 @@ class SelectQueryImpl<R extends Record> extends AbstractSelect<R> implements Sel
/* [pro] xx
xx xxxxxxx xxx xxxxxx xxxx xxxxxxxx xx xxxxx xx xxxxxxx xxxxx xxxx
xx xxxxxx xx xxxxx
xxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x
xxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxx xx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x
xxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx xxxx
xxxxxx xx

View File

@ -59,6 +59,7 @@ import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
import static org.jooq.conf.ParamType.INLINED;
import static org.jooq.conf.ParamType.NAMED;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.using;
@ -106,13 +107,12 @@ class Val<T> extends AbstractParam<T> {
@Override
public void accept(Context<?> ctx) {
if (ctx instanceof RenderContext)
toSQL((RenderContext) ctx);
toSQL0((RenderContext) ctx);
else
bind((BindContext) ctx);
bind0((BindContext) ctx);
}
@Override
public final void toSQL(RenderContext context) {
final void toSQL0(RenderContext context) {
// Casting can be enforced or prevented
switch (context.castMode()) {
@ -610,11 +610,10 @@ class Val<T> extends AbstractParam<T> {
return val.toString().replace("'", "''");
}
@Override
public final void bind(BindContext context) {
final void bind0(BindContext context) {
// [#1302] Bind value only if it was not explicitly forced to be inlined
if (!isInline()) {
if (!isInline() && context.paramType() != INLINED) {
context.bindValue(value, this);
}
}