diff --git a/source-sqlserver/.snapshots/TestComputedColumn-discovery b/source-sqlserver/.snapshots/TestComputedColumn-discovery index 6d15071f4..2c9a6817f 100644 --- a/source-sqlserver/.snapshots/TestComputedColumn-discovery +++ b/source-sqlserver/.snapshots/TestComputedColumn-discovery @@ -28,10 +28,6 @@ Binding 0: "null" ] }, - "computed": { - "type": "string", - "description": "(source type: non-nullable varchar(64))" - }, "id": { "type": "integer", "description": "(source type: non-nullable int)" diff --git a/source-sqlserver/discovery.go b/source-sqlserver/discovery.go index f905c4a19..2c1034963 100644 --- a/source-sqlserver/discovery.go +++ b/source-sqlserver/discovery.go @@ -60,10 +60,6 @@ func (db *sqlserverDatabase) discoverTables(ctx context.Context) (map[sqlcapture table.OmitBinding = true } tableMap[streamID] = table - - if details, ok := table.ExtraDetails.(*sqlserverTableDiscoveryDetails); ok { - details.ComputedColumns = computedColumns[streamID] - } } for _, column := range columns { var streamID = sqlcapture.JoinStreamID(column.TableSchema, column.TableName) @@ -99,6 +95,18 @@ func (db *sqlserverDatabase) discoverTables(ctx context.Context) (map[sqlcapture tableMap[id] = info } + // Add computed columns information + for streamID, table := range tableMap { + if details, ok := table.ExtraDetails.(*sqlserverTableDiscoveryDetails); ok { + details.ComputedColumns = computedColumns[streamID] + } + for _, columnName := range computedColumns[streamID] { + var info = table.Columns[columnName] + info.OmitColumn = true + table.Columns[columnName] = info + } + } + // For tables which have no primary key but have a valid secondary index, // fill in that secondary index as the 'primary key' for our purposes. for streamID, indexColumns := range secondaryIndexes { diff --git a/sqlcapture/discovery.go b/sqlcapture/discovery.go index 5a5737cc9..d935bccc9 100644 --- a/sqlcapture/discovery.go +++ b/sqlcapture/discovery.go @@ -82,6 +82,10 @@ func DiscoverCatalog(ctx context.Context, db Database) ([]*pc.Response_Discovere // Build `properties` schemas for each table column. var properties = make(map[string]*jsonschema.Schema) for _, column := range table.Columns { + if column.OmitColumn { + continue // Skip adding properties corresponding to omitted columns + } + var jsonType, err = db.TranslateDBToJSONType(column) if err != nil { // Unhandled types are translated to the catch-all schema {} but with diff --git a/sqlcapture/interface.go b/sqlcapture/interface.go index c2a87b099..c54c20e22 100644 --- a/sqlcapture/interface.go +++ b/sqlcapture/interface.go @@ -230,4 +230,5 @@ type ColumnInfo struct { IsNullable bool // True if the column can contain nulls. DataType interface{} // The datatype of this column. May be a string name or a more complex struct. Description *string // Stored description of the column, if any. + OmitColumn bool // True if the column should be omitted from discovery JSON schema generation. }