提交 7dc4ed78 编写于 作者: B Boris Djurdjevic

Added config ApplySubqueryLimit

上级 a05f8693
......@@ -255,6 +255,14 @@ public class BulkConfig
/// </remarks>
public bool DoNotUpdateIfTimeStampChanged { get; set; }
/// <summary>
/// Default is zero '0'. When set to larger value it appends: LIMIT 'N', to generated query
/// </summary>
/// <remarks>
/// Used only with PostgreSql.
/// </remarks>
public int ApplySubqueryLimit { get; set; } = 0;
/// <summary>
/// Spatial Reference Identifier - for SQL Server with NetTopologySuite. Default value is <c>4326</c>.
/// </summary>
......
......@@ -131,13 +131,14 @@ public class PostgreSqlQueryBuilder : SqlQueryBuilder
var columnsToUpdate = columnsListEquals.Where(c => tableInfo.PropertyColumnNamesUpdateDict.ContainsValue(c)).ToList();
var equalsColumns = SqlQueryBuilder.GetCommaSeparatedColumns(columnsToUpdate, equalsTable: "EXCLUDED").Replace("[", @"""").Replace("]", @"""");
bool applySubqueryLimit = columnsToUpdate.Count == 0 || string.IsNullOrWhiteSpace(equalsColumns);
var subqueryText = applySubqueryLimit ? "LIMIT 1 " : "";
int subqueryLimit = tableInfo.BulkConfig.ApplySubqueryLimit;
var subqueryText = subqueryLimit > 0 ? $"LIMIT {subqueryLimit} " : "";
bool onUpdateDoNothing = columnsToUpdate.Count == 0 || string.IsNullOrWhiteSpace(equalsColumns);
q = $"INSERT INTO {tableInfo.FullTableName} ({commaSeparatedColumns}) " +
$"(SELECT {commaSeparatedColumns} FROM {tableInfo.FullTempTableName}) " + subqueryText +
$"ON CONFLICT ({updateByColumns}) " +
(applySubqueryLimit
(onUpdateDoNothing
? $"DO NOTHING"
: $"DO UPDATE SET {equalsColumns}");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册