elasticsearch_record 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +4 -0
- data/Gemfile.lock +10 -14
- data/README.md +180 -27
- data/docs/CHANGELOG.md +36 -18
- data/docs/LICENSE.txt +1 -1
- data/elasticsearch_record.gemspec +42 -0
- data/lib/active_record/connection_adapters/elasticsearch/column.rb +20 -6
- data/lib/active_record/connection_adapters/elasticsearch/database_statements.rb +142 -125
- data/lib/active_record/connection_adapters/elasticsearch/quoting.rb +2 -23
- data/lib/active_record/connection_adapters/elasticsearch/schema_creation.rb +30 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/attribute_methods.rb +103 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/column_methods.rb +42 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb +158 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/table_alias_definition.rb +32 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/table_definition.rb +132 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/table_mapping_definition.rb +110 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/table_setting_definition.rb +136 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/update_table_definition.rb +174 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_definitions.rb +37 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_dumper.rb +110 -0
- data/lib/active_record/connection_adapters/elasticsearch/schema_statements.rb +398 -174
- data/lib/active_record/connection_adapters/elasticsearch/table_statements.rb +232 -0
- data/lib/active_record/connection_adapters/elasticsearch/type/multicast_value.rb +2 -0
- data/lib/active_record/connection_adapters/elasticsearch/unsupported_implementation.rb +32 -0
- data/lib/active_record/connection_adapters/elasticsearch_adapter.rb +112 -19
- data/lib/arel/collectors/elasticsearch_query.rb +0 -1
- data/lib/arel/visitors/elasticsearch.rb +7 -579
- data/lib/arel/visitors/elasticsearch_base.rb +234 -0
- data/lib/arel/visitors/elasticsearch_query.rb +463 -0
- data/lib/arel/visitors/elasticsearch_schema.rb +124 -0
- data/lib/elasticsearch_record/core.rb +44 -10
- data/lib/elasticsearch_record/errors.rb +13 -0
- data/lib/elasticsearch_record/gem_version.rb +6 -2
- data/lib/elasticsearch_record/instrumentation/log_subscriber.rb +27 -9
- data/lib/elasticsearch_record/model_schema.rb +5 -0
- data/lib/elasticsearch_record/persistence.rb +31 -26
- data/lib/elasticsearch_record/query.rb +56 -17
- data/lib/elasticsearch_record/querying.rb +17 -0
- data/lib/elasticsearch_record/relation/calculation_methods.rb +3 -0
- data/lib/elasticsearch_record/relation/core_methods.rb +57 -17
- data/lib/elasticsearch_record/relation/query_clause_tree.rb +38 -1
- data/lib/elasticsearch_record/relation/query_methods.rb +6 -0
- data/lib/elasticsearch_record/relation/result_methods.rb +15 -9
- data/lib/elasticsearch_record/result.rb +32 -5
- data/lib/elasticsearch_record/statement_cache.rb +2 -1
- data/lib/elasticsearch_record.rb +2 -2
- metadata +29 -11
- data/.ruby-version +0 -1
- data/lib/elasticsearch_record/schema_migration.rb +0 -30
@@ -0,0 +1,110 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record/connection_adapters/abstract/schema_dumper'
|
4
|
+
|
5
|
+
module ActiveRecord
|
6
|
+
module ConnectionAdapters
|
7
|
+
module Elasticsearch
|
8
|
+
class SchemaDumper < ActiveRecord::ConnectionAdapters::SchemaDumper # :nodoc:
|
9
|
+
private
|
10
|
+
|
11
|
+
def table(table, stream, nested_blocks: false, **)
|
12
|
+
begin
|
13
|
+
self.table_name = table
|
14
|
+
|
15
|
+
schema = @connection.table_schema(table)
|
16
|
+
definition = @connection.create_table_definition(table, **schema)
|
17
|
+
|
18
|
+
# resolve string printer
|
19
|
+
tbl = StringIO.new
|
20
|
+
|
21
|
+
tbl.print " create_table #{remove_prefix_and_suffix(table).inspect}"
|
22
|
+
tbl.print ", force: true do |t|"
|
23
|
+
|
24
|
+
# ALIASES
|
25
|
+
if (aliases = definition.aliases).present?
|
26
|
+
tbl.puts
|
27
|
+
|
28
|
+
aliases.each do |tbl_alias|
|
29
|
+
tbl.puts " t.alias #{tbl_alias.name.inspect}, #{format_attribute(tbl_alias.attributes)}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# MAPPINGS
|
34
|
+
if (mappings = definition.mappings).present?
|
35
|
+
tbl.puts
|
36
|
+
|
37
|
+
mappings.each do |mapping|
|
38
|
+
tbl.print " t.mapping #{mapping.name.inspect}, :#{mapping.type}"
|
39
|
+
|
40
|
+
if mapping.attributes.present?
|
41
|
+
if nested_blocks && mapping.attributes.count > 1
|
42
|
+
tbl.print " do |m|"
|
43
|
+
tbl.puts
|
44
|
+
mapping.attributes.each do |key, value|
|
45
|
+
tbl.print " m.#{key} = #{format_attribute(value, true)}"
|
46
|
+
tbl.puts
|
47
|
+
end
|
48
|
+
tbl.print " end"
|
49
|
+
else
|
50
|
+
tbl.print ", #{format_attribute(mapping.attributes)}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
tbl.puts
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# SETTINGS
|
58
|
+
if (settings = definition.settings).present?
|
59
|
+
tbl.puts
|
60
|
+
|
61
|
+
settings.each do |setting|
|
62
|
+
tbl.print " t.setting #{setting.name.inspect}"
|
63
|
+
|
64
|
+
if nested_blocks && setting.value.is_a?(Hash) && setting.value.count > 1
|
65
|
+
tbl.print " do |s|"
|
66
|
+
tbl.puts
|
67
|
+
setting.value.each do |key, value|
|
68
|
+
tbl.print " s.#{key} = #{format_attribute(value, true)}"
|
69
|
+
tbl.puts
|
70
|
+
end
|
71
|
+
tbl.print " end"
|
72
|
+
else
|
73
|
+
tbl.print ", #{format_attribute(setting.value)}"
|
74
|
+
end
|
75
|
+
tbl.puts
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
tbl.puts " end"
|
80
|
+
tbl.puts
|
81
|
+
|
82
|
+
tbl.rewind
|
83
|
+
stream.print tbl.read
|
84
|
+
rescue => e
|
85
|
+
stream.puts "# Could not dump table #{table.inspect} because of following #{e.class}"
|
86
|
+
stream.puts "# #{e.message}"
|
87
|
+
stream.puts
|
88
|
+
ensure
|
89
|
+
self.table_name = nil
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def format_attribute(attribute, nested = false)
|
94
|
+
case attribute
|
95
|
+
when Array
|
96
|
+
"[#{attribute.map { |value| format_attribute(value) }.join(', ')}]"
|
97
|
+
when Hash
|
98
|
+
if nested
|
99
|
+
"{ #{format_attribute(attribute)} }"
|
100
|
+
else
|
101
|
+
attribute.map { |key, value| "#{key}: #{format_attribute(value, true)}" }.join(', ')
|
102
|
+
end
|
103
|
+
else
|
104
|
+
attribute.inspect
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|