protected override IReadOnlyList <OracleColumn> BuildColumns() { var columns = new List <OracleColumn>(); if (Type == ReferenceType.SchemaObject) { if (SchemaObject.GetTargetSchemaObject() is OracleDataObject dataObject) { columns.AddRange(dataObject.Columns.Values); } } else { var queryColumns = QueryBlocks.SelectMany(qb => qb.Columns) .Where(c => !c.IsAsterisk) .Select(c => c.ColumnDescription); columns.AddRange(queryColumns); } return(columns.AsReadOnly()); }
protected override IReadOnlyList <OracleColumn> BuildPseudocolumns() { var pseudocolumns = new List <OracleColumn>(); var table = SchemaObject.GetTargetSchemaObject() as OracleTable; if (Type != ReferenceType.SchemaObject || table == null) { return(pseudocolumns.AsReadOnly()); } if (table.Organization == OrganizationType.Heap || table.Organization == OrganizationType.Index) { var rowIdPseudocolumn = new OracleColumn(true) { Name = RowIdNormalizedName, DataType = new OracleDataType { FullyQualifiedName = OracleObjectIdentifier.Create(null, table.Organization == OrganizationType.Index ? TerminalValues.UniversalRowId : TerminalValues.RowIdDataType) } }; pseudocolumns.Add(rowIdPseudocolumn); } if (FlashbackOption == FlashbackOption.None || FlashbackOption == FlashbackOption.AsOf) { var rowSystemChangeNumberPseudocolumn = new OracleColumn(true) { Name = "\"ORA_ROWSCN\"", DataType = OracleDataType.NumberType }; pseudocolumns.Add(rowSystemChangeNumberPseudocolumn); } else if ((FlashbackOption & FlashbackOption.Versions) == FlashbackOption.Versions) { var flashbackVersionColumns = new[] { new OracleColumn(true) { Name = "\"VERSIONS_STARTTIME\"", DataType = OracleDataType.CreateTimestampDataType(0) }, new OracleColumn(true) { Name = "\"VERSIONS_ENDTIME\"", DataType = OracleDataType.CreateTimestampDataType(0) }, new OracleColumn(true) { Name = "\"VERSIONS_STARTSCN\"", DataType = OracleDataType.NumberType }, new OracleColumn(true) { Name = "\"VERSIONS_ENDSCN\"", DataType = OracleDataType.NumberType }, new OracleColumn(true) { Name = "\"VERSIONS_OPERATION\"", DataType = new OracleDataType { FullyQualifiedName = OracleObjectIdentifier.Create(null, TerminalValues.Varchar2), Unit = DataUnit.Byte, Length = 1 } }, new OracleColumn(true) { Name = "\"VERSIONS_XID\"", DataType = new OracleDataType { FullyQualifiedName = OracleObjectIdentifier.Create(null, TerminalValues.Raw), Length = 8 } } }; pseudocolumns.AddRange(flashbackVersionColumns); } return(pseudocolumns.AsReadOnly()); }