package SQLite;

import java.util.Vector;

/**
 * Class representing an SQLite result set as
 * returned by the
 * <A HREF="Database.html#get_table(java.lang.String)">Database.get_table</A>
 * convenience method.
 * <BR><BR>
 * Example:<BR>
 *
 * <PRE>
 *   ...
 *   SQLite.Database db = new SQLite.Database();
 *   db.open("db", 0);
 *   System.out.print(db.get_table("select * from TEST"));
 *   ...
 * </PRE>
 * Example output:<BR>
 *
 * <PRE>
 *   id|firstname|lastname|
 *   0|John|Doe|
 *   1|Speedy|Gonzales|
 *   ...
 * </PRE>
 */

public class TableResult implements Callback {

    /**
     * Number of columns in the result set.
     */

    public int ncolumns;

    /**
     * Number of rows in the result set.
     */

    public int nrows;

    /**
     * Column names of the result set.
     */

    public String column[];

    /**
     * Types of columns of the result set or null.
     */

    public String types[];

    /**
     * Rows of the result set. Each row is stored as a String array.
     */

    public Vector rows;

    /**
     * Create an empty result set.
     */

    public TableResult() {
    clear();
    }

    /**
     * Clear result set.
     */

    public void clear() {
    column = new String[0];
    types = null;
    rows = new Vector();
    ncolumns = nrows = 0;
    }

    /**
     * Callback method used while the query is executed.
     */

    public void columns(String coldata[]) {
    column = coldata;
    ncolumns = column.length;
    }

    /**
     * Callback method used while the query is executed.
     */

    public void types(String types[]) {
    this.types = types;
    }

    /**
     * Callback method used while the query is executed.
     */

    public boolean newrow(String rowdata[]) {
    if (rowdata != null) {
        rows.addElement(rowdata);
        nrows++;
    }
    return false;
    }

    /**
     * Make String representation of result set.
     */

    public String toString() {
    StringBuffer sb = new StringBuffer();
    int i;
    for (i = 0; i < ncolumns; i++) {
        sb.append(column[i] == null ? "NULL" : column[i]);
        sb.append('|');
    }
    sb.append('\n');
    for (i = 0; i < nrows; i++) {
        int k;
        String row[] = (String[]) rows.elementAt(i);
        for (k = 0; k < ncolumns; k++) {
        sb.append(row[k] == null ? "NULL" : row[k]);
        sb.append('|');
        }
        sb.append('\n');
    }
    return sb.toString();
    }
}
