class NotSerialized extends ValueJavaObject {

        private Object javaObject;

        private int displaySize = -1;

        NotSerialized(Object javaObject, byte[] v) {
            super(v);
            this.javaObject = javaObject;
        }

        @Override
        public void set(PreparedStatement prep, int parameterIndex) throws SQLException {
            prep.setObject(parameterIndex, getObject(), Types.JAVA_OBJECT);
        }

        @Override
        public byte[] getBytesNoCopy() {
            if (value == null) {
                value = Utils.serialize(javaObject);
            }
            return value;
        }

        @Override
        protected int compareSecure(Value v, CompareMode mode) {<FILL_FUNCTION_BODY>}

        @Override
        public String getString() {
            String str = getObject().toString();
            if (displaySize == -1) {
                displaySize = str.length();
            }
            return str;
        }

        @Override
        public long getPrecision() {
            return 0;
        }

        @Override
        public int hashCode() {
            if (hash == 0) {
                hash = getObject().hashCode();
            }
            return hash;
        }

        @Override
        public Object getObject() {
            if (javaObject == null) {
                javaObject = Utils.deserialize(value);
            }
            return javaObject;
        }

        @Override
        public int getDisplaySize() {
            if (displaySize == -1) {
                displaySize = getString().length();
            }
            return displaySize;
        }

        @Override
        public int getMemory() {
            if (value == null) {
                return DataType.getDataType(getType()).memory;
            }
            int mem = super.getMemory();
            if (javaObject != null) {
                mem *= 2;
            }
            return mem;
        }

        @Override
        public boolean equals(Object other) {
            if (!(other instanceof NotSerialized)) {
                return false;
            }
            return getObject().equals(((NotSerialized) other).getObject());
        }

        @Override
        public Value convertPrecision(long precision, boolean force) {
            return this;
        }
    }

            Object o1 = getObject();
            Object o2 = v.getObject();

            boolean o1Comparable = o1 instanceof Comparable;
            boolean o2Comparable = o2 instanceof Comparable;

            if (o1Comparable && o2Comparable
                    && Utils.haveCommonComparableSuperclass(o1.getClass(), o2.getClass())) {
                @SuppressWarnings("unchecked")
                Comparable<Object> c1 = (Comparable<Object>) o1;
                return c1.compareTo(o2);
            }

            // group by types
            if (o1.getClass() != o2.getClass()) {
                if (o1Comparable != o2Comparable) {
                    return o1Comparable ? -1 : 1;
                }
                return o1.getClass().getName().compareTo(o2.getClass().getName());
            }

            // compare hash codes
            int h1 = hashCode();
            int h2 = v.hashCode();

            if (h1 == h2) {
                if (o1.equals(o2)) {
                    return 0;
                }

                return Utils.compareNotNullSigned(getBytesNoCopy(), v.getBytesNoCopy());
            }

            return h1 > h2 ? 1 : -1;
        
<methods>public com.lealone.db.value.Value convertPrecision(long, boolean) ,public boolean equals(java.lang.Object) ,public static com.lealone.db.value.ValueBytes get(byte[]) ,public byte[] getBytes() ,public byte[] getBytesNoCopy() ,public int getDisplaySize() ,public int getMemory() ,public static com.lealone.db.value.ValueBytes getNoCopy(byte[]) ,public java.lang.Object getObject() ,public long getPrecision() ,public java.lang.String getSQL() ,public java.lang.String getString() ,public int getType() ,public int hashCode() ,public void set(java.sql.PreparedStatement, int) throws java.sql.SQLException<variables>private static final com.lealone.db.value.ValueBytes EMPTY,protected int hash,protected byte[] value