class Blazer::Adapters::ElasticsearchAdapter
Public Instance Methods
Source
# File lib/blazer/adapters/elasticsearch_adapter.rb, line 46 def parameter_binding :positional end
www.elastic.co/guide/en/elasticsearch/reference/current/sql-rest-params.html
Source
# File lib/blazer/adapters/elasticsearch_adapter.rb, line 36 def preview_statement "SELECT * FROM \"{table}\" LIMIT 10" end
Source
# File lib/blazer/adapters/elasticsearch_adapter.rb, line 41 def quoting :single_quote_escape end
Source
# File lib/blazer/adapters/elasticsearch_adapter.rb, line 4 def run_statement(statement, comment, bind_params) columns = [] rows = [] error = nil begin response = client.transport.perform_request("POST", endpoint, {}, {query: "#{statement} /*#{comment}*/", params: bind_params}).body columns = response["columns"].map { |v| v["name"] } # Elasticsearch does not differentiate between dates and times date_indexes = response["columns"].each_index.select { |i| ["date", "datetime"].include?(response["columns"][i]["type"]) } if columns.any? rows = response["rows"] date_indexes.each do |i| rows.each do |row| row[i] &&= Time.parse(row[i]) end end end rescue => e error = e.message error = Blazer::VARIABLE_MESSAGE if error.include?("mismatched input '?'") end [columns, rows, error] end
Source
# File lib/blazer/adapters/elasticsearch_adapter.rb, line 30 def tables indices = client.cat.indices(format: "json").map { |v| v["index"] } aliases = client.cat.aliases(format: "json").map { |v| v["alias"] } (indices + aliases).uniq.sort end
Protected Instance Methods
Source
# File lib/blazer/adapters/elasticsearch_adapter.rb, line 56 def client @client ||= Elasticsearch::Client.new(url: settings["url"]) end
Source
# File lib/blazer/adapters/elasticsearch_adapter.rb, line 52 def endpoint @endpoint ||= client.info["version"]["number"].to_i >= 7 ? "_sql" : "_xpack/sql" end