# coding: utf-8
=begin
* Name: SiSU
* Description: a framework for document structuring, publishing and search
* Author: Ralph Amissah
* Copyright: (C) 1997 - 2010, Ralph Amissah, All Rights Reserved.
* License: GPL 3 or later:
SiSU, a framework for document structuring, publishing and search
Copyright (C) Ralph Amissah
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option)
any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see .
If you have Internet connection, the latest version of the GPL should be
available at these locations:
* SiSU uses:
* Standard SiSU markup syntax,
* Standard SiSU meta-markup syntax, and the
* Standard SiSU object citation numbering and system
* Hompages:
* Download:
* Ralph Amissah
** Description: modules shared by the different db types, dbi, postgresql,
sqlite
=end
module SiSU_DB_select
class Case
def initialize(opt,conn='',sql_type='pg')
@opt,@conn,@sql_type=opt,conn,sql_type
@db=SiSU_Env::Info_db.new
@file=sql_maintenance_file
@sdb=SiSU_DB_DBI::Create.new(@opt,@conn,@file,@sql_type) # db_dbi.rb
@sdb_index=SiSU_DB_DBI::Index.new(@opt,@conn,@file,@sql_type) # db_dbi.rb
@sdb_no=SiSU_DB_DBI::Drop.new(@opt,@conn,@db,@sql_type) # db_dbi.rb
if @opt.mod.inspect =~/update|import/
@sdb_import=SiSU_DB_DBI::Import.new(@opt,@conn,@file,@sql_type)
@sdb_remove_doc=SiSU_DB_DBI::Remove.new(@opt,@conn,@file,@sql_type)
elsif @opt.mod.inspect =~/remove/
@sdb_remove_doc=SiSU_DB_DBI::Remove.new(@opt,@conn,@file,@sql_type)
end
end
def db_exist?
if @sql_type=='sqlite' \
and (not (FileTest.file?(@db.sqlite.db)) or FileTest.zero?(@db.sqlite.db))
puts %{no connection with #{@sql_type} database established, createdb "#{@db.sqlite.db}"?}
exit
end
if @conn.class==NilClass
db=@sql_type=='sqlite' \
? @db.sqlite.db \
: @db.psql.db
puts %{no connection with #{@sql_type} database established, createdb "#{db}"?}
exit
end
end
def sql_maintenance_file
file=if @opt.inspect =~/M/
x=if @opt.fns and not @opt.fns.empty?
@env=SiSU_Env::Info_env.new(@opt.fns) if @opt.fns
puts "\n#{@env.path.sqlite}/#{@opt.fns}.sql" if @sql_type =~/sqlite/ and @opt.cmd =~/M/
@db=SiSU_Env::Info_db.new
@job="sqlite3 #{@db.sqlite.db} < #{@env.path.sqlite}/#{@opt.fns}.sql"
File.new("#{@env.path.sqlite}/#{@opt.fns}.sql",'w+')
elsif @opt.fns and @opt.fns.inspect =~/create/; nil #sort variations later
else nil
end
else nil
end
file
end
def cases
@opt.mod.each do |mod|
case mod
when /^--createdb$/
@sdb.output_dir?
begin
@sdb.create_db
rescue; @sdb.output_dir?
end
when /^--(?:init(?:ialize)?|create(?:all)?)$/
@sdb.output_dir?
begin
@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::Info_error.new($!,$@,'-D').error; @sdb.output_dir?
end
when /^--createtables?$/
@sdb.output_dir?
begin
@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; @sdb.output_dir?
end
when /^--recreate$/
@sdb.output_dir?
begin
@sdb_no.drop.tables
@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; @sdb.output_dir?
end
when /^--cr(eate)?lex$/
@sdb.output_dir?
begin
@sdb.create_table.doc_objects
rescue; @sdb.output_dir?
end
when /^--cr(eate)?metadata$/
@sdb.output_dir?
begin
@sdb.create_table.metadata_and_text
rescue; @sdb.output_dir?
end
when /^--import$/
db_exist?
@sdb_import.marshal_load
tell=case @sql_type
when /sqlite/; SiSU_Screen::Ansi.new(@opt.cmd,"sqlite #{@db.sqlite.db} database?")
when /pg/; SiSU_Screen::Ansi.new(@opt.cmd,"pgaccess or psql #{@db.psql.db} database?")
else '???'
end
tell.puts_grey if @opt.cmd =~/v/
when /^--update$/
db_exist?
@sdb_remove_doc.remove
@sdb_import.marshal_load
SiSU_Screen::Ansi.new(@opt.cmd,"pgaccess or psql #{@db.psql.db} database?").puts_grey if @opt.cmd =~/v/
when /^--remove$/
db_exist?
@sdb_remove_doc.remove
when /^--index$/
db_exist?
@sdb_index.create_indexes
when /^droptable(s)?$/
db_exist?
@sdb_no.drop.tables
when /^--dropindex(es)?$/
db_exist?
@sdb_no.drop.indexes
when /^--(?:dropall|drop)$/
db_exist?
@sdb_no.drop.tables
when /^--(?:db=)?(?:(?:sq)?lite|pg(?:sql)?|my(?:sql)?)$/
else
help=SiSU_Help::Help.new
help.summary
help.commands
end
if @opt.cmd =~/M/ \
and @opt.cmd =~/d/
puts @job
end
end
begin
rescue; @sdb.output_dir?
end
end
end
end
__END__