mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
- 增加 IDbFirst.GetTableByName 方法获取单表信息,包括列详情、主键、唯一键、索引、备注;
This commit is contained in:
parent
da6effcf52
commit
0d832a5a23
@ -9,17 +9,29 @@ namespace FreeSql.Tests.MySqlConnector
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.mysql.DbFirst.GetDatabases();
|
var t1 = g.mysql.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
|
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]
|
[Fact]
|
||||||
|
@ -9,19 +9,32 @@ namespace FreeSql.Tests.Odbc.Dameng
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.dameng.DbFirst.GetDatabases();
|
var t1 = g.dameng.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t2 = g.dameng.DbFirst.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\"");
|
//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]
|
[Fact]
|
||||||
public void ExistsTable()
|
public void ExistsTable()
|
||||||
{
|
{
|
||||||
|
@ -16,7 +16,22 @@ namespace FreeSql.Tests.Odbc.KingbaseES
|
|||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
var t2 = g.kingbaseES.DbFirst.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]
|
[Fact]
|
||||||
|
@ -9,17 +9,29 @@ namespace FreeSql.Tests.Odbc.MySql
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.mysql.DbFirst.GetDatabases();
|
var t1 = g.mysql.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
|
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]
|
[Fact]
|
||||||
|
@ -9,19 +9,32 @@ namespace FreeSql.Tests.Odbc.Oracle
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.oracle.DbFirst.GetDatabases();
|
var t1 = g.oracle.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t2 = g.oracle.DbFirst.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\"");
|
//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]
|
[Fact]
|
||||||
public void ExistsTable()
|
public void ExistsTable()
|
||||||
{
|
{
|
||||||
|
@ -10,20 +10,29 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.pgsql.DbFirst.GetDatabases();
|
var t1 = g.pgsql.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
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]);
|
[Fact]
|
||||||
|
public void GetTableByName()
|
||||||
var tb_alltype = t2.Where(a => a.Name == "tb_alltype").FirstOrDefault();
|
{
|
||||||
|
var fsql = g.pgsql;
|
||||||
var tb_identity = t2.Where(a => a.Name == "test_new").FirstOrDefault();
|
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]
|
[Fact]
|
||||||
|
@ -10,17 +10,29 @@ namespace FreeSql.Tests.Odbc.SqlServer
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.sqlserver.DbFirst.GetDatabases();
|
var t1 = g.sqlserver.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t2 = g.sqlserver.DbFirst.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]
|
[Fact]
|
||||||
|
@ -9,19 +9,32 @@ namespace FreeSql.Tests.Dameng
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.dameng.DbFirst.GetDatabases();
|
var t1 = g.dameng.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t2 = g.dameng.DbFirst.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\"");
|
//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]
|
[Fact]
|
||||||
public void ExistsTable()
|
public void ExistsTable()
|
||||||
{
|
{
|
||||||
|
@ -9,17 +9,29 @@ namespace FreeSql.Tests.MySql
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.mysql.DbFirst.GetDatabases();
|
var t1 = g.mysql.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
|
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]
|
[Fact]
|
||||||
|
@ -9,19 +9,32 @@ namespace FreeSql.Tests.Oracle
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.oracle.DbFirst.GetDatabases();
|
var t1 = g.oracle.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t2 = g.oracle.DbFirst.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\"");
|
//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]
|
[Fact]
|
||||||
public void ExistsTable()
|
public void ExistsTable()
|
||||||
{
|
{
|
||||||
|
@ -10,21 +10,29 @@ namespace FreeSql.Tests.PostgreSQL
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.pgsql.DbFirst.GetDatabases();
|
var t1 = g.pgsql.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t2 = g.pgsql.DbFirst.GetTablesByDatabase(g.pgsql.DbFirst.GetDatabases()[1]);
|
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();
|
[Fact]
|
||||||
|
public void GetTableByName()
|
||||||
var tb_identity = t2.Where(a => a.Name == "test_new").FirstOrDefault();
|
{
|
||||||
|
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]
|
[Fact]
|
||||||
|
@ -9,9 +9,7 @@ namespace FreeSql.Tests.ShenTong
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.shentong.DbFirst.GetDatabases();
|
var t1 = g.shentong.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@ -19,7 +17,23 @@ namespace FreeSql.Tests.ShenTong
|
|||||||
{
|
{
|
||||||
var t1 = g.shentong.DbFirst.GetTablesByDatabase();
|
var t1 = g.shentong.DbFirst.GetTablesByDatabase();
|
||||||
var t2 = g.shentong.DbFirst.GetTablesByDatabase(g.shentong.DbFirst.GetDatabases()[0]);
|
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]
|
[Fact]
|
||||||
|
@ -19,17 +19,29 @@ namespace FreeSql.Tests.SqlServer
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.sqlserver.DbFirst.GetDatabases();
|
var t1 = g.sqlserver.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t2 = g.sqlserver.DbFirst.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]
|
[Fact]
|
||||||
|
@ -9,17 +9,29 @@ namespace FreeSql.Tests.Sqlite
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void GetDatabases()
|
public void GetDatabases()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t1 = g.sqlite.DbFirst.GetDatabases();
|
var t1 = g.sqlite.DbFirst.GetDatabases();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GetTablesByDatabase()
|
public void GetTablesByDatabase()
|
||||||
{
|
{
|
||||||
|
|
||||||
var t2 = g.sqlite.DbFirst.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]
|
[Fact]
|
||||||
|
@ -3121,6 +3121,22 @@
|
|||||||
<param name="database"></param>
|
<param name="database"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSql.IDbFirst.GetTableByName(System.String,System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
获取指定单表信息,包括列详情、主键、唯一键、索引、备注
|
||||||
|
</summary>
|
||||||
|
<param name="name">表名,如:dbo.table1</param>
|
||||||
|
<param name="ignoreCase">是否忽略大小写</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:FreeSql.IDbFirst.ExistsTable(System.String,System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
判断表是否存在
|
||||||
|
</summary>
|
||||||
|
<param name="name">表名,如:dbo.table1</param>
|
||||||
|
<param name="ignoreCase">是否忽略大小写</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:FreeSql.IDbFirst.GetDbType(FreeSql.DatabaseModel.DbColumnInfo)">
|
<member name="M:FreeSql.IDbFirst.GetDbType(FreeSql.DatabaseModel.DbColumnInfo)">
|
||||||
<summary>
|
<summary>
|
||||||
获取数据库枚举类型int值
|
获取数据库枚举类型int值
|
||||||
@ -3184,14 +3200,6 @@
|
|||||||
<param name="database"></param>
|
<param name="database"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSql.IDbFirst.ExistsTable(System.String,System.Boolean)">
|
|
||||||
<summary>
|
|
||||||
判断表是否存在
|
|
||||||
</summary>
|
|
||||||
<param name="name">表名,如:dbo.table1</param>
|
|
||||||
<param name="ignoreCase">是否忽略大小写</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Internal.CommonProvider.InsertOrUpdateProvider`1.SplitSourceByIdentityValueIsNull(System.Collections.Generic.List{`0})">
|
<member name="M:FreeSql.Internal.CommonProvider.InsertOrUpdateProvider`1.SplitSourceByIdentityValueIsNull(System.Collections.Generic.List{`0})">
|
||||||
<summary>
|
<summary>
|
||||||
如果实体类有自增属性,分成两个 List,有值的Item1 merge,无值的Item2 insert
|
如果实体类有自增属性,分成两个 List,有值的Item1 merge,无值的Item2 insert
|
||||||
|
@ -19,6 +19,22 @@ namespace FreeSql
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<DbTableInfo> GetTablesByDatabase(params string[] database);
|
List<DbTableInfo> GetTablesByDatabase(params string[] database);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取指定单表信息,包括列详情、主键、唯一键、索引、备注
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">表名,如:dbo.table1</param>
|
||||||
|
/// <param name="ignoreCase">是否忽略大小写</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
DbTableInfo GetTableByName(string name, bool ignoreCase = true);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 判断表是否存在
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">表名,如:dbo.table1</param>
|
||||||
|
/// <param name="ignoreCase">是否忽略大小写</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
bool ExistsTable(string name, bool ignoreCase = true);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取数据库枚举类型int值
|
/// 获取数据库枚举类型int值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -75,15 +91,5 @@ namespace FreeSql
|
|||||||
/// <param name="database"></param>
|
/// <param name="database"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
List<DbEnumInfo> GetEnumsByDatabase(params string[] database);
|
List<DbEnumInfo> GetEnumsByDatabase(params string[] database);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 判断表是否存在
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="name">表名,如:dbo.table1</param>
|
|
||||||
/// <param name="ignoreCase">是否忽略大小写</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
bool ExistsTable(string name, bool ignoreCase = true);
|
|
||||||
|
|
||||||
//DbTableInfo GetTableByName(string name);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -231,21 +231,36 @@ namespace FreeSql.Dameng
|
|||||||
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database2)
|
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
|
||||||
|
public List<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var loc1 = new List<DbTableInfo>();
|
var loc1 = new List<DbTableInfo>();
|
||||||
var loc2 = new Dictionary<string, DbTableInfo>();
|
var loc2 = new Dictionary<string, DbTableInfo>();
|
||||||
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
||||||
var database = database2?.ToArray();
|
string[] tbname = null;
|
||||||
|
if (string.IsNullOrEmpty(tablename) == false)
|
||||||
if (database == null || database.Any() == 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();
|
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
|
||||||
if (string.IsNullOrEmpty(userUsers)) return loc1;
|
if (string.IsNullOrEmpty(userUsers)) return loc1;
|
||||||
database = new[] { userUsers };
|
database = new[] { userUsers };
|
||||||
}
|
}
|
||||||
|
|
||||||
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
||||||
var sql = string.Format(@"
|
var sql = $@"
|
||||||
select
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
a.owner,
|
a.owner,
|
||||||
@ -254,7 +269,7 @@ b.comments,
|
|||||||
'TABLE'
|
'TABLE'
|
||||||
from all_tables a
|
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'
|
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);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -315,7 +330,7 @@ where a.owner in ({0})", databaseIn);
|
|||||||
}
|
}
|
||||||
loc8.Append(")");
|
loc8.Append(")");
|
||||||
|
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
a.column_name,
|
a.column_name,
|
||||||
@ -330,8 +345,8 @@ b.comments,
|
|||||||
a.data_default
|
a.data_default
|
||||||
from all_tab_cols a
|
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
|
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}
|
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
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]);
|
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
|
||||||
}
|
}
|
||||||
|
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
a.table_owner || '.' || a.table_name,
|
a.table_owner || '.' || a.table_name,
|
||||||
c.column_name,
|
c.column_name,
|
||||||
@ -401,8 +416,8 @@ all_ind_columns c
|
|||||||
where a.index_name = c.index_name
|
where a.index_name = c.index_name
|
||||||
and a.table_owner = c.table_owner
|
and a.table_owner = c.table_owner
|
||||||
and a.table_name = c.table_name
|
and a.table_name = c.table_name
|
||||||
and a.table_owner in ({1}) and {0}
|
and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
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
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
c.column_name,
|
c.column_name,
|
||||||
@ -488,8 +505,8 @@ and a.owner = c.owner
|
|||||||
and a.table_name = c.table_name
|
and a.table_name = c.table_name
|
||||||
and b.owner = d.owner
|
and b.owner = d.owner
|
||||||
and b.table_name = d.table_name
|
and b.table_name = d.table_name
|
||||||
and a.owner in ({1}) and {0}
|
and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -525,6 +542,7 @@ and a.owner in ({1}) and {0}
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -166,14 +166,30 @@ namespace FreeSql.MySql
|
|||||||
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database2)
|
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
|
||||||
|
public List<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var loc1 = new List<DbTableInfo>();
|
var loc1 = new List<DbTableInfo>();
|
||||||
var loc2 = new Dictionary<string, DbTableInfo>();
|
var loc2 = new Dictionary<string, DbTableInfo>();
|
||||||
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
||||||
var database = database2?.ToArray();
|
string[] tbname = null;
|
||||||
|
if (string.IsNullOrEmpty(tablename) == false)
|
||||||
if (database == null || database.Any() == 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())
|
using (var conn = _orm.Ado.MasterPool.Get())
|
||||||
{
|
{
|
||||||
@ -181,8 +197,9 @@ namespace FreeSql.MySql
|
|||||||
database = new[] { conn.Value.Database };
|
database = new[] { conn.Value.Database };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
||||||
var sql = string.Format(@"
|
var sql = $@"
|
||||||
select
|
select
|
||||||
concat(a.table_schema, '.', a.table_name) 'id',
|
concat(a.table_schema, '.', a.table_name) 'id',
|
||||||
a.table_schema 'schema',
|
a.table_schema 'schema',
|
||||||
@ -190,7 +207,7 @@ a.table_name 'table',
|
|||||||
a.table_comment,
|
a.table_comment,
|
||||||
a.table_type 'type'
|
a.table_type 'type'
|
||||||
from information_schema.tables a
|
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);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -251,7 +268,7 @@ where a.table_schema in ({0})", databaseIn);
|
|||||||
}
|
}
|
||||||
loc8.Append(")");
|
loc8.Append(")");
|
||||||
|
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
concat(a.table_schema, '.', a.table_name),
|
concat(a.table_schema, '.', a.table_name),
|
||||||
a.column_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_comment 'comment',
|
||||||
a.column_default 'default_value'
|
a.column_default 'default_value'
|
||||||
from information_schema.columns a
|
from information_schema.columns a
|
||||||
where a.table_schema in ({1}) and {0}
|
where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
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]);
|
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
|
||||||
}
|
}
|
||||||
|
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
concat(a.table_schema, '.', a.table_name) 'table_id',
|
concat(a.table_schema, '.', a.table_name) 'table_id',
|
||||||
a.column_name,
|
a.column_name,
|
||||||
@ -315,8 +332,8 @@ case when a.index_name = 'PRIMARY' then 1 else 0 end 'IsPrimaryKey',
|
|||||||
0 'IsClustered',
|
0 'IsClustered',
|
||||||
0 'IsDesc'
|
0 'IsDesc'
|
||||||
from information_schema.statistics a
|
from information_schema.statistics a
|
||||||
where a.table_schema in ({1}) and {0}
|
where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
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
|
select
|
||||||
concat(a.constraint_schema, '.', a.table_name) 'table_id',
|
concat(a.constraint_schema, '.', a.table_name) 'table_id',
|
||||||
a.column_name,
|
a.column_name,
|
||||||
@ -376,8 +395,8 @@ concat(a.referenced_table_schema, '.', a.referenced_table_name) 'ref_table_id',
|
|||||||
1 'IsForeignKey',
|
1 'IsForeignKey',
|
||||||
a.referenced_column_name 'ref_column'
|
a.referenced_column_name 'ref_column'
|
||||||
from information_schema.key_column_usage a
|
from information_schema.key_column_usage a
|
||||||
where a.constraint_schema in ({1}) and {0} and not isnull(position_in_unique_constraint)
|
where {(ignoreCase ? "lower(a.constraint_schema)" : "a.constraint_schema")} in ({databaseIn}) and {loc8} and not isnull(position_in_unique_constraint)
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -413,6 +432,7 @@ where a.constraint_schema in ({1}) and {0} and not isnull(position_in_unique_con
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -231,21 +231,36 @@ namespace FreeSql.Odbc.Dameng
|
|||||||
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database2)
|
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
|
||||||
|
public List<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var loc1 = new List<DbTableInfo>();
|
var loc1 = new List<DbTableInfo>();
|
||||||
var loc2 = new Dictionary<string, DbTableInfo>();
|
var loc2 = new Dictionary<string, DbTableInfo>();
|
||||||
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
||||||
var database = database2?.ToArray();
|
string[] tbname = null;
|
||||||
|
if (string.IsNullOrEmpty(tablename) == false)
|
||||||
if (database == null || database.Any() == 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();
|
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
|
||||||
if (string.IsNullOrEmpty(userUsers)) return loc1;
|
if (string.IsNullOrEmpty(userUsers)) return loc1;
|
||||||
database = new[] { userUsers };
|
database = new[] { userUsers };
|
||||||
}
|
}
|
||||||
|
|
||||||
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
||||||
var sql = string.Format(@"
|
var sql = $@"
|
||||||
select
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
a.owner,
|
a.owner,
|
||||||
@ -254,7 +269,7 @@ b.comments,
|
|||||||
'TABLE'
|
'TABLE'
|
||||||
from all_tables a
|
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'
|
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);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -315,7 +330,7 @@ where a.owner in ({0})", databaseIn);
|
|||||||
}
|
}
|
||||||
loc8.Append(")");
|
loc8.Append(")");
|
||||||
|
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
a.column_name,
|
a.column_name,
|
||||||
@ -330,8 +345,8 @@ b.comments,
|
|||||||
a.data_default
|
a.data_default
|
||||||
from all_tab_cols a
|
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
|
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}
|
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
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]);
|
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
|
||||||
}
|
}
|
||||||
|
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
a.table_owner || '.' || a.table_name,
|
a.table_owner || '.' || a.table_name,
|
||||||
c.column_name,
|
c.column_name,
|
||||||
@ -401,8 +416,8 @@ all_ind_columns c
|
|||||||
where a.index_name = c.index_name
|
where a.index_name = c.index_name
|
||||||
and a.table_owner = c.table_owner
|
and a.table_owner = c.table_owner
|
||||||
and a.table_name = c.table_name
|
and a.table_name = c.table_name
|
||||||
and a.table_owner in ({1}) and {0}
|
and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
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
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
c.column_name,
|
c.column_name,
|
||||||
@ -488,8 +505,8 @@ and a.owner = c.owner
|
|||||||
and a.table_name = c.table_name
|
and a.table_name = c.table_name
|
||||||
and b.owner = d.owner
|
and b.owner = d.owner
|
||||||
and b.table_name = d.table_name
|
and b.table_name = d.table_name
|
||||||
and a.owner in ({1}) and {0}
|
and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -525,6 +542,7 @@ and a.owner in ({1}) and {0}
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -18,7 +18,7 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal string InternalTableAlias;
|
internal string InternalTableAlias { get; set; }
|
||||||
internal StringBuilder InternalSbSet => _set;
|
internal StringBuilder InternalSbSet => _set;
|
||||||
internal StringBuilder InternalSbSetIncr => _setIncr;
|
internal StringBuilder InternalSbSetIncr => _setIncr;
|
||||||
internal Dictionary<string, bool> InternalIgnore => _ignore;
|
internal Dictionary<string, bool> InternalIgnore => _ignore;
|
||||||
|
@ -116,20 +116,31 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
var tbname = _commonUtils.SplitTableName(name);
|
var tbname = _commonUtils.SplitTableName(name);
|
||||||
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
|
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
|
||||||
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
|
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";
|
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database)
|
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
|
||||||
|
public List<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var olddatabase = "";
|
var olddatabase = "";
|
||||||
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
|
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
|
||||||
{
|
{
|
||||||
olddatabase = conn.Value.Database;
|
olddatabase = conn.Value.Database;
|
||||||
}
|
}
|
||||||
var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
|
string[] tbname = null;
|
||||||
var tables = new List<DbTableInfo>();
|
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<DbTableInfo>();
|
||||||
foreach (var db in dbs)
|
foreach (var db in dbs)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(db) || string.Compare(db, olddatabase, true) != 0) continue;
|
if (string.IsNullOrEmpty(db) || string.Compare(db, olddatabase, true) != 0) continue;
|
||||||
@ -139,7 +150,7 @@ namespace FreeSql.Odbc.KingbaseES
|
|||||||
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
||||||
|
|
||||||
var sql = $@"
|
var sql = $@"
|
||||||
select
|
{(tbname == null ? "" : $"select * from (")}select
|
||||||
b.nspname || '.' || a.tablename,
|
b.nspname || '.' || a.tablename,
|
||||||
a.schemaname,
|
a.schemaname,
|
||||||
a.tablename ,
|
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
|
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')
|
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')
|
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);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -381,6 +392,8 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tbname == null)
|
||||||
|
{
|
||||||
sql = $@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
ns.nspname || '.' || b.relname as table_id,
|
ns.nspname || '.' || b.relname as table_id,
|
||||||
@ -431,6 +444,7 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || b.relname")
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -132,14 +132,30 @@ namespace FreeSql.Odbc.MySql
|
|||||||
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database2)
|
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
|
||||||
|
public List<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var loc1 = new List<DbTableInfo>();
|
var loc1 = new List<DbTableInfo>();
|
||||||
var loc2 = new Dictionary<string, DbTableInfo>();
|
var loc2 = new Dictionary<string, DbTableInfo>();
|
||||||
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
||||||
var database = database2?.ToArray();
|
string[] tbname = null;
|
||||||
|
if (string.IsNullOrEmpty(tablename) == false)
|
||||||
if (database == null || database.Any() == 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())
|
using (var conn = _orm.Ado.MasterPool.Get())
|
||||||
{
|
{
|
||||||
@ -147,8 +163,9 @@ namespace FreeSql.Odbc.MySql
|
|||||||
database = new[] { conn.Value.Database };
|
database = new[] { conn.Value.Database };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
||||||
var sql = string.Format(@"
|
var sql = $@"
|
||||||
select
|
select
|
||||||
concat(a.table_schema, '.', a.table_name) 'id',
|
concat(a.table_schema, '.', a.table_name) 'id',
|
||||||
a.table_schema 'schema',
|
a.table_schema 'schema',
|
||||||
@ -156,7 +173,7 @@ a.table_name 'table',
|
|||||||
a.table_comment,
|
a.table_comment,
|
||||||
a.table_type 'type'
|
a.table_type 'type'
|
||||||
from information_schema.tables a
|
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);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -217,7 +234,7 @@ where a.table_schema in ({0})", databaseIn);
|
|||||||
}
|
}
|
||||||
loc8.Append(")");
|
loc8.Append(")");
|
||||||
|
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
concat(a.table_schema, '.', a.table_name),
|
concat(a.table_schema, '.', a.table_name),
|
||||||
a.column_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_comment 'comment',
|
||||||
a.column_default 'default_value'
|
a.column_default 'default_value'
|
||||||
from information_schema.columns a
|
from information_schema.columns a
|
||||||
where a.table_schema in ({1}) and {0}
|
where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
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]);
|
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
|
||||||
}
|
}
|
||||||
|
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
concat(a.table_schema, '.', a.table_name) 'table_id',
|
concat(a.table_schema, '.', a.table_name) 'table_id',
|
||||||
a.column_name,
|
a.column_name,
|
||||||
@ -281,8 +298,8 @@ case when a.index_name = 'PRIMARY' then 1 else 0 end 'IsPrimaryKey',
|
|||||||
0 'IsClustered',
|
0 'IsClustered',
|
||||||
0 'IsDesc'
|
0 'IsDesc'
|
||||||
from information_schema.statistics a
|
from information_schema.statistics a
|
||||||
where a.table_schema in ({1}) and {0}
|
where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
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
|
select
|
||||||
concat(a.constraint_schema, '.', a.table_name) 'table_id',
|
concat(a.constraint_schema, '.', a.table_name) 'table_id',
|
||||||
a.column_name,
|
a.column_name,
|
||||||
@ -342,8 +361,8 @@ concat(a.referenced_table_schema, '.', a.referenced_table_name) 'ref_table_id',
|
|||||||
1 'IsForeignKey',
|
1 'IsForeignKey',
|
||||||
a.referenced_column_name 'ref_column'
|
a.referenced_column_name 'ref_column'
|
||||||
from information_schema.key_column_usage a
|
from information_schema.key_column_usage a
|
||||||
where a.constraint_schema in ({1}) and {0} and not isnull(position_in_unique_constraint)
|
where {(ignoreCase ? "lower(a.constraint_schema)" : "a.constraint_schema")} in ({databaseIn}) and {loc8} and not isnull(position_in_unique_constraint)
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -379,6 +398,7 @@ where a.constraint_schema in ({1}) and {0} and not isnull(position_in_unique_con
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -185,21 +185,36 @@ namespace FreeSql.Odbc.Oracle
|
|||||||
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database2)
|
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
|
||||||
|
public List<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var loc1 = new List<DbTableInfo>();
|
var loc1 = new List<DbTableInfo>();
|
||||||
var loc2 = new Dictionary<string, DbTableInfo>();
|
var loc2 = new Dictionary<string, DbTableInfo>();
|
||||||
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
||||||
var database = database2?.ToArray();
|
string[] tbname = null;
|
||||||
|
if (string.IsNullOrEmpty(tablename) == false)
|
||||||
if (database == null || database.Any() == 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();
|
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
|
||||||
if (string.IsNullOrEmpty(userUsers)) return loc1;
|
if (string.IsNullOrEmpty(userUsers)) return loc1;
|
||||||
database = new[] { userUsers };
|
database = new[] { userUsers };
|
||||||
}
|
}
|
||||||
|
|
||||||
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
||||||
var sql = string.Format(@"
|
var sql = $@"
|
||||||
select
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
a.owner,
|
a.owner,
|
||||||
@ -208,7 +223,7 @@ b.comments,
|
|||||||
'TABLE'
|
'TABLE'
|
||||||
from all_tables a
|
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'
|
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);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -288,7 +303,7 @@ BEGIN
|
|||||||
RETURN TEXT_C1;
|
RETURN TEXT_C1;
|
||||||
END;");
|
END;");
|
||||||
|
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
a.column_name,
|
a.column_name,
|
||||||
@ -303,8 +318,8 @@ to_char(b.comments),
|
|||||||
nvl(FREESQL_LONG_TO_CHAR_DEFAULT(a.table_name, a.column_name),'')
|
nvl(FREESQL_LONG_TO_CHAR_DEFAULT(a.table_name, a.column_name),'')
|
||||||
from all_tab_cols a
|
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
|
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}
|
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -360,7 +375,7 @@ where a.owner in ({1}) and {0}
|
|||||||
}
|
}
|
||||||
|
|
||||||
OdbcOracleCodeFirst.CreateOracleFunction(_orm);
|
OdbcOracleCodeFirst.CreateOracleFunction(_orm);
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
a.table_owner || '.' || a.table_name,
|
a.table_owner || '.' || a.table_name,
|
||||||
nvl(freesql_long_2_varchar(a.index_name, c.table_name, c.column_position), c.column_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
|
where a.index_name = c.index_name
|
||||||
and a.table_owner = c.table_owner
|
and a.table_owner = c.table_owner
|
||||||
and a.table_name = c.table_name
|
and a.table_name = c.table_name
|
||||||
and a.table_owner in ({1}) and {0}
|
and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
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
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
c.column_name,
|
c.column_name,
|
||||||
@ -462,8 +479,8 @@ and a.owner = c.owner
|
|||||||
and a.table_name = c.table_name
|
and a.table_name = c.table_name
|
||||||
and b.owner = d.owner
|
and b.owner = d.owner
|
||||||
and b.table_name = d.table_name
|
and b.table_name = d.table_name
|
||||||
and a.owner in ({1}) and {0}
|
and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -499,6 +516,7 @@ and a.owner in ({1}) and {0}
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -18,7 +18,7 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal string InternalTableAlias;
|
internal string InternalTableAlias { get; set; }
|
||||||
internal StringBuilder InternalSbSet => _set;
|
internal StringBuilder InternalSbSet => _set;
|
||||||
internal StringBuilder InternalSbSetIncr => _setIncr;
|
internal StringBuilder InternalSbSetIncr => _setIncr;
|
||||||
internal Dictionary<string, bool> InternalIgnore => _ignore;
|
internal Dictionary<string, bool> InternalIgnore => _ignore;
|
||||||
|
@ -128,11 +128,14 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
var tbname = _commonUtils.SplitTableName(name);
|
var tbname = _commonUtils.SplitTableName(name);
|
||||||
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
|
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
|
||||||
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
|
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";
|
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database)
|
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
|
||||||
|
public List<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var olddatabase = "";
|
var olddatabase = "";
|
||||||
var is96 = true;
|
var is96 = true;
|
||||||
@ -141,7 +144,15 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
olddatabase = conn.Value.Database;
|
olddatabase = conn.Value.Database;
|
||||||
is96 = PgVersionIs96(conn.Value.ServerVersion);
|
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<DbTableInfo>();
|
var tables = new List<DbTableInfo>();
|
||||||
|
|
||||||
foreach (var db in dbs)
|
foreach (var db in dbs)
|
||||||
@ -153,7 +164,7 @@ namespace FreeSql.Odbc.PostgreSQL
|
|||||||
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
||||||
|
|
||||||
var sql = $@"
|
var sql = $@"
|
||||||
select
|
{(tbname == null ? "" : $"select * from (")}select
|
||||||
b.nspname || '.' || a.tablename,
|
b.nspname || '.' || a.tablename,
|
||||||
a.schemaname,
|
a.schemaname,
|
||||||
a.tablename ,
|
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
|
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')
|
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')
|
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);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -396,6 +407,8 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tbname == null)
|
||||||
|
{
|
||||||
sql = $@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
ns.nspname || '.' || b.relname as table_id,
|
ns.nspname || '.' || b.relname as table_id,
|
||||||
@ -446,6 +459,7 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || b.relname")
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -7,7 +7,6 @@ using System.Data;
|
|||||||
using System.Data.Odbc;
|
using System.Data.Odbc;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
|
|
||||||
namespace FreeSql.Odbc.SqlServer
|
namespace FreeSql.Odbc.SqlServer
|
||||||
{
|
{
|
||||||
@ -125,21 +124,32 @@ select
|
|||||||
1
|
1
|
||||||
from sys.tables a
|
from sys.tables a
|
||||||
inner join sys.schemas b on b.schema_id = a.schema_id
|
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}];
|
use [{olddatabase}];
|
||||||
";
|
";
|
||||||
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
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<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database)
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var olddatabase = "";
|
var olddatabase = "";
|
||||||
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
|
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
|
||||||
{
|
{
|
||||||
olddatabase = conn.Value.Database;
|
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<DbTableInfo>();
|
var tables = new List<DbTableInfo>();
|
||||||
|
|
||||||
foreach (var db in dbs)
|
foreach (var db in dbs)
|
||||||
@ -152,6 +162,7 @@ use [{olddatabase}];
|
|||||||
|
|
||||||
var sql = $@"
|
var sql = $@"
|
||||||
use [{db}];
|
use [{db}];
|
||||||
|
select * from (
|
||||||
select
|
select
|
||||||
a.Object_id
|
a.Object_id
|
||||||
,b.name 'Owner'
|
,b.name 'Owner'
|
||||||
@ -180,8 +191,8 @@ select
|
|||||||
from sys.procedures a
|
from sys.procedures a
|
||||||
inner join sys.schemas b on b.schema_id = a.schema_id
|
inner join sys.schemas b on b.schema_id = a.schema_id
|
||||||
where a.type = 'P' and charindex('diagram', a.name) = 0
|
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}];
|
use [{olddatabase}];
|
||||||
";
|
";
|
||||||
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
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 + ')'
|
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) + ')'
|
when b.name in ('Numeric', 'Decimal') then '(' + cast(a.precision as varchar) + ',' + cast(a.scale as varchar) + ')'
|
||||||
else '' end as 'SqlType'
|
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
|
{0} a
|
||||||
inner join sys.types b on b.user_type_id = a.user_type_id
|
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
|
left join sys.tables d on d.object_id = a.object_id
|
||||||
@ -392,6 +403,8 @@ use [{olddatabase}];
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tbname == null)
|
||||||
|
{
|
||||||
sql = $@"
|
sql = $@"
|
||||||
use [{db}];
|
use [{db}];
|
||||||
select
|
select
|
||||||
@ -453,6 +466,7 @@ use [{olddatabase}];
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -185,21 +185,36 @@ namespace FreeSql.Oracle
|
|||||||
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database2)
|
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
|
||||||
|
public List<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var loc1 = new List<DbTableInfo>();
|
var loc1 = new List<DbTableInfo>();
|
||||||
var loc2 = new Dictionary<string, DbTableInfo>();
|
var loc2 = new Dictionary<string, DbTableInfo>();
|
||||||
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
||||||
var database = database2?.ToArray();
|
string[] tbname = null;
|
||||||
|
if (string.IsNullOrEmpty(tablename) == false)
|
||||||
if (database == null || database.Any() == 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();
|
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
|
||||||
if (string.IsNullOrEmpty(userUsers)) return loc1;
|
if (string.IsNullOrEmpty(userUsers)) return loc1;
|
||||||
database = new[] { userUsers };
|
database = new[] { userUsers };
|
||||||
}
|
}
|
||||||
|
|
||||||
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
||||||
var sql = string.Format(@"
|
var sql = $@"
|
||||||
select
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
a.owner,
|
a.owner,
|
||||||
@ -208,7 +223,7 @@ b.comments,
|
|||||||
'TABLE'
|
'TABLE'
|
||||||
from all_tables a
|
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'
|
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);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -288,7 +303,7 @@ BEGIN
|
|||||||
RETURN TEXT_C1;
|
RETURN TEXT_C1;
|
||||||
END;");
|
END;");
|
||||||
|
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
a.column_name,
|
a.column_name,
|
||||||
@ -303,8 +318,8 @@ to_char(b.comments),
|
|||||||
nvl(FREESQL_LONG_TO_CHAR_DEFAULT(a.table_name, a.column_name),'')
|
nvl(FREESQL_LONG_TO_CHAR_DEFAULT(a.table_name, a.column_name),'')
|
||||||
from all_tab_cols a
|
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
|
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}
|
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -360,7 +375,7 @@ where a.owner in ({1}) and {0}
|
|||||||
}
|
}
|
||||||
|
|
||||||
OracleCodeFirst.CreateOracleFunction(_orm);
|
OracleCodeFirst.CreateOracleFunction(_orm);
|
||||||
sql = string.Format(@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
a.table_owner || '.' || a.table_name,
|
a.table_owner || '.' || a.table_name,
|
||||||
nvl(freesql_long_2_varchar(a.index_name, c.table_name, c.column_position), c.column_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
|
where a.index_name = c.index_name
|
||||||
and a.table_owner = c.table_owner
|
and a.table_owner = c.table_owner
|
||||||
and a.table_name = c.table_name
|
and a.table_name = c.table_name
|
||||||
and a.table_owner in ({1}) and {0}
|
and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
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
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
c.column_name,
|
c.column_name,
|
||||||
@ -462,8 +479,8 @@ and a.owner = c.owner
|
|||||||
and a.table_name = c.table_name
|
and a.table_name = c.table_name
|
||||||
and b.owner = d.owner
|
and b.owner = d.owner
|
||||||
and b.table_name = d.table_name
|
and b.table_name = d.table_name
|
||||||
and a.owner in ({1}) and {0}
|
and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
|
||||||
", loc8, databaseIn);
|
";
|
||||||
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -499,6 +516,7 @@ and a.owner in ({1}) and {0}
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -18,7 +18,7 @@ namespace FreeSql.PostgreSQL.Curd
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal string InternalTableAlias;
|
internal string InternalTableAlias { get; set; }
|
||||||
internal StringBuilder InternalSbSet => _set;
|
internal StringBuilder InternalSbSet => _set;
|
||||||
internal StringBuilder InternalSbSetIncr => _setIncr;
|
internal StringBuilder InternalSbSetIncr => _setIncr;
|
||||||
internal Dictionary<string, bool> InternalIgnore => _ignore;
|
internal Dictionary<string, bool> InternalIgnore => _ignore;
|
||||||
|
@ -238,11 +238,14 @@ namespace FreeSql.PostgreSQL
|
|||||||
var tbname = _commonUtils.SplitTableName(name);
|
var tbname = _commonUtils.SplitTableName(name);
|
||||||
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
|
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
|
||||||
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
|
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";
|
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database)
|
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
|
||||||
|
public List<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var olddatabase = "";
|
var olddatabase = "";
|
||||||
var is96 = true;
|
var is96 = true;
|
||||||
@ -251,7 +254,15 @@ namespace FreeSql.PostgreSQL
|
|||||||
olddatabase = conn.Value.Database;
|
olddatabase = conn.Value.Database;
|
||||||
is96 = PgVersionIs96(conn.Value.ServerVersion);
|
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<DbTableInfo>();
|
var tables = new List<DbTableInfo>();
|
||||||
|
|
||||||
foreach (var db in dbs)
|
foreach (var db in dbs)
|
||||||
@ -263,7 +274,7 @@ namespace FreeSql.PostgreSQL
|
|||||||
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
||||||
|
|
||||||
var sql = $@"
|
var sql = $@"
|
||||||
select
|
{(tbname == null ? "" : $"select * from (")}select
|
||||||
b.nspname || '.' || a.tablename,
|
b.nspname || '.' || a.tablename,
|
||||||
a.schemaname,
|
a.schemaname,
|
||||||
a.tablename ,
|
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
|
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')
|
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')
|
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);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -506,6 +517,8 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tbname == null)
|
||||||
|
{
|
||||||
sql = $@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
ns.nspname || '.' || b.relname as table_id,
|
ns.nspname || '.' || b.relname as table_id,
|
||||||
@ -556,6 +569,7 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || b.relname")
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -19,7 +19,7 @@ namespace FreeSql.ShenTong.Curd
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal string InternalTableAlias;
|
internal string InternalTableAlias { get; set; }
|
||||||
internal StringBuilder InternalSbSet => _set;
|
internal StringBuilder InternalSbSet => _set;
|
||||||
internal StringBuilder InternalSbSetIncr => _setIncr;
|
internal StringBuilder InternalSbSetIncr => _setIncr;
|
||||||
internal Dictionary<string, bool> InternalIgnore => _ignore;
|
internal Dictionary<string, bool> InternalIgnore => _ignore;
|
||||||
|
@ -134,19 +134,30 @@ select
|
|||||||
1
|
1
|
||||||
from sys_class a
|
from sys_class a
|
||||||
inner join sys_namespace b on b.oid = a.relnamespace
|
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";
|
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database)
|
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
|
||||||
|
public List<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var olddatabase = "";
|
var olddatabase = "";
|
||||||
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
|
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
|
||||||
{
|
{
|
||||||
olddatabase = conn.Value.Database;
|
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<DbTableInfo>();
|
var tables = new List<DbTableInfo>();
|
||||||
|
|
||||||
foreach (var db in dbs)
|
foreach (var db in dbs)
|
||||||
@ -158,7 +169,7 @@ where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")} = {_commonUtils.FormatSq
|
|||||||
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
||||||
|
|
||||||
var sql = $@"
|
var sql = $@"
|
||||||
select
|
{(tbname == null ? "" : $"select * from (")}select
|
||||||
b.nspname || '.' || a.relname,
|
b.nspname || '.' || a.relname,
|
||||||
b.nspname,
|
b.nspname,
|
||||||
a.relname,
|
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
|
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')
|
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')
|
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);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) return loc1;
|
if (ds == null) return loc1;
|
||||||
|
|
||||||
@ -400,6 +411,8 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tbname == null)
|
||||||
|
{
|
||||||
sql = $@"
|
sql = $@"
|
||||||
select
|
select
|
||||||
a.pktable_schem || '.' || a.pktable_name,
|
a.pktable_schem || '.' || a.pktable_name,
|
||||||
@ -441,6 +454,7 @@ where {loc8.ToString().Replace("a.table_name", "a.pktable_schem || '.' || a.pkta
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -6,7 +6,6 @@ using System.Collections.Generic;
|
|||||||
using System.Data;
|
using System.Data;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
|
|
||||||
namespace FreeSql.SqlServer
|
namespace FreeSql.SqlServer
|
||||||
{
|
{
|
||||||
@ -128,21 +127,32 @@ select
|
|||||||
1
|
1
|
||||||
from sys.tables a
|
from sys.tables a
|
||||||
inner join sys.schemas b on b.schema_id = a.schema_id
|
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}];
|
use [{olddatabase}];
|
||||||
";
|
";
|
||||||
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
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<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database)
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var olddatabase = "";
|
var olddatabase = "";
|
||||||
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
|
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
|
||||||
{
|
{
|
||||||
olddatabase = conn.Value.Database;
|
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<DbTableInfo>();
|
var tables = new List<DbTableInfo>();
|
||||||
|
|
||||||
foreach (var db in dbs)
|
foreach (var db in dbs)
|
||||||
@ -155,6 +165,7 @@ use [{olddatabase}];
|
|||||||
|
|
||||||
var sql = $@"
|
var sql = $@"
|
||||||
use [{db}];
|
use [{db}];
|
||||||
|
select * from (
|
||||||
select
|
select
|
||||||
a.Object_id
|
a.Object_id
|
||||||
,b.name 'Owner'
|
,b.name 'Owner'
|
||||||
@ -183,8 +194,8 @@ select
|
|||||||
from sys.procedures a
|
from sys.procedures a
|
||||||
inner join sys.schemas b on b.schema_id = a.schema_id
|
inner join sys.schemas b on b.schema_id = a.schema_id
|
||||||
where a.type = 'P' and charindex('diagram', a.name) = 0
|
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}];
|
use [{olddatabase}];
|
||||||
";
|
";
|
||||||
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
@ -395,6 +406,8 @@ use [{olddatabase}];
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tbname == null)
|
||||||
|
{
|
||||||
sql = $@"
|
sql = $@"
|
||||||
use [{db}];
|
use [{db}];
|
||||||
select
|
select
|
||||||
@ -456,6 +469,7 @@ use [{olddatabase}];
|
|||||||
foreach (var table_id in fkColumns.Keys)
|
foreach (var table_id in fkColumns.Keys)
|
||||||
foreach (var fk in fkColumns[table_id])
|
foreach (var fk in fkColumns[table_id])
|
||||||
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var table_id in loc3.Keys)
|
foreach (var table_id in loc3.Keys)
|
||||||
{
|
{
|
||||||
|
@ -155,18 +155,28 @@ namespace FreeSql.Sqlite
|
|||||||
var tbname = _commonUtils.SplitTableName(name);
|
var tbname = _commonUtils.SplitTableName(name);
|
||||||
if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] };
|
if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] };
|
||||||
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
|
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";
|
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DbTableInfo> GetTablesByDatabase(params string[] database2)
|
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
|
||||||
|
public List<DbTableInfo> GetTablesByDatabase(params string[] database) => GetTables(database, null, false);
|
||||||
|
|
||||||
|
public List<DbTableInfo> GetTables(string[] database, string tablename, bool ignoreCase)
|
||||||
{
|
{
|
||||||
var loc1 = new List<DbTableInfo>();
|
var loc1 = new List<DbTableInfo>();
|
||||||
var loc2 = new Dictionary<string, DbTableInfo>();
|
var loc2 = new Dictionary<string, DbTableInfo>();
|
||||||
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
|
||||||
var database = database2?.ToArray();
|
string[] tbname = null;
|
||||||
|
if (string.IsNullOrEmpty(tablename) == false)
|
||||||
if (database == null || database.Any() == false) database = GetDatabases().ToArray();
|
{
|
||||||
|
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;
|
if (database.Any() == false) return loc1;
|
||||||
|
|
||||||
Action<object[], int> addColumn = (row, position) =>
|
Action<object[], int> addColumn = (row, position) =>
|
||||||
@ -212,7 +222,7 @@ tbl_name,
|
|||||||
'' Comment,
|
'' Comment,
|
||||||
'TABLE',
|
'TABLE',
|
||||||
sql
|
sql
|
||||||
from {db}.sqlite_master where type = 'table'";
|
from {db}.sqlite_master where type='table'{(tbname == null ? "" : $" and {(ignoreCase ? "lower(tbl_name)" : "tbl_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
|
||||||
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
if (ds == null) continue;
|
if (ds == null) continue;
|
||||||
|
|
||||||
@ -284,6 +294,8 @@ from {db}.sqlite_master where type = 'table'";
|
|||||||
addColumn(ds2item, ++position);
|
addColumn(ds2item, ++position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tbname == null)
|
||||||
|
{
|
||||||
var fks = _orm.Ado.ExecuteArray(CommandType.Text, $"PRAGMA \"{db}\".foreign_key_list(\"{table}\")");
|
var fks = _orm.Ado.ExecuteArray(CommandType.Text, $"PRAGMA \"{db}\".foreign_key_list(\"{table}\")");
|
||||||
if (fks != null && fks.Length > 0)
|
if (fks != null && fks.Length > 0)
|
||||||
{
|
{
|
||||||
@ -315,6 +327,7 @@ from {db}.sqlite_master where type = 'table'";
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (loc6_1000.Count > 0) loc6.Add(loc6_1000.ToArray());
|
if (loc6_1000.Count > 0) loc6.Add(loc6_1000.ToArray());
|
||||||
if (loc66_1000.Count > 0) loc66.Add(loc66_1000.ToArray());
|
if (loc66_1000.Count > 0) loc66.Add(loc66_1000.ToArray());
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user