class SiSU_DbDrop::Drop

Public Class Methods

new(opt,conn,db_info,sql_type) click to toggle source
# File lib/sisu/db_drop.rb, line 59
def initialize(opt,conn,db_info,sql_type)
  @opt,@conn,@db_info,@sql_type=opt,conn,db_info,sql_type
  case @sql_type
  when :sqlite
    cascade=''
  else
    cascade='CASCADE'
  end
  @drop_table=[
    "DROP TABLE metadata_and_text #{cascade};",
    "DROP TABLE doc_objects #{cascade};",
    "DROP TABLE urls #{cascade};",
    "DROP TABLE endnotes #{cascade};",
    "DROP TABLE endnotes_asterisk #{cascade};",
    "DROP TABLE endnotes_plus #{cascade};",
  ]
end

Public Instance Methods

base() click to toggle source
# File lib/sisu/db_drop.rb, line 161
def base                                                             #% drop base indexes
  print "\n          drop documents common indexes\n" unless @opt.act[:quiet][:set]==:on
  sql_arr=[
    %{DROP INDEX idx_title;},
    %{DROP INDEX idx_author;},
    %{DROP INDEX idx_filename;},
    %{DROP INDEX idx_topics;},
    %{DROP INDEX idx_ocn;},
    %{DROP INDEX idx_digest_clean;},
    %{DROP INDEX idx_digest_all;},
    %{DROP INDEX idx_lev0;},
    %{DROP INDEX idx_lev1;},
    %{DROP INDEX idx_lev2;},
    %{DROP INDEX idx_lev3;},
    %{DROP INDEX idx_lev4;},
    %{DROP INDEX idx_lev5;},
    %{DROP INDEX idx_lev6;},
    %{DROP INDEX idx_endnote_nr;},
    %{DROP INDEX idx_digest_en;},
    %{DROP INDEX idx_endnote_nr_asterisk;},
    %{DROP INDEX idx_endnote_asterisk;},
    %{DROP INDEX idx_digest_en_asterisk;},
    %{DROP INDEX idx_endnote_nr_plus;},
    %{DROP INDEX idx_endnote_plus;},
    %{DROP INDEX idx_digest_en_plus},
  ]
  conn_execute_array(sql_arr)
end
conn_execute_array(sql_arr) click to toggle source
# File lib/sisu/db_drop.rb, line 150
def conn_execute_array(sql_arr)
  @conn.transaction do |conn|
    sql_arr.each do |sql|
      begin
        conn.exec_params(sql)
      rescue
        next
      end
    end
  end
end
drop() click to toggle source
# File lib/sisu/db_drop.rb, line 76
def drop
  def tables                                                              #% drop all tables
    begin
      msg_sqlite="as not all disk space is recovered after dropping the database << #{@db_info.sqlite.db} >>, you may be better off deleting the file, and recreating it as necessary"
      case @sql_type
      when :sqlite
        puts msg_sqlite
        ans=response?('remove sql database?')
        if ans \
        and File.exist?(@db_info.sqlite.db)
          @conn.close
          File.unlink(@db_info.sqlite.db)
          db=SiSU_Env::InfoDb.new
          conn=db.sqlite.conn_sqlite3
          sdb=SiSU_DbDBI::Create.new(@opt,conn,@db_info,@sql_type)
          sdb_index=SiSU_DbDBI::Index.new(@opt,conn,@db_info,@sql_type)
          sdb.output_dir?
          begin
            sdb.create_db
            sdb.create_table.metadata_and_text
            sdb.create_table.doc_objects
            sdb.create_table.endnotes
            sdb.create_table.endnotes_asterisk
            sdb.create_table.endnotes_plus
            sdb.create_table.urls
            sdb_index.create_indexes
          rescue
            SiSU_Errors::Rescued.new($!,$@,'-D').location do
              __LINE__.to_s + ':' + __FILE__
            end
            sdb.output_dir?
          end
          exit
        else
          @conn.transaction
          @drop_table.each do |d|
            begin
              @conn.exec_params(d)
            rescue
              next
            end
            end
          @conn.commit
        end
      when :pg
        @conn.transaction
        @drop_table.each do |d|
          begin
            @conn.exec_params(d)
          rescue
            next
          end
        end
        @conn.commit
      end
    rescue
      case @sql_type
      when :sqlite
        ans=response?('remove sql database?')
        if ans and File.exist?(@db_info.sqlite.db); File.unlink(@db_info.sqlite.db)
        end
      else
        @drop_table.each do |d|
          begin
            @conn.exec_params(d)
          rescue
            next
          end
        end
      end
    ensure
    end
  end
  def indexes
    def conn_execute_array(sql_arr)
      @conn.transaction do |conn|
        sql_arr.each do |sql|
          begin
            conn.exec_params(sql)
          rescue
            next
          end
        end
      end
    end
    def base                                                             #% drop base indexes
      print "\n          drop documents common indexes\n" unless @opt.act[:quiet][:set]==:on
      sql_arr=[
        %{DROP INDEX idx_title;},
        %{DROP INDEX idx_author;},
        %{DROP INDEX idx_filename;},
        %{DROP INDEX idx_topics;},
        %{DROP INDEX idx_ocn;},
        %{DROP INDEX idx_digest_clean;},
        %{DROP INDEX idx_digest_all;},
        %{DROP INDEX idx_lev0;},
        %{DROP INDEX idx_lev1;},
        %{DROP INDEX idx_lev2;},
        %{DROP INDEX idx_lev3;},
        %{DROP INDEX idx_lev4;},
        %{DROP INDEX idx_lev5;},
        %{DROP INDEX idx_lev6;},
        %{DROP INDEX idx_endnote_nr;},
        %{DROP INDEX idx_digest_en;},
        %{DROP INDEX idx_endnote_nr_asterisk;},
        %{DROP INDEX idx_endnote_asterisk;},
        %{DROP INDEX idx_digest_en_asterisk;},
        %{DROP INDEX idx_endnote_nr_plus;},
        %{DROP INDEX idx_endnote_plus;},
        %{DROP INDEX idx_digest_en_plus},
      ]
      conn_execute_array(sql_arr)
    end
    def text                                                             #% drop TEXT indexes, sqlite
      print "\n          drop documents TEXT indexes\n" unless @opt.act[:quiet][:set]==:on
      sql_arr=[
        %{DROP INDEX idx_clean;},
        %{DROP INDEX idx_endnote},
      ]
      conn_execute_array(sql_arr)
    end
    self
  end
  indexes.base
  @opt.act[:psql][:set]==:on ? '' : indexes.text
  self
end
indexes() click to toggle source
# File lib/sisu/db_drop.rb, line 149
def indexes
  def conn_execute_array(sql_arr)
    @conn.transaction do |conn|
      sql_arr.each do |sql|
        begin
          conn.exec_params(sql)
        rescue
          next
        end
      end
    end
  end
  def base                                                             #% drop base indexes
    print "\n          drop documents common indexes\n" unless @opt.act[:quiet][:set]==:on
    sql_arr=[
      %{DROP INDEX idx_title;},
      %{DROP INDEX idx_author;},
      %{DROP INDEX idx_filename;},
      %{DROP INDEX idx_topics;},
      %{DROP INDEX idx_ocn;},
      %{DROP INDEX idx_digest_clean;},
      %{DROP INDEX idx_digest_all;},
      %{DROP INDEX idx_lev0;},
      %{DROP INDEX idx_lev1;},
      %{DROP INDEX idx_lev2;},
      %{DROP INDEX idx_lev3;},
      %{DROP INDEX idx_lev4;},
      %{DROP INDEX idx_lev5;},
      %{DROP INDEX idx_lev6;},
      %{DROP INDEX idx_endnote_nr;},
      %{DROP INDEX idx_digest_en;},
      %{DROP INDEX idx_endnote_nr_asterisk;},
      %{DROP INDEX idx_endnote_asterisk;},
      %{DROP INDEX idx_digest_en_asterisk;},
      %{DROP INDEX idx_endnote_nr_plus;},
      %{DROP INDEX idx_endnote_plus;},
      %{DROP INDEX idx_digest_en_plus},
    ]
    conn_execute_array(sql_arr)
  end
  def text                                                             #% drop TEXT indexes, sqlite
    print "\n          drop documents TEXT indexes\n" unless @opt.act[:quiet][:set]==:on
    sql_arr=[
      %{DROP INDEX idx_clean;},
      %{DROP INDEX idx_endnote},
    ]
    conn_execute_array(sql_arr)
  end
  self
end
tables() click to toggle source
# File lib/sisu/db_drop.rb, line 77
def tables                                                              #% drop all tables
  begin
    msg_sqlite="as not all disk space is recovered after dropping the database << #{@db_info.sqlite.db} >>, you may be better off deleting the file, and recreating it as necessary"
    case @sql_type
    when :sqlite
      puts msg_sqlite
      ans=response?('remove sql database?')
      if ans \
      and File.exist?(@db_info.sqlite.db)
        @conn.close
        File.unlink(@db_info.sqlite.db)
        db=SiSU_Env::InfoDb.new
        conn=db.sqlite.conn_sqlite3
        sdb=SiSU_DbDBI::Create.new(@opt,conn,@db_info,@sql_type)
        sdb_index=SiSU_DbDBI::Index.new(@opt,conn,@db_info,@sql_type)
        sdb.output_dir?
        begin
          sdb.create_db
          sdb.create_table.metadata_and_text
          sdb.create_table.doc_objects
          sdb.create_table.endnotes
          sdb.create_table.endnotes_asterisk
          sdb.create_table.endnotes_plus
          sdb.create_table.urls
          sdb_index.create_indexes
        rescue
          SiSU_Errors::Rescued.new($!,$@,'-D').location do
            __LINE__.to_s + ':' + __FILE__
          end
          sdb.output_dir?
        end
        exit
      else
        @conn.transaction
        @drop_table.each do |d|
          begin
            @conn.exec_params(d)
          rescue
            next
          end
          end
        @conn.commit
      end
    when :pg
      @conn.transaction
      @drop_table.each do |d|
        begin
          @conn.exec_params(d)
        rescue
          next
        end
      end
      @conn.commit
    end
  rescue
    case @sql_type
    when :sqlite
      ans=response?('remove sql database?')
      if ans and File.exist?(@db_info.sqlite.db); File.unlink(@db_info.sqlite.db)
      end
    else
      @drop_table.each do |d|
        begin
          @conn.exec_params(d)
        rescue
          next
        end
      end
    end
  ensure
  end
end
text() click to toggle source
# File lib/sisu/db_drop.rb, line 189
def text                                                             #% drop TEXT indexes, sqlite
  print "\n          drop documents TEXT indexes\n" unless @opt.act[:quiet][:set]==:on
  sql_arr=[
    %{DROP INDEX idx_clean;},
    %{DROP INDEX idx_endnote},
  ]
  conn_execute_array(sql_arr)
end