Skip to content

Schema extraction improvements for MS SQL Server #209

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Dec 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions ChangeLog/6.0.9_dev.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[sqlserver] Fixed Full-text indexes extraction for Azure SQL provider
[sqlserver] Correct extraction of custom sequences based on types other than BIGINT
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
// Copyright (C) 2003-2010 Xtensive LLC.
// All rights reserved.
// For conditions of distribution and use, see license.
// Copyright (C) 2010-2021 Xtensive LLC.
// This code is distributed under MIT license terms.
// See the License.txt file in the project root for more information.
// Created by: Denis Krjuchkov
// Created: 2010.03.02

namespace Xtensive.Sql.Drivers.SqlServer.Azure
{
internal class Extractor : v12.Extractor
{
protected override void ExtractFulltextIndexes()
{
}


// Constructors

public Extractor(SqlDriver driver)
Expand Down
30 changes: 22 additions & 8 deletions Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v11/Extractor.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2012 Xtensive LLC.
// Copyright (C) 2012 Xtensive LLC.
// All rights reserved.
// For conditions of distribution and use, see license.
// Created by: Denis Krjuchkov
Expand All @@ -12,6 +12,8 @@ namespace Xtensive.Sql.Drivers.SqlServer.v11
{
internal class Extractor : v10.Extractor
{
private readonly Dictionary<int, Func<DbDataReader, int, long>> valueReaders;

protected override void ExtractCatalogContents()
{
base.ExtractCatalogContents();
Expand All @@ -24,6 +26,7 @@ private void ExtractSequences()
SELECT
schema_id,
name,
user_type_id,
start_value,
increment,
minimum_value,
Expand All @@ -44,14 +47,20 @@ ORDER BY
using (var reader = cmd.ExecuteReader())
while (reader.Read()) {
var currentSchema = GetSchema(reader.GetInt32(0));
var sequence = currentSchema.CreateSequence(reader.GetString(1));
var sequenceName = reader.GetString(1);
var sequence = currentSchema.CreateSequence(sequenceName);
var descriptor = sequence.SequenceDescriptor;
descriptor.StartValue = reader.GetInt64(2);
descriptor.Increment = reader.GetInt64(3);
descriptor.MinValue = reader.GetInt64(4);
descriptor.MaxValue = reader.GetInt64(5);
descriptor.IsCyclic = reader.GetBoolean(6);
descriptor.LastValue = reader.GetInt64(7);

if (!valueReaders.TryGetValue(reader.GetInt32(2), out var valueReader)) {
throw new ArgumentOutOfRangeException($"Type of sequence '{sequenceName}' is not supported.");
}

descriptor.StartValue = valueReader(reader, 3);
descriptor.Increment = valueReader(reader, 4);
descriptor.MinValue = valueReader(reader, 5);
descriptor.MaxValue = valueReader(reader, 6);
descriptor.IsCyclic = reader.GetBoolean(7);
descriptor.LastValue = valueReader(reader, 8);
}
}

Expand All @@ -64,6 +73,11 @@ protected override void RegisterReplacements(Dictionary<string, string> replacem
public Extractor(SqlDriver driver)
: base(driver)
{
valueReaders = new Dictionary<int, Func<DbDataReader, int, long>>(4);
valueReaders[48] = (DbDataReader reader, int index) => reader.GetByte(index);
valueReaders[52] = (DbDataReader reader, int index) => reader.GetInt16(index);
valueReaders[56] = (DbDataReader reader, int index) => reader.GetInt32(index);
valueReaders[127] = (DbDataReader reader, int index) => reader.GetInt64(index);
}
}
}
Loading