ClickHouse / ClickHouse/clickhouse-odbc
The last working release on Ubuntu 22.04 is 1.1.6
- Dominant language
- C
- Stars
- 285
- Forks
- 105
- Avg merge
- 3h 56m
- Merged PRs (30d)
- 3
Description
Here's what I am doing to test it.
```
curl -O https://s3.amazonaws.com/clickhouse-builds/PRs/59953/b42de2bb6800e40d76d0272d580bec1e4255eaf0/package_release/clickhouse-common-static_24.2.1.1182_amd64.deb
dpkg-deb -R clickhouse-common-static_24.2.1.1182_amd64.deb clickhouse
docker run --name=broken-odbc --rm -it -v ${PWD}/:/usr/fake-bin clickhouse/stateless-test:ac6dc7b41795 /usr/fake-bin/clickhouse/usr/bin/clickhouse-odbc-bridge --http-port 9018 --listen-host 127.0.0.1 --http-timeout 60000000 http-max-field-value-size 99999999999999999
```
In a second terminal
```
docker exec -it broken-odbc /usr/fake-bin/clickhouse/usr/bin/clickhouse server
```
And in a third, 1.1.6 works
```
$ docker exec -it broken-odbc bash
root@f2dd5e6e2de8:/# curl -sLO https://github.com/ClickHouse/clickhouse-odbc/releases/download/v1.1.6.20200320/clickhouse-odbc-1.1.6-Linux.tar.gz
root@f2dd5e6e2de8:/# tar xf clickhouse-odbc-*-Linux.tar.gz && mv clickhouse-odbc-*-Linux/lib64/* /usr/local/lib64/ && /usr/fake-bin/clickhouse/usr/bin/clickhouse client -q "select count() > 1 as ok from (select * from odbc('DSN={ClickHouse DSN (ANSI)}','system','tables'))" ; /usr/fake-bin/clickhouse/usr/bin/clickhouse client -q "select count() > 1 as ok from (select * from odbc('DSN={ClickHouse DSN (UNICODE)}','system','tables'))"
1
1
```
And every version after 1.1.7 does not
```
root@08ad8abeb527:/# curl -sLO https://github.com/ClickHouse/clickhouse-odbc/releases/download/v1.1.7.20200414/clickhouse-odbc-1.1.7-Linux.tar.gz
root@08ad8abeb527:/# tar xf clickhouse-odbc-*-Linux.tar.gz && mv clickhouse-odbc-*-Linux/lib64/* /usr/local/lib64/ && /usr/fake-bin/clickhouse/usr/bin/clickhouse client -q "select count() > 1 as ok from (select * from odbc('DSN={ClickHouse DSN (ANSI)}','system','tables'))" ; /usr/fake-bin/clickhouse/usr/bin/clickhouse client -q "select count() > 1 as ok from (select * from odbc('DSN={ClickHouse DSN (UNICODE)}','system','tables'))"
Received exception from server (version 24.2.1):
Code: 86. DB::Exception: Received from localhost:9000. DB::HTTPException. DB::HTTPException: Received error from remote server /columns_info?use_connection_pooling=1&version=1&connection_string=DSN%3D%7BClickHouse%20DSN%20%28ANSI%29%7D&schema=system&table=tables&external_table_functions_use_nulls=1. HTTP status code: 500 Internal Server Error, body: Error getting columns from ODBC 'std::exception. Code: 1001, type: nanodbc::database_error, e.what() = contrib/nanodbc/nanodbc/nanodbc.cpp:1046: 0100: [unixODBC][Driver Manager]Can't open lib '/usr/local/lib64/libclickhouseodbc.so' : file not found (version 24.2.1.1182)'
. (RECEIVED_ERROR_FROM_REMOTE_IO_SERVER)
(query: select count() > 1 as ok from (select * from odbc('DSN={ClickHouse DSN (ANSI)}','system','tables')))
Received exception from server (version 24.2.1):
Code: 86. DB::Exception: Received from localhost:9000. DB::HTTPException. DB::HTTPException: Received error from remote server /columns_info?use_connection_pooling=1&version=1&connection_string=DSN%3D%7BClickHouse%20DSN%20%28UNICODE%29%7D&schema=system&table=tables&external_table_functions_use_nulls=1. HTTP status code: 500 Internal Server Error, body: Error getting columns from ODBC 'std::exception. Code: 1001, type: nanodbc::database_error, e.what() = contrib/nanodbc/nanodbc/nanodbc.cpp:1046: 0100: [unixODBC][Driver Manager]Can't open lib '/usr/local/lib64/libclickhouseodbcw.so' : file not found (version 24.2.1.1182)'
. (RECEIVED_ERROR_FROM_REMOTE_IO_SERVER)
(query: select count() > 1 as ok from (select * from odbc('DSN={ClickHouse DSN (UNICODE)}','system','tables')))
```
Be aware, the container must restart between tests.
I suspect the missing library
```
ldd /usr/local/lib64/libclickhouseodbc.so
linux-vdso.so.1 (0x00007fff6c162000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x000071e991bb6000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x000071e991bb1000)
libodbcinst.so.2 => /lib/x86_64-linux-gnu/libodbcinst.so.2 (0x000071e991b9c000)
libicuuc.so.50 => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x000071e991b97000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x000071e991aae000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000071e990fd7000)
/lib64/ld-linux-x86-64.so.2 (0x000071e991bc2000)
libltdl.so.7 => /lib/x86_64-linux-gnu/libltdl.so.7 (0x000071e991aa3000)
```
Looks like it's related to https://github.com/ClickHouse/clickhouse-odbc/issues/428
Contributor guide
Research direction
Start by rerunning the documented Docker and curl reproduction, restarting the container between driver versions, then inspect the ldd output for libclickhouseodbc.so and libclickhouseodbcw.so. Compare 1.1.6 with 1.1.7 and later releases, using the linked issue 428 as context. Done means the ANSI and UNICODE ODBC queries work on Ubuntu 22.04 with a current release.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- c, docker, ubuntu
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100