Module: Procedural::Adapters::PostgreSQLAdapter

Defined in:
lib/procedural/adapters/postgresql_adapter.rb

Instance Method Summary collapse

Instance Method Details

#create_procedure(*args) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/procedural/adapters/postgresql_adapter.rb', line 5

def create_procedure(*args)
  options = args.extract_options!

  procedure_name = args.shift
  language = options.fetch(:language)
  returns = options.fetch(:returns)
  sql = options.fetch(:sql)

  execute(<<-SQL)
CREATE OR REPLACE FUNCTION #{quote_column_name(procedure_name)}()
  RETURNS #{returns}
  LANGUAGE #{language}
AS $$
  BEGIN
    #{sql}
  END
$$
SQL
end

#create_trigger(*args) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/procedural/adapters/postgresql_adapter.rb', line 31

def create_trigger(*args)
  options = args.extract_options!

  table_name = args.shift
  trigger_name = args.shift
  procedure_name = args.shift

  execute("CREATE TRIGGER #{quote_column_name(trigger_name)} BEFORE INSERT OR UPDATE ON #{quote_table_name(table_name)} FOR EACH ROW EXECUTE PROCEDURE #{quote_column_name(procedure_name)}()")
end

#drop_procedure(*args) ⇒ Object



25
26
27
28
29
# File 'lib/procedural/adapters/postgresql_adapter.rb', line 25

def drop_procedure(*args)
  procedure_name = args.shift

  execute("DROP FUNCTION IF EXISTS #{quote_column_name(procedure_name)}()")
end

#drop_trigger(*args) ⇒ Object



41
42
43
44
45
46
# File 'lib/procedural/adapters/postgresql_adapter.rb', line 41

def drop_trigger(*args)
  table_name = args.shift
  trigger_name = args.shift

  execute("DROP TRIGGER IF EXISTS #{quote_column_name(trigger_name)} ON #{quote_table_name(table_name)}")
end