pgdog 0.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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/pgdog.rb +61 -0
  3. metadata +89 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fd3fd8e3f0eac4f807e975eed7dd9c619386b1b1133aad2798a2dc96bc61fe98
4
+ data.tar.gz: b861aec2cf7e56316da42e588ba434365ebe159779651d913d3b7a9038325ed6
5
+ SHA512:
6
+ metadata.gz: d1238a7fdcdf690550f30ec7f819096fa57f93a48851303f06a1efcd8378dc8bd11762e3ca8fae77152d9f824e4b80b99abf7b61cae1ee580f9d99985f57bef9
7
+ data.tar.gz: 0522ec89011c0c3259c85370a7db82231c92ff2a4f108f19e8a21146f9cc494588c319f72770cbaf873c1140702ea6df889997f4bdce093780e3f1dda78743ea
data/lib/pgdog.rb ADDED
@@ -0,0 +1,61 @@
1
+ class PgDog
2
+ # Get a connection from ActiveRecord.
3
+ def self.connection
4
+ return ActiveRecord::Base.connection
5
+ end
6
+
7
+ # Start a transaction and set the shard number
8
+ # manually using SET.
9
+ def self.with_shard(shard)
10
+ # Basic SQL injection protection
11
+ shard = shard.to_i
12
+
13
+ PgDog.check_transaction
14
+ ActiveRecord::Base.transaction do
15
+ self.connection.execute "SET \"pgdog.shard\" TO #{shard}"
16
+ yield
17
+ end
18
+ end
19
+
20
+ # Start a transaction and set the sharding key
21
+ # manually using SET.
22
+ def self.with_sharding_key(key)
23
+ # Basic SQL injection protection.
24
+ key.to_s.sub "'", "''"
25
+
26
+ PgDog.check_transaction
27
+ ActiveRecord::Base.transaction do
28
+ self.connection.execute "SET \"pgdog.sharding_key\" TO '#{key}'"
29
+ yield
30
+ end
31
+ end
32
+
33
+ # Get currently set shard, if any.
34
+ def self.shard
35
+ shard = self.connection.execute "SELECT current_setting('pgdog.shard', true)"
36
+ shard = shard[0]["current_setting"]
37
+
38
+ if shard.nil?
39
+ return nil
40
+ else
41
+ return shard.to_i
42
+ end
43
+ end
44
+
45
+ # Get currently set sharding key, if any.
46
+ def self.sharding_key
47
+ key = self.connection.execute "SELECT current_setting('pgdog.sharding_key', true)"
48
+ key[0]["current_setting"]
49
+ end
50
+
51
+ # Ensure a transaction isn't started already.
52
+ def self.check_transaction
53
+ if ActiveRecord::Base.connection.open_transactions != 0
54
+ raise PgDogError, "Transaction already started, can't set route"
55
+ end
56
+ end
57
+ end
58
+
59
+ # Error raised if a transaction is already started.
60
+ class PgDogError < StandardError
61
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pgdog
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Lev Kokotov
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: active_record
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '5.0'
19
+ - - "<="
20
+ - !ruby/object:Gem::Version
21
+ version: '9.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '5.0'
29
+ - - "<="
30
+ - !ruby/object:Gem::Version
31
+ version: '9.0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: rspec
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - "~>"
37
+ - !ruby/object:Gem::Version
38
+ version: '3.13'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - "~>"
44
+ - !ruby/object:Gem::Version
45
+ version: '3.13'
46
+ - !ruby/object:Gem::Dependency
47
+ name: pg
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '1.0'
53
+ type: :development
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.0'
60
+ description: Add routing hints to the application to enable direct-to-shard transaction
61
+ routing in ambiguous contexts.
62
+ email: hi@pgdog.dev
63
+ executables: []
64
+ extensions: []
65
+ extra_rdoc_files: []
66
+ files:
67
+ - lib/pgdog.rb
68
+ homepage: https://rubygems.org/gems/pgdog
69
+ licenses:
70
+ - MIT
71
+ metadata: {}
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '2.0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubygems_version: 3.6.7
87
+ specification_version: 4
88
+ summary: PgDog plugin for Ruby on Rails.
89
+ test_files: []