Skip to content

Commit a264578

Browse files
committed
增加虚谷dbfirst
1 parent 396d113 commit a264578

File tree

3 files changed

+218
-13
lines changed

3 files changed

+218
-13
lines changed

FreeSql.Tests/FreeSql.Tests.Provider.Xugu/UnitDbFirst.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,20 @@ public void GetTablesByDatabase()
2222
public void GetTableByName()
2323
{
2424
var fsql = g.xugu;
25-
var t1 = fsql.DbFirst.GetTableByName("GENERAL.system_log");
26-
Assert.NotNull(t1);
25+
fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
26+
var t1 = fsql.DbFirst.GetTableByName("test_existstb01");
27+
Assert.NotNull(t1);
28+
Assert.True(t1.Columns.Count > 0);
29+
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
30+
Assert.Null(t3);
31+
fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
2732
}
2833

2934
[Fact]
3035
public void ExistsTable()
3136
{
3237
var fsql = g.xugu;
33-
Assert.False(fsql.DbFirst.ExistsTable("GENERAL.system_log"));
38+
Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
3439
fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
3540
Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
3641
fsql.Ado.ExecuteNonQuery("drop table test_existstb01");

FreeSql/FreeSql.xml

Lines changed: 183 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Providers/FreeSql.Provider.Xugu/XuguDbFirst.cs

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -442,14 +442,15 @@ from all_INDEXES a
442442
{
443443
sql = $@"
444444
select
445-
schema_name || '.' || b.table_name as table_id,
446-
cons_name as FKId,
447-
cons_type,
448-
define
445+
c.schema_name || '.' || b.table_name as table_id,
446+
a.cons_name as FKId,
447+
a.cons_type,
448+
a.define,
449+
(select c2.schema_name || '.' || b2.table_name from all_tables as b2 left join all_SCHEMAS as c2 on b2.SCHEMA_ID=c2.SCHEMA_ID where b2.TABLE_id=b.table_id) as ref_table_id
449450
from all_constraints as a
450451
left join all_tables as b on a.Table_ID=b.Table_ID
451452
left Join all_SCHEMAS AS c on b.SCHEMA_ID=c.SCHEMA_ID
452-
where IS_SYS=false AND {loc8.ToString().Replace("a.table_name", "schema_name || '.' || b.table_name")}
453+
where IS_SYS=false AND a.cons_type='F' AND {loc8.ToString().Replace("a.table_name", "schema_name || '.' || b.table_name")}
453454
";
454455
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
455456
if (ds == null) return loc1;
@@ -458,15 +459,31 @@ from all_constraints as a
458459
foreach (object[] row in ds)
459460
{
460461
var table_id = string.Concat(row[0]);
461-
var column = row[3] as string[];
462+
var ref_table_id = string.Concat(row[4]);
463+
//var ref_table_id = row[4] as long?;
464+
//if (!ref_table_id.HasValue || ref_table_id < 1)
465+
// continue;
466+
467+
//loc2 是所有表信息
468+
469+
if (!string.IsNullOrWhiteSpace(ref_table_id) || loc2.ContainsKey(ref_table_id?.ToString()) == false) continue;
470+
471+
472+
var column_temps = (row[3] as string)
473+
.Replace(")(", "|")
474+
.Replace("\"","")
475+
.Replace("(", "")
476+
.Replace(")", "")
477+
.Split('|');
478+
var column = column_temps[0].Split(',');
462479
var fk_id = string.Concat(row[1]);
463-
var ref_table_id = string.Concat(row[0]);
464-
var is_foreign_key = string.Concat(row[2]) == "F";
465-
var referenced_column = row[5] as string[];
480+
481+
//var is_foreign_key = string.Concat(row[2]) == "F";
482+
var referenced_column = column_temps[1].Split(',');
466483
//var referenced_db = string.Concat(row[6]);
467484
//var referenced_table = string.Concat(row[7]);
468485

469-
if (loc2.ContainsKey(ref_table_id) == false) continue;
486+
470487

471488
Dictionary<string, DbForeignInfo> loc12 = null;
472489
DbForeignInfo loc13 = null;

0 commit comments

Comments
 (0)