提交 99fa5f60 authored 作者: Thomas Mueller's avatar Thomas Mueller

Prepare release.

上级 b26a371f
...@@ -503,6 +503,7 @@ CREATE SCHEMA [ IF NOT EXISTS ] name [ AUTHORIZATION ownerUserName ] ...@@ -503,6 +503,7 @@ CREATE SCHEMA [ IF NOT EXISTS ] name [ AUTHORIZATION ownerUserName ]
"," ","
Creates a new schema. If no owner is specified, the current user is used. The Creates a new schema. If no owner is specified, the current user is used. The
user that executes the command must have admin rights, as well as the owner. user that executes the command must have admin rights, as well as the owner.
Specifying the owner currently has no effect.
This command commits an open transaction. This command commits an open transaction.
"," ","
......
...@@ -18,9 +18,13 @@ Change Log ...@@ -18,9 +18,13 @@ Change Log
<h1>Change Log</h1> <h1>Change Log</h1>
<h2>Next Version (unreleased)</h2> <h2>Next Version (unreleased)</h2>
<ul><li>
</li></ul>
<h2>Version 1.2.135 (2010-05-08)</h2>
<ul><li>Temporary files were not deleted when using large transactions, disabling autocommit, <ul><li>Temporary files were not deleted when using large transactions, disabling autocommit,
and closing the session without committing. and closing the session without committing.
<li>Queries using multiple IN(..) conditions on the same table could cause repeated rows in the result set. </li><li>Queries using multiple IN(..) conditions on the same table could cause repeated rows in the result set.
</li><li>Translation: Lubomir Grajciar translated the H2 Console as well as all error message to Slovensky. Thanks a lot! </li><li>Translation: Lubomir Grajciar translated the H2 Console as well as all error message to Slovensky. Thanks a lot!
</li><li>There was a possible Java level deadlock when opening an uninitialized database and using </li><li>There was a possible Java level deadlock when opening an uninitialized database and using
a file system that also opened a database. a file system that also opened a database.
......
...@@ -123,6 +123,7 @@ via PayPal: ...@@ -123,6 +123,7 @@ via PayPal:
</li><li>Bjorn Darri Sigurdsson, Iceland </li><li>Bjorn Darri Sigurdsson, Iceland
</li><li>Iyama Jun, Japan </li><li>Iyama Jun, Japan
</li><li>Gray Watson, USA </li><li>Gray Watson, USA
</li><li>Erik Dick, Germany
</li></ul> </li></ul>
<!-- [close] { --></div></td></tr></table><!-- } --><!-- analytics --></body></html> <!-- [close] { --></div></td></tr></table><!-- } --><!-- analytics --></body></html>
......
...@@ -49,6 +49,7 @@ See also <a href="build.html#providing_patches">Providing Patches</a>. ...@@ -49,6 +49,7 @@ See also <a href="build.html#providing_patches">Providing Patches</a>.
</li><li>Test very large databases and LOBs (up to 256 GB). </li><li>Test very large databases and LOBs (up to 256 GB).
</li><li>Support hints for the optimizer (which index to use, enforce the join order). </li><li>Support hints for the optimizer (which index to use, enforce the join order).
</li><li>Sequence: add features [NO] MINVALUE, MAXVALUE, CYCLE. </li><li>Sequence: add features [NO] MINVALUE, MAXVALUE, CYCLE.
</li><li>Access rights: remember the owner of an object. Create, alter and drop privileges. COMMENT: allow owner of object to change it.
</li><li>Deferred integrity checking (DEFERRABLE INITIALLY DEFERRED). </li><li>Deferred integrity checking (DEFERRABLE INITIALLY DEFERRED).
</li><li>Groovy Stored Procedures: http://groovy.codehaus.org/Groovy+SQL </li><li>Groovy Stored Procedures: http://groovy.codehaus.org/Groovy+SQL
</li><li>Add a migration guide (list differences between databases). </li><li>Add a migration guide (list differences between databases).
...@@ -71,7 +72,6 @@ See also <a href="build.html#providing_patches">Providing Patches</a>. ...@@ -71,7 +72,6 @@ See also <a href="build.html#providing_patches">Providing Patches</a>.
</li><li>Set a connection read only (Connection.setReadOnly) or using a connection parameter. </li><li>Set a connection read only (Connection.setReadOnly) or using a connection parameter.
</li><li>Optimizer: use an index for IS NULL and IS NOT NULL (including linked tables). </li><li>Optimizer: use an index for IS NULL and IS NOT NULL (including linked tables).
ID IS NOT NULL could be converted to ID &gt;= Integer.MIN_VALUE. ID IS NOT NULL could be converted to ID &gt;= Integer.MIN_VALUE.
</li><li>Access rights: remember the owner of an object. COMMENT: allow owner of object to change it.
</li><li>Access rights: finer grained access control (grant access for specific functions). </li><li>Access rights: finer grained access control (grant access for specific functions).
</li><li>Version check: docs / web console (using Javascript), and maybe in the library (using TCP/IP). </li><li>Version check: docs / web console (using Javascript), and maybe in the library (using TCP/IP).
</li><li>Web server classloader: override findResource / getResourceFrom. </li><li>Web server classloader: override findResource / getResourceFrom.
...@@ -467,6 +467,7 @@ See also <a href="build.html#providing_patches">Providing Patches</a>. ...@@ -467,6 +467,7 @@ See also <a href="build.html#providing_patches">Providing Patches</a>.
</li><li>Maybe use PhantomReference instead of finalize. </li><li>Maybe use PhantomReference instead of finalize.
</li><li>Database file name suffix: a way to use no or a different suffix (for example using a slash). </li><li>Database file name suffix: a way to use no or a different suffix (for example using a slash).
</li><li>Database file name suffix: should only have one dot by default. Example: .h2db </li><li>Database file name suffix: should only have one dot by default. Example: .h2db
</li><li>Issue 196: Function based indexes
</li></ul> </li></ul>
<h2>Not Planned</h2> <h2>Not Planned</h2>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -58,7 +58,10 @@ public interface Trigger { ...@@ -58,7 +58,10 @@ public interface Trigger {
* within the trigger, if the operations occurred within the same database. * within the trigger, if the operations occurred within the same database.
* If the trigger changes state outside the database, a rollback trigger * If the trigger changes state outside the database, a rollback trigger
* should be used. * should be used.
* * <p>
* The row arrays contain all columns of the table, in the same order
* as defined in the table.
* </p>
* @param conn a connection to the database * @param conn a connection to the database
* @param oldRow the old row, or null if no old row is available (for * @param oldRow the old row, or null if no old row is available (for
* INSERT) * INSERT)
......
...@@ -14,12 +14,12 @@ public class Constants { ...@@ -14,12 +14,12 @@ public class Constants {
/** /**
* The build id is incremented for each public release. * The build id is incremented for each public release.
*/ */
public static final int BUILD_ID = 134; public static final int BUILD_ID = 135;
/** /**
* The build id of the last stable release. * The build id of the last stable release.
*/ */
public static final int BUILD_ID_STABLE = 133; public static final int BUILD_ID_STABLE = 134;
/** /**
* If H2 is compiled to be included in a product, this should be set to * If H2 is compiled to be included in a product, this should be set to
...@@ -32,12 +32,12 @@ public class Constants { ...@@ -32,12 +32,12 @@ public class Constants {
/** /**
* The build date is updated for each public release. * The build date is updated for each public release.
*/ */
public static final String BUILD_DATE = "2010-04-23"; public static final String BUILD_DATE = "2010-05-08";
/** /**
* The build date is updated for each public release. * The build date is updated for each public release.
*/ */
public static final String BUILD_DATE_STABLE = "2010-04-10"; public static final String BUILD_DATE_STABLE = "2010-04-23";
/** /**
* The TCP protocol version number. This protocol is used by the TCP * The TCP protocol version number. This protocol is used by the TCP
......
...@@ -138,7 +138,7 @@ public class IndexCursor implements Cursor { ...@@ -138,7 +138,7 @@ public class IndexCursor implements Cursor {
return false; return false;
} }
// The first column of the index must match this column, // The first column of the index must match this column,
// or it must be a VIEW indexe (where the column is null). // or it must be a VIEW index (where the column is null).
// Multiple IN conditions with views are not supported, see // Multiple IN conditions with views are not supported, see
// IndexCondition.getMask. // IndexCondition.getMask.
IndexColumn idxCol = indexColumns[0]; IndexColumn idxCol = indexColumns[0];
......
...@@ -54,7 +54,7 @@ public class FileObjectMemory implements FileObject { ...@@ -54,7 +54,7 @@ public class FileObjectMemory implements FileObject {
} }
public void sync() { public void sync() {
data.sync(); // do nothing
} }
public void setName(String name) { public void setName(String name) {
...@@ -69,12 +69,4 @@ public class FileObjectMemory implements FileObject { ...@@ -69,12 +69,4 @@ public class FileObjectMemory implements FileObject {
return data.getLastModified(); return data.getLastModified();
} }
boolean canWrite() {
return data.canWrite();
}
boolean setReadOnly() {
return data.setReadOnly();
}
} }
...@@ -17,7 +17,7 @@ import org.h2.util.MathUtils; ...@@ -17,7 +17,7 @@ import org.h2.util.MathUtils;
* This class contains the data of an in-memory random access file. * This class contains the data of an in-memory random access file.
* Data compression using the LZF algorithm is supported as well. * Data compression using the LZF algorithm is supported as well.
*/ */
public class FileObjectMemoryData { class FileObjectMemoryData {
private static final int CACHE_SIZE = 8; private static final int CACHE_SIZE = 8;
private static final int BLOCK_SIZE_SHIFT = 10; private static final int BLOCK_SIZE_SHIFT = 10;
...@@ -148,6 +148,9 @@ public class FileObjectMemoryData { ...@@ -148,6 +148,9 @@ public class FileObjectMemoryData {
} }
} }
/**
* Update the last modified time.
*/
void touch() throws IOException { void touch() throws IOException {
if (isReadOnly) { if (isReadOnly) {
throw new IOException("Read only"); throw new IOException("Read only");
...@@ -155,10 +158,20 @@ public class FileObjectMemoryData { ...@@ -155,10 +158,20 @@ public class FileObjectMemoryData {
lastModified = System.currentTimeMillis(); lastModified = System.currentTimeMillis();
} }
/**
* Get the file length.
*
* @return the length
*/
long length() { long length() {
return length; return length;
} }
/**
* Change the file length.
*
* @param newLength the new length
*/
void setFileLength(long newLength) { void setFileLength(long newLength) {
if (newLength < length) { if (newLength < length) {
changeLength(newLength); changeLength(newLength);
...@@ -193,6 +206,16 @@ public class FileObjectMemoryData { ...@@ -193,6 +206,16 @@ public class FileObjectMemoryData {
} }
} }
/**
* Read or write.
*
* @param pos the position
* @param b the byte array
* @param off the offset within the byte array
* @param len the number of bytes
* @param write true for writing
* @return the new position
*/
long readWrite(long pos, byte[] b, int off, int len, boolean write) throws IOException { long readWrite(long pos, byte[] b, int off, int len, boolean write) throws IOException {
long end = pos + len; long end = pos + len;
if (end > length) { if (end > length) {
...@@ -226,27 +249,48 @@ public class FileObjectMemoryData { ...@@ -226,27 +249,48 @@ public class FileObjectMemoryData {
return pos; return pos;
} }
public void sync() { /**
// nothing to do * Set the file name.
} *
* @param name the name
public void setName(String name) { */
void setName(String name) {
this.name = name; this.name = name;
} }
public String getName() { /**
* Get the file name
*
* @return the name
*/
String getName() {
return name; return name;
} }
public long getLastModified() { /**
* Get the last modified time.
*
* @return the time
*/
long getLastModified() {
return lastModified; return lastModified;
} }
public boolean canWrite() { /**
* Check whether writing is allowed.
*
* @return true if it is
*/
boolean canWrite() {
return !isReadOnly; return !isReadOnly;
} }
public boolean setReadOnly() { /**
* Set the read-only flag.
*
* @return true
*/
boolean setReadOnly() {
isReadOnly = true; isReadOnly = true;
return true; return true;
} }
......
...@@ -293,6 +293,7 @@ public abstract class FileSystem { ...@@ -293,6 +293,7 @@ public abstract class FileSystem {
/** /**
* Disable the ability to write. * Disable the ability to write.
* *
* @param fileName the file name
* @return true if the call was successful * @return true if the call was successful
*/ */
public abstract boolean setReadOnly(String fileName); public abstract boolean setReadOnly(String fileName);
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
CREATE TABLE VERSION(ID INT PRIMARY KEY, VERSION VARCHAR, CREATED VARCHAR); CREATE TABLE VERSION(ID INT PRIMARY KEY, VERSION VARCHAR, CREATED VARCHAR);
INSERT INTO VERSION VALUES INSERT INTO VERSION VALUES
(85, '1.2.135', '2010-05-08'),
(84, '1.2.134', '2010-04-23'), (84, '1.2.134', '2010-04-23'),
(83, '1.2.133', '2010-04-10'), (83, '1.2.133', '2010-04-10'),
(82, '1.2.132', '2010-03-21'), (82, '1.2.132', '2010-03-21'),
......
...@@ -197,11 +197,10 @@ public abstract class TestBase { ...@@ -197,11 +197,10 @@ public abstract class TestBase {
} }
/** /**
* Get the file translated file name. * Get the base directory for tests.
* If a special file system is used, the prefix is prepended. * If a special file system is used, the prefix is prepended.
* *
* @param name the original file name * @return the directory, possibly including file system prefix
* @return the translated file name
*/ */
protected String getBaseDir() { protected String getBaseDir() {
if (config != null && config.record) { if (config != null && config.record) {
......
...@@ -206,11 +206,25 @@ public class RecordingFileSystem extends FileSystem { ...@@ -206,11 +206,25 @@ public class RecordingFileSystem extends FileSystem {
this.trace = trace; this.trace = trace;
} }
public void log(int op, String fileName) { /**
* Log the operation.
*
* @param op the operation
* @param fileName the file name
*/
void log(int op, String fileName) {
log(op, fileName, null, 0); log(op, fileName, null, 0);
} }
public void log(int op, String fileName, byte[] data, long x) { /**
* Log the operation.
*
* @param op the operation
* @param fileName the file name
* @param data the data or null
* @param x the value or 0
*/
void log(int op, String fileName, byte[] data, long x) {
if (recorder != null) { if (recorder != null) {
recorder.log(op, fileName, data, x); recorder.log(op, fileName, data, x);
} }
......
...@@ -643,4 +643,5 @@ equivalent synchronizes sullivan surname doe stepan getstart rojas snprintf ...@@ -643,4 +643,5 @@ equivalent synchronizes sullivan surname doe stepan getstart rojas snprintf
pulakka pagination collide visual aejaks simulation joonas finland minneapolis pulakka pagination collide visual aejaks simulation joonas finland minneapolis
determine timestampdiff harmony doap shortdesc wireless iceland sigurdsson determine timestampdiff harmony doap shortdesc wireless iceland sigurdsson
darri chunks bjorn chunked watson regardless usefulinc represented pushd darri chunks bjorn chunked watson regardless usefulinc represented pushd
recorder grajciar recording slovensky uninitialized arriving lubomir recorder grajciar recording slovensky uninitialized arriving lubomir unchanged
\ No newline at end of file erik dick
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论