Dash in database name is not supported by V2 client
It looks like parsing of JDBC URL does not support dash (hyphen) in database name. This results in Code: 81. DB::Exception: Database test does not exist. when trying to connect to database named test-dash.
Found in 0.8.4 but this part of code in master is the same.
RegEx at https://github.com/ClickHouse/clickhouse-java/blob/b2692a32f8de5f96b4a4ec2319057df0514c0c58/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/JdbcConfiguration.java#L129 shows the following when testing:
>>> import re
>>> re.match('(https?:)?\\/\\/([\\w\\.\\-]+|\\[[0-9a-fA-F:]+\\]):?([\\d]*)(?:\\/([\\w]+))?\\/?\\??(.*)$', 'https://host-name:8123/test-dash?param=pampam').groups()
('https:', 'host-name', '8123', 'test', '-dash?param=pampam')
(Tested in python as it was a quick test but I assume \w is the same)
Note the 4th group only has test and -dash is already in 5th group where params should reside.
Adding - to characters set seems to fix parsing:
> re.match('(https?:)?\\/\\/([\\w\\.\\-]+|\\[[0-9a-fA-F:]+\\]):?([\\d]*)(?:\\/([\\w-]+))?\\/?\\??(.*)$', 'https://host-name:8123/test-dash?param=pampam').groups()
('https:', 'host-name', '8123', 'test-dash', 'param=pampam')
Here the 4th group contains full DB name test-dash
There was already a similar issue long ago: #251 but that was for client V1.
Repro with 0.9.0:
$ clj -Sdeps '{:deps {com.clickhouse/clickhouse-jdbc {:mvn/version "0.9.0"}}}'
user=> (let [conn (java.sql.DriverManager/getConnection "jdbc:clickhouse://localhost:8123/my-db" "default" "")
stmt (.prepareStatement conn "SELECT * FROM `my-table`;")]
(let [rs (.executeQuery stmt)]
(while (.next rs)
(println (.getString rs 1)))))
Execution error (ServerException) at com.clickhouse.client.api.internal.HttpAPIClientHelper/readError (HttpAPIClientHelper.java:371).
Code: 81. DB::Exception: Database my does not exist. (UNKNOWN_DATABASE) (version 25.2.2.39 (official build))
Relying on own regular expressions is not so nice. I would vote for using Java API for parsing URIs or URLs.
@chernser Wow, that was fast 🚀 Please run integration tests. I am still seeing some errors locally.
Will do!