提交 f0dd328d authored 作者: Thomas Mueller's avatar Thomas Mueller

Documentation, formatting (remove trailing spaces)

上级 0f64da5b
...@@ -60,7 +60,7 @@ Change Log ...@@ -60,7 +60,7 @@ Change Log
in the Session query cache being invalidated. in the Session query cache being invalidated.
</li><li>New feature from Davide Cavestro - allow using custom Java object serialization </li><li>New feature from Davide Cavestro - allow using custom Java object serialization
engines on a per-DB basis. engines on a per-DB basis.
</li><li>When running the Recover tool on very large (>6G) databases, some statistics were reported with </li><li>When running the Recover tool on very large (&gt;6G) databases, some statistics were reported with
negative numbers. negative numbers.
</li><li>Add a CONTAINS_UNCOMMITTED column to the SESSIONS metadata table, to allow detecting when rogue </li><li>Add a CONTAINS_UNCOMMITTED column to the SESSIONS metadata table, to allow detecting when rogue
sessions are creating large transactions. sessions are creating large transactions.
...@@ -84,14 +84,14 @@ Change Log ...@@ -84,14 +84,14 @@ Change Log
extremely large statements. extremely large statements.
</li><li>Fix bug with ALLOW_LITERALS=NONE, where the periodic analyze table on insert would throw an exception. </li><li>Fix bug with ALLOW_LITERALS=NONE, where the periodic analyze table on insert would throw an exception.
</li><li>Issue 510: Make org.h2.bnf public for consumption by external projects, patch by Nicolas Fortin </li><li>Issue 510: Make org.h2.bnf public for consumption by external projects, patch by Nicolas Fortin
</li><li>Issue 509: Important fix on ValueGeometry, patch by Nicolas Fortin (with some tweaking) </li><li>Issue 509: Important fix on ValueGeometry, patch by Nicolas Fortin (with some tweaking)
Make ValueGeometry#getDimensionCount more reliable. Make ValueGeometry#getDimensionCount more reliable.
Add unit test to check for illegal ValueGeometry comparison Add unit test to check for illegal ValueGeometry comparison
Add unit test for conversion of Geometry object into Object Add unit test for conversion of Geometry object into Object
Add optional export to MANIFEST.MF for JTS Geometry classes Add optional export to MANIFEST.MF for JTS Geometry classes
Validate that geometry values can be represented in WKB. Validate that geometry values can be represented in WKB.
</li><li>Issue 506: RFE: Include Thread.getName() in case of a deadlock </li><li>Issue 506: RFE: Include Thread.getName() in case of a deadlock
</li><li>Adding support for "GRANT ALTER ANY SCHEMA TO <user>", patch by John Yates </li><li>Adding support for "GRANT ALTER ANY SCHEMA TO &lt;user&gt;", patch by John Yates
</li></ul> </li></ul>
<h2>Version 1.3.173 (2013-07-28)</h2> <h2>Version 1.3.173 (2013-07-28)</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.
/* /*
* Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License, * Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0 * Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html). * (http://h2database.com/html/license.html).
* Initial Developer: H2 Group * Initial Developer: H2 Group
*/ */
package org.h2.bnf.context; package org.h2.bnf.context;
import java.sql.DatabaseMetaData; import java.sql.DatabaseMetaData;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
/** /**
* Keeps the meta data information of a column. * Keeps the meta data information of a column.
* This class is used by the H2 Console. * This class is used by the H2 Console.
*/ */
public class DbColumn { public class DbColumn {
private final String name; private final String name;
private final String quotedName; private final String quotedName;
private final String dataType; private final String dataType;
private int position; private int position;
public DbColumn(DbContents contents, ResultSet rs) throws SQLException { public DbColumn(DbContents contents, ResultSet rs) throws SQLException {
name = rs.getString("COLUMN_NAME"); name = rs.getString("COLUMN_NAME");
quotedName = contents.quoteIdentifier(name); quotedName = contents.quoteIdentifier(name);
String type = rs.getString("TYPE_NAME"); String type = rs.getString("TYPE_NAME");
// A procedures column size is identified by PRECISION, for table this is COLUMN_SIZE // a procedures column size is identified by PRECISION, for table this
int precisionColumnIndex = DbContents.findColumn(rs, "PRECISION", 0); // is COLUMN_SIZE
int size; int precisionColumnIndex = DbContents.findColumn(rs, "PRECISION", 0);
if (precisionColumnIndex == 0) { int size;
size = rs.getInt(DbContents.findColumn(rs, "COLUMN_SIZE", 7)); if (precisionColumnIndex == 0) {
} else { size = rs.getInt(DbContents.findColumn(rs, "COLUMN_SIZE", 7));
size = rs.getInt(precisionColumnIndex); } else {
} size = rs.getInt(precisionColumnIndex);
position = rs.getInt("ORDINAL_POSITION"); }
boolean isSQLite = contents.isSQLite(); position = rs.getInt("ORDINAL_POSITION");
if (size > 0 && !isSQLite) { boolean isSQLite = contents.isSQLite();
type += "(" + size; if (size > 0 && !isSQLite) {
int prec = rs.getInt(DbContents.findColumn(rs, "DECIMAL_DIGITS", 9)); type += "(" + size;
if (prec > 0) { int prec = rs.getInt(DbContents.findColumn(rs, "DECIMAL_DIGITS", 9));
type += ", " + prec; if (prec > 0) {
} type += ", " + prec;
type += ")"; }
} type += ")";
if (rs.getInt("NULLABLE") == DatabaseMetaData.columnNoNulls) { }
type += " NOT NULL"; if (rs.getInt("NULLABLE") == DatabaseMetaData.columnNoNulls) {
} type += " NOT NULL";
dataType = type; }
} dataType = type;
}
/**
* @return The data type name (including precision and the NOT NULL flag if /**
* applicable). * @return The data type name (including precision and the NOT NULL flag if
*/ * applicable).
public String getDataType() { */
return dataType; public String getDataType() {
} return dataType;
}
/**
* @return The column name. /**
*/ * @return The column name.
public String getName() { */
return name; public String getName() {
} return name;
}
/**
* @return The quoted table name. /**
*/ * @return The quoted table name.
public String getQuotedName() { */
return quotedName; public String getQuotedName() {
} return quotedName;
}
/**
* @return Column index /**
*/ * @return Column index
public int getPosition() { */
return position; public int getPosition() {
} return position;
}
}
}
/* /*
* Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License, * Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0 * Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html). * (http://h2database.com/html/license.html).
* Initial Developer: H2 Group * Initial Developer: H2 Group
*/ */
package org.h2.bnf.context; package org.h2.bnf.context;
import org.h2.util.New; import org.h2.util.New;
import java.sql.DatabaseMetaData; import java.sql.DatabaseMetaData;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
* Contains meta data information about a procedure. * Contains meta data information about a procedure.
* This class is used by the H2 Console. * This class is used by the H2 Console.
*/ */
public class DbProcedure { public class DbProcedure {
private final DbSchema schema; private final DbSchema schema;
private final String name; private final String name;
private final String quotedName; private final String quotedName;
private boolean returnsResult; private boolean returnsResult;
private DbColumn[] parameters; private DbColumn[] parameters;
public DbProcedure(DbSchema schema, ResultSet rs) throws SQLException { public DbProcedure(DbSchema schema, ResultSet rs) throws SQLException {
this.schema = schema; this.schema = schema;
name = rs.getString("PROCEDURE_NAME"); name = rs.getString("PROCEDURE_NAME");
returnsResult = rs.getShort("PROCEDURE_TYPE") == DatabaseMetaData.procedureReturnsResult; returnsResult = rs.getShort("PROCEDURE_TYPE") == DatabaseMetaData.procedureReturnsResult;
quotedName = schema.getContents().quoteIdentifier(name); quotedName = schema.getContents().quoteIdentifier(name);
} }
/** /**
* @return The schema this table belongs to. * @return The schema this table belongs to.
*/ */
public DbSchema getSchema() { public DbSchema getSchema() {
return schema; return schema;
} }
/** /**
* @return The column list. * @return The column list.
*/ */
public DbColumn[] getParameters() { public DbColumn[] getParameters() {
return parameters; return parameters;
} }
/** /**
* @return The table name. * @return The table name.
*/ */
public String getName() { public String getName() {
return name; return name;
} }
/** /**
* @return The quoted table name. * @return The quoted table name.
*/ */
public String getQuotedName() { public String getQuotedName() {
return quotedName; return quotedName;
} }
/** /**
* @return True if this function return a value * @return True if this function return a value
*/ */
public boolean isReturnsResult() { public boolean isReturnsResult() {
return returnsResult; return returnsResult;
} }
/** /**
* Read the column for this table from the database meta data. * Read the column for this table from the database meta data.
* *
* @param meta the database meta data * @param meta the database meta data
*/ */
void readParameters(DatabaseMetaData meta) throws SQLException { void readParameters(DatabaseMetaData meta) throws SQLException {
ResultSet rs = meta.getProcedureColumns(null, schema.name, name, null); ResultSet rs = meta.getProcedureColumns(null, schema.name, name, null);
ArrayList<DbColumn> list = New.arrayList(); ArrayList<DbColumn> list = New.arrayList();
while (rs.next()) { while (rs.next()) {
DbColumn column = new DbColumn(schema.getContents(), rs); DbColumn column = new DbColumn(schema.getContents(), rs);
if (column.getPosition() > 0) { if (column.getPosition() > 0) {
// Not the return type // Not the return type
list.add(column); list.add(column);
} }
} }
rs.close(); rs.close();
parameters = new DbColumn[list.size()]; parameters = new DbColumn[list.size()];
// Store the parameter in the good position [1-n] // Store the parameter in the good position [1-n]
for (int i = 0; i < parameters.length; i++) { for (int i = 0; i < parameters.length; i++) {
DbColumn column = list.get(i); DbColumn column = list.get(i);
if (column.getPosition() > 0 if (column.getPosition() > 0
&& column.getPosition() <= parameters.length) { && column.getPosition() <= parameters.length) {
parameters[column.getPosition() - 1] = column; parameters[column.getPosition() - 1] = column;
} }
} }
} }
} }
/* /*
* Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License, * Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0 * Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html). * (http://h2database.com/html/license.html).
* Initial Developer: H2 Group * Initial Developer: H2 Group
*/ */
package org.h2.bnf.context; package org.h2.bnf.context;
import java.sql.DatabaseMetaData; import java.sql.DatabaseMetaData;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import org.h2.util.New; import org.h2.util.New;
import org.h2.util.StringUtils; import org.h2.util.StringUtils;
/** /**
* Contains meta data information about a database schema. * Contains meta data information about a database schema.
* This class is used by the H2 Console. * This class is used by the H2 Console.
*/ */
public class DbSchema { public class DbSchema {
/** /**
* Up to this many tables, the column type and indexes are listed. * Up to this many tables, the column type and indexes are listed.
*/ */
public static final int MAX_TABLES_LIST_INDEXES = 100; public static final int MAX_TABLES_LIST_INDEXES = 100;
/** /**
* Up to this many tables, the column names are listed. * Up to this many tables, the column names are listed.
*/ */
public static final int MAX_TABLES_LIST_COLUMNS = 500; public static final int MAX_TABLES_LIST_COLUMNS = 500;
/** /**
* Up to this many tables, the column names are listed. * Up to this many tables, the column names are listed.
*/ */
public static final int MAX_PROCEDURES_LIST_COLUMNS = 500; public static final int MAX_PROCEDURES_LIST_COLUMNS = 500;
/** /**
* The schema name. * The schema name.
*/ */
public final String name; public final String name;
/** /**
* True if this is the default schema for this database. * True if this is the default schema for this database.
*/ */
public final boolean isDefault; public final boolean isDefault;
/** /**
* True if this is a system schema (for example the INFORMATION_SCHEMA). * True if this is a system schema (for example the INFORMATION_SCHEMA).
*/ */
public final boolean isSystem; public final boolean isSystem;
/** /**
* The quoted schema name. * The quoted schema name.
*/ */
public final String quotedName; public final String quotedName;
/** /**
* The database content container. * The database content container.
*/ */
private final DbContents contents; private final DbContents contents;
/** /**
* The table list. * The table list.
*/ */
private DbTableOrView[] tables; private DbTableOrView[] tables;
/** /**
* The procedures list. * The procedures list.
*/ */
private DbProcedure[] procedures; private DbProcedure[] procedures;
DbSchema(DbContents contents, String name, boolean isDefault) { DbSchema(DbContents contents, String name, boolean isDefault) {
this.contents = contents; this.contents = contents;
this.name = name; this.name = name;
this.quotedName = contents.quoteIdentifier(name); this.quotedName = contents.quoteIdentifier(name);
this.isDefault = isDefault; this.isDefault = isDefault;
if (name.equals("INFORMATION_SCHEMA")) { if (name.equals("INFORMATION_SCHEMA")) {
isSystem = true; isSystem = true;
} else if (!contents.isH2() && StringUtils.toUpperEnglish(name).startsWith("INFO")) { } else if (!contents.isH2() && StringUtils.toUpperEnglish(name).startsWith("INFO")) {
isSystem = true; isSystem = true;
} else if (contents.isPostgreSQL() && StringUtils.toUpperEnglish(name).startsWith("PG_")) { } else if (contents.isPostgreSQL() && StringUtils.toUpperEnglish(name).startsWith("PG_")) {
isSystem = true; isSystem = true;
} else if (contents.isDerby() && name.startsWith("SYS")) { } else if (contents.isDerby() && name.startsWith("SYS")) {
isSystem = true; isSystem = true;
} else { } else {
isSystem = false; isSystem = false;
} }
} }
/** /**
* @return The database content container. * @return The database content container.
*/ */
public DbContents getContents() { public DbContents getContents() {
return contents; return contents;
} }
/** /**
* @return The table list. * @return The table list.
*/ */
public DbTableOrView[] getTables() { public DbTableOrView[] getTables() {
return tables; return tables;
} }
/** /**
* @return The procedure list. * @return The procedure list.
*/ */
public DbProcedure[] getProcedures() { public DbProcedure[] getProcedures() {
return procedures; return procedures;
} }
/** /**
* Read all tables for this schema from the database meta data. * Read all tables for this schema from the database meta data.
* *
* @param meta the database meta data * @param meta the database meta data
* @param tableTypes the table types to read * @param tableTypes the table types to read
*/ */
public void readTables(DatabaseMetaData meta, String[] tableTypes) throws SQLException { public void readTables(DatabaseMetaData meta, String[] tableTypes) throws SQLException {
ResultSet rs = meta.getTables(null, name, null, tableTypes); ResultSet rs = meta.getTables(null, name, null, tableTypes);
ArrayList<DbTableOrView> list = New.arrayList(); ArrayList<DbTableOrView> list = New.arrayList();
while (rs.next()) { while (rs.next()) {
DbTableOrView table = new DbTableOrView(this, rs); DbTableOrView table = new DbTableOrView(this, rs);
if (contents.isOracle() && table.getName().indexOf('$') > 0) { if (contents.isOracle() && table.getName().indexOf('$') > 0) {
continue; continue;
} }
list.add(table); list.add(table);
} }
rs.close(); rs.close();
tables = new DbTableOrView[list.size()]; tables = new DbTableOrView[list.size()];
list.toArray(tables); list.toArray(tables);
if (tables.length < MAX_TABLES_LIST_COLUMNS) { if (tables.length < MAX_TABLES_LIST_COLUMNS) {
for (DbTableOrView tab : tables) { for (DbTableOrView tab : tables) {
tab.readColumns(meta); tab.readColumns(meta);
} }
} }
} }
/** /**
* Read all procedures in the dataBase. * Read all procedures in the dataBase.
* @param meta the database meta data * @param meta the database meta data
* @throws SQLException Error while fetching procedures * @throws SQLException Error while fetching procedures
*/ */
public void readProcedures(DatabaseMetaData meta) throws SQLException { public void readProcedures(DatabaseMetaData meta) throws SQLException {
ResultSet rs = meta.getProcedures(null, name, null); ResultSet rs = meta.getProcedures(null, name, null);
ArrayList<DbProcedure> list = New.arrayList(); ArrayList<DbProcedure> list = New.arrayList();
while (rs.next()) { while (rs.next()) {
list.add(new DbProcedure(this, rs)); list.add(new DbProcedure(this, rs));
} }
rs.close(); rs.close();
procedures = new DbProcedure[list.size()]; procedures = new DbProcedure[list.size()];
list.toArray(procedures); list.toArray(procedures);
if (procedures.length < MAX_PROCEDURES_LIST_COLUMNS) { if (procedures.length < MAX_PROCEDURES_LIST_COLUMNS) {
for (DbProcedure procedure : procedures) { for (DbProcedure procedure : procedures) {
procedure.readParameters(meta); procedure.readParameters(meta);
} }
} }
} }
} }
/* /*
* Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License, * Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0 * Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html). * (http://h2database.com/html/license.html).
* Initial Developer: H2 Group * Initial Developer: H2 Group
*/ */
package org.h2.bnf.context; package org.h2.bnf.context;
import java.sql.DatabaseMetaData; import java.sql.DatabaseMetaData;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import org.h2.util.New; import org.h2.util.New;
/** /**
* Contains meta data information about a table or a view. * Contains meta data information about a table or a view.
* This class is used by the H2 Console. * This class is used by the H2 Console.
*/ */
public class DbTableOrView { public class DbTableOrView {
/** /**
* The schema this table belongs to. * The schema this table belongs to.
*/ */
private final DbSchema schema; private final DbSchema schema;
/** /**
* The table name. * The table name.
*/ */
private final String name; private final String name;
/** /**
* The quoted table name. * The quoted table name.
*/ */
private final String quotedName; private final String quotedName;
/** /**
* True if this represents a view. * True if this represents a view.
*/ */
private final boolean isView; private final boolean isView;
/** /**
* The column list. * The column list.
*/ */
private DbColumn[] columns; private DbColumn[] columns;
public DbTableOrView(DbSchema schema, ResultSet rs) throws SQLException { public DbTableOrView(DbSchema schema, ResultSet rs) throws SQLException {
this.schema = schema; this.schema = schema;
name = rs.getString("TABLE_NAME"); name = rs.getString("TABLE_NAME");
String type = rs.getString("TABLE_TYPE"); String type = rs.getString("TABLE_TYPE");
isView = "VIEW".equals(type); isView = "VIEW".equals(type);
quotedName = schema.getContents().quoteIdentifier(name); quotedName = schema.getContents().quoteIdentifier(name);
} }
/** /**
* @return The schema this table belongs to. * @return The schema this table belongs to.
*/ */
public DbSchema getSchema() { public DbSchema getSchema() {
return schema; return schema;
} }
/** /**
* @return The column list. * @return The column list.
*/ */
public DbColumn[] getColumns() { public DbColumn[] getColumns() {
return columns; return columns;
} }
/** /**
* @return The table name. * @return The table name.
*/ */
public String getName() { public String getName() {
return name; return name;
} }
/** /**
* @return True if this represents a view. * @return True if this represents a view.
*/ */
public boolean isView() { public boolean isView() {
return isView; return isView;
} }
/** /**
* @return The quoted table name. * @return The quoted table name.
*/ */
public String getQuotedName() { public String getQuotedName() {
return quotedName; return quotedName;
} }
/** /**
* Read the column for this table from the database meta data. * Read the column for this table from the database meta data.
* *
* @param meta the database meta data * @param meta the database meta data
*/ */
public void readColumns(DatabaseMetaData meta) throws SQLException { public void readColumns(DatabaseMetaData meta) throws SQLException {
ResultSet rs = meta.getColumns(null, schema.name, name, null); ResultSet rs = meta.getColumns(null, schema.name, name, null);
ArrayList<DbColumn> list = New.arrayList(); ArrayList<DbColumn> list = New.arrayList();
while (rs.next()) { while (rs.next()) {
DbColumn column = new DbColumn(schema.getContents(), rs); DbColumn column = new DbColumn(schema.getContents(), rs);
list.add(column); list.add(column);
} }
rs.close(); rs.close();
columns = new DbColumn[list.size()]; columns = new DbColumn[list.size()];
list.toArray(columns); list.toArray(columns);
} }
} }
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Copyright 2004-2013 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
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Javadoc package documentation
</title></head><body style="font: 9pt/130% Tahoma, Arial, Helvetica, sans-serif; font-weight: normal;"><p>
Classes that provide context for the BNF tool, in order to provide BNF-based auto-complete.
</p></body></html>
\ No newline at end of file
...@@ -189,7 +189,7 @@ public class GrantRevoke extends DefineCommand { ...@@ -189,7 +189,7 @@ public class GrantRevoke extends DefineCommand {
public boolean isRoleMode() { public boolean isRoleMode() {
return roleNames != null; return roleNames != null;
} }
/** /**
* @return true if this command is using Rights * @return true if this command is using Rights
*/ */
......
...@@ -1295,7 +1295,7 @@ public class Session extends SessionWithState { ...@@ -1295,7 +1295,7 @@ public class Session extends SessionWithState {
/** /**
* Set the table this session is waiting for, and the thread that is waiting. * Set the table this session is waiting for, and the thread that is waiting.
* *
* @param waitForLock the table * @param waitForLock the table
* @param waitForLockThread the current thread (the one that is waiting) * @param waitForLockThread the current thread (the one that is waiting)
*/ */
...@@ -1311,7 +1311,7 @@ public class Session extends SessionWithState { ...@@ -1311,7 +1311,7 @@ public class Session extends SessionWithState {
public Thread getWaitForLockThread() { public Thread getWaitForLockThread() {
return waitForLockThread; return waitForLockThread;
} }
public int getModificationId() { public int getModificationId() {
return modificationId; return modificationId;
} }
......
...@@ -204,7 +204,7 @@ public class User extends RightOwner { ...@@ -204,7 +204,7 @@ public class User extends RightOwner {
throw DbException.get(ErrorCode.ADMIN_RIGHTS_REQUIRED); throw DbException.get(ErrorCode.ADMIN_RIGHTS_REQUIRED);
} }
} }
/** /**
* Check if this user has schema admin rights. An exception is thrown if he does * Check if this user has schema admin rights. An exception is thrown if he does
* not have them. * not have them.
......
...@@ -951,7 +951,7 @@ public class MVStore { ...@@ -951,7 +951,7 @@ public class MVStore {
fileStore.markUsed(end, length); fileStore.markUsed(end, length);
} }
boolean storeAtEndOfFile = filePos + length >= end; boolean storeAtEndOfFile = filePos + length >= end;
// try { // try {
// Thread.sleep(10); // Thread.sleep(10);
// } catch (InterruptedException e) { // } catch (InterruptedException e) {
...@@ -995,7 +995,7 @@ public class MVStore { ...@@ -995,7 +995,7 @@ public class MVStore {
// some pages might have been changed in the meantime (in the newest version) // some pages might have been changed in the meantime (in the newest version)
unsavedPageCount = Math.max(0, unsavedPageCount - currentUnsavedPageCount); unsavedPageCount = Math.max(0, unsavedPageCount - currentUnsavedPageCount);
if (!temp) { if (!temp) {
metaChanged = false; metaChanged = false;
lastStoredVersion = storeVersion; lastStoredVersion = storeVersion;
......
...@@ -14,7 +14,7 @@ import java.nio.ByteBuffer; ...@@ -14,7 +14,7 @@ import java.nio.ByteBuffer;
public class WriteBuffer { public class WriteBuffer {
private static final int MAX_REUSE_LIMIT = 4 * 1024 * 1024; private static final int MAX_REUSE_LIMIT = 4 * 1024 * 1024;
/** /**
* The maximum byte to grow a buffer at a time. * The maximum byte to grow a buffer at a time.
*/ */
...@@ -23,10 +23,10 @@ public class WriteBuffer { ...@@ -23,10 +23,10 @@ public class WriteBuffer {
private ByteBuffer reuse = ByteBuffer.allocate(512 * 1024); private ByteBuffer reuse = ByteBuffer.allocate(512 * 1024);
private ByteBuffer buff = reuse; private ByteBuffer buff = reuse;
/** /**
* Write a variable size integer. * Write a variable size integer.
* *
* @param x the value * @param x the value
* @return this * @return this
*/ */
...@@ -34,10 +34,10 @@ public class WriteBuffer { ...@@ -34,10 +34,10 @@ public class WriteBuffer {
DataUtils.writeVarInt(ensureCapacity(5), x); DataUtils.writeVarInt(ensureCapacity(5), x);
return this; return this;
} }
/** /**
* Write a variable size long. * Write a variable size long.
* *
* @param x the value * @param x the value
* @return this * @return this
*/ */
...@@ -48,7 +48,7 @@ public class WriteBuffer { ...@@ -48,7 +48,7 @@ public class WriteBuffer {
/** /**
* Write the characters of a string in a format similar to UTF-8. * Write the characters of a string in a format similar to UTF-8.
* *
* @param s the string * @param s the string
* @param len the number of characters to write * @param len the number of characters to write
* @return this * @return this
...@@ -73,7 +73,7 @@ public class WriteBuffer { ...@@ -73,7 +73,7 @@ public class WriteBuffer {
/** /**
* Put a byte. * Put a byte.
* *
* @param x the value * @param x the value
* @return this * @return this
*/ */
...@@ -81,10 +81,10 @@ public class WriteBuffer { ...@@ -81,10 +81,10 @@ public class WriteBuffer {
ensureCapacity(1).put(x); ensureCapacity(1).put(x);
return this; return this;
} }
/** /**
* Put a character. * Put a character.
* *
* @param x the value * @param x the value
* @return this * @return this
*/ */
...@@ -92,10 +92,10 @@ public class WriteBuffer { ...@@ -92,10 +92,10 @@ public class WriteBuffer {
ensureCapacity(2).putChar(x); ensureCapacity(2).putChar(x);
return this; return this;
} }
/** /**
* Put a short. * Put a short.
* *
* @param x the value * @param x the value
* @return this * @return this
*/ */
...@@ -103,10 +103,10 @@ public class WriteBuffer { ...@@ -103,10 +103,10 @@ public class WriteBuffer {
ensureCapacity(2).putShort(x); ensureCapacity(2).putShort(x);
return this; return this;
} }
/** /**
* Put an integer. * Put an integer.
* *
* @param x the value * @param x the value
* @return this * @return this
*/ */
...@@ -114,10 +114,10 @@ public class WriteBuffer { ...@@ -114,10 +114,10 @@ public class WriteBuffer {
ensureCapacity(4).putInt(x); ensureCapacity(4).putInt(x);
return this; return this;
} }
/** /**
* Put a long. * Put a long.
* *
* @param x the value * @param x the value
* @return this * @return this
*/ */
...@@ -125,10 +125,10 @@ public class WriteBuffer { ...@@ -125,10 +125,10 @@ public class WriteBuffer {
ensureCapacity(8).putLong(x); ensureCapacity(8).putLong(x);
return this; return this;
} }
/** /**
* Put a float. * Put a float.
* *
* @param x the value * @param x the value
* @return this * @return this
*/ */
...@@ -136,10 +136,10 @@ public class WriteBuffer { ...@@ -136,10 +136,10 @@ public class WriteBuffer {
ensureCapacity(4).putFloat(x); ensureCapacity(4).putFloat(x);
return this; return this;
} }
/** /**
* Put a double. * Put a double.
* *
* @param x the value * @param x the value
* @return this * @return this
*/ */
...@@ -150,7 +150,7 @@ public class WriteBuffer { ...@@ -150,7 +150,7 @@ public class WriteBuffer {
/** /**
* Put a byte array. * Put a byte array.
* *
* @param bytes the value * @param bytes the value
* @return this * @return this
*/ */
...@@ -158,10 +158,10 @@ public class WriteBuffer { ...@@ -158,10 +158,10 @@ public class WriteBuffer {
ensureCapacity(bytes.length).put(bytes); ensureCapacity(bytes.length).put(bytes);
return this; return this;
} }
/** /**
* Put a byte array. * Put a byte array.
* *
* @param bytes the value * @param bytes the value
* @param offset the source offset * @param offset the source offset
* @param length the number of bytes * @param length the number of bytes
...@@ -174,7 +174,7 @@ public class WriteBuffer { ...@@ -174,7 +174,7 @@ public class WriteBuffer {
/** /**
* Put the contents of a byte buffer. * Put the contents of a byte buffer.
* *
* @param src the source buffer * @param src the source buffer
* @return this * @return this
*/ */
...@@ -185,7 +185,7 @@ public class WriteBuffer { ...@@ -185,7 +185,7 @@ public class WriteBuffer {
/** /**
* Set the limit, possibly growing the buffer. * Set the limit, possibly growing the buffer.
* *
* @param newLimit the new limit * @param newLimit the new limit
* @return this * @return this
*/ */
...@@ -193,19 +193,19 @@ public class WriteBuffer { ...@@ -193,19 +193,19 @@ public class WriteBuffer {
ensureCapacity(newLimit - buff.position()).limit(newLimit); ensureCapacity(newLimit - buff.position()).limit(newLimit);
return this; return this;
} }
/** /**
* Get the capacity. * Get the capacity.
* *
* @return the capacity * @return the capacity
*/ */
public int capacity() { public int capacity() {
return buff.capacity(); return buff.capacity();
} }
/** /**
* Set the position. * Set the position.
* *
* @param newPosition the new position * @param newPosition the new position
* @return the new position * @return the new position
*/ */
...@@ -216,25 +216,25 @@ public class WriteBuffer { ...@@ -216,25 +216,25 @@ public class WriteBuffer {
/** /**
* Get the limit. * Get the limit.
* *
* @return the limit * @return the limit
*/ */
public int limit() { public int limit() {
return buff.limit(); return buff.limit();
} }
/** /**
* Get the current position. * Get the current position.
* *
* @return the position * @return the position
*/ */
public int position() { public int position() {
return buff.position(); return buff.position();
} }
/** /**
* Copy the data into the destination array. * Copy the data into the destination array.
* *
* @param dst the destination array * @param dst the destination array
* @return this * @return this
*/ */
...@@ -242,10 +242,10 @@ public class WriteBuffer { ...@@ -242,10 +242,10 @@ public class WriteBuffer {
buff.get(dst); buff.get(dst);
return this; return this;
} }
/** /**
* Update an integer at the given index. * Update an integer at the given index.
* *
* @param index the index * @param index the index
* @param value the value * @param value the value
* @return this * @return this
...@@ -254,10 +254,10 @@ public class WriteBuffer { ...@@ -254,10 +254,10 @@ public class WriteBuffer {
buff.putInt(index, value); buff.putInt(index, value);
return this; return this;
} }
/** /**
* Update a short at the given index. * Update a short at the given index.
* *
* @param index the index * @param index the index
* @param value the value * @param value the value
* @return this * @return this
...@@ -269,7 +269,7 @@ public class WriteBuffer { ...@@ -269,7 +269,7 @@ public class WriteBuffer {
/** /**
* Clear the buffer after use. * Clear the buffer after use.
* *
* @return this * @return this
*/ */
public WriteBuffer clear() { public WriteBuffer clear() {
...@@ -281,10 +281,10 @@ public class WriteBuffer { ...@@ -281,10 +281,10 @@ public class WriteBuffer {
buff.clear(); buff.clear();
return this; return this;
} }
/** /**
* Get the byte buffer. * Get the byte buffer.
* *
* @return the byte buffer * @return the byte buffer
*/ */
public ByteBuffer getBuffer() { public ByteBuffer getBuffer() {
...@@ -297,7 +297,7 @@ public class WriteBuffer { ...@@ -297,7 +297,7 @@ public class WriteBuffer {
} }
return buff; return buff;
} }
private void grow(int len) { private void grow(int len) {
ByteBuffer temp = buff; ByteBuffer temp = buff;
len = temp.remaining() + len; len = temp.remaining() + len;
...@@ -310,5 +310,5 @@ public class WriteBuffer { ...@@ -310,5 +310,5 @@ public class WriteBuffer {
reuse = buff; reuse = buff;
} }
} }
} }
...@@ -880,7 +880,7 @@ public class CacheLongKeyLIRS<V> { ...@@ -880,7 +880,7 @@ public class CacheLongKeyLIRS<V> {
/** /**
* Remove the entry from the stack. The head itself must not be removed. * Remove the entry from the stack. The head itself must not be removed.
* *
* @param e the entry * @param e the entry
*/ */
private void removeFromStack(Entry<V> e) { private void removeFromStack(Entry<V> e) {
......
...@@ -205,7 +205,7 @@ public class ValueDataType implements DataType { ...@@ -205,7 +205,7 @@ public class ValueDataType implements DataType {
buff.put((byte) DECIMAL_SMALL_0). buff.put((byte) DECIMAL_SMALL_0).
putVarLong(b.longValue()); putVarLong(b.longValue());
} else { } else {
buff.put((byte) DECIMAL_SMALL). buff.put((byte) DECIMAL_SMALL).
putVarInt(scale). putVarInt(scale).
putVarLong(b.longValue()); putVarLong(b.longValue());
} }
......
...@@ -294,6 +294,10 @@ GRANT { SELECT | INSERT | UPDATE | DELETE | ALL } [,...] ON ...@@ -294,6 +294,10 @@ GRANT { SELECT | INSERT | UPDATE | DELETE | ALL } [,...] ON
tableName [,...] TO { PUBLIC | userName | roleName } tableName [,...] TO { PUBLIC | userName | roleName }
"," ","
Grants rights for a table to a user or role." Grants rights for a table to a user or role."
"Commands (Other)","GRANT ALTER ANY SCHEMA","
GRANT ALTER ANY SCHEMA TO userName
","
Grant schema altering rights to a user."
"Commands (Other)","GRANT ROLE"," "Commands (Other)","GRANT ROLE","
GRANT roleName TO { PUBLIC | userName | roleName } GRANT roleName TO { PUBLIC | userName | roleName }
"," ","
......
...@@ -160,5 +160,5 @@ public class WebServlet extends HttpServlet { ...@@ -160,5 +160,5 @@ public class WebServlet extends HttpServlet {
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
doGet(req, resp); doGet(req, resp);
} }
} }
...@@ -190,7 +190,7 @@ class FileRec extends FileBase { ...@@ -190,7 +190,7 @@ class FileRec extends FileBase {
rec.log(Recorder.WRITE, name, buff, channel.position()); rec.log(Recorder.WRITE, name, buff, channel.position());
return result; return result;
} }
@Override @Override
public int write(ByteBuffer src, long position) throws IOException { public int write(ByteBuffer src, long position) throws IOException {
byte[] buff = src.array(); byte[] buff = src.array();
......
...@@ -52,8 +52,8 @@ public class ValueGeometry extends Value { ...@@ -52,8 +52,8 @@ public class ValueGeometry extends Value {
} }
private static ValueGeometry get(Geometry g) { private static ValueGeometry get(Geometry g) {
// not all WKT values can be represented in WKB, but since we persist it in WKB format, // not all WKT values can be represented in WKB, but since we persist it
// it has to be valid in WKB // in WKB format, it has to be valid in WKB
toWKB(g); toWKB(g);
return (ValueGeometry) Value.cache(new ValueGeometry(g)); return (ValueGeometry) Value.cache(new ValueGeometry(g));
} }
...@@ -66,8 +66,8 @@ public class ValueGeometry extends Value { ...@@ -66,8 +66,8 @@ public class ValueGeometry extends Value {
*/ */
public static ValueGeometry get(String s) { public static ValueGeometry get(String s) {
Geometry g = fromWKT(s); Geometry g = fromWKT(s);
// not all WKT values can be represented in WKB, but since we persist it in WKB format, // not all WKT values can be represented in WKB, but since we persist it
// it has to be valid in WKB // in WKB format, it has to be valid in WKB
toWKB(g); toWKB(g);
return (ValueGeometry) Value.cache(new ValueGeometry(g)); return (ValueGeometry) Value.cache(new ValueGeometry(g));
} }
...@@ -216,7 +216,7 @@ public class ValueGeometry extends Value { ...@@ -216,7 +216,7 @@ public class ValueGeometry extends Value {
public byte[] toWKB() { public byte[] toWKB() {
return toWKB(geometry); return toWKB(geometry);
} }
private static byte[] toWKB(Geometry geometry) { private static byte[] toWKB(Geometry geometry) {
int dimensionCount = getDimensionCount(geometry); int dimensionCount = getDimensionCount(geometry);
boolean includeSRID = geometry.getSRID() != 0; boolean includeSRID = geometry.getSRID() != 0;
...@@ -265,7 +265,7 @@ public class ValueGeometry extends Value { ...@@ -265,7 +265,7 @@ public class ValueGeometry extends Value {
} }
return super.convertTo(targetType); return super.convertTo(targetType);
} }
/** /**
* A visitor that checks if there is a Z coordinate. * A visitor that checks if there is a Z coordinate.
*/ */
...@@ -292,7 +292,7 @@ public class ValueGeometry extends Value { ...@@ -292,7 +292,7 @@ public class ValueGeometry extends Value {
public boolean isGeometryChanged() { public boolean isGeometryChanged() {
return false; return false;
} }
} }
} }
...@@ -231,7 +231,7 @@ java -cp . org.h2.test.TestAll crash >testCrash.txt ...@@ -231,7 +231,7 @@ java -cp . org.h2.test.TestAll crash >testCrash.txt
java org.h2.test.TestAll timer java org.h2.test.TestAll timer
*/ */
; ;
private static final boolean MV_STORE = false; private static final boolean MV_STORE = false;
......
...@@ -42,7 +42,7 @@ public class TestRights extends TestBase { ...@@ -42,7 +42,7 @@ public class TestRights extends TestBase {
testDropTempTables(); testDropTempTables();
// testLowerCaseUser(); // testLowerCaseUser();
testSchemaRenameUser(); testSchemaRenameUser();
testAccessRights(); testAccessRights();
testSchemaAdminRole(); testSchemaAdminRole();
deleteDb("rights"); deleteDb("rights");
} }
...@@ -199,7 +199,7 @@ public class TestRights extends TestBase { ...@@ -199,7 +199,7 @@ public class TestRights extends TestBase {
stat.execute("drop user test1"); stat.execute("drop user test1");
conn.close(); conn.close();
} }
private void testSchemaAdminRole() throws SQLException { private void testSchemaAdminRole() throws SQLException {
if (config.memory) { if (config.memory) {
return; return;
...@@ -213,14 +213,14 @@ public class TestRights extends TestBase { ...@@ -213,14 +213,14 @@ public class TestRights extends TestBase {
testTableType(conn, "CACHED"); testTableType(conn, "CACHED");
executeSuccess("CREATE USER SCHEMA_CREATOR PASSWORD 'xyz'"); executeSuccess("CREATE USER SCHEMA_CREATOR PASSWORD 'xyz'");
executeSuccess("CREATE SCHEMA SCHEMA_RIGHT_TEST"); executeSuccess("CREATE SCHEMA SCHEMA_RIGHT_TEST");
executeSuccess("ALTER SCHEMA SCHEMA_RIGHT_TEST RENAME TO SCHEMA_RIGHT_TEST_RENAMED"); executeSuccess("ALTER SCHEMA SCHEMA_RIGHT_TEST RENAME TO SCHEMA_RIGHT_TEST_RENAMED");
executeSuccess("DROP SCHEMA SCHEMA_RIGHT_TEST_RENAMED"); executeSuccess("DROP SCHEMA SCHEMA_RIGHT_TEST_RENAMED");
executeSuccess("CREATE SCHEMA SCHEMA_RIGHT_TEST_EXISTS"); executeSuccess("CREATE SCHEMA SCHEMA_RIGHT_TEST_EXISTS");
conn.close(); conn.close();
/* try and fail */ // try and fail
conn = getConnection("rights;LOG=2", "SCHEMA_CREATOR", getPassword("xyz")); conn = getConnection("rights;LOG=2", "SCHEMA_CREATOR", getPassword("xyz"));
stat = conn.createStatement(); stat = conn.createStatement();
assertThrows(ErrorCode.ADMIN_RIGHTS_REQUIRED, stat).execute( assertThrows(ErrorCode.ADMIN_RIGHTS_REQUIRED, stat).execute(
...@@ -230,15 +230,15 @@ public class TestRights extends TestBase { ...@@ -230,15 +230,15 @@ public class TestRights extends TestBase {
assertThrows(ErrorCode.ADMIN_RIGHTS_REQUIRED, stat).execute( assertThrows(ErrorCode.ADMIN_RIGHTS_REQUIRED, stat).execute(
"DROP SCHEMA SCHEMA_RIGHT_TEST_EXISTS"); "DROP SCHEMA SCHEMA_RIGHT_TEST_EXISTS");
conn.close(); conn.close();
/* give them */ // give them
conn = getConnection("rights"); conn = getConnection("rights");
stat = conn.createStatement(); stat = conn.createStatement();
executeSuccess("DROP SCHEMA SCHEMA_RIGHT_TEST_EXISTS"); executeSuccess("DROP SCHEMA SCHEMA_RIGHT_TEST_EXISTS");
executeSuccess("GRANT ALTER ANY SCHEMA TO SCHEMA_CREATOR"); executeSuccess("GRANT ALTER ANY SCHEMA TO SCHEMA_CREATOR");
conn.close(); conn.close();
/* try and succeed */ // try and succeed
conn = getConnection("rights;LOG=2", "SCHEMA_CREATOR", getPassword("xyz")); conn = getConnection("rights;LOG=2", "SCHEMA_CREATOR", getPassword("xyz"));
stat = conn.createStatement(); stat = conn.createStatement();
executeSuccess("CREATE SCHEMA SCHEMA_RIGHT_TEST"); executeSuccess("CREATE SCHEMA SCHEMA_RIGHT_TEST");
...@@ -246,14 +246,14 @@ public class TestRights extends TestBase { ...@@ -246,14 +246,14 @@ public class TestRights extends TestBase {
executeSuccess("DROP SCHEMA SCHEMA_RIGHT_TEST_RENAMED"); executeSuccess("DROP SCHEMA SCHEMA_RIGHT_TEST_RENAMED");
executeSuccess("CREATE SCHEMA SCHEMA_RIGHT_TEST_EXISTS"); executeSuccess("CREATE SCHEMA SCHEMA_RIGHT_TEST_EXISTS");
conn.close(); conn.close();
/* revoke them */ // revoke them
conn = getConnection("rights"); conn = getConnection("rights");
stat = conn.createStatement(); stat = conn.createStatement();
executeSuccess("REVOKE ALTER ANY SCHEMA FROM SCHEMA_CREATOR"); executeSuccess("REVOKE ALTER ANY SCHEMA FROM SCHEMA_CREATOR");
conn.close(); conn.close();
/* try and fail */ // try and fail
conn = getConnection("rights;LOG=2", "SCHEMA_CREATOR", getPassword("xyz")); conn = getConnection("rights;LOG=2", "SCHEMA_CREATOR", getPassword("xyz"));
stat = conn.createStatement(); stat = conn.createStatement();
assertThrows(ErrorCode.ADMIN_RIGHTS_REQUIRED, stat). assertThrows(ErrorCode.ADMIN_RIGHTS_REQUIRED, stat).
......
...@@ -548,7 +548,7 @@ public class TestSpatial extends TestBase { ...@@ -548,7 +548,7 @@ public class TestSpatial extends TestBase {
/** /**
* Get the toString value of the object. * Get the toString value of the object.
* *
* @param object the object * @param object the object
* @return the string representation * @return the string representation
*/ */
...@@ -581,5 +581,5 @@ public class TestSpatial extends TestBase { ...@@ -581,5 +581,5 @@ public class TestSpatial extends TestBase {
// expected // expected
} }
} }
} }
...@@ -74,7 +74,7 @@ public class TestWeb extends TestBase { ...@@ -74,7 +74,7 @@ public class TestWeb extends TestBase {
testWebApp(); testWebApp();
testIfExists(); testIfExists();
} }
private void testServlet() throws Exception { private void testServlet() throws Exception {
WebServlet servlet = new WebServlet(); WebServlet servlet = new WebServlet();
final HashMap<String, String> configMap = new HashMap<String, String>(); final HashMap<String, String> configMap = new HashMap<String, String>();
...@@ -88,7 +88,7 @@ public class TestWeb extends TestBase { ...@@ -88,7 +88,7 @@ public class TestWeb extends TestBase {
public String getServletName() { public String getServletName() {
return "H2Console"; return "H2Console";
} }
@Override @Override
public Enumeration<String> getInitParameterNames() { public Enumeration<String> getInitParameterNames() {
return new Vector<String>(configMap.keySet()).elements(); return new Vector<String>(configMap.keySet()).elements();
...@@ -278,10 +278,10 @@ public class TestWeb extends TestBase { ...@@ -278,10 +278,10 @@ public class TestWeb extends TestBase {
result = client.get(url); result = client.get(url);
client.readSessionId(result); client.readSessionId(result);
result = client.get(url, "login.jsp"); result = client.get(url, "login.jsp");
result = client.get(url, "test.do?driver=org.h2.Driver&url=jdbc:h2:mem:webExists" + result = client.get(url, "test.do?driver=org.h2.Driver&url=jdbc:h2:mem:webExists" +
"&user=" + getUser() + "&password=" + getPassword() + "&name=_test_"); "&user=" + getUser() + "&password=" + getPassword() + "&name=_test_");
assertTrue(result.indexOf("Exception") < 0); assertTrue(result.indexOf("Exception") < 0);
result = client.get(url, "test.do?driver=org.h2.Driver&url=jdbc:h2:mem:web" + result = client.get(url, "test.do?driver=org.h2.Driver&url=jdbc:h2:mem:web" +
"&user=" + getUser() + "&password=" + getPassword() + "&name=_test_"); "&user=" + getUser() + "&password=" + getPassword() + "&name=_test_");
assertContains(result, "Exception"); assertContains(result, "Exception");
} finally { } finally {
...@@ -289,7 +289,7 @@ public class TestWeb extends TestBase { ...@@ -289,7 +289,7 @@ public class TestWeb extends TestBase {
conn.close(); conn.close();
} }
} }
private void testWebApp() throws Exception { private void testWebApp() throws Exception {
Server server = new Server(); Server server = new Server();
server.setOut(new PrintStream(new ByteArrayOutputStream())); server.setOut(new PrintStream(new ByteArrayOutputStream()));
...@@ -561,18 +561,18 @@ public class TestWeb extends TestBase { ...@@ -561,18 +561,18 @@ public class TestWeb extends TestBase {
public static void openBrowser(String url) { public static void openBrowser(String url) {
lastUrl = url; lastUrl = url;
} }
/** /**
* A HTTP servlet request for testing. * A HTTP servlet request for testing.
*/ */
static class TestHttpServletRequest implements HttpServletRequest { static class TestHttpServletRequest implements HttpServletRequest {
private String pathInfo; private String pathInfo;
void setPathInfo(String pathInfo) { void setPathInfo(String pathInfo) {
this.pathInfo = pathInfo; this.pathInfo = pathInfo;
} }
@Override @Override
public Object getAttribute(String name) { public Object getAttribute(String name) {
return null; return null;
...@@ -843,16 +843,16 @@ public class TestWeb extends TestBase { ...@@ -843,16 +843,16 @@ public class TestWeb extends TestBase {
public boolean isUserInRole(String x) { public boolean isUserInRole(String x) {
return false; return false;
} }
} }
/** /**
* A HTTP servlet response for testing. * A HTTP servlet response for testing.
*/ */
static class TestHttpServletResponse implements HttpServletResponse { static class TestHttpServletResponse implements HttpServletResponse {
ServletOutputStream servletOutputStream; ServletOutputStream servletOutputStream;
void setServletOutputStream(ServletOutputStream servletOutputStream) { void setServletOutputStream(ServletOutputStream servletOutputStream) {
this.servletOutputStream = servletOutputStream; this.servletOutputStream = servletOutputStream;
} }
...@@ -1016,21 +1016,21 @@ public class TestWeb extends TestBase { ...@@ -1016,21 +1016,21 @@ public class TestWeb extends TestBase {
public void setStatus(int arg0, String arg1) { public void setStatus(int arg0, String arg1) {
// ignore // ignore
} }
} }
/** /**
* A servlet output stream for testing. * A servlet output stream for testing.
*/ */
static class TestServletOutputStream extends ServletOutputStream { static class TestServletOutputStream extends ServletOutputStream {
private final ByteArrayOutputStream buff = new ByteArrayOutputStream(); private final ByteArrayOutputStream buff = new ByteArrayOutputStream();
@Override @Override
public void write(int b) throws IOException { public void write(int b) throws IOException {
buff.write(b); buff.write(b);
} }
@Override @Override
public String toString() { public String toString() {
try { try {
...@@ -1039,7 +1039,7 @@ public class TestWeb extends TestBase { ...@@ -1039,7 +1039,7 @@ public class TestWeb extends TestBase {
return e.toString(); return e.toString();
} }
} }
} }
} }
...@@ -46,7 +46,7 @@ public class TestCacheLIRS extends TestBase { ...@@ -46,7 +46,7 @@ public class TestCacheLIRS extends TestBase {
testScanResistance(); testScanResistance();
testRandomOperations(); testRandomOperations();
} }
private static void testRandomSmallCache() { private static void testRandomSmallCache() {
Random r = new Random(1); Random r = new Random(1);
for (int i = 0; i < 10000; i++) { for (int i = 0; i < 10000; i++) {
......
...@@ -45,7 +45,7 @@ public class TestCacheLongKeyLIRS extends TestBase { ...@@ -45,7 +45,7 @@ public class TestCacheLongKeyLIRS extends TestBase {
testScanResistance(); testScanResistance();
testRandomOperations(); testRandomOperations();
} }
private static void testRandomSmallCache() { private static void testRandomSmallCache() {
Random r = new Random(1); Random r = new Random(1);
for (int i = 0; i < 10000; i++) { for (int i = 0; i < 10000; i++) {
......
...@@ -39,7 +39,7 @@ public class TestKillProcessWhileWriting extends TestBase { ...@@ -39,7 +39,7 @@ public class TestKillProcessWhileWriting extends TestBase {
fs.setPartialWrites(false); fs.setPartialWrites(false);
test("unstable:memFS:killProcess.h3"); test("unstable:memFS:killProcess.h3");
if (config.big) { if (config.big) {
fs.setPartialWrites(true); fs.setPartialWrites(true);
test("unstable:memFS:killProcess.h3"); test("unstable:memFS:killProcess.h3");
} }
......
/* /*
* Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License, * Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0 * Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html). * (http://h2database.com/html/license.html).
* Initial Developer: H2 Group * Initial Developer: H2 Group
*/ */
package org.h2.test.unit; package org.h2.test.unit;
import org.h2.bnf.Bnf; import org.h2.bnf.Bnf;
import org.h2.bnf.context.DbContents; import org.h2.bnf.context.DbContents;
import org.h2.bnf.context.DbContextRule; import org.h2.bnf.context.DbContextRule;
import org.h2.bnf.context.DbProcedure; import org.h2.bnf.context.DbProcedure;
import org.h2.bnf.context.DbSchema; import org.h2.bnf.context.DbSchema;
import org.h2.test.TestBase; import org.h2.test.TestBase;
import java.sql.Connection; import java.sql.Connection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
* Test Bnf Sql parser * Test Bnf Sql parser
* @author Nicolas Fortin * @author Nicolas Fortin
*/ */
public class TestBnf extends TestBase { public class TestBnf extends TestBase {
/** /**
* Run just this test. * Run just this test.
* *
* @param a ignored * @param a ignored
*/ */
public static void main(String... a) throws Exception { public static void main(String... a) throws Exception {
TestBase.createCaller().init().test(); TestBase.createCaller().init().test();
} }
@Override @Override
public void test() throws Exception { public void test() throws Exception {
deleteDb("bnf"); deleteDb("bnf");
Connection conn = getConnection("bnf"); Connection conn = getConnection("bnf");
try { try {
testProcedures(conn, false); testProcedures(conn, false);
} finally { } finally {
conn.close(); conn.close();
} }
conn = getConnection("bnf;mode=mysql"); conn = getConnection("bnf;mode=mysql");
try { try {
testProcedures(conn, true); testProcedures(conn, true);
} finally { } finally {
conn.close(); conn.close();
} }
} }
private void testProcedures(Connection conn, boolean isMySQLMode) throws Exception { private void testProcedures(Connection conn, boolean isMySQLMode) throws Exception {
// Register a procedure and check if it is present in DbContents // Register a procedure and check if it is present in DbContents
conn.createStatement().execute("DROP ALIAS IF EXISTS CUSTOM_PRINT"); conn.createStatement().execute("DROP ALIAS IF EXISTS CUSTOM_PRINT");
conn.createStatement().execute("CREATE ALIAS CUSTOM_PRINT AS $$ void print(String s) { System.out.println(s); } $$"); conn.createStatement().execute("CREATE ALIAS CUSTOM_PRINT AS $$ void print(String s) { System.out.println(s); } $$");
conn.createStatement().execute("DROP TABLE IF EXISTS TABLE_WITH_STRING_FIELD"); conn.createStatement().execute("DROP TABLE IF EXISTS TABLE_WITH_STRING_FIELD");
conn.createStatement().execute("CREATE TABLE TABLE_WITH_STRING_FIELD (STRING_FIELD VARCHAR(50), INT_FIELD integer)"); conn.createStatement().execute("CREATE TABLE TABLE_WITH_STRING_FIELD (STRING_FIELD VARCHAR(50), INT_FIELD integer)");
DbContents dbContents = new DbContents(); DbContents dbContents = new DbContents();
dbContents.readContents(conn.getMetaData()); dbContents.readContents(conn.getMetaData());
assertTrue(dbContents.isH2()); assertTrue(dbContents.isH2());
assertFalse(dbContents.isDerby()); assertFalse(dbContents.isDerby());
assertFalse(dbContents.isFirebird()); assertFalse(dbContents.isFirebird());
assertEquals(null, dbContents.quoteIdentifier(null)); assertEquals(null, dbContents.quoteIdentifier(null));
if (isMySQLMode) { if (isMySQLMode) {
assertTrue(dbContents.isH2ModeMySQL()); assertTrue(dbContents.isH2ModeMySQL());
assertEquals("TEST", dbContents.quoteIdentifier("TEST")); assertEquals("TEST", dbContents.quoteIdentifier("TEST"));
assertEquals("TEST", dbContents.quoteIdentifier("Test")); assertEquals("TEST", dbContents.quoteIdentifier("Test"));
assertEquals("TEST", dbContents.quoteIdentifier("test")); assertEquals("TEST", dbContents.quoteIdentifier("test"));
} else { } else {
assertFalse(dbContents.isH2ModeMySQL()); assertFalse(dbContents.isH2ModeMySQL());
assertEquals("TEST", dbContents.quoteIdentifier("TEST")); assertEquals("TEST", dbContents.quoteIdentifier("TEST"));
assertEquals("\"Test\"", dbContents.quoteIdentifier("Test")); assertEquals("\"Test\"", dbContents.quoteIdentifier("Test"));
assertEquals("\"test\"", dbContents.quoteIdentifier("test")); assertEquals("\"test\"", dbContents.quoteIdentifier("test"));
} }
assertFalse(dbContents.isMSSQLServer()); assertFalse(dbContents.isMSSQLServer());
assertFalse(dbContents.isMySQL()); assertFalse(dbContents.isMySQL());
assertFalse(dbContents.isOracle()); assertFalse(dbContents.isOracle());
assertFalse(dbContents.isPostgreSQL()); assertFalse(dbContents.isPostgreSQL());
assertFalse(dbContents.isSQLite()); assertFalse(dbContents.isSQLite());
DbSchema defaultSchema = dbContents.getDefaultSchema(); DbSchema defaultSchema = dbContents.getDefaultSchema();
DbProcedure[] procedures = defaultSchema.getProcedures(); DbProcedure[] procedures = defaultSchema.getProcedures();
Set<String> procedureName = new HashSet<String>(procedures.length); Set<String> procedureName = new HashSet<String>(procedures.length);
for (DbProcedure procedure : procedures) { for (DbProcedure procedure : procedures) {
assertTrue(defaultSchema == procedure.getSchema()); assertTrue(defaultSchema == procedure.getSchema());
procedureName.add(procedure.getName()); procedureName.add(procedure.getName());
} }
if (isMySQLMode) { if (isMySQLMode) {
assertTrue(procedureName.contains("custom_print")); assertTrue(procedureName.contains("custom_print"));
} else { } else {
assertTrue(procedureName.contains("CUSTOM_PRINT")); assertTrue(procedureName.contains("CUSTOM_PRINT"));
} }
if (isMySQLMode) { if (isMySQLMode) {
return; return;
} }
// Test completion // Test completion
Bnf bnf = Bnf.getInstance(null); Bnf bnf = Bnf.getInstance(null);
DbContextRule columnRule = new DbContextRule(dbContents, DbContextRule.COLUMN); DbContextRule columnRule = new DbContextRule(dbContents, DbContextRule.COLUMN);
bnf.updateTopic("column_name", columnRule); bnf.updateTopic("column_name", columnRule);
bnf.updateTopic("expression", new DbContextRule(dbContents, DbContextRule.PROCEDURE)); bnf.updateTopic("expression", new DbContextRule(dbContents, DbContextRule.PROCEDURE));
bnf.linkStatements(); bnf.linkStatements();
// Test partial // Test partial
Map<String, String> tokens = bnf.getNextTokenList("SELECT CUSTOM_PR"); Map<String, String> tokens = bnf.getNextTokenList("SELECT CUSTOM_PR");
assertTrue(tokens.values().contains("INT")); assertTrue(tokens.values().contains("INT"));
// Test parameters // Test parameters
tokens = bnf.getNextTokenList("SELECT CUSTOM_PRINT("); tokens = bnf.getNextTokenList("SELECT CUSTOM_PRINT(");
assertTrue(tokens.values().contains("STRING_FIELD")); assertTrue(tokens.values().contains("STRING_FIELD"));
assertFalse(tokens.values().contains("INT_FIELD")); assertFalse(tokens.values().contains("INT_FIELD"));
// Test parameters with spaces // Test parameters with spaces
tokens = bnf.getNextTokenList("SELECT CUSTOM_PRINT ( "); tokens = bnf.getNextTokenList("SELECT CUSTOM_PRINT ( ");
assertTrue(tokens.values().contains("STRING_FIELD")); assertTrue(tokens.values().contains("STRING_FIELD"));
assertFalse(tokens.values().contains("INT_FIELD")); assertFalse(tokens.values().contains("INT_FIELD"));
// Test parameters with close bracket // Test parameters with close bracket
tokens = bnf.getNextTokenList("SELECT CUSTOM_PRINT ( STRING_FIELD"); tokens = bnf.getNextTokenList("SELECT CUSTOM_PRINT ( STRING_FIELD");
assertTrue(tokens.values().contains(")")); assertTrue(tokens.values().contains(")"));
} }
} }
\ No newline at end of file
...@@ -206,7 +206,7 @@ public class TestFileSystem extends TestBase { ...@@ -206,7 +206,7 @@ public class TestFileSystem extends TestBase {
private void testMemFsDir() throws IOException { private void testMemFsDir() throws IOException {
FileUtils.newOutputStream("memFS:data/test/a.txt", false).close(); FileUtils.newOutputStream("memFS:data/test/a.txt", false).close();
assertEquals(FileUtils.newDirectoryStream("memFS:data/test").toString(), assertEquals(FileUtils.newDirectoryStream("memFS:data/test").toString(),
1, FileUtils.newDirectoryStream("memFS:data/test").size()); 1, FileUtils.newDirectoryStream("memFS:data/test").size());
FileUtils.deleteRecursive("memFS:", false); FileUtils.deleteRecursive("memFS:", false);
} }
......
...@@ -71,7 +71,7 @@ public class TestReopen extends TestBase implements Recorder { ...@@ -71,7 +71,7 @@ public class TestReopen extends TestBase implements Recorder {
if (op != Recorder.WRITE && op != Recorder.TRUNCATE) { if (op != Recorder.WRITE && op != Recorder.TRUNCATE) {
return; return;
} }
if (!fileName.endsWith(Constants.SUFFIX_PAGE_FILE) && if (!fileName.endsWith(Constants.SUFFIX_PAGE_FILE) &&
!fileName.endsWith(Constants.SUFFIX_MV_FILE)) { !fileName.endsWith(Constants.SUFFIX_MV_FILE)) {
return; return;
} }
......
...@@ -30,9 +30,9 @@ public class FilePathUnstable extends FilePathWrapper { ...@@ -30,9 +30,9 @@ public class FilePathUnstable extends FilePathWrapper {
private static final IOException DISK_FULL = new IOException("Disk full"); private static final IOException DISK_FULL = new IOException("Disk full");
private static int diskFullOffCount; private static int diskFullOffCount;
private static boolean partialWrites; private static boolean partialWrites;
private static Random random = new Random(1); private static Random random = new Random(1);
/** /**
...@@ -44,32 +44,32 @@ public class FilePathUnstable extends FilePathWrapper { ...@@ -44,32 +44,32 @@ public class FilePathUnstable extends FilePathWrapper {
FilePath.register(INSTANCE); FilePath.register(INSTANCE);
return INSTANCE; return INSTANCE;
} }
/** /**
* Whether partial writes are possible (writing only part of the data). * Whether partial writes are possible (writing only part of the data).
* *
* @param partialWrites true to enable * @param partialWrites true to enable
*/ */
public void setPartialWrites(boolean partialWrites) { public void setPartialWrites(boolean partialWrites) {
FilePathUnstable.partialWrites = partialWrites; FilePathUnstable.partialWrites = partialWrites;
} }
boolean getPartialWrites() { boolean getPartialWrites() {
return partialWrites; return partialWrites;
} }
/** /**
* Set the random seed. * Set the random seed.
* *
* @param seed the new seed * @param seed the new seed
*/ */
public void setSeed(long seed) { public void setSeed(long seed) {
random.setSeed(seed); random.setSeed(seed);
} }
/** /**
* Get a buffer with a subset (the head) of the data of the source buffer. * Get a buffer with a subset (the head) of the data of the source buffer.
* *
* @param src the source buffer * @param src the source buffer
* @return a buffer with a subset of the data * @return a buffer with a subset of the data
*/ */
...@@ -278,7 +278,7 @@ class FileUnstable extends FileBase { ...@@ -278,7 +278,7 @@ class FileUnstable extends FileBase {
} }
return channel.write(src); return channel.write(src);
} }
@Override @Override
public int write(ByteBuffer src, long position) throws IOException { public int write(ByteBuffer src, long position) throws IOException {
checkError(); checkError();
......
...@@ -828,7 +828,7 @@ public class CacheLIRS<K, V> extends AbstractMap<K, V> { ...@@ -828,7 +828,7 @@ public class CacheLIRS<K, V> extends AbstractMap<K, V> {
/** /**
* Remove the entry from the stack. The head itself must not be removed. * Remove the entry from the stack. The head itself must not be removed.
* *
* @param e the entry * @param e the entry
*/ */
private void removeFromStack(Entry<K, V> e) { private void removeFromStack(Entry<K, V> e) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论