From 52cf4faffb2e5f929d002272ad7fd5aa98becf9b Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 10 Oct 2014 14:52:24 +0200 Subject: [PATCH] [#3680] Remove all unit tests that make assumptions on how exactly the SQL is rendered --- .../test/java/org/jooq/test/BasicTest.java | 1358 ----------------- 1 file changed, 1358 deletions(-) diff --git a/jOOQ/src/test/java/org/jooq/test/BasicTest.java b/jOOQ/src/test/java/org/jooq/test/BasicTest.java index de55fca7f0..2ed2fe7800 100644 --- a/jOOQ/src/test/java/org/jooq/test/BasicTest.java +++ b/jOOQ/src/test/java/org/jooq/test/BasicTest.java @@ -41,42 +41,19 @@ package org.jooq.test; -import static org.jooq.JoinType.LEFT_OUTER_JOIN; import static org.jooq.conf.ParamType.INLINED; -import static org.jooq.impl.DSL.any; -import static org.jooq.impl.DSL.avg; import static org.jooq.impl.DSL.condition; -import static org.jooq.impl.DSL.count; -import static org.jooq.impl.DSL.countDistinct; -import static org.jooq.impl.DSL.decode; -import static org.jooq.impl.DSL.exists; -import static org.jooq.impl.DSL.falseCondition; import static org.jooq.impl.DSL.field; import static org.jooq.impl.DSL.fieldByName; import static org.jooq.impl.DSL.inline; -import static org.jooq.impl.DSL.max; -import static org.jooq.impl.DSL.min; -import static org.jooq.impl.DSL.not; -import static org.jooq.impl.DSL.one; import static org.jooq.impl.DSL.param; -import static org.jooq.impl.DSL.replace; -import static org.jooq.impl.DSL.round; import static org.jooq.impl.DSL.row; -import static org.jooq.impl.DSL.select; -import static org.jooq.impl.DSL.sum; import static org.jooq.impl.DSL.tableByName; -import static org.jooq.impl.DSL.trueCondition; import static org.jooq.impl.DSL.val; -import static org.jooq.test.data.Table1.FIELD_DATE1; import static org.jooq.test.data.Table1.FIELD_ID1; -import static org.jooq.test.data.Table1.FIELD_NAME1; import static org.jooq.test.data.Table1.TABLE1; import static org.jooq.test.data.Table2.FIELD_ID2; -import static org.jooq.test.data.Table2.TABLE2; -import static org.jooq.test.data.Table3.FIELD_ID3; -import static org.jooq.test.data.Table3.TABLE3; -import java.math.BigDecimal; import java.sql.Date; import java.sql.SQLException; import java.sql.Timestamp; @@ -85,22 +62,11 @@ import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.TreeSet; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.jooq.BindContext; -import org.jooq.Case; -import org.jooq.CaseConditionStep; -import org.jooq.CaseValueStep; -import org.jooq.CaseWhenStep; import org.jooq.Condition; import org.jooq.DatePart; -import org.jooq.DeleteQuery; import org.jooq.Field; -import org.jooq.Insert; -import org.jooq.InsertQuery; -import org.jooq.Merge; -import org.jooq.Operator; import org.jooq.Param; import org.jooq.Query; import org.jooq.Record; @@ -114,19 +80,13 @@ import org.jooq.Row6; import org.jooq.Row7; import org.jooq.Row8; import org.jooq.RowN; -import org.jooq.Select; -import org.jooq.SelectFinalStep; -import org.jooq.SelectQuery; import org.jooq.Table; -import org.jooq.Truncate; -import org.jooq.UpdateQuery; import org.jooq.conf.RenderKeywordStyle; import org.jooq.conf.RenderNameStyle; import org.jooq.impl.CustomCondition; import org.jooq.impl.CustomField; import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; -import org.jooq.test.data.Table1Record; import org.jmock.Expectations; import org.junit.Test; @@ -678,14 +638,6 @@ public class BasicTest extends AbstractTest { context.assertIsSatisfied(); } - @Test - public void testTruncate() throws Exception { - Truncate t = create.truncate(TABLE1); - - assertEquals("truncate table `TABLE1`", r_dec().render(t)); - assertEquals("truncate table `TABLE1`", r_ref().render(t)); - } - @Test public void testAliasing() throws Exception { assertEquals("`TABLE1`", r_decT().render(TABLE1)); @@ -771,134 +723,6 @@ public class BasicTest extends AbstractTest { context.assertIsSatisfied(); } - @Test - public void testBetweenCondition() throws Exception { - Condition c = FIELD_ID1.between(1, 10); - assertEquals("`TABLE1`.`ID1` between 1 and 10", r_refI().render(c)); - assertEquals("`TABLE1`.`ID1` between ? and ?", r_ref().render(c)); - - c = FIELD_ID1.notBetween(1, 10); - assertEquals("`TABLE1`.`ID1` not between 1 and 10", r_refI().render(c)); - assertEquals("`TABLE1`.`ID1` not between ? and ?", r_ref().render(c)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setInt(2, 10); - }}); - - int i = b_ref().visit(c).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - @Test - public void testInCondition() throws Exception { - Condition c = FIELD_ID1.in(new Integer[0]); - assertEquals(falseCondition(), c); - - c = FIELD_ID1.notIn(new Integer[0]); - assertEquals(trueCondition(), c); - - c = FIELD_ID1.in(1, 10); - assertEquals("`TABLE1`.`ID1` in (1, 10)", r_refI().render(c)); - assertEquals("`TABLE1`.`ID1` in (?, ?)", r_ref().render(c)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setInt(2, 10); - }}); - - int i = b_ref().visit(c).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - @Test - public void testInSelectCondition() throws Exception { - Condition c = FIELD_ID1.in(select(FIELD_ID1).from(TABLE1).where(FIELD_NAME1.equal("x"))); - assertEquals("`TABLE1`.`ID1` in (select `TABLE1`.`ID1` from `TABLE1` where `TABLE1`.`NAME1` = 'x')", r_refI().render(c)); - assertEquals("`TABLE1`.`ID1` in (select `TABLE1`.`ID1` from `TABLE1` where `TABLE1`.`NAME1` = ?)", r_ref().render(c)); - - c = FIELD_ID1.notIn(select(FIELD_ID1).from(TABLE1).where(FIELD_NAME1.equal("x"))); - assertEquals("`TABLE1`.`ID1` not in (select `TABLE1`.`ID1` from `TABLE1` where `TABLE1`.`NAME1` = 'x')", r_refI().render(c)); - assertEquals("`TABLE1`.`ID1` not in (select `TABLE1`.`ID1` from `TABLE1` where `TABLE1`.`NAME1` = ?)", r_ref().render(c)); - - context.checking(new Expectations() {{ - oneOf(statement).setString(1, "x"); - }}); - - int i = b_ref().visit(c).peekIndex(); - assertEquals(2, i); - - context.assertIsSatisfied(); - } - - @Test - public void testCompareCondition() throws Exception { - Condition c = FIELD_ID1.equal(10); - assertEquals("`TABLE1`.`ID1` = 10", r_refI().render(c)); - assertEquals("`TABLE1`.`ID1` = ?", r_ref().render(c)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - }}); - - int i = b_ref().visit(c).peekIndex(); - assertEquals(2, i); - - context.assertIsSatisfied(); - } - - @Test - public void testNotCondition() throws Exception { - Condition c1 = FIELD_ID1.equal(10).not(); - Condition c2 = not(FIELD_ID1.equal(10)); - assertEquals(c1, c2); - - for (Condition c : Arrays.asList(c1, c2)) { - assertEquals("not(`TABLE1`.`ID1` = 10)", r_refI().render(c)); - assertEquals("not(`TABLE1`.`ID1` = ?)", r_ref().render(c)); - - assertEquals("not(not(`TABLE1`.`ID1` = 10))", r_refI().render(c.not())); - assertEquals("not(not(`TABLE1`.`ID1` = ?))", r_ref().render(c.not())); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - }}); - - int i = b_ref().visit(c).peekIndex(); - assertEquals(2, i); - - context.assertIsSatisfied(); - } - - // [#1771] Negated combined conditions shouldn't render extra parentheses - Condition c = not(val(1).eq(1).and(val(2).eq(2))); - assertEquals("not((1 = 1 and 2 = 2))", r_refI().render(c)); - assertEquals("not((? = ? and ? = ?))", r_ref().render(c)); - } - - @Test - public void testLikeCondition() throws Exception { - Condition c1 = FIELD_NAME1.like("%a%"); - assertEquals("`TABLE1`.`NAME1` like '%a%'", r_refI().render(c1)); - assertEquals("`TABLE1`.`NAME1` like ?", r_ref().render(c1)); - - Condition c2 = FIELD_NAME1.notLike("%a%"); - assertEquals("`TABLE1`.`NAME1` not like '%a%'", r_refI().render(c2)); - assertEquals("`TABLE1`.`NAME1` not like ?", r_ref().render(c2)); - - Condition c3 = FIELD_NAME1.like("%a%", '!'); - assertEquals("`TABLE1`.`NAME1` like '%a%' escape '!'", r_refI().render(c3)); - assertEquals("`TABLE1`.`NAME1` like ? escape '!'", r_ref().render(c3)); - - Condition c4 = FIELD_NAME1.notLike("%a%", '!'); - assertEquals("`TABLE1`.`NAME1` not like '%a%' escape '!'", r_refI().render(c4)); - assertEquals("`TABLE1`.`NAME1` not like ? escape '!'", r_ref().render(c4)); - } - @Test public void testQueryPartByName() throws Exception { Field field = fieldByName("A", "b", "';`"); @@ -1095,116 +919,6 @@ public class BasicTest extends AbstractTest { context.assertIsSatisfied(); } - @Test - public void testIsNullCondition() throws Exception { - Condition c1 = FIELD_ID1.isNull(); - assertEquals("`TABLE1`.`ID1` is null", r_refI().render(c1)); - assertEquals("`TABLE1`.`ID1` is null", r_ref().render(c1)); - - Condition c2 = FIELD_ID1.isNotNull(); - assertEquals("`TABLE1`.`ID1` is not null", r_refI().render(c2)); - assertEquals("`TABLE1`.`ID1` is not null", r_ref().render(c2)); - - int i = b_ref().visit(c1).peekIndex(); - assertEquals(1, i); - - int j = b_ref().visit(c2).peekIndex(); - assertEquals(1, j); - } - - @Test - public void testCaseValueFunction() throws Exception { - Case decode = decode(); - CaseValueStep value = decode.value(FIELD_ID1); - CaseWhenStep c = value.when(1, "one"); - - assertEquals("case `TABLE1`.`ID1` when 1 then 'one' end", r_refI().render(c)); - assertEquals("case `TABLE1`.`ID1` when ? then ? end", r_ref().render(c)); - assertEquals("case `TABLE1`.`ID1` when 1 then 'one' end", r_decI().render(c)); - assertEquals("case `TABLE1`.`ID1` when ? then ? end", r_dec().render(c)); - - c.otherwise("nothing"); - assertEquals("case `TABLE1`.`ID1` when 1 then 'one' else 'nothing' end", r_refI().render(c)); - assertEquals("case `TABLE1`.`ID1` when ? then ? else ? end", r_ref().render(c)); - assertEquals("case `TABLE1`.`ID1` when 1 then 'one' else 'nothing' end", r_decI().render(c)); - assertEquals("case `TABLE1`.`ID1` when ? then ? else ? end", r_dec().render(c)); - - c.when(2, "two").when(3, "three"); - assertEquals("case `TABLE1`.`ID1` when 1 then 'one' when 2 then 'two' when 3 then 'three' else 'nothing' end", r_refI().render(c)); - assertEquals("case `TABLE1`.`ID1` when ? then ? when ? then ? when ? then ? else ? end", r_ref().render(c)); - assertEquals("case `TABLE1`.`ID1` when 1 then 'one' when 2 then 'two' when 3 then 'three' else 'nothing' end", r_decI().render(c)); - assertEquals("case `TABLE1`.`ID1` when ? then ? when ? then ? when ? then ? else ? end", r_dec().render(c)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setString(2, "one"); - oneOf(statement).setInt(3, 2); - oneOf(statement).setString(4, "two"); - oneOf(statement).setInt(5, 3); - oneOf(statement).setString(6, "three"); - oneOf(statement).setString(7, "nothing"); - }}); - - int i = b_ref().visit(c).peekIndex(); - assertEquals(8, i); - - context.assertIsSatisfied(); - } - - @Test - public void testCaseConditionFunction() throws Exception { - Case decode = decode(); - CaseConditionStep c = decode.when(FIELD_ID1.equal(1), "one"); - - assertEquals("case when `TABLE1`.`ID1` = 1 then 'one' end", r_refI().render(c)); - assertEquals("case when `TABLE1`.`ID1` = ? then ? end", r_ref().render(c)); - assertEquals("case when `TABLE1`.`ID1` = 1 then 'one' end", r_decI().render(c)); - assertEquals("case when `TABLE1`.`ID1` = ? then ? end", r_dec().render(c)); - - c.otherwise("nothing"); - assertEquals("case when `TABLE1`.`ID1` = 1 then 'one' else 'nothing' end", r_refI().render(c)); - assertEquals("case when `TABLE1`.`ID1` = ? then ? else ? end", r_ref().render(c)); - assertEquals("case when `TABLE1`.`ID1` = 1 then 'one' else 'nothing' end", r_decI().render(c)); - assertEquals("case when `TABLE1`.`ID1` = ? then ? else ? end", r_dec().render(c)); - - c.when(FIELD_ID1.equal(2), "two").when(FIELD_ID1.equal(3), "three"); - assertEquals("case when `TABLE1`.`ID1` = 1 then 'one' when `TABLE1`.`ID1` = 2 then 'two' when `TABLE1`.`ID1` = 3 then 'three' else 'nothing' end", r_refI().render(c)); - assertEquals("case when `TABLE1`.`ID1` = ? then ? when `TABLE1`.`ID1` = ? then ? when `TABLE1`.`ID1` = ? then ? else ? end", r_ref().render(c)); - assertEquals("case when `TABLE1`.`ID1` = 1 then 'one' when `TABLE1`.`ID1` = 2 then 'two' when `TABLE1`.`ID1` = 3 then 'three' else 'nothing' end", r_decI().render(c)); - assertEquals("case when `TABLE1`.`ID1` = ? then ? when `TABLE1`.`ID1` = ? then ? when `TABLE1`.`ID1` = ? then ? else ? end", r_dec().render(c)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setString(2, "one"); - oneOf(statement).setInt(3, 2); - oneOf(statement).setString(4, "two"); - oneOf(statement).setInt(5, 3); - oneOf(statement).setString(6, "three"); - oneOf(statement).setString(7, "nothing"); - }}); - - int i = b_ref().visit(c).peekIndex(); - assertEquals(8, i); - - context.assertIsSatisfied(); - } - - @Test - public void testNullFunction() throws Exception { - Field f = val((Object) null); - assertEquals("null", r_refI().render(f)); - assertEquals("?", r_ref().render(f)); - - context.checking(new Expectations() {{ - oneOf(statement).setObject(1, null); - }}); - - int i = b_ref().visit(f).peekIndex(); - assertEquals(2, i); - - context.assertIsSatisfied(); - } - @Test public void testConstantFunction() throws Exception { Field f1 = val(Integer.valueOf(1)); @@ -1245,1078 +959,6 @@ public class BasicTest extends AbstractTest { context.assertIsSatisfied(); } - @Test - public void testArithmeticSumExpressions() throws Exception { - Field sum1 = FIELD_ID1.add(FIELD_ID1).add(1).add(2); - assertEquals(Integer.class, sum1.getType()); - assertEquals("(`TABLE1`.`ID1` + `TABLE1`.`ID1` + 1 + 2)", r_refI().render(sum1)); - assertEquals("(`TABLE1`.`ID1` + `TABLE1`.`ID1` + ? + ?)", r_ref().render(sum1)); - assertEquals("(`TABLE1`.`ID1` + `TABLE1`.`ID1` + 1 + 2)", r_decI().render(sum1)); - assertEquals("(`TABLE1`.`ID1` + `TABLE1`.`ID1` + ? + ?)", r_dec().render(sum1)); - - Field sum2 = sum1.as("s"); - assertEquals(Integer.class, sum2.getType()); - assertEquals("`s`", r_refI().render(sum2)); - assertEquals("`s`", r_ref().render(sum2)); - - assertEquals("(`TABLE1`.`ID1` + `TABLE1`.`ID1` + 1 + 2) as `s`", r_decI().render(sum2)); - assertEquals("(`TABLE1`.`ID1` + `TABLE1`.`ID1` + ? + ?) as `s`", r_dec().render(sum2)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setInt(2, 2); - }}); - - int i = b_decF().visit(sum2).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - @Test - public void testArithmeticDifferenceExpressions() throws Exception { - Field difference1 = FIELD_ID1.sub(FIELD_ID1).sub(1).sub(2); - assertEquals(Integer.class, difference1.getType()); - assertEquals("(((`TABLE1`.`ID1` - `TABLE1`.`ID1`) - 1) - 2)", r_refI().render(difference1)); - assertEquals("(((`TABLE1`.`ID1` - `TABLE1`.`ID1`) - ?) - ?)", r_ref().render(difference1)); - assertEquals("(((`TABLE1`.`ID1` - `TABLE1`.`ID1`) - 1) - 2)", r_decI().render(difference1)); - assertEquals("(((`TABLE1`.`ID1` - `TABLE1`.`ID1`) - ?) - ?)", r_dec().render(difference1)); - - Field difference2 = difference1.as("d"); - assertEquals(Integer.class, difference2.getType()); - assertEquals("`d`", r_refI().render(difference2)); - assertEquals("`d`", r_ref().render(difference2)); - assertEquals("(((`TABLE1`.`ID1` - `TABLE1`.`ID1`) - 1) - 2) as `d`", r_decI().render(difference2)); - assertEquals("(((`TABLE1`.`ID1` - `TABLE1`.`ID1`) - ?) - ?) as `d`", r_dec().render(difference2)); - - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setInt(2, 2); - }}); - - int i = b_decF().visit(difference2).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - @Test - public void testArithmeticProductExpressions() throws Exception { - Field product1 = FIELD_ID1.mul(FIELD_ID1).mul(1).mul(2); - assertEquals(Integer.class, product1.getType()); - assertEquals("(`TABLE1`.`ID1` * `TABLE1`.`ID1` * 1 * 2)", r_refI().render(product1)); - assertEquals("(`TABLE1`.`ID1` * `TABLE1`.`ID1` * ? * ?)", r_ref().render(product1)); - assertEquals("(`TABLE1`.`ID1` * `TABLE1`.`ID1` * 1 * 2)", r_decI().render(product1)); - assertEquals("(`TABLE1`.`ID1` * `TABLE1`.`ID1` * ? * ?)", r_dec().render(product1)); - - Field product2 = product1.as("p"); - assertEquals(Integer.class, product2.getType()); - assertEquals("`p`", r_refI().render(product2)); - assertEquals("`p`", r_ref().render(product2)); - assertEquals("(`TABLE1`.`ID1` * `TABLE1`.`ID1` * 1 * 2) as `p`", r_decI().render(product2)); - assertEquals("(`TABLE1`.`ID1` * `TABLE1`.`ID1` * ? * ?) as `p`", r_dec().render(product2)); - - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setInt(2, 2); - }}); - - int i = b_decF().visit(product2).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - @Test - public void testArithmeticDivisionExpressions() throws Exception { - Field division1 = FIELD_ID1.div(FIELD_ID1).div(1).div(2); - assertEquals(Integer.class, division1.getType()); - assertEquals("(((`TABLE1`.`ID1` / `TABLE1`.`ID1`) / 1) / 2)", r_refI().render(division1)); - assertEquals("(((`TABLE1`.`ID1` / `TABLE1`.`ID1`) / ?) / ?)", r_ref().render(division1)); - assertEquals("(((`TABLE1`.`ID1` / `TABLE1`.`ID1`) / 1) / 2)", r_decI().render(division1)); - assertEquals("(((`TABLE1`.`ID1` / `TABLE1`.`ID1`) / ?) / ?)", r_dec().render(division1)); - - Field division2 = division1.as("d"); - assertEquals(Integer.class, division2.getType()); - assertEquals("`d`", r_refI().render(division2)); - assertEquals("`d`", r_ref().render(division2)); - assertEquals("(((`TABLE1`.`ID1` / `TABLE1`.`ID1`) / 1) / 2) as `d`", r_decI().render(division2)); - assertEquals("(((`TABLE1`.`ID1` / `TABLE1`.`ID1`) / ?) / ?) as `d`", r_dec().render(division2)); - - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setInt(2, 2); - }}); - - int i = b_decF().visit(division2).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - @Test - public void testFunctions() { - Field f = replace(FIELD_NAME1, "a", "b"); - assertEquals("replace(`TABLE1`.`NAME1`, 'a', 'b')", r_refI().render(f)); - assertEquals("replace(`TABLE1`.`NAME1`, ?, ?)", r_ref().render(f)); - } - - @Test - public void testArithmeticExpressions() { - Field f; - - f = FIELD_ID1.add(1).sub(2).add(3); - assertEquals("(((`TABLE1`.`ID1` + 1) - 2) + 3)", r_refI().render(f)); - assertEquals("(((`TABLE1`.`ID1` + ?) - ?) + ?)", r_ref().render(f)); - - f = FIELD_ID1.add(1).add(2).sub(3); - assertEquals("((`TABLE1`.`ID1` + 1 + 2) - 3)", r_refI().render(f)); - assertEquals("((`TABLE1`.`ID1` + ? + ?) - ?)", r_ref().render(f)); - - f = FIELD_ID1.add(1).sub(val(2).add(3)); - assertEquals("((`TABLE1`.`ID1` + 1) - (2 + 3))", r_refI().render(f)); - assertEquals("((`TABLE1`.`ID1` + ?) - (? + ?))", r_ref().render(f)); - - f = FIELD_ID1.mul(1).div(2).mul(3); - assertEquals("(((`TABLE1`.`ID1` * 1) / 2) * 3)", r_refI().render(f)); - assertEquals("(((`TABLE1`.`ID1` * ?) / ?) * ?)", r_ref().render(f)); - - f = FIELD_ID1.mul(1).mul(2).div(3); - assertEquals("((`TABLE1`.`ID1` * 1 * 2) / 3)", r_refI().render(f)); - assertEquals("((`TABLE1`.`ID1` * ? * ?) / ?)", r_ref().render(f)); - - f = FIELD_ID1.mul(1).div(val(2).mul(3)); - assertEquals("((`TABLE1`.`ID1` * 1) / (2 * 3))", r_refI().render(f)); - assertEquals("((`TABLE1`.`ID1` * ?) / (? * ?))", r_ref().render(f)); - } - - @Test - public void testArithmeticFunctions() throws Exception { - Field sum1 = sum(FIELD_ID1); - assertEquals(BigDecimal.class, sum1.getType()); - assertEquals("sum(`TABLE1`.`ID1`)", r_refI().render(sum1)); - assertEquals("sum(`TABLE1`.`ID1`)", r_ref().render(sum1)); - assertEquals("sum(`TABLE1`.`ID1`)", r_decI().render(sum1)); - assertEquals("sum(`TABLE1`.`ID1`)", r_dec().render(sum1)); - assertEquals(1, b_ref().visit(sum1).peekIndex()); - - Field sum2 = sum(FIELD_ID1).as("value"); - assertEquals(BigDecimal.class, sum2.getType()); - assertEquals("`value`", r_refI().render(sum2)); - assertEquals("`value`", r_ref().render(sum2)); - assertEquals("sum(`TABLE1`.`ID1`) as `value`", r_decI().render(sum2)); - assertEquals("sum(`TABLE1`.`ID1`) as `value`", r_dec().render(sum2)); - assertEquals(1, b_ref().visit(sum2).peekIndex()); - - Field avg1 = avg(FIELD_ID1); - assertEquals(BigDecimal.class, avg1.getType()); - assertEquals("avg(`TABLE1`.`ID1`)", r_refI().render(avg1)); - assertEquals("avg(`TABLE1`.`ID1`)", r_ref().render(avg1)); - assertEquals("avg(`TABLE1`.`ID1`)", r_decI().render(avg1)); - assertEquals("avg(`TABLE1`.`ID1`)", r_dec().render(avg1)); - assertEquals(1, b_ref().visit(avg1).peekIndex()); - - Field avg2 = avg(FIELD_ID1).as("value"); - assertEquals(BigDecimal.class, avg2.getType()); - assertEquals("`value`", r_refI().render(avg2)); - assertEquals("`value`", r_ref().render(avg2)); - assertEquals("avg(`TABLE1`.`ID1`) as `value`", r_decI().render(avg2)); - assertEquals("avg(`TABLE1`.`ID1`) as `value`", r_dec().render(avg2)); - assertEquals(1, b_ref().visit(avg2).peekIndex()); - - Field min1 = min(FIELD_ID1); - assertEquals(Integer.class, min1.getType()); - assertEquals("min(`TABLE1`.`ID1`)", r_refI().render(min1)); - assertEquals("min(`TABLE1`.`ID1`)", r_ref().render(min1)); - assertEquals("min(`TABLE1`.`ID1`)", r_decI().render(min1)); - assertEquals("min(`TABLE1`.`ID1`)", r_dec().render(min1)); - assertEquals(1, b_ref().visit(min1).peekIndex()); - - Field min2 = min(FIELD_ID1).as("value"); - assertEquals(Integer.class, min2.getType()); - assertEquals("`value`", r_refI().render(min2)); - assertEquals("`value`", r_ref().render(min2)); - assertEquals("min(`TABLE1`.`ID1`) as `value`", r_decI().render(min2)); - assertEquals("min(`TABLE1`.`ID1`) as `value`", r_dec().render(min2)); - assertEquals(1, b_ref().visit(min2).peekIndex()); - - Field max1 = max(FIELD_ID1); - assertEquals(Integer.class, max1.getType()); - assertEquals("max(`TABLE1`.`ID1`)", r_refI().render(max1)); - assertEquals("max(`TABLE1`.`ID1`)", r_ref().render(max1)); - assertEquals("max(`TABLE1`.`ID1`)", r_decI().render(max1)); - assertEquals("max(`TABLE1`.`ID1`)", r_dec().render(max1)); - assertEquals(1, b_ref().visit(max1).peekIndex()); - - Field max2 = max(FIELD_ID1).as("value"); - assertEquals(Integer.class, max2.getType()); - assertEquals("`value`", r_refI().render(max2)); - assertEquals("`value`", r_ref().render(max2)); - assertEquals("max(`TABLE1`.`ID1`) as `value`", r_decI().render(max2)); - assertEquals("max(`TABLE1`.`ID1`) as `value`", r_dec().render(max2)); - assertEquals(1, b_ref().visit(max2).peekIndex()); - - Field count1 = count(); - assertEquals(Integer.class, count1.getType()); - assertEquals("count(*)", r_refI().render(count1)); - assertEquals("count(*)", r_ref().render(count1)); - assertEquals("count(*)", r_decI().render(count1)); - assertEquals("count(*)", r_dec().render(count1)); - assertEquals(1, b_ref().visit(count1).peekIndex()); - - Field count1a = count().as("cnt"); - assertEquals(Integer.class, count1a.getType()); - assertEquals("`cnt`", r_refI().render(count1a)); - assertEquals("`cnt`", r_ref().render(count1a)); - assertEquals("count(*) as `cnt`", r_decI().render(count1a)); - assertEquals("count(*) as `cnt`", r_dec().render(count1a)); - assertEquals(1, b_ref().visit(count1a).peekIndex()); - - Field count2 = count(FIELD_ID1); - assertEquals(Integer.class, count2.getType()); - assertEquals("count(`TABLE1`.`ID1`)", r_refI().render(count2)); - assertEquals("count(`TABLE1`.`ID1`)", r_ref().render(count2)); - assertEquals("count(`TABLE1`.`ID1`)", r_decI().render(count2)); - assertEquals("count(`TABLE1`.`ID1`)", r_dec().render(count2)); - assertEquals(1, b_ref().visit(count2).peekIndex()); - - Field count2a = count(FIELD_ID1).as("cnt"); - assertEquals(Integer.class, count2a.getType()); - assertEquals("`cnt`", r_refI().render(count2a)); - assertEquals("`cnt`", r_ref().render(count2a)); - assertEquals("count(`TABLE1`.`ID1`) as `cnt`", r_decI().render(count2a)); - assertEquals("count(`TABLE1`.`ID1`) as `cnt`", r_dec().render(count2a)); - assertEquals(1, b_ref().visit(count2a).peekIndex()); - - Field count3 = countDistinct(FIELD_ID1); - assertEquals(Integer.class, count3.getType()); - assertEquals("count(distinct `TABLE1`.`ID1`)", r_refI().render(count3)); - assertEquals("count(distinct `TABLE1`.`ID1`)", r_ref().render(count3)); - assertEquals("count(distinct `TABLE1`.`ID1`)", r_decI().render(count3)); - assertEquals("count(distinct `TABLE1`.`ID1`)", r_dec().render(count3)); - assertEquals(1, b_ref().visit(count3).peekIndex()); - - Field count3a = countDistinct(FIELD_ID1).as("cnt"); - assertEquals(Integer.class, count3a.getType()); - assertEquals("`cnt`", r_refI().render(count3a)); - assertEquals("`cnt`", r_ref().render(count3a)); - assertEquals("count(distinct `TABLE1`.`ID1`) as `cnt`", r_decI().render(count3a)); - assertEquals("count(distinct `TABLE1`.`ID1`) as `cnt`", r_dec().render(count3a)); - assertEquals(1, b_ref().visit(count3a).peekIndex()); - } - - @Test - public void testInsertQuery1() throws Exception { - InsertQuery q = create.insertQuery(TABLE1); - - q.addValue(FIELD_ID1, 10); - assertEquals("insert into `TABLE1` (`ID1`) values (10)", r_refI().render(q)); - assertEquals("insert into `TABLE1` (`ID1`) values (?)", r_ref().render(q)); - assertEquals(q, create.insertInto(TABLE1, FIELD_ID1).values(10)); - assertEquals(q, create.insertInto(TABLE1).set(FIELD_ID1, 10)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(2, i); - - context.assertIsSatisfied(); - } - - @Test - public void testInsertQuery2() throws Exception { - InsertQuery q = create.insertQuery(TABLE1); - - q.addValue(FIELD_ID1, 10); - q.addValue(FIELD_NAME1, "ABC"); - q.addValue(FIELD_DATE1, new Date(0)); - assertEquals("insert into `TABLE1` (`ID1`, `NAME1`, `DATE1`) values (10, 'ABC', {d '" + zeroDate() + "'})", r_refI().render(q)); - assertEquals("insert into `TABLE1` (`ID1`, `NAME1`, `DATE1`) values (?, ?, ?)", r_ref().render(q)); - assertEquals(q, create.insertInto(TABLE1, FIELD_ID1, FIELD_NAME1, FIELD_DATE1).values(10, "ABC", new Date(0))); - assertEquals(q, create.insertInto(TABLE1).set(FIELD_ID1, 10).set(FIELD_NAME1, "ABC").set(FIELD_DATE1, new Date(0))); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - oneOf(statement).setString(2, "ABC"); - oneOf(statement).setDate(3, new Date(0)); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(4, i); - - context.assertIsSatisfied(); - } - - @Test - public void testInsertSelect1() throws Exception { - InsertQuery q = create.insertQuery(TABLE1); - - q.addValue(FIELD_ID1, round(val(10))); - q.addValue(FIELD_NAME1, create.select(FIELD_NAME1).from(TABLE1).where(FIELD_ID1.equal(1)). asField()); - assertEquals("insert into `TABLE1` (`ID1`, `NAME1`) values (round(10), (select `TABLE1`.`NAME1` from `TABLE1` where `TABLE1`.`ID1` = 1))", r_refI().render(q)); - assertEquals("insert into `TABLE1` (`ID1`, `NAME1`) values (round(?), (select `TABLE1`.`NAME1` from `TABLE1` where `TABLE1`.`ID1` = ?))", r_ref().render(q)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - oneOf(statement).setInt(2, 1); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - @Test - public void testInsertSelect2() throws Exception { - Insert q = create.insertInto(TABLE1).select(create.selectQuery()); - - assertEquals("insert into `TABLE1` (`ID1`, `NAME1`, `DATE1`) select 1 from dual", r_refI().render(q)); - assertEquals("insert into `TABLE1` (`ID1`, `NAME1`, `DATE1`) select 1 from dual", r_ref().render(q)); - - // [#1069] Allow for specifying custom fields - q = create.insertInto(TABLE1, FIELD_ID1).select(select(one())); - - assertEquals("insert into `TABLE1` (`ID1`) select 1 from dual", r_refI().render(q)); - assertEquals("insert into `TABLE1` (`ID1`) select 1 from dual", r_ref().render(q)); - - // [#1069] Allow for specifying custom fields - q = create.insertInto(TABLE1, FIELD_ID1, FIELD_NAME1).select(select(one(), inline("a"))); - - assertEquals("insert into `TABLE1` (`ID1`, `NAME1`) select 1, 'a' from dual", r_refI().render(q)); - assertEquals("insert into `TABLE1` (`ID1`, `NAME1`) select 1, 'a' from dual", r_ref().render(q)); - - q = create.insertInto(TABLE1).select(create.select(val(1), FIELD_NAME1).from(TABLE1).where(FIELD_NAME1.equal("abc"))); - - assertEquals("insert into `TABLE1` (`ID1`, `NAME1`, `DATE1`) select 1, `TABLE1`.`NAME1` from `TABLE1` where `TABLE1`.`NAME1` = 'abc'", r_refI().render(q)); - assertEquals("insert into `TABLE1` (`ID1`, `NAME1`, `DATE1`) select ?, `TABLE1`.`NAME1` from `TABLE1` where `TABLE1`.`NAME1` = ?", r_ref().render(q)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setString(2, "abc"); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - @Test - public void testUpdateQuery1() throws Exception { - UpdateQuery q = create.updateQuery(TABLE1); - - q.addValue(FIELD_ID1, 10); - assertEquals("update `TABLE1` set `TABLE1`.`ID1` = 10", r_refI().render(q)); - assertEquals("update `TABLE1` set `TABLE1`.`ID1` = ?", r_ref().render(q)); - assertEquals(q, create.update(TABLE1).set(FIELD_ID1, 10)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(2, i); - - context.assertIsSatisfied(); - } - - @Test - public void testUpdateQuery2() throws Exception { - UpdateQuery q = create.updateQuery(TABLE1); - - q.addValue(FIELD_ID1, 10); - q.addValue(FIELD_NAME1, "ABC"); - assertEquals("update `TABLE1` set `TABLE1`.`ID1` = 10, `TABLE1`.`NAME1` = 'ABC'", r_refI().render(q)); - assertEquals("update `TABLE1` set `TABLE1`.`ID1` = ?, `TABLE1`.`NAME1` = ?", r_ref().render(q)); - assertEquals(q, create.update(TABLE1).set(FIELD_ID1, 10).set(FIELD_NAME1, "ABC")); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - oneOf(statement).setString(2, "ABC"); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - @Test - public void testUpdateQuery3() throws Exception { - UpdateQuery q = create.updateQuery(TABLE1); - Condition c = FIELD_ID1.equal(10); - - q.addValue(FIELD_ID1, 10); - q.addValue(FIELD_NAME1, "ABC"); - q.addConditions(c); - assertEquals("update `TABLE1` set `TABLE1`.`ID1` = 10, `TABLE1`.`NAME1` = 'ABC' where `TABLE1`.`ID1` = 10", r_refI().render(q)); - assertEquals("update `TABLE1` set `TABLE1`.`ID1` = ?, `TABLE1`.`NAME1` = ? where `TABLE1`.`ID1` = ?", r_ref().render(q)); - assertEquals(q, create.update(TABLE1).set(FIELD_ID1, 10).set(FIELD_NAME1, "ABC").where(c)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - oneOf(statement).setString(2, "ABC"); - oneOf(statement).setInt(3, 10); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(4, i); - - context.assertIsSatisfied(); - } - - @Test - public void testUpdateQuery4() throws Exception { - UpdateQuery q = create.updateQuery(TABLE1); - Condition c1 = FIELD_ID1.equal(10); - Condition c2 = FIELD_ID1.equal(20); - - q.addValue(FIELD_ID1, 10); - q.addValue(FIELD_NAME1, "ABC"); - q.addConditions(c1); - q.addConditions(c2); - assertEquals("update `TABLE1` set `TABLE1`.`ID1` = 10, `TABLE1`.`NAME1` = 'ABC' where (`TABLE1`.`ID1` = 10 and `TABLE1`.`ID1` = 20)", r_refI().render(q)); - assertEquals("update `TABLE1` set `TABLE1`.`ID1` = ?, `TABLE1`.`NAME1` = ? where (`TABLE1`.`ID1` = ? and `TABLE1`.`ID1` = ?)", r_ref().render(q)); - assertEquals(q, create.update(TABLE1).set(FIELD_ID1, 10).set(FIELD_NAME1, "ABC").where(c1, c2)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - oneOf(statement).setString(2, "ABC"); - oneOf(statement).setInt(3, 10); - oneOf(statement).setInt(4, 20); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(5, i); - - context.assertIsSatisfied(); - } - - @Test - public void testUpdateQuery5() throws Exception { - UpdateQuery q = create.updateQuery(TABLE1); - Condition c1 = FIELD_ID1.equal(10); - Condition c2 = FIELD_ID1.equal(20); - - q.addValue(FIELD_ID1, 10); - q.addValue(FIELD_NAME1, "ABC"); - q.addConditions(c1); - q.addConditions(c2); - q.addConditions(c2, c1); - assertEquals("update `TABLE1` set `TABLE1`.`ID1` = 10, `TABLE1`.`NAME1` = 'ABC' where (`TABLE1`.`ID1` = 10 and `TABLE1`.`ID1` = 20 and `TABLE1`.`ID1` = 20 and `TABLE1`.`ID1` = 10)", r_refI().render(q)); - assertEquals("update `TABLE1` set `TABLE1`.`ID1` = ?, `TABLE1`.`NAME1` = ? where (`TABLE1`.`ID1` = ? and `TABLE1`.`ID1` = ? and `TABLE1`.`ID1` = ? and `TABLE1`.`ID1` = ?)", r_ref().render(q)); - assertEquals(q, create.update(TABLE1).set(FIELD_ID1, 10).set(FIELD_NAME1, "ABC").where(c1).and(c2).and(c2).and(c1)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - oneOf(statement).setString(2, "ABC"); - oneOf(statement).setInt(3, 10); - oneOf(statement).setInt(4, 20); - oneOf(statement).setInt(5, 20); - oneOf(statement).setInt(6, 10); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(7, i); - - context.assertIsSatisfied(); - } - - @Test - public void testMergeQuery() throws Exception { - Merge q = - create.mergeInto(TABLE1) - .using(create.select(FIELD_ID2).from(TABLE2)) - .on(FIELD_ID2.equal(FIELD_ID1)) - .and(FIELD_ID1.equal(1)) - .or(FIELD_ID2.equal(2)) - .whenMatchedThenUpdate() - .set(FIELD_NAME1, "name") - .set(FIELD_DATE1, new Date(0)) - .whenNotMatchedThenInsert(FIELD_ID1, FIELD_NAME1, FIELD_DATE1) - .values(1, "name", new Date(0)); - - assertEquals("merge into `TABLE1` using (select `TABLE2`.`ID2` from `TABLE2`) on ((`TABLE2`.`ID2` = `TABLE1`.`ID1` and `TABLE1`.`ID1` = 1) or `TABLE2`.`ID2` = 2) when matched then update set `TABLE1`.`NAME1` = 'name', `TABLE1`.`DATE1` = {d '" + zeroDate() + "'} when not matched then insert (`ID1`, `NAME1`, `DATE1`) values (1, 'name', {d '" + zeroDate() + "'})", r_refI().render(q)); - assertEquals("merge into `TABLE1` using (select `TABLE2`.`ID2` from `TABLE2`) on ((`TABLE2`.`ID2` = `TABLE1`.`ID1` and `TABLE1`.`ID1` = ?) or `TABLE2`.`ID2` = ?) when matched then update set `TABLE1`.`NAME1` = ?, `TABLE1`.`DATE1` = ? when not matched then insert (`ID1`, `NAME1`, `DATE1`) values (?, ?, ?)", r_ref().render(q)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setInt(2, 2); - oneOf(statement).setString(3, "name"); - oneOf(statement).setDate(4, new Date(0)); - oneOf(statement).setInt(5, 1); - oneOf(statement).setString(6, "name"); - oneOf(statement).setDate(7, new Date(0)); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(8, i); - - context.assertIsSatisfied(); - } - - @Test - public void testDeleteQuery1() throws Exception { - DeleteQuery q = create.deleteQuery(TABLE1); - - assertEquals("delete from `TABLE1`", r_refI().render(q)); - assertEquals("delete from `TABLE1`", r_ref().render(q)); - assertEquals(q, create.delete(TABLE1)); - } - - @Test - public void testDeleteQuery2() throws Exception { - DeleteQuery q = create.deleteQuery(TABLE1); - - q.addConditions(falseCondition()); - assertEquals("delete from `TABLE1` where 1 = 0", r_refI().render(q)); - assertEquals("delete from `TABLE1` where 1 = 0", r_ref().render(q)); - assertEquals(q, create.delete(TABLE1).where(falseCondition())); - } - - @Test - public void testDeleteQuery3() throws Exception { - DeleteQuery q = create.deleteQuery(TABLE1); - Condition c1 = FIELD_ID1.equal(10); - Condition c2 = FIELD_ID1.equal(20); - - q.addConditions(c1); - q.addConditions(c2); - assertEquals("delete from `TABLE1` where (`TABLE1`.`ID1` = 10 and `TABLE1`.`ID1` = 20)", r_refI().render(q)); - assertEquals("delete from `TABLE1` where (`TABLE1`.`ID1` = ? and `TABLE1`.`ID1` = ?)", r_ref().render(q)); - assertEquals(q, create.delete(TABLE1).where(c1, c2)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - oneOf(statement).setInt(2, 20); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - @Test - public void testDeleteQuery4() throws Exception { - DeleteQuery q = create.deleteQuery(TABLE1); - Condition c1 = FIELD_ID1.equal(10); - Condition c2 = FIELD_ID1.equal(20); - - q.addConditions(c1); - q.addConditions(c2); - q.addConditions(c2, c1); - assertEquals("delete from `TABLE1` where (`TABLE1`.`ID1` = 10 and `TABLE1`.`ID1` = 20 and `TABLE1`.`ID1` = 20 and `TABLE1`.`ID1` = 10)", r_refI().render(q)); - assertEquals("delete from `TABLE1` where (`TABLE1`.`ID1` = ? and `TABLE1`.`ID1` = ? and `TABLE1`.`ID1` = ? and `TABLE1`.`ID1` = ?)", r_ref().render(q)); - assertEquals(q, create.delete(TABLE1).where(c1, c2).and(c2).and(c1)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - oneOf(statement).setInt(2, 20); - oneOf(statement).setInt(3, 20); - oneOf(statement).setInt(4, 10); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(5, i); - - context.assertIsSatisfied(); - } - - @Test - public void testConditionalSelectQuery1() throws Exception { - Select q = create.selectQuery(); - Select s = create.select(); - - assertEquals("select 1 from dual", r_refI().render(q)); - assertEquals("select 1 from dual", r_ref().render(q)); - assertEquals(q, s); - } - - @Test - public void testConditionalSelectQuery2() throws Exception { - SelectQuery q = create.selectQuery(); - - q.addConditions(falseCondition()); - assertEquals("select 1 from dual where 1 = 0", r_refI().render(q)); - assertEquals("select 1 from dual where 1 = 0", r_ref().render(q)); - assertEquals(q, create.select().where(falseCondition())); - } - - @Test - public void testConditionalSelectQuery3() throws Exception { - SelectQuery q = create.selectQuery(); - - q.addConditions(falseCondition()); - q.addConditions(trueCondition()); - assertEquals("select 1 from dual where (1 = 0 and 1 = 1)", r_refI().render(q)); - assertEquals("select 1 from dual where (1 = 0 and 1 = 1)", r_ref().render(q)); - assertEquals(q, create.select().where(falseCondition().and(trueCondition()))); - } - - @Test - public void testConditionalSelectQuery4() throws Exception { - SelectQuery q = create.selectQuery(); - Condition c1 = FIELD_ID1.equal(10); - Condition c2 = FIELD_ID1.equal(20); - - q.addConditions(c1); - q.addConditions(c2); - q.addConditions(c2, c1); - assertEquals("select 1 from dual where (`TABLE1`.`ID1` = 10 and `TABLE1`.`ID1` = 20 and `TABLE1`.`ID1` = 20 and `TABLE1`.`ID1` = 10)", r_refI().render(q)); - assertEquals("select 1 from dual where (`TABLE1`.`ID1` = ? and `TABLE1`.`ID1` = ? and `TABLE1`.`ID1` = ? and `TABLE1`.`ID1` = ?)", r_ref().render(q)); - assertEquals(q, create.select().where(c1.and(c2).and(c2.and(c1)))); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 10); - oneOf(statement).setInt(2, 20); - oneOf(statement).setInt(3, 20); - oneOf(statement).setInt(4, 10); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(5, i); - - context.assertIsSatisfied(); - } - - @Test - public void testConditionalSelectQuery5() throws Exception { - SelectQuery q = create.selectQuery(); - Condition c1 = condition("`TABLE1`.`ID1` = ?", "10"); - Condition c2 = condition("`TABLE2`.`ID2` = 20 or `TABLE2`.`ID2` = ?", 30); - - q.addConditions(c1); - q.addConditions(c2); - assertEquals("select 1 from dual where ((`TABLE1`.`ID1` = '10') and (`TABLE2`.`ID2` = 20 or `TABLE2`.`ID2` = 30))", r_refI().render(q)); - assertEquals("select 1 from dual where ((`TABLE1`.`ID1` = ?) and (`TABLE2`.`ID2` = 20 or `TABLE2`.`ID2` = ?))", r_ref().render(q)); - assertEquals(q, create.select().where(c1, c2)); - - context.checking(new Expectations() {{ - oneOf(statement).setString(1, "10"); - oneOf(statement).setInt(2, 30); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - @Test - public void testDistinctSelectQuery() throws Exception { - SelectQuery q = create.selectQuery(); - q.addSelect(FIELD_ID1, FIELD_ID2); - q.setDistinct(true); - - assertEquals("select distinct `TABLE1`.`ID1`, `TABLE2`.`ID2` from dual", r_refI().render(q)); - assertEquals("select distinct `TABLE1`.`ID1`, `TABLE2`.`ID2` from dual", r_ref().render(q)); - assertEquals(q, create.selectDistinct(FIELD_ID1, FIELD_ID2)); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(1, i); - } - - @Test - public void testProductSelectQuery() throws Exception { - SelectQuery q = create.selectQuery(); - - q.addFrom(TABLE1); - q.addFrom(TABLE2); - q.addFrom(TABLE3); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2`, `TABLE3`.`ID3`, `TABLE3`.`NAME3`, `TABLE3`.`DATE3` from `TABLE1`, `TABLE2`, `TABLE3`", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2`, `TABLE3`.`ID3`, `TABLE3`.`NAME3`, `TABLE3`.`DATE3` from `TABLE1`, `TABLE2`, `TABLE3`", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1, TABLE2, TABLE3)); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(1, i); - } - - @Test - public void testJoinSelectQuery() throws Exception { - SelectQuery q = create.selectQuery(); - - q.addFrom(TABLE1); - q.addJoin(TABLE2); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2` from `TABLE1` join `TABLE2` on 1 = 1", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2` from `TABLE1` join `TABLE2` on 1 = 1", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1).join(TABLE2).on()); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(1, i); - } - - @Test - public void testJoinOnConditionSelectQuery() throws Exception { - SelectQuery q = create.selectQuery(); - q.addFrom(TABLE1); - q.addJoin(TABLE2, FIELD_ID1.equal(FIELD_ID2)); - - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2` from `TABLE1` join `TABLE2` on `TABLE1`.`ID1` = `TABLE2`.`ID2`", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2` from `TABLE1` join `TABLE2` on `TABLE1`.`ID1` = `TABLE2`.`ID2`", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1).join(TABLE2).on(FIELD_ID1.equal(FIELD_ID2))); - - q.addJoin(TABLE3, FIELD_ID2.equal(FIELD_ID3)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2`, `TABLE3`.`ID3`, `TABLE3`.`NAME3`, `TABLE3`.`DATE3` from `TABLE1` join `TABLE2` on `TABLE1`.`ID1` = `TABLE2`.`ID2` join `TABLE3` on `TABLE2`.`ID2` = `TABLE3`.`ID3`", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2`, `TABLE3`.`ID3`, `TABLE3`.`NAME3`, `TABLE3`.`DATE3` from `TABLE1` join `TABLE2` on `TABLE1`.`ID1` = `TABLE2`.`ID2` join `TABLE3` on `TABLE2`.`ID2` = `TABLE3`.`ID3`", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1) - .join(TABLE2).on(FIELD_ID1.equal(FIELD_ID2)) - .join(TABLE3).on(FIELD_ID2.equal(FIELD_ID3))); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(1, i); - } - - @Test - public void testJoinComplexSelectQuery() throws Exception { - SelectQuery q = create.selectQuery(); - - q.addFrom(TABLE1); - q.addJoin(TABLE2, - FIELD_ID1.equal(FIELD_ID2), - FIELD_ID1.equal(1), - FIELD_ID2.in(1, 2, 3)); - q.addConditions(FIELD_ID1.equal(5)); - - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2` from `TABLE1` join `TABLE2` on (`TABLE1`.`ID1` = `TABLE2`.`ID2` and `TABLE1`.`ID1` = 1 and `TABLE2`.`ID2` in (1, 2, 3)) where `TABLE1`.`ID1` = 5", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2` from `TABLE1` join `TABLE2` on (`TABLE1`.`ID1` = `TABLE2`.`ID2` and `TABLE1`.`ID1` = ? and `TABLE2`.`ID2` in (?, ?, ?)) where `TABLE1`.`ID1` = ?", r_ref().render(q)); - - // Join using a single condition - assertEquals(q, create.select().from(TABLE1) - .join(TABLE2) - .on(FIELD_ID1.equal(FIELD_ID2) - .and(FIELD_ID1.equal(1)) - .and(FIELD_ID2.in(1, 2, 3))) - .where(FIELD_ID1.equal(5))); - - // Join using several conditions - assertEquals(q, create.select().from(TABLE1) - .join(TABLE2) - .on(FIELD_ID1.equal(FIELD_ID2)) - .and(FIELD_ID1.equal(1)) - .and(FIELD_ID2.in(1, 2, 3)) - .where(FIELD_ID1.equal(5))); - - q.addJoin(TABLE3, FIELD_ID2.equal(FIELD_ID3)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2`, `TABLE3`.`ID3`, `TABLE3`.`NAME3`, `TABLE3`.`DATE3` from `TABLE1` join `TABLE2` on (`TABLE1`.`ID1` = `TABLE2`.`ID2` and `TABLE1`.`ID1` = 1 and `TABLE2`.`ID2` in (1, 2, 3)) join `TABLE3` on `TABLE2`.`ID2` = `TABLE3`.`ID3` where `TABLE1`.`ID1` = 5", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2`, `TABLE3`.`ID3`, `TABLE3`.`NAME3`, `TABLE3`.`DATE3` from `TABLE1` join `TABLE2` on (`TABLE1`.`ID1` = `TABLE2`.`ID2` and `TABLE1`.`ID1` = ? and `TABLE2`.`ID2` in (?, ?, ?)) join `TABLE3` on `TABLE2`.`ID2` = `TABLE3`.`ID3` where `TABLE1`.`ID1` = ?", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1) - .join(TABLE2).on(FIELD_ID1.equal(FIELD_ID2) - .and(FIELD_ID1.equal(1)) - .and(FIELD_ID2.in(1, 2, 3))) - .join(TABLE3).on(FIELD_ID2.equal(FIELD_ID3)) - .where(FIELD_ID1.equal(5))); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setInt(2, 1); - oneOf(statement).setInt(3, 2); - oneOf(statement).setInt(4, 3); - oneOf(statement).setInt(5, 5); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(6, i); - - context.assertIsSatisfied(); - } - - @Test - public void testJoinSelf() throws Exception { - Table t1 = TABLE1.as("t1"); - Table t2 = TABLE1.as("t2"); - - SelectQuery q = create.selectQuery(); - q.addFrom(t1); - q.addJoin(t2, t1.field(FIELD_ID1).equal(t2.field(FIELD_ID1))); - - assertEquals("select `t1`.`ID1`, `t1`.`NAME1`, `t1`.`DATE1`, `t2`.`ID1`, `t2`.`NAME1`, `t2`.`DATE1` from `TABLE1` as `t1` join `TABLE1` as `t2` on `t1`.`ID1` = `t2`.`ID1`", r_refI().render(q)); - assertEquals("select `t1`.`ID1`, `t1`.`NAME1`, `t1`.`DATE1`, `t2`.`ID1`, `t2`.`NAME1`, `t2`.`DATE1` from `TABLE1` as `t1` join `TABLE1` as `t2` on `t1`.`ID1` = `t2`.`ID1`", r_ref().render(q)); - assertEquals(q, create.select().from(t1) - .join(t2).on(t1.field(FIELD_ID1).equal( - t2.field(FIELD_ID1)))); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(1, i); - } - - @Test - public void testJoinTypeSelectQuery() throws Exception { - SelectQuery q = create.selectQuery(); - q.addFrom(TABLE1); - q.addJoin(TABLE2, LEFT_OUTER_JOIN, FIELD_ID1.equal(FIELD_ID2)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2` from `TABLE1` left outer join `TABLE2` on `TABLE1`.`ID1` = `TABLE2`.`ID2`", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2` from `TABLE1` left outer join `TABLE2` on `TABLE1`.`ID1` = `TABLE2`.`ID2`", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1).leftOuterJoin(TABLE2).on(FIELD_ID1.equal(FIELD_ID2))); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(1, i); - } - - @Test - public void testGroupSelectQuery() throws Exception { - SelectQuery q = create.selectQuery(); - q.addFrom(TABLE1); - - q.addGroupBy(); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by 1", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by 1", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1).groupBy()); - - q.addGroupBy(FIELD_ID1); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1).groupBy(FIELD_ID1)); - - q.addGroupBy(FIELD_ID2, FIELD_ID3); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`, `TABLE2`.`ID2`, `TABLE3`.`ID3`", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`, `TABLE2`.`ID2`, `TABLE3`.`ID3`", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1).groupBy(FIELD_ID1, FIELD_ID2, FIELD_ID3)); - - q.addHaving(FIELD_ID1.equal(1)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`, `TABLE2`.`ID2`, `TABLE3`.`ID3` having `TABLE1`.`ID1` = 1", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`, `TABLE2`.`ID2`, `TABLE3`.`ID3` having `TABLE1`.`ID1` = ?", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1) - .groupBy(FIELD_ID1, FIELD_ID2, FIELD_ID3) - .having(FIELD_ID1.equal(1))); - - q.addHaving(Operator.OR, FIELD_ID1.equal(2)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`, `TABLE2`.`ID2`, `TABLE3`.`ID3` having (`TABLE1`.`ID1` = 1 or `TABLE1`.`ID1` = 2)", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`, `TABLE2`.`ID2`, `TABLE3`.`ID3` having (`TABLE1`.`ID1` = ? or `TABLE1`.`ID1` = ?)", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1) - .groupBy(FIELD_ID1, FIELD_ID2, FIELD_ID3) - .having(FIELD_ID1.equal(1)) - .or(FIELD_ID1.equal(2))); - - q.addHaving(Operator.OR, FIELD_ID1.equal(3)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`, `TABLE2`.`ID2`, `TABLE3`.`ID3` having (`TABLE1`.`ID1` = 1 or `TABLE1`.`ID1` = 2 or `TABLE1`.`ID1` = 3)", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`, `TABLE2`.`ID2`, `TABLE3`.`ID3` having (`TABLE1`.`ID1` = ? or `TABLE1`.`ID1` = ? or `TABLE1`.`ID1` = ?)", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1) - .groupBy(FIELD_ID1, FIELD_ID2, FIELD_ID3) - .having(FIELD_ID1.equal(1)) - .or(FIELD_ID1.equal(2)) - .or(FIELD_ID1.equal(3))); - - q.addHaving(FIELD_ID1.in(1, 2, 3)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`, `TABLE2`.`ID2`, `TABLE3`.`ID3` having ((`TABLE1`.`ID1` = 1 or `TABLE1`.`ID1` = 2 or `TABLE1`.`ID1` = 3) and `TABLE1`.`ID1` in (1, 2, 3))", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` group by `TABLE1`.`ID1`, `TABLE2`.`ID2`, `TABLE3`.`ID3` having ((`TABLE1`.`ID1` = ? or `TABLE1`.`ID1` = ? or `TABLE1`.`ID1` = ?) and `TABLE1`.`ID1` in (?, ?, ?))", r_ref().render(q)); - assertEquals(q, create.select().from(TABLE1) - .groupBy(FIELD_ID1, FIELD_ID2, FIELD_ID3) - .having(FIELD_ID1.equal(1)) - .or(FIELD_ID1.equal(2)) - .or(FIELD_ID1.equal(3)) - .and(FIELD_ID1.in(1, 2, 3))); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setInt(2, 2); - oneOf(statement).setInt(3, 3); - oneOf(statement).setInt(4, 1); - oneOf(statement).setInt(5, 2); - oneOf(statement).setInt(6, 3); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(7, i); - - context.assertIsSatisfied(); - } - - @Test - public void testOrderSelectQuery() throws Exception { - SelectQuery q = create.selectQuery(TABLE1); - - q.addOrderBy(FIELD_ID1); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` order by `TABLE1`.`ID1` asc", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` order by `TABLE1`.`ID1` asc", r_ref().render(q)); - assertEquals(q, create.selectFrom(TABLE1).orderBy(FIELD_ID1)); - - q.addOrderBy(FIELD_ID2.desc()); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` order by `TABLE1`.`ID1` asc, `TABLE2`.`ID2` desc", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` order by `TABLE1`.`ID1` asc, `TABLE2`.`ID2` desc", r_ref().render(q)); - assertEquals(q, create.selectFrom(TABLE1).orderBy( - FIELD_ID1.asc(), - FIELD_ID2.desc())); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(1, i); - } - - @Test - public void testCompleteSelectQuery() throws Exception { - SelectQuery q = create.selectQuery(); - q.addFrom(TABLE1); - q.addJoin(TABLE2, FIELD_ID1.equal(FIELD_ID2)); - q.addSelect(FIELD_ID1, FIELD_ID2); - q.addGroupBy(FIELD_ID1, FIELD_ID2); - q.addHaving(FIELD_ID1.equal(1)); - q.addOrderBy(FIELD_ID1.asc()); - q.addOrderBy(FIELD_ID2.desc()); - - assertEquals("select `TABLE1`.`ID1`, `TABLE2`.`ID2` from `TABLE1` join `TABLE2` on `TABLE1`.`ID1` = `TABLE2`.`ID2` group by `TABLE1`.`ID1`, `TABLE2`.`ID2` having `TABLE1`.`ID1` = 1 order by `TABLE1`.`ID1` asc, `TABLE2`.`ID2` desc", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE2`.`ID2` from `TABLE1` join `TABLE2` on `TABLE1`.`ID1` = `TABLE2`.`ID2` group by `TABLE1`.`ID1`, `TABLE2`.`ID2` having `TABLE1`.`ID1` = ? order by `TABLE1`.`ID1` asc, `TABLE2`.`ID2` desc", r_ref().render(q)); - assertEquals(q, create.select(FIELD_ID1, FIELD_ID2) - .from(TABLE1) - .join(TABLE2).on(FIELD_ID1.equal(FIELD_ID2)) - .groupBy(FIELD_ID1, FIELD_ID2) - .having(FIELD_ID1.equal(1)) - .orderBy( - FIELD_ID1.asc(), - FIELD_ID2.desc())); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - }}); - - int i = b_ref().visit(q).peekIndex(); - assertEquals(2, i); - - context.assertIsSatisfied(); - } - - @Test - public void testCombinedSelectQuery() throws Exception { - Select combine = createCombinedSelectQuery(); - - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = 1 union select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = 2", r_refI().render(combine)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = ? union select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = ?", r_ref().render(combine)); - assertEquals(combine, createCombinedSelect()); - - combine = create - .select(createCombinedSelectQuery().field(FIELD_ID1)) - .from(createCombinedSelectQuery()) - .orderBy(FIELD_ID1); - - Pattern p = Pattern.compile("`alias_\\d+`"); - Matcher m = p.matcher(r_ref().render(combine)); - m.find(); - String match = m.group(); - - assertEquals("select " + match + ".`ID1` from (select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = 1 union select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = 2) as " + match + " order by `TABLE1`.`ID1` asc", r_refI().render(combine)); - assertEquals("select " + match + ".`ID1` from (select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = ? union select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = ?) as " + match + " order by `TABLE1`.`ID1` asc", r_ref().render(combine)); - - combine = createCombinedSelectQuery(); - combine = create.select() - .from(createCombinedSelectQuery()) - .join(TABLE2).on(FIELD_ID1.equal(FIELD_ID2)) - .orderBy(FIELD_ID1); - assertEquals("select " + match + ".`ID1`, " + match + ".`NAME1`, " + match + ".`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2` from (select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = 1 union select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = 2) as " + match + " join `TABLE2` on `TABLE1`.`ID1` = `TABLE2`.`ID2` order by `TABLE1`.`ID1` asc", r_refI().render(combine)); - assertEquals("select " + match + ".`ID1`, " + match + ".`NAME1`, " + match + ".`DATE1`, `TABLE2`.`ID2`, `TABLE2`.`NAME2`, `TABLE2`.`DATE2` from (select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = ? union select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = ?) as " + match + " join `TABLE2` on `TABLE1`.`ID1` = `TABLE2`.`ID2` order by `TABLE1`.`ID1` asc", r_ref().render(combine)); - - context.checking(new Expectations() {{ - oneOf(statement).setInt(1, 1); - oneOf(statement).setInt(2, 2); - }}); - - int i = b_ref().visit(combine).peekIndex(); - assertEquals(3, i); - - context.assertIsSatisfied(); - } - - private Select createCombinedSelectQuery() { - SelectQuery q1 = create.selectQuery(); - SelectQuery q2 = create.selectQuery(); - - q1.addFrom(TABLE1); - q2.addFrom(TABLE1); - - q1.addConditions(FIELD_ID1.equal(1)); - q2.addConditions(FIELD_ID1.equal(2)); - - return q1.union(q2); - } - - private Select createCombinedSelect() { - SelectFinalStep q1 = create.select().from(TABLE1).where(FIELD_ID1.equal(1)); - SelectFinalStep q2 = create.select().from(TABLE1).where(FIELD_ID1.equal(2)); - - return q1.union(q2); - } - - @Test - public void testInnerSelect1() throws Exception { - SelectQuery q1 = create.selectQuery(TABLE1); - SelectQuery q2 = create.selectQuery(q1.asTable().as("inner_temp_table")); - SelectQuery q3 = create.selectQuery(q2.asTable().as("outer_temp_table")); - - assertEquals("select `inner_temp_table`.`ID1`, `inner_temp_table`.`NAME1`, `inner_temp_table`.`DATE1` from (select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1`) as `inner_temp_table`", r_refI().render(q2)); - assertEquals("select `inner_temp_table`.`ID1`, `inner_temp_table`.`NAME1`, `inner_temp_table`.`DATE1` from (select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1`) as `inner_temp_table`", r_ref().render(q2)); - - assertEquals("select `outer_temp_table`.`ID1`, `outer_temp_table`.`NAME1`, `outer_temp_table`.`DATE1` from (select `inner_temp_table`.`ID1`, `inner_temp_table`.`NAME1`, `inner_temp_table`.`DATE1` from (select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1`) as `inner_temp_table`) as `outer_temp_table`", r_refI().render(q3)); - assertEquals("select `outer_temp_table`.`ID1`, `outer_temp_table`.`NAME1`, `outer_temp_table`.`DATE1` from (select `inner_temp_table`.`ID1`, `inner_temp_table`.`NAME1`, `inner_temp_table`.`DATE1` from (select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1`) as `inner_temp_table`) as `outer_temp_table`", r_ref().render(q3)); - } - - @Test - public void testInnerSelect2() throws Exception { - SelectQuery q1 = create.selectQuery(); - SelectQuery q2 = create.selectQuery(); - - q1.addFrom(TABLE1); - q2.addFrom(TABLE2); - - q1.addSelect(FIELD_ID1.as("inner_id1")); - q2.addSelect(FIELD_ID2.as("outer_id2")); - q2.addSelect(q1.asField().as("outer_id1")); - - assertEquals("select `TABLE2`.`ID2` as `outer_id2`, (select `TABLE1`.`ID1` as `inner_id1` from `TABLE1`) as `outer_id1` from `TABLE2`", r_refI().render(q2)); - assertEquals("select `TABLE2`.`ID2` as `outer_id2`, (select `TABLE1`.`ID1` as `inner_id1` from `TABLE1`) as `outer_id1` from `TABLE2`", r_ref().render(q2)); - } - - @Test - public void testInnerSelect3() throws Exception { - SelectQuery q = create.selectQuery(); - - q.addFrom(TABLE1); - q.addConditions(FIELD_ID1.in(select(FIELD_ID2).from(TABLE2))); - - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` in (select `TABLE2`.`ID2` from `TABLE2`)", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` in (select `TABLE2`.`ID2` from `TABLE2`)", r_ref().render(q)); - } - - @Test - public void testInnerSelect4() throws Exception { - SelectQuery q = create.selectQuery(); - - q.addFrom(TABLE1); - q.addConditions(FIELD_ID1.equal(select(FIELD_ID2).from(TABLE2))); - - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = (select `TABLE2`.`ID2` from `TABLE2`)", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` = (select `TABLE2`.`ID2` from `TABLE2`)", r_ref().render(q)); - } - - @Test - public void testInnerSelect5() throws Exception { - SelectQuery q = create.selectQuery(); - - q.addFrom(TABLE1); - q.addConditions(FIELD_ID1.greaterThan(any(select(FIELD_ID2).from(TABLE2)))); - - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` > any (select `TABLE2`.`ID2` from `TABLE2`)", r_refI().render(q)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where `TABLE1`.`ID1` > any (select `TABLE2`.`ID2` from `TABLE2`)", r_ref().render(q)); - } - - @Test - public void testInnerSelect6() throws Exception { - SelectQuery q1 = create.selectQuery(); - SelectQuery q2 = create.selectQuery(); - - q1.addFrom(TABLE1); - q2.addFrom(TABLE2); - - q2.addSelect(FIELD_ID2); - q1.addConditions(exists(q2)); - - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where exists (select `TABLE2`.`ID2` from `TABLE2`)", r_refI().render(q1)); - assertEquals("select `TABLE1`.`ID1`, `TABLE1`.`NAME1`, `TABLE1`.`DATE1` from `TABLE1` where exists (select `TABLE2`.`ID2` from `TABLE2`)", r_ref().render(q1)); - } - @Test public void testNamedParams() throws Exception { Query q1 = create.select(val(1)).from(TABLE1).where(FIELD_ID1.equal(val(2)));