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