lib/sequenced/generator.rb in sequenced-2.0.0 vs lib/sequenced/generator.rb in sequenced-3.0.0
- old
+ new
@@ -9,11 +9,13 @@
@start_at = options[:start_at] || 1
@skip = options[:skip]
end
def set
- record.send(:"#{column}=", next_id) unless id_set? || skip?
+ return if id_set? || skip?
+ lock_table
+ record.send(:"#{column}=", next_id)
end
def id_set?
!record.send(column).nil?
end
@@ -42,10 +44,21 @@
end.count == 0
end
private
+ def lock_table
+ if postgresql?
+ record.class.connection.execute("LOCK TABLE #{record.class.table_name} IN EXCLUSIVE MODE")
+ end
+ end
+
+ def postgresql?
+ defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter) &&
+ record.class.connection.instance_of?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
+ end
+
def base_relation
record.class.base_class.unscoped
end
def find_last_record
@@ -65,6 +78,6 @@
def max(*values)
values.to_a.max
end
end
-end
\ No newline at end of file
+end