@@ -6221,8 +6221,142 @@ void testIssue2242SubSelectLookAhead() throws JSQLParserException {
62216221 + " ON CONFLICT (id) DO UPDATE\n "
62226222 + " SET col4 = ?, col5 = ?, col6 = ?" ;
62236223 Statement statement = CCJSqlParserUtil .parse (sqlStr );
6224- System .out .println (statement .toString ());
62256224 Insert insert = (Insert ) statement ;
62266225 Assertions .assertEquals ("foo" , insert .getTable ().toString ());
62276226 }
6227+
6228+ @ Test
6229+ void testIssue2255 () throws JSQLParserException {
6230+ String sqlStr = "select\n "
6231+ + " sum(if(log.\" output\" = 'SUCCESS', 1, 0)) success_req_num\n "
6232+ + "from mysql_kt_plan.daily_cvmapi_runinstance_log log" ;
6233+ CCJSqlParserUtil .parse (sqlStr );
6234+ }
6235+
6236+ @ Test
6237+ void testIssue2257 () throws JSQLParserException {
6238+ String sqlStr = "SELECT sum(iif(diff = 7, lc_lv, 0)) AS lc_7\n "
6239+ + "FROM ( SELECT a.day\n "
6240+ + " , a.channel_type\n "
6241+ + " , a.username\n "
6242+ + " , a.diff\n "
6243+ + " , a.cnt\n "
6244+ + " , lc\n "
6245+ + " , Cast( lc / cnt AS DECIMAL (38, 4) ) AS lc_lv\n "
6246+ + " FROM ( SELECT a.day\n "
6247+ + " , a.channel_type\n "
6248+ + " , a.username\n "
6249+ + " , Datediff( b.day, a.day )\n "
6250+ + " + 1 AS diff\n "
6251+ + " , cnt\n "
6252+ + " , Count( DISTINCT b.user_id ) AS lc\n "
6253+ + " FROM ( SELECT a.day\n "
6254+ + " , a.user_id\n "
6255+ + " , channel_id channel_type\n "
6256+ + " , adtrace_adgroup_id AS username\n "
6257+ + " FROM ( SELECT day\n "
6258+ + " , a.user_id\n "
6259+ + " , last_login_channel_id AS channel_id\n "
6260+ + " , last_adtrace_adgroup_id AS adtrace_adgroup_id\n "
6261+ + " FROM ( SELECT day\n "
6262+ + " , user_id\n "
6263+ + " , yidevice\n "
6264+ + " FROM ( SELECT day\n "
6265+ + " , user_id\n "
6266+ + " , yidevice\n "
6267+ + " , Row_Number( )\n "
6268+ + " OVER (PARTITION BY day, user_id ORDER BY event_time) AS rk\n "
6269+ + " FROM dwd_table.event_pj\n "
6270+ + " WHERE day BETWEEN '2025-05-30'\n "
6271+ + " AND '2025-06-06'\n "
6272+ + " AND event_id = 'device_login'\n "
6273+ + " AND yidevice IS NOT NULL\n "
6274+ + " AND yidevice != '' ) a\n "
6275+ + " WHERE rk = 1 ) a\n "
6276+ + " LEFT JOIN ( SELECT DISTINCT\n "
6277+ + " From_Unixtime( Cast( ( Cast( last_adtrace_time AS BIGINT ) + 28800000 ) / 1000 AS BIGINT ), 'yyyy-MM-dd' ) AS last_adtrace_dt\n "
6278+ + " , yidevice\n "
6279+ + " , last_login_channel_id\n "
6280+ + " , last_adtrace_adgroup_id\n "
6281+ + " , last_adtrace_creative_id\n "
6282+ + " FROM dwd_user.yidevice_pj\n "
6283+ + " WHERE Cast( adtrace_reattributed_times AS INT ) > 0\n "
6284+ + " AND Datediff( From_Unixtime( Cast( ( Cast( last_adtrace_time AS BIGINT ) + 28800000 ) / 1000 AS BIGINT ), 'yyyy-MM-dd' ), create_date ) >= 30\n "
6285+ + " AND From_Unixtime( Cast( ( Cast( last_adtrace_time AS BIGINT ) + 28800000 ) / 1000 AS BIGINT ), 'yyyy-MM-dd' ) BETWEEN '2025-05-30'\n "
6286+ + " AND '2025-06-06' ) b\n "
6287+ + " ON a.day = b.last_adtrace_dt\n "
6288+ + " AND a.yidevice = b.yidevice ) a ) a\n "
6289+ + " LEFT JOIN ( SELECT day\n "
6290+ + " , user_id\n "
6291+ + " FROM dwd_table.event_pj\n "
6292+ + " WHERE day BETWEEN '2025-05-30'\n "
6293+ + " AND '2025-06-06'\n "
6294+ + " AND event_id = 'login'\n "
6295+ + " GROUP BY day\n "
6296+ + " , user_id ) b\n "
6297+ + " ON a.user_id = b.user_id\n "
6298+ + " LEFT JOIN ( SELECT a.day\n "
6299+ + " , channel_type\n "
6300+ + " , username\n "
6301+ + " , Count( DISTINCT a.user_id ) AS cnt\n "
6302+ + " FROM ( SELECT a.day\n "
6303+ + " , a.user_id\n "
6304+ + " , channel_id AS channel_type\n "
6305+ + " , adtrace_adgroup_id username\n "
6306+ + " FROM ( SELECT day\n "
6307+ + " , a.user_id\n "
6308+ + " , last_login_channel_id AS channel_id\n "
6309+ + " , last_adtrace_adgroup_id AS adtrace_adgroup_id\n "
6310+ + " FROM ( SELECT day\n "
6311+ + " , user_id\n "
6312+ + " , yidevice\n "
6313+ + " FROM ( SELECT day\n "
6314+ + " , user_id\n "
6315+ + " , yidevice\n "
6316+ + " , Row_Number( )\n "
6317+ + " OVER (PARTITION BY day, user_id ORDER BY event_time) AS rk\n "
6318+ + " FROM dwd_table.event_pj\n "
6319+ + " WHERE day BETWEEN '2025-05-30'\n "
6320+ + " AND '2025-06-06'\n "
6321+ + " AND event_id = 'device_login'\n "
6322+ + " AND yidevice IS NOT NULL\n "
6323+ + " AND yidevice != '' ) a\n "
6324+ + " WHERE rk = 1 ) a\n "
6325+ + " LEFT JOIN ( SELECT DISTINCT\n "
6326+ + " From_Unixtime( Cast( ( Cast( last_adtrace_time AS BIGINT ) + 28800000 ) / 1000 AS BIGINT ), 'yyyy-MM-dd' ) AS last_adtrace_dt\n "
6327+ + " , yidevice\n "
6328+ + " , last_login_channel_id\n "
6329+ + " , last_adtrace_adgroup_id\n "
6330+ + " , last_adtrace_creative_id\n "
6331+ + " FROM dwd_user.yidevice_pj\n "
6332+ + " WHERE Cast( adtrace_reattributed_times AS INT ) > 0\n "
6333+ + " AND Datediff( From_Unixtime( Cast( ( Cast( last_adtrace_time AS BIGINT ) + 28800000 ) / 1000 AS BIGINT ), 'yyyy-MM-dd' ), create_date ) >= 30\n "
6334+ + " AND From_Unixtime( Cast( ( Cast( last_adtrace_time AS BIGINT ) + 28800000 ) / 1000 AS BIGINT ), 'yyyy-MM-dd' ) BETWEEN '2025-05-30'\n "
6335+ + " AND '2025-06-06' ) b\n "
6336+ + " ON a.day = b.last_adtrace_dt\n "
6337+ + " AND a.yidevice = b.yidevice ) a ) a\n "
6338+ + " GROUP BY a.day\n "
6339+ + " , channel_type\n "
6340+ + " , username ) c\n "
6341+ + " ON a.day = c.day\n "
6342+ + " AND a.channel_type = c.channel_type\n "
6343+ + " AND a.username = c.username\n "
6344+ + " GROUP BY a.day\n "
6345+ + " , a.channel_type\n "
6346+ + " , a.username\n "
6347+ + " , diff\n "
6348+ + " , cnt ) a\n "
6349+ + " WHERE diff > 1\n "
6350+ + " AND diff <= 7 ) a\n "
6351+ + "GROUP BY username\n "
6352+ + " , channel_type\n "
6353+ + " , day\n "
6354+ + " , cnt\n "
6355+ + "ORDER BY username DESC\n "
6356+ + " , channel_type\n "
6357+ + " , day DESC\n "
6358+ + ";" ;
6359+ TestUtils .assertSqlCanBeParsedAndDeparsed (
6360+ sqlStr , true , parser -> parser .withAllowComplexParsing (true ));
6361+ }
62286362}
0 commit comments