agent_first_psql/
protocol.rs1pub mod error_code {
2 pub const CANCELLED: &str = "cancelled";
3 pub const CONNECT_FAILED: &str = "connect_failed";
4 pub const INTERNAL_ERROR: &str = "internal_error";
5 pub const INVALID_PARAMS: &str = "invalid_params";
6 pub const INVALID_REQUEST: &str = "invalid_request";
7}
8
9pub mod log_event {
10 pub const CONNECT_LIBPQ_ENV_FALLBACK: &str = "connect.libpq_env_fallback";
11 pub const MODE_PERMISSION_DEFAULT_CHANGED: &str = "mode.permission_default_changed";
12 pub const QUERY_ERROR: &str = "query.error";
13 pub const QUERY_ROW_ENCODING_DEGRADED: &str = "query.row_encoding_degraded";
14 pub const QUERY_RESULT: &str = "query.result";
15 pub const QUERY_SQL_ERROR: &str = "query.sql_error";
16 pub const STARTUP: &str = "startup";
17 pub const TRANSPORT_SELECTED: &str = "transport.selected";
18}
19
20pub mod command_tag {
21 pub const EXECUTE: &str = "EXECUTE";
22 pub const SELECT: &str = "SELECT";
23 pub const BEGIN: &str = "BEGIN";
24 pub const COMMIT: &str = "COMMIT";
25 pub const ROLLBACK: &str = "ROLLBACK";
26
27 pub fn execute(affected: usize) -> String {
28 format!("EXECUTE {affected}")
29 }
30
31 pub fn rows(row_count: usize) -> String {
32 format!("ROWS {row_count}")
33 }
34}
35
36pub fn sqlstate_retryable(sqlstate: &str) -> bool {
37 matches!(sqlstate, "40001" | "40P01" | "57014")
38}
39
40#[cfg(test)]
41mod tests {
42 use super::sqlstate_retryable;
43
44 #[test]
45 fn retryable_sqlstates_cover_serialization_deadlock_and_cancel() {
46 for sqlstate in ["40001", "40P01", "57014"] {
47 assert!(sqlstate_retryable(sqlstate), "{sqlstate}");
48 }
49 for sqlstate in ["23505", "42501", "42601"] {
50 assert!(!sqlstate_retryable(sqlstate), "{sqlstate}");
51 }
52 }
53}
54
55