1
- // Copyright (C) 2012 Xtensive LLC.
1
+ // Copyright (C) 2012 Xtensive LLC.
2
2
// All rights reserved.
3
3
// For conditions of distribution and use, see license.
4
4
// Created by: Denis Krjuchkov
@@ -12,6 +12,8 @@ namespace Xtensive.Sql.Drivers.SqlServer.v11
12
12
{
13
13
internal class Extractor : v10 . Extractor
14
14
{
15
+ private readonly Dictionary < int , Func < DbDataReader , int , long > > valueReaders ;
16
+
15
17
protected override void ExtractCatalogContents ( )
16
18
{
17
19
base . ExtractCatalogContents ( ) ;
@@ -24,6 +26,7 @@ private void ExtractSequences()
24
26
SELECT
25
27
schema_id,
26
28
name,
29
+ user_type_id,
27
30
start_value,
28
31
increment,
29
32
minimum_value,
@@ -44,14 +47,20 @@ ORDER BY
44
47
using ( var reader = cmd . ExecuteReader ( ) )
45
48
while ( reader . Read ( ) ) {
46
49
var currentSchema = GetSchema ( reader . GetInt32 ( 0 ) ) ;
47
- var sequence = currentSchema . CreateSequence ( reader . GetString ( 1 ) ) ;
50
+ var sequenceName = reader . GetString ( 1 ) ;
51
+ var sequence = currentSchema . CreateSequence ( sequenceName ) ;
48
52
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 ) ;
53
+
54
+ if ( ! valueReaders . TryGetValue ( reader . GetInt32 ( 2 ) , out var valueReader ) ) {
55
+ throw new ArgumentOutOfRangeException ( $ "Type of sequence '{ sequenceName } ' is not supported.") ;
56
+ }
57
+
58
+ descriptor . StartValue = valueReader ( reader , 3 ) ;
59
+ descriptor . Increment = valueReader ( reader , 4 ) ;
60
+ descriptor . MinValue = valueReader ( reader , 5 ) ;
61
+ descriptor . MaxValue = valueReader ( reader , 6 ) ;
62
+ descriptor . IsCyclic = reader . GetBoolean ( 7 ) ;
63
+ descriptor . LastValue = valueReader ( reader , 8 ) ;
55
64
}
56
65
}
57
66
@@ -64,6 +73,11 @@ protected override void RegisterReplacements(Dictionary<string, string> replacem
64
73
public Extractor ( SqlDriver driver )
65
74
: base ( driver )
66
75
{
76
+ valueReaders = new Dictionary < int , Func < DbDataReader , int , long > > ( 4 ) ;
77
+ valueReaders [ 48 ] = ( DbDataReader reader , int index ) => reader . GetByte ( index ) ;
78
+ valueReaders [ 52 ] = ( DbDataReader reader , int index ) => reader . GetInt16 ( index ) ;
79
+ valueReaders [ 56 ] = ( DbDataReader reader , int index ) => reader . GetInt32 ( index ) ;
80
+ valueReaders [ 127 ] = ( DbDataReader reader , int index ) => reader . GetInt64 ( index ) ;
67
81
}
68
82
}
69
83
}
0 commit comments