class QueryEntityEx extends QueryEntity {
    /** */
    private static final long serialVersionUID = 0L;

    /** Fields that must have non-null value. */
    private Set<String> notNullFields;

    /** Whether to preserve order specified by {@link #getKeyFields()} or not. */
    private boolean preserveKeysOrder;

    /** Whether a primary key should be autocreated or not. */
    private boolean implicitPk;

    /** Whether absent PK parts should be filled with defaults or not. */
    private boolean fillAbsentPKsWithDefaults;

    /** INLINE_SIZE for PK index. */
    private Integer pkInlineSize;

    /** INLINE_SIZE for affinity field index. */
    private Integer affKeyInlineSize;

    /**
     * Default constructor.
     */
    public QueryEntityEx() {
        // No-op.
    }

    /**
     * Copying constructor.
     *
     * @param other Instance to copy.
     */
    public QueryEntityEx(QueryEntity other) {
        super(other);

        if (other instanceof QueryEntityEx) {
            QueryEntityEx other0 = (QueryEntityEx)other;

            notNullFields = other0.notNullFields != null ? new HashSet<>(other0.notNullFields) : null;

            preserveKeysOrder = other0.preserveKeysOrder;

            implicitPk = other0.implicitPk;

            fillAbsentPKsWithDefaults = other0.fillAbsentPKsWithDefaults;
            pkInlineSize = other0.pkInlineSize != null ? other0.pkInlineSize : -1;
            affKeyInlineSize = other0.affKeyInlineSize != null ? other0.affKeyInlineSize : -1;
        }
    }

    /** {@inheritDoc} */
    @Override @Nullable public Set<String> getNotNullFields() {
        return notNullFields;
    }

    /** {@inheritDoc} */
    @Override public QueryEntity setNotNullFields(@Nullable Set<String> notNullFields) {
        this.notNullFields = notNullFields;

        return this;
    }

    /**
     * @return {@code true} if order should be preserved, {@code false} otherwise.
     */
    public boolean isPreserveKeysOrder() {
        return preserveKeysOrder;
    }

    /**
     * @param preserveKeysOrder Whether the order should be preserved or not.
     * @return {@code this} for chaining.
     */
    public QueryEntity setPreserveKeysOrder(boolean preserveKeysOrder) {
        this.preserveKeysOrder = preserveKeysOrder;

        return this;
    }

    /** */
    public boolean implicitPk() {
        return implicitPk;
    }

    /** */
    public QueryEntity implicitPk(boolean implicitPk) {
        this.implicitPk = implicitPk;

        return this;
    }

    /**
     * @return {@code true} if absent PK parts should be filled with defaults, {@code false} otherwise.
     */
    public boolean fillAbsentPKsWithDefaults() {
        return fillAbsentPKsWithDefaults;
    }

    /**
     * @param fillAbsentPKsWithDefaults Whether absent PK parts should be filled with defaults or not.
     * @return {@code this} for chaining.
     */
    public QueryEntity fillAbsentPKsWithDefaults(boolean fillAbsentPKsWithDefaults) {
        this.fillAbsentPKsWithDefaults = fillAbsentPKsWithDefaults;

        return this;
    }

    /**
     * Returns INLINE_SIZE for PK index.
     *
     * @return INLINE_SIZE for PK index.
     */
    public Integer getPrimaryKeyInlineSize() {
        return pkInlineSize;
    }

    /**
     * Sets INLINE_SIZE for PK index.
     *
     * @param pkInlineSize INLINE_SIZE for PK index, when {@code null} - inline size is calculated automativally.
     * @return {@code this} for chaining.
     */
    public QueryEntity setPrimaryKeyInlineSize(Integer pkInlineSize) {
        if (pkInlineSize != null && pkInlineSize < 0) {
            throw new CacheException("Inline size for sorted primary key cannot be negative. "
                + "[inlineSize=" + pkInlineSize + ']');
        }

        this.pkInlineSize = pkInlineSize;

        return this;
    }

    /**
     * Returns INLINE_SIZE for affinity field index.
     *
     * @return INLINE_SIZE for affinity field index.
     */
    public Integer getAffinityKeyInlineSize() {
        return affKeyInlineSize;
    }

    /**
     * Sets INLINE_SIZE for AFFINITY_KEY index.
     *
     * @param affKeyInlineSize INLINE_SIZE for AFFINITY_KEY index, when {@code null} - inline size is calculated automativally.
     * @return {@code this} for chaining.
     */
    public QueryEntity setAffinityKeyInlineSize(Integer affKeyInlineSize) {<FILL_FUNCTION_BODY>}

    /** {@inheritDoc} */
    @Override public boolean equals(Object o) {
        if (this == o)
            return true;

        if (o == null || getClass() != o.getClass())
            return false;

        QueryEntityEx entity = (QueryEntityEx)o;

        return super.equals(entity) && F.eq(notNullFields, entity.notNullFields)
            && preserveKeysOrder == entity.preserveKeysOrder
            && implicitPk == entity.implicitPk
            && F.eq(pkInlineSize, entity.pkInlineSize)
            && F.eq(affKeyInlineSize, entity.affKeyInlineSize);
    }

    /** {@inheritDoc} */
    @Override public int hashCode() {
        int res = super.hashCode();

        res = 31 * res + (notNullFields != null ? notNullFields.hashCode() : 0);
        res = 31 * res + (preserveKeysOrder ? 1 : 0);
        res = 31 * res + (implicitPk ? 1 : 0);
        res = 31 * res + (pkInlineSize != null ? pkInlineSize.hashCode() : 0);
        res = 31 * res + (affKeyInlineSize != null ? affKeyInlineSize.hashCode() : 0);
        return res;
    }

    /** {@inheritDoc} */
    @Override public String toString() {
        return S.toString(QueryEntityEx.class, this);
    }
}

        if (affKeyInlineSize != null && affKeyInlineSize < 0) {
            throw new CacheException("Inline size for affinity fieled index cannot be negative. "
                + "[inlineSize=" + affKeyInlineSize + ']');
        }

        this.affKeyInlineSize = affKeyInlineSize;

        return this;
    
<methods>public void <init>() ,public void <init>(org.apache.ignite.cache.QueryEntity) ,public void <init>(java.lang.String, java.lang.String) ,public void <init>(Class<?>, Class<?>) ,public org.apache.ignite.cache.QueryEntity addQueryField(java.lang.String, java.lang.String, java.lang.String) ,public boolean equals(java.lang.Object) ,public java.lang.String findKeyType() ,public java.lang.String findValueType() ,public Map<java.lang.String,java.lang.String> getAliases() ,public Map<java.lang.String,java.lang.Object> getDefaultFieldValues() ,public LinkedHashMap<java.lang.String,java.lang.String> getFields() ,public Map<java.lang.String,java.lang.Integer> getFieldsPrecision() ,public Map<java.lang.String,java.lang.Integer> getFieldsScale() ,public Collection<org.apache.ignite.cache.QueryIndex> getIndexes() ,public java.lang.String getKeyFieldName() ,public Set<java.lang.String> getKeyFields() ,public java.lang.String getKeyType() ,public Set<java.lang.String> getNotNullFields() ,public java.lang.String getTableName() ,public java.lang.String getValueFieldName() ,public java.lang.String getValueType() ,public int hashCode() ,public org.apache.ignite.cache.QueryEntityPatch makePatch(org.apache.ignite.cache.QueryEntity) ,public org.apache.ignite.cache.QueryEntity setAliases(Map<java.lang.String,java.lang.String>) ,public org.apache.ignite.cache.QueryEntity setDefaultFieldValues(Map<java.lang.String,java.lang.Object>) ,public org.apache.ignite.cache.QueryEntity setFields(LinkedHashMap<java.lang.String,java.lang.String>) ,public org.apache.ignite.cache.QueryEntity setFieldsPrecision(Map<java.lang.String,java.lang.Integer>) ,public org.apache.ignite.cache.QueryEntity setFieldsScale(Map<java.lang.String,java.lang.Integer>) ,public org.apache.ignite.cache.QueryEntity setIndexes(Collection<org.apache.ignite.cache.QueryIndex>) ,public org.apache.ignite.cache.QueryEntity setKeyFieldName(java.lang.String) ,public org.apache.ignite.cache.QueryEntity setKeyFields(Set<java.lang.String>) ,public org.apache.ignite.cache.QueryEntity setKeyType(java.lang.String) ,public org.apache.ignite.cache.QueryEntity setNotNullFields(Set<java.lang.String>) ,public org.apache.ignite.cache.QueryEntity setTableName(java.lang.String) ,public org.apache.ignite.cache.QueryEntity setValueFieldName(java.lang.String) ,public org.apache.ignite.cache.QueryEntity setValueType(java.lang.String) ,public java.lang.String toString() <variables>private Set<java.lang.String> _notNullFields,private Map<java.lang.String,java.lang.String> aliases,private Map<java.lang.String,java.lang.Object> defaultFieldValues,private LinkedHashMap<java.lang.String,java.lang.String> fields,private Map<java.lang.String,java.lang.Integer> fieldsPrecision,private Map<java.lang.String,java.lang.Integer> fieldsScale,private Collection<org.apache.ignite.cache.QueryIndex> idxs,private java.lang.String keyFieldName,private Set<java.lang.String> keyFields,private java.lang.String keyType,private static final long serialVersionUID,private java.lang.String tableName,private java.lang.String valType,private java.lang.String valueFieldName