1package SQLite;
2
3import java.util.Vector;
4
5/**
6 * Class representing an SQLite result set as
7 * returned by the
8 * <A HREF="Database.html#get_table(java.lang.String)">Database.get_table</A>
9 * convenience method.
10 * <BR><BR>
11 * Example:<BR>
12 *
13 * <PRE>
14 *   ...
15 *   SQLite.Database db = new SQLite.Database();
16 *   db.open("db", 0);
17 *   System.out.print(db.get_table("select * from TEST"));
18 *   ...
19 * </PRE>
20 * Example output:<BR>
21 *
22 * <PRE>
23 *   id|firstname|lastname|
24 *   0|John|Doe|
25 *   1|Speedy|Gonzales|
26 *   ...
27 * </PRE>
28 */
29
30public class TableResult implements Callback {
31
32    /**
33     * Number of columns in the result set.
34     */
35
36    public int ncolumns;
37
38    /**
39     * Number of rows in the result set.
40     */
41
42    public int nrows;
43
44    /**
45     * Column names of the result set.
46     */
47
48    public String column[];
49
50    /**
51     * Types of columns of the result set or null.
52     */
53
54    public String types[];
55
56    /**
57     * Rows of the result set. Each row is stored as a String array.
58     */
59
60    public Vector rows;
61
62    /**
63     * Maximum number of rows to hold in the table.
64     */
65
66    public int maxrows = 0;
67
68    /**
69     * Flag to indicate Maximum number of rows condition.
70     */
71
72    public boolean atmaxrows;
73
74    /**
75     * Create an empty result set.
76     */
77
78    public TableResult() {
79	clear();
80    }
81
82    /**
83     * Create an empty result set with maximum number of rows.
84     */
85
86    public TableResult(int maxrows) {
87	this.maxrows = maxrows;
88	clear();
89    }
90
91    /**
92     * Clear result set.
93     */
94
95    public void clear() {
96	column = new String[0];
97	types = null;
98	rows = new Vector();
99	ncolumns = nrows = 0;
100	atmaxrows = false;
101    }
102
103    /**
104     * Callback method used while the query is executed.
105     */
106
107    public void columns(String coldata[]) {
108	column = coldata;
109	ncolumns = column.length;
110    }
111
112    /**
113     * Callback method used while the query is executed.
114     */
115
116    public void types(String types[]) {
117	this.types = types;
118    }
119
120    /**
121     * Callback method used while the query is executed.
122     */
123
124    public boolean newrow(String rowdata[]) {
125	if (rowdata != null) {
126	    if (maxrows > 0 && nrows >= maxrows) {
127		atmaxrows = true;
128		return true;
129	    }
130	    rows.addElement(rowdata);
131	    nrows++;
132	}
133	return false;
134    }
135
136    /**
137     * Make String representation of result set.
138     */
139
140    public String toString() {
141	StringBuffer sb = new StringBuffer();
142	int i;
143	for (i = 0; i < ncolumns; i++) {
144	    sb.append(column[i] == null ? "NULL" : column[i]);
145	    sb.append('|');
146	}
147	sb.append('\n');
148	for (i = 0; i < nrows; i++) {
149	    int k;
150	    String row[] = (String[]) rows.elementAt(i);
151	    for (k = 0; k < ncolumns; k++) {
152		sb.append(row[k] == null ? "NULL" : row[k]);
153		sb.append('|');
154	    }
155	    sb.append('\n');
156	}
157	return sb.toString();
158    }
159}
160