Skip to content

Commit c236b74

Browse files
orisanokyleconroy
andauthored
fix(engine/sqlite): fix table_alias rules (#2465)
* fix(engine/sqlite): fix table_alias rules changed rules to conform to fallback directive behavior fix #2271 * test: update endtoend * Update parser code --------- Co-authored-by: Kyle Conroy <kyle@sqlc.dev>
1 parent 5ffe722 commit c236b74

File tree

8 files changed

+2878
-2429
lines changed

8 files changed

+2878
-2429
lines changed

internal/endtoend/testdata/join_left/sqlite/go/query.sql.go

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/endtoend/testdata/join_left/sqlite/query.sql

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,10 @@ FROM users_2 AS u
108108
LEFT JOIN media AS m
109109
ON u.user_avatar_id = m.media_id
110110
WHERE u.user_id != @user_id;
111+
112+
-- name: GetSuggestedUsersByID2 :many
113+
SELECT users_2.user_id
114+
FROM users_2
115+
LEFT JOIN media AS m
116+
ON user_avatar_id = m.media_id
117+
WHERE user_id != @user_id;

internal/engine/sqlite/convert.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -791,6 +791,10 @@ func (c *cc) convertTablesOrSubquery(n []parser.ITable_or_subqueryContext) []ast
791791
alias := from.Table_alias().GetText()
792792
rv.Alias = &ast.Alias{Aliasname: &alias}
793793
}
794+
if from.Table_alias_fallback() != nil {
795+
alias := identifier(from.Table_alias_fallback().GetText())
796+
rv.Alias = &ast.Alias{Aliasname: &alias}
797+
}
794798

795799
tables = append(tables, rv)
796800
} else if from.Table_function_name() != nil {

internal/engine/sqlite/parser/SQLiteParser.g4

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -430,17 +430,15 @@ compound_select_stmt:
430430
)+ order_by_stmt? limit_stmt?
431431
;
432432

433-
table_or_subquery: (
434-
(schema_name DOT)? table_name (AS_? table_alias)? (
435-
INDEXED_ BY_ index_name
436-
| NOT_ INDEXED_
437-
)?
438-
)
439-
| (schema_name DOT)? table_function_name OPEN_PAR expr (COMMA expr)* CLOSE_PAR (
440-
AS_? table_alias
441-
)?
433+
table_or_subquery:
434+
(schema_name DOT)? table_name (AS_? table_alias)? (INDEXED_ BY_ index_name | NOT_ INDEXED_)?
435+
| (schema_name DOT)? table_function_name OPEN_PAR expr (COMMA expr)* CLOSE_PAR (AS_? table_alias)?
442436
| OPEN_PAR (table_or_subquery (COMMA table_or_subquery)* | join_clause) CLOSE_PAR
443437
| OPEN_PAR select_stmt CLOSE_PAR (AS_? table_alias)?
438+
| (schema_name DOT)? table_name (AS_? table_alias_fallback)? (INDEXED_ BY_ index_name | NOT_ INDEXED_)?
439+
| (schema_name DOT)? table_function_name OPEN_PAR expr (COMMA expr)* CLOSE_PAR (AS_? table_alias_fallback)?
440+
| OPEN_PAR (table_or_subquery (COMMA table_or_subquery)* | join_clause) CLOSE_PAR
441+
| OPEN_PAR select_stmt CLOSE_PAR (AS_? table_alias_fallback)?
444442
;
445443

446444
result_column:
@@ -880,9 +878,9 @@ savepoint_name:
880878
any_name
881879
;
882880

883-
table_alias:
884-
any_name
885-
;
881+
table_alias: IDENTIFIER | STRING_LITERAL;
882+
883+
table_alias_fallback: any_name;
886884

887885
transaction_name:
888886
any_name

internal/engine/sqlite/parser/SQLiteParser.interp

Lines changed: 2 additions & 1 deletion
Large diffs are not rendered by default.

internal/engine/sqlite/parser/sqlite_parser.go

Lines changed: 2812 additions & 2416 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/engine/sqlite/parser/sqliteparser_base_listener.go

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/engine/sqlite/parser/sqliteparser_listener.go

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)