/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.merger.resultset.memory;
import com.dangdang.ddframe.rdb.sharding.merger.fixture.MockResultSet;
import com.dangdang.ddframe.rdb.sharding.parser.result.merger.OrderByColumn;
import org.junit.Test;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNull.nullValue;
import static org.junit.Assert.assertThat;
public class MemoryOrderByResultSetTest {
@Test
public void assertSort() throws SQLException {
AbstractMemoryOrderByResultSet rs = new AbstractMemoryOrderByResultSet(Arrays.<ResultSet>asList(new MockResultSet<>(1, 3, 5, 6, 6), new MockResultSet<>(8, 6, 4, 2)),
Collections.singletonList(new OrderByColumn(1, OrderByColumn.OrderByType.ASC))) { };
List<Integer> actualList = new ArrayList<>();
while (rs.next()) {
actualList.add(rs.getInt(1));
}
assertThat(actualList, is(Arrays.asList(1, 2, 3, 4, 5, 6, 6, 6, 8)));
rs.close();
assertThat(rs.isClosed(), is(true));
rs = new AbstractMemoryOrderByResultSet(Arrays.<ResultSet>asList(new MockResultSet<>(1, 3, 5, 6, 6), new MockResultSet<>(8, 6, 4, 2)),
Collections.singletonList(new OrderByColumn(1, OrderByColumn.OrderByType.DESC))) { };
actualList.clear();
while (rs.next()) {
actualList.add(rs.getInt("nAmE"));
}
assertThat(actualList, is(Arrays.asList(8, 6, 6, 6, 5, 4, 3, 2, 1)));
}
@Test
public void assertSortMultiColumn() throws SQLException {
Map<String, Object> rs1 = new LinkedHashMap<>();
Calendar cal = Calendar.getInstance();
cal.set(2016, Calendar.JANUARY, 11);
rs1.put("name", "name");
rs1.put("time", cal.getTime());
rs1.put("id", 11);
Map<String, Object> rs2 = new LinkedHashMap<>();
cal.set(2016, Calendar.JANUARY, 9);
rs2.put("name", "dbc");
rs2.put("time", cal.getTime());
rs2.put("id", 12);
Map<String, Object> rs3 = new LinkedHashMap<>();
cal.set(2016, Calendar.JANUARY, 8);
rs3.put("name", "dbc");
rs3.put("time", cal.getTime());
rs3.put("id", 13);
OrderByColumn orderByColumn1 = new OrderByColumn("name", OrderByColumn.OrderByType.ASC);
orderByColumn1.setColumnIndex(1);
OrderByColumn orderByColumn2 = new OrderByColumn("time", OrderByColumn.OrderByType.DESC);
orderByColumn2.setColumnIndex(2);
AbstractMemoryOrderByResultSet rs = new AbstractMemoryOrderByResultSet(
Collections.<ResultSet>singletonList(new MockResultSet<>(Arrays.asList(rs1, rs2, rs3))), Arrays.asList(orderByColumn1, orderByColumn2)) { };
List<Map<String, Object>> actualList = new ArrayList<>();
while (rs.next()) {
Map<String, Object> map = new TreeMap<>();
map.put("name", rs.getObject("name"));
map.put("time", rs.getObject("time"));
map.put("id", rs.getObject("id"));
actualList.add(map);
}
assertThat(actualList, is(Arrays.asList(rs2, rs3, rs1)));
}
@Test
public void assertFindColumnSuccess() throws SQLException {
AbstractMemoryOrderByResultSet rs = new AbstractMemoryOrderByResultSet(Arrays.<ResultSet>asList(new MockResultSet<>(1, 3, 5, 6, 6), new MockResultSet<>(8, 6, 4, 2)),
Collections.singletonList(new OrderByColumn(1, OrderByColumn.OrderByType.ASC))) { };
assertThat(rs.findColumn("name"), is(1));
}
@Test(expected = SQLException.class)
public void assertFindColumnError() throws SQLException {
AbstractMemoryOrderByResultSet rs = new AbstractMemoryOrderByResultSet(Arrays.<ResultSet>asList(new MockResultSet<>(1, 3, 5, 6, 6), new MockResultSet<>(8, 6, 4, 2)),
Collections.singletonList(new OrderByColumn(1, OrderByColumn.OrderByType.ASC))) { };
rs.findColumn("unknown");
}
@Test
public void assertNullValue() throws SQLException {
Map<String, Object> rs1 = new TreeMap<>();
rs1.put("name", "name");
rs1.put("time", null);
AbstractMemoryOrderByResultSet rs = new AbstractMemoryOrderByResultSet(Collections.<ResultSet>singletonList(new MockResultSet<>(Collections.singletonList(rs1))),
Collections.singletonList(new OrderByColumn(1, OrderByColumn.OrderByType.ASC))) { };
assertThat(rs.next(), is(true));
assertThat(rs.getObject(2), nullValue());
assertThat(rs.wasNull(), is(true));
}
@Test
public void assertOthers() throws SQLException {
AbstractMemoryOrderByResultSet rs = new AbstractMemoryOrderByResultSet(Arrays.<ResultSet>asList(new MockResultSet<>(1, 3, 5, 6, 6), new MockResultSet<>(8, 6, 4, 2)),
Collections.singletonList(new OrderByColumn(1, OrderByColumn.OrderByType.ASC))) { };
assertThat(rs.next(), is(true));
assertThat(rs.getFetchDirection(), is(ResultSet.FETCH_FORWARD));
assertThat(rs.getFetchSize(), is(9));
assertThat(rs.getType(), is(ResultSet.TYPE_FORWARD_ONLY));
assertThat(rs.getConcurrency(), is(ResultSet.CONCUR_READ_ONLY));
rs.clearWarnings();
assertThat(rs.getWarnings(), nullValue());
assertThat(rs.getMetaData() instanceof MockResultSet.MockResultSetMetaData, is(true));
}
}