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) ) ) ); } }