def main
dbname = nil
host = "localhost"
port = 5432
qfilename = nil
singleQuery = nil
settings = PsqlSettings.new(nil, nil, nil, nil, nil, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE)
settings.opt = PrintOpt.new(FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, nil, nil, nil, nil)
listDatabases = FALSE
successResult = TRUE
singleSlashCmd = FALSE
settings.opt.align = TRUE
settings.opt.header = TRUE
settings.queryFout = STDOUT
settings.opt.fieldSep = DEFAULT_FIELD_SEP.dup
settings.opt.pager = TRUE
settings.quiet = FALSE
settings.notty = FALSE
settings.useReadline = TRUE
parsed = parseArgs(0, nil, "AelHnsqStx", "a:", "c:", "d:", "f:", "F:",
"h:", "o:", "p:", "T:")
if $OPT_A
settings.opt.align = FALSE
end
if $OPT_a
printf("not implemented, sorry.\n")
exit(1)
end
if $OPT_c
singleQuery = $OPT_c
if singleQuery[0, 1] == "\\"
singleSlashCmd = TRUE
end
end
if $OPT_d
dbname = $OPT_d
end
if $OPT_e
settings.echoQuery = TRUE
end
if $OPT_f
qfilename = $OPT_f
end
if $OPT_F
settings.opt.fieldSep = $OPT_F
end
if $OPT_l
listDatabases = TRUE
end
if $OPT_h
host = $OPT_h
end
if $OPT_H
settings.opt.html3 = TRUE
end
if $OPT_n
settings.useReadline = FALSE
end
if $OPT_o
setFout(settings, $OPT_o)
end
if $OPT_p
port = $OPT_p.to_i
end
if $OPT_q
settings.quiet = TRUE
end
if $OPT_s
settings.singleStep = TRUE
end
if $OPT_S
settings.singleLineMode = TRUE
end
if $OPT_t
settings.opt.header = FALSE
end
if $OPT_T
settings.opt.tableOpt = $OPT_T
end
if $OPT_x
settings.opt.expanded = TRUE
end
if ARGV.length == 1
dbname = ARGV[0]
end
if listDatabases
dbname = "template1"
end
settings.db = PGconn.connect(host, port, "", "", dbname);
dbname = settings.db.db
if settings.db.status() == PGconn::CONNECTION_BAD
printf(STDERR, "Connection to database '%s' failed.\n", dbname)
printf(STDERR, "%s", settings.db.error)
exit(1)
end
if listDatabases
exit(listAllDbs(settings))
end
if (!settings.quiet && !singleQuery && !qfilename)
printf("Welcome to the POSTGRESQL interactive sql monitor:\n")
printf(" Please read the file COPYRIGHT for copyright terms of POSTGRESQL\n\n")
printf(" type \\? for help on slash commands\n")
printf(" type \\q to quit\n")
printf(" type \\g or terminate with semicolon to execute query\n")
printf(" You are currently connected to the database: %s\n\n", dbname)
end
if (qfilename || singleSlashCmd)
if singleSlashCmd
line = singleQuery
else
line = sprintf("\\i %s", qfilename)
end
HandleSlashCmds(settings, line, "")
else
if settings.useReadline
begin
require "readline"
$readline_ok = TRUE
rescue
$readline_ok = FALSE
end
else
$readline_ok = FALSE
end
if singleQuery
success = SendQuery(settings, singleQuery, false, false, 0)
successResult = success
else
successResult = MainLoop(settings, STDIN)
end
end
settings.db.finish()
return !successResult
end