/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.framework.hibernate.support; import junit.framework.TestCase; public class SelectBuilderTest extends TestCase { public void testAddColumns() { StringBuffer hql = new StringBuffer(); SelectBuilder select = new SelectBuilder( hql, 1 ); select.addSelect( "col_a, col_b AS alias" ); assertEquals( "\tSELECT col_a, col_b AS alias", hql.toString() ); } public void testAddColumnsFrom() { StringBuffer hql = new StringBuffer(); SelectBuilder select = new SelectBuilder( hql, 1 ); select.addSelect( "col_a, col_b AS alias" ); select.addFromTable( "Content", "c", SelectBuilder.NO_JOIN, null ); StringBuffer expectedHql = new StringBuffer(); expectedHql.append( "\tSELECT col_a, col_b AS alias" ); expectedHql.append( "\n\tFROM Content AS c" ); assertEquals( expectedHql.toString(), hql.toString() ); } public void testAddColumnsFromWithLeftJoin() { StringBuffer hql = new StringBuffer(); SelectBuilder select = new SelectBuilder( hql, 1 ); select.addSelect( "col_a, col_b AS alias" ); select.addFromTable( "Content", "c", SelectBuilder.NO_JOIN, null ); select.addFromTable( "c.contentHome", null, SelectBuilder.LEFT_JOIN, null ); select.addFromTable( "c.currentVersion", null, SelectBuilder.LEFT_JOIN_FETCH, null ); StringBuffer expectedHql = new StringBuffer(); expectedHql.append( "\tSELECT col_a, col_b AS alias" ); expectedHql.append( "\n\tFROM Content AS c" ); expectedHql.append( "\n\tLEFT JOIN c.contentHome" ); expectedHql.append( "\n\tLEFT JOIN FETCH c.currentVersion" ); assertEquals( expectedHql.toString(), hql.toString() ); } public void testAddColumnsFromWithInnerAndLeftJoin() { StringBuffer hql = new StringBuffer(); SelectBuilder select = new SelectBuilder( hql, 1 ); select.addSelect( "col_a, col_b AS alias" ); select.addFromTable( "Content", "c", SelectBuilder.NO_JOIN, null ); select.addFromTable( "Content", "x", SelectBuilder.INNER_JOIN, "x.key = c.key" ); select.addFromTable( "c.contentHomes", null, SelectBuilder.LEFT_JOIN, null ); StringBuffer expectedHql = new StringBuffer(); expectedHql.append( "\tSELECT col_a, col_b AS alias" ); expectedHql.append( "\n\tFROM Content AS c" ); expectedHql.append( "\n\tINNER JOIN Content AS x ON x.key = c.key" ); expectedHql.append( "\n\tLEFT JOIN c.contentHomes" ); assertEquals( expectedHql.toString(), hql.toString() ); } public void testAddColumnsFromWhere() { StringBuffer hql = new StringBuffer(); SelectBuilder select = new SelectBuilder( hql, 1 ); select.addSelect( "col_a, col_b AS alias" ); select.addFromTable( "Content", "c", SelectBuilder.NO_JOIN, null ); select.addFilter( "AND", "col_a = 1" ); StringBuffer expectedHql = new StringBuffer(); expectedHql.append( "\tSELECT col_a, col_b AS alias" ); expectedHql.append( "\n\tFROM Content AS c" ); expectedHql.append( "\n\tWHERE col_a = 1" ); assertEquals( expectedHql.toString(), hql.toString() ); } public void testAddColumnsFromWhereAnd() { StringBuffer hql = new StringBuffer(); SelectBuilder select = new SelectBuilder( hql, 1 ); select.addSelect( "a, b" ); select.addFromTable( "Content", "c", SelectBuilder.NO_JOIN, null ); select.addFilter( "AND", "a = 1" ); select.addFilter( "AND", "b = 2" ); StringBuffer expectedHql = new StringBuffer(); expectedHql.append( "\tSELECT a, b" ); expectedHql.append( "\n\tFROM Content AS c" ); expectedHql.append( "\n\tWHERE a = 1" ); expectedHql.append( "\n\tAND b = 2" ); assertEquals( expectedHql.toString(), hql.toString() ); } public void testAddColumnsFromWhereOr() { StringBuffer hql = new StringBuffer(); SelectBuilder select = new SelectBuilder( hql, 1 ); select.addSelect( "a, b" ); select.addFromTable( "Content", "c", SelectBuilder.NO_JOIN, null ); select.addFilter( "OR", "a = 1" ); select.addFilter( "OR", "b = 2" ); StringBuffer expectedHql = new StringBuffer(); expectedHql.append( "\tSELECT a, b" ); expectedHql.append( "\n\tFROM Content AS c" ); expectedHql.append( "\n\tWHERE a = 1" ); expectedHql.append( "\n\tOR b = 2" ); assertEquals( expectedHql.toString(), hql.toString() ); } public void testAddColumnsAndFromAndFilterGroupWithAnd() { StringBuffer hql = new StringBuffer(); SelectBuilder select = new SelectBuilder( hql, 1 ); select.addSelect( "a, b" ); select.addFromTable( "Content", "c", SelectBuilder.NO_JOIN, null ); select.addFilter( "AND", "a > 0" ); select.addFilter( "AND", "b < 100" ); select.startFilterGroup( "AND" ); select.addFilter( "OR", "a = 1" ); select.addFilter( "OR", "b = 2" ); select.addFilter( "OR", "b = 3" ); select.endFilterGroup(); select.addFilter( "AND", "a = b" ); StringBuffer expectedHql = new StringBuffer(); expectedHql.append( "\tSELECT a, b" ); expectedHql.append( "\n\tFROM Content AS c" ); expectedHql.append( "\n\tWHERE a > 0" ); expectedHql.append( "\n\tAND b < 100" ); expectedHql.append( "\n\tAND (" ); expectedHql.append( "\n\ta = 1" ); expectedHql.append( "\n\tOR b = 2" ); expectedHql.append( "\n\tOR b = 3" ); expectedHql.append( "\n\t)" ); expectedHql.append( "\n\tAND a = b" ); assertEquals( expectedHql.toString(), hql.toString() ); } public void testAddColumnsAndFromAndFilterGroupWithOr() { StringBuffer hql = new StringBuffer(); SelectBuilder select = new SelectBuilder( hql, 1 ); select.addSelect( "a, b" ); select.addFromTable( "Content", "c", SelectBuilder.NO_JOIN, null ); select.addFilter( "AND", "a > 0" ); select.addFilter( "AND", "b < 100" ); select.startFilterGroup( "OR" ); select.addFilter( "OR", "a = 1" ); select.addFilter( "OR", "b = 2" ); select.addFilter( "OR", "b = 3" ); select.endFilterGroup(); StringBuffer expectedHql = new StringBuffer(); expectedHql.append( "\tSELECT a, b" ); expectedHql.append( "\n\tFROM Content AS c" ); expectedHql.append( "\n\tWHERE a > 0" ); expectedHql.append( "\n\tAND b < 100" ); expectedHql.append( "\n\tOR (" ); expectedHql.append( "\n\ta = 1" ); expectedHql.append( "\n\tOR b = 2" ); expectedHql.append( "\n\tOR b = 3" ); expectedHql.append( "\n\t)" ); assertEquals( expectedHql.toString(), hql.toString() ); } }