Skip to content

Conversation

@lemonadern
Copy link
Collaborator

@lemonadern lemonadern commented Jul 25, 2025

Summary

  1. TableFuncElementList をフラット化しました
  2. 変換処理の false-positive を検出できるようテストを改善しました

1. フラット化

commit: 13a4f5e

TableFuncElementList はテーブル関数の名前付きエイリアスで、列の型を明示する場合に使われる構文です。

TableFuncElementList:
			TableFuncElement
				{
					$$ = list_make1($1);
				}
			| TableFuncElementList ',' TableFuncElement
				{
					$$ = lappend($1, $3);
				}
		;

source: https://github.com/postgres/postgres/blob/641f20d4c433b66df2928408fb2b44bd165c2329/src/backend/parser/gram.y#L14159-L14168

このリストがネストしないような変換処理を加えました。

利用例:

select * from unnest(a) as (x int, y text);
as (x int, y text)
^^^^^^^^^^^^^^^^^^
...
func_alias_clause
-+AS "as"
-+ColId
---+IDENT "t"
-+LParen "("
-+TableFuncElementList // here
---+TableFuncElement
-----+ColId
-------+IDENT "x"
-----+Typename
-------+SimpleTypename
---------+Numeric
-----------+INT_P "int"
---+Comma ","
---+TableFuncElement
-----+ColId
-------+IDENT "y"
-----+Typename
-------+SimpleTypename
---------+GenericType
-----------+type_function_name
-------------+unreserved_keyword
---------------+TEXT_P "text"
-+RParen ")"
...

2. テスト改善

commit: 5a97979

これまで、flatten 系のテストは木の変換後にネストしたノードが無いことを確認しているのみでした。そのためそもそも対象ノードがネストしていないパターンがあっても気づけない構成になっていました。

今回の変更では、変換前の木の構造に対するチェックを入れることで、このモジュールで実行される変換処理が意味のあるものであることを保証するようにしました。

#[test]
fn no_nested_table_func_element_list() {
    let input = "select * from unnest(a) as (x int, y text);";
    let root = cst::parse(input).unwrap();

    // フラット化対象があることを確認 (今回の変更で追加したもの)
    assert_direct_nested_kind(&root, SyntaxKind::TableFuncElementList);

    // 変換処理(テスト対象)
    let (new_root, _) = get_ts_tree_and_range_map(input, &root);

    // 本命の assert
    assert_no_direct_nested_kind(&new_root, SyntaxKind::TableFuncElementList);
}

Ensure that nested structures exist before conversion by adding
assert_direct_nested_kind checks to all no_nested_* tests. This
prevents false positives where tests pass on already-flat structures.
@lemonadern lemonadern changed the title Flatten table func element list (including test improvement) Flatten TableFuncElementList (including test improvement) Jul 25, 2025
@ppputtyo ppputtyo merged commit 449673d into main Jul 25, 2025
1 check 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.

3 participants