diff options
| author | Ralph Amissah <ralph@amissah.com> | 2014-05-18 09:39:31 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2014-05-18 09:39:31 -0400 | 
| commit | 808c9c74a72b95e6272c8927cce839d89626ba47 (patch) | |
| tree | 8047b7cee667ca0c2b6b9bb12a4c3e33a34704fa /lib | |
| parent | debian/changelog (5.3.5-1) (diff) | |
| parent | v5 v6: cgi, sample search forms: use ruby-pg & ruby-sqlite3; remove ruby-dbi (diff) | |
Merge tag 'sisu_5.3.6' into debian/sid
SiSU 5.3.6
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sisu/v5/cgi_pgsql.rb | 22 | ||||
| -rw-r--r-- | lib/sisu/v5/cgi_sqlite.rb | 12 | ||||
| -rw-r--r-- | lib/sisu/v5/db_create.rb | 43 | ||||
| -rw-r--r-- | lib/sisu/v5/db_drop.rb | 38 | ||||
| -rw-r--r-- | lib/sisu/v5/db_import.rb | 22 | ||||
| -rw-r--r-- | lib/sisu/v5/db_indexes.rb | 20 | ||||
| -rw-r--r-- | lib/sisu/v5/db_remove.rb | 18 | ||||
| -rw-r--r-- | lib/sisu/v5/db_select.rb | 16 | ||||
| -rw-r--r-- | lib/sisu/v5/dbi.rb | 16 | ||||
| -rw-r--r-- | lib/sisu/v5/dbi_discrete.rb | 12 | ||||
| -rw-r--r-- | lib/sisu/v5/sysenv.rb | 2 | ||||
| -rw-r--r-- | lib/sisu/v6/cgi_pgsql.rb | 29 | ||||
| -rw-r--r-- | lib/sisu/v6/cgi_sqlite.rb | 12 | ||||
| -rw-r--r-- | lib/sisu/v6/db_create.rb | 43 | ||||
| -rw-r--r-- | lib/sisu/v6/db_drop.rb | 38 | ||||
| -rw-r--r-- | lib/sisu/v6/db_import.rb | 22 | ||||
| -rw-r--r-- | lib/sisu/v6/db_indexes.rb | 20 | ||||
| -rw-r--r-- | lib/sisu/v6/db_remove.rb | 18 | ||||
| -rw-r--r-- | lib/sisu/v6/db_select.rb | 16 | ||||
| -rw-r--r-- | lib/sisu/v6/dbi.rb | 23 | ||||
| -rw-r--r-- | lib/sisu/v6/dbi_discrete.rb | 12 | ||||
| -rw-r--r-- | lib/sisu/v6/sysenv.rb | 23 | ||||
| -rw-r--r-- | lib/sisu/v6/utils.rb | 14 | 
23 files changed, 298 insertions, 193 deletions
| diff --git a/lib/sisu/v5/cgi_pgsql.rb b/lib/sisu/v5/cgi_pgsql.rb index 53c73c8d..6c4385e4 100644 --- a/lib/sisu/v5/cgi_pgsql.rb +++ b/lib/sisu/v5/cgi_pgsql.rb @@ -128,12 +128,9 @@ module  SiSU_CGI_PgSQL              default database name:     #{@cX.green}#{Db[:name_prefix]}#{@name_of[:db]}#{@cX.off} (#{@name_of[:db]})              db user:                   #{@cX.green}#{@name_of[:user]}#{@cX.off}                to modify use:           #{@cX.brown}sisu --db-pg --db-user='#{@name_of[:user]}'#{@cX.off} -            cgi & db host on:          #{@cX.blue}#{@name_of[:host_url_cgi]}#{@cX.off} -              to modify use:           #{@cX.brown}sisu --db-pg --webserv-search='#{@name_of[:host_url_cgi]}'#{@cX.off} -            sisu output on:            #{@cX.blue}#{@name_of[:host_url_docs]}#{@cX.off} -              to modify use:           #{@cX.brown}sisu --db-pg --webserv-output='#{@name_of[:host_url_docs]}'#{@cX.off} -            cgi search form link name: #{@cX.green}#{@name_of[:cgi_script]}#{@cX.off} -              to modify use:           #{@cX.brown}sisu --db-pg --cgi-search-form-name='#{@name_of[:cgi_script]}'#{@cX.off} +            to create static cgi & db host use: #{@cX.brown}sisu --db-pg --webserv-search='#{@name_of[:host_url_cgi]}'#{@cX.off} +            for static location for sisu output use: #{@cX.brown}sisu --db-pg --webserv-output='#{@name_of[:host_url_docs]}'#{@cX.off} +            for static cgi search form link name use: #{@cX.brown}sisu --db-pg --cgi-search-form-name='#{@name_of[:cgi_script]}'#{@cX.off}              #{@cX.fuchsia}(settings priority: command line; sisurc.yml; else defaults)#{@cX.off}              #{@cX.fuchsia}BASED ON ALREADY EXISTING databases#{@cX.off} (default database name: #{@db.psql.db}) @@ -151,7 +148,7 @@ module  SiSU_CGI_PgSQL                  #{@cX.brown}createdb #{@db.psql.db}#{@cX.off}              [for a list of existing databases try 'psql --list']" -            now you can use sisu to create the database tables and populate the database with documents +            you can use sisu to create the database tables and populate the database with documents              sisu --pg --dropall                              # removes existing postgresql db & tables              sisu --pg --createall -v                         # creates postgresql db & tables @@ -195,9 +192,9 @@ module  SiSU_CGI_PgSQL        begin          require 'cgi'          require 'fcgi' -        require 'dbi' +        require 'pg'        rescue LoadError -        puts 'cgi, fcgi or dbi NOT FOUND (LoadError)' +        puts 'cgi, fcgi or pg NOT FOUND (LoadError)'        end        @stub_default='#{@name_of[:db]}'        @image_src="#{@image_src}" @@ -277,10 +274,10 @@ module  SiSU_CGI_PgSQL            %{<font color="#666666" size="2">#{sql_select_endnotes}</font>}          end          def contents -          @conn.select_all(sql_select_body) +          @conn.exec(sql_select_body)          end          def endnotes -          @conn.select_all(sql_select_endnotes) +          @conn.exec(sql_select_endnotes)          end        end        WOK_SQL @@ -292,8 +289,7 @@ module  SiSU_CGI_PgSQL      end      def dbi_connect        <<-'WOK_SQL' -          dbi="dbi:Pg:database=#{@db};port=#{@port}" -          @conn=DBI.connect(dbi,@user) +          @conn=PG::Connection.open(dbname: @db, port: @port, user: @user)        WOK_SQL      end    end diff --git a/lib/sisu/v5/cgi_sqlite.rb b/lib/sisu/v5/cgi_sqlite.rb index 4351a64c..2d185f20 100644 --- a/lib/sisu/v5/cgi_sqlite.rb +++ b/lib/sisu/v5/cgi_sqlite.rb @@ -172,9 +172,9 @@ module  SiSU_CGI_SQLite        begin          require 'cgi'          require 'fcgi' -        require 'dbi' +        require 'sqlite3'        rescue LoadError -        puts 'cgi, fcgi or dbi NOT FOUND (LoadError)' +        puts 'cgi, fcgi or sqlite3 NOT FOUND (LoadError)'        end        @stub_default='sisu_sqlite'        @image_src="#{@image_src}" @@ -247,18 +247,18 @@ module  SiSU_CGI_SQLite            %{<font color="#666666" size="2">#{sql_select_endnotes}</font>}          end          def contents -          @conn.select_all(sql_select_body) +          @conn.execute(sql_select_body)          end          def endnotes -          @conn.select_all(sql_select_endnotes) +          @conn.execute(sql_select_endnotes)          end        end        WOK_SQL      end      def dbi_connect        <<-'WOK_SQL' -          @dbi="DBI:SQLite3:#{db_sqlite}" #sqlite3 ? -          @conn=DBI.connect(@dbi) +          @conn=SQLite3::Database.new(db_sqlite) +          @conn.results_as_hash=true        WOK_SQL      end    end diff --git a/lib/sisu/v5/db_create.rb b/lib/sisu/v5/db_create.rb index 4de362c5..451a0a34 100644 --- a/lib/sisu/v5/db_create.rb +++ b/lib/sisu/v5/db_create.rb @@ -66,10 +66,10 @@ module SiSU_DbCreate    class Create < SiSU_DbColumns::Columns      require_relative 'sysenv'                           # sysenv.rb      @@dl=nil -    def initialize(opt,conn,file,sql_type='pg') +    def initialize(opt,conn,file,sql_type=:pg)        @opt,@conn,@file,@sql_type=opt,conn,file,sql_type        @cX=SiSU_Screen::Ansi.new(@opt.act[:color_state][:set]).cX -      @comment=(@sql_type=='pg') \ +      @comment=(@sql_type==:pg) \        ? (SiSU_DbCreate::Comment.new(@conn,@sql_type))        : nil        @@dl ||=SiSU_Env::InfoEnv.new.digest.length @@ -84,7 +84,7 @@ module SiSU_DbCreate      end      def create_db        @env=SiSU_Env::InfoEnv.new(@opt.fns) -      tell=(@sql_type=='sqlite') \ +      tell=(@sql_type==:sqlite) \        ? SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],'Create SQLite db tables in:',%{"#{@file}"})        : SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],'Create pgSQL db tables in:',%{"#{Db[:name_prefix]}#{@env.path.stub_pwd}"})        if (@opt.act[:verbose][:set]==:on \ @@ -92,7 +92,7 @@ module SiSU_DbCreate        || @opt.act[:maintenance][:set]==:on)          tell.dark_grey_title_hi        end -      SiSU_Env::SystemCall.new.create_pg_db(@env.path.stub_pwd) if @sql_type=='pg' #watch use of path.stub_pwd instead of stub +      SiSU_Env::SystemCall.new.create_pg_db(@env.path.stub_pwd) if @sql_type==:pg #watch use of path.stub_pwd instead of stub      end      def output_dir?        dir=SiSU_Env::InfoEnv.new('') @@ -101,11 +101,24 @@ module SiSU_DbCreate        end      end      def create_table +      def conn_exec(sql) +        if @sql_type==:pg +          conn_exec_pg(sql) +        elsif @sql_type==:sqlite +          conn_exec_sqlite(sql) +        end +      end +      def conn_exec_pg(sql) +        @conn.exec_params(sql) +      end +      def conn_exec_sqlite(sql) +          @conn.execute(sql) +      end        def metadata_and_text          if (@opt.act[:verbose_plus][:set]==:on \          or @opt.act[:maintenance][:set]==:on)            print %{ -          currently using sisu dbi module +          currently using sisu_dbi module            to be populated from document files            create tables metadata_and_text            data import through ruby transfer @@ -211,7 +224,7 @@ module SiSU_DbCreate  /*          writing_focus_nationality VARCHAR(100) NULL, */            );          } -        @conn.execute(create_metadata_and_text) +        conn_exec(create_metadata_and_text)          @comment.psql.metadata_and_text if @comment        end        def doc_objects                                                 # create doc_objects base @@ -258,7 +271,7 @@ module SiSU_DbCreate              types           CHAR(1) NULL            );          } -        @conn.execute(create_doc_objects) +        conn_exec(create_doc_objects)          @comment.psql.doc_objects if @comment        end        def endnotes @@ -284,7 +297,7 @@ module SiSU_DbCreate              metadata_tid    BIGINT REFERENCES metadata_and_text            );          } -        @conn.execute(create_endnotes) +        conn_exec(create_endnotes)          @comment.psql.endnotes if @comment        end        def endnotes_asterisk @@ -310,7 +323,7 @@ module SiSU_DbCreate              metadata_tid    BIGINT REFERENCES metadata_and_text            );          } -        @conn.execute(create_endnotes_asterisk) +        conn_exec(create_endnotes_asterisk)          @comment.psql.endnotes_asterisk if @comment        end        def endnotes_plus @@ -336,14 +349,14 @@ module SiSU_DbCreate              metadata_tid    BIGINT REFERENCES metadata_and_text            );          } -        @conn.execute(create_endnotes_plus) +        conn_exec(create_endnotes_plus)          @comment.psql.endnotes_plus if @comment        end        def urls                                                       # create doc_objects file links mapping          if (@opt.act[:verbose_plus][:set]==:on \          or @opt.act[:maintenance][:set]==:on)            print %{ -          currently using sisu dbi module +          currently using sisu_dbi module            to be populated from doc_objects files            create tables urls            data import through ruby transfer @@ -370,23 +383,23 @@ module SiSU_DbCreate              sisupod         varchar(512)            );          } -        @conn.execute(create_urls) +        conn_exec(create_urls)          @comment.psql.urls if @comment        end        self      end    end    class Comment < SiSU_DbColumns::Columns -    def initialize(conn,sql_type='pg') +    def initialize(conn,sql_type=:pg)        @conn=conn -      if sql_type =~ /pg/; psql +      if sql_type == :pg then psql        end      end      def psql        def conn_execute_array(sql_arr)          @conn.transaction do |conn|            sql_arr.each do |sql| -            conn.execute(sql) +            conn.exec_params(sql)            end          end        end diff --git a/lib/sisu/v5/db_drop.rb b/lib/sisu/v5/db_drop.rb index b1ff634e..75e98faa 100644 --- a/lib/sisu/v5/db_drop.rb +++ b/lib/sisu/v5/db_drop.rb @@ -64,11 +64,11 @@  module SiSU_DbDrop    class Drop      require_relative 'response'                          # response.rb -    def initialize(opt,conn,db_info,sql_type='') +    def initialize(opt,conn,db_info,sql_type)        @opt,@conn,@db_info,@sql_type=opt,conn,db_info,sql_type        @ans=SiSU_Response::Response.new        case @sql_type -      when /sqlite/ +      when :sqlite          cascade=''        else          cascade='CASCADE' @@ -87,7 +87,7 @@ module SiSU_DbDrop          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/ +          when :sqlite              puts msg_sqlite              ans=@ans.response?('remove sql database?')              if ans \ @@ -118,24 +118,38 @@ module SiSU_DbDrop              else                @conn.transaction                @drop_table.each do |d| -                @conn.execute(d) -              end +                begin +                  @conn.exec_params(d) +                rescue +                  next +                end +                end                @conn.commit              end -          else +          when :pg +            @conn.transaction              @drop_table.each do |d| -              @conn.execute(d) +              begin +                @conn.exec_params(d) +              rescue +                next +              end              end +            @conn.commit            end          rescue            case @sql_type -          when /sqlite/ +          when :sqlite              ans=@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| -              @conn.execute(d) +              begin +                @conn.exec_params(d) +              rescue +                next +              end              end            end          ensure @@ -145,7 +159,11 @@ module SiSU_DbDrop          def conn_execute_array(sql_arr)            @conn.transaction do |conn|              sql_arr.each do |sql| -              conn.execute(sql) +              begin +                conn.exec_params(sql) +              rescue +                next +              end              end            end          end diff --git a/lib/sisu/v5/db_import.rb b/lib/sisu/v5/db_import.rb index 0dc5a29b..9e88e7ee 100644 --- a/lib/sisu/v5/db_import.rb +++ b/lib/sisu/v5/db_import.rb @@ -72,7 +72,7 @@ module SiSU_DbImport      @@dl=nil      @@hname=nil      attr_accessor :tp -    def initialize(opt,conn,file_maint,sql_type='pg') +    def initialize(opt,conn,file_maint,sql_type=:pg)        @opt,@conn,@file_maint,@sql_type=opt,conn,file_maint,sql_type        @cX=SiSU_Screen::Ansi.new(@opt.act[:color_state][:set]).cX        @env=SiSU_Env::InfoEnv.new(@opt.fns) @@ -90,7 +90,7 @@ module SiSU_DbImport        @col[:ocn]=''        @counter={}        @db=SiSU_Env::InfoDb.new -      if @sql_type=='sqlite' +      if @sql_type==:sqlite          @driver_sqlite3=(@conn.inspect.match(/^(.{10})/)[1]==@db.sqlite.conn_sqlite3.inspect.match(/^(.{10})/)[1]) \          ? true          : false @@ -109,7 +109,7 @@ module SiSU_DbImport        begin          @id_n=@driver_sqlite3 \          ? @conn.execute( sql ).join.to_i -        : @id_n=@conn.execute( sql ) { |x| x.fetch_all.flatten[0] } +        : @id_n=@conn.exec( sql ).getvalue(0,0).to_i          @id_n ||=0        rescue          puts "#{__FILE__}:#{__LINE__}" if @opt.act[:maintenance][:set]==:on @@ -136,9 +136,9 @@ module SiSU_DbImport          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/ \ +      file_exist=@sql_type==:sqlite \        ? @conn.get_first_value(select_first_match) -      : @conn.select_one(select_first_match) +      : @conn.exec(select_first_match).field_values("tid")[0]        if not file_exist          t_d=[]                                                              # transaction_data          t_d << db_import_metadata @@ -152,7 +152,7 @@ module SiSU_DbImport            puts @conn.driver if defined? @conn.driver          end          begin                                                               #% sql -          if @sql_type=~/sqlite/ +          if @sql_type==:sqlite              @conn.transaction do |conn|                t_d.each do |sql|                  conn.execute(sql) @@ -166,11 +166,11 @@ module SiSU_DbImport              #@conn.execute("COMMIT")            else              #'do' works for postgresql -            @conn.do("BEGIN") +            @conn.exec("BEGIN")                t_d.each do |sql| -                @conn.do(sql) +                @conn.exec(sql)                end -            @conn.do("COMMIT") +            @conn.exec("COMMIT")            end          rescue DBI::DatabaseError => e            STDERR.puts "Error code: #{e.err}" @@ -206,7 +206,7 @@ module SiSU_DbImport        else          if file_exist            @db=SiSU_Env::InfoDb.new -          puts "\n#{@cX.grey}file #{@cX.off} #{@cX.blue}#{@opt.fns}#{@cX.off} in language code #{cX.blue}#{@opt.lng}#{cX.off} #{@cX.grey}already exists in database#{@cX.off} #{@cX.blue}#{@db.psql.db}#{@cX.off} #{@cX.brown}update instead?#{@cX.off}" +          puts "\nfile #{@opt.fns} in language code #{@opt.lng} already exists in database #{@db.psql.db} update instead?"          end        end      end @@ -497,7 +497,7 @@ module SiSU_DbImport                @env=SiSU_Env::InfoEnv.new(@md.fns)                @base_url="#{@env.url.root}/#{@md.fnb}/#{@hname}.html"                txt=endnotes(txt).extract_any -              if @sql_type=~/pg/ \ +              if @sql_type==:pg \                and txt.size > (SiSU_DbColumns::ColumnSize.new.document_clean - 1)             # examine pg build & remove limitation                  puts "\n\nTOO LARGE (TXT - see error log)\n\n"                  open("#{Dir.pwd}/pg_documents_error_log",'a') do |error| diff --git a/lib/sisu/v5/db_indexes.rb b/lib/sisu/v5/db_indexes.rb index 0fa51b3f..7e1164ab 100644 --- a/lib/sisu/v5/db_indexes.rb +++ b/lib/sisu/v5/db_indexes.rb @@ -62,15 +62,29 @@  =end  module SiSU_DbIndex -  class Index                                           # create documents Indexes def initialize(opt,conn='',sql_type='') -    def initialize(opt,conn,file,sql_type='') +  class Index                                           # create documents Indexes def initialize(opt,conn='',sql_type) +    def initialize(opt,conn,file,sql_type)        @opt,@conn,@file,@sql_type=opt,conn,file,sql_type      end      def create_indexes                                                           # check added from pg not tested +      def conn_execute_sql_pg(conn,sql) +        conn.exec_params(sql) +      end +      def conn_execute_sql_sqlite(conn,sql) +        conn.execute(sql) +      end +      def conn_execute_sql(conn,sql) +        if @sql_type==:pg +          conn_execute_sql_pg(conn,sql) +        elsif @sql_type==:sqlite +          conn_execute_sql_sqlite(conn,sql) +        else +        end +      end        def conn_execute_array(sql_arr)          @conn.transaction do |conn|            sql_arr.each do |sql| -            conn.execute(sql) +            conn_execute_sql(conn,sql)            end          end        end diff --git a/lib/sisu/v5/db_remove.rb b/lib/sisu/v5/db_remove.rb index 9ffba024..2dea65f2 100644 --- a/lib/sisu/v5/db_remove.rb +++ b/lib/sisu/v5/db_remove.rb @@ -70,7 +70,7 @@ module SiSU_DbRemove        @db=SiSU_Env::InfoDb.new      end      def remove -      driver_sqlite3=if @sql_type=='sqlite' +      driver_sqlite3=if @sql_type==:sqlite          (@conn.inspect.match(/^(.{10})/)[1]==@db.sqlite.conn_sqlite3.inspect.match(/^(.{10})/)[1]) \          ? true          : false @@ -90,8 +90,8 @@ module SiSU_DbRemove            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.select_one(remove_selected) -        x ? (x.join.to_i) : nil +        x=@conn.exec(remove_selected) +        x.field_values("tid")[0]        end        if del_id          sql_entry=[ @@ -105,12 +105,20 @@ module SiSU_DbRemove          if driver_sqlite3            @conn.transaction            sql_entry.each do |s| -            @conn.execute(s) +            begin +              @conn.execute(s) +            rescue +              next +            end            end            @conn.commit if driver_sqlite3          else            sql_entry.each do |s| -            @conn.execute(s) +            begin +              @conn.exec_params(s) +            rescue +              next +            end            end          end          if @opt.act[:maintenance][:set]==:on diff --git a/lib/sisu/v5/db_select.rb b/lib/sisu/v5/db_select.rb index 06d8c429..3aebe828 100644 --- a/lib/sisu/v5/db_select.rb +++ b/lib/sisu/v5/db_select.rb @@ -63,7 +63,7 @@  =end  module SiSU_DbSelect    class Case -    def initialize(opt,conn='',sql_type='pg') +    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 @@ -78,13 +78,13 @@ module SiSU_DbSelect        end      end      def db_exist? -      if @sql_type=='sqlite' \ +      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.is_a?(NilClass) -        db=@sql_type=='sqlite' \ +        db=@sql_type==:sqlite \          ? @db.sqlite.db          : @db.psql.db          puts %{no connection with #{@sql_type} database established, createdb "#{db}"?} @@ -95,7 +95,7 @@ module SiSU_DbSelect        file=if @opt.inspect =~/M/          if @opt.fns and not @opt.fns.empty?            @env=SiSU_Env::InfoEnv.new(@opt.fns) if @opt.fns -          puts "\n#{@env.processing_path.sqlite}/#{@opt.fns}.sql" if @sql_type =~/sqlite/ and @opt.act[:maintenance][:set]==:on +          puts "\n#{@env.processing_path.sqlite}/#{@opt.fns}.sql" if @sql_type ==:sqlite and @opt.act[:maintenance][:set]==:on            @db=SiSU_Env::InfoDb.new            @job="sqlite3 #{@db.sqlite.db} < #{@env.processing_path.sqlite}/#{@opt.fns}.sql"            File.new("#{@env.processing_path.sqlite}/#{@opt.fns}.sql",'w+') @@ -173,8 +173,8 @@ module SiSU_DbSelect            db_exist?            @sdb_import.marshal_load            tell=case @sql_type -          when /sqlite/ then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"sqlite3 #{@db.sqlite.db} database?") -          when /pg/     then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"pgaccess or psql #{@db.psql.db} database?") +          when :sqlite then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"sqlite3 #{@db.sqlite.db} database?") +          when :pg     then 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 @@ -183,8 +183,8 @@ module SiSU_DbSelect            @sdb_remove_doc.remove            @sdb_import.marshal_load            tell=case @sql_type -          when /sqlite/ then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"sqlite3 #{@db.sqlite.db} database?") -          when /pg/     then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"pgaccess or psql #{@db.psql.db} database?") +          when :sqlite then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"sqlite3 #{@db.sqlite.db} database?") +          when :pg     then 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 diff --git a/lib/sisu/v5/dbi.rb b/lib/sisu/v5/dbi.rb index 1ab9bc9c..737f02fd 100644 --- a/lib/sisu/v5/dbi.rb +++ b/lib/sisu/v5/dbi.rb @@ -79,22 +79,22 @@ module  SiSU_DBI          @sql_type=if @opt.cmd=~/D/ \          or @opt.mod.inspect =~/--pg(?:sql)?/            maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on -          'pg' +          :pg          elsif @opt.cmd =~/d/ \          and @opt.mod.inspect =~/--(?:db[=-])?pg(?:sql)?/            maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on -          'pg' +          :pg          elsif @opt.cmd=~/d/ \          or @opt.mod.inspect =~/--(?:sq)?lite/            maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on -          'sqlite' +          :sqlite          elsif @opt.cmd =~/d/ \          and @opt.mod.inspect =~/--(?:db[=-])?(?:sq)?lite/            maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on -          'sqlite' +          :sqlite          else            maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on -          'sqlite' +          :sqlite          end        end      end @@ -107,7 +107,7 @@ module  SiSU_DBI        begin          @conn=@db.psql.conn_dbi        rescue -        if @opt.mod.inspect=~/--(createall|create)/ +        if @opt.mod.inspect=~/--(?:createall|create)/            cX=SiSU_Screen::Ansi.new(@opt.act[:color_state][:set]).cX            puts <<-WOK  manually create the database: "#{cX.green}#{@db.db}#{cX.off}" if it does not yet exist @@ -130,8 +130,8 @@ manually create the database: "#{cX.green}#{@db.db}#{cX.off}" if it does not yet      end      def connect        case @sql_type -      when /pg/     then read_psql -      when /sqlite/ then read_sqlite +      when :pg     then read_psql #read_pg +      when :sqlite then read_sqlite        end        SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"DBI (#{@sql_type}) #{@opt.mod}",@opt.fno).dbi_title unless @opt.act[:quiet][:set]==:on        begin diff --git a/lib/sisu/v5/dbi_discrete.rb b/lib/sisu/v5/dbi_discrete.rb index cd8c7de1..0b42c50e 100644 --- a/lib/sisu/v5/dbi_discrete.rb +++ b/lib/sisu/v5/dbi_discrete.rb @@ -77,13 +77,13 @@ module  SiSU_DBI_Discrete                               #% database building    end    class SQL      def initialize(opt) -      SiSU_Env::Load.new('dbi',true).prog +      SiSU_Env::Load.new('sqlite3',true).prog        @opt=opt        @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)        @md=@particulars.md        if @opt.cmd =~/[d]/ \        or  @opt.mod.inspect =~/--((?:sq)?lite)/ -        @sql_type='sqlite' +        @sql_type=:sqlite          maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on        end        @output_path=@md.file.output_path.sqlite_discrete.dir @@ -122,8 +122,8 @@ module  SiSU_DBI_Discrete                               #% database building      def create_and_populate        db=SiSU_Env::DbOp.new(@md)        conn=db.sqlite_discrete.conn_sqlite3 -      sdb=SiSU_DbDBI::Create.new(@opt,conn,@file,'sqlite') -      sdb_index=SiSU_DbDBI::Index.new(@opt,conn,@file,'sqlite') +      sdb=SiSU_DbDBI::Create.new(@opt,conn,@file,:sqlite) +      sdb_index=SiSU_DbDBI::Index.new(@opt,conn,@file,:sqlite)        sdb.output_dir?        begin          SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],'SQLite',"[#{@opt.f_pth[:lng_is]}] #{@opt.fno}").green_title_hi unless @opt.act[:quiet][:set]==:on @@ -136,7 +136,7 @@ module  SiSU_DBI_Discrete                               #% database building          sdb.create_table.urls          sdb_index.create_indexes          db_exist?(db,conn) -        sdb_import=SiSU_DbDBI::Import.new(@opt,conn,@file_maint,'sqlite') +        sdb_import=SiSU_DbDBI::Import.new(@opt,conn,@file_maint,:sqlite)          sdb_import.marshal_load          tell=SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"sqlite3 #{db.sqlite.db} database?")          tell.puts_grey if @opt.act[:verbose][:set]==:on @@ -174,7 +174,7 @@ module  SiSU_DBI_Discrete                               #% database building        file=if @opt.inspect =~/M/          if @opt.fns and not @opt.fns.empty?            @env=SiSU_Env::InfoEnv.new(@opt.fns) if @opt.fns -          puts "\n#{@env.processing_path.sqlite}/#{@opt.fns}.sql" if @sql_type =~/sqlite/ and @opt.act[:maintenance][:set]==:on +          puts "\n#{@env.processing_path.sqlite}/#{@opt.fns}.sql" if @sql_type ==:sqlite and @opt.act[:maintenance][:set]==:on            @db=SiSU_Env::InfoDb.new            @job="sqlite3 #{@db.sqlite.db} < #{@env.processing_path.sqlite}/#{@opt.fns}.sql"            File.new("#{@env.processing_path.sqlite}/#{@opt.fns}.sql",'w+') diff --git a/lib/sisu/v5/sysenv.rb b/lib/sisu/v5/sysenv.rb index 491ca94f..4b94003c 100644 --- a/lib/sisu/v5/sysenv.rb +++ b/lib/sisu/v5/sysenv.rb @@ -2594,7 +2594,7 @@ WOK          else            (opt.mod.inspect =~/--db[=-]["']?sqlite/) \            ? "#{Db[:name_prefix_db]}sqlite.cgi" \ -          :  "#{Db[:name_prefix_db]}pgsql.cgi" +          :  "#{Db[:name_prefix_db]}pg.cgi"          end        end        def sample_search_form_title(organised_by=:language) diff --git a/lib/sisu/v6/cgi_pgsql.rb b/lib/sisu/v6/cgi_pgsql.rb index a52b62e3..8372bb70 100644 --- a/lib/sisu/v6/cgi_pgsql.rb +++ b/lib/sisu/v6/cgi_pgsql.rb @@ -82,16 +82,15 @@ module  SiSU_CGI_PgSQL          opt.lingual.to_s        else 'multi'        end -      if defined? @rc['search'] \ +      @name_of[:db]=if defined? @rc['search'] \        and defined? @rc['search']['sisu'] \        and defined? @rc['search']['sisu']['action'] \        and @rc['search']['sisu']['action'] =~/https?:\/\/\S+?\.cgi/ \        and defined? @rc['search']['sisu']['db'] \        and @rc['search']['sisu']['db'] =~/\S+/ -        @name_of[:db]=@rc['search']['sisu']['db'] +        @rc['search']['sisu']['db']        else -        @name_of[:db]=@env.path.stub_pwd #'sisu' #breaks if not present -        false +        @env.path.stub_pwd #'sisu' #breaks if not present        end        @name_of[:host_url_cgi]=%q{http://#{ENV['HTTP_HOST']}#{ENV['PATH_INFO']}}        @name_of[:host_url_docs]=%q{http://#{ENV['HTTP_HOST']}} @@ -128,13 +127,6 @@ module  SiSU_CGI_PgSQL              default database name:     #{@cX.green}#{Db[:name_prefix]}#{@name_of[:db]}#{@cX.off} (#{@name_of[:db]})              db user:                   #{@cX.green}#{@name_of[:user]}#{@cX.off}                to modify use:           #{@cX.brown}sisu --db-pg --db-user='#{@name_of[:user]}'#{@cX.off} -            cgi & db host on:          #{@cX.blue}#{@name_of[:host_url_cgi]}#{@cX.off} -              to modify use:           #{@cX.brown}sisu --db-pg --webserv-search='#{@name_of[:host_url_cgi]}'#{@cX.off} -            sisu output on:            #{@cX.blue}#{@name_of[:host_url_docs]}#{@cX.off} -              to modify use:           #{@cX.brown}sisu --db-pg --webserv-output='#{@name_of[:host_url_docs]}'#{@cX.off} -            cgi search form link name: #{@cX.green}#{@name_of[:cgi_script]}#{@cX.off} -              to modify use:           #{@cX.brown}sisu --db-pg --cgi-search-form-name='#{@name_of[:cgi_script]}'#{@cX.off} -            #{@cX.fuchsia}(settings priority: command line; sisurc.yml; else defaults)#{@cX.off}              #{@cX.fuchsia}BASED ON ALREADY EXISTING databases#{@cX.off} (default database name: #{@db.psql.db})              NOTE it is first necessary to createdb, @@ -151,12 +143,12 @@ module  SiSU_CGI_PgSQL                  #{@cX.brown}createdb #{@db.psql.db}#{@cX.off}              [for a list of existing databases try 'psql --list']" -            now you can use sisu to create the database tables and populate the database with documents +            you can use sisu to create the database tables and populate the database with documents              sisu --pg --dropall                              # removes existing postgresql db & tables              sisu --pg --createall -v                         # creates postgresql db & tables              sisu --pg --update -v *.sst  *.ssm               # populate the db -            sisu --sample-search-form --pg                   # creates the postgresql search form +            sisu --sample-search-form --db-pg                # creates the postgresql search form                                                               # this should be done after creating the db                                                               # to be searched              sisu --webrick &                                 # starts ruby webrick web server @@ -195,9 +187,9 @@ module  SiSU_CGI_PgSQL        begin          require 'cgi'          require 'fcgi' -        require 'dbi' +        require 'pg'        rescue LoadError -        puts 'cgi, fcgi or dbi NOT FOUND (LoadError)' +        puts 'cgi, fcgi or pg NOT FOUND (LoadError)'        end        @stub_default='#{@name_of[:db]}'        @image_src="#{@image_src}" @@ -277,10 +269,10 @@ module  SiSU_CGI_PgSQL            %{<font color="#666666" size="2">#{sql_select_endnotes}</font>}          end          def contents -          @conn.select_all(sql_select_body) +          @conn.exec(sql_select_body)          end          def endnotes -          @conn.select_all(sql_select_endnotes) +          @conn.exec(sql_select_endnotes)          end        end        WOK_SQL @@ -292,8 +284,7 @@ module  SiSU_CGI_PgSQL      end      def dbi_connect        <<-'WOK_SQL' -          dbi="dbi:Pg:database=#{@db};port=#{@port}" -          @conn=DBI.connect(dbi,@user) +          @conn=PG::Connection.open(dbname: @db, port: @port, user: @user)        WOK_SQL      end    end diff --git a/lib/sisu/v6/cgi_sqlite.rb b/lib/sisu/v6/cgi_sqlite.rb index 696b6817..f64c3cf6 100644 --- a/lib/sisu/v6/cgi_sqlite.rb +++ b/lib/sisu/v6/cgi_sqlite.rb @@ -172,9 +172,9 @@ module  SiSU_CGI_SQLite        begin          require 'cgi'          require 'fcgi' -        require 'dbi' +        require 'sqlite3'        rescue LoadError -        puts 'cgi, fcgi or dbi NOT FOUND (LoadError)' +        puts 'cgi, fcgi or sqlite3 NOT FOUND (LoadError)'        end        @stub_default='sisu_sqlite'        @image_src="#{@image_src}" @@ -247,18 +247,18 @@ module  SiSU_CGI_SQLite            %{<font color="#666666" size="2">#{sql_select_endnotes}</font>}          end          def contents -          @conn.select_all(sql_select_body) +          @conn.execute(sql_select_body)          end          def endnotes -          @conn.select_all(sql_select_endnotes) +          @conn.execute(sql_select_endnotes)          end        end        WOK_SQL      end      def dbi_connect        <<-'WOK_SQL' -          @dbi="DBI:SQLite3:#{db_sqlite}" #sqlite3 ? -          @conn=DBI.connect(@dbi) +          @conn=SQLite3::Database.new(db_sqlite) +          @conn.results_as_hash=true        WOK_SQL      end    end diff --git a/lib/sisu/v6/db_create.rb b/lib/sisu/v6/db_create.rb index 661059a1..01fc1935 100644 --- a/lib/sisu/v6/db_create.rb +++ b/lib/sisu/v6/db_create.rb @@ -66,10 +66,10 @@ module SiSU_DbCreate    class Create < SiSU_DbColumns::Columns      require_relative 'sysenv'                           # sysenv.rb      @@dl=nil -    def initialize(opt,conn,file,sql_type='pg') +    def initialize(opt,conn,file,sql_type=:pg)        @opt,@conn,@file,@sql_type=opt,conn,file,sql_type        @cX=SiSU_Screen::Ansi.new(@opt.act[:color_state][:set]).cX -      @comment=(@sql_type=='pg') \ +      @comment=(@sql_type==:pg) \        ? (SiSU_DbCreate::Comment.new(@conn,@sql_type))        : nil        @@dl ||=SiSU_Env::InfoEnv.new.digest.length @@ -84,7 +84,7 @@ module SiSU_DbCreate      end      def create_db        @env=SiSU_Env::InfoEnv.new(@opt.fns) -      tell=(@sql_type=='sqlite') \ +      tell=(@sql_type==:sqlite) \        ? SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],'Create SQLite db tables in:',%{"#{@file}"})        : SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],'Create pgSQL db tables in:',%{"#{Db[:name_prefix]}#{@env.path.stub_pwd}"})        if (@opt.act[:verbose][:set]==:on \ @@ -92,7 +92,7 @@ module SiSU_DbCreate        || @opt.act[:maintenance][:set]==:on)          tell.dark_grey_title_hi        end -      SiSU_Env::SystemCall.new.create_pg_db(@env.path.stub_pwd) if @sql_type=='pg' #watch use of path.stub_pwd instead of stub +      SiSU_Env::SystemCall.new.create_pg_db(@env.path.stub_pwd) if @sql_type==:pg #watch use of path.stub_pwd instead of stub      end      def output_dir?        dir=SiSU_Env::InfoEnv.new('') @@ -101,11 +101,24 @@ module SiSU_DbCreate        end      end      def create_table +      def conn_exec(sql) +        if @sql_type==:pg +          conn_exec_pg(sql) +        elsif @sql_type==:sqlite +          conn_exec_sqlite(sql) +        end +      end +      def conn_exec_pg(sql) +        @conn.exec_params(sql) +      end +      def conn_exec_sqlite(sql) +          @conn.execute(sql) +      end        def metadata_and_text          if (@opt.act[:verbose_plus][:set]==:on \          or @opt.act[:maintenance][:set]==:on)            print %{ -          currently using sisu dbi module +          currently using sisu_dbi module            to be populated from document files            create tables metadata_and_text            data import through ruby transfer @@ -211,7 +224,7 @@ module SiSU_DbCreate  /*          writing_focus_nationality VARCHAR(100) NULL, */            );          } -        @conn.execute(create_metadata_and_text) +        conn_exec(create_metadata_and_text)          @comment.psql.metadata_and_text if @comment        end        def doc_objects                                                 # create doc_objects base @@ -258,7 +271,7 @@ module SiSU_DbCreate              types           CHAR(1) NULL            );          } -        @conn.execute(create_doc_objects) +        conn_exec(create_doc_objects)          @comment.psql.doc_objects if @comment        end        def endnotes @@ -284,7 +297,7 @@ module SiSU_DbCreate              metadata_tid    BIGINT REFERENCES metadata_and_text            );          } -        @conn.execute(create_endnotes) +        conn_exec(create_endnotes)          @comment.psql.endnotes if @comment        end        def endnotes_asterisk @@ -310,7 +323,7 @@ module SiSU_DbCreate              metadata_tid    BIGINT REFERENCES metadata_and_text            );          } -        @conn.execute(create_endnotes_asterisk) +        conn_exec(create_endnotes_asterisk)          @comment.psql.endnotes_asterisk if @comment        end        def endnotes_plus @@ -336,14 +349,14 @@ module SiSU_DbCreate              metadata_tid    BIGINT REFERENCES metadata_and_text            );          } -        @conn.execute(create_endnotes_plus) +        conn_exec(create_endnotes_plus)          @comment.psql.endnotes_plus if @comment        end        def urls                                                       # create doc_objects file links mapping          if (@opt.act[:verbose_plus][:set]==:on \          or @opt.act[:maintenance][:set]==:on)            print %{ -          currently using sisu dbi module +          currently using sisu_dbi module            to be populated from doc_objects files            create tables urls            data import through ruby transfer @@ -370,23 +383,23 @@ module SiSU_DbCreate              sisupod         varchar(512)            );          } -        @conn.execute(create_urls) +        conn_exec(create_urls)          @comment.psql.urls if @comment        end        self      end    end    class Comment < SiSU_DbColumns::Columns -    def initialize(conn,sql_type='pg') +    def initialize(conn,sql_type=:pg)        @conn=conn -      if sql_type =~ /pg/; psql +      if sql_type == :pg then psql        end      end      def psql        def conn_execute_array(sql_arr)          @conn.transaction do |conn|            sql_arr.each do |sql| -            conn.execute(sql) +            conn.exec_params(sql)            end          end        end diff --git a/lib/sisu/v6/db_drop.rb b/lib/sisu/v6/db_drop.rb index 94fc5e99..926da47f 100644 --- a/lib/sisu/v6/db_drop.rb +++ b/lib/sisu/v6/db_drop.rb @@ -64,11 +64,11 @@  module SiSU_DbDrop    class Drop      require_relative 'response'                          # response.rb -    def initialize(opt,conn,db_info,sql_type='') +    def initialize(opt,conn,db_info,sql_type)        @opt,@conn,@db_info,@sql_type=opt,conn,db_info,sql_type        @ans=SiSU_Response::Response.new        case @sql_type -      when /sqlite/ +      when :sqlite          cascade=''        else          cascade='CASCADE' @@ -87,7 +87,7 @@ module SiSU_DbDrop          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/ +          when :sqlite              puts msg_sqlite              ans=@ans.response?('remove sql database?')              if ans \ @@ -118,24 +118,38 @@ module SiSU_DbDrop              else                @conn.transaction                @drop_table.each do |d| -                @conn.execute(d) -              end +                begin +                  @conn.exec_params(d) +                rescue +                  next +                end +                end                @conn.commit              end -          else +          when :pg +            @conn.transaction              @drop_table.each do |d| -              @conn.execute(d) +              begin +                @conn.exec_params(d) +              rescue +                next +              end              end +            @conn.commit            end          rescue            case @sql_type -          when /sqlite/ +          when :sqlite              ans=@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| -              @conn.execute(d) +              begin +                @conn.exec_params(d) +              rescue +                next +              end              end            end          ensure @@ -145,7 +159,11 @@ module SiSU_DbDrop          def conn_execute_array(sql_arr)            @conn.transaction do |conn|              sql_arr.each do |sql| -              conn.execute(sql) +              begin +                conn.exec_params(sql) +              rescue +                next +              end              end            end          end diff --git a/lib/sisu/v6/db_import.rb b/lib/sisu/v6/db_import.rb index e1342b1d..35fb631a 100644 --- a/lib/sisu/v6/db_import.rb +++ b/lib/sisu/v6/db_import.rb @@ -72,7 +72,7 @@ module SiSU_DbImport      @@dl=nil      @@hname=nil      attr_accessor :tp -    def initialize(opt,conn,file_maint,sql_type='pg') +    def initialize(opt,conn,file_maint,sql_type=:pg)        @opt,@conn,@file_maint,@sql_type=opt,conn,file_maint,sql_type        @cX=SiSU_Screen::Ansi.new(@opt.act[:color_state][:set]).cX        @env=SiSU_Env::InfoEnv.new(@opt.fns) @@ -90,7 +90,7 @@ module SiSU_DbImport        @col[:ocn]=''        @counter={}        @db=SiSU_Env::InfoDb.new -      if @sql_type=='sqlite' +      if @sql_type==:sqlite          @driver_sqlite3=(@conn.inspect.match(/^(.{10})/)[1]==@db.sqlite.conn_sqlite3.inspect.match(/^(.{10})/)[1]) \          ? true          : false @@ -109,7 +109,7 @@ module SiSU_DbImport        begin          @id_n=@driver_sqlite3 \          ? @conn.execute( sql ).join.to_i -        : @id_n=@conn.execute( sql ) { |x| x.fetch_all.flatten[0] } +        : @id_n=@conn.exec( sql ).getvalue(0,0).to_i          @id_n ||=0        rescue          puts "#{__FILE__}:#{__LINE__}" if @opt.act[:maintenance][:set]==:on @@ -136,9 +136,9 @@ module SiSU_DbImport          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/ \ +      file_exist=@sql_type==:sqlite \        ? @conn.get_first_value(select_first_match) -      : @conn.select_one(select_first_match) +      : @conn.exec(select_first_match).field_values("tid")[0]        if not file_exist          t_d=[]                                                              # transaction_data          t_d << db_import_metadata @@ -152,7 +152,7 @@ module SiSU_DbImport            puts @conn.driver if defined? @conn.driver          end          begin                                                               #% sql -          if @sql_type=~/sqlite/ +          if @sql_type==:sqlite              @conn.transaction do |conn|                t_d.each do |sql|                  conn.execute(sql) @@ -166,11 +166,11 @@ module SiSU_DbImport              #@conn.execute("COMMIT")            else              #'do' works for postgresql -            @conn.do("BEGIN") +            @conn.exec("BEGIN")                t_d.each do |sql| -                @conn.do(sql) +                @conn.exec(sql)                end -            @conn.do("COMMIT") +            @conn.exec("COMMIT")            end          rescue DBI::DatabaseError => e            STDERR.puts "Error code: #{e.err}" @@ -206,7 +206,7 @@ module SiSU_DbImport        else          if file_exist            @db=SiSU_Env::InfoDb.new -          puts "\n#{@cX.grey}file #{@cX.off} #{@cX.blue}#{@opt.fns}#{@cX.off} in language code #{cX.blue}#{@opt.lng}#{cX.off} #{@cX.grey}already exists in database#{@cX.off} #{@cX.blue}#{@db.psql.db}#{@cX.off} #{@cX.brown}update instead?#{@cX.off}" +          puts "\nfile #{@opt.fns} in language code #{@opt.lng} already exists in database #{@db.psql.db} update instead?"          end        end      end @@ -497,7 +497,7 @@ module SiSU_DbImport                @env=SiSU_Env::InfoEnv.new(@md.fns)                @base_url="#{@env.url.root}/#{@md.fnb}/#{@hname}.html"                txt=endnotes(txt).extract_any -              if @sql_type=~/pg/ \ +              if @sql_type==:pg \                and txt.size > (SiSU_DbColumns::ColumnSize.new.document_clean - 1)             # examine pg build & remove limitation                  puts "\n\nTOO LARGE (TXT - see error log)\n\n"                  open("#{Dir.pwd}/pg_documents_error_log",'a') do |error| diff --git a/lib/sisu/v6/db_indexes.rb b/lib/sisu/v6/db_indexes.rb index f293012f..7df20889 100644 --- a/lib/sisu/v6/db_indexes.rb +++ b/lib/sisu/v6/db_indexes.rb @@ -62,15 +62,29 @@  =end  module SiSU_DbIndex -  class Index                                           # create documents Indexes def initialize(opt,conn='',sql_type='') -    def initialize(opt,conn,file,sql_type='') +  class Index                                           # create documents Indexes def initialize(opt,conn='',sql_type) +    def initialize(opt,conn,file,sql_type)        @opt,@conn,@file,@sql_type=opt,conn,file,sql_type      end      def create_indexes                                                           # check added from pg not tested +      def conn_execute_sql_pg(conn,sql) +        conn.exec_params(sql) +      end +      def conn_execute_sql_sqlite(conn,sql) +        conn.execute(sql) +      end +      def conn_execute_sql(conn,sql) +        if @sql_type==:pg +          conn_execute_sql_pg(conn,sql) +        elsif @sql_type==:sqlite +          conn_execute_sql_sqlite(conn,sql) +        else +        end +      end        def conn_execute_array(sql_arr)          @conn.transaction do |conn|            sql_arr.each do |sql| -            conn.execute(sql) +            conn_execute_sql(conn,sql)            end          end        end diff --git a/lib/sisu/v6/db_remove.rb b/lib/sisu/v6/db_remove.rb index 650c84a2..b1628030 100644 --- a/lib/sisu/v6/db_remove.rb +++ b/lib/sisu/v6/db_remove.rb @@ -70,7 +70,7 @@ module SiSU_DbRemove        @db=SiSU_Env::InfoDb.new      end      def remove -      driver_sqlite3=if @sql_type=='sqlite' +      driver_sqlite3=if @sql_type==:sqlite          (@conn.inspect.match(/^(.{10})/)[1]==@db.sqlite.conn_sqlite3.inspect.match(/^(.{10})/)[1]) \          ? true          : false @@ -90,8 +90,8 @@ module SiSU_DbRemove            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.select_one(remove_selected) -        x ? (x.join.to_i) : nil +        x=@conn.exec(remove_selected) +        x.field_values("tid")[0]        end        if del_id          sql_entry=[ @@ -105,12 +105,20 @@ module SiSU_DbRemove          if driver_sqlite3            @conn.transaction            sql_entry.each do |s| -            @conn.execute(s) +            begin +              @conn.execute(s) +            rescue +              next +            end            end            @conn.commit if driver_sqlite3          else            sql_entry.each do |s| -            @conn.execute(s) +            begin +              @conn.exec_params(s) +            rescue +              next +            end            end          end          if @opt.act[:maintenance][:set]==:on diff --git a/lib/sisu/v6/db_select.rb b/lib/sisu/v6/db_select.rb index 56b424d7..9a2c2eb0 100644 --- a/lib/sisu/v6/db_select.rb +++ b/lib/sisu/v6/db_select.rb @@ -63,7 +63,7 @@  =end  module SiSU_DbSelect    class Case -    def initialize(opt,conn='',sql_type='pg') +    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 @@ -78,13 +78,13 @@ module SiSU_DbSelect        end      end      def db_exist? -      if @sql_type=='sqlite' \ +      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.is_a?(NilClass) -        db=@sql_type=='sqlite' \ +        db=@sql_type==:sqlite \          ? @db.sqlite.db          : @db.psql.db          puts %{no connection with #{@sql_type} database established, createdb "#{db}"?} @@ -95,7 +95,7 @@ module SiSU_DbSelect        file=if @opt.inspect =~/M/          if @opt.fns and not @opt.fns.empty?            @env=SiSU_Env::InfoEnv.new(@opt.fns) if @opt.fns -          puts "\n#{@env.processing_path.sqlite}/#{@opt.fns}.sql" if @sql_type =~/sqlite/ and @opt.act[:maintenance][:set]==:on +          puts "\n#{@env.processing_path.sqlite}/#{@opt.fns}.sql" if @sql_type ==:sqlite and @opt.act[:maintenance][:set]==:on            @db=SiSU_Env::InfoDb.new            @job="sqlite3 #{@db.sqlite.db} < #{@env.processing_path.sqlite}/#{@opt.fns}.sql"            File.new("#{@env.processing_path.sqlite}/#{@opt.fns}.sql",'w+') @@ -173,8 +173,8 @@ module SiSU_DbSelect            db_exist?            @sdb_import.marshal_load            tell=case @sql_type -          when /sqlite/ then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"sqlite3 #{@db.sqlite.db} database?") -          when /pg/     then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"pgaccess or psql #{@db.psql.db} database?") +          when :sqlite then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"sqlite3 #{@db.sqlite.db} database?") +          when :pg     then 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 @@ -183,8 +183,8 @@ module SiSU_DbSelect            @sdb_remove_doc.remove            @sdb_import.marshal_load            tell=case @sql_type -          when /sqlite/ then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"sqlite3 #{@db.sqlite.db} database?") -          when /pg/     then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"pgaccess or psql #{@db.psql.db} database?") +          when :sqlite then SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"sqlite3 #{@db.sqlite.db} database?") +          when :pg     then 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 diff --git a/lib/sisu/v6/dbi.rb b/lib/sisu/v6/dbi.rb index acb75e0f..7432f2f3 100644 --- a/lib/sisu/v6/dbi.rb +++ b/lib/sisu/v6/dbi.rb @@ -71,7 +71,6 @@ module  SiSU_DBI      include SiSU_FormatShared    class SQL      def initialize(opt) -      SiSU_Env::Load.new('dbi',true).prog        @opt=opt        @db=SiSU_Env::InfoDb.new        if @opt.cmd =~/[Dd]/ \ @@ -79,22 +78,25 @@ module  SiSU_DBI          @sql_type=if @opt.cmd=~/D/ \          or @opt.mod.inspect =~/--pg(?:sql)?/            maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on -          'pg' +          :pg          elsif @opt.cmd =~/d/ \          and @opt.mod.inspect =~/--(?:db[=-])?pg(?:sql)?/            maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on -          'pg' +          :pg          elsif @opt.cmd=~/d/ \          or @opt.mod.inspect =~/--(?:sq)?lite/            maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on -          'sqlite' +          :sqlite          elsif @opt.cmd =~/d/ \          and @opt.mod.inspect =~/--(?:db[=-])?(?:sq)?lite/            maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on -          'sqlite' +          :sqlite          else            maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on -          'sqlite' +          :sqlite +        end +        if    @sql_type==:pg    then SiSU_Env::Load.new('pg',true).prog +        elsif @sql_type==:sqlite then SiSU_Env::Load.new('sqlite3',true).prog          end        end      end @@ -105,9 +107,10 @@ module  SiSU_DBI      end      def read_psql        begin -        @conn=@db.psql.conn_dbi +        require 'pg' +        @conn=@db.psql.conn_pg        rescue -        if @opt.mod.inspect=~/--(createall|create)/ +        if @opt.mod.inspect=~/--(?:createall|create)/            cX=SiSU_Screen::Ansi.new(@opt.act[:color_state][:set]).cX            puts <<-WOK  manually create the database: "#{cX.green}#{@db.db}#{cX.off}" if it does not yet exist @@ -130,8 +133,8 @@ manually create the database: "#{cX.green}#{@db.db}#{cX.off}" if it does not yet      end      def connect        case @sql_type -      when /pg/     then read_psql -      when /sqlite/ then read_sqlite +      when :pg     then read_psql #read_pg +      when :sqlite then read_sqlite        end        SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"DBI (#{@sql_type}) #{@opt.mod}",@opt.fno).dbi_title unless @opt.act[:quiet][:set]==:on        begin diff --git a/lib/sisu/v6/dbi_discrete.rb b/lib/sisu/v6/dbi_discrete.rb index 0ac84db4..0f534e42 100644 --- a/lib/sisu/v6/dbi_discrete.rb +++ b/lib/sisu/v6/dbi_discrete.rb @@ -77,13 +77,13 @@ module  SiSU_DBI_Discrete                               #% database building    end    class SQL      def initialize(opt) -      SiSU_Env::Load.new('dbi',true).prog +      SiSU_Env::Load.new('sqlite3',true).prog        @opt=opt        @particulars=SiSU_Particulars::CombinedSingleton.instance.get_all(opt)        @md=@particulars.md        if @opt.cmd =~/[d]/ \        or  @opt.mod.inspect =~/--((?:sq)?lite)/ -        @sql_type='sqlite' +        @sql_type=:sqlite          maintenance_check(@opt,__FILE__,__LINE__) if @opt.act[:maintenance][:set]==:on        end        @output_path=@md.file.output_path.sqlite_discrete.dir @@ -122,8 +122,8 @@ module  SiSU_DBI_Discrete                               #% database building      def create_and_populate        db=SiSU_Env::DbOp.new(@md)        conn=db.sqlite_discrete.conn_sqlite3 -      sdb=SiSU_DbDBI::Create.new(@opt,conn,@file,'sqlite') -      sdb_index=SiSU_DbDBI::Index.new(@opt,conn,@file,'sqlite') +      sdb=SiSU_DbDBI::Create.new(@opt,conn,@file,:sqlite) +      sdb_index=SiSU_DbDBI::Index.new(@opt,conn,@file,:sqlite)        sdb.output_dir?        begin          SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],'SQLite',"[#{@opt.f_pth[:lng_is]}] #{@opt.fno}").green_title_hi unless @opt.act[:quiet][:set]==:on @@ -136,7 +136,7 @@ module  SiSU_DBI_Discrete                               #% database building          sdb.create_table.urls          sdb_index.create_indexes          db_exist?(db,conn) -        sdb_import=SiSU_DbDBI::Import.new(@opt,conn,@file_maint,'sqlite') +        sdb_import=SiSU_DbDBI::Import.new(@opt,conn,@file_maint,:sqlite)          sdb_import.marshal_load          tell=SiSU_Screen::Ansi.new(@opt.act[:color_state][:set],"sqlite3 #{db.sqlite.db} database?")          tell.puts_grey if @opt.act[:verbose][:set]==:on @@ -174,7 +174,7 @@ module  SiSU_DBI_Discrete                               #% database building        file=if @opt.inspect =~/M/          if @opt.fns and not @opt.fns.empty?            @env=SiSU_Env::InfoEnv.new(@opt.fns) if @opt.fns -          puts "\n#{@env.processing_path.sqlite}/#{@opt.fns}.sql" if @sql_type =~/sqlite/ and @opt.act[:maintenance][:set]==:on +          puts "\n#{@env.processing_path.sqlite}/#{@opt.fns}.sql" if @sql_type ==:sqlite and @opt.act[:maintenance][:set]==:on            @db=SiSU_Env::InfoDb.new            @job="sqlite3 #{@db.sqlite.db} < #{@env.processing_path.sqlite}/#{@opt.fns}.sql"            File.new("#{@env.processing_path.sqlite}/#{@opt.fns}.sql",'w+') diff --git a/lib/sisu/v6/sysenv.rb b/lib/sisu/v6/sysenv.rb index 8c819d9b..2c2a8c10 100644 --- a/lib/sisu/v6/sysenv.rb +++ b/lib/sisu/v6/sysenv.rb @@ -249,7 +249,9 @@ module SiSU_Env        $:.each do |reqpath|          if FileTest.exist?("#{reqpath}/#{@prog}.rb")            load_prog=true +          #SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).ok("#{reqpath}/#{@prog}.rb loaded")            break +        #else SiSU_Utils::CodeMarker.new(__LINE__,__FILE__,:fuchsia).warn("#{reqpath}/#{@prog}.rb not found")          end        end        if load_prog \ @@ -2673,7 +2675,7 @@ WOK          else            (opt.mod.inspect =~/--db[=-]["']?sqlite/) \            ? "#{Db[:name_prefix_db]}sqlite.cgi" \ -          :  "#{Db[:name_prefix_db]}pgsql.cgi" +          :  "#{Db[:name_prefix_db]}pg.cgi"          end        end        def sample_search_form_title(organised_by=:language) @@ -4428,6 +4430,9 @@ WOK          : ''        end        def dbi +        PG::Connection.open(:dbname =>  psql.db) +      end +      def dbi_          (psql.host =~/(?:\S{1,3}\.){3}\S{1,3}|\S+?\.\S+/) \          ? "DBI:Pg:database=#{psql.db};host=#{psql.host};port=#{psql.port}"          : "DBI:Pg:database=#{psql.db};port=#{psql.port}" @@ -4435,19 +4440,11 @@ WOK        def conn_dbi          DBI.connect(psql.dbi,psql.user,psql.db)        end -     self -    end -    def mysql -      def db -        #"#{Db[:name_prefix]}#{@pwd_stub}" -      end -      def port -        '**' +      def conn_pg +        require 'pg' +        PG::Connection.new(dbname: psql.db, port: psql.port)        end -      def dbi -        "dbi:Mysql:database=#{mysql.db};port=#{mysql.port}" -      end -      self +     self      end      def sqlite        def db diff --git a/lib/sisu/v6/utils.rb b/lib/sisu/v6/utils.rb index 8f9e17b8..5879db27 100644 --- a/lib/sisu/v6/utils.rb +++ b/lib/sisu/v6/utils.rb @@ -133,6 +133,18 @@ module SiSU_Utils      def mark(v=nil,x=nil)        puts set(v,x)      end +    def ok(v=nil,x=nil) +      if (v.is_a?(Symbol) \ +      and x.is_a?(String)) +        x= '*OK* ' + x +      elsif v.is_a?(String) +        v='*OK* ' + v +        x=nil +      else +        v,x='*OK*',nil +      end +      puts set(v,x) +    end      def warn(v=nil,x=nil)        if (v.is_a?(Symbol) \        and x.is_a?(String)) @@ -143,7 +155,7 @@ module SiSU_Utils        else          v,x='*WARN*',nil        end -      STDERR.puts set(v,x) +      puts set(v,x)      end      def error(v=nil,x=nil)        if (v.is_a?(Symbol) \ | 
