(t *testing.T)
| 969 | } |
| 970 | |
| 971 | func TestQueryRowErrors(t *testing.T) { |
| 972 | t.Parallel() |
| 973 | |
| 974 | conn := mustConnectString(t, os.Getenv("PGX_TEST_DATABASE")) |
| 975 | defer closeConn(t, conn) |
| 976 | |
| 977 | if conn.PgConn().ParameterStatus("crdb_version") != "" { |
| 978 | t.Skip("Skipping due to known server missing point type") |
| 979 | } |
| 980 | |
| 981 | type allTypes struct { |
| 982 | i16 int16 |
| 983 | s string |
| 984 | } |
| 985 | |
| 986 | var actual, zero allTypes |
| 987 | |
| 988 | tests := []struct { |
| 989 | sql string |
| 990 | queryArgs []any |
| 991 | scanArgs []any |
| 992 | err string |
| 993 | }{ |
| 994 | {"select $1::badtype", []any{"Jack"}, []any{&actual.i16}, `type "badtype" does not exist`}, |
| 995 | {"SYNTAX ERROR", []any{}, []any{&actual.i16}, "SQLSTATE 42601"}, |
| 996 | {"select $1::text", []any{"Jack"}, []any{&actual.i16}, "cannot scan text (OID 25) in text format into *int16"}, |
| 997 | {"select $1::point", []any{int(705)}, []any{&actual.s}, "unable to encode 705 into binary format for point (OID 600)"}, |
| 998 | } |
| 999 | |
| 1000 | for i, tt := range tests { |
| 1001 | actual = zero |
| 1002 | |
| 1003 | err := conn.QueryRow(context.Background(), tt.sql, tt.queryArgs...).Scan(tt.scanArgs...) |
| 1004 | if err == nil { |
| 1005 | t.Errorf("%d. Unexpected success (sql -> %v, queryArgs -> %v)", i, tt.sql, tt.queryArgs) |
| 1006 | } |
| 1007 | if err != nil && !strings.Contains(err.Error(), tt.err) { |
| 1008 | t.Errorf("%d. Expected error to contain %s, but got %v (sql -> %v, queryArgs -> %v)", i, tt.err, err, tt.sql, tt.queryArgs) |
| 1009 | } |
| 1010 | |
| 1011 | ensureConnValid(t, conn) |
| 1012 | } |
| 1013 | } |
| 1014 | |
| 1015 | func TestQueryRowNoResults(t *testing.T) { |
| 1016 | t.Parallel() |
nothing calls this directly
no test coverage detected