add InsertData(), UpdateData(), DeleteData() migration methods and improve RewriteValue() abstraction

This commit is contained in:
sbwalker
2025-08-12 14:59:51 -04:00
parent bf932719b2
commit 6142bfc5db
30 changed files with 155 additions and 64 deletions

View File

@ -55,9 +55,9 @@ namespace Oqtane.Migrations.EntityBuilders
return ActiveDatabase.RewriteName(name);
}
private string RewriteValue(string value, string type)
private string RewriteValue(object value)
{
return ActiveDatabase.RewriteValue(value, type);
return ActiveDatabase.RewriteValue(value);
}
// Column Operations
@ -466,36 +466,100 @@ namespace Oqtane.Migrations.EntityBuilders
//Sql Operations
public void DeleteFromTable(string condition = "")
public void InsertData(string[] columns, object[] values, string condition)
{
var deleteSql = $"DELETE FROM {AddSchema(DelimitName(RewriteName(EntityTableName)))} ";
if(!string.IsNullOrEmpty(condition))
var sql = $"INSERT INTO {AddSchema(DelimitName(RewriteName(EntityTableName)))} ";
if (columns != null && columns.Length > 0)
{
sql += "(";
for (var i = 0; i < columns.Length; i++)
{
sql += ((i == 0) ? "" : ", ") + $"{DelimitName(RewriteName(columns[i]))}";
}
sql += ") ";
}
if (values != null && values.Length > 0)
{
sql += "VALUES (";
for (var i = 0; i < values.Length; i++)
{
sql += ((i == 0) ? "" : ", ") + $"{RewriteValue(values[i])}";
}
sql += ") ";
}
if (!string.IsNullOrEmpty(condition))
{
// note that condition values must be created using RewriteName(), DelimitName(), RewriteValue() if targeting multiple database platforms
deleteSql += $"WHERE {condition}";
sql += $"{condition}";
}
_migrationBuilder.Sql(deleteSql);
_migrationBuilder.Sql(sql);
}
public void UpdateData(string column, object value)
{
UpdateData([column], [value], "");
}
public void UpdateData(string column, object value, string condition)
{
UpdateData([column], [value], condition);
}
public void UpdateData(string[] columns, object[] values, string condition)
{
var sql = $"UPDATE {AddSchema(DelimitName(RewriteName(EntityTableName)))} ";
if (columns != null && values != null && columns.Length > 0 && values.Length > 0 && columns.Length == values.Length)
{
sql += "SET ";
for (var i = 0; i < columns.Length; i++)
{
sql += ((i == 0) ? "" : ", ") + $"{DelimitName(RewriteName(columns[i]))} = {RewriteValue(values[i])}";
}
sql += " ";
}
if (!string.IsNullOrEmpty(condition))
{
// note that condition values must be created using RewriteName(), DelimitName(), RewriteValue() if targeting multiple database platforms
sql += $"WHERE {condition}";
}
_migrationBuilder.Sql(sql);
}
public void DeleteData(string condition)
{
var sql = $"DELETE FROM {AddSchema(DelimitName(RewriteName(EntityTableName)))} ";
if (!string.IsNullOrEmpty(condition))
{
// note that condition values must be created using RewriteName(), DelimitName(), RewriteValue() if targeting multiple database platforms
sql += $"WHERE {condition}";
}
_migrationBuilder.Sql(sql);
}
[Obsolete("DeleteFromTable(condition) is deprecated. Use DeleteData(condition) instead", false)]
public void DeleteFromTable(string condition = "")
{
DeleteData(condition);
}
[Obsolete("UpdateColumn(columnName, value) is deprecated. Use UpdateData(column, value) instead", false)]
public void UpdateColumn(string columnName, string value)
{
UpdateColumn(columnName, value, "", "");
}
[Obsolete("UpdateColumn(columnName, value, condition) is deprecated. Use UpdateData(column, value, condition) instead", false)]
public void UpdateColumn(string columnName, string value, string condition)
{
UpdateColumn(columnName, value, "", condition);
}
[Obsolete("UpdateColumn(columnName, value, type, condition) is deprecated. Use UpdateData(column, value, condition) instead", false)]
public void UpdateColumn(string columnName, string value, string type, string condition)
{
var updateSql = $"UPDATE {AddSchema(DelimitName(RewriteName(EntityTableName)))} SET {DelimitName(RewriteName(columnName))} = {RewriteValue(value, type)} ";
if (!string.IsNullOrEmpty(condition))
{
// note that condition values must be created using RewriteName(), DelimitName(), RewriteValue() if targeting multiple database platforms
updateSql += $"WHERE {condition}";
}
_migrationBuilder.Sql(updateSql);
object obj = (type == "bool" && value == "1") ? true : false; // boolean values had custom logic for PostgreSQL
UpdateData([columnName], [obj], condition);
}
}
}