@@ -6221,8 +6221,142 @@ void testIssue2242SubSelectLookAhead() throws JSQLParserException {
6221
6221
+ " ON CONFLICT (id) DO UPDATE\n "
6222
6222
+ " SET col4 = ?, col5 = ?, col6 = ?" ;
6223
6223
Statement statement = CCJSqlParserUtil .parse (sqlStr );
6224
- System .out .println (statement .toString ());
6225
6224
Insert insert = (Insert ) statement ;
6226
6225
Assertions .assertEquals ("foo" , insert .getTable ().toString ());
6227
6226
}
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
+ }
6228
6362
}
0 commit comments