package jsqlite;

/**
 * Class to represent compiled SQLite VM.
 */

public class Vm {

    /**
     * Internal handle for the compiled SQLite VM.
     */

    private long handle = 0;

    /**
     * Internal last error code for compile()/step() methods.
     */

    protected int error_code = 0;

    /**
     * Perform one step on compiled SQLite VM.
     * The result row is passed to the given callback interface.<BR><BR>
     *
     * Example:<BR>
     * <PRE>
     *   ...
     *   try {
     *     Vm vm = db.compile("select * from x; select * from y;");
     *     while (vm.step(cb)) {
     *       ...
     *     }
     *     while (vm.compile()) {
     *       while (vm.step(cb)) {
     *         ...
     *       }
     *     }
     *   } catch (SQLite.Exception e) {
     *   }
     * </PRE>
     *
     * @param cb the object implementing the callback methods.
     * @return true as long as more row data can be retrieved,
     * false, otherwise.
     */

    public native boolean step(Callback cb) throws jsqlite.Exception;

    /**
     * Compile the next SQL statement for the SQLite VM instance.
     * @return true when SQL statement has been compiled, false
     * on end of statement sequence.
     */

    public native boolean compile() throws jsqlite.Exception;

    /**
     * Abort the compiled SQLite VM.
     */

    public native void stop() throws jsqlite.Exception;

    /**
     * Destructor for object.
     */

    protected native void finalize();

    /**
     * Internal native initializer.
     */

    private static native void internal_init();

    static {
	internal_init();
    }
}
