[jOOQ/jOOQ#14215] Plain SQL INSERT .. RETURNING doesn't work with unqualified field templates in SQL Server
See also [jOOQ/jOOQ#14218]
This commit is contained in:
parent
260e59aa46
commit
d0bdeea07f
@ -45,12 +45,12 @@ import org.jooq.impl.QOM.UEmptyField;
|
||||
|
||||
final class SQLField<T> extends AbstractField<T> implements UEmptyField<T>, TypedReference<T> {
|
||||
|
||||
private final QueryPart delegate;
|
||||
final SQLImpl delegate;
|
||||
|
||||
SQLField(DataType<T> type, SQL delegate) {
|
||||
super(DSL.unquotedName(delegate.toString()), type);
|
||||
|
||||
this.delegate = delegate;
|
||||
this.delegate = (SQLImpl) delegate;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
@ -54,12 +54,28 @@ import org.jooq.impl.QOM.UEmpty;
|
||||
final class SQLImpl extends AbstractQueryPart implements SQL, UEmpty {
|
||||
|
||||
private static final Clause[] CLAUSES = { TEMPLATE };
|
||||
private final String sql;
|
||||
private final List<QueryPart> substitutes;
|
||||
final String sql;
|
||||
final boolean isName;
|
||||
final List<QueryPart> substitutes;
|
||||
|
||||
SQLImpl(String sql, Object... input) {
|
||||
this.sql = requireNonNull(sql);
|
||||
this.substitutes = Tools.queryParts(input);
|
||||
this.isName = substitutes.isEmpty() && isName(sql);
|
||||
}
|
||||
|
||||
static final boolean isName(String sql) {
|
||||
int l = sql.length();
|
||||
|
||||
// [#14215] Good enough approximation of SQL identifiers
|
||||
if (l == 0 || !Character.isJavaIdentifierStart(sql.charAt(0)))
|
||||
return false;
|
||||
|
||||
for (int i = 1; i < l; i++)
|
||||
if (!Character.isJavaIdentifierPart(sql.charAt(i)))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1686,6 +1686,11 @@ final class Tools {
|
||||
return result;
|
||||
}
|
||||
|
||||
static final boolean reference(Field<?> field) {
|
||||
return field instanceof TableField
|
||||
|| field instanceof SQLField && ((SQLField<?>) field).delegate.isName;
|
||||
}
|
||||
|
||||
static final <T> Field<T> unqualified(Field<T> field) {
|
||||
return DSL.field(field.getUnqualifiedName(), field.getDataType());
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user