db_blaster 0.1.6 → 0.1.7
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/db/migrate/20210908214439_add_last_published_id.rb +8 -0
- data/lib/db_blaster/finder_sql.rb +11 -1
- data/lib/db_blaster/publish_source_table.rb +2 -1
- data/lib/db_blaster/source_tables_schema_builder.rb +32 -0
- data/lib/db_blaster/version.rb +1 -1
- data/lib/db_blaster.rb +1 -0
- data/lib/tasks/db_blaster_tasks.rake +13 -4
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21570da32145568b451fa60f6e48f2dbf889f30dcdb6baed94b51043d4e1d46e
|
4
|
+
data.tar.gz: 198f2fa9de6915d44e7c7717ed905a8357b65a3a2b10ba841b46b96e494016c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bfe0f16131ce6e7359129da73e24d51e8499fdbeb40ecc958d422cdb968b2ffcd944e768352d8495350fe9109f706d003158304c4b3ed058c0d71775bc15d9ef
|
7
|
+
data.tar.gz: 86508a7a04b99cf10d92ceb08bcb4259fb985b727229eda85d9cce191ea5724a93819fc45afe60f24b29dddfad8bf0336a92d1125eb925947c6fb09f6063dd41
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Adding last_published_id to avoid dupes in selecting sourcetables
|
4
|
+
class AddLastPublishedId < ActiveRecord::Migration[6.1]
|
5
|
+
def change
|
6
|
+
add_column :db_blaster_source_tables, :last_published_id, :string, default: '0'
|
7
|
+
end
|
8
|
+
end
|
@@ -17,16 +17,26 @@ module DbBlaster
|
|
17
17
|
"SELECT * FROM #{source_table.name} #{where} ORDER BY updated_at ASC LIMIT #{source_table.batch_size}"
|
18
18
|
end
|
19
19
|
|
20
|
+
# if we just use updated_at > from_updated_at, it's possible to miss records
|
21
|
+
# that share the same `updated_at`
|
22
|
+
# if we use updated_at >= from_updated_at, we'll get redundant records on every run
|
23
|
+
# settled on the approach below
|
20
24
|
def where
|
21
25
|
return '' unless from_updated_at
|
22
26
|
|
23
27
|
ActiveRecord::Base.sanitize_sql_for_conditions(
|
24
|
-
['WHERE updated_at
|
28
|
+
['WHERE updated_at > :updated_at OR (updated_at = :updated_at AND id <> :updated_id)',
|
29
|
+
{ updated_at: from_updated_at.to_s(:db),
|
30
|
+
updated_id: last_published_id }]
|
25
31
|
)
|
26
32
|
end
|
27
33
|
|
28
34
|
def from_updated_at
|
29
35
|
@from_updated_at ||= source_table.last_published_updated_at
|
30
36
|
end
|
37
|
+
|
38
|
+
def last_published_id
|
39
|
+
@last_published_id ||= source_table.last_published_id
|
40
|
+
end
|
31
41
|
end
|
32
42
|
end
|
@@ -22,7 +22,8 @@ module DbBlaster
|
|
22
22
|
source_table.with_lock do
|
23
23
|
Finder.find(source_table) do |records|
|
24
24
|
BasePublisher.publish(source_table: source_table, records: records, batch_start_time: batch_start_time)
|
25
|
-
source_table.update(last_published_updated_at: records.last['updated_at']
|
25
|
+
source_table.update(last_published_updated_at: records.last['updated_at'],
|
26
|
+
last_published_id: records.last['id'])
|
26
27
|
end
|
27
28
|
end
|
28
29
|
self
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DbBlaster
|
4
|
+
# Builds an array of tables and their columns
|
5
|
+
class SourceTablesSchemaBuilder
|
6
|
+
def self.build_schema
|
7
|
+
new.build_schema
|
8
|
+
end
|
9
|
+
|
10
|
+
def build_schema
|
11
|
+
ActiveRecord::Base.connection.tables.each_with_object({}) do |table_name, hash|
|
12
|
+
unless AvailableTables::SYSTEM_TABLES.include?(table_name)
|
13
|
+
hash[table_name] = build_columns_from_table_name(table_name)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def build_columns_from_table_name(table_name)
|
19
|
+
ActiveRecord::Base.connection.columns(table_name).collect do |column|
|
20
|
+
next if ignored_column?(column.name)
|
21
|
+
|
22
|
+
{ name: column.name,
|
23
|
+
type: column.type,
|
24
|
+
limit: column.limit }
|
25
|
+
end.compact
|
26
|
+
end
|
27
|
+
|
28
|
+
def ignored_column?(column)
|
29
|
+
(DbBlaster.configuration.ignored_column_names || []).include?(column)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/db_blaster/version.rb
CHANGED
data/lib/db_blaster.rb
CHANGED
@@ -15,6 +15,7 @@ require 'db_blaster/publish_source_table'
|
|
15
15
|
require 'db_blaster/chunker'
|
16
16
|
require 'db_blaster/finder_sql'
|
17
17
|
require 'db_blaster/finder'
|
18
|
+
require 'db_blaster/source_tables_schema_builder'
|
18
19
|
|
19
20
|
# Top-level module that serves as an entry point
|
20
21
|
# into the engine gem
|
@@ -1,5 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
|
3
|
+
require 'db_blaster'
|
4
|
+
|
5
|
+
namespace :db_blaster do
|
6
|
+
desc 'generate table schema'
|
7
|
+
task generate_table_schema: :environment do
|
8
|
+
schema_name = 'kcp-api-schema.json'
|
9
|
+
puts "Generating #{schema_name}......."
|
10
|
+
built = DbBlaster::SourceTablesSchemaBuilder.build_schema
|
11
|
+
File.open(schema_name, 'w') { |f| f << built.to_json }
|
12
|
+
puts 'Success!'
|
13
|
+
end
|
14
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db_blaster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Perry Hertler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09-
|
11
|
+
date: 2021-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-s3
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- config/brakeman.ignore
|
132
132
|
- config/routes.rb
|
133
133
|
- db/migrate/20210727222252_create_source_tables.rb
|
134
|
+
- db/migrate/20210908214439_add_last_published_id.rb
|
134
135
|
- lib/db_blaster.rb
|
135
136
|
- lib/db_blaster/available_tables.rb
|
136
137
|
- lib/db_blaster/base_publisher.rb
|
@@ -147,6 +148,7 @@ files:
|
|
147
148
|
- lib/db_blaster/sns_publisher.rb
|
148
149
|
- lib/db_blaster/source_table_configuration.rb
|
149
150
|
- lib/db_blaster/source_table_configuration_builder.rb
|
151
|
+
- lib/db_blaster/source_tables_schema_builder.rb
|
150
152
|
- lib/db_blaster/version.rb
|
151
153
|
- lib/generators/db_blaster/install/install_generator.rb
|
152
154
|
- lib/generators/db_blaster/install/templates/db_blaster_config.rb
|