aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2014-07-23 18:14:46 -0400
committerRalph Amissah <ralph@amissah.com>2014-07-23 18:14:46 -0400
commit9207fcb6d7953a7acc3024e1cd21edcdd83e9ffa (patch)
treea381f8590bcf6721f1d088c3ab5211e1a079d008 /lib
parentdebian/changelog (5.5.2-1) (diff)
parentv5 v6: db, reorganize previous commit (diff)
Merge tag 'sisu_5.5.3' into debian/sid
SiSU 5.5.3
Diffstat (limited to 'lib')
-rw-r--r--lib/sisu/v5/db_import.rb62
-rw-r--r--lib/sisu/v5/db_remove.rb79
-rw-r--r--lib/sisu/v5/db_select.rb177
-rw-r--r--lib/sisu/v5/utils.rb1
-rw-r--r--lib/sisu/v6/db_import.rb62
-rw-r--r--lib/sisu/v6/db_remove.rb79
-rw-r--r--lib/sisu/v6/db_select.rb177
-rw-r--r--lib/sisu/v6/utils.rb1
8 files changed, 432 insertions, 206 deletions
diff --git a/lib/sisu/v5/db_import.rb b/lib/sisu/v5/db_import.rb
index 3e9d19ec..791eef43 100644
--- a/lib/sisu/v5/db_import.rb
+++ b/lib/sisu/v5/db_import.rb
@@ -69,6 +69,7 @@ module SiSU_DbImport
class Import < SiSU_DbText::Prepare
include SiSU_Param
include SiSU_Screen
+ include SiSU_DbAction
@@dl=nil
@@hname=nil
attr_accessor :tp
@@ -138,16 +139,66 @@ module SiSU_DbImport
'Marshal Load',
@fnc
).puts_grey if @opt.act[:verbose][:set]==:on
-#%
select_first_match=%{
SELECT metadata_and_text.tid
FROM metadata_and_text
WHERE metadata_and_text.src_filename = '#{@md.fns}'
AND metadata_and_text.language_document_char = '#{@opt.lng}'
;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
- file_exist=@sql_type==:sqlite \
- ? @conn.get_first_value(select_first_match)
- : @conn.exec(select_first_match).field_values("tid")[0]
+ file_exist=if @sql_type==:sqlite
+ begin
+ @conn.get_first_value(select_first_match)
+ rescue SQLite3::Exception => e
+ # not tested
+ puts "Exception occurred"
+ puts e
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ sdb={
+ create: SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type),
+ index: SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type),
+ }
+ db_action(sdb).create
+ end
+ else
+ begin
+ @conn.exec(select_first_match).field_values("tid")[0]
+ rescue PG::Error => e
+ err=[
+ e.result.error_field( PG::Result::PG_DIAG_SEVERITY ),
+ e.result.error_field( PG::Result::PG_DIAG_SQLSTATE ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_PRIMARY ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_DETAIL ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_HINT ),
+ e.result.error_field( PG::Result::PG_DIAG_STATEMENT_POSITION ),
+ e.result.error_field( PG::Result::PG_DIAG_INTERNAL_POSITION ),
+ e.result.error_field( PG::Result::PG_DIAG_INTERNAL_QUERY ),
+ e.result.error_field( PG::Result::PG_DIAG_CONTEXT ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_FILE ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_LINE ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_FUNCTION ),
+ ]
+ p err
+ if err[2] =~/relation "\S+?" does not exist/ \
+ or err.inspect =~/relation "\S+?" does not exist/
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + err[2] + "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ sdb={
+ create: SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type),
+ index: SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type),
+ }
+ db_action(sdb).create
+ retry
+ end
+ end
+ end
if not file_exist
t_d=[] # transaction_data
t_d << db_import_metadata
@@ -199,7 +250,7 @@ module SiSU_DbImport
else
if file_exist
@db=SiSU_Env::InfoDb.new
- puts "\nfile #{@opt.fns} in language code #{@opt.lng} already exists in database #{@db.psql.db} update instead?"
+ puts "\nfile #{@opt.fns} in language code #{@opt.lng} already exists in database #{@db.psql.db}, use --update instead?"
end
end
end
@@ -535,6 +586,7 @@ module SiSU_DbImport
if inf[/#{Mx[:en_a_o]}(\d+)(.+?)#{Mx[:en_a_c]}/]
nr,txt,digest_clean=$1,$2.strip,0
end
+ @id_n ||=0
@id_n+=1
txt=special_character_escape(txt)
body=SiSU_FormatShared::CSS_Format.new(@md,data).endnote(nr,txt)
diff --git a/lib/sisu/v5/db_remove.rb b/lib/sisu/v5/db_remove.rb
index 1fbf8c9f..cff42409 100644
--- a/lib/sisu/v5/db_remove.rb
+++ b/lib/sisu/v5/db_remove.rb
@@ -63,6 +63,7 @@
=end
module SiSU_DbRemove
class Remove
+ include SiSU_DbAction
def initialize(opt,conn,file,sql_type)
@opt,@conn,@file,@sql_type=opt,conn,file,sql_type
@md=SiSU_Param::Parameters.new(@opt).get
@@ -76,22 +77,70 @@ module SiSU_DbRemove
: false
end
del_id=if driver_sqlite3
- remove_selected=%{
- SELECT tid
- FROM metadata_and_text
- WHERE src_filename = '#{@md.fns}'
- AND metadata_and_text.language_document_char = '#{@opt.lng}'
- ;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
- @conn.get_first_value(remove_selected).to_i
+ begin
+ remove_selected=%{
+ SELECT tid
+ FROM metadata_and_text
+ WHERE src_filename = '#{@md.fns}'
+ AND metadata_and_text.language_document_char = '#{@opt.lng}'
+ ;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
+ @conn.get_first_value(remove_selected).to_i
+ rescue SQLite3::Exception => e
+ #not tested
+ puts "Exception occurred"
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).mark(e.inspect)
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ sdb={
+ create: SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type),
+ index: SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type),
+ }
+ db_action(sdb).create
+ end
else
- remove_selected=%{
- SELECT metadata_and_text.tid
- FROM metadata_and_text
- WHERE metadata_and_text.src_filename = '#{@md.fns}'
- AND metadata_and_text.language_document_char = '#{@opt.lng}'
- ;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
- x=@conn.exec(remove_selected)
- x.field_values("tid")[0]
+ begin
+ remove_selected=%{
+ SELECT metadata_and_text.tid
+ FROM metadata_and_text
+ WHERE metadata_and_text.src_filename = '#{@md.fns}'
+ AND metadata_and_text.language_document_char = '#{@opt.lng}'
+ ;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
+ x=@conn.exec(remove_selected)
+ x.field_values("tid")[0]
+ rescue PG::Error => e
+ err=[
+ e.result.error_field( PG::Result::PG_DIAG_SEVERITY ),
+ e.result.error_field( PG::Result::PG_DIAG_SQLSTATE ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_PRIMARY ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_DETAIL ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_HINT ),
+ e.result.error_field( PG::Result::PG_DIAG_STATEMENT_POSITION ),
+ e.result.error_field( PG::Result::PG_DIAG_INTERNAL_POSITION ),
+ e.result.error_field( PG::Result::PG_DIAG_INTERNAL_QUERY ),
+ e.result.error_field( PG::Result::PG_DIAG_CONTEXT ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_FILE ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_LINE ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_FUNCTION ),
+ ]
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).mark("\n" + err.inspect)
+ if err[2] =~/relation "\S+?" does not exist/ \
+ or err.inspect =~/relation "\S+?" does not exist/
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + err[2] + "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ sdb={
+ create: SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type),
+ index: SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type),
+ }
+ db_action(sdb).create
+ end
+ end
end
if del_id
sql_entry=[
diff --git a/lib/sisu/v5/db_select.rb b/lib/sisu/v5/db_select.rb
index 3f232c14..333c3f0c 100644
--- a/lib/sisu/v5/db_select.rb
+++ b/lib/sisu/v5/db_select.rb
@@ -61,52 +61,120 @@
sqlite
=end
+module SiSU_DbAction
+ def db_action(sdb)
+ @sdb=sdb
+ def createdb
+ @sdb[:create].output_dir?
+ begin
+ @sdb[:create].create_db
+ rescue
+ @sdb[:create].output_dir?
+ end
+ end
+ def drop
+ @sdb[:drop].drop.tables
+ end
+ def create
+ @sdb[:create].output_dir?
+ begin
+ @sdb[:create].create_table.metadata_and_text
+ @sdb[:create].create_table.doc_objects
+ @sdb[:create].create_table.endnotes
+ @sdb[:create].create_table.endnotes_asterisk
+ @sdb[:create].create_table.endnotes_plus
+ @sdb[:create].create_table.urls
+ @sdb[:index].create_indexes
+ rescue
+ SiSU_Errors::Rescued.new($!,$@,'--sqlite').location
+ @sdb[:create].output_dir? do
+ __LINE__.to_s + ':' + __FILE__
+ end
+ end
+ end
+ def import
+ db_exist?
+ @sdb[:import].marshal_load
+ tell=case @sql_type
+ when :sqlite
+ SiSU_Screen::Ansi.new(
+ @opt.act[:color_state][:set],
+ "sqlite3 #{@db.sqlite.db} database?"
+ )
+ when :pg
+ SiSU_Screen::Ansi.new(
+ @opt.act[:color_state][:set],
+ "pgaccess or psql #{@db.psql.db} database?"
+ )
+ else '???'
+ end
+ tell.puts_grey if @opt.act[:verbose][:set]==:on
+ end
+ def remove
+ db_exist?
+ @sdb[:remove_doc].remove
+ end
+ def update
+ remove
+ import
+ end
+ self
+ end
+end
module SiSU_DbSelect
class Case
+ include SiSU_DbAction
def initialize(opt,conn='',sql_type=:pg)
@opt,@conn,@sql_type=opt,conn,sql_type
@db=SiSU_Env::InfoDb.new
@file_maint=sql_maintenance_file
- @sdb=
- SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type)
- @sdb_index=
- SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type)
- @sdb_no=
- SiSU_DbDBI::Drop.new(@opt,@conn,@db,@sql_type)
+ @sdb={
+ create: SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type),
+ index: SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type),
+ drop: SiSU_DbDBI::Drop.new(@opt,@conn,@db,@sql_type),
+ }
if (@opt.act[:psql_import][:set]==:on \
|| @opt.act[:psql_update][:set]==:on) \
or (@opt.act[:sqlite_import][:set]==:on \
|| @opt.act[:sqlite_update][:set]==:on)
- @sdb_import=
- SiSU_DbDBI::Import.new(@opt,@conn,@file_maint,@sql_type)
- @sdb_remove_doc=
- SiSU_DbDBI::Remove.new(@opt,@conn,@file_maint,@sql_type)
+ @sdb[:import]=SiSU_DbDBI::Import.new(@opt,@conn,@file_maint,@sql_type)
+ @sdb[:remove_doc]=SiSU_DbDBI::Remove.new(@opt,@conn,@file_maint,@sql_type)
elsif (@opt.act[:psql_remove][:set]==:on \
or @opt.act[:sqlite_remove][:set]==:on)
- @sdb_remove_doc=
- SiSU_DbDBI::Remove.new(@opt,@conn,@file_maint,@sql_type)
+ @sdb[:remove_doc]=SiSU_DbDBI::Remove.new(@opt,@conn,@file_maint,@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, you may need to run:\n} \
- + %{ sisu --#{@sql_type} --createall\n} \
+ puts %{no connection with sqlite database established, you may need to run:\n} \
+ + %{ sisu --sqlite --createall\n} \
+ %{ before attempting to populate the database}
- exit
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ db_action(@sdb).create
end
if @conn.is_a?(NilClass)
- db=if @sql_type==:sqlite
- puts %{no connection with #{@sql_type} database established, you may need to run:\n} \
- + %{ sisu --#{@sql_type} --createall\n} \
+ if @sql_type==:sqlite
+ puts %{no connection with sqlite database established, you may need to run:\n} \
+ + %{ sisu --sqlite --createall\n} \
+ %{ before attempting to populate the database}
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ db_action(@sdb).create
@db.sqlite.db
else
- puts %{no connection with #{@sql_type} database established, you may need to run:\n} \
+ puts %{no connection with pg database established, you may need to run:\n} \
+ %{ createdb "#{@db.psql.db}"\n} \
+ %{ after that don't forget to run:\n} \
- + %{ sisu --#{@sql_type} --createall\n} \
+ + %{ sisu --pg --createall\n} \
+ %{ before attempting to populate the database}
@db.psql.db
end
@@ -133,87 +201,30 @@ module SiSU_DbSelect
end
file
end
- def db_action
- def createdb
- @sdb.output_dir?
- begin
- @sdb.create_db
- rescue
- @sdb.output_dir?
- end
- end
- def drop
- @sdb_no.drop.tables
- end
- def create
- @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::Rescued.new($!,$@,'--sqlite').location
- @sdb.output_dir? do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def import
- db_exist?
- @sdb_import.marshal_load
- tell=case @sql_type
- when :sqlite
- SiSU_Screen::Ansi.new(
- @opt.act[:color_state][:set],
- "sqlite3 #{@db.sqlite.db} database?"
- )
- when :pg
- SiSU_Screen::Ansi.new(
- @opt.act[:color_state][:set],
- "pgaccess or psql #{@db.psql.db} database?"
- )
- else '???'
- end
- tell.puts_grey if @opt.act[:verbose][:set]==:on
- end
- def remove
- db_exist?
- @sdb_remove_doc.remove
- end
- def update
- remove
- import
- end
- self
- end
def cases
if @opt.act[:psql_drop][:set] ==:on \
or @opt.act[:sqlite_drop][:set] ==:on
- db_action.drop
+ db_action(@sdb).drop
end
if @opt.act[:psql_createdb][:set] ==:on \
or @opt.act[:sqlite_createdb][:set] ==:on
- db_action.createdb
+ db_action(@sdb).createdb
end
if @opt.act[:psql_create][:set] ==:on \
or @opt.act[:sqlite_create][:set] ==:on
- db_action.create
+ db_action(@sdb).create
end
if @opt.act[:psql_update][:set] ==:on \
or @opt.act[:sqlite_update][:set] ==:on
- db_action.update
+ db_action(@sdb).update
else
if @opt.act[:psql_remove][:set] ==:on \
or @opt.act[:sqlite_remove][:set] ==:on
- db_action.remove
+ db_action(@sdb).remove
end
if @opt.act[:psql_import][:set] ==:on \
or @opt.act[:sqlite_import][:set] ==:on
- db_action.import
+ db_action(@sdb).import
end
end
end
diff --git a/lib/sisu/v5/utils.rb b/lib/sisu/v5/utils.rb
index 4c732a8b..c5a312d2 100644
--- a/lib/sisu/v5/utils.rb
+++ b/lib/sisu/v5/utils.rb
@@ -211,6 +211,7 @@ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark({ m: %{
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark(%{ code: #{@@flag['code']}, open --> "#{t_o}" }) \
if t_o=~/^```/m
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark("open -->")
+SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).mark("open -->")
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark("open -->",:green)
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark(:green,"open -->")
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark("open -->")
diff --git a/lib/sisu/v6/db_import.rb b/lib/sisu/v6/db_import.rb
index f3e8b96c..51eb5562 100644
--- a/lib/sisu/v6/db_import.rb
+++ b/lib/sisu/v6/db_import.rb
@@ -69,6 +69,7 @@ module SiSU_DbImport
class Import < SiSU_DbText::Prepare
include SiSU_Param
include SiSU_Screen
+ include SiSU_DbAction
@@dl=nil
@@hname=nil
attr_accessor :tp
@@ -138,16 +139,66 @@ module SiSU_DbImport
'Marshal Load',
@fnc
).puts_grey if @opt.act[:verbose][:set]==:on
-#%
select_first_match=%{
SELECT metadata_and_text.tid
FROM metadata_and_text
WHERE metadata_and_text.src_filename = '#{@md.fns}'
AND metadata_and_text.language_document_char = '#{@opt.lng}'
;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
- file_exist=@sql_type==:sqlite \
- ? @conn.get_first_value(select_first_match)
- : @conn.exec(select_first_match).field_values("tid")[0]
+ file_exist=if @sql_type==:sqlite
+ begin
+ @conn.get_first_value(select_first_match)
+ rescue SQLite3::Exception => e
+ # not tested
+ puts "Exception occurred"
+ puts e
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ sdb={
+ create: SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type),
+ index: SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type),
+ }
+ db_action(sdb).create
+ end
+ else
+ begin
+ @conn.exec(select_first_match).field_values("tid")[0]
+ rescue PG::Error => e
+ err=[
+ e.result.error_field( PG::Result::PG_DIAG_SEVERITY ),
+ e.result.error_field( PG::Result::PG_DIAG_SQLSTATE ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_PRIMARY ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_DETAIL ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_HINT ),
+ e.result.error_field( PG::Result::PG_DIAG_STATEMENT_POSITION ),
+ e.result.error_field( PG::Result::PG_DIAG_INTERNAL_POSITION ),
+ e.result.error_field( PG::Result::PG_DIAG_INTERNAL_QUERY ),
+ e.result.error_field( PG::Result::PG_DIAG_CONTEXT ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_FILE ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_LINE ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_FUNCTION ),
+ ]
+ p err
+ if err[2] =~/relation "\S+?" does not exist/ \
+ or err.inspect =~/relation "\S+?" does not exist/
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + err[2] + "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ sdb={
+ create: SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type),
+ index: SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type),
+ }
+ db_action(sdb).create
+ retry
+ end
+ end
+ end
if not file_exist
t_d=[] # transaction_data
t_d << db_import_metadata
@@ -199,7 +250,7 @@ module SiSU_DbImport
else
if file_exist
@db=SiSU_Env::InfoDb.new
- puts "\nfile #{@opt.fns} in language code #{@opt.lng} already exists in database #{@db.psql.db} update instead?"
+ puts "\nfile #{@opt.fns} in language code #{@opt.lng} already exists in database #{@db.psql.db}, use --update instead?"
end
end
end
@@ -535,6 +586,7 @@ module SiSU_DbImport
if inf[/#{Mx[:en_a_o]}(\d+)(.+?)#{Mx[:en_a_c]}/]
nr,txt,digest_clean=$1,$2.strip,0
end
+ @id_n ||=0
@id_n+=1
txt=special_character_escape(txt)
body=SiSU_FormatShared::CSS_Format.new(@md,data).endnote(nr,txt)
diff --git a/lib/sisu/v6/db_remove.rb b/lib/sisu/v6/db_remove.rb
index 037dda33..91909937 100644
--- a/lib/sisu/v6/db_remove.rb
+++ b/lib/sisu/v6/db_remove.rb
@@ -63,6 +63,7 @@
=end
module SiSU_DbRemove
class Remove
+ include SiSU_DbAction
def initialize(opt,conn,file,sql_type)
@opt,@conn,@file,@sql_type=opt,conn,file,sql_type
@md=SiSU_Param::Parameters.new(@opt).get
@@ -76,22 +77,70 @@ module SiSU_DbRemove
: false
end
del_id=if driver_sqlite3
- remove_selected=%{
- SELECT tid
- FROM metadata_and_text
- WHERE src_filename = '#{@md.fns}'
- AND metadata_and_text.language_document_char = '#{@opt.lng}'
- ;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
- @conn.get_first_value(remove_selected).to_i
+ begin
+ remove_selected=%{
+ SELECT tid
+ FROM metadata_and_text
+ WHERE src_filename = '#{@md.fns}'
+ AND metadata_and_text.language_document_char = '#{@opt.lng}'
+ ;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
+ @conn.get_first_value(remove_selected).to_i
+ rescue SQLite3::Exception => e
+ #not tested
+ puts "Exception occurred"
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).mark(e.inspect)
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ sdb={
+ create: SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type),
+ index: SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type),
+ }
+ db_action(sdb).create
+ end
else
- remove_selected=%{
- SELECT metadata_and_text.tid
- FROM metadata_and_text
- WHERE metadata_and_text.src_filename = '#{@md.fns}'
- AND metadata_and_text.language_document_char = '#{@opt.lng}'
- ;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
- x=@conn.exec(remove_selected)
- x.field_values("tid")[0]
+ begin
+ remove_selected=%{
+ SELECT metadata_and_text.tid
+ FROM metadata_and_text
+ WHERE metadata_and_text.src_filename = '#{@md.fns}'
+ AND metadata_and_text.language_document_char = '#{@opt.lng}'
+ ;} # note, for .ssm: @md.fns (is set during runtime & is) != @opt.fns @md.opt.fns
+ x=@conn.exec(remove_selected)
+ x.field_values("tid")[0]
+ rescue PG::Error => e
+ err=[
+ e.result.error_field( PG::Result::PG_DIAG_SEVERITY ),
+ e.result.error_field( PG::Result::PG_DIAG_SQLSTATE ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_PRIMARY ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_DETAIL ),
+ e.result.error_field( PG::Result::PG_DIAG_MESSAGE_HINT ),
+ e.result.error_field( PG::Result::PG_DIAG_STATEMENT_POSITION ),
+ e.result.error_field( PG::Result::PG_DIAG_INTERNAL_POSITION ),
+ e.result.error_field( PG::Result::PG_DIAG_INTERNAL_QUERY ),
+ e.result.error_field( PG::Result::PG_DIAG_CONTEXT ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_FILE ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_LINE ),
+ e.result.error_field( PG::Result::PG_DIAG_SOURCE_FUNCTION ),
+ ]
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).mark("\n" + err.inspect)
+ if err[2] =~/relation "\S+?" does not exist/ \
+ or err.inspect =~/relation "\S+?" does not exist/
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + err[2] + "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ sdb={
+ create: SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type),
+ index: SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type),
+ }
+ db_action(sdb).create
+ end
+ end
end
if del_id
sql_entry=[
diff --git a/lib/sisu/v6/db_select.rb b/lib/sisu/v6/db_select.rb
index 61522e3b..1aadd54a 100644
--- a/lib/sisu/v6/db_select.rb
+++ b/lib/sisu/v6/db_select.rb
@@ -61,52 +61,120 @@
sqlite
=end
+module SiSU_DbAction
+ def db_action(sdb)
+ @sdb=sdb
+ def createdb
+ @sdb[:create].output_dir?
+ begin
+ @sdb[:create].create_db
+ rescue
+ @sdb[:create].output_dir?
+ end
+ end
+ def drop
+ @sdb[:drop].drop.tables
+ end
+ def create
+ @sdb[:create].output_dir?
+ begin
+ @sdb[:create].create_table.metadata_and_text
+ @sdb[:create].create_table.doc_objects
+ @sdb[:create].create_table.endnotes
+ @sdb[:create].create_table.endnotes_asterisk
+ @sdb[:create].create_table.endnotes_plus
+ @sdb[:create].create_table.urls
+ @sdb[:index].create_indexes
+ rescue
+ SiSU_Errors::Rescued.new($!,$@,'--sqlite').location
+ @sdb[:create].output_dir? do
+ __LINE__.to_s + ':' + __FILE__
+ end
+ end
+ end
+ def import
+ db_exist?
+ @sdb[:import].marshal_load
+ tell=case @sql_type
+ when :sqlite
+ SiSU_Screen::Ansi.new(
+ @opt.act[:color_state][:set],
+ "sqlite3 #{@db.sqlite.db} database?"
+ )
+ when :pg
+ SiSU_Screen::Ansi.new(
+ @opt.act[:color_state][:set],
+ "pgaccess or psql #{@db.psql.db} database?"
+ )
+ else '???'
+ end
+ tell.puts_grey if @opt.act[:verbose][:set]==:on
+ end
+ def remove
+ db_exist?
+ @sdb[:remove_doc].remove
+ end
+ def update
+ remove
+ import
+ end
+ self
+ end
+end
module SiSU_DbSelect
class Case
+ include SiSU_DbAction
def initialize(opt,conn='',sql_type=:pg)
@opt,@conn,@sql_type=opt,conn,sql_type
@db=SiSU_Env::InfoDb.new
@file_maint=sql_maintenance_file
- @sdb=
- SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type)
- @sdb_index=
- SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type)
- @sdb_no=
- SiSU_DbDBI::Drop.new(@opt,@conn,@db,@sql_type)
+ @sdb={
+ create: SiSU_DbDBI::Create.new(@opt,@conn,@file_maint,@sql_type),
+ index: SiSU_DbDBI::Index.new(@opt,@conn,@file_maint,@sql_type),
+ drop: SiSU_DbDBI::Drop.new(@opt,@conn,@db,@sql_type),
+ }
if (@opt.act[:psql_import][:set]==:on \
|| @opt.act[:psql_update][:set]==:on) \
or (@opt.act[:sqlite_import][:set]==:on \
|| @opt.act[:sqlite_update][:set]==:on)
- @sdb_import=
- SiSU_DbDBI::Import.new(@opt,@conn,@file_maint,@sql_type)
- @sdb_remove_doc=
- SiSU_DbDBI::Remove.new(@opt,@conn,@file_maint,@sql_type)
+ @sdb[:import]=SiSU_DbDBI::Import.new(@opt,@conn,@file_maint,@sql_type)
+ @sdb[:remove_doc]=SiSU_DbDBI::Remove.new(@opt,@conn,@file_maint,@sql_type)
elsif (@opt.act[:psql_remove][:set]==:on \
or @opt.act[:sqlite_remove][:set]==:on)
- @sdb_remove_doc=
- SiSU_DbDBI::Remove.new(@opt,@conn,@file_maint,@sql_type)
+ @sdb[:remove_doc]=SiSU_DbDBI::Remove.new(@opt,@conn,@file_maint,@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, you may need to run:\n} \
- + %{ sisu --#{@sql_type} --createall\n} \
+ puts %{no connection with sqlite database established, you may need to run:\n} \
+ + %{ sisu --sqlite --createall\n} \
+ %{ before attempting to populate the database}
- exit
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ db_action(@sdb).create
end
if @conn.is_a?(NilClass)
- db=if @sql_type==:sqlite
- puts %{no connection with #{@sql_type} database established, you may need to run:\n} \
- + %{ sisu --#{@sql_type} --createall\n} \
+ if @sql_type==:sqlite
+ puts %{no connection with sqlite database established, you may need to run:\n} \
+ + %{ sisu --sqlite --createall\n} \
+ %{ before attempting to populate the database}
+ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:yellow).mark(
+ "\n" \
+ + 'Attempting to initialize db' + "\n" \
+ + 'Creating db tables'
+ )
+ db_action(@sdb).create
@db.sqlite.db
else
- puts %{no connection with #{@sql_type} database established, you may need to run:\n} \
+ puts %{no connection with pg database established, you may need to run:\n} \
+ %{ createdb "#{@db.psql.db}"\n} \
+ %{ after that don't forget to run:\n} \
- + %{ sisu --#{@sql_type} --createall\n} \
+ + %{ sisu --pg --createall\n} \
+ %{ before attempting to populate the database}
@db.psql.db
end
@@ -133,87 +201,30 @@ module SiSU_DbSelect
end
file
end
- def db_action
- def createdb
- @sdb.output_dir?
- begin
- @sdb.create_db
- rescue
- @sdb.output_dir?
- end
- end
- def drop
- @sdb_no.drop.tables
- end
- def create
- @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::Rescued.new($!,$@,'--sqlite').location
- @sdb.output_dir? do
- __LINE__.to_s + ':' + __FILE__
- end
- end
- end
- def import
- db_exist?
- @sdb_import.marshal_load
- tell=case @sql_type
- when :sqlite
- SiSU_Screen::Ansi.new(
- @opt.act[:color_state][:set],
- "sqlite3 #{@db.sqlite.db} database?"
- )
- when :pg
- SiSU_Screen::Ansi.new(
- @opt.act[:color_state][:set],
- "pgaccess or psql #{@db.psql.db} database?"
- )
- else '???'
- end
- tell.puts_grey if @opt.act[:verbose][:set]==:on
- end
- def remove
- db_exist?
- @sdb_remove_doc.remove
- end
- def update
- remove
- import
- end
- self
- end
def cases
if @opt.act[:psql_drop][:set] ==:on \
or @opt.act[:sqlite_drop][:set] ==:on
- db_action.drop
+ db_action(@sdb).drop
end
if @opt.act[:psql_createdb][:set] ==:on \
or @opt.act[:sqlite_createdb][:set] ==:on
- db_action.createdb
+ db_action(@sdb).createdb
end
if @opt.act[:psql_create][:set] ==:on \
or @opt.act[:sqlite_create][:set] ==:on
- db_action.create
+ db_action(@sdb).create
end
if @opt.act[:psql_update][:set] ==:on \
or @opt.act[:sqlite_update][:set] ==:on
- db_action.update
+ db_action(@sdb).update
else
if @opt.act[:psql_remove][:set] ==:on \
or @opt.act[:sqlite_remove][:set] ==:on
- db_action.remove
+ db_action(@sdb).remove
end
if @opt.act[:psql_import][:set] ==:on \
or @opt.act[:sqlite_import][:set] ==:on
- db_action.import
+ db_action(@sdb).import
end
end
end
diff --git a/lib/sisu/v6/utils.rb b/lib/sisu/v6/utils.rb
index 6c34a55a..7e915429 100644
--- a/lib/sisu/v6/utils.rb
+++ b/lib/sisu/v6/utils.rb
@@ -211,6 +211,7 @@ SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark({ m: %{
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark(%{ code: #{@@flag['code']}, open --> "#{t_o}" }) \
if t_o=~/^```/m
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:green).mark("open -->")
+SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).mark("open -->")
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark("open -->",:green)
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark(:green,"open -->")
SiSU_Utils::CodeMarker.new(__LINE__,__FILE__).mark("open -->")