Skip to content

Commit

Permalink
Merge branch 'master' into dependabot/bundler/docs/rexml-3.2.8
Browse files Browse the repository at this point in the history
  • Loading branch information
Puchaczov authored Jun 8, 2024
2 parents b3eb2df + 1af7548 commit a985776
Show file tree
Hide file tree
Showing 22 changed files with 382 additions and 186 deletions.
25 changes: 3 additions & 22 deletions Musoq.Evaluator.Tests/JoinTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Musoq.Evaluator.Exceptions;
using Musoq.Evaluator.Tests.Schema.Basic;
using Musoq.Evaluator.Tests.Schema.EnvironmentVariable;
using Musoq.Evaluator.Tests.Schema.Multi.First;
using Musoq.Evaluator.Tests.Schema.Multi.Second;

namespace Musoq.Evaluator.Tests
{
Expand Down Expand Up @@ -1442,27 +1445,5 @@ public void WhenSelfJoined_ShouldRetrieveValues()
Assert.AreEqual("Germany", table[1][0]);
Assert.AreEqual("Berlin", table[1][1]);
}

[TestMethod]
public void WhenMissingAlias_ShouldThrow()
{
var query = @"
select
countries.GetCountry(),
cities.GetCity()
from #A.entities() countries
inner join #A.entities() cities on countries.Country = cities.Country
where Country = 'Poland'
";

var sources = new Dictionary<string, IEnumerable<BasicEntity>>
{
{
"#A", Array.Empty<BasicEntity>()
}
};

Assert.ThrowsException<AmbiguousColumnException>(() => CreateAndRunVirtualMachine(query, sources));
}
}
}
73 changes: 42 additions & 31 deletions Musoq.Evaluator.Tests/MultipleSchemasEvaluatorTests.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Musoq.Evaluator.Exceptions;
using Musoq.Evaluator.Tests.Schema.Multi;
using Musoq.Evaluator.Tests.Schema.Multi.First;
using Musoq.Evaluator.Tests.Schema.Multi.Second;
Expand All @@ -14,13 +15,11 @@ public void WhenCompilerMustDecideWhichOneOfTheMethodsUse_ShouldChoseTheFirstOne
{
const string query = "select first.MethodA() from #schema.first() first inner join #schema.second() second on 1 = 1";

var vm = CreateAndRunVirtualMachine(query, new FirstEntity[]
{
var vm = CreateAndRunVirtualMachine(query, [
new()
}, new SecondEntity[]
{
], [
new()
});
]);

var table = vm.Run();

Expand All @@ -34,13 +33,11 @@ public void WhenCompilerMustDecideWhichOneOfTheMethodsUse_ShouldChoseTheSecondOn
{
const string query = "select second.MethodA() from #schema.first() first inner join #schema.second() second on 1 = 1";

var vm = CreateAndRunVirtualMachine(query, new FirstEntity[]
{
var vm = CreateAndRunVirtualMachine(query, [
new()
}, new SecondEntity[]
{
], [
new()
});
]);

var table = vm.Run();

Expand All @@ -54,13 +51,11 @@ public void WhenCompilerMustDecideWhichOneOfTheMethodsUse_ShouldChoseFirstOne()
{
const string query = "select first.MethodA() from #schema.second() second inner join #schema.first() first on 1 = 1";

var vm = CreateAndRunVirtualMachine(query, new FirstEntity[]
{
var vm = CreateAndRunVirtualMachine(query, [
new()
}, new SecondEntity[]
{
], [
new()
});
]);

var table = vm.Run();

Expand All @@ -74,13 +69,11 @@ public void WhenCompilerMustDecideWhichOneOfTheMethodsUse_TheMethodHasAdditional
{
const string query = "select second.MethodB('abc') from #schema.second() second inner join #schema.first() first on 1 = 1";

var vm = CreateAndRunVirtualMachine(query, new FirstEntity[]
{
var vm = CreateAndRunVirtualMachine(query, [
new()
}, new SecondEntity[]
{
], [
new()
});
]);

var table = vm.Run();

Expand All @@ -94,13 +87,11 @@ public void WhenCompilerMustDecideWhichOneOfTheMethodsUse_TheMethodHasAdditional
{
const string query = "select first.MethodB('abc') from #schema.first() first inner join #schema.second() second on 1 = 1";

var vm = CreateAndRunVirtualMachine(query, new FirstEntity[]
{
var vm = CreateAndRunVirtualMachine(query, [
new()
}, new SecondEntity[]
{
], [
new()
});
]);

var table = vm.Run();

Expand All @@ -114,10 +105,9 @@ public void WhenMultipleInjectsWithinMethod_ShouldNotThrow()
{
const string query = "select AggregateMethodA() from #schema.first()";

var vm = CreateAndRunVirtualMachine(query, new FirstEntity[]
{
var vm = CreateAndRunVirtualMachine(query, [
new()
}, Array.Empty<SecondEntity>());
], []);

var table = vm.Run();

Expand All @@ -129,15 +119,36 @@ public void WhenInjectingEntityUsesCommonInterfaceWithMethod_ShouldMatchMethodAn
{
const string query = "select MethodC() from #schema.first()";

var vm = CreateAndRunVirtualMachine(query, new FirstEntity[]
{
var vm = CreateAndRunVirtualMachine(query, [
new()
}, Array.Empty<SecondEntity>());
], []);

var table = vm.Run();

Assert.AreEqual(1, table.Count);

Assert.AreEqual(5, table[0].Values[0]);
}

[TestMethod]
public void WhenMissingAliasButBothObjectsAreTheSame_ShouldNotThrow()
{
var query = @"select FirstItem from #schema.first() first inner join #schema.first() second on 1 = 1";

CreateAndRunVirtualMachine(query, [
new()
], []);
}

[TestMethod]
public void WhenMissingAlias_ShouldThrow()
{
var query = @"select FirstItem from #schema.first() first inner join #schema.second() second on 1 = 1";

Assert.ThrowsException<AmbiguousColumnException>(() => CreateAndRunVirtualMachine(query, [
new()
], [
new()
]));
}
}
116 changes: 116 additions & 0 deletions Musoq.Evaluator.Tests/OrderByTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -673,5 +673,121 @@ public void WhenOrderByMultipleColumnsFirstOneIsCaseWhenDescExpression_ShouldSuc
Assert.AreEqual("cracow", table[3].Values[0]);
Assert.AreEqual("glasgow", table[4].Values[0]);
}

[TestMethod]
public void WhenOrderByWithInnerJoin_ShouldSucceed()
{
var query = @"select City from #A.Entities() a inner join #A.Entities() b on a.City = b.City order by a.Money";

var sources = new Dictionary<string, IEnumerable<BasicEntity>>
{
{
"#A", new[]
{
new BasicEntity("katowice", "jan", Convert.ToDecimal(300)),
new BasicEntity("czestochowa", "jan", Convert.ToDecimal(400)),
new BasicEntity("cracow", "jan", Convert.ToDecimal(10)),
new BasicEntity("glasgow", "feb", Convert.ToDecimal(-10))
}
}
};

var vm = CreateAndRunVirtualMachine(query, sources);

var table = vm.Run();

Assert.AreEqual(4, table.Count);
Assert.AreEqual("glasgow", table[0].Values[0]);
Assert.AreEqual("cracow", table[1].Values[0]);
Assert.AreEqual("katowice", table[2].Values[0]);
Assert.AreEqual("czestochowa", table[3].Values[0]);
}

[TestMethod]
public void WhenOrderByDescendingWithInnerJoin_ShouldSucceed()
{
var query = @"select City from #A.Entities() a inner join #A.Entities() b on a.City = b.City order by a.Money desc";

var sources = new Dictionary<string, IEnumerable<BasicEntity>>
{
{
"#A", new[]
{
new BasicEntity("katowice", "jan", Convert.ToDecimal(300)),
new BasicEntity("czestochowa", "jan", Convert.ToDecimal(400)),
new BasicEntity("cracow", "jan", Convert.ToDecimal(10)),
new BasicEntity("glasgow", "feb", Convert.ToDecimal(-10))
}
}
};

var vm = CreateAndRunVirtualMachine(query, sources);

var table = vm.Run();

Assert.AreEqual(4, table.Count);
Assert.AreEqual("czestochowa", table[0].Values[0]);
Assert.AreEqual("katowice", table[1].Values[0]);
Assert.AreEqual("cracow", table[2].Values[0]);
Assert.AreEqual("glasgow", table[3].Values[0]);
}

[TestMethod]
public void WhenOrderByWithInnerJoinAndGroupBy_ShouldSucceed()
{
var query = @"select a.City from #A.Entities() a inner join #A.Entities() b on a.City = b.City group by a.City order by a.City";

var sources = new Dictionary<string, IEnumerable<BasicEntity>>
{
{
"#A", new[]
{
new BasicEntity("katowice", "jan", Convert.ToDecimal(300)),
new BasicEntity("czestochowa", "jan", Convert.ToDecimal(400)),
new BasicEntity("cracow", "jan", Convert.ToDecimal(10)),
new BasicEntity("glasgow", "feb", Convert.ToDecimal(-10))
}
}
};

var vm = CreateAndRunVirtualMachine(query, sources);

var table = vm.Run();

Assert.AreEqual(4, table.Count);
Assert.AreEqual("cracow", table[0].Values[0]);
Assert.AreEqual("czestochowa", table[1].Values[0]);
Assert.AreEqual("glasgow", table[2].Values[0]);
Assert.AreEqual("katowice", table[3].Values[0]);
}

[TestMethod]
public void WhenOrderByDescendingWithInnerJoinAndGroupBy_ShouldSucceed()
{
var query = @"select a.City from #A.Entities() a inner join #A.Entities() b on a.City = b.City group by a.City order by a.City desc";

var sources = new Dictionary<string, IEnumerable<BasicEntity>>
{
{
"#A", new[]
{
new BasicEntity("katowice", "jan", Convert.ToDecimal(300)),
new BasicEntity("czestochowa", "jan", Convert.ToDecimal(400)),
new BasicEntity("cracow", "jan", Convert.ToDecimal(10)),
new BasicEntity("glasgow", "feb", Convert.ToDecimal(-10))
}
}
};

var vm = CreateAndRunVirtualMachine(query, sources);

var table = vm.Run();

Assert.AreEqual(4, table.Count);
Assert.AreEqual("katowice", table[0].Values[0]);
Assert.AreEqual("glasgow", table[1].Values[0]);
Assert.AreEqual("czestochowa", table[2].Values[0]);
Assert.AreEqual("cracow", table[3].Values[0]);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
namespace Musoq.Evaluator.Tests.Schema.EnvironmentVariable;

public class EnvironmentVariableEntity
public class EnvironmentVariableEntity(string key, string value)
{
public EnvironmentVariableEntity(string key, string value)
{
Key = key;
Value = value;
}
public string Key { get; set; } = key;

public string Key { get; set; }

public string Value { get; set; }
public string Value { get; set; } = value;
}
15 changes: 15 additions & 0 deletions Musoq.Evaluator.Tests/Schema/Multi/First/FirstEntity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,19 @@ public class FirstEntity : ICommonInterface
{
public static readonly IDictionary<string, int> TestNameToIndexMap;
public static readonly IDictionary<int, Func<FirstEntity, object>> TestIndexToObjectAccessMap;

public string FirstItem { get; set; }

static FirstEntity()
{
TestNameToIndexMap = new Dictionary<string, int>
{
{nameof(FirstItem), 0}
};

TestIndexToObjectAccessMap = new Dictionary<int, Func<FirstEntity, object>>
{
{0, entity => entity.FirstItem}
};
}
}
11 changes: 7 additions & 4 deletions Musoq.Evaluator.Tests/Schema/Multi/First/FirstEntityTable.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
using System;
using Musoq.Schema;
using Musoq.Schema.DataSources;

namespace Musoq.Evaluator.Tests.Schema.Multi.First;

public class FirstEntityTable : ISchemaTable
{
public ISchemaColumn[] Columns => Array.Empty<ISchemaColumn>();
public ISchemaColumn[] Columns => [
new SchemaColumn(nameof(FirstEntity.FirstItem), 0, typeof(string))
];

public ISchemaColumn GetColumnByName(string name)
{
Expand All @@ -14,10 +17,10 @@ public ISchemaColumn GetColumnByName(string name)

public ISchemaColumn[] GetColumnsByName(string name)
{
return new []
{
return
[
Columns[FirstEntity.TestNameToIndexMap[name]]
};
];
}

public SchemaTableMetadata Metadata { get; } = new(typeof(FirstEntity));
Expand Down
3 changes: 3 additions & 0 deletions Musoq.Evaluator.Tests/Schema/Multi/ICommonInterface.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
namespace Musoq.Evaluator.Tests.Schema.Multi;

public interface ICommonInterface;
5 changes: 0 additions & 5 deletions Musoq.Evaluator.Tests/Schema/Multi/Second/ICommonInterface.cs

This file was deleted.

Loading

0 comments on commit a985776

Please sign in to comment.