lib/each_sql.rb in each_sql-0.2.4 vs lib/each_sql.rb in each_sql-0.2.5

- old
+ new

@@ -6,113 +6,121 @@ # 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) # @return[EachSQL] Enumerable def EachSQL input, type = :default - EachSQL.new(input, EachSQL::Defaults[type]) + esql = EachSQL.new(input, EachSQL::Defaults[type]) + + if block_given? + esql.each do |sql| + yield sql + end + else + esql + end end class EachSQL - # EachSQL::Default Hash is a set of pre-defined parsing rules - # - :default: Default parsing rules for vendor-independent SQL scripts - # - :mysql: Parsing rules for MySQL scripts. Understands `delimiter' statements. - # - :oracle: Parsing rules for Oracle scripts. Removes trailing slashes after begin-end blocks. - Defaults = { - :default => { - :delimiter => /;+/, - :blocks => { - /`/ => /`/, - /"/ => /"/, - /'/ => /'/, - /\/\*[^+]/ => /\*\//, - /--+/ => $/, - }, - :nesting_blocks => { - /\bdeclare.*?;\s*?begin\b/im => /;\s*?end\b/i, - /\bbegin\b/i => /;\s*?end\b/i, - }, - :nesting_context => [ - /\A\s*(begin|declare|create\b[^;]+?\b(procedure|function|trigger|package))\b/im - ], - :callbacks => {}, - :ignore => [], - :replace => {}, - # Let's assume we don't change delimiters within usual sql scripts - :strip_delimiter => lambda { |obj, stmt| stmt.sub(/\A;+/, '').sub(/;+\Z/, '') } - }, + # EachSQL::Default Hash is a set of pre-defined parsing rules + # - :default: Default parsing rules for vendor-independent SQL scripts + # - :mysql: Parsing rules for MySQL scripts. Understands `delimiter' statements. + # - :oracle: Parsing rules for Oracle scripts. Removes trailing slashes after begin-end blocks. + Defaults = { + :default => { + :delimiter => /;+/, + :blocks => { + /`/ => /`/, + /"/ => /"/, + /'/ => /'/, + /\/\*[^+]/ => /\*\//, + /--+/ => $/, + }, + :nesting_blocks => { + /\bdeclare.*?;\s*?begin\b/im => /;\s*?end\b/i, + /\bbegin\b/i => /;\s*?end\b/i, + }, + :nesting_context => [ + /\A\s*(begin|declare|create\b[^;]+?\b(procedure|function|trigger|package))\b/im + ], + :callbacks => {}, + :ignore => [], + :replace => {}, + # Let's assume we don't change delimiters within usual sql scripts + :strip_delimiter => lambda { |obj, stmt| stmt.sub(/\A;+/, '').sub(/;+\Z/, '') } + }, - :mysql => { - :delimiter => /;+|delimiter\s+\S+/i, - :blocks => { - /`/ => /`/, - /"/ => /"/, - /'/ => /'/, - /\/\*[^+]/ => /\*\//, - /--+/ => $/, - }, - :nesting_blocks => { - /\bbegin\b/i => /\bend\b/i - }, - :nesting_context => [ - /\A\s*(begin|create\b[^;]+?\b(procedure|function|trigger))\b/im - ], - # We need to change delimiter on `delimiter' command - :callbacks => { - /^\s*delimiter\s+(\S+)/i => lambda { |obj, stmt, md| - new_delimiter = Regexp.new(Regexp.escape md[1]) - obj.delimiter = /(#{new_delimiter})+|delimiter\s+\S+/i - obj.delimiter_string = md[1] - } - }, - :ignore => [ - /^delimiter\s+\S+$/i - ], - :replace => {}, - :strip_delimiter => lambda { |obj, stmt| - stmt.gsub(/(#{Regexp.escape(obj.delimiter_string || ';')})+\Z/, '') - } - }, + :mysql => { + :delimiter => /;+|delimiter\s+\S+/i, + :blocks => { + /`/ => /`/, + /"/ => /"/, + /'/ => /'/, + /\/\*[^+]/ => /\*\//, + /--+/ => $/, + }, + :nesting_blocks => { + /\bbegin\b/i => /\bend\b/i + }, + :nesting_context => [ + /\A\s*(begin|create\b[^;]+?\b(procedure|function|trigger))\b/im + ], + # We need to change delimiter on `delimiter' command + :callbacks => { + /^\s*delimiter\s+(\S+)/i => lambda { |obj, stmt, md| + new_delimiter = Regexp.new(Regexp.escape md[1]) + obj.delimiter = /(#{new_delimiter})+|delimiter\s+\S+/i + obj.delimiter_string = md[1] + } + }, + :ignore => [ + /^delimiter\s+\S+$/i + ], + :replace => {}, + :strip_delimiter => lambda { |obj, stmt| + stmt.gsub(/(#{Regexp.escape(obj.delimiter_string || ';')})+\Z/, '') + } + }, - :oracle => { - :delimiter => /;+/, - :blocks => { - /`/ => /`/, - /"/ => /"/, - /'/ => /'/, - /\/\*[^+]/ => /\*\//, - /--+/ => $/, - }, - :nesting_blocks => { - /\bbegin\b/i => /\bend\b/i, - /\bdeclare.*?;\s*?begin\b/im => { - :closer => %r{;\s*/}m, - # Stops immediately - :pop => true - }, - /\bcreate[^;]+?\b(procedure|function|trigger|package)\b/im => { - :closer => %r{;\s*/}m, - # Stops immediately - :pop => true - } - }, - :nesting_context => [ - /\A\s*(\/\s*)*(begin|declare|create\b[^;]+?\b(procedure|function|trigger|package))\b/im - ], - :callbacks => { - /\Abegin\b/ => lambda { |obj, stmt, md| - # Oracle needs this - stmt << ';' if stmt !~ /;\Z/ - } - }, - :ignore => [], - :replace => { %r[\A/] => '' }, - :strip_delimiter => lambda { |obj, stmt| - stmt.gsub(/(#{stmt =~ /;\s*\// ? '/' : ';'})+\Z/, '') - } - } - } - Defaults[:plsql] = Defaults[:oracle] # alias + :oracle => { + :delimiter => /;+/, + :blocks => { + /`/ => /`/, + /"/ => /"/, + /'/ => /'/, + /\/\*[^+]/ => /\*\//, + /--+/ => $/, + }, + :nesting_blocks => { + /\bbegin\b/i => /\bend\b/i, + /\bdeclare.*?;\s*?begin\b/im => { + :closer => %r{;\s*/}m, + # Stops immediately + :pop => true + }, + /\bcreate[^;]+?\b(procedure|function|trigger|package)\b/im => { + :closer => %r{;\s*/}m, + # Stops immediately + :pop => true + } + }, + :nesting_context => [ + /\A\s*(\/\s*)*(begin|declare|create\b[^;]+?\b(procedure|function|trigger|package))\b/im + ], + :callbacks => { + /\Abegin\b/ => lambda { |obj, stmt, md| + # Oracle needs this + stmt << ';' if stmt !~ /;\Z/ + } + }, + :ignore => [], + :replace => { %r[\A/] => '' }, + :strip_delimiter => lambda { |obj, stmt| + stmt.gsub(/(#{stmt =~ /;\s*\// ? '/' : ';'})+\Z/, '') + } + } + } + Defaults[:plsql] = Defaults[:oracle] # alias - # Freeze the Hash - Defaults.freeze + # Freeze the Hash + Defaults.freeze end