| ==== |
| ---- QUERY |
| # Also see related tests in spilling-naaj-no-deny-reservation.test |
| # |
| # ======================================================================================= |
| # NAAJ QUERY 2: many probe rows with NULLs in the join key. |
| # ======================================================================================= |
| # This produces the same results as: |
| # select l_orderkey, l_partkey, l_suppkey, l_linenumber |
| # from lineitem |
| # where l_orderkey % 2 = 1 and l_partkey not in ( |
| # select p_partkey |
| # from part |
| # where p_retailprice != l_extendedprice * l_tax) |
| # order by 1,2,3,4 limit 5 |
| # |
| # Which produces the same results as: |
| # select l_orderkey, l_partkey, l_suppkey, l_linenumber |
| # from lineitem |
| # join part on l_partkey = p_partkey |
| # where l_orderkey % 2 = 1 and p_retailprice = l_extendedprice * l_tax |
| # order by 1,2,3,4 limit 5 |
| # |
| set buffer_pool_limit=90m; |
| select l_orderkey, l_partkey, l_suppkey, l_linenumber |
| from lineitem |
| where if(l_orderkey % 2 = 0, NULL, l_partkey) not in ( |
| select p_partkey |
| from part |
| where p_retailprice != l_extendedprice * l_tax) |
| order by 1,2,3,4 limit 5 |
| ---- RESULTS |
| 965,107207,9718,1 |
| 1351,107227,7228,1 |
| 1505,122702,5215,2 |
| 1601,174374,1926,2 |
| 1767,22387,4890,4 |
| ---- TYPES |
| BIGINT,BIGINT,BIGINT,INT |
| ==== |
| ---- QUERY |
| # Execute NAAJ query 2 in-memory only without enough memory to complete. |
| set scratch_limit=0; |
| set buffer_pool_limit=90m; |
| select l_orderkey, l_partkey, l_suppkey, l_linenumber |
| from lineitem |
| where if(l_orderkey % 2 = 0, NULL, l_partkey) not in ( |
| select p_partkey |
| from part |
| where p_retailprice != l_extendedprice * l_tax) |
| order by 1,2,3,4 limit 5 |
| ---- CATCH |
| Could not free memory by spilling to disk: scratch_limit is 0 |
| ==== |
| ---- QUERY |
| # ======================================================================================= |
| # NAAJ QUERY 3: many non-NULL probe rows that didn't match a build row. |
| # ======================================================================================= |
| # The correlated subquery includes a NULL when l_extended_price * l_tax != p_retailprice |
| # and all the even p_partkey values except 2. Thus this query returns the same results: |
| # |
| # select l_orderkey, l_partkey, l_suppkey, l_linenumber |
| # from lineitem |
| # join part on l_extendedprice * l_tax = p_retailprice |
| # where p_partkey = 2 and l_partkey % 2 = 1 |
| # order by 1,2,3,4 |
| # |
| set buffer_pool_limit=90m; |
| select l_orderkey, l_partkey, l_suppkey, l_linenumber |
| from lineitem |
| where l_partkey not in ( |
| select if(p_partkey = 2, NULL, p_partkey) |
| from part |
| where p_partkey % 2 = 0 and p_retailprice != l_extendedprice * l_tax) |
| order by 1,2,3,4 |
| ---- RESULTS |
| 3178597,1001,3502,1 |
| 4801283,199001,9002,1 |
| 4958784,116009,1032,2 |
| ---- TYPES |
| BIGINT,BIGINT,BIGINT,INT |
| ==== |
| ---- QUERY |
| # ======================================================================================= |
| # NAAJ QUERY 4: many of both kinds of probe rows (NULL and non-NULL/unmatched) |
| # ======================================================================================= |
| # This returns one less row than the previous query because l_partkey=116009 is |
| # replaced with a NULL. |
| set buffer_pool_limit=90m; |
| select l_orderkey, l_partkey, l_suppkey, l_linenumber |
| from lineitem |
| where if(l_partkey % 5 != 1, NULL, l_partkey) not in ( |
| select if(p_partkey = 2, NULL, p_partkey) |
| from part |
| where p_partkey % 2 = 0 and p_retailprice != l_extendedprice * l_tax) |
| order by 1,2,3,4 |
| ---- RESULTS |
| 3178597,1001,3502,1 |
| 4801283,199001,9002,1 |
| ---- TYPES |
| BIGINT,BIGINT,BIGINT,INT |
| ==== |