Sha256: cfc86e4678a9697f91ccf5c62d09691e826ded8c612782c8465c4af0d6bcdd18

Contents?: true

Size: 1.02 KB

Versions: 45

Compression:

Stored size: 1.02 KB

Contents

module Bizside
  class SqlUtils

    # LIKE検索用に検索文字列をエスケープします。
    def self.escape_search(str)
      str.gsub(/\\/, '\\\\\\\\').gsub(/%/, '\%').gsub(/_/, '\_')
    end

    def self.like(columns, query_string, options = {})
      target_columns = columns
      unless target_columns.is_a?(Array)
        target_columns = [target_columns]
      end

      sql = []
      sql[0] = '('

      query_string.gsub(/ /, ' ').split.each_with_index do |s, i|
        like = self.escape_search(s)

        sql[0]  << ' or ' if i > 0
        sql[0] << '('

        target_columns.each_with_index do |column, j|
          sql[0] << ' or ' if j > 0
          sql[0] << "#{column} like ?"

          if options.fetch(:backward_match, false)
            sql << like + '%'
          elsif options.fetch(:forward_match, false)
            sql << '%' + like
          else
            sql << '%' + like + '%'
          end
        end

        sql[0] << ')'
      end

      sql[0]  << ')'
      sql
    end

  end
end

Version data entries

45 entries across 45 versions & 1 rubygems

Version Path
bizside-2.3.10 lib/bizside/sql_utils.rb
bizside-3.0.7 lib/bizside/sql_utils.rb
bizside-3.0.6 lib/bizside/sql_utils.rb
bizside-3.0.5 lib/bizside/sql_utils.rb
bizside-3.0.4 lib/bizside/sql_utils.rb
bizside-2.3.9 lib/bizside/sql_utils.rb
bizside-3.0.3 lib/bizside/sql_utils.rb
bizside-2.3.8 lib/bizside/sql_utils.rb
bizside-3.0.2 lib/bizside/sql_utils.rb
bizside-3.0.1 lib/bizside/sql_utils.rb
bizside-3.0.0 lib/bizside/sql_utils.rb
bizside-2.3.7 lib/bizside/sql_utils.rb
bizside-2.3.6 lib/bizside/sql_utils.rb
bizside-2.3.5 lib/bizside/sql_utils.rb
bizside-2.3.4 lib/bizside/sql_utils.rb
bizside-2.3.3 lib/bizside/sql_utils.rb
bizside-2.3.2 lib/bizside/sql_utils.rb
bizside-2.3.1 lib/bizside/sql_utils.rb
bizside-2.3.0 lib/bizside/sql_utils.rb
bizside-2.2.3 lib/bizside/sql_utils.rb