@@ -262,15 +262,23 @@ def find_and_fix_uncorrelated_joins_in_select_statement(o)
262262 # return if !join_in_select_statement?(o) || core.source.right.size != 2
263263 # j1 = core.source.right.first
264264 # j2 = core.source.right.second
265- return
266-
267- return unless Arel ::Nodes ::OuterJoin === j1 && Arel ::Nodes ::StringJoin === j2
268- j1_tn = j1 . left . name
269- j2_tn = j2 . left . match ( /JOIN \[ (.*)\] .*ON/ ) . try ( :[] , 1 )
265+ # return unless Arel::Nodes::OuterJoin === j1 && Arel::Nodes::StringJoin === j2
266+ # j1_tn = j1.left.name
267+ # j2_tn = j2.left.match(/JOIN \[(.*)\].*ON/).try(:[],1)
268+ # return unless j1_tn == j2_tn
269+ # crltd_tn = "#{j1_tn}_crltd"
270+ # j1.left.table_alias = crltd_tn
271+ # j1.right.expr.left.relation.table_alias = crltd_tn
272+ return if !join_in_select_statement? ( o ) || !( Arel ::Nodes ::StringJoin === core . froms )
273+ j1 = core . froms . left
274+ j2 = core . froms . right
275+ return unless Arel ::Nodes ::OuterJoin === j1 && Arel ::Nodes ::SqlLiteral === j2 && j2 . include? ( 'JOIN ' )
276+ j1_tn = j1 . right . name
277+ j2_tn = j2 . match ( /JOIN \[ (.*)\] .*ON/ ) . try ( :[] , 1 )
270278 return unless j1_tn == j2_tn
271- crltd_tn = " #{ j1_tn } _crltd"
272- j1 . left . table_alias = crltd_tn
273- j1 . right . expr . left . relation . table_alias = crltd_tn
279+ on_index = j2 . index ( ' ON ' )
280+ j2 . insert on_index , " AS [ #{ j2_tn } _crltd]"
281+ j2 . sub! "[ #{ j2_tn } ]." , "[ #{ j2_tn } _crltd]."
274282 end
275283
276284 def rowtable_projections ( o )
0 commit comments