code: public ChainedProperty<S> append(StorableProperty<?> property, boolean outerJoin) {
          if (property == null) {
              throw new IllegalArgumentException();
          }
  
          StorableProperty<?>[] newChain = new StorableProperty[getChainCount() + 1];
          if (newChain.length > 1) {
              System.arraycopy(mChain, 0, newChain, 0, mChain.length);
          }
          newChain[newChain.length - 1] = property;
  
          boolean[] newOuterJoin = mOuterJoin;
  
          if (outerJoin) {
              newOuterJoin = new boolean[newChain.length + 1];
              if (mOuterJoin != null) {
                  System.arraycopy(mOuterJoin, 0, newOuterJoin, 0, mOuterJoin.length);
              }
              newOuterJoin[newOuterJoin.length - 1] = true;
          }
  
          return get(mPrime, newChain, newOuterJoin);
      }
docs: Returns a new ChainedProperty with another property appended.
  
  @param outerJoin pass true for outer join
  @since 1.2