Sha256: 7fc4caa028f56747197784c5a025d4b075701177987b1e14c389a992deba2722

Contents?: true

Size: 1.68 KB

Versions: 22

Compression:

Stored size: 1.68 KB

Contents

require_relative 'alter_table_query_handler'

module Mysql
  class BinlogQueryDispatcher
    def initialize
      @handlers = []
    end

    def dispatch(record)
      normalize_query(record["query"]) do |query|
        @handlers.each do |handler|
          if (handler.pattern.match(query))
            handler.process(record, query)
            break
          end
        end
      end
    end

    private

    def normalize_query(queries)
      queries = strip_comments(queries)
      queries = queries.gsub(/\s+/, ' ') # replace multiple spaces with a space
      queries.split(';').each do |query|
        query = query.lstrip
        yield(query + ";") if block_given? && !query.empty?
      end
    end

    def strip_comments(query)
      q = query.dup
      # \/\*.*?\*\/        /* */ style comment
      # `.*?`              `resource_name`
      # '(?:\\.|.)*?'      'string'
      # "(?:\\.|.)*?"      "string"
      # --\s+.*?(?:\n|$)   -- style comment
      # #\s+.*?(?:\n|$)    # style comment
      query.scan(/(\/\*.*?\*\/|`.*?`|'(?:\\.|.)*?'|"(?:\\.|.)*?"|--\s+.*?(?:\n|$)|#.*?(?:\n|$))/m) do |m|
        comment_or_quoted = m.first
        if comment_or_quoted.start_with?("/*") || comment_or_quoted.start_with?("--") ||
           comment_or_quoted.start_with?("#")
          # comment. replace with spaces of the same length
          idx_from = $~.offset(0)[0]
          idx_to = $~.offset(0)[1]
          len = idx_to - idx_from
          q[idx_from...idx_to] = ' ' * len
        end
      end
      q
    end
  end

  class FlydataBinlogQueryDispatcher < BinlogQueryDispatcher
    def initialize(context)
      @handlers = [
        AlterTableQueryHandler.new(context),
      ]
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
flydata-0.3.5 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.3.4 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.3.3 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.3.2 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.3.1 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.3.0 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.30 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.29 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.28 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.27 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.26 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.25 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.24 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.23 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.22 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.21 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.20 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.19 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.18 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb
flydata-0.2.17 lib/flydata/fluent-plugins/mysql/binlog_query_dispatcher.rb