Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions lib/activerecord-clean-db-structure/clean_dump.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def clean

extensions_to_remove = ["pg_stat_statements", "pg_buffercache"]
if options[:keep_extensions] == :all
extensions_to_remove = []
extensions_to_remove = []
elsif options[:keep_extensions]
extensions_to_remove -= Array(options[:keep_extensions])
end
Expand Down Expand Up @@ -77,7 +77,7 @@ def clean_inherited_tables
inherited_tables.each do |inherited_table|
dump.gsub!(/ALTER TABLE ONLY ([\w_]+\.)?#{inherited_table}[^;]+;/, '')

index_regexp = /CREATE INDEX ([\w_]+) ON ([\w_]+\.)?#{inherited_table}[^;]+;/m
index_regexp = /CREATE INDEX ("?[\w_]+"?) ON ([\w_]+\.)?#{inherited_table}[^;]+;/m
dump.scan(index_regexp).map(&:first).each do |inherited_table_index|
dump.gsub!(/-- Name: #{inherited_table_index}; Type: INDEX; Schema: \w+/, '')
end
Expand Down Expand Up @@ -111,14 +111,14 @@ def clean_partition_tables
names = []
partitioned_tables.each { |table| names << table.split('.', 2)[1] }
if names.any?
dump.scan(/CREATE (UNIQUE )?INDEX (\w+) ON (\w+\.)?(#{names.join('|')})[^;]+;/m).each { |m| names << m[1] }
dump.scan(/CREATE (UNIQUE )?INDEX "?(\w+)"? ON (\w+\.)?(#{names.join('|')})[^;]+;/m).each { |m| names << m[1] }
end
statements.reject! { |stmt| names.any? { |name| stmt.include?(name) } }
@dump = statements.join("\n\n")
@dump << "\n" if @dump[-1] != "\n"

# This is mostly done to allow restoring Postgres 11 output on Postgres 10
dump.gsub!(/CREATE INDEX ([\w]+) ON ONLY/, 'CREATE INDEX \\1 ON')
dump.gsub!(/CREATE INDEX ("?[\w+]"?) ON ONLY/, 'CREATE INDEX \\1 ON')
end

def clean_options
Expand All @@ -137,7 +137,7 @@ def clean_options
.group_by { |line| line.scan(/\b\w+\.\w+\b/).first }
.transform_values(&:join)

dump.gsub!(/^CREATE( UNIQUE)? INDEX \w+ ON .+\n+/, '')
dump.gsub!(/^CREATE( UNIQUE)? INDEX "?\w+"? ON .+\n+/, '')
dump.gsub!(/^-- Name: \w+; Type: INDEX; Schema: \w+\n+/, '')
indexes.each do |table, indexes_for_table|
dump.gsub!(/^(CREATE TABLE #{table}\b(:?[^;\n]*\n)+\);*\n(?:.*);*)/) { $1 + "\n\n" + indexes_for_table }
Expand Down
6 changes: 6 additions & 0 deletions test/data/input.sql
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,12 @@ CREATE INDEX index_delayed_jobs_on_locked_by ON public.delayed_jobs USING btree

CREATE INDEX index_delayed_jobs_on_queue ON public.delayed_jobs USING btree (queue);

--
-- Name: index_delayed_jobs_on_failed_at_IS_NULL; Type: INDEX; Schema: public; Owner: -
--

CREATE INDEX "index_delayed_jobs_on_failed_at_IS_NULL" ON public.delayed_jobs USING btree (((failed_at IS NULL)));


--
-- Name: index_delayed_jobs_on_run_at; Type: INDEX; Schema: public; Owner: -
Expand Down
4 changes: 4 additions & 0 deletions test/expectations/default_props.sql
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ CREATE INDEX index_delayed_jobs_on_locked_by ON public.delayed_jobs USING btree

CREATE INDEX index_delayed_jobs_on_queue ON public.delayed_jobs USING btree (queue);

-- Name: index_delayed_jobs_on_failed_at_IS_NULL; Type: INDEX

CREATE INDEX "index_delayed_jobs_on_failed_at_IS_NULL" ON public.delayed_jobs USING btree (((failed_at IS NULL)));

-- Name: index_delayed_jobs_on_run_at; Type: INDEX

CREATE INDEX index_delayed_jobs_on_run_at ON public.delayed_jobs USING btree (run_at) WHERE (locked_at IS NULL);
Expand Down
4 changes: 4 additions & 0 deletions test/expectations/ignore_ids.sql
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,10 @@ CREATE INDEX index_delayed_jobs_on_locked_by ON public.delayed_jobs USING btree

CREATE INDEX index_delayed_jobs_on_queue ON public.delayed_jobs USING btree (queue);

-- Name: index_delayed_jobs_on_failed_at_IS_NULL; Type: INDEX

CREATE INDEX "index_delayed_jobs_on_failed_at_IS_NULL" ON public.delayed_jobs USING btree (((failed_at IS NULL)));

-- Name: index_delayed_jobs_on_run_at; Type: INDEX

CREATE INDEX index_delayed_jobs_on_run_at ON public.delayed_jobs USING btree (run_at) WHERE (locked_at IS NULL);
Expand Down
1 change: 1 addition & 0 deletions test/expectations/indexes_after_tables.sql
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ WITH (fillfactor='85');

CREATE INDEX index_delayed_jobs_on_locked_by ON public.delayed_jobs USING btree (locked_by);
CREATE INDEX index_delayed_jobs_on_queue ON public.delayed_jobs USING btree (queue);
CREATE INDEX "index_delayed_jobs_on_failed_at_IS_NULL" ON public.delayed_jobs USING btree (((failed_at IS NULL)));
CREATE INDEX index_delayed_jobs_on_run_at ON public.delayed_jobs USING btree (run_at) WHERE (locked_at IS NULL);

-- Name: schema_migrations; Type: TABLE
Expand Down
4 changes: 4 additions & 0 deletions test/expectations/keep_extensions_all.sql
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ CREATE INDEX index_delayed_jobs_on_locked_by ON public.delayed_jobs USING btree

CREATE INDEX index_delayed_jobs_on_queue ON public.delayed_jobs USING btree (queue);

-- Name: index_delayed_jobs_on_failed_at_IS_NULL; Type: INDEX

CREATE INDEX "index_delayed_jobs_on_failed_at_IS_NULL" ON public.delayed_jobs USING btree (((failed_at IS NULL)));

-- Name: index_delayed_jobs_on_run_at; Type: INDEX

CREATE INDEX index_delayed_jobs_on_run_at ON public.delayed_jobs USING btree (run_at) WHERE (locked_at IS NULL);
Expand Down
4 changes: 4 additions & 0 deletions test/expectations/order_column_definitions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ CREATE INDEX index_delayed_jobs_on_locked_by ON public.delayed_jobs USING btree

CREATE INDEX index_delayed_jobs_on_queue ON public.delayed_jobs USING btree (queue);

-- Name: index_delayed_jobs_on_failed_at_IS_NULL; Type: INDEX

CREATE INDEX "index_delayed_jobs_on_failed_at_IS_NULL" ON public.delayed_jobs USING btree (((failed_at IS NULL)));

-- Name: index_delayed_jobs_on_run_at; Type: INDEX

CREATE INDEX index_delayed_jobs_on_run_at ON public.delayed_jobs USING btree (run_at) WHERE (locked_at IS NULL);
Expand Down
4 changes: 4 additions & 0 deletions test/expectations/order_schema_migrations_values.sql
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ CREATE INDEX index_delayed_jobs_on_locked_by ON public.delayed_jobs USING btree

CREATE INDEX index_delayed_jobs_on_queue ON public.delayed_jobs USING btree (queue);

-- Name: index_delayed_jobs_on_failed_at_IS_NULL; Type: INDEX

CREATE INDEX "index_delayed_jobs_on_failed_at_IS_NULL" ON public.delayed_jobs USING btree (((failed_at IS NULL)));

-- Name: index_delayed_jobs_on_run_at; Type: INDEX

CREATE INDEX index_delayed_jobs_on_run_at ON public.delayed_jobs USING btree (run_at) WHERE (locked_at IS NULL);
Expand Down