Skip to content

Commit d313d97

Browse files
committed
Add concurrent creation
1 parent 8b711e9 commit d313d97

3 files changed

Lines changed: 16 additions & 2 deletions

File tree

src/Extensions/ParadeDbIndexBuilderExtensions.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,13 @@ public Bm25IndexBuilder<TEntity> HasFilter(string? sql)
131131
return this;
132132
}
133133

134+
public Bm25IndexBuilder<TEntity> IsCreatedConcurrently(bool createdConcurrently = true)
135+
{
136+
_indexBuilder.IsCreatedConcurrently(createdConcurrently);
137+
138+
return this;
139+
}
140+
134141
private void AddField(string field, string kind, Tokenizer? tokenizer, string? @alias)
135142
{
136143
var properties = GetAnnotation(ParadeDbAnnotationNames.Bm25FieldProperties);

src/Internal/Migrations/ParadeDbMigrationsSqlGenerator.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.EntityFrameworkCore.Migrations;
33
using Microsoft.EntityFrameworkCore.Migrations.Operations;
44
using Npgsql.EntityFrameworkCore.PostgreSQL.Infrastructure.Internal;
5+
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata.Internal;
56
using Npgsql.EntityFrameworkCore.PostgreSQL.Migrations;
67
using ParadeDB.EntityFrameworkCore.Internal.Metadata;
78

@@ -34,9 +35,12 @@ is not string keyField
3435
}
3536

3637
var helper = Dependencies.SqlGenerationHelper;
38+
var createdConcurrently =
39+
operation.FindAnnotation(NpgsqlAnnotationNames.CreatedConcurrently)?.Value is true;
3740

3841
builder
3942
.Append("CREATE INDEX ")
43+
.Append(createdConcurrently ? "CONCURRENTLY " : "")
4044
.Append(helper.DelimitIdentifier(operation.Name))
4145
.Append(" ON ")
4246
.Append(helper.DelimitIdentifier(operation.Table, operation.Schema))
@@ -57,7 +61,9 @@ is not string keyField
5761

5862
if (terminate)
5963
{
60-
builder.AppendLine(helper.StatementTerminator).EndCommand();
64+
builder
65+
.AppendLine(helper.StatementTerminator)
66+
.EndCommand(suppressTransaction: createdConcurrently);
6167
}
6268
}
6369
}

tests/IndexingTest.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
127127

128128
entity
129129
.HasBm25Index("indexing_items_idx", e => e.Id)
130+
.IsCreatedConcurrently()
130131
.HasField(e => e.Description)
131132
.HasField(e => e.Metadata);
132133
});
@@ -153,7 +154,7 @@ rating int
153154

154155
sql.ShouldBe(
155156
"""
156-
CREATE INDEX indexing_items_idx ON indexing_items USING bm25 (id, description, metadata) WITH (key_field = 'id');
157+
CREATE INDEX CONCURRENTLY indexing_items_idx ON indexing_items USING bm25 (id, description, metadata) WITH (key_field = 'id');
157158
158159
"""
159160
);

0 commit comments

Comments
 (0)