Skip to content

Commit d1bc153

Browse files
author
fabien.menager
committed
Factorize pseudo column names and fix comments
1 parent 7154c6e commit d1bc153

3 files changed

Lines changed: 23 additions & 16 deletions

File tree

src/PhenX.EntityFrameworkCore.BulkInsert.MySql/MySqlDialectBuilder.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,10 @@ internal class MySqlServerDialectBuilder : SqlDialectBuilder
1414

1515
protected override string CloseDelimiter => "`";
1616

17-
/// <summary>
18-
/// Indicates whether the dialect supports moving rows from temporary table to the final table, in order to
19-
/// theoretically reduce disk space requirements.
20-
/// </summary>
17+
/// <inheritdoc />
2118
protected override bool SupportsMoveRows => false;
2219

23-
/// <summary>
24-
/// Indicates whether the dialect supports INSERT INTO table AS alias.
25-
/// </summary>
20+
/// <inheritdoc />
2621
protected override bool SupportsInsertIntoAlias => false;
2722

2823
public override string CreateTableCopySql(string tempNameName, TableMetadata tableInfo, IReadOnlyList<ColumnMetadata> columns)

src/PhenX.EntityFrameworkCore.BulkInsert.SqlServer/SqlServerDialectBuilder.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,16 @@ public override string BuildMoveDataSql<T>(
7171
throw new InvalidOperationException("Table has no primary key that can be used for conflict detection.");
7272
}
7373

74-
q.AppendLine($"MERGE INTO {target.QuotedTableName} AS INSERTED");
74+
q.AppendLine($"MERGE INTO {target.QuotedTableName} AS {PseudoColumnInserted}");
7575

7676
q.Append("USING (SELECT ");
7777
q.AppendColumns(insertedColumns);
78-
q.Append($" FROM {source}) AS EXCLUDED (");
78+
q.Append($" FROM {source}) AS {PseudoColumnExcluded} (");
7979
q.AppendColumns(insertedColumns);
8080
q.AppendLine(")");
8181

8282
q.Append("ON ");
83-
q.AppendJoin(" AND ", matchColumns, (b, col) => b.Append($"INSERTED.{col} = EXCLUDED.{col}"));
83+
q.AppendJoin(" AND ", matchColumns, (b, col) => b.Append($"{PseudoColumnInserted}.{col} = {PseudoColumnExcluded}.{col}"));
8484
q.AppendLine();
8585

8686
if (onConflictTyped.Update != null)
@@ -110,13 +110,13 @@ public override string BuildMoveDataSql<T>(
110110
q.AppendLine(")");
111111

112112
q.Append("VALUES (");
113-
q.AppendJoin(", ", insertedColumns, (b, col) => b.Append($"EXCLUDED.{col.QuotedColumName}"));
113+
q.AppendJoin(", ", insertedColumns, (b, col) => b.Append($"{PseudoColumnExcluded}.{col.QuotedColumName}"));
114114
q.AppendLine(")");
115115

116116
if (returnedColumns.Count != 0)
117117
{
118118
q.Append("OUTPUT ");
119-
q.AppendJoin(", ", returnedColumns, (b, col) => b.Append($"INSERTED.{col.QuotedColumName} AS {col.QuotedColumName}"));
119+
q.AppendJoin(", ", returnedColumns, (b, col) => b.Append($"{PseudoColumnInserted}.{col.QuotedColumName} AS {col.QuotedColumName}"));
120120
q.AppendLine();
121121
}
122122
}
@@ -131,7 +131,7 @@ public override string BuildMoveDataSql<T>(
131131
if (returnedColumns.Count != 0)
132132
{
133133
q.Append("OUTPUT ");
134-
q.AppendJoin(", ", returnedColumns, (b, col) => b.Append($"INSERTED.{col.QuotedColumName} AS {col.QuotedColumName}"));
134+
q.AppendJoin(", ", returnedColumns, (b, col) => b.Append($"{PseudoColumnInserted}.{col.QuotedColumName} AS {col.QuotedColumName}"));
135135
q.AppendLine();
136136
}
137137

src/PhenX.EntityFrameworkCore.BulkInsert/Dialect/SqlDialectBuilder.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,23 @@ namespace PhenX.EntityFrameworkCore.BulkInsert.Dialect;
1010

1111
internal abstract class SqlDialectBuilder
1212
{
13+
protected const string PseudoColumnInserted = "INSERTED";
14+
protected const string PseudoColumnExcluded = "EXCLUDED";
15+
1316
protected abstract string OpenDelimiter { get; }
1417
protected abstract string CloseDelimiter { get; }
1518

1619
protected virtual string ConcatOperator => "||";
20+
21+
/// <summary>
22+
/// Indicates whether the dialect supports moving rows from temporary table to the final table, in order to
23+
/// theoretically reduce disk space requirements.
24+
/// </summary>
1725
protected virtual bool SupportsMoveRows => true;
26+
27+
/// <summary>
28+
/// Indicates whether the dialect supports INSERT INTO table AS alias.
29+
/// </summary>
1830
protected virtual bool SupportsInsertIntoAlias => true;
1931

2032
public abstract string CreateTableCopySql(string tempNameName, TableMetadata tableInfo, IReadOnlyList<ColumnMetadata> columns);
@@ -56,7 +68,7 @@ public virtual string BuildMoveDataSql<T>(
5668

5769
if (SupportsInsertIntoAlias)
5870
{
59-
q.Append(" AS INSERTED");
71+
q.Append($" AS {PseudoColumnInserted}");
6072
}
6173

6274
q.AppendLine(" (");
@@ -156,12 +168,12 @@ protected virtual void AppendConflictCondition<T>(StringBuilder sql, TableMetada
156168
/// <summary>
157169
/// Get the name of the INSERTED column (data already in the table) for the ON CONFLICT clause.
158170
/// </summary>
159-
protected virtual string GetInsertedColumnName(string columnName) => $"INSERTED.{Quote(columnName)}";
171+
protected virtual string GetInsertedColumnName(string columnName) => $"{PseudoColumnInserted}.{Quote(columnName)}";
160172

161173
/// <summary>
162174
/// Get the name of the EXCLUDED column (data conflicting with table) for the ON CONFLICT clause.
163175
/// </summary>
164-
protected virtual string GetExcludedColumnName(string columnName) => $"EXCLUDED.{Quote(columnName)}";
176+
protected virtual string GetExcludedColumnName(string columnName) => $"{PseudoColumnExcluded}.{Quote(columnName)}";
165177

166178
/// <summary>
167179
/// Quotes a column name using database-specific delimiters.

0 commit comments

Comments
 (0)