001: /*
002: Copyright (C) 2002-2007 MySQL AB
003:
004: This program is free software; you can redistribute it and/or modify
005: it under the terms of version 2 of the GNU General Public License as
006: published by the Free Software Foundation.
007:
008: There are special exceptions to the terms and conditions of the GPL
009: as it is applied to this software. View the full text of the
010: exception in file EXCEPTIONS-CONNECTOR-J in the directory of this
011: software distribution.
012:
013: This program is distributed in the hope that it will be useful,
014: but WITHOUT ANY WARRANTY; without even the implied warranty of
015: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016: GNU General Public License for more details.
017:
018: You should have received a copy of the GNU General Public License
019: along with this program; if not, write to the Free Software
020: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
021:
022:
023:
024: */
025: package com.mysql.jdbc;
026:
027: import java.sql.SQLException;
028: import java.util.ArrayList;
029: import java.util.List;
030:
031: /**
032: * Represents an in-memory result set
033: *
034: * @author dgan
035: * @version $Id: RowDataStatic.java 6451 2007-06-15 01:24:27Z mmatthews $
036: */
037: public class RowDataStatic implements RowData {
038: private Field[] metadata;
039:
040: private int index;
041:
042: ResultSetImpl owner;
043:
044: private List rows;
045:
046: /**
047: * Creates a new RowDataStatic object.
048: *
049: * @param rows
050: * DOCUMENT ME!
051: */
052: public RowDataStatic(List rows) {
053: this .index = -1;
054: this .rows = rows;
055: }
056:
057: /**
058: * DOCUMENT ME!
059: *
060: * @param row
061: * DOCUMENT ME!
062: */
063: public void addRow(ResultSetRow row) {
064: this .rows.add(row);
065: }
066:
067: /**
068: * Moves to after last.
069: */
070: public void afterLast() {
071: this .index = this .rows.size();
072: }
073:
074: /**
075: * Moves to before first.
076: */
077: public void beforeFirst() {
078: this .index = -1;
079: }
080:
081: /**
082: * DOCUMENT ME!
083: */
084: public void beforeLast() {
085: this .index = this .rows.size() - 2;
086: }
087:
088: /**
089: * DOCUMENT ME!
090: */
091: public void close() {
092: }
093:
094: /**
095: * DOCUMENT ME!
096: *
097: * @param atIndex
098: * DOCUMENT ME!
099: *
100: * @return DOCUMENT ME!
101: */
102: public ResultSetRow getAt(int atIndex) {
103: if ((atIndex < 0) || (atIndex >= this .rows.size())) {
104: return null;
105: }
106:
107: return (ResultSetRow) this .rows.get(atIndex);
108: }
109:
110: /**
111: * DOCUMENT ME!
112: *
113: * @return DOCUMENT ME!
114: */
115: public int getCurrentRowNumber() {
116: return this .index;
117: }
118:
119: /**
120: * @see com.mysql.jdbc.RowData#getOwner()
121: */
122: public ResultSetInternalMethods getOwner() {
123: return this .owner;
124: }
125:
126: /**
127: * DOCUMENT ME!
128: *
129: * @return DOCUMENT ME!
130: */
131: public boolean hasNext() {
132: boolean hasMore = (this .index + 1) < this .rows.size();
133:
134: return hasMore;
135: }
136:
137: /**
138: * Returns true if we got the last element.
139: *
140: * @return DOCUMENT ME!
141: */
142: public boolean isAfterLast() {
143: return this .index >= this .rows.size();
144: }
145:
146: /**
147: * Returns if iteration has not occured yet.
148: *
149: * @return DOCUMENT ME!
150: */
151: public boolean isBeforeFirst() {
152: return (this .index == -1) && (this .rows.size() != 0);
153: }
154:
155: /**
156: * DOCUMENT ME!
157: *
158: * @return DOCUMENT ME!
159: */
160: public boolean isDynamic() {
161: return false;
162: }
163:
164: /**
165: * DOCUMENT ME!
166: *
167: * @return DOCUMENT ME!
168: */
169: public boolean isEmpty() {
170: return this .rows.size() == 0;
171: }
172:
173: /**
174: * DOCUMENT ME!
175: *
176: * @return DOCUMENT ME!
177: */
178: public boolean isFirst() {
179: return this .index == 0;
180: }
181:
182: /**
183: * DOCUMENT ME!
184: *
185: * @return DOCUMENT ME!
186: */
187: public boolean isLast() {
188: //
189: // You can never be on the 'last' row of
190: // an empty result set
191: //
192: if (this .rows.size() == 0) {
193: return false;
194: }
195:
196: return (this .index == (this .rows.size() - 1));
197: }
198:
199: /**
200: * DOCUMENT ME!
201: *
202: * @param rows
203: * DOCUMENT ME!
204: */
205: public void moveRowRelative(int rowsToMove) {
206: this .index += rowsToMove;
207: }
208:
209: /**
210: * DOCUMENT ME!
211: *
212: * @return DOCUMENT ME!
213: */
214: public ResultSetRow next() throws SQLException {
215: this .index++;
216:
217: if (this .index < this .rows.size()) {
218: ResultSetRow row = (ResultSetRow) this .rows.get(this .index);
219: row.setMetadata(this .metadata);
220:
221: return row;
222: }
223:
224: return null;
225: }
226:
227: /**
228: * DOCUMENT ME!
229: *
230: * @param atIndex
231: * DOCUMENT ME!
232: */
233: public void removeRow(int atIndex) {
234: this .rows.remove(atIndex);
235: }
236:
237: /**
238: * DOCUMENT ME!
239: *
240: * @param newIndex
241: * DOCUMENT ME!
242: */
243: public void setCurrentRow(int newIndex) {
244: this .index = newIndex;
245: }
246:
247: /**
248: * @see com.mysql.jdbc.RowData#setOwner(com.mysql.jdbc.ResultSetInternalMethods)
249: */
250: public void setOwner(ResultSetImpl rs) {
251: this .owner = rs;
252: }
253:
254: /**
255: * DOCUMENT ME!
256: *
257: * @return DOCUMENT ME!
258: */
259: public int size() {
260: return this .rows.size();
261: }
262:
263: public boolean wasEmpty() {
264: return (this .rows != null && this .rows.size() == 0);
265: }
266:
267: public void setMetadata(Field[] metadata) {
268: this.metadata = metadata;
269: }
270: }
|