From bcc8c25e78c29e413c9b1118a2efef7be9d21903 Mon Sep 17 00:00:00 2001 From: mysticmind Date: Mon, 13 Jan 2025 22:07:56 +0530 Subject: [PATCH] Bug fix to handle index name containing upper case chars --- .../Tables/detecting_table_deltas.cs | 14 ++++++++++++++ src/Weasel.Postgresql/Tables/IndexDefinition.cs | 5 +++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Weasel.Postgresql.Tests/Tables/detecting_table_deltas.cs b/src/Weasel.Postgresql.Tests/Tables/detecting_table_deltas.cs index b6fcfb31..28519386 100644 --- a/src/Weasel.Postgresql.Tests/Tables/detecting_table_deltas.cs +++ b/src/Weasel.Postgresql.Tests/Tables/detecting_table_deltas.cs @@ -741,4 +741,18 @@ public async Task patching_and_detecting_deltas_with_computed_indexes() await AssertNoDeltasAfterPatching(table); } + + [Fact] + public async Task patching_and_detecting_deltas_with_upper_case_chars_in_index_name() + { + var table = new Table("deltas.blobs"); + table.AddColumn("key").AsPrimaryKey(); + table.AddColumn("data", "jsonb"); + + await CreateSchemaObjectInDatabase(table); + + table.Indexes.Add(new IndexDefinition("IdxBlobsDataName") { Columns = new[] { "(data ->> 'Name')" } }); + + await AssertNoDeltasAfterPatching(table); + } } diff --git a/src/Weasel.Postgresql/Tables/IndexDefinition.cs b/src/Weasel.Postgresql/Tables/IndexDefinition.cs index d5ed03c9..817041ba 100644 --- a/src/Weasel.Postgresql/Tables/IndexDefinition.cs +++ b/src/Weasel.Postgresql/Tables/IndexDefinition.cs @@ -205,7 +205,8 @@ public string ToDDL(Table parent) builder.Append("CONCURRENTLY "); } - builder.Append(Name); + // Add double quotes if the index name contains upper case characters + builder.Append(Name.Any(char.IsUpper) ? $"\"{Name}\"" : Name); builder.Append(" ON "); builder.Append(parent.Identifier); @@ -370,7 +371,7 @@ public static IndexDefinition Parse(string definition) continue; case "INDEX": - var name = tokens.Dequeue(); + var name = tokens.Dequeue().Trim('"'); index = new IndexDefinition(name) { Mask = string.Empty, IsUnique = isUnique }; break;