src/Pure/General/sql.scala
changeset 78366 aa4ea5398ab8
parent 78365 bb5e2a7198e3
child 78369 ba71ea02d965
equal deleted inserted replaced
78365:bb5e2a7198e3 78366:aa4ea5398ab8
   631 
   631 
   632   lazy val init_jdbc: Unit = Class.forName("org.postgresql.Driver")
   632   lazy val init_jdbc: Unit = Class.forName("org.postgresql.Driver")
   633 
   633 
   634   val default_server: SSH.Server = SSH.local_server(port = 5432)
   634   val default_server: SSH.Server = SSH.local_server(port = 5432)
   635 
   635 
       
   636   def open_server(
       
   637     options: Options,
       
   638     host: String = "",
       
   639     port: Int = 0,
       
   640     ssh_host: String = "",
       
   641     ssh_port: Int = 0,
       
   642     ssh_user: String = ""
       
   643   ): SSH.Server = {
       
   644     val server_host = proper_string(host).getOrElse(default_server.host)
       
   645     val server_port = if (port > 0) port else default_server.port
       
   646 
       
   647     if (ssh_host.isEmpty) SSH.local_server(host = server_host, port = server_port)
       
   648     else {
       
   649       SSH.open_server(options, host = ssh_host, port = ssh_port, user = ssh_user,
       
   650         remote_host = server_host, remote_port = server_port)
       
   651     }
       
   652   }
       
   653 
   636   def open_database_server(
   654   def open_database_server(
   637     options: Options,
   655     options: Options,
   638     user: String = "",
   656     user: String = "",
   639     password: String = "",
   657     password: String = "",
   640     database: String = "",
   658     database: String = "",
       
   659     server: SSH.Server = SSH.no_server,
   641     host: String = "",
   660     host: String = "",
   642     port: Int = 0,
   661     port: Int = 0,
   643     ssh_host: String = "",
   662     ssh_host: String = "",
   644     ssh_port: Int = 0,
   663     ssh_port: Int = 0,
   645     ssh_user: String = "",
   664     ssh_user: String = ""
   646     server: SSH.Server = SSH.no_server
       
   647   ): PostgreSQL.Database = {
   665   ): PostgreSQL.Database = {
   648     val (db_server, server_close) =
   666     val db_server =
   649       if (server.defined) (server, false)
   667       if (server.defined) server
   650       else {
   668       else {
   651         val server_host = proper_string(host).getOrElse(default_server.host)
   669         open_server(options, host = host, port = port, ssh_host = ssh_host,
   652         val server_port = if (port > 0) port else default_server.port
   670           ssh_port = ssh_port, ssh_user = ssh_user)
   653         val db_server =
   671       }
   654           if (ssh_host.isEmpty) SSH.local_server(host = server_host, port = server_port)
   672     val server_close = !server.defined
   655           else {
       
   656             SSH.open_server(options, host = ssh_host, port = ssh_port, user = ssh_user,
       
   657               remote_host = server_host, remote_port = server_port)
       
   658           }
       
   659         (db_server, true)
       
   660       }
       
   661 
       
   662     try {
   673     try {
   663       open_database(user = user, password = password, database = database,
   674       open_database(user = user, password = password, database = database,
   664         server = db_server, server_close = server_close)
   675         server = db_server, server_close = server_close)
   665     }
   676     }
   666     catch { case exn: Throwable => if (server_close) db_server.close(); throw exn }
   677     catch { case exn: Throwable if server_close => db_server.close(); throw exn }
   667   }
   678   }
   668 
   679 
   669   def open_database(
   680   def open_database(
   670     user: String,
   681     user: String,
   671     password: String,
   682     password: String,