package com.google.sitebricks.persist.sql; import com.google.common.collect.ImmutableMap; import org.testng.annotations.Test; import java.util.Map; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; /** * @author dhanji@gmail.com (Dhanji R. Prasanna) */ public class SqlNamedParameterBindingTest { @Test public final void testNamedParameterBinding() { String sql = "select * from blah where name = @name and age = @name or age = @age -- stuff"; Map<String, Object> map = ImmutableMap.<String, Object>of( "name", "Dhanji", "age", 32 ); Map<Integer, Object> positionalParams = Sql.toPositionalMap(map, Sql.NAMED_ARG_PATTERN .matcher(sql)); assertEquals(positionalParams.get(1), "Dhanji"); assertEquals(positionalParams.get(2), "Dhanji"); assertEquals(positionalParams.get(3), 32); } @Test public final void testNamedParameterBindingFailsOnMissingParams() { String sql = "select * from blah where name = @name and age = @name or age = @age or @blah -- stuff"; Map<String, Object> map = ImmutableMap.<String, Object>of( "name", "Dhanji", "age", 32 ); try { Map<Integer, Object> positionalParams = Sql.toPositionalMap(map, Sql.NAMED_ARG_PATTERN .matcher(sql)); fail(); } catch (IllegalArgumentException e) { assertTrue(e.getMessage().contains("@blah")); } } }