package net.sourceforge.mayfly.acceptance;
import net.sourceforge.mayfly.acceptance.expression.ValueTest;
/**
* @internal
* See {@link ValueTest} for insert cases not involving subselects
*/
public class InsertSubselectTest extends SqlTestCase {
public void testSubselect() throws Exception {
execute("create table src(d integer, e integer, f integer)");
execute("insert into src(d, e, f) values(1, 2, 3)");
execute("insert into src(d, e, f) values(11, 22, 33)");
execute("create table dest(a integer, b integer, c integer)");
execute("insert into dest(a, b) select f, e from src");
assertResultSet(new String[] { " 33, 22, null ", " 3, 2, null " },
query("select a, b, c from dest"));
}
public void testTooManyValues() throws Exception {
execute("create table src(d integer, e integer, f integer)");
execute("create table dest(a integer, b integer, c integer)");
expectExecuteFailure(
"insert into dest(a, b) select d, e, f from src",
"Too many values.\n" +
"Columns and values from subselect were:\n" +
"a d\n" +
"b e\n" +
"(none) f\n");
}
public void testTooFewValues() throws Exception {
execute("create table src(d integer, e integer, f integer)");
execute("create table dest(a integer, b integer, c integer)");
expectExecuteFailure(
"insert into dest(a, b) select d from src",
"Too few values.\n" +
"Columns and values from subselect were:\n" +
"a d\n" +
"b (none)\n");
}
public void testImplicitDestinationColumns() throws Exception {
execute("create table src(d integer, e integer, f integer)");
execute("insert into src(d, e, f) values(1, 2, 3)");
execute("create table dest(a integer, b integer, c integer)");
execute("insert into dest select d, e, f from src");
assertResultSet(new String[] { " 1, 2, 3 " },
query("select a, b, c from dest"));
}
public void testStillCheckCountWhenDestinationColumnsAreImplicit() throws Exception {
execute("create table src(d integer, e integer, f integer)");
execute("create table dest(a integer, b integer, c integer)");
expectExecuteFailure("insert into dest select d, e from src",
"Too few values.\n" +
"Columns and values from subselect were:\n" +
"a d\n" +
"b e\n" +
"c (none)\n");
}
public void testImplicitSourceColumns() throws Exception {
execute("create table src(d integer, e integer, f integer)");
execute("insert into src(d, e, f) values(1, 2, 3)");
execute("create table dest(a integer, b integer, c integer)");
execute("insert into dest(a, b, c) select * from src");
assertResultSet(new String[] { " 1, 2, 3 " },
query("select a, b, c from dest"));
}
public void testExpression() throws Exception {
execute("create table src(d integer, e integer)");
execute("insert into src(d, e) values(23, 37)");
execute("insert into src(d, e) values(7, 47)");
execute("create table dest(a integer)");
execute("insert into dest(a) select d + e from src");
assertResultSet(new String[] { " 60 ", " 54 " },
query("select a from dest"));
}
}