diff --git a/Foundation.Data.Doublets.Cli/AdvancedMixedQueryProcessor.cs b/Foundation.Data.Doublets.Cli/AdvancedMixedQueryProcessor.cs index a51417b..ad46fe4 100644 --- a/Foundation.Data.Doublets.Cli/AdvancedMixedQueryProcessor.cs +++ b/Foundation.Data.Doublets.Cli/AdvancedMixedQueryProcessor.cs @@ -623,7 +623,7 @@ private static bool CheckIdMatch( } uint parsed = links.Constants.Any; - if (TryParseLinkId(patternId, links.Constants, ref parsed)) + if (TryParseLinkId(patternId, links, ref parsed)) { if (parsed == links.Constants.Any) return true; return parsed == candidateId; @@ -659,16 +659,10 @@ private static uint ResolveId( { return anyConstant; } - if (TryParseLinkId(identifier, links.Constants, ref anyConstant)) + if (TryParseLinkId(identifier, links, ref anyConstant)) { return anyConstant; } - // Add name resolution for deletion patterns - var namedId = links.GetByName(identifier); - if (namedId != links.Constants.Null) - { - return namedId; - } return anyConstant; } @@ -882,13 +876,13 @@ private static DoubletLink ConvertToDoubletLink(NamedLinksDecorator links, uint index = defaultValue; uint source = defaultValue; uint target = defaultValue; - TryParseLinkId(linoLink.Id, links.Constants, ref index); + TryParseLinkId(linoLink.Id, links, ref index); if (linoLink.Values?.Count == 2) { var sourceLink = linoLink.Values[0]; - TryParseLinkId(sourceLink.Id, links.Constants, ref source); + TryParseLinkId(sourceLink.Id, links, ref source); var targetLink = linoLink.Values[1]; - TryParseLinkId(targetLink.Id, links.Constants, ref target); + TryParseLinkId(targetLink.Id, links, ref target); } return new DoubletLink(index, source, target); } @@ -918,6 +912,48 @@ private static bool TryParseLinkId(string? id, LinksConstants constants, r return false; } + private static bool TryParseLinkId(string? id, NamedLinksDecorator links, ref uint parsedValue) + { + if (string.IsNullOrEmpty(id)) return false; + if (id == "*") + { + parsedValue = links.Constants.Any; + return true; + } + else if (id.EndsWith(":")) + { + var trimmed = id.TrimEnd(':'); + if (uint.TryParse(trimmed, out uint linkId)) + { + parsedValue = linkId; + return true; + } + // Try to resolve as string alias + var aliasId = links.GetByName(trimmed); + if (aliasId != links.Constants.Null) + { + parsedValue = aliasId; + return true; + } + } + else if (uint.TryParse(id, out uint linkVal)) + { + parsedValue = linkVal; + return true; + } + else + { + // Try to resolve as string alias + var aliasId = links.GetByName(id); + if (aliasId != links.Constants.Null) + { + parsedValue = aliasId; + return true; + } + } + return false; + } + public class Pattern { public string Index;