[Developer] #567 add VPD SQL execution evidence

This commit is contained in:
devmrko
2026-07-01 13:47:30 +09:00
parent 07c090f6b0
commit bf393bffa5
13 changed files with 398 additions and 11 deletions

View File

@@ -16,7 +16,9 @@ public record ProbeResult(
String responseHeaders,
String responseBody,
String vpdPredicate,
String effectiveSql
String effectiveSql,
SqlExecutionEvidence executionEvidence,
String executionEvidenceMessage
) {
public ProbeResult(
@@ -45,6 +47,42 @@ public record ProbeResult(
responseHeaders,
responseBody,
null,
null,
null,
null
);
}
public ProbeResult(
ProbeStatus status,
List<String> columns,
List<Map<String, Object>> rows,
int rowCount,
List<String> maskedColumns,
String errorCode,
String errorMessage,
String requestHeaders,
String requestPayload,
String responseHeaders,
String responseBody,
String vpdPredicate,
String effectiveSql
) {
this(
status,
columns,
rows,
rowCount,
maskedColumns,
errorCode,
errorMessage,
requestHeaders,
requestPayload,
responseHeaders,
responseBody,
vpdPredicate,
effectiveSql,
null,
null
);
}
@@ -99,7 +137,37 @@ public record ProbeResult(
responseHeaders,
responseBody,
predicate,
sql
sql,
executionEvidence,
executionEvidenceMessage
);
}
public boolean hasExecutionEvidence() {
return executionEvidence != null && executionEvidence.sqlId() != null
&& !executionEvidence.sqlId().isBlank();
}
public ProbeResult withExecutionEvidence(
SqlExecutionEvidence evidence,
String unavailableMessage
) {
return new ProbeResult(
status,
columns,
rows,
rowCount,
maskedColumns,
errorCode,
errorMessage,
requestHeaders,
requestPayload,
responseHeaders,
responseBody,
vpdPredicate,
effectiveSql,
evidence,
unavailableMessage
);
}

View File

@@ -0,0 +1,23 @@
package com.cloudhandson.vpdbackoffice.domain.probe;
/**
* Database shared-pool evidence for the statement most recently executed for
* a protected object. The SQL text is the statement submitted by ORDS before
* VPD rewrite; Oracle exposes the applied predicate through the cursor plan.
*/
public record SqlExecutionEvidence(
String sqlId,
int childNumber,
String originalSql,
String lastActiveAt,
long executions,
long rowsProcessed,
long elapsedMillis,
long bufferGets,
String predicatePlan
) {
public boolean hasPredicatePlan() {
return predicatePlan != null && !predicatePlan.isBlank();
}
}