kz930 opened a new pull request, #8488: URL: https://github.com/apache/texera/pull/8488
### What changes were proposed in this PR? The runtime now tells an executor what each input port was declared to carry, and `TableOperator` falls back to that when a port finishes with no rows. `Operator` gains an `input_schemas` mapping, keyed by port index. `DataProcessor` writes the finishing port's schema into it just before calling `on_finish`, reading it from the input manager's own port; a source has no input port to ask, so it is left alone. `TableOperator.on_finish` uses it only when there are no tuples to read column names off, which is the only case where the tuples do not already say the same thing. `Table.empty_of` builds that frame through Arrow, so each column carries the dtype it would have had with rows in it rather than object. ### Any related issues, documentation, discussions? Closes #8487 ### How was this PR tested? A new case in `TestTableOperator`, `test_on_finish_with_no_rows_keeps_the_declared_columns`, gives a port an INTEGER and a STRING column, finishes it with no rows, and asserts the operator receives both columns, an empty frame, and `int32` for the integer one. Removing the fallback turns it red on the missing columns. The rest of `amber/src/test/python/core` passes unchanged, 1107 tests. The one failure is `test_iceberg_rest_catalog_integration`, which needs a running catalog and fails the same way without this change. ### Was this PR authored or co-authored using generative AI tooling? Generated-by: Claude Code (Claude Opus 5) 🤖 Generated with [Claude Code](https://claude.com/claude-code) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
