Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 47 additions & 11 deletions Foundation.Data.Doublets.Cli/AdvancedMixedQueryProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -882,13 +876,13 @@ private static DoubletLink ConvertToDoubletLink(NamedLinksDecorator<uint> 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);
}
Expand Down Expand Up @@ -918,6 +912,48 @@ private static bool TryParseLinkId(string? id, LinksConstants<uint> constants, r
return false;
}

private static bool TryParseLinkId(string? id, NamedLinksDecorator<uint> 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;
Expand Down