- 增加 IDbFirst.GetTableByName 方法获取单表信息,包括列详情、主键、唯一键、索引、备注;

This commit is contained in:
28810 2020-08-11 23:23:54 +08:00
parent da6effcf52
commit 0d832a5a23
33 changed files with 994 additions and 601 deletions

View File

@ -9,17 +9,29 @@ namespace FreeSql.Tests.MySqlConnector
[Fact]
public void GetDatabases()
{
var t1 = g.mysql.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
Assert.True(t2.Count > 0);
}
[Fact]
public void GetTableByName()
{
var fsql = g.mysql;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("cccddd_mysqlconnector.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]

View File

@ -9,19 +9,32 @@ namespace FreeSql.Tests.Odbc.Dameng
[Fact]
public void GetDatabases()
{
var t1 = g.dameng.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.dameng.DbFirst.GetTablesByDatabase();
Assert.True(t2.Count > 0);
//var tb = g.dameng.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
[Fact]
public void GetTableByName()
{
var fsql = g.dameng;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("2user.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]
public void ExistsTable()
{

View File

@ -16,7 +16,22 @@ namespace FreeSql.Tests.Odbc.KingbaseES
public void GetTablesByDatabase()
{
var t2 = g.kingbaseES.DbFirst.GetTablesByDatabase();
//var tb = g.kingbaseES.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
Assert.True(t2.Count > 0);
}
[Fact]
public void GetTableByName()
{
var fsql = g.kingbaseES;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("public.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]

View File

@ -9,17 +9,29 @@ namespace FreeSql.Tests.Odbc.MySql
[Fact]
public void GetDatabases()
{
var t1 = g.mysql.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
Assert.True(t2.Count > 0);
}
[Fact]
public void GetTableByName()
{
var fsql = g.mysql;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("cccddd_odbc.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]

View File

@ -9,19 +9,32 @@ namespace FreeSql.Tests.Odbc.Oracle
[Fact]
public void GetDatabases()
{
var t1 = g.oracle.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.oracle.DbFirst.GetTablesByDatabase();
Assert.True(t2.Count > 0);
//var tb = g.oracle.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
[Fact]
public void GetTableByName()
{
var fsql = g.oracle;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("1odbc.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]
public void ExistsTable()
{

View File

@ -10,20 +10,29 @@ namespace FreeSql.Tests.Odbc.PostgreSQL
[Fact]
public void GetDatabases()
{
var t1 = g.pgsql.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.pgsql.DbFirst.GetTablesByDatabase();
Assert.True(t2.Count > 0);
}
var t2 = g.pgsql.DbFirst.GetTablesByDatabase(g.pgsql.DbFirst.GetDatabases()[2]);
var tb_alltype = t2.Where(a => a.Name == "tb_alltype").FirstOrDefault();
var tb_identity = t2.Where(a => a.Name == "test_new").FirstOrDefault();
[Fact]
public void GetTableByName()
{
var fsql = g.pgsql;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("public.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]

View File

@ -10,17 +10,29 @@ namespace FreeSql.Tests.Odbc.SqlServer
[Fact]
public void GetDatabases()
{
var t1 = g.sqlserver.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.sqlserver.DbFirst.GetTablesByDatabase();
Assert.True(t2.Count > 0);
}
[Fact]
public void GetTableByName()
{
var fsql = g.sqlserver;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("dbo.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]

View File

@ -9,19 +9,32 @@ namespace FreeSql.Tests.Dameng
[Fact]
public void GetDatabases()
{
var t1 = g.dameng.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.dameng.DbFirst.GetTablesByDatabase();
Assert.True(t2.Count > 0);
//var tb = g.dameng.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
[Fact]
public void GetTableByName()
{
var fsql = g.dameng;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("2user.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]
public void ExistsTable()
{

View File

@ -9,17 +9,29 @@ namespace FreeSql.Tests.MySql
[Fact]
public void GetDatabases()
{
var t1 = g.mysql.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.mysql.DbFirst.GetTablesByDatabase(g.mysql.DbFirst.GetDatabases()[0]);
Assert.True(t2.Count > 0);
}
[Fact]
public void GetTableByName()
{
var fsql = g.mysql;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("cccddd.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]

View File

@ -9,19 +9,32 @@ namespace FreeSql.Tests.Oracle
[Fact]
public void GetDatabases()
{
var t1 = g.oracle.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.oracle.DbFirst.GetTablesByDatabase();
Assert.True(t2.Count > 0);
//var tb = g.oracle.Ado.ExecuteArray(System.Data.CommandType.Text, "select * from \"tb_dbfirst\"");
}
[Fact]
public void GetTableByName()
{
var fsql = g.oracle;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("1user.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]
public void ExistsTable()
{

View File

@ -10,21 +10,29 @@ namespace FreeSql.Tests.PostgreSQL
[Fact]
public void GetDatabases()
{
var t1 = g.pgsql.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.pgsql.DbFirst.GetTablesByDatabase(g.pgsql.DbFirst.GetDatabases()[1]);
Assert.True(t2.Count > 0);
}
var tb_alltype = t2.Where(a => a.Name == "tb_alltype").FirstOrDefault();
var tb_identity = t2.Where(a => a.Name == "test_new").FirstOrDefault();
[Fact]
public void GetTableByName()
{
var fsql = g.pgsql;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("public.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]

View File

@ -9,9 +9,7 @@ namespace FreeSql.Tests.ShenTong
[Fact]
public void GetDatabases()
{
var t1 = g.shentong.DbFirst.GetDatabases();
}
[Fact]
@ -19,7 +17,23 @@ namespace FreeSql.Tests.ShenTong
{
var t1 = g.shentong.DbFirst.GetTablesByDatabase();
var t2 = g.shentong.DbFirst.GetTablesByDatabase(g.shentong.DbFirst.GetDatabases()[0]);
Assert.True(t1.Count > 0);
Assert.True(t2.Count > 0);
}
[Fact]
public void GetTableByName()
{
var fsql = g.shentong;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("public.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]

View File

@ -19,17 +19,29 @@ namespace FreeSql.Tests.SqlServer
[Fact]
public void GetDatabases()
{
var t1 = g.sqlserver.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.sqlserver.DbFirst.GetTablesByDatabase();
Assert.True(t2.Count > 0);
}
[Fact]
public void GetTableByName()
{
var fsql = g.sqlserver;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("dbo.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]

View File

@ -9,17 +9,29 @@ namespace FreeSql.Tests.Sqlite
[Fact]
public void GetDatabases()
{
var t1 = g.sqlite.DbFirst.GetDatabases();
}
[Fact]
public void GetTablesByDatabase()
{
var t2 = g.sqlite.DbFirst.GetTablesByDatabase();
Assert.True(t2.Count > 0);
}
[Fact]
public void GetTableByName()
{
var fsql = g.sqlite;
var t1 = fsql.DbFirst.GetTableByName("tb_alltype");
var t2 = fsql.DbFirst.GetTableByName("main.tb_alltype");
Assert.NotNull(t1);
Assert.NotNull(t2);
Assert.True(t1.Columns.Count > 0);
Assert.True(t2.Columns.Count > 0);
Assert.Equal(t1.Columns.Count, t2.Columns.Count);
var t3 = fsql.DbFirst.GetTableByName("notexists_tb");
Assert.Null(t3);
}
[Fact]

View File

@ -3121,6 +3121,22 @@
<param name="database"></param>
<returns></returns>
</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)">
<summary>
获取数据库枚举类型int值
@ -3184,14 +3200,6 @@
<param name="database"></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.Internal.CommonProvider.InsertOrUpdateProvider`1.SplitSourceByIdentityValueIsNull(System.Collections.Generic.List{`0})">
<summary>
如果实体类有自增属性,分成两个 List有值的Item1 merge无值的Item2 insert

View File

@ -19,6 +19,22 @@ namespace FreeSql
/// <returns></returns>
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>
/// 获取数据库枚举类型int值
/// </summary>
@ -75,15 +91,5 @@ namespace FreeSql
/// <param name="database"></param>
/// <returns></returns>
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);
}
}

View File

@ -231,21 +231,36 @@ namespace FreeSql.Dameng
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 loc2 = new Dictionary<string, DbTableInfo>();
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
var database = database2?.ToArray();
if (database == null || database.Any() == false)
string[] tbname = null;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
tbname = new[] { userUsers, tbname[0] };
}
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
database = new[] { tbname[0] };
}
else if (database == null || database.Any() == false)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
database = new[] { userUsers };
}
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
var sql = string.Format(@"
var sql = $@"
select
a.owner || '.' || a.table_name,
a.owner,
@ -254,7 +269,7 @@ b.comments,
'TABLE'
from all_tables a
left join all_tab_comments b on b.owner = a.owner and b.table_name = a.table_name and b.table_type = 'TABLE'
where a.owner in ({0})", databaseIn);
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -315,7 +330,7 @@ where a.owner in ({0})", databaseIn);
}
loc8.Append(")");
sql = string.Format(@"
sql = $@"
select
a.owner || '.' || a.table_name,
a.column_name,
@ -330,8 +345,8 @@ b.comments,
a.data_default
from all_tab_cols a
left join all_col_comments b on b.owner = a.owner and b.table_name = a.table_name and b.column_name = a.column_name
where a.owner in ({1}) and {0}
", loc8, databaseIn);
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -386,7 +401,7 @@ where a.owner in ({1}) and {0}
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
}
sql = string.Format(@"
sql = $@"
select
a.table_owner || '.' || a.table_name,
c.column_name,
@ -401,8 +416,8 @@ all_ind_columns c
where a.index_name = c.index_name
and a.table_owner = c.table_owner
and a.table_name = c.table_name
and a.table_owner in ({1}) and {0}
", loc8, databaseIn);
and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -454,7 +469,9 @@ and a.table_owner in ({1}) and {0}
}
}
sql = string.Format(@"
if (tbname == null)
{
sql = $@"
select
a.owner || '.' || a.table_name,
c.column_name,
@ -488,8 +505,8 @@ and a.owner = c.owner
and a.table_name = c.table_name
and b.owner = d.owner
and b.table_name = d.table_name
and a.owner in ({1}) and {0}
", loc8, databaseIn);
and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
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 fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -166,14 +166,30 @@ namespace FreeSql.MySql
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 loc2 = new Dictionary<string, DbTableInfo>();
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
var database = database2?.ToArray();
if (database == null || database.Any() == false)
string[] tbname = null;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1)
{
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
{
if (string.IsNullOrEmpty(conn.Value.Database)) return loc1;
tbname = new[] { conn.Value.Database, tbname[0] };
}
}
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
database = new[] { tbname[0] };
}
else if (database == null || database.Any() == false)
{
using (var conn = _orm.Ado.MasterPool.Get())
{
@ -181,8 +197,9 @@ namespace FreeSql.MySql
database = new[] { conn.Value.Database };
}
}
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
var sql = string.Format(@"
var sql = $@"
select
concat(a.table_schema, '.', a.table_name) 'id',
a.table_schema 'schema',
@ -190,7 +207,7 @@ a.table_name 'table',
a.table_comment,
a.table_type 'type'
from information_schema.tables a
where a.table_schema in ({0})", databaseIn);
where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -251,7 +268,7 @@ where a.table_schema in ({0})", databaseIn);
}
loc8.Append(")");
sql = string.Format(@"
sql = $@"
select
concat(a.table_schema, '.', a.table_name),
a.column_name,
@ -263,8 +280,8 @@ case when locate('auto_increment', a.extra) > 0 then 1 else 0 end 'is_identity',
a.column_comment 'comment',
a.column_default 'default_value'
from information_schema.columns a
where a.table_schema in ({1}) and {0}
", loc8, databaseIn);
where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -305,7 +322,7 @@ where a.table_schema in ({1}) and {0}
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
}
sql = string.Format(@"
sql = $@"
select
concat(a.table_schema, '.', a.table_name) 'table_id',
a.column_name,
@ -315,8 +332,8 @@ case when a.index_name = 'PRIMARY' then 1 else 0 end 'IsPrimaryKey',
0 'IsClustered',
0 'IsDesc'
from information_schema.statistics a
where a.table_schema in ({1}) and {0}
", loc8, databaseIn);
where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -367,7 +384,9 @@ where a.table_schema in ({1}) and {0}
}
}
sql = string.Format(@"
if (tbname == null)
{
sql = $@"
select
concat(a.constraint_schema, '.', a.table_name) 'table_id',
a.column_name,
@ -376,8 +395,8 @@ concat(a.referenced_table_schema, '.', a.referenced_table_name) 'ref_table_id',
1 'IsForeignKey',
a.referenced_column_name 'ref_column'
from information_schema.key_column_usage a
where a.constraint_schema in ({1}) and {0} and not isnull(position_in_unique_constraint)
", loc8, databaseIn);
where {(ignoreCase ? "lower(a.constraint_schema)" : "a.constraint_schema")} in ({databaseIn}) and {loc8} and not isnull(position_in_unique_constraint)
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -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 fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -231,21 +231,36 @@ namespace FreeSql.Odbc.Dameng
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 loc2 = new Dictionary<string, DbTableInfo>();
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
var database = database2?.ToArray();
if (database == null || database.Any() == false)
string[] tbname = null;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
tbname = new[] { userUsers, tbname[0] };
}
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
database = new[] { tbname[0] };
}
else if (database == null || database.Any() == false)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
database = new[] { userUsers };
}
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
var sql = string.Format(@"
var sql = $@"
select
a.owner || '.' || a.table_name,
a.owner,
@ -254,7 +269,7 @@ b.comments,
'TABLE'
from all_tables a
left join all_tab_comments b on b.owner = a.owner and b.table_name = a.table_name and b.table_type = 'TABLE'
where a.owner in ({0})", databaseIn);
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -315,7 +330,7 @@ where a.owner in ({0})", databaseIn);
}
loc8.Append(")");
sql = string.Format(@"
sql = $@"
select
a.owner || '.' || a.table_name,
a.column_name,
@ -330,8 +345,8 @@ b.comments,
a.data_default
from all_tab_cols a
left join all_col_comments b on b.owner = a.owner and b.table_name = a.table_name and b.column_name = a.column_name
where a.owner in ({1}) and {0}
", loc8, databaseIn);
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -386,7 +401,7 @@ where a.owner in ({1}) and {0}
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
}
sql = string.Format(@"
sql = $@"
select
a.table_owner || '.' || a.table_name,
c.column_name,
@ -401,8 +416,8 @@ all_ind_columns c
where a.index_name = c.index_name
and a.table_owner = c.table_owner
and a.table_name = c.table_name
and a.table_owner in ({1}) and {0}
", loc8, databaseIn);
and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -454,7 +469,9 @@ and a.table_owner in ({1}) and {0}
}
}
sql = string.Format(@"
if (tbname == null)
{
sql = $@"
select
a.owner || '.' || a.table_name,
c.column_name,
@ -488,8 +505,8 @@ and a.owner = c.owner
and a.table_name = c.table_name
and b.owner = d.owner
and b.table_name = d.table_name
and a.owner in ({1}) and {0}
", loc8, databaseIn);
and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
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 fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -18,7 +18,7 @@ namespace FreeSql.Odbc.KingbaseES
{
}
internal string InternalTableAlias;
internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary<string, bool> InternalIgnore => _ignore;

View File

@ -116,20 +116,31 @@ namespace FreeSql.Odbc.KingbaseES
var tbname = _commonUtils.SplitTableName(name);
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
var sql = $" select 1 from sys_tables a inner join sys_namespace b on b.nspname = a.schemaname where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")} = {_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.tablename)" : "a.tablename")} = {_commonUtils.FormatSql("{0}", tbname[1])}";
var sql = $" select 1 from sys_tables a inner join sys_namespace b on b.nspname = a.schemaname where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.tablename)" : "a.tablename")}={_commonUtils.FormatSql("{0}", tbname[1])}";
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
public List<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 = "";
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
{
olddatabase = conn.Value.Database;
}
var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
var tables = new List<DbTableInfo>();
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>();
foreach (var db in dbs)
{
if (string.IsNullOrEmpty(db) || string.Compare(db, olddatabase, true) != 0) continue;
@ -139,7 +150,7 @@ namespace FreeSql.Odbc.KingbaseES
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
var sql = $@"
select
{(tbname == null ? "" : $"select * from (")}select
b.nspname || '.' || a.tablename,
a.schemaname,
a.tablename ,
@ -165,7 +176,7 @@ inner join sys_namespace b on b.oid = a.relnamespace
left join sys_description d on d.objoid = a.oid and objsubid = 0
where b.nspname not in ('SYS_CATALOG', 'INFORMATION_SCHEMA', 'TOPOLOGY', 'SYSAUDIT', 'SYSLOGICAL', 'SYS_TEMP_1', 'SYS_TOAST', 'SYS_TOAST_TEMP_1', 'XLOG_RECORD_READ') and a.relkind in ('m','v')
and b.nspname || '.' || a.relname not in ('PUBLIC.GEOGRAPHY_COLUMNS','PUBLIC.GEOMETRY_COLUMNS','PUBLIC.RASTER_COLUMNS','PUBLIC.RASTER_OVERVIEWS')
";
{(tbname == null ? "" : $") ft_dbf where {(ignoreCase ? "lower(schemaname)" : "schemaname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(tablename)" : "tablename")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -381,6 +392,8 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
}
}
if (tbname == null)
{
sql = $@"
select
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 fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -132,14 +132,30 @@ namespace FreeSql.Odbc.MySql
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 loc2 = new Dictionary<string, DbTableInfo>();
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
var database = database2?.ToArray();
if (database == null || database.Any() == false)
string[] tbname = null;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1)
{
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
{
if (string.IsNullOrEmpty(conn.Value.Database)) return loc1;
tbname = new[] { conn.Value.Database, tbname[0] };
}
}
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
database = new[] { tbname[0] };
}
else if (database == null || database.Any() == false)
{
using (var conn = _orm.Ado.MasterPool.Get())
{
@ -147,8 +163,9 @@ namespace FreeSql.Odbc.MySql
database = new[] { conn.Value.Database };
}
}
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
var sql = string.Format(@"
var sql = $@"
select
concat(a.table_schema, '.', a.table_name) 'id',
a.table_schema 'schema',
@ -156,7 +173,7 @@ a.table_name 'table',
a.table_comment,
a.table_type 'type'
from information_schema.tables a
where a.table_schema in ({0})", databaseIn);
where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -217,7 +234,7 @@ where a.table_schema in ({0})", databaseIn);
}
loc8.Append(")");
sql = string.Format(@"
sql = $@"
select
concat(a.table_schema, '.', a.table_name),
a.column_name,
@ -229,8 +246,8 @@ case when locate('auto_increment', a.extra) > 0 then 1 else 0 end 'is_identity',
a.column_comment 'comment',
a.column_default 'default_value'
from information_schema.columns a
where a.table_schema in ({1}) and {0}
", loc8, databaseIn);
where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -271,7 +288,7 @@ where a.table_schema in ({1}) and {0}
loc3[table_id][column].CsType = this.GetCsTypeInfo(loc3[table_id][column]);
}
sql = string.Format(@"
sql = $@"
select
concat(a.table_schema, '.', a.table_name) 'table_id',
a.column_name,
@ -281,8 +298,8 @@ case when a.index_name = 'PRIMARY' then 1 else 0 end 'IsPrimaryKey',
0 'IsClustered',
0 'IsDesc'
from information_schema.statistics a
where a.table_schema in ({1}) and {0}
", loc8, databaseIn);
where {(ignoreCase ? "lower(a.table_schema)" : "a.table_schema")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -333,7 +350,9 @@ where a.table_schema in ({1}) and {0}
}
}
sql = string.Format(@"
if (tbname == null)
{
sql = $@"
select
concat(a.constraint_schema, '.', a.table_name) 'table_id',
a.column_name,
@ -342,8 +361,8 @@ concat(a.referenced_table_schema, '.', a.referenced_table_name) 'ref_table_id',
1 'IsForeignKey',
a.referenced_column_name 'ref_column'
from information_schema.key_column_usage a
where a.constraint_schema in ({1}) and {0} and not isnull(position_in_unique_constraint)
", loc8, databaseIn);
where {(ignoreCase ? "lower(a.constraint_schema)" : "a.constraint_schema")} in ({databaseIn}) and {loc8} and not isnull(position_in_unique_constraint)
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -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 fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -185,21 +185,36 @@ namespace FreeSql.Odbc.Oracle
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 loc2 = new Dictionary<string, DbTableInfo>();
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
var database = database2?.ToArray();
if (database == null || database.Any() == false)
string[] tbname = null;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
tbname = new[] { userUsers, tbname[0] };
}
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
database = new[] { tbname[0] };
}
else if (database == null || database.Any() == false)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
database = new[] { userUsers };
}
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
var sql = string.Format(@"
var sql = $@"
select
a.owner || '.' || a.table_name,
a.owner,
@ -208,7 +223,7 @@ b.comments,
'TABLE'
from all_tables a
left join all_tab_comments b on b.owner = a.owner and b.table_name = a.table_name and b.table_type = 'TABLE'
where a.owner in ({0})", databaseIn);
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -288,7 +303,7 @@ BEGIN
RETURN TEXT_C1;
END;");
sql = string.Format(@"
sql = $@"
select
a.owner || '.' || a.table_name,
a.column_name,
@ -303,8 +318,8 @@ to_char(b.comments),
nvl(FREESQL_LONG_TO_CHAR_DEFAULT(a.table_name, a.column_name),'')
from all_tab_cols a
left join all_col_comments b on b.owner = a.owner and b.table_name = a.table_name and b.column_name = a.column_name
where a.owner in ({1}) and {0}
", loc8, databaseIn);
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -360,7 +375,7 @@ where a.owner in ({1}) and {0}
}
OdbcOracleCodeFirst.CreateOracleFunction(_orm);
sql = string.Format(@"
sql = $@"
select
a.table_owner || '.' || a.table_name,
nvl(freesql_long_2_varchar(a.index_name, c.table_name, c.column_position), c.column_name),
@ -375,8 +390,8 @@ all_ind_columns c
where a.index_name = c.index_name
and a.table_owner = c.table_owner
and a.table_name = c.table_name
and a.table_owner in ({1}) and {0}
", loc8, databaseIn);
and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -428,7 +443,9 @@ and a.table_owner in ({1}) and {0}
}
}
sql = string.Format(@"
if (tbname == null)
{
sql = $@"
select
a.owner || '.' || a.table_name,
c.column_name,
@ -462,8 +479,8 @@ and a.owner = c.owner   
and a.table_name = c.table_name   
and b.owner = d.owner   
and b.table_name = d.table_name
and a.owner in ({1}) and {0}
", loc8, databaseIn);
and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
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 fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -18,7 +18,7 @@ namespace FreeSql.Odbc.PostgreSQL
{
}
internal string InternalTableAlias;
internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary<string, bool> InternalIgnore => _ignore;

View File

@ -128,11 +128,14 @@ namespace FreeSql.Odbc.PostgreSQL
var tbname = _commonUtils.SplitTableName(name);
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
var sql = $" select 1 from pg_tables a inner join pg_namespace b on b.nspname = a.schemaname where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")} = {_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.tablename)" : "a.tablename")} = {_commonUtils.FormatSql("{0}", tbname[1])}";
var sql = $" select 1 from pg_tables a inner join pg_namespace b on b.nspname = a.schemaname where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.tablename)" : "a.tablename")}={_commonUtils.FormatSql("{0}", tbname[1])}";
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
public List<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 is96 = true;
@ -141,7 +144,15 @@ namespace FreeSql.Odbc.PostgreSQL
olddatabase = conn.Value.Database;
is96 = PgVersionIs96(conn.Value.ServerVersion);
}
var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
string[] tbname = null;
string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
dbs = new[] { olddatabase };
}
var tables = new List<DbTableInfo>();
foreach (var db in dbs)
@ -153,7 +164,7 @@ namespace FreeSql.Odbc.PostgreSQL
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
var sql = $@"
select
{(tbname == null ? "" : $"select * from (")}select
b.nspname || '.' || a.tablename,
a.schemaname,
a.tablename ,
@ -179,7 +190,7 @@ inner join pg_namespace b on b.oid = a.relnamespace
left join pg_description d on d.objoid = a.oid and objsubid = 0
where b.nspname not in ('pg_catalog', 'information_schema') and a.relkind in ('m','v')
and b.nspname || '.' || a.relname not in ('public.geography_columns','public.geometry_columns','public.raster_columns','public.raster_overviews')
";
{(tbname == null ? "" : $") ft_dbf where {(ignoreCase ? "lower(schemaname)" : "schemaname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(tablename)" : "tablename")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -396,6 +407,8 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
}
}
if (tbname == null)
{
sql = $@"
select
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 fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -7,7 +7,6 @@ using System.Data;
using System.Data.Odbc;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace FreeSql.Odbc.SqlServer
{
@ -125,21 +124,32 @@ select
1
from sys.tables a
inner join sys.schemas b on b.schema_id = a.schema_id
where lower(b.name) = {_commonUtils.FormatSql("{0}", tbname[1])} and lower(a.name) = {_commonUtils.FormatSql("{0}", tbname[2])}
where lower(b.name)={_commonUtils.FormatSql("{0}", tbname[1])} and lower(a.name)={_commonUtils.FormatSql("{0}", tbname[2])}
;
use [{olddatabase}];
";
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
public List<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 = "";
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
{
olddatabase = conn.Value.Database;
}
var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
string[] tbname = null;
string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1) tbname = new[] { olddatabase, "dbo", tbname[0] };
if (tbname?.Length == 2) tbname = new[] { olddatabase, tbname[0], tbname[1] };
tbname = tbname.Select(a => a.ToLower()).ToArray();
dbs = new[] { tbname[0] };
}
var tables = new List<DbTableInfo>();
foreach (var db in dbs)
@ -152,6 +162,7 @@ use [{olddatabase}];
var sql = $@"
use [{db}];
select * from (
select
a.Object_id
,b.name 'Owner'
@ -180,8 +191,8 @@ select
from sys.procedures a
inner join sys.schemas b on b.schema_id = a.schema_id
where a.type = 'P' and charindex('diagram', a.name) = 0
order by type desc, b.name, a.name
;
) ft_dbf{(tbname == null ? "" : _commonUtils.FormatSql(" where lower([owner])={0} and lower([Name])={1}", new[] { tbname[1], tbname[2] }))}
order by type desc, [owner], [Name];
use [{olddatabase}];
";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
@ -264,7 +275,7 @@ isnull(e.name,'') + '.' + isnull(d.name,'')
else cast(a.max_length as varchar) end + ')'
when b.name in ('Numeric', 'Decimal') then '(' + cast(a.precision as varchar) + ',' + cast(a.scale as varchar) + ')'
else '' end as 'SqlType'
,(select value from sys.extended_properties where major_id = a.object_id AND minor_id = a.column_id AND name = 'MS_Description') 'Comment'
,( select value from sys.extended_properties where major_id = a.object_id AND minor_id = a.column_id AND name = 'MS_Description') 'Comment'
{0} a
inner join sys.types b on b.user_type_id = a.user_type_id
left join sys.tables d on d.object_id = a.object_id
@ -392,6 +403,8 @@ use [{olddatabase}];
}
}
if (tbname == null)
{
sql = $@"
use [{db}];
select
@ -453,6 +466,7 @@ use [{olddatabase}];
foreach (var table_id in fkColumns.Keys)
foreach (var fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -185,21 +185,36 @@ namespace FreeSql.Oracle
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 loc2 = new Dictionary<string, DbTableInfo>();
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
var database = database2?.ToArray();
if (database == null || database.Any() == false)
string[] tbname = null;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
tbname = new[] { userUsers, tbname[0] };
}
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
database = new[] { tbname[0] };
}
else if (database == null || database.Any() == false)
{
var userUsers = _orm.Ado.ExecuteScalar(" select username from user_users")?.ToString();
if (string.IsNullOrEmpty(userUsers)) return loc1;
database = new[] { userUsers };
}
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
var sql = string.Format(@"
var sql = $@"
select
a.owner || '.' || a.table_name,
a.owner,
@ -208,7 +223,7 @@ b.comments,
'TABLE'
from all_tables a
left join all_tab_comments b on b.owner = a.owner and b.table_name = a.table_name and b.table_type = 'TABLE'
where a.owner in ({0})", databaseIn);
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}){(tbname == null ? "" : $" and {(ignoreCase ? "lower(a.table_name)" : "a.table_name")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -288,7 +303,7 @@ BEGIN
RETURN TEXT_C1;
END;");
sql = string.Format(@"
sql = $@"
select
a.owner || '.' || a.table_name,
a.column_name,
@ -303,8 +318,8 @@ to_char(b.comments),
nvl(FREESQL_LONG_TO_CHAR_DEFAULT(a.table_name, a.column_name),'')
from all_tab_cols a
left join all_col_comments b on b.owner = a.owner and b.table_name = a.table_name and b.column_name = a.column_name
where a.owner in ({1}) and {0}
", loc8, databaseIn);
where {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -360,7 +375,7 @@ where a.owner in ({1}) and {0}
}
OracleCodeFirst.CreateOracleFunction(_orm);
sql = string.Format(@"
sql = $@"
select
a.table_owner || '.' || a.table_name,
nvl(freesql_long_2_varchar(a.index_name, c.table_name, c.column_position), c.column_name),
@ -375,8 +390,8 @@ all_ind_columns c
where a.index_name = c.index_name
and a.table_owner = c.table_owner
and a.table_name = c.table_name
and a.table_owner in ({1}) and {0}
", loc8, databaseIn);
and {(ignoreCase ? "lower(a.table_owner)" : "a.table_owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -428,7 +443,9 @@ and a.table_owner in ({1}) and {0}
}
}
sql = string.Format(@"
if (tbname == null)
{
sql = $@"
select
a.owner || '.' || a.table_name,
c.column_name,
@ -462,8 +479,8 @@ and a.owner = c.owner   
and a.table_name = c.table_name   
and b.owner = d.owner   
and b.table_name = d.table_name
and a.owner in ({1}) and {0}
", loc8, databaseIn);
and {(ignoreCase ? "lower(a.owner)" : "a.owner")} in ({databaseIn}) and {loc8}
";
ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
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 fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -18,7 +18,7 @@ namespace FreeSql.PostgreSQL.Curd
{
}
internal string InternalTableAlias;
internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary<string, bool> InternalIgnore => _ignore;

View File

@ -238,11 +238,14 @@ namespace FreeSql.PostgreSQL
var tbname = _commonUtils.SplitTableName(name);
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
var sql = $" select 1 from pg_tables a inner join pg_namespace b on b.nspname = a.schemaname where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")} = {_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.tablename)" : "a.tablename")} = {_commonUtils.FormatSql("{0}", tbname[1])}";
var sql = $" select 1 from pg_tables a inner join pg_namespace b on b.nspname = a.schemaname where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.tablename)" : "a.tablename")}={_commonUtils.FormatSql("{0}", tbname[1])}";
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
public List<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 is96 = true;
@ -251,7 +254,15 @@ namespace FreeSql.PostgreSQL
olddatabase = conn.Value.Database;
is96 = PgVersionIs96(conn.Value.ServerVersion);
}
var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
string[] tbname = null;
string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1) tbname = new[] { "public", tbname[0] };
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
dbs = new[] { olddatabase };
}
var tables = new List<DbTableInfo>();
foreach (var db in dbs)
@ -263,7 +274,7 @@ namespace FreeSql.PostgreSQL
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
var sql = $@"
select
{(tbname == null ? "" : $"select * from (")}select
b.nspname || '.' || a.tablename,
a.schemaname,
a.tablename ,
@ -289,7 +300,7 @@ inner join pg_namespace b on b.oid = a.relnamespace
left join pg_description d on d.objoid = a.oid and objsubid = 0
where b.nspname not in ('pg_catalog', 'information_schema') and a.relkind in ('m','v')
and b.nspname || '.' || a.relname not in ('public.geography_columns','public.geometry_columns','public.raster_columns','public.raster_overviews')
";
{(tbname == null ? "" : $") ft_dbf where {(ignoreCase ? "lower(schemaname)" : "schemaname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(tablename)" : "tablename")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -506,6 +517,8 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
}
}
if (tbname == null)
{
sql = $@"
select
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 fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -19,7 +19,7 @@ namespace FreeSql.ShenTong.Curd
{
}
internal string InternalTableAlias;
internal string InternalTableAlias { get; set; }
internal StringBuilder InternalSbSet => _set;
internal StringBuilder InternalSbSetIncr => _setIncr;
internal Dictionary<string, bool> InternalIgnore => _ignore;

View File

@ -134,19 +134,30 @@ select
1
from sys_class a
inner join sys_namespace b on b.oid = a.relnamespace
where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")} = {_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.relname)" : "a.relname")} = {_commonUtils.FormatSql("{0}", tbname[1])} and a.relkind in ('r')
where {(ignoreCase ? "lower(b.nspname)" : "b.nspname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(a.relname)" : "a.relname")}={_commonUtils.FormatSql("{0}", tbname[1])} and a.relkind in ('r')
";
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
public List<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 = "";
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
{
olddatabase = conn.Value.Database;
}
var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
string[] tbname = null;
string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1) tbname = new[] { "PUBLIC", tbname[0] };
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
dbs = new[] { olddatabase };
}
var tables = new List<DbTableInfo>();
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 sql = $@"
select
{(tbname == null ? "" : $"select * from (")}select
b.nspname || '.' || a.relname,
b.nspname,
a.relname,
@ -183,7 +194,7 @@ inner join sys_namespace b on b.oid = a.relnamespace
left join sys_description d on d.objoid = a.oid and objsubid = 0
where b.nspname not in ('DIRECTORIES', 'INFO_SCHEM', 'REPLICATION', 'STAGENT', 'SYSAUDIT', 'SYSDBA', 'SYSFTSDBA', 'SYSSECURE', 'SYS_GLOBAL_TEMP', 'WMSYS') and a.relkind in ('m','v')
and b.nspname || '.' || a.relname not in ('PUBLIC.GEOGRAPHY_COLUMNS','PUBLIC.GEOMETRY_COLUMNS','PUBLIC.RASTER_COLUMNS','PUBLIC.RASTER_OVERVIEWS','PUBLIC.DBA_JOBS')
";
{(tbname == null ? "" : $") ft_dbf where {(ignoreCase ? "lower(nspname)" : "nspname")}={_commonUtils.FormatSql("{0}", tbname[0])} and {(ignoreCase ? "lower(relname)" : "relname")}={_commonUtils.FormatSql("{0}", tbname[1])}")}";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
if (ds == null) return loc1;
@ -400,6 +411,8 @@ where {loc8.ToString().Replace("a.table_name", "ns.nspname || '.' || d.relname")
}
}
if (tbname == null)
{
sql = $@"
select
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 fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -6,7 +6,6 @@ using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace FreeSql.SqlServer
{
@ -128,21 +127,32 @@ select
1
from sys.tables a
inner join sys.schemas b on b.schema_id = a.schema_id
where lower(b.name) = {_commonUtils.FormatSql("{0}", tbname[1])} and lower(a.name) = {_commonUtils.FormatSql("{0}", tbname[2])}
where lower(b.name)={_commonUtils.FormatSql("{0}", tbname[1])} and lower(a.name)={_commonUtils.FormatSql("{0}", tbname[2])}
;
use [{olddatabase}];
";
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
public DbTableInfo GetTableByName(string name, bool ignoreCase = true) => GetTables(null, name, ignoreCase)?.FirstOrDefault();
public List<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 = "";
using (var conn = _orm.Ado.MasterPool.Get(TimeSpan.FromSeconds(5)))
{
olddatabase = conn.Value.Database;
}
var dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
string[] tbname = null;
string[] dbs = database == null || database.Any() == false ? new[] { olddatabase } : database;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1) tbname = new[] { olddatabase, "dbo", tbname[0] };
if (tbname?.Length == 2) tbname = new[] { olddatabase, tbname[0], tbname[1] };
tbname = tbname.Select(a => a.ToLower()).ToArray();
dbs = new[] { tbname[0] };
}
var tables = new List<DbTableInfo>();
foreach (var db in dbs)
@ -155,6 +165,7 @@ use [{olddatabase}];
var sql = $@"
use [{db}];
select * from (
select
a.Object_id
,b.name 'Owner'
@ -183,8 +194,8 @@ select
from sys.procedures a
inner join sys.schemas b on b.schema_id = a.schema_id
where a.type = 'P' and charindex('diagram', a.name) = 0
order by type desc, b.name, a.name
;
) ft_dbf{(tbname == null ? "" : _commonUtils.FormatSql(" where lower([owner])={0} and lower([Name])={1}", new[] { tbname[1], tbname[2] }))}
order by type desc, [owner], [Name];
use [{olddatabase}];
";
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
@ -395,6 +406,8 @@ use [{olddatabase}];
}
}
if (tbname == null)
{
sql = $@"
use [{db}];
select
@ -456,6 +469,7 @@ use [{olddatabase}];
foreach (var table_id in fkColumns.Keys)
foreach (var fk in fkColumns[table_id])
loc2[table_id].ForeignsDict.Add(fk.Key, fk.Value);
}
foreach (var table_id in loc3.Keys)
{

View File

@ -155,18 +155,28 @@ namespace FreeSql.Sqlite
var tbname = _commonUtils.SplitTableName(name);
if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] };
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
var sql = $@" select 1 from {_commonUtils.QuoteSqlName(tbname[0])}.sqlite_master where type = 'table' and {(ignoreCase ? "lower(tbl_name)" : "tbl_name")} = {_commonUtils.FormatSql("{0}", tbname[1])}";
var sql = $@" select 1 from {_commonUtils.QuoteSqlName(tbname[0])}.sqlite_master where type='table' and {(ignoreCase ? "lower(tbl_name)" : "tbl_name")}={_commonUtils.FormatSql("{0}", tbname[1])}";
return string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, sql)) == "1";
}
public List<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 loc2 = new Dictionary<string, DbTableInfo>();
var loc3 = new Dictionary<string, Dictionary<string, DbColumnInfo>>();
var database = database2?.ToArray();
if (database == null || database.Any() == false) database = GetDatabases().ToArray();
string[] tbname = null;
if (string.IsNullOrEmpty(tablename) == false)
{
tbname = _commonUtils.SplitTableName(tablename);
if (tbname?.Length == 1) tbname = new[] { "main", tbname[0] };
if (ignoreCase) tbname = tbname.Select(a => a.ToLower()).ToArray();
database = new[] { tbname[0] };
}
else if (database == null || database.Any() == false)
database = GetDatabases().ToArray();
if (database.Any() == false) return loc1;
Action<object[], int> addColumn = (row, position) =>
@ -212,7 +222,7 @@ tbl_name,
'' Comment,
'TABLE',
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);
if (ds == null) continue;
@ -284,6 +294,8 @@ from {db}.sqlite_master where type = 'table'";
addColumn(ds2item, ++position);
}
if (tbname == null)
{
var fks = _orm.Ado.ExecuteArray(CommandType.Text, $"PRAGMA \"{db}\".foreign_key_list(\"{table}\")");
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 (loc66_1000.Count > 0) loc66.Add(loc66_1000.ToArray());