require 'sequel' require_relative '../db/connect' def search(params) db = connect query = params[:q].strip offset = (params[:page] - 1) * 10 username = params[:username].strip case params[:type] when 'threads' sort = case params[:sort] when 'thread' 'created_at DESC' when 'post' 'last_post_created_at DESC' else 'created_at DESC' end search_threads(db, query, username, sort, offset) when 'posts' search_posts(db, query, username, offset) else Array.new end end def search_threads(db, query, username, sort, offset) db[<<-SQL, query, username, username, offset] SELECT threads.* FROM threads WHERE to_tsvector(title) @@ plainto_tsquery(?) AND (LOWER(threads.creator) = LOWER(?) OR ? = '') ORDER BY #{sort} LIMIT 50 OFFSET ?; SQL end def search_posts(db, query, username, offset) db[<<-SQL, query, username, username, offset] SELECT posts.*, threads.title as thread_title, threads.remote_id as remote_thread_id FROM posts INNER JOIN threads on posts.thread_id = threads.id WHERE tsv @@ plainto_tsquery(?) AND ( (LOWER(posts.creator) = LOWER(?)) OR (? = '') ) ORDER BY created_at DESC LIMIT 50 OFFSET ?; SQL end