This commit is contained in:
Lukas Eder 2021-09-29 15:46:25 +02:00
parent d59c72fa07
commit d5e8a36e31

View File

@ -127,140 +127,138 @@ package org.jooq.impl;
case POSTGRES:
case YUGABYTE:
acceptPostgres(ctx);
break;
case HSQLDB:
case MARIADB:
case MYSQL:
acceptDefaultPullingUpDeclarations(ctx);
break;
default:
acceptDefault(ctx, value, messageText);
break;
}
}
private final void acceptPostgres(Context<?> ctx) {
ctx.visit(K_RAISE).sql(' ').visit(K_SQLSTATE).sql(' ').visit(value);
if (messageText != null)
ctx.sql(' ').visit(K_USING).sql(' ').visit(K_MESSAGE).sql(" = ").visit(messageText);
}
private final void acceptDefaultPullingUpDeclarations(Context<?> ctx) {
boolean bv = value instanceof ParamOrVariable;
boolean bm = messageText == null || messageText instanceof ParamOrVariable;
if (bv && bm) {
ctx.paramType(ParamType.INLINED, c -> acceptDefault(c, value, messageText));
}
else {
List<Statement> s = new ArrayList<>();
Field<?> v = bv ? value : variable("sqlstate", CHAR(5));
Field<String> m = bm ? messageText : variable("messagetext", VARCHAR);
if (v != value)
s.add(declare((Variable) v).set(value));
if (m != messageText)
s.add(declare((Variable<String>) m).set(messageText));
s.add(messageText != null ? signalSQLState(v).setMessageText(m) : signalSQLState(v));
ctx.visit(begin(s));
}
}
private static final void acceptDefault(Context<?> ctx, Field<?> value, Field<String> messageText) {
ctx.visit(K_SIGNAL).sql(' ').visit(ctx.family() == HANA ? K_SQL_ERROR_CODE : K_SQLSTATE).sql(' ').visit(value);
if (messageText != null)
ctx.sql(' ').visit(K_SET).sql(' ').visit(K_MESSAGE_TEXT).sql(" = ").visit(messageText);
}
@Pro
private final void acceptJava(Context<?> ctx) {
ctx.sql("signalSQLState(");
String s = "";
ctx.sql(s).visit(Val.getJavaValue(value)); s = ", ";
ctx.sql(s).visit(Val.getJavaValue(messageText)); s = ", ";
ctx.sql(')');
}
// -------------------------------------------------------------------------
// XXX: Query Object Model
// -------------------------------------------------------------------------
@Override
public final Field<?> $value() {
return value;
}
@Override
public final Field<String> $messageText() {
return messageText;
}
@Override
public final MSignal $value(MField<?> newValue) {
return constructor().apply(newValue, $messageText());
}
@Override
public final MSignal $messageText(MField<String> newValue) {
return constructor().apply($value(), newValue);
}
public final Function2<? super MField<?>, ? super MField<String>, ? extends MSignal> constructor() {
return (a1, a2) -> new Signal((Field<?>) a1, (Field<String>) a2);
}
@Override
public final MQueryPart replace(Function1<? super MQueryPart, ? extends MQueryPart> replacement) {
return QOM.replace(
this,
$value(),
$messageText(),
constructor()::apply,
replacement
);
}
@Override
public final <R> R traverse(
R init,
Predicate<? super R> abort,
Predicate<? super MQueryPart> recurse,
BiFunction<? super R, ? super MQueryPart, ? extends R> accumulate
) {
return QOM.traverse(
init, abort, recurse, accumulate, this,
$value(),
$messageText()
);
}
// -------------------------------------------------------------------------
// XXX: The Object API
// -------------------------------------------------------------------------
@Override
public boolean equals(Object that) {
if (that instanceof Signal) {
return
StringUtils.equals($value(), ((Signal) that).$value()) &&
StringUtils.equals($messageText(), ((Signal) that).$messageText())
;
}
else
return super.equals(that);
}
}
/* [/pro] */