Connect via TCP

fixes #15
pgx-vs-pq
Jack Christensen 2013-04-23 08:15:05 -05:00
parent 460acd7757
commit d1a56c95d2
2 changed files with 24 additions and 9 deletions

View File

@ -12,6 +12,8 @@ import (
type ConnectionParameters struct { type ConnectionParameters struct {
socket string // path to unix domain socket (e.g. /private/tmp/.s.PGSQL.5432) socket string // path to unix domain socket (e.g. /private/tmp/.s.PGSQL.5432)
host string
port uint16 // default: 5432
database string database string
user string user string
password string password string
@ -27,28 +29,29 @@ type Connection struct {
txStatus byte txStatus byte
} }
// options: func Connect(parameters ConnectionParameters) (c *Connection, err error) {
// socket: path to unix domain socket
// host: TCP address
// port:
// database: name of database
func Connect(paramaters ConnectionParameters) (c *Connection, err error) {
c = new(Connection) c = new(Connection)
c.parameters = paramaters c.parameters = parameters
if c.parameters.port == 0 {
c.parameters.port = 5432
}
if c.parameters.socket != "" { if c.parameters.socket != "" {
c.conn, err = net.Dial("unix", c.parameters.socket) c.conn, err = net.Dial("unix", c.parameters.socket)
if err != nil { if err != nil {
return nil, err 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.buf = make([]byte, 1024)
c.runtimeParams = make(map[string]string) c.runtimeParams = make(map[string]string)
// conn, err := net.Dial("tcp", "localhost:5432")
msg := newStartupMessage() msg := newStartupMessage()
msg.options["user"] = c.parameters.user msg.options["user"] = c.parameters.user
if c.parameters.database != "" { if c.parameters.database != "" {

View File

@ -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) { func TestConnectWithInvalidUser(t *testing.T) {
_, err := Connect(ConnectionParameters{socket: "/private/tmp/.s.PGSQL.5432", user: "invalid_user", database: "pgx_test"}) _, err := Connect(ConnectionParameters{socket: "/private/tmp/.s.PGSQL.5432", user: "invalid_user", database: "pgx_test"})
pgErr := err.(PgError) pgErr := err.(PgError)