Method: Sequel::MSSQL::EmulateLateralWithApply#from
- Defined in:
- lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb
#from(*source, &block) ⇒ Object
When a FROM entry uses a LATERAL subquery, convert that entry into a CROSS APPLY.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/sequel/extensions/mssql_emulate_lateral_with_apply.rb', line 58 def from(*source, &block) virtual_row_columns(source, block) lateral, source = source.partition{|t| t.is_a?(Sequel::Dataset) && t.opts[:lateral] || (t.is_a?(Sequel::SQL::AliasedExpression) && t.expression.is_a?(Sequel::Dataset) && t.expression.opts[:lateral])} unless source.empty? return super(*source, &nil) if !lateral || lateral.empty? ds = from(*source) lateral.each do |l| l = if l.is_a?(Sequel::SQL::AliasedExpression) l.expression.clone(:lateral=>nil).as(l.alias) else l.clone(:lateral=>nil) end ds = ds.cross_apply(l) end ds end |