From da6effcf52b0760bda6569dfb49221543f1a28ab Mon Sep 17 00:00:00 2001
From: 28810 <28810@YEXIANGQIN>
Date: Tue, 11 Aug 2020 12:48:26 +0800
Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20IDbFirst.ExistsTable?=
=?UTF-8?q?=20=E6=96=B9=E6=B3=95=E5=88=A4=E6=96=AD=E8=A1=A8=E6=98=AF?=
=?UTF-8?q?=E5=90=A6=E5=AD=98=E5=9C=A8=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FreeSql.DbContext/FreeSql.DbContext.xml | 16 -----------
.../MySqlConnector/MySqlDbFirstTest.cs | 27 +++++++++++++++++++
.../Dameng/DamengDbFirstTest.cs | 27 +++++++++++++++++++
.../KingbaseES/KingbaseESDbFirstTest.cs | 27 +++++++++++++++++++
.../MySql/MySqlDbFirstTest.cs | 27 +++++++++++++++++++
.../Oracle/OracleDbFirstTest.cs | 27 +++++++++++++++++++
.../PostgreSQL/PostgreSQLDbFirstTest.cs | 27 +++++++++++++++++++
.../SqlServer/SqlServerDbFirstTest.cs | 27 +++++++++++++++++++
.../FreeSql.Tests/Dameng/DamengDbFirstTest.cs | 27 +++++++++++++++++++
.../FreeSql.Tests/MySql/MySqlDbFirstTest.cs | 27 +++++++++++++++++++
.../FreeSql.Tests/Oracle/OracleDbFirstTest.cs | 27 +++++++++++++++++++
.../PostgreSQL/PostgreSQLDbFirstTest.cs | 27 +++++++++++++++++++
.../ShenTong/ShenTongDbFirstTest.cs | 27 +++++++++++++++++++
.../SqlServer/SqlServerDbFirstTest.cs | 27 +++++++++++++++++++
.../FreeSql.Tests/Sqlite/SqliteDbFirstTest.cs | 27 +++++++++++++++++++
FreeSql/FreeSql.xml | 8 ++++++
FreeSql/Interface/IDbFirst.cs | 10 +++++++
.../FreeSql.Provider.Dameng/DamengDbFirst.cs | 19 +++++++++++++
.../FreeSql.Provider.MySql/MySqlDbFirst.cs | 18 +++++++++++++
.../Dameng/OdbcDamengDbFirst.cs | 19 +++++++++++++
.../KingbaseES/OdbcKingbaseESDbFirst.cs | 10 +++++++
.../MySql/OdbcMySqlDbFirst.cs | 18 +++++++++++++
.../Oracle/OdbcOracleDbFirst.cs | 19 +++++++++++++
.../PostgreSQL/OdbcPostgreSQLDbFirst.cs | 10 +++++++
.../SqlServer/OdbcSqlServerDbFirst.cs | 25 +++++++++++++++++
.../FreeSql.Provider.Oracle/OracleDbFirst.cs | 19 +++++++++++++
.../PostgreSQLDbFirst.cs | 10 +++++++
.../ShenTongDbFirst.cs | 16 +++++++++++
.../SqlServerDbFirst.cs | 25 +++++++++++++++++
.../FreeSql.Provider.Sqlite/SqliteDbFirst.cs | 13 ++++++++-
30 files changed, 616 insertions(+), 17 deletions(-)
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index 2acb6679..5ca74890 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -130,13 +130,6 @@
清空状态数据
-
-
- 根据 lambda 条件删除数据
-
-
-
-
添加
@@ -527,14 +520,5 @@
-
-
- 批量注入 Repository,可以参考代码自行调整
-
-
-
-
-
-
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlDbFirstTest.cs
index 5ce6d981..901ec1c6 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlDbFirstTest.cs
@@ -21,5 +21,32 @@ namespace FreeSql.Tests.MySqlConnector
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.mysql;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd_mysqlconnector.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd_mysqlconnector.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd_mysqlconnector.test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("Test_existstb01", false));
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd_mysqlconnector.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd_mysqlconnector.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd_mysqlconnector.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "cccddd_mysqlconnector.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd_mysqlconnector.test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd_mysqlconnector.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table cccddd_mysqlconnector.test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengDbFirstTest.cs
index 7c40e69d..12dee40a 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengDbFirstTest.cs
@@ -21,5 +21,32 @@ namespace FreeSql.Tests.Odbc.Dameng
var t2 = g.dameng.DbFirst.GetTablesByDatabase();
//var tb = g.dameng.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.dameng;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("1user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "1user.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("1user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table \"1USER\".test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESDbFirstTest.cs
index eb3dc40b..0098989e 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESDbFirstTest.cs
@@ -18,5 +18,32 @@ namespace FreeSql.Tests.Odbc.KingbaseES
var t2 = g.kingbaseES.DbFirst.GetTablesByDatabase();
//var tb = g.kingbaseES.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.kingbaseES;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("public.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("public.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("public.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("Test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("public.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "tbexts.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("tbexts.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table \"TBEXTS\".test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlDbFirstTest.cs
index a12f5ab3..1a687cbc 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlDbFirstTest.cs
@@ -21,5 +21,32 @@ namespace FreeSql.Tests.Odbc.MySql
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.mysql;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd_odbc.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd_odbc.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd_odbc.test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("Test_existstb01", false));
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd_odbc.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd_odbc.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd_odbc.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "cccddd_odbc.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd_odbc.test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd_odbc.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table cccddd_odbc.test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleDbFirstTest.cs
index 9b12a2c7..5012ceee 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleDbFirstTest.cs
@@ -21,5 +21,32 @@ namespace FreeSql.Tests.Odbc.Oracle
var t2 = g.oracle.DbFirst.GetTablesByDatabase();
//var tb = g.oracle.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.oracle;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("1odbc.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("1odbc.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("1odbc.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("11odbcuser.test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("1odbc.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("1odbc.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "1odbc.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("1odbc.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("1odbc.test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table \"1ODBC\".test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLDbFirstTest.cs
index 1abfd208..70892d7c 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLDbFirstTest.cs
@@ -25,5 +25,32 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
var tb_identity = t2.Where(a => a.Name == "test_new").FirstOrDefault();
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.pgsql;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("public.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("public.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("public.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("Test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("public.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "tbexts.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("tbexts.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table \"tbexts\".test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerDbFirstTest.cs
index c52f6e28..90b3e2d8 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerDbFirstTest.cs
@@ -22,5 +22,32 @@ namespace FreeSql.Tests.Odbc.SqlServer
var t2 = g.sqlserver.DbFirst.GetTablesByDatabase();
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.sqlserver;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("dbo.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("dbo.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("dbo.test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("Test_existstb01", false));
+ Assert.True(fsql.DbFirst.ExistsTable("dbo.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("xxxtb.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("xxxtb.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "xxxtb.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("xxxtb.test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("xxxtb.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table xxxtb.test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengDbFirstTest.cs
index 833dff93..4e6698b9 100644
--- a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengDbFirstTest.cs
@@ -21,5 +21,32 @@ namespace FreeSql.Tests.Dameng
var t2 = g.dameng.DbFirst.GetTablesByDatabase();
//var tb = g.dameng.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.dameng;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("2user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("2user.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("2user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("2user.test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("2user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("2user.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "2user.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("2user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("2user.test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table \"2USER\".test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlDbFirstTest.cs
index fc0859ae..9e2fa376 100644
--- a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlDbFirstTest.cs
@@ -21,5 +21,32 @@ namespace FreeSql.Tests.MySql
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.mysql;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd.test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("Test_existstb01", false));
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("cccddd.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "cccddd.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd.test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("cccddd.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table cccddd.test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleDbFirstTest.cs
index 53bd72fb..19fc547d 100644
--- a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleDbFirstTest.cs
@@ -21,5 +21,32 @@ namespace FreeSql.Tests.Oracle
var t2 = g.oracle.DbFirst.GetTablesByDatabase();
//var tb = g.oracle.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.oracle;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("1user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "1user.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("1user.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("1user.test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table \"1USER\".test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLDbFirstTest.cs
index a41e6896..507694a5 100644
--- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLDbFirstTest.cs
@@ -26,5 +26,32 @@ namespace FreeSql.Tests.PostgreSQL
var tb_identity = t2.Where(a => a.Name == "test_new").FirstOrDefault();
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.pgsql;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("public.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("public.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("public.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("Test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("public.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "tbexts.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("tbexts.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table \"tbexts\".test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongDbFirstTest.cs
index 12b7a897..bd26596a 100644
--- a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongDbFirstTest.cs
@@ -21,5 +21,32 @@ namespace FreeSql.Tests.ShenTong
var t2 = g.shentong.DbFirst.GetTablesByDatabase(g.shentong.DbFirst.GetDatabases()[0]);
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.shentong;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("public.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("public.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("public.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("Test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("public.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "tbexts.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("tbexts.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("tbexts.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table \"TBEXTS\".test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerDbFirstTest.cs
index c78eebe7..8a5b251a 100644
--- a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerDbFirstTest.cs
@@ -31,5 +31,32 @@ namespace FreeSql.Tests.SqlServer
var t2 = g.sqlserver.DbFirst.GetTablesByDatabase();
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.sqlserver;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("dbo.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("dbo.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("dbo.test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("Test_existstb01", false));
+ Assert.True(fsql.DbFirst.ExistsTable("dbo.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("xxxtb.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("xxxtb.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "xxxtb.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("xxxtb.test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("xxxtb.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table xxxtb.test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteDbFirstTest.cs
index 8725e453..0f7d304d 100644
--- a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteDbFirstTest.cs
@@ -21,5 +21,32 @@ namespace FreeSql.Tests.Sqlite
var t2 = g.sqlite.DbFirst.GetTablesByDatabase();
}
+
+ [Fact]
+ public void ExistsTable()
+ {
+ var fsql = g.sqlite;
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("main.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("main.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01));
+ Assert.True(fsql.DbFirst.ExistsTable("test_existstb01"));
+ Assert.True(fsql.DbFirst.ExistsTable("main.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("Test_existstb01", false));
+ Assert.False(fsql.DbFirst.ExistsTable("main.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table test_existstb01");
+
+ Assert.False(fsql.DbFirst.ExistsTable("xxxtb.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("xxxtb.test_existstb01", false));
+ fsql.CodeFirst.SyncStructure(typeof(test_existstb01), "xxxtb.test_existstb01");
+ Assert.True(fsql.DbFirst.ExistsTable("xxxtb.test_existstb01"));
+ Assert.False(fsql.DbFirst.ExistsTable("xxxtb.Test_existstb01", false));
+ fsql.Ado.ExecuteNonQuery("drop table xxxtb.test_existstb01");
+ }
+ class test_existstb01
+ {
+ public Guid id { get; set; }
+ }
}
}
diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml
index ea460a59..bc504527 100644
--- a/FreeSql/FreeSql.xml
+++ b/FreeSql/FreeSql.xml
@@ -3184,6 +3184,14 @@
+
+
+ 判断表是否存在
+
+ 表名,如:dbo.table1
+ 是否忽略大小写
+
+
如果实体类有自增属性,分成两个 List,有值的Item1 merge,无值的Item2 insert
diff --git a/FreeSql/Interface/IDbFirst.cs b/FreeSql/Interface/IDbFirst.cs
index 1c444593..3a385384 100644
--- a/FreeSql/Interface/IDbFirst.cs
+++ b/FreeSql/Interface/IDbFirst.cs
@@ -75,5 +75,15 @@ namespace FreeSql
///
///
List GetEnumsByDatabase(params string[] database);
+
+ ///
+ /// 判断表是否存在
+ ///
+ /// 表名,如:dbo.table1
+ /// 是否忽略大小写
+ ///
+ bool ExistsTable(string name, bool ignoreCase = true);
+
+ //DbTableInfo GetTableByName(string name);
}
}
diff --git a/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs b/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs
index 49c7ddfb..d3525e7c 100644
--- a/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs
+++ b/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs
@@ -212,6 +212,25 @@ namespace FreeSql.Dameng
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1)
+ {
+ var userId = (_orm.Ado.MasterPool as DamengConnectionPool)?.UserId;
+ if (string.IsNullOrEmpty(userId))
+ using (var conn = _orm.Ado.MasterPool.Get())
+ {
+ userId = DamengConnectionPool.GetUserId(conn.Value.ConnectionString);
+ }
+ tbname = new[] { userId, tbname[0] };
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $" select 1 from all_tab_comments where {(ignoreCase ? "lower(owner)" : "owner")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(table_name)" : "table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database2)
{
var loc1 = new List();
diff --git a/Providers/FreeSql.Provider.MySql/MySqlDbFirst.cs b/Providers/FreeSql.Provider.MySql/MySqlDbFirst.cs
index 7253870b..03923720 100644
--- a/Providers/FreeSql.Provider.MySql/MySqlDbFirst.cs
+++ b/Providers/FreeSql.Provider.MySql/MySqlDbFirst.cs
@@ -148,6 +148,24 @@ namespace FreeSql.MySql
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1)
+ {
+ var database = "";
+ using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
+ {
+ database = conn.Value.Database;
+ }
+ tbname = new[] { database, tbname[0] };
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $" SELECT 1 FROM information_schema.TABLES WHERE {(ignoreCase ? "lower(table_schema)" : "table_schema")} = {_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(table_name)" : "table_name")} = {_commonUtils.FormatSql("{0}", tbname[1])}";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database2)
{
var loc1 = new List();
diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs
index e941e104..5b3d808f 100644
--- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs
@@ -212,6 +212,25 @@ namespace FreeSql.Odbc.Dameng
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1)
+ {
+ var userId = (_orm.Ado.MasterPool as OdbcDamengConnectionPool)?.UserId;
+ if (string.IsNullOrEmpty(userId))
+ using (var conn = _orm.Ado.MasterPool.Get())
+ {
+ userId = OdbcDamengConnectionPool.GetUserId(conn.Value.ConnectionString);
+ }
+ tbname = new[] { userId, tbname[0] };
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $" select 1 from all_tab_comments where {(ignoreCase ? "lower(owner)" : "owner")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(table_name)" : "table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database2)
{
var loc1 = new List();
diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESDbFirst.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESDbFirst.cs
index cd15ba6a..b7f0853f 100644
--- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESDbFirst.cs
@@ -110,6 +110,16 @@ namespace FreeSql.Odbc.KingbaseES
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $" select 1 from sys_tables a inner join sys_namespace b on b.nspname = a.schemaname where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")} = {_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.tablename)" : "a.tablename")} = {_commonUtils.FormatSql("{0}", tbname[1])}";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database)
{
var olddatabase = "";
diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlDbFirst.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlDbFirst.cs
index 66734859..07661662 100644
--- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlDbFirst.cs
@@ -114,6 +114,24 @@ namespace FreeSql.Odbc.MySql
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1)
+ {
+ var database = "";
+ using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
+ {
+ database = conn.Value.Database;
+ }
+ tbname = new[] { database, tbname[0] };
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $" SELECT 1 FROM information_schema.TABLES WHERE {(ignoreCase ? "lower(table_schema)" : "table_schema")} = {_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(table_name)" : "table_name")} = {_commonUtils.FormatSql("{0}", tbname[1])}";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database2)
{
var loc1 = new List();
diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs
index 23c409a4..f426d221 100644
--- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs
@@ -166,6 +166,25 @@ namespace FreeSql.Odbc.Oracle
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1)
+ {
+ var userId = (_orm.Ado.MasterPool as OdbcOracleConnectionPool)?.UserId;
+ if (string.IsNullOrEmpty(userId))
+ using (var conn = _orm.Ado.MasterPool.Get())
+ {
+ userId = OdbcOracleConnectionPool.GetUserId(conn.Value.ConnectionString);
+ }
+ tbname = new[] { userId, tbname[0] };
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $" select 1 from all_tab_comments where {(ignoreCase ? "lower(owner)" : "owner")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(table_name)" : "table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database2)
{
var loc1 = new List();
diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs
index 1da4d276..e3e66b20 100644
--- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs
@@ -122,6 +122,16 @@ namespace FreeSql.Odbc.PostgreSQL
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $" select 1 from pg_tables a inner join pg_namespace b on b.nspname = a.schemaname where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")} = {_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.tablename)" : "a.tablename")} = {_commonUtils.FormatSql("{0}", tbname[1])}";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database)
{
var olddatabase = "";
diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerDbFirst.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerDbFirst.cs
index 7c5eb871..d958b0bb 100644
--- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerDbFirst.cs
@@ -107,6 +107,31 @@ namespace FreeSql.Odbc.SqlServer
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var olddatabase = "";
+ using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
+ {
+ olddatabase = conn.Value.Database;
+ }
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1) tbname = new[] { olddatabase, "dbo", tbname[0] };
+ if (tbname?.Length == 2) tbname = new[] { olddatabase, tbname[0], tbname[1] };
+ tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $@"
+use [{tbname[0]}];
+select
+1
+from sys.tables a
+inner join sys.schemas b on b.schema_id = a.schema_id
+where lower(b.name) = {_commonUtils.FormatSql("{0}", tbname[1])} and lower(a.name) = {_commonUtils.FormatSql("{0}", tbname[2])}
+;
+use [{olddatabase}];
+";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database)
{
var olddatabase = "";
diff --git a/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs b/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs
index fb01732d..f8e7e3d1 100644
--- a/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs
+++ b/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs
@@ -166,6 +166,25 @@ namespace FreeSql.Oracle
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1)
+ {
+ var userId = (_orm.Ado.MasterPool as OracleConnectionPool)?.UserId;
+ if (string.IsNullOrEmpty(userId))
+ using (var conn = _orm.Ado.MasterPool.Get())
+ {
+ userId = OracleConnectionPool.GetUserId(conn.Value.ConnectionString);
+ }
+ tbname = new[] { userId, tbname[0] };
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $" select 1 from all_tab_comments where {(ignoreCase ? "lower(owner)" : "owner")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(table_name)" : "table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database2)
{
var loc1 = new List();
diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs
index 6420a5c5..b5681333 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs
@@ -232,6 +232,16 @@ namespace FreeSql.PostgreSQL
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $" select 1 from pg_tables a inner join pg_namespace b on b.nspname = a.schemaname where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")} = {_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.tablename)" : "a.tablename")} = {_commonUtils.FormatSql("{0}", tbname[1])}";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database)
{
var olddatabase = "";
diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongDbFirst.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongDbFirst.cs
index 99dacadf..1d573b84 100644
--- a/Providers/FreeSql.Provider.ShenTong/ShenTongDbFirst.cs
+++ b/Providers/FreeSql.Provider.ShenTong/ShenTongDbFirst.cs
@@ -123,6 +123,22 @@ namespace FreeSql.ShenTong
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] };
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $@"
+select
+1
+from sys_class a
+inner join sys_namespace b on b.oid = a.relnamespace
+where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")} = {_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.relname)" : "a.relname")} = {_commonUtils.FormatSql("{0}", tbname[1])} and a.relkind in ('r')
+";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database)
{
var olddatabase = "";
diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerDbFirst.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerDbFirst.cs
index ff0dd7e4..f376bf61 100644
--- a/Providers/FreeSql.Provider.SqlServer/SqlServerDbFirst.cs
+++ b/Providers/FreeSql.Provider.SqlServer/SqlServerDbFirst.cs
@@ -110,6 +110,31 @@ namespace FreeSql.SqlServer
return ds.Select(a => a.FirstOrDefault()?.ToString()).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var olddatabase = "";
+ using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
+ {
+ olddatabase = conn.Value.Database;
+ }
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1) tbname = new[] { olddatabase, "dbo", tbname[0] };
+ if (tbname?.Length == 2) tbname = new[] { olddatabase, tbname[0], tbname[1] };
+ tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $@"
+use [{tbname[0]}];
+select
+1
+from sys.tables a
+inner join sys.schemas b on b.schema_id = a.schema_id
+where lower(b.name) = {_commonUtils.FormatSql("{0}", tbname[1])} and lower(a.name) = {_commonUtils.FormatSql("{0}", tbname[2])}
+;
+use [{olddatabase}];
+";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database)
{
var olddatabase = "";
diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs b/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs
index 38b64903..e3fe5077 100644
--- a/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs
+++ b/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs
@@ -149,6 +149,16 @@ namespace FreeSql.Sqlite
return _orm.Ado.ExecuteArray("PRAGMA database_list").Select(a => string.Concat(a[1])).ToList();
}
+ public bool ExistsTable(string name, bool ignoreCase)
+ {
+ if (string.IsNullOrEmpty(name)) return false;
+ var tbname = _commonUtils.SplitTableName(name);
+ if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] };
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ var sql = $@" select 1 from {_commonUtils.QuoteSqlName(tbname[0])}.sqlite_master where type = 'table' and {(ignoreCase ? "lower(tbl_name)" : "tbl_name")} = {_commonUtils.FormatSql("{0}", tbname[1])}";
+ return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
+ }
+
public List GetTablesByDatabase(params string[] database2)
{
var loc1 = new List();
@@ -194,7 +204,8 @@ namespace FreeSql.Sqlite
foreach (var db in database)
{
- var sql = $@"select
+ var sql = $@"
+select
'{db}.' || tbl_name,
'{db}',
tbl_name,