
@testset "Test big list" begin
    con = DBInterface.connect(DuckDB.DB)

    DBInterface.execute(con, "CREATE TABLE list_table (int_list INT[]);")
    DBInterface.execute(con, "INSERT INTO list_table VALUES (range(2049));")
    df = DataFrame(DBInterface.execute(con, "SELECT * FROM list_table;"))
    @test length(df[1, :int_list]) == 2049

    DBInterface.close!(con)
end

@testset "Test big bitstring" begin
    con = DBInterface.connect(DuckDB.DB)

    DBInterface.execute(con, "CREATE TABLE bit_table (bits BIT);")
    # 131073 = 64 * 2048 + 1
    DBInterface.execute(con, "INSERT INTO bit_table VALUES (bitstring('1010', 131073));")
    df = DataFrame(DBInterface.execute(con, "SELECT * FROM bit_table;"))
    # Currently mapped to Julia in an odd way.
    # Can reenable following https://github.com/duckdb/duckdb/issues/7065
    @test length(df[1, :bits]) == 131073 skip = true

    DBInterface.close!(con)
end

@testset "Test big string" begin
    con = DBInterface.connect(DuckDB.DB)

    DBInterface.execute(con, "CREATE TABLE str_table (str VARCHAR);")
    DBInterface.execute(con, "INSERT INTO str_table VALUES (repeat('🦆', 1024) || '🪿');")
    df = DataFrame(DBInterface.execute(con, "SELECT * FROM str_table;"))
    @test length(df[1, :str]) == 1025

    DBInterface.close!(con)
end

@testset "Test big map" begin
    con = DBInterface.connect(DuckDB.DB)

    DBInterface.execute(con, "CREATE TABLE map_table (map MAP(VARCHAR, INT));")
    DBInterface.execute(
        con,
        "INSERT INTO map_table VALUES (map_from_entries([{'k': 'billy' || num, 'v': num} for num in range(2049)]));"
    )
    df = DataFrame(DBInterface.execute(con, "SELECT * FROM map_table;"))
    @test length(df[1, :map]) == 2049

    DBInterface.close!(con)
end

@testset "Test big struct" begin
    con = DBInterface.connect(DuckDB.DB)

    DBInterface.execute(con, "CREATE TABLE struct_table (stct STRUCT(a INT[], b INT[]));")
    DBInterface.execute(con, "INSERT INTO struct_table VALUES ({'a': range(1024), 'b': range(1025)});")
    df = DataFrame(DBInterface.execute(con, "SELECT * FROM struct_table;"))
    s = df[1, :stct]
    @test length(s.a) == 1024
    @test length(s.b) == 1025

    DBInterface.close!(con)
end

@testset "Test big union" begin
    con = DBInterface.connect(DuckDB.DB)

    DBInterface.execute(con, "CREATE TABLE union_table (uni UNION(a INT[], b INT));")
    DBInterface.execute(con, "INSERT INTO union_table (uni) VALUES (union_value(a := range(2049))), (42);")
    df = DataFrame(DBInterface.execute(con, "SELECT * FROM union_table;"))
    @test length(df[1, :uni]) == 2049

    DBInterface.close!(con)
end
