diff --git a/src/DocumentDbTests/Bugs/Bug_3778_schema_name_issue.cs b/src/DocumentDbTests/Bugs/Bug_3778_schema_name_issue.cs new file mode 100644 index 0000000000..7a5f9dcce6 --- /dev/null +++ b/src/DocumentDbTests/Bugs/Bug_3778_schema_name_issue.cs @@ -0,0 +1,30 @@ +using System; +using System.Threading.Tasks; +using JasperFx; +using Marten.Testing; +using Marten.Testing.Harness; +using Xunit; + +namespace DocumentDbTests.Bugs; + +public class Bug_3778_schema_name_issue: OneOffConfigurationsContext +{ + private string Schema = "pprd"; + + [Fact] + public async Task TestSchemaNameEndingWith_d_BeingCutOff_In_Index() + { + StoreOptions(options => + { + options.Connection(ConnectionSource.ConnectionString); + options.AutoCreateSchemaObjects = AutoCreate.All; + options.DatabaseSchemaName = Schema; + options.Schema.For() + .Index(d => d.Created); + }); + + await theStore.EnsureStorageExistsAsync(typeof(User3778)); + } +} + +public record User3778(Guid Id, string Name, DateTimeOffset Created); diff --git a/src/Marten/Linq/Members/DateTimeMember.cs b/src/Marten/Linq/Members/DateTimeMember.cs index a5a72520d0..64fc352d09 100644 --- a/src/Marten/Linq/Members/DateTimeMember.cs +++ b/src/Marten/Linq/Members/DateTimeMember.cs @@ -14,7 +14,7 @@ public DateTimeMember(StoreOptions options, IQueryableMember parent, Casing casi public override string SelectorForDuplication(string pgType) { - return TypedLocator.Replace("d.", ""); + return TypedLocator.Replace("d.data ->", "data ->"); } } @@ -27,7 +27,7 @@ public DateOnlyMember(StoreOptions options, IQueryableMember parent, Casing casi public override string SelectorForDuplication(string pgType) { - return TypedLocator.Replace("d.", ""); + return TypedLocator.Replace("d.data ->", "data ->"); } } @@ -41,7 +41,7 @@ public TimeOnlyMember(StoreOptions options, IQueryableMember parent, Casing casi public override string SelectorForDuplication(string pgType) { - return TypedLocator.Replace("d.", ""); + return TypedLocator.Replace("d.data ->", "data ->"); } } diff --git a/src/Marten/Linq/Members/DateTimeOffsetMember.cs b/src/Marten/Linq/Members/DateTimeOffsetMember.cs index 89ff9be617..15b185dc6a 100644 --- a/src/Marten/Linq/Members/DateTimeOffsetMember.cs +++ b/src/Marten/Linq/Members/DateTimeOffsetMember.cs @@ -17,7 +17,7 @@ public DateTimeOffsetMember(StoreOptions options, IQueryableMember parent, Casin public override string SelectorForDuplication(string pgType) { - return TypedLocator.Replace("d.", ""); + return TypedLocator.Replace("d.data ->", "data ->"); } public override ISqlFragment CreateComparison(string op, ConstantExpression constant) diff --git a/src/Marten/Schema/ComputedIndex.cs b/src/Marten/Schema/ComputedIndex.cs index 6f255d6565..389b5d5b20 100644 --- a/src/Marten/Schema/ComputedIndex.cs +++ b/src/Marten/Schema/ComputedIndex.cs @@ -83,11 +83,12 @@ private IEnumerable buildColumns() casing = Casings.Default; } - var sql = member.MemberType.IsEnumerable() - ? member is ChildCollectionMember ? member.TypedLocator : member.RawLocator - : member.TypedLocator; + var rawLocator = member.RawLocator.Replace("d.data ->", "data ->"); + var typedLocator = member.TypedLocator.Replace("d.data ->", "data ->"); - sql = sql.Replace("d.", ""); + var sql = member.MemberType.IsEnumerable() + ? member is ChildCollectionMember ? typedLocator : rawLocator + : typedLocator; switch (casing) { diff --git a/src/Marten/Schema/NgramIndex.cs b/src/Marten/Schema/NgramIndex.cs index e4dd01d355..94657c8126 100644 --- a/src/Marten/Schema/NgramIndex.cs +++ b/src/Marten/Schema/NgramIndex.cs @@ -75,8 +75,7 @@ protected override string deriveIndexName() private static string GetDataConfig(DocumentMapping mapping, MemberInfo[] members) { - var dataConfig = $"{mapping.QueryMembers.MemberFor(members).TypedLocator.Replace("d.", "")}"; - + var dataConfig = $"{mapping.QueryMembers.MemberFor(members).TypedLocator.Replace("d.data ->", "data ->")}"; return $"{dataConfig}"; } }