mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
局部调整
This commit is contained in:
parent
22a6c3d93e
commit
e1c43d6c1c
@ -113,15 +113,15 @@ namespace FreeSql.MySql {
|
|||||||
var tboldname = tb.DbOldName?.Split(new[] { '.' }, 2); //旧表名
|
var tboldname = tb.DbOldName?.Split(new[] { '.' }, 2); //旧表名
|
||||||
if (tboldname?.Length == 1) tboldname = new[] { database, tboldname[0] };
|
if (tboldname?.Length == 1) tboldname = new[] { database, tboldname[0] };
|
||||||
|
|
||||||
if (string.Compare(tbname[0], database, true) != 0 && ExecuteScalar(database, " select 1 from pg_database where datname={0}".FormatMySql(tbname[0])) == null) //创建数据库
|
if (string.Compare(tbname[0], database, true) != 0 && ExecuteScalar(database, _commonUtils.FormatSql(" select 1 from pg_database where datname={0}", tbname[0])) == null) //创建数据库
|
||||||
sb.Append($"CREATE DATABASE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName(tbname[0])).Append(" default charset utf8 COLLATE utf8_general_ci;\r\n");
|
sb.Append($"CREATE DATABASE IF NOT EXISTS ").Append(_commonUtils.QuoteSqlName(tbname[0])).Append(" default charset utf8 COLLATE utf8_general_ci;\r\n");
|
||||||
|
|
||||||
var sbalter = new StringBuilder();
|
var sbalter = new StringBuilder();
|
||||||
var istmpatler = false; //创建临时表,导入数据,删除旧表,修改
|
var istmpatler = false; //创建临时表,导入数据,删除旧表,修改
|
||||||
if (ExecuteScalar(tbname[0], " SELECT 1 FROM information_schema.TABLES WHERE table_schema={0} and table_name={1}".FormatMySql(tbname)) == null) { //表不存在
|
if (ExecuteScalar(tbname[0], _commonUtils.FormatSql(" SELECT 1 FROM information_schema.TABLES WHERE table_schema={0} and table_name={1}", tbname)) == null) { //表不存在
|
||||||
if (tboldname != null) {
|
if (tboldname != null) {
|
||||||
if (string.Compare(tboldname[0], tbname[0], true) != 0 && ExecuteScalar(database, " select 1 from information_schema.schemata where schema_name={0}".FormatMySql(tboldname[0])) == null ||
|
if (string.Compare(tboldname[0], tbname[0], true) != 0 && ExecuteScalar(database, _commonUtils.FormatSql(" select 1 from information_schema.schemata where schema_name={0}", tboldname[0])) == null ||
|
||||||
ExecuteScalar(tboldname[0], " SELECT 1 FROM information_schema.TABLES WHERE table_schema={0} and table_name={1}".FormatMySql(tboldname)) == null)
|
ExecuteScalar(tboldname[0], _commonUtils.FormatSql(" SELECT 1 FROM information_schema.TABLES WHERE table_schema={0} and table_name={1}", tboldname)) == null)
|
||||||
//数据库或表不存在
|
//数据库或表不存在
|
||||||
tboldname = null;
|
tboldname = null;
|
||||||
}
|
}
|
||||||
@ -159,14 +159,14 @@ namespace FreeSql.MySql {
|
|||||||
tboldname = null; //如果新表已经存在,不走改表名逻辑
|
tboldname = null; //如果新表已经存在,不走改表名逻辑
|
||||||
|
|
||||||
//对比字段,只可以修改类型、增加字段、有限的修改字段名;保证安全不删除字段
|
//对比字段,只可以修改类型、增加字段、有限的修改字段名;保证安全不删除字段
|
||||||
var sql = @"
|
var sql = _commonUtils.FormatSql(@"
|
||||||
select
|
select
|
||||||
a.column_name,
|
a.column_name,
|
||||||
a.column_type,
|
a.column_type,
|
||||||
case when a.is_nullable = 'YES' then 1 else 0 end 'is_nullable',
|
case when a.is_nullable = 'YES' then 1 else 0 end 'is_nullable',
|
||||||
case when locate('auto_increment', a.extra) > 0 then 1 else 0 end 'is_identity'
|
case when locate('auto_increment', a.extra) > 0 then 1 else 0 end 'is_identity'
|
||||||
from information_schema.columns a
|
from information_schema.columns a
|
||||||
where a.table_schema in ({0}) and a.table_name in ({1})".FormatMySql(tboldname ?? tbname);
|
where a.table_schema in ({0}) and a.table_name in ({1})", tboldname ?? tbname);
|
||||||
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
var tbstruct = ds.ToDictionary(a => string.Concat(a[0]), a => {
|
var tbstruct = ds.ToDictionary(a => string.Concat(a[0]), a => {
|
||||||
var a1 = string.Concat(a[1]);
|
var a1 = string.Concat(a[1]);
|
||||||
@ -181,7 +181,7 @@ where a.table_schema in ({0}) and a.table_name in ({1})".FormatMySql(tboldname ?
|
|||||||
}, StringComparer.CurrentCultureIgnoreCase);
|
}, StringComparer.CurrentCultureIgnoreCase);
|
||||||
|
|
||||||
if (istmpatler == false) {
|
if (istmpatler == false) {
|
||||||
var existsPrimary = ExecuteScalar(tbname[0], "select 1 from information_schema.key_column_usage where table_schema={0} and table_name={1} and constraint_name = 'PRIMARY' limit 1".FormatMySql(tbname));
|
var existsPrimary = ExecuteScalar(tbname[0], _commonUtils.FormatSql("select 1 from information_schema.key_column_usage where table_schema={0} and table_name={1} and constraint_name = 'PRIMARY' limit 1", tbname));
|
||||||
foreach (var tbcol in tb.Columns.Values) {
|
foreach (var tbcol in tb.Columns.Values) {
|
||||||
var isIdentityChanged = tbcol.Attribute.IsIdentity == true && tbcol.Attribute.DbType.IndexOf("AUTO_INCREMENT", StringComparison.CurrentCultureIgnoreCase) == -1;
|
var isIdentityChanged = tbcol.Attribute.IsIdentity == true && tbcol.Attribute.DbType.IndexOf("AUTO_INCREMENT", StringComparison.CurrentCultureIgnoreCase) == -1;
|
||||||
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||
|
if (tbstruct.TryGetValue(tbcol.Attribute.Name, out var tbstructcol) ||
|
||||||
@ -207,12 +207,12 @@ where a.table_schema in ({0}) and a.table_name in ({1})".FormatMySql(tboldname ?
|
|||||||
if (isIdentityChanged) sbalter.Append(" AUTO_INCREMENT").Append(existsPrimary == null ? "" : ", DROP PRIMARY KEY").Append(", ADD PRIMARY KEY(").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(")");
|
if (isIdentityChanged) sbalter.Append(" AUTO_INCREMENT").Append(existsPrimary == null ? "" : ", DROP PRIMARY KEY").Append(", ADD PRIMARY KEY(").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(")");
|
||||||
sbalter.Append(";\r\n");
|
sbalter.Append(";\r\n");
|
||||||
}
|
}
|
||||||
var dsuksql = @"
|
var dsuksql = _commonUtils.FormatSql(@"
|
||||||
select
|
select
|
||||||
a.column_name,
|
a.column_name,
|
||||||
a.constraint_name 'index_id'
|
a.constraint_name 'index_id'
|
||||||
from information_schema.key_column_usage a
|
from information_schema.key_column_usage a
|
||||||
where a.constraint_schema IN ({0}) and a.table_name IN ({1})".FormatMySql(tboldname ?? tbname);
|
where a.constraint_schema IN ({0}) and a.table_name IN ({1})", tboldname ?? tbname);
|
||||||
var dsuk = _orm.Ado.ExecuteArray(CommandType.Text, dsuksql).Select(a => new[] { string.Concat(a[0]), string.Concat(a[1]) });
|
var dsuk = _orm.Ado.ExecuteArray(CommandType.Text, dsuksql).Select(a => new[] { string.Concat(a[0]), string.Concat(a[1]) });
|
||||||
foreach (var uk in tb.Uniques) {
|
foreach (var uk in tb.Uniques) {
|
||||||
if (uk.Key == "PRIMARY" || string.IsNullOrEmpty(uk.Key) || uk.Value.Any() == false) continue;
|
if (uk.Key == "PRIMARY" || string.IsNullOrEmpty(uk.Key) || uk.Value.Any() == false) continue;
|
||||||
|
@ -149,7 +149,7 @@ namespace FreeSql.MySql {
|
|||||||
database = new[] { conn.Value.Database };
|
database = new[] { conn.Value.Database };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var databaseIn = string.Join(",", database.Select(a => "{0}".FormatMySql(a)));
|
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
||||||
var sql = string.Format(@"
|
var sql = string.Format(@"
|
||||||
select
|
select
|
||||||
concat(a.table_schema, '.', a.table_name) 'id',
|
concat(a.table_schema, '.', a.table_name) 'id',
|
||||||
|
@ -95,14 +95,14 @@ namespace FreeSql.Oracle {
|
|||||||
var tboldname = tb.DbOldName?.Split(new[] { '.' }, 2); //旧表名
|
var tboldname = tb.DbOldName?.Split(new[] { '.' }, 2); //旧表名
|
||||||
if (tboldname?.Length == 1) tboldname = new[] { userId, tboldname[0] };
|
if (tboldname?.Length == 1) tboldname = new[] { userId, tboldname[0] };
|
||||||
|
|
||||||
if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, " select 1 from sys.dba_users where username={0}".FormatOracleSQL(tbname[0])) == null) //创建数据库
|
if (string.Compare(tbname[0], userId) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from sys.dba_users where username={0}", tbname[0])) == null) //创建数据库
|
||||||
throw new NotImplementedException($"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}");
|
throw new NotImplementedException($"Oracle CodeFirst 不支持代码创建 tablespace 与 schemas {tbname[0]}");
|
||||||
|
|
||||||
var sbalter = new StringBuilder();
|
var sbalter = new StringBuilder();
|
||||||
var istmpatler = false; //创建临时表,导入数据,删除旧表,修改
|
var istmpatler = false; //创建临时表,导入数据,删除旧表,修改
|
||||||
if (_orm.Ado.ExecuteScalar(CommandType.Text, " select 1 from all_tab_comments where owner={0} and table_name={1}".FormatOracleSQL(tbname)) == null) { //表不存在
|
if (_orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from all_tab_comments where owner={0} and table_name={1}", tbname)) == null) { //表不存在
|
||||||
if (tboldname != null) {
|
if (tboldname != null) {
|
||||||
if (_orm.Ado.ExecuteScalar(CommandType.Text, " select 1 from all_tab_comments where owner={0} and table_name={1}".FormatOracleSQL(tboldname)) == null)
|
if (_orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from all_tab_comments where owner={0} and table_name={1}", tboldname)) == null)
|
||||||
//模式或表不存在
|
//模式或表不存在
|
||||||
tboldname = null;
|
tboldname = null;
|
||||||
}
|
}
|
||||||
@ -138,7 +138,7 @@ namespace FreeSql.Oracle {
|
|||||||
tboldname = null; //如果新表已经存在,不走改表名逻辑
|
tboldname = null; //如果新表已经存在,不走改表名逻辑
|
||||||
|
|
||||||
//对比字段,只可以修改类型、增加字段、有限的修改字段名;保证安全不删除字段
|
//对比字段,只可以修改类型、增加字段、有限的修改字段名;保证安全不删除字段
|
||||||
var sql = $@"
|
var sql = _commonUtils.FormatSql($@"
|
||||||
select
|
select
|
||||||
column_name,
|
column_name,
|
||||||
data_type,
|
data_type,
|
||||||
@ -150,7 +150,7 @@ case when nullable = 'Y' then 1 else 0 end,
|
|||||||
nvl((select 1 from user_sequences where sequence_name='{Utils.GetCsName((tboldname ?? tbname).Last())}_seq_'||all_tab_columns.column_name), 0),
|
nvl((select 1 from user_sequences where sequence_name='{Utils.GetCsName((tboldname ?? tbname).Last())}_seq_'||all_tab_columns.column_name), 0),
|
||||||
nvl((select 1 from user_triggers where trigger_name='{Utils.GetCsName((tboldname ?? tbname).Last())}_seq_'||all_tab_columns.column_name||'TI'), 0)
|
nvl((select 1 from user_triggers where trigger_name='{Utils.GetCsName((tboldname ?? tbname).Last())}_seq_'||all_tab_columns.column_name||'TI'), 0)
|
||||||
from all_tab_columns
|
from all_tab_columns
|
||||||
where owner={{0}} and table_name={{1}}".FormatOracleSQL(tboldname ?? tbname);
|
where owner={{0}} and table_name={{1}}", tboldname ?? tbname);
|
||||||
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
var tbstruct = ds.ToDictionary(a => string.Concat(a[0]), a => {
|
var tbstruct = ds.ToDictionary(a => string.Concat(a[0]), a => {
|
||||||
var sqlType = GetOracleSqlTypeFullName(a);
|
var sqlType = GetOracleSqlTypeFullName(a);
|
||||||
@ -190,7 +190,7 @@ where owner={{0}} and table_name={{1}}".FormatOracleSQL(tboldname ?? tbname);
|
|||||||
}
|
}
|
||||||
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, tbcol.Attribute.IsIdentity == true));
|
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, tbcol.Attribute.IsIdentity == true));
|
||||||
}
|
}
|
||||||
var dsuksql = @"
|
var dsuksql = _commonUtils.FormatSql(@"
|
||||||
select
|
select
|
||||||
c.column_name,
|
c.column_name,
|
||||||
c.constraint_name
|
c.constraint_name
|
||||||
@ -202,7 +202,7 @@ a.constraint_name = c.constraint_name
|
|||||||
and a.owner = c.owner
|
and a.owner = c.owner
|
||||||
and a.table_name = c.table_name
|
and a.table_name = c.table_name
|
||||||
and a.constraint_type in ('U')
|
and a.constraint_type in ('U')
|
||||||
and a.owner in ({0}) and a.table_name in ({1})".FormatMySql(tboldname ?? tbname);
|
and a.owner in ({0}) and a.table_name in ({1})", tboldname ?? tbname);
|
||||||
var dsuk = _orm.Ado.ExecuteArray(CommandType.Text, dsuksql).Select(a => new[] { string.Concat(a[0]), string.Concat(a[1]) });
|
var dsuk = _orm.Ado.ExecuteArray(CommandType.Text, dsuksql).Select(a => new[] { string.Concat(a[0]), string.Concat(a[1]) });
|
||||||
foreach (var uk in tb.Uniques) {
|
foreach (var uk in tb.Uniques) {
|
||||||
if (string.IsNullOrEmpty(uk.Key) || uk.Value.Any() == false) continue;
|
if (string.IsNullOrEmpty(uk.Key) || uk.Value.Any() == false) continue;
|
||||||
@ -219,7 +219,7 @@ and a.owner in ({0}) and a.table_name in ({1})".FormatMySql(tboldname ?? tbname)
|
|||||||
sb.Append(sbalter);
|
sb.Append(sbalter);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var oldpk = _orm.Ado.ExecuteScalar(CommandType.Text, @"select constraint_name from user_constraints where owner={0} and table_name={1} and constraint_type='P'".FormatPostgreSQL(tbname))?.ToString();
|
var oldpk = _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(@"select constraint_name from user_constraints where owner={0} and table_name={1} and constraint_type='P'", tbname))?.ToString();
|
||||||
if (string.IsNullOrEmpty(oldpk) == false)
|
if (string.IsNullOrEmpty(oldpk) == false)
|
||||||
sb.Append("execute immediate 'ALTER TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" DROP CONSTRAINT ").Append(oldpk).Append("';\r\n");
|
sb.Append("execute immediate 'ALTER TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" DROP CONSTRAINT ").Append(oldpk).Append("';\r\n");
|
||||||
|
|
||||||
@ -279,12 +279,12 @@ and a.owner in ({0}) and a.table_name in ({1})".FormatMySql(tboldname ?? tbname)
|
|||||||
dicDeclare.Add(seqname, true);
|
dicDeclare.Add(seqname, true);
|
||||||
}
|
}
|
||||||
sb.Append(seqname).Append("IS := 0; \r\n")
|
sb.Append(seqname).Append("IS := 0; \r\n")
|
||||||
.Append(" select count(1) into ").Append(seqname).Append("IS from user_sequences where sequence_name={0}; \r\n".FormatOracleSQL(seqname))
|
.Append(" select count(1) into ").Append(seqname).Append(_commonUtils.FormatSql("IS from user_sequences where sequence_name={0}; \r\n", seqname))
|
||||||
.Append("if ").Append(seqname).Append("IS > 0 then \r\n")
|
.Append("if ").Append(seqname).Append("IS > 0 then \r\n")
|
||||||
.Append(" execute immediate 'DROP SEQUENCE ").Append(_commonUtils.QuoteSqlName(seqname)).Append("';\r\n")
|
.Append(" execute immediate 'DROP SEQUENCE ").Append(_commonUtils.QuoteSqlName(seqname)).Append("';\r\n")
|
||||||
.Append("end if; \r\n");
|
.Append("end if; \r\n");
|
||||||
if (seqcol.Item3) {
|
if (seqcol.Item3) {
|
||||||
var startWith = _orm.Ado.ExecuteScalar(CommandType.Text, " select 1 from all_tab_comments where owner={0} and table_name={1}".FormatOracleSQL(tbname)) == null ? 1 :
|
var startWith = _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from all_tab_comments where owner={0} and table_name={1}", tbname)) == null ? 1 :
|
||||||
_orm.Ado.ExecuteScalar(CommandType.Text, $" select nvl(max({colname2})+1,1) from {tbname2}");
|
_orm.Ado.ExecuteScalar(CommandType.Text, $" select nvl(max({colname2})+1,1) from {tbname2}");
|
||||||
sb.Append("execute immediate 'CREATE SEQUENCE ").Append(_commonUtils.QuoteSqlName(seqname)).Append(" start with ").Append(startWith).Append("';\r\n");
|
sb.Append("execute immediate 'CREATE SEQUENCE ").Append(_commonUtils.QuoteSqlName(seqname)).Append(" start with ").Append(startWith).Append("';\r\n");
|
||||||
sb.Append("execute immediate 'CREATE OR REPLACE TRIGGER ").Append(_commonUtils.QuoteSqlName(tiggerName))
|
sb.Append("execute immediate 'CREATE OR REPLACE TRIGGER ").Append(_commonUtils.QuoteSqlName(tiggerName))
|
||||||
@ -297,7 +297,7 @@ and a.owner in ({0}) and a.table_name in ({1})".FormatMySql(tboldname ?? tbname)
|
|||||||
dicDeclare.Add(tiggerName, true);
|
dicDeclare.Add(tiggerName, true);
|
||||||
}
|
}
|
||||||
sb.Append(tiggerName).Append("IS := 0; \r\n")
|
sb.Append(tiggerName).Append("IS := 0; \r\n")
|
||||||
.Append(" select count(1) into ").Append(tiggerName).Append("IS from user_triggers where trigger_name={0}; \r\n".FormatOracleSQL(tiggerName))
|
.Append(" select count(1) into ").Append(tiggerName).Append(_commonUtils.FormatSql("IS from user_triggers where trigger_name={0}; \r\n", tiggerName))
|
||||||
.Append("if ").Append(tiggerName).Append("IS > 0 then \r\n")
|
.Append("if ").Append(tiggerName).Append("IS > 0 then \r\n")
|
||||||
.Append(" execute immediate 'DROP TRIGGER ").Append(_commonUtils.QuoteSqlName(tiggerName)).Append("';\r\n")
|
.Append(" execute immediate 'DROP TRIGGER ").Append(_commonUtils.QuoteSqlName(tiggerName)).Append("';\r\n")
|
||||||
.Append("end if; \r\n");
|
.Append("end if; \r\n");
|
||||||
|
@ -145,7 +145,7 @@ namespace FreeSql.Oracle {
|
|||||||
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 => "{0}".FormatOracleSQL(a)));
|
var databaseIn = string.Join(",", database.Select(a => _commonUtils.FormatSql("{0}", a)));
|
||||||
var sql = string.Format(@"
|
var sql = string.Format(@"
|
||||||
select
|
select
|
||||||
a.owner || '.' || a.table_name,
|
a.owner || '.' || a.table_name,
|
||||||
|
@ -138,7 +138,7 @@ namespace FreeSql.PostgreSQL {
|
|||||||
var tboldname = tb.DbOldName?.Split(new[] { '.' }, 2); //旧表名
|
var tboldname = tb.DbOldName?.Split(new[] { '.' }, 2); //旧表名
|
||||||
if (tboldname?.Length == 1) tboldname = new[] { "public", tboldname[0] };
|
if (tboldname?.Length == 1) tboldname = new[] { "public", tboldname[0] };
|
||||||
|
|
||||||
if (string.Compare(tbname[0], "public", true) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, " select 1 from pg_namespace where nspname={0}".FormatPostgreSQL(tbname[0])) == null) //创建模式
|
if (string.Compare(tbname[0], "public", true) != 0 && _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(" select 1 from pg_namespace where nspname={0}", tbname[0])) == null) //创建模式
|
||||||
sb.Append("CREATE SCHEMA IF NOT EXISTS ").Append(tbname[0]).Append(";\r\n");
|
sb.Append("CREATE SCHEMA IF NOT EXISTS ").Append(tbname[0]).Append(";\r\n");
|
||||||
|
|
||||||
var sbalter = new StringBuilder();
|
var sbalter = new StringBuilder();
|
||||||
@ -181,7 +181,7 @@ namespace FreeSql.PostgreSQL {
|
|||||||
tboldname = null; //如果新表已经存在,不走改表名逻辑
|
tboldname = null; //如果新表已经存在,不走改表名逻辑
|
||||||
|
|
||||||
//对比字段,只可以修改类型、增加字段、有限的修改字段名;保证安全不删除字段
|
//对比字段,只可以修改类型、增加字段、有限的修改字段名;保证安全不删除字段
|
||||||
var sql = @"
|
var sql = _commonUtils.FormatSql(@"
|
||||||
select
|
select
|
||||||
a.attname,
|
a.attname,
|
||||||
t.typname,
|
t.typname,
|
||||||
@ -198,7 +198,7 @@ left join pg_description d on d.objoid = a.attrelid and d.objsubid = a.attnum
|
|||||||
left join pg_attrdef e on e.adrelid = a.attrelid and e.adnum = a.attnum
|
left join pg_attrdef e on e.adrelid = a.attrelid and e.adnum = a.attnum
|
||||||
inner join pg_namespace ns on ns.oid = c.relnamespace
|
inner join pg_namespace ns on ns.oid = c.relnamespace
|
||||||
inner join pg_namespace ns2 on ns2.oid = t.typnamespace
|
inner join pg_namespace ns2 on ns2.oid = t.typnamespace
|
||||||
where ns.nspname = {0} and c.relname = {1}".FormatPostgreSQL(tboldname ?? tbname);
|
where ns.nspname = {0} and c.relname = {1}", tboldname ?? tbname);
|
||||||
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
var ds = _orm.Ado.ExecuteArray(CommandType.Text, sql);
|
||||||
var tbstruct = ds.ToDictionary(a => string.Concat(a[0]), a => {
|
var tbstruct = ds.ToDictionary(a => string.Concat(a[0]), a => {
|
||||||
var attndims = int.Parse(string.Concat(a[6]));
|
var attndims = int.Parse(string.Concat(a[6]));
|
||||||
@ -246,7 +246,7 @@ where ns.nspname = {0} and c.relname = {1}".FormatPostgreSQL(tboldname ?? tbname
|
|||||||
if (tbcol.Attribute.IsNullable == false) sbalter.Append("ALTER TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ALTER COLUMN ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" SET NOT NULL;\r\n");
|
if (tbcol.Attribute.IsNullable == false) sbalter.Append("ALTER TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" ALTER COLUMN ").Append(_commonUtils.QuoteSqlName(tbcol.Attribute.Name)).Append(" SET NOT NULL;\r\n");
|
||||||
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, tbcol.Attribute.IsIdentity == true));
|
if (tbcol.Attribute.IsIdentity == true) seqcols.Add((tbcol, tbname, tbcol.Attribute.IsIdentity == true));
|
||||||
}
|
}
|
||||||
var dsuksql = @"
|
var dsuksql = _commonUtils.FormatSql(@"
|
||||||
select
|
select
|
||||||
c.attname,
|
c.attname,
|
||||||
b.relname
|
b.relname
|
||||||
@ -255,7 +255,7 @@ inner join pg_class b on b.oid = a.indexrelid
|
|||||||
inner join pg_attribute c on c.attnum > 0 and c.attrelid = b.oid
|
inner join pg_attribute c on c.attnum > 0 and c.attrelid = b.oid
|
||||||
inner join pg_namespace ns on ns.oid = b.relnamespace
|
inner join pg_namespace ns on ns.oid = b.relnamespace
|
||||||
inner join pg_class d on d.oid = a.indrelid
|
inner join pg_class d on d.oid = a.indrelid
|
||||||
where ns.nspname in ({0}) and d.relname in ({1}) and a.indisunique = 't'".FormatMySql(tboldname ?? tbname);
|
where ns.nspname in ({0}) and d.relname in ({1}) and a.indisunique = 't'", tboldname ?? tbname);
|
||||||
var dsuk = _orm.Ado.ExecuteArray(CommandType.Text, dsuksql).Select(a => new[] { string.Concat(a[0]), string.Concat(a[1]) });
|
var dsuk = _orm.Ado.ExecuteArray(CommandType.Text, dsuksql).Select(a => new[] { string.Concat(a[0]), string.Concat(a[1]) });
|
||||||
foreach (var uk in tb.Uniques) {
|
foreach (var uk in tb.Uniques) {
|
||||||
if (string.IsNullOrEmpty(uk.Key) || uk.Value.Any() == false) continue;
|
if (string.IsNullOrEmpty(uk.Key) || uk.Value.Any() == false) continue;
|
||||||
@ -272,11 +272,11 @@ where ns.nspname in ({0}) and d.relname in ({1}) and a.indisunique = 't'".Format
|
|||||||
sb.Append(sbalter);
|
sb.Append(sbalter);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
var oldpk = _orm.Ado.ExecuteScalar(CommandType.Text, @"select pg_constraint.conname as pk_name from pg_constraint
|
var oldpk = _orm.Ado.ExecuteScalar(CommandType.Text, _commonUtils.FormatSql(@"select pg_constraint.conname as pk_name from pg_constraint
|
||||||
inner join pg_class on pg_constraint.conrelid = pg_class.oid
|
inner join pg_class on pg_constraint.conrelid = pg_class.oid
|
||||||
inner join pg_namespace on pg_namespace.oid = pg_class.relnamespace
|
inner join pg_namespace on pg_namespace.oid = pg_class.relnamespace
|
||||||
where pg_namespace.nspname={0} and pg_class.relname={1} and pg_constraint.contype='p'
|
where pg_namespace.nspname={0} and pg_class.relname={1} and pg_constraint.contype='p'
|
||||||
".FormatPostgreSQL(tbname))?.ToString();
|
", tbname))?.ToString();
|
||||||
if (string.IsNullOrEmpty(oldpk) == false)
|
if (string.IsNullOrEmpty(oldpk) == false)
|
||||||
sb.Append("ALTER TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" DROP CONSTRAINT ").Append(oldpk).Append(";\r\n");
|
sb.Append("ALTER TABLE ").Append(_commonUtils.QuoteSqlName($"{tbname[0]}.{tbname[1]}")).Append(" DROP CONSTRAINT ").Append(oldpk).Append(";\r\n");
|
||||||
|
|
||||||
|
@ -501,14 +501,14 @@ where ns.nspname || '.' || b.relname in ({loc8})
|
|||||||
|
|
||||||
public List<DbEnumInfo> GetEnumsByDatabase(params string[] database) {
|
public List<DbEnumInfo> GetEnumsByDatabase(params string[] database) {
|
||||||
if (database == null || database.Length == 0) return new List<DbEnumInfo>();
|
if (database == null || database.Length == 0) return new List<DbEnumInfo>();
|
||||||
var drs = _orm.Ado.Query<(string name, string label)>(CommandType.Text, @"
|
var drs = _orm.Ado.Query<(string name, string label)>(CommandType.Text, _commonUtils.FormatSql(@"
|
||||||
select
|
select
|
||||||
ns.nspname || '.' || a.typname,
|
ns.nspname || '.' || a.typname,
|
||||||
b.enumlabel
|
b.enumlabel
|
||||||
from pg_type a
|
from pg_type a
|
||||||
inner join pg_enum b on b.enumtypid = a.oid
|
inner join pg_enum b on b.enumtypid = a.oid
|
||||||
inner join pg_namespace ns on ns.oid = a.typnamespace
|
inner join pg_namespace ns on ns.oid = a.typnamespace
|
||||||
where a.typtype = 'e' and ns.nspname in (SELECT ""schema_name"" FROM information_schema.schemata where catalog_name in {0})".FormatPostgreSQL(database));
|
where a.typtype = 'e' and ns.nspname in (SELECT ""schema_name"" FROM information_schema.schemata where catalog_name in {0})", database));
|
||||||
var ret = new Dictionary<string, Dictionary<string, string>>();
|
var ret = new Dictionary<string, Dictionary<string, string>>();
|
||||||
foreach (var dr in drs) {
|
foreach (var dr in drs) {
|
||||||
if (ret.TryGetValue(dr.name, out var labels) == false) ret.Add(dr.name, labels = new Dictionary<string, string>());
|
if (ret.TryGetValue(dr.name, out var labels) == false) ret.Add(dr.name, labels = new Dictionary<string, string>());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user