From 1af75483ac61968a3644450cb0440c955d0b7ee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Pucha=C5=82a?= Date: Sat, 8 Jun 2024 22:08:40 +0200 Subject: [PATCH] fixed order by wrong Id and ToString overloads (#52) --- Musoq.Parser.Tests/NodesTests.cs | 50 ++++++++++++++++++++++++++ Musoq.Parser/Musoq.Parser.csproj | 2 +- Musoq.Parser/Nodes/FieldNode.cs | 2 +- Musoq.Parser/Nodes/FieldOrderedNode.cs | 13 +++++-- Musoq.Parser/Nodes/OrderByNode.cs | 6 ++-- 5 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 Musoq.Parser.Tests/NodesTests.cs diff --git a/Musoq.Parser.Tests/NodesTests.cs b/Musoq.Parser.Tests/NodesTests.cs new file mode 100644 index 00000000..6e85ccdf --- /dev/null +++ b/Musoq.Parser.Tests/NodesTests.cs @@ -0,0 +1,50 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Musoq.Parser.Nodes; + +namespace Musoq.Parser.Tests; + +[TestClass] +public class NodesTests +{ + [TestMethod] + public void WhenOrderByNode_ShouldReturnString() + { + var node = new OrderByNode(new []{ + new FieldOrderedNode(new AccessColumnNode("col1", string.Empty, TextSpan.Empty), 0, null, Order.Ascending) + }); + + Assert.AreEqual("order by col1 ascending", node.ToString()); + } + + [TestMethod] + public void WhenOrderByDescendingNode_ShouldReturnString() + { + var node = new OrderByNode(new []{ + new FieldOrderedNode(new AccessColumnNode("col1", string.Empty, TextSpan.Empty), 0, null, Order.Descending) + }); + + Assert.AreEqual("order by col1 descending", node.ToString()); + } + + [TestMethod] + public void WhenOrderByMultipleNodes_ShouldReturnString() + { + var node = new OrderByNode(new[]{ + new FieldOrderedNode(new AccessColumnNode("col1", string.Empty, TextSpan.Empty), 0, null, Order.Ascending), + new FieldOrderedNode(new AccessColumnNode("col2", string.Empty, TextSpan.Empty), 1, null, Order.Ascending) + }); + + Assert.AreEqual("order by col1 ascending, col2 ascending", node.ToString()); + } + + [TestMethod] + public void WhenOrderByMultipleNodesWithDifferentOrder_ShouldReturnString() + { + var node = new OrderByNode(new []{ + new FieldOrderedNode(new AccessColumnNode("col1", string.Empty, TextSpan.Empty), 0, null, Order.Ascending), + new FieldOrderedNode(new AccessColumnNode("col2", string.Empty, TextSpan.Empty), 1, null, Order.Descending) + }); + + Assert.AreEqual("order by col1 ascending, col2 descending", node.ToString()); + } +} \ No newline at end of file diff --git a/Musoq.Parser/Musoq.Parser.csproj b/Musoq.Parser/Musoq.Parser.csproj index 84705397..7a316701 100644 --- a/Musoq.Parser/Musoq.Parser.csproj +++ b/Musoq.Parser/Musoq.Parser.csproj @@ -4,7 +4,7 @@ net6.0 AnyCPU;x64 true - 2.5.3 + 2.5.4 Jakub Puchała Musoq https://github.com/Puchaczov/Musoq diff --git a/Musoq.Parser/Nodes/FieldNode.cs b/Musoq.Parser/Nodes/FieldNode.cs index cb43982a..bc92723b 100644 --- a/Musoq.Parser/Nodes/FieldNode.cs +++ b/Musoq.Parser/Nodes/FieldNode.cs @@ -8,9 +8,9 @@ public class FieldNode : Node public FieldNode(Node expression, int fieldOrder, string fieldName) { + _fieldName = fieldName; Expression = expression; FieldOrder = fieldOrder; - _fieldName = fieldName; Id = $"{nameof(FieldNode)}{expression.Id}"; } diff --git a/Musoq.Parser/Nodes/FieldOrderedNode.cs b/Musoq.Parser/Nodes/FieldOrderedNode.cs index 46181397..bd52f57c 100644 --- a/Musoq.Parser/Nodes/FieldOrderedNode.cs +++ b/Musoq.Parser/Nodes/FieldOrderedNode.cs @@ -2,8 +2,10 @@ { public class FieldOrderedNode : FieldNode { - public FieldOrderedNode(Node expression, int fieldOrder, string fieldName, Order order) - : base(expression, fieldOrder, fieldName) => Order = order; + public FieldOrderedNode(Node expression, int fieldOrder, string fieldName, Order order) : base(expression, fieldOrder, fieldName) + { + Order = order; + } public Order Order { get; } @@ -11,5 +13,12 @@ public override void Accept(IExpressionVisitor visitor) { visitor.Visit(this); } + + public override string Id => $"{nameof(FieldOrderedNode)}{Expression.Id}{Order}"; + + public override string ToString() + { + return $"{Expression.ToString()} {Order.ToString().ToLowerInvariant()}"; + } } } diff --git a/Musoq.Parser/Nodes/OrderByNode.cs b/Musoq.Parser/Nodes/OrderByNode.cs index bd2162c0..c368a7c7 100644 --- a/Musoq.Parser/Nodes/OrderByNode.cs +++ b/Musoq.Parser/Nodes/OrderByNode.cs @@ -14,7 +14,7 @@ public OrderByNode(FieldOrderedNode[] fields) public FieldOrderedNode[] Fields { get; } - public override Type ReturnType { get; } + public override Type ReturnType { get; } = typeof(void); public override string Id { get; } @@ -31,9 +31,9 @@ public override string ToString() return $"order by {fieldsTxt}"; } - private string FieldToString(FieldNode node) + private static string FieldToString(FieldOrderedNode node) { - return string.IsNullOrEmpty(node.FieldName) ? node.Expression.ToString() : node.FieldName; + return node.ToString(); } } } \ No newline at end of file