Skip to content

Commit 3fc6921

Browse files
authored
Merge pull request #209 from DataObjects-NET/6.0-mssql-extraction-improvements
Schema extraction improvements for MS SQL Server: - sequences extraction improved; - full-text indexes extraction for Azure SQL improved
2 parents a4b4f7b + efd1b8f commit 3fc6921

File tree

5 files changed

+345
-58
lines changed

5 files changed

+345
-58
lines changed

ChangeLog/6.0.9_dev.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[sqlserver] Fixed Full-text indexes extraction for Azure SQL provider
2+
[sqlserver] Correct extraction of custom sequences based on types other than BIGINT

Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/Azure/Extractor.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
1-
// Copyright (C) 2003-2010 Xtensive LLC.
2-
// All rights reserved.
3-
// For conditions of distribution and use, see license.
1+
// Copyright (C) 2010-2021 Xtensive LLC.
2+
// This code is distributed under MIT license terms.
3+
// See the License.txt file in the project root for more information.
44
// Created by: Denis Krjuchkov
55
// Created: 2010.03.02
66

77
namespace Xtensive.Sql.Drivers.SqlServer.Azure
88
{
99
internal class Extractor : v12.Extractor
1010
{
11-
protected override void ExtractFulltextIndexes()
12-
{
13-
}
14-
15-
1611
// Constructors
1712

1813
public Extractor(SqlDriver driver)

Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v11/Extractor.cs

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
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

Comments
 (0)