Skip to content

Instantly share code, notes, and snippets.

@mkwiatkowski
Forked from borgand/sequence_helper.rb
Created February 8, 2013 13:18
Show Gist options
  • Save mkwiatkowski/4738997 to your computer and use it in GitHub Desktop.
Save mkwiatkowski/4738997 to your computer and use it in GitHub Desktop.
# Helper for PostgreSQL Sequences
# USAGE:
# SequenceHelper.nextval('somenumber_seq')
# SequenceHelper.currval('somenumber_seq')
# SequenceHelper.reset('somenumber_seq', 10)
class SequenceHelper < ActiveRecord::Base
# Verify that the sequence exists or create it
def self.verify(name, create = true, initial_value=1)
name.downcase!
result = connection.select_value("SELECT relname FROM pg_class WHERE relname='#{sanitize_sql(name)}'")
# Create the sequence if not exist
if create && result.blank?
connection.execute("CREATE SEQUENCE #{sanitize_sql(name)}")
self.reset(name, initial_value)
return true
else
return !!result
end
end
def self.reset(name, val=1, is_called=false)
name.downcase!
connection.execute("SELECT setval('#{name}', #{val}, #{is_called.inspect})") if verify(name, false)
end
def self.nextval(name)
name.downcase!
connection.select_value("SELECT nextval('#{sanitize_sql(name)}')") if verify(name, false)
end
def self.curval(name)
name.downcase!
connection.select_value("SELECT currval('#{sanitize_sql(name)}')") if verify(name, false)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment