支持导出sql
This commit is contained in:
parent
c0c17abea1
commit
a606282499
@ -18,7 +18,7 @@ namespace Chenfeng.MES.Archiver.Commands
|
|||||||
[Command("copy")]
|
[Command("copy")]
|
||||||
public class CopyTableCommand : ICommand,IArchiveReader
|
public class CopyTableCommand : ICommand,IArchiveReader
|
||||||
{
|
{
|
||||||
[CommandParameter(0, Description = "数据库连接")]
|
[CommandOption("connection", Description = "数据库连接")]
|
||||||
public string Connection { get; set; } = "";
|
public string Connection { get; set; } = "";
|
||||||
|
|
||||||
public string TableSuffix { get; set; } = "new";
|
public string TableSuffix { get; set; } = "new";
|
||||||
@ -42,26 +42,25 @@ namespace Chenfeng.MES.Archiver.Commands
|
|||||||
[CommandOption("timeout", Description = "sql命令超时时间")]
|
[CommandOption("timeout", Description = "sql命令超时时间")]
|
||||||
public int Timeout { get; set; } = 3;
|
public int Timeout { get; set; } = 3;
|
||||||
|
|
||||||
|
[CommandOption("script", Description = "是否生成执行脚本")]
|
||||||
|
public bool Script { get; set; }
|
||||||
|
|
||||||
public ValueTask ExecuteAsync(IConsole console)
|
public ValueTask ExecuteAsync(IConsole console)
|
||||||
{
|
{
|
||||||
Print = (text) => console.Output.WriteLine($"{DateTime.Now.ToLongTimeString()} {text}");
|
Print = (text) => console.Output.WriteLine($"{DateTime.Now.ToLongTimeString()} {text}");
|
||||||
|
|
||||||
var connBuilder = new MySqlConnectionStringBuilder(this.Connection);
|
|
||||||
connBuilder.SslMode = MySqlSslMode.None;
|
|
||||||
connBuilder.CharacterSet = "utf8";
|
|
||||||
|
|
||||||
var starMonth = DateTime.Now.AddMonths(-12).ToString("yyyyMM");
|
var starMonth = DateTime.Now.AddMonths(-12).ToString("yyyyMM");
|
||||||
|
|
||||||
SqlMapper.Settings.CommandTimeout = 60 * Timeout;
|
SqlMapper.Settings.CommandTimeout = 60 * Timeout;
|
||||||
|
var executeType = "copy";
|
||||||
if (RemoveBackup)
|
if (RemoveBackup)
|
||||||
{
|
{
|
||||||
|
executeType = "rm_bak";
|
||||||
console.Output.WriteLine("删除备份表");
|
console.Output.WriteLine("删除备份表");
|
||||||
}
|
}
|
||||||
else if (Restore)
|
else if (Restore)
|
||||||
{
|
{
|
||||||
|
executeType = "restore";
|
||||||
console.Output.WriteLine("还原备份表");
|
console.Output.WriteLine("还原备份表");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -71,9 +70,15 @@ namespace Chenfeng.MES.Archiver.Commands
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Db = new MySqlConnection(connBuilder.ConnectionString);
|
if (this.Connection.Length > 0)
|
||||||
|
{
|
||||||
|
var connBuilder = new MySqlConnectionStringBuilder(this.Connection);
|
||||||
|
connBuilder.SslMode = MySqlSslMode.None;
|
||||||
|
connBuilder.CharacterSet = "utf8";
|
||||||
|
Db = new MySqlConnection(connBuilder.ConnectionString);
|
||||||
|
}
|
||||||
|
|
||||||
Db.Open();
|
Db?.Open();
|
||||||
if (Legacy)
|
if (Legacy)
|
||||||
{
|
{
|
||||||
TableQueryHelper.MesLegacyTables(this,starMonth);
|
TableQueryHelper.MesLegacyTables(this,starMonth);
|
||||||
@ -83,6 +88,21 @@ namespace Chenfeng.MES.Archiver.Commands
|
|||||||
TableQueryHelper.MesTables(this,starMonth);
|
TableQueryHelper.MesTables(this,starMonth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Script)
|
||||||
|
{
|
||||||
|
if (Directory.Exists("./scripts")==false)
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory("./scripts");
|
||||||
|
}
|
||||||
|
using (var file = File.OpenWrite($"./scripts/mes{(Legacy?"-legacy":"")}-table-{executeType}.sql"))
|
||||||
|
{
|
||||||
|
using (var writer = new StreamWriter(file))
|
||||||
|
{
|
||||||
|
writer.Write(sqlScripts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Print("操作成功");
|
Print("操作成功");
|
||||||
|
|
||||||
@ -101,12 +121,32 @@ namespace Chenfeng.MES.Archiver.Commands
|
|||||||
|
|
||||||
public void ExecuteData(string table, string where, object param)
|
public void ExecuteData(string table, string where, object param)
|
||||||
{
|
{
|
||||||
Db.Execute($"INSERT INTO `{TableDic[table]}` SELECT * FROM `{table}` WHERE {where}", param);
|
ExecuteSql($"INSERT INTO `{TableDic[table]}` SELECT * FROM `{table}` WHERE {where}", param);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ExecuteChildData(string table, string parentTable, string condition)
|
public void ExecuteChildData(string table, string parentTable, string condition)
|
||||||
{
|
{
|
||||||
Db.Execute($"INSERT INTO `{TableDic[table]}` SELECT child.* FROM `{TableDic[parentTable]}` parent join `{table}` child on {condition} ");
|
ExecuteSql($"INSERT INTO `{TableDic[table]}` SELECT child.* FROM `{TableDic[parentTable]}` parent join `{table}` child on {condition} ");
|
||||||
|
}
|
||||||
|
|
||||||
|
private StringBuilder sqlScripts = new StringBuilder();
|
||||||
|
private void ExecuteSql(string sql, object param = null)
|
||||||
|
{
|
||||||
|
Db?.Execute(sql,param);
|
||||||
|
if (Script)
|
||||||
|
{
|
||||||
|
var fullSql = sql + ";";
|
||||||
|
if(param != null)
|
||||||
|
{
|
||||||
|
foreach (var property in param.GetType().GetProperties())
|
||||||
|
{
|
||||||
|
var val = property.GetValue(param)?.ToString();
|
||||||
|
fullSql =fullSql.Replace("@" + property.Name, val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sqlScripts.AppendLine(fullSql);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -124,19 +164,19 @@ namespace Chenfeng.MES.Archiver.Commands
|
|||||||
{
|
{
|
||||||
if (RemoveBackup)
|
if (RemoveBackup)
|
||||||
{
|
{
|
||||||
Db.Execute($"DROP TABLE IF EXISTS `{item.Table}_bak`");
|
ExecuteSql($"DROP TABLE IF EXISTS `{item.Table}_bak`");
|
||||||
}
|
}
|
||||||
else if (Restore)
|
else if (Restore)
|
||||||
{
|
{
|
||||||
Db.Execute($"DROP TABLE IF EXISTS `{item.Table}`");
|
ExecuteSql($"DROP TABLE IF EXISTS `{item.Table}`");
|
||||||
Db.Execute($"RENAME TABLE `{item.Table}_bak` TO `{item.Table}`");
|
ExecuteSql($"RENAME TABLE `{item.Table}_bak` TO `{item.Table}`");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TableDic[item.Table] = item.NewTable;
|
TableDic[item.Table] = item.NewTable;
|
||||||
|
|
||||||
Db.Execute($"DROP TABLE IF EXISTS `{item.NewTable}`");
|
ExecuteSql($"DROP TABLE IF EXISTS `{item.NewTable}`");
|
||||||
Db.Execute($"CREATE TABLE `{item.NewTable}` LIKE `{item.Table}`"); // IF NOT EXISTS
|
ExecuteSql($"CREATE TABLE `{item.NewTable}` LIKE `{item.Table}`"); // IF NOT EXISTS
|
||||||
|
|
||||||
Print(item.NewTable + " 创建完成");
|
Print(item.NewTable + " 创建完成");
|
||||||
action(item.Table);
|
action(item.Table);
|
||||||
@ -144,8 +184,8 @@ namespace Chenfeng.MES.Archiver.Commands
|
|||||||
|
|
||||||
if (Replace)
|
if (Replace)
|
||||||
{
|
{
|
||||||
Db.Execute($"RENAME TABLE `{item.Table}` TO `{item.Table}_bak`");
|
ExecuteSql($"RENAME TABLE `{item.Table}` TO `{item.Table}_bak`");
|
||||||
Db.Execute($"RENAME TABLE `{item.NewTable}` TO `{item.Table}`");
|
ExecuteSql($"RENAME TABLE `{item.NewTable}` TO `{item.Table}`");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user