Skip to content

Commit a9c76c9

Browse files
committed
remove jsqlparser
1 parent ac20f0d commit a9c76c9

16 files changed

+153
-264
lines changed

pom.xml

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.codingapi.dbstream</groupId>
66
<artifactId>dbstream-driver</artifactId>
7-
<version>1.0.3</version>
7+
<version>1.0.4</version>
88

99
<url>https://github.com/codingapi/dbstream-driver</url>
1010
<name>dbstream-driver</name>
@@ -32,7 +32,6 @@
3232

3333
<!-- project dependencies properties-->
3434
<lombok.version>1.18.42</lombok.version>
35-
<jsqlparser.version>4.9</jsqlparser.version>
3635

3736
<!-- test dependencies properties-->
3837
<springboot.version>2.7.18</springboot.version>
@@ -46,11 +45,6 @@
4645
<optional>true</optional>
4746
</dependency>
4847

49-
<dependency>
50-
<groupId>com.github.jsqlparser</groupId>
51-
<artifactId>jsqlparser</artifactId>
52-
</dependency>
53-
5448
<dependency>
5549
<groupId>org.springframework.boot</groupId>
5650
<artifactId>spring-boot-starter-data-jpa</artifactId>
@@ -65,6 +59,20 @@
6559
<scope>test</scope>
6660
</dependency>
6761

62+
<dependency>
63+
<groupId>com.dameng</groupId>
64+
<artifactId>DmJdbcDriver18</artifactId>
65+
<version>8.1.3.62</version>
66+
<scope>test</scope>
67+
</dependency>
68+
69+
<dependency>
70+
<groupId>com.dameng</groupId>
71+
<artifactId>DmDialect-for-hibernate5.6</artifactId>
72+
<version>8.1.3.62</version>
73+
<scope>test</scope>
74+
</dependency>
75+
6876
<dependency>
6977
<groupId>org.springframework.boot</groupId>
7078
<artifactId>spring-boot-starter-test</artifactId>

src/main/java/com/codingapi/dbstream/driver/DBStreamProxyDriver.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,15 @@ public class DBStreamProxyDriver implements Driver {
1919
private Driver driver;
2020

2121
static {
22+
try {
23+
DriverManager.registerDriver(new DBStreamProxyDriver());
24+
}catch (Exception e){
25+
throw new RuntimeException(e);
26+
}
2227
SQLRunningContext.getInstance().addListener(new SQLDeleteExecuteListener());
2328
SQLRunningContext.getInstance().addListener(new SQLInsertExecuteListener());
2429
SQLRunningContext.getInstance().addListener(new SQLUpdateExecuteListener());
25-
System.out.println("DBStreamProxyDriver init...");
30+
System.out.println("DBStreamProxyDriver init register...");
2631
}
2732

2833
@Override

src/main/java/com/codingapi/dbstream/listener/SQLDeleteExecuteListener.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44
import com.codingapi.dbstream.interceptor.SQLExecuteState;
55
import com.codingapi.dbstream.parser.DeleteDBEventParser;
66
import com.codingapi.dbstream.scanner.DbTable;
7+
import com.codingapi.dbstream.sqlparser.DeleteSQLParser;
78
import com.codingapi.dbstream.stream.DBEvent;
89
import com.codingapi.dbstream.stream.TransactionEventPools;
9-
import com.codingapi.dbstream.utils.SQLParamUtils;
10-
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
11-
import net.sf.jsqlparser.schema.Table;
12-
import net.sf.jsqlparser.statement.Statement;
13-
import net.sf.jsqlparser.statement.delete.Delete;
10+
import com.codingapi.dbstream.utils.SQLUtils;
1411

1512
import java.sql.SQLException;
1613
import java.util.List;
@@ -22,16 +19,15 @@ public class SQLDeleteExecuteListener implements SQLExecuteListener {
2219
@Override
2320
public void before(SQLExecuteState executeState) throws SQLException {
2421
String sql = executeState.getSql();
25-
if (SQLParamUtils.isDeleteSQL(sql)) {
22+
if (SQLUtils.isDeleteSQL(sql)) {
2623
try {
2724
threadLocal.remove();
28-
Statement parserStatement = CCJSqlParserUtil.parse(sql);
29-
Delete delete = (Delete) parserStatement;
30-
Table table = delete.getTable();
31-
executeState.updateMetaData(table.getName());
32-
DbTable dbTable = executeState.getDbTable(table.getName());
25+
DeleteSQLParser sqlParser = new DeleteSQLParser(sql);
26+
String tableName = sqlParser.getTableName();
27+
executeState.updateMetaData(tableName);
28+
DbTable dbTable = executeState.getDbTable(tableName);
3329
if (dbTable != null && DBStreamContext.getInstance().support(executeState.getDriverProperties(), dbTable)) {
34-
DeleteDBEventParser dataParser = new DeleteDBEventParser(executeState, delete, table, dbTable);
30+
DeleteDBEventParser dataParser = new DeleteDBEventParser(executeState, sqlParser, dbTable);
3531
dataParser.prepare();
3632
threadLocal.set(dataParser);
3733
}
@@ -48,7 +44,7 @@ public void before(SQLExecuteState executeState) throws SQLException {
4844
public void after(SQLExecuteState executeState, Object result) throws SQLException {
4945
String sql = executeState.getSql();
5046
String transactionKey = executeState.getTransactionKey();
51-
if (SQLParamUtils.isDeleteSQL(sql)) {
47+
if (SQLUtils.isDeleteSQL(sql)) {
5248
DeleteDBEventParser dataParser = threadLocal.get();
5349
if (dataParser != null) {
5450
List<DBEvent> eventList = dataParser.loadEvents(result);

src/main/java/com/codingapi/dbstream/listener/SQLInsertExecuteListener.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
import com.codingapi.dbstream.interceptor.SQLExecuteState;
55
import com.codingapi.dbstream.parser.InsertDBEventParser;
66
import com.codingapi.dbstream.scanner.DbTable;
7+
import com.codingapi.dbstream.sqlparser.InsertSQLParser;
78
import com.codingapi.dbstream.stream.DBEvent;
89
import com.codingapi.dbstream.stream.TransactionEventPools;
9-
import com.codingapi.dbstream.utils.SQLParamUtils;
10+
import com.codingapi.dbstream.utils.SQLUtils;
1011
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
1112
import net.sf.jsqlparser.schema.Table;
1213
import net.sf.jsqlparser.statement.Statement;
@@ -22,16 +23,15 @@ public class SQLInsertExecuteListener implements SQLExecuteListener {
2223
@Override
2324
public void before(SQLExecuteState executeState) throws SQLException {
2425
String sql = executeState.getSql();
25-
if (SQLParamUtils.isInsertSQL(sql)) {
26+
if (SQLUtils.isInsertSQL(sql)) {
2627
try {
2728
threadLocal.remove();
28-
Statement parserStatement = CCJSqlParserUtil.parse(sql);
29-
Insert insert = (Insert) parserStatement;
30-
Table table = insert.getTable();
31-
executeState.updateMetaData(table.getName());
32-
DbTable dbTable = executeState.getDbTable(table.getName());
29+
InsertSQLParser sqlParser = new InsertSQLParser(sql);
30+
String tableName = sqlParser.getTableName();
31+
executeState.updateMetaData(tableName);
32+
DbTable dbTable = executeState.getDbTable(tableName);
3333
if (dbTable != null && DBStreamContext.getInstance().support(executeState.getDriverProperties(), dbTable)) {
34-
InsertDBEventParser dataParser = new InsertDBEventParser(executeState, insert, table, dbTable);
34+
InsertDBEventParser dataParser = new InsertDBEventParser(executeState, sqlParser, dbTable);
3535
dataParser.prepare();
3636
threadLocal.set(dataParser);
3737
}
@@ -46,7 +46,7 @@ public void before(SQLExecuteState executeState) throws SQLException {
4646
public void after(SQLExecuteState executeState, Object result) throws SQLException {
4747
String sql = executeState.getSql();
4848
String transactionKey = executeState.getTransactionKey();
49-
if (SQLParamUtils.isInsertSQL(sql)) {
49+
if (SQLUtils.isInsertSQL(sql)) {
5050
InsertDBEventParser dataParser = threadLocal.get();
5151
if (dataParser != null) {
5252
List<DBEvent> eventList = dataParser.loadEvents(result);

src/main/java/com/codingapi/dbstream/listener/SQLUpdateExecuteListener.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44
import com.codingapi.dbstream.interceptor.SQLExecuteState;
55
import com.codingapi.dbstream.parser.UpdateDBEventParser;
66
import com.codingapi.dbstream.scanner.DbTable;
7+
import com.codingapi.dbstream.sqlparser.UpdateSQLParser;
78
import com.codingapi.dbstream.stream.DBEvent;
89
import com.codingapi.dbstream.stream.TransactionEventPools;
9-
import com.codingapi.dbstream.utils.SQLParamUtils;
10-
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
11-
import net.sf.jsqlparser.schema.Table;
12-
import net.sf.jsqlparser.statement.Statement;
13-
import net.sf.jsqlparser.statement.update.Update;
10+
import com.codingapi.dbstream.utils.SQLUtils;
1411

1512
import java.sql.SQLException;
1613
import java.util.List;
@@ -22,16 +19,15 @@ public class SQLUpdateExecuteListener implements SQLExecuteListener {
2219
@Override
2320
public void before(SQLExecuteState executeState) throws SQLException {
2421
String sql = executeState.getSql();
25-
if (SQLParamUtils.isUpdateSQL(sql)) {
22+
if (SQLUtils.isUpdateSQL(sql)) {
2623
try {
2724
threadLocal.remove();
28-
Statement parserStatement = CCJSqlParserUtil.parse(sql);
29-
Update update = (Update) parserStatement;
30-
Table table = update.getTable();
31-
executeState.updateMetaData(table.getName());
32-
DbTable dbTable = executeState.getDbTable(table.getName());
25+
UpdateSQLParser sqlParser = new UpdateSQLParser(sql);
26+
String tableName = sqlParser.getTableName();
27+
executeState.updateMetaData(tableName);
28+
DbTable dbTable = executeState.getDbTable(tableName);
3329
if (dbTable != null && DBStreamContext.getInstance().support(executeState.getDriverProperties(), dbTable)) {
34-
UpdateDBEventParser dataParser = new UpdateDBEventParser(executeState, update, table, dbTable);
30+
UpdateDBEventParser dataParser = new UpdateDBEventParser(executeState, sqlParser, dbTable);
3531
dataParser.prepare();
3632
threadLocal.set(dataParser);
3733
}
@@ -48,7 +44,7 @@ public void before(SQLExecuteState executeState) throws SQLException {
4844
public void after(SQLExecuteState executeState, Object result) throws SQLException {
4945
String sql = executeState.getSql();
5046
String transactionKey = executeState.getTransactionKey();
51-
if (SQLParamUtils.isUpdateSQL(sql)) {
47+
if (SQLUtils.isUpdateSQL(sql)) {
5248
UpdateDBEventParser dataParser = threadLocal.get();
5349
if (dataParser != null) {
5450
List<DBEvent> eventList = dataParser.loadEvents(result);

src/main/java/com/codingapi/dbstream/parser/DeleteDBEventParser.java

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,39 +3,33 @@
33
import com.codingapi.dbstream.interceptor.SQLExecuteState;
44
import com.codingapi.dbstream.scanner.DbColumn;
55
import com.codingapi.dbstream.scanner.DbTable;
6+
import com.codingapi.dbstream.sqlparser.DeleteSQLParser;
67
import com.codingapi.dbstream.stream.DBEvent;
78
import com.codingapi.dbstream.stream.EventType;
8-
import com.codingapi.dbstream.utils.SQLParamUtils;
9-
import net.sf.jsqlparser.expression.Alias;
10-
import net.sf.jsqlparser.expression.Expression;
11-
import net.sf.jsqlparser.schema.Table;
12-
import net.sf.jsqlparser.statement.Statement;
13-
import net.sf.jsqlparser.statement.delete.Delete;
9+
import com.codingapi.dbstream.utils.ResultSetUtils;
10+
import com.codingapi.dbstream.utils.SQLUtils;
1411

1512
import java.sql.SQLException;
1613
import java.util.ArrayList;
1714
import java.util.List;
1815
import java.util.Map;
1916

20-
public class DeleteDBEventParser extends DBEventParser {
17+
public class DeleteDBEventParser {
2118

2219
private final List<Map<String, Object>> prepareList = new ArrayList<>();
2320

2421
private final String aliasTable;
25-
private final Delete delete;
26-
27-
public DeleteDBEventParser(SQLExecuteState executeState, Statement statement, Table table, DbTable dbTable) {
28-
super(executeState, statement, table, dbTable);
29-
this.delete = (Delete) statement;
30-
Alias alias = table.getAlias();
31-
if (alias != null) {
32-
this.aliasTable = alias.getName();
33-
} else {
34-
this.aliasTable = null;
35-
}
22+
private final DeleteSQLParser sqlParser;
23+
private final SQLExecuteState executeState;
24+
private final DbTable dbTable;
25+
26+
public DeleteDBEventParser(SQLExecuteState executeState, DeleteSQLParser sqlParser, DbTable dbTable) {
27+
this.sqlParser = sqlParser;
28+
this.dbTable = dbTable;
29+
this.executeState = executeState;
30+
this.aliasTable = sqlParser.getTableAlias();
3631
}
3732

38-
@Override
3933
public void prepare() throws SQLException {
4034
this.updateRows();
4135
}
@@ -48,24 +42,28 @@ private void updateRows() throws SQLException {
4842
}
4943

5044
private String loadUpdateRowSQL() {
51-
Expression expression = this.delete.getWhere();
45+
String whereSQL = this.sqlParser.getWhereSQL();
5246
String tableName = this.dbTable.getName();
5347
StringBuilder querySQL = new StringBuilder();
5448
querySQL.append("SELECT ");
55-
for (DbColumn dbColumn : dbTable.getPrimaryColumns()) {
56-
if (this.aliasTable != null) {
57-
querySQL.append(this.aliasTable).append(".");
49+
if(dbTable.hasPrimaryKeys()) {
50+
for (DbColumn dbColumn : dbTable.getPrimaryColumns()) {
51+
if (this.aliasTable != null) {
52+
querySQL.append(this.aliasTable).append(".");
53+
}
54+
querySQL.append(dbColumn.getName()).append(",");
5855
}
59-
querySQL.append(dbColumn.getName()).append(",");
56+
querySQL.deleteCharAt(querySQL.length() - 1);
57+
}else {
58+
querySQL.append(" * ");
6059
}
61-
querySQL.deleteCharAt(querySQL.length() - 1);
6260
querySQL.append(" FROM ").append(tableName);
6361
if (this.aliasTable != null) {
6462
querySQL.append(" AS ").append(aliasTable);
6563
}
6664
querySQL.append(" WHERE ");
67-
if (expression != null) {
68-
querySQL.append(expression);
65+
if (whereSQL != null) {
66+
querySQL.append(whereSQL);
6967
} else {
7068
querySQL.append(" 1=1 ");
7169
}
@@ -77,15 +75,15 @@ private List<Object> loadUpdateRowParamList() {
7775
List<Object> params = new ArrayList<>();
7876
String nativeSQL = this.executeState.getSql();
7977

80-
int whereIndex = nativeSQL.toLowerCase().indexOf(" where ");
78+
int whereIndex = nativeSQL.toUpperCase().indexOf(" WHERE ");
8179
String beforeSQL;
8280
if (whereIndex > 0) {
8381
beforeSQL = nativeSQL.substring(0, whereIndex);
8482
} else {
8583
beforeSQL = nativeSQL;
8684
}
8785

88-
int paramsSize = SQLParamUtils.paramsCount(beforeSQL);
86+
int paramsSize = SQLUtils.paramsCount(beforeSQL);
8987

9088
List<Object> paramsList = this.executeState.getListParams();
9189
for (int i = 0; i < paramsList.size(); i++) {
@@ -97,15 +95,14 @@ private List<Object> loadUpdateRowParamList() {
9795
}
9896

9997

100-
@Override
10198
public List<DBEvent> loadEvents(Object result) throws SQLException {
10299
List<DBEvent> eventList = new ArrayList<>();
103-
if (SQLParamUtils.isNotUpdatedRows(result)) {
100+
if (ResultSetUtils.isNotUpdatedRows(result)) {
104101
return eventList;
105102
}
106103
for (Map<String, Object> params : this.prepareList) {
107104
String jdbcUrl = this.executeState.getJdbcUrl();
108-
DBEvent event = new DBEvent(jdbcUrl, this.table.getName(), EventType.DELETE);
105+
DBEvent event = new DBEvent(jdbcUrl, this.dbTable.getName(), EventType.DELETE);
109106
for (String key : params.keySet()) {
110107
DbColumn dbColumn = dbTable.getColumnByName(key);
111108
if (dbColumn != null) {

0 commit comments

Comments
 (0)