@@ -353,3 +353,81 @@ func TestMixInnerAndNaturalJoins(t *testing.T) {
353
353
require .NoError (err )
354
354
require .Equal (expected , result )
355
355
}
356
+
357
+ func TestReorderProjectionUnresolvedChild (t * testing.T ) {
358
+ require := require .New (t )
359
+ node := plan .NewProject (
360
+ []sql.Expression {
361
+ expression .NewUnresolvedQualifiedColumn ("rc" , "commit_hash" ),
362
+ expression .NewUnresolvedColumn ("commit_author_when" ),
363
+ },
364
+ plan .NewFilter (
365
+ expression .JoinAnd (
366
+ expression .NewEquals (
367
+ expression .NewUnresolvedQualifiedColumn ("rc" , "repository_id" ),
368
+ expression .NewLiteral ("foo" , sql .Text ),
369
+ ),
370
+ expression .NewEquals (
371
+ expression .NewUnresolvedQualifiedColumn ("rc" , "ref_name" ),
372
+ expression .NewLiteral ("HEAD" , sql .Text ),
373
+ ),
374
+ expression .NewEquals (
375
+ expression .NewUnresolvedQualifiedColumn ("rc" , "history_index" ),
376
+ expression .NewLiteral (int64 (0 ), sql .Int64 ),
377
+ ),
378
+ ),
379
+ plan .NewNaturalJoin (
380
+ plan .NewInnerJoin (
381
+ plan .NewUnresolvedTable ("refs" , "" ),
382
+ plan .NewTableAlias ("rc" ,
383
+ plan .NewUnresolvedTable ("ref_commits" , "" ),
384
+ ),
385
+ expression .NewAnd (
386
+ expression .NewEquals (
387
+ expression .NewUnresolvedQualifiedColumn ("refs" , "ref_name" ),
388
+ expression .NewUnresolvedQualifiedColumn ("rc" , "ref_name" ),
389
+ ),
390
+ expression .NewEquals (
391
+ expression .NewUnresolvedQualifiedColumn ("refs" , "repository_id" ),
392
+ expression .NewUnresolvedQualifiedColumn ("rc" , "repository_id" ),
393
+ ),
394
+ ),
395
+ ),
396
+ plan .NewTableAlias ("c" ,
397
+ plan .NewUnresolvedTable ("commits" , "" ),
398
+ ),
399
+ ),
400
+ ),
401
+ )
402
+
403
+ commits := mem .NewTable ("commits" , sql.Schema {
404
+ {Name : "repository_id" , Source : "commits" , Type : sql .Text },
405
+ {Name : "commit_hash" , Source : "commits" , Type : sql .Text },
406
+ {Name : "commit_author_when" , Source : "commits" , Type : sql .Text },
407
+ })
408
+
409
+ refs := mem .NewTable ("refs" , sql.Schema {
410
+ {Name : "repository_id" , Source : "refs" , Type : sql .Text },
411
+ {Name : "ref_name" , Source : "refs" , Type : sql .Text },
412
+ })
413
+
414
+ refCommits := mem .NewTable ("ref_commits" , sql.Schema {
415
+ {Name : "repository_id" , Source : "ref_commits" , Type : sql .Text },
416
+ {Name : "ref_name" , Source : "ref_commits" , Type : sql .Text },
417
+ {Name : "commit_hash" , Source : "ref_commits" , Type : sql .Text },
418
+ {Name : "history_index" , Source : "ref_commits" , Type : sql .Int64 },
419
+ })
420
+
421
+ db := mem .NewDatabase ("" )
422
+ db .AddTable ("refs" , refs )
423
+ db .AddTable ("ref_commits" , refCommits )
424
+ db .AddTable ("commits" , commits )
425
+
426
+ catalog := sql .NewCatalog ()
427
+ catalog .AddDatabase (db )
428
+ a := withoutProcessTracking (NewDefault (catalog ))
429
+
430
+ result , err := a .Analyze (sql .NewEmptyContext (), node )
431
+ require .NoError (err )
432
+ require .True (result .Resolved ())
433
+ }
0 commit comments