Sha256: 81f100eddf71aa535b09c7fda48c28ce4cba6168e8f707352bcac3f33cf42d18

Contents?: true

Size: 1.26 KB

Versions: 18

Compression:

Stored size: 1.26 KB

Contents

require 'sequel'

module Chicago
  module ETL
    module SequelExtensions
      module DependantTables
        # Returns an Array of table names used in this dataset.
        #
        # Handles joins and if the recurse flag is true, unions and
        # nested datasets.
        def dependant_tables(recurse=true)
          tables = extract_dependant_tables_in_clause(opts[:from].first, recurse)

          if opts[:compounds]
            tables += opts[:compounds].map {|(_, dataset, _)|
              dataset.dependant_tables
            }
          end

          if opts[:join]
            tables += opts[:join].map {|join| 
              extract_dependant_tables_in_clause(join.table, recurse)
            }
          end

          tables.flatten.uniq
        end

        private
        
        def extract_dependant_tables_in_clause(clause, recurse)
          case clause
          when Symbol
            [clause]
          when Sequel::SQL::AliasedExpression
            extract_dependant_tables_in_clause(clause.expression, recurse)
          when Sequel::Dataset
            recurse ? clause.dependant_tables : []
          else
            []
          end
        end
      end
    end
  end
end

Sequel::Dataset.send :include, Chicago::ETL::SequelExtensions::DependantTables

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
chicago-etl-0.3.0 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.2.7 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.2.5 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.2.4 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.2.3 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.2.2 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.2.1 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.2.0 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.1.4 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.1.3 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.1.2 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.1.1 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.1.0 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.0.13 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.0.12 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.0.11 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.0.10 lib/chicago/etl/sequel/dependant_tables.rb
chicago-etl-0.0.9 lib/chicago/etl/sequel/dependant_tables.rb