improved sql parser performance.

This commit is contained in:
wenshao
2017-08-21 16:57:58 +08:00
parent 5804eea0c9
commit c370d70188
12 changed files with 300 additions and 72 deletions
@@ -2,6 +2,10 @@ package com.alibaba.druid.benckmark.sql;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.parser.SQLParserFeature;
import com.alibaba.druid.sql.parser.SQLParserUtils;
import com.alibaba.druid.sql.parser.SQLStatementParser;
import com.alibaba.druid.sql.visitor.VisitorFeature;
import com.alibaba.druid.util.JdbcConstants;
import junit.framework.TestCase;
@@ -16,15 +20,17 @@ public class MySqlInsertBenchmark_2 extends TestCase {
List<SQLStatement> stmtList;
protected void setUp() throws Exception {
stmtList = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL);
SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL);
parser.config(SQLParserFeature.KeepInsertValueClauseOriginalString, true);
stmtList = parser.parseStatementList();
}
public void test_perf() throws Exception {
System.out.println(sql);
for (int i = 0; i < 5; ++i) {
perf(); // 5043
// perf(); // 5043
// perf_toString(); // 2101
perf_toString_featured();
}
}
@@ -32,6 +38,7 @@ public class MySqlInsertBenchmark_2 extends TestCase {
long startMillis = System.currentTimeMillis();
for (int i = 0; i < 1000 * 1000; ++i) {
List<SQLStatement> stmt = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL);
// stmt.toString();
}
@@ -39,6 +46,19 @@ public class MySqlInsertBenchmark_2 extends TestCase {
System.out.println("millis : " + millis);
}
public void perf_keepInsertValueClauseStrinng() {
long startMillis = System.currentTimeMillis();
for (int i = 0; i < 1000 * 1000; ++i) {
SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, JdbcConstants.MYSQL);
parser.config(SQLParserFeature.KeepInsertValueClauseOriginalString, true);
List<SQLStatement> stmtList = parser.parseStatementList();
// stmt.toString();
}
long millis = System.currentTimeMillis() - startMillis;
System.out.println("millis : " + millis);
}
public void perf_toString() {
long startMillis = System.currentTimeMillis();
for (int i = 0; i < 1000 * 1000; ++i) {
@@ -47,4 +67,13 @@ public class MySqlInsertBenchmark_2 extends TestCase {
long millis = System.currentTimeMillis() - startMillis;
System.out.println("millis : " + millis);
}
public void perf_toString_featured() {
long startMillis = System.currentTimeMillis();
for (int i = 0; i < 1000 * 1000; ++i) {
SQLUtils.toMySqlString(stmtList.get(0), VisitorFeature.OutputUseInsertValueClauseOriginalString);
}
long millis = System.currentTimeMillis() - startMillis;
System.out.println("millis : " + millis);
}
}