Improve error messages for query argument encoding
This commit is contained in:
@@ -488,6 +488,7 @@ func (c *Conn) execParamsAndPreparedPrefix(sd *pgconn.StatementDescription, args
|
|||||||
for i := range args {
|
for i := range args {
|
||||||
err := c.eqb.AppendParam(c.typeMap, sd.ParamOIDs[i], args[i])
|
err := c.eqb.AppendParam(c.typeMap, sd.ParamOIDs[i], args[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
err = fmt.Errorf("failed to encode args[%d]: %v", i, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -739,6 +740,7 @@ optionLoop:
|
|||||||
for i := range args {
|
for i := range args {
|
||||||
err = c.eqb.AppendParam(c.typeMap, sd.ParamOIDs[i], args[i])
|
err = c.eqb.AppendParam(c.typeMap, sd.ParamOIDs[i], args[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
err = fmt.Errorf("failed to encode args[%d]: %v", i, err)
|
||||||
rows.fatal(err)
|
rows.fatal(err)
|
||||||
return rows, rows.err
|
return rows, rows.err
|
||||||
}
|
}
|
||||||
@@ -895,6 +897,7 @@ func (c *Conn) SendBatch(ctx context.Context, b *Batch) BatchResults {
|
|||||||
for i := range bi.arguments {
|
for i := range bi.arguments {
|
||||||
err := c.eqb.AppendParam(c.typeMap, sd.ParamOIDs[i], bi.arguments[i])
|
err := c.eqb.AppendParam(c.typeMap, sd.ParamOIDs[i], bi.arguments[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
err = fmt.Errorf("failed to encode args[%d]: %v", i, err)
|
||||||
return &batchResults{ctx: ctx, conn: c, err: err}
|
return &batchResults{ctx: ctx, conn: c, err: err}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -962,6 +965,7 @@ func (c *Conn) SendBatch(ctx context.Context, b *Batch) BatchResults {
|
|||||||
for i := range bi.arguments {
|
for i := range bi.arguments {
|
||||||
err := c.eqb.AppendParam(c.typeMap, sd.ParamOIDs[i], bi.arguments[i])
|
err := c.eqb.AppendParam(c.typeMap, sd.ParamOIDs[i], bi.arguments[i])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
err = fmt.Errorf("failed to encode args[%d]: %v", i, err)
|
||||||
return &batchResults{ctx: ctx, conn: c, err: err}
|
return &batchResults{ctx: ctx, conn: c, err: err}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -1737,7 +1737,14 @@ func (m *Map) Encode(oid uint32, formatCode int16, value interface{}, buf []byte
|
|||||||
return m.Encode(oid, formatCode, v, buf)
|
return m.Encode(oid, formatCode, v, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, fmt.Errorf("unable to encode %#v into OID %d", value, oid)
|
return nil, fmt.Errorf("unable to encode %#v into format code %d for OID %d", value, formatCode, oid)
|
||||||
}
|
}
|
||||||
return plan.Encode(value, buf)
|
|
||||||
|
newBuf, err = plan.Encode(value, buf)
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("unable to encode %#v into format code %d for OID %d: %v", value, formatCode, oid, err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return newBuf, nil
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -983,7 +983,7 @@ func TestQueryRowErrors(t *testing.T) {
|
|||||||
{"select $1::badtype", []interface{}{"Jack"}, []interface{}{&actual.i16}, `type "badtype" does not exist`},
|
{"select $1::badtype", []interface{}{"Jack"}, []interface{}{&actual.i16}, `type "badtype" does not exist`},
|
||||||
{"SYNTAX ERROR", []interface{}{}, []interface{}{&actual.i16}, "SQLSTATE 42601"},
|
{"SYNTAX ERROR", []interface{}{}, []interface{}{&actual.i16}, "SQLSTATE 42601"},
|
||||||
{"select $1::text", []interface{}{"Jack"}, []interface{}{&actual.i16}, "cannot scan OID 25 in text format into *int16"},
|
{"select $1::text", []interface{}{"Jack"}, []interface{}{&actual.i16}, "cannot scan OID 25 in text format into *int16"},
|
||||||
{"select $1::point", []interface{}{int(705)}, []interface{}{&actual.s}, "unable to encode 705 into OID 600"},
|
{"select $1::point", []interface{}{int(705)}, []interface{}{&actual.s}, "unable to encode 705 into format code 1 for OID 600"},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, tt := range tests {
|
for i, tt := range tests {
|
||||||
|
|||||||
Reference in New Issue
Block a user