apache / apache/arrow-java

JDBC driver does not support compressed IPC streams (ZSTD, LZ4) [FlightSQL]

Open
#926 2 comments 0 reactions 0 assignees View on GitHub
help wanted Type: bug
Dominant language
Java
Stars
94
Forks
152
Avg merge
3d 16h
Merged PRs (30d)
11

Description

### Describe the bug, including details regarding any error messages, version, and platform.

**Component:** Flight SQL JDBC Driver
**Version:** 18.3.0

The `flight-sql-jdbc-driver` shaded JAR does not include compression support, causing connection failures when the Flight SQL server sends compressed IPC streams using ZSTD or LZ4 compression.

### Expected Behavior
The JDBC driver should be able to handle compressed IPC streams from Flight SQL servers, similar to how the direct Flight SQL client (`flight-sql` artifact) handles them.

### Actual Behavior
Connection fails with one of these errors depending on compression type used by server:

**ZSTD compression:**
```
java.lang.IllegalArgumentException: Please add arrow-compression module to use CommonsCompressionFactory for ZSTD
at org.apache.arrow.driver.jdbc.shaded.org.apache.arrow.vector.compression.NoCompressionCodec$Factory.createCodec(NoCompressionCodec.java:63)
```

**LZ4 compression:**
```
Arrow error: Invalid argument error: lz4 IPC compression requires the lz4 feature
```

### Steps to Reproduce

1. Set up a Flight SQL server that uses compression (ZSTD or LZ4)
2. Try to connect using the JDBC driver:
String url = "jdbc:arrow-flight-sql://localhost:5127?useEncryption=false";
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM table");
// Fails with compression error
### Workaround
Currently, either:
1. Disable compression on the server side, OR
2. Use the direct Flight SQL client API (`flight-sql` and `flight-core` artifacts) instead of JDBC

### Additional Context
- Direct Flight SQL client works fine with compression
- This affects any Flight SQL server that enables compression by default
- JDBC drivers should be able to handle all protocol features transparently

Contributor guide

Open the contributing guide

Research direction

Start by comparing the dependencies included in the flight-sql-jdbc-driver shaded JAR with the flight-sql and flight-core artifacts, then reproduce the JDBC connection against a server using ZSTD or LZ4 compression. Done means the JDBC driver connects and reads the result without either compression error.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.