4
4
// Created by: Denis Krjuchkov
5
5
// Created: 2012.04.05
6
6
7
+ using System ;
7
8
using System . Collections . Generic ;
8
9
using System . Data . Common ;
9
10
using System . Threading ;
@@ -13,6 +14,8 @@ namespace Xtensive.Sql.Drivers.SqlServer.v11
13
14
{
14
15
internal class Extractor : v10 . Extractor
15
16
{
17
+ private readonly Dictionary < int , Func < DbDataReader , int , long > > valueReaders ;
18
+
16
19
protected override void ExtractCatalogContents ( ExtractionContext context )
17
20
{
18
21
base . ExtractCatalogContents ( context ) ;
@@ -57,6 +60,7 @@ private string BuildExtractSequencesQuery(ExtractionContext context)
57
60
SELECT
58
61
schema_id,
59
62
name,
63
+ user_type_id,
60
64
start_value,
61
65
increment,
62
66
minimum_value,
@@ -74,15 +78,22 @@ ORDER BY
74
78
75
79
private void ReadSequenceData ( DbDataReader reader , ExtractionContext context )
76
80
{
81
+
77
82
var currentSchema = context . SchemaIndex [ reader . GetInt32 ( 0 ) ] ;
78
- var sequence = currentSchema . CreateSequence ( reader . GetString ( 1 ) ) ;
83
+ var sequenceName = reader . GetString ( 1 ) ;
84
+ var sequence = currentSchema . CreateSequence ( sequenceName ) ;
79
85
var descriptor = sequence . SequenceDescriptor ;
80
- descriptor . StartValue = reader . GetInt64 ( 2 ) ;
81
- descriptor . Increment = reader . GetInt64 ( 3 ) ;
82
- descriptor . MinValue = reader . GetInt64 ( 4 ) ;
83
- descriptor . MaxValue = reader . GetInt64 ( 5 ) ;
84
- descriptor . IsCyclic = reader . GetBoolean ( 6 ) ;
85
- descriptor . LastValue = reader . GetInt64 ( 7 ) ;
86
+
87
+ if ( ! valueReaders . TryGetValue ( reader . GetInt32 ( 2 ) , out var valueReader ) ) {
88
+ throw new ArgumentOutOfRangeException ( $ "Type of sequence '{ sequenceName } ' is not supported.") ;
89
+ }
90
+
91
+ descriptor . StartValue = valueReader ( reader , 3 ) ;
92
+ descriptor . Increment = valueReader ( reader , 4 ) ;
93
+ descriptor . MinValue = valueReader ( reader , 5 ) ;
94
+ descriptor . MaxValue = valueReader ( reader , 6 ) ;
95
+ descriptor . IsCyclic = reader . GetBoolean ( 7 ) ;
96
+ descriptor . LastValue = valueReader ( reader , 8 ) ;
86
97
}
87
98
88
99
@@ -95,6 +106,11 @@ protected override void RegisterReplacements(ExtractionContext context)
95
106
public Extractor ( SqlDriver driver )
96
107
: base ( driver )
97
108
{
109
+ valueReaders = new Dictionary < int , Func < DbDataReader , int , long > > ( 4 ) ;
110
+ valueReaders [ 48 ] = ( DbDataReader reader , int index ) => reader . GetByte ( index ) ;
111
+ valueReaders [ 52 ] = ( DbDataReader reader , int index ) => reader . GetInt16 ( index ) ;
112
+ valueReaders [ 56 ] = ( DbDataReader reader , int index ) => reader . GetInt32 ( index ) ;
113
+ valueReaders [ 127 ] = ( DbDataReader reader , int index ) => reader . GetInt64 ( index ) ;
98
114
}
99
115
}
100
- }
116
+ }
0 commit comments