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,
@@ -44,14 +47,20 @@ ORDER BY
4447 using ( var reader = cmd . ExecuteReader ( ) )
4548 while ( reader . Read ( ) ) {
4649 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 ) ;
4852 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 ) ;
5564 }
5665 }
5766
@@ -64,6 +73,11 @@ protected override void RegisterReplacements(Dictionary<string, string> replacem
6473 public Extractor ( SqlDriver driver )
6574 : base ( driver )
6675 {
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 ) ;
6781 }
6882 }
6983}
0 commit comments