pg_saurus 3.2.2 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.markdown +2 -2
- data/lib/pg_saurus/connection_adapters/function_definition.rb +2 -1
- data/lib/pg_saurus/connection_adapters/postgresql_adapter/function_methods.rb +28 -2
- data/lib/pg_saurus/schema_dumper/function_methods.rb +5 -3
- data/lib/pg_saurus/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95526ab7651625ecb8d454074e855cbddb574524
|
4
|
+
data.tar.gz: a44975a7e86b74893dbec2ded843a2a82b80780c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: edde7148883c2b70be2f90ec6894fd4cabb644c6e981af6a224c8842ab9f6b221e2a4e4c624f396d4f54b0249d09fbd2eee79666fd2e815fbdb1d78f910e773b
|
7
|
+
data.tar.gz: ab9d11096b351eb872a7c8a16e5569ccce00a657863a4293987d34a5f844c3c19f9df540f2b7466a3a07544d172ed2f5a9299e9ce83a4ee3b3e62f54a14322c5
|
data/README.markdown
CHANGED
@@ -366,8 +366,8 @@ BEGIN
|
|
366
366
|
END;
|
367
367
|
SQL
|
368
368
|
|
369
|
-
# Arguments are: function_name, return_type, function_definition, options (currently, only :schema)
|
370
|
-
create_function 'pets_not_empty()', :boolean, pets_not_empty_function, schema: 'public'
|
369
|
+
# Arguments are: function_name, return_type, function_definition, options (currently, only :schema and :volatility)
|
370
|
+
create_function 'pets_not_empty()', :boolean, pets_not_empty_function, schema: 'public', volatility: 'stable'
|
371
371
|
```
|
372
372
|
Drop a function:
|
373
373
|
|
@@ -39,6 +39,7 @@ module PgSaurus::ConnectionAdapters::PostgreSQLAdapter::FunctionMethods
|
|
39
39
|
name = parse_function_name(function_str)
|
40
40
|
language = parse_function_language(function_str)
|
41
41
|
definition = parse_function_definition(function_str)
|
42
|
+
volatility = parse_function_volatility(function_str)
|
42
43
|
|
43
44
|
if definition
|
44
45
|
buffer << ::PgSaurus::ConnectionAdapters::FunctionDefinition.new(name,
|
@@ -46,7 +47,8 @@ module PgSaurus::ConnectionAdapters::PostgreSQLAdapter::FunctionMethods
|
|
46
47
|
definition.strip,
|
47
48
|
function_type,
|
48
49
|
language,
|
49
|
-
oid
|
50
|
+
oid,
|
51
|
+
volatility)
|
50
52
|
end
|
51
53
|
buffer
|
52
54
|
end
|
@@ -62,11 +64,17 @@ module PgSaurus::ConnectionAdapters::PostgreSQLAdapter::FunctionMethods
|
|
62
64
|
else
|
63
65
|
'OR REPLACE '
|
64
66
|
end
|
67
|
+
volatility = case options[:volatility]
|
68
|
+
when :volatile, :stable, :immutable
|
69
|
+
"\n #{options[:volatility].to_s.upcase}"
|
70
|
+
else
|
71
|
+
""
|
72
|
+
end
|
65
73
|
|
66
74
|
sql = <<-SQL.gsub(/^[ ]{6}/, "")
|
67
75
|
CREATE #{replace}FUNCTION #{function_name}
|
68
76
|
RETURNS #{returning}
|
69
|
-
LANGUAGE #{language}
|
77
|
+
LANGUAGE #{language}#{volatility}
|
70
78
|
AS $function$
|
71
79
|
#{definition.strip}
|
72
80
|
$function$
|
@@ -97,6 +105,24 @@ module PgSaurus::ConnectionAdapters::PostgreSQLAdapter::FunctionMethods
|
|
97
105
|
end
|
98
106
|
private :parse_function_language
|
99
107
|
|
108
|
+
# Retrieve the volatility of the function: volatile, stable, or immutable.
|
109
|
+
# @return [Symbol]
|
110
|
+
def parse_function_volatility(function_str)
|
111
|
+
rows = function_str.split("\n")
|
112
|
+
lang_index = rows.index { |line| line =~ /LANGUAGE/ }
|
113
|
+
def_index = rows.index { |line| line =~ /AS \$function\$/ }
|
114
|
+
|
115
|
+
if lang_index && def_index && def_index - lang_index == 2
|
116
|
+
tokens = rows[def_index - 1].strip.downcase.split(" ")
|
117
|
+
token = tokens.find { |t| %w(volatile stable immutable).include? t }
|
118
|
+
|
119
|
+
token.nil? ? :volatile : token.to_sym
|
120
|
+
else
|
121
|
+
:volatile
|
122
|
+
end
|
123
|
+
end
|
124
|
+
private :parse_function_volatility
|
125
|
+
|
100
126
|
# Retrieve the function definition from the function SQL.
|
101
127
|
def parse_function_definition(function_str)
|
102
128
|
function_str[/#{Regexp.escape("AS $function$\n")}(.*?)#{Regexp.escape("$function$")}/m, 1]
|
@@ -3,17 +3,19 @@ module PgSaurus::SchemaDumper::FunctionMethods
|
|
3
3
|
|
4
4
|
# :nodoc
|
5
5
|
def tables_with_functions(stream)
|
6
|
-
|
7
|
-
|
6
|
+
# Functions must be dumped before tables.
|
7
|
+
# Some indexes may use defined functions.
|
8
8
|
dump_functions stream
|
9
9
|
|
10
|
+
tables_without_functions(stream)
|
11
|
+
|
10
12
|
stream
|
11
13
|
end
|
12
14
|
|
13
15
|
# Writes out a command to create each detected function.
|
14
16
|
def dump_functions(stream)
|
15
17
|
@connection.functions.each do |function|
|
16
|
-
statement = " create_function '#{function.name}', :#{function.returning}, <<-FUNCTION_DEFINITION.gsub(/^[\s]{4}/, '')"
|
18
|
+
statement = " create_function '#{function.name}', :#{function.returning}, <<-FUNCTION_DEFINITION.gsub(/^[\s]{4}/, ''), volatility: :#{function.volatility}"
|
17
19
|
statement << "\n#{function.definition.split("\n").map{|line| " #{line}" }.join("\n")}"
|
18
20
|
statement << "\n FUNCTION_DEFINITION\n\n"
|
19
21
|
|
data/lib/pg_saurus/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_saurus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Potapov Sergey
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2018-
|
16
|
+
date: 2018-09-06 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: pg
|