BotSharp/src/Plugins/BotSharp.Plugin.SqlDriver/Functions/SqlInsertFn.cs

51 lines
1.7 KiB
C#
Raw Normal View History

2024-02-19 22:55:41 +00:00
using BotSharp.Plugin.SqlDriver.Models;
namespace BotSharp.Plugin.SqlDriver.Functions;
public class SqlInsertFn : IFunctionCallback
{
public string Name => "sql_insert";
private readonly IServiceProvider _services;
public SqlInsertFn(IServiceProvider services)
{
_services = services;
}
public async Task<bool> Execute(RoleDialogModel message)
{
var args = JsonSerializer.Deserialize<SqlStatement>(message.FunctionArgs);
var sqlDriver = _services.GetRequiredService<SqlDriverService>();
2024-02-22 19:37:14 +00:00
// Check duplication
if (sqlDriver.Statements.Exists(x => x.Statement == args.Statement))
{
var list = sqlDriver.Statements.Where(x => x.Statement == args.Statement).ToList();
foreach (var statement in list)
{
var p1 = string.Join(", ", statement.Parameters.OrderBy(x => x.Name).Select(x => x.Value));
var p2 = string.Join(", ", args.Parameters.OrderBy(x => x.Name).Select(x => x.Value));
if (p1 == p2)
{
message.Content = "Skip duplicated INSERT statement";
return false;
}
}
}
2024-02-19 22:55:41 +00:00
sqlDriver.Enqueue(args);
2024-02-21 04:31:09 +00:00
message.Content = $"Inserted new record successfully.";
2024-02-19 22:55:41 +00:00
if (args.Return != null)
{
/*sqlDriver.Enqueue(new SqlStatement
{
Statement = $"SELECT LAST_INSERT_ID() INTO @{args.Return.Alias};",
Reason = $"select auto-incremented id into '{args.Return.Alias}'"
});*/
message.Content += $" The {args.Return.Name} is saved to @{args.Return.Alias}.";
}
return true;
}
}