diff --git a/jOOQ/src/main/java/org/jooq/conf/Settings.java b/jOOQ/src/main/java/org/jooq/conf/Settings.java index c13a45a4d4..92e94c2f07 100644 --- a/jOOQ/src/main/java/org/jooq/conf/Settings.java +++ b/jOOQ/src/main/java/org/jooq/conf/Settings.java @@ -52,6 +52,8 @@ public class Settings @XmlElement(defaultValue = "QUOTED") @XmlSchemaType(name = "string") protected RenderNameStyle renderNameStyle = RenderNameStyle.QUOTED; + @XmlElement(defaultValue = ":") + protected String renderNamedParamPrefix = ":"; @XmlElement(defaultValue = "AS_IS") @XmlSchemaType(name = "string") protected RenderKeywordCase renderKeywordCase = RenderKeywordCase.AS_IS; @@ -327,6 +329,38 @@ public class Settings this.renderNameStyle = value; } + /** + * The prefix to use for named parameters. + *

+ * Named parameter syntax defaults to :name (such as supported by Oracle, JPA, Spring), but + * vendor specific parameters may look differently. This flag can be used to determine the prefix to be + * used by named parameters, such as @ for SQL Server's @name or $ + * for PostgreSQL's $name. + *

+ * "Named indexed" parameters can be obtained in the same way by specifingy {@code ParamType#NAMED} and not + * providing a name to parameters, resulting in :1 or @1 or $1, etc. + * + * @return + * possible object is + * {@link String } + * + */ + public String getRenderNamedParamPrefix() { + return renderNamedParamPrefix; + } + + /** + * Sets the value of the renderNamedParamPrefix property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setRenderNamedParamPrefix(String value) { + this.renderNamedParamPrefix = value; + } + /** * Whether the case of {@link org.jooq.Keyword} references should be modified in any way. * @@ -1549,6 +1583,11 @@ public class Settings return this; } + public Settings withRenderNamedParamPrefix(String value) { + setRenderNamedParamPrefix(value); + return this; + } + public Settings withRenderKeywordCase(RenderKeywordCase value) { setRenderKeywordCase(value); return this; @@ -1817,6 +1856,11 @@ public class Settings sb.append(renderNameStyle); sb.append(""); } + if ((renderNamedParamPrefix!= null)&&(!"".equals(renderNamedParamPrefix))) { + sb.append(""); + sb.append(renderNamedParamPrefix); + sb.append(""); + } if (renderKeywordCase!= null) { sb.append(""); sb.append(renderKeywordCase); @@ -2121,6 +2165,15 @@ public class Settings return false; } } + if (renderNamedParamPrefix == null) { + if (other.renderNamedParamPrefix!= null) { + return false; + } + } else { + if (!renderNamedParamPrefix.equals(other.renderNamedParamPrefix)) { + return false; + } + } if (renderKeywordCase == null) { if (other.renderKeywordCase!= null) { return false; @@ -2557,6 +2610,7 @@ public class Settings result = ((prime*result)+((renderQuotedNames == null)? 0 :renderQuotedNames.hashCode())); result = ((prime*result)+((renderNameCase == null)? 0 :renderNameCase.hashCode())); result = ((prime*result)+((renderNameStyle == null)? 0 :renderNameStyle.hashCode())); + result = ((prime*result)+((renderNamedParamPrefix == null)? 0 :renderNamedParamPrefix.hashCode())); result = ((prime*result)+((renderKeywordCase == null)? 0 :renderKeywordCase.hashCode())); result = ((prime*result)+((renderKeywordStyle == null)? 0 :renderKeywordStyle.hashCode())); result = ((prime*result)+((renderLocale == null)? 0 :renderLocale.hashCode())); diff --git a/jOOQ/src/main/java/org/jooq/impl/Val.java b/jOOQ/src/main/java/org/jooq/impl/Val.java index 51ec8a5250..802357f9b8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Val.java +++ b/jOOQ/src/main/java/org/jooq/impl/Val.java @@ -112,11 +112,12 @@ final class Val extends AbstractParam { final String getBindVariable(Context ctx) { if (ctx.paramType() == NAMED || ctx.paramType() == NAMED_OR_INLINED) { int index = ctx.nextIndex(); + String prefix = StringUtils.defaultIfNull(ctx.settings().getRenderNamedParamPrefix(), ":"); if (StringUtils.isBlank(getParamName())) - return ":" + index; + return prefix + index; else - return ":" + getParamName(); + return prefix + getParamName(); } else { return "?"; diff --git a/jOOQ/src/main/resources/xsd/jooq-runtime-3.12.0.xsd b/jOOQ/src/main/resources/xsd/jooq-runtime-3.12.0.xsd index 1b63209200..d934538383 100644 --- a/jOOQ/src/main/resources/xsd/jooq-runtime-3.12.0.xsd +++ b/jOOQ/src/main/resources/xsd/jooq-runtime-3.12.0.xsd @@ -58,6 +58,18 @@ This is set to "QUOTED" by default for backwards-compatibility. @deprecated - 3.12.0 - [#5909] - Use {@link RenderQuotedNames} and {@link RenderNameCase} instead.]]> + + +Named parameter syntax defaults to :name (such as supported by Oracle, JPA, Spring), but +vendor specific parameters may look differently. This flag can be used to determine the prefix to be +used by named parameters, such as @ for SQL Server's @name or $ +for PostgreSQL's $name. +

+"Named indexed" parameters can be obtained in the same way by specifingy {@code ParamType#NAMED} and not +providing a name to parameters, resulting in :1 or @1 or $1, etc.]]> + +