/*
* Copyright (C) 2011-2016 Markus Junginger, greenrobot (http://greenrobot.org)
*
* This file is part of greenDAO Generator.
*
* greenDAO Generator is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* greenDAO Generator 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with greenDAO Generator. If not, see <http://www.gnu.org/licenses/>.
*/
package org.greenrobot.greendao.daotest.query;
import org.greenrobot.greendao.daotest.TestEntity;
import org.greenrobot.greendao.daotest.TestEntityDao.Properties;
import org.greenrobot.greendao.daotest.entity.TestEntityTestBase;
import org.greenrobot.greendao.query.QueryBuilder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class QueryBuilderOrderTest extends TestEntityTestBase {
@Override
protected void setUp() throws Exception {
super.setUp();
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
}
public void testOrderAsc() {
ArrayList<TestEntity> inserted = insert(2);
TestEntity entity = inserted.get(0);
List<TestEntity> result = dao.queryBuilder().orderAsc(Properties.SimpleInteger).list();
assertEquals(2, result.size());
assertEquals(entity.getId(), result.get(0).getId());
result = dao.queryBuilder().orderAsc(Properties.SimpleInteger, Properties.SimpleString).list();
assertEquals(2, result.size());
assertEquals(entity.getId(), result.get(0).getId());
}
public void testOrderDesc() {
ArrayList<TestEntity> inserted = insert(2);
TestEntity entity = inserted.get(1);
List<TestEntity> result = dao.queryBuilder().orderDesc(Properties.SimpleInteger).list();
assertEquals(2, result.size());
assertEquals(entity.getId(), result.get(0).getId());
result = dao.queryBuilder().orderDesc(Properties.SimpleInteger, Properties.SimpleString).list();
assertEquals(2, result.size());
assertEquals(entity.getId(), result.get(0).getId());
}
public void testOrderUpperLowercase() {
List<TestEntity> list = new ArrayList<TestEntity>();
TestEntity entityAA = addEntity(list, "aa");
TestEntity entityAB = addEntity(list, "Ab");
TestEntity entityAC = addEntity(list, "ac");
TestEntity entityZA = addEntity(list, "ZA");
TestEntity entityZB = addEntity(list, "zB");
TestEntity entityZC = addEntity(list, "ZC");
Collections.shuffle(list);
dao.insertInTx(list);
List<TestEntity> result = dao.queryBuilder().orderAsc(Properties.SimpleString).list();
assertEquals(list.size(), result.size());
assertEquals(entityAA.getId(), result.get(0).getId());
assertEquals(entityAB.getId(), result.get(1).getId());
assertEquals(entityAC.getId(), result.get(2).getId());
assertEquals(entityZA.getId(), result.get(3).getId());
assertEquals(entityZB.getId(), result.get(4).getId());
assertEquals(entityZC.getId(), result.get(5).getId());
}
public void testOrderUmlauts() {
List<TestEntity> list = new ArrayList<TestEntity>();
TestEntity entityV = addEntity(list, "V");
TestEntity entityB = addEntity(list, "B");
TestEntity entityUE = addEntity(list, "Ü");
TestEntity entityAE = addEntity(list, "Ä");
dao.insertInTx(list);
List<TestEntity> result = dao.queryBuilder().preferLocalizedStringOrder().orderAsc(Properties.SimpleString)
.list();
assertEquals(list.size(), result.size());
assertEquals(entityAE.getId(), result.get(0).getId());
assertEquals(entityB.getId(), result.get(1).getId());
assertEquals(entityUE.getId(), result.get(2).getId());
assertEquals(entityV.getId(), result.get(3).getId());
}
public void testOrderCustom() {
List<TestEntity> list = new ArrayList<TestEntity>();
TestEntity entityAA = addEntity(list, "Aa");
TestEntity entityAB = addEntity(list, "ab");
TestEntity entityAC = addEntity(list, "Ac");
dao.insertInTx(list);
List<TestEntity> result = dao.queryBuilder().orderCustom(Properties.SimpleString, "ASC").list();
assertEquals(list.size(), result.size());
assertEquals(entityAA.getId(), result.get(0).getId());
assertEquals(entityAC.getId(), result.get(1).getId());
assertEquals(entityAB.getId(), result.get(2).getId());
}
public void testOrderCustom_stringOrderCollation() {
List<TestEntity> list = new ArrayList<TestEntity>();
TestEntity entityAA = addEntity(list, "Aa");
TestEntity entityAB = addEntity(list, "ab");
TestEntity entityAC = addEntity(list, "Ac");
dao.insertInTx(list);
List<TestEntity> result = dao.queryBuilder().stringOrderCollation(null).orderAsc(Properties.SimpleString).list();
assertEquals(list.size(), result.size());
assertEquals(entityAA.getId(), result.get(0).getId());
assertEquals(entityAC.getId(), result.get(1).getId());
assertEquals(entityAB.getId(), result.get(2).getId());
result = dao.queryBuilder().stringOrderCollation("COLLATE BINARY").orderAsc(Properties.SimpleString).list();
assertEquals(list.size(), result.size());
assertEquals(entityAA.getId(), result.get(0).getId());
assertEquals(entityAC.getId(), result.get(1).getId());
assertEquals(entityAB.getId(), result.get(2).getId());
}
public void testOrderRaw() {
ArrayList<TestEntity> inserted = insert(2);
List<TestEntity> result = dao.queryBuilder().orderRaw(Properties.SimpleInteger.columnName + " ASC").list();
assertEquals(2, result.size());
assertEquals(inserted.get(0).getId(), result.get(0).getId());
result = dao.queryBuilder().orderRaw(Properties.SimpleInteger.columnName + " DESC").list();
assertEquals(2, result.size());
assertEquals(inserted.get(1).getId(), result.get(0).getId());
}
private TestEntity addEntity(List<TestEntity> list, String simpleString) {
TestEntity entityAB = createEntity(42, simpleString);
list.add(entityAB);
return entityAB;
}
}