-- Test compressed CSV import functionality
-- First, create and export data with different compression types
CREATE TABLE test_csv_export(
    `id` UINT32,
    `name` STRING,
    `value` DOUBLE,
    ts TIMESTAMP TIME INDEX
);

Affected Rows: 0

-- Insert test data
INSERT INTO test_csv_export(`id`, `name`, `value`, ts) VALUES 
    (1, 'Alice', 10.5, 1640995200000),
    (2, 'Bob', 20.3, 1640995260000),
    (3, 'Charlie', 30.7, 1640995320000),
    (4, 'David', 40.1, 1640995380000),
    (5, 'Eve', 50.9, 1640995440000);

Affected Rows: 5

-- Export with different compression types
COPY test_csv_export TO '${SQLNESS_HOME}/import/test_csv_uncompressed.csv' WITH (format='csv');

Affected Rows: 5

COPY test_csv_export TO '${SQLNESS_HOME}/import/test_csv_gzip.csv.gz' WITH (format='csv', compression_type='gzip');

Affected Rows: 5

COPY test_csv_export TO '${SQLNESS_HOME}/import/test_csv_zstd.csv.zst' WITH (format='csv', compression_type='zstd');

Affected Rows: 5

COPY test_csv_export TO '${SQLNESS_HOME}/import/test_csv_bzip2.csv.bz2' WITH (format='csv', compression_type='bzip2');

Affected Rows: 5

COPY test_csv_export TO '${SQLNESS_HOME}/import/test_csv_xz.csv.xz' WITH (format='csv', compression_type='xz');

Affected Rows: 5

-- Test importing uncompressed CSV
CREATE TABLE test_csv_import_uncompressed(
    `id` UINT32,
    `name` STRING,
    `value` DOUBLE,
    ts TIMESTAMP TIME INDEX
);

Affected Rows: 0

COPY test_csv_import_uncompressed FROM '${SQLNESS_HOME}/import/test_csv_uncompressed.csv' WITH (format='csv');

Affected Rows: 5

SELECT COUNT(*) as uncompressed_count FROM test_csv_import_uncompressed;

+--------------------+
| uncompressed_count |
+--------------------+
| 5                  |
+--------------------+

-- Test importing GZIP compressed CSV
CREATE TABLE test_csv_import_gzip(
    `id` UINT32,
    `name` STRING,
    `value` DOUBLE,
    ts TIMESTAMP TIME INDEX
);

Affected Rows: 0

COPY test_csv_import_gzip FROM '${SQLNESS_HOME}/import/test_csv_gzip.csv.gz' WITH (format='csv', compression_type='gzip');

Affected Rows: 5

SELECT COUNT(*) as gzip_count FROM test_csv_import_gzip;

+------------+
| gzip_count |
+------------+
| 5          |
+------------+

SELECT `id`, `name`, `value` FROM test_csv_import_gzip WHERE `id` = 1;

+----+-------+-------+
| id | name  | value |
+----+-------+-------+
| 1  | Alice | 10.5  |
+----+-------+-------+

-- Test importing ZSTD compressed CSV
CREATE TABLE test_csv_import_zstd(
    `id` UINT32,
    `name` STRING,
    `value` DOUBLE,
    ts TIMESTAMP TIME INDEX
);

Affected Rows: 0

COPY test_csv_import_zstd FROM '${SQLNESS_HOME}/import/test_csv_zstd.csv.zst' WITH (format='csv', compression_type='zstd');

Affected Rows: 5

SELECT COUNT(*) as zstd_count FROM test_csv_import_zstd;

+------------+
| zstd_count |
+------------+
| 5          |
+------------+

SELECT `id`, `name`, `value` FROM test_csv_import_zstd WHERE `id` = 2;

+----+------+-------+
| id | name | value |
+----+------+-------+
| 2  | Bob  | 20.3  |
+----+------+-------+

-- Test importing BZIP2 compressed CSV
CREATE TABLE test_csv_import_bzip2(
    `id` UINT32,
    `name` STRING,
    `value` DOUBLE,
    ts TIMESTAMP TIME INDEX
);

Affected Rows: 0

COPY test_csv_import_bzip2 FROM '${SQLNESS_HOME}/import/test_csv_bzip2.csv.bz2' WITH (format='csv', compression_type='bzip2');

Affected Rows: 5

SELECT COUNT(*) as bzip2_count FROM test_csv_import_bzip2;

+-------------+
| bzip2_count |
+-------------+
| 5           |
+-------------+

SELECT `id`, `name`, `value` FROM test_csv_import_bzip2 WHERE `id` = 3;

+----+---------+-------+
| id | name    | value |
+----+---------+-------+
| 3  | Charlie | 30.7  |
+----+---------+-------+

-- Test importing XZ compressed CSV
CREATE TABLE test_csv_import_xz(
    `id` UINT32,
    `name` STRING,
    `value` DOUBLE,
    ts TIMESTAMP TIME INDEX
);

Affected Rows: 0

COPY test_csv_import_xz FROM '${SQLNESS_HOME}/import/test_csv_xz.csv.xz' WITH (format='csv', compression_type='xz');

Affected Rows: 5

SELECT COUNT(*) as xz_count FROM test_csv_import_xz;

+----------+
| xz_count |
+----------+
| 5        |
+----------+

SELECT `id`, `name`, `value` FROM test_csv_import_xz WHERE `id` = 4;

+----+-------+-------+
| id | name  | value |
+----+-------+-------+
| 4  | David | 40.1  |
+----+-------+-------+

-- Verify data integrity by comparing all imported tables
SELECT source, count FROM (
    SELECT 'uncompressed' as source, COUNT(*) as count, 1 as order_key FROM test_csv_import_uncompressed
    UNION ALL
    SELECT 'gzip', COUNT(*) as count, 2 as order_key FROM test_csv_import_gzip
    UNION ALL
    SELECT 'zstd', COUNT(*) as count, 3 as order_key FROM test_csv_import_zstd
    UNION ALL
    SELECT 'bzip2', COUNT(*) as count, 4 as order_key FROM test_csv_import_bzip2
    UNION ALL
    SELECT 'xz', COUNT(*) as count, 5 as order_key FROM test_csv_import_xz
) AS subquery
ORDER BY order_key;

+--------------+-------+
| source       | count |
+--------------+-------+
| uncompressed | 5     |
| gzip         | 5     |
| zstd         | 5     |
| bzip2        | 5     |
| xz           | 5     |
+--------------+-------+

-- Clean up
DROP TABLE test_csv_export;

Affected Rows: 0

DROP TABLE test_csv_import_uncompressed;

Affected Rows: 0

DROP TABLE test_csv_import_gzip;

Affected Rows: 0

DROP TABLE test_csv_import_zstd;

Affected Rows: 0

DROP TABLE test_csv_import_bzip2;

Affected Rows: 0

DROP TABLE test_csv_import_xz;

Affected Rows: 0

