diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlDbFirstTest.cs
index 901ec1c6..ddf2f1a0 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.MySqlConnector/MySqlConnector/MySqlDbFirstTest.cs
@@ -9,17 +9,29 @@ namespace FreeSql.Tests.MySqlConnector
[Fact]
public void GetDatabases()
{
-
var t1 = g.mysql.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
-
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
+ Assert.True(t2.Count > 0);
+ }
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.mysql;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("cccddd_mysqlconnector.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
}
[Fact]
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengDbFirstTest.cs
index 12dee40a..ee4a2119 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Dameng/DamengDbFirstTest.cs
@@ -9,19 +9,32 @@ namespace FreeSql.Tests.Odbc.Dameng
[Fact]
public void GetDatabases()
{
-
var t1 = g.dameng.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
-
var t2 = g.dameng.DbFirst.GetTablesByDatabase();
+ Assert.True(t2.Count > 0);
//var tb = g.dameng.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.dameng;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("2user.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
+ }
+
[Fact]
public void ExistsTable()
{
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESDbFirstTest.cs
index 0098989e..cebd3ac1 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/KingbaseES/KingbaseESDbFirstTest.cs
@@ -16,7 +16,22 @@ namespace FreeSql.Tests.Odbc.KingbaseES
public void GetTablesByDatabase()
{
var t2 = g.kingbaseES.DbFirst.GetTablesByDatabase();
- //var tb = g.kingbaseES.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
+ Assert.True(t2.Count > 0);
+ }
+
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.kingbaseES;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("public.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
}
[Fact]
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlDbFirstTest.cs
index 1a687cbc..613ca970 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/MySql/MySqlDbFirstTest.cs
@@ -9,17 +9,29 @@ namespace FreeSql.Tests.Odbc.MySql
[Fact]
public void GetDatabases()
{
-
var t1 = g.mysql.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
-
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
+ Assert.True(t2.Count > 0);
+ }
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.mysql;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("cccddd_odbc.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
}
[Fact]
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleDbFirstTest.cs
index 5012ceee..1b1eb6f3 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/Oracle/OracleDbFirstTest.cs
@@ -9,19 +9,32 @@ namespace FreeSql.Tests.Odbc.Oracle
[Fact]
public void GetDatabases()
{
-
var t1 = g.oracle.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
-
var t2 = g.oracle.DbFirst.GetTablesByDatabase();
+ Assert.True(t2.Count > 0);
//var tb = g.oracle.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.oracle;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("1odbc.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
+ }
+
[Fact]
public void ExistsTable()
{
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLDbFirstTest.cs
index 70892d7c..ca76dae8 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/PostgreSQL/PostgreSQLDbFirstTest.cs
@@ -10,20 +10,29 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
[Fact]
public void GetDatabases()
{
-
var t1 = g.pgsql.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
+ var t2 = g.pgsql.DbFirst.GetTablesByDatabase();
+ Assert.True(t2.Count > 0);
+ }
- var t2 = g.pgsql.DbFirst.GetTablesByDatabase(g.pgsql.DbFirst.GetDatabases()[2]);
-
- var tb_alltype = t2.Where(a => a.Name == "tb_alltype").FirstOrDefault();
-
- var tb_identity = t2.Where(a => a.Name == "test_new").FirstOrDefault();
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.pgsql;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("public.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
}
[Fact]
diff --git a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerDbFirstTest.cs
index 90b3e2d8..95ebf376 100644
--- a/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests.Provider.Odbc/SqlServer/SqlServerDbFirstTest.cs
@@ -10,17 +10,29 @@ namespace FreeSql.Tests.Odbc.SqlServer
[Fact]
public void GetDatabases()
{
-
var t1 = g.sqlserver.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
-
var t2 = g.sqlserver.DbFirst.GetTablesByDatabase();
+ Assert.True(t2.Count > 0);
+ }
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.sqlserver;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("dbo.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
}
[Fact]
diff --git a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengDbFirstTest.cs
index 4e6698b9..8ae7578a 100644
--- a/FreeSql.Tests/FreeSql.Tests/Dameng/DamengDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Dameng/DamengDbFirstTest.cs
@@ -9,19 +9,32 @@ namespace FreeSql.Tests.Dameng
[Fact]
public void GetDatabases()
{
-
var t1 = g.dameng.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
-
var t2 = g.dameng.DbFirst.GetTablesByDatabase();
+ Assert.True(t2.Count > 0);
//var tb = g.dameng.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.dameng;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("2user.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
+ }
+
[Fact]
public void ExistsTable()
{
diff --git a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlDbFirstTest.cs
index 9e2fa376..b6e9c337 100644
--- a/FreeSql.Tests/FreeSql.Tests/MySql/MySqlDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/MySql/MySqlDbFirstTest.cs
@@ -9,17 +9,29 @@ namespace FreeSql.Tests.MySql
[Fact]
public void GetDatabases()
{
-
var t1 = g.mysql.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
-
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
+ Assert.True(t2.Count > 0);
+ }
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.mysql;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("cccddd.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
}
[Fact]
diff --git a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleDbFirstTest.cs
index 19fc547d..c3cfaaa0 100644
--- a/FreeSql.Tests/FreeSql.Tests/Oracle/OracleDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Oracle/OracleDbFirstTest.cs
@@ -9,19 +9,32 @@ namespace FreeSql.Tests.Oracle
[Fact]
public void GetDatabases()
{
-
var t1 = g.oracle.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
-
var t2 = g.oracle.DbFirst.GetTablesByDatabase();
+ Assert.True(t2.Count > 0);
//var tb = g.oracle.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.oracle;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("1user.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
+ }
+
[Fact]
public void ExistsTable()
{
diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLDbFirstTest.cs
index 507694a5..bd7dfcb5 100644
--- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PostgreSQLDbFirstTest.cs
@@ -10,21 +10,29 @@ namespace FreeSql.Tests.PostgreSQL
[Fact]
public void GetDatabases()
{
-
var t1 = g.pgsql.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
-
var t2 = g.pgsql.DbFirst.GetTablesByDatabase(g.pgsql.DbFirst.GetDatabases()[1]);
+ Assert.True(t2.Count > 0);
+ }
- var tb_alltype = t2.Where(a => a.Name == "tb_alltype").FirstOrDefault();
-
- var tb_identity = t2.Where(a => a.Name == "test_new").FirstOrDefault();
-
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.pgsql;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("public.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
}
[Fact]
diff --git a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongDbFirstTest.cs
index bd26596a..db4bdd3a 100644
--- a/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/ShenTong/ShenTongDbFirstTest.cs
@@ -9,9 +9,7 @@ namespace FreeSql.Tests.ShenTong
[Fact]
public void GetDatabases()
{
-
var t1 = g.shentong.DbFirst.GetDatabases();
-
}
[Fact]
@@ -19,7 +17,23 @@ namespace FreeSql.Tests.ShenTong
{
var t1 = g.shentong.DbFirst.GetTablesByDatabase();
var t2 = g.shentong.DbFirst.GetTablesByDatabase(g.shentong.DbFirst.GetDatabases()[0]);
+ Assert.True(t1.Count > 0);
+ Assert.True(t2.Count > 0);
+ }
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.shentong;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("public.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
}
[Fact]
diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerDbFirstTest.cs
index 8a5b251a..21917375 100644
--- a/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/SqlServerDbFirstTest.cs
@@ -19,17 +19,29 @@ namespace FreeSql.Tests.SqlServer
[Fact]
public void GetDatabases()
{
-
var t1 = g.sqlserver.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
-
var t2 = g.sqlserver.DbFirst.GetTablesByDatabase();
+ Assert.True(t2.Count > 0);
+ }
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.sqlserver;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("dbo.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
}
[Fact]
diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteDbFirstTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteDbFirstTest.cs
index 0f7d304d..e152584f 100644
--- a/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteDbFirstTest.cs
+++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/SqliteDbFirstTest.cs
@@ -9,17 +9,29 @@ namespace FreeSql.Tests.Sqlite
[Fact]
public void GetDatabases()
{
-
var t1 = g.sqlite.DbFirst.GetDatabases();
-
}
[Fact]
public void GetTablesByDatabase()
{
-
var t2 = g.sqlite.DbFirst.GetTablesByDatabase();
+ Assert.True(t2.Count > 0);
+ }
+ [Fact]
+ public void GetTableByName()
+ {
+ var fsql = g.sqlite;
+ var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
+ var t2 = fsql.DbFirst.GetTableByName("main.tb_alltype");
+ Assert.NotNull(t1);
+ Assert.NotNull(t2);
+ Assert.True(t1.Columns.Count > 0);
+ Assert.True(t2.Columns.Count > 0);
+ Assert.Equal(t1.Columns.Count, t2.Columns.Count);
+ var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
+ Assert.Null(t3);
}
[Fact]
diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml
index bc504527..4f5d13e2 100644
--- a/FreeSql/FreeSql.xml
+++ b/FreeSql/FreeSql.xml
@@ -3121,6 +3121,22 @@
+
+
+ 获取指定单表信息,包括列详情、主键、唯一键、索引、备注
+
+ 表名,如:dbo.table1
+ 是否忽略大小写
+
+
+
+
+ 判断表是否存在
+
+ 表名,如:dbo.table1
+ 是否忽略大小写
+
+
获取数据库枚举类型int值
@@ -3184,14 +3200,6 @@
-
-
- 判断表是否存在
-
- 表名,如:dbo.table1
- 是否忽略大小写
-
-
如果实体类有自增属性,分成两个 List,有值的Item1 merge,无值的Item2 insert
diff --git a/FreeSql/Interface/IDbFirst.cs b/FreeSql/Interface/IDbFirst.cs
index 3a385384..de614453 100644
--- a/FreeSql/Interface/IDbFirst.cs
+++ b/FreeSql/Interface/IDbFirst.cs
@@ -19,6 +19,22 @@ namespace FreeSql
///
List GetTablesByDatabase(params string[] database);
+ ///
+ /// 获取指定单表信息,包括列详情、主键、唯一键、索引、备注
+ ///
+ /// 表名,如:dbo.table1
+ /// 是否忽略大小写
+ ///
+ DbTableInfo GetTableByName(string name, bool ignoreCase = true);
+
+ ///
+ /// 判断表是否存在
+ ///
+ /// 表名,如:dbo.table1
+ /// 是否忽略大小写
+ ///
+ bool ExistsTable(string name, bool ignoreCase = true);
+
///
/// 获取数据库枚举类型int值
///
@@ -75,15 +91,5 @@ 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 d3525e7c..9f20d709 100644
--- a/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs
+++ b/Providers/FreeSql.Provider.Dameng/DamengDbFirst.cs
@@ -231,21 +231,36 @@ namespace FreeSql.Dameng
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
- public List GetTablesByDatabase(params string[] database2)
+ public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
+
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var loc1 = new List();
var loc2 = new Dictionary();
var loc3 = new Dictionary>();
- var database = database2?.ToArray();
-
- if (database == null || database.Any() == false)
+ string[] tbname = null;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ if (tbname?.Length == 1)
+ {
+ var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
+ if (string.IsNullOrEmpty(userUsers)) return loc1;
+ tbname = new[] { userUsers, tbname[0] };
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ database = new[] { tbname[0] };
+ }
+ else if (database == null || database.Any() == false)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
database = new[] { userUsers };
}
+
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
- var sql = string.Format(@"
+ var sql = $@"
select
a.owner || '.' || a.table_name,
a.owner,
@@ -254,7 +269,7 @@ b.comments,
'TABLE'
from all_tables a
left join all_tab_comments b on b.owner = a.owner and b.table_name = a.table_name and b.table_type = 'TABLE'
-where a.owner in ({0})", databaseIn);
+where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -315,7 +330,7 @@ where a.owner in ({0})", databaseIn);
}
loc8.Append(")");
- sql = string.Format(@"
+ sql = $@"
select
a.owner || '.' || a.table_name,
a.column_name,
@@ -330,8 +345,8 @@ b.comments,
a.data_default
from all_tab_cols a
left join all_col_comments b on b.owner = a.owner and b.table_name = a.table_name and b.column_name = a.column_name
-where a.owner in ({1}) and {0}
-", loc8, databaseIn);
+where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -386,7 +401,7 @@ where a.owner in ({1}) and {0}
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
}
- sql = string.Format(@"
+ sql = $@"
select
a.table_owner || '.' || a.table_name,
c.column_name,
@@ -401,8 +416,8 @@ all_ind_columns c
where a.index_name = c.index_name
and a.table_owner = c.table_owner
and a.table_name = c.table_name
-and a.table_owner in ({1}) and {0}
-", loc8, databaseIn);
+and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -454,7 +469,9 @@ and a.table_owner in ({1}) and {0}
}
}
- sql = string.Format(@"
+ if (tbname == null)
+ {
+ sql = $@"
select
a.owner || '.' || a.table_name,
c.column_name,
@@ -488,43 +505,44 @@ and a.owner = c.owner
and a.table_name = c.table_name
and b.owner = d.owner
and b.table_name = d.table_name
-and a.owner in ({1}) and {0}
-", loc8, databaseIn);
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
+";
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (var row in ds)
- {
- string table_id = string.Concat(row[0]);
- string column = string.Concat(row[1]);
- string fk_id = string.Concat(row[2]);
- string ref_table_id = string.Concat(row[3]);
- bool is_foreign_key = string.Concat(row[4]) == "1";
- string referenced_column = string.Concat(row[5]);
- if (database.Length == 1)
+ var fkColumns = new Dictionary>();
+ foreach (var row in ds)
{
- table_id = table_id.Substring(table_id.IndexOf('.') + 1);
- ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
- }
- if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
- var loc9 = loc3[table_id][column];
- if (loc2.ContainsKey(ref_table_id) == false) continue;
- var loc10 = loc2[ref_table_id];
- var loc11 = loc3[ref_table_id][referenced_column];
+ string table_id = string.Concat(row[0]);
+ string column = string.Concat(row[1]);
+ string fk_id = string.Concat(row[2]);
+ string ref_table_id = string.Concat(row[3]);
+ bool is_foreign_key = string.Concat(row[4]) == "1";
+ string referenced_column = string.Concat(row[5]);
+ if (database.Length == 1)
+ {
+ table_id = table_id.Substring(table_id.IndexOf('.') + 1);
+ ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
+ }
+ if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
+ var loc9 = loc3[table_id][column];
+ if (loc2.ContainsKey(ref_table_id) == false) continue;
+ var loc10 = loc2[ref_table_id];
+ var loc11 = loc3[ref_table_id][referenced_column];
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(table_id, out loc12))
- fkColumns.Add(table_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
- loc13.Columns.Add(loc9);
- loc13.ReferencedColumns.Add(loc11);
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(table_id, out loc12))
+ fkColumns.Add(table_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
+ loc13.Columns.Add(loc9);
+ loc13.ReferencedColumns.Add(loc11);
+ }
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.MySql/MySqlDbFirst.cs b/Providers/FreeSql.Provider.MySql/MySqlDbFirst.cs
index 03923720..5ec430ec 100644
--- a/Providers/FreeSql.Provider.MySql/MySqlDbFirst.cs
+++ b/Providers/FreeSql.Provider.MySql/MySqlDbFirst.cs
@@ -166,14 +166,30 @@ namespace FreeSql.MySql
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
- public List GetTablesByDatabase(params string[] database2)
+ public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
+
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var loc1 = new List();
var loc2 = new Dictionary();
var loc3 = new Dictionary>();
- var database = database2?.ToArray();
-
- if (database == null || database.Any() == false)
+ string[] tbname = null;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ if (tbname?.Length == 1)
+ {
+ using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
+ {
+ if (string.IsNullOrEmpty(conn.Value.Database)) return loc1;
+ tbname = new[] { conn.Value.Database, tbname[0] };
+ }
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ database = new[] { tbname[0] };
+ }
+ else if (database == null || database.Any() == false)
{
using (var conn = _orm.Ado.MasterPool.Get())
{
@@ -181,8 +197,9 @@ namespace FreeSql.MySql
database = new[] { conn.Value.Database };
}
}
+
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
- var sql = string.Format(@"
+ var sql = $@"
select
concat(a.table_schema, '.', a.table_name) 'id',
a.table_schema 'schema',
@@ -190,7 +207,7 @@ a.table_name 'table',
a.table_comment,
a.table_type 'type'
from information_schema.tables a
-where a.table_schema in ({0})", databaseIn);
+where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -251,7 +268,7 @@ where a.table_schema in ({0})", databaseIn);
}
loc8.Append(")");
- sql = string.Format(@"
+ sql = $@"
select
concat(a.table_schema, '.', a.table_name),
a.column_name,
@@ -263,8 +280,8 @@ case when locate('auto_increment', a.extra) > 0 then 1 else 0 end 'is_identity',
a.column_comment 'comment',
a.column_default 'default_value'
from information_schema.columns a
-where a.table_schema in ({1}) and {0}
-", loc8, databaseIn);
+where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -305,7 +322,7 @@ where a.table_schema in ({1}) and {0}
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
}
- sql = string.Format(@"
+ sql = $@"
select
concat(a.table_schema, '.', a.table_name) 'table_id',
a.column_name,
@@ -315,8 +332,8 @@ case when a.index_name = 'PRIMARY' then 1 else 0 end 'IsPrimaryKey',
0 'IsClustered',
0 'IsDesc'
from information_schema.statistics a
-where a.table_schema in ({1}) and {0}
-", loc8, databaseIn);
+where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -367,7 +384,9 @@ where a.table_schema in ({1}) and {0}
}
}
- sql = string.Format(@"
+ if (tbname == null)
+ {
+ sql = $@"
select
concat(a.constraint_schema, '.', a.table_name) 'table_id',
a.column_name,
@@ -376,43 +395,44 @@ concat(a.referenced_table_schema, '.', a.referenced_table_name) 'ref_table_id',
1 'IsForeignKey',
a.referenced_column_name 'ref_column'
from information_schema.key_column_usage a
-where a.constraint_schema in ({1}) and {0} and not isnull(position_in_unique_constraint)
-", loc8, databaseIn);
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+where {(ignoreCase ? "lower(a.constraint_schema)" : "a.constraint_schema")} in ({databaseIn}) and {loc8} and not isnull(position_in_unique_constraint)
+";
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (var row in ds)
- {
- string table_id = string.Concat(row[0]);
- string column = string.Concat(row[1]);
- string fk_id = string.Concat(row[2]);
- string ref_table_id = string.Concat(row[3]);
- bool is_foreign_key = string.Concat(row[4]) == "1";
- string referenced_column = string.Concat(row[5]);
- if (database.Length == 1)
+ var fkColumns = new Dictionary>();
+ foreach (var row in ds)
{
- table_id = table_id.Substring(table_id.IndexOf('.') + 1);
- ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
- }
- if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
- var loc9 = loc3[table_id][column];
- if (loc2.ContainsKey(ref_table_id) == false) continue;
- var loc10 = loc2[ref_table_id];
- var loc11 = loc3[ref_table_id][referenced_column];
+ string table_id = string.Concat(row[0]);
+ string column = string.Concat(row[1]);
+ string fk_id = string.Concat(row[2]);
+ string ref_table_id = string.Concat(row[3]);
+ bool is_foreign_key = string.Concat(row[4]) == "1";
+ string referenced_column = string.Concat(row[5]);
+ if (database.Length == 1)
+ {
+ table_id = table_id.Substring(table_id.IndexOf('.') + 1);
+ ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
+ }
+ if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
+ var loc9 = loc3[table_id][column];
+ if (loc2.ContainsKey(ref_table_id) == false) continue;
+ var loc10 = loc2[ref_table_id];
+ var loc11 = loc3[ref_table_id][referenced_column];
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(table_id, out loc12))
- fkColumns.Add(table_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
- loc13.Columns.Add(loc9);
- loc13.ReferencedColumns.Add(loc11);
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(table_id, out loc12))
+ fkColumns.Add(table_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
+ loc13.Columns.Add(loc9);
+ loc13.ReferencedColumns.Add(loc11);
+ }
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs
index 5b3d808f..a7b6d741 100644
--- a/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/Dameng/OdbcDamengDbFirst.cs
@@ -231,21 +231,36 @@ namespace FreeSql.Odbc.Dameng
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
- public List GetTablesByDatabase(params string[] database2)
+ public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
+
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var loc1 = new List();
var loc2 = new Dictionary();
var loc3 = new Dictionary>();
- var database = database2?.ToArray();
-
- if (database == null || database.Any() == false)
+ string[] tbname = null;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ if (tbname?.Length == 1)
+ {
+ var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
+ if (string.IsNullOrEmpty(userUsers)) return loc1;
+ tbname = new[] { userUsers, tbname[0] };
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ database = new[] { tbname[0] };
+ }
+ else if (database == null || database.Any() == false)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
database = new[] { userUsers };
}
+
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
- var sql = string.Format(@"
+ var sql = $@"
select
a.owner || '.' || a.table_name,
a.owner,
@@ -254,7 +269,7 @@ b.comments,
'TABLE'
from all_tables a
left join all_tab_comments b on b.owner = a.owner and b.table_name = a.table_name and b.table_type = 'TABLE'
-where a.owner in ({0})", databaseIn);
+where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -315,7 +330,7 @@ where a.owner in ({0})", databaseIn);
}
loc8.Append(")");
- sql = string.Format(@"
+ sql = $@"
select
a.owner || '.' || a.table_name,
a.column_name,
@@ -330,8 +345,8 @@ b.comments,
a.data_default
from all_tab_cols a
left join all_col_comments b on b.owner = a.owner and b.table_name = a.table_name and b.column_name = a.column_name
-where a.owner in ({1}) and {0}
-", loc8, databaseIn);
+where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -386,7 +401,7 @@ where a.owner in ({1}) and {0}
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
}
- sql = string.Format(@"
+ sql = $@"
select
a.table_owner || '.' || a.table_name,
c.column_name,
@@ -401,8 +416,8 @@ all_ind_columns c
where a.index_name = c.index_name
and a.table_owner = c.table_owner
and a.table_name = c.table_name
-and a.table_owner in ({1}) and {0}
-", loc8, databaseIn);
+and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -454,7 +469,9 @@ and a.table_owner in ({1}) and {0}
}
}
- sql = string.Format(@"
+ if (tbname == null)
+ {
+ sql = $@"
select
a.owner || '.' || a.table_name,
c.column_name,
@@ -488,43 +505,44 @@ and a.owner = c.owner
and a.table_name = c.table_name
and b.owner = d.owner
and b.table_name = d.table_name
-and a.owner in ({1}) and {0}
-", loc8, databaseIn);
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
+";
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (var row in ds)
- {
- string table_id = string.Concat(row[0]);
- string column = string.Concat(row[1]);
- string fk_id = string.Concat(row[2]);
- string ref_table_id = string.Concat(row[3]);
- bool is_foreign_key = string.Concat(row[4]) == "1";
- string referenced_column = string.Concat(row[5]);
- if (database.Length == 1)
+ var fkColumns = new Dictionary>();
+ foreach (var row in ds)
{
- table_id = table_id.Substring(table_id.IndexOf('.') + 1);
- ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
- }
- if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
- var loc9 = loc3[table_id][column];
- if (loc2.ContainsKey(ref_table_id) == false) continue;
- var loc10 = loc2[ref_table_id];
- var loc11 = loc3[ref_table_id][referenced_column];
+ string table_id = string.Concat(row[0]);
+ string column = string.Concat(row[1]);
+ string fk_id = string.Concat(row[2]);
+ string ref_table_id = string.Concat(row[3]);
+ bool is_foreign_key = string.Concat(row[4]) == "1";
+ string referenced_column = string.Concat(row[5]);
+ if (database.Length == 1)
+ {
+ table_id = table_id.Substring(table_id.IndexOf('.') + 1);
+ ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
+ }
+ if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
+ var loc9 = loc3[table_id][column];
+ if (loc2.ContainsKey(ref_table_id) == false) continue;
+ var loc10 = loc2[ref_table_id];
+ var loc11 = loc3[ref_table_id][referenced_column];
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(table_id, out loc12))
- fkColumns.Add(table_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
- loc13.Columns.Add(loc9);
- loc13.ReferencedColumns.Add(loc11);
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(table_id, out loc12))
+ fkColumns.Add(table_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
+ loc13.Columns.Add(loc9);
+ loc13.ReferencedColumns.Add(loc11);
+ }
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESUpdate.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESUpdate.cs
index b0eab467..44f5013d 100644
--- a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESUpdate.cs
+++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESUpdate.cs
@@ -18,7 +18,7 @@ namespace FreeSql.Odbc.KingbaseES
{
}
- internal string InternalTableAlias;
+ internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary InternalIgnore => _ignore;
diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESDbFirst.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESDbFirst.cs
index b7f0853f..006d7f34 100644
--- a/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/OdbcKingbaseESDbFirst.cs
@@ -116,20 +116,31 @@ namespace FreeSql.Odbc.KingbaseES
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])}";
+ 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)
+ public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
+
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var olddatabase = "";
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
{
olddatabase = conn.Value.Database;
}
- var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
- var tables = new List();
+ string[] tbname = null;
+ string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ dbs = new[] { olddatabase };
+ }
+ var tables = new List();
foreach (var db in dbs)
{
if (string.IsNullOrEmpty(db) || string.Compare(db, olddatabase, true) != 0) continue;
@@ -139,7 +150,7 @@ namespace FreeSql.Odbc.KingbaseES
var loc3 = new Dictionary>();
var sql = $@"
-select
+{(tbname == null ? "" : $"select * from (")}select
b.nspname || '.' || a.tablename,
a.schemaname,
a.tablename ,
@@ -165,7 +176,7 @@ inner join sys_namespace b on b.oid = a.relnamespace
left join sys_description d on d.objoid = a.oid and objsubid = 0
where b.nspname not in ('SYS_CATALOG', 'INFORMATION_SCHEMA', 'TOPOLOGY', 'SYSAUDIT', 'SYSLOGICAL', 'SYS_TEMP_1', 'SYS_TOAST', 'SYS_TOAST_TEMP_1', 'XLOG_RECORD_READ') and a.relkind in ('m','v')
and b.nspname || '.' || a.relname not in ('PUBLIC.GEOGRAPHY_COLUMNS','PUBLIC.GEOMETRY_COLUMNS','PUBLIC.RASTER_COLUMNS','PUBLIC.RASTER_OVERVIEWS')
-";
+{(tbname == null ? "" : $") ft_dbf where {(ignoreCase ? "lower(schemaname)" : "schemaname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(tablename)" : "tablename")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -381,7 +392,9 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
}
}
- sql = $@"
+ if (tbname == null)
+ {
+ sql = $@"
select
ns.nspname || '.' || b.relname as table_id,
array(select attname from sys_attribute where attrelid = a.conrelid and attnum = any(a.conkey)) as column_name,
@@ -398,39 +411,40 @@ inner join sys_namespace ns on ns.oid = b.relnamespace
inner join sys_namespace ns2 on ns2.oid = c.relnamespace
where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || b.relname")}
";
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (object[] row in ds)
- {
- var table_id = string.Concat(row[0]);
- var column = row[1] as string[];
- var fk_id = string.Concat(row[2]);
- var ref_table_id = string.Concat(row[3]);
- var is_foreign_key = string.Concat(row[4]) == "1";
- var referenced_column = row[5] as string[];
- var referenced_db = string.Concat(row[6]);
- var referenced_table = string.Concat(row[7]);
-
- if (loc2.ContainsKey(ref_table_id) == false) continue;
-
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(table_id, out loc12))
- fkColumns.Add(table_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc2[ref_table_id] });
-
- for (int a = 0; a < column.Length; a++)
+ var fkColumns = new Dictionary>();
+ foreach (object[] row in ds)
{
- loc13.Columns.Add(loc3[table_id][column[a]]);
- loc13.ReferencedColumns.Add(loc3[ref_table_id][referenced_column[a]]);
+ var table_id = string.Concat(row[0]);
+ var column = row[1] as string[];
+ var fk_id = string.Concat(row[2]);
+ var ref_table_id = string.Concat(row[3]);
+ var is_foreign_key = string.Concat(row[4]) == "1";
+ var referenced_column = row[5] as string[];
+ var referenced_db = string.Concat(row[6]);
+ var referenced_table = string.Concat(row[7]);
+
+ if (loc2.ContainsKey(ref_table_id) == false) continue;
+
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(table_id, out loc12))
+ fkColumns.Add(table_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc2[ref_table_id] });
+
+ for (int a = 0; a < column.Length; a++)
+ {
+ loc13.Columns.Add(loc3[table_id][column[a]]);
+ loc13.ReferencedColumns.Add(loc3[ref_table_id][referenced_column[a]]);
+ }
}
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlDbFirst.cs b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlDbFirst.cs
index 07661662..b655037c 100644
--- a/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/MySql/OdbcMySqlDbFirst.cs
@@ -132,14 +132,30 @@ namespace FreeSql.Odbc.MySql
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
- public List GetTablesByDatabase(params string[] database2)
+ public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
+
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var loc1 = new List();
var loc2 = new Dictionary();
var loc3 = new Dictionary>();
- var database = database2?.ToArray();
-
- if (database == null || database.Any() == false)
+ string[] tbname = null;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ if (tbname?.Length == 1)
+ {
+ using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
+ {
+ if (string.IsNullOrEmpty(conn.Value.Database)) return loc1;
+ tbname = new[] { conn.Value.Database, tbname[0] };
+ }
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ database = new[] { tbname[0] };
+ }
+ else if (database == null || database.Any() == false)
{
using (var conn = _orm.Ado.MasterPool.Get())
{
@@ -147,8 +163,9 @@ namespace FreeSql.Odbc.MySql
database = new[] { conn.Value.Database };
}
}
+
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
- var sql = string.Format(@"
+ var sql = $@"
select
concat(a.table_schema, '.', a.table_name) 'id',
a.table_schema 'schema',
@@ -156,7 +173,7 @@ a.table_name 'table',
a.table_comment,
a.table_type 'type'
from information_schema.tables a
-where a.table_schema in ({0})", databaseIn);
+where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -217,7 +234,7 @@ where a.table_schema in ({0})", databaseIn);
}
loc8.Append(")");
- sql = string.Format(@"
+ sql = $@"
select
concat(a.table_schema, '.', a.table_name),
a.column_name,
@@ -229,8 +246,8 @@ case when locate('auto_increment', a.extra) > 0 then 1 else 0 end 'is_identity',
a.column_comment 'comment',
a.column_default 'default_value'
from information_schema.columns a
-where a.table_schema in ({1}) and {0}
-", loc8, databaseIn);
+where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -271,7 +288,7 @@ where a.table_schema in ({1}) and {0}
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
}
- sql = string.Format(@"
+ sql = $@"
select
concat(a.table_schema, '.', a.table_name) 'table_id',
a.column_name,
@@ -281,8 +298,8 @@ case when a.index_name = 'PRIMARY' then 1 else 0 end 'IsPrimaryKey',
0 'IsClustered',
0 'IsDesc'
from information_schema.statistics a
-where a.table_schema in ({1}) and {0}
-", loc8, databaseIn);
+where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -333,7 +350,9 @@ where a.table_schema in ({1}) and {0}
}
}
- sql = string.Format(@"
+ if (tbname == null)
+ {
+ sql = $@"
select
concat(a.constraint_schema, '.', a.table_name) 'table_id',
a.column_name,
@@ -342,43 +361,44 @@ concat(a.referenced_table_schema, '.', a.referenced_table_name) 'ref_table_id',
1 'IsForeignKey',
a.referenced_column_name 'ref_column'
from information_schema.key_column_usage a
-where a.constraint_schema in ({1}) and {0} and not isnull(position_in_unique_constraint)
-", loc8, databaseIn);
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+where {(ignoreCase ? "lower(a.constraint_schema)" : "a.constraint_schema")} in ({databaseIn}) and {loc8} and not isnull(position_in_unique_constraint)
+";
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (var row in ds)
- {
- string table_id = string.Concat(row[0]);
- string column = string.Concat(row[1]);
- string fk_id = string.Concat(row[2]);
- string ref_table_id = string.Concat(row[3]);
- bool is_foreign_key = string.Concat(row[4]) == "1";
- string referenced_column = string.Concat(row[5]);
- if (database.Length == 1)
+ var fkColumns = new Dictionary>();
+ foreach (var row in ds)
{
- table_id = table_id.Substring(table_id.IndexOf('.') + 1);
- ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
- }
- if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
- var loc9 = loc3[table_id][column];
- if (loc2.ContainsKey(ref_table_id) == false) continue;
- var loc10 = loc2[ref_table_id];
- var loc11 = loc3[ref_table_id][referenced_column];
+ string table_id = string.Concat(row[0]);
+ string column = string.Concat(row[1]);
+ string fk_id = string.Concat(row[2]);
+ string ref_table_id = string.Concat(row[3]);
+ bool is_foreign_key = string.Concat(row[4]) == "1";
+ string referenced_column = string.Concat(row[5]);
+ if (database.Length == 1)
+ {
+ table_id = table_id.Substring(table_id.IndexOf('.') + 1);
+ ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
+ }
+ if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
+ var loc9 = loc3[table_id][column];
+ if (loc2.ContainsKey(ref_table_id) == false) continue;
+ var loc10 = loc2[ref_table_id];
+ var loc11 = loc3[ref_table_id][referenced_column];
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(table_id, out loc12))
- fkColumns.Add(table_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
- loc13.Columns.Add(loc9);
- loc13.ReferencedColumns.Add(loc11);
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(table_id, out loc12))
+ fkColumns.Add(table_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
+ loc13.Columns.Add(loc9);
+ loc13.ReferencedColumns.Add(loc11);
+ }
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs
index f426d221..c9f477cb 100644
--- a/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/Oracle/OdbcOracleDbFirst.cs
@@ -185,21 +185,36 @@ namespace FreeSql.Odbc.Oracle
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
- public List GetTablesByDatabase(params string[] database2)
+ public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
+
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var loc1 = new List();
var loc2 = new Dictionary();
var loc3 = new Dictionary>();
- var database = database2?.ToArray();
-
- if (database == null || database.Any() == false)
+ string[] tbname = null;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ if (tbname?.Length == 1)
+ {
+ var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
+ if (string.IsNullOrEmpty(userUsers)) return loc1;
+ tbname = new[] { userUsers, tbname[0] };
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ database = new[] { tbname[0] };
+ }
+ else if (database == null || database.Any() == false)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
database = new[] { userUsers };
}
+
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
- var sql = string.Format(@"
+ var sql = $@"
select
a.owner || '.' || a.table_name,
a.owner,
@@ -208,7 +223,7 @@ b.comments,
'TABLE'
from all_tables a
left join all_tab_comments b on b.owner = a.owner and b.table_name = a.table_name and b.table_type = 'TABLE'
-where a.owner in ({0})", databaseIn);
+where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -288,7 +303,7 @@ BEGIN
RETURN TEXT_C1;
END;");
- sql = string.Format(@"
+ sql = $@"
select
a.owner || '.' || a.table_name,
a.column_name,
@@ -303,8 +318,8 @@ to_char(b.comments),
nvl(FREESQL_LONG_TO_CHAR_DEFAULT(a.table_name, a.column_name),'')
from all_tab_cols a
left join all_col_comments b on b.owner = a.owner and b.table_name = a.table_name and b.column_name = a.column_name
-where a.owner in ({1}) and {0}
-", loc8, databaseIn);
+where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -360,7 +375,7 @@ where a.owner in ({1}) and {0}
}
OdbcOracleCodeFirst.CreateOracleFunction(_orm);
- sql = string.Format(@"
+ sql = $@"
select
a.table_owner || '.' || a.table_name,
nvl(freesql_long_2_varchar(a.index_name, c.table_name, c.column_position), c.column_name),
@@ -375,8 +390,8 @@ all_ind_columns c
where a.index_name = c.index_name
and a.table_owner = c.table_owner
and a.table_name = c.table_name
-and a.table_owner in ({1}) and {0}
-", loc8, databaseIn);
+and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -428,7 +443,9 @@ and a.table_owner in ({1}) and {0}
}
}
- sql = string.Format(@"
+ if (tbname == null)
+ {
+ sql = $@"
select
a.owner || '.' || a.table_name,
c.column_name,
@@ -462,43 +479,44 @@ and a.owner = c.owner
and a.table_name = c.table_name
and b.owner = d.owner
and b.table_name = d.table_name
-and a.owner in ({1}) and {0}
-", loc8, databaseIn);
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
+";
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (var row in ds)
- {
- string table_id = string.Concat(row[0]);
- string column = string.Concat(row[1]);
- string fk_id = string.Concat(row[2]);
- string ref_table_id = string.Concat(row[3]);
- bool is_foreign_key = string.Concat(row[4]) == "1";
- string referenced_column = string.Concat(row[5]);
- if (database.Length == 1)
+ var fkColumns = new Dictionary>();
+ foreach (var row in ds)
{
- table_id = table_id.Substring(table_id.IndexOf('.') + 1);
- ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
- }
- if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
- var loc9 = loc3[table_id][column];
- if (loc2.ContainsKey(ref_table_id) == false) continue;
- var loc10 = loc2[ref_table_id];
- var loc11 = loc3[ref_table_id][referenced_column];
+ string table_id = string.Concat(row[0]);
+ string column = string.Concat(row[1]);
+ string fk_id = string.Concat(row[2]);
+ string ref_table_id = string.Concat(row[3]);
+ bool is_foreign_key = string.Concat(row[4]) == "1";
+ string referenced_column = string.Concat(row[5]);
+ if (database.Length == 1)
+ {
+ table_id = table_id.Substring(table_id.IndexOf('.') + 1);
+ ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
+ }
+ if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
+ var loc9 = loc3[table_id][column];
+ if (loc2.ContainsKey(ref_table_id) == false) continue;
+ var loc10 = loc2[ref_table_id];
+ var loc11 = loc3[ref_table_id][referenced_column];
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(table_id, out loc12))
- fkColumns.Add(table_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
- loc13.Columns.Add(loc9);
- loc13.ReferencedColumns.Add(loc11);
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(table_id, out loc12))
+ fkColumns.Add(table_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
+ loc13.Columns.Add(loc9);
+ loc13.ReferencedColumns.Add(loc11);
+ }
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs
index f4c2cbc2..b713b56b 100644
--- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs
+++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLUpdate.cs
@@ -18,7 +18,7 @@ namespace FreeSql.Odbc.PostgreSQL
{
}
- internal string InternalTableAlias;
+ internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary InternalIgnore => _ignore;
diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs
index e3e66b20..ef6fc7bf 100644
--- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/OdbcPostgreSQLDbFirst.cs
@@ -128,11 +128,14 @@ namespace FreeSql.Odbc.PostgreSQL
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])}";
+ 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)
+ public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
+
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var olddatabase = "";
var is96 = true;
@@ -141,7 +144,15 @@ namespace FreeSql.Odbc.PostgreSQL
olddatabase = conn.Value.Database;
is96 = PgVersionIs96(conn.Value.ServerVersion);
}
- var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
+ string[] tbname = null;
+ string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ dbs = new[] { olddatabase };
+ }
var tables = new List();
foreach (var db in dbs)
@@ -153,7 +164,7 @@ namespace FreeSql.Odbc.PostgreSQL
var loc3 = new Dictionary>();
var sql = $@"
-select
+{(tbname == null ? "" : $"select * from (")}select
b.nspname || '.' || a.tablename,
a.schemaname,
a.tablename ,
@@ -179,7 +190,7 @@ inner join pg_namespace b on b.oid = a.relnamespace
left join pg_description d on d.objoid = a.oid and objsubid = 0
where b.nspname not in ('pg_catalog', 'information_schema') and a.relkind in ('m','v')
and b.nspname || '.' || a.relname not in ('public.geography_columns','public.geometry_columns','public.raster_columns','public.raster_overviews')
-";
+{(tbname == null ? "" : $") ft_dbf where {(ignoreCase ? "lower(schemaname)" : "schemaname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(tablename)" : "tablename")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -396,7 +407,9 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
}
}
- sql = $@"
+ if (tbname == null)
+ {
+ sql = $@"
select
ns.nspname || '.' || b.relname as table_id,
array(select attname from pg_attribute where attrelid = a.conrelid and attnum = any(a.conkey)) as column_name,
@@ -413,39 +426,40 @@ inner join pg_namespace ns on ns.oid = b.relnamespace
inner join pg_namespace ns2 on ns2.oid = c.relnamespace
where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || b.relname")}
";
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (object[] row in ds)
- {
- var table_id = string.Concat(row[0]);
- var column = row[1] as string[];
- var fk_id = string.Concat(row[2]);
- var ref_table_id = string.Concat(row[3]);
- var is_foreign_key = string.Concat(row[4]) == "1";
- var referenced_column = row[5] as string[];
- var referenced_db = string.Concat(row[6]);
- var referenced_table = string.Concat(row[7]);
-
- if (loc2.ContainsKey(ref_table_id) == false) continue;
-
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(table_id, out loc12))
- fkColumns.Add(table_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc2[ref_table_id] });
-
- for (int a = 0; a < column.Length; a++)
+ var fkColumns = new Dictionary>();
+ foreach (object[] row in ds)
{
- loc13.Columns.Add(loc3[table_id][column[a]]);
- loc13.ReferencedColumns.Add(loc3[ref_table_id][referenced_column[a]]);
+ var table_id = string.Concat(row[0]);
+ var column = row[1] as string[];
+ var fk_id = string.Concat(row[2]);
+ var ref_table_id = string.Concat(row[3]);
+ var is_foreign_key = string.Concat(row[4]) == "1";
+ var referenced_column = row[5] as string[];
+ var referenced_db = string.Concat(row[6]);
+ var referenced_table = string.Concat(row[7]);
+
+ if (loc2.ContainsKey(ref_table_id) == false) continue;
+
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(table_id, out loc12))
+ fkColumns.Add(table_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc2[ref_table_id] });
+
+ for (int a = 0; a < column.Length; a++)
+ {
+ loc13.Columns.Add(loc3[table_id][column[a]]);
+ loc13.ReferencedColumns.Add(loc3[ref_table_id][referenced_column[a]]);
+ }
}
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerDbFirst.cs b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerDbFirst.cs
index d958b0bb..146936a0 100644
--- a/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerDbFirst.cs
+++ b/Providers/FreeSql.Provider.Odbc/SqlServer/OdbcSqlServerDbFirst.cs
@@ -7,7 +7,6 @@ using System.Data;
using System.Data.Odbc;
using System.Linq;
using System.Text;
-using System.Text.RegularExpressions;
namespace FreeSql.Odbc.SqlServer
{
@@ -125,21 +124,32 @@ 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])}
+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 DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
- public List GetTablesByDatabase(params string[] database)
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var olddatabase = "";
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
{
olddatabase = conn.Value.Database;
}
- var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
+ string[] tbname = null;
+ string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ 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();
+ dbs = new[] { tbname[0] };
+ }
var tables = new List();
foreach (var db in dbs)
@@ -152,6 +162,7 @@ use [{olddatabase}];
var sql = $@"
use [{db}];
+select * from (
select
a.Object_id
,b.name 'Owner'
@@ -180,8 +191,8 @@ select
from sys.procedures a
inner join sys.schemas b on b.schema_id = a.schema_id
where a.type = 'P' and charindex('diagram', a.name) = 0
-order by type desc, b.name, a.name
-;
+) ft_dbf{(tbname == null ? "" : _commonUtils.FormatSql(" where lower([owner])={0} and lower([Name])={1}", new[] { tbname[1], tbname[2] }))}
+order by type desc, [owner], [Name];
use [{olddatabase}];
";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
@@ -264,7 +275,7 @@ isnull(e.name,'') + '.' + isnull(d.name,'')
else cast(a.max_length as varchar) end + ')'
when b.name in ('Numeric', 'Decimal') then '(' + cast(a.precision as varchar) + ',' + cast(a.scale as varchar) + ')'
else '' end as 'SqlType'
-,(select value from sys.extended_properties where major_id = a.object_id AND minor_id = a.column_id AND name = 'MS_Description') 'Comment'
+,( select value from sys.extended_properties where major_id = a.object_id AND minor_id = a.column_id AND name = 'MS_Description') 'Comment'
{0} a
inner join sys.types b on b.user_type_id = a.user_type_id
left join sys.tables d on d.object_id = a.object_id
@@ -392,7 +403,9 @@ use [{olddatabase}];
}
}
- sql = $@"
+ if (tbname == null)
+ {
+ sql = $@"
use [{db}];
select
b.object_id 'Object_id'
@@ -412,47 +425,48 @@ where {loc8.ToString().Replace("a.table_name", "b.object_id")}
;
use [{olddatabase}];
";
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (object[] row in ds)
- {
- int object_id, referenced_object_id;
- int.TryParse(string.Concat(row[0]), out object_id);
- var column = string.Concat(row[1]);
- string fk_id = string.Concat(row[2]);
- int.TryParse(string.Concat(row[3]), out referenced_object_id);
- var is_foreign_key = bool.Parse(string.Concat(row[4]));
- var referenced_column = string.Concat(row[5]);
- var referenced_db = string.Concat(row[6]);
- var referenced_table = string.Concat(row[7]);
- DbColumnInfo loc9 = loc3[object_id][column];
- DbTableInfo loc10 = null;
- DbColumnInfo loc11 = null;
- bool isThisSln = referenced_object_id != 0;
-
- if (isThisSln)
- {
- loc10 = loc2[referenced_object_id];
- loc11 = loc3[referenced_object_id][referenced_column];
- }
- else
+ var fkColumns = new Dictionary>();
+ foreach (object[] row in ds)
{
+ int object_id, referenced_object_id;
+ int.TryParse(string.Concat(row[0]), out object_id);
+ var column = string.Concat(row[1]);
+ string fk_id = string.Concat(row[2]);
+ int.TryParse(string.Concat(row[3]), out referenced_object_id);
+ var is_foreign_key = bool.Parse(string.Concat(row[4]));
+ var referenced_column = string.Concat(row[5]);
+ var referenced_db = string.Concat(row[6]);
+ var referenced_table = string.Concat(row[7]);
+ DbColumnInfo loc9 = loc3[object_id][column];
+ DbTableInfo loc10 = null;
+ DbColumnInfo loc11 = null;
+ bool isThisSln = referenced_object_id != 0;
+ if (isThisSln)
+ {
+ loc10 = loc2[referenced_object_id];
+ loc11 = loc3[referenced_object_id][referenced_column];
+ }
+ else
+ {
+
+ }
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(object_id, out loc12))
+ fkColumns.Add(object_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[object_id], ReferencedTable = loc10 });
+ loc13.Columns.Add(loc9);
+ loc13.ReferencedColumns.Add(loc11);
}
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(object_id, out loc12))
- fkColumns.Add(object_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[object_id], ReferencedTable = loc10 });
- loc13.Columns.Add(loc9);
- loc13.ReferencedColumns.Add(loc11);
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs b/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs
index f8e7e3d1..2231f27a 100644
--- a/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs
+++ b/Providers/FreeSql.Provider.Oracle/OracleDbFirst.cs
@@ -185,21 +185,36 @@ namespace FreeSql.Oracle
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
- public List GetTablesByDatabase(params string[] database2)
+ public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
+
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var loc1 = new List();
var loc2 = new Dictionary();
var loc3 = new Dictionary>();
- var database = database2?.ToArray();
-
- if (database == null || database.Any() == false)
+ string[] tbname = null;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ if (tbname?.Length == 1)
+ {
+ var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
+ if (string.IsNullOrEmpty(userUsers)) return loc1;
+ tbname = new[] { userUsers, tbname[0] };
+ }
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ database = new[] { tbname[0] };
+ }
+ else if (database == null || database.Any() == false)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
database = new[] { userUsers };
}
+
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
- var sql = string.Format(@"
+ var sql = $@"
select
a.owner || '.' || a.table_name,
a.owner,
@@ -208,7 +223,7 @@ b.comments,
'TABLE'
from all_tables a
left join all_tab_comments b on b.owner = a.owner and b.table_name = a.table_name and b.table_type = 'TABLE'
-where a.owner in ({0})", databaseIn);
+where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -288,7 +303,7 @@ BEGIN
RETURN TEXT_C1;
END;");
- sql = string.Format(@"
+ sql = $@"
select
a.owner || '.' || a.table_name,
a.column_name,
@@ -303,8 +318,8 @@ to_char(b.comments),
nvl(FREESQL_LONG_TO_CHAR_DEFAULT(a.table_name, a.column_name),'')
from all_tab_cols a
left join all_col_comments b on b.owner = a.owner and b.table_name = a.table_name and b.column_name = a.column_name
-where a.owner in ({1}) and {0}
-", loc8, databaseIn);
+where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -360,7 +375,7 @@ where a.owner in ({1}) and {0}
}
OracleCodeFirst.CreateOracleFunction(_orm);
- sql = string.Format(@"
+ sql = $@"
select
a.table_owner || '.' || a.table_name,
nvl(freesql_long_2_varchar(a.index_name, c.table_name, c.column_position), c.column_name),
@@ -375,8 +390,8 @@ all_ind_columns c
where a.index_name = c.index_name
and a.table_owner = c.table_owner
and a.table_name = c.table_name
-and a.table_owner in ({1}) and {0}
-", loc8, databaseIn);
+and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
+";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -428,7 +443,9 @@ and a.table_owner in ({1}) and {0}
}
}
- sql = string.Format(@"
+ if (tbname == null)
+ {
+ sql = $@"
select
a.owner || '.' || a.table_name,
c.column_name,
@@ -462,43 +479,44 @@ and a.owner = c.owner
and a.table_name = c.table_name
and b.owner = d.owner
and b.table_name = d.table_name
-and a.owner in ({1}) and {0}
-", loc8, databaseIn);
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
+";
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (var row in ds)
- {
- string table_id = string.Concat(row[0]);
- string column = string.Concat(row[1]);
- string fk_id = string.Concat(row[2]);
- string ref_table_id = string.Concat(row[3]);
- bool is_foreign_key = string.Concat(row[4]) == "1";
- string referenced_column = string.Concat(row[5]);
- if (database.Length == 1)
+ var fkColumns = new Dictionary>();
+ foreach (var row in ds)
{
- table_id = table_id.Substring(table_id.IndexOf('.') + 1);
- ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
- }
- if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
- var loc9 = loc3[table_id][column];
- if (loc2.ContainsKey(ref_table_id) == false) continue;
- var loc10 = loc2[ref_table_id];
- var loc11 = loc3[ref_table_id][referenced_column];
+ string table_id = string.Concat(row[0]);
+ string column = string.Concat(row[1]);
+ string fk_id = string.Concat(row[2]);
+ string ref_table_id = string.Concat(row[3]);
+ bool is_foreign_key = string.Concat(row[4]) == "1";
+ string referenced_column = string.Concat(row[5]);
+ if (database.Length == 1)
+ {
+ table_id = table_id.Substring(table_id.IndexOf('.') + 1);
+ ref_table_id = ref_table_id.Substring(ref_table_id.IndexOf('.') + 1);
+ }
+ if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
+ var loc9 = loc3[table_id][column];
+ if (loc2.ContainsKey(ref_table_id) == false) continue;
+ var loc10 = loc2[ref_table_id];
+ var loc11 = loc3[ref_table_id][referenced_column];
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(table_id, out loc12))
- fkColumns.Add(table_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
- loc13.Columns.Add(loc9);
- loc13.ReferencedColumns.Add(loc11);
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(table_id, out loc12))
+ fkColumns.Add(table_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
+ loc13.Columns.Add(loc9);
+ loc13.ReferencedColumns.Add(loc11);
+ }
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs
index cc74c1d1..6991e799 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/PostgreSQLUpdate.cs
@@ -18,7 +18,7 @@ namespace FreeSql.PostgreSQL.Curd
{
}
- internal string InternalTableAlias;
+ internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary InternalIgnore => _ignore;
diff --git a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs
index b5681333..96ebf9bb 100644
--- a/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs
+++ b/Providers/FreeSql.Provider.PostgreSQL/PostgreSQLDbFirst.cs
@@ -238,11 +238,14 @@ namespace FreeSql.PostgreSQL
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])}";
+ 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)
+ public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
+
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var olddatabase = "";
var is96 = true;
@@ -251,7 +254,15 @@ namespace FreeSql.PostgreSQL
olddatabase = conn.Value.Database;
is96 = PgVersionIs96(conn.Value.ServerVersion);
}
- var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
+ string[] tbname = null;
+ string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ dbs = new[] { olddatabase };
+ }
var tables = new List();
foreach (var db in dbs)
@@ -263,7 +274,7 @@ namespace FreeSql.PostgreSQL
var loc3 = new Dictionary>();
var sql = $@"
-select
+{(tbname == null ? "" : $"select * from (")}select
b.nspname || '.' || a.tablename,
a.schemaname,
a.tablename ,
@@ -289,7 +300,7 @@ inner join pg_namespace b on b.oid = a.relnamespace
left join pg_description d on d.objoid = a.oid and objsubid = 0
where b.nspname not in ('pg_catalog', 'information_schema') and a.relkind in ('m','v')
and b.nspname || '.' || a.relname not in ('public.geography_columns','public.geometry_columns','public.raster_columns','public.raster_overviews')
-";
+{(tbname == null ? "" : $") ft_dbf where {(ignoreCase ? "lower(schemaname)" : "schemaname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(tablename)" : "tablename")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -506,7 +517,9 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
}
}
- sql = $@"
+ if (tbname == null)
+ {
+ sql = $@"
select
ns.nspname || '.' || b.relname as table_id,
array(select attname from pg_attribute where attrelid = a.conrelid and attnum = any(a.conkey)) as column_name,
@@ -523,39 +536,40 @@ inner join pg_namespace ns on ns.oid = b.relnamespace
inner join pg_namespace ns2 on ns2.oid = c.relnamespace
where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || b.relname")}
";
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (object[] row in ds)
- {
- var table_id = string.Concat(row[0]);
- var column = row[1] as string[];
- var fk_id = string.Concat(row[2]);
- var ref_table_id = string.Concat(row[3]);
- var is_foreign_key = string.Concat(row[4]) == "1";
- var referenced_column = row[5] as string[];
- var referenced_db = string.Concat(row[6]);
- var referenced_table = string.Concat(row[7]);
-
- if (loc2.ContainsKey(ref_table_id) == false) continue;
-
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(table_id, out loc12))
- fkColumns.Add(table_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc2[ref_table_id] });
-
- for (int a = 0; a < column.Length; a++)
+ var fkColumns = new Dictionary>();
+ foreach (object[] row in ds)
{
- loc13.Columns.Add(loc3[table_id][column[a]]);
- loc13.ReferencedColumns.Add(loc3[ref_table_id][referenced_column[a]]);
+ var table_id = string.Concat(row[0]);
+ var column = row[1] as string[];
+ var fk_id = string.Concat(row[2]);
+ var ref_table_id = string.Concat(row[3]);
+ var is_foreign_key = string.Concat(row[4]) == "1";
+ var referenced_column = row[5] as string[];
+ var referenced_db = string.Concat(row[6]);
+ var referenced_table = string.Concat(row[7]);
+
+ if (loc2.ContainsKey(ref_table_id) == false) continue;
+
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(table_id, out loc12))
+ fkColumns.Add(table_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc2[ref_table_id] });
+
+ for (int a = 0; a < column.Length; a++)
+ {
+ loc13.Columns.Add(loc3[table_id][column[a]]);
+ loc13.ReferencedColumns.Add(loc3[ref_table_id][referenced_column[a]]);
+ }
}
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongUpdate.cs b/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongUpdate.cs
index 97ce5c1f..c5ca315e 100644
--- a/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongUpdate.cs
+++ b/Providers/FreeSql.Provider.ShenTong/Curd/ShenTongUpdate.cs
@@ -19,7 +19,7 @@ namespace FreeSql.ShenTong.Curd
{
}
- internal string InternalTableAlias;
+ internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary InternalIgnore => _ignore;
diff --git a/Providers/FreeSql.Provider.ShenTong/ShenTongDbFirst.cs b/Providers/FreeSql.Provider.ShenTong/ShenTongDbFirst.cs
index 1d573b84..0f9ce722 100644
--- a/Providers/FreeSql.Provider.ShenTong/ShenTongDbFirst.cs
+++ b/Providers/FreeSql.Provider.ShenTong/ShenTongDbFirst.cs
@@ -134,19 +134,30 @@ 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')
+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)
+ public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
+
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var olddatabase = "";
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
{
olddatabase = conn.Value.Database;
}
- var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
+ string[] tbname = null;
+ string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] };
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ dbs = new[] { olddatabase };
+ }
var tables = new List();
foreach (var db in dbs)
@@ -158,7 +169,7 @@ where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")} = {_commonUtils.FormatSq
var loc3 = new Dictionary>();
var sql = $@"
-select
+{(tbname == null ? "" : $"select * from (")}select
b.nspname || '.' || a.relname,
b.nspname,
a.relname,
@@ -183,7 +194,7 @@ inner join sys_namespace b on b.oid = a.relnamespace
left join sys_description d on d.objoid = a.oid and objsubid = 0
where b.nspname not in ('DIRECTORIES', 'INFO_SCHEM', 'REPLICATION', 'STAGENT', 'SYSAUDIT', 'SYSDBA', 'SYSFTSDBA', 'SYSSECURE', 'SYS_GLOBAL_TEMP', 'WMSYS') and a.relkind in ('m','v')
and b.nspname || '.' || a.relname not in ('PUBLIC.GEOGRAPHY_COLUMNS','PUBLIC.GEOMETRY_COLUMNS','PUBLIC.RASTER_COLUMNS','PUBLIC.RASTER_OVERVIEWS','PUBLIC.DBA_JOBS')
-";
+{(tbname == null ? "" : $") ft_dbf where {(ignoreCase ? "lower(nspname)" : "nspname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(relname)" : "relname")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@@ -400,7 +411,9 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
}
}
- sql = $@"
+ if (tbname == null)
+ {
+ sql = $@"
select
a.pktable_schem || '.' || a.pktable_name,
a.pkcolumn_name,
@@ -411,36 +424,37 @@ a.fkcolumn_name
from v_sys_foreign_keys a
where {loc8.ToString().Replace("a.table_name", "a.pktable_schem || '.' || a.pktable_name")}
";
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (var row in ds)
- {
- string table_id = string.Concat(row[0]);
- string column = string.Concat(row[1]);
- string fk_id = string.Concat(row[2]);
- string ref_table_id = string.Concat(row[3]);
- bool is_foreign_key = string.Concat(row[4]) == "1";
- string referenced_column = string.Concat(row[5]);
- if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
- var loc9 = loc3[table_id][column];
- if (loc2.ContainsKey(ref_table_id) == false) continue;
- var loc10 = loc2[ref_table_id];
- var loc11 = loc3[ref_table_id][referenced_column];
+ var fkColumns = new Dictionary>();
+ foreach (var row in ds)
+ {
+ string table_id = string.Concat(row[0]);
+ string column = string.Concat(row[1]);
+ string fk_id = string.Concat(row[2]);
+ string ref_table_id = string.Concat(row[3]);
+ bool is_foreign_key = string.Concat(row[4]) == "1";
+ string referenced_column = string.Concat(row[5]);
+ if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
+ var loc9 = loc3[table_id][column];
+ if (loc2.ContainsKey(ref_table_id) == false) continue;
+ var loc10 = loc2[ref_table_id];
+ var loc11 = loc3[ref_table_id][referenced_column];
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(table_id, out loc12))
- fkColumns.Add(table_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
- loc13.Columns.Add(loc9);
- loc13.ReferencedColumns.Add(loc11);
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(table_id, out loc12))
+ fkColumns.Add(table_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[table_id], ReferencedTable = loc10 });
+ loc13.Columns.Add(loc9);
+ loc13.ReferencedColumns.Add(loc11);
+ }
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerDbFirst.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerDbFirst.cs
index f376bf61..36459b46 100644
--- a/Providers/FreeSql.Provider.SqlServer/SqlServerDbFirst.cs
+++ b/Providers/FreeSql.Provider.SqlServer/SqlServerDbFirst.cs
@@ -6,7 +6,6 @@ using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
-using System.Text.RegularExpressions;
namespace FreeSql.SqlServer
{
@@ -128,21 +127,32 @@ 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])}
+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 DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
- public List GetTablesByDatabase(params string[] database)
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var olddatabase = "";
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
{
olddatabase = conn.Value.Database;
}
- var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
+ string[] tbname = null;
+ string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ 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();
+ dbs = new[] { tbname[0] };
+ }
var tables = new List();
foreach (var db in dbs)
@@ -155,6 +165,7 @@ use [{olddatabase}];
var sql = $@"
use [{db}];
+select * from (
select
a.Object_id
,b.name 'Owner'
@@ -183,8 +194,8 @@ select
from sys.procedures a
inner join sys.schemas b on b.schema_id = a.schema_id
where a.type = 'P' and charindex('diagram', a.name) = 0
-order by type desc, b.name, a.name
-;
+) ft_dbf{(tbname == null ? "" : _commonUtils.FormatSql(" where lower([owner])={0} and lower([Name])={1}", new[] { tbname[1], tbname[2] }))}
+order by type desc, [owner], [Name];
use [{olddatabase}];
";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
@@ -395,7 +406,9 @@ use [{olddatabase}];
}
}
- sql = $@"
+ if (tbname == null)
+ {
+ sql = $@"
use [{db}];
select
b.object_id 'Object_id'
@@ -415,47 +428,48 @@ where {loc8.ToString().Replace("a.table_name", "b.object_id")}
;
use [{olddatabase}];
";
- ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
- if (ds == null) return loc1;
+ ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
+ if (ds == null) return loc1;
- var fkColumns = new Dictionary>();
- foreach (object[] row in ds)
- {
- int object_id, referenced_object_id;
- int.TryParse(string.Concat(row[0]), out object_id);
- var column = string.Concat(row[1]);
- string fk_id = string.Concat(row[2]);
- int.TryParse(string.Concat(row[3]), out referenced_object_id);
- var is_foreign_key = bool.Parse(string.Concat(row[4]));
- var referenced_column = string.Concat(row[5]);
- var referenced_db = string.Concat(row[6]);
- var referenced_table = string.Concat(row[7]);
- DbColumnInfo loc9 = loc3[object_id][column];
- DbTableInfo loc10 = null;
- DbColumnInfo loc11 = null;
- bool isThisSln = referenced_object_id != 0;
-
- if (isThisSln)
- {
- loc10 = loc2[referenced_object_id];
- loc11 = loc3[referenced_object_id][referenced_column];
- }
- else
+ var fkColumns = new Dictionary>();
+ foreach (object[] row in ds)
{
+ int object_id, referenced_object_id;
+ int.TryParse(string.Concat(row[0]), out object_id);
+ var column = string.Concat(row[1]);
+ string fk_id = string.Concat(row[2]);
+ int.TryParse(string.Concat(row[3]), out referenced_object_id);
+ var is_foreign_key = bool.Parse(string.Concat(row[4]));
+ var referenced_column = string.Concat(row[5]);
+ var referenced_db = string.Concat(row[6]);
+ var referenced_table = string.Concat(row[7]);
+ DbColumnInfo loc9 = loc3[object_id][column];
+ DbTableInfo loc10 = null;
+ DbColumnInfo loc11 = null;
+ bool isThisSln = referenced_object_id != 0;
+ if (isThisSln)
+ {
+ loc10 = loc2[referenced_object_id];
+ loc11 = loc3[referenced_object_id][referenced_column];
+ }
+ else
+ {
+
+ }
+ Dictionary loc12 = null;
+ DbForeignInfo loc13 = null;
+ if (!fkColumns.TryGetValue(object_id, out loc12))
+ fkColumns.Add(object_id, loc12 = new Dictionary());
+ if (!loc12.TryGetValue(fk_id, out loc13))
+ loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[object_id], ReferencedTable = loc10 });
+ loc13.Columns.Add(loc9);
+ loc13.ReferencedColumns.Add(loc11);
}
- Dictionary loc12 = null;
- DbForeignInfo loc13 = null;
- if (!fkColumns.TryGetValue(object_id, out loc12))
- fkColumns.Add(object_id, loc12 = new Dictionary());
- if (!loc12.TryGetValue(fk_id, out loc13))
- loc12.Add(fk_id, loc13 = new DbForeignInfo { Table = loc2[object_id], ReferencedTable = loc10 });
- loc13.Columns.Add(loc9);
- loc13.ReferencedColumns.Add(loc11);
+ foreach (var table_id in fkColumns.Keys)
+ foreach (var fk in fkColumns[table_id])
+ loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
- foreach (var table_id in fkColumns.Keys)
- foreach (var fk in fkColumns[table_id])
- loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
foreach (var table_id in loc3.Keys)
{
diff --git a/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs b/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs
index e3fe5077..46b3bdeb 100644
--- a/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs
+++ b/Providers/FreeSql.Provider.Sqlite/SqliteDbFirst.cs
@@ -155,18 +155,28 @@ namespace FreeSql.Sqlite
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])}";
+ 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)
+ public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
+ public List GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
+
+ public List GetTables(string[] database, string tablename, bool ignoreCase)
{
var loc1 = new List();
var loc2 = new Dictionary();
var loc3 = new Dictionary>();
- var database = database2?.ToArray();
-
- if (database == null || database.Any() == false) database = GetDatabases().ToArray();
+ string[] tbname = null;
+ if (string.IsNullOrEmpty(tablename) == false)
+ {
+ tbname = _commonUtils.SplitTableName(tablename);
+ if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] };
+ if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
+ database = new[] { tbname[0] };
+ }
+ else if (database == null || database.Any() == false)
+ database = GetDatabases().ToArray();
if (database.Any() == false) return loc1;
Action