src/share/classes/javax/sql/rowset/serial/SerialClob.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 25,34 **** --- 25,36 ---- package javax.sql.rowset.serial; import java.sql.*; import java.io.*; + import java.util.Arrays; + import java.util.Objects; /** * A serialized mapping in the Java programming language of an SQL * <code>CLOB</code> value. * <P>
*** 58,68 **** /** * Internal Clob representation if SerialClob is initialized with a * Clob. Null if SerialClob is initialized with a char[]. */ ! private final Clob clob; /** * The length in characters of this <code>SerialClob</code> object's * internal array of characters. * --- 60,70 ---- /** * Internal Clob representation if SerialClob is initialized with a * Clob. Null if SerialClob is initialized with a char[]. */ ! private Clob clob; /** * The length in characters of this <code>SerialClob</code> object's * internal array of characters. *
*** 74,84 **** * The original length in characters of this <code>SerialClob</code> * object's internal array of characters. * * @serial */ ! private final long origLen; /** * Constructs a <code>SerialClob</code> object that is a serialized version of * the given <code>char</code> array. * <p> --- 76,86 ---- * The original length in characters of this <code>SerialClob</code> * object's internal array of characters. * * @serial */ ! private long origLen; /** * Constructs a <code>SerialClob</code> object that is a serialized version of * the given <code>char</code> array. * <p>
*** 511,520 **** --- 513,612 ---- } public void free() throws SQLException { throw new java.lang.UnsupportedOperationException("Not supported"); } + /** + * Compares this SerialClob to the specified object. The result is {@code + * true} if and only if the argument is not {@code null} and is a {@code + * SerialClob} object that represents the same sequence of characters as this + * object. + * + * @param obj + * The object to compare this {@code SerialClob} against + * + * @return {@code true} if the given object represents a {@code SerialClob} + * equivalent to this SerialClob, {@code false} otherwise + * + */ + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if(obj == null || !(obj instanceof SerialClob)) { + return false; + } + + SerialClob sc = (SerialClob)obj; + if(this.len == sc.len) { + return Arrays.equals(buf, sc.buf); + } + return false; + } + + /** + * Returns a hash code for this {@code SerialClob}. + * @return a hash code value for this object. + */ + public int hashCode() { + return Objects.hash(buf, len, origLen); + } + + /** + * Returns a clone of this {@code SerialClob}. The copy will contain a + * reference to a clone of the internal character array, not a reference + * to the original internal character array of this {@code SerialClob} object. + * The internal {@code Clob} field will be set to null. + * + * @return a clone of this SerialClob + */ + public Object clone() { + SerialClob sc = null; + try { + sc = (SerialClob) super.clone(); + sc.buf = Arrays.copyOf(buf, (int)len); + sc.clob = null; + + } catch (CloneNotSupportedException ex) { + // this shouldn't happen, since we are Cloneable + } + return sc; + } + + /** + * readObject is called to restore the state of the SerialClob from + * a stream. + */ + private void readObject(ObjectInputStream s) + throws IOException, ClassNotFoundException { + + ObjectInputStream.GetField fields = s.readFields(); + char[] tmp = (char[])fields.get("buf", null); + if (tmp == null) + throw new InvalidObjectException("buf is null and should not be!"); + buf = tmp.clone(); + len = fields.get("len", 0L); + origLen = fields.get("origLen", 0L); + clob = (Clob) fields.get("clob", null); + if(buf.length != len) + throw new InvalidObjectException("buf is not the expected size"); + } + + /** + * writeObject is called to save the state of the SerialClob + * to a stream. + */ + private void writeObject(ObjectOutputStream s) + throws IOException, ClassNotFoundException { + + ObjectOutputStream.PutField fields = s.putFields(); + fields.put("buf", buf); + fields.put("len", len); + fields.put("origLen", origLen); + fields.put("clob", clob instanceof Serializable ? clob : null); + s.writeFields(); + } /** * The identifier that assists in the serialization of this <code>SerialClob</code> * object. */