Skip to content

Improve MySqlBulkCopy API #1012

Open
Open
@bgrainger

Description

@bgrainger

The API for MySqlBulkCopy was patterned on SqlBulkCopy, which has no return value from its WriteToServer method.

#1005 points out that warnings are not surfaced to the user. MySqlBulkCopy.WriteToServer will throw if any rows fail to be inserted, but the warnings could be indications of significant data loss. You can attach an InfoMessage handler, or manually execute SHOW WARNINGS after, but it's not obvious that you should do either of those things.

The MySqlBulkCopy API should be improved to help clients use it without data loss.

One possibility would be returning a Results type, that has WarningCount, RowsCopiedCount and RowsInsertedCount. Clients could be told to check that RowsCopiedCount == RowsInsertedCount && WarningCount ==0. Getting the actual warnings would still take additional work. (Add a helper method that invokes SHOW WARNINGS; and returns an IReadOnlyList<MySqlError>?)

Or the API could return IReadOnlyList<MySqlError> and automatically call SHOW WARNINGS behind the scenes if the warning count from the operation was non-zero. However, because these aren't easily parseable (e.g., to identify the rows/cells that were wrong), it's not clear what should be done with them (display them directly to the end user?) beyond just checking if the collection is non-empty, which can be accomplished simply by checking a warning count.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions