Sha256: 18eef7fed12777e7016182f0988d1f69141528b02ad2c5130bac0d40793831a1

Contents?: true

Size: 1.14 KB

Versions: 2

Compression:

Stored size: 1.14 KB

Contents

# encoding: UTF-8
# Junegunn Choi (junegunn.c@gmail.com)

require 'rubygems'
require 'each_sql/each_sql'
require 'each_sql/parser'

# Shortcut method for creating a Enumerable EachSQL object for the given input.
# @param[String] input Input script.
# @param[Symbol] The type of the input SQL script. :default, :mysql, and :oracle (or :plsql)
# @yield[String] Executable SQL statement or block.
# @return[Enumerator] Enumerator of executable SQL statements and blocks.
def EachSQL input, type = :default
  return enum_for(:EachSQL, input, type) unless block_given?

  esql   = EachSQL.new(type)
  result = {}

  process = lambda {
    return if esql.empty?
    result = esql.shift
    sqls   = result[:sqls]
    sqls.each do |sql|
      yield sql
    end
  }

  input.to_s.each_line do |line|
    case line
    when /^\s*delimiter\s+(\S+)/i
      process.call
      if esql.empty?
        esql.delimiter = $1
      else
        esql << line
      end
    when /#{Regexp.escape esql.delimiter}/
      esql << line
      process.call
    else
      esql << line
    end
  end

  if !esql.empty?
    process.call
  end

  if sql = result[:leftover]
    yield sql
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
each_sql-0.4.1 lib/each_sql.rb
each_sql-0.4.0 lib/each_sql.rb