/** * Copyright (C) 2009-2013 FoundationDB, LLC * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.foundationdb.ais.model.validation; import java.util.Collection; import java.util.LinkedList; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.foundationdb.ais.model.aisb2.AISBBasedBuilder; import com.foundationdb.ais.model.aisb2.NewAISBuilder; import com.foundationdb.server.error.ErrorCode; import com.foundationdb.server.types.mcompat.mtypes.MTypesTranslator; public class JoinToParentPKTest { private LinkedList<AISValidation>validations; private NewAISBuilder builder; @Before public void createValidations () { validations = new LinkedList<>(); validations.add(AISValidations.JOIN_TO_PARENT_PK); validations.add(AISValidations.JOIN_COLUMN_TYPES_MATCH); builder = AISBBasedBuilder.create("test", MTypesTranslator.INSTANCE); builder.table("t1").colInt("c1").colString("c2", 10).pk("c1"); builder.table("t2").colInt("c1").colString("c2", 10).pk("c1", "c2"); builder.table("t3").colInt("c1").colString("c2", 10); } @Test public void joinOneColumnValid() { builder.table("j1").colInt("c1").colInt("c2").pk("c1").joinTo("t1").on("c2", "c1"); Assert.assertEquals(0, builder.unvalidatedAIS().validate(validations).failures().size()); } @Test public void joinTwoColumnValid() { builder.table("j2").colInt("c1").colString("c2", 10).pk("c1").joinTo("t2").on("c1", "c1").and("c2", "c2"); Assert.assertEquals(0, builder.unvalidatedAIS().validate(validations).failures().size()); } @Test public void joinNoPKFailed() { builder.table("j3").colInt("c1").joinTo("t3").on("c1", "c1"); Collection<AISValidationFailure> failures = builder.unvalidatedAIS().validate(validations).failures(); Assert.assertEquals(1, failures.size()); AISValidationFailure fail = failures.iterator().next(); Assert.assertEquals(ErrorCode.JOIN_PARENT_NO_PK, fail.errorCode()); } @Test public void joinOneToTwoMismatch() { builder.table("j4").colInt("c1").joinTo("t2").on("c1", "c1"); Collection<AISValidationFailure> failures = builder.unvalidatedAIS().validate(validations).failures(); Assert.assertEquals(1, failures.size()); AISValidationFailure fail = failures.iterator().next(); Assert.assertEquals(ErrorCode.JOIN_COLUMN_MISMATCH, fail.errorCode()); } @Test public void joinTwoToOneMismatch() { builder.table("j5").colInt("c1").colString("c2", 10).joinTo("t1").on("c1","c1").and("c2", "c2"); Collection<AISValidationFailure> failures = builder.unvalidatedAIS().validate(validations).failures(); Assert.assertEquals(1, failures.size()); AISValidationFailure fail = failures.iterator().next(); Assert.assertEquals(ErrorCode.JOIN_COLUMN_MISMATCH, fail.errorCode()); } @Test public void joinColumnsMismatch () { builder.table("j6").colInt("c1").colString("c2", 10).joinTo("t2").on("c2", "c1").and("c1", "c2"); Collection<AISValidationFailure> failures = builder.unvalidatedAIS().validate(validations).failures(); Assert.assertEquals(2, failures.size()); } @Test public void joinOrderMismatch() { builder.table("j7").colInt("c1").colString("c2", 10).joinTo("t2").on("c2", "c2").and("c1", "c1"); Collection<AISValidationFailure> failures = builder.unvalidatedAIS().validate(validations).failures(); Assert.assertEquals(2, failures.size()); } @Test public void joinToNonPKColumns() { builder.table("j8").colInt("c1").colString("c2", 10).joinTo("t1").on("c2", "c2"); Collection<AISValidationFailure> failures = builder.unvalidatedAIS().validate(validations).failures(); Assert.assertEquals(1, failures.size()); AISValidationFailure fail = failures.iterator().next(); Assert.assertEquals(ErrorCode.JOIN_TO_WRONG_COLUMNS, fail.errorCode()); } }