pg_saurus 2.3.1 → 2.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3e759d3f6f18831227c70d8d5609d0545053a3ec
4
- data.tar.gz: 6bacd12ec585be568ad2863c9cc7dedb112b97fd
3
+ metadata.gz: c7a1e92934deea6ba975df2c5794d6cbbe018095
4
+ data.tar.gz: 897243ea0241e00197b1bae4085d1401530e0fcc
5
5
  SHA512:
6
- metadata.gz: 66c2279cce0676edd0084721a66ef4faf325df16e43e77649b9cc0bf95bf6a41af41f43c645d14d711656ed1159c9ff80dec6e95b7ec450ee5f97fb257e3c910
7
- data.tar.gz: 8d33063a06e25aaf16868674bee9c2c9811237ac82d2519c78cccdbdc45837027aba1fb18376ed495a3f460a23608b3eb0257944ec28cc1e95f03a59eec87f6f
6
+ metadata.gz: fc76e020d12815030f5fcea206bb639c70a3f97c16e8deeb75acbcc6dca011b5d299f8c1027e7265c35dd9a8bfb4ed2aa6474d6dedbd603a6e61483c1a6ce0d9
7
+ data.tar.gz: f255fb8349f53b7f7888486b841b8dcda64720032d3f27e010270f45903511430313ed37e0c054eba12224e5769dbf357ee50332a30f61e35470bf28835013ac
@@ -2,8 +2,7 @@
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/HornsAndHooves/pg_saurus.png)](http://travis-ci.org/HornsAndHooves/pg_saurus)
4
4
  [![Dependency Status](https://gemnasium.com/HornsAndHooves/pg_saurus.png)](https://gemnasium.com/HornsAndHooves/pg_saurus)
5
- [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/HornsAndHooves/pg_saurus)
6
-
5
+ [![Code Climate](https://codeclimate.com/github/HornsAndHooves/pg_saurus/badges/gpa.svg)](https://codeclimate.com/github/HornsAndHooves/pg_saurus)
7
6
  ActiveRecord extension to get more from PostgreSQL:
8
7
 
9
8
  * Create/drop schemas.
@@ -11,6 +10,8 @@ ActiveRecord extension to get more from PostgreSQL:
11
10
  * Use foreign keys.
12
11
  * Use partial indexes.
13
12
  * Run index creation concurrently.
13
+ * Create/drop functions.
14
+ * Create/drop triggers.
14
15
 
15
16
  PgSaurus is a fork of PgPower.
16
17
 
@@ -317,6 +318,7 @@ You can create, list, and drop functions.
317
318
  ### Examples
318
319
 
319
320
  ```ruby
321
+ # Create a function
320
322
  pets_not_empty_function = <<-SQL
321
323
  BEGIN
322
324
  IF (SELECT COUNT(*) FROM pets) > 0
@@ -327,13 +329,39 @@ BEGIN
327
329
  END IF;
328
330
  END;
329
331
  SQL
330
-
332
+ # Arguments are: function_name, return_type, function_definition, options (currently, only :schema)
331
333
  create_function 'pets_not_empty()', :boolean, pets_not_empty_function, schema: 'public'
332
- functions.any?{ |function| function.name == 'public.pets_not_empty()' }
333
- # => true
334
+
335
+ # Drop a function
334
336
  drop_function 'pets_not_empty()'
335
- functions.any?{ |function| function.name == 'public.pets_not_empty()' }
336
- # => false
337
+
338
+ # Get a list of defined functions
339
+ ActiveRecord::Base.connection.functions
340
+ ```
341
+
342
+ ## Triggers
343
+
344
+ You can create and remove triggers on tables and views.
345
+
346
+ ### Examples
347
+
348
+ ```ruby
349
+ # Create a trigger
350
+ create_trigger :pets, # Table or view name
351
+ :pets_not_empty_trigger_proc, # Procedure name. Parentheses are optional if you have no arguments.
352
+ 'AFTER INSERT', # Trigger event
353
+ for_each: 'ROW', # Can be row or statement. Default is row.
354
+ schema: 'public', # Optional schema name
355
+ constraint: true, # Sets if the trigger is a constraint. Default is false.
356
+ deferrable: true, # Sets if the trigger is immediate or deferrable. Default is immediate.
357
+ initially_deferred: true, # Sets if the trigger is initially deferred. Default is immediate. Only relevant if the trigger is deferrable.
358
+ condition: "new.name = 'fluffy'" # Optional when condition. Default is none.
359
+
360
+ # Drop a trigger
361
+ remove_trigger :pets, :pets_not_empty_trigger_proc
362
+
363
+ # Get a list of defined triggers on a table or view
364
+ ActiveRecord::Base.connection.triggers
337
365
  ```
338
366
 
339
367
  ## Tools
@@ -376,6 +404,10 @@ PgSaurus does not support Rails 3.
376
404
 
377
405
  ## TODO:
378
406
 
407
+ Support for Rails 4.2+
408
+
409
+ * This will likely necessitate a major rewrite.
410
+
379
411
  Support for JRuby:
380
412
 
381
413
  * Jdbc driver provides its own `create_schema(schema, user)` method - solve conflicts.
@@ -2,9 +2,10 @@ module PgSaurus::ConnectionAdapters # :nodoc:
2
2
  extend ActiveSupport::Autoload
3
3
 
4
4
  autoload :AbstractAdapter
5
- autoload :PostgreSQLAdapter, 'pg_saurus/connection_adapters/postgresql_adapter'
5
+ autoload :PostgreSQLAdapter, 'pg_saurus/connection_adapters/postgresql_adapter'
6
6
  autoload :Table
7
7
  autoload :ForeignKeyDefinition
8
- autoload :IndexDefinition, 'pg_saurus/connection_adapters/index_definition'
8
+ autoload :IndexDefinition, 'pg_saurus/connection_adapters/index_definition'
9
9
  autoload :FunctionDefinition, 'pg_saurus/connection_adapters/function_definition'
10
+ autoload :TriggerDefinition, 'pg_saurus/connection_adapters/trigger_definition'
10
11
  end
@@ -8,12 +8,14 @@ module PgSaurus::ConnectionAdapters::AbstractAdapter
8
8
  autoload :SchemaMethods
9
9
  autoload :IndexMethods
10
10
  autoload :FunctionMethods
11
+ autoload :TriggerMethods
11
12
 
12
13
  include CommentMethods
13
14
  include ForeignerMethods
14
15
  include SchemaMethods
15
16
  include IndexMethods
16
17
  include FunctionMethods
18
+ include TriggerMethods
17
19
 
18
20
  included do
19
21
  alias_method_chain :create_table, :schema_option
@@ -7,11 +7,33 @@ module PgSaurus::ConnectionAdapters::AbstractAdapter::FunctionMethods
7
7
  end
8
8
 
9
9
  # Create a database function.
10
+ #
11
+ # Example:
12
+ #
13
+ # # Arguments are: function_name, return_type, function_definition, options (currently, only :schema)
14
+ # create_function 'pets_not_empty()', :boolean, <<-FUNCTION, schema: 'public'
15
+ # BEGIN
16
+ # IF (SELECT COUNT(*) FROM pets) > 0
17
+ # THEN
18
+ # RETURN true;
19
+ # ELSE
20
+ # RETURN false;
21
+ # END IF;
22
+ # END;
23
+ # FUNCTION
24
+ #
25
+ # The schema is optional.
10
26
  def create_function(function_name, returning, definition, options = {})
11
27
 
12
28
  end
13
29
 
14
30
  # Delete the database function.
31
+ #
32
+ # Example:
33
+ #
34
+ # drop_function 'pets_not_empty()', schema: 'public'
35
+ #
36
+ # The schema is optional.
15
37
  def drop_function(function_name, options)
16
38
 
17
39
  end
@@ -0,0 +1,42 @@
1
+ # Adapter definitions for db functions
2
+ module PgSaurus::ConnectionAdapters::AbstractAdapter::TriggerMethods
3
+
4
+ # :nodoc
5
+ def supports_triggers?
6
+ false
7
+ end
8
+
9
+ # Returns the listing of currently defined db triggers
10
+ def triggers
11
+
12
+ end
13
+
14
+ # Creates a trigger.
15
+ #
16
+ # Example:
17
+ #
18
+ # create_trigger :pets, # Table or view name
19
+ # :pets_not_empty_trigger_proc, # Procedure name. Parentheses are optional if you have no arguments.
20
+ # 'AFTER INSERT', # Trigger event
21
+ # for_each: 'ROW', # Can be row or statement. Default is row.
22
+ # schema: 'public', # Optional schema name
23
+ # constraint: true, # Sets if the trigger is a constraint. Default is false.
24
+ # deferrable: true, # Sets if the trigger is immediate or deferrable. Default is immediate.
25
+ # initially_deferred: true, # Sets if the trigger is initially deferred. Default is immediate. Only relevant if the trigger is deferrable.
26
+ # condition: "new.name = 'fluffy'" # Optional when condition. Default is none.
27
+ #
28
+ def create_trigger(table_name, proc_name, event, options = {})
29
+
30
+ end
31
+
32
+ # Removes a trigger.
33
+ #
34
+ # Example:
35
+ #
36
+ # remove_trigger :pets, :pets_not_empty_trigger_proc
37
+ #
38
+ def remove_trigger(table_name, proc_name, options = {})
39
+
40
+ end
41
+
42
+ end
@@ -13,6 +13,7 @@ module PgSaurus::ConnectionAdapters::PostgreSQLAdapter
13
13
  autoload :TranslateException, 'pg_saurus/connection_adapters/postgresql_adapter/translate_exception'
14
14
  autoload :ViewMethods, 'pg_saurus/connection_adapters/postgresql_adapter/view_methods'
15
15
  autoload :FunctionMethods, 'pg_saurus/connection_adapters/postgresql_adapter/function_methods'
16
+ autoload :TriggerMethods, 'pg_saurus/connection_adapters/postgresql_adapter/trigger_methods'
16
17
 
17
18
  include ExtensionMethods
18
19
  include SchemaMethods
@@ -22,6 +23,7 @@ module PgSaurus::ConnectionAdapters::PostgreSQLAdapter
22
23
  include TranslateException
23
24
  include ViewMethods
24
25
  include FunctionMethods
26
+ include TriggerMethods
25
27
 
26
28
  included do
27
29
  alias_method_chain :tables, :non_public_schema_tables
@@ -102,7 +102,7 @@ module PgSaurus::ConnectionAdapters::PostgreSQLAdapter::FunctionMethods
102
102
  # Write out the fully qualified function name if the :schema option is passed.
103
103
  def full_function_name(function_name, options)
104
104
  schema = options[:schema]
105
- function_name = "#{schema}.#{function_name}" if schema
105
+ function_name = %Q{"#{schema}".#{function_name}} if schema
106
106
  function_name
107
107
  end
108
108
  private :full_function_name
@@ -0,0 +1,139 @@
1
+ # Provides methods to extend {ActiveRecord::ConnectionAdapters::PostgreSQLAdapter}
2
+ # to support db triggers.
3
+ module PgSaurus::ConnectionAdapters::PostgreSQLAdapter::TriggerMethods
4
+
5
+ # :nodoc
6
+ def supports_triggers?
7
+ true
8
+ end
9
+
10
+ # See lib/pg_saurus/connection_adapters/trigger_methods.rb
11
+ def create_trigger(table_name, proc_name, event, options = {})
12
+ proc_name = "#{proc_name}"
13
+ proc_name = "#{proc_name}()" unless proc_name.end_with?(')')
14
+
15
+ for_each = options[:for_each] || 'ROW'
16
+ constraint = options[:constraint]
17
+
18
+ sql = if constraint
19
+ "CREATE CONSTRAINT TRIGGER #{trigger_name(proc_name, options)}\n #{event}\n"
20
+ else
21
+ "CREATE TRIGGER #{trigger_name(proc_name, options)}\n #{event}\n"
22
+ end
23
+
24
+ sql << " ON #{quote_table_or_view(table_name, options)}\n"
25
+ if constraint
26
+ sql << if options[:deferrable]
27
+ " DEFERRABLE INITIALLY #{!!options[:initially_deferred] ? 'DEFERRED' : 'IMMEDIATE'}\n"
28
+ else
29
+ " NOT DEFERRABLE\n"
30
+ end
31
+ end
32
+ sql << " FOR EACH #{for_each}\n"
33
+ if condition = options[:condition]
34
+ sql << " WHEN (#{condition})\n"
35
+ end
36
+ sql << " EXECUTE PROCEDURE #{proc_name}"
37
+
38
+ execute sql
39
+ end
40
+
41
+ # See lib/pg_saurus/connection_adapters/trigger_methods.rb
42
+ def remove_trigger(table_name, proc_name, options = {})
43
+ execute "DROP TRIGGER #{trigger_name(proc_name, options)} ON #{quote_table_or_view(table_name, options)}"
44
+ end
45
+
46
+ # Returns the listing of currently defined db triggers
47
+ #
48
+ # @return [Array<::PgSaurus::ConnectionAdapters::TriggerDefinition>]
49
+ def triggers
50
+ res = select_all <<-SQL
51
+ SELECT n.nspname as schema,
52
+ c.relname as table,
53
+ t.tgname as trigger_name,
54
+ t.tgenabled as enable_mode,
55
+ t.tgdeferrable as is_deferrable,
56
+ t.tginitdeferred as is_initially_deferrable,
57
+ pg_catalog.pg_get_triggerdef(t.oid, true) as trigger_definition
58
+ FROM pg_catalog.pg_trigger t
59
+ INNER JOIN pg_catalog.pg_class c ON c.oid = t.tgrelid
60
+ INNER JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
61
+ WHERE c.relkind IN ('r', 'v')
62
+ AND NOT t.tgisinternal
63
+ ORDER BY 1, 2, 3;
64
+ SQL
65
+
66
+ res.inject([]) do |buffer, row|
67
+ schema = row['schema']
68
+ table = row['table']
69
+ trigger_name = row['trigger_name']
70
+ is_deferrable = row['is_deferrable']
71
+ is_initially_deferred = row['is_initially_deferred']
72
+
73
+ trigger_definition = row['trigger_definition']
74
+
75
+ is_constraint = is_constraint?(trigger_definition)
76
+ proc_name = parse_proc_name(trigger_definition)
77
+ event = parse_event(trigger_definition, trigger_name)
78
+ condition = parse_condition(trigger_definition)
79
+
80
+ for_every = !!(trigger_definition =~ /FOR[\s]EACH[\s]ROW/) ? :row : :statement
81
+
82
+ if proc_name && event
83
+ buffer << ::PgSaurus::ConnectionAdapters::TriggerDefinition.new(
84
+ trigger_name,
85
+ proc_name,
86
+ is_constraint,
87
+ event,
88
+ for_every,
89
+ is_deferrable,
90
+ is_initially_deferred,
91
+ condition,
92
+ table,
93
+ schema
94
+ )
95
+ end
96
+ buffer
97
+ end
98
+ end
99
+
100
+ def parse_condition(trigger_definition)
101
+ trigger_definition[/WHEN[\s](.*?)[\s]EXECUTE[\s]PROCEDURE/m, 1]
102
+ end
103
+ private :parse_condition
104
+
105
+ def parse_event(trigger_definition, trigger_name)
106
+ trigger_definition[/^CREATE[\sA-Z]+TRIGGER[\s]#{Regexp.escape(trigger_name)}[\s](.*?)[\s]ON[\s]/m, 1]
107
+ end
108
+ private :parse_event
109
+
110
+ def parse_proc_name(trigger_definition)
111
+ trigger_definition[/EXECUTE[\s]PROCEDURE[\s](.*?)$/m,1]
112
+ end
113
+ private :parse_proc_name
114
+
115
+ def is_constraint?(trigger_definition)
116
+ !!(trigger_definition =~ /^CREATE CONSTRAINT TRIGGER/)
117
+ end
118
+ private :is_constraint?
119
+
120
+ def quote_table_or_view(name, options)
121
+ schema = options[:schema]
122
+ if schema
123
+ "\"#{schema}\".\"#{name}\""
124
+ else
125
+ "\"#{name}\""
126
+ end
127
+ end
128
+ private :quote_table_or_view
129
+
130
+ def trigger_name(proc_name, options)
131
+ if name = options[:name]
132
+ name
133
+ else
134
+ "trigger_#{proc_name.gsub('(', '').gsub(')', '')}"
135
+ end
136
+ end
137
+ private :trigger_name
138
+
139
+ end
@@ -6,10 +6,11 @@ module PgSaurus::ConnectionAdapters::Table
6
6
 
7
7
  autoload :CommentMethods
8
8
  autoload :ForeignerMethods
9
+ autoload :TriggerMethods
9
10
 
10
11
  include CommentMethods
11
12
  include ForeignerMethods
12
-
13
+ include TriggerMethods
13
14
 
14
15
  included do
15
16
  alias_method_chain :references, :foreign_keys
@@ -0,0 +1,33 @@
1
+ # Provides methods to extend ActiveRecord::ConnectionAdapters::Table
2
+ # to support database triggers.
3
+ module PgSaurus::ConnectionAdapters::Table::TriggerMethods
4
+
5
+ # Creates a trigger.
6
+ #
7
+ # Example:
8
+ #
9
+ # change_table :pets do |t|
10
+ # t.create_trigger :pets_not_empty_trigger_proc,
11
+ # 'AFTER INSERT',
12
+ # for_each: 'ROW',
13
+ # schema: 'public',
14
+ # constraint: true,
15
+ # deferrable: true,
16
+ # initially_deferred: true
17
+ # end
18
+ def create_trigger(proc_name, event, options = {})
19
+ @base.create_trigger(@table_name, proc_name, event, options)
20
+ end
21
+
22
+ # Removes a trigger.
23
+ #
24
+ # Example:
25
+ #
26
+ # change_table :pets do |t|
27
+ # t.remove_trigger :pets_not_empty_trigger_proc
28
+ # end
29
+ def remove_trigger(proc_name, options = {})
30
+ @base.remove_trigger(@table_name, proc_name, options)
31
+ end
32
+
33
+ end
@@ -0,0 +1,16 @@
1
+ module PgSaurus::ConnectionAdapters
2
+
3
+ # Struct definition for a DB trigger.
4
+ class TriggerDefinition < Struct.new( :name,
5
+ :proc_name,
6
+ :constraint,
7
+ :event,
8
+ :for_each,
9
+ :deferrable,
10
+ :initially_deferred,
11
+ :condition,
12
+ :table,
13
+ :schema )
14
+
15
+ end
16
+ end
@@ -9,6 +9,7 @@ module PgSaurus::Migration::CommandRecorder
9
9
  autoload :ForeignerMethods
10
10
  autoload :ViewMethods
11
11
  autoload :FunctionMethods
12
+ autoload :TriggerMethods
12
13
 
13
14
  include ExtensionMethods
14
15
  include SchemaMethods
@@ -16,4 +17,5 @@ module PgSaurus::Migration::CommandRecorder
16
17
  include ForeignerMethods
17
18
  include ViewMethods
18
19
  include FunctionMethods
20
+ include TriggerMethods
19
21
  end
@@ -1,15 +1,15 @@
1
1
  # Methods to extend ActiveRecord::Migration::CommandRecorder to
2
- # support comments feature.
2
+ # support database functions.
3
3
  module PgSaurus::Migration::CommandRecorder::FunctionMethods
4
4
 
5
5
  # :nodoc
6
6
  def create_function(*args)
7
- record :create_function, *args
7
+ record :create_function, args
8
8
  end
9
9
 
10
10
  # :nodoc
11
11
  def drop_function(*args)
12
- record :drop_function, *args
12
+ record :drop_function, args
13
13
  end
14
14
 
15
15
  # :nodoc
@@ -0,0 +1,23 @@
1
+ # Methods to extend ActiveRecord::Migration::CommandRecorder to
2
+ # support database triggers.
3
+ module PgSaurus::Migration::CommandRecorder::TriggerMethods
4
+
5
+ # :nodoc:
6
+ def create_trigger(*args)
7
+ record :create_trigger, args
8
+ end
9
+
10
+ # :nodoc:
11
+ def remove_trigger(*args)
12
+ record :remove_trigger, args
13
+ end
14
+
15
+ # :nodoc:
16
+ def invert_create_trigger(args)
17
+ table_name, proc_name, _, options = *args
18
+ options ||= {}
19
+
20
+ [:remove_trigger, [table_name, proc_name, options]]
21
+ end
22
+
23
+ end
@@ -11,6 +11,7 @@ module PgSaurus::SchemaDumper
11
11
  autoload :ForeignerMethods
12
12
  autoload :ViewMethods
13
13
  autoload :FunctionMethods
14
+ autoload :TriggerMethods
14
15
 
15
16
  include ExtensionMethods
16
17
  include CommentMethods
@@ -18,6 +19,7 @@ module PgSaurus::SchemaDumper
18
19
  include ForeignerMethods
19
20
  include ViewMethods
20
21
  include FunctionMethods
22
+ include TriggerMethods
21
23
 
22
24
  included do
23
25
  alias_method_chain :header, :schemas
@@ -26,6 +28,7 @@ module PgSaurus::SchemaDumper
26
28
  alias_method_chain :tables, :views
27
29
  alias_method_chain :tables, :foreign_keys
28
30
  alias_method_chain :tables, :functions
31
+ alias_method_chain :tables, :triggers
29
32
  alias_method_chain :tables, :comments
30
33
  end
31
34
  end
@@ -0,0 +1,33 @@
1
+ # Support for dumping database triggers.
2
+ module PgSaurus::SchemaDumper::TriggerMethods
3
+
4
+ # :nodoc
5
+ def tables_with_triggers(stream)
6
+ tables_without_triggers(stream)
7
+
8
+ dump_triggers(stream)
9
+ stream.puts
10
+
11
+ stream
12
+ end
13
+
14
+ # Write out a command to create each detected trigger.
15
+ def dump_triggers(stream)
16
+ @connection.triggers.each do |trigger|
17
+ statement = " create_trigger '#{trigger.table}', '#{trigger.proc_name}', '#{trigger.event}', " \
18
+ "name: '#{trigger.name}', " \
19
+ "constraint: #{trigger.constraint ? :true : :false}, " \
20
+ "for_each: :#{trigger.for_each}, " \
21
+ "deferrable: #{trigger.deferrable ? :true : :false}, " \
22
+ "initially_deferred: #{trigger.initially_deferred ? :true : :false}, " \
23
+ "schema: '#{trigger.schema}'"
24
+
25
+ if trigger.condition
26
+ statement << %Q{, condition: '#{trigger.condition.gsub("'", %q(\\\'))}'}
27
+ end
28
+
29
+ stream.puts "#{statement}\n"
30
+ end
31
+ end
32
+
33
+ end
@@ -1,4 +1,4 @@
1
1
  module PgSaurus
2
2
  # Version of pg_saurus gem.
3
- VERSION = '2.3.1'
3
+ VERSION = "2.4.1"
4
4
  end
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: 2.3.1
4
+ version: 2.4.1
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: 2015-07-14 00:00:00.000000000 Z
16
+ date: 2015-07-16 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: pg
@@ -177,6 +177,7 @@ files:
177
177
  - lib/pg_saurus/connection_adapters/abstract_adapter/function_methods.rb
178
178
  - lib/pg_saurus/connection_adapters/abstract_adapter/index_methods.rb
179
179
  - lib/pg_saurus/connection_adapters/abstract_adapter/schema_methods.rb
180
+ - lib/pg_saurus/connection_adapters/abstract_adapter/trigger_methods.rb
180
181
  - lib/pg_saurus/connection_adapters/foreign_key_definition.rb
181
182
  - lib/pg_saurus/connection_adapters/function_definition.rb
182
183
  - lib/pg_saurus/connection_adapters/index_definition.rb
@@ -188,10 +189,13 @@ files:
188
189
  - lib/pg_saurus/connection_adapters/postgresql_adapter/index_methods.rb
189
190
  - lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb
190
191
  - lib/pg_saurus/connection_adapters/postgresql_adapter/translate_exception.rb
192
+ - lib/pg_saurus/connection_adapters/postgresql_adapter/trigger_methods.rb
191
193
  - lib/pg_saurus/connection_adapters/postgresql_adapter/view_methods.rb
192
194
  - lib/pg_saurus/connection_adapters/table.rb
193
195
  - lib/pg_saurus/connection_adapters/table/comment_methods.rb
194
196
  - lib/pg_saurus/connection_adapters/table/foreigner_methods.rb
197
+ - lib/pg_saurus/connection_adapters/table/trigger_methods.rb
198
+ - lib/pg_saurus/connection_adapters/trigger_definition.rb
195
199
  - lib/pg_saurus/create_index_concurrently.rb
196
200
  - lib/pg_saurus/engine.rb
197
201
  - lib/pg_saurus/errors.rb
@@ -202,6 +206,7 @@ files:
202
206
  - lib/pg_saurus/migration/command_recorder/foreigner_methods.rb
203
207
  - lib/pg_saurus/migration/command_recorder/function_methods.rb
204
208
  - lib/pg_saurus/migration/command_recorder/schema_methods.rb
209
+ - lib/pg_saurus/migration/command_recorder/trigger_methods.rb
205
210
  - lib/pg_saurus/migration/command_recorder/view_methods.rb
206
211
  - lib/pg_saurus/migration/set_role_method.rb
207
212
  - lib/pg_saurus/schema_dumper.rb
@@ -210,6 +215,7 @@ files:
210
215
  - lib/pg_saurus/schema_dumper/foreigner_methods.rb
211
216
  - lib/pg_saurus/schema_dumper/function_methods.rb
212
217
  - lib/pg_saurus/schema_dumper/schema_methods.rb
218
+ - lib/pg_saurus/schema_dumper/trigger_methods.rb
213
219
  - lib/pg_saurus/schema_dumper/view_methods.rb
214
220
  - lib/pg_saurus/tools.rb
215
221
  - lib/pg_saurus/version.rb