Skip to content

Commit

Permalink
handle error properly in prepareTo - fix #26, fix #28
Browse files Browse the repository at this point in the history
  • Loading branch information
bmizerany committed Jul 10, 2012
1 parent c20a07d commit edea8d2
Showing 1 changed file with 27 additions and 29 deletions.
56 changes: 27 additions & 29 deletions conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,41 +153,39 @@ func (cn *conn) prepareTo(q, stmtName string) (_ driver.Stmt, err error) {
b.string(st.name)
cn.send(b)

cn.send(newWriteBuf('H'))
cn.send(newWriteBuf('S'))

t, r := cn.recv()
if t != '1' {
errorf("unexpected parse response: %q", t)
}

t, r = cn.recv()
if t != 't' {
errorf("unexpected describe params response: %q", t)
}
st.nparams = int(r.int16())

t, r = cn.recv()
switch t {
case 'T':
n := r.int16()
st.cols = make([]string, n)
st.ooid = make([]int, n)
for i := range st.cols {
st.cols[i] = r.string()
r.next(6)
st.ooid[i] = r.int32()
r.next(8)
for {
t, r := cn.recv1()
switch t {
case '1', '2':
case 't':
st.nparams = int(r.int16())
case 'T':
n := r.int16()
st.cols = make([]string, n)
st.ooid = make([]int, n)
for i := range st.cols {
st.cols[i] = r.string()
r.next(6)
st.ooid[i] = r.int32()
r.next(8)
}
case 'n':
// no data
case 'Z':
return st, nil
case 'E':
err = parseError(r)
default:
errorf("unexpected describe rows response: %q", t)
}
case 'n':
// no data
default:
errorf("unexpected describe rows response: %q", t)
}

return st, nil
panic("not reached")
}

func (cn *conn) Prepare(q string) (_ driver.Stmt, err error) {
func (cn *conn) Prepare(q string) (driver.Stmt, error) {
return cn.prepareTo(q, cn.gname())
}

Expand Down

0 comments on commit edea8d2

Please sign in to comment.