From 59bc1662681fcf147c1e710f5d2328f0ef6c7271 Mon Sep 17 00:00:00 2001
From: Thies Edeling <thies@te-con.nl>
Date: Tue, 3 Mar 2015 09:50:14 +0100
Subject: [PATCH] #273, special case for when called to unwrap a DataSource,
 copying the same behavior as the ConnectionProvider implementations by
 Hibernate.

---
 .../hibernate/HikariConnectionProvider.java    | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/hikaricp-common/src/main/java/com/zaxxer/hikari/hibernate/HikariConnectionProvider.java b/hikaricp-common/src/main/java/com/zaxxer/hikari/hibernate/HikariConnectionProvider.java
index dd79b401..b4c83489 100644
--- a/hikaricp-common/src/main/java/com/zaxxer/hikari/hibernate/HikariConnectionProvider.java
+++ b/hikaricp-common/src/main/java/com/zaxxer/hikari/hibernate/HikariConnectionProvider.java
@@ -31,6 +31,8 @@ import org.slf4j.LoggerFactory;
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
 
+import javax.sql.DataSource;
+
 /**
  * Connection provider for Hibernate 4.3.
  *
@@ -125,12 +127,16 @@ public class HikariConnectionProvider implements ConnectionProvider, Configurabl
    @SuppressWarnings("unchecked")
    public <T> T unwrap(Class<T> unwrapType)
    {
-      if (isUnwrappableAs(unwrapType)) {
-         return (T) this;
-      }
-      else {
-         throw new UnknownUnwrapTypeException(unwrapType);
-      }
+       if ( ConnectionProvider.class.equals( unwrapType ) ||
+               HikariConnectionProvider.class.isAssignableFrom( unwrapType ) ) {
+           return (T) this;
+       }
+       else if ( DataSource.class.isAssignableFrom( unwrapType ) ) {
+           return (T) this.hds;
+       }
+       else {
+           throw new UnknownUnwrapTypeException( unwrapType );
+       }
    }
 
    // *************************************************************************