riverqueue-sequel 0.7.0 → 0.9.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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/driver.rb +19 -38
  3. metadata +3 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be1e2d14a88044372151be6e4847bd9a2de21ba73fd58a20d4734896ede240b7
4
- data.tar.gz: 442331e31b711d7e2697bd0a75bde161a77ef604b26eed70404f5aca3ede4da1
3
+ metadata.gz: a07594185822d015351e14832cda86b12b84e5bf28d52f1ddf73da225f75e45e
4
+ data.tar.gz: 278accc44bd6a2c39d607d04a409f82ce884fa050c71aec284d0a092fc73f33d
5
5
  SHA512:
6
- metadata.gz: cd06a5f8cc1dec3eb84cedc0a97b2dc1faefe36845936c4147b8fd95262ff4885ec8c0e063566ba469cf89c2ff6dd57bf5e5bb89f48117e6e8b849d77ad80198
7
- data.tar.gz: f50260109abb7f2edd09d15ca68edee77c44a0f79570d654d9d4aea522298cf6169d5632fddc983455cd3789e9c3101ee2dd6e0e00ac6f5cb3a1aff08d8c9730
6
+ metadata.gz: 9463fba4c80189c05436bdc9d60cc26a6ca70da878b330c665739e0184607aa0f9ef9836d03074612195288f16151871d73238df94c655f77c94f41949f9a07b
7
+ data.tar.gz: db2850c392accf522cea1da6556e3fdab8e62ae1582f7bb02c4b7bda8502c925603be217189114e4b7912adf84a992484dc275332df7479bcf42f22dda0c5883
data/lib/driver.rb CHANGED
@@ -13,51 +13,27 @@ module River::Driver
13
13
  @db.extension(:pg_json)
14
14
  end
15
15
 
16
- def advisory_lock(key)
17
- @db.fetch("SELECT pg_advisory_xact_lock(?)", key).first
18
- nil
19
- end
20
-
21
- def advisory_lock_try(key)
22
- @db.fetch("SELECT pg_try_advisory_xact_lock(?)", key).first[:pg_try_advisory_xact_lock]
23
- end
24
-
25
16
  def job_get_by_id(id)
26
17
  data_set = @db[:river_job].where(id: id)
27
18
  data_set.first ? to_job_row(data_set.first) : nil
28
19
  end
29
20
 
30
- def job_get_by_kind_and_unique_properties(get_params)
31
- data_set = @db[:river_job].where(kind: get_params.kind)
32
- data_set = data_set.where(::Sequel.lit("tstzrange(?, ?, '[)') @> created_at", get_params.created_at[0], get_params.created_at[1])) if get_params.created_at
33
- data_set = data_set.where(args: get_params.encoded_args) if get_params.encoded_args
34
- data_set = data_set.where(queue: get_params.queue) if get_params.queue
35
- data_set = data_set.where(state: get_params.state) if get_params.state
36
- data_set.first ? to_job_row(data_set.first) : nil
37
- end
38
-
39
21
  def job_insert(insert_params)
40
- to_job_row(@db[:river_job].returning.insert_select(insert_params_to_hash(insert_params)))
22
+ job_insert_many([insert_params]).first
41
23
  end
42
24
 
43
- def job_insert_unique(insert_params, unique_key)
44
- values = @db[:river_job]
25
+ def job_insert_many(insert_params_array)
26
+ @db[:river_job]
45
27
  .insert_conflict(
46
- target: [:kind, :unique_key],
47
- conflict_where: ::Sequel.lit("unique_key IS NOT NULL"),
28
+ target: [:unique_key],
29
+ conflict_where: ::Sequel.lit(
30
+ "unique_key IS NOT NULL AND unique_states IS NOT NULL AND river_job_state_in_bitmask(unique_states, state)"
31
+ ),
48
32
  update: {kind: ::Sequel[:excluded][:kind]}
49
33
  )
50
34
  .returning(::Sequel.lit("*, (xmax != 0) AS unique_skipped_as_duplicate"))
51
- .insert_select(
52
- insert_params_to_hash(insert_params).merge(unique_key: ::Sequel.blob(unique_key))
53
- )
54
-
55
- [to_job_row(values), values[:unique_skipped_as_duplicate]]
56
- end
57
-
58
- def job_insert_many(insert_params_many)
59
- @db[:river_job].multi_insert(insert_params_many.map { |p| insert_params_to_hash(p) })
60
- insert_params_many.count
35
+ .multi_insert(insert_params_array.map { |p| insert_params_to_hash(p) })
36
+ .map { |row| to_insert_result(row) }
61
37
  end
62
38
 
63
39
  def job_list
@@ -74,8 +50,6 @@ module River::Driver
74
50
  end
75
51
 
76
52
  private def insert_params_to_hash(insert_params)
77
- # the call to `#compact` is important so that we remove nils and table
78
- # default values get picked up instead
79
53
  {
80
54
  args: insert_params.encoded_args,
81
55
  kind: insert_params.kind,
@@ -84,8 +58,14 @@ module River::Driver
84
58
  queue: insert_params.queue,
85
59
  state: insert_params.state,
86
60
  scheduled_at: insert_params.scheduled_at,
87
- tags: insert_params.tags ? ::Sequel.pg_array(insert_params.tags) : nil
88
- }.compact
61
+ tags: ::Sequel.pg_array(insert_params.tags || [], :text),
62
+ unique_key: insert_params.unique_key ? ::Sequel.blob(insert_params.unique_key) : nil,
63
+ unique_states: insert_params.unique_states
64
+ }
65
+ end
66
+
67
+ private def to_insert_result(result)
68
+ [to_job_row(result), result[:unique_skipped_as_duplicate]]
89
69
  end
90
70
 
91
71
  private def to_job_row(river_job)
@@ -113,7 +93,8 @@ module River::Driver
113
93
  scheduled_at: river_job[:scheduled_at].getutc,
114
94
  state: river_job[:state],
115
95
  tags: river_job[:tags].to_a,
116
- unique_key: river_job[:unique_key]&.to_s
96
+ unique_key: river_job[:unique_key]&.to_s,
97
+ unique_states: ::River::UniqueBitmask.to_states(river_job[:unique_states]&.to_i(2))
117
98
  )
118
99
  end
119
100
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riverqueue-sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blake Gentry
8
8
  - Brandur Leach
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2024-08-31 00:00:00.000000000 Z
11
+ date: 2025-04-12 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: pg
@@ -64,7 +63,6 @@ homepage: https://riverqueue.com
64
63
  licenses:
65
64
  - LGPL-3.0-or-later
66
65
  metadata: {}
67
- post_install_message:
68
66
  rdoc_options: []
69
67
  require_paths:
70
68
  - lib
@@ -79,8 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
77
  - !ruby/object:Gem::Version
80
78
  version: '0'
81
79
  requirements: []
82
- rubygems_version: 3.4.20
83
- signing_key:
80
+ rubygems_version: 3.6.2
84
81
  specification_version: 4
85
82
  summary: Sequel driver for the River Ruby gem.
86
83
  test_files: []