From 9e736884121e01a153c1931cab19389d746c8779 Mon Sep 17 00:00:00 2001 From: Jeremy Bauer Date: Tue, 19 Jan 2010 22:33:11 +0000 Subject: [PATCH] OPENJPA-1115 Eliminate alias conversion on configurations that do not require conversion. git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@900985 13f79535-47bb-0310-9956-ffa450edef68 --- .../openjpa/jdbc/identifier/DBIdentifierUtilImpl.java | 4 ++++ .../jdbc/identifier/DefaultIdentifierConfiguration.java | 5 +++++ .../java/org/apache/openjpa/jdbc/sql/DBDictionary.java | 9 +++++++++ .../openjpa/lib/identifier/IdentifierConfiguration.java | 9 +++++++++ .../openjpa/lib/identifier/IdentifierUtilImpl.java | 6 ++---- .../openjpa/lib/identifier/IdConfigurationTestImpl.java | 6 +++++- .../lib/identifier/NewIdConfigurationTestImpl.java | 6 +++++- 7 files changed, 39 insertions(+), 6 deletions(-) diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifierUtilImpl.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifierUtilImpl.java index dc959aac5..764b31dfa 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifierUtilImpl.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifierUtilImpl.java @@ -419,6 +419,10 @@ public class DBIdentifierUtilImpl extends IdentifierUtilImpl implements DBIdenti * Converts a column alias to use the appropriate delimiters */ public String convertAlias(String alias) { + if (!needsConversion(getIdentifierConfiguration())) { + return alias; + } + String[] names = Normalizer.splitName(alias); if (names.length <= 1) { // Nothing to split diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DefaultIdentifierConfiguration.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DefaultIdentifierConfiguration.java index 5f1ac5832..3c6a76880 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DefaultIdentifierConfiguration.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DefaultIdentifierConfiguration.java @@ -29,6 +29,7 @@ public class DefaultIdentifierConfiguration implements IdentifierConfiguration { private DBIdentifierRule normalizingRule = new DBIdentifierRule(); private Map normalizingRules = new HashMap(); + private final String conversionKey = getLeadingDelimiter() + getIdentifierDelimiter() + getTrailingDelimiter(); public DefaultIdentifierConfiguration() { normalizingRules.put(IdentifierRule.DEFAULT_RULE, normalizingRule); @@ -78,4 +79,8 @@ public class DefaultIdentifierConfiguration implements IdentifierConfiguration { public boolean getSupportsDelimitedIdentifiers() { return true; } + + public String getConversionKey() { + return conversionKey; + } } diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java index bdae54264..c9f6daa2f 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java @@ -373,6 +373,7 @@ public class DBDictionary public String delimitedCase = SCHEMA_CASE_PRESERVE; public String catalogSeparator = "."; private String defaultSchemaName = null; + private String conversionKey = null; // Naming utility and naming rules private DBIdentifierUtil namingUtil = null; @@ -5361,4 +5362,12 @@ public class DBDictionary public String getDefaultSchemaName() { return defaultSchemaName; } + + public String getConversionKey() { + if (conversionKey == null) { + conversionKey = getLeadingDelimiter() + getIdentifierDelimiter() + + getTrailingDelimiter(); + } + return conversionKey; + } } diff --git a/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierConfiguration.java b/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierConfiguration.java index f1239d687..2ec646b00 100644 --- a/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierConfiguration.java +++ b/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierConfiguration.java @@ -86,4 +86,13 @@ public interface IdentifierConfiguration { * @return upper, lower, or preserve */ public String getSchemaCase(); + + /** + * Returns a key that can be used to determine whether conversion + * should take place. Id configurations should create a key unique + * to their configuration. The typical key is: + * leading delimiter (") + name separator(.) + trailing delimiter(") + * @return + */ + public String getConversionKey(); } diff --git a/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierUtilImpl.java b/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierUtilImpl.java index 08821dfcd..33be3a0ee 100644 --- a/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierUtilImpl.java +++ b/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierUtilImpl.java @@ -503,10 +503,8 @@ public class IdentifierUtilImpl implements IdentifierUtil, Configurable { } - private boolean needsConversion(IdentifierConfiguration config) { - return !(config.getLeadingDelimiter().equals(getIdentifierConfiguration().getLeadingDelimiter()) && - config.getTrailingDelimiter().equals(getIdentifierConfiguration().getTrailingDelimiter()) && - config.getIdentifierDelimiter().equals(getIdentifierConfiguration().getIdentifierDelimiter())); + protected boolean needsConversion(IdentifierConfiguration config) { + return !(config.getConversionKey().equals(getIdentifierConfiguration().getConversionKey())); } private IdentifierRule[] getNamingRules(String[] rules) { diff --git a/openjpa-lib/src/test/java/org/apache/openjpa/lib/identifier/IdConfigurationTestImpl.java b/openjpa-lib/src/test/java/org/apache/openjpa/lib/identifier/IdConfigurationTestImpl.java index 3e103a941..d41a801b6 100644 --- a/openjpa-lib/src/test/java/org/apache/openjpa/lib/identifier/IdConfigurationTestImpl.java +++ b/openjpa-lib/src/test/java/org/apache/openjpa/lib/identifier/IdConfigurationTestImpl.java @@ -28,7 +28,8 @@ import org.apache.openjpa.lib.identifier.IdentifierUtil; public class IdConfigurationTestImpl implements IdentifierConfiguration { Map _rules = new HashMap(); - + private final String conversionKey = getLeadingDelimiter() + getIdentifierDelimiter() + getTrailingDelimiter(); + public IdConfigurationTestImpl() { _rules.put("DEFAULT", _defRule); } @@ -84,4 +85,7 @@ public class IdConfigurationTestImpl implements IdentifierConfiguration { return true; } + public String getConversionKey() { + return conversionKey; + } } diff --git a/openjpa-lib/src/test/java/org/apache/openjpa/lib/identifier/NewIdConfigurationTestImpl.java b/openjpa-lib/src/test/java/org/apache/openjpa/lib/identifier/NewIdConfigurationTestImpl.java index 60f75b6f1..3f523ca15 100644 --- a/openjpa-lib/src/test/java/org/apache/openjpa/lib/identifier/NewIdConfigurationTestImpl.java +++ b/openjpa-lib/src/test/java/org/apache/openjpa/lib/identifier/NewIdConfigurationTestImpl.java @@ -28,7 +28,8 @@ import org.apache.openjpa.lib.identifier.IdentifierUtil; public class NewIdConfigurationTestImpl implements IdentifierConfiguration { Map _rules = new HashMap(); - + private final String conversionKey = getLeadingDelimiter() + getIdentifierDelimiter() + getTrailingDelimiter(); + public NewIdConfigurationTestImpl() { _rules.put("DEFAULT", _defRule); } @@ -84,4 +85,7 @@ public class NewIdConfigurationTestImpl implements IdentifierConfiguration { return true; } + public String getConversionKey() { + return conversionKey; + } }