[Bug] ResultSetMetaData.getCatalogName throws IndexOutOfBoundsException instead of SQLException for out-of-range columns
- Langage dominant
- Java
- Étoiles
- 6.4k
- Forks
- 1.2k
- Merge moyen
- 1 j 23 h
- PR mergées (30 j)
- 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
`IoTDBResultMetadata.getCatalogName(int column)` reads `columnInfoList.get(column - 1)` before its range check runs, so an out-of-range column index throws a raw `IndexOutOfBoundsException` instead of the `SQLException` required by the `ResultSetMetaData` contract. The subsequent range check (`if (column < 1 || column > columnInfoList.size())`) is therefore unreachable for an out-of-range column. The seven sibling `ResultSetMetaData` accessors in the same class all call `checkColumnIndex(column)` first; `getCatalogName` is the only one missing that guard.
Minimal reproduce step:
1. Obtain a `ResultSetMetaData` from any (non-empty) query result.
2. Call `metaData.getCatalogName(0)` (or any column index `<= 0` or `> column count`).
3. A raw `IndexOutOfBoundsException` is thrown instead of a `SQLException`.
### What did you expect to see?
`getCatalogName` throws a `SQLException` for an out-of-range column index, consistent with the `ResultSetMetaData` contract and with the sibling accessors.
### What did you see instead?
A raw `java.lang.IndexOutOfBoundsException` from `columnInfoList.get(column - 1)`.
### Anything else?
The fix is to call `checkColumnIndex(column)` first, as the sibling accessors already do — it throws `SQLException` on `column <= 0`, `column > size`, and an empty column list. I'd like to work on this and will open a PR.
### Are you willing to submit a PR?
- [x] I'm willing to submit a PR!
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez dans la classe qui contient IoTDBResultMetadata.getCatalogName(int) et comparez-la aux sept accesseurs frères de ResultSetMetaData qui appellent d’abord checkColumnIndex(column). Reproduisez le problème avec getCatalogName(0) ou une autre colonne hors limites, puis vérifiez que les index invalides produisent systématiquement SQLException plutôt que IndexOutOfBoundsException.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java
- Domaine
- databases
- Type d'issue
- Bug
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Activité
- Calme
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 78/100