[hibernate-dev] org.hibernate.engine.jdbc.dialect.spi.DialectResolver

Max Rydahl Andersen max.andersen at redhat.com
Fri Aug 31 04:02:23 EDT 2012


and having 

On 31 Aug 2012, at 01:59, Steve Ebersole <steve at hibernate.org> wrote:

> Correct.  The current proposal has them passed in as settings.

okey, so I must be missing something - since no access to database metadata how is the autodetection of name/version supposed to work when users have not passed in the settings ?

> Yes, we could "mock" DatabaseMetadata, but there is a lot there including access to the Connection from which the DatabaseMetadata was supposedly retrieved.

And something like would be too weird:

public Dialect resolveDialect(String dbname, String version, DatabaseMetaData dbmetadata)

Where dbmetadata is null if not available ? 

/max

> On Thu 30 Aug 2012 02:31:56 AM CDT, Emmanuel Bernard wrote:
>> I imagine the DB name + version will be provided by the user somehow.
>> We could also have Hibernate build a DatabaseMetadata implementation returning the data provided by the user.
>> That would avoid changing the contract. The main drawback is that DatabaseMetadata has many more methods
>> we would not be able to honor.
>> 
>> On 29 août 2012, at 19:58, Steve Ebersole wrote:
>> 
>>> Like I said in the original email, the connection may or may not be
>>> available.  Which means we cannot rely on it being available.  Nor do
>>> we rely on it being available today either btw.  The difference is just
>>> that today in those cases we expect the user to manually name the
>>> dialect to use.
>>> 
>>> On Wed 29 Aug 2012 12:26:17 PM CDT, Max Rydahl Andersen wrote:
>>>> hmm - any reason why jpa won't pass in DatabaseMetadata ?
>>>> 
>>>> how would one identify name and version anyway if that is not available ?
>>>> 
>>>> /max
>>>> 
>>>> On 29 Aug 2012, at 16:43, Steve Ebersole <steve at hibernate.org> wrote:
>>>> 
>>>>> I think we need to consider changing DialectResolver to fit with some
>>>>> upcoming JPA 2.1 features.
>>>>> 
>>>>> JPA 2.1 is adding some form of schema export.  The initial plan there is
>>>>> to identify the "dialect" to target by passing in the (1) database name
>>>>> and (2) database version as it would come from JDBC DatabaseMetaData.
>>>>> The connection may or may not be available.
>>>>> 
>>>>> Currently we just pass the DatabaseMetaData to the DialectResolver:
>>>>> 
>>>>> public Dialect resolveDialect(DatabaseMetaData metaData)
>>>>> 
>>>>> The original thinking was to support resolvers looking at information
>>>>> other than just name/version ion making the determination (or even in
>>>>> potentially configuring the Dialect before return).  However all our
>>>>> implementations are based on just name/version resolution.
>>>>> 
>>>>> Even worse the current proposal proposes using (String)
>>>>> DatabaseMetaData#getDatabaseProductVersion whereas we use (int)
>>>>> DatabaseMetaData#getDatabaseMajorVersion and (int)
>>>>> DatabaseMetaData#getDatabaseMinorVersion inside the standard resolver
>>>>> 
>>>>> So should we change this contract?
>>>>> 
>>>>> public Dialect resolveDialect(String dbName, int majorVersion, int
>>>>> minorVersion)
>>>>> 
>>>>> or
>>>>> 
>>>>> public Dialect resolveDialect(String dbName, String dbVersion)
>>>>> 
>>>>> WDYT?
>>>>> 
>>>>> --
>>>>> steve at hibernate.org
>>>>> http://hibernate.org
>>>>> _______________________________________________
>>>>> hibernate-dev mailing list
>>>>> hibernate-dev at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>>> 
>>> 
>>> --
>>> steve at hibernate.org
>>> http://hibernate.org
>>> _______________________________________________
>>> hibernate-dev mailing list
>>> hibernate-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>> 
> 
> --
> steve at hibernate.org
> http://hibernate.org




More information about the hibernate-dev mailing list