diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index d0c64df731..7949c51e0c 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -405,7 +405,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat filter.init(this); } - if (this.dbType == JdbcConstants.MYSQL) { + if (JdbcConstants.MYSQL.equals(this.dbType) || // + JdbcConstants.MARIADB.equals(this.dbType)) { boolean cacheServerConfigurationSet = false; if (this.connectProperties.containsKey("cacheServerConfiguration")) { cacheServerConfigurationSet = true; @@ -544,7 +545,6 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat createConnectionThread.start(); } - /** * load filters from SPI ServiceLoader * diff --git a/src/main/java/com/alibaba/druid/sql/PagerUtils.java b/src/main/java/com/alibaba/druid/sql/PagerUtils.java index a1dfa98f6d..71dbba0e37 100644 --- a/src/main/java/com/alibaba/druid/sql/PagerUtils.java +++ b/src/main/java/com/alibaba/druid/sql/PagerUtils.java @@ -94,7 +94,9 @@ public class PagerUtils { private static String limitQueryBlock(SQLSelect select, String dbType, int offset, int count) { SQLSelectQueryBlock queryBlock = (SQLSelectQueryBlock) select.getQuery(); - if (JdbcConstants.MYSQL.equals(dbType)) { + if (JdbcConstants.MYSQL.equals(dbType) || // + JdbcConstants.MARIADB.equals(dbType) || // + JdbcConstants.H2.equals(dbType)) { return limitMySqlQueryBlock((MySqlSelectQueryBlock) queryBlock, dbType, offset, count); } @@ -205,6 +207,14 @@ public class PagerUtils { return new MySqlSelectQueryBlock(); } + if (JdbcConstants.MARIADB.equals(dbType)) { + return new MySqlSelectQueryBlock(); + } + + if (JdbcConstants.H2.equals(dbType)) { + return new MySqlSelectQueryBlock(); + } + if (JdbcConstants.ORACLE.equals(dbType)) { return new OracleSelectQueryBlock(); } diff --git a/src/main/java/com/alibaba/druid/sql/SQLUtils.java b/src/main/java/com/alibaba/druid/sql/SQLUtils.java index 664118193e..fd6c854a76 100644 --- a/src/main/java/com/alibaba/druid/sql/SQLUtils.java +++ b/src/main/java/com/alibaba/druid/sql/SQLUtils.java @@ -45,11 +45,9 @@ public class SQLUtils { private final static Log LOG = LogFactory.getLog(SQLUtils.class); public static String toSQLString(SQLObject sqlObject, String dbType) { - if (JdbcUtils.MYSQL.equals(dbType)) { - return toMySqlString(sqlObject); - } - - if (JdbcUtils.H2.equals(dbType)) { + if (JdbcUtils.MYSQL.equals(dbType) || // + JdbcUtils.MARIADB.equals(dbType) || // + JdbcUtils.H2.equals(dbType)) { return toMySqlString(sqlObject); } @@ -139,7 +137,7 @@ public class SQLUtils { public static SQLExpr toSQLExpr(String sql) { return toSQLExpr(sql, null); } - + public static String format(String sql, String dbType) { return format(sql, dbType, null); } @@ -158,7 +156,7 @@ public class SQLUtils { public static String toSQLString(List statementList, String dbType) { return toSQLString(statementList, dbType, null); } - + public static String toSQLString(List statementList, String dbType, List parameters) { StringBuilder out = new StringBuilder(); SQLASTOutputVisitor visitor = createFormatOutputVisitor(out, statementList, dbType); @@ -183,7 +181,9 @@ public class SQLUtils { } } - if (JdbcUtils.MYSQL.equals(dbType)) { + if (JdbcUtils.MYSQL.equals(dbType) || // + JdbcUtils.MARIADB.equals(dbType) || // + JdbcUtils.H2.equals(dbType)) { return new MySqlOutputVisitor(out); } @@ -194,15 +194,11 @@ public class SQLUtils { if (JdbcUtils.SQL_SERVER.equals(dbType)) { return new SQLServerOutputVisitor(out); } - + if (JdbcUtils.JTDS.equals(dbType)) { return new SQLServerOutputVisitor(out); } - if (JdbcUtils.H2.equals(dbType)) { - return new MySqlOutputVisitor(out); - } - return new SQLASTOutputVisitor(out); } @@ -215,7 +211,9 @@ public class SQLUtils { } } - if (JdbcUtils.MYSQL.equals(dbType)) { + if (JdbcUtils.MYSQL.equals(dbType) || // + JdbcUtils.MARIADB.equals(dbType) || // + JdbcUtils.H2.equals(dbType)) { return new MySqlSchemaStatVisitor(); } @@ -226,15 +224,11 @@ public class SQLUtils { if (JdbcUtils.SQL_SERVER.equals(dbType)) { return new SQLServerSchemaStatVisitor(); } - + if (JdbcUtils.JTDS.equals(dbType)) { return new SQLServerSchemaStatVisitor(); } - if (JdbcUtils.H2.equals(dbType)) { - return new MySqlSchemaStatVisitor(); - } - return new SchemaStatVisitor(); } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLParserUtils.java b/src/main/java/com/alibaba/druid/sql/parser/SQLParserUtils.java index b8c04b40a3..6a3c642b84 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLParserUtils.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLParserUtils.java @@ -36,6 +36,10 @@ public class SQLParserUtils { return new MySqlStatementParser(sql); } + if (JdbcUtils.MARIADB.equals(dbType)) { + return new MySqlStatementParser(sql); + } + if (JdbcUtils.POSTGRESQL.equals(dbType)) { return new PGSQLStatementParser(sql); } @@ -43,7 +47,7 @@ public class SQLParserUtils { if (JdbcUtils.SQL_SERVER.equals(dbType)) { return new SQLServerStatementParser(sql); } - + if (JdbcUtils.JTDS.equals(dbType)) { return new SQLServerStatementParser(sql); } @@ -60,11 +64,9 @@ public class SQLParserUtils { return new OracleExprParser(sql); } - if (JdbcUtils.H2.equals(dbType)) { - return new MySqlExprParser(sql); - } - - if (JdbcUtils.MYSQL.equals(dbType)) { + if (JdbcUtils.MYSQL.equals(dbType) || // + JdbcUtils.MARIADB.equals(dbType) || // + JdbcUtils.H2.equals(dbType)) { return new MySqlExprParser(sql); } @@ -75,7 +77,7 @@ public class SQLParserUtils { if (JdbcUtils.SQL_SERVER.equals(dbType)) { return new SQLServerExprParser(sql); } - + if (JdbcUtils.JTDS.equals(dbType)) { return new SQLServerExprParser(sql); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java index 88cf78eadb..cae49c8f4f 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/ParameterizedOutputVisitorUtils.java @@ -56,6 +56,10 @@ public class ParameterizedOutputVisitorUtils { if (JdbcUtils.MYSQL.equals(dbType)) { return new MySqlParameterizedOutputVisitor(out); } + + if (JdbcUtils.MARIADB.equals(dbType)) { + return new MySqlParameterizedOutputVisitor(out); + } if (JdbcUtils.H2.equals(dbType)) { return new MySqlParameterizedOutputVisitor(out); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java index 31a86b2c52..3984f818f8 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java @@ -139,6 +139,10 @@ public class SQLEvalVisitorUtils { if (JdbcUtils.MYSQL.equals(dbType)) { return new MySqlEvalVisitorImpl(); } + + if (JdbcUtils.MARIADB.equals(dbType)) { + return new MySqlEvalVisitorImpl(); + } if (JdbcUtils.H2.equals(dbType)) { return new MySqlEvalVisitorImpl(); diff --git a/src/main/java/com/alibaba/druid/util/JdbcConstants.java b/src/main/java/com/alibaba/druid/util/JdbcConstants.java index 20f0c4c066..8ae1f4625f 100644 --- a/src/main/java/com/alibaba/druid/util/JdbcConstants.java +++ b/src/main/java/com/alibaba/druid/util/JdbcConstants.java @@ -34,16 +34,17 @@ public interface JdbcConstants { public static final String SQL_SERVER = "sqlserver"; public static final String ORACLE = "oracle"; - public static final String ALI_ORACLE = "AliOracle"; - public static final String ORACLE_DRIVER = "oracle.jdbc.driver.OracleDriver"; + public static final String ALI_ORACLE = "AliOracle"; public static final String ALI_ORACLE_DRIVER = "com.alibaba.jdbc.AlibabaDriver"; public static final String MYSQL = "mysql"; - public static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver"; + public static final String MARIADB = "mariadb"; + public static final String MARIADB_DRIVER = "org.mariadb.jdbc.Driver"; + public static final String DERBY = "derby"; public static final String HBASE = "hbase"; diff --git a/src/main/java/com/alibaba/druid/util/JdbcUtils.java b/src/main/java/com/alibaba/druid/util/JdbcUtils.java index e8c9ecbea7..ac0159e66d 100644 --- a/src/main/java/com/alibaba/druid/util/JdbcUtils.java +++ b/src/main/java/com/alibaba/druid/util/JdbcUtils.java @@ -348,6 +348,8 @@ public final class JdbcUtils implements JdbcConstants { return "org.apache.derby.jdbc.EmbeddedDriver"; } else if (rawUrl.startsWith("jdbc:mysql:")) { return MYSQL_DRIVER; + } else if (rawUrl.startsWith("jdbc:mariadb:")) { + return MARIADB_DRIVER; } else if (rawUrl.startsWith("jdbc:oracle:")) { return ORACLE_DRIVER; } else if (rawUrl.startsWith("jdbc:alibaba:oracle:")) { @@ -414,6 +416,8 @@ public final class JdbcUtils implements JdbcConstants { return DERBY; } else if (rawUrl.startsWith("jdbc:mysql:")) { return MYSQL; + } else if (rawUrl.startsWith("jdbc:mariadb:")) { + return MARIADB; } else if (rawUrl.startsWith("jdbc:oracle:")) { return ORACLE; } else if (rawUrl.startsWith("jdbc:alibaba:oracle:")) { diff --git a/src/main/java/com/alibaba/druid/wall/WallFilter.java b/src/main/java/com/alibaba/druid/wall/WallFilter.java index 9fd1c2ecb1..91070bfd5d 100644 --- a/src/main/java/com/alibaba/druid/wall/WallFilter.java +++ b/src/main/java/com/alibaba/druid/wall/WallFilter.java @@ -72,7 +72,9 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean { dbType = JdbcUtils.getDbType(dataSource.getUrl(), null); } - if (JdbcUtils.MYSQL.equals(dbType) || JdbcUtils.H2.equals(dbType)) { + if (JdbcUtils.MYSQL.equals(dbType) || // + JdbcUtils.MARIADB.equals(dbType) || // + JdbcUtils.H2.equals(dbType)) { if (config == null) { config = new WallConfig(MySqlWallProvider.DEFAULT_CONFIG_DIR); } @@ -541,7 +543,7 @@ public class WallFilter extends FilterAdapter implements WallFilterMBean { if (sqlStat == null) { return; } - + Map sqlTableStats = sqlStat.getTableStats(); if (sqlTableStats == null) { return;