Skip to content

Commit 7b468fc

Browse files
authored
Merge pull request #1306 from mikependon/vertica-support
More additional fixes to many failed Integration Tests. Ref: #1246
2 parents 966f6dd + 5166bc8 commit 7b468fc

12 files changed

Lines changed: 545 additions & 254 deletions

File tree

RepoDb.Extensions/RepoDb.Vertica.BulkOperations/RepoDb.Vertica.BulkOperations.IntegrationTests/Setup/Database.cs

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public static class Database
3434
public static void Initialize()
3535
{
3636
ConnectionString = Environment.GetEnvironmentVariable("REPODB_VERTICA_CONSTR") ??
37-
@"DataSource=127.0.0.1;Port=3050;Database=/vertica/data/repodb.fdb;User=SYSDBA;Password=RepoDB2026;Charset=UTF8;Pooling=false;";
37+
@"Host=127.0.0.1;Port=5433;Database=RepoDb;User=dbadmin;Password=RepoDB2026;Pooling=false;";
3838

3939
GlobalConfiguration
4040
.Setup()
@@ -67,49 +67,51 @@ public static void CreateTables()
6767
}
6868

6969
/// <summary>
70-
///
70+
///
7171
/// </summary>
7272
public static void CreateBulkOperationIdentityTable()
7373
{
74-
var commandText = @"
75-
RECREATE TABLE ""BulkOperationIdentityTable""
74+
using var connection = new VerticaConnection(ConnectionString);
75+
76+
connection.ExecuteNonQuery(@"DROP TABLE IF EXISTS ""BulkOperationIdentityTable"" CASCADE;");
77+
78+
connection.ExecuteNonQuery(@"CREATE TABLE ""BulkOperationIdentityTable""
7679
(
77-
""Id"" BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL,
78-
""RowGuid"" CHAR(16) CHARACTER SET OCTETS NOT NULL,
80+
""Id"" IDENTITY(1, 1),
81+
""RowGuid"" UUID NOT NULL,
7982
""ColumnBit"" BOOLEAN,
8083
""ColumnDateTime"" TIMESTAMP,
8184
""ColumnDateTime2"" TIMESTAMP,
8285
""ColumnDecimal"" DECIMAL(18,2),
8386
""ColumnFloat"" DOUBLE PRECISION,
8487
""ColumnInt"" INTEGER,
8588
""ColumnNVarChar"" VARCHAR(2000),
86-
CONSTRAINT ""BulkOperationIdentityTable_pk"" PRIMARY KEY (""Id"")
87-
)";
88-
using var connection = new VerticaConnection(ConnectionString);
89-
connection.ExecuteNonQuery(commandText);
89+
PRIMARY KEY (""Id"")
90+
);");
9091
}
9192

9293
/// <summary>
93-
///
94+
///
9495
/// </summary>
9596
public static void CreateBulkOperationNonIdentityTable()
9697
{
97-
var commandText = @"
98-
RECREATE TABLE ""BulkOperationNonIdentityTable""
98+
using var connection = new VerticaConnection(ConnectionString);
99+
100+
connection.ExecuteNonQuery(@"DROP TABLE IF EXISTS ""BulkOperationNonIdentityTable"" CASCADE;");
101+
102+
connection.ExecuteNonQuery(@"CREATE TABLE ""BulkOperationNonIdentityTable""
99103
(
100104
""Id"" BIGINT NOT NULL,
101-
""RowGuid"" CHAR(16) CHARACTER SET OCTETS NOT NULL,
105+
""RowGuid"" UUID NOT NULL,
102106
""ColumnBit"" BOOLEAN,
103107
""ColumnDateTime"" TIMESTAMP,
104108
""ColumnDateTime2"" TIMESTAMP,
105109
""ColumnDecimal"" DECIMAL(18,2),
106110
""ColumnFloat"" DOUBLE PRECISION,
107111
""ColumnInt"" INTEGER,
108112
""ColumnNVarChar"" VARCHAR(2000),
109-
CONSTRAINT ""BulkOperationNonIdentityTable_pk"" PRIMARY KEY (""Id"")
110-
)";
111-
using var connection = new VerticaConnection(ConnectionString);
112-
connection.ExecuteNonQuery(commandText);
113+
PRIMARY KEY (""Id"")
114+
);");
113115
}
114116

115117
#endregion

RepoDb.Extensions/RepoDb.Vertica.BulkOperations/RepoDb.Vertica.BulkOperations/Base/BulkDelete.cs

Lines changed: 91 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@ public static partial class VerticaConnectionExtension
2727

2828
#region BulkDeleteBase<TEntity>
2929

30+
/// <summary>
31+
///
32+
/// </summary>
33+
/// <typeparam name="TEntity"></typeparam>
34+
/// <param name="connection"></param>
35+
/// <param name="tableName"></param>
36+
/// <param name="entities"></param>
37+
/// <param name="qualifiers"></param>
38+
/// <param name="bulkCopyTimeout"></param>
39+
/// <param name="batchSize"></param>
40+
/// <param name="pseudoTableType"></param>
41+
/// <param name="trace"></param>
42+
/// <param name="traceKey"></param>
43+
/// <param name="transaction"></param>
44+
/// <returns></returns>
3045
private static int BulkDeleteBase<TEntity>(this VerticaConnection connection,
3146
string tableName,
3247
IEnumerable<TEntity> entities,
@@ -52,7 +67,6 @@ private static int BulkDeleteBase<TEntity>(this VerticaConnection connection,
5267
try
5368
{
5469
VerticaExecution.CreatePseudoTable(connection, pseudoTableName, qualifierFields, dbFields, pseudoTableType, trace, traceKey, transaction);
55-
VerticaExecution.CreatePseudoTableIndex(connection, pseudoTableName, qualifierFields, trace, traceKey, transaction);
5670

5771
using var entityTable = BuildEntityDataTable(entityList, qualifierFields);
5872
WriteToServerInternal(connection, pseudoTableName, entityTable, bulkCopyTimeout: bulkCopyTimeout, batchSize: batchSize, transaction: transaction);
@@ -72,6 +86,21 @@ private static int BulkDeleteBase<TEntity>(this VerticaConnection connection,
7286

7387
#region BulkDeleteBase<DataTable>
7488

89+
/// <summary>
90+
///
91+
/// </summary>
92+
/// <param name="connection"></param>
93+
/// <param name="tableName"></param>
94+
/// <param name="table"></param>
95+
/// <param name="qualifiers"></param>
96+
/// <param name="rowState"></param>
97+
/// <param name="bulkCopyTimeout"></param>
98+
/// <param name="batchSize"></param>
99+
/// <param name="pseudoTableType"></param>
100+
/// <param name="trace"></param>
101+
/// <param name="traceKey"></param>
102+
/// <param name="transaction"></param>
103+
/// <returns></returns>
75104
private static int BulkDeleteBase(this VerticaConnection connection,
76105
string tableName,
77106
DataTable table,
@@ -96,7 +125,6 @@ private static int BulkDeleteBase(this VerticaConnection connection,
96125
try
97126
{
98127
VerticaExecution.CreatePseudoTable(connection, pseudoTableName, qualifierFields, dbFields, pseudoTableType, trace, traceKey, transaction);
99-
VerticaExecution.CreatePseudoTableIndex(connection, pseudoTableName, qualifierFields, trace, traceKey, transaction);
100128

101129
var mappings = qualifierFields.Select(f => new VerticaBulkInsertMapItem(f.Name, f.Name)).AsList();
102130
WriteToServerInternal(connection, pseudoTableName, table, rowState, mappings, bulkCopyTimeout, batchSize, transaction);
@@ -116,6 +144,20 @@ private static int BulkDeleteBase(this VerticaConnection connection,
116144

117145
#region BulkDeleteBase<DbDataReader>
118146

147+
/// <summary>
148+
///
149+
/// </summary>
150+
/// <param name="connection"></param>
151+
/// <param name="tableName"></param>
152+
/// <param name="reader"></param>
153+
/// <param name="qualifiers"></param>
154+
/// <param name="bulkCopyTimeout"></param>
155+
/// <param name="batchSize"></param>
156+
/// <param name="pseudoTableType"></param>
157+
/// <param name="trace"></param>
158+
/// <param name="traceKey"></param>
159+
/// <param name="transaction"></param>
160+
/// <returns></returns>
119161
private static int BulkDeleteBase(this VerticaConnection connection,
120162
string tableName,
121163
IDataReader reader,
@@ -139,7 +181,6 @@ private static int BulkDeleteBase(this VerticaConnection connection,
139181
try
140182
{
141183
VerticaExecution.CreatePseudoTable(connection, pseudoTableName, qualifierFields, dbFields, pseudoTableType, trace, traceKey, transaction);
142-
VerticaExecution.CreatePseudoTableIndex(connection, pseudoTableName, qualifierFields, trace, traceKey, transaction);
143184

144185
var mappings = qualifierFields.Select(f => new VerticaBulkInsertMapItem(f.Name, f.Name)).AsList();
145186
WriteToServerInternal(connection, pseudoTableName, reader, mappings, bulkCopyTimeout, batchSize, transaction);
@@ -163,6 +204,22 @@ private static int BulkDeleteBase(this VerticaConnection connection,
163204

164205
#region BulkDeleteBaseAsync<TEntity>
165206

207+
/// <summary>
208+
///
209+
/// </summary>
210+
/// <typeparam name="TEntity"></typeparam>
211+
/// <param name="connection"></param>
212+
/// <param name="tableName"></param>
213+
/// <param name="entities"></param>
214+
/// <param name="qualifiers"></param>
215+
/// <param name="bulkCopyTimeout"></param>
216+
/// <param name="batchSize"></param>
217+
/// <param name="pseudoTableType"></param>
218+
/// <param name="trace"></param>
219+
/// <param name="traceKey"></param>
220+
/// <param name="transaction"></param>
221+
/// <param name="cancellationToken"></param>
222+
/// <returns></returns>
166223
private static async Task<int> BulkDeleteBaseAsync<TEntity>(this VerticaConnection connection,
167224
string tableName,
168225
IEnumerable<TEntity> entities,
@@ -189,7 +246,6 @@ private static async Task<int> BulkDeleteBaseAsync<TEntity>(this VerticaConnecti
189246
try
190247
{
191248
await VerticaExecution.CreatePseudoTableAsync(connection, pseudoTableName, qualifierFields, dbFields, pseudoTableType, trace, traceKey, transaction, cancellationToken);
192-
await VerticaExecution.CreatePseudoTableIndexAsync(connection, pseudoTableName, qualifierFields, trace, traceKey, transaction, cancellationToken);
193249

194250
using var entityTable = BuildEntityDataTable(entityList, qualifierFields);
195251
await WriteToServerAsyncInternal(connection, pseudoTableName, entityTable, bulkCopyTimeout: bulkCopyTimeout, batchSize: batchSize, transaction: transaction, cancellationToken: cancellationToken);
@@ -209,6 +265,22 @@ private static async Task<int> BulkDeleteBaseAsync<TEntity>(this VerticaConnecti
209265

210266
#region BulkDeleteBaseAsync<DataTable>
211267

268+
/// <summary>
269+
///
270+
/// </summary>
271+
/// <param name="connection"></param>
272+
/// <param name="tableName"></param>
273+
/// <param name="table"></param>
274+
/// <param name="qualifiers"></param>
275+
/// <param name="rowState"></param>
276+
/// <param name="bulkCopyTimeout"></param>
277+
/// <param name="batchSize"></param>
278+
/// <param name="pseudoTableType"></param>
279+
/// <param name="trace"></param>
280+
/// <param name="traceKey"></param>
281+
/// <param name="transaction"></param>
282+
/// <param name="cancellationToken"></param>
283+
/// <returns></returns>
212284
private static async Task<int> BulkDeleteBaseAsync(this VerticaConnection connection,
213285
string tableName,
214286
DataTable table,
@@ -234,7 +306,6 @@ private static async Task<int> BulkDeleteBaseAsync(this VerticaConnection connec
234306
try
235307
{
236308
await VerticaExecution.CreatePseudoTableAsync(connection, pseudoTableName, qualifierFields, dbFields, pseudoTableType, trace, traceKey, transaction, cancellationToken);
237-
await VerticaExecution.CreatePseudoTableIndexAsync(connection, pseudoTableName, qualifierFields, trace, traceKey, transaction, cancellationToken);
238309

239310
var mappings = qualifierFields.Select(f => new VerticaBulkInsertMapItem(f.Name, f.Name)).AsList();
240311
await WriteToServerAsyncInternal(connection, pseudoTableName, table, rowState, mappings, bulkCopyTimeout, batchSize, transaction, cancellationToken);
@@ -254,6 +325,21 @@ private static async Task<int> BulkDeleteBaseAsync(this VerticaConnection connec
254325

255326
#region BulkDeleteBaseAsync<DbDataReader>
256327

328+
/// <summary>
329+
///
330+
/// </summary>
331+
/// <param name="connection"></param>
332+
/// <param name="tableName"></param>
333+
/// <param name="reader"></param>
334+
/// <param name="qualifiers"></param>
335+
/// <param name="bulkCopyTimeout"></param>
336+
/// <param name="batchSize"></param>
337+
/// <param name="pseudoTableType"></param>
338+
/// <param name="trace"></param>
339+
/// <param name="traceKey"></param>
340+
/// <param name="transaction"></param>
341+
/// <param name="cancellationToken"></param>
342+
/// <returns></returns>
257343
private static async Task<int> BulkDeleteBaseAsync(this VerticaConnection connection,
258344
string tableName,
259345
IDataReader reader,
@@ -278,7 +364,6 @@ private static async Task<int> BulkDeleteBaseAsync(this VerticaConnection connec
278364
try
279365
{
280366
await VerticaExecution.CreatePseudoTableAsync(connection, pseudoTableName, qualifierFields, dbFields, pseudoTableType, trace, traceKey, transaction, cancellationToken);
281-
await VerticaExecution.CreatePseudoTableIndexAsync(connection, pseudoTableName, qualifierFields, trace, traceKey, transaction, cancellationToken);
282367

283368
var mappings = qualifierFields.Select(f => new VerticaBulkInsertMapItem(f.Name, f.Name)).AsList();
284369
await WriteToServerAsyncInternal(connection, pseudoTableName, reader, mappings, bulkCopyTimeout, batchSize, transaction, cancellationToken);

RepoDb.Extensions/RepoDb.Vertica.BulkOperations/RepoDb.Vertica.BulkOperations/Base/BulkDeleteByKey.cs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,20 @@ public static partial class VerticaConnectionExtension
2323
{
2424
#region Sync
2525

26+
/// <summary>
27+
///
28+
/// </summary>
29+
/// <typeparam name="TPrimaryKey"></typeparam>
30+
/// <param name="connection"></param>
31+
/// <param name="tableName"></param>
32+
/// <param name="primaryKeys"></param>
33+
/// <param name="bulkCopyTimeout"></param>
34+
/// <param name="batchSize"></param>
35+
/// <param name="pseudoTableType"></param>
36+
/// <param name="trace"></param>
37+
/// <param name="traceKey"></param>
38+
/// <param name="transaction"></param>
39+
/// <returns></returns>
2640
private static int BulkDeleteByKeyBase<TPrimaryKey>(this VerticaConnection connection,
2741
string tableName,
2842
IEnumerable<TPrimaryKey> primaryKeys,
@@ -46,7 +60,6 @@ private static int BulkDeleteByKeyBase<TPrimaryKey>(this VerticaConnection conne
4660
try
4761
{
4862
VerticaExecution.CreatePseudoTable(connection, pseudoTableName, new[] { qualifierField }, dbFields, pseudoTableType, trace, traceKey, transaction);
49-
VerticaExecution.CreatePseudoTableIndex(connection, pseudoTableName, new[] { qualifierField }, trace, traceKey, transaction);
5063

5164
using var dataTable = CreateKeyValuesDataTable(qualifierField, keyValueList);
5265
var mappings = new[] { new VerticaBulkInsertMapItem(qualifierField.Name, qualifierField.Name) };
@@ -67,6 +80,21 @@ private static int BulkDeleteByKeyBase<TPrimaryKey>(this VerticaConnection conne
6780

6881
#region Async
6982

83+
/// <summary>
84+
///
85+
/// </summary>
86+
/// <typeparam name="TPrimaryKey"></typeparam>
87+
/// <param name="connection"></param>
88+
/// <param name="tableName"></param>
89+
/// <param name="primaryKeys"></param>
90+
/// <param name="bulkCopyTimeout"></param>
91+
/// <param name="batchSize"></param>
92+
/// <param name="pseudoTableType"></param>
93+
/// <param name="trace"></param>
94+
/// <param name="traceKey"></param>
95+
/// <param name="transaction"></param>
96+
/// <param name="cancellationToken"></param>
97+
/// <returns></returns>
7098
private static async Task<int> BulkDeleteByKeyBaseAsync<TPrimaryKey>(this VerticaConnection connection,
7199
string tableName,
72100
IEnumerable<TPrimaryKey> primaryKeys,
@@ -91,7 +119,6 @@ private static async Task<int> BulkDeleteByKeyBaseAsync<TPrimaryKey>(this Vertic
91119
try
92120
{
93121
await VerticaExecution.CreatePseudoTableAsync(connection, pseudoTableName, new[] { qualifierField }, dbFields, pseudoTableType, trace, traceKey, transaction, cancellationToken);
94-
await VerticaExecution.CreatePseudoTableIndexAsync(connection, pseudoTableName, new[] { qualifierField }, trace, traceKey, transaction, cancellationToken);
95122

96123
using var dataTable = CreateKeyValuesDataTable(qualifierField, keyValueList);
97124
var mappings = new[] { new VerticaBulkInsertMapItem(qualifierField.Name, qualifierField.Name) };

0 commit comments

Comments
 (0)