mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser performance.
This commit is contained in:
@@ -47,7 +47,7 @@ import com.alibaba.druid.util.StringUtils;
|
||||
* @author wenshao [szujobs@hotmail.com]
|
||||
*/
|
||||
public class Lexer {
|
||||
|
||||
protected int features;
|
||||
protected final String text;
|
||||
protected int pos;
|
||||
protected int mark;
|
||||
@@ -1644,4 +1644,12 @@ public class Lexer {
|
||||
public int getPosColumn() {
|
||||
return posColumn;
|
||||
}
|
||||
|
||||
public void config(SQLParserFeature feature, boolean state) {
|
||||
features = SQLParserFeature.config(features, feature, state);
|
||||
}
|
||||
|
||||
public final boolean isEnabled(SQLParserFeature feature) {
|
||||
return SQLParserFeature.isEnabled(this.features, feature);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,8 @@ public class SQLParser {
|
||||
|
||||
protected String dbType;
|
||||
|
||||
|
||||
|
||||
public SQLParser(String sql, String dbType){
|
||||
this(new Lexer(sql, null, dbType), dbType);
|
||||
this.lexer.nextToken();
|
||||
@@ -316,4 +318,11 @@ public class SQLParser {
|
||||
}
|
||||
}
|
||||
|
||||
public void config(SQLParserFeature feature, boolean state) {
|
||||
this.lexer.config(feature, state);
|
||||
}
|
||||
|
||||
public final boolean isEnabled(SQLParserFeature feature) {
|
||||
return lexer.isEnabled(feature);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright 1999-2017 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.alibaba.druid.sql.parser;
|
||||
|
||||
public enum SQLParserFeature {
|
||||
KeepInsertValueClauseOriginalString
|
||||
;
|
||||
|
||||
private SQLParserFeature(){
|
||||
mask = (1 << ordinal());
|
||||
}
|
||||
|
||||
public final int mask;
|
||||
|
||||
|
||||
public static boolean isEnabled(int features, SQLParserFeature feature) {
|
||||
return (features & feature.mask) != 0;
|
||||
}
|
||||
|
||||
public static int config(int features, SQLParserFeature feature, boolean state) {
|
||||
if (state) {
|
||||
features |= feature.mask;
|
||||
} else {
|
||||
features &= ~feature.mask;
|
||||
}
|
||||
|
||||
return features;
|
||||
}
|
||||
|
||||
public static int of(SQLParserFeature[] features) {
|
||||
if (features == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int value = 0;
|
||||
|
||||
for (SQLParserFeature feature: features) {
|
||||
value |= feature.mask;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user