From 6ff75f157b5ab87751173d2ea23d6d98f18a03a2 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 24 Nov 2023 23:24:20 +0100 Subject: [PATCH] Detect current schema as indicated by JDBC Connection Closes gh-28723 --- .../core/metadata/PostgresCallMetaDataProvider.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/PostgresCallMetaDataProvider.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/PostgresCallMetaDataProvider.java index 2881eb2ec5..31275e90eb 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/PostgresCallMetaDataProvider.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/PostgresCallMetaDataProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2023 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. @@ -30,15 +30,22 @@ import org.springframework.lang.Nullable; * This class is intended for internal use by the Simple JDBC classes. * * @author Thomas Risberg + * @author Juergen Hoeller * @since 2.5 */ public class PostgresCallMetaDataProvider extends GenericCallMetaDataProvider { private static final String RETURN_VALUE_NAME = "returnValue"; + private final String schemaName; + public PostgresCallMetaDataProvider(DatabaseMetaData databaseMetaData) throws SQLException { super(databaseMetaData); + + // Use current schema (or public schema) if no schema specified + String schema = databaseMetaData.getConnection().getSchema(); + this.schemaName = (schema != null ? schema : "public"); } @@ -60,8 +67,7 @@ public class PostgresCallMetaDataProvider extends GenericCallMetaDataProvider { @Override @Nullable public String metaDataSchemaNameToUse(@Nullable String schemaName) { - // Use public schema if no schema specified - return (schemaName == null ? "public" : super.metaDataSchemaNameToUse(schemaName)); + return (schemaName == null ? this.schemaName : super.metaDataSchemaNameToUse(schemaName)); } @Override