Пример #1
0
        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());
        }
Пример #2
0
        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());
        }