@@ -353,3 +353,81 @@ func TestMixInnerAndNaturalJoins(t *testing.T) {
353353 require .NoError (err )
354354 require .Equal (expected , result )
355355}
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