From 8c8efd6042568a3e8af710d6a2985b4099511d1e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 26 Oct 2022 16:47:14 +0200 Subject: [PATCH] [jOOQ/jOOQ#7527] Support pattern transformations --- .../src/main/java/org/jooq/conf/Settings.java | 51 +++++++++++++++++++ .../org/jooq/impl/DiagnosticsConnection.java | 1 + .../org/jooq/xsd/jooq-runtime-3.18.0.xsd | 13 +++++ 3 files changed, 65 insertions(+) diff --git a/jOOQ/src/main/java/org/jooq/conf/Settings.java b/jOOQ/src/main/java/org/jooq/conf/Settings.java index c32506e408..632c681c01 100644 --- a/jOOQ/src/main/java/org/jooq/conf/Settings.java +++ b/jOOQ/src/main/java/org/jooq/conf/Settings.java @@ -119,6 +119,8 @@ public class Settings @XmlElement(defaultValue = "true") protected Boolean diagnosticsDuplicateStatements = true; @XmlElement(defaultValue = "true") + protected Boolean diagnosticsDuplicateStatementsUsingTransformPatterns = true; + @XmlElement(defaultValue = "true") protected Boolean diagnosticsMissingWasNullCall = true; @XmlElement(defaultValue = "true") protected Boolean diagnosticsRepeatedStatements = true; @@ -1273,6 +1275,39 @@ public class Settings this.diagnosticsDuplicateStatements = value; } + /** + * Whether to run the {@link org.jooq.DiagnosticsListener#duplicateStatements(org.jooq.DiagnosticsContext) diagnostic with the {@link #transformPatterns} feature activated. + *

+ * When transforming patterns, many more complex, duplicate SQL statements can be recognised than if simply + * parsing and re-rendering the statement. This flag turns on all transformation patterns, independently of their + * individual settings. + *

+ * Diagnostics are turned off if no {@link org.jooq.Configuration#diagnosticsListenerProviders()} are configured. + * Once configured, this diagnostic is turned on by default. + *

+ * This feature is available in the commercial distribution only. + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isDiagnosticsDuplicateStatementsUsingTransformPatterns() { + return diagnosticsDuplicateStatementsUsingTransformPatterns; + } + + /** + * Sets the value of the diagnosticsDuplicateStatementsUsingTransformPatterns property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setDiagnosticsDuplicateStatementsUsingTransformPatterns(Boolean value) { + this.diagnosticsDuplicateStatementsUsingTransformPatterns = value; + } + /** * Whether to run the {@link org.jooq.DiagnosticsListener#missingWasNullCall(org.jooq.DiagnosticsContext) diagnostic. *

@@ -4819,6 +4854,11 @@ public class Settings return this; } + public Settings withDiagnosticsDuplicateStatementsUsingTransformPatterns(Boolean value) { + setDiagnosticsDuplicateStatementsUsingTransformPatterns(value); + return this; + } + public Settings withDiagnosticsMissingWasNullCall(Boolean value) { setDiagnosticsMissingWasNullCall(value); return this; @@ -5884,6 +5924,7 @@ public class Settings builder.append("fetchTriggerValuesAfterSQLServerOutput", fetchTriggerValuesAfterSQLServerOutput); builder.append("fetchIntermediateResult", fetchIntermediateResult); builder.append("diagnosticsDuplicateStatements", diagnosticsDuplicateStatements); + builder.append("diagnosticsDuplicateStatementsUsingTransformPatterns", diagnosticsDuplicateStatementsUsingTransformPatterns); builder.append("diagnosticsMissingWasNullCall", diagnosticsMissingWasNullCall); builder.append("diagnosticsRepeatedStatements", diagnosticsRepeatedStatements); builder.append("diagnosticsTooManyColumnsFetched", diagnosticsTooManyColumnsFetched); @@ -6350,6 +6391,15 @@ public class Settings return false; } } + if (diagnosticsDuplicateStatementsUsingTransformPatterns == null) { + if (other.diagnosticsDuplicateStatementsUsingTransformPatterns!= null) { + return false; + } + } else { + if (!diagnosticsDuplicateStatementsUsingTransformPatterns.equals(other.diagnosticsDuplicateStatementsUsingTransformPatterns)) { + return false; + } + } if (diagnosticsMissingWasNullCall == null) { if (other.diagnosticsMissingWasNullCall!= null) { return false; @@ -7642,6 +7692,7 @@ public class Settings result = ((prime*result)+((fetchTriggerValuesAfterSQLServerOutput == null)? 0 :fetchTriggerValuesAfterSQLServerOutput.hashCode())); result = ((prime*result)+((fetchIntermediateResult == null)? 0 :fetchIntermediateResult.hashCode())); result = ((prime*result)+((diagnosticsDuplicateStatements == null)? 0 :diagnosticsDuplicateStatements.hashCode())); + result = ((prime*result)+((diagnosticsDuplicateStatementsUsingTransformPatterns == null)? 0 :diagnosticsDuplicateStatementsUsingTransformPatterns.hashCode())); result = ((prime*result)+((diagnosticsMissingWasNullCall == null)? 0 :diagnosticsMissingWasNullCall.hashCode())); result = ((prime*result)+((diagnosticsRepeatedStatements == null)? 0 :diagnosticsRepeatedStatements.hashCode())); result = ((prime*result)+((diagnosticsTooManyColumnsFetched == null)? 0 :diagnosticsTooManyColumnsFetched.hashCode())); diff --git a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java index 68cfe416e9..0a006fd6a4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java +++ b/jOOQ/src/main/java/org/jooq/impl/DiagnosticsConnection.java @@ -190,6 +190,7 @@ final class DiagnosticsConnection extends DefaultConnection { + normalised = normalisingRenderer.render(transformed); } catch (ParserException exception) { diff --git a/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.18.0.xsd b/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.18.0.xsd index b2981403b9..32a92cb2e7 100644 --- a/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.18.0.xsd +++ b/jOOQ/src/main/resources/org/jooq/xsd/jooq-runtime-3.18.0.xsd @@ -286,6 +286,19 @@ Diagnostics are turned off if no {@link org.jooq.Configuration#diagnosticsListen Once configured, this diagnostic is turned on by default.]]> + + +When transforming patterns, many more complex, duplicate SQL statements can be recognised than if simply +parsing and re-rendering the statement. This flag turns on all transformation patterns, independently of their +individual settings. +

+Diagnostics are turned off if no {@link org.jooq.Configuration#diagnosticsListenerProviders()} are configured. +Once configured, this diagnostic is turned on by default. +

+This feature is available in the commercial distribution only.]]> + +