## Code Analysis ### Generated marker is populated, but the expression field is not `server/tables/information_schema/columns_table.go:131-145` ```go func getRowFromColumn(ctx *sql.Context, curOrdPos int, col *sql.Column, catName, schName, tblName string) sql.Row { var ( ordinalPos = int32(curOrdPos + 1) nullable = "NO" isGenerated = "NEVER" ) if col.Generated != nil { isGenerated = "ALWAYS" } ``` The row builder correctly maps a non-nil `col.Generated` value to `is_generated = ALWAYS`. `server/tables/information_schema/columns_table.go:187-197` ```go "NO", // is_self_referencing TODO "NO", // is_identity TODO nil, // identity_generation TODO nil, // identity_start TODO nil, // identity_increment TODO nil, // identity_maximum TODO nil, // identity_minimum TODO "NO", // identity_cycle TODO isGenerated, // is_generated nil, // generation_expression TODO "YES", // is_updatable ``` The same row always supplies `nil` for `generation_expression`, so a generated column's expression cannot be returned through `information_schema.columns`. This source path directly explains the observed blank value while preserving the correct generated marker. ### Observed catalog readback The test created the generated table, added the regular column, and queried both catalog views. The command completed successfully. ```text # REV-4 generated_catalog metadata regression DROP TABLE CREATE TABLE ALTER TABLE # information_schema.columns column_name | is_generated | generation_expression -------------+--------------+----------------------- id | NEVER | source | NEVER | result | ALWAYS | extra | NEVER | (4 rows) # pg_attribute column_name | attgenerated -------------+-------------- id | source | result | s extra | (4 rows) # psql_exit=0 ``` ### Result The runtime readback confirms that `generated_catalog.result` is recognized as generated (`ALWAYS`, `attgenerated = s`) but has an empty `generation_expression`. The source row construction contains the corresponding unconditional `nil`, supporting the reported metadata defect. ### Test context The captured test output reports no mocks, bypasses, or forced faults. The available evidence includes the catalog readback and source-backed causal analysis; it does not include the original SQL command text.