From a44341ece3f3b02928f79af129003a099d790b78 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 29 Jan 2024 15:25:55 +0100 Subject: [PATCH] Consistent method declaration order in Call/TableMetaDataProvider --- .../core/metadata/CallMetaDataContext.java | 3 +- .../core/metadata/CallMetaDataProvider.java | 12 +- .../metadata/GenericCallMetaDataProvider.java | 17 +- .../GenericTableMetaDataProvider.java | 156 +++++++++--------- .../core/metadata/TableMetaDataContext.java | 16 +- .../core/metadata/TableMetaDataProvider.java | 14 +- 6 files changed, 106 insertions(+), 112 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataContext.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataContext.java index 5150f7a3f4d..6b84ceb1d02 100755 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataContext.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -677,7 +677,6 @@ public class CallMetaDataContext { */ protected String createParameterBinding(SqlParameter parameter) { Assert.state(this.metaDataProvider != null, "No CallMetaDataProvider available"); - return (isNamedBinding() ? this.metaDataProvider.namedParameterBindingToUse(parameter.getName()) : "?"); } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataProvider.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataProvider.java index 4b6d3083624..a13a43161ff 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataProvider.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/CallMetaDataProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -150,6 +150,11 @@ public interface CallMetaDataProvider { @Nullable String getUserName(); + /** + * Are we using the meta-data for the procedure columns? + */ + boolean isProcedureColumnMetaDataUsed(); + /** * Does this database support returning ResultSets that should be retrieved with the JDBC call: * {@link java.sql.Statement#getResultSet()}? @@ -168,11 +173,6 @@ public interface CallMetaDataProvider { */ int getRefCursorSqlType(); - /** - * Are we using the meta-data for the procedure columns? - */ - boolean isProcedureColumnMetaDataUsed(); - /** * Should we bypass the return parameter with the specified name? *

This allows the database specific implementation to skip the processing diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericCallMetaDataProvider.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericCallMetaDataProvider.java index 15ac02b7569..6305251156e 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericCallMetaDataProvider.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericCallMetaDataProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -53,6 +53,8 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { private final String userName; + private boolean procedureColumnMetaDataUsed = false; + private boolean supportsCatalogsInProcedureCalls = true; private boolean supportsSchemasInProcedureCalls = true; @@ -61,8 +63,6 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { private boolean storesLowerCaseIdentifiers = false; - private boolean procedureColumnMetaDataUsed = false; - private final List callParameterMetaData = new ArrayList<>(); @@ -195,6 +195,11 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { return this.userName; } + @Override + public boolean isProcedureColumnMetaDataUsed() { + return this.procedureColumnMetaDataUsed; + } + @Override public boolean isReturnResultSetSupported() { return true; @@ -210,17 +215,11 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { return Types.OTHER; } - @Override - public boolean isProcedureColumnMetaDataUsed() { - return this.procedureColumnMetaDataUsed; - } - @Override public boolean byPassReturnParameter(String parameterName) { return false; } - /** * Specify whether the database supports the use of catalog name in procedure calls. */ diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java index b331de72416..6269c0d91ae 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java @@ -47,38 +47,40 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider { /** Logger available to subclasses. */ protected static final Log logger = LogFactory.getLog(TableMetaDataProvider.class); - /** indicator whether column meta-data should be used. */ - private boolean tableColumnMetaDataUsed = false; + /** Database products we know not supporting the use of a String[] for generated keys. */ + private static final List productsNotSupportingGeneratedKeysColumnNameArray = + Arrays.asList("Apache Derby", "HSQL Database Engine"); - /** the version of the database. */ - @Nullable - private String databaseVersion; - /** the name of the user currently connected. */ + /** The name of the user currently connected. */ @Nullable private final String userName; - /** indicates whether the identifiers are uppercased. */ - private boolean storesUpperCaseIdentifiers = true; + /** The version of the database. */ + @Nullable + private String databaseVersion; - /** indicates whether the identifiers are lowercased. */ - private boolean storesLowerCaseIdentifiers = false; + /** Indicates whether column meta-data has been used. */ + private boolean tableColumnMetaDataUsed = false; - /** indicates whether generated keys retrieval is supported. */ + /** Indicates whether generated keys retrieval is supported. */ private boolean getGeneratedKeysSupported = true; - /** indicates whether the use of a String[] for generated keys is supported. */ + /** Indicates whether the use of a String[] for generated keys is supported. */ private boolean generatedKeysColumnNameArraySupported = true; - /** database products we know not supporting the use of a String[] for generated keys. */ - private final List productsNotSupportingGeneratedKeysColumnNameArray = - Arrays.asList("Apache Derby", "HSQL Database Engine"); + /** Indicates whether the identifiers are uppercased. */ + private boolean storesUpperCaseIdentifiers = true; + + /** Indicates whether the identifiers are lowercased. */ + private boolean storesLowerCaseIdentifiers = false; + + /** The string used to quote SQL identifiers. */ + private String identifierQuoteString = " "; /** Collection of TableParameterMetaData objects. */ private final List tableParameterMetaData = new ArrayList<>(); - /** The string used to quote SQL identifiers. */ - private String identifierQuoteString = " "; /** * Constructor used to initialize with provided database meta-data. @@ -89,63 +91,6 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider { } - public void setStoresUpperCaseIdentifiers(boolean storesUpperCaseIdentifiers) { - this.storesUpperCaseIdentifiers = storesUpperCaseIdentifiers; - } - - public boolean isStoresUpperCaseIdentifiers() { - return this.storesUpperCaseIdentifiers; - } - - public void setStoresLowerCaseIdentifiers(boolean storesLowerCaseIdentifiers) { - this.storesLowerCaseIdentifiers = storesLowerCaseIdentifiers; - } - - public boolean isStoresLowerCaseIdentifiers() { - return this.storesLowerCaseIdentifiers; - } - - - @Override - public boolean isTableColumnMetaDataUsed() { - return this.tableColumnMetaDataUsed; - } - - @Override - public List getTableParameterMetaData() { - return this.tableParameterMetaData; - } - - @Override - public boolean isGetGeneratedKeysSupported() { - return this.getGeneratedKeysSupported; - } - - @Override - public boolean isGetGeneratedKeysSimulated(){ - return false; - } - - @Override - @Nullable - public String getSimpleQueryForGetGeneratedKey(String tableName, String keyColumnName) { - return null; - } - - public void setGetGeneratedKeysSupported(boolean getGeneratedKeysSupported) { - this.getGeneratedKeysSupported = getGeneratedKeysSupported; - } - - public void setGeneratedKeysColumnNameArraySupported(boolean generatedKeysColumnNameArraySupported) { - this.generatedKeysColumnNameArraySupported = generatedKeysColumnNameArraySupported; - } - - @Override - public boolean isGeneratedKeysColumnNameArraySupported() { - return this.generatedKeysColumnNameArraySupported; - } - - @Override public void initializeWithMetaData(DatabaseMetaData databaseMetaData) throws SQLException { try { @@ -165,7 +110,7 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider { } try { String databaseProductName = databaseMetaData.getDatabaseProductName(); - if (this.productsNotSupportingGeneratedKeysColumnNameArray.contains(databaseProductName)) { + if (productsNotSupportingGeneratedKeysColumnNameArray.contains(databaseProductName)) { if (logger.isDebugEnabled()) { logger.debug("GeneratedKeysColumnNameArray is not supported for " + databaseProductName); } @@ -234,6 +179,11 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider { locateTableAndProcessMetaData(databaseMetaData, catalogName, schemaName, tableName); } + @Override + public List getTableParameterMetaData() { + return this.tableParameterMetaData; + } + @Override @Nullable public String tableNameToUse(@Nullable String tableName) { @@ -305,16 +255,62 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider { return this.databaseVersion; } - /** - * Provide access to the identifier quote string. - * @since 6.1 - * @see java.sql.DatabaseMetaData#getIdentifierQuoteString() - */ + @Override + public boolean isTableColumnMetaDataUsed() { + return this.tableColumnMetaDataUsed; + } + + public void setGetGeneratedKeysSupported(boolean getGeneratedKeysSupported) { + this.getGeneratedKeysSupported = getGeneratedKeysSupported; + } + + @Override + public boolean isGetGeneratedKeysSupported() { + return this.getGeneratedKeysSupported; + } + + @Override + public boolean isGetGeneratedKeysSimulated(){ + return false; + } + + @Override + @Nullable + public String getSimpleQueryForGetGeneratedKey(String tableName, String keyColumnName) { + return null; + } + + public void setGeneratedKeysColumnNameArraySupported(boolean generatedKeysColumnNameArraySupported) { + this.generatedKeysColumnNameArraySupported = generatedKeysColumnNameArraySupported; + } + + @Override + public boolean isGeneratedKeysColumnNameArraySupported() { + return this.generatedKeysColumnNameArraySupported; + } + + public void setStoresUpperCaseIdentifiers(boolean storesUpperCaseIdentifiers) { + this.storesUpperCaseIdentifiers = storesUpperCaseIdentifiers; + } + + public boolean isStoresUpperCaseIdentifiers() { + return this.storesUpperCaseIdentifiers; + } + + public void setStoresLowerCaseIdentifiers(boolean storesLowerCaseIdentifiers) { + this.storesLowerCaseIdentifiers = storesLowerCaseIdentifiers; + } + + public boolean isStoresLowerCaseIdentifiers() { + return this.storesLowerCaseIdentifiers; + } + @Override public String getIdentifierQuoteString() { return this.identifierQuoteString; } + /** * Method supporting the meta-data processing for a table. */ diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataContext.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataContext.java index 447f0b23ab1..ee59e43ec41 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataContext.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataContext.java @@ -64,18 +64,12 @@ public class TableMetaDataContext { @Nullable private String schemaName; - // List of columns objects to be used in this context - private List tableColumns = new ArrayList<>(); - // Should we access insert parameter meta-data info or not private boolean accessTableColumnMetaData = true; // Should we override default for including synonyms for meta-data lookups private boolean overrideIncludeSynonymsDefault = false; - // Are we using generated key columns? - private boolean generatedKeyColumnsUsed = false; - // Are we quoting identifiers? private boolean quoteIdentifiers = false; @@ -83,6 +77,12 @@ public class TableMetaDataContext { @Nullable private TableMetaDataProvider metaDataProvider; + // List of columns objects to be used in this context + private List tableColumns = new ArrayList<>(); + + // Are we using generated key columns + private boolean generatedKeyColumnsUsed = false; + /** * Set the name of the table for this context. @@ -343,8 +343,8 @@ public class TableMetaDataContext { } } else { - String message = "Unable to locate columns for table '" + tableName - + "' so an insert statement can't be generated."; + String message = "Unable to locate columns for table '" + tableName + + "' so an insert statement can't be generated."; if (isAccessTableColumnMetaData()) { message += " Consider specifying explicit column names -- for example, via SimpleJdbcInsert#usingColumns()."; } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataProvider.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataProvider.java index 9c39bd9f30f..1af80eec37f 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataProvider.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/TableMetaDataProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2023 the original author or authors. + * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -53,6 +53,12 @@ public interface TableMetaDataProvider { void initializeWithTableColumnMetaData(DatabaseMetaData databaseMetaData, @Nullable String catalogName, @Nullable String schemaName, @Nullable String tableName) throws SQLException; + /** + * Get the table parameter meta-data that is currently used. + * @return a List of {@link TableParameterMetaData} + */ + List getTableParameterMetaData(); + /** * Get the table name formatted based on meta-data information. *

This could include altering the case. @@ -136,12 +142,6 @@ public interface TableMetaDataProvider { */ boolean isGeneratedKeysColumnNameArraySupported(); - /** - * Get the table parameter meta-data that is currently used. - * @return a List of {@link TableParameterMetaData} - */ - List getTableParameterMetaData(); - /** * Get the string used to quote SQL identifiers. *

This method returns a space ({@code " "}) if identifier quoting is not