// Path: src/main/java/com/pgasync/Row.java
// public interface Row {
// 
//     String getString(int index);
// 
//     String getString(String column);
// 
//     Byte getByte(int index);
// 
//     Byte getByte(String column);
// 
//     Character getChar(int index);
// 
//     Character getChar(String column);
// 
//     Short getShort(int index);
// 
//     Short getShort(String column);
// 
//     Integer getInt(int index);
// 
//     Integer getInt(String column);
// 
//     Long getLong(int index);
// 
//     Long getLong(String column);
// 
//     BigInteger getBigInteger(int index);
// 
//     BigInteger getBigInteger(String column);
// 
//     BigDecimal getBigDecimal(int index);
// 
//     BigDecimal getBigDecimal(String column);
// 
//     Double getDouble(int index);
// 
//     Double getDouble(String column);
// 
//     Date getDate(int index);
// 
//     Date getDate(String column);
// 
//     Time getTime(int index);
// 
//     Time getTime(String column);
// 
//     Timestamp getTimestamp(int index);
// 
//     Timestamp getTimestamp(String column);
// 
//     byte[] getBytes(int index);
// 
//     byte[] getBytes(String column);
// 
//     Boolean getBoolean(int index);
// 
//     Boolean getBoolean(String column);
// 
//     <T> T get(int index, Class<T> type);
// 
//     <T> T get(String column, Class<T> type);
// 
//     <TArray> TArray getArray(String column, Class<TArray> arrayType);
// 
//     <TArray> TArray getArray(int index, Class<TArray> arrayType);
// 
// }


import com.pgasync.Row;
import org.junit.*;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;

    @Test
    public void shouldRoundTripTimestamp() {
        List<Timestamp[]> params = new ArrayList<>(1);
        params.add(new Timestamp[]{new Timestamp(12345679), new Timestamp(12345678)});
        dbr.query("INSERT INTO CA_TEST (TIMESTAMPA) VALUES ($1)", params);
        Row row = dbr.query("SELECT TIMESTAMPA FROM CA_TEST WHERE TIMESTAMPA = $1", params).at(0);
        assertArrayEquals(params.get(0), row.getArray(0, Timestamp[].class));
    }

    @Test(expected = IllegalArgumentException.class)
    public void shouldNotAllowPrimitiveArrays() {
        dbr.query("INSERT INTO CA_TEST (LONGA) VALUES ('{-1, null, 1, 2, 3}')");
        getRow().getArray("longa", long[].class);
    }

    @Test
    public void shouldAllowPrimitiveArrayParameters() {
        long[] input = {1L, 2L, 3L};
        dbr.query("INSERT INTO CA_TEST (LONGA) VALUES ($1)", List.of(input));
        Long[] output = getRow().getArray("longa", Long[].class);
        for (int i = 0; i < input.length; i++) {
            assertEquals(input[i], output[i].longValue());
        }
    }

    @Test
    public void shouldParseUnquotedStringsCorrectly() {
        String[] values = new String[]{"NotNull", "NULLA", "string", null};
        dbr.query("INSERT INTO CA_TEST (TEXTA) VALUES($1)", Collections.singletonList(values));
// Path: src/main/java/com/pgasync/Row.java
// public interface Row {
// 
//     String getString(int index);
// 
//     String getString(String column);
// 
//     Byte getByte(int index);
// 
//     Byte getByte(String column);
// 
//     Character getChar(int index);
// 
//     Character getChar(String column);
// 
//     Short getShort(int index);
// 
//     Short getShort(String column);
// 
//     Integer getInt(int index);
// 
//     Integer getInt(String column);
// 
//     Long getLong(int index);
// 
//     Long getLong(String column);
// 
//     BigInteger getBigInteger(int index);
// 
//     BigInteger getBigInteger(String column);
// 
//     BigDecimal getBigDecimal(int index);
// 
//     BigDecimal getBigDecimal(String column);
// 
//     Double getDouble(int index);
// 
//     Double getDouble(String column);
// 
//     Date getDate(int index);
// 
//     Date getDate(String column);
// 
//     Time getTime(int index);
// 
//     Time getTime(String column);
// 
//     Timestamp getTimestamp(int index);
// 
//     Timestamp getTimestamp(String column);
// 
//     byte[] getBytes(int index);
// 
//     byte[] getBytes(String column);
// 
//     Boolean getBoolean(int index);
// 
//     Boolean getBoolean(String column);
// 
//     <T> T get(int index, Class<T> type);
// 
//     <T> T get(String column, Class<T> type);
// 
//     <TArray> TArray getArray(String column, Class<TArray> arrayType);
// 
//     <TArray> TArray getArray(int index, Class<TArray> arrayType);
// 
// }


// Path: src/test/java/com/github/pgasync/ArrayConversionsTest.java
import com.pgasync.Row;
import org.junit.*;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;


    @Test
    public void shouldRoundTripTimestamp() {
        List<Timestamp[]> params = new ArrayList<>(1);
        params.add(new Timestamp[]{new Timestamp(12345679), new Timestamp(12345678)});
        dbr.query("INSERT INTO CA_TEST (TIMESTAMPA) VALUES ($1)", params);
        Row row = dbr.query("SELECT TIMESTAMPA FROM CA_TEST WHERE TIMESTAMPA = $1", params).at(0);
        assertArrayEquals(params.get(0), row.getArray(0, Timestamp[].class));
    }

    @Test(expected = IllegalArgumentException.class)
    public void shouldNotAllowPrimitiveArrays() {
        dbr.query("INSERT INTO CA_TEST (LONGA) VALUES ('{-1, null, 1, 2, 3}')");
        getRow().getArray("longa", long[].class);
    }

    @Test
    public void shouldAllowPrimitiveArrayParameters() {
        long[] input = {1L, 2L, 3L};
        dbr.query("INSERT INTO CA_TEST (LONGA) VALUES ($1)", List.of(input));
        Long[] output = getRow().getArray("longa", Long[].class);
        for (int i = 0; i < input.length; i++) {
            assertEquals(input[i], output[i].longValue());
        }
    }

    @Test
    public void shouldParseUnquotedStringsCorrectly() {
        String[] values = new String[]{"NotNull", "NULLA", "string", null};
        dbr.query("INSERT INTO CA_TEST (TEXTA) VALUES($1)", Collections.singletonList(values));
        Row row = dbr.query("SELECT * FROM CA_TEST").at(0);