Sha256: a615ea8dab79604f69b0ced89bcf213ef842801645c16488b488e4ea9854435d

Contents?: true

Size: 1.33 KB

Versions: 22

Compression:

Stored size: 1.33 KB

Contents

# Truncates only the tables that have been modified, according to sequence
# values
module MultiTenant
  module FastTruncate
    def self.run(exclude: ['schema_migrations'])
      # This is a slightly faster version of DatabaseCleaner.clean_with(:truncation, pre_count: true)
      ActiveRecord::Base.connection.execute format(%(
      DO LANGUAGE plpgsql $$
      DECLARE
        t record;
        tables text[];
        seq_exists boolean;
        needs_truncate boolean;
      BEGIN
        FOR t IN SELECT schemaname, tablename FROM pg_tables WHERE schemaname = 'public' AND tablename NOT IN (%s) LOOP
          EXECUTE 'SELECT EXISTS (SELECT * from pg_class c WHERE c.relkind = ''S'' AND c.relname=''' || t.tablename || '_id_seq'')' into seq_exists;
          IF seq_exists THEN
            EXECUTE 'SELECT is_called FROM ' || t.tablename || '_id_seq' INTO needs_truncate;
          ELSE
            needs_truncate := true;
          END IF;

          IF needs_truncate THEN
            tables := array_append(tables, quote_ident(t.schemaname) || '.' || quote_ident(t.tablename));
          END IF;
        END LOOP;

        IF array_length(tables, 1) > 0 THEN
          EXECUTE 'TRUNCATE TABLE ' || array_to_string(tables, ', ') || ' RESTART IDENTITY CASCADE';
        END IF;
      END$$;), exclude.map { |t| "'" + t + "'" }.join('\n'))
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
activerecord-multi-tenant-2.2.0 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-2.1.6 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-2.1.5 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-2.1.4 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-2.1.3 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-2.1.2 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-2.1.1 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-2.0.0 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-1.2.0 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-1.1.1 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-1.1.0 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-1.0.4 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-1.0.3 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-1.0.2 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-1.0.1 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-1.0.0 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-0.11.0 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-0.10.0 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-0.9.0 lib/activerecord-multi-tenant/fast_truncate.rb
activerecord-multi-tenant-0.8.1 lib/activerecord-multi-tenant/fast_truncate.rb