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

Limit line length to 80 characters

上级 e2f5284c
......@@ -41,7 +41,8 @@ public class DirectInsert {
Statement stat = conn.createStatement();
stat.execute("DROP TABLE IF EXISTS TEST");
stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)");
PreparedStatement prep = conn.prepareStatement("INSERT INTO TEST VALUES(?, 'Test' || SPACE(100))");
PreparedStatement prep = conn.prepareStatement(
"INSERT INTO TEST VALUES(?, 'Test' || SPACE(100))");
long time = System.currentTimeMillis();
for (int i = 0; i < len; i++) {
long now = System.currentTimeMillis();
......@@ -58,14 +59,18 @@ public class DirectInsert {
conn.close();
}
private static void createAsSelect(String url, boolean optimize) throws SQLException {
Connection conn = DriverManager.getConnection(url + ";OPTIMIZE_INSERT_FROM_SELECT=" + optimize);
private static void createAsSelect(String url, boolean optimize)
throws SQLException {
Connection conn = DriverManager.getConnection(url +
";OPTIMIZE_INSERT_FROM_SELECT=" + optimize);
Statement stat = conn.createStatement();
stat.execute("DROP TABLE IF EXISTS TEST2");
System.out.println("CREATE TABLE ... AS SELECT " + (optimize ? "(optimized)" : ""));
System.out.println("CREATE TABLE ... AS SELECT " +
(optimize ? "(optimized)" : ""));
long time = System.currentTimeMillis();
stat.execute("CREATE TABLE TEST2 AS SELECT * FROM TEST");
System.out.printf("%.3f sec.\n", (System.currentTimeMillis() - time) / 1000.0);
System.out.printf("%.3f sec.\n",
(System.currentTimeMillis() - time) / 1000.0);
stat.execute("INSERT INTO TEST2 SELECT * FROM TEST2");
stat.close();
conn.close();
......
......@@ -66,7 +66,8 @@ public class FileFunctions {
* @param encoding the encoding
* @return the text
*/
public static String readTextFileWithEncoding(String fileName, String encoding) throws IOException {
public static String readTextFileWithEncoding(String fileName,
String encoding) throws IOException {
byte[] buff = readFile(fileName);
String s = new String(buff, encoding);
return s;
......
......@@ -30,13 +30,16 @@ public class Function {
*/
public static void main(String... args) throws Exception {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", "");
Connection conn = DriverManager.getConnection(
"jdbc:h2:mem:", "sa", "");
Statement stat = conn.createStatement();
// Using a custom Java function
stat.execute("CREATE ALIAS IS_PRIME FOR \"org.h2.samples.Function.isPrime\" ");
stat.execute("CREATE ALIAS IS_PRIME " +
"FOR \"org.h2.samples.Function.isPrime\" ");
ResultSet rs;
rs = stat.executeQuery("SELECT IS_PRIME(X), X FROM SYSTEM_RANGE(1, 20) ORDER BY X");
rs = stat.executeQuery("SELECT IS_PRIME(X), X " +
"FROM SYSTEM_RANGE(1, 20) ORDER BY X");
while (rs.next()) {
boolean isPrime = rs.getBoolean(1);
if (isPrime) {
......@@ -49,7 +52,8 @@ public class Function {
stat.execute("CREATE TABLE TEST(ID INT) AS " +
"SELECT X FROM SYSTEM_RANGE(1, 100)");
PreparedStatement prep;
prep = conn.prepareStatement("SELECT * FROM TABLE(X INT=?, O INT=?) J " +
prep = conn.prepareStatement(
"SELECT * FROM TABLE(X INT=?, O INT=?) J " +
"INNER JOIN TEST T ON J.X=T.ID ORDER BY J.O");
prep.setObject(1, new Integer[] { 30, 20 });
prep.setObject(2, new Integer[] { 1, 2 });
......@@ -61,7 +65,8 @@ public class Function {
rs.close();
// Using a custom function like table
stat.execute("CREATE ALIAS MATRIX FOR \"org.h2.samples.Function.getMatrix\" ");
stat.execute("CREATE ALIAS MATRIX " +
"FOR \"org.h2.samples.Function.getMatrix\" ");
prep = conn.prepareStatement("SELECT * FROM MATRIX(?) " +
"ORDER BY X, Y");
prep.setInt(1, 2);
......
......@@ -32,10 +32,13 @@ public class FunctionMultiReturn {
*/
public static void main(String... args) throws Exception {
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", "");
Connection conn = DriverManager.getConnection(
"jdbc:h2:mem:", "sa", "");
Statement stat = conn.createStatement();
stat.execute("CREATE ALIAS P2C FOR \"org.h2.samples.FunctionMultiReturn.polar2Cartesian\" ");
PreparedStatement prep = conn.prepareStatement("SELECT X, Y FROM P2C(?, ?)");
stat.execute("CREATE ALIAS P2C " +
"FOR \"org.h2.samples.FunctionMultiReturn.polar2Cartesian\" ");
PreparedStatement prep = conn.prepareStatement(
"SELECT X, Y FROM P2C(?, ?)");
prep.setDouble(1, 5.0);
prep.setDouble(2, 0.5);
ResultSet rs = prep.executeQuery();
......@@ -47,18 +50,23 @@ public class FunctionMultiReturn {
stat.execute("CREATE TABLE TEST(ID IDENTITY, R DOUBLE, A DOUBLE)");
stat.execute("INSERT INTO TEST(R, A) VALUES(5.0, 0.5), (10.0, 0.6)");
stat.execute("CREATE ALIAS P2C_SET FOR \"org.h2.samples.FunctionMultiReturn.polar2CartesianSet\" ");
rs = conn.createStatement().executeQuery("SELECT * FROM P2C_SET('SELECT * FROM TEST')");
stat.execute("CREATE ALIAS P2C_SET " +
"FOR \"org.h2.samples.FunctionMultiReturn.polar2CartesianSet\" ");
rs = conn.createStatement().executeQuery(
"SELECT * FROM P2C_SET('SELECT * FROM TEST')");
while (rs.next()) {
double r = rs.getDouble("R");
double a = rs.getDouble("A");
double x = rs.getDouble("X");
double y = rs.getDouble("Y");
System.out.println("(r="+r+" a="+a+") : (x=" + x + ", y="+y+")");
System.out.println("(r="+r+" a="+a+") :" +
" (x=" + x + ", y="+y+")");
}
stat.execute("CREATE ALIAS P2C_A FOR \"org.h2.samples.FunctionMultiReturn.polar2CartesianArray\" ");
rs = conn.createStatement().executeQuery("SELECT R, A, P2C_A(R, A) FROM TEST");
stat.execute("CREATE ALIAS P2C_A " +
"FOR \"org.h2.samples.FunctionMultiReturn.polar2CartesianArray\" ");
rs = conn.createStatement().executeQuery(
"SELECT R, A, P2C_A(R, A) FROM TEST");
while (rs.next()) {
double r = rs.getDouble(1);
double a = rs.getDouble(2);
......@@ -66,16 +74,20 @@ public class FunctionMultiReturn {
Object[] xy = (Object[]) o;
double x = ((Double) xy[0]).doubleValue();
double y = ((Double) xy[1]).doubleValue();
System.out.println("(r=" + r + " a=" + a + ") : (x=" + x + ", y=" + y + ")");
System.out.println("(r=" + r + " a=" + a + ") :" +
" (x=" + x + ", y=" + y + ")");
}
rs = stat.executeQuery("SELECT R, A, ARRAY_GET(E, 1), ARRAY_GET(E, 2) FROM (SELECT R, A, P2C_A(R, A) E FROM TEST)");
rs = stat.executeQuery(
"SELECT R, A, ARRAY_GET(E, 1), ARRAY_GET(E, 2) " +
"FROM (SELECT R, A, P2C_A(R, A) E FROM TEST)");
while (rs.next()) {
double r = rs.getDouble(1);
double a = rs.getDouble(2);
double x = rs.getDouble(3);
double y = rs.getDouble(4);
System.out.println("(r="+r+" a="+a+") : (x=" + x + ", y="+y+")");
System.out.println("(r="+r+" a="+a+") :" +
" (x=" + x + ", y="+y+")");
}
rs.close();
......@@ -128,7 +140,8 @@ public class FunctionMultiReturn {
* @param query the query
* @return a result set with the coordinates
*/
public static ResultSet polar2CartesianSet(Connection conn, String query) throws SQLException {
public static ResultSet polar2CartesianSet(Connection conn, String query)
throws SQLException {
SimpleResultSet result = new SimpleResultSet();
result.addColumn("R", Types.DOUBLE, 0, 0);
result.addColumn("A", Types.DOUBLE, 0, 0);
......
......@@ -30,19 +30,24 @@ public class MixedMode {
// start the server, allows to access the database remotely
Server server = Server.createTcpServer("-tcpPort", "9081");
server.start();
System.out.println("You can access the database remotely now, using the URL:");
System.out.println("jdbc:h2:tcp://localhost:9081/~/test (user: sa, password: sa)");
System.out.println(
"You can access the database remotely now, using the URL:");
System.out.println(
"jdbc:h2:tcp://localhost:9081/~/test (user: sa, password: sa)");
// now use the database in your application in embedded mode
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "sa");
Connection conn = DriverManager.getConnection(
"jdbc:h2:~/test", "sa", "sa");
// some simple 'business usage'
Statement stat = conn.createStatement();
stat.execute("DROP TABLE TIMER IF EXISTS");
stat.execute("CREATE TABLE TIMER(ID INT PRIMARY KEY, TIME VARCHAR)");
System.out.println("Execute this a few times: SELECT TIME FROM TIMER");
System.out.println("To stop this application (and the server), run: DROP TABLE TIMER");
System.out.println("Execute this a few times: " +
"SELECT TIME FROM TIMER");
System.out.println("To stop this application " +
"(and the server), run: DROP TABLE TIMER");
try {
while (true) {
// runs forever, except if you drop the table remotely
......
......@@ -32,13 +32,16 @@ public class RowAccessRights extends TriggerAdapter {
DeleteDbFiles.execute("~", "test", true);
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:~/test");
Connection conn = DriverManager.getConnection(
"jdbc:h2:~/test");
Statement stat = conn.createStatement();
stat.execute("create table test_data(id int, user varchar, data varchar, primary key(id, user))");
stat.execute("create table test_data(" +
"id int, user varchar, data varchar, primary key(id, user))");
stat.execute("create index on test_data(id, user)");
stat.execute("create view test as select id, data from test_data where user = user()");
stat.execute("create view test as select id, data " +
"from test_data where user = user()");
stat.execute("create trigger t_test instead of " +
"insert, update, delete on test for each row " +
"call \"" + RowAccessRights.class.getName() + "\"");
......@@ -49,13 +52,15 @@ public class RowAccessRights extends TriggerAdapter {
ResultSet rs;
Connection connA = DriverManager.getConnection("jdbc:h2:~/test", "a", "a");
Connection connA = DriverManager.getConnection(
"jdbc:h2:~/test", "a", "a");
Statement statA = connA.createStatement();
statA.execute("insert into test values(1, 'Hello'), (2, 'World')");
statA.execute("update test set data = 'Hello!' where id = 1");
statA.execute("delete from test where id = 2");
Connection connB = DriverManager.getConnection("jdbc:h2:~/test", "b", "b");
Connection connB = DriverManager.getConnection(
"jdbc:h2:~/test", "b", "b");
Statement statB = connB.createStatement();
statB.execute("insert into test values(1, 'Hallo'), (2, 'Welt')");
statB.execute("update test set data = 'Hallo!' where id = 1");
......@@ -68,7 +73,8 @@ public class RowAccessRights extends TriggerAdapter {
rs = statB.executeQuery("select * from test");
while (rs.next()) {
System.out.println("b: " + rs.getInt(1) + "/" + rs.getString(2));
System.out.println("b: " +
rs.getInt(1) + "/" + rs.getString(2));
}
connA.close();
......@@ -76,7 +82,8 @@ public class RowAccessRights extends TriggerAdapter {
rs = stat.executeQuery("select * from test_data");
while (rs.next()) {
System.out.println(rs.getInt(1) + "/" + rs.getString(2) + "/" + rs.getString(3));
System.out.println(rs.getInt(1) + "/" +
rs.getString(2) + "/" + rs.getString(3));
}
conn.close();
......@@ -85,13 +92,16 @@ public class RowAccessRights extends TriggerAdapter {
@Override
public void init(Connection conn, String schemaName, String triggerName,
String tableName, boolean before, int type) throws SQLException {
prepDelete = conn.prepareStatement("delete from test_data where id = ? and user = ?");
prepInsert = conn.prepareStatement("insert into test_data values(?, ?, ?)");
prepDelete = conn.prepareStatement(
"delete from test_data where id = ? and user = ?");
prepInsert = conn.prepareStatement(
"insert into test_data values(?, ?, ?)");
super.init(conn, schemaName, triggerName, tableName, before, type);
}
@Override
public void fire(Connection conn, ResultSet oldRow, ResultSet newRow) throws SQLException {
public void fire(Connection conn, ResultSet oldRow, ResultSet newRow)
throws SQLException {
String user = conn.getMetaData().getUserName();
if (oldRow != null && oldRow.next()) {
prepDelete.setInt(1, oldRow.getInt(1));
......
......@@ -54,7 +54,8 @@ public class SQLInjection {
* @param user the user name
* @param password the password
*/
void run(String driver, String url, String user, String password) throws Exception {
void run(String driver, String url, String user, String password)
throws Exception {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
stat = conn.createStatement();
......@@ -147,7 +148,8 @@ public class SQLInjection {
* @param password the password
* @return a result set with the user record if the password matches
*/
public static ResultSet getUser(Connection conn, String userName, String password) throws Exception {
public static ResultSet getUser(Connection conn, String userName,
String password) throws Exception {
PreparedStatement prep = conn.prepareStatement(
"SELECT * FROM USERS WHERE NAME=? AND PASSWORD=?");
prep.setString(1, userName);
......@@ -164,7 +166,8 @@ public class SQLInjection {
* @param password the password
* @return the new password
*/
public static String changePassword(Connection conn, String userName, String password) throws Exception {
public static String changePassword(Connection conn, String userName,
String password) throws Exception {
PreparedStatement prep = conn.prepareStatement(
"UPDATE USERS SET PASSWORD=? WHERE NAME=?");
prep.setString(1, password);
......
......@@ -51,7 +51,10 @@ public class SecurePassword {
stat.execute(
"drop table account if exists");
stat.execute(
"create table account(name varchar primary key, salt binary default secure_rand(16), hash binary)");
"create table account(" +
"name varchar primary key, " +
"salt binary default secure_rand(16), " +
"hash binary)");
PreparedStatement prep;
prep = conn.prepareStatement("insert into account(name) values(?)");
prep.setString(1, "Joe");
......@@ -59,14 +62,18 @@ public class SecurePassword {
prep.close();
prep = conn.prepareStatement(
"update account set hash=hash('SHA256', stringtoutf8(salt||?), 10) where name=?");
"update account set " +
"hash=hash('SHA256', stringtoutf8(salt||?), 10) " +
"where name=?");
prep.setString(1, "secret");
prep.setString(2, "Joe");
prep.execute();
prep.close();
prep = conn.prepareStatement(
"select * from account where name=? and hash=hash('SHA256', stringtoutf8(salt||?), 10)");
"select * from account " +
"where name=? " +
"and hash=hash('SHA256', stringtoutf8(salt||?), 10)");
prep.setString(1, "Joe");
prep.setString(2, "secret");
ResultSet rs = prep.executeQuery();
......
......@@ -51,7 +51,8 @@ public class ShowProgress implements DatabaseEventListener {
Statement stat = conn.createStatement();
stat.execute("DROP TABLE IF EXISTS TEST");
stat.execute("CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR)");
PreparedStatement prep = conn.prepareStatement("INSERT INTO TEST VALUES(?, 'Test' || SPACE(100))");
PreparedStatement prep = conn.prepareStatement(
"INSERT INTO TEST VALUES(?, 'Test' || SPACE(100))");
long time;
time = System.currentTimeMillis();
int len = 1000;
......@@ -78,7 +79,9 @@ public class ShowProgress implements DatabaseEventListener {
System.out.println("Open connection...");
time = System.currentTimeMillis();
conn = DriverManager.getConnection("jdbc:h2:test;DATABASE_EVENT_LISTENER='" + getClass().getName() + "'", "sa", "");
conn = DriverManager.getConnection(
"jdbc:h2:test;DATABASE_EVENT_LISTENER='" +
getClass().getName() + "'", "sa", "");
time = System.currentTimeMillis() - time;
System.out.println("Done after " + time + " ms");
prep.close();
......@@ -133,7 +136,9 @@ public class ShowProgress implements DatabaseEventListener {
} catch (InterruptedException e) {
// ignore
}
System.out.println("State: " + stateName + " " + (100 * current / max) + "% (" + current + " of " + max + ") "
System.out.println("State: " + stateName + " " +
(100 * current / max) + "% (" +
current + " of " + max + ") "
+ (time - start) + " ms");
}
......
......@@ -82,13 +82,15 @@ public class TriggerPassData implements Trigger {
* @param trigger the trigger name
* @param data the data
*/
public static void setTriggerData(Connection conn, String trigger, String data) throws SQLException {
public static void setTriggerData(Connection conn, String trigger,
String data) throws SQLException {
TRIGGERS.get(getPrefix(conn) + trigger).triggerData = data;
}
private static String getPrefix(Connection conn) throws SQLException {
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("call ifnull(database_path() || '_', '') || database() || '_'");
ResultSet rs = stat.executeQuery(
"call ifnull(database_path() || '_', '') || database() || '_'");
rs.next();
return rs.getString(1);
}
......
......@@ -77,7 +77,8 @@ public class TriggerSample {
* @param type the operation type: INSERT, UPDATE, or DELETE
*/
@Override
public void init(Connection conn, String schemaName, String triggerName, String tableName, boolean before, int type) {
public void init(Connection conn, String schemaName,
String triggerName, String tableName, boolean before, int type) {
// initialize the trigger object is necessary
}
......
......@@ -74,7 +74,8 @@ public class UpdatableView extends TriggerAdapter {
}
@Override
public void fire(Connection conn, ResultSet oldRow, ResultSet newRow) throws SQLException {
public void fire(Connection conn, ResultSet oldRow, ResultSet newRow)
throws SQLException {
if (oldRow != null && oldRow.next()) {
prepDelete.setInt(1, oldRow.getInt(1));
prepDelete.execute();
......
......@@ -43,10 +43,15 @@ public class TestStringUtils extends TestBase {
}
private void testHex() {
assertEquals("face", StringUtils.convertBytesToHex(new byte[] { (byte) 0xfa, (byte) 0xce }));
assertEquals(new byte[] { (byte) 0xfa, (byte) 0xce }, StringUtils.convertHexToBytes("face"));
assertEquals(new byte[] { (byte) 0xfa, (byte) 0xce }, StringUtils.convertHexToBytes("fAcE"));
assertEquals(new byte[] { (byte) 0xfa, (byte) 0xce }, StringUtils.convertHexToBytes("FaCe"));
assertEquals("face",
StringUtils.convertBytesToHex(new byte[]
{ (byte) 0xfa, (byte) 0xce }));
assertEquals(new byte[] { (byte) 0xfa, (byte) 0xce },
StringUtils.convertHexToBytes("face"));
assertEquals(new byte[] { (byte) 0xfa, (byte) 0xce },
StringUtils.convertHexToBytes("fAcE"));
assertEquals(new byte[] { (byte) 0xfa, (byte) 0xce },
StringUtils.convertHexToBytes("FaCe"));
new AssertThrows(DbException.class) { @Override
public void test() {
StringUtils.convertHexToBytes("120");
......@@ -69,40 +74,67 @@ public class TestStringUtils extends TestBase {
}
private void testXML() {
assertEquals("<!-- - - - - - -abc- - - - - - -->\n", StringUtils.xmlComment("------abc------"));
assertEquals("<test/>\n", StringUtils.xmlNode("test", null, null));
assertEquals("<test>Gr&#xfc;bel</test>\n", StringUtils.xmlNode("test", null, StringUtils.xmlText("Gr\u00fcbel")));
assertEquals("Rand&amp;Blue", StringUtils.xmlText("Rand&Blue"));
assertEquals("&lt;&lt;[[[]]]&gt;&gt;", StringUtils.xmlCData("<<[[[]]]>>"));
Date dt = DateTimeUtils.parseDateTime("2001-02-03 04:05:06 GMT", "yyyy-MM-dd HH:mm:ss z", "en", "GMT");
assertEquals("<!-- - - - - - -abc- - - - - - -->\n",
StringUtils.xmlComment("------abc------"));
assertEquals("<test/>\n",
StringUtils.xmlNode("test", null, null));
assertEquals("<test>Gr&#xfc;bel</test>\n",
StringUtils.xmlNode("test", null,
StringUtils.xmlText("Gr\u00fcbel")));
assertEquals("Rand&amp;Blue",
StringUtils.xmlText("Rand&Blue"));
assertEquals("&lt;&lt;[[[]]]&gt;&gt;",
StringUtils.xmlCData("<<[[[]]]>>"));
Date dt = DateTimeUtils.parseDateTime(
"2001-02-03 04:05:06 GMT",
"yyyy-MM-dd HH:mm:ss z", "en", "GMT");
String s = StringUtils.xmlStartDoc()
+ StringUtils.xmlComment("Test Comment")
+ StringUtils.xmlNode("rss", StringUtils.xmlAttr("version", "2.0"), StringUtils
.xmlComment("Test Comment\nZeile2")
+ StringUtils.xmlNode("channel", null, StringUtils.xmlNode("title", null, "H2 Database Engine")
+ StringUtils.xmlNode("rss",
StringUtils.xmlAttr("version", "2.0"),
StringUtils.xmlComment("Test Comment\nZeile2")
+ StringUtils.xmlNode("channel", null,
StringUtils.xmlNode("title", null, "H2 Database Engine")
+ StringUtils.xmlNode("link", null, "http://www.h2database.com")
+ StringUtils.xmlNode("description", null, "H2 Database Engine")
+ StringUtils.xmlNode("language", null, "en-us")
+ StringUtils.xmlNode("pubDate", null,
DateTimeUtils.formatDateTime(dt,
"EEE, d MMM yyyy HH:mm:ss z", "en", "GMT"))
+ StringUtils.xmlNode("lastBuildDate", null,
DateTimeUtils.formatDateTime(dt,
"EEE, d MMM yyyy HH:mm:ss z", "en", "GMT"))
+ StringUtils.xmlNode("item", null,
StringUtils.xmlNode("title", null,
"New Version 0.9.9.9.9")
+ StringUtils.xmlNode("link", null, "http://www.h2database.com")
+ StringUtils.xmlNode("description", null, "H2 Database Engine")
+ StringUtils.xmlNode("language", null, "en-us")
+ StringUtils.xmlNode("pubDate", null, DateTimeUtils.formatDateTime(dt,
"EEE, d MMM yyyy HH:mm:ss z", "en", "GMT"))
+ StringUtils.xmlNode("lastBuildDate", null, DateTimeUtils.formatDateTime(dt,
"EEE, d MMM yyyy HH:mm:ss z", "en", "GMT"))
+ StringUtils.xmlNode("item", null, StringUtils.xmlNode("title", null,
"New Version 0.9.9.9.9")
+ StringUtils.xmlNode("link", null, "http://www.h2database.com")
+ StringUtils.xmlNode("description", null, StringUtils
.xmlCData("\nNew Features\nTest\n")))));
assertEquals(s, "<?xml version=\"1.0\"?>\n" + "<!-- Test Comment -->\n" + "<rss version=\"2.0\">\n" + " <!--\n"
+ " Test Comment\n" + " Zeile2\n" + " -->\n" + " <channel>\n"
+ " <title>H2 Database Engine</title>\n" + " <link>http://www.h2database.com</link>\n"
+ " <description>H2 Database Engine</description>\n" + " <language>en-us</language>\n"
+ " <pubDate>Sat, 3 Feb 2001 04:05:06 GMT</pubDate>\n"
+ " <lastBuildDate>Sat, 3 Feb 2001 04:05:06 GMT</lastBuildDate>\n" + " <item>\n"
+ " <title>New Version 0.9.9.9.9</title>\n"
+ " <link>http://www.h2database.com</link>\n" + " <description>\n"
+ " <![CDATA[\n" + " New Features\n" + " Test\n"
+ " ]]>\n" + " </description>\n" + " </item>\n" + " </channel>\n"
+ "</rss>\n");
+ StringUtils.xmlNode("description", null,
StringUtils.xmlCData("\nNew Features\nTest\n")))));
assertEquals(
s,
"<?xml version=\"1.0\"?>\n"
+ "<!-- Test Comment -->\n"
+ "<rss version=\"2.0\">\n"
+ " <!--\n"
+ " Test Comment\n"
+ " Zeile2\n"
+ " -->\n"
+ " <channel>\n"
+ " <title>H2 Database Engine</title>\n"
+ " <link>http://www.h2database.com</link>\n"
+ " <description>H2 Database Engine</description>\n"
+ " <language>en-us</language>\n"
+ " <pubDate>Sat, 3 Feb 2001 04:05:06 GMT</pubDate>\n"
+ " <lastBuildDate>Sat, 3 Feb 2001 04:05:06 GMT</lastBuildDate>\n"
+ " <item>\n"
+ " <title>New Version 0.9.9.9.9</title>\n"
+ " <link>http://www.h2database.com</link>\n"
+ " <description>\n"
+ " <![CDATA[\n"
+ " New Features\n"
+ " Test\n" + " ]]>\n"
+ " </description>\n" + " </item>\n"
+ " </channel>\n" + "</rss>\n");
}
private void testURL() throws UnsupportedEncodingException {
......@@ -172,15 +204,24 @@ public class TestStringUtils extends TestBase {
}
private void testReplaceAll() {
assertEquals("def", StringUtils.replaceAll("abc def", "abc ", ""));
assertEquals("af", StringUtils.replaceAll("abc def", "bc de", ""));
assertEquals("abc def", StringUtils.replaceAll("abc def", "bc ", "bc "));
assertEquals("abc ", StringUtils.replaceAll("abc def", "def", ""));
assertEquals(" ", StringUtils.replaceAll("abc abc", "abc", ""));
assertEquals("xyz xyz", StringUtils.replaceAll("abc abc", "abc", "xyz"));
assertEquals("abc def", StringUtils.replaceAll("abc def", "xyz", "abc"));
assertEquals("", StringUtils.replaceAll("abcabcabc", "abc", ""));
assertEquals("abcabcabc", StringUtils.replaceAll("abcabcabc", "aBc", ""));
assertEquals("def",
StringUtils.replaceAll("abc def", "abc ", ""));
assertEquals("af",
StringUtils.replaceAll("abc def", "bc de", ""));
assertEquals("abc def",
StringUtils.replaceAll("abc def", "bc ", "bc "));
assertEquals("abc ",
StringUtils.replaceAll("abc def", "def", ""));
assertEquals(" ",
StringUtils.replaceAll("abc abc", "abc", ""));
assertEquals("xyz xyz",
StringUtils.replaceAll("abc abc", "abc", "xyz"));
assertEquals("abc def",
StringUtils.replaceAll("abc def", "xyz", "abc"));
assertEquals("",
StringUtils.replaceAll("abcabcabc", "abc", ""));
assertEquals("abcabcabc",
StringUtils.replaceAll("abcabcabc", "aBc", ""));
}
}
......@@ -17,12 +17,14 @@ import android.database.Cursor;
public class Test extends Activity {
public static void main(String... args) throws Exception {
H2Database db = H2Utils.openOrCreateDatabase("helloWorld.db", MODE_PRIVATE, null);
H2Database db = H2Utils.openOrCreateDatabase(
"helloWorld.db", MODE_PRIVATE, null);
log("opened ps=" + db.getPageSize());
try {
// db.execSQL("DROP TABLE IF EXISTS test");
// log("dropped");
db.execSQL("CREATE TABLE if not exists test(ID INTEGER PRIMARY KEY, NAME VARCHAR)");
db.execSQL(
"CREATE TABLE if not exists test(ID INTEGER PRIMARY KEY, NAME VARCHAR)");
log("created");
for (int j = 0; j < 10; j++) {
Cursor c = db.rawQuery("select * from test", new String[0]);
......@@ -39,13 +41,15 @@ public class Test extends Activity {
log("delete");
db.beginTransaction();
for (int i = 0; i < 1000; i++) {
db.execSQL("INSERT INTO TEST VALUES(?, 'Hello')", new Object[] { i });
db.execSQL(
"INSERT INTO TEST VALUES(?, 'Hello')", new Object[] { i });
}
db.setTransactionSuccessful();
db.endTransaction();
log("inserted");
for (int i = 0; i < 10; i++) {
Cursor c = db.rawQuery("select * from test where id=?", new String[] { "" + i });
Cursor c = db.rawQuery(
"select * from test where id=?", new String[] { "" + i });
int count = c.getCount();
if (count > 0) {
c.move(1);
......
......@@ -24,7 +24,8 @@ public class H2Cursor extends AbstractWindowedCursor {
private H2Database database;
private ResultInterface result;
H2Cursor(H2Database db, H2CursorDriver driver, String editTable, H2Query query) {
H2Cursor(H2Database db, H2CursorDriver driver, String editTable,
H2Query query) {
this.database = db;
// TODO
}
......
......@@ -16,7 +16,6 @@ import org.h2.engine.Database;
import org.h2.engine.Session;
import org.h2.expression.Parameter;
import org.h2.result.ResultInterface;
import org.h2.store.PageStore;
import org.h2.value.Value;
import org.h2.value.ValueInt;
import org.h2.value.ValueLong;
......@@ -111,7 +110,8 @@ public class H2Database {
* @param flags 0, or a combination of OPEN_READONLY and CREATE_IF_NECESSARY
* @return a connection to this database
*/
public static H2Database openDatabase(String path, H2Database.CursorFactory factory, int flags) {
public static H2Database openDatabase(String path,
H2Database.CursorFactory factory, int flags) {
ConnectionInfo ci = new ConnectionInfo(path);
if ((flags & OPEN_READWRITE) != 0) {
// TODO readonly connections
......@@ -133,7 +133,8 @@ public class H2Database {
* @param factory the cursor factory
* @return a connection to this database
*/
public static H2Database openOrCreateDatabase(File file, H2Database.CursorFactory factory) {
public static H2Database openOrCreateDatabase(File file,
H2Database.CursorFactory factory) {
return openDatabase(file.getPath(), factory, CREATE_IF_NECESSARY);
}
......@@ -145,7 +146,8 @@ public class H2Database {
* @param factory the cursor factory
* @return a connection to this database
*/
public static H2Database openOrCreateDatabase(String path, H2Database.CursorFactory factory) {
public static H2Database openOrCreateDatabase(String path,
H2Database.CursorFactory factory) {
return openDatabase(path, factory, CREATE_IF_NECESSARY);
}
......@@ -161,7 +163,8 @@ public class H2Database {
*
* @param transactionListener the transaction listener to use
*/
public void beginTransactionWithListener(H2TransactionListener transactionListener) {
public void beginTransactionWithListener(
H2TransactionListener transactionListener) {
// TODO H2TransactionListener
session.setAutoCommit(false);
}
......@@ -306,7 +309,8 @@ public class H2Database {
* @param values the values
* @return TODO
*/
public long insertOrThrow(String table, String nullColumnHack, ContentValues values) {
public long insertOrThrow(String table, String nullColumnHack,
ContentValues values) {
return 0;
}
......@@ -377,7 +381,8 @@ public class H2Database {
* @param foreignKey the foreign key
* @param updateTable TODO
*/
public void markTableSyncable(String table, String foreignKey, String updateTable) {
public void markTableSyncable(String table, String foreignKey,
String updateTable) {
// TODO
}
......@@ -405,8 +410,9 @@ public class H2Database {
* @param limit the limit or null
* @return the cursor
*/
public Cursor query(boolean distinct, String table, String[] columns, String selection, String[] selectionArgs,
String groupBy, String having, String orderBy, String limit) {
public Cursor query(boolean distinct, String table, String[] columns,
String selection, String[] selectionArgs, String groupBy,
String having, String orderBy, String limit) {
return null;
}
......@@ -422,8 +428,9 @@ public class H2Database {
* @param orderBy the order by list or null
* @return the cursor
*/
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy,
String having, String orderBy) {
public Cursor query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy) {
return null;
}
......@@ -440,8 +447,9 @@ public class H2Database {
* @param limit the limit or null
* @return the cursor
*/
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy,
String having, String orderBy, String limit) {
public Cursor query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy, String limit) {
return null;
}
......@@ -460,8 +468,10 @@ public class H2Database {
* @param limit the limit or null
* @return the cursor
*/
public Cursor queryWithFactory(H2Database.CursorFactory cursorFactory, boolean distinct, String table, String[] columns,
String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) {
public Cursor queryWithFactory(H2Database.CursorFactory cursorFactory,
boolean distinct, String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy, String limit) {
return null;
}
......@@ -487,8 +497,8 @@ public class H2Database {
* @param editTable TODO
* @return the cursor
*/
public Cursor rawQueryWithFactory(H2Database.CursorFactory cursorFactory, String sql, String[] selectionArgs,
String editTable) {
public Cursor rawQueryWithFactory(H2Database.CursorFactory cursorFactory,
String sql, String[] selectionArgs, String editTable) {
return null;
}
......@@ -509,7 +519,8 @@ public class H2Database {
* @param initialValues the values
* @return TODO
*/
public long replace(String table, String nullColumnHack, ContentValues initialValues) {
public long replace(String table, String nullColumnHack,
ContentValues initialValues) {
return 0;
}
......@@ -521,7 +532,8 @@ public class H2Database {
* @param initialValues the values
* @return TODO
*/
public long replaceOrThrow(String table, String nullColumnHack, ContentValues initialValues) {
public long replaceOrThrow(String table, String nullColumnHack,
ContentValues initialValues) {
return 0;
}
......@@ -588,7 +600,8 @@ public class H2Database {
* @param whereArgs the parameter values
* @return the number of rows updated
*/
public int update(String table, ContentValues values, String whereClause, String[] whereArgs) {
public int update(String table, ContentValues values, String whereClause,
String[] whereArgs) {
return 0;
}
......@@ -602,8 +615,8 @@ public class H2Database {
* @param conflictAlgorithm the conflict resolution option
* @return the number of rows updated
*/
public int updateWithOnConflict(String table, ContentValues values, String whereClause, String[] whereArgs,
int conflictAlgorithm) {
public int updateWithOnConflict(String table, ContentValues values,
String whereClause, String[] whereArgs, int conflictAlgorithm) {
return 0;
}
......@@ -650,7 +663,8 @@ public class H2Database {
* @param query TODO
* @return the cursor
*/
Cursor newCursor(H2Database db, H2CursorDriver masterQuery, String editTable, H2Query query);
Cursor newCursor(H2Database db, H2CursorDriver masterQuery,
String editTable, H2Query query);
}
private Prepared prepare(String sql, Object[] args) {
......
......@@ -22,7 +22,8 @@ public abstract class H2OpenHelper {
* @param factory the cursor factory to use
* @param version the expected database version
*/
H2OpenHelper(Context context, String name, H2Database.CursorFactory factory, int version) {
H2OpenHelper(Context context, String name,
H2Database.CursorFactory factory, int version) {
// TODO
}
......
......@@ -49,8 +49,9 @@ public class H2QueryBuilder {
* @param limit the limit or null
* @return the query
*/
static String buildQueryString(boolean distinct, String tables, String[] columns, String where, String groupBy,
String having, String orderBy, String limit) {
static String buildQueryString(boolean distinct, String tables,
String[] columns, String where, String groupBy, String having,
String orderBy, String limit) {
StringBuilder s = new StringBuilder();
s.append("select ");
if (distinct) {
......@@ -106,7 +107,8 @@ public class H2QueryBuilder {
* @param limit the limit or null
* @return the query
*/
String buildQuery(String[] projectionIn, String selection, String[] selectionArgs, String groupBy, String having,
String buildQuery(String[] projectionIn, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy, String limit) {
return null;
}
......@@ -138,9 +140,11 @@ public class H2QueryBuilder {
* @param having the having condition or null
* @return the query
*/
String buildUnionSubQuery(String typeDiscriminatorColumn, String[] unionColumns, Set<String> columnsPresentInTable,
int computedColumnsOffset, String typeDiscriminatorValue, String selection, String[] selectionArgs,
String groupBy, String having) {
String buildUnionSubQuery(String typeDiscriminatorColumn,
String[] unionColumns, Set<String> columnsPresentInTable,
int computedColumnsOffset, String typeDiscriminatorValue,
String selection, String[] selectionArgs, String groupBy,
String having) {
return null;
}
......@@ -166,8 +170,9 @@ public class H2QueryBuilder {
* @param orderBy the order by list or null
* @return the cursor
*/
Cursor query(H2Database db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy,
String having, String orderBy) {
Cursor query(H2Database db, String[] projectionIn, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy) {
return null;
}
......@@ -184,8 +189,9 @@ public class H2QueryBuilder {
* @param limit the limit or null
* @return the cursor
*/
Cursor query(H2Database db, String[] projectionIn, String selection, String[] selectionArgs, String groupBy,
String having, String orderBy, String limit) {
Cursor query(H2Database db, String[] projectionIn, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy, String limit) {
return null;
}
......
......@@ -19,7 +19,8 @@ public class H2Utils {
* @param factory the cursor factory to use
* @return the database connection
*/
public static H2Database openOrCreateDatabase(String name, int mode, H2Database.CursorFactory factory) {
public static H2Database openOrCreateDatabase(String name, int mode,
H2Database.CursorFactory factory) {
return H2Database.openOrCreateDatabase(name, factory);
}
......
......@@ -130,7 +130,9 @@ public class BuildBase {
pattern = pattern.substring(1);
}
if (pattern.indexOf('*') >= 0) {
throw new RuntimeException("Unsupported pattern, may only start or end with *:" + pattern);
throw new RuntimeException(
"Unsupported pattern, may only start or end with *:"
+ pattern);
}
// normalize / and \
pattern = BuildBase.replaceAll(pattern, "/", File.separator);
......@@ -211,7 +213,8 @@ public class BuildBase {
private void runShell() {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String last = "", line;
System.out.println("Shell mode. Type the target, then [Enter]. Just [Enter] repeats the last target.");
System.out.println("Shell mode. Type the target, then [Enter]. " +
"Just [Enter] repeats the last target.");
while (true) {
System.out.print("build> ");
try {
......@@ -283,7 +286,8 @@ public class BuildBase {
sysOut.println("Targets:");
for (Method m : methods) {
int mod = m.getModifiers();
if (!Modifier.isStatic(mod) && Modifier.isPublic(mod) && m.getParameterTypes().length == 0) {
if (!Modifier.isStatic(mod) && Modifier.isPublic(mod)
&& m.getParameterTypes().length == 0) {
sysOut.println(m.getName());
}
}
......@@ -374,7 +378,8 @@ public class BuildBase {
Field field = clazz.getField(fieldName);
return field.get(null).toString();
} catch (Exception e) {
throw new RuntimeException("Can not read field " + className + "." + fieldName, e);
throw new RuntimeException("Can not read field " + className + "."
+ fieldName, e);
}
}
......@@ -391,7 +396,8 @@ public class BuildBase {
Method method = clazz.getMethod(methodName);
return method.invoke(null).toString();
} catch (Exception e) {
throw new RuntimeException("Can not read value " + className + "." + methodName + "()", e);
throw new RuntimeException("Can not read value " + className + "."
+ methodName + "()", e);
}
}
......@@ -533,13 +539,15 @@ public class BuildBase {
* @param version the Maven version id
* @param sha1Checksum the SHA-1 checksum or null
*/
protected void downloadUsingMaven(String target, String group, String artifact, String version, String sha1Checksum) {
protected void downloadUsingMaven(String target, String group,
String artifact, String version, String sha1Checksum) {
String repoDir = "http://repo1.maven.org/maven2";
File targetFile = new File(target);
if (targetFile.exists()) {
return;
}
String repoFile = group + "/" + artifact + "/" + version + "/" + artifact + "-" + version + ".jar";
String repoFile = group + "/" + artifact + "/" + version + "/"
+ artifact + "-" + version + ".jar";
mkdirs(targetFile.getAbsoluteFile().getParentFile());
String localMavenDir = getLocalMavenDir();
if (new File(localMavenDir).exists()) {
......@@ -758,7 +766,8 @@ public class BuildBase {
* @param storeOnly if the files should not be compressed
* @param sortBySuffix if the file should be sorted by the file suffix
*/
protected void zip(String destFile, FileList files, String basePath, boolean storeOnly, boolean sortBySuffix) {
protected void zip(String destFile, FileList files, String basePath,
boolean storeOnly, boolean sortBySuffix) {
long kb = zipOrJar(destFile, files, basePath, storeOnly, sortBySuffix, false);
println("Zip " + destFile + " (" + kb + " KB)");
}
......@@ -785,7 +794,9 @@ public class BuildBase {
basePath = new File(basePath).getPath();
try {
if (new File(destFile).isDirectory()) {
throw new IOException("Can't create the file as a directory with this name already exists: " + destFile);
throw new IOException(
"Can't create the file as a directory with this name already exists: "
+ destFile);
}
OutputStream out = new BufferedOutputStream(new FileOutputStream(destFile));
ZipOutputStream zipOut;
......@@ -897,7 +908,8 @@ public class BuildBase {
File f = new File(dir);
if (f.exists()) {
if (f.isFile()) {
throw new RuntimeException("Can not create directory " + dir + " because a file with this name exists");
throw new RuntimeException("Can not create directory " + dir
+ " because a file with this name exists");
}
} else {
mkdirs(f);
......
......@@ -18,7 +18,7 @@ import java.io.RandomAccessFile;
public class CheckJavadoc {
private static final int MAX_COMMENT_LINE_SIZE = 80;
private static final int MAX_SOURCE_LINE_SIZE = 120;
private static final int MAX_SOURCE_LINE_SIZE = 80;
private int errorCount;
/**
......@@ -55,7 +55,9 @@ public class CheckJavadoc {
}
}
if (foundJava && !foundPackageHtml) {
System.out.println("No package.html file, but a Java file found at: " + file.getAbsolutePath());
System.out.println(
"No package.html file, but a Java file found at: "
+ file.getAbsolutePath());
errorCount++;
}
} else {
......@@ -112,6 +114,7 @@ public class CheckJavadoc {
} else if (!inComment && line.length() > MAX_SOURCE_LINE_SIZE) {
System.out.println("Long line: " + file.getAbsolutePath()
+ " (" + file.getName() + ":" + lineNumber + ")");
errorCount++;
}
lineNumber++;
pos = next + 1;
......
......@@ -19,14 +19,18 @@ import java.util.Arrays;
public class CheckTextFiles {
// must contain "+" otherwise this here counts as well
private static final String COPYRIGHT = "Copyright 2004-2013 " + "H2 Group.";
private static final String LICENSE = "Multiple-Licensed " + "under the H2 License";
private static final String COPYRIGHT = "Copyright 2004-2013 " +
"H2 Group.";
private static final String LICENSE = "Multiple-Licensed " +
"under the H2 License";
private static final String[] SUFFIX_CHECK = { "html", "jsp", "js", "css", "bat", "nsi",
"java", "txt", "properties", "sql", "xml", "csv", "Driver", "prefs" };
private static final String[] SUFFIX_IGNORE = { "gif", "png", "odg", "ico", "sxd",
"layout", "res", "win", "jar", "task", "svg", "MF", "mf", "sh", "DS_Store", "prop" };
private static final String[] SUFFIX_CRLF = { "bat" };
private static final String[] SUFFIX_CHECK = { "html", "jsp", "js", "css",
"bat", "nsi", "java", "txt", "properties", "sql", "xml", "csv",
"Driver", "prefs" };
private static final String[] SUFFIX_IGNORE = { "gif", "png", "odg", "ico",
"sxd", "layout", "res", "win", "jar", "task", "svg", "MF", "mf",
"sh", "DS_Store", "prop" };
private static final String[] SUFFIX_CRLF = { "bat" };
private static final boolean ALLOW_TAB = false;
private static final boolean ALLOW_CR = true;
......@@ -86,7 +90,9 @@ public class CheckTextFiles {
// check = false;
// ignore = true;
// }
if (name.endsWith(".utf8.txt") || (name.startsWith("_docs_") && name.endsWith(".properties"))) {
if (name.endsWith(".utf8.txt") ||
(name.startsWith("_docs_") &&
name.endsWith(".properties"))) {
check = false;
ignore = true;
}
......@@ -103,7 +109,8 @@ public class CheckTextFiles {
}
}
if (ignore == check) {
throw new RuntimeException("Unknown suffix: " + suffix + " for file: " + file.getAbsolutePath());
throw new RuntimeException("Unknown suffix: " + suffix
+ " for file: " + file.getAbsolutePath());
}
useCRLF = false;
for (String s : SUFFIX_CRLF) {
......@@ -128,7 +135,8 @@ public class CheckTextFiles {
* @param fix automatically fix newline characters and trailing spaces
* @param checkLicense check the license and copyright
*/
public void checkOrFixFile(File file, boolean fix, boolean checkLicense) throws Exception {
public void checkOrFixFile(File file, boolean fix, boolean checkLicense)
throws Exception {
RandomAccessFile in = new RandomAccessFile(file, "r");
byte[] data = new byte[(int) file.length()];
ByteArrayOutputStream out = fix ? new ByteArrayOutputStream() : null;
......@@ -161,7 +169,8 @@ public class CheckTextFiles {
char ch = (char) (data[i] & 0xff);
boolean isWhitespace = Character.isWhitespace(ch);
if (ch > 127) {
fail(file, "contains character " + (int) ch + " at " + new String(data, i - 10, 20), line);
fail(file, "contains character " + (int) ch + " at "
+ new String(data, i - 10, 20), line);
return;
} else if (ch < 32) {
if (ch == '\n') {
......@@ -277,7 +286,8 @@ public class CheckTextFiles {
name = name.substring(idx);
}
}
System.out.println("FAIL at " + name + " " + error + " " + file.getAbsolutePath());
System.out.println("FAIL at " + name + " " + error + " "
+ file.getAbsolutePath());
hasError = true;
if (failOnError) {
throw new RuntimeException("FAIL");
......
......@@ -143,7 +143,8 @@ public class SwitchSource {
f.renameTo(fileBack);
File fileCopy = new File(name);
if (!fileNew.renameTo(fileCopy)) {
throw new IOException("Could not rename " + fileNew.getAbsolutePath() + " to " + name);
throw new IOException("Could not rename "
+ fileNew.getAbsolutePath() + " to " + name);
}
if (!fileBack.delete()) {
throw new IOException("Could not delete " + fileBack.getAbsolutePath());
......
......@@ -39,7 +39,8 @@ public class BnfRailroad implements BnfVisitor {
StringBuilder buff = new StringBuilder();
for (String s : syntaxList) {
bnf.visit(this, s);
html = StringUtils.replaceAll(html, "</code></td><td class=\"d\"><code class=\"c\">", " ");
html = StringUtils.replaceAll(html, "</code></td>" +
"<td class=\"d\"><code class=\"c\">", " ");
if (buff.length() > 0) {
buff.append("<br />");
}
......@@ -137,7 +138,8 @@ public class BnfRailroad implements BnfVisitor {
for (Rule r : list) {
String a = i == 0 ? "t" : i == list.size() - 1 ? "l" : "k";
i++;
buff.append("<tr class=\"railroad\"><td class=\"" + a + "s\"></td><td class=\"d\">");
buff.append("<tr class=\"railroad\"><td class=\"" +
a + "s\"></td><td class=\"d\">");
r.accept(this);
buff.append(html);
buff.append("</td><td class=\"" + a + "e\"></td></tr>");
......@@ -161,8 +163,10 @@ public class BnfRailroad implements BnfVisitor {
public void visitRuleOptional(Rule rule) {
StringBuilder buff = new StringBuilder();
buff.append("<table class=\"railroad\">");
buff.append("<tr class=\"railroad\"><td class=\"ts\"></td><td class=\"d\">&nbsp;</td><td class=\"te\"></td></tr>");
buff.append("<tr class=\"railroad\"><td class=\"ls\"></td><td class=\"d\">");
buff.append("<tr class=\"railroad\"><td class=\"ts\"></td>" +
"<td class=\"d\">&nbsp;</td><td class=\"te\"></td></tr>");
buff.append("<tr class=\"railroad\">" +
"<td class=\"ls\"></td><td class=\"d\">");
rule.accept(this);
buff.append(html);
buff.append("</td><td class=\"le\"></td></tr></table>");
......
......@@ -43,7 +43,8 @@ public class FileConverter {
}
}
String languageCode = Locale.KOREA.getLanguage();
String language = new Locale(languageCode).getDisplayLanguage(new Locale(languageCode));
String language = new Locale(languageCode)
.getDisplayLanguage(new Locale(languageCode));
System.out.println(language);
System.out.println(StringUtils.javaEncode(language));
convert();
......
......@@ -36,7 +36,8 @@ public class GenerateDoc {
private String inDir = "src/docsrc/html";
private String outDir = "docs/html";
private Connection conn;
private final HashMap<String, Object> session = new HashMap<String, Object>();
private final HashMap<String, Object> session =
new HashMap<String, Object>();
private Bnf bnf;
/**
......@@ -68,22 +69,38 @@ public class GenerateDoc {
session.put("stableVersion", Constants.getVersionStable());
session.put("stableVersionDate", Constants.BUILD_DATE_STABLE);
// String help = "SELECT * FROM INFORMATION_SCHEMA.HELP WHERE SECTION";
String help = "SELECT ROWNUM ID, * FROM CSVREAD('" + IN_HELP + "', NULL, 'lineComment=#') WHERE SECTION ";
map("commands", help + "LIKE 'Commands%' ORDER BY ID", true);
map("commandsDML", help + "= 'Commands (DML)' ORDER BY ID", false);
map("commandsDDL", help + "= 'Commands (DDL)' ORDER BY ID", false);
map("commandsOther", help + "= 'Commands (Other)' ORDER BY ID", false);
map("otherGrammar", help + "= 'Other Grammar' ORDER BY ID", true);
map("functionsAggregate", help + "= 'Functions (Aggregate)' ORDER BY ID", false);
map("functionsNumeric", help + "= 'Functions (Numeric)' ORDER BY ID", false);
map("functionsString", help + "= 'Functions (String)' ORDER BY ID", false);
map("functionsTimeDate", help + "= 'Functions (Time and Date)' ORDER BY ID", false);
map("functionsSystem", help + "= 'Functions (System)' ORDER BY ID", false);
map("functionsAll", help + "LIKE 'Functions%' ORDER BY SECTION, ID", true);
map("dataTypes", help + "LIKE 'Data Types%' ORDER BY SECTION, ID", true);
map("informationSchema", "SELECT TABLE_NAME TOPIC, GROUP_CONCAT(COLUMN_NAME "
+ "ORDER BY ORDINAL_POSITION SEPARATOR ', ') SYNTAX FROM INFORMATION_SCHEMA.COLUMNS "
+ "WHERE TABLE_SCHEMA='INFORMATION_SCHEMA' GROUP BY TABLE_NAME ORDER BY TABLE_NAME", false);
String help = "SELECT ROWNUM ID, * FROM CSVREAD('" +
IN_HELP + "', NULL, 'lineComment=#') WHERE SECTION ";
map("commands",
help + "LIKE 'Commands%' ORDER BY ID", true);
map("commandsDML",
help + "= 'Commands (DML)' ORDER BY ID", false);
map("commandsDDL",
help + "= 'Commands (DDL)' ORDER BY ID", false);
map("commandsOther",
help + "= 'Commands (Other)' ORDER BY ID", false);
map("otherGrammar",
help + "= 'Other Grammar' ORDER BY ID", true);
map("functionsAggregate",
help + "= 'Functions (Aggregate)' ORDER BY ID", false);
map("functionsNumeric",
help + "= 'Functions (Numeric)' ORDER BY ID", false);
map("functionsString",
help + "= 'Functions (String)' ORDER BY ID", false);
map("functionsTimeDate",
help + "= 'Functions (Time and Date)' ORDER BY ID", false);
map("functionsSystem",
help + "= 'Functions (System)' ORDER BY ID", false);
map("functionsAll",
help + "LIKE 'Functions%' ORDER BY SECTION, ID", true);
map("dataTypes",
help + "LIKE 'Data Types%' ORDER BY SECTION, ID", true);
map("informationSchema", "SELECT TABLE_NAME TOPIC, " +
"GROUP_CONCAT(COLUMN_NAME " +
"ORDER BY ORDINAL_POSITION SEPARATOR ', ') SYNTAX " +
"FROM INFORMATION_SCHEMA.COLUMNS " +
"WHERE TABLE_SCHEMA='INFORMATION_SCHEMA' " +
"GROUP BY TABLE_NAME ORDER BY TABLE_NAME", false);
processAll("");
conn.close();
}
......@@ -118,13 +135,15 @@ public class GenerateDoc {
out.close();
}
private void map(String key, String sql, boolean railroads) throws Exception {
private void map(String key, String sql, boolean railroads)
throws Exception {
ResultSet rs = null;
Statement stat = null;
try {
stat = conn.createStatement();
rs = stat.executeQuery(sql);
ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();
ArrayList<HashMap<String, String>> list =
new ArrayList<HashMap<String, String>>();
while (rs.next()) {
HashMap<String, String> map = new HashMap<String, String>();
ResultSetMetaData meta = rs.getMetaData();
......@@ -149,8 +168,10 @@ public class GenerateDoc {
String text = map.get("text");
if (text != null) {
// text is enclosed in <p> .. </p> so this works.
text = StringUtils.replaceAll(text, "<br /><br />", "</p><p>");
text = StringUtils.replaceAll(text, "<br />", " ");
text = StringUtils.replaceAll(text,
"<br /><br />", "</p><p>");
text = StringUtils.replaceAll(text,
"<br />", " ");
text = addCode(text);
map.put("text", text);
}
......@@ -167,7 +188,8 @@ public class GenerateDoc {
int div = 3;
int part = (list.size() + div - 1) / div;
for (int i = 0, start = 0; i < div; i++, start += part) {
List<HashMap<String, String>> listThird = list.subList(start, Math.min(start + part, list.size()));
List<HashMap<String, String>> listThird = list.subList(start,
Math.min(start + part, list.size()));
session.put(key + "-" + i, listThird);
}
} finally {
......
......@@ -52,7 +52,8 @@ public class GenerateHelp {
rs2.addRow(row);
}
BufferedWriter writer = new BufferedWriter(new FileWriter(out));
writer.write("# Copyright 2004-2013 H2 Group. Multiple-Licensed under the H2 License,\n" +
writer.write("# Copyright 2004-2013 H2 Group. " +
"Multiple-Licensed under the H2 License,\n" +
"# Version 1.0, and under the Eclipse Public License, Version 1.0\n" +
"# (http://h2database.com/html/license.html).\n" +
"# Initial Developer: H2 Group)\n");
......
......@@ -30,9 +30,10 @@ public class MergeDocs {
*/
public static void main(String... args) throws Exception {
// the order of pages is important here
String[] pages = { "quickstart.html", "installation.html", "tutorial.html", "features.html",
"performance.html", "advanced.html", "grammar.html", "functions.html", "datatypes.html", "build.html",
"history.html", "faq.html" };
String[] pages = { "quickstart.html", "installation.html",
"tutorial.html", "features.html", "performance.html",
"advanced.html", "grammar.html", "functions.html",
"datatypes.html", "build.html", "history.html", "faq.html" };
StringBuilder buff = new StringBuilder();
for (String fileName : pages) {
String text = getContent(fileName);
......@@ -46,9 +47,11 @@ public class MergeDocs {
String finalText = buff.toString();
File output = new File(BASE_DIR, "onePage.html");
PrintWriter writer = new PrintWriter(new FileWriter(output));
writer.println("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" /><title>");
writer.println("<html><head><meta http-equiv=\"Content-Type\" " +
"content=\"text/html;charset=utf-8\" /><title>");
writer.println("H2 Documentation");
writer.println("</title><link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheetPdf.css\" /></head><body>");
writer.println("</title><link rel=\"stylesheet\" type=\"text/css\" " +
"href=\"stylesheetPdf.css\" /></head><body>");
writer.println("<h1>H2 Database Engine</h1>");
writer.println("<p>Version " + Constants.getFullVersion() + "</p>");
writer.println(finalText);
......@@ -57,10 +60,18 @@ public class MergeDocs {
}
private static String disableRailroads(String text) {
text = StringUtils.replaceAll(text, "<!-- railroad-start -->", "<!-- railroad-start ");
text = StringUtils.replaceAll(text, "<!-- railroad-end -->", " railroad-end -->");
text = StringUtils.replaceAll(text, "<!-- syntax-start", "<!-- syntax-start -->");
text = StringUtils.replaceAll(text, "syntax-end -->", "<!-- syntax-end -->");
text = StringUtils.replaceAll(text,
"<!-- railroad-start -->",
"<!-- railroad-start ");
text = StringUtils.replaceAll(text,
"<!-- railroad-end -->",
" railroad-end -->");
text = StringUtils.replaceAll(text,
"<!-- syntax-start",
"<!-- syntax-start -->");
text = StringUtils.replaceAll(text,
"syntax-end -->",
"<!-- syntax-end -->");
return text;
}
......@@ -69,7 +80,8 @@ public class MergeDocs {
// String end = "</body>";
String start = "<!-- } -->";
String end = "<!-- [close] { --></div></td></tr></table><!-- } --><!-- analytics --></body></html>";
String end = "<!-- [close] { --></div></td></tr></table>" +
"<!-- } --><!-- analytics --></body></html>";
int idx = text.indexOf(end);
if (idx < 0) {
......
......@@ -48,7 +48,8 @@ public class RailroadImages {
BufferedImage img;
Graphics2D g;
img = new BufferedImage(SIZE * 64, SIZE * LINE_REPEAT, BufferedImage.TYPE_INT_ARGB);
img = new BufferedImage(SIZE * 64, SIZE * LINE_REPEAT,
BufferedImage.TYPE_INT_ARGB);
g = img.createGraphics();
for (int i = 0; i < 2; i++) {
setStroke(g, i);
......@@ -107,7 +108,8 @@ public class RailroadImages {
int h = img.getHeight();
BufferedImage smaller = new BufferedImage(w / DIV, h / DIV, img.getType());
Graphics2D g = smaller.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(img, 0, 0, w / DIV, h / DIV, 0, 0, w, h, null);
g.dispose();
try {
......
......@@ -25,13 +25,17 @@ import org.h2.util.Utils;
*/
public class SpellChecker {
private static final String[] SUFFIX = { "html", "java", "sql", "txt", "xml", "jsp", "css", "bat",
"csv", "xml", "js", "Driver", "properties", "task", "MF", "mf", "sh", "" };
private static final String[] IGNORE = { "dev", "nsi", "gif", "png", "odg", "ico", "sxd", "zip",
"bz2", "rc", "layout", "res", "dll", "jar", "svg", "prefs", "prop", "iml" };
private static final String DELIMITERS = " \n.();-\"=,*/{}_<>+\r:'@[]&\\!#|?$^%~`\t";
private static final String[] SUFFIX = { "html", "java", "sql", "txt",
"xml", "jsp", "css", "bat", "csv", "xml", "js", "Driver",
"properties", "task", "MF", "mf", "sh", "" };
private static final String[] IGNORE = { "dev", "nsi", "gif", "png", "odg",
"ico", "sxd", "zip", "bz2", "rc", "layout", "res", "dll", "jar",
"svg", "prefs", "prop", "iml" };
private static final String DELIMITERS =
" \n.();-\"=,*/{}_<>+\r:'@[]&\\!#|?$^%~`\t";
private static final String PREFIX_IGNORE = "abc";
private static final String[] IGNORE_FILES = {"mainWeb.html", "pg_catalog.sql"};
private static final String[] IGNORE_FILES = { "mainWeb.html",
"pg_catalog.sql" };
// These are public so we can set them during development testing
......@@ -45,9 +49,12 @@ public class SpellChecker {
*/
public boolean printDictionary;
private final HashSet<String> dictionary = new HashSet<String>();
private final HashSet<String> used = new HashSet<String>();
private final HashMap<String, Integer> unknown = new HashMap<String, Integer>();
private final HashSet<String> dictionary =
new HashSet<String>();
private final HashSet<String> used =
new HashSet<String>();
private final HashMap<String, Integer> unknown =
new HashMap<String, Integer>();
private boolean addToDictionary;
private int errorCount;
private int contextCount;
......@@ -140,7 +147,8 @@ public class SpellChecker {
}
}
if (!ok) {
throw new IOException("Unsupported suffix: " + suffix + " for file: " + fileName);
throw new IOException("Unsupported suffix: " +
suffix + " for file: " + fileName);
}
String text = new String(BuildBase.readFile(file));
if (fileName.endsWith("dictionary.txt")) {
......@@ -198,7 +206,8 @@ public class SpellChecker {
pos += "http://".length();
while (true) {
char c = text.charAt(pos);
if (!Character.isJavaIdentifierPart(c) && ".#/?&=%+_-:".indexOf(c) < 0) {
if (!Character.isJavaIdentifierPart(c) &&
".#/?&=%+_-:".indexOf(c) < 0) {
break;
}
pos++;
......@@ -219,11 +228,13 @@ public class SpellChecker {
for (int i = 1; i < token.length(); i++) {
char charLeft = token.charAt(i - 1);
char charRight = token.charAt(i);
if (Character.isLowerCase(charLeft) && Character.isUpperCase(charRight)) {
if (Character.isLowerCase(charLeft)
&& Character.isUpperCase(charRight)) {
scanToken(notFound, token.substring(0, i));
token = token.substring(i);
i = 1;
} else if (Character.isUpperCase(charLeft) && Character.isLowerCase(charRight)) {
} else if (Character.isUpperCase(charLeft)
&& Character.isLowerCase(charRight)) {
scanToken(notFound, token.substring(0, i - 1));
token = token.substring(i - 1);
i = 1;
......
......@@ -53,7 +53,8 @@ public class UploadBuild {
boolean coverage = new File("coverage/index.html").exists();
boolean coverageFailed;
if (coverage) {
byte[] data = IOUtils.readBytesAndClose(new FileInputStream("coverage/index.html"), -1);
byte[] data = IOUtils.readBytesAndClose(
new FileInputStream("coverage/index.html"), -1);
String index = new String(data, "ISO-8859-1");
coverageFailed = index.indexOf("CLASS=\"h\"") >= 0;
while (true) {
......@@ -87,7 +88,8 @@ public class UploadBuild {
String testOutput;
boolean error;
if (new File("docs/html/testOutput.html").exists()) {
testOutput = IOUtils.readStringAndClose(new FileReader("docs/html/testOutput.html"), -1);
testOutput = IOUtils.readStringAndClose(
new FileReader("docs/html/testOutput.html"), -1);
error = testOutput.indexOf(OutputCatcher.START_ERROR) >= 0;
} else if (new File("log.txt").exists()) {
testOutput = IOUtils.readStringAndClose(new FileReader("log.txt"), -1);
......@@ -103,7 +105,8 @@ public class UploadBuild {
if (ftp.exists("/httpdocs/automated", "history.sql")) {
buildSql = new String(ftp.retrieve("/httpdocs/automated/history.sql"));
} else {
buildSql = "create table item(id identity, title varchar, issued timestamp, desc varchar);\n";
buildSql = "create table item(id identity, title varchar, " +
"issued timestamp, desc varchar);\n";
}
String ts = new java.sql.Timestamp(System.currentTimeMillis()).toString();
String now = ts.substring(0, 16);
......@@ -111,16 +114,22 @@ public class UploadBuild {
if (idx >= 0) {
int end = testOutput.indexOf("<br />", idx);
if (end >= 0) {
String result = testOutput.substring(idx + "Statements per second: ".length(), end);
String result = testOutput.substring(idx +
"Statements per second: ".length(), end);
now += " " + result + " op/s";
}
}
String sql = "insert into item(title, issued, desc) values('Build " + now +
String sql = "insert into item(title, issued, desc) values('Build " +
now +
(error ? " FAILED" : "") +
(coverageFailed ? " COVERAGE" : "") +
"', '" + ts + "', '<a href=\"http://www.h2database.com/html/testOutput.html\">Output</a>" +
" - <a href=\"http://www.h2database.com/coverage/overview.html\">Coverage</a>" +
" - <a href=\"http://www.h2database.com/automated/h2-latest.jar\">Jar</a>');\n";
"', '" + ts +
"', '<a href=\"http://www.h2database.com/" +
"html/testOutput.html\">Output</a>" +
" - <a href=\"http://www.h2database.com/" +
"coverage/overview.html\">Coverage</a>" +
" - <a href=\"http://www.h2database.com/" +
"automated/h2-latest.jar\">Jar</a>');\n";
buildSql += sql;
Connection conn;
try {
......@@ -131,7 +140,8 @@ public class UploadBuild {
conn = DriverManager.getConnection("jdbc:h2v1_1:mem:");
}
conn.createStatement().execute(buildSql);
String newsfeed = IOUtils.readStringAndClose(new FileReader("src/tools/org/h2/build/doc/buildNewsfeed.sql"), -1);
String newsfeed = IOUtils.readStringAndClose(
new FileReader("src/tools/org/h2/build/doc/buildNewsfeed.sql"), -1);
ScriptReader r = new ScriptReader(new StringReader(newsfeed));
Statement stat = conn.createStatement();
ResultSet rs = null;
......@@ -147,22 +157,29 @@ public class UploadBuild {
rs.next();
String content = rs.getString("content");
conn.close();
ftp.store("/httpdocs/automated/history.sql", new ByteArrayInputStream(buildSql.getBytes()));
ftp.store("/httpdocs/automated/news.xml", new ByteArrayInputStream(content.getBytes()));
ftp.store("/httpdocs/html/testOutput.html", new ByteArrayInputStream(testOutput.getBytes()));
ftp.store("/httpdocs/automated/history.sql",
new ByteArrayInputStream(buildSql.getBytes()));
ftp.store("/httpdocs/automated/news.xml",
new ByteArrayInputStream(content.getBytes()));
ftp.store("/httpdocs/html/testOutput.html",
new ByteArrayInputStream(testOutput.getBytes()));
String jarFileName = "bin/h2-" + Constants.getVersion() + ".jar";
if (FileUtils.exists(jarFileName)) {
ftp.store("/httpdocs/automated/h2-latest.jar", new FileInputStream(jarFileName));
ftp.store("/httpdocs/automated/h2-latest.jar",
new FileInputStream(jarFileName));
}
if (coverage) {
ftp.store("/httpdocs/coverage/overview.html", new FileInputStream("coverage/overview.html"));
ftp.store("/httpdocs/coverage/coverage.zip", new FileInputStream("coverage.zip"));
ftp.store("/httpdocs/coverage/overview.html",
new FileInputStream("coverage/overview.html"));
ftp.store("/httpdocs/coverage/coverage.zip",
new FileInputStream("coverage.zip"));
FileUtils.delete("coverage.zip");
}
ftp.close();
}
private static void zip(String destFile, String directory, boolean storeOnly) throws IOException {
private static void zip(String destFile, String directory, boolean storeOnly)
throws IOException {
OutputStream out = new FileOutputStream(destFile);
ZipOutputStream zipOut = new ZipOutputStream(out);
if (storeOnly) {
......@@ -174,7 +191,8 @@ public class UploadBuild {
zipOut.close();
}
private static void addFiles(File base, File file, ZipOutputStream out) throws IOException {
private static void addFiles(File base, File file, ZipOutputStream out)
throws IOException {
if (file.isDirectory()) {
for (File f : file.listFiles()) {
addFiles(base, f, out);
......
......@@ -26,7 +26,8 @@ public class WebSite {
private static final String ANALYTICS_TAG = "<!-- analytics -->";
private static final String ANALYTICS_SCRIPT =
"<script src=\"http://www.google-analytics.com/ga.js\" type=\"text/javascript\"></script>\n" +
"<script src=\"http://www.google-analytics.com/ga.js\" " +
"type=\"text/javascript\"></script>\n" +
"<script type=\"text/javascript\">" +
"var pageTracker=_gat._getTracker(\"UA-2351060-1\");" +
"pageTracker._initData();pageTracker._trackPageview();" +
......@@ -116,7 +117,8 @@ public class WebSite {
dir.delete();
}
private void copy(File source, File target, boolean replaceFragments, boolean web) throws IOException {
private void copy(File source, File target, boolean replaceFragments,
boolean web) throws IOException {
if (source.isDirectory()) {
target.mkdirs();
for (File f : source.listFiles()) {
......
......@@ -113,7 +113,8 @@ public class XMLChecker {
if (html) {
for (String n : noClose) {
if (name.equals(n)) {
throw new Exception("Unnecessary closing element " + name + " at " + parser.getRemaining());
throw new Exception("Unnecessary closing element "
+ name + " at " + parser.getRemaining());
}
}
}
......@@ -137,7 +138,8 @@ public class XMLChecker {
// ignore
} else {
int eventType = parser.getEventType();
throw new Exception("Unexpected event " + eventType + " at " + parser.getRemaining());
throw new Exception("Unexpected event " + eventType + " at "
+ parser.getRemaining());
}
}
if (stack.size() != 0) {
......
......@@ -119,7 +119,8 @@ public class XMLParser {
}
private void error(String expected) {
throw new RuntimeException("Expected: " + expected + " got: " + xml.substring(pos, Math.min(pos + 1000, xml.length())));
throw new RuntimeException("Expected: " + expected + " got: "
+ xml.substring(pos, Math.min(pos + 1000, xml.length())));
}
private void read(String chars) {
......@@ -343,7 +344,8 @@ public class XMLParser {
if (localNameStart == start) {
addAttributeName("", xml.substring(localNameStart, end));
} else {
addAttributeName(xml.substring(start, localNameStart - 1), xml.substring(localNameStart, end));
addAttributeName(xml.substring(start, localNameStart - 1),
xml.substring(localNameStart, end));
}
if (noValue) {
noValue = false;
......@@ -512,7 +514,8 @@ public class XMLParser {
* @return the full name
*/
public String getName() {
return prefix == null || prefix.length() == 0 ? localName : prefix + ":" + localName;
return prefix == null || prefix.length() == 0 ? localName : prefix
+ ":" + localName;
}
/**
......
......@@ -23,7 +23,8 @@ import com.sun.javadoc.Tag;
*/
public class ResourceDoclet {
private String destFile = System.getProperty("h2.javadocResourceFile", "src/main/org/h2/res/javadoc.properties");
private String destFile = System.getProperty("h2.javadocResourceFile",
"src/main/org/h2/res/javadoc.properties");
private final SortedProperties resources = new SortedProperties();
......
......@@ -49,7 +49,8 @@ public class PropertiesToUTF8 {
* @param source the name of the properties file
* @param target the target file name
*/
static void propertiesToTextUTF8(String source, String target) throws Exception {
static void propertiesToTextUTF8(String source, String target)
throws Exception {
if (!new File(source).exists()) {
return;
}
......@@ -73,11 +74,13 @@ public class PropertiesToUTF8 {
* @param source the source file name
* @param target the target file name
*/
static void textUTF8ToProperties(String source, String target) throws Exception {
static void textUTF8ToProperties(String source, String target)
throws Exception {
if (!new File(source).exists()) {
return;
}
LineNumberReader reader = new LineNumberReader(new InputStreamReader(new FileInputStream(source), "UTF-8"));
LineNumberReader reader = new LineNumberReader(new InputStreamReader(
new FileInputStream(source), "UTF-8"));
try {
SortedProperties prop = new SortedProperties();
StringBuilder buff = new StringBuilder();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论