@@ -2213,6 +2213,121 @@ public void lastCacheTest() {
22132213 repeatTest (sql , expectedHeader , retArray , DATABASE_NAME , 3 );
22142214 }
22152215
2216+ @ Test
2217+ public void asofJoinTest () {
2218+ expectedHeader = new String [] {"time" , "device" , "level" , "time" , "device" , "level" };
2219+ retArray =
2220+ new String [] {
2221+ "1971-01-01T00:00:00.000Z,d1,l1,1970-01-01T00:00:00.100Z,d1,l5," ,
2222+ "1971-01-01T00:01:40.000Z,d1,l1,1971-01-01T00:00:00.000Z,d1,l1," ,
2223+ "1971-01-01T00:01:40.000Z,d1,l1,1971-01-01T00:00:00.000Z,d999,null," ,
2224+ "1971-01-01T00:01:40.000Z,d1,l1,1971-01-01T00:00:00.000Z,null,l999," ,
2225+ "1970-01-01T00:00:00.020Z,d1,l2,1970-01-01T00:00:00.010Z,d11,l11," ,
2226+ "1971-01-01T00:00:00.100Z,d1,l2,1971-01-01T00:00:00.000Z,d1,l1," ,
2227+ "1971-01-01T00:00:00.100Z,d1,l2,1971-01-01T00:00:00.000Z,d999,null," ,
2228+ "1971-01-01T00:00:00.100Z,d1,l2,1971-01-01T00:00:00.000Z,null,l999," ,
2229+ "1971-04-26T17:46:40.000Z,d1,l2,1971-01-01T00:00:00.000Z,d1,l1," ,
2230+ "1971-04-26T17:46:40.000Z,d1,l2,1971-01-01T00:00:00.000Z,d999,null,"
2231+ };
2232+ // test single join condition
2233+ tableResultSetEqualTest (
2234+ "select table0.time,table0.device,table0.level,table1.time,table1.device,table1.level from table0 asof join table1 on "
2235+ + "table0.time>table1.time "
2236+ + "order by table0.device,table0.level,table0.time,table1.device,table1.level limit 10" ,
2237+ expectedHeader ,
2238+ retArray ,
2239+ DATABASE_NAME );
2240+ // test expr and '>=' in ASOF condition
2241+ tableResultSetEqualTest (
2242+ "select table0.time,table0.device,table0.level,table1.time,table1.device,table1.level from table0 asof join table1 on "
2243+ + "table0.time>=table1.time+1 "
2244+ + "order by table0.device,table0.level,table0.time,table1.device,table1.level limit 10" ,
2245+ expectedHeader ,
2246+ retArray ,
2247+ DATABASE_NAME );
2248+
2249+ retArray =
2250+ new String [] {
2251+ "1971-01-01T00:00:00.000Z,d1,l1,1970-01-01T00:00:00.000Z,d1,l1," ,
2252+ "1971-01-01T00:01:40.000Z,d1,l1,1971-01-01T00:00:00.000Z,d1,l1," ,
2253+ "1971-01-01T00:00:00.100Z,d1,l2,1970-01-01T00:00:00.020Z,d1,l2," ,
2254+ "1971-04-26T17:46:40.000Z,d1,l2,1970-01-01T00:00:00.020Z,d1,l2," ,
2255+ "1971-01-01T00:00:00.500Z,d1,l3,1970-01-01T00:00:00.040Z,d1,l3," ,
2256+ "1971-04-26T17:46:40.020Z,d1,l3,1970-01-01T00:00:00.040Z,d1,l3," ,
2257+ "1971-01-01T00:00:01.000Z,d1,l4,1970-01-01T00:00:00.080Z,d1,l4," ,
2258+ "1971-04-26T18:01:40.000Z,d1,l4,1970-01-01T00:00:00.080Z,d1,l4," ,
2259+ "1971-01-01T00:00:10.000Z,d1,l5,1970-01-01T00:00:00.100Z,d1,l5," ,
2260+ "1971-08-20T11:33:20.000Z,d1,l5,1970-01-01T00:00:00.100Z,d1,l5,"
2261+ };
2262+ // test multi join conditions
2263+ tableResultSetEqualTest (
2264+ "select table0.time,table0.device,table0.level,table1.time,table1.device,table1.level from table0 asof join table1 on "
2265+ + "table0.device=table1.device and table1.level=table0.level and table0.time>table1.time "
2266+ + "order by table0.device,table0.level,table0.time,table1.device,table1.level" ,
2267+ expectedHeader ,
2268+ retArray ,
2269+ DATABASE_NAME );
2270+ // test expr and '>=' in ASOF condition
2271+ tableResultSetEqualTest (
2272+ "select table0.time,table0.device,table0.level,table1.time,table1.device,table1.level from table0 asof join table1 on "
2273+ + "table0.device=table1.device and table1.level=table0.level and table0.time>=table1.time+1 "
2274+ + "order by table0.device,table0.level,table0.time,table1.device,table1.level" ,
2275+ expectedHeader ,
2276+ retArray ,
2277+ DATABASE_NAME );
2278+
2279+ retArray =
2280+ new String [] {
2281+ "1970-01-01T00:00:00.000Z,d1,l1,1970-01-01T00:00:00.010Z,d11,l11," ,
2282+ "1970-01-01T00:00:00.020Z,d1,l2,1970-01-01T00:00:00.030Z,d11,l11," ,
2283+ "1970-01-01T00:00:00.040Z,d1,l3,1970-01-01T00:00:00.080Z,d1,l4," ,
2284+ "1970-01-01T00:00:00.080Z,d1,l4,1970-01-01T00:00:00.100Z,d1,l5," ,
2285+ "1970-01-01T00:00:00.100Z,d1,l5,1971-01-01T00:00:00.000Z,d1,l1," ,
2286+ "1970-01-01T00:00:00.100Z,d1,l5,1971-01-01T00:00:00.000Z,d999,null," ,
2287+ "1970-01-01T00:00:00.100Z,d1,l5,1971-01-01T00:00:00.000Z,null,l999," ,
2288+ "1970-01-01T00:00:00.000Z,d2,l1,1970-01-01T00:00:00.010Z,d11,l11," ,
2289+ "1970-01-01T00:00:00.020Z,d2,l2,1970-01-01T00:00:00.030Z,d11,l11," ,
2290+ "1970-01-01T00:00:00.040Z,d2,l3,1970-01-01T00:00:00.080Z,d1,l4,"
2291+ };
2292+ // test single join condition
2293+ tableResultSetEqualTest (
2294+ "select table0.time,table0.device,table0.level,table1.time,table1.device,table1.level from table0 asof join table1 on "
2295+ + "table0.time<table1.time "
2296+ + "order by table0.device,table0.level,table0.time,table1.device,table1.level limit 10" ,
2297+ expectedHeader ,
2298+ retArray ,
2299+ DATABASE_NAME );
2300+ // test expr and '<=' in ASOF condition
2301+ tableResultSetEqualTest (
2302+ "select table0.time,table0.device,table0.level,table1.time,table1.device,table1.level from table0 asof join table1 on "
2303+ + "table0.time<=table1.time-1 "
2304+ + "order by table0.device,table0.level,table0.time,table1.device,table1.level limit 10" ,
2305+ expectedHeader ,
2306+ retArray ,
2307+ DATABASE_NAME );
2308+
2309+ retArray =
2310+ new String [] {
2311+ "1970-01-01T00:00:00.000Z,d1,l1,1971-01-01T00:00:00.000Z,d1,l1," ,
2312+ };
2313+ // test multi join conditions
2314+ tableResultSetEqualTest (
2315+ "select table0.time,table0.device,table0.level,table1.time,table1.device,table1.level from table0 asof join table1 on "
2316+ + "table0.device=table1.device and table1.level=table0.level and table0.time<table1.time "
2317+ + "order by table0.device,table0.level,table0.time,table1.device,table1.level" ,
2318+ expectedHeader ,
2319+ retArray ,
2320+ DATABASE_NAME );
2321+ // test expr and '>=' in ASOF condition
2322+ tableResultSetEqualTest (
2323+ "select table0.time,table0.device,table0.level,table1.time,table1.device,table1.level from table0 asof join table1 on "
2324+ + "table0.device=table1.device and table1.level=table0.level and table0.time<=table1.time-1 "
2325+ + "order by table0.device,table0.level,table0.time,table1.device,table1.level" ,
2326+ expectedHeader ,
2327+ retArray ,
2328+ DATABASE_NAME );
2329+ }
2330+
22162331 @ Test
22172332 public void exceptionTest () {
22182333 String errMsg = TSStatusCode .SEMANTIC_ERROR .getStatusCode () + ": " + ONLY_SUPPORT_EQUI_JOIN ;
0 commit comments