01: /**
02: * com.mckoi.database.global.Ref 30 Jan 2003
03: *
04: * Mckoi SQL Database ( http://www.mckoi.com/database )
05: * Copyright (C) 2000, 2001, 2002 Diehl and Associates, Inc.
06: *
07: * This program is free software; you can redistribute it and/or
08: * modify it under the terms of the GNU General Public License
09: * Version 2 as published by the Free Software Foundation.
10: *
11: * This program is distributed in the hope that it will be useful,
12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14: * GNU General Public License Version 2 for more details.
15: *
16: * You should have received a copy of the GNU General Public License
17: * Version 2 along with this program; if not, write to the Free Software
18: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19: *
20: * Change Log:
21: *
22: *
23: */package com.mckoi.database.global;
24:
25: import java.io.IOException;
26:
27: /**
28: * An interface that represents a reference to a object that isn't stored in
29: * main memory. The reference to the object is made through the id value
30: * returned by the 'getID' method.
31: *
32: * @author Tobias Downer
33: */
34:
35: public interface Ref {
36:
37: /**
38: * An id used to reference this object in the context of the database. Note
39: * that once a static reference is made (or removed) to/from this object, the
40: * BlobStore should be notified of the reference. The store will remove an
41: * large object that has no references to it.
42: */
43: long getID();
44:
45: /**
46: * The type of large object that is being referenced. 2 = binary object,
47: * 3 = ASCII character object, 4 = Unicode character object.
48: */
49: byte getType();
50:
51: /**
52: * The 'raw' size of this large object in bytes when it is in its byte[]
53: * form. This value allows us to know how many bytes we can read from this
54: * large object when it's being transferred to the client.
55: */
56: long getRawSize();
57:
58: /**
59: * Reads a part of this large object from the store into the given byte
60: * buffer. This method should only be used when reading a large object
61: * to transfer to the JDBC driver. It represents the byte[] representation
62: * of the object only and is only useful for transferral of the large object.
63: */
64: void read(long offset, byte[] buf, int length) throws IOException;
65:
66: /**
67: * This method is used to write the contents of the large object into the
68: * backing store. This method will only work when the large object is in
69: * an initial 'write' phase in which the client is pushing the contents of
70: * the large object onto the server to be stored.
71: */
72: void write(long offset, byte[] buf, int length) throws IOException;
73:
74: /**
75: * This method is called when the write phrase has completed, and it marks
76: * this large object as complete. After this method is called the large
77: * object reference is a static object that can not be changed.
78: */
79: void complete() throws IOException;
80:
81: }
|