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

Prepare release.

上级 b26a371f
......@@ -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
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.
","
......
......@@ -18,14 +18,18 @@ Change Log
<h1>Change Log</h1>
<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,
and closing the session without committing.
<li>Queries using multiple IN(..) conditions on the same table could cause repeated rows in the result set.
and closing the session without committing.
</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>There was a possible Java level deadlock when opening an uninitialized database and using
a file system that also opened a database.
</li><li>When killing the process while the database was writing a checkpoint, while it was closing,
or while running recovery (while removing temporary tables from a previous run), the database could become corrupt.
or while running recovery (while removing temporary tables from a previous run), the database could become corrupt.
A new test case has been implemented to ensure such problems can not occur in the future.
</li><li>File system: new method FileSystem.setReadOnly.
</li><li>The page size for new databases can now be set in the database URL using ;PAGE_SIZE=512.
......
......@@ -123,6 +123,7 @@ via PayPal:
</li><li>Bjorn Darri Sigurdsson, Iceland
</li><li>Iyama Jun, Japan
</li><li>Gray Watson, USA
</li><li>Erik Dick, Germany
</li></ul>
<!-- [close] { --></div></td></tr></table><!-- } --><!-- analytics --></body></html>
......
......@@ -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>Support hints for the optimizer (which index to use, enforce the join order).
</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>Groovy Stored Procedures: http://groovy.codehaus.org/Groovy+SQL
</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>.
</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).
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>Version check: docs / web console (using Javascript), and maybe in the library (using TCP/IP).
</li><li>Web server classloader: override findResource / getResourceFrom.
......@@ -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>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>Issue 196: Function based indexes
</li></ul>
<h2>Not Planned</h2>
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
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 {
* within the trigger, if the operations occurred within the same database.
* If the trigger changes state outside the database, a rollback trigger
* 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 oldRow the old row, or null if no old row is available (for
* INSERT)
......
......@@ -14,12 +14,12 @@ public class Constants {
/**
* 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.
*/
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
......@@ -32,12 +32,12 @@ public class Constants {
/**
* 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.
*/
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
......
......@@ -138,7 +138,7 @@ public class IndexCursor implements Cursor {
return false;
}
// 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
// IndexCondition.getMask.
IndexColumn idxCol = indexColumns[0];
......
......@@ -54,7 +54,7 @@ public class FileObjectMemory implements FileObject {
}
public void sync() {
data.sync();
// do nothing
}
public void setName(String name) {
......@@ -69,12 +69,4 @@ public class FileObjectMemory implements FileObject {
return data.getLastModified();
}
boolean canWrite() {
return data.canWrite();
}
boolean setReadOnly() {
return data.setReadOnly();
}
}
......@@ -17,7 +17,7 @@ import org.h2.util.MathUtils;
* This class contains the data of an in-memory random access file.
* 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 BLOCK_SIZE_SHIFT = 10;
......@@ -148,6 +148,9 @@ public class FileObjectMemoryData {
}
}
/**
* Update the last modified time.
*/
void touch() throws IOException {
if (isReadOnly) {
throw new IOException("Read only");
......@@ -155,10 +158,20 @@ public class FileObjectMemoryData {
lastModified = System.currentTimeMillis();
}
/**
* Get the file length.
*
* @return the length
*/
long length() {
return length;
}
/**
* Change the file length.
*
* @param newLength the new length
*/
void setFileLength(long newLength) {
if (newLength < length) {
changeLength(newLength);
......@@ -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 end = pos + len;
if (end > length) {
......@@ -226,27 +249,48 @@ public class FileObjectMemoryData {
return pos;
}
public void sync() {
// nothing to do
}
public void setName(String name) {
/**
* Set the file name.
*
* @param name the name
*/
void setName(String name) {
this.name = name;
}
public String getName() {
/**
* Get the file name
*
* @return the name
*/
String getName() {
return name;
}
public long getLastModified() {
/**
* Get the last modified time.
*
* @return the time
*/
long getLastModified() {
return lastModified;
}
public boolean canWrite() {
/**
* Check whether writing is allowed.
*
* @return true if it is
*/
boolean canWrite() {
return !isReadOnly;
}
public boolean setReadOnly() {
/**
* Set the read-only flag.
*
* @return true
*/
boolean setReadOnly() {
isReadOnly = true;
return true;
}
......
......@@ -293,6 +293,7 @@ public abstract class FileSystem {
/**
* Disable the ability to write.
*
* @param fileName the file name
* @return true if the call was successful
*/
public abstract boolean setReadOnly(String fileName);
......
......@@ -7,6 +7,7 @@
CREATE TABLE VERSION(ID INT PRIMARY KEY, VERSION VARCHAR, CREATED VARCHAR);
INSERT INTO VERSION VALUES
(85, '1.2.135', '2010-05-08'),
(84, '1.2.134', '2010-04-23'),
(83, '1.2.133', '2010-04-10'),
(82, '1.2.132', '2010-03-21'),
......
......@@ -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.
*
* @param name the original file name
* @return the translated file name
* @return the directory, possibly including file system prefix
*/
protected String getBaseDir() {
if (config != null && config.record) {
......
......@@ -206,11 +206,25 @@ public class RecordingFileSystem extends FileSystem {
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);
}
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) {
recorder.log(op, fileName, data, x);
}
......
......@@ -643,4 +643,5 @@ equivalent synchronizes sullivan surname doe stepan getstart rojas snprintf
pulakka pagination collide visual aejaks simulation joonas finland minneapolis
determine timestampdiff harmony doap shortdesc wireless iceland sigurdsson
darri chunks bjorn chunked watson regardless usefulinc represented pushd
recorder grajciar recording slovensky uninitialized arriving lubomir
\ No newline at end of file
recorder grajciar recording slovensky uninitialized arriving lubomir unchanged
erik dick
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论