Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
/.project
/bin
/.DS_Store
/.idea
halodal.iml
4 changes: 4 additions & 0 deletions src/main/java/halo/dal/DALCurrentStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
*/
public class DALCurrentStatus {

public static final String DEFAULT_DS_KEY="default_ds";

private static final ThreadLocal<String> dsKeyTL = new ThreadLocal<String>();

private static final ThreadLocal<DALCustomInfo> dalCustomInfoTL = new ThreadLocal<DALCustomInfo>();
Expand All @@ -20,6 +22,8 @@ public static void setDsKey(String dsKey) {
dsKeyTL.set(dsKey);
}

public static void setDefaultDsKey(){ dsKeyTL.set(DEFAULT_DS_KEY);}

public static String getDsKey() {
String key = dsKeyTL.get();
if (key == null) {
Expand Down
1 change: 1 addition & 0 deletions src/main/java/halo/dal/DALFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public void setPartitionParserFactory(
this.partitionParserFactory = partitionParserFactory;
}


public PartitionParserFactory getPartitionParserFactory() {
return partitionParserFactory;
}
Expand Down
17 changes: 15 additions & 2 deletions src/main/java/halo/dal/analysis/ColumnExper.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package halo.dal.analysis;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

public class ColumnExper {

private String column;
Expand All @@ -15,7 +18,9 @@ public class ColumnExper {
"!=",//
">",//
"<",//
"=" //
"=" ,//
"=<",// 等价于 <=
"in" // 等价于 =
};

public static final SQLExpressionSymbol[] symbolsEnum = new SQLExpressionSymbol[] {//
Expand All @@ -25,7 +30,9 @@ public class ColumnExper {
SQLExpressionSymbol.NOT_EQUAL2, //
SQLExpressionSymbol.BIGGER,//
SQLExpressionSymbol.SMALLER, //
SQLExpressionSymbol.EQUAL //
SQLExpressionSymbol.EQUAL, //
SQLExpressionSymbol.SMALLER_EQUAL,//
SQLExpressionSymbol.EQUAL,//
};

/**
Expand Down Expand Up @@ -117,4 +124,10 @@ public void setColumn(String column) {
this.column = null;
}
}

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}

}
8 changes: 8 additions & 0 deletions src/main/java/halo/dal/analysis/SQLExpression.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package halo.dal.analysis;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

public class SQLExpression {

private String column;
Expand Down Expand Up @@ -31,4 +34,9 @@ public void setColumn(String column) {
public void setValue(Object value) {
this.value = value;
}

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
8 changes: 8 additions & 0 deletions src/main/java/halo/dal/analysis/SQLInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,12 @@ public interface SQLInfo {
* @param sqlExpression
*/
void addSQLExpression(String logicTableName, SQLExpression sqlExpression);

/**
* 获取操作类型 (读写分离的时候可以用)
*
* @return
*/
SQLType getSQLType();

}
28 changes: 28 additions & 0 deletions src/main/java/halo/dal/analysis/SQLStruct.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package halo.dal.analysis;

import halo.dal.analysis.antlr.AntlrParserDelegate;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
Expand All @@ -17,6 +21,8 @@ public class SQLStruct {
*/
private boolean canParse;

private SQLType sqlType=null;

private Map<String, String> alias_nameMap = new HashMap<String, String>(2);

private Map<String, String> name_aliasMap = new HashMap<String, String>(2);
Expand Down Expand Up @@ -70,6 +76,23 @@ public void addTable(String name, String alias) {
}
}

public void setSqlType(int flag){
if(flag== AntlrParserDelegate.SQLOP_INSERT){
sqlType=SQLType.INSERT;
}else if(flag== AntlrParserDelegate.SQLOP_DELETE){
sqlType=SQLType.DELETE;
}else if(flag== AntlrParserDelegate.SQLOP_UPDATE){
sqlType=SQLType.UPDATE;
}else if(flag== AntlrParserDelegate.SQLOP_SELECT){
sqlType=SQLType.SELECT;
}
}

public SQLType getSqlType(){
return sqlType;
}


public boolean isCanParse() {
return canParse;
}
Expand All @@ -89,4 +112,9 @@ public String getTableNameByAalias(String alias) {
public List<String> getTableNames() {
return tableNames;
}

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
8 changes: 8 additions & 0 deletions src/main/java/halo/dal/analysis/SQLType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package halo.dal.analysis;

/**
* Created by zhouxiliang on 2015/10/22.
*/
public enum SQLType {
INSERT , DELETE , UPDATE , SELECT;
}
18 changes: 18 additions & 0 deletions src/main/java/halo/dal/analysis/antlr/SQLInfoImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import halo.dal.analysis.SQLExpression;
import halo.dal.analysis.SQLInfo;
import halo.dal.analysis.SQLType;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import java.util.ArrayList;
import java.util.HashMap;
Expand All @@ -14,6 +17,8 @@ public class SQLInfoImpl implements SQLInfo {

private final Map<String, String> logic_realMap = new HashMap<String, String>();

private SQLType sqlType;

public SQLExpression[] getSQLExpressions(String columnName) {
String lowerColumnName = columnName.toLowerCase();
SQLExpression[] lowerArr = sqlExpressionMap.get(lowerColumnName);
Expand Down Expand Up @@ -71,11 +76,24 @@ public void addSQLExpression(String logicTableName,
}
}

public SQLType getSQLType() {
return sqlType;
}

public void setSQLType(SQLType type) {
this.sqlType=type;
}

public String getRealTable(String logic) {
return logic_realMap.get(logic);
}

public void setRealTable(String logic, String real) {
logic_realMap.put(logic, real);
}

@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
25 changes: 25 additions & 0 deletions src/main/java/halo/dal/analysis/antlr/v3/AntlrV3SQLAnalyzer.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public SQLInfo analyse(String sql, SQLStruct sqlStruct, Object[] values,
info.addSQLExpression(o.getLogicTableName(), sqlExpression);
i++;
}
info.setSQLType(sqlStruct.getSqlType());
return info;
}

Expand Down Expand Up @@ -71,6 +72,8 @@ public SQLStruct parse(String sql, Map<String, Object> context) {
columnExper.setSqlExpressionSymbol(colExpr.getOp());
sqlStruct.addColumnExper(columnExper);
}
//设置sql操作类型
sqlStruct.setSqlType(delegate.getSqlOp());
return sqlStruct;
}

Expand Down Expand Up @@ -117,4 +120,26 @@ public String outPutSQL(String sql, SQLStruct sqlStruct, SQLInfo sqlInfo,
}
return _sql;
}

public static void main(String[] args) {
AntlrV3SQLAnalyzer antlrV3SQLAnalyzer=new AntlrV3SQLAnalyzer();
String sql="insert into table ( id ,name ) values ( ? ,?) ";
String sql1="update table set id = ? ,name=? where cnt = ?";
String sql2="delete * from table where cnt = ?";
String sql3="select * from table where cnt = ?";
String sql4="update user set 1 =1 where uid=? and (age>=? or age<=?) and (sex between ? and ?) and time<=sysdate()";
String sql5= "select gatewayeve0_.ID as ID1_, gatewayeve0_.ADAPTER_ID as ADAPTER2_1_, "
+ "gatewayeve0_.ADAPTER_MEMO as ADAPTER3_1_, gatewayeve0_.ADAPTER_NAME as ADAPTER4_1_, "
+ "gatewayeve0_.CREATETIME as CREATETIME1_, gatewayeve0_.END_DATE as END6_1_, "
+ "gatewayeve0_.EVENT_ID as EVENT7_1_, gatewayeve0_.EVENT_STATUS as EVENT8_1_, "
+ "gatewayeve0_.EVENT_TYPE as EVENT9_1_, gatewayeve0_.LASTUPDTIME as LASTUPD10_1_, "
+ "gatewayeve0_.MERCHANT_ID as MERCHANT11_1_, gatewayeve0_.MERCHANT_NAME as MERCHANT12_1_, "
+ "gatewayeve0_.NAME as NAME1_, gatewayeve0_.OPRID as OPRID1_, "
+ "gatewayeve0_.START_DATE as START15_1_ "
+ "from gateway_event gatewayeve0_ "
+ "where 1=1 and gatewayeve0_.EVENT_STATUS=?";
SQLStruct sqlStruct=antlrV3SQLAnalyzer.parse(sql4,null);
System.out.println(sqlStruct);
System.out.println(sqlStruct.getColumnExpers().size());
}
}
Loading