Skip to content

Commit faedc6e

Browse files
committed
Scaffolding for FB2.5 (#976, #975)
1 parent a2bd60a commit faedc6e

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

Provider/src/FirebirdSql.EntityFrameworkCore.Firebird/Scaffolding/Internal/FbDatabaseModelFactory.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
using System.Data.Common;
2222
using System.Linq;
2323
using FirebirdSql.Data.FirebirdClient;
24+
using FirebirdSql.Data.Services;
2425
using Microsoft.EntityFrameworkCore.Metadata;
2526
using Microsoft.EntityFrameworkCore.Migrations;
2627
using Microsoft.EntityFrameworkCore.Scaffolding;
@@ -31,6 +32,8 @@ namespace FirebirdSql.EntityFrameworkCore.Firebird.Scaffolding.Internal
3132
{
3233
public class FbDatabaseModelFactory : DatabaseModelFactory
3334
{
35+
public int MajorVersionNumber { get; private set; }
36+
3437
public override DatabaseModel Create(string connectionString, DatabaseModelFactoryOptions options)
3538
{
3639
using (var connection = new FbConnection(connectionString))
@@ -49,6 +52,9 @@ public override DatabaseModel Create(DbConnection connection, DatabaseModelFacto
4952
connection.Open();
5053
}
5154

55+
var serverVersion = FbServerProperties.ParseServerVersion(connection.ServerVersion);
56+
MajorVersionNumber = serverVersion.Major;
57+
5258
try
5359
{
5460
databaseModel.DatabaseName = connection.Database;
@@ -76,15 +82,14 @@ public override DatabaseModel Create(DbConnection connection, DatabaseModelFacto
7682
}
7783
}
7884

79-
8085
private string GetDefaultSchema(DbConnection connection)
8186
{
8287
return null;
8388
}
8489

8590
private static Func<string, string, bool> GenerateTableFilter(IReadOnlyList<string> tables, IReadOnlyList<string> schemas)
8691
{
87-
return tables.Any() ? (s, t) => tables.Contains(t) : (Func<string, string, bool>)null;
92+
return tables.Any() ? (s, t) => tables.Contains(t) : null;
8893
}
8994

9095
private const string GetTablesQuery =
@@ -178,7 +183,7 @@ ELSE F.RDB$FIELD_SUB_TYPE
178183
ELSE 'RDB$FIELD_TYPE: ' || F.RDB$FIELD_TYPE || '?'
179184
END as STORE_TYPE,
180185
F.rdb$description as COLUMN_COMMENT,
181-
COALESCE(RF.RDB$IDENTITY_TYPE, 0) as AUTO_GENERATED,
186+
COALESCE({1}, 0) as AUTO_GENERATED,
182187
ch.RDB$CHARACTER_SET_NAME as CHARACTER_SET_NAME
183188
FROM
184189
RDB$RELATION_FIELDS RF
@@ -192,11 +197,13 @@ ORDER BY
192197

193198
private void GetColumns(DbConnection connection, IReadOnlyList<DatabaseTable> tables, Func<string, string, bool> tableFilter)
194199
{
200+
var identityType = MajorVersionNumber < 3 ? "null" : "rf.RDB$IDENTITY_TYPE";
201+
195202
foreach (var table in tables)
196203
{
197204
using (var command = connection.CreateCommand())
198205
{
199-
command.CommandText = string.Format(GetColumnsQuery, table.Name);
206+
command.CommandText = string.Format(GetColumnsQuery, table.Name, identityType);
200207
using (var reader = command.ExecuteReader())
201208
{
202209
while (reader.Read())
@@ -393,7 +400,7 @@ private void GetConstraints(DbConnection connection, IReadOnlyList<DatabaseTable
393400

394401
private static ReferentialAction? ConvertToReferentialAction(string onDeleteAction)
395402
{
396-
return (onDeleteAction.ToUpperInvariant()) switch
403+
return onDeleteAction.ToUpperInvariant() switch
397404
{
398405
"RESTRICT" => ReferentialAction.Restrict,
399406
"CASCADE" => ReferentialAction.Cascade,

0 commit comments

Comments
 (0)