44// Created by: Denis Krjuchkov
55// Created: 2012.04.05
66
7+ using System ;
78using System . Collections . Generic ;
89using System . Data . Common ;
910using System . Threading ;
@@ -13,6 +14,8 @@ namespace Xtensive.Sql.Drivers.SqlServer.v11
1314{
1415 internal class Extractor : v10 . Extractor
1516 {
17+ private readonly Dictionary < int , Func < DbDataReader , int , long > > valueReaders ;
18+
1619 protected override void ExtractCatalogContents ( ExtractionContext context )
1720 {
1821 base . ExtractCatalogContents ( context ) ;
@@ -57,6 +60,7 @@ private string BuildExtractSequencesQuery(ExtractionContext context)
5760 SELECT
5861 schema_id,
5962 name,
63+ user_type_id,
6064 start_value,
6165 increment,
6266 minimum_value,
@@ -74,15 +78,22 @@ ORDER BY
7478
7579 private void ReadSequenceData ( DbDataReader reader , ExtractionContext context )
7680 {
81+
7782 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 ) ;
7985 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 ) ;
8697 }
8798
8899
@@ -95,6 +106,11 @@ protected override void RegisterReplacements(ExtractionContext context)
95106 public Extractor ( SqlDriver driver )
96107 : base ( driver )
97108 {
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 ) ;
98114 }
99115 }
100- }
116+ }
0 commit comments