Skip to content

[editor] Support autocomplete for CTE tables#4342

Open
alexandrefimov wants to merge 1 commit into
cloudera:masterfrom
alexandrefimov:hue-3553-cte-autocomplete
Open

[editor] Support autocomplete for CTE tables#4342
alexandrefimov wants to merge 1 commit into
cloudera:masterfrom
alexandrefimov:hue-3553-cte-autocomplete

Conversation

@alexandrefimov

Copy link
Copy Markdown

What changed

Fixes #3553.

This PR adds autocomplete support for columns exposed by common table expressions (CTEs), e.g.:

WITH t1 AS (SELECT id, name FROM foo)
SELECT t1.|
FROM t1

The autocomplete runtime can now resolve CTE relations and suggest projected columns from the CTE instead of treating the CTE name as an unresolved physical table.

Supported cases

  • CTEs selecting explicit columns:
    • WITH t1 AS (SELECT id, name FROM foo) SELECT | FROM t1
  • Qualified CTE references:
    • WITH t1 AS (...) SELECT t1.| FROM t1
  • SELECT * expansion from CTE source tables
  • Chained CTEs:
    • WITH t1 AS (...), t2 AS (SELECT * FROM t1) SELECT | FROM t2
  • Explicit CTE column aliases:
    • WITH t1 (cte_id, cte_name) AS (...) SELECT | FROM t1
  • Quoted/reserved CTE column aliases
  • Hive VALUES CTEs with explicit column aliases
  • Correct CTE scope ordering:
    • later CTEs are not visible inside earlier CTE definitions

Implementation notes

The parser now surfaces CTE column alias metadata through commonTableExpressions.

The autocomplete runtime uses a shared CTE resolver in cteAutocompleteUtils.ts, used by both:

  • legacy sql/autocompleteResults.js
  • TypeScript AutocompleteResults.ts

The resolver handles CTE lookup, source column expansion, explicit alias replacement, chained CTEs, type filtering, and recursion protection.

Why is this PR relatively large?

Most of the diff is generated parser output. Hue keeps generated autocomplete/syntax parser files checked into the repository, so the .jison grammar changes regenerate parser files for:

  • generic autocomplete/syntax parsers
  • Hive autocomplete/syntax parsers
  • Impala autocomplete/syntax parsers

Generated parser files account for most of the changed lines. The main hand-written review surface is concentrated in:

  • desktop/core/src/desktop/js/parse/sql/generic/jison/select/cte_column_aliases.jison
  • desktop/core/src/desktop/js/parse/sql/hive/jison/sql_main.jison
  • desktop/core/src/desktop/js/sql/cteAutocompleteUtils.ts
  • desktop/core/src/desktop/js/sql/autocompleteResults.js
  • desktop/core/src/desktop/js/apps/editor/components/aceEditor/autocomplete/AutocompleteResults.ts
  • focused parser/runtime tests

Reviewers can focus primarily on the grammar changes, CTE resolver, runtime integration, and tests. The generated parser files are included to keep checked-in parser output in sync.

Test plan

npm run test -- \
  desktop/core/src/desktop/js/sql/autocompleteResults.test.js \
  desktop/core/src/desktop/js/apps/editor/components/aceEditor/autocomplete/AutocompleteResults.test.ts \
  desktop/core/src/desktop/js/parse/sql/generic/genericAutocompleteParser.test.ts \
  desktop/core/src/desktop/js/parse/sql/generic/genericSyntaxParser.test.js \
  desktop/core/src/desktop/js/parse/sql/hive/test/hiveAutocompleteParser.Select.test.js \
  desktop/core/src/desktop/js/parse/sql/impala/test/impalaAutocompleteParser.Select.test.js \
  --runInBand

Result: 6 suites passed, 1716 tests passed, 8 skipped.

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.

Support Autocomplete for CTE tables

1 participant