mirror of
https://github.com/bitwarden/server.git
synced 2025-05-29 15:24:51 -05:00
add column mapping to sql bulk copies
This commit is contained in:
parent
f54ebfdc75
commit
0b9125be9c
@ -314,7 +314,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
||||||
{
|
{
|
||||||
bulkCopy.DestinationTableName = "#TempCipher";
|
bulkCopy.DestinationTableName = "#TempCipher";
|
||||||
var dataTable = BuildCiphersTable(ciphers);
|
var dataTable = BuildCiphersTable(bulkCopy, ciphers);
|
||||||
bulkCopy.WriteToServer(dataTable);
|
bulkCopy.WriteToServer(dataTable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -324,7 +324,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
||||||
{
|
{
|
||||||
bulkCopy.DestinationTableName = "#TempFolder";
|
bulkCopy.DestinationTableName = "#TempFolder";
|
||||||
var dataTable = BuildFoldersTable(folders);
|
var dataTable = BuildFoldersTable(bulkCopy, folders);
|
||||||
bulkCopy.WriteToServer(dataTable);
|
bulkCopy.WriteToServer(dataTable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -420,7 +420,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
||||||
{
|
{
|
||||||
bulkCopy.DestinationTableName = "#TempCipher";
|
bulkCopy.DestinationTableName = "#TempCipher";
|
||||||
var dataTable = BuildCiphersTable(ciphers);
|
var dataTable = BuildCiphersTable(bulkCopy, ciphers);
|
||||||
bulkCopy.WriteToServer(dataTable);
|
bulkCopy.WriteToServer(dataTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,7 +489,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
||||||
{
|
{
|
||||||
bulkCopy.DestinationTableName = "[dbo].[Folder]";
|
bulkCopy.DestinationTableName = "[dbo].[Folder]";
|
||||||
var dataTable = BuildFoldersTable(folders);
|
var dataTable = BuildFoldersTable(bulkCopy, folders);
|
||||||
bulkCopy.WriteToServer(dataTable);
|
bulkCopy.WriteToServer(dataTable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -497,7 +497,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
||||||
{
|
{
|
||||||
bulkCopy.DestinationTableName = "[dbo].[Cipher]";
|
bulkCopy.DestinationTableName = "[dbo].[Cipher]";
|
||||||
var dataTable = BuildCiphersTable(ciphers);
|
var dataTable = BuildCiphersTable(bulkCopy, ciphers);
|
||||||
bulkCopy.WriteToServer(dataTable);
|
bulkCopy.WriteToServer(dataTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -536,7 +536,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
||||||
{
|
{
|
||||||
bulkCopy.DestinationTableName = "[dbo].[Cipher]";
|
bulkCopy.DestinationTableName = "[dbo].[Cipher]";
|
||||||
var dataTable = BuildCiphersTable(ciphers);
|
var dataTable = BuildCiphersTable(bulkCopy, ciphers);
|
||||||
bulkCopy.WriteToServer(dataTable);
|
bulkCopy.WriteToServer(dataTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -545,7 +545,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
||||||
{
|
{
|
||||||
bulkCopy.DestinationTableName = "[dbo].[Collection]";
|
bulkCopy.DestinationTableName = "[dbo].[Collection]";
|
||||||
var dataTable = BuildCollectionsTable(collections);
|
var dataTable = BuildCollectionsTable(bulkCopy, collections);
|
||||||
bulkCopy.WriteToServer(dataTable);
|
bulkCopy.WriteToServer(dataTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -554,7 +554,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
|
||||||
{
|
{
|
||||||
bulkCopy.DestinationTableName = "[dbo].[CollectionCipher]";
|
bulkCopy.DestinationTableName = "[dbo].[CollectionCipher]";
|
||||||
var dataTable = BuildCollectionCiphersTable(collectionCiphers);
|
var dataTable = BuildCollectionCiphersTable(bulkCopy, collectionCiphers);
|
||||||
bulkCopy.WriteToServer(dataTable);
|
bulkCopy.WriteToServer(dataTable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -576,7 +576,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataTable BuildCiphersTable(IEnumerable<Cipher> ciphers)
|
private DataTable BuildCiphersTable(SqlBulkCopy bulkCopy, IEnumerable<Cipher> ciphers)
|
||||||
{
|
{
|
||||||
var c = ciphers.FirstOrDefault();
|
var c = ciphers.FirstOrDefault();
|
||||||
if(c == null)
|
if(c == null)
|
||||||
@ -607,6 +607,11 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
var revisionDateColumn = new DataColumn(nameof(c.RevisionDate), c.RevisionDate.GetType());
|
var revisionDateColumn = new DataColumn(nameof(c.RevisionDate), c.RevisionDate.GetType());
|
||||||
ciphersTable.Columns.Add(revisionDateColumn);
|
ciphersTable.Columns.Add(revisionDateColumn);
|
||||||
|
|
||||||
|
foreach(DataColumn col in ciphersTable.Columns)
|
||||||
|
{
|
||||||
|
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
|
||||||
|
}
|
||||||
|
|
||||||
var keys = new DataColumn[1];
|
var keys = new DataColumn[1];
|
||||||
keys[0] = idColumn;
|
keys[0] = idColumn;
|
||||||
ciphersTable.PrimaryKey = keys;
|
ciphersTable.PrimaryKey = keys;
|
||||||
@ -632,7 +637,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
return ciphersTable;
|
return ciphersTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataTable BuildFoldersTable(IEnumerable<Folder> folders)
|
private DataTable BuildFoldersTable(SqlBulkCopy bulkCopy, IEnumerable<Folder> folders)
|
||||||
{
|
{
|
||||||
var f = folders.FirstOrDefault();
|
var f = folders.FirstOrDefault();
|
||||||
if(f == null)
|
if(f == null)
|
||||||
@ -653,6 +658,11 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
var revisionDateColumn = new DataColumn(nameof(f.RevisionDate), f.RevisionDate.GetType());
|
var revisionDateColumn = new DataColumn(nameof(f.RevisionDate), f.RevisionDate.GetType());
|
||||||
foldersTable.Columns.Add(revisionDateColumn);
|
foldersTable.Columns.Add(revisionDateColumn);
|
||||||
|
|
||||||
|
foreach(DataColumn col in foldersTable.Columns)
|
||||||
|
{
|
||||||
|
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
|
||||||
|
}
|
||||||
|
|
||||||
var keys = new DataColumn[1];
|
var keys = new DataColumn[1];
|
||||||
keys[0] = idColumn;
|
keys[0] = idColumn;
|
||||||
foldersTable.PrimaryKey = keys;
|
foldersTable.PrimaryKey = keys;
|
||||||
@ -673,7 +683,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
return foldersTable;
|
return foldersTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataTable BuildCollectionsTable(IEnumerable<Collection> collections)
|
private DataTable BuildCollectionsTable(SqlBulkCopy bulkCopy, IEnumerable<Collection> collections)
|
||||||
{
|
{
|
||||||
var c = collections.FirstOrDefault();
|
var c = collections.FirstOrDefault();
|
||||||
if(c == null)
|
if(c == null)
|
||||||
@ -694,6 +704,11 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
var revisionDateColumn = new DataColumn(nameof(c.RevisionDate), c.RevisionDate.GetType());
|
var revisionDateColumn = new DataColumn(nameof(c.RevisionDate), c.RevisionDate.GetType());
|
||||||
collectionsTable.Columns.Add(revisionDateColumn);
|
collectionsTable.Columns.Add(revisionDateColumn);
|
||||||
|
|
||||||
|
foreach(DataColumn col in collectionsTable.Columns)
|
||||||
|
{
|
||||||
|
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
|
||||||
|
}
|
||||||
|
|
||||||
var keys = new DataColumn[1];
|
var keys = new DataColumn[1];
|
||||||
keys[0] = idColumn;
|
keys[0] = idColumn;
|
||||||
collectionsTable.PrimaryKey = keys;
|
collectionsTable.PrimaryKey = keys;
|
||||||
@ -714,7 +729,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
return collectionsTable;
|
return collectionsTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataTable BuildCollectionCiphersTable(IEnumerable<CollectionCipher> collectionCiphers)
|
private DataTable BuildCollectionCiphersTable(SqlBulkCopy bulkCopy, IEnumerable<CollectionCipher> collectionCiphers)
|
||||||
{
|
{
|
||||||
var cc = collectionCiphers.FirstOrDefault();
|
var cc = collectionCiphers.FirstOrDefault();
|
||||||
if(cc == null)
|
if(cc == null)
|
||||||
@ -729,6 +744,11 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
var cipherIdColumn = new DataColumn(nameof(cc.CipherId), cc.CipherId.GetType());
|
var cipherIdColumn = new DataColumn(nameof(cc.CipherId), cc.CipherId.GetType());
|
||||||
collectionCiphersTable.Columns.Add(cipherIdColumn);
|
collectionCiphersTable.Columns.Add(cipherIdColumn);
|
||||||
|
|
||||||
|
foreach(DataColumn col in collectionCiphersTable.Columns)
|
||||||
|
{
|
||||||
|
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
|
||||||
|
}
|
||||||
|
|
||||||
var keys = new DataColumn[2];
|
var keys = new DataColumn[2];
|
||||||
keys[0] = collectionIdColumn;
|
keys[0] = collectionIdColumn;
|
||||||
keys[1] = cipherIdColumn;
|
keys[1] = cipherIdColumn;
|
||||||
|
@ -92,7 +92,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, null))
|
using(var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, null))
|
||||||
{
|
{
|
||||||
bulkCopy.DestinationTableName = "[dbo].[Event]";
|
bulkCopy.DestinationTableName = "[dbo].[Event]";
|
||||||
var dataTable = BuildEventsTable(entities.Select(e => e is Event ? e as Event : new Event(e)));
|
var dataTable = BuildEventsTable(bulkCopy, entities.Select(e => e is Event ? e as Event : new Event(e)));
|
||||||
await bulkCopy.WriteToServerAsync(dataTable);
|
await bulkCopy.WriteToServerAsync(dataTable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -131,7 +131,7 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataTable BuildEventsTable(IEnumerable<Event> events)
|
private DataTable BuildEventsTable(SqlBulkCopy bulkCopy, IEnumerable<Event> events)
|
||||||
{
|
{
|
||||||
var e = events.FirstOrDefault();
|
var e = events.FirstOrDefault();
|
||||||
if(e == null)
|
if(e == null)
|
||||||
@ -168,6 +168,11 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
var dateColumn = new DataColumn(nameof(e.Date), e.Date.GetType());
|
var dateColumn = new DataColumn(nameof(e.Date), e.Date.GetType());
|
||||||
eventsTable.Columns.Add(dateColumn);
|
eventsTable.Columns.Add(dateColumn);
|
||||||
|
|
||||||
|
foreach(DataColumn col in eventsTable.Columns)
|
||||||
|
{
|
||||||
|
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
|
||||||
|
}
|
||||||
|
|
||||||
var keys = new DataColumn[1];
|
var keys = new DataColumn[1];
|
||||||
keys[0] = idColumn;
|
keys[0] = idColumn;
|
||||||
eventsTable.PrimaryKey = keys;
|
eventsTable.PrimaryKey = keys;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user