feat(oceanbase-oracle): split execution time from client wait
This commit is contained in:
1 parent
1294708eea
commit
33afb0b432
58 files changed
+843
-11
No files matched your search
@@ -429,6 +429,10 @@ pub struct QueryResult {
|
||||
pub rows: Vec<Vec<serde_json::Value>>,
|
||||
pub affected_rows: u64,
|
||||
pub execution_time_ms: u128,
|
||||
/// OceanBase SQL Audit EXECUTE_TIME in microseconds. Absent when the
|
||||
/// completed statement cannot be correlated to one audit row.
|
||||
#[serde(default)]
|
||||
pub server_execute_time_us: Option<u64>,
|
||||
#[serde(default)]
|
||||
pub truncated: bool,
|
||||
#[serde(default)]
|
||||
@@ -469,6 +473,7 @@ impl Serialize for QueryResult {
|
||||
+ usize::from(!self.spatial_columns.is_empty())
|
||||
+ usize::from(!self.spatial_values.is_empty())
|
||||
+ usize::from(self.elasticsearch_raw_body.is_some())
|
||||
+ usize::from(self.server_execute_time_us.is_some())
|
||||
+ usize::from(!self.messages.is_empty());
|
||||
let mut state = serializer.serialize_struct("QueryResult", field_count)?;
|
||||
state.serialize_field("columns", &self.columns)?;
|
||||
@@ -483,6 +488,9 @@ impl Serialize for QueryResult {
|
||||
state.serialize_field("rows", &JsSafeRows(&self.rows))?;
|
||||
state.serialize_field("affected_rows", &self.affected_rows)?;
|
||||
state.serialize_field("execution_time_ms", &self.execution_time_ms)?;
|
||||
if let Some(server_execute_time_us) = &self.server_execute_time_us {
|
||||
state.serialize_field("server_execute_time_us", server_execute_time_us)?;
|
||||
}
|
||||
state.serialize_field("truncated", &self.truncated)?;
|
||||
state.serialize_field("session_id", &self.session_id)?;
|
||||
state.serialize_field("has_more", &self.has_more)?;
|
||||
@@ -1100,6 +1108,7 @@ mod tests {
|
||||
]],
|
||||
affected_rows: 0,
|
||||
execution_time_ms: 0,
|
||||
server_execute_time_us: None,
|
||||
truncated: false,
|
||||
session_id: None,
|
||||
has_more: false,
|
||||
@@ -1206,6 +1215,19 @@ mod tests {
|
||||
assert_eq!(serialized["session_id"], serde_json::Value::Null);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn query_result_server_execution_microseconds_survive_agent_and_ui_wire() {
|
||||
let mut result = bigint_result_sample();
|
||||
let without_audit = serde_json::to_value(&result).unwrap();
|
||||
assert!(without_audit.get("server_execute_time_us").is_none());
|
||||
assert_eq!(serde_json::from_value::<super::QueryResult>(without_audit).unwrap().server_execute_time_us, None);
|
||||
|
||||
result.server_execute_time_us = Some(370);
|
||||
let audited = serde_json::to_value(&result).unwrap();
|
||||
assert_eq!(audited["server_execute_time_us"], 370);
|
||||
assert_eq!(serde_json::from_value::<super::QueryResult>(audited).unwrap().server_execute_time_us, Some(370));
|
||||
}
|
||||
|
||||
/// Numeric cells nested inside JSON-typed columns must not lose precision
|
||||
/// either, matching `db::json_value_for_js` recursion.
|
||||
#[test]
|
||||
|
||||
Reference in new issue
Block a user