SqlParse BUG
陳sir 发布于77月前 3答/1524阅

SqlParse BUG

String exp=" select id as id, concat(id, '(', nickname, '|', ifnull(name, ' '), ')') as cn from op_user";
EovaExp se = new EovaExp(exp);

出来的结果是:

DS:main
SS:select id, concat(id, '(', nickname, '|', ifnull(name, ' '), ')')
SELECT:select id, concat(id, '(', nickname, '|', ifnull(name, ' '), ')')
FROM: from op_user
WHERE:
ORDER:null
PK:id
CN:

CN是空的

需要修改SqlParse.getExprName

/**
	 * 获取字段名
	 * 
	 * @param expr
	 * @return
	 */
	public static String getExprName(SQLExpr expr) {
		if (expr instanceof SQLPropertyExpr) {
			// 有别名
			return ((SQLPropertyExpr) expr).getName();
		} else if (expr instanceof SQLIdentifierExpr) {
			// 无别名
			return ((SQLIdentifierExpr) expr).getName();
		}else if(expr instanceof SQLMethodInvokeExpr){
			//函数表达式
			return ((SQLMethodInvokeExpr) expr).toString();
		}
		return expr.toString();
}

这样CN就是 concat(id, '(', nickname, '|', ifnull(name, ' '), ')')


[沙发] Jieven
@陳sir 有别名,无别名,函数表达式 分别支持那些语法,是否能提供测试用例
[地板] 陳sir
@Jieven 有别名 无别名 那两行代码是你的源代码....  我只加了个函数表达式的 。我提供的例子就是测试用例。
[地毯] 陳sir
@Jieven 那个SQLMethodInvokeExpr 是Druid的 理论上支持大部份函数。
提交评论
嘿,我来帮你!