mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,18 @@
|
||||
/*
|
||||
* Copyright 1999-2011 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.pool;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
@@ -33,7 +33,9 @@ import com.alibaba.druid.support.logging.LogFactory;
|
||||
*/
|
||||
public class DruidDataSourceStatLoggerImpl extends DruidDataSourceStatLoggerAdapter {
|
||||
|
||||
private static Log LOG = LogFactory.getLog(DruidDataSourceStatLoggerImpl.class);
|
||||
private static Log LOG = LogFactory.getLog(DruidDataSourceStatLoggerImpl.class);
|
||||
|
||||
private Log logger = LOG;
|
||||
|
||||
public DruidDataSourceStatLoggerImpl(){
|
||||
this.configFromProperties(System.getProperties());
|
||||
@@ -44,12 +46,23 @@ public class DruidDataSourceStatLoggerImpl extends DruidDataSourceStatLoggerAdap
|
||||
*/
|
||||
@Override
|
||||
public void configFromProperties(Properties properties) {
|
||||
String property = properties.getProperty("druid.stat.loggerName");
|
||||
if (property != null && property.length() > 0) {
|
||||
setLoggerName(property);
|
||||
}
|
||||
}
|
||||
|
||||
public Log getLogger() {
|
||||
return logger;
|
||||
}
|
||||
|
||||
public void setLoggerName(String loggerName) {
|
||||
logger = LogFactory.getLog(loggerName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void log(DruidDataSourceStatValue statValue) {
|
||||
if (LOG.isInfoEnabled()) {
|
||||
if (logger.isInfoEnabled()) {
|
||||
Map<String, Object> map = new LinkedHashMap<String, Object>();
|
||||
|
||||
map.put("url", statValue.url);
|
||||
@@ -205,7 +218,7 @@ public class DruidDataSourceStatLoggerImpl extends DruidDataSourceStatLoggerAdap
|
||||
|
||||
String text = JSONUtils.toJSONString(map);
|
||||
|
||||
LOG.info(text);
|
||||
logger.info(text);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,18 @@
|
||||
/*
|
||||
* Copyright 1999-2011 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.pool;
|
||||
|
||||
import java.sql.Connection;
|
||||
|
||||
@@ -36,6 +36,9 @@ public class SQLCastExpr extends SQLExprImpl {
|
||||
}
|
||||
|
||||
public void setExpr(SQLExpr expr) {
|
||||
if (expr != null) {
|
||||
expr.setParent(this);
|
||||
}
|
||||
this.expr = expr;
|
||||
}
|
||||
|
||||
|
||||
@@ -796,6 +796,10 @@ public class SQLEvalVisitorUtils {
|
||||
if (wallConditionContext != null) {
|
||||
wallConditionContext.setConstArithmetic(true);
|
||||
}
|
||||
|
||||
if (leftValue == null || rightValue == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Object value = null;
|
||||
switch (x.getOperator()) {
|
||||
|
||||
@@ -33,7 +33,7 @@ public class Concat implements Function {
|
||||
|
||||
Object itemValue = item.getAttributes().get(EVAL_VALUE);
|
||||
if (itemValue == null) {
|
||||
continue;
|
||||
return null;
|
||||
}
|
||||
buf.append(itemValue.toString());
|
||||
}
|
||||
|
||||
@@ -1,102 +1,102 @@
|
||||
/*
|
||||
* Copyright 1999-2011 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.support.logging;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
public class JakartaCommonsLoggingImpl implements com.alibaba.druid.support.logging.Log {
|
||||
|
||||
private Log log;
|
||||
|
||||
private int errorCount;
|
||||
private int warnCount;
|
||||
private int infoCount;
|
||||
|
||||
public JakartaCommonsLoggingImpl(Class<?> clazz){
|
||||
log = LogFactory.getLog(clazz);
|
||||
}
|
||||
|
||||
public boolean isDebugEnabled() {
|
||||
return log.isDebugEnabled();
|
||||
}
|
||||
|
||||
public void error(String s, Throwable e) {
|
||||
log.error(s, e);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
public void error(String s) {
|
||||
log.error(s);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
public void debug(String s) {
|
||||
log.debug(s);
|
||||
}
|
||||
|
||||
public void debug(String s, Throwable e) {
|
||||
log.debug(s, e);
|
||||
}
|
||||
|
||||
public void warn(String s) {
|
||||
log.warn(s);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String s, Throwable e) {
|
||||
log.warn(s, e);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWarnCount() {
|
||||
return warnCount;
|
||||
}
|
||||
|
||||
public int getErrorCount() {
|
||||
return errorCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetStat() {
|
||||
errorCount = 0;
|
||||
warnCount = 0;
|
||||
infoCount = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInfoEnabled() {
|
||||
return log.isInfoEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String msg) {
|
||||
log.info(msg);
|
||||
infoCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInfoCount() {
|
||||
return infoCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWarnEnabled() {
|
||||
return log.isWarnEnabled();
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 1999-2011 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.support.logging;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
public class JakartaCommonsLoggingImpl implements com.alibaba.druid.support.logging.Log {
|
||||
|
||||
private Log log;
|
||||
|
||||
private int errorCount;
|
||||
private int warnCount;
|
||||
private int infoCount;
|
||||
|
||||
public JakartaCommonsLoggingImpl(String loggerName){
|
||||
log = LogFactory.getLog(loggerName);
|
||||
}
|
||||
|
||||
public boolean isDebugEnabled() {
|
||||
return log.isDebugEnabled();
|
||||
}
|
||||
|
||||
public void error(String s, Throwable e) {
|
||||
log.error(s, e);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
public void error(String s) {
|
||||
log.error(s);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
public void debug(String s) {
|
||||
log.debug(s);
|
||||
}
|
||||
|
||||
public void debug(String s, Throwable e) {
|
||||
log.debug(s, e);
|
||||
}
|
||||
|
||||
public void warn(String s) {
|
||||
log.warn(s);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String s, Throwable e) {
|
||||
log.warn(s, e);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWarnCount() {
|
||||
return warnCount;
|
||||
}
|
||||
|
||||
public int getErrorCount() {
|
||||
return errorCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetStat() {
|
||||
errorCount = 0;
|
||||
warnCount = 0;
|
||||
infoCount = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInfoEnabled() {
|
||||
return log.isInfoEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String msg) {
|
||||
log.info(msg);
|
||||
infoCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInfoCount() {
|
||||
return infoCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWarnEnabled() {
|
||||
return log.isWarnEnabled();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,105 +1,105 @@
|
||||
/*
|
||||
* Copyright 1999-2011 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.support.logging;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class Jdk14LoggingImpl implements Log {
|
||||
|
||||
private Logger log;
|
||||
|
||||
private int errorCount;
|
||||
private int warnCount;
|
||||
private int infoCount;
|
||||
|
||||
private String clazzName;
|
||||
|
||||
public Jdk14LoggingImpl(Class<?> clazz){
|
||||
clazzName = clazz.getName();
|
||||
log = Logger.getLogger(clazzName);
|
||||
}
|
||||
|
||||
public boolean isDebugEnabled() {
|
||||
return log.isLoggable(Level.FINE);
|
||||
}
|
||||
|
||||
public void error(String s, Throwable e) {
|
||||
log.logp(Level.SEVERE,clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), s, e);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
public void error(String s) {
|
||||
log.logp(Level.SEVERE,clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), s);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
public void debug(String s) {
|
||||
log.logp(Level.FINE, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), s);
|
||||
}
|
||||
|
||||
public void debug(String s, Throwable e) {
|
||||
log.logp(Level.FINE, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), s, e);
|
||||
}
|
||||
|
||||
public void warn(String s) {
|
||||
log.logp(Level.WARNING, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), s);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String s, Throwable e) {
|
||||
log.logp(Level.WARNING, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), s, e);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWarnCount() {
|
||||
return warnCount;
|
||||
}
|
||||
|
||||
public int getErrorCount() {
|
||||
return errorCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetStat() {
|
||||
errorCount = 0;
|
||||
warnCount = 0;
|
||||
infoCount = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInfoEnabled() {
|
||||
return log.isLoggable(Level.INFO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String msg) {
|
||||
log.logp(Level.INFO, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), msg);
|
||||
infoCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInfoCount() {
|
||||
return infoCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWarnEnabled() {
|
||||
return log.isLoggable(Level.WARNING);
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 1999-2011 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.support.logging;
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
public class Jdk14LoggingImpl implements Log {
|
||||
|
||||
private Logger log;
|
||||
|
||||
private int errorCount;
|
||||
private int warnCount;
|
||||
private int infoCount;
|
||||
|
||||
private String loggerName;
|
||||
|
||||
public Jdk14LoggingImpl(String loggerName){
|
||||
this.loggerName = loggerName;
|
||||
log = Logger.getLogger(loggerName);
|
||||
}
|
||||
|
||||
public boolean isDebugEnabled() {
|
||||
return log.isLoggable(Level.FINE);
|
||||
}
|
||||
|
||||
public void error(String s, Throwable e) {
|
||||
log.logp(Level.SEVERE, loggerName, Thread.currentThread().getStackTrace()[1].getMethodName(), s, e);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
public void error(String s) {
|
||||
log.logp(Level.SEVERE, loggerName, Thread.currentThread().getStackTrace()[1].getMethodName(), s);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
public void debug(String s) {
|
||||
log.logp(Level.FINE, loggerName, Thread.currentThread().getStackTrace()[1].getMethodName(), s);
|
||||
}
|
||||
|
||||
public void debug(String s, Throwable e) {
|
||||
log.logp(Level.FINE, loggerName, Thread.currentThread().getStackTrace()[1].getMethodName(), s, e);
|
||||
}
|
||||
|
||||
public void warn(String s) {
|
||||
log.logp(Level.WARNING, loggerName, Thread.currentThread().getStackTrace()[1].getMethodName(), s);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String s, Throwable e) {
|
||||
log.logp(Level.WARNING, loggerName, Thread.currentThread().getStackTrace()[1].getMethodName(), s, e);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWarnCount() {
|
||||
return warnCount;
|
||||
}
|
||||
|
||||
public int getErrorCount() {
|
||||
return errorCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetStat() {
|
||||
errorCount = 0;
|
||||
warnCount = 0;
|
||||
infoCount = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInfoEnabled() {
|
||||
return log.isLoggable(Level.INFO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String msg) {
|
||||
log.logp(Level.INFO, loggerName, Thread.currentThread().getStackTrace()[1].getMethodName(), msg);
|
||||
infoCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInfoCount() {
|
||||
return infoCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWarnEnabled() {
|
||||
return log.isLoggable(Level.WARNING);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,101 +1,101 @@
|
||||
/*
|
||||
* Copyright 1999-2011 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.support.logging;
|
||||
|
||||
import org.apache.log4j.Level;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
public class Log4jImpl implements Log {
|
||||
|
||||
private static final String callerFQCN = Log4jImpl.class.getName();
|
||||
|
||||
private Logger log;
|
||||
|
||||
private int errorCount;
|
||||
private int warnCount;
|
||||
private int infoCount;
|
||||
|
||||
public Log4jImpl(Class<?> clazz){
|
||||
log = Logger.getLogger(clazz);
|
||||
}
|
||||
|
||||
public boolean isDebugEnabled() {
|
||||
return log.isDebugEnabled();
|
||||
}
|
||||
|
||||
public void error(String s, Throwable e) {
|
||||
errorCount++;
|
||||
log.log(callerFQCN, Level.ERROR, s, e);
|
||||
}
|
||||
|
||||
public void error(String s) {
|
||||
errorCount++;
|
||||
log.log(callerFQCN, Level.ERROR, s, null);
|
||||
}
|
||||
|
||||
public void debug(String s) {
|
||||
log.log(callerFQCN, Level.DEBUG, s, null);
|
||||
}
|
||||
|
||||
public void debug(String s, Throwable e) {
|
||||
log.log(callerFQCN, Level.DEBUG, s, e);
|
||||
}
|
||||
|
||||
public void warn(String s) {
|
||||
log.log(callerFQCN, Level.WARN, s, null);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
public void warn(String s, Throwable e) {
|
||||
log.log(callerFQCN, Level.WARN, s, e);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
public int getWarnCount() {
|
||||
return warnCount;
|
||||
}
|
||||
|
||||
public int getErrorCount() {
|
||||
return errorCount;
|
||||
}
|
||||
|
||||
public void resetStat() {
|
||||
errorCount = 0;
|
||||
warnCount = 0;
|
||||
infoCount = 0;
|
||||
}
|
||||
|
||||
public boolean isInfoEnabled() {
|
||||
return log.isInfoEnabled();
|
||||
}
|
||||
|
||||
public void info(String msg) {
|
||||
infoCount++;
|
||||
log.log(callerFQCN, Level.INFO, msg, null);
|
||||
}
|
||||
|
||||
public boolean isWarnEnabled() {
|
||||
return log.isEnabledFor(Level.WARN);
|
||||
}
|
||||
|
||||
public int getInfoCount() {
|
||||
return infoCount;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return log.toString();
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 1999-2011 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.support.logging;
|
||||
|
||||
import org.apache.log4j.Level;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
public class Log4jImpl implements Log {
|
||||
|
||||
private static final String callerFQCN = Log4jImpl.class.getName();
|
||||
|
||||
private Logger log;
|
||||
|
||||
private int errorCount;
|
||||
private int warnCount;
|
||||
private int infoCount;
|
||||
|
||||
public Log4jImpl(String loggerName){
|
||||
log = Logger.getLogger(loggerName);
|
||||
}
|
||||
|
||||
public boolean isDebugEnabled() {
|
||||
return log.isDebugEnabled();
|
||||
}
|
||||
|
||||
public void error(String s, Throwable e) {
|
||||
errorCount++;
|
||||
log.log(callerFQCN, Level.ERROR, s, e);
|
||||
}
|
||||
|
||||
public void error(String s) {
|
||||
errorCount++;
|
||||
log.log(callerFQCN, Level.ERROR, s, null);
|
||||
}
|
||||
|
||||
public void debug(String s) {
|
||||
log.log(callerFQCN, Level.DEBUG, s, null);
|
||||
}
|
||||
|
||||
public void debug(String s, Throwable e) {
|
||||
log.log(callerFQCN, Level.DEBUG, s, e);
|
||||
}
|
||||
|
||||
public void warn(String s) {
|
||||
log.log(callerFQCN, Level.WARN, s, null);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
public void warn(String s, Throwable e) {
|
||||
log.log(callerFQCN, Level.WARN, s, e);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
public int getWarnCount() {
|
||||
return warnCount;
|
||||
}
|
||||
|
||||
public int getErrorCount() {
|
||||
return errorCount;
|
||||
}
|
||||
|
||||
public void resetStat() {
|
||||
errorCount = 0;
|
||||
warnCount = 0;
|
||||
infoCount = 0;
|
||||
}
|
||||
|
||||
public boolean isInfoEnabled() {
|
||||
return log.isInfoEnabled();
|
||||
}
|
||||
|
||||
public void info(String msg) {
|
||||
infoCount++;
|
||||
log.log(callerFQCN, Level.INFO, msg, null);
|
||||
}
|
||||
|
||||
public boolean isWarnEnabled() {
|
||||
return log.isEnabledFor(Level.WARN);
|
||||
}
|
||||
|
||||
public int getInfoCount() {
|
||||
return infoCount;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return log.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,109 +1,101 @@
|
||||
/*
|
||||
* Copyright 1999-2011 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.support.logging;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class LogFactory {
|
||||
|
||||
private static Constructor logConstructor;
|
||||
|
||||
static {
|
||||
// TODO add slf4j logging
|
||||
|
||||
// 优先选择log4j,而非Apache Common Logging. 因为后者无法设置真实Log调用者的信息
|
||||
tryImplementation("org.apache.log4j.Logger", "com.alibaba.druid.support.logging.Log4jImpl");
|
||||
tryImplementation("java.util.logging.Logger", "com.alibaba.druid.support.logging.Jdk14LoggingImpl");
|
||||
tryImplementation("org.slf4j.Logger", "com.alibaba.druid.support.logging.SLF4JImpl");
|
||||
tryImplementation("org.apache.commons.logging.LogFactory",
|
||||
"com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl");
|
||||
|
||||
if (logConstructor == null) {
|
||||
try {
|
||||
logConstructor = NoLoggingImpl.class.getConstructor(Class.class);
|
||||
} catch (Exception e) {
|
||||
throw new IllegalStateException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static void tryImplementation(String testClassName, String implClassName) {
|
||||
if (logConstructor != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
Resources.classForName(testClassName);
|
||||
Class implClass = Resources.classForName(implClassName);
|
||||
logConstructor = implClass.getConstructor(new Class[] { Class.class });
|
||||
|
||||
Class<?> declareClass = logConstructor.getDeclaringClass();
|
||||
if (!Log.class.isAssignableFrom(declareClass)) {
|
||||
logConstructor = null;
|
||||
}
|
||||
|
||||
try {
|
||||
logConstructor.newInstance(LogFactory.class);
|
||||
} catch (Throwable t) {
|
||||
logConstructor = null;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
// skip
|
||||
}
|
||||
}
|
||||
|
||||
public static Log getLog(Class aClass) {
|
||||
try {
|
||||
return (Log) logConstructor.newInstance(new Object[] { aClass });
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Error creating logger for class " + aClass + ". Cause: " + t, t);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will switch the logging implementation to Log4J if Log4J is available on the classpath. This is
|
||||
* useful in situations where you want to use Log4J to log iBATIS activity but commons logging is on the classpath.
|
||||
* Note that this method is only effective for log classes obtained after calling this method. If you intend to use
|
||||
* this method you should call it before calling any other iBATIS method.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static synchronized void selectLog4JLogging() {
|
||||
try {
|
||||
Resources.classForName("org.apache.log4j.Logger");
|
||||
Class implClass = Resources.classForName("com.alibaba.druid.support.logging.Log4jImpl");
|
||||
logConstructor = implClass.getConstructor(new Class[] { Class.class });
|
||||
} catch (Throwable t) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will switch the logging implementation to Java native logging if you are running in JRE 1.4 or above.
|
||||
* This is useful in situations where you want to use Java native logging to log iBATIS activity but commons logging
|
||||
* or Log4J is on the classpath. Note that this method is only effective for log classes obtained after calling this
|
||||
* method. If you intend to use this method you should call it before calling any other iBATIS method.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static synchronized void selectJavaLogging() {
|
||||
try {
|
||||
Resources.classForName("java.util.logging.Logger");
|
||||
Class implClass = Resources.classForName("com.alibaba.druid.support.logging.Jdk14LoggingImpl");
|
||||
logConstructor = implClass.getConstructor(new Class[] { Class.class });
|
||||
} catch (Throwable t) {
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 1999-2011 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.support.logging;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public class LogFactory {
|
||||
|
||||
private static Constructor logConstructor;
|
||||
|
||||
static {
|
||||
// TODO add slf4j logging
|
||||
|
||||
// 优先选择log4j,而非Apache Common Logging. 因为后者无法设置真实Log调用者的信息
|
||||
tryImplementation("org.apache.log4j.Logger", "com.alibaba.druid.support.logging.Log4jImpl");
|
||||
tryImplementation("java.util.logging.Logger", "com.alibaba.druid.support.logging.Jdk14LoggingImpl");
|
||||
tryImplementation("org.slf4j.Logger", "com.alibaba.druid.support.logging.SLF4JImpl");
|
||||
tryImplementation("org.apache.commons.logging.LogFactory",
|
||||
"com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl");
|
||||
|
||||
if (logConstructor == null) {
|
||||
try {
|
||||
logConstructor = NoLoggingImpl.class.getConstructor(String.class);
|
||||
} catch (Exception e) {
|
||||
throw new IllegalStateException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static void tryImplementation(String testClassName, String implClassName) {
|
||||
if (logConstructor != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
Resources.classForName(testClassName);
|
||||
Class implClass = Resources.classForName(implClassName);
|
||||
logConstructor = implClass.getConstructor(new Class[] { String.class });
|
||||
|
||||
Class<?> declareClass = logConstructor.getDeclaringClass();
|
||||
if (!Log.class.isAssignableFrom(declareClass)) {
|
||||
logConstructor = null;
|
||||
}
|
||||
|
||||
try {
|
||||
logConstructor.newInstance(LogFactory.class.getName());
|
||||
} catch (Throwable t) {
|
||||
logConstructor = null;
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
// skip
|
||||
}
|
||||
}
|
||||
|
||||
public static Log getLog(Class clazz) {
|
||||
return getLog(clazz.getName());
|
||||
}
|
||||
|
||||
public static Log getLog(String loggerName) {
|
||||
try {
|
||||
return (Log) logConstructor.newInstance(new Object[] { loggerName });
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Error creating logger for logger '" + loggerName + "'. Cause: " + t, t);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static synchronized void selectLog4JLogging() {
|
||||
try {
|
||||
Resources.classForName("org.apache.log4j.Logger");
|
||||
Class implClass = Resources.classForName("com.alibaba.druid.support.logging.Log4jImpl");
|
||||
logConstructor = implClass.getConstructor(new Class[] { String.class });
|
||||
} catch (Throwable t) {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static synchronized void selectJavaLogging() {
|
||||
try {
|
||||
Resources.classForName("java.util.logging.Logger");
|
||||
Class implClass = Resources.classForName("com.alibaba.druid.support.logging.Jdk14LoggingImpl");
|
||||
logConstructor = implClass.getConstructor(new Class[] { String.class });
|
||||
} catch (Throwable t) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,97 +1,101 @@
|
||||
/*
|
||||
* Copyright 1999-2011 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.support.logging;
|
||||
|
||||
public class NoLoggingImpl implements Log {
|
||||
|
||||
private int infoCount;
|
||||
private int errorCount;
|
||||
private int warnCount;
|
||||
private Class<?> clazz;
|
||||
|
||||
public NoLoggingImpl(Class<?> clazz){
|
||||
this.clazz = clazz;
|
||||
}
|
||||
|
||||
public boolean isDebugEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void error(String s, Throwable e) {
|
||||
error(s);
|
||||
|
||||
if (e != null) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void error(String s) {
|
||||
errorCount++;
|
||||
if (s != null) {
|
||||
System.err.println(clazz.getClass().getName() + " : " + s);
|
||||
}
|
||||
}
|
||||
|
||||
public void debug(String s) {
|
||||
}
|
||||
|
||||
public void debug(String s, Throwable e) {
|
||||
}
|
||||
|
||||
public void warn(String s) {
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String s, Throwable e) {
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
public int getErrorCount() {
|
||||
return errorCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWarnCount() {
|
||||
return warnCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetStat() {
|
||||
errorCount = 0;
|
||||
warnCount = 0;
|
||||
infoCount = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInfoEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String s) {
|
||||
infoCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWarnEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getInfoCount() {
|
||||
return infoCount;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Copyright 1999-2011 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.support.logging;
|
||||
|
||||
public class NoLoggingImpl implements Log {
|
||||
|
||||
private int infoCount;
|
||||
private int errorCount;
|
||||
private int warnCount;
|
||||
private String loggerName;
|
||||
|
||||
public NoLoggingImpl(String loggerName){
|
||||
this.loggerName = loggerName;
|
||||
}
|
||||
|
||||
public String getLoggerName() {
|
||||
return this.loggerName;
|
||||
}
|
||||
|
||||
public boolean isDebugEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void error(String s, Throwable e) {
|
||||
error(s);
|
||||
|
||||
if (e != null) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void error(String s) {
|
||||
errorCount++;
|
||||
if (s != null) {
|
||||
System.err.println(loggerName + " : " + s);
|
||||
}
|
||||
}
|
||||
|
||||
public void debug(String s) {
|
||||
}
|
||||
|
||||
public void debug(String s, Throwable e) {
|
||||
}
|
||||
|
||||
public void warn(String s) {
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String s, Throwable e) {
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
public int getErrorCount() {
|
||||
return errorCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWarnCount() {
|
||||
return warnCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetStat() {
|
||||
errorCount = 0;
|
||||
warnCount = 0;
|
||||
infoCount = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInfoEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String s) {
|
||||
infoCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWarnEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getInfoCount() {
|
||||
return infoCount;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,102 +20,104 @@ import org.slf4j.LoggerFactory;
|
||||
import org.slf4j.spi.LocationAwareLogger;
|
||||
|
||||
public class SLF4JImpl implements Log {
|
||||
private static final String callerFQCN = SLF4JImpl.class.getName();
|
||||
private static final Logger testLogger = LoggerFactory.getLogger(SLF4JImpl.class);
|
||||
static {
|
||||
//if the logger is not a LocationAwareLogger instance, it can not get correct stack StackTraceElement
|
||||
//so ignore this implementation.
|
||||
if (!(testLogger instanceof LocationAwareLogger)) {
|
||||
throw new UnsupportedOperationException(testLogger.getClass()+" is not a suitable logger");
|
||||
}
|
||||
}
|
||||
private int errorCount;
|
||||
private int warnCount;
|
||||
private int infoCount;
|
||||
private LocationAwareLogger log;
|
||||
|
||||
public SLF4JImpl(Class<?> clazz) {
|
||||
Logger log = LoggerFactory.getLogger(clazz);
|
||||
if (log instanceof LocationAwareLogger) {
|
||||
this.log = (LocationAwareLogger) log;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDebugEnabled() {
|
||||
return log.isDebugEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String msg, Throwable e) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.ERROR_INT, msg, null, e);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String msg) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.ERROR_INT, msg, null, null);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInfoEnabled() {
|
||||
return log.isInfoEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String msg) {
|
||||
infoCount++;
|
||||
log.log(null, callerFQCN, LocationAwareLogger.INFO_INT, msg, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(String msg) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.DEBUG_INT, msg, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(String msg, Throwable e) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.ERROR_INT, msg, null, e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWarnEnabled() {
|
||||
return log.isWarnEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String msg) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.WARN_INT, msg, null, null);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String msg, Throwable e) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.WARN_INT, msg, null, e);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getErrorCount() {
|
||||
return errorCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWarnCount() {
|
||||
return warnCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInfoCount() {
|
||||
return infoCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetStat() {
|
||||
errorCount = 0;
|
||||
warnCount = 0;
|
||||
infoCount = 0;
|
||||
}
|
||||
|
||||
|
||||
private static final String callerFQCN = SLF4JImpl.class.getName();
|
||||
private static final Logger testLogger = LoggerFactory.getLogger(SLF4JImpl.class);
|
||||
static {
|
||||
// if the logger is not a LocationAwareLogger instance, it can not get correct stack StackTraceElement
|
||||
// so ignore this implementation.
|
||||
if (!(testLogger instanceof LocationAwareLogger)) {
|
||||
throw new UnsupportedOperationException(testLogger.getClass() + " is not a suitable logger");
|
||||
}
|
||||
}
|
||||
private int errorCount;
|
||||
private int warnCount;
|
||||
private int infoCount;
|
||||
private LocationAwareLogger log;
|
||||
|
||||
public SLF4JImpl(Class<?> clazz){
|
||||
this.log = (LocationAwareLogger) LoggerFactory.getLogger(clazz);
|
||||
}
|
||||
|
||||
public SLF4JImpl(String loggerName){
|
||||
this.log = (LocationAwareLogger) LoggerFactory.getLogger(loggerName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDebugEnabled() {
|
||||
return log.isDebugEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String msg, Throwable e) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.ERROR_INT, msg, null, e);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(String msg) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.ERROR_INT, msg, null, null);
|
||||
errorCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInfoEnabled() {
|
||||
return log.isInfoEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void info(String msg) {
|
||||
infoCount++;
|
||||
log.log(null, callerFQCN, LocationAwareLogger.INFO_INT, msg, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(String msg) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.DEBUG_INT, msg, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void debug(String msg, Throwable e) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.ERROR_INT, msg, null, e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWarnEnabled() {
|
||||
return log.isWarnEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String msg) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.WARN_INT, msg, null, null);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void warn(String msg, Throwable e) {
|
||||
log.log(null, callerFQCN, LocationAwareLogger.WARN_INT, msg, null, e);
|
||||
warnCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getErrorCount() {
|
||||
return errorCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getWarnCount() {
|
||||
return warnCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getInfoCount() {
|
||||
return infoCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetStat() {
|
||||
errorCount = 0;
|
||||
warnCount = 0;
|
||||
infoCount = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLInsertInto;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelect;
|
||||
@@ -1079,7 +1080,7 @@ public class WallVisitorUtils {
|
||||
}
|
||||
}
|
||||
|
||||
if (isWhereOrHaving(x)) {
|
||||
if (!(x.getParent() instanceof ValuesClause)) {
|
||||
addViolation(visitor, ErrorCode.FUNCTION_DENY, "deny function : " + methodName, x);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright 1999-2011 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.bvt.filter.wall;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.junit.Assert;
|
||||
|
||||
import com.alibaba.druid.wall.WallProvider;
|
||||
import com.alibaba.druid.wall.spi.MySqlWallProvider;
|
||||
|
||||
public class MySqlWallTest_concat extends TestCase {
|
||||
|
||||
public void test_true() throws Exception {
|
||||
WallProvider provider = new MySqlWallProvider();
|
||||
|
||||
provider.getConfig().setSelectHavingAlwayTrueCheck(true);
|
||||
|
||||
Assert.assertTrue(provider.checkValid(//
|
||||
"select * from tb_product_word where name='' or CONCAT(name,style)='' or CONCAT(shop,style)='' or CONCAT(ename,style)=''"));
|
||||
|
||||
Assert.assertEquals(1, provider.getTableStats().size());
|
||||
Assert.assertTrue(provider.getTableStats().containsKey("tb_product_word"));
|
||||
}
|
||||
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.alibaba.druid.bvt.pool.dynamic;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.junit.Assert;
|
||||
|
||||
import com.alibaba.druid.pool.DruidDataSource;
|
||||
import com.alibaba.druid.pool.DruidDataSourceStatLogger;
|
||||
import com.alibaba.druid.pool.DruidDataSourceStatLoggerImpl;
|
||||
import com.alibaba.druid.support.logging.Log;
|
||||
|
||||
public class DruidDataSourceStatLoggerImplTest extends TestCase {
|
||||
|
||||
private DruidDataSource dataSource;
|
||||
|
||||
private Log statLog;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
Field logField = DruidDataSourceStatLoggerImpl.class.getDeclaredField("LOG");
|
||||
logField.setAccessible(true);
|
||||
statLog = (Log) logField.get(null);
|
||||
|
||||
statLog.resetStat();
|
||||
|
||||
dataSource = new DruidDataSource();
|
||||
dataSource.setUrl("jdbc:mock:xxx");
|
||||
dataSource.setTestOnBorrow(false);
|
||||
dataSource.setConnectionProperties("a=3;b=4");
|
||||
dataSource.setFilters("stat");
|
||||
dataSource.init();
|
||||
|
||||
}
|
||||
|
||||
protected void tearDown() throws Exception {
|
||||
dataSource.close();
|
||||
}
|
||||
|
||||
public void test_connectPropertiesChange() throws Exception {
|
||||
Assert.assertTrue(dataSource.isWrapperFor(DruidDataSourceStatLogger.class));
|
||||
Assert.assertTrue(dataSource.isWrapperFor(DruidDataSourceStatLoggerImpl.class));
|
||||
DruidDataSourceStatLoggerImpl loggerImpl = dataSource.unwrap(DruidDataSourceStatLoggerImpl.class);
|
||||
Assert.assertSame(statLog, loggerImpl.getLogger());
|
||||
|
||||
dataSource.setConnectionProperties("druid.stat.loggerName=xxx");
|
||||
Assert.assertNotSame(statLog, loggerImpl.getLogger());
|
||||
}
|
||||
}
|
||||
-8
@@ -1,8 +0,0 @@
|
||||
package com.alibaba.druid.bvt.pool.vendor;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
|
||||
public class MySqlValidConnectionCheckerTest extends TestCase {
|
||||
|
||||
}
|
||||
@@ -204,8 +204,9 @@ public class DruidStatServiceTest extends TestCase {
|
||||
String result = DruidStatService.getInstance().service("/activeConnectionStackTrace.json");
|
||||
Map<String, Object> resultMap = (Map<String, Object>) JSONUtils.parse(result);
|
||||
List<String> contentList = (List<String>) resultMap.get("Content");
|
||||
Object first = contentList.get(0);
|
||||
|
||||
assertThat(contentList.get(0), is(not(nullValue())));
|
||||
assertThat(first, is(not(nullValue())));
|
||||
// close connection at last.
|
||||
stmt.close();
|
||||
conn.close();
|
||||
|
||||
@@ -23,9 +23,12 @@ import static org.junit.Assert.assertThat;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -38,13 +41,12 @@ import com.alibaba.druid.util.JdbcUtils;
|
||||
/**
|
||||
* Multiple data source test case.
|
||||
*/
|
||||
public class DruidStatServiceTest2 {
|
||||
public class DruidStatServiceTest2 extends TestCase {
|
||||
|
||||
private DruidDataSource dataSource;
|
||||
private DruidDataSource dataSource2;
|
||||
|
||||
// every test, two data source initialized.
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
// DruidStatService is singleton, reset all for other testcase.
|
||||
DruidStatService.getInstance().service("/reset-all.json");
|
||||
@@ -62,13 +64,11 @@ public class DruidStatServiceTest2 {
|
||||
dataSource2.init();
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
JdbcUtils.close(dataSource);
|
||||
JdbcUtils.close(dataSource2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_statService_getSqlList() throws Exception {
|
||||
String sql = "select 1";
|
||||
|
||||
@@ -106,7 +106,6 @@ public class DruidStatServiceTest2 {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_statService_getSqlById() throws Exception {
|
||||
String sql = "select 1";
|
||||
|
||||
@@ -155,7 +154,6 @@ public class DruidStatServiceTest2 {
|
||||
assertThat(resultMap.get("Content"), is(nullValue()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_statService_getDataSourceList() throws Exception {
|
||||
String result = DruidStatService.getInstance().service("/datasource.json");
|
||||
Map<String, Object> resultMap = (Map<String, Object>) JSONUtils.parse(result);
|
||||
@@ -167,5 +165,9 @@ public class DruidStatServiceTest2 {
|
||||
assertThat((Integer) dataSourceStat.get("PoolingCount"), equalTo(0));
|
||||
assertThat((Integer) dataSourceStat.get("ActiveCount"), equalTo(0));
|
||||
}
|
||||
|
||||
public void test_getWallStatMap() throws Exception {
|
||||
DruidStatService.getInstance().getWallStatMap(Collections.<String, String>emptyMap());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user