module Riddle::Query
Constants
- ESCAPE_CHARACTERS
- ESCAPE_WORDS
- MYSQL2_ESCAPE
Public Class Methods
Source
# File lib/riddle/query.rb, line 9 def self.connection(address = '127.0.0.1', port = 9312) require 'mysql2' # If you use localhost, MySQL insists on a socket connection, but Sphinx # requires a TCP connection. Using 127.0.0.1 fixes that. address = '127.0.0.1' if address == 'localhost' Mysql2::Client.new( :host => address, :port => port ) end
Source
# File lib/riddle/query.rb, line 80 def self.create_function(name, type, file) type = type.to_s.upcase "CREATE FUNCTION #{name} RETURNS #{type} SONAME #{quote file}" end
Source
# File lib/riddle/query.rb, line 46 def self.describe(index) "DESCRIBE #{index}" end
Source
# File lib/riddle/query.rb, line 85 def self.drop_function(name) "DROP FUNCTION #{name}" end
Source
# File lib/riddle/query.rb, line 108 def self.escape(string) string.gsub(ESCAPE_CHARACTERS) { |match| "\\#{match}" } .gsub(ESCAPE_WORDS) { |word| "\\#{word}" } end
Source
# File lib/riddle/query.rb, line 113 def self.quote(string) "'#{sql_escape string}'" end
Source
# File lib/riddle/query.rb, line 62 def self.set(variable, values, global = true) values = "(#{values.join(', ')})" if values.is_a?(Array) "SET#{ ' GLOBAL' if global } #{variable} = #{values}" end
Source
# File lib/riddle/query.rb, line 67 def self.snippets(data, index, query, options = nil) data, index, query = quote(data), quote(index), quote(query) options = ', ' + options.keys.collect { |key| value = translate_value options[key] value = quote value if value.is_a?(String) "#{value} AS #{key}" }.join(', ') unless options.nil? "CALL SNIPPETS(#{data}, #{index}, #{query}#{options})" end
Source
# File lib/riddle/query.rb, line 117 def self.sql_escape(string) return Mysql2::Client.escape(string) if MYSQL2_ESCAPE string.gsub(/['"\\]/) { |character| "\\#{character}" } end
Source
# File lib/riddle/query.rb, line 97 def self.translate_value(value) case value when TrueClass 1 when FalseClass 0 else value end end
Source
# File lib/riddle/query.rb, line 89 def self.update(index, id, values = {}) values = values.keys.collect { |key| "#{key} = #{translate_value values[key]}" }.join(', ') "UPDATE #{index} SET #{values} WHERE id = #{id}" end