Module: PgSaurus::ConnectionAdapters::PostgreSQLAdapter::FunctionMethods

Included in:
PgSaurus::ConnectionAdapters::PostgreSQLAdapter
Defined in:
lib/pg_saurus/connection_adapters/postgresql_adapter/function_methods.rb

Overview

Methods to extend ActiveRecord::ConnectionAdapters::PostgreSQLAdapter to support database functions.

Instance Method Summary collapse

Instance Method Details

#create_function(function_name, returning, definition, options = {}) ⇒ Object

Create a new database function.



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/function_methods.rb', line 55

def create_function(function_name, returning, definition, options = {})

  function_name = full_function_name(function_name, options)
  language      = options[:language] || 'plpgsql'
  replace       = if options[:replace] == false
                    ''
                  else
                    'OR REPLACE '
                  end

  sql = "    CREATE \#{replace}FUNCTION \#{function_name}\n      RETURNS \#{returning}\n      LANGUAGE \#{language}\n    AS $function$\n    \#{definition.strip}\n    $function$\n  SQL\n\n  execute(sql)\nend\n".gsub(/^[ ]{6}/, "")

#drop_function(function_name, options = {}) ⇒ Object

Drop the given database function.



78
79
80
81
82
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/function_methods.rb', line 78

def drop_function(function_name, options = {})
  function_name = full_function_name(function_name, options)

  execute "DROP FUNCTION #{function_name}"
end

#functionsObject

Return a list of defined DB functions. Ignore function definitions that can’t be parsed.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/function_methods.rb', line 11

def functions
  res = select_all "    SELECT n.nspname AS \"Schema\",\n      p.proname AS \"Name\",\n      pg_catalog.pg_get_function_result(p.oid) AS \"Returning\",\n     CASE\n      WHEN p.proisagg    THEN 'agg'\n      WHEN p.proiswindow THEN 'window'\n      WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype\n      THEN 'trigger'\n      ELSE 'normal'\n     END   AS \"Type\",\n     p.oid AS \"Oid\"\n    FROM pg_catalog.pg_proc p\n         LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace\n    WHERE pg_catalog.pg_function_is_visible(p.oid)\n          AND n.nspname <> 'pg_catalog'\n          AND n.nspname <> 'information_schema'\n    ORDER BY 1, 2, 3, 4;\n  SQL\n  res.inject([]) do |buffer, row|\n    returning     = row['Returning']\n    function_type = row['Type']\n    oid           = row['Oid']\n\n    function_str = select_value(\"SELECT pg_get_functiondef(\#{oid});\")\n\n    name       = parse_function_name(function_str)\n    language   = parse_function_language(function_str)\n    definition = parse_function_definition(function_str)\n\n    if definition\n      buffer << ::PgSaurus::ConnectionAdapters::FunctionDefinition.new(name,\n                                                                       returning,\n                                                                       definition.strip,\n                                                                       function_type,\n                                                                       language,\n                                                                       oid)\n    end\n    buffer\n  end\nend\n"

#supports_functions?Boolean

Return true.

Returns:

  • (Boolean)


6
7
8
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/function_methods.rb', line 6

def supports_functions?
  true
end