Skip to content

[fix](nereids) Fix table name case-sensitivity issue when binding columns for external tables#60636

Merged
CalvinKirs merged 1 commit intoapache:tmp_tpc_preview4-myskfrom
CalvinKirs:tmp_tpc_preview4-mysk-fix-query
Feb 10, 2026
Merged

[fix](nereids) Fix table name case-sensitivity issue when binding columns for external tables#60636
CalvinKirs merged 1 commit intoapache:tmp_tpc_preview4-myskfrom
CalvinKirs:tmp_tpc_preview4-mysk-fix-query

Conversation

@CalvinKirs
Copy link
Member

Proposed changes

Fix the issue where column binding fails for external tables (Hive, Iceberg, etc.) when users reference table names with original case in SQL.
Problem
When querying external Hive tables, the following SQL fails: SELECT * FROM TPCH50.DIM_LINEITEM_CORE_OD001_V1
WHERE DIM_LINEITEM_CORE_OD001_V1.dt = '20260108' LIMIT 10; -- Error: Unknown column 'dt' in 'DIM_LINEITEM_CORE_OD001_V1' in FILTER clause But using an alias works:
SELECT * FROM TPCH50.DIM_LINEITEM_CORE_OD001_V1 AS DIM_LINEITEM_CORE_OD001_V1 WHERE DIM_LINEITEM_CORE_OD001_V1.dt = '20260108' LIMIT 10; -- Success
Root Cause

  1. Hive Metastore stores table names in lowercase (e.g., dim_lineitem_core_od001_v1)
  2. The slot qualifier uses table.getName() which returns the lowercase HMS table name
  3. Users reference the table with original case in SQL (e.g., DIM_LINEITEM_CORE_OD001_V1.dt)
  4. ExpressionAnalyzer.sameTableName() performs case-sensitive comparison when lower_case_table_names != 1, causing binding to fail Solution
    Change sameTableName() to always use case-insensitive comparison for table names. This is consistent with:
  • Catalog name comparison (already case-insensitive at line 1079)
  • Database name comparison (already case-insensitive at line 1092)

What problem does this PR solve?

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

Release note

None

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason
  • Behavior changed:

    • No.
    • Yes.
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

…umns for external tables

 Proposed changes
Fix the issue where column binding fails for external tables (Hive, Iceberg, etc.) when users reference table names with original case in SQL.
 Problem
When querying external Hive tables, the following SQL fails:
SELECT * FROM TPCH50.DIM_LINEITEM_CORE_OD001_V1
WHERE DIM_LINEITEM_CORE_OD001_V1.dt = '20260108' LIMIT 10;
-- Error: Unknown column 'dt' in 'DIM_LINEITEM_CORE_OD001_V1' in FILTER clause
But using an alias works:
SELECT * FROM TPCH50.DIM_LINEITEM_CORE_OD001_V1 AS DIM_LINEITEM_CORE_OD001_V1
WHERE DIM_LINEITEM_CORE_OD001_V1.dt = '20260108' LIMIT 10;
-- Success
Root Cause
1. Hive Metastore stores table names in lowercase (e.g., dim_lineitem_core_od001_v1)
2. The slot qualifier uses table.getName() which returns the lowercase HMS table name
3. Users reference the table with original case in SQL (e.g., DIM_LINEITEM_CORE_OD001_V1.dt)
4. ExpressionAnalyzer.sameTableName() performs case-sensitive comparison when lower_case_table_names != 1, causing binding to fail
Solution
Change sameTableName() to always use case-insensitive comparison for table names. This is consistent with:
- Catalog name comparison (already case-insensitive at line 1079)
- Database name comparison (already case-insensitive at line 1092)
@Thearas
Copy link
Contributor

Thearas commented Feb 10, 2026

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@CalvinKirs CalvinKirs merged commit d09a137 into apache:tmp_tpc_preview4-mysk Feb 10, 2026
5 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants