Skip to content

Commit

Permalink
allow sql bulk copy to have custom timeout
Browse files Browse the repository at this point in the history
  • Loading branch information
JFriel committed Mar 12, 2024
1 parent 1c53092 commit c3e6a8c
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 11 deletions.
16 changes: 8 additions & 8 deletions FAnsiSql/Implementations/MySql/MySqlBulkCopy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ namespace FAnsi.Implementations.MySql;
public sealed partial class MySqlBulkCopy(DiscoveredTable targetTable, IManagedConnection connection, CultureInfo culture)
: BulkCopy(targetTable, connection, culture)
{
public static readonly int BulkInsertBatchTimeoutInSeconds = 0;
public static int BulkInsertBatchTimeoutInSeconds { get; set; } = 0;

public override int UploadImpl(DataTable dt)
{
Expand All @@ -28,7 +28,7 @@ public override int UploadImpl(DataTable dt)
int maxPacket;
using (var packetQ = new MySqlCommand("select @@max_allowed_packet", (MySqlConnection)Connection.Connection, (MySqlTransaction?)(Connection.Transaction ?? ourTrans)))
maxPacket = Convert.ToInt32(packetQ.ExecuteScalar());
using var cmd = new MySqlCommand("", (MySqlConnection) Connection.Connection,
using var cmd = new MySqlCommand("", (MySqlConnection)Connection.Connection,
(MySqlTransaction?)(Connection.Transaction ?? ourTrans));
if (BulkInsertBatchTimeoutInSeconds != 0)
cmd.CommandTimeout = BulkInsertBatchTimeoutInSeconds;
Expand All @@ -37,10 +37,10 @@ public override int UploadImpl(DataTable dt)
$"INSERT INTO {TargetTable.GetFullyQualifiedName()}({string.Join(",", matchedColumns.Values.Select(static c =>
$"`{c.GetRuntimeName()}`"))}) VALUES ";

var sb = new StringBuilder(commandPrefix,1<<22);
var sb = new StringBuilder(commandPrefix, 1 << 22);

var matches = matchedColumns.Keys.Select(column => (matchedColumns[column].DataType.SQLType, column.Ordinal)).ToArray();
foreach(DataRow dr in dt.Rows)
foreach (DataRow dr in dt.Rows)
{
sb.Append('(');

Expand All @@ -51,7 +51,7 @@ public override int UploadImpl(DataTable dt)
sb.AppendLine("),");

//don't let command get too long
if (sb.Length*2<maxPacket) continue;
if (sb.Length * 2 < maxPacket) continue;

cmd.CommandText = sb.ToString().TrimEnd(',', '\r', '\n');
affected += cmd.ExecuteNonQuery();
Expand All @@ -60,7 +60,7 @@ public override int UploadImpl(DataTable dt)
}

//send final batch
if(sb.Length > commandPrefix.Length)
if (sb.Length > commandPrefix.Length)
{
cmd.CommandText = sb.ToString().TrimEnd(',', '\r', '\n');
affected += cmd.ExecuteNonQuery();
Expand All @@ -76,7 +76,7 @@ private string ConstructIndividualValue(string dataType, object value)
dataType = dataType.ToUpper();
dataType = BracketsRe().Replace(dataType, "").Trim();

if(value is DateTime valueDateTime)
if (value is DateTime valueDateTime)
switch (dataType)
{
case "DATE":
Expand All @@ -87,7 +87,7 @@ private string ConstructIndividualValue(string dataType, object value)
return $"'{valueDateTime:HH:mm:ss}'";
}

if(value == null || value == DBNull.Value)
if (value == null || value == DBNull.Value)
return "NULL";

return ConstructIndividualValue(dataType, value.ToString());
Expand Down
6 changes: 3 additions & 3 deletions SharedAssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

[assembly: AssemblyVersion("3.2.1")]
[assembly: AssemblyFileVersion("3.2.1")]
[assembly: AssemblyInformationalVersion("3.2.1")]
[assembly: AssemblyVersion("3.2.2")]
[assembly: AssemblyFileVersion("3.2.2")]
[assembly: AssemblyInformationalVersion("3.2.2")]

0 comments on commit c3e6a8c

Please sign in to comment.