package org.sql2o;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static junit.framework.TestCase.assertEquals;
public class ArrayParametersTest {
@Test
public void testUpdateParameterNamesToIndexes() {
assertEquals(
ImmutableMap.of("paramName", ImmutableList.of(3, 5)),
ArrayParameters.updateParameterNamesToIndexes(
Maps.newHashMap(ImmutableMap.of("paramName", (List<Integer>) ImmutableList.of(3, 5))),
ImmutableList.of(
new ArrayParameters.ArrayParameter(6, 3)
)
)
);
assertEquals(
ImmutableMap.of("paramName", ImmutableList.of(3, 9)),
ArrayParameters.updateParameterNamesToIndexes(
Maps.newHashMap(ImmutableMap.of("paramName", (List<Integer>) ImmutableList.of(3, 7))),
ImmutableList.of(
new ArrayParameters.ArrayParameter(6, 3)
)
)
);
}
@Test
public void testComputeNewIndex() {
assertEquals(
2,
ArrayParameters.computeNewIndex(
2,
ImmutableList.of(
new ArrayParameters.ArrayParameter(3, 5)
)
)
);
assertEquals(
3,
ArrayParameters.computeNewIndex(
3,
ImmutableList.of(
new ArrayParameters.ArrayParameter(3, 5)
)
)
);
assertEquals(
8,
ArrayParameters.computeNewIndex(
4,
ImmutableList.of(
new ArrayParameters.ArrayParameter(3, 5)
)
)
);
assertEquals(
9,
ArrayParameters.computeNewIndex(
4,
ImmutableList.of(
new ArrayParameters.ArrayParameter(1, 2),
new ArrayParameters.ArrayParameter(3, 5)
)
)
);
assertEquals(
9,
ArrayParameters.computeNewIndex(
4,
ImmutableList.of(
new ArrayParameters.ArrayParameter(1, 2),
new ArrayParameters.ArrayParameter(3, 5),
new ArrayParameters.ArrayParameter(4, 5)
)
)
);
assertEquals(
9,
ArrayParameters.computeNewIndex(
4,
ImmutableList.of(
new ArrayParameters.ArrayParameter(1, 2),
new ArrayParameters.ArrayParameter(3, 5),
new ArrayParameters.ArrayParameter(5, 5)
)
)
);
}
@Test
public void testUpdateQueryWithArrayParameters() {
assertEquals(
"SELECT * FROM user WHERE id IN(?,?,?,?,?)",
ArrayParameters.updateQueryWithArrayParameters(
"SELECT * FROM user WHERE id IN(?)",
ImmutableList.of(new ArrayParameters.ArrayParameter(1, 5))
)
);
assertEquals(
"SELECT * FROM user WHERE id IN(?)",
ArrayParameters.updateQueryWithArrayParameters(
"SELECT * FROM user WHERE id IN(?)",
new ArrayList<ArrayParameters.ArrayParameter>()
)
);
assertEquals(
"SELECT * FROM user WHERE id IN(?)",
ArrayParameters.updateQueryWithArrayParameters(
"SELECT * FROM user WHERE id IN(?)",
ImmutableList.of(new ArrayParameters.ArrayParameter(1, 0))
)
);
assertEquals(
"SELECT * FROM user WHERE id IN(?)",
ArrayParameters.updateQueryWithArrayParameters(
"SELECT * FROM user WHERE id IN(?)",
ImmutableList.of(new ArrayParameters.ArrayParameter(1, 1))
)
);
assertEquals(
"SELECT * FROM user WHERE login = ? AND id IN(?,?)",
ArrayParameters.updateQueryWithArrayParameters(
"SELECT * FROM user WHERE login = ? AND id IN(?)",
ImmutableList.of(new ArrayParameters.ArrayParameter(2, 2))
)
);
assertEquals(
"SELECT * FROM user WHERE login = ? AND id IN(?,?) AND name = ?",
ArrayParameters.updateQueryWithArrayParameters(
"SELECT * FROM user WHERE login = ? AND id IN(?) AND name = ?",
ImmutableList.of(new ArrayParameters.ArrayParameter(2, 2))
)
);
assertEquals(
"SELECT ... WHERE other_id IN (?,?,?) login = ? AND id IN(?,?,?) AND name = ?",
ArrayParameters.updateQueryWithArrayParameters(
"SELECT ... WHERE other_id IN (?) login = ? AND id IN(?) AND name = ?",
ImmutableList.of(
new ArrayParameters.ArrayParameter(1, 3),
new ArrayParameters.ArrayParameter(3, 3)
)
)
);
assertEquals(
"SELECT ... WHERE other_id IN (?,?,?,?,?) login = ? AND id IN(?,?,?) AND name = ?",
ArrayParameters.updateQueryWithArrayParameters(
"SELECT ... WHERE other_id IN (?) login = ? AND id IN(?) AND name = ?",
ImmutableList.of(
new ArrayParameters.ArrayParameter(1, 5),
new ArrayParameters.ArrayParameter(3, 3)
)
)
);
}
}