diff options
Diffstat (limited to 'src/test/java/com')
3 files changed, 96 insertions, 0 deletions
diff --git a/src/test/java/com/amazon/carbonado/TestStorables.java b/src/test/java/com/amazon/carbonado/TestStorables.java index 3570e26..70cef19 100644 --- a/src/test/java/com/amazon/carbonado/TestStorables.java +++ b/src/test/java/com/amazon/carbonado/TestStorables.java @@ -1546,6 +1546,34 @@ public class TestStorables extends TestCase {          assertEquals(0, query.with(0.2).count());      } +    public void test_basicDerivedJoinIndex() throws Exception { +        test_basicDerivedJoinIndex(getRepository()); +    } + +    protected void test_basicDerivedJoinIndex(Repository repo) throws Exception { +        Storage<WithJoinIndex> storage1 = repo.storageFor(WithJoinIndex.class); +        Storage<WithJoinIndex.Basic> storage2 = repo.storageFor(WithJoinIndex.Basic.class); + +        WithJoinIndex.Basic basic = storage2.prepare(); +        basic.setId(128120938); +        basic.setIntProp(999); +        basic.insert(); + +        WithJoinIndex join = storage1.prepare(); +        join.setId(1); +        join.setBasic(basic); +        join.insert(); + +        join = storage1.query("intProp = ?").with(999).loadOne(); + +        // Make sure delete does cause dependent properties to try load a +        // missing joined object. +        basic.delete(); + +        join = storage1.query("intProp = ?").with(999).tryLoadOne(); +        assertNull(join); +    } +      public void test_derivedJoinIndex() throws Exception {          test_derivedJoinIndex(getRepository());      } diff --git a/src/test/java/com/amazon/carbonado/repo/jdbc/TestH2.java b/src/test/java/com/amazon/carbonado/repo/jdbc/TestH2.java index f7b5580..b1e8d09 100644 --- a/src/test/java/com/amazon/carbonado/repo/jdbc/TestH2.java +++ b/src/test/java/com/amazon/carbonado/repo/jdbc/TestH2.java @@ -69,6 +69,16 @@ public class TestH2 extends com.amazon.carbonado.TestStorables {      }
      @Override
 +    public void test_basicDerivedJoinIndex() throws Exception {
 +        // Needs to use custom indexing for this test to work.
 +        IndexedRepositoryBuilder builder = new IndexedRepositoryBuilder();
 +        builder.setWrappedRepository(jdbcBuilder(true));
 +        Repository repo = builder.build();
 +        test_basicDerivedJoinIndex(repo);
 +    }
 +
 +
 +    @Override
      protected Repository buildRepository(boolean isMaster) throws RepositoryException {
          return jdbcBuilder(isMaster).build();
      }
 diff --git a/src/test/java/com/amazon/carbonado/stored/WithJoinIndex.java b/src/test/java/com/amazon/carbonado/stored/WithJoinIndex.java new file mode 100644 index 0000000..17e6eff --- /dev/null +++ b/src/test/java/com/amazon/carbonado/stored/WithJoinIndex.java @@ -0,0 +1,58 @@ +/*
 + * Copyright 2009 Amazon Technologies, Inc. or its affiliates.
 + * Amazon, Amazon.com and Carbonado are trademarks or registered trademarks
 + * of Amazon Technologies, Inc. or its affiliates.  All rights reserved.
 + *
 + * Licensed under the Apache License, Version 2.0 (the "License");
 + * you may not use this file except in compliance with the License.
 + * You may obtain a copy of the License at
 + *
 + *     http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing, software
 + * distributed under the License is distributed on an "AS IS" BASIS,
 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 + * See the License for the specific language governing permissions and
 + * limitations under the License.
 + */
 +
 +package com.amazon.carbonado.stored;
 +
 +import com.amazon.carbonado.*;
 +
 +/**
 + * 
 + *
 + * @author Brian S O'Neill
 + */
 +@PrimaryKey("id")
 +@Indexes({@Index("intProp")})
 +public abstract class WithJoinIndex implements Storable {
 +    public abstract int getId();
 +    public abstract void setId(int id);
 +
 +    public abstract int getBasicId();
 +    public abstract void setBasicId(int id);
 +
 +    @Join(internal="basicId", external="id")
 +    public abstract Basic getBasic() throws FetchException;
 +    public abstract void setBasic(Basic basic);
 +
 +    @Derived(from="basic.intProp")
 +    public int getIntProp() throws FetchException {
 +        return getBasic().getIntProp();
 +    }
 +
 +    @Alias("WITH_BASIC")
 +    @PrimaryKey("id")
 +    public static interface Basic extends Storable {
 +        int getId();
 +        void setId(int id);
 +
 +        int getIntProp();
 +        void setIntProp(int anInt);
 +
 +        @Join(internal="id", external="basicId")
 +        Query<WithJoinIndex> getParent() throws FetchException;
 +    }
 +}
  | 
