-- Test sum(rate()) function combinations
CREATE TABLE metrics (
    ts TIMESTAMP TIME INDEX,
    val DOUBLE,
    host STRING,
    `service` STRING,
    PRIMARY KEY (host, service)
);

-- Insert test data with multiple time series
INSERT INTO metrics VALUES
    -- host1, service1
    (0, 10, 'host1', 'service1'),
    (60000, 20, 'host1', 'service1'),
    (120000, 30, 'host1', 'service1'),
    (180000, 40, 'host1', 'service1'),
    -- host1, service2
    (0, 5, 'host1', 'service2'),
    (60000, 15, 'host1', 'service2'),
    (120000, 25, 'host1', 'service2'),
    (180000, 35, 'host1', 'service2'),
    -- host2, service1
    (0, 8, 'host2', 'service1'),
    (60000, 18, 'host2', 'service1'),
    (120000, 28, 'host2', 'service1'),
    (180000, 38, 'host2', 'service1');

-- Test basic sum(rate()) - sum rate across all series
-- SQLNESS SORT_RESULT 2 1
TQL EVAL (0, 180, '60s') sum(rate(metrics[1m]));

-- Test sum(rate()) with grouping by host
-- SQLNESS SORT_RESULT 2 1
TQL EVAL (0, 180, '60s') sum by(host) (rate(metrics[1m]));

-- Test sum(rate()) with grouping by service
-- SQLNESS SORT_RESULT 2 1
TQL EVAL (0, 180, '60s') sum by(service) (rate(metrics[1m]));

-- Test sum(rate()) with label filtering
-- SQLNESS SORT_RESULT 2 1
TQL EVAL (0, 180, '60s') sum(rate(metrics{host="host1"}[1m]));

-- Test sum(rate()) with multiple label filters
-- SQLNESS SORT_RESULT 2 1
TQL EVAL (0, 180, '60s') sum(rate(metrics{host="host1", service="service1"}[1m]));

-- Test sum(rate()) with regex label matching
-- SQLNESS SORT_RESULT 2 1
TQL EVAL (0, 180, '60s') sum(rate(metrics{host=~"host.*"}[1m]));

-- Test sum(rate()) with different time ranges
-- SQLNESS SORT_RESULT 2 1
TQL EVAL (0, 180, '60s') sum(rate(metrics[30s]));

-- Test sum(rate()) with longer evaluation window
-- SQLNESS SORT_RESULT 2 1
TQL EVAL (0, 240, '60s') sum(rate(metrics[1m]));

-- Test sum(rate()) combined with arithmetic operations
-- SQLNESS SORT_RESULT 2 1
TQL EVAL (0, 180, '60s') sum(rate(metrics[1m])) * 100;

-- Test sum(rate()) with grouping and arithmetic
-- SQLNESS SORT_RESULT 2 1
TQL EVAL (0, 180, '60s') sum by(host) (rate(metrics[1m])) * 60;

-- Test querying non-existent table
TQL EVAL (0, 180, '60s') sum(rate(non_existent_table[1m]));

-- Test querying non-existent label
TQL EVAL (0, 180, '60s') sum(rate(metrics{non_existent_label="value"}[1m]));

-- Test querying non-existent label value
TQL EVAL (0, 180, '60s') sum(rate(metrics{host="non_existent_host"}[1m]));

-- Test querying multiple non-existent labels
TQL EVAL (0, 180, '60s') sum(rate(metrics{non_existent_label1="value1", non_existent_label2="value2"}[1m]));

-- Test querying mix of existing and non-existent labels
TQL EVAL (0, 180, '60s') sum(rate(metrics{host="host1", non_existent_label="value"}[1m]));

-- Test querying non-existent table with non-existent labels
TQL EVAL (0, 180, '60s') sum(rate(non_existent_table{non_existent_label="value"}[1m]));

-- Test querying non-existent table with multiple non-existent labels
TQL EVAL (0, 180, '60s') sum(rate(non_existent_table{label1="value1", label2="value2"}[1m]));

DROP TABLE metrics;
