ClickHouse / ClickHouse/clickhouse-odbc

The last working release on Ubuntu 22.04 is 1.1.6

Open
#439 0 comments 0 reactions 0 assignees View on GitHub
build
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.