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

--no commit message

--no commit message
上级 2f8b42f4
#Mon Jan 28 07:19:50 CET 2008 #Fri Feb 01 15:26:30 CET 2008
javac=javac javac=javac
benchmark.drivers.dir=C\:/data/java benchmark.drivers.dir=C\:/data/java
path.servlet.jar=C\:/data/classpath/servlet-api.jar path.servlet.jar=C\:/data/classpath/servlet-api.jar
......
<project name="h2" default="all" basedir="."> <project name="h2" default="all" basedir=".">
<!-- dependencies (optional):
http://repo1.maven.org/maven2/javax/servlet/servlet-api/2.5/servlet-api-2.5.jar
(actually any servlet api)
http://repo1.maven.org/maven2/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar
(or newer)
-->
<property file="ant-build.properties" /> <property file="ant-build.properties" />
<!-- jar files required by the benchmark --> <!-- jar files required by the benchmark -->
...@@ -283,19 +289,6 @@ ...@@ -283,19 +289,6 @@
</manifest> </manifest>
</target> </target>
<target name="mavenBuildCentral">
<copy tofile="bin/h2-${version.name.maven}.jar" file="bin/h2.jar" />
<copy tofile="bin/pom.xml" filtering="true" file="src/installer/pom.xml">
<filterset>
<filter token="version" value="${version.name.maven}"/>
</filterset>
</copy>
<jar destfile="bin/h2-${version.name.maven}-bundle.jar" basedir="bin">
<include name="pom.xml" />
<include name="h2-${version.name.maven}.jar" />
</jar>
</target>
<target name="mavenDeployCentral" depends="jar"> <target name="mavenDeployCentral" depends="jar">
<copy tofile="bin/h2-${version.name.maven}.jar" file="bin/h2.jar" /> <copy tofile="bin/h2-${version.name.maven}.jar" file="bin/h2.jar" />
<copy tofile="bin/pom.xml" filtering="true" file="src/installer/pomUpload.xml"> <copy tofile="bin/pom.xml" filtering="true" file="src/installer/pomUpload.xml">
......
...@@ -7,7 +7,7 @@ Initial Developer: H2 Group ...@@ -7,7 +7,7 @@ Initial Developer: H2 Group
// <!-- // <!--
var line = 0, file = ''; var line = 0, file = '';
var params = location.search.substring(1).split('&'); var params = location.search.substring(1).split('&');
var build = 'trunk'; var tag = 'trunk/h2';
for (var i = 0; i<params.length; i++) { for (var i = 0; i<params.length; i++) {
var k = params[i].split('='); var k = params[i].split('=');
var key = k[0], value = k[1]; var key = k[0], value = k[1];
...@@ -15,8 +15,12 @@ Initial Developer: H2 Group ...@@ -15,8 +15,12 @@ Initial Developer: H2 Group
line = value; line = value;
} else if (key == 'file') { } else if (key == 'file') {
file = value; file = value;
} else if (key == 'build' && value >= 63) { } else if (key == 'build') {
build = 'tags/version-1.0.' + value; if (value == 64) {
tag = 'tags/version-1.0.' + value;
} else if (value >= 63) {
tag = 'tags/version-1.0.' + value + '/h2';
}
} }
} }
// --> // -->
...@@ -24,7 +28,7 @@ Initial Developer: H2 Group ...@@ -24,7 +28,7 @@ Initial Developer: H2 Group
<pre> <pre>
<table width="100%"> <table width="100%">
<tr> <tr>
<td style="width: 50px"> <td style="width: 50px; vertical-align: top">
<script type="text/javascript"> <script type="text/javascript">
// <!-- // <!--
for(var i = 1; i <= 5000; i++) { for(var i = 1; i <= 5000; i++) {
...@@ -39,7 +43,7 @@ Initial Developer: H2 Group ...@@ -39,7 +43,7 @@ Initial Developer: H2 Group
// --> // -->
</script> </script>
</td> </td>
<td width="92%" style="vertical-align: top;"> <td width="92%" style="vertical-align: top">
<iframe id="source" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="80000px" scrolling="no" src=""> <iframe id="source" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="80000px" scrolling="no" src="">
</iframe> </iframe>
</td> </td>
...@@ -49,7 +53,7 @@ Initial Developer: H2 Group ...@@ -49,7 +53,7 @@ Initial Developer: H2 Group
<script type="text/javascript"> <script type="text/javascript">
// <!-- // <!--
var source = document.getElementById('source'); var source = document.getElementById('source');
source.src = 'http://h2database.googlecode.com/svn/' + build + '/h2/src/main/' + file; source.src = 'http://h2database.googlecode.com/svn/' + tag + '/src/main/' + file;
document.location = '#here'; document.location = '#here';
// --> // -->
</script> </script>
......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!-- can not use doctype -->
<!-- <!--
Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html). Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
Initial Developer: H2 Group Initial Developer: H2 Group
--> -->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <html><head>
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
Error Analytics <title>Online Error Analyzer</title>
</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /> <link rel="stylesheet" type="text/css" href="stylesheet.css" />
<style type="text/css"> <style type="text/css">
a { a {
text-decoration: underline; text-decoration: underline;
...@@ -23,8 +23,10 @@ a.disabled { ...@@ -23,8 +23,10 @@ a.disabled {
font-weight: normal; font-weight: normal;
color: lightGray; color: lightGray;
} }
input {
vertical-align: middle;
}
</style> </style>
</head><body style="margin:20px">
<script type="text/javascript"> <script type="text/javascript">
//<!-- //<!--
...@@ -33,6 +35,11 @@ function $(id) { ...@@ -33,6 +35,11 @@ function $(id) {
return document.getElementById(id); return document.getElementById(id);
} }
var lastError = '';
var hasData = false;
var errorCode = '0';
var build = '';
function goDetails(code) { function goDetails(code) {
code = code.replace('21S', '210'); code = code.replace('21S', '210');
code = code.replace('42S', '421'); code = code.replace('42S', '421');
...@@ -42,15 +49,33 @@ function goDetails(code) { ...@@ -42,15 +49,33 @@ function goDetails(code) {
$('more').src = 'http://h2database.com/javadoc/org/h2/constant/ErrorCode.html#c' + code; $('more').src = 'http://h2database.com/javadoc/org/h2/constant/ErrorCode.html#c' + code;
} }
function go(url, file) { function go(file, line) {
var url;
if ($('rawSource').checked == true) {
url = "source.html?file=";
url += file;
url += "&line=";
url += line;
url += "&build=";
url += build;
} else {
var tag = 'trunk/h2';
if (build == 64) {
tag = 'tags/version-1.0.' + build;
} else if (build >= 63) {
tag = 'tags/version-1.0.' + build + '/h2';
}
url = 'http://code.google.com/p/h2database/source/browse/';
url += tag;
url += '/src/main/';
url += file;
url += '#';
url += line;
}
$('file').innerHTML = file; $('file').innerHTML = file;
$('code').src = url; $('code').src = url;
} }
var lastError = '';
var hasData = false;
var errorCode = '0';
function convert() { function convert() {
try { try {
var s = $('error').value; var s = $('error').value;
...@@ -79,11 +104,12 @@ function convert() { ...@@ -79,11 +104,12 @@ function convert() {
} }
idx = 0; idx = 0;
while (true) { while (true) {
var start = s.indexOf("org.h2.", idx); var start = s.indexOf("at org.h2.", idx);
if (start < 0) { if (start < 0) {
result += s.substring(idx); result += s.substring(idx);
break; break;
} }
start += 3; // skip 'at '
if (idx > 0) { if (idx > 0) {
result += s.substring(idx, start); result += s.substring(idx, start);
} }
...@@ -101,22 +127,13 @@ function convert() { ...@@ -101,22 +127,13 @@ function convert() {
var file = element.substring(open + 1, colon); var file = element.substring(open + 1, colon);
var lineNumber = element.substring(colon + 1, element.length - 1); var lineNumber = element.substring(colon + 1, element.length - 1);
var fullFileName = packageName.replace(/\./g, '/') + "/" + file; var fullFileName = packageName.replace(/\./g, '/') + "/" + file;
var url = "http://h2database.com/html/source.html?file=";
url += fullFileName;
url += "&line=";
url += lineNumber;
url += "&build=";
url += build;
result += "<a href='javascript:go(\""; result += "<a href='javascript:go(\"";
result += url;
result += "\",\"";
result += fullFileName; result += fullFileName;
result += "\")'>"; result += "\",";
result += lineNumber;
result += ")'>";
result += element; result += element;
result += "</a>"; result += "</a>";
hasData = true; hasData = true;
idx = end + 1; idx = end + 1;
} }
...@@ -143,20 +160,32 @@ function select(id) { ...@@ -143,20 +160,32 @@ function select(id) {
if(id=='details') { if(id=='details') {
goDetails(errorCode); goDetails(errorCode);
} }
sizeTextArea();
}
function sizeTextArea() {
var height=document.body.clientHeight;
var error = $('error');
error.style.height = (height - error.offsetTop - 25) + 'px';
var more = $('more');
more.style.height = (height - more.offsetTop - 25) + 'px';
var code = $('code');
code.style.height = (height - $('sourceTable').offsetTop - code.offsetTop - 30) + 'px';
} }
//--> //-->
</script> </script>
<h1>Error Analytics</h1> </head>
<body style="margin:20px" onresize="sizeTextArea();" onload="sizeTextArea();" >
<h1>Online Error Analyzer</h1>
<h2> <h2>
<a href="javascript:select('input')" id="inputTab">Input</a>&nbsp; <a href="javascript:select('input')" id="inputTab">Input</a>&nbsp;
<a href="javascript:select('details')" id="detailsTab">Details</a>&nbsp; <a href="javascript:select('details')" id="detailsTab">Details</a>&nbsp;
<a href="javascript:select('source')" id="sourceTab">Source Code</a> <a href="javascript:select('source')" id="sourceTab">Source Code</a>
</h2> </h2>
<hr/> <hr/>
<div id="input"> <div id="input">
<p>Fill in the error message and stack trace and click on 'Details' or 'Source Code': </p> <p>Fill in the error message and stack trace and click on 'Details' or 'Source Code': </p>
<textarea id="error" cols="100" style="width: 100%; overflow: auto;" rows="20" <textarea id="error" cols="100" style="width: 100%; overflow: auto;" rows="20"
...@@ -169,32 +198,31 @@ function select(id) { ...@@ -169,32 +198,31 @@ function select(id) {
> >
</textarea> </textarea>
</div> </div>
<div id="details"> <div id="details">
<p><b>Error Code: </b><span id="errorCode"></span></p> <p><b>Error Code: </b><span id="errorCode"></span></p>
<p><b>Product Version: </b><span id="version"></span></p> <p><b>Product Version: </b><span id="version"></span></p>
<p><b>Message: </b></p> <p><b>Message: </b></p>
<p id="message"></p> <p id="message"></p>
<p><b>More Information:</b></p> <p><b>More Information:</b></p>
<iframe id="more" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="300px" src=""> <iframe id="more" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="100px" src="">
</iframe> </iframe>
</div> </div>
<div id="source"> <div id="source">
<table style="border:0px" width="100%"><tr><td style="border:0px" width="30px"> <table id="sourceTable" style="border:0px" width="100%"><tr>
<td style="border:0px" width="30px">
<p><b>Stack Trace: </b></p> <p><b>Stack Trace: </b></p>
<p id="links"></p> <p id="links"></p>
</td><td style="border:0px" width="90%"> </td><td style="border:0px" width="90%">
<p><b>Source File: </b><span id="file"></span></p> <p><b>Source File: </b><span id="file"></span><br />
<iframe id="code" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="300px" src=""> Raw file <input type="checkbox" id="rawSource" /> (fast; only Firefox)</p>
<iframe id="code" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="100px" src="">
</iframe> </iframe>
</td></tr></table> </td>
</tr></table>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
//<!-- //<!--
select('input'); select('input');
//--> //-->
</script> </script>
</body></html> </body></html>
\ No newline at end of file
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
90002=Method is only allowed for a query. Use execute or executeUpdate instead of executeQuery 90002=Method is only allowed for a query. Use execute or executeUpdate instead of executeQuery
90003=Hexadecimal string with odd number of characters\: {0} 90003=Hexadecimal string with odd number of characters\: {0}
90004=Hexadecimal string contains non-hex character\: {0} 90004=Hexadecimal string contains non-hex character\: {0}
90005=Value too long for column {0} 90005=Value too long for column {0}\: {1}
90006=NULL not allowed for column {0} 90006=NULL not allowed for column {0}
90007=The object is already closed 90007=The object is already closed
90008=Invalid value {0} for parameter {1} 90008=Invalid value {0} for parameter {1}
......
...@@ -29,7 +29,7 @@ package org.h2.engine; ...@@ -29,7 +29,7 @@ package org.h2.engine;
* build.html * build.html
* mainWeb.html * mainWeb.html
* download.html * download.html
* - Maybe increase TCP_DRIVER_VERSION * - Maybe increase TCP_DRIVER_VERSION (but clients must be backwards compatible!)
* - Check code coverage * - Check code coverage
* - No " Message.get" (must be "throw Message.get") * - No " Message.get" (must be "throw Message.get")
* - No TODO in the docs, remove @~ in .utf8.txt files * - No TODO in the docs, remove @~ in .utf8.txt files
......
...@@ -151,161 +151,32 @@ java org.h2.test.TestAll timer ...@@ -151,161 +151,32 @@ java org.h2.test.TestAll timer
/* /*
add sourceError as an official link
corruption should be it's own error code(s)
Online Error Analyzer
add a 'kill process while altering tables' test case
1.5 tool: closeSilently(s1, s2,...)
implement max_query_time and use it for TestCrashAPI implement max_query_time and use it for TestCrashAPI
document IKVM link from h2 console to sourceError
add sourceError as an official link
adjust cache memory usage Adjust cache memory usage
simple pure java config file (interpreted)
orphan?
javadoc: design patterns
sourceforge h2 database
update wikipedia
try https://hudson.dev.java.net/
quaere:
where(test(a).bigger(b));
where(test(a, BIGGER, b));
where(test(a).bigger(b).and(a).smaller(b));
Roadmap:
Move Maven 2 repository from hsql.sf.net to h2database.sf.net
History:
Test Recovery with MAX_LOG_FILE_SIZE=1; test with various log file sizes
Test H2 on OS X (result are here: h2-2007-12-27_test.zip)
Web site:
link to history page, bug page
Add a link to the google code bug page
test DbStarter
----
A file is sent although the Japanese translation has not been completed yet.
----
At startup, when corrupted, say if LOG=0 was used before At startup, when corrupted, say if LOG=0 was used before
Extend tests that simulate power off
slow:
select ta.attname, ia.attnum, ic.relname
from pg_catalog.pg_attribute ta, pg_catalog.pg_attribute ia, pg_catalog.pg_class ic, pg_catalog.pg_index i, pg_catalog.pg_namespace n
where ic.relname = 'dummy_pkey'
AND n.nspname = ''
AND ic.oid = i.indexrelid
AND n.oid = ic.relnamespace
AND ia.attrelid = i.indexrelid
AND ta.attrelid = i.indrelid
AND ta.attnum = i.indkey[ia.attnum-1]
AND (NOT ta.attisdropped)
AND (NOT ia.attisdropped)
order by ia.attnum;
DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR);
@LOOP 1000000 INSERT INTO TEST VALUES(?, SPACE(100000));
<stop>
<reconnect>
out of memory?
don't create @~ of not translated
extend tests that simulate power off
HSQLDB compatibility:
Openfire server uses this script to setup a user permissions
on the fresh-installed server. The database is [current] HSQLDB :
CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE USER SA PASSWORD ""
GRANT DBA TO SA
SET SCHEMA PUBLIC
Unfortunately, this does not work in H2
Wrong user name or password [08004-55]
rename Performance > Comparison [/Compatibility]
move Comparison to Other Database Engines > Comparison
move Products that Work with H2 > Comparison
move Performance Tuning > Advanced Topics
testHalt
java org.h2.test.TestAll halt
Automate real power off tests Automate real power off tests
timer test timer test
// test with garbage at the end of the log file (must be consistently detected as such)
// TestRandomSQL is too random; most statements fails
// extend the random join test that compared the result against PostgreSQL
// long running test with the same database
// repeatable test with a very big database (making backups of the database files)
ftp server: problem with multithreading?
h2\src\docsrc\html\images\SQLInjection.txt
Convert SQL-injection-2.txt to html document, include SQLInjection.java sample
send http://thecodist.com/fiche/thecodist/article/sql-injections-how-not-to-get-stuck to JavaWorld, TheServerSide,
Send SQL Injection solution proposal to PostgreSQL, MySQL, Derby, HSQLDB,...
MySQL, PostgreSQL
READ_TEXT(fileName String) returning a CLOB.
I am not sure if this will read the CLOB in memory however.
Improve LOB in directories performance
http://fastutil.dsi.unimi.it/
http://javolution.org/
http://joda-time.sourceforge.net/
http://ibatis.apache.org/
http://www.igniterealtime.org/projects/openfire/index.jsp
translation:
src/org.h2.res/help.csv (using ${.} as in .jsp?)
javadocs (using generated ${.} ?)
glossary
spell check / word list per language
translated .pdf
*/
// run TestHalt
// GroovyServlet
// Cluster: hot deploy (adding a node on runtime)
// test with PostgreSQL Version 8.2
// http://dev.helma.org/Wiki/RhinoLoader
// test with garbage at the end of the log file (must be consistently detected as such) Test with many columns (180), create index
// test LIKE: compare against other databases add a 'kill process while altering tables' test case
Test Recovery with MAX_LOG_FILE_SIZE=1; test with various log file sizes
// TestRandomSQL is too random; most statements fails Roadmap:
// extend the random join test that compared the result against PostgreSQL
// long running test with the same database History:
// repeatable test with a very big database (making backups of the database files)
/*
Features of H2
- Case insensitive string data type
- GROUP_CONCAT aggregate, User defined aggregates
- Fulltext search
- MVCC
- User defined types
*/ */
if (args.length > 0) { if (args.length > 0) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论