add testcase for #3952

This commit is contained in:
高铁
2020-10-06 11:28:46 +08:00
parent ad8d37cd4a
commit 4bca77b347
@@ -0,0 +1,52 @@
package com.alibaba.druid.bvt.bug;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
import com.alibaba.druid.util.JdbcConstants;
import junit.framework.TestCase;
import java.util.List;
public class Issue3952 extends TestCase {
public void test_0() throws Exception {
String sql = "select\n" +
" d.id,\n" +
" b.contract_date as contractDate,\n" +
" d.contract_no,\n" +
" d.brand_code as brandCode,\n" +
" d.num,\n" +
" (SELECT COALESCE(sum(num1), 0) FROM tc_order_record WHERE tc_order_record.contract_no = d.contract_no) orderSumNum,\n" +
" (SELECT (COALESCE(d.num, 0) - COALESCE(sum(num1), 0)) FROM tc_order_record WHERE tc_order_record.contract_no = d.contract_no) avai\n" +
"from tc_contract_detail as d left join tc_contract_base b on d.contract_no = b.contract_no\n" +
"where b.data_transfer_flag = '3' and if('' != '', d.contract_no = '', 1 = 1)\n" +
" and if('' != '', d.brand_code = '', 1 = 1) and if(NULL != '', b.contract_date >= NULL, 1 = 1) and if(NULL != '', b.contract_date <= NULL, 1 = 1)\n" +
"order by b.contract_date desc, d.id desc\n" +
"limit 10";
SQLStatement stmt = SQLUtils.parseSingleMysqlStatement(sql);
assertEquals("select d.id, b.contract_date as contractDate, d.contract_no, d.brand_code as brandCode, d.num\n" +
"\t, (\n" +
"\t\tselect COALESCE(sum(num1), 0)\n" +
"\t\tfrom tc_order_record\n" +
"\t\twhere tc_order_record.contract_no = d.contract_no\n" +
"\t) as orderSumNum\n" +
"\t, (\n" +
"\t\tselect COALESCE(d.num, 0) - COALESCE(sum(num1), 0)\n" +
"\t\tfrom tc_order_record\n" +
"\t\twhere tc_order_record.contract_no = d.contract_no\n" +
"\t) as avai\n" +
"from tc_contract_detail d\n" +
"\tleft join tc_contract_base b on d.contract_no = b.contract_no\n" +
"where b.data_transfer_flag = '3'\n" +
"\tand if('' != '', d.contract_no = '', 1 = 1)\n" +
"\tand if('' != '', d.brand_code = '', 1 = 1)\n" +
"\tand if(null != '', b.contract_date >= null, 1 = 1)\n" +
"\tand if(null != '', b.contract_date <= null, 1 = 1)\n" +
"order by b.contract_date desc, d.id desc\n" +
"limit 10", stmt.toLowerCaseString());
}
}