Module: ActiveRecord::ConnectionAdapters::Elasticsearch::DatabaseStatements
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/active_record/connection_adapters/elasticsearch/database_statements.rb
Overview
extend adapter with query-related statements
ORIGINAL methods untouched:
- to_sql
- to_sql_and_binds
- insert
- create
- update
- delete
- arel_from_relation
SUPPORTED but not used:
- select
- select_all
- select_one
- select_value
- select_values
UNSUPPORTED methods that will be +ignored+:
- build_fixture_sql
- build_fixture_statements
- build_truncate_statement
- build_truncate_statements
UNSUPPORTED methods that will +fail+:
- insert_fixture
- insert_fixtures_set
- execute_batch
- select_prepared
- combine_multi_statements
Instance Method Summary collapse
-
#exec_delete(query, name = nil, binds = []) ⇒ Integer
Executes delete +query+ statement in the context of this connection using +binds+ as the bind substitutes.
-
#exec_insert(query, name = nil, binds = [], _pk = nil, _sequence_name = nil, returning: nil) ⇒ ElasticsearchRecord::Result
Executes insert +query+ statement in the context of this connection using +binds+ as the bind substitutes.
-
#exec_update(query, name = nil, binds = []) ⇒ Integer
Executes update +query+ statement in the context of this connection using +binds+ as the bind substitutes.
-
#last_inserted_id(result) ⇒ Object
returns the last inserted id from the result.
-
#select_count(arel, name = "Count", async: false) ⇒ Integer
executes a count query for provided arel.
-
#select_multiple(arels, name = "Multi", async: false) ⇒ ElasticsearchRecord::Result
executes a msearch for provided arels.
-
#write_query?(query) ⇒ Boolean
detects if a query is a write query.
Instance Method Details
#exec_delete(query, name = nil, binds = []) ⇒ Integer
Executes delete +query+ statement in the context of this connection using +binds+ as the bind substitutes. +name+ is logged along with the executed +query+ arguments. expects a integer as return.
86 87 88 89 90 91 92 93 |
# File 'lib/active_record/connection_adapters/elasticsearch/database_statements.rb', line 86 def exec_delete(query, name = nil, binds = []) result = internal_exec_query(query, name, binds) # fetch additional Elasticsearch response result # raise ::ElasticsearchRecord::ResponseResultError.new('deleted', result.result) unless result.result == 'deleted' result.total end |
#exec_insert(query, name = nil, binds = [], _pk = nil, _sequence_name = nil, returning: nil) ⇒ ElasticsearchRecord::Result
Executes insert +query+ statement in the context of this connection using +binds+ as the bind substitutes. +name+ is logged along with the executed +query+ arguments.
57 58 59 60 61 62 63 64 65 |
# File 'lib/active_record/connection_adapters/elasticsearch/database_statements.rb', line 57 def exec_insert(query, name = nil, binds = [], _pk = nil, _sequence_name = nil, returning: nil) result = internal_exec_query(query, name, binds) # fetch additional Elasticsearch response result # raise ::ElasticsearchRecord::ResponseResultError.new('created', result.result) unless result.result == 'created' # return the result object result end |
#exec_update(query, name = nil, binds = []) ⇒ Integer
Executes update +query+ statement in the context of this connection using +binds+ as the bind substitutes. +name+ is logged along with the executed +query+ arguments. expects a integer as return.
72 73 74 75 76 77 78 79 |
# File 'lib/active_record/connection_adapters/elasticsearch/database_statements.rb', line 72 def exec_update(query, name = nil, binds = []) result = internal_exec_query(query, name, binds) # fetch additional Elasticsearch response result # raise ::ElasticsearchRecord::ResponseResultError.new('updated', result.result) unless result.result == 'updated' result.total end |
#last_inserted_id(result) ⇒ Object
returns the last inserted id from the result. called through +#insert+
128 129 130 |
# File 'lib/active_record/connection_adapters/elasticsearch/database_statements.rb', line 128 def last_inserted_id(result) result.response['_id'] end |
#select_count(arel, name = "Count", async: false) ⇒ Integer
executes a count query for provided arel
112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/active_record/connection_adapters/elasticsearch/database_statements.rb', line 112 def select_count(arel, name = "Count", async: false) query = to_sql(arel_from_relation(arel)) # build new count query from existing query query = ElasticsearchRecord::Query.new( index: query.index, type: ElasticsearchRecord::Query::TYPE_COUNT, body: query.body, status: query.status, arguments: query.arguments) internal_exec_query(query, name, async: async).response['count'] end |
#select_multiple(arels, name = "Multi", async: false) ⇒ ElasticsearchRecord::Result
executes a msearch for provided arels
97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/active_record/connection_adapters/elasticsearch/database_statements.rb', line 97 def select_multiple(arels, name = "Multi", async: false) # transform arels to query objects queries = arels.map { |arel| to_sql(arel_from_relation(arel)) } # build new msearch query query = ElasticsearchRecord::Query.new( index: queries.first&.index, type: ElasticsearchRecord::Query::TYPE_MSEARCH, body: queries.map { |q| { search: q.body } }) internal_exec_query(query, name, async: async) end |
#write_query?(query) ⇒ Boolean
detects if a query is a write query. since we don't provide a simple string / hash we can now access the query-object and ask for it :)
49 50 51 |
# File 'lib/active_record/connection_adapters/elasticsearch/database_statements.rb', line 49 def write_query?(query) query.write? end |