Unverified 提交 d5478abd authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov 提交者: GitHub

Merge pull request #1162 from katzyn/misc

Reduce allocation of temporary strings
......@@ -288,7 +288,7 @@ public class Parser {
Command c = new CommandContainer(this, sql, p);
if (hasMore) {
String remaining = originalSQL.substring(parseIndex);
if (remaining.trim().length() != 0) {
if (!StringUtils.isWhitespaceOrEmpty(remaining)) {
c = new CommandList(this, sql, c, remaining);
}
}
......
......@@ -29,6 +29,7 @@ import org.h2.store.fs.FileUtils;
import org.h2.tools.CompressTool;
import org.h2.util.IOUtils;
import org.h2.util.SmallLRUCache;
import org.h2.util.StringUtils;
import org.h2.util.TempFileDeleter;
import org.h2.value.CompareMode;
......@@ -88,7 +89,7 @@ abstract class ScriptBase extends Prepared implements DataHandler {
protected String getFileName() {
if (fileNameExpr != null && fileName == null) {
fileName = fileNameExpr.optimize(session).getValue(session).getString();
if (fileName == null || fileName.trim().length() == 0) {
if (fileName == null || StringUtils.isWhitespaceOrEmpty(fileName)) {
fileName = "script.sql";
}
fileName = SysProperties.getScriptDirectory() + fileName;
......
......@@ -596,7 +596,7 @@ public class FullText {
// this is just to query the result set columns
return result;
}
if (text == null || text.trim().length() == 0) {
if (text == null || StringUtils.isWhitespaceOrEmpty(text)) {
return result;
}
FullTextSettings setting = FullTextSettings.getInstance(conn);
......
......@@ -405,7 +405,7 @@ public class FullTextLucene extends FullText {
// this is just to query the result set columns
return result;
}
if (text == null || text.trim().length() == 0) {
if (text == null || StringUtils.isWhitespaceOrEmpty(text)) {
return result;
}
try {
......
......@@ -9,7 +9,6 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import org.h2.api.ErrorCode;
import org.h2.command.dml.AllColumnsForPlan;
import org.h2.engine.Constants;
......
......@@ -10,7 +10,6 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import org.h2.api.ErrorCode;
import org.h2.command.dml.AllColumnsForPlan;
......
......@@ -16,9 +16,7 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
......
......@@ -250,8 +250,8 @@ public class WebApp {
private String autoCompleteList() {
String query = (String) attributes.get("query");
boolean lowercase = false;
if (query.trim().length() > 0 &&
Character.isLowerCase(query.trim().charAt(0))) {
String tQuery = query.trim();
if (!tQuery.isEmpty() && Character.isLowerCase(tQuery.charAt(0))) {
lowercase = true;
}
try {
......@@ -281,7 +281,8 @@ public class WebApp {
while (sql.length() > 0 && sql.charAt(0) <= ' ') {
sql = sql.substring(1);
}
if (sql.trim().length() > 0 && Character.isLowerCase(sql.trim().charAt(0))) {
String tSql = sql.trim();
if (!tSql.isEmpty() && Character.isLowerCase(tSql.charAt(0))) {
lowercase = true;
}
Bnf bnf = session.getBnf();
......@@ -320,7 +321,7 @@ public class WebApp {
list.add(type + "#" + key + "#" + value);
}
Collections.sort(list);
if (query.endsWith("\n") || query.trim().endsWith(";")) {
if (query.endsWith("\n") || tQuery.endsWith(";")) {
list.add(0, "1#(Newline)#\n");
}
StatementBuilder buff = new StatementBuilder();
......@@ -1302,41 +1303,40 @@ public class WebApp {
return buff.toString();
} else if (isBuiltIn(sql, "@edit")) {
edit = true;
sql = sql.substring("@edit".length()).trim();
sql = StringUtils.trimSubstring(sql, "@edit".length());
session.put("resultSetSQL", sql);
}
if (isBuiltIn(sql, "@list")) {
list = true;
sql = sql.substring("@list".length()).trim();
sql = StringUtils.trimSubstring(sql, "@list".length());
}
if (isBuiltIn(sql, "@meta")) {
metadata = true;
sql = sql.substring("@meta".length()).trim();
sql = StringUtils.trimSubstring(sql, "@meta".length());
}
if (isBuiltIn(sql, "@generated")) {
generatedKeys = Statement.RETURN_GENERATED_KEYS;
sql = sql.substring("@generated".length()).trim();
sql = StringUtils.trimSubstring(sql, "@generated".length());
} else if (isBuiltIn(sql, "@history")) {
buff.append(getCommandHistoryString());
return buff.toString();
} else if (isBuiltIn(sql, "@loop")) {
sql = sql.substring("@loop".length()).trim();
sql = StringUtils.trimSubstring(sql, "@loop".length());
int idx = sql.indexOf(' ');
int count = Integer.decode(sql.substring(0, idx));
sql = sql.substring(idx).trim();
sql = StringUtils.trimSubstring(sql, idx);
return executeLoop(conn, count, sql);
} else if (isBuiltIn(sql, "@maxrows")) {
int maxrows = (int) Double.parseDouble(
sql.substring("@maxrows".length()).trim());
int maxrows = (int) Double.parseDouble(StringUtils.trimSubstring(sql, "@maxrows".length()));
session.put("maxrows", Integer.toString(maxrows));
return "${text.result.maxrowsSet}";
} else if (isBuiltIn(sql, "@parameter_meta")) {
sql = sql.substring("@parameter_meta".length()).trim();
sql = StringUtils.trimSubstring(sql, "@parameter_meta".length());
PreparedStatement prep = conn.prepareStatement(sql);
buff.append(getParameterResultSet(prep.getParameterMetaData()));
return buff.toString();
} else if (isBuiltIn(sql, "@password_hash")) {
sql = sql.substring("@password_hash".length()).trim();
sql = StringUtils.trimSubstring(sql, "@password_hash".length());
String[] p = split(sql);
return StringUtils.convertBytesToHex(
SHA256.getKeyPasswordHash(p[0], p[1].toCharArray()));
......@@ -1348,7 +1348,7 @@ public class WebApp {
profiler.startCollecting();
return "Ok";
} else if (isBuiltIn(sql, "@sleep")) {
String s = sql.substring("@sleep".length()).trim();
String s = StringUtils.trimSubstring(sql, "@sleep".length());
int sleep = 1;
if (s.length() > 0) {
sleep = Integer.parseInt(s);
......@@ -1356,7 +1356,7 @@ public class WebApp {
Thread.sleep(sleep * 1000);
return "Ok";
} else if (isBuiltIn(sql, "@transaction_isolation")) {
String s = sql.substring("@transaction_isolation".length()).trim();
String s = StringUtils.trimSubstring(sql, "@transaction_isolation".length());
if (s.length() > 0) {
int level = Integer.parseInt(s);
conn.setTransactionIsolation(level);
......@@ -1445,7 +1445,7 @@ public class WebApp {
Random random = new Random(1);
long time = System.currentTimeMillis();
if (isBuiltIn(sql, "@statement")) {
sql = sql.substring("@statement".length()).trim();
sql = StringUtils.trimSubstring(sql, "@statement".length());
prepared = false;
Statement stat = conn.createStatement();
for (int i = 0; !stop && i < count; i++) {
......
......@@ -310,7 +310,7 @@ class WebThread extends WebApp implements Runnable {
}
}
}
} else if (line.trim().length() == 0) {
} else if (StringUtils.isWhitespaceOrEmpty(line)) {
break;
}
}
......@@ -328,7 +328,7 @@ class WebThread extends WebApp implements Runnable {
}
private static String getHeaderLineValue(String line) {
return line.substring(line.indexOf(':') + 1).trim();
return StringUtils.trimSubstring(line, line.indexOf(':') + 1);
}
@Override
......
......@@ -20,7 +20,6 @@ import java.sql.Timestamp;
import java.util.Arrays;
import org.h2.api.ErrorCode;
import org.h2.engine.Constants;
import org.h2.engine.SysProperties;
import org.h2.message.DbException;
import org.h2.tools.SimpleResultSet;
import org.h2.util.Bits;
......
......@@ -17,7 +17,6 @@ import java.util.Arrays;
import java.util.HashMap;
import org.h2.api.ErrorCode;
import org.h2.engine.Database;
import org.h2.engine.SysProperties;
import org.h2.jdbc.JdbcConnection;
import org.h2.message.DbException;
import org.h2.tools.CompressTool;
......
......@@ -166,7 +166,7 @@ public class RunScript extends Tool {
if (sql == null) {
break;
}
if (sql.trim().length() == 0) {
if (StringUtils.isWhitespaceOrEmpty(sql)) {
continue;
}
boolean resultSet = stat.execute(sql);
......@@ -210,8 +210,7 @@ public class RunScript extends Tool {
}
if (trim.startsWith("@") && StringUtils.toUpperEnglish(trim).
startsWith("@INCLUDE")) {
sql = trim;
sql = sql.substring("@INCLUDE".length()).trim();
sql = StringUtils.trimSubstring(sql, "@INCLUDE".length());
if (!FileUtils.isAbsolute(sql)) {
sql = path + SysProperties.FILE_SEPARATOR + sql;
}
......
......@@ -248,7 +248,7 @@ public class Shell extends Tool implements Runnable {
println("No history");
}
} else if (lower.startsWith("autocommit")) {
lower = lower.substring("autocommit".length()).trim();
lower = StringUtils.trimSubstring(lower, "autocommit".length());
if ("true".equals(lower)) {
conn.setAutoCommit(true);
} else if ("false".equals(lower)) {
......@@ -258,7 +258,7 @@ public class Shell extends Tool implements Runnable {
}
println("Autocommit is now " + conn.getAutoCommit());
} else if (lower.startsWith("maxwidth")) {
lower = lower.substring("maxwidth".length()).trim();
lower = StringUtils.trimSubstring(lower, "maxwidth".length());
try {
maxColumnSize = Integer.parseInt(lower);
} catch (NumberFormatException e) {
......@@ -445,7 +445,7 @@ public class Shell extends Tool implements Runnable {
}
private void execute(String sql) {
if (sql.trim().length() == 0) {
if (StringUtils.isWhitespaceOrEmpty(sql)) {
return;
}
long time = System.nanoTime();
......
......@@ -249,7 +249,7 @@ public class Profiler implements Runnable {
if (!line.startsWith("at ")) {
break;
}
line = line.substring(3).trim();
line = StringUtils.trimSubstring(line, 3);
stack.add(line);
}
if (!stack.isEmpty()) {
......
......@@ -848,7 +848,20 @@ public class StringUtils {
}
/**
* Trim a character from a substring. Equivalence of {@code substring(begin, end).trim()}.
* Trim a character from a substring. Equivalent of
* {@code substring(beginIndex).trim()}.
*
* @param s the string
* @param beginIndex start index of substring (inclusive)
* @return trimmed substring
*/
public static String trimSubstring(String s, int beginIndex) {
return trimSubstring(s, beginIndex, s.length());
}
/**
* Trim a character from a substring. Equivalent of
* {@code substring(beginIndex, endIndex).trim()}.
*
* @param s the string
* @param beginIndex start index of substring (inclusive)
......@@ -969,11 +982,28 @@ public class StringUtils {
* @return true if it is
*/
public static boolean isNumber(String s) {
if (s.length() == 0) {
int l = s.length();
if (l == 0) {
return false;
}
for (char c : s.toCharArray()) {
if (!Character.isDigit(c)) {
for (int i = 0; i < l; i++) {
if (!Character.isDigit(s.charAt(i))) {
return false;
}
}
return true;
}
/**
* Check if the specified string is empty or contains only whitespace.
*
* @param s
* the string
* @return whether the specified string is empty or contains only whitespace
*/
public static boolean isWhitespaceOrEmpty(String s) {
for (int i = 0, l = s.length(); i < l; i++) {
if (s.charAt(i) > ' ') {
return false;
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论