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
This commit is contained in:
Jeremy Bauer 2010-01-19 22:33:11 +00:00
parent 245bb82d34
commit 9e73688412
7 changed files with 39 additions and 6 deletions

View File

@ -419,6 +419,10 @@ public class DBIdentifierUtilImpl extends IdentifierUtilImpl implements DBIdenti
* Converts a column alias to use the appropriate delimiters * Converts a column alias to use the appropriate delimiters
*/ */
public String convertAlias(String alias) { public String convertAlias(String alias) {
if (!needsConversion(getIdentifierConfiguration())) {
return alias;
}
String[] names = Normalizer.splitName(alias); String[] names = Normalizer.splitName(alias);
if (names.length <= 1) { if (names.length <= 1) {
// Nothing to split // Nothing to split

View File

@ -29,6 +29,7 @@ public class DefaultIdentifierConfiguration implements IdentifierConfiguration {
private DBIdentifierRule normalizingRule = new DBIdentifierRule(); private DBIdentifierRule normalizingRule = new DBIdentifierRule();
private Map<String, IdentifierRule> normalizingRules = new HashMap<String, IdentifierRule>(); private Map<String, IdentifierRule> normalizingRules = new HashMap<String, IdentifierRule>();
private final String conversionKey = getLeadingDelimiter() + getIdentifierDelimiter() + getTrailingDelimiter();
public DefaultIdentifierConfiguration() { public DefaultIdentifierConfiguration() {
normalizingRules.put(IdentifierRule.DEFAULT_RULE, normalizingRule); normalizingRules.put(IdentifierRule.DEFAULT_RULE, normalizingRule);
@ -78,4 +79,8 @@ public class DefaultIdentifierConfiguration implements IdentifierConfiguration {
public boolean getSupportsDelimitedIdentifiers() { public boolean getSupportsDelimitedIdentifiers() {
return true; return true;
} }
public String getConversionKey() {
return conversionKey;
}
} }

View File

@ -373,6 +373,7 @@ public class DBDictionary
public String delimitedCase = SCHEMA_CASE_PRESERVE; public String delimitedCase = SCHEMA_CASE_PRESERVE;
public String catalogSeparator = "."; public String catalogSeparator = ".";
private String defaultSchemaName = null; private String defaultSchemaName = null;
private String conversionKey = null;
// Naming utility and naming rules // Naming utility and naming rules
private DBIdentifierUtil namingUtil = null; private DBIdentifierUtil namingUtil = null;
@ -5361,4 +5362,12 @@ public class DBDictionary
public String getDefaultSchemaName() { public String getDefaultSchemaName() {
return defaultSchemaName; return defaultSchemaName;
} }
public String getConversionKey() {
if (conversionKey == null) {
conversionKey = getLeadingDelimiter() + getIdentifierDelimiter() +
getTrailingDelimiter();
}
return conversionKey;
}
} }

View File

@ -86,4 +86,13 @@ public interface IdentifierConfiguration {
* @return upper, lower, or preserve * @return upper, lower, or preserve
*/ */
public String getSchemaCase(); 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();
} }

View File

@ -503,10 +503,8 @@ public class IdentifierUtilImpl implements IdentifierUtil, Configurable {
} }
private boolean needsConversion(IdentifierConfiguration config) { protected boolean needsConversion(IdentifierConfiguration config) {
return !(config.getLeadingDelimiter().equals(getIdentifierConfiguration().getLeadingDelimiter()) && return !(config.getConversionKey().equals(getIdentifierConfiguration().getConversionKey()));
config.getTrailingDelimiter().equals(getIdentifierConfiguration().getTrailingDelimiter()) &&
config.getIdentifierDelimiter().equals(getIdentifierConfiguration().getIdentifierDelimiter()));
} }
private IdentifierRule[] getNamingRules(String[] rules) { private IdentifierRule[] getNamingRules(String[] rules) {

View File

@ -28,7 +28,8 @@ import org.apache.openjpa.lib.identifier.IdentifierUtil;
public class IdConfigurationTestImpl implements IdentifierConfiguration { public class IdConfigurationTestImpl implements IdentifierConfiguration {
Map<String, IdentifierRule> _rules = new HashMap<String, IdentifierRule>(); Map<String, IdentifierRule> _rules = new HashMap<String, IdentifierRule>();
private final String conversionKey = getLeadingDelimiter() + getIdentifierDelimiter() + getTrailingDelimiter();
public IdConfigurationTestImpl() { public IdConfigurationTestImpl() {
_rules.put("DEFAULT", _defRule); _rules.put("DEFAULT", _defRule);
} }
@ -84,4 +85,7 @@ public class IdConfigurationTestImpl implements IdentifierConfiguration {
return true; return true;
} }
public String getConversionKey() {
return conversionKey;
}
} }

View File

@ -28,7 +28,8 @@ import org.apache.openjpa.lib.identifier.IdentifierUtil;
public class NewIdConfigurationTestImpl implements IdentifierConfiguration { public class NewIdConfigurationTestImpl implements IdentifierConfiguration {
Map<String, IdentifierRule> _rules = new HashMap<String, IdentifierRule>(); Map<String, IdentifierRule> _rules = new HashMap<String, IdentifierRule>();
private final String conversionKey = getLeadingDelimiter() + getIdentifierDelimiter() + getTrailingDelimiter();
public NewIdConfigurationTestImpl() { public NewIdConfigurationTestImpl() {
_rules.put("DEFAULT", _defRule); _rules.put("DEFAULT", _defRule);
} }
@ -84,4 +85,7 @@ public class NewIdConfigurationTestImpl implements IdentifierConfiguration {
return true; return true;
} }
public String getConversionKey() {
return conversionKey;
}
} }