Example #1
0
        private void GetSequences()
        {
            var command = _connection.CreateCommand();

            command.CommandText = @"SELECT name,
                        is_cycling,
                        CAST(minimum_value AS bigint) as [minimum_value],
                        CAST(maximum_value AS bigint) as [maximum_value],
                        CAST(start_value AS bigint) as [start_value],
                        CAST(increment AS int) as [increment],
                        TYPE_NAME(user_type_id) as [type_name],
                        OBJECT_SCHEMA_NAME(object_id) AS [schema_name]
                        FROM sys.sequences";

            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var sequence = new SequenceModel
                    {
                        Database    = _databaseModel,
                        SchemaName  = reader.GetValueOrDefault <string>("schema_name"),
                        Name        = reader.GetValueOrDefault <string>("name"),
                        DataType    = reader.GetValueOrDefault <string>("type_name"),
                        IsCyclic    = reader.GetValueOrDefault <bool?>("is_cycling"),
                        IncrementBy = reader.GetValueOrDefault <int?>("increment"),
                        Start       = reader.GetValueOrDefault <long?>("start_value"),
                        Min         = reader.GetValueOrDefault <long?>("minimum_value"),
                        Max         = reader.GetValueOrDefault <long?>("maximum_value")
                    };

                    Logger.LogDebug(
                        RelationalDesignEventId.FoundSequence,
                        () => SqlServerDesignStrings.FoundSequence(
                            sequence.SchemaName, sequence.Name, sequence.DataType, sequence.IsCyclic,
                            sequence.IncrementBy, sequence.Start, sequence.Min, sequence.Max));

                    if (string.IsNullOrEmpty(sequence.Name))
                    {
                        Logger.LogWarning(
                            RelationalDesignEventId.SequenceMustBeNamedWarning,
                            () => RelationalDesignStrings.SequencesRequireName);
                        continue;
                    }

                    if (_defaultSequenceMinMax.ContainsKey(sequence.DataType))
                    {
                        var defaultMin = _defaultSequenceMinMax[sequence.DataType][0];
                        sequence.Min   = sequence.Min == defaultMin ? null : sequence.Min;
                        sequence.Start = sequence.Start == defaultMin ? null : sequence.Start;

                        var defaultMax = _defaultSequenceMinMax[sequence.DataType][1];
                        sequence.Max = sequence.Max == defaultMax ? null : sequence.Max;
                    }

                    _databaseModel.Sequences.Add(sequence);
                }
            }
        }