-- This file contains tests for the event_time_microseconds field for various tables.
-- Note: Only event_time_microseconds for asynchronous_metric_log table is tested via
-- an integration test as those metrics take 60s by default to be updated.
-- Refer: tests/integration/test_asynchronous_metric_log_table.

SET log_queries = 1;

SELECT '01473_metric_log_table_event_start_time_microseconds_test';
SYSTEM FLUSH LOGS;
-- query assumes that the event_time field is accurate.
WITH (
    (
        SELECT event_time_microseconds
        FROM system.metric_log
        ORDER BY event_time DESC
        LIMIT 1
    ) AS time_with_microseconds,
    (
        SELECT event_time
        FROM system.metric_log
        ORDER BY event_time DESC
        LIMIT 1
    ) AS time)
SELECT if(dateDiff('second', toDateTime(time_with_microseconds), toDateTime(time)) = 0, 'ok', 'fail');

SELECT '01473_trace_log_table_event_start_time_microseconds_test';
SET log_queries = 1;
SET query_profiler_real_time_period_ns = 10000000;
SET query_profiler_cpu_time_period_ns = 10000000;
-- a long enough query to trigger the query profiler and to record trace log
SELECT count() FROM numbers(1000000000) FORMAT Null;
SELECT sleep(2) FORMAT Null;
SYSTEM FLUSH LOGS;
SELECT sleep(2) FORMAT Null;
WITH (
      (
          SELECT event_time_microseconds
          FROM system.trace_log
          ORDER BY event_time DESC
          LIMIT 1
      ) AS time_with_microseconds,
      (
          SELECT event_time
          FROM system.trace_log
          ORDER BY event_time DESC
          LIMIT 1
      ) AS t)
SELECT if(dateDiff('second', toDateTime(time_with_microseconds), toDateTime(t)) = 0, 'ok', 'fail'); -- success

SELECT '01473_query_log_table_event_start_time_microseconds_test';
SYSTEM FLUSH LOGS;
WITH (
    (
        SELECT event_time_microseconds
        FROM system.query_log
        ORDER BY event_time DESC
        LIMIT 1
    ) AS time_with_microseconds,
    (
        SELECT event_time
        FROM system.query_log
        ORDER BY event_time DESC
        LIMIT 1
    ) AS time)
SELECT if(dateDiff('second', toDateTime(time_with_microseconds), toDateTime(time)) = 0, 'ok', 'fail'); -- success

SELECT '01473_query_thread_log_table_event_start_time_microseconds_test';
SYSTEM FLUSH LOGS;
WITH (
    (
        SELECT event_time_microseconds
        FROM system.query_thread_log
        ORDER BY event_time DESC
        LIMIT 1
    ) AS time_with_microseconds,
    (
        SELECT event_time
        FROM system.query_thread_log
        ORDER BY event_time DESC
        LIMIT 1
    ) AS time)
SELECT if(dateDiff('second', toDateTime(time_with_microseconds), toDateTime(time)) = 0, 'ok', 'fail'); -- success
