mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-20 21:43:33 -07:00
Fixed: Database migration failure when database was manually repaired in a certain way
Fixes #2094
This commit is contained in:
parent
053efd2214
commit
3a7e5c9201
3 changed files with 24 additions and 4 deletions
|
@ -1,4 +1,4 @@
|
||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using FluentAssertions;
|
using FluentAssertions;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
|
@ -25,6 +25,7 @@ namespace NzbDrone.Core.Test.Datastore.SqliteSchemaDumperTests
|
||||||
[TestCase(@"CREATE TABLE ""Test """"Table"" (""My""""Id"" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT)", "Test \"Table", "My\"Id")]
|
[TestCase(@"CREATE TABLE ""Test """"Table"" (""My""""Id"" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT)", "Test \"Table", "My\"Id")]
|
||||||
[TestCase(@"CREATE TABLE [Test Table] ([My Id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT)", "Test Table", "My Id")]
|
[TestCase(@"CREATE TABLE [Test Table] ([My Id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT)", "Test Table", "My Id")]
|
||||||
[TestCase(@" CREATE TABLE `Test ``Table` ( `My`` Id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT ) ", "Test `Table", "My` Id")]
|
[TestCase(@" CREATE TABLE `Test ``Table` ( `My`` Id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT ) ", "Test `Table", "My` Id")]
|
||||||
|
[TestCase(@"CREATE TABLE TestTable (MyId INTEGER NOT NULL, PRIMARY KEY(""MyId"" AUTOINCREMENT))", "TestTable", "MyId")]
|
||||||
public void should_parse_table_language_flavors(string sql, string tableName, string columnName)
|
public void should_parse_table_language_flavors(string sql, string tableName, string columnName)
|
||||||
{
|
{
|
||||||
var result = Subject.ReadTableSchema(sql);
|
var result = Subject.ReadTableSchema(sql);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Data;
|
using System.Data;
|
||||||
|
using System.Linq;
|
||||||
using FluentMigrator.Model;
|
using FluentMigrator.Model;
|
||||||
using FluentMigrator.Runner.Processors.SQLite;
|
using FluentMigrator.Runner.Processors.SQLite;
|
||||||
|
|
||||||
|
@ -66,6 +67,24 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||||
|
|
||||||
if (columnReader.Read() == SqliteSyntaxReader.TokenType.StringToken)
|
if (columnReader.Read() == SqliteSyntaxReader.TokenType.StringToken)
|
||||||
{
|
{
|
||||||
|
if (columnReader.ValueToUpper == "PRIMARY")
|
||||||
|
{
|
||||||
|
columnReader.SkipTillToken(SqliteSyntaxReader.TokenType.ListStart);
|
||||||
|
if (columnReader.Read() == SqliteSyntaxReader.TokenType.Identifier)
|
||||||
|
{
|
||||||
|
var pk = table.Columns.First(v => v.Name == columnReader.Value);
|
||||||
|
pk.IsPrimaryKey = true;
|
||||||
|
pk.IsNullable = true;
|
||||||
|
pk.IsUnique = true;
|
||||||
|
if (columnReader.Buffer.ToUpperInvariant().Contains("AUTOINCREMENT"))
|
||||||
|
{
|
||||||
|
pk.IsIdentity = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (columnReader.ValueToUpper == "CONSTRAINT" ||
|
if (columnReader.ValueToUpper == "CONSTRAINT" ||
|
||||||
columnReader.ValueToUpper == "PRIMARY" || columnReader.ValueToUpper == "UNIQUE" ||
|
columnReader.ValueToUpper == "PRIMARY" || columnReader.ValueToUpper == "UNIQUE" ||
|
||||||
columnReader.ValueToUpper == "CHECK" || columnReader.ValueToUpper == "FOREIGN")
|
columnReader.ValueToUpper == "CHECK" || columnReader.ValueToUpper == "FOREIGN")
|
||||||
|
|
|
@ -154,12 +154,12 @@ namespace NzbDrone.Core.Datastore.Migration.Framework
|
||||||
{
|
{
|
||||||
var start = Index;
|
var start = Index;
|
||||||
var end = start + 1;
|
var end = start + 1;
|
||||||
while (end < Buffer.Length && (char.IsLetter(Buffer[end]) || char.IsNumber(Buffer[end]) || Buffer[end] == '_' || Buffer[end] == '('))
|
while (end < Buffer.Length && (char.IsLetter(Buffer[end]) || char.IsNumber(Buffer[end]) || Buffer[end] == '_'))
|
||||||
{
|
{
|
||||||
end++;
|
end++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (end >= Buffer.Length || Buffer[end] == ',' || Buffer[end] == ')' || char.IsWhiteSpace(Buffer[end]))
|
if (end >= Buffer.Length || Buffer[end] == ',' || Buffer[end] == '(' || Buffer[end] == ')' || char.IsWhiteSpace(Buffer[end]))
|
||||||
{
|
{
|
||||||
Index = end;
|
Index = end;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue