Skip to content

Commit

Permalink
Get column name of returned table when building table function structure
Browse files Browse the repository at this point in the history
  • Loading branch information
irwin-chequer committed Apr 25, 2024
1 parent fdc80c4 commit 6335389
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
10 changes: 10 additions & 0 deletions Qsi.PostgreSql/Analyzers/PgTableAnalyzer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,16 @@ protected override async Task<QsiTableStructure> BuildTableFunctionStructure(Tab
column.Name = outParam.Name;
}

var tableParams = funcDef.Parameters.WhereNotNull().Where(p => p.Mode is FunctionParameterMode.FuncParamTable);

foreach (var tableParam in tableParams)
{
count++;

var column = structure.NewColumn();
column.Name = tableParam.Name;
}

if (count == 0)
{
var returnType = funcDef.ReturnType.Value;
Expand Down
26 changes: 26 additions & 0 deletions Qsi.Tests/Vendor/PostgreSql/PostgreSqlTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -435,4 +435,30 @@ RETURNS TEXT AS $$
});
}
}

/// <summary>
/// 테이블 함수가 리턴하는 테이블의 컬럼 이름을 사용하는 경우에 대해 테스트를 수행합니다.
/// </summary>
[Test]
public async Task Test_TableFunctionWithColumnNameInReturnedTable()
{
const string CreateTableFunctionQuery = @"
CREATE OR REPLACE FUNCTION table_function_with_column_name_in_returned_table()
RETURNS TABLE(column1 text) AS $$
BEGIN
RETURN QUERY SELECT '1' AS column1;
END;
$$ LANGUAGE plpgsql;
";

var command = Connection.CreateCommand();
command.CommandText = CreateTableFunctionQuery;
await command.ExecuteNonQueryAsync();
const string Query = "select column1 from table_function_with_column_name_in_returned_table();";

Assert.DoesNotThrowAsync(async () =>
{
await Engine.Execute(new QsiScript(Query, QsiScriptType.Select), null);
});
}
}

0 comments on commit 6335389

Please sign in to comment.