From d1a56c95d2640c367f4adbb2a93c3b05cf475450 Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Tue, 23 Apr 2013 08:15:05 -0500 Subject: [PATCH] Connect via TCP fixes #15 --- connection.go | 21 ++++++++++++--------- connection_test.go | 12 ++++++++++++ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/connection.go b/connection.go index fe24d99a..f48a381e 100644 --- a/connection.go +++ b/connection.go @@ -12,6 +12,8 @@ import ( type ConnectionParameters struct { socket string // path to unix domain socket (e.g. /private/tmp/.s.PGSQL.5432) + host string + port uint16 // default: 5432 database string user string password string @@ -27,28 +29,29 @@ type Connection struct { txStatus byte } -// options: -// socket: path to unix domain socket -// host: TCP address -// port: -// database: name of database -func Connect(paramaters ConnectionParameters) (c *Connection, err error) { +func Connect(parameters ConnectionParameters) (c *Connection, err error) { c = new(Connection) - c.parameters = paramaters + c.parameters = parameters + if c.parameters.port == 0 { + c.parameters.port = 5432 + } if c.parameters.socket != "" { c.conn, err = net.Dial("unix", c.parameters.socket) if err != nil { return nil, err } + } else if c.parameters.host != "" { + c.conn, err = net.Dial("tcp", fmt.Sprintf("%s:%d", c.parameters.host, c.parameters.port)) + if err != nil { + return nil, err + } } c.buf = make([]byte, 1024) c.runtimeParams = make(map[string]string) - // conn, err := net.Dial("tcp", "localhost:5432") - msg := newStartupMessage() msg.options["user"] = c.parameters.user if c.parameters.database != "" { diff --git a/connection_test.go b/connection_test.go index 0e43ab7d..4f4711db 100644 --- a/connection_test.go +++ b/connection_test.go @@ -53,6 +53,18 @@ func TestConnect(t *testing.T) { } } +func TestConnectWithTcp(t *testing.T) { + conn, err := Connect(ConnectionParameters{host: "127.0.0.1", user: "pgx_md5", password: "secret", database: "pgx_test"}) + if err != nil { + t.Fatal("Unable to establish connection: " + err.Error()) + } + + err = conn.Close() + if err != nil { + t.Fatal("Unable to close connection") + } +} + func TestConnectWithInvalidUser(t *testing.T) { _, err := Connect(ConnectionParameters{socket: "/private/tmp/.s.PGSQL.5432", user: "invalid_user", database: "pgx_test"}) pgErr := err.(PgError)