Skip to content

Commit 0cc952c

Browse files
authoredAug 9, 2019
Merge pull request JuliaDatabases#120 from invenia/ed/null-sqlstate
Support NULL SQLSTATE with custom UnknownError type
2 parents f560b7f + af1df06 commit 0cc952c

File tree

4 files changed

+27
-1
lines changed

4 files changed

+27
-1
lines changed
 

‎deps/error_codes.jl

+10
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@ function generate_error_codes(io, html=error_code_html())
7474
println(error_enum_io, " $error_code,")
7575
println(error_names_io, " $id_name => \"$id_name\",")
7676
end
77+
78+
# unknown error
79+
class = "CUN"
80+
error_code = "EUNOWN"
81+
println(class_enum_io, " $class,")
82+
println(alias_io, "\n\nconst UnknownErrorClass = PQResultError{$class}\n")
83+
println(alias_io, "const UnknownError = PQResultError{$class, $error_code}")
84+
println(error_enum_io, " $error_code,")
85+
println(error_names_io, " UnknownError => \"UnknownError\",")
86+
7787
println(class_enum_io, ")")
7888
println(error_enum_io, ")")
7989
println(error_names_io, ")")

‎src/error_codes.jl

+8
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
CHV,
4545
CP0,
4646
CXX,
47+
CUN,
4748
)
4849

4950
@cenum(ErrorCode,
@@ -288,6 +289,7 @@
288289
EXX000,
289290
EXX001,
290291
EXX002,
292+
EUNOWN,
291293
)
292294

293295

@@ -703,6 +705,11 @@ const InternalError = PQResultError{CXX, EXX000}
703705
const DataCorrupted = PQResultError{CXX, EXX001}
704706
const IndexCorrupted = PQResultError{CXX, EXX002}
705707

708+
709+
const UnknownErrorClass = PQResultError{CUN}
710+
711+
const UnknownError = PQResultError{CUN, EUNOWN}
712+
706713
const ERROR_NAMES = Dict(
707714
SuccessfulCompletion => "SuccessfulCompletion",
708715
WarningWarning => "WarningWarning",
@@ -945,4 +952,5 @@ const ERROR_NAMES = Dict(
945952
InternalError => "InternalError",
946953
DataCorrupted => "DataCorrupted",
947954
IndexCorrupted => "IndexCorrupted",
955+
UnknownError => "UnknownError",
948956
)

‎src/exceptions.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ end
8888
function PQResultError(result::Result; verbose=false)
8989
msg = error_message(result; verbose=false)
9090
verbose_msg = verbose ? error_message(result; verbose=true) : nothing
91-
code_str = error_field(result, libpq_c.PG_DIAG_SQLSTATE)
91+
code_str = something(error_field(result, libpq_c.PG_DIAG_SQLSTATE), "UNOWN")
9292
class = parse(Class, code_str[1:2])
9393
code = parse(ErrorCode, code_str)
9494

‎test/runtests.jl

+8
Original file line numberDiff line numberDiff line change
@@ -885,6 +885,14 @@ end
885885
@test length(verbose_err.verbose_msg) > length(err.msg)
886886

887887
close(result)
888+
889+
result = execute(conn, "SELECT 1;")
890+
unknown_error = LibPQ.Errors.PQResultError(result; verbose=true)
891+
@test unknown_error isa LibPQ.Errors.UnknownErrorClass
892+
@test unknown_error isa LibPQ.Errors.UnknownError
893+
@test occursin("PGresult is not an error result", unknown_error.verbose_msg)
894+
close(result)
895+
888896
close(conn)
889897
end
890898

0 commit comments

Comments
 (0)
Please sign in to comment.