Any thoughts or updates on this ?
From: Sagar Gandhi
Sent: Saturday 28 May 3:03 am
Subject: RE: Discussion on METAMODEL-156 JdbcDataContext.getDefaultSchemaName
return SchemaName error
To: [email protected]
Brief example :
MySQL URL format is
jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]]
[?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]
example 1 :jdbc:mysql://DBNAME_test:3306/DBNAME?user=DBNAME_test
example 2 : jdbc:mysql://DBNAME:3306/DBNAME_test?user=DBNAME
In first case , we expect the default database name as DBNAME but in second
case we expect as DBNAME_test. Now coming to metamodel , If we check contains
then default db name really depends on index of schemaNames array. If we check
largest db name , as suggested in comment section of bug then also it will
create a problem (first case).
So If we can handle the such known cases for major databases then it will be
far more helpful.For rest of the databases and custom drivers , our current
behaviour will remain as it is with bug fix as fail-safe mechanism.
@KasperThis might need refactoring the method as you mentioned in comment.
> From: [email protected]
> To: [email protected]
> Subject: Discussion on METAMODEL-156 JdbcDataContext.getDefaultSchemaName
> return SchemaName error
> Date: Sat, 28 May 2016 02:05:38 +0530
>
> Hi all,
> I started working on starter Bug Metamodel 156 titled
> "JdbcDataContext.getDefaultSchemaName return SchemaName error".
> Currently it finds database from URL using contains method, but if host name
> or directory (in case of HSQLDB) or any custom driver specific property name
> and schema name (non-default) are same then we can get wrong result. So I
> think we need to handle database specific URLs as much as possible and keep
> current behaviour as fail-safe mechanism.
> Example : for MySQL , database URL format is
> jdbc:mysql://[host1][:port1][,[host2][:port2]]...[/[database]]
> [?propertyName1=propertyValue1[&propertyName2=propertyValue2]...](Referred
> from
> https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html)
> So we can do following steps1. find last index of /2. find first index of ?3.
> If ? index is -1 then substring (last index of /) + 1 to end of url4. If ?
> index is not -1 then substring (last index of /)+1 to (first index of ?)5. If
> substring length is greater than 0 after trim then its databasename.
>
> Above is just pseducode , we can come with better strategy. Same way we can
> do it for MSSQL, DB2, Hive, HSQLDB. For Microsoft SQL Server , we can handle
> both JTDS and Microsoft Driver URL formats. If our new strategy fails to
> get database name due to different driver issues then current behaviour with
> bug fix can remain as fail-safe mechanism.
>
> Please do share your thoughts on this.
>
> Thanks ,Mr.Sagar Gandhi,Senior Software Engineer,eQ Technologic Inc.Pune-
> India(+91)9028440503