From b91fe2ca4d34bb414f07a2b64b1df36dd4ccefbc Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Sun, 18 Oct 2020 19:23:13 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20Firebird=20Embedded=20?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E7=B3=BB=E7=BB=9F=E8=A1=A8=20isidentity=5Fty?= =?UTF-8?q?pe=20=E5=85=BC=E5=AE=B9=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FirebirdAdo/FirebirdAdo.cs | 23 +++++++++++++++++++ .../FirebirdCodeFirst.cs | 6 ++--- .../FirebirdDbFirst.cs | 8 +++---- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs index 40bbf313..63e06ea5 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdAdo/FirebirdAdo.cs @@ -35,6 +35,29 @@ namespace FreeSql.Firebird } } } + + public bool IsFirebird2_5 => ServerVersion.Contains("Firebird 2.5"); + public string ServerVersion + { + get + { + if (string.IsNullOrEmpty(_serverVersion) && MasterPool != null) + using (var conn = MasterPool.Get()) + { + try + { + _serverVersion = conn.Value.ServerVersion; + } + catch + { + _serverVersion = "3.0.0"; + } + } + return _serverVersion; + } + } + string _serverVersion; + public override object AddslashesProcessParam(object param, Type mapType, ColumnInfo mapColumn) { if (param == null) return "NULL"; diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs b/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs index 49c12b1a..74118fa1 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdCodeFirst.cs @@ -160,7 +160,7 @@ namespace FreeSql.Firebird tboldname = null; //如果新表已经存在,不走改表名逻辑 //对比字段,只可以修改类型、增加字段、有限的修改字段名;保证安全不删除字段 - var sql = _commonUtils.FormatSql(@" + var sql = _commonUtils.FormatSql($@" select trim(a.rdb$field_name), case @@ -176,12 +176,12 @@ case coalesce((select ' SUB_TYPE ' || rdb$type from rdb$types where b.rdb$field_type = 261 and rdb$type = b.rdb$field_sub_type and rdb$field_name = 'RDB$FIELD_SUB_TYPE' rows 1),'') end || trim(case when b.rdb$dimensions = 1 then '[]' else '' end), case when a.rdb$null_flag = 1 then 0 else 1 end, -case when a.rdb$identity_type = 1 then 1 else 0 end, +{((_orm.Ado as FirebirdAdo)?.IsFirebird2_5 == true ? "0" : "case when a.rdb$identity_type = 1 then 1 else 0 end")}, a.rdb$description from rdb$relation_fields a inner join rdb$fields b on b.rdb$field_name = a.rdb$field_source inner join rdb$relations d on d.rdb$relation_name = a.rdb$relation_name -where a.rdb$system_flag = 0 and trim(d.rdb$relation_name) = {0} +where a.rdb$system_flag = 0 and trim(d.rdb$relation_name) = {{0}} order by a.rdb$relation_name, a.rdb$field_position", tboldname ?? tbname); var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql); var tbstruct = ds.ToDictionary(a => string.Concat(a[0]), a => diff --git a/Providers/FreeSql.Provider.Firebird/FirebirdDbFirst.cs b/Providers/FreeSql.Provider.Firebird/FirebirdDbFirst.cs index 07ffd201..fa7fb0f0 100644 --- a/Providers/FreeSql.Provider.Firebird/FirebirdDbFirst.cs +++ b/Providers/FreeSql.Provider.Firebird/FirebirdDbFirst.cs @@ -196,7 +196,7 @@ where rdb$system_flag=0" + (tbname == null ? "" : $" and {(ignoreCase ? "upper(t } loc8.Append(")"); - sql = string.Format(@" + sql = $@" select trim(d.rdb$relation_name), trim(a.rdb$field_name), @@ -226,15 +226,15 @@ case coalesce((select ' SUB_TYPE ' || rdb$type from rdb$types where b.rdb$field_type = 261 and rdb$type = b.rdb$field_sub_type and rdb$field_name = 'RDB$FIELD_SUB_TYPE' rows 1),'') end || trim(case when b.rdb$dimensions = 1 then '[]' else '' end), case when a.rdb$null_flag = 1 then 0 else 1 end, -case when a.rdb$identity_type = 1 then 1 else 0 end, +{((_orm.Ado as FirebirdAdo)?.IsFirebird2_5 == true ? "0" : "case when a.rdb$identity_type = 1 then 1 else 0 end")}, a.rdb$description, a.rdb$default_value from rdb$relation_fields a inner join rdb$fields b on b.rdb$field_name = a.rdb$field_source inner join rdb$relations d on d.rdb$relation_name = a.rdb$relation_name -where a.rdb$system_flag = 0 and {0} +where a.rdb$system_flag = 0 and {loc8} order by a.rdb$relation_name, a.rdb$field_position -", loc8); +"; ds = _orm.Ado.ExecuteArray(CommandType.Text, sql); if (ds == null) return loc1;