Module: AR::Sequence::Adapter

Defined in:
lib/ar/sequence/adapter.rb

Constant Summary collapse

SEQUENCE_COMMENT =
"created by ar-sequence"

Instance Method Summary collapse

Instance Method Details

#check_sequencesObject



14
15
16
17
18
# File 'lib/ar/sequence/adapter.rb', line 14

def check_sequences
  select_all(
    "SELECT * FROM information_schema.sequences ORDER BY sequence_name"
  ).to_a
end

#create_sequence(name, options = {}) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/ar/sequence/adapter.rb', line 20

def create_sequence(name, options = {})
  increment = options[:increment] || options[:step]
  name = quote_name(name)

  sql = ["CREATE SEQUENCE IF NOT EXISTS #{name}"]
  sql << "INCREMENT BY #{increment}" if increment
  sql << "START WITH #{options[:start]}" if options[:start]
  sql << ";"
  sql << "COMMENT ON SEQUENCE #{name} IS '#{SEQUENCE_COMMENT}';"

  execute(sql.join("\n"))
end

#custom_sequence?(sequence_name) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
11
12
# File 'lib/ar/sequence/adapter.rb', line 8

def custom_sequence?(sequence_name)
  execute(
    "SELECT obj_description('#{sequence_name}'::regclass, 'pg_class');"
  ).first["obj_description"] == SEQUENCE_COMMENT
end

#drop_sequence(name) ⇒ Object

Drop a sequence by its name.

drop_sequence :user_position


37
38
39
40
41
# File 'lib/ar/sequence/adapter.rb', line 37

def drop_sequence(name)
  name = quote_name(name)
  sql = "DROP SEQUENCE #{name}"
  execute(sql)
end

#quote_name(name) ⇒ Object



43
44
45
# File 'lib/ar/sequence/adapter.rb', line 43

def quote_name(name)
  name.split(".", 2).map {|part| quote_column_name(part) }.join(".")
end