Skip to content

Commit 031395d

Browse files
Move stuff to dialect.
1 parent 93738de commit 031395d

10 files changed

Lines changed: 31 additions & 42 deletions

File tree

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,6 @@ public MySqlBulkInsertProvider(ILogger<MySqlBulkInsertProvider>? logger = null)
2222
/// <inheritdoc />
2323
protected override string GetTempTableName(string tableName) => $"#_temp_bulk_insert_{tableName}";
2424

25-
protected override string CreateTableCopySql(string tempNameName, TableMetadata tableInfo, IReadOnlyList<PropertyMetadata> columns)
26-
{
27-
return $"CREATE TEMPORARY TABLE {tempNameName} SELECT * FROM {tableInfo.QuotedTableName} WHERE 1 = 0;";
28-
}
29-
3025
/// <inheritdoc />
3126
public override Task<List<T>> BulkInsertReturnEntities<T>(
3227
bool sync,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ internal class MySqlServerDialectBuilder : SqlDialectBuilder
1414

1515
protected override bool SupportsMoveRows => false;
1616

17+
public override string CreateTableCopySql(string tempNameName, TableMetadata tableInfo, IReadOnlyList<PropertyMetadata> columns)
18+
{
19+
return $"CREATE TEMPORARY TABLE {tempNameName} SELECT * FROM {tableInfo.QuotedTableName} WHERE 1 = 0;";
20+
}
21+
1722
protected override void AppendConflictCondition<T>(StringBuilder sql, OnConflictOptions<T> onConflictTyped)
1823
{
1924
throw new NotSupportedException("Conflict conditions are not supported in MYSQL");

src/PhenX.EntityFrameworkCore.BulkInsert.PostgreSql/PostgreSqlBulkInsertProvider.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,6 @@ public PostgreSqlBulkInsertProvider(ILogger<PostgreSqlBulkInsertProvider>? logge
2323
/// <inheritdoc />
2424
protected override string AddTableCopyBulkInsertId => $"ALTER TABLE {{0}} ADD COLUMN {BulkInsertId} SERIAL PRIMARY KEY;";
2525

26-
/// <inheritdoc />
27-
protected override string CreateTableCopySql(string tempNameName, TableMetadata tableInfo, IReadOnlyList<PropertyMetadata> columns)
28-
{
29-
return $"CREATE TEMPORARY TABLE {tempNameName} AS TABLE {tableInfo.QuotedTableName} WITH NO DATA;";
30-
}
31-
3226
private static string GetBinaryImportCommand(IReadOnlyList<PropertyMetadata> properties, string tableName)
3327
{
3428
var sql = new StringBuilder();

src/PhenX.EntityFrameworkCore.BulkInsert.PostgreSql/PostgreSqlDialectBuilder.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ internal class PostgreSqlDialectBuilder : SqlDialectBuilder
1111
protected override string OpenDelimiter => "\"";
1212
protected override string CloseDelimiter => "\"";
1313

14+
public override string CreateTableCopySql(string tempNameName, TableMetadata tableInfo, IReadOnlyList<PropertyMetadata> columns)
15+
{
16+
return $"CREATE TEMPORARY TABLE {tempNameName} AS TABLE {tableInfo.QuotedTableName} WITH NO DATA;";
17+
}
18+
1419
protected override void AppendConflictMatch<T>(StringBuilder sql, TableMetadata target, OnConflictOptions<T> conflict)
1520
{
1621
if (conflict.Match != null)

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

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,6 @@ public SqlServerBulkInsertProvider(ILogger<SqlServerBulkInsertProvider>? logger
2626
/// <inheritdoc />
2727
protected override string GetTempTableName(string tableName) => $"#_temp_bulk_insert_{tableName}";
2828

29-
protected override string CreateTableCopySql(string templNameName, TableMetadata tableInfo, IReadOnlyList<PropertyMetadata> columns)
30-
{
31-
var sb = new StringBuilder();
32-
sb.Append($"CREATE TABLE {templNameName}");
33-
sb.AppendLine("(");
34-
35-
foreach (var column in columns)
36-
{
37-
sb.Append($" {column.QuotedColumName} {column.StoreDefinition}");
38-
if (column != columns[^1])
39-
{
40-
sb.Append(',');
41-
}
42-
sb.AppendLine();
43-
}
44-
45-
sb.AppendLine(")");
46-
47-
return sb.ToString();
48-
}
49-
5029
/// <inheritdoc />
5130
protected override async Task BulkInsert<T>(
5231
bool sync,

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@ internal class SqlServerDialectBuilder : SqlDialectBuilder
1414

1515
protected override bool SupportsMoveRows => false;
1616

17+
public override string CreateTableCopySql(string templNameName, TableMetadata tableInfo, IReadOnlyList<PropertyMetadata> columns)
18+
{
19+
var q = new StringBuilder();
20+
q.Append("SELECT");
21+
q.AppendColumns(columns);
22+
q.Append($"INTO {templNameName} FROM {tableInfo.QuotedTableName} WHERE 1 = 0;");
23+
24+
return q.ToString();
25+
}
26+
1727
public override string BuildMoveDataSql<T>(
1828
TableMetadata target,
1929
string source,

src/PhenX.EntityFrameworkCore.BulkInsert.Sqlite/SqliteBulkInsertProvider.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,6 @@ public SqliteBulkInsertProvider(ILogger<SqliteBulkInsertProvider>? logger = null
2727
/// <inheritdoc />
2828
protected override string AddTableCopyBulkInsertId => "--"; // No need to add an ID column in SQLite
2929

30-
/// <inheritdoc />
31-
protected override string CreateTableCopySql(string tempNameName, TableMetadata tableInfo, IReadOnlyList<PropertyMetadata> columns)
32-
{
33-
return $"CREATE TEMP TABLE {tempNameName} AS SELECT * FROM {tableInfo.QuotedTableName} WHERE 0;";
34-
}
35-
3630
/// <inheritdoc />
3731
protected override Task AddBulkInsertIdColumn<T>(
3832
bool sync,

src/PhenX.EntityFrameworkCore.BulkInsert.Sqlite/SqliteDialectBuilder.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using PhenX.EntityFrameworkCore.BulkInsert.Dialect;
1+
using PhenX.EntityFrameworkCore.BulkInsert.Dialect;
2+
using PhenX.EntityFrameworkCore.BulkInsert.Metadata;
23

34
namespace PhenX.EntityFrameworkCore.BulkInsert.Sqlite;
45

@@ -8,4 +9,10 @@ internal class SqliteDialectBuilder : SqlDialectBuilder
89
protected override string CloseDelimiter => "\"";
910

1011
protected override bool SupportsMoveRows => false;
12+
13+
/// <inheritdoc />
14+
public override string CreateTableCopySql(string tempNameName, TableMetadata tableInfo, IReadOnlyList<PropertyMetadata> columns)
15+
{
16+
return $"CREATE TEMP TABLE {tempNameName} AS SELECT * FROM {tableInfo.QuotedTableName} WHERE 0;";
17+
}
1118
}

src/PhenX.EntityFrameworkCore.BulkInsert/BulkInsertProviderBase.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,14 @@ protected async Task<string> CreateTableCopyAsync<T>(
3636
var tempTableName = SqlDialect.QuoteTableName(null, GetTempTableName(tableInfo.TableName));
3737
var tempColumns = tableInfo.GetProperties(options.CopyGeneratedColumns);
3838

39-
var query = CreateTableCopySql(tempTableName, tableInfo, tempColumns);
39+
var query = SqlDialect.CreateTableCopySql(tempTableName, tableInfo, tempColumns);
4040

4141
await ExecuteAsync(sync, context, query, cancellationToken);
4242
await AddBulkInsertIdColumn<T>(sync, context, tempTableName, cancellationToken);
4343

4444
return tempTableName;
4545
}
4646

47-
protected abstract string CreateTableCopySql(string tempNameName, TableMetadata tableInfo, IReadOnlyList<PropertyMetadata> columns);
48-
4947
protected virtual async Task AddBulkInsertIdColumn<T>(bool sync, DbContext context,
5048
string tempTableName, CancellationToken cancellationToken) where T : class
5149
{

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ internal abstract class SqlDialectBuilder
1414
protected virtual string ConcatOperator => "||";
1515
protected virtual bool SupportsMoveRows => true;
1616

17+
public abstract string CreateTableCopySql(string tempNameName, TableMetadata tableInfo, IReadOnlyList<PropertyMetadata> columns);
18+
1719
/// <summary>
1820
/// Builds the SQL for moving data from one table to another.
1921
/// </summary>

0 commit comments

Comments
 (0)