@@ -91,6 +91,25 @@ impl FunctionStreamServiceImpl {
9191 }
9292 }
9393
94+ fn classify_error ( message : & str ) -> StatusCode {
95+ let lower = message. to_lowercase ( ) ;
96+ if lower. contains ( "not found" ) || lower. contains ( "not exist" ) {
97+ StatusCode :: NotFound
98+ } else if lower. contains ( "uniqueness violation" )
99+ || lower. contains ( "already exists" )
100+ || lower. contains ( "duplicate" )
101+ {
102+ StatusCode :: Conflict
103+ } else if lower. contains ( "invalid" )
104+ || lower. contains ( "unsupported" )
105+ || lower. contains ( "missing" )
106+ {
107+ StatusCode :: BadRequest
108+ } else {
109+ StatusCode :: InternalServerError
110+ }
111+ }
112+
94113 async fn execute_statement (
95114 & self ,
96115 stmt : & dyn Statement ,
@@ -101,7 +120,8 @@ impl FunctionStreamServiceImpl {
101120 if result. success {
102121 Self :: build_success_response ( success_status, result. message , result. data )
103122 } else {
104- Self :: build_error_response ( StatusCode :: InternalServerError , result. message )
123+ let status = Self :: classify_error ( & result. message ) ;
124+ Self :: build_error_response ( status, result. message )
105125 }
106126 }
107127}
@@ -139,8 +159,9 @@ impl FunctionStreamService for FunctionStreamServiceImpl {
139159
140160 if !result. success {
141161 error ! ( "SQL execution aborted: {}" , result. message) ;
162+ let status = Self :: classify_error ( & result. message ) ;
142163 return Ok ( TonicResponse :: new ( Self :: build_error_response (
143- StatusCode :: InternalServerError ,
164+ status ,
144165 result. message ,
145166 ) ) ) ;
146167 }
@@ -235,8 +256,9 @@ impl FunctionStreamService for FunctionStreamServiceImpl {
235256
236257 if !result. success {
237258 error ! ( "show_functions execution failed: {}" , result. message) ;
259+ let status = Self :: classify_error ( & result. message ) ;
238260 return Ok ( TonicResponse :: new ( ShowFunctionsResponse {
239- status_code : StatusCode :: InternalServerError as i32 ,
261+ status_code : status as i32 ,
240262 message : result. message ,
241263 functions : vec ! [ ] ,
242264 } ) ) ;
0 commit comments