PHOENIX-6644 Fix ResultSet.getString(columnName) for view index queries with constant columns #2298
+373
−2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PHOENIX-6644 Fix ResultSet.getString(columnName) for view index queries with constant columns
Design doc - link
When a view has constant columns in its WHERE clause (e.g., WHERE status='ACTIVE')
and an index is used, ResultSet.getString("status") throws ColumnNotFoundException
while getString(1) works.
Root cause: IndexStatementRewriter converts view constants to literals during
optimization, losing the original column name from RowProjector.reverseIndex.
Solution: Merge column name mappings from the original data plan projector into
the optimized index plan projector in QueryCompiler.
Changes:
for immutable merging during construction
additional column name mappings without post-construction mutation
compileSingleFlatQuery() when dataPlans contains the optimized TableRef
basic scenario, multiple constants, wildcards, PreparedStatement, subqueries)
Testing: 6 new tests + existing suite (39 tests pass: ViewIndexIT, GlobalIndexOptimizationIT)