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

--no commit message

--no commit message
上级 ed5102dd
...@@ -560,9 +560,10 @@ By default, MySQL calls fsync for each commit. When using one of those methods, ...@@ -560,9 +560,10 @@ By default, MySQL calls fsync for each commit. When using one of those methods,
per second can be achieved, which is consistent with the RPM rate of the hard drive used. per second can be achieved, which is consistent with the RPM rate of the hard drive used.
Unfortunately, even when calling FileDescriptor.sync() or FileChannel.force(), Unfortunately, even when calling FileDescriptor.sync() or FileChannel.force(),
data is not always persisted to the hard drive, because most hard drives do not obey data is not always persisted to the hard drive, because most hard drives do not obey
fsync(): see 'Your Hard Drive Lies to You' at http://hardware.slashdot.org/article.pl?sid=05/05/13/0529252. fsync(): see
In Mac OS X fsync does not flush hard drive buffers: <a href="http://hardware.slashdot.org/article.pl?sid=05/05/13/0529252">Your Hard Drive Lies to You</a>.
http://lists.apple.com/archives/darwin-dev/2005/Feb/msg00072.html. In Mac OS X fsync does not flush hard drive buffers, see
<a href="http://lists.apple.com/archives/darwin-dev/2005/Feb/msg00072.html">Bad fsync?</a>.
So the situation is confusing, and tests prove there is a problem. So the situation is confusing, and tests prove there is a problem.
</p> </p>
<p> <p>
......
...@@ -239,7 +239,9 @@ Change Log ...@@ -239,7 +239,9 @@ Change Log
</li><li>The documentation indexer does no longer index Japanese pages. If somebody knows how to split Japanese into words please post it. </li><li>The documentation indexer does no longer index Japanese pages. If somebody knows how to split Japanese into words please post it.
</li><li>Oracle compatibility: SYSDATE now returns a timestamp. CHR(..) is now an alias for CHAR(..). </li><li>Oracle compatibility: SYSDATE now returns a timestamp. CHR(..) is now an alias for CHAR(..).
</li><li>After deleting data, empty space in the database files was not efficiently reused (but it was reused when opening the database). This has been fixed. </li><li>After deleting data, empty space in the database files was not efficiently reused (but it was reused when opening the database). This has been fixed.
</li><li>About 230 bytes per database was leaked. This is a problem for applications opening and closing many thousand databases. The main problem: a shutdown hook was added but never removed. Fixed. In JDK 1.4, there is an additionally problem, see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4197876. A workaround has been implemented. </li><li>About 230 bytes per database was leaked. This is a problem for applications opening and closing many thousand databases. The main problem: a shutdown hook was added but never removed. Fixed.
In JDK 1.4, there is <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4197876">an additionally problem</a>.
A workaround has been implemented.
</li><li>Optimization for COLUMN IN(.., NULL) if the column does not allow NULL values. </li><li>Optimization for COLUMN IN(.., NULL) if the column does not allow NULL values.
</li><li>Using spaces in column and table aliases was not supported when used inside a view or temporary view. </li><li>Using spaces in column and table aliases was not supported when used inside a view or temporary view.
</li><li>The version (build) number is now included in the manifest file. </li><li>The version (build) number is now included in the manifest file.
......
...@@ -31,7 +31,7 @@ There is a License FAQ section at the Mozilla web site, most of that is applicab ...@@ -31,7 +31,7 @@ There is a License FAQ section at the Mozilla web site, most of that is applicab
However, nobody is allowed to rename H2, modify it a little, and sell it as a database engine without telling the customers it is in fact H2. However, nobody is allowed to rename H2, modify it a little, and sell it as a database engine without telling the customers it is in fact H2.
This happened to HSQLDB, when a company called 'bungisoft' copied HSQLDB, renamed it to 'RedBase', and tried to sell it, This happened to HSQLDB, when a company called 'bungisoft' copied HSQLDB, renamed it to 'RedBase', and tried to sell it,
hiding the fact that it was, in fact, just HSQLDB. At this time, it seems 'bungisoft' does not exist any more, but you can use the hiding the fact that it was, in fact, just HSQLDB. At this time, it seems 'bungisoft' does not exist any more, but you can use the
Wayback Machine of http://www.archive.org and look for old web pages of http://www.bungisoft.com. Wayback Machine of http://www.archive.org and look for old web pages of http://www.bungisoft.com .
</p><p> </p><p>
About porting the source code to another language (for example C# or C++): Converted source code (even if done manually) stays under the same About porting the source code to another language (for example C# or C++): Converted source code (even if done manually) stays under the same
copyright and license as the original code. The copyright of the ported source code does not (automatically) go to the person who ported the code. copyright and license as the original code. The copyright of the ported source code does not (automatically) go to the person who ported the code.
......
...@@ -53,109 +53,141 @@ Linux Package Manager</a><br /> ...@@ -53,109 +53,141 @@ Linux Package Manager</a><br />
<h2>Products and Projects</h2> <h2>Products and Projects</h2>
<p><a href="http://cayenne.apache.org/">Apache Cayenne</a><br /> <p><a href="http://cayenne.apache.org/">
Apache Cayenne</a><br />
Open source persistence framework providing object-relational mapping (ORM) and remoting services. Open source persistence framework providing object-relational mapping (ORM) and remoting services.
</p> </p>
<p><a href="http://jackrabbit.apache.org">Apache Jackrabbit</a><br /> <p><a href="http://jackrabbit.apache.org">
Apache Jackrabbit</a><br />
Open source implementation of the Java Content Repository API (JCR). Open source implementation of the Java Content Repository API (JCR).
</p> </p>
<p><a href="http://incubator.apache.org/openjpa">Apache OpenJPA</a><br /> <p><a href="http://incubator.apache.org/openjpa">
Apache OpenJPA</a><br />
Open source implementation of the Java Persistence API (JPA). Open source implementation of the Java Persistence API (JPA).
</p> </p>
<p><a href="http://appfuse.org">AppFuse</a><br /> <p><a href="http://appfuse.org">
AppFuse</a><br />
Helps building web applications. Helps building web applications.
</p> </p>
<p><a href="http://wiki.blojsom.com">Blojsom</a><br /> <p><a href="http://wiki.blojsom.com">
Blojsom</a><br />
Java-based multi-blog, multi-user software package (Mac OS X Weblog Server) Java-based multi-blog, multi-user software package (Mac OS X Weblog Server)
</p> </p>
<p><a href="http://bmarks-portlet.sourceforge.net">Bookmarks Portlet</a><br /> <p><a href="http://bmarks-portlet.sourceforge.net">
Bookmarks Portlet</a><br />
JSR168 compliant bookmarks management portlet application. JSR168 compliant bookmarks management portlet application.
</p> </p>
<p><a href="http://www.claros.org">Claros inTouch</a><br /> <p><a href="http://www.claros.org">
Claros inTouch</a><br />
Ajax communication suite with mail, addresses, notes, IM, and rss reader. Ajax communication suite with mail, addresses, notes, IM, and rss reader.
</p> </p>
<p><a href="http://www.dbsolo.com">DB Solo</a><br /> <p><a href="http://www.dbsolo.com">
DB Solo</a><br />
SQL query tool. SQL query tool.
</p> </p>
<p><a href="http://www.minq.se/products/dbvis">DbVisualizer</a><br /> <p><a href="http://www.minq.se/products/dbvis">
DbVisualizer</a><br />
Database tool. Database tool.
</p> </p>
<p><a href="http://executequery.org">Execute Query</a><br /> <p><a href="http://executequery.org">
Execute Query</a><br />
Database utility written in Java. Database utility written in Java.
</p> </p>
<p><a href="http://www.goldenstudios.or.id">Golden T Studios</a><br /> <p><a href="http://www.goldenstudios.or.id">
Golden T Studios</a><br />
Fun-to-play games with a simple interface.</p> Fun-to-play games with a simple interface.</p>
<p><a href="http://ha-jdbc.sourceforge.net/">HA-JDBC</a><br /> <p><a href="http://ha-jdbc.sourceforge.net/">
HA-JDBC</a><br />
High-Availability JDBC: A JDBC proxy that provides light-weight, transparent, fault tolerant clustering capability to any underlying JDBC driver. High-Availability JDBC: A JDBC proxy that provides light-weight, transparent, fault tolerant clustering capability to any underlying JDBC driver.
</p> </p>
<p><a href="http://hibernate.org">Hibernate</a><br /> <p><a href="http://henplus.sourceforge.net/">
HenPlus</a><br />
HenPlus is a SQL shell written in Java.
</p>
<p><a href="http://hibernate.org">
Hibernate</a><br />
Relational persistence for idiomatic Java (O-R mapping tool). Relational persistence for idiomatic Java (O-R mapping tool).
</p> </p>
<p><a href="http://www.willuhn.de/projects/hibiscus/">Hibicius</a><br /> <p><a href="http://www.willuhn.de/projects/hibiscus/">
Hibicius</a><br />
Online Banking Client for the HBCI protocol Online Banking Client for the HBCI protocol
</p> </p>
<p><a href="http://geosysin.iict.ch/irstv-trac/wiki/H2spatial/Why">H2 Spatial</a><br /> <p><a href="http://geosysin.iict.ch/irstv-trac/wiki/H2spatial/Why">
H2 Spatial</a><br />
A project to add spatial functions to H2 database. A project to add spatial functions to H2 database.
</p> </p>
<p><a href="http://jamwiki.org">JAMWiki</a><br /> <p><a href="http://jamwiki.org">
JAMWiki</a><br />
Java-based Wiki engine. Java-based Wiki engine.
</p> </p>
<p><a href="http://dev.orf.at/trac/jala">Jala</a><br /> <p><a href="http://dev.orf.at/trac/jala">
Jala</a><br />
Open source collection of JavaScript modules Open source collection of JavaScript modules
</p> </p>
<p><a href="http://mywebpage.netscape.com/davidlbarron/javaplayer.html">JavaPlayer</a><br /> <p><a href="http://mywebpage.netscape.com/davidlbarron/javaplayer.html">
JavaPlayer</a><br />
Pure Java MP3 player. Pure Java MP3 player.
</p> </p>
<p><a href="http://jmatter.org/">JMatter</a><br /> <p><a href="http://jmatter.org/">
JMatter</a><br />
Framework for constructing workgroup business applications based on the Naked Objects Architectural Pattern. Framework for constructing workgroup business applications based on the Naked Objects Architectural Pattern.
</p> </p>
<p><a href="http://www.jpox.org">JPOX</a><br /> <p><a href="http://www.jpox.org">
JPOX</a><br />
Java persistent objects. Java persistent objects.
</p> </p>
<p><a href="http://code.google.com/p/liftweb/">Liftweb</a><br /> <p><a href="http://code.google.com/p/liftweb/">
Liftweb</a><br />
A Scala-based, secure, developer friendly web framework A Scala-based, secure, developer friendly web framework
</p> </p>
<p><a href="http://liquibase.sourceforge.net">LiquiBase</a><br /> <p><a href="http://liquibase.sourceforge.net">
LiquiBase</a><br />
A tool to manage database changes and refactorings. A tool to manage database changes and refactorings.
</p> </p>
<p><a href="http://luntbuild.javaforge.com">Luntbuild</a><br /> <p><a href="http://luntbuild.javaforge.com">
Luntbuild</a><br />
Build automation and management tool.</p> Build automation and management tool.</p>
<p><a href="http://jenkov.com/mrpersister/index.html">Mr. Persister</a><br /> <p><a href="http://jenkov.com/mrpersister/index.html">
Mr. Persister</a><br />
Simple, small and fast object relational mapping. Simple, small and fast object relational mapping.
</p> </p>
<p><a href="http://myna.emptybrain.info">Myna Application Server</a><br /> <p><a href="http://myna.emptybrain.info">
Myna Application Server</a><br />
Java web app that provides dynamic web content and Java libraries access from JavaScript. Java web app that provides dynamic web content and Java libraries access from JavaScript.
</p> </p>
<p><a href="http://docs.codewave.de/mytunesrss3/">MyTunesRss</a><br /> <p><a href="http://docs.codewave.de/mytunesrss3/">
MyTunesRss</a><br />
MyTunesRSS lets you listen to your music wherever you are. MyTunesRSS lets you listen to your music wherever you are.
</p> </p>
<p><a href="http://ncgc.nih.gov/pub/openhts/">NCGC CurveFit</a><br /> <p><a href="http://ncgc.nih.gov/pub/openhts/">
NCGC CurveFit</a><br />
From: NIH Chemical Genomics Center, National Institutes of Health, USA. From: NIH Chemical Genomics Center, National Institutes of Health, USA.
An open source application in the life sciences research field. This An open source application in the life sciences research field. This
application handles chemical structures and biological responses of application handles chemical structures and biological responses of
...@@ -172,79 +204,98 @@ by the user; require a license to Oracle; lack advanced ...@@ -172,79 +204,98 @@ by the user; require a license to Oracle; lack advanced
query/retrieval; and the ability to handle chemical structures. query/retrieval; and the ability to handle chemical structures.
</p> </p>
<p><a href="http://www.orionserver.com/">Orion</a><br /> <p><a href="http://www.orionserver.com/">
Orion</a><br />
J2EE Application Server. J2EE Application Server.
</p> </p>
<p><a href="http://www.polepos.org">PolePosition</a><br /> <p><a href="http://www.polepos.org">
PolePosition</a><br />
Open source database benchmark. Open source database benchmark.
</p> </p>
<p><a href="http://scriptella.javaforge.com">Scriptella</a><br /> <p><a href="http://scriptella.javaforge.com">
Scriptella</a><br />
ETL (Extract-Transform-Load) and script execution tool. ETL (Extract-Transform-Load) and script execution tool.
</p> </p>
<p><a href="http://www.seasar.org">Sesar</a><br /> <p><a href="http://www.seasar.org">
Sesar</a><br />
Dependency Injection Container with Aspect Oriented Programming Dependency Injection Container with Aspect Oriented Programming
</p> </p>
<p><a href="http://semmle.com">SemmleCode</a><br /> <p><a href="http://semmle.com">
SemmleCode</a><br />
Eclipse plugin to help you improve software quality. Eclipse plugin to help you improve software quality.
</p> </p>
<p><a href="http://www.shellbook.com">Shellbook</a><br /> <p><a href="http://www.shellbook.com">
Shellbook</a><br />
Desktop publishing application. Desktop publishing application.
</p> </p>
<p><a href="http://www.intellibo.com">Signsoft intelliBO</a><br /> <p><a href="http://www.intellibo.com">
Signsoft intelliBO</a><br />
Persistence middleware supporting the JDO specification. Persistence middleware supporting the JDO specification.
</p> </p>
<p><a href="http://www.smartfoxserver.com/">SmartFoxServer</a><br /> <p><a href="http://www.smartfoxserver.com/">
SmartFoxServer</a><br />
Platform for developing multiuser applications and games with Macromedia Flash. Platform for developing multiuser applications and games with Macromedia Flash.
</p> </p>
<p><a href="http://sqldeveloper.solyp.com/index.html">SQL Developer</a><br /> <p><a href="http://sqldeveloper.solyp.com/index.html">
SQL Developer</a><br />
Universal Database Frontend. Universal Database Frontend.
</p> </p>
<p><a href="http://sql-workbench.net">SQL Workbench/J</a><br /> <p><a href="http://sql-workbench.net">
SQL Workbench/J</a><br />
Free DBMS-independent SQL tool. Free DBMS-independent SQL tool.
</p> </p>
<p><a href="http://www.squirrelsql.org">SQuirreL SQL Client</a><br /> <p><a href="http://www.squirrelsql.org">
SQuirreL SQL Client</a><br />
Graphical tool to view the structure of a database, browse the data, issue SQL commands etc. Graphical tool to view the structure of a database, browse the data, issue SQL commands etc.
</p> </p>
<p><a href="http://dbcopyplugin.sf.net">SQuirreL DB Copy Plugin</a><br /> <p><a href="http://dbcopyplugin.sf.net">
SQuirreL DB Copy Plugin</a><br />
Tool to copy data from one database to another. Tool to copy data from one database to another.
</p> </p>
<p><a href="http://www.intertec.ch/storybook">StorYBook</a><br /> <p><a href="http://www.intertec.ch/storybook">
StorYBook</a><br />
A summary-based tool for novelist and script writers. It helps to keep the overview over the various traces a story has. A summary-based tool for novelist and script writers. It helps to keep the overview over the various traces a story has.
</p> </p>
<p><a href="http://www.streamcruncher.com">StreamCruncher</a><br /> <p><a href="http://www.streamcruncher.com">
StreamCruncher</a><br />
Event (stream) processing kernel. Event (stream) processing kernel.
</p> </p>
<p><a href="http://www.tamava.com">Tamava</a><br /> <p><a href="http://www.tamava.com">
Tamava</a><br />
Newsgroups Reader. Newsgroups Reader.
</p> </p>
<p><a href="http://www.gabealbert.info/tunebackup">Tune Backup</a><br /> <p><a href="http://www.gabealbert.info/tunebackup">
Tune Backup</a><br />
Easy-to-use backup solution for your iTunes library. Easy-to-use backup solution for your iTunes library.
</p> </p>
<p><a href="http://www.webofweb.net">Web of Web</a><br /> <p><a href="http://www.webofweb.net">
Web of Web</a><br />
Collaborative and realtime interactive media platform for the web. Collaborative and realtime interactive media platform for the web.
</p> </p>
<p><a href="http://code.google.com/p/werkzeugkasten/">Werkzeugkasten</a><br /> <p><a href="http://code.google.com/p/werkzeugkasten/">
Werkzeugkasten</a><br />
Minimum Java Toolset. Minimum Java Toolset.
</p> </p>
<p><a href="http://sourceforge.net/projects/volunteerbase/">Volunteer database</a><br /> <p><a href="http://sourceforge.net/projects/volunteerbase/">
Volunteer database</a><br />
A database front end to register volunteers, partnership and donation for a Non Profit organization. A database front end to register volunteers, partnership and donation for a Non Profit organization.
</p> </p>
......
...@@ -55,7 +55,7 @@ Click <span class="button">Start</span>, ...@@ -55,7 +55,7 @@ Click <span class="button">Start</span>,
<img class="screenshot" src="images/quickstart-1.png" alt="screenshot: start H2 Console" /><br /> <img class="screenshot" src="images/quickstart-1.png" alt="screenshot: start H2 Console" /><br />
A new console window appears:<br /> A new console window appears:<br />
<img class="screenshot" src="images/quickstart-2.png" alt="screenshot: H2 Running" /><br /> <img class="screenshot" src="images/quickstart-2.png" alt="screenshot: H2 Running" /><br />
Also, a new browser page should open with the URL http://localhost:8082. Also, a new browser page should open with the URL <a href="http://localhost:8082">http://localhost:8082</a>.
You may get a security warning from the firewall. If you don't want other computers in the network to access the database You may get a security warning from the firewall. If you don't want other computers in the network to access the database
on your machine, you can let the firewall block these connections. Only local connections are required at this time. on your machine, you can let the firewall block these connections. Only local connections are required at this time.
</p> </p>
......
...@@ -232,7 +232,7 @@ Roadmap ...@@ -232,7 +232,7 @@ Roadmap
</li><li>Add jdbcx to the javadocs </li><li>Add jdbcx to the javadocs
</li><li>Delay reading the row if data is not required </li><li>Delay reading the row if data is not required
</li><li>Eliminate undo log records if stored on disk (just one pointer per block, not per record) </li><li>Eliminate undo log records if stored on disk (just one pointer per block, not per record)
</li><li>Feature matrix like here: http://www.inetsoftware.de/products/jdbc/mssql/features/default.asp. </li><li>Feature matrix like in <a href="http://www.inetsoftware.de/products/jdbc/mssql/features/default.asp">i-net software</a>.
</li><li>Updatable result set on table without primary key or unique index </li><li>Updatable result set on table without primary key or unique index
</li><li>Use LinkedList instead of ArrayList where applicable </li><li>Use LinkedList instead of ArrayList where applicable
</li><li>Optimization: (A=B AND B=C) > (A=B AND B=C AND A=C) </li><li>Optimization: (A=B AND B=C) > (A=B AND B=C AND A=C)
......
...@@ -144,7 +144,8 @@ If the server started successfully, you can connect to it using a web browser. ...@@ -144,7 +144,8 @@ If the server started successfully, you can connect to it using a web browser.
The browser needs to support JavaScript, frames and cascading stylesheets (css). The browser needs to support JavaScript, frames and cascading stylesheets (css).
If you started the server on the same computer as the browser, go to http://localhost:8082 in the browser. If you started the server on the same computer as the browser, go to http://localhost:8082 in the browser.
If you want to connect to the application from another computer, you need to provide the IP address of the server, for example: If you want to connect to the application from another computer, you need to provide the IP address of the server, for example:
http://192.168.0.2:8082. If you enabled SSL on the server side, the URL needs to start with HTTPS. <a href="http://192.168.0.2:8082">http://192.168.0.2:8082</a>.
If you enabled SSL on the server side, the URL needs to start with HTTPS.
</p> </p>
<h3>Multiple Concurrent Sessions</h3> <h3>Multiple Concurrent Sessions</h3>
......
...@@ -321,8 +321,8 @@ public abstract class Query extends Prepared { ...@@ -321,8 +321,8 @@ public abstract class Query extends Prepared {
} }
/** /**
* Create a {@link SortOrder} object given the list of {@link SelectOrderBy} objects. * Create a {@link SortOrder} object given the list of {@link SelectOrderBy}
* The expression list is extended if necessary. * objects. The expression list is extended if necessary.
* *
* @param orderList a list of {@link SelectOrderBy} elements * @param orderList a list of {@link SelectOrderBy} elements
* @param expressionCount the number of columns in the query * @param expressionCount the number of columns in the query
......
...@@ -2328,7 +2328,7 @@ REPLACE(NAME, ' ') ...@@ -2328,7 +2328,7 @@ REPLACE(NAME, ' ')
SOUNDEX(string): string SOUNDEX(string): string
"," ","
Returns a four character code representing the sound of a string. Returns a four character code representing the sound of a string.
See also http://www.archives.gov/genealogy/soundex.html. See also http://www.archives.gov/genealogy/soundex.html .
"," ","
SOUNDEX(NAME) SOUNDEX(NAME)
" "
......
...@@ -106,7 +106,8 @@ public class TriggerObject extends SchemaObjectBase { ...@@ -106,7 +106,8 @@ public class TriggerObject extends SchemaObjectBase {
* @param session the session * @param session the session
* @param oldRow the old row * @param oldRow the old row
* @param newRow the new row * @param newRow the new row
* @param beforeAction true if this method is called before the operation is applied * @param beforeAction true if this method is called before the operation is
* applied
*/ */
public void fireRow(Session session, Row oldRow, Row newRow, boolean beforeAction) throws SQLException { public void fireRow(Session session, Row oldRow, Row newRow, boolean beforeAction) throws SQLException {
if (!rowBased || before != beforeAction) { if (!rowBased || before != beforeAction) {
......
...@@ -191,13 +191,14 @@ public class PgServer implements Service { ...@@ -191,13 +191,14 @@ public class PgServer implements Service {
} }
/** /**
* The Java implementation of the PostgreSQL function pg_get_indexdef. * The Java implementation of the PostgreSQL function pg_get_indexdef. The
* The method is used to get CREATE INDEX command for an index, * method is used to get CREATE INDEX command for an index, or the column
* or the column definition of one column in the index. * definition of one column in the index.
* *
* @param conn the connection * @param conn the connection
* @param indexId the index id * @param indexId the index id
* @param ordinalPosition the ordinal position (null if the SQL statement should be returned) * @param ordinalPosition the ordinal position (null if the SQL statement
* should be returned)
* @param pretty this flag is ignored * @param pretty this flag is ignored
* @return the SQL statement or the column name * @return the SQL statement or the column name
*/ */
......
...@@ -272,12 +272,14 @@ public class Column { ...@@ -272,12 +272,14 @@ public class Column {
} }
/** /**
* Convert the auto-increment flag to a sequence that is linked with this table. * Convert the auto-increment flag to a sequence that is linked with this
* table.
* *
* @param session the session * @param session the session
* @param schema the schema where the sequence should be generated * @param schema the schema where the sequence should be generated
* @param id the object id * @param id the object id
* @param temporary true if the sequence is temporary and does not need to be stored * @param temporary true if the sequence is temporary and does not need to
* be stored
*/ */
public void convertAutoIncrementToSequence(Session session, Schema schema, int id, boolean temporary) public void convertAutoIncrementToSequence(Session session, Schema schema, int id, boolean temporary)
throws SQLException { throws SQLException {
......
...@@ -14,7 +14,7 @@ import org.h2.message.Message; ...@@ -14,7 +14,7 @@ import org.h2.message.Message;
/** /**
* A cache implementation based on the 2Q algorithm. * A cache implementation based on the 2Q algorithm.
* For about the algorithm, see * For about the algorithm, see
* http://www.vldb.org/conf/1994/P439.PDF. * http://www.vldb.org/conf/1994/P439.PDF .
* In this implementation, items are moved from 'in' * In this implementation, items are moved from 'in'
* queue and move to the 'main' queue if the are referenced again. * queue and move to the 'main' queue if the are referenced again.
*/ */
......
...@@ -159,6 +159,9 @@ java org.h2.test.TestAll timer ...@@ -159,6 +159,9 @@ java org.h2.test.TestAll timer
/* /*
scheduler: what if invoke takes more than...
scheduler: log at startup next 5
drop table test; drop table test;
create table test(id int primary key, type int, name varchar); create table test(id int primary key, type int, name varchar);
create index idx_type on test(type); create index idx_type on test(type);
...@@ -171,9 +174,6 @@ test with: ...@@ -171,9 +174,6 @@ test with:
- large varchar columns (40 KB) - large varchar columns (40 KB)
- not closing the database - not closing the database
read uncommitted and multi-threaded mode at the same time is dangerous read uncommitted and multi-threaded mode at the same time is dangerous
add @author add @author
......
...@@ -22,6 +22,7 @@ import org.h2.util.IOUtils; ...@@ -22,6 +22,7 @@ import org.h2.util.IOUtils;
* The spell checker makes sure that each word used in the source code * The spell checker makes sure that each word used in the source code
* is spelled correctly, by comparing the words with a word list. * is spelled correctly, by comparing the words with a word list.
* Camel case and uppercase words are checked as well. * Camel case and uppercase words are checked as well.
* HTTP links are not checked; however they may not end with a dot.
*/ */
public class SpellChecker { public class SpellChecker {
...@@ -29,7 +30,7 @@ public class SpellChecker { ...@@ -29,7 +30,7 @@ public class SpellChecker {
private HashSet used = new HashSet(); private HashSet used = new HashSet();
private HashMap unknown = new HashMap(); private HashMap unknown = new HashMap();
private boolean debug; private boolean debug;
private boolean printDictionary; private boolean printDictionary = true;
private boolean addToDictionary; private boolean addToDictionary;
private static final String[] SUFFIX = new String[] { "html", "java", "sql", "txt", "xml", "jsp", "css", "bat", private static final String[] SUFFIX = new String[] { "html", "java", "sql", "txt", "xml", "jsp", "css", "bat",
"csv", "xml", "js", "Driver", "properties", "task", "php", "" }; "csv", "xml", "js", "Driver", "properties", "task", "php", "" };
...@@ -37,6 +38,7 @@ public class SpellChecker { ...@@ -37,6 +38,7 @@ public class SpellChecker {
"bz2", "rc", "layout", "res", "dll", "jar" }; "bz2", "rc", "layout", "res", "dll", "jar" };
private static final String PREFIX_IGNORE = "abc"; private static final String PREFIX_IGNORE = "abc";
private static final String IGNORE_FILE = "mainWeb.html"; private static final String IGNORE_FILE = "mainWeb.html";
private int errorCount;
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
String dir = "src"; String dir = "src";
...@@ -44,6 +46,7 @@ public class SpellChecker { ...@@ -44,6 +46,7 @@ public class SpellChecker {
} }
private void run(String dictionary, String dir) throws IOException { private void run(String dictionary, String dir) throws IOException {
System.out.println("SpellChecker...");
process(new File(dir + "/" + dictionary)); process(new File(dir + "/" + dictionary));
process(new File(dir)); process(new File(dir));
if (printDictionary) { if (printDictionary) {
...@@ -73,10 +76,13 @@ public class SpellChecker { ...@@ -73,10 +76,13 @@ public class SpellChecker {
String s = (String) it.next(); String s = (String) it.next();
// int count = ((Integer) unknown.get(s)).intValue(); // int count = ((Integer) unknown.get(s)).intValue();
System.out.print(s + " "); System.out.print(s + " ");
errorCount++;
} }
System.out.println(); System.out.println();
System.out.println(); System.out.println();
throw new IOException("spell check failed"); }
if (errorCount > 0) {
throw new IOException(errorCount + " error found");
} }
} }
...@@ -144,6 +150,7 @@ public class SpellChecker { ...@@ -144,6 +150,7 @@ public class SpellChecker {
private void scan(String fileName, String text) { private void scan(String fileName, String text) {
HashSet notFound = new HashSet(); HashSet notFound = new HashSet();
text = removeLinks(fileName, text);
StringTokenizer tokenizer = new StringTokenizer(text, "\r\n \t+\"*%&/()='[]{},.-;:_<>\\!?$@#|~^`"); StringTokenizer tokenizer = new StringTokenizer(text, "\r\n \t+\"*%&/()='[]{},.-;:_<>\\!?$@#|~^`");
while (tokenizer.hasMoreTokens()) { while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken(); String token = tokenizer.nextToken();
...@@ -172,6 +179,36 @@ public class SpellChecker { ...@@ -172,6 +179,36 @@ public class SpellChecker {
} }
} }
private String removeLinks(String fileName, String text) {
StringBuffer buff = new StringBuffer(text.length());
int pos = 0, last = 0;
while (true) {
pos = text.indexOf("http://", pos);
if (pos < 0) {
break;
}
int start = pos;
buff.append(text.substring(last, start));
pos += "http://".length();
while (true) {
char c = text.charAt(pos);
if (!Character.isJavaIdentifierPart(c) && ".#/?&=%+_-:".indexOf(c) < 0) {
break;
}
pos++;
}
String link = text.substring(start, pos);
if (link.endsWith(".")) {
System.out.println("Link ending with dot in " + fileName + ": " + link);
errorCount++;
}
last = pos;
}
buff.append(text.substring(last));
String changed = buff.toString();
return changed;
}
private void scanCombinedToken(HashSet notFound, String token) { private void scanCombinedToken(HashSet notFound, String token) {
for (int i = 1; i < token.length(); i++) { for (int i = 1; i < token.length(); i++) {
char charLeft = token.charAt(i - 1); char charLeft = token.charAt(i - 1);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论