module Riddle::Query

Constants

ESCAPE_CHARACTERS
ESCAPE_WORDS

sphinxsearch.com/docs/current/extended-syntax.html

MYSQL2_ESCAPE

Public Class Methods

begin() click to toggle source
# File lib/riddle/query.rb, line 50
def self.begin
  'BEGIN'
end
collation() click to toggle source
# File lib/riddle/query.rb, line 42
def self.collation
  'SHOW COLLATION'
end
commit() click to toggle source
# File lib/riddle/query.rb, line 54
def self.commit
  'COMMIT'
end
connection(address = '127.0.0.1', port = 9312) click to toggle 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
create_function(name, type, file) click to toggle 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
describe(index) click to toggle source
# File lib/riddle/query.rb, line 46
def self.describe(index)
  "DESCRIBE #{index}"
end
drop_function(name) click to toggle source
# File lib/riddle/query.rb, line 85
def self.drop_function(name)
  "DROP FUNCTION #{name}"
end
escape(string) click to toggle source
# File lib/riddle/query.rb, line 108
def self.escape(string)
  string.gsub(ESCAPE_CHARACTERS) { |match| "\\#{match}" }
    .gsub(ESCAPE_WORDS) { |word| "\\#{word}" }
end
meta() click to toggle source
# File lib/riddle/query.rb, line 22
def self.meta
  'SHOW META'
end
quote(string) click to toggle source
# File lib/riddle/query.rb, line 113
def self.quote(string)
  "'#{sql_escape string}'"
end
rollback() click to toggle source
# File lib/riddle/query.rb, line 58
def self.rollback
  'ROLLBACK'
end
set(variable, values, global = true) click to toggle 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
snippets(data, index, query, options = nil) click to toggle 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
sql_escape(string) click to toggle 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
status() click to toggle source
# File lib/riddle/query.rb, line 30
def self.status
  'SHOW STATUS'
end
tables() click to toggle source
# File lib/riddle/query.rb, line 34
def self.tables
  'SHOW TABLES'
end
translate_value(value) click to toggle 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
update(index, id, values = {}) click to toggle 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
variables() click to toggle source
# File lib/riddle/query.rb, line 38
def self.variables
  'SHOW VARIABLES'
end
warnings() click to toggle source
# File lib/riddle/query.rb, line 26
def self.warnings
  'SHOW WARNINGS'
end