Class: SiSU_DbDrop::Drop

Inherits:
Object
  • Object
show all
Includes:
SiSU_Response
Defined in:
lib/sisu/db_drop.rb

Direct Known Subclasses

SiSU_DbDBI::Drop

Instance Method Summary collapse

Methods included from SiSU_Response

#answer?, #available_selections_, #query, #response?, #response_short, #response_strict, #selection_options, #selections_available_

Constructor Details

#initialize(opt, conn, db_info, sql_type) ⇒ Drop

Returns a new instance of Drop.



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 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

Instance Method Details

#baseObject

% drop base indexes



161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# 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) ⇒ Object



150
151
152
153
154
155
156
157
158
159
160
# 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

#dropObject



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# 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.
            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

#indexesObject



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# 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

#tablesObject

% drop all tables



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# 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.
          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

#textObject

% drop TEXT indexes, sqlite



189
190
191
192
193
194
195
196
# 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