/* * Copyright 2010, Andrew M Gibson * * www.andygibson.net * * This file is part of DataValve. * * DataValve is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * DataValve is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * * You should have received a copy of the GNU Lesser General Public License * along with DataValve. If not, see <http://www.gnu.org/licenses/>. * */ package org.fluttercode.datavalve.provider.jdbc; import java.sql.ResultSet; import java.sql.SQLException; import org.fluttercode.datavalve.dataset.ObjectDataset; import org.fluttercode.datavalve.dataset.QueryDataset; import org.fluttercode.datavalve.provider.QueryDataProvider; import org.fluttercode.datavalve.provider.jdbc.AbstractJdbcDataProvider; /** * @author Andy Gibson * */ public class SqlQueryDatasetTest extends BaseJdbcDatasetTest<Person> { private static final long serialVersionUID = 1L; private QueryDataset<Person> dataset; @Override public ObjectDataset<Person> buildObjectDataset() { return dataset; } @Override protected void setUp() throws Exception { super.setUp(); dataset = createDataset(); } protected QueryDataset<Person> createDataset() { QueryDataProvider<Person> provider = new AbstractJdbcDataProvider<Person>( getConnection()) { private static final long serialVersionUID = 1L; @Override public Person createObjectFromResultSet(ResultSet resultSet) throws SQLException { return new Person(resultSet.getLong(1), resultSet.getString(2), resultSet.getString(3)); } }; provider.setSelectStatement("select * from persons"); provider.setCountStatement("select count(1) from persons"); provider.getOrderKeyMap().put("id", "id"); provider.getOrderKeyMap().put("name", "last_name,first_name"); return new QueryDataset<Person>(provider); } public void testParameterQuery() { dataset.getProvider().getRestrictions().add("FIRST_NAME like 'A%'"); int count = 0; for (Person p : dataset) { assertTrue(p.getFirstName().startsWith("A")); count++; } assertEquals(count, dataset.getResultCount().intValue()); } public void testParameterQueryWithValue() { dataset.getProvider().getRestrictions().add("FIRST_NAME like :param"); dataset.getProvider().getParameters().put("param", "S%"); int count = 0; for (Person p : dataset) { assertTrue(p.getFirstName().startsWith("S")); count++; } assertEquals(count, dataset.getResultCount().intValue()); } public void testParameterQueryWithValueReRead() { dataset.getProvider().getRestrictions().add("FIRST_NAME like :param"); dataset.getProvider().getParameters().put("param", "M%"); for (Person p : dataset) { assertTrue(p.getFirstName().startsWith("M")); } dataset.getProvider().getParameters().put("param", "T%"); dataset.refresh(); for (Person p : dataset) { assertTrue(p.getFirstName().startsWith("T")); } } public void testParameterQueryWithNoValue() { dataset.getProvider().getRestrictions().add("FIRST_NAME like :param"); assertEquals(getDataRowCount(), dataset.getResultCount().intValue()); int count = dataset.getResultCount(); assertEquals(getDataRowCount(), count); } public void testParameterizedQueryCount() { dataset.getProvider().getRestrictions().add("FIRST_NAME like :param"); dataset.getProvider().getParameters().put("param", "%"); assertEquals(getDataRowCount(), dataset.getResultCount().intValue()); } public void testOrdering() { dataset.setOrderKey("name"); String last = null; String test = null; for (Person person : dataset) { test = person.getLastName() + " " + person.getFirstName(); if (last != null) { assertTrue(last.compareTo(test) < 0); } last = test; } } }