[#7305] [#7306] Basic support for procedural local variables

This commit is contained in:
lukaseder 2019-01-03 14:49:16 +01:00
parent afbeef3b07
commit 81c84f27ba
2 changed files with 50 additions and 44 deletions

View File

@ -37,50 +37,52 @@
*/
package org.jooq.impl;
import static org.jooq.impl.Keywords.K_SET;
// ...
import org.jooq.Clause;
import org.jooq.Context;
import org.jooq.Field;
/**
* @author Lukas Eder
*/
final class Assignment<T> extends AbstractStatement {
/**
* Generated UID
*/
private static final long serialVersionUID = 1567637930559064772L;
final AssignmentTarget<T> target;
final Field<T> value;
Assignment(AssignmentTarget<T> target, Field<T> value) {
this.target = target;
this.value = value;
}
@Override
public final void accept(Context<?> ctx) {
switch (ctx.family()) {
case MARIADB:
case MYSQL:
case SQLSERVER:
ctx.visit(K_SET).sql(' ').visit(target).sql(" = ").visit(value);
break;
case POSTGRES:
case ORACLE:
default:
ctx.visit(target).sql(" := ").visit(value);
break;
}
}
@Override
public final Clause[] clauses(Context<?> ctx) {
return null;
}
}
/* [/pro] */

View File

@ -208,10 +208,14 @@ final class BlockImpl extends AbstractQuery implements Block {
accept2(ctx, statements);
}
private static final boolean declaration(Statement statement) {
return statement instanceof Declaration
|| statement instanceof Assignment && ((Assignment<?>) statement).target instanceof Declaration;
}
private static final void accept2(Context<?> ctx, List<Statement> statements) {
ctx.visit(K_BEGIN);