fx 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +53 -0
- data/.gitignore +0 -1
- data/.rspec +1 -1
- data/.standard.yml +3 -0
- data/CHANGELOG.md +124 -0
- data/CONTRIBUTING.md +13 -4
- data/Gemfile +13 -2
- data/README.md +4 -2
- data/Rakefile +2 -1
- data/bin/setup +0 -4
- data/bin/standardrb +27 -0
- data/fx.gemspec +20 -27
- data/lib/fx/adapters/postgres/connection.rb +12 -0
- data/lib/fx/adapters/postgres/functions.rb +3 -3
- data/lib/fx/adapters/postgres/triggers.rb +3 -3
- data/lib/fx/adapters/postgres.rb +6 -14
- data/lib/fx/command_recorder.rb +87 -6
- data/lib/fx/configuration.rb +0 -25
- data/lib/fx/definition.rb +16 -6
- data/lib/fx/function.rb +7 -7
- data/lib/fx/schema_dumper.rb +45 -5
- data/lib/fx/statements.rb +228 -6
- data/lib/fx/trigger.rb +3 -3
- data/lib/fx/version.rb +1 -1
- data/lib/fx.rb +30 -12
- data/lib/generators/fx/function/function_generator.rb +8 -8
- data/lib/generators/fx/trigger/trigger_generator.rb +6 -10
- data/spec/acceptance/user_manages_functions_spec.rb +5 -5
- data/spec/acceptance/user_manages_triggers_spec.rb +8 -8
- data/spec/acceptance_helper.rb +6 -4
- data/spec/dummy/Rakefile +4 -4
- data/spec/dummy/bin/bundle +2 -2
- data/spec/dummy/bin/rails +3 -3
- data/spec/dummy/bin/rake +2 -2
- data/spec/dummy/config/application.rb +6 -0
- data/spec/dummy/config/database.yml +2 -0
- data/spec/dummy/config.ru +1 -1
- data/spec/features/functions/migrations_spec.rb +4 -4
- data/spec/features/functions/revert_spec.rb +7 -7
- data/spec/features/triggers/migrations_spec.rb +6 -6
- data/spec/features/triggers/revert_spec.rb +13 -13
- data/spec/fx/adapters/postgres/functions_spec.rb +26 -30
- data/spec/fx/adapters/postgres/triggers_spec.rb +34 -38
- data/spec/fx/adapters/postgres_spec.rb +107 -109
- data/spec/fx/command_recorder_spec.rb +41 -39
- data/spec/fx/configuration_spec.rb +20 -9
- data/spec/fx/definition_spec.rb +30 -38
- data/spec/fx/function_spec.rb +45 -48
- data/spec/fx/schema_dumper_spec.rb +123 -0
- data/spec/fx/statements_spec.rb +217 -0
- data/spec/fx/trigger_spec.rb +37 -40
- data/spec/fx_spec.rb +28 -0
- data/spec/generators/fx/function/function_generator_spec.rb +6 -6
- data/spec/generators/fx/trigger/trigger_generator_spec.rb +10 -10
- data/spec/spec_helper.rb +5 -0
- data/spec/support/definition_helpers.rb +5 -9
- data/spec/support/generator_setup.rb +1 -1
- data/spec/support/migration_helpers.rb +1 -1
- data/spec/support/warning_helper.rb +5 -0
- metadata +24 -213
- data/.hound.yml +0 -2
- data/.rubocop.yml +0 -648
- data/.travis.yml +0 -60
- data/Appraisals +0 -45
- data/bin/appraisal +0 -17
- data/gemfiles/rails42.gemfile +0 -10
- data/gemfiles/rails50.gemfile +0 -8
- data/gemfiles/rails51.gemfile +0 -8
- data/gemfiles/rails52.gemfile +0 -8
- data/gemfiles/rails60.gemfile +0 -8
- data/gemfiles/rails61.gemfile +0 -8
- data/gemfiles/rails_edge.gemfile +0 -8
- data/lib/fx/command_recorder/arguments.rb +0 -43
- data/lib/fx/command_recorder/function.rb +0 -30
- data/lib/fx/command_recorder/trigger.rb +0 -30
- data/lib/fx/schema_dumper/function.rb +0 -38
- data/lib/fx/schema_dumper/trigger.rb +0 -29
- data/lib/fx/statements/function.rb +0 -115
- data/lib/fx/statements/trigger.rb +0 -146
- data/spec/fx/command_recorder/arguments_spec.rb +0 -41
- data/spec/fx/schema_dumper/function_spec.rb +0 -80
- data/spec/fx/schema_dumper/trigger_spec.rb +0 -40
- data/spec/fx/statements/function_spec.rb +0 -103
- data/spec/fx/statements/trigger_spec.rb +0 -132
@@ -1,8 +1,8 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe "Function migrations", :db do
|
3
|
+
RSpec.describe "Function migrations", :db do
|
4
4
|
around do |example|
|
5
|
-
sql_definition =
|
5
|
+
sql_definition = <<~EOS
|
6
6
|
CREATE OR REPLACE FUNCTION test()
|
7
7
|
RETURNS text AS $$
|
8
8
|
BEGIN
|
@@ -40,7 +40,7 @@ describe "Function migrations", :db do
|
|
40
40
|
it "can run migrations that updates functions" do
|
41
41
|
connection.create_function(:test)
|
42
42
|
|
43
|
-
sql_definition =
|
43
|
+
sql_definition = <<~EOS
|
44
44
|
CREATE OR REPLACE FUNCTION test()
|
45
45
|
RETURNS text AS $$
|
46
46
|
BEGIN
|
@@ -51,7 +51,7 @@ describe "Function migrations", :db do
|
|
51
51
|
with_function_definition(
|
52
52
|
name: :test,
|
53
53
|
version: 2,
|
54
|
-
sql_definition: sql_definition
|
54
|
+
sql_definition: sql_definition
|
55
55
|
) do
|
56
56
|
migration = Class.new(migration_class) do
|
57
57
|
def change
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe "Reverting migrations", :db do
|
3
|
+
RSpec.describe "Reverting migrations", :db do
|
4
4
|
around do |example|
|
5
|
-
sql_definition =
|
5
|
+
sql_definition = <<~EOS
|
6
6
|
CREATE OR REPLACE FUNCTION test()
|
7
7
|
RETURNS text AS $$
|
8
8
|
BEGIN
|
@@ -40,17 +40,17 @@ describe "Reverting migrations", :db do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
expect { run_migration(good_migration, [:up, :down]) }.not_to raise_error
|
43
|
-
expect { run_migration(bad_migration, [:up, :down]) }
|
44
|
-
to raise_error(
|
43
|
+
expect { run_migration(bad_migration, [:up, :down]) }
|
44
|
+
.to raise_error(
|
45
45
|
ActiveRecord::IrreversibleMigration,
|
46
|
-
/`create_function` is reversible only if given a `revert_to_version
|
46
|
+
/`create_function` is reversible only if given a `revert_to_version`/
|
47
47
|
)
|
48
48
|
end
|
49
49
|
|
50
50
|
it "can run reversible migrations for updating functions" do
|
51
51
|
connection.create_function(:test)
|
52
52
|
|
53
|
-
sql_definition =
|
53
|
+
sql_definition = <<~EOS
|
54
54
|
CREATE OR REPLACE FUNCTION test()
|
55
55
|
RETURNS text AS $$
|
56
56
|
BEGIN
|
@@ -61,7 +61,7 @@ describe "Reverting migrations", :db do
|
|
61
61
|
with_function_definition(
|
62
62
|
name: :test,
|
63
63
|
version: 2,
|
64
|
-
sql_definition: sql_definition
|
64
|
+
sql_definition: sql_definition
|
65
65
|
) do
|
66
66
|
migration = Class.new(migration_class) do
|
67
67
|
def change
|
@@ -1,15 +1,15 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe "Trigger migrations", :db do
|
3
|
+
RSpec.describe "Trigger migrations", :db do
|
4
4
|
around do |example|
|
5
|
-
connection.execute
|
5
|
+
connection.execute <<~EOS
|
6
6
|
CREATE TABLE users (
|
7
7
|
id int PRIMARY KEY,
|
8
8
|
name varchar(256),
|
9
9
|
upper_name varchar(256)
|
10
10
|
);
|
11
11
|
EOS
|
12
|
-
Fx.database.create_function
|
12
|
+
Fx.database.create_function <<~EOS
|
13
13
|
CREATE OR REPLACE FUNCTION uppercase_users_name()
|
14
14
|
RETURNS trigger AS $$
|
15
15
|
BEGIN
|
@@ -18,15 +18,15 @@ describe "Trigger migrations", :db do
|
|
18
18
|
END;
|
19
19
|
$$ LANGUAGE plpgsql;
|
20
20
|
EOS
|
21
|
-
sql_definition =
|
21
|
+
sql_definition = <<~EOS
|
22
22
|
CREATE TRIGGER uppercase_users_name
|
23
23
|
BEFORE INSERT ON users
|
24
24
|
FOR EACH ROW
|
25
|
-
EXECUTE
|
25
|
+
EXECUTE FUNCTION uppercase_users_name();
|
26
26
|
EOS
|
27
27
|
with_trigger_definition(
|
28
28
|
name: :uppercase_users_name,
|
29
|
-
sql_definition: sql_definition
|
29
|
+
sql_definition: sql_definition
|
30
30
|
) do
|
31
31
|
example.run
|
32
32
|
end
|
@@ -1,15 +1,15 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe "Reverting migrations", :db do
|
3
|
+
RSpec.describe "Reverting migrations", :db do
|
4
4
|
around do |example|
|
5
|
-
connection.execute
|
5
|
+
connection.execute <<~EOS
|
6
6
|
CREATE TABLE users (
|
7
7
|
id int PRIMARY KEY,
|
8
8
|
name varchar(256),
|
9
9
|
upper_name varchar(256)
|
10
10
|
);
|
11
11
|
EOS
|
12
|
-
Fx.database.create_function
|
12
|
+
Fx.database.create_function <<~EOS
|
13
13
|
CREATE OR REPLACE FUNCTION uppercase_users_name()
|
14
14
|
RETURNS trigger AS $$
|
15
15
|
BEGIN
|
@@ -18,15 +18,15 @@ describe "Reverting migrations", :db do
|
|
18
18
|
END;
|
19
19
|
$$ LANGUAGE plpgsql;
|
20
20
|
EOS
|
21
|
-
sql_definition =
|
21
|
+
sql_definition = <<~EOS
|
22
22
|
CREATE TRIGGER uppercase_users_name
|
23
23
|
BEFORE INSERT ON users
|
24
24
|
FOR EACH ROW
|
25
|
-
EXECUTE
|
25
|
+
EXECUTE FUNCTION uppercase_users_name();
|
26
26
|
EOS
|
27
27
|
with_trigger_definition(
|
28
28
|
name: :uppercase_users_name,
|
29
|
-
sql_definition: sql_definition
|
29
|
+
sql_definition: sql_definition
|
30
30
|
) do
|
31
31
|
example.run
|
32
32
|
end
|
@@ -57,26 +57,26 @@ describe "Reverting migrations", :db do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
expect { run_migration(good_migration, [:up, :down]) }.not_to raise_error
|
60
|
-
expect { run_migration(bad_migration, [:up, :down]) }
|
61
|
-
to raise_error(
|
60
|
+
expect { run_migration(bad_migration, [:up, :down]) }
|
61
|
+
.to raise_error(
|
62
62
|
ActiveRecord::IrreversibleMigration,
|
63
|
-
/`create_trigger` is reversible only if given a `revert_to_version
|
63
|
+
/`create_trigger` is reversible only if given a `revert_to_version`/
|
64
64
|
)
|
65
65
|
end
|
66
66
|
|
67
67
|
it "can run reversible migrations for updating triggers" do
|
68
68
|
connection.create_trigger(:uppercase_users_name)
|
69
69
|
|
70
|
-
sql_definition =
|
70
|
+
sql_definition = <<~EOS
|
71
71
|
CREATE TRIGGER uppercase_users_name
|
72
72
|
BEFORE UPDATE ON users
|
73
73
|
FOR EACH ROW
|
74
|
-
EXECUTE
|
74
|
+
EXECUTE FUNCTION uppercase_users_name();
|
75
75
|
EOS
|
76
76
|
with_trigger_definition(
|
77
77
|
name: :uppercase_users_name,
|
78
78
|
sql_definition: sql_definition,
|
79
|
-
version: 2
|
79
|
+
version: 2
|
80
80
|
) do
|
81
81
|
migration = Class.new(migration_class) do
|
82
82
|
def change
|
@@ -84,7 +84,7 @@ describe "Reverting migrations", :db do
|
|
84
84
|
:uppercase_users_name,
|
85
85
|
on: :users,
|
86
86
|
version: 2,
|
87
|
-
revert_to_version: 1
|
87
|
+
revert_to_version: 1
|
88
88
|
)
|
89
89
|
end
|
90
90
|
end
|
@@ -1,37 +1,33 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
$$ LANGUAGE plpgsql;
|
16
|
-
EOS
|
3
|
+
RSpec.describe Fx::Adapters::Postgres::Functions, :db do
|
4
|
+
describe ".all" do
|
5
|
+
it "returns `Function` objects" do
|
6
|
+
connection = ActiveRecord::Base.connection
|
7
|
+
connection.execute <<~EOS
|
8
|
+
CREATE OR REPLACE FUNCTION test()
|
9
|
+
RETURNS text AS $$
|
10
|
+
BEGIN
|
11
|
+
RETURN 'test';
|
12
|
+
END;
|
13
|
+
$$ LANGUAGE plpgsql;
|
14
|
+
EOS
|
17
15
|
|
18
|
-
|
16
|
+
functions = Fx::Adapters::Postgres::Functions.new(connection).all
|
19
17
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
18
|
+
first = functions.first
|
19
|
+
expect(functions.size).to eq(1)
|
20
|
+
expect(first.name).to eq("test")
|
21
|
+
expect(first.definition).to eq(<<~EOS)
|
22
|
+
CREATE OR REPLACE FUNCTION public.test()
|
23
|
+
RETURNS text
|
24
|
+
LANGUAGE plpgsql
|
25
|
+
AS $function$
|
26
|
+
BEGIN
|
27
|
+
RETURN 'test';
|
28
|
+
END;
|
29
|
+
$function$
|
30
|
+
EOS
|
35
31
|
end
|
36
32
|
end
|
37
33
|
end
|
@@ -1,45 +1,41 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
EXECUTE PROCEDURE uppercase_users_name();
|
30
|
-
EOS
|
3
|
+
RSpec.describe Fx::Adapters::Postgres::Triggers, :db do
|
4
|
+
describe ".all" do
|
5
|
+
it "returns `Trigger` objects" do
|
6
|
+
connection = ActiveRecord::Base.connection
|
7
|
+
connection.execute <<~EOS
|
8
|
+
CREATE TABLE users (
|
9
|
+
id int PRIMARY KEY,
|
10
|
+
name varchar(256),
|
11
|
+
upper_name varchar(256)
|
12
|
+
);
|
13
|
+
EOS
|
14
|
+
connection.execute <<~EOS
|
15
|
+
CREATE OR REPLACE FUNCTION uppercase_users_name()
|
16
|
+
RETURNS trigger AS $$
|
17
|
+
BEGIN
|
18
|
+
NEW.upper_name = UPPER(NEW.name);
|
19
|
+
RETURN NEW;
|
20
|
+
END;
|
21
|
+
$$ LANGUAGE plpgsql;
|
22
|
+
EOS
|
23
|
+
connection.execute <<~EOS
|
24
|
+
CREATE TRIGGER uppercase_users_name
|
25
|
+
BEFORE INSERT ON users
|
26
|
+
FOR EACH ROW
|
27
|
+
EXECUTE FUNCTION uppercase_users_name();
|
28
|
+
EOS
|
31
29
|
|
32
|
-
|
30
|
+
triggers = Fx::Adapters::Postgres::Triggers.new(connection).all
|
33
31
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
32
|
+
first = triggers.first
|
33
|
+
expect(triggers.size).to eq(1)
|
34
|
+
expect(first.name).to eq("uppercase_users_name")
|
35
|
+
expect(first.definition).to include("BEFORE INSERT")
|
36
|
+
expect(first.definition).to match(/ON [public.ser|]/)
|
37
|
+
expect(first.definition).to include("FOR EACH ROW")
|
38
|
+
expect(first.definition).to include("EXECUTE FUNCTION uppercase_users_name()")
|
43
39
|
end
|
44
40
|
end
|
45
41
|
end
|
@@ -1,104 +1,82 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
|
4
|
-
describe
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
RETURNS text AS $$
|
12
|
-
BEGIN
|
13
|
-
RETURN 'test';
|
14
|
-
END;
|
15
|
-
$$ LANGUAGE plpgsql;
|
16
|
-
EOS
|
17
|
-
)
|
18
|
-
|
19
|
-
expect(adapter.functions.map(&:name)).to include("test")
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "#create_trigger" do
|
24
|
-
it "successfully creates a trigger" do
|
25
|
-
connection.execute <<-EOS
|
26
|
-
CREATE TABLE users (
|
27
|
-
id int PRIMARY KEY,
|
28
|
-
name varchar(256),
|
29
|
-
upper_name varchar(256)
|
30
|
-
);
|
31
|
-
EOS
|
32
|
-
adapter = Postgres.new
|
33
|
-
adapter.create_function <<-EOS
|
34
|
-
CREATE OR REPLACE FUNCTION uppercase_users_name()
|
35
|
-
RETURNS trigger AS $$
|
3
|
+
RSpec.describe Fx::Adapters::Postgres, :db do
|
4
|
+
describe "#create_function" do
|
5
|
+
it "successfully creates a function" do
|
6
|
+
adapter = Fx::Adapters::Postgres.new
|
7
|
+
adapter.create_function(
|
8
|
+
<<~EOS
|
9
|
+
CREATE OR REPLACE FUNCTION test()
|
10
|
+
RETURNS text AS $$
|
36
11
|
BEGIN
|
37
|
-
|
38
|
-
RETURN NEW;
|
12
|
+
RETURN 'test';
|
39
13
|
END;
|
40
14
|
$$ LANGUAGE plpgsql;
|
41
15
|
EOS
|
42
|
-
|
43
|
-
<<-EOS
|
44
|
-
CREATE TRIGGER uppercase_users_name
|
45
|
-
BEFORE INSERT ON users
|
46
|
-
FOR EACH ROW
|
47
|
-
EXECUTE PROCEDURE uppercase_users_name();
|
48
|
-
EOS
|
49
|
-
)
|
16
|
+
)
|
50
17
|
|
51
|
-
|
52
|
-
end
|
18
|
+
expect(adapter.functions.map(&:name)).to include("test")
|
53
19
|
end
|
20
|
+
end
|
54
21
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
22
|
+
describe "#create_trigger" do
|
23
|
+
it "successfully creates a trigger" do
|
24
|
+
connection.execute <<~EOS
|
25
|
+
CREATE TABLE users (
|
26
|
+
id int PRIMARY KEY,
|
27
|
+
name varchar(256),
|
28
|
+
upper_name varchar(256)
|
29
|
+
);
|
30
|
+
EOS
|
31
|
+
adapter = Fx::Adapters::Postgres.new
|
32
|
+
adapter.create_function <<~EOS
|
33
|
+
CREATE OR REPLACE FUNCTION uppercase_users_name()
|
34
|
+
RETURNS trigger AS $$
|
35
|
+
BEGIN
|
36
|
+
NEW.upper_name = UPPER(NEW.name);
|
37
|
+
RETURN NEW;
|
38
|
+
END;
|
39
|
+
$$ LANGUAGE plpgsql;
|
40
|
+
EOS
|
41
|
+
adapter.create_trigger(
|
42
|
+
<<~EOS
|
43
|
+
CREATE TRIGGER uppercase_users_name
|
44
|
+
BEFORE INSERT ON users
|
45
|
+
FOR EACH ROW
|
46
|
+
EXECUTE FUNCTION uppercase_users_name();
|
47
|
+
EOS
|
48
|
+
)
|
71
49
|
|
72
|
-
|
73
|
-
|
74
|
-
|
50
|
+
expect(adapter.triggers.map(&:name)).to include("uppercase_users_name")
|
51
|
+
end
|
52
|
+
end
|
75
53
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
54
|
+
describe "#drop_function" do
|
55
|
+
context "when the function has arguments" do
|
56
|
+
it "successfully drops a function with the entire function signature" do
|
57
|
+
adapter = Fx::Adapters::Postgres.new
|
58
|
+
adapter.create_function(
|
59
|
+
<<~EOS
|
60
|
+
CREATE FUNCTION adder(x int, y int)
|
61
|
+
RETURNS int AS $$
|
62
|
+
BEGIN
|
63
|
+
RETURN $1 + $2;
|
64
|
+
END;
|
65
|
+
$$ LANGUAGE plpgsql;
|
66
|
+
EOS
|
67
|
+
)
|
89
68
|
|
90
|
-
|
69
|
+
adapter.drop_function(:adder)
|
91
70
|
|
92
|
-
|
93
|
-
end
|
71
|
+
expect(adapter.functions.map(&:name)).not_to include("adder")
|
94
72
|
end
|
95
73
|
end
|
96
74
|
|
97
|
-
|
98
|
-
it "
|
99
|
-
adapter = Postgres.new
|
75
|
+
context "when the function does not have arguments" do
|
76
|
+
it "successfully drops a function" do
|
77
|
+
adapter = Fx::Adapters::Postgres.new
|
100
78
|
adapter.create_function(
|
101
|
-
|
79
|
+
<<~EOS
|
102
80
|
CREATE OR REPLACE FUNCTION test()
|
103
81
|
RETURNS text AS $$
|
104
82
|
BEGIN
|
@@ -108,39 +86,59 @@ module Fx::Adapters
|
|
108
86
|
EOS
|
109
87
|
)
|
110
88
|
|
111
|
-
|
89
|
+
adapter.drop_function(:test)
|
90
|
+
|
91
|
+
expect(adapter.functions.map(&:name)).not_to include("test")
|
112
92
|
end
|
113
93
|
end
|
94
|
+
end
|
114
95
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
);
|
123
|
-
EOS
|
124
|
-
adapter = Postgres.new
|
125
|
-
adapter.create_function <<-EOS
|
126
|
-
CREATE OR REPLACE FUNCTION uppercase_users_name()
|
127
|
-
RETURNS trigger AS $$
|
96
|
+
describe "#functions" do
|
97
|
+
it "finds functions and builds Fx::Function objects" do
|
98
|
+
adapter = Fx::Adapters::Postgres.new
|
99
|
+
adapter.create_function(
|
100
|
+
<<~EOS
|
101
|
+
CREATE OR REPLACE FUNCTION test()
|
102
|
+
RETURNS text AS $$
|
128
103
|
BEGIN
|
129
|
-
|
130
|
-
RETURN NEW;
|
104
|
+
RETURN 'test';
|
131
105
|
END;
|
132
106
|
$$ LANGUAGE plpgsql;
|
133
107
|
EOS
|
134
|
-
|
135
|
-
CREATE TRIGGER uppercase_users_name
|
136
|
-
BEFORE INSERT ON users
|
137
|
-
FOR EACH ROW
|
138
|
-
EXECUTE PROCEDURE uppercase_users_name()
|
139
|
-
EOS
|
140
|
-
adapter.create_trigger(sql_definition)
|
108
|
+
)
|
141
109
|
|
142
|
-
|
143
|
-
|
110
|
+
expect(adapter.functions.map(&:name)).to eq ["test"]
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe "#triggers" do
|
115
|
+
it "finds triggers and builds Fx::Trigger objects" do
|
116
|
+
connection.execute <<~EOS
|
117
|
+
CREATE TABLE users (
|
118
|
+
id int PRIMARY KEY,
|
119
|
+
name varchar(256),
|
120
|
+
upper_name varchar(256)
|
121
|
+
);
|
122
|
+
EOS
|
123
|
+
adapter = Fx::Adapters::Postgres.new
|
124
|
+
adapter.create_function <<~EOS
|
125
|
+
CREATE OR REPLACE FUNCTION uppercase_users_name()
|
126
|
+
RETURNS trigger AS $$
|
127
|
+
BEGIN
|
128
|
+
NEW.upper_name = UPPER(NEW.name);
|
129
|
+
RETURN NEW;
|
130
|
+
END;
|
131
|
+
$$ LANGUAGE plpgsql;
|
132
|
+
EOS
|
133
|
+
sql_definition = <<~EOS
|
134
|
+
CREATE TRIGGER uppercase_users_name
|
135
|
+
BEFORE INSERT ON users
|
136
|
+
FOR EACH ROW
|
137
|
+
EXECUTE FUNCTION uppercase_users_name()
|
138
|
+
EOS
|
139
|
+
adapter.create_trigger(sql_definition)
|
140
|
+
|
141
|
+
expect(adapter.triggers.map(&:name)).to eq ["uppercase_users_name"]
|
144
142
|
end
|
145
143
|
end
|
146
144
|
end
|