apache / apache/iotdb

[Bug] findColumn throws NullPointerException instead of SQLException for an unknown column name

Open Beginner friendly
#18,250 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
6.4k
Forks
1.2k
Avg merge
1d 23h
Merged PRs (30d)
115

Description

### Search before asking

- [x] I searched in the [issues](https://github.com/apache/iotdb/issues) and found nothing similar.

### Version

`master` (2.0.x). The affected code is also present in released 2.0.x versions.

### Describe the bug and provide the minimal reproduce step

`IoTDBRpcDataSet.findColumn(String)` returns `columnOrdinalMap.get(columnName)` directly. When the column name is not present, `Map.get` returns `null`, which auto-unboxes to `int` and throws a `NullPointerException`. The JDBC contract (`ResultSet.findColumn`) requires a `SQLException` when the column is not found, and the sibling `findColumnNameByIndex` already guards its input and throws — the guard was simply omitted for `findColumn`.

This surfaces at the JDBC boundary (`IoTDBJDBCResultSet.findColumn`) and through `SessionDataSet.DataIterator.findColumn`, both of which delegate to the method above. The same missing guard also exists in `IoTDBJDBCDataSet.findColumn`.

Minimal reproduce step:

1. Execute any query over JDBC and obtain the `ResultSet`.
2. Call `resultSet.findColumn("a_column_name_that_is_not_in_the_result")`.
3. A raw `NullPointerException` is thrown instead of a `SQLException`.

### What did you expect to see?

`findColumn` throws a `SQLException` (at the JDBC boundary) that names the missing column, per the `ResultSet.findColumn` contract.

### What did you see instead?

A `NullPointerException`, from unboxing the `null` returned by the column-ordinal map lookup.

### Anything else?

The fix mirrors the existing `findColumnNameByIndex` guard: throw a checked `StatementExecutionException` at the rpc layer (reusing the existing `UNKNOWN_COLUMN_NAME` message), converted to `SQLException` at the JDBC boundary. I'd like to work on this and will open a PR (which also fixes the identical, currently-unused-but-public `IoTDBJDBCDataSet.findColumn`).

### Are you willing to submit a PR?

- [x] I'm willing to submit a PR!

Contributor guide

Open the contributing guide

Research direction

Start at IoTDBRpcDataSet.findColumn and compare it with the existing findColumnNameByIndex guard, then trace the JDBC boundary through IoTDBJDBCResultSet.findColumn and SessionDataSet.DataIterator.findColumn. Check IoTDBJDBCDataSet.findColumn as well; done means an unknown column produces a SQLException naming the missing column rather than a NullPointerException.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
database
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
78/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.