Skip to content

Commit bcfef98

Browse files
committed
Not only long sequences are extracted
1 parent a4b4f7b commit bcfef98

File tree

1 file changed

+19
-7
lines changed
  • Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v11

1 file changed

+19
-7
lines changed

Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v11/Extractor.cs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2012 Xtensive LLC.
1+
// Copyright (C) 2012 Xtensive LLC.
22
// All rights reserved.
33
// For conditions of distribution and use, see license.
44
// Created by: Denis Krjuchkov
@@ -12,6 +12,8 @@ namespace Xtensive.Sql.Drivers.SqlServer.v11
1212
{
1313
internal class Extractor : v10.Extractor
1414
{
15+
private readonly Dictionary<int, Func<DbDataReader, int, long>> valueReaders;
16+
1517
protected override void ExtractCatalogContents()
1618
{
1719
base.ExtractCatalogContents();
@@ -24,6 +26,7 @@ private void ExtractSequences()
2426
SELECT
2527
schema_id,
2628
name,
29+
user_type_id,
2730
start_value,
2831
increment,
2932
minimum_value,
@@ -46,12 +49,16 @@ ORDER BY
4649
var currentSchema = GetSchema(reader.GetInt32(0));
4750
var sequence = currentSchema.CreateSequence(reader.GetString(1));
4851
var descriptor = sequence.SequenceDescriptor;
49-
descriptor.StartValue = reader.GetInt64(2);
50-
descriptor.Increment = reader.GetInt64(3);
51-
descriptor.MinValue = reader.GetInt64(4);
52-
descriptor.MaxValue = reader.GetInt64(5);
53-
descriptor.IsCyclic = reader.GetBoolean(6);
54-
descriptor.LastValue = reader.GetInt64(7);
52+
53+
if (!valueReaders.TryGetValue(reader.GetInt32(2), out var valueReader))
54+
throw new ArgumentOutOfRangeException($"Type of sequence '{reader.GetString(1)}' is not supported");
55+
56+
descriptor.StartValue = valueReader(reader, 3);
57+
descriptor.Increment = valueReader(reader, 4);
58+
descriptor.MinValue = valueReader(reader, 5);
59+
descriptor.MaxValue = valueReader(reader, 6);
60+
descriptor.IsCyclic = reader.GetBoolean(7);
61+
descriptor.LastValue = valueReader(reader, 8);
5562
}
5663
}
5764

@@ -64,6 +71,11 @@ protected override void RegisterReplacements(Dictionary<string, string> replacem
6471
public Extractor(SqlDriver driver)
6572
: base(driver)
6673
{
74+
valueReaders = new Dictionary<int, Func<DbDataReader, int, long>>(4);
75+
valueReaders[48] = (DbDataReader reader, int index) => reader.GetByte(index);
76+
valueReaders[52] = (DbDataReader reader, int index) => reader.GetInt16(index);
77+
valueReaders[56] = (DbDataReader reader, int index) => reader.GetInt32(index);
78+
valueReaders[127] = (DbDataReader reader, int index) => reader.GetInt64(index);
6779
}
6880
}
6981
}

0 commit comments

Comments
 (0)