Skip to content

Commit 81a0b91

Browse files
committed
fixed wrong behaviour when table passed to data-source.
1 parent 38d95d1 commit 81a0b91

File tree

4 files changed

+55
-17
lines changed

4 files changed

+55
-17
lines changed

Musoq.Evaluator.Tests/CouplingSyntaxTests.cs

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,46 @@ public void WhenArgumentPassedToAliasedSchema_ShouldBeProperlyRecognized()
173173

174174
Assert.AreEqual("Parameter1", table.Columns.ElementAt(1).ColumnName);
175175
Assert.AreEqual(typeof(string), table.Columns.ElementAt(1).ColumnType);
176+
177+
Assert.AreEqual(1, table.Count);
178+
Assert.AreEqual(true, table[0].Values[0]);
179+
Assert.AreEqual("test", table[0].Values[1]);
176180
}
177-
181+
182+
[TestMethod]
183+
public void WhenDataSourceIsBasedOnAnotherDataSource_ShouldPass()
184+
{
185+
var query = "" +
186+
"table Values {" +
187+
" Text 'System.String'" +
188+
"};" +
189+
"couple #unknown.others with table Values as SourceOfValues;" +
190+
"with Anything as (" +
191+
" select Text from #unknown.anything()" +
192+
")" +
193+
"select Text from SourceOfValues(Anything)";
194+
195+
dynamic first = new ExpandoObject();
196+
197+
first.Text = "test1";
198+
199+
dynamic second = new ExpandoObject();
200+
201+
second.Text = "test2";
202+
203+
var vm = CreateAndRunVirtualMachine(query, null, new UnknownSchemaProvider(new[] {first, second}));
204+
var table = vm.Run();
205+
206+
Assert.AreEqual(1, table.Columns.Count());
207+
Assert.AreEqual("Text", table.Columns.ElementAt(0).ColumnName);
208+
Assert.AreEqual(typeof(string), table.Columns.ElementAt(0).ColumnType);
209+
210+
Assert.AreEqual(2, table.Count);
211+
212+
Assert.AreEqual("test1", table[0].Values[0]);
213+
Assert.AreEqual("test2", table[1].Values[0]);
214+
}
215+
178216
private class ParametersSchemaProvider : ISchemaProvider
179217
{
180218
public ISchema GetSchema(string schema)
@@ -261,10 +299,10 @@ protected override void CollectChunks(BlockingCollection<IReadOnlyList<IObjectRe
261299
index++;
262300
}
263301

264-
_values.ToList().ForEach(v => chunkedSource.Add(new List<IObjectResolver>
302+
chunkedSource.Add(new List<IObjectResolver>
265303
{
266304
new DynamicDictionaryResolver(accessMap, indexToNameMap)
267-
}));
305+
});
268306
}
269307
}
270308
}

Musoq.Evaluator/Musoq.Evaluator.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<TargetFramework>net6.0</TargetFramework>
55
<Platforms>AnyCPU;x64</Platforms>
66
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
7-
<Version>5.6.1</Version>
7+
<Version>5.6.2</Version>
88
<Authors>Jakub Puchała</Authors>
99
<Product>Musoq</Product>
1010
<PackageProjectUrl>https://github.com/Puchaczov/Musoq</PackageProjectUrl>

Musoq.Evaluator/Visitors/BuildMetadataAndInferTypeTraverseVisitor.cs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ public BuildMetadataAndInferTypeTraverseVisitor(IAwareExpressionVisitor visitor)
2525

2626
public void Visit(SelectNode node)
2727
{
28-
SetQueryPart(QueryPart.Select);
2928
foreach (var field in node.Fields)
3029
field.Accept(this);
3130
node.Accept(_visitor);
@@ -185,15 +184,12 @@ public void Visit(AccessCallChainNode node)
185184

186185
public virtual void Visit(WhereNode node)
187186
{
188-
SetQueryPart(QueryPart.Where);
189187
node.Expression.Accept(this);
190188
node.Accept(_visitor);
191189
}
192190

193191
public void Visit(GroupByNode node)
194192
{
195-
SetQueryPart(QueryPart.GroupBy);
196-
197193
foreach (var field in node.Fields)
198194
field.Accept(this);
199195

@@ -220,22 +216,19 @@ public void Visit(TakeNode node)
220216

221217
public void Visit(JoinInMemoryWithSourceTableFromNode node)
222218
{
223-
SetQueryPart(QueryPart.From);
224219
node.SourceTable.Accept(this);
225220
node.Expression.Accept(this);
226221
node.Accept(_visitor);
227222
}
228223

229224
public void Visit(SchemaFromNode node)
230225
{
231-
SetQueryPart(QueryPart.From);
232226
node.Parameters.Accept(this);
233227
node.Accept(_visitor);
234228
}
235229

236230
public void Visit(JoinSourcesTableFromNode node)
237231
{
238-
SetQueryPart(QueryPart.From);
239232
node.Expression.Accept(this);
240233
node.First.Accept(this);
241234
node.Second.Accept(this);
@@ -245,13 +238,11 @@ public void Visit(JoinSourcesTableFromNode node)
245238

246239
public void Visit(InMemoryTableFromNode node)
247240
{
248-
SetQueryPart(QueryPart.From);
249241
node.Accept(_visitor);
250242
}
251243

252244
public void Visit(JoinFromNode node)
253245
{
254-
SetQueryPart(QueryPart.From);
255246
var joins = new Stack<JoinFromNode>();
256247

257248
var join = node;
@@ -328,14 +319,12 @@ public void Visit(JoinFromNode node)
328319

329320
public void Visit(ExpressionFromNode node)
330321
{
331-
SetQueryPart(QueryPart.From);
332322
node.Expression.Accept(this);
333323
node.Accept(_visitor);
334324
}
335325

336326
public void Visit(CreateTransformationTableNode node)
337327
{
338-
SetQueryPart(QueryPart.None);
339328
foreach (var item in node.Fields)
340329
item.Accept(this);
341330

@@ -382,10 +371,19 @@ public void Visit(TranslatedSetOperatorNode node)
382371
public void Visit(QueryNode node)
383372
{
384373
LoadQueryScope();
374+
375+
SetQueryPart(QueryPart.From);
385376
node.From.Accept(this);
377+
378+
SetQueryPart(QueryPart.Where);
386379
node.Where?.Accept(this);
380+
381+
SetQueryPart(QueryPart.GroupBy);
387382
node.GroupBy?.Accept(this);
383+
384+
SetQueryPart(QueryPart.Select);
388385
node.Select.Accept(this);
386+
389387
node.Skip?.Accept(this);
390388
node.Take?.Accept(this);
391389
node.OrderBy?.Accept(this);
@@ -721,7 +719,6 @@ public void Visit(SchemaMethodFromNode node)
721719

722720
public void Visit(AliasedFromNode node)
723721
{
724-
SetQueryPart(QueryPart.From);
725722
node.Args.Accept(this);
726723
node.Accept(_visitor);
727724
}

Musoq.Evaluator/Visitors/BuildMetadataAndInferTypeVisitor.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ public void Visit(AllColumnsNode node)
444444

445445
public void Visit(IdentifierNode node)
446446
{
447-
if (node.Name != _identifier)
447+
if (node.Name != _identifier && _queryPart != QueryPart.From)
448448
{
449449
var tableSymbol = _currentScope.ScopeSymbolTable.GetSymbol<TableSymbol>(_identifier);
450450
var column = tableSymbol.GetColumnByAliasAndName(_identifier, node.Name);
@@ -744,6 +744,8 @@ public void Visit(TakeNode node)
744744
private static readonly WhereNode AllTrueWhereNode =
745745
new(new EqualityNode(new IntegerNode("1", "s"), new IntegerNode("1", "s")));
746746

747+
private QueryPart _queryPart;
748+
747749
public void Visit(SchemaFromNode node)
748750
{
749751
var schema = _provider.GetSchema(node.Schema);
@@ -1459,6 +1461,7 @@ public void Visit(FieldLinkNode node)
14591461

14601462
public void SetQueryPart(QueryPart part)
14611463
{
1464+
_queryPart = part;
14621465
}
14631466

14641467
public void QueryBegins()

0 commit comments

Comments
 (0)