/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.api;
import java.sql.SQLException;
import java.util.EventListener;
/**
* A class that implements this interface can get notified about exceptions
* and other events. A database event listener can be registered when
* connecting to a database. Example database URL:
* jdbc:h2:test;DATABASE_EVENT_LISTENER='com.acme.DbListener'
*/
public interface DatabaseEventListener extends EventListener {
/**
* This state is used when scanning the database file.
*/
int STATE_SCAN_FILE = 0;
/**
* This state is used when re-creating an index.
*/
int STATE_CREATE_INDEX = 1;
/**
* This state is used when re-applying the transaction log or rolling back
* uncommitted transactions.
*/
int STATE_RECOVER = 2;
/**
* This state is used during the BACKUP command.
*/
int STATE_BACKUP_FILE = 3;
/**
* This state is used after re-connecting to a database (if auto-reconnect
* is enabled).
*/
int STATE_RECONNECTED = 4;
/**
* This state is used when a query starts.
*/
int STATE_STATEMENT_START = 5;
/**
* This state is used when a query ends.
*/
int STATE_STATEMENT_END = 6;
/**
* This state is used for periodic notification during long-running queries.
*/
int STATE_STATEMENT_PROGRESS = 7;
/**
* This method is called just after creating the object.
* This is done when opening the database if the listener is specified
* in the database URL, but may be later if the listener is set at
* runtime with the SET SQL statement.
*
* @param url - the database URL
*/
void init(String url);
/**
* This method is called after the database has been opened.
* It is save to connect to the database and execute statements at this point.
*/
void opened();
/**
* This method is called if an exception occurred.
*
* @param e the exception
* @param sql the SQL statement
*/
void exceptionThrown(SQLException e, String sql);
/**
* This method is called for long running events, such as recovering,
* scanning a file or building an index.
* <p>
* More states might be added in future versions, therefore implementations
* should silently ignore states that they don't understand.
* </p>
*
* @param state the state
* @param name the object name
* @param x the current position
* @param max the highest possible value (might be 0)
*/
void setProgress(int state, String name, int x, int max);
/**
* This method is called before the database is closed normally. It is save
* to connect to the database and execute statements at this point, however
* the connection must be closed before the method returns.
*/
void closingDatabase();
}