Skip to content
  • Yorick Peterse's avatar
    Added FromUnion to easily select from a UNION · 84f6b869d148
    Yorick Peterse authored
    This commit adds the module `FromUnion`, which provides the class method
    `from_union`. This simplifies the process of selecting data from the
    result of a UNION, and reduces the likelihood of making mistakes. As a
    result, instead of this:
        union =[foo, bar])
        Foo.from("(#{union.to_sql}) #{Foo.table_name}")
    We can now write this instead:
        Foo.from_union([foo, bar])
    This commit also includes some changes to make this new setup work
    properly. For example, a bug in Rails 4
    ( would break the use of
    `from("sub-query-here").includes(:relation)` in certain cases. There was
    also a CI query which appeared to repeat a lot of conditions from an
    outer query on an inner query, which isn't necessary.
    Finally, we include a RuboCop cop to ensure developers use this new
    module, instead of using Gitlab::SQL::Union directly.