180 lines
3.8 KiB
SQL
180 lines
3.8 KiB
SQL
-- Leader Research Agent performance fixture and query plan helper.
|
|
-- Intended for a disposable local/test database after migrations have run.
|
|
-- It seeds at least 100 candidates, 10k activity events, and 10k paper trades,
|
|
-- then runs EXPLAIN on the hot list/detail paths.
|
|
|
|
SET @now_ms = UNIX_TIMESTAMP(CURRENT_TIMESTAMP(3)) * 1000;
|
|
|
|
WITH RECURSIVE seq(n) AS (
|
|
SELECT 1
|
|
UNION ALL
|
|
SELECT n + 1 FROM seq WHERE n < 10000
|
|
)
|
|
INSERT IGNORE INTO leader_research_candidate (
|
|
normalized_wallet,
|
|
research_state,
|
|
source,
|
|
score,
|
|
score_version,
|
|
agent_owned,
|
|
provenance,
|
|
first_seen_at,
|
|
last_source_seen_at,
|
|
last_transition_at,
|
|
created_at,
|
|
updated_at
|
|
)
|
|
SELECT
|
|
CONCAT('0x', LPAD(HEX(n), 40, '0')),
|
|
CASE WHEN n % 5 = 0 THEN 'TRIAL_READY' WHEN n % 3 = 0 THEN 'PAPER' ELSE 'CANDIDATE' END,
|
|
'PERF_FIXTURE',
|
|
60 + (n % 40),
|
|
'research-copyability-v1',
|
|
1,
|
|
'AGENT_CREATED',
|
|
@now_ms - 3600000,
|
|
@now_ms - 60000,
|
|
@now_ms - 60000,
|
|
@now_ms,
|
|
@now_ms
|
|
FROM seq
|
|
WHERE n <= 100;
|
|
|
|
WITH RECURSIVE seq(n) AS (
|
|
SELECT 1
|
|
UNION ALL
|
|
SELECT n + 1 FROM seq WHERE n < 10000
|
|
)
|
|
INSERT IGNORE INTO leader_activity_event (
|
|
source,
|
|
source_event_id,
|
|
stable_event_key,
|
|
normalized_wallet,
|
|
market_id,
|
|
asset,
|
|
side,
|
|
price,
|
|
size,
|
|
amount,
|
|
event_time,
|
|
raw_payload_hash,
|
|
payload_summary,
|
|
usable_for_discovery,
|
|
usable_for_paper,
|
|
paper_processing_status,
|
|
processing_attempts,
|
|
created_at,
|
|
updated_at
|
|
)
|
|
SELECT
|
|
'PERF_FIXTURE',
|
|
CONCAT('perf-event-', n),
|
|
CONCAT('perf-event-', n),
|
|
CONCAT('0x', LPAD(HEX(1 + (n % 100)), 40, '0')),
|
|
CONCAT('condition-', n % 200),
|
|
CONCAT('asset-', n % 200),
|
|
IF(n % 2 = 0, 'BUY', 'SELL'),
|
|
0.45,
|
|
10,
|
|
4.5,
|
|
@now_ms - (n * 1000),
|
|
SHA2(CONCAT('perf-event-', n), 256),
|
|
CONCAT('perf event ', n),
|
|
1,
|
|
1,
|
|
'NEW',
|
|
0,
|
|
@now_ms,
|
|
@now_ms
|
|
FROM seq;
|
|
|
|
WITH RECURSIVE seq(n) AS (
|
|
SELECT 1
|
|
UNION ALL
|
|
SELECT n + 1 FROM seq WHERE n < 10000
|
|
)
|
|
INSERT IGNORE INTO leader_paper_session (
|
|
id,
|
|
candidate_id,
|
|
status,
|
|
started_at,
|
|
trade_count,
|
|
filtered_count,
|
|
open_exposure,
|
|
copyable_pnl,
|
|
max_drawdown,
|
|
unknown_valuation_exposure,
|
|
confirmed_zero_exposure,
|
|
filtered_ratio,
|
|
created_at,
|
|
updated_at
|
|
)
|
|
SELECT
|
|
n,
|
|
1 + (n % 100),
|
|
'ACTIVE',
|
|
@now_ms - 604800000,
|
|
100,
|
|
5,
|
|
100,
|
|
10,
|
|
-3,
|
|
5,
|
|
0,
|
|
0.0476,
|
|
@now_ms,
|
|
@now_ms
|
|
FROM seq
|
|
WHERE n <= 100;
|
|
|
|
WITH RECURSIVE seq(n) AS (
|
|
SELECT 1
|
|
UNION ALL
|
|
SELECT n + 1 FROM seq WHERE n < 10000
|
|
)
|
|
INSERT IGNORE INTO leader_paper_trade (
|
|
session_id,
|
|
candidate_id,
|
|
leader_trade_id,
|
|
market_id,
|
|
side,
|
|
leader_price,
|
|
leader_size,
|
|
simulated_price,
|
|
simulated_size,
|
|
simulated_amount,
|
|
fill_assumption,
|
|
quote_confidence,
|
|
quote_source,
|
|
quote_timestamp,
|
|
filter_result,
|
|
valuation_status,
|
|
event_time,
|
|
created_at
|
|
)
|
|
SELECT
|
|
1 + (n % 100),
|
|
1 + (n % 100),
|
|
CONCAT('perf-trade-', n),
|
|
CONCAT('condition-', n % 200),
|
|
IF(n % 2 = 0, 'BUY', 'SELL'),
|
|
0.45,
|
|
10,
|
|
0.45,
|
|
2,
|
|
1,
|
|
'LEADER_PRICE',
|
|
'MEDIUM',
|
|
'perf',
|
|
@now_ms,
|
|
'PASSED',
|
|
IF(n % 20 = 0, 'UNKNOWN', 'AVAILABLE'),
|
|
@now_ms - (n * 1000),
|
|
@now_ms
|
|
FROM seq;
|
|
|
|
EXPLAIN SELECT * FROM leader_research_candidate WHERE research_state IN ('PAPER', 'TRIAL_READY') ORDER BY updated_at DESC LIMIT 50;
|
|
EXPLAIN SELECT * FROM leader_activity_event WHERE paper_processing_status IN ('NEW', 'RETRYABLE') AND usable_for_paper = 1 ORDER BY event_time ASC LIMIT 200;
|
|
EXPLAIN SELECT * FROM leader_paper_trade WHERE session_id = 1 ORDER BY event_time DESC LIMIT 100;
|
|
EXPLAIN SELECT * FROM leader_research_event ORDER BY created_at DESC LIMIT 100;
|