Module: RailsOnPg::Functions
- Defined in:
- lib/rails_on_pg/functions.rb
Instance Method Summary collapse
-
#create_function(name, options = {}, *params) ⇒ Object
Create new plpgsql function Example: create_function ‘format_name’, varying’, ‘first_name character varying(125)’, ‘middle_name character varying(15)’, “last_name character varying(20)” do “RETURN COALESCE(last_name, ‘no last name’) || ‘, ’ || COALESCE(first_name, ‘no first name’) || ‘ ’ || COALESCE(middle_name || ‘.’,”);” end.
-
#create_trigger(name, type, table_name, *actions) ⇒ Object
Create trigger function for it
name- trigger nametype- :before or :aftertable_name- table nameactions- “insert”,“update”,“delete” Example: create_trigger “some_tr”, :before, “users”, “insert”,“update”. -
#drop_function(name, *params) ⇒ Object
drop function.
-
#drop_trigger(name, table_name) ⇒ Object
Drop trigger.
Instance Method Details
#create_function(name, options = {}, *params) ⇒ Object
Create new plpgsql function Example:
create_function 'format_name', {:returns=>'character varying'}, 'first_name character varying(125)', 'middle_name character varying(15)', "last_name character varying(20)" do
"RETURN COALESCE(last_name, 'no last name') || ', ' || COALESCE(first_name, 'no first name') || ' ' || COALESCE(middle_name || '.','');"
end
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/rails_on_pg/functions.rb', line 9 def create_function name, ={}, *params .reverse_merge!({:as=>'$$'}) returns = [:returns] declare = %{DECLARE #{options[:declare].join(';')}} if [:declare] drop_function name, params # execute set_lang execute %{CREATE FUNCTION #{name}(#{params.join(',')}) RETURNS #{returns} AS #{options[:as]} #{declare} BEGIN #{yield} END; #{options[:as]} LANGUAGE 'plpgsql'; } end |
#create_trigger(name, type, table_name, *actions) ⇒ Object
Create trigger function for it name - trigger name type - :before or :after table_name - table name actions - “insert”,“update”,“delete” Example:
create_trigger "some_tr", :before, "users", "insert","update"
38 39 40 41 42 43 44 45 |
# File 'lib/rails_on_pg/functions.rb', line 38 def create_trigger name, type, table_name, *actions create_function "#{name}_f", :returns=>'trigger',:as=>'$BODY$' do yield end execute %{CREATE TRIGGER #{name} #{type.to_s.upcase} #{actions.map{|str|str.upcase}.join(' OR ')} ON "#{table_name}" FOR EACH ROW EXECUTE PROCEDURE #{name}_f();} end |
#drop_function(name, *params) ⇒ Object
drop function
27 28 29 |
# File 'lib/rails_on_pg/functions.rb', line 27 def drop_function name, *params execute "DROP FUNCTION IF EXISTS #{name}(#{params.join(',')}) CASCADE" end |
#drop_trigger(name, table_name) ⇒ Object
Drop trigger
48 49 50 |
# File 'lib/rails_on_pg/functions.rb', line 48 def drop_trigger name, table_name execute "DROP TRIGGER #{name} on #{table_name} CASCADE" end |