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