pg_conn 0.13.5 → 0.15.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/pg_conn/version.rb +1 -1
- data/lib/pg_conn.rb +44 -27
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca254f7c17749713f46f07448221683e5975c570407aff61ee440f82a37466ca
|
4
|
+
data.tar.gz: 86486e52477bbf36009d69f9322061077b5860582e4fc7ced67e2d88bad5ee0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0981561372e9039eda5c8eb85948c63559e1875f4764dfaa3b32d52fa501b62522b2acde9a58036aa6978bb9b454cb66bec788e9d141dbc50b3ce5e14ee9941
|
7
|
+
data.tar.gz: 70a3927ceec9d61962002e301c817479e043878ec122ed1d265c9ed9372fb0abc744eaaf266e983b6352179f42e983752c030a12e878699c24b37fde8c6c663e
|
data/lib/pg_conn/version.rb
CHANGED
data/lib/pg_conn.rb
CHANGED
@@ -175,6 +175,9 @@ module PgConn
|
|
175
175
|
end
|
176
176
|
|
177
177
|
if @pg_connection && !using_existing_connection
|
178
|
+
# Set a dummy notice processor to avoid warnings on stderr
|
179
|
+
@pg_connection.set_notice_processor { |message| ; } # Intentionally a nop
|
180
|
+
|
178
181
|
# Auto-convert to ruby types
|
179
182
|
type_map = PG::BasicTypeMapForResults.new(@pg_connection)
|
180
183
|
|
@@ -677,7 +680,9 @@ module PgConn
|
|
677
680
|
|
678
681
|
def rollback() raise Rollback end
|
679
682
|
|
680
|
-
# True if a transaction is in progress
|
683
|
+
# True if a transaction is in progress. Note that this requires all
|
684
|
+
# transactions to be started using PgConn's transaction methods;
|
685
|
+
# transactions started using raw SQL are not registered
|
681
686
|
def transaction?() !@savepoints.nil? end
|
682
687
|
|
683
688
|
# Returns number of transaction or savepoint levels
|
@@ -695,18 +700,21 @@ module PgConn
|
|
695
700
|
end
|
696
701
|
end
|
697
702
|
|
698
|
-
def pop_transaction(commit: true)
|
699
|
-
transaction?
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
703
|
+
def pop_transaction(commit: true, fail: true)
|
704
|
+
if transaction?
|
705
|
+
if savepoint = @savepoints.pop
|
706
|
+
if !commit
|
707
|
+
pg_exec("rollback to savepoint #{savepoint}")
|
708
|
+
pg_exec("release savepoint #{savepoint}")
|
709
|
+
else
|
710
|
+
pg_exec("release savepoint #{savepoint}")
|
711
|
+
end
|
704
712
|
else
|
705
|
-
|
713
|
+
@savepoints = nil
|
714
|
+
pg_exec(commit ? "commit" : "rollback")
|
706
715
|
end
|
707
716
|
else
|
708
|
-
|
709
|
-
pg_exec(commit ? "commit" : "rollback")
|
717
|
+
fail and raise Error, "No transaction in progress"
|
710
718
|
end
|
711
719
|
end
|
712
720
|
|
@@ -715,7 +723,7 @@ module PgConn
|
|
715
723
|
# invalid and the server is in an invalid state
|
716
724
|
#
|
717
725
|
# It is not an error to call #cancel_transaction when no transaction is in
|
718
|
-
# progress
|
726
|
+
# progress, the method always succeeds
|
719
727
|
def cancel_transaction
|
720
728
|
begin
|
721
729
|
pg_exec("rollback")
|
@@ -724,25 +732,34 @@ module PgConn
|
|
724
732
|
@savepoints = nil
|
725
733
|
end
|
726
734
|
|
727
|
-
#
|
728
|
-
#
|
729
|
-
#
|
730
|
-
#
|
731
|
-
#
|
735
|
+
# Start a transaction. If called with a block, the block is executed within
|
736
|
+
# a transaction that is auto-committed if the commit option is true (the
|
737
|
+
# default). #transaction returns the result of the block or nil if no block
|
738
|
+
# was given
|
739
|
+
#
|
740
|
+
# The transaction can be rolled back inside the block by raising a
|
741
|
+
# PgConn::Rollback exception in which case #transaction returns nil. Note
|
742
|
+
# that the transaction timestamp is set to the start of the first
|
743
|
+
# transaction even if transactions are nested
|
732
744
|
def transaction(commit: true, &block)
|
733
|
-
|
734
|
-
|
745
|
+
if block_given?
|
746
|
+
result = nil
|
747
|
+
begin
|
748
|
+
push_transaction
|
749
|
+
result = yield
|
750
|
+
rescue PgConn::Rollback
|
751
|
+
pop_transaction(commit: false)
|
752
|
+
return nil
|
753
|
+
rescue PG::Error
|
754
|
+
@savepoints = nil
|
755
|
+
raise
|
756
|
+
end
|
757
|
+
pop_transaction(commit: commit)
|
758
|
+
result
|
759
|
+
else
|
735
760
|
push_transaction
|
736
|
-
|
737
|
-
rescue PgConn::Rollback
|
738
|
-
pop_transaction(commit: false)
|
739
|
-
return nil
|
740
|
-
rescue PG::Error
|
741
|
-
@savepoints = nil
|
742
|
-
raise
|
761
|
+
nil
|
743
762
|
end
|
744
|
-
pop_transaction(commit: commit)
|
745
|
-
result
|
746
763
|
end
|
747
764
|
|
748
765
|
private
|