ruby_event_store-active_record 3.0.1 → 3.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/lib/ruby_event_store/active_record/generators/event_id_index_migration_generator.rb +6 -21
- data/lib/ruby_event_store/active_record/generators/foreign_key_on_event_id_migration_generator.rb +3 -21
- data/lib/ruby_event_store/active_record/generators/migration_generator.rb +2 -20
- data/lib/ruby_event_store/active_record/generators/migration_generator_methods.rb +29 -0
- data/lib/ruby_event_store/active_record/generators/rails_event_id_index_migration_generator.rb +2 -10
- data/lib/ruby_event_store/active_record/generators/rails_foreign_key_on_event_id_migration_generator.rb +5 -17
- data/lib/ruby_event_store/active_record/generators/rails_generator_methods.rb +21 -0
- data/lib/ruby_event_store/active_record/generators/rails_migration_generator.rb +2 -12
- data/lib/ruby_event_store/active_record/generators/rails_stream_id_index_migration_generator.rb +36 -0
- data/lib/ruby_event_store/active_record/generators/rails_valid_at_index_migration_generator.rb +10 -10
- data/lib/ruby_event_store/active_record/generators/stream_id_index_migration_generator.rb +32 -0
- data/lib/ruby_event_store/active_record/generators/templates/add_stream_id_index_to_event_store_events_in_streams_template.erb +9 -0
- data/lib/ruby_event_store/active_record/generators/templates/add_valid_at_index_to_event_store_events_template.erb +4 -9
- data/lib/ruby_event_store/active_record/generators/templates/create_event_store_events_template.erb +2 -0
- data/lib/ruby_event_store/active_record/generators/templates/mysql/add_stream_id_index_to_event_store_events_in_streams_template.erb +10 -0
- data/lib/ruby_event_store/active_record/generators/templates/mysql/add_valid_at_index_to_event_store_events_template.erb +11 -0
- data/lib/ruby_event_store/active_record/generators/templates/mysql/create_event_store_events_template.erb +2 -0
- data/lib/ruby_event_store/active_record/generators/templates/postgres/add_stream_id_index_to_event_store_events_in_streams_template.erb +12 -0
- data/lib/ruby_event_store/active_record/generators/templates/postgres/add_valid_at_index_to_event_store_events_template.erb +13 -0
- data/lib/ruby_event_store/active_record/generators/templates/postgres/create_event_store_events_template.erb +2 -2
- data/lib/ruby_event_store/active_record/generators/valid_at_index_migration_generator.rb +9 -25
- data/lib/ruby_event_store/active_record/tasks/migration_tasks.rake +17 -2
- data/lib/ruby_event_store/active_record/version.rb +1 -1
- data/lib/ruby_event_store/active_record.rb +4 -0
- metadata +14 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ace3f93a084a58fe640439c6d9226ee1881df6b48780e72a2a60a45b74131617
|
|
4
|
+
data.tar.gz: afb4cc25690692688c950dba6ef4218b6dc5ca8e9b6a48c99aee27de7d860cf3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a48f212dbad8fb279fbc2ea8e59c33ed408a123b69475ca7f2147393144229efb8d085ae5468b217ee6db9debe7f2b047bd199d610be0f1b9efe0f3065d74924
|
|
7
|
+
data.tar.gz: 8839101a35c2715434511fde00b4dcef0b46162e30e2d5cbdbe1b1fa8ffc43a1165d186ec1c120d7f16510fee476bf423d7f006e0d49f79f82578be1cf6290f9
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
module RubyEventStore
|
|
4
4
|
module ActiveRecord
|
|
5
5
|
class EventIdIndexMigrationGenerator
|
|
6
|
+
include MigrationGeneratorMethods
|
|
7
|
+
|
|
6
8
|
def call(migration_path)
|
|
7
9
|
path, content = generate(migration_path)
|
|
8
10
|
File.write(path, content)
|
|
@@ -15,28 +17,11 @@ module RubyEventStore
|
|
|
15
17
|
|
|
16
18
|
private
|
|
17
19
|
|
|
18
|
-
def absolute_path(path)
|
|
19
|
-
File.expand_path(path, __dir__)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
20
|
def migration_code
|
|
23
|
-
migration_template
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
ERB.new(
|
|
28
|
-
File.read(
|
|
29
|
-
File.join(absolute_path("./templates"), "add_event_id_index_to_event_store_events_in_streams_template.erb"),
|
|
30
|
-
),
|
|
31
|
-
)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def migration_version
|
|
35
|
-
::ActiveRecord::Migration.current_version
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def timestamp
|
|
39
|
-
Time.now.strftime("%Y%m%d%H%M%S")
|
|
21
|
+
migration_template(
|
|
22
|
+
absolute_path("./templates"),
|
|
23
|
+
"add_event_id_index_to_event_store_events_in_streams",
|
|
24
|
+
).result_with_hash(migration_version: migration_version)
|
|
40
25
|
end
|
|
41
26
|
|
|
42
27
|
def build_path(migration_path)
|
data/lib/ruby_event_store/active_record/generators/foreign_key_on_event_id_migration_generator.rb
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
module RubyEventStore
|
|
4
4
|
module ActiveRecord
|
|
5
5
|
class ForeignKeyOnEventIdMigrationGenerator
|
|
6
|
+
include MigrationGeneratorMethods
|
|
7
|
+
|
|
6
8
|
def call(database_adapter, migration_path)
|
|
7
9
|
generate(database_adapter, migration_path).each do |path, content|
|
|
8
10
|
File.write(path, content)
|
|
@@ -33,34 +35,14 @@ module RubyEventStore
|
|
|
33
35
|
end
|
|
34
36
|
end
|
|
35
37
|
|
|
36
|
-
def absolute_path(path)
|
|
37
|
-
File.expand_path(path, __dir__)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
38
|
def migration_code(database_adapter, migration_name)
|
|
41
39
|
migration_template(template_root(database_adapter), migration_name).result_with_hash(
|
|
42
40
|
migration_version: migration_version,
|
|
43
41
|
)
|
|
44
42
|
end
|
|
45
43
|
|
|
46
|
-
def migration_template(template_root, name)
|
|
47
|
-
ERB.new(File.read(File.join(template_root, "#{name}_template.erb")))
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def template_root(database_adapter)
|
|
51
|
-
absolute_path("./templates/#{database_adapter.template_directory}")
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def migration_version
|
|
55
|
-
::ActiveRecord::Migration.current_version
|
|
56
|
-
end
|
|
57
|
-
|
|
58
44
|
def build_path(migration_path, migration_name, time)
|
|
59
|
-
File.join("#{migration_path}", "#{
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def migration_verion_number(time)
|
|
63
|
-
time.strftime("%Y%m%d%H%M%S")
|
|
45
|
+
File.join("#{migration_path}", "#{timestamp(time)}_#{migration_name}.rb")
|
|
64
46
|
end
|
|
65
47
|
end
|
|
66
48
|
end
|
|
@@ -5,6 +5,8 @@ require "erb"
|
|
|
5
5
|
module RubyEventStore
|
|
6
6
|
module ActiveRecord
|
|
7
7
|
class MigrationGenerator
|
|
8
|
+
include MigrationGeneratorMethods
|
|
9
|
+
|
|
8
10
|
def call(database_adapter, migration_path)
|
|
9
11
|
path, content = generate(database_adapter, migration_path)
|
|
10
12
|
File.write(path, content)
|
|
@@ -17,10 +19,6 @@ module RubyEventStore
|
|
|
17
19
|
|
|
18
20
|
private
|
|
19
21
|
|
|
20
|
-
def absolute_path(path)
|
|
21
|
-
File.expand_path(path, __dir__)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
22
|
def migration_code(database_adapter)
|
|
25
23
|
migration_template(template_root(database_adapter), "create_event_store_events").result_with_hash(
|
|
26
24
|
migration_version: migration_version,
|
|
@@ -28,22 +26,6 @@ module RubyEventStore
|
|
|
28
26
|
)
|
|
29
27
|
end
|
|
30
28
|
|
|
31
|
-
def template_root(database_adapter)
|
|
32
|
-
absolute_path("./templates/#{database_adapter.template_directory}")
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def migration_template(template_root, name)
|
|
36
|
-
ERB.new(File.read(File.join(template_root, "#{name}_template.erb")))
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def migration_version
|
|
40
|
-
::ActiveRecord::Migration.current_version
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def timestamp
|
|
44
|
-
Time.now.strftime("%Y%m%d%H%M%S")
|
|
45
|
-
end
|
|
46
|
-
|
|
47
29
|
def build_path(migration_path)
|
|
48
30
|
File.join("#{migration_path}", "#{timestamp}_create_event_store_events.rb")
|
|
49
31
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RubyEventStore
|
|
4
|
+
module ActiveRecord
|
|
5
|
+
module MigrationGeneratorMethods
|
|
6
|
+
private
|
|
7
|
+
|
|
8
|
+
def absolute_path(path)
|
|
9
|
+
File.expand_path(path, __dir__)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def migration_template(template_root, name)
|
|
13
|
+
ERB.new(File.read(File.join(template_root, "#{name}_template.erb")))
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def template_root(database_adapter)
|
|
17
|
+
absolute_path("./templates/#{database_adapter.template_directory}")
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def migration_version
|
|
21
|
+
::ActiveRecord::Migration.current_version
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def timestamp(time = Time.now)
|
|
25
|
+
time.strftime("%Y%m%d%H%M%S")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/ruby_event_store/active_record/generators/rails_event_id_index_migration_generator.rb
CHANGED
|
@@ -16,20 +16,12 @@ if defined?(Rails::Generators::Base)
|
|
|
16
16
|
|
|
17
17
|
source_root File.expand_path(File.join(File.dirname(__FILE__), "../generators/templates"))
|
|
18
18
|
|
|
19
|
+
include RailsGeneratorMethods
|
|
20
|
+
|
|
19
21
|
def create_migration
|
|
20
22
|
template "add_event_id_index_to_event_store_events_in_streams_template.erb",
|
|
21
23
|
"db/migrate/#{timestamp}_add_event_id_index_to_event_store_events_in_streams.rb"
|
|
22
24
|
end
|
|
23
|
-
|
|
24
|
-
private
|
|
25
|
-
|
|
26
|
-
def migration_version
|
|
27
|
-
::ActiveRecord::Migration.current_version
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def timestamp
|
|
31
|
-
Time.now.strftime("%Y%m%d%H%M%S")
|
|
32
|
-
end
|
|
33
25
|
end
|
|
34
26
|
end
|
|
35
27
|
end
|
|
@@ -24,33 +24,21 @@ if defined?(Rails::Generators::Base)
|
|
|
24
24
|
raise Error, e.message
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
include RailsGeneratorMethods
|
|
28
|
+
|
|
27
29
|
def create_migration
|
|
28
30
|
case @database_adapter
|
|
29
31
|
when DatabaseAdapter::PostgreSQL
|
|
30
32
|
time = Time.now
|
|
31
33
|
template "#{@database_adapter.template_directory}add_foreign_key_on_event_id_to_event_store_events_in_streams_template.erb",
|
|
32
|
-
"db/migrate/#{
|
|
34
|
+
"db/migrate/#{timestamp(time)}_add_foreign_key_on_event_id_to_event_store_events_in_streams.rb"
|
|
33
35
|
template "#{@database_adapter.template_directory}validate_add_foreign_key_on_event_id_to_event_store_events_in_streams_template.erb",
|
|
34
|
-
"db/migrate/#{
|
|
36
|
+
"db/migrate/#{timestamp(time + 1)}_validate_add_foreign_key_on_event_id_to_event_store_events_in_streams.rb"
|
|
35
37
|
else
|
|
36
38
|
template "#{@database_adapter.template_directory}add_foreign_key_on_event_id_to_event_store_events_in_streams_template.erb",
|
|
37
|
-
"db/migrate/#{
|
|
39
|
+
"db/migrate/#{timestamp}_add_foreign_key_on_event_id_to_event_store_events_in_streams.rb"
|
|
38
40
|
end
|
|
39
41
|
end
|
|
40
|
-
|
|
41
|
-
private
|
|
42
|
-
|
|
43
|
-
def adapter_name
|
|
44
|
-
::ActiveRecord::Base.connection.adapter_name
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def migration_version
|
|
48
|
-
::ActiveRecord::Migration.current_version
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def migration_verion_number(time)
|
|
52
|
-
time.strftime("%Y%m%d%H%M%S")
|
|
53
|
-
end
|
|
54
42
|
end
|
|
55
43
|
end
|
|
56
44
|
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RubyEventStore
|
|
4
|
+
module ActiveRecord
|
|
5
|
+
module RailsGeneratorMethods
|
|
6
|
+
private
|
|
7
|
+
|
|
8
|
+
def adapter_name
|
|
9
|
+
::ActiveRecord::Base.connection.adapter_name
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def migration_version
|
|
13
|
+
::ActiveRecord::Migration.current_version
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def timestamp(time = Time.now)
|
|
17
|
+
time.strftime("%Y%m%d%H%M%S")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -33,6 +33,8 @@ module RubyEventStore
|
|
|
33
33
|
"Invalid value for --data-type option. Supported for options are: #{DatabaseAdapter.from_string(adapter_name).supported_data_types.join(", ")}."
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
+
include RailsGeneratorMethods
|
|
37
|
+
|
|
36
38
|
def create_migration
|
|
37
39
|
template "#{@database_adapter.template_directory}create_event_store_events_template.erb",
|
|
38
40
|
"db/migrate/#{timestamp}_create_event_store_events.rb"
|
|
@@ -43,18 +45,6 @@ module RubyEventStore
|
|
|
43
45
|
def data_type
|
|
44
46
|
options.fetch("data_type")
|
|
45
47
|
end
|
|
46
|
-
|
|
47
|
-
def adapter_name
|
|
48
|
-
::ActiveRecord::Base.connection.adapter_name
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def migration_version
|
|
52
|
-
::ActiveRecord::Migration.current_version
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def timestamp
|
|
56
|
-
Time.now.strftime("%Y%m%d%H%M%S")
|
|
57
|
-
end
|
|
58
48
|
end
|
|
59
49
|
end
|
|
60
50
|
end if defined?(Rails::Generators::Base)
|
data/lib/ruby_event_store/active_record/generators/rails_stream_id_index_migration_generator.rb
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
begin
|
|
4
|
+
require "rails/generators"
|
|
5
|
+
rescue LoadError
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
if defined?(Rails::Generators::Base)
|
|
9
|
+
module RubyEventStore
|
|
10
|
+
module ActiveRecord
|
|
11
|
+
class RailsStreamIdIndexMigrationGenerator < Rails::Generators::Base
|
|
12
|
+
class Error < Thor::Error
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
namespace "ruby_event_store:active_record:migration_for_missing_stream_id_index"
|
|
16
|
+
|
|
17
|
+
source_root File.expand_path(File.join(File.dirname(__FILE__), "../generators/templates"))
|
|
18
|
+
|
|
19
|
+
def initialize(*args)
|
|
20
|
+
super
|
|
21
|
+
|
|
22
|
+
@database_adapter = DatabaseAdapter.from_string(adapter_name)
|
|
23
|
+
rescue UnsupportedAdapter => e
|
|
24
|
+
raise Error, e.message
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
include RailsGeneratorMethods
|
|
28
|
+
|
|
29
|
+
def create_migration
|
|
30
|
+
template "#{@database_adapter.template_directory}add_stream_id_index_to_event_store_events_in_streams_template.erb",
|
|
31
|
+
"db/migrate/#{timestamp}_add_stream_id_index_to_event_store_events_in_streams.rb"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
data/lib/ruby_event_store/active_record/generators/rails_valid_at_index_migration_generator.rb
CHANGED
|
@@ -16,19 +16,19 @@ if defined?(Rails::Generators::Base)
|
|
|
16
16
|
|
|
17
17
|
source_root File.expand_path(File.join(File.dirname(__FILE__), "../generators/templates"))
|
|
18
18
|
|
|
19
|
-
def
|
|
20
|
-
|
|
21
|
-
"db/migrate/#{timestamp}_add_valid_at_index_to_event_store_events.rb"
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
private
|
|
19
|
+
def initialize(*args)
|
|
20
|
+
super
|
|
25
21
|
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
@database_adapter = DatabaseAdapter.from_string(adapter_name)
|
|
23
|
+
rescue UnsupportedAdapter => e
|
|
24
|
+
raise Error, e.message
|
|
28
25
|
end
|
|
29
26
|
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
include RailsGeneratorMethods
|
|
28
|
+
|
|
29
|
+
def create_migration
|
|
30
|
+
template "#{@database_adapter.template_directory}add_valid_at_index_to_event_store_events_template.erb",
|
|
31
|
+
"db/migrate/#{timestamp}_add_valid_at_index_to_event_store_events.rb"
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RubyEventStore
|
|
4
|
+
module ActiveRecord
|
|
5
|
+
class StreamIdIndexMigrationGenerator
|
|
6
|
+
|
|
7
|
+
include MigrationGeneratorMethods
|
|
8
|
+
|
|
9
|
+
def call(database_adapter, migration_path)
|
|
10
|
+
path, content = generate(database_adapter, migration_path)
|
|
11
|
+
File.write(path, content)
|
|
12
|
+
path
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def generate(database_adapter, migration_path)
|
|
16
|
+
[build_path(migration_path), migration_code(database_adapter)]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def migration_code(database_adapter)
|
|
22
|
+
migration_template(template_root(database_adapter), "add_stream_id_index_to_event_store_events_in_streams").result_with_hash(
|
|
23
|
+
migration_version: migration_version,
|
|
24
|
+
)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def build_path(migration_path)
|
|
28
|
+
File.join("#{migration_path}", "#{timestamp}_add_stream_id_index_to_event_store_events_in_streams.rb")
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class AddStreamIdIndexToEventStoreEventsInStreams < ActiveRecord::Migration[<%= migration_version %>]
|
|
4
|
+
def change
|
|
5
|
+
add_index :event_store_events_in_streams, [:stream, :id],
|
|
6
|
+
name: "index_event_store_events_in_streams_on_stream_and_id",
|
|
7
|
+
if_not_exists: true
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
class AddValidAtIndexToEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
4
|
-
disable_ddl_transaction!
|
|
5
|
-
|
|
6
4
|
def change
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
name: "index_event_store_events_on_as_of",
|
|
12
|
-
algorithm: :concurrently
|
|
13
|
-
end
|
|
5
|
+
add_index :event_store_events,
|
|
6
|
+
"COALESCE(valid_at, created_at)",
|
|
7
|
+
name: "index_event_store_events_on_as_of",
|
|
8
|
+
if_not_exists: true
|
|
14
9
|
end
|
|
15
10
|
end
|
data/lib/ruby_event_store/active_record/generators/templates/create_event_store_events_template.erb
CHANGED
|
@@ -9,6 +9,7 @@ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
|
9
9
|
t.binary :data, null: false
|
|
10
10
|
t.datetime :created_at, null: false, precision: 6, index: true
|
|
11
11
|
t.datetime :valid_at, null: true, precision: 6, index: true
|
|
12
|
+
t.index "COALESCE(valid_at, created_at)", name: "index_event_store_events_on_as_of"
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
create_table(:event_store_events_in_streams, force: false) do |t|
|
|
@@ -19,6 +20,7 @@ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
|
19
20
|
|
|
20
21
|
t.index [:stream, :position], unique: true
|
|
21
22
|
t.index [:stream, :event_id], unique: true
|
|
23
|
+
t.index [:stream, :id], name: "index_event_store_events_in_streams_on_stream_and_id"
|
|
22
24
|
end
|
|
23
25
|
end
|
|
24
26
|
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class AddStreamIdIndexToEventStoreEventsInStreams < ActiveRecord::Migration[<%= migration_version %>]
|
|
4
|
+
def change
|
|
5
|
+
add_index :event_store_events_in_streams, [:stream, :id],
|
|
6
|
+
name: "index_event_store_events_in_streams_on_stream_and_id",
|
|
7
|
+
algorithm: :inplace,
|
|
8
|
+
if_not_exists: true
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class AddValidAtIndexToEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
4
|
+
def change
|
|
5
|
+
add_index :event_store_events,
|
|
6
|
+
"(COALESCE(valid_at, created_at))",
|
|
7
|
+
name: "index_event_store_events_on_as_of",
|
|
8
|
+
algorithm: :inplace,
|
|
9
|
+
if_not_exists: true
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -9,6 +9,7 @@ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
|
9
9
|
t.<%= data_type %> :data, null: false
|
|
10
10
|
t.datetime :created_at, null: false, precision: 6, index: true
|
|
11
11
|
t.datetime :valid_at, null: true, precision: 6, index: true
|
|
12
|
+
t.index "(COALESCE(valid_at, created_at))", name: "index_event_store_events_on_as_of"
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
create_table(:event_store_events_in_streams, force: false) do |t|
|
|
@@ -19,6 +20,7 @@ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
|
19
20
|
|
|
20
21
|
t.index [:stream, :position], unique: true
|
|
21
22
|
t.index [:stream, :event_id], unique: true
|
|
23
|
+
t.index [:stream, :id], name: "index_event_store_events_in_streams_on_stream_and_id"
|
|
22
24
|
end
|
|
23
25
|
end
|
|
24
26
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class AddStreamIdIndexToEventStoreEventsInStreams < ActiveRecord::Migration[<%= migration_version %>]
|
|
4
|
+
disable_ddl_transaction!
|
|
5
|
+
|
|
6
|
+
def change
|
|
7
|
+
add_index :event_store_events_in_streams, [:stream, :id],
|
|
8
|
+
name: "index_event_store_events_in_streams_on_stream_and_id",
|
|
9
|
+
algorithm: :concurrently,
|
|
10
|
+
if_not_exists: true
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class AddValidAtIndexToEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
4
|
+
disable_ddl_transaction!
|
|
5
|
+
|
|
6
|
+
def change
|
|
7
|
+
add_index :event_store_events,
|
|
8
|
+
"COALESCE(valid_at, created_at)",
|
|
9
|
+
name: "index_event_store_events_on_as_of",
|
|
10
|
+
algorithm: :concurrently,
|
|
11
|
+
if_not_exists: true
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -9,10 +9,9 @@ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
|
9
9
|
t.<%= data_type %> :data, null: false
|
|
10
10
|
t.datetime :created_at, null: false, type: :timestamp, precision: 6, index: true
|
|
11
11
|
t.datetime :valid_at, null: true, type: :timestamp, precision: 6, index: true
|
|
12
|
+
t.index "COALESCE(valid_at, created_at)", name: "index_event_store_events_on_as_of"
|
|
12
13
|
end
|
|
13
14
|
|
|
14
|
-
add_index :event_store_events, "COALESCE(valid_at, created_at)", name: "index_event_store_events_on_as_of"
|
|
15
|
-
|
|
16
15
|
create_table(:event_store_events_in_streams, id: :bigserial, force: false) do |t|
|
|
17
16
|
t.string :stream, null: false
|
|
18
17
|
t.integer :position, null: true
|
|
@@ -21,6 +20,7 @@ class CreateEventStoreEvents < ActiveRecord::Migration[<%= migration_version %>]
|
|
|
21
20
|
|
|
22
21
|
t.index [:stream, :position], unique: true
|
|
23
22
|
t.index [:stream, :event_id], unique: true
|
|
23
|
+
t.index [:stream, :id], name: "index_event_store_events_in_streams_on_stream_and_id"
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
end
|
|
@@ -3,42 +3,26 @@
|
|
|
3
3
|
module RubyEventStore
|
|
4
4
|
module ActiveRecord
|
|
5
5
|
class ValidAtIndexMigrationGenerator
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
include MigrationGeneratorMethods
|
|
7
|
+
|
|
8
|
+
def call(database_adapter, migration_path)
|
|
9
|
+
path, content = generate(database_adapter, migration_path)
|
|
8
10
|
File.write(path, content)
|
|
9
11
|
path
|
|
10
12
|
end
|
|
11
13
|
|
|
12
|
-
def generate(migration_path)
|
|
13
|
-
[build_path(migration_path), migration_code]
|
|
14
|
+
def generate(database_adapter, migration_path)
|
|
15
|
+
[build_path(migration_path), migration_code(database_adapter)]
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
private
|
|
17
19
|
|
|
18
|
-
def
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def migration_code
|
|
23
|
-
migration_template.result_with_hash(migration_version: migration_version)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def migration_template
|
|
27
|
-
ERB.new(
|
|
28
|
-
File.read(
|
|
29
|
-
File.join(absolute_path("./templates"), "add_valid_at_index_to_event_store_events_template.erb"),
|
|
30
|
-
),
|
|
20
|
+
def migration_code(database_adapter)
|
|
21
|
+
migration_template(template_root(database_adapter), "add_valid_at_index_to_event_store_events").result_with_hash(
|
|
22
|
+
migration_version: migration_version,
|
|
31
23
|
)
|
|
32
24
|
end
|
|
33
25
|
|
|
34
|
-
def migration_version
|
|
35
|
-
::ActiveRecord::Migration.current_version
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def timestamp
|
|
39
|
-
Time.now.strftime("%Y%m%d%H%M%S")
|
|
40
|
-
end
|
|
41
|
-
|
|
42
26
|
def build_path(migration_path)
|
|
43
27
|
File.join("#{migration_path}", "#{timestamp}_add_valid_at_index_to_event_store_events.rb")
|
|
44
28
|
end
|
|
@@ -28,7 +28,7 @@ task "db:migrations:add_valid_at_index" do
|
|
|
28
28
|
task = MigrationTask.new("db:migrations:add_valid_at_index")
|
|
29
29
|
task.establish_connection
|
|
30
30
|
|
|
31
|
-
path = RubyEventStore::ActiveRecord::ValidAtIndexMigrationGenerator.new.call(task.migration_path)
|
|
31
|
+
path = RubyEventStore::ActiveRecord::ValidAtIndexMigrationGenerator.new.call(task.adapter_type, task.migration_path)
|
|
32
32
|
|
|
33
33
|
puts "Migration file created #{path}"
|
|
34
34
|
end
|
|
@@ -44,6 +44,17 @@ task "db:migrations:add_foreign_key_on_event_id" do
|
|
|
44
44
|
puts "Migration file created #{path}"
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
+
desc "Generate migration for adding stream id index"
|
|
48
|
+
task "db:migrations:add_stream_id_index" do
|
|
49
|
+
task = MigrationTask.new("db:migrations:add_stream_id_index")
|
|
50
|
+
task.establish_connection
|
|
51
|
+
|
|
52
|
+
path =
|
|
53
|
+
RubyEventStore::ActiveRecord::StreamIdIndexMigrationGenerator.new.call(task.adapter, task.migration_path)
|
|
54
|
+
|
|
55
|
+
puts "Migration file created #{path}"
|
|
56
|
+
end
|
|
57
|
+
|
|
47
58
|
class MigrationTask
|
|
48
59
|
def initialize(
|
|
49
60
|
task,
|
|
@@ -67,7 +78,11 @@ class MigrationTask
|
|
|
67
78
|
RubyEventStore::ActiveRecord::DatabaseAdapter.from_string(::ActiveRecord::Base.connection.adapter_name, data_type)
|
|
68
79
|
end
|
|
69
80
|
|
|
81
|
+
def adapter_type
|
|
82
|
+
RubyEventStore::ActiveRecord::DatabaseAdapter.from_string(::ActiveRecord::Base.connection.adapter_name)
|
|
83
|
+
end
|
|
84
|
+
|
|
70
85
|
def migration_path
|
|
71
86
|
@migration_path || "db/migrate"
|
|
72
87
|
end
|
|
73
|
-
end
|
|
88
|
+
end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative "active_record/generators/database_adapter"
|
|
4
|
+
require_relative "active_record/generators/migration_generator_methods"
|
|
5
|
+
require_relative "active_record/generators/rails_generator_methods"
|
|
4
6
|
require_relative "active_record/generators/migration_generator"
|
|
5
7
|
require_relative "active_record/generators/rails_migration_generator"
|
|
6
8
|
require_relative "active_record/generators/event_id_index_migration_generator"
|
|
@@ -9,6 +11,8 @@ require_relative "active_record/generators/foreign_key_on_event_id_migration_gen
|
|
|
9
11
|
require_relative "active_record/generators/rails_foreign_key_on_event_id_migration_generator"
|
|
10
12
|
require_relative "active_record/generators/valid_at_index_migration_generator"
|
|
11
13
|
require_relative "active_record/generators/rails_valid_at_index_migration_generator"
|
|
14
|
+
require_relative "active_record/generators/stream_id_index_migration_generator"
|
|
15
|
+
require_relative "active_record/generators/rails_stream_id_index_migration_generator"
|
|
12
16
|
require_relative "active_record/with_default_models"
|
|
13
17
|
require_relative "active_record/with_abstract_base_class"
|
|
14
18
|
require_relative "active_record/event_repository"
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ruby_event_store-active_record
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.0
|
|
4
|
+
version: 3.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Arkency
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 3.0
|
|
18
|
+
version: 3.1.0
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 3.0
|
|
25
|
+
version: 3.1.0
|
|
26
26
|
- !ruby/object:Gem::Dependency
|
|
27
27
|
name: activerecord
|
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -59,17 +59,26 @@ files:
|
|
|
59
59
|
- lib/ruby_event_store/active_record/generators/event_id_index_migration_generator.rb
|
|
60
60
|
- lib/ruby_event_store/active_record/generators/foreign_key_on_event_id_migration_generator.rb
|
|
61
61
|
- lib/ruby_event_store/active_record/generators/migration_generator.rb
|
|
62
|
+
- lib/ruby_event_store/active_record/generators/migration_generator_methods.rb
|
|
62
63
|
- lib/ruby_event_store/active_record/generators/rails_event_id_index_migration_generator.rb
|
|
63
64
|
- lib/ruby_event_store/active_record/generators/rails_foreign_key_on_event_id_migration_generator.rb
|
|
65
|
+
- lib/ruby_event_store/active_record/generators/rails_generator_methods.rb
|
|
64
66
|
- lib/ruby_event_store/active_record/generators/rails_migration_generator.rb
|
|
67
|
+
- lib/ruby_event_store/active_record/generators/rails_stream_id_index_migration_generator.rb
|
|
65
68
|
- lib/ruby_event_store/active_record/generators/rails_valid_at_index_migration_generator.rb
|
|
69
|
+
- lib/ruby_event_store/active_record/generators/stream_id_index_migration_generator.rb
|
|
66
70
|
- lib/ruby_event_store/active_record/generators/templates/add_event_id_index_to_event_store_events_in_streams_template.erb
|
|
67
71
|
- lib/ruby_event_store/active_record/generators/templates/add_foreign_key_on_event_id_to_event_store_events_in_streams_template.erb
|
|
72
|
+
- lib/ruby_event_store/active_record/generators/templates/add_stream_id_index_to_event_store_events_in_streams_template.erb
|
|
68
73
|
- lib/ruby_event_store/active_record/generators/templates/add_valid_at_index_to_event_store_events_template.erb
|
|
69
74
|
- lib/ruby_event_store/active_record/generators/templates/create_event_store_events_template.erb
|
|
70
75
|
- lib/ruby_event_store/active_record/generators/templates/mysql/add_foreign_key_on_event_id_to_event_store_events_in_streams_template.erb
|
|
76
|
+
- lib/ruby_event_store/active_record/generators/templates/mysql/add_stream_id_index_to_event_store_events_in_streams_template.erb
|
|
77
|
+
- lib/ruby_event_store/active_record/generators/templates/mysql/add_valid_at_index_to_event_store_events_template.erb
|
|
71
78
|
- lib/ruby_event_store/active_record/generators/templates/mysql/create_event_store_events_template.erb
|
|
72
79
|
- lib/ruby_event_store/active_record/generators/templates/postgres/add_foreign_key_on_event_id_to_event_store_events_in_streams_template.erb
|
|
80
|
+
- lib/ruby_event_store/active_record/generators/templates/postgres/add_stream_id_index_to_event_store_events_in_streams_template.erb
|
|
81
|
+
- lib/ruby_event_store/active_record/generators/templates/postgres/add_valid_at_index_to_event_store_events_template.erb
|
|
73
82
|
- lib/ruby_event_store/active_record/generators/templates/postgres/create_event_store_events_template.erb
|
|
74
83
|
- lib/ruby_event_store/active_record/generators/templates/postgres/validate_add_foreign_key_on_event_id_to_event_store_events_in_streams_template.erb
|
|
75
84
|
- lib/ruby_event_store/active_record/generators/valid_at_index_migration_generator.rb
|
|
@@ -98,14 +107,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
98
107
|
requirements:
|
|
99
108
|
- - ">="
|
|
100
109
|
- !ruby/object:Gem::Version
|
|
101
|
-
version: '
|
|
110
|
+
version: '3.3'
|
|
102
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
103
112
|
requirements:
|
|
104
113
|
- - ">="
|
|
105
114
|
- !ruby/object:Gem::Version
|
|
106
115
|
version: '0'
|
|
107
116
|
requirements: []
|
|
108
|
-
rubygems_version: 3.
|
|
117
|
+
rubygems_version: 3.6.9
|
|
109
118
|
specification_version: 4
|
|
110
119
|
summary: Persistent event repository implementation for RubyEventStore based on ActiveRecord
|
|
111
120
|
test_files: []
|