提交 06fb1080 authored 作者: Thomas Mueller's avatar Thomas Mueller

Remove unused code.

上级 a1f890af
......@@ -18,7 +18,8 @@ Change Log
<h1>Change Log</h1>
<h2>Next Version (unreleased)</h2>
<ul><li>A workaround for a Windows socket problem has been implemented. Thanks a lot to Sergi Vladykin.
<ul><li>H2 Console: asynchronous login (using a DatabaseEventListener) is no longer supported.
</li><li>A workaround for a Windows socket problem has been implemented. Thanks a lot to Sergi Vladykin.
</li><li>The Recover tool did not convert correctly convert CLOB data with non-ASCII characters.
</li><li>Tools: the method run(String... args) has been renamed to runTool(String... args)
so it can't be confused with run().
......
......@@ -31,7 +31,7 @@ See also <a href="build.html#providing_patches">Providing Patches</a>.
<h2>Priority 1</h2>
<ul>
<li>Bugfixes
</li><li>Issue 157: Support large inserts and updates (use the transaction log for rollback).
</li><li>Issues 161, 157: Support large inserts and updates (use the transaction log for rollback).
Problems: Session.commit (rows), cache, undoLog.
</li><li>More tests with MULTI_THREADED=1
</li><li>Optimization: result set caching (like MySQL); option to disable
......@@ -478,6 +478,7 @@ See also <a href="build.html#providing_patches">Providing Patches</a>.
</li><li>TCP Server: use a nonce (number used once) to protect unencrypted channels against replay attacks.
</li><li>Simplify running scripts and recovery: CREATE FORCE USER (overwrites an existing user).
</li><li>Support CREATE DATABASE LINK (a custom JDBC driver is already supported).
</li><li>Isse 163: Allow to create foreign keys on metadata types.
</li></ul>
<h2>Not Planned</h2>
......
......@@ -152,15 +152,6 @@ public abstract class Query extends Prepared {
*/
public abstract void setDistinct(boolean b);
/**
* Get the alias (or column name) of the first column.
* This is used to convert IN(SELECT ...) queries to inner joins.
*
* @param s the session
* @return the alias or column name
*/
public abstract String getFirstColumnAlias(Session s);
/**
* Check if this expression and all sub-expressions can fulfill a criteria.
* If any part returns false, the result is false.
......
......@@ -191,10 +191,6 @@ public abstract class ScriptBase extends Prepared implements DataHandler {
return null;
}
public int getChecksum(byte[] data, int start, int end) {
return session.getDatabase().getChecksum(data, start, end);
}
public void checkPowerOff() throws SQLException {
session.getDatabase().checkPowerOff();
}
......
......@@ -15,9 +15,7 @@ import org.h2.api.Trigger;
import org.h2.constant.ErrorCode;
import org.h2.constant.SysProperties;
import org.h2.engine.Constants;
import org.h2.engine.Mode;
import org.h2.engine.Session;
import org.h2.expression.Alias;
import org.h2.expression.Comparison;
import org.h2.expression.ConditionAndOr;
import org.h2.expression.Expression;
......@@ -1101,21 +1099,4 @@ public class Select extends Query {
return isEverything(ExpressionVisitor.READONLY);
}
public String getFirstColumnAlias(Session s) {
if (SysProperties.CHECK) {
if (visibleColumnCount > 1) {
Message.throwInternalError("" + visibleColumnCount);
}
}
Expression expr = expressions.get(0);
if (expr instanceof Alias) {
return expr.getAlias();
}
Mode mode = s.getDatabase().getMode();
String name = s.getNextSystemIdentifier(getSQL());
expr = new Alias(expr, name, mode.aliasColumnName);
expressions.set(0, expr);
return expr.getAlias();
}
}
......@@ -349,10 +349,6 @@ public class SelectUnion extends Query {
right.updateAggregate(s);
}
public String getFirstColumnAlias(Session s) {
return null;
}
public void fireBeforeSelectTriggers() throws SQLException {
left.fireBeforeSelectTriggers();
right.fireBeforeSelectTriggers();
......
......@@ -1264,14 +1264,6 @@ public class Database implements DataHandler {
return cacheType;
}
public int getChecksum(byte[] data, int start, int end) {
int x = 0;
while (start < end) {
x += data[start++];
}
return x;
}
public String getCluster() {
return cluster;
}
......
......@@ -565,10 +565,6 @@ public class SessionRemote extends SessionWithState implements SessionFactory, D
// nothing to do
}
public int getChecksum(byte[] data, int start, int end) {
return 0;
}
public String getDatabasePath() {
return "";
}
......
......@@ -137,7 +137,7 @@ public class UndoLogRecord {
}
/**
* Save the row in the file using the data page as a buffer.
* Save the row in the file using a buffer.
*
* @param buff the buffer
* @param file the file
......@@ -164,7 +164,7 @@ public class UndoLogRecord {
}
/**
* Load an undo log record row using the data page as a buffer.
* Load an undo log record row using a buffer.
*
* @param buff the buffer
* @param file the source file
......
......@@ -54,10 +54,9 @@ public class Row implements SearchRow {
}
/**
* Get the number of bytes required for the data if the given data page
* would be used.
* Get the number of bytes required for the data.
*
* @param dummy the template data page
* @param dummy the template buffer
* @return the number of bytes
*/
public int getByteCount(Data dummy) throws SQLException {
......
......@@ -61,7 +61,7 @@ public class ConnectionInfo implements Comparable<ConnectionInfo> {
}
public int compareTo(ConnectionInfo o) {
return MathUtils.compareInt(lastAccess, o.lastAccess);
return -MathUtils.compareInt(lastAccess, o.lastAccess);
}
}
......@@ -27,7 +27,6 @@ import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Random;
import org.h2.api.DatabaseEventListener;
import org.h2.bnf.Bnf;
import org.h2.constant.ErrorCode;
import org.h2.constant.SysProperties;
......@@ -58,14 +57,12 @@ import org.h2.util.Tool;
* For each connection to a session, an object of this class is created.
* This class is used by the H2 Console.
*/
public class WebApp implements DatabaseEventListener {
public class WebApp {
protected WebServer server;
protected WebSession session;
protected Properties attributes;
protected String mimeType;
protected long listenerLastEvent;
protected int listenerLastState;
protected boolean cache;
protected boolean stop;
protected String headerLanguage;
......@@ -792,7 +789,7 @@ public class WebApp implements DatabaseEventListener {
prof.startCollecting();
Connection conn;
try {
conn = server.getConnection(driver, url, user, password, this);
conn = server.getConnection(driver, url, user, password);
} finally {
prof.stopCollecting();
profOpen = prof.getTop(3);
......@@ -854,7 +851,7 @@ public class WebApp implements DatabaseEventListener {
}
boolean isH2 = url.startsWith("jdbc:h2:");
try {
Connection conn = server.getConnection(driver, url, user, password, this);
Connection conn = server.getConnection(driver, url, user, password);
session.setConnection(conn);
session.put("url", url);
session.put("user", user);
......@@ -1715,54 +1712,6 @@ public class WebApp implements DatabaseEventListener {
return session;
}
public void closingDatabase() {
trace("Closing database");
}
public void diskSpaceIsLow(long stillAvailable) {
trace("No more disk space is available");
}
public void exceptionThrown(SQLException e, String sql) {
trace("Exception: " + e.toString() + " SQL: " + sql);
}
public void init(String url) {
trace("Init: " + url);
}
public void opened() {
trace("Database was opened");
}
public void setProgress(int state, String name, int x, int max) {
if (state == listenerLastState) {
long time = System.currentTimeMillis();
if (listenerLastEvent + 500 < time) {
return;
}
listenerLastEvent = time;
} else {
listenerLastState = state;
}
switch (state) {
case DatabaseEventListener.STATE_BACKUP_FILE:
trace("Backing up " + name + " " + (100L * x / max) + "%");
break;
case DatabaseEventListener.STATE_CREATE_INDEX:
trace("Creating index " + name + " " + (100L * x / max) + "%");
break;
case DatabaseEventListener.STATE_RECOVER:
trace("Recovering " + name + " " + (100L * x / max) + "%");
break;
case DatabaseEventListener.STATE_SCAN_FILE:
trace("Scanning file " + name + " " + (100L * x / max) + "%");
break;
default:
trace("Unknown state: " + state);
}
}
private void trace(String s) {
server.trace(s);
}
......
......@@ -26,7 +26,6 @@ import java.util.Properties;
import java.util.Set;
import java.util.TimeZone;
import java.util.Map.Entry;
import org.h2.api.DatabaseEventListener;
import org.h2.constant.SysProperties;
import org.h2.engine.Constants;
import org.h2.message.TraceSystem;
......@@ -570,10 +569,9 @@ public class WebServer implements Service {
* @param databaseUrl the database URL
* @param user the user name
* @param password the password
* @param listener the database event listener object
* @return the database connection
*/
Connection getConnection(String driver, String databaseUrl, String user, String password, DatabaseEventListener listener) throws SQLException {
Connection getConnection(String driver, String databaseUrl, String user, String password) throws SQLException {
driver = driver.trim();
databaseUrl = databaseUrl.trim();
org.h2.Driver.load();
......@@ -586,7 +584,6 @@ public class WebServer implements Service {
if (ifExists) {
databaseUrl += ";IFEXISTS=TRUE";
}
p.put("DATABASE_EVENT_LISTENER_OBJECT", listener);
// PostgreSQL would throw a NullPointerException
// if it is loaded before the H2 driver
// because it can't deal with non-String objects in the connection Properties
......
......@@ -11,19 +11,11 @@ import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Properties;
import java.util.StringTokenizer;
import org.h2.api.DatabaseEventListener;
import org.h2.engine.Constants;
import org.h2.message.TraceSystem;
import org.h2.util.IOUtils;
import org.h2.util.MemoryUtils;
......@@ -285,135 +277,6 @@ class WebThread extends WebApp implements Runnable {
return super.adminShutdown();
}
protected boolean loginAsync(final String driver, final String url, final String user, final String password) {
if (socket == null
|| !url.startsWith("jdbc:h2:")
|| url.startsWith("jdbc:h2:tcp:")
|| url.startsWith("jdbc:h2:ssl:")
|| url.startsWith("jdbc:h2:mem:")) {
// async login only possible for H2 embedded
return false;
}
/**
* This class is used for the asynchronous login.
*/
class LoginTask implements Runnable, DatabaseEventListener {
private final PrintWriter writer;
private final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS");
LoginTask() throws IOException {
String message = "HTTP/1.1 200 OK\n";
message += "Content-Type: " + mimeType + "\n\n";
output.write(message.getBytes());
writer = new PrintWriter(output);
writer.println("<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\" /></head>");
writer.println("<body><h2>Opening Database</h2>URL: " + PageParser.escapeHtml(url) + "<br />");
writer.println("User: " + PageParser.escapeHtml(user) + "<br />");
writer.println("Version: " + Constants.getFullVersion() + "<br /><br />");
writer.flush();
log("Start...");
}
public void closingDatabase() {
log("Closing database");
}
public void diskSpaceIsLow(long stillAvailable) {
log("No more disk space is available");
}
public void exceptionThrown(SQLException e, String sql) {
log("Exception: " + PageParser.escapeHtml(e.toString()) + " SQL: " + PageParser.escapeHtml(sql));
server.traceError(e);
}
public void init(String databaseUrl) {
log("Init: " + PageParser.escapeHtml(databaseUrl));
}
public void opened() {
log("Database was opened");
}
public void setProgress(int state, String name, int x, int max) {
if (state == listenerLastState) {
long time = System.currentTimeMillis();
if (time < listenerLastEvent + 1000) {
return;
}
listenerLastEvent = time;
} else {
listenerLastState = state;
}
name = PageParser.escapeHtml(name);
switch (state) {
case DatabaseEventListener.STATE_BACKUP_FILE:
log("Backing up " + name + " " + (100L * x / max) + "%");
break;
case DatabaseEventListener.STATE_CREATE_INDEX:
log("Creating index " + name + " " + (100L * x / max) + "%");
break;
case DatabaseEventListener.STATE_RECOVER:
log("Recovering " + name + " " + (100L * x / max) + "%");
break;
case DatabaseEventListener.STATE_SCAN_FILE:
log("Scanning file " + name + " " + (100L * x / max) + "%");
break;
default:
log("Unknown state: " + state);
}
}
private synchronized void log(String message) {
if (output != null) {
message = dateFormat.format(new Date()) + ": " + message;
writer.println(message + "<br />");
writer.flush();
}
server.trace(message);
}
public void run() {
String sessionId = (String) session.get("sessionId");
boolean isH2 = url.startsWith("jdbc:h2:");
try {
Connection conn = server.getConnection(driver, url, user, password, this);
session.setConnection(conn);
session.put("url", url);
session.put("user", user);
session.remove("error");
settingSave();
log("OK<script type=\"text/javascript\">top.location=\"frame.jsp?jsessionid=" + sessionId
+ "\"</script></body></htm>");
// return "frame.jsp";
} catch (Exception e) {
session.put("error", getLoginError(e, isH2));
log("Error<script type=\"text/javascript\">top.location=\"index.jsp?jsessionid=" + sessionId
+ "\"</script></body></html>");
// return "index.jsp";
}
synchronized (this) {
IOUtils.closeSilently(output);
try {
socket.close();
} catch (IOException e) {
// ignore
}
output = null;
}
}
}
try {
LoginTask login = new LoginTask();
Thread t = new Thread(login);
t.start();
} catch (IOException e) {
// ignore
}
return true;
}
private boolean allow() {
if (server.getAllowOthers()) {
return true;
......
......@@ -44,7 +44,7 @@ import org.h2.value.ValueTimestamp;
import org.h2.value.ValueUuid;
/**
* A data page is a byte buffer that contains persistent data of a page.
* This class represents a byte buffer that contains persistent data of a page.
*/
public class Data {
......@@ -237,31 +237,31 @@ public class Data {
}
/**
* Create a new data page for the given handler. The
* Create a new buffer for the given handler. The
* handler will decide what type of buffer is created.
*
* @param handler the data handler
* @param capacity the initial capacity of the buffer
* @return the data page
* @return the buffer
*/
public static Data create(DataHandler handler, int capacity) {
return new Data(handler, new byte[capacity]);
}
/**
* Create a new data page using the given data for the given handler. The
* Create a new buffer using the given data for the given handler. The
* handler will decide what type of buffer is created.
*
* @param handler the data handler
* @param buff the data
* @return the data page
* @return the buffer
*/
public static Data create(DataHandler handler, byte[] buff) {
return new Data(handler, buff);
}
/**
* Get the current write position of this data page, which is the current
* Get the current write position of this buffer, which is the current
* length.
*
* @return the length
......@@ -287,7 +287,7 @@ public class Data {
}
/**
* Append a number of bytes to this data page.
* Append a number of bytes to this buffer.
*
* @param buff the data
* @param off the offset in the data
......
......@@ -35,16 +35,6 @@ public interface DataHandler {
*/
FileStore openFile(String name, String mode, boolean mustExist) throws SQLException;
/**
* Calculate the checksum for the byte array.
*
* @param data the byte array
* @param start the starting offset
* @param end the end offset
* @return the checksum
*/
int getChecksum(byte[] data, int start, int end);
/**
* Check if the simulated power failure occurred.
* This call will decrement the countdown.
......
差异被折叠。
......@@ -691,7 +691,7 @@ public class Recover extends Tool implements DataHandler {
if (d == dataPage) {
dataPage = 0;
} else {
// ignore the pages before the starting data page
// ignore the pages before the starting page
continue;
}
}
......@@ -1124,17 +1124,6 @@ public class Recover extends Tool implements DataHandler {
return FileStore.open(this, name, "rw");
}
/**
* INTERNAL
*/
public int getChecksum(byte[] data, int start, int end) {
int x = 0;
while (start < end) {
x += data[start++];
}
return x;
}
/**
* INTERNAL
*/
......
......@@ -33,7 +33,7 @@ import org.h2.util.StringUtils;
/**
* Implementation of the BLOB and CLOB data types. Small objects are kept in
* memory and stored in the data page of the record.
* memory and stored in the record.
*
* Large objects are stored in their own files. When large objects are set in a
* prepared statement, they are first stored as 'temporary' files. Later, when
......
......@@ -287,37 +287,17 @@ java org.h2.test.TestAll timer
System.setProperty("h2.check2", "true");
/*
check client jar file size
simplify Message / ErrorCode / Resource
remove BitField
flatten package hierarchy (remove constant package)
Constants.FILE_BLOCK_SIZE and others
simplify SysProperties; combine with Constants
remove SortedProperties
remove TempFileDeleter (UndoLog, ResultDiskBuffer, RowList, ValueLob)
combine small classes (StringCache / utils...)
FileStore.sync, Database.sync() (CHECKPOINT SYNC)
document in performance section:
PreparedStatement prep = conn.prepareStatement(
"select * from table(x int = ?) t inner join test on t.x = test.id");
prep.setObject(1, new Object[] { "1", "2" });
ResultSet rs = prep.executeQuery();
remove unused methods
cleanup SortedProperties
headPos > boolean isNew?
verify Row - Page
fix class javadocs
test remote lob (temp file) read write
review package and class level javadocs
TestAll deleteIndex
FileStore.sync, Database.sync() (CHECKPOINT SYNC)
data page > buffer
try to reduce number of packages, classes
rename Page classes to normal names
use RuntimeException internally
Verify that Tomcat memory leak protection don't cause exceptions:
http://java.dzone.com/articles/memory-leak-protection-tomcat
document FETCH FIRST
power failure test: larger binaries and additional indexes
......
......@@ -271,10 +271,6 @@ public class TestDataPage extends TestBase implements DataHandler {
return null;
}
public int getChecksum(byte[] data, int s, int e) {
return e - s;
}
public void checkPowerOff() {
// nothing to do
}
......
......@@ -146,10 +146,6 @@ public class TestFile extends TestBase implements DataHandler {
// nothing to do
}
public int getChecksum(byte[] data, int s, int e) {
return 0;
}
public String getDatabasePath() {
return null;
}
......
......@@ -48,13 +48,13 @@ public class TestNetUtils extends TestBase {
while (!isInterrupted()) {
try {
Socket socket = serverSocket.accept();
System.out.println("opened " + counter);
// System.out.println("opened " + counter);
socket.close();
} catch (Exception e) {
// ignore
}
}
System.out.println("stopped ");
// System.out.println("stopped ");
}
};
......
......@@ -120,10 +120,6 @@ public class TestValueHashMap extends TestBase implements DataHandler {
return null;
}
public int getChecksum(byte[] data, int s, int e) {
return 0;
}
public void checkPowerOff() {
// nothing to do
}
......
......@@ -194,10 +194,6 @@ public class TestValueMemory extends TestBase implements DataHandler {
// nothing to do
}
public int getChecksum(byte[] data, int s, int e) {
return 0;
}
public String getDatabasePath() {
return baseDir + "/valueMemory";
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论