Back to home page

OSCL-LXR

 
 

    


0001 -- Tests EXISTS subquery support. Tests Exists subquery
0002 -- used in Joins (Both when joins occurs in outer and suquery blocks)
0003 
0004 -- There are 2 dimensions we want to test
0005 --  1. run with broadcast hash join, sort merge join or shuffle hash join.
0006 --  2. run with whole-stage-codegen, operator codegen or no codegen.
0007 
0008 --CONFIG_DIM1 spark.sql.autoBroadcastJoinThreshold=10485760
0009 --CONFIG_DIM1 spark.sql.autoBroadcastJoinThreshold=-1,spark.sql.join.preferSortMergeJoin=true
0010 --CONFIG_DIM1 spark.sql.autoBroadcastJoinThreshold=-1,spark.sql.join.preferSortMergeJoin=false
0011 
0012 --CONFIG_DIM2 spark.sql.codegen.wholeStage=true
0013 --CONFIG_DIM2 spark.sql.codegen.wholeStage=false,spark.sql.codegen.factoryMode=CODEGEN_ONLY
0014 --CONFIG_DIM2 spark.sql.codegen.wholeStage=false,spark.sql.codegen.factoryMode=NO_CODEGEN
0015 
0016 CREATE TEMPORARY VIEW EMP AS SELECT * FROM VALUES
0017   (100, "emp 1", date "2005-01-01", 100.00D, 10),
0018   (100, "emp 1", date "2005-01-01", 100.00D, 10),
0019   (200, "emp 2", date "2003-01-01", 200.00D, 10),
0020   (300, "emp 3", date "2002-01-01", 300.00D, 20),
0021   (400, "emp 4", date "2005-01-01", 400.00D, 30),
0022   (500, "emp 5", date "2001-01-01", 400.00D, NULL),
0023   (600, "emp 6 - no dept", date "2001-01-01", 400.00D, 100),
0024   (700, "emp 7", date "2010-01-01", 400.00D, 100),
0025   (800, "emp 8", date "2016-01-01", 150.00D, 70)
0026 AS EMP(id, emp_name, hiredate, salary, dept_id);
0027 
0028 CREATE TEMPORARY VIEW DEPT AS SELECT * FROM VALUES
0029   (10, "dept 1", "CA"),
0030   (20, "dept 2", "NY"),
0031   (30, "dept 3", "TX"),
0032   (40, "dept 4 - unassigned", "OR"),
0033   (50, "dept 5 - unassigned", "NJ"),
0034   (70, "dept 7", "FL")
0035 AS DEPT(dept_id, dept_name, state);
0036 
0037 CREATE TEMPORARY VIEW BONUS AS SELECT * FROM VALUES
0038   ("emp 1", 10.00D),
0039   ("emp 1", 20.00D),
0040   ("emp 2", 300.00D),
0041   ("emp 2", 100.00D),
0042   ("emp 3", 300.00D),
0043   ("emp 4", 100.00D),
0044   ("emp 5", 1000.00D),
0045   ("emp 6 - no dept", 500.00D)
0046 AS BONUS(emp_name, bonus_amt);
0047 
0048 -- Join in outer query block
0049 -- TC.01.01
0050 SELECT * 
0051 FROM   emp, 
0052        dept 
0053 WHERE  emp.dept_id = dept.dept_id 
0054        AND EXISTS (SELECT * 
0055                    FROM   bonus 
0056                    WHERE  bonus.emp_name = emp.emp_name); 
0057 
0058 -- Join in outer query block with ON condition 
0059 -- TC.01.02
0060 SELECT * 
0061 FROM   emp 
0062        JOIN dept 
0063          ON emp.dept_id = dept.dept_id 
0064 WHERE  EXISTS (SELECT * 
0065                FROM   bonus 
0066                WHERE  bonus.emp_name = emp.emp_name);
0067 
0068 -- Left join in outer query block with ON condition 
0069 -- TC.01.03
0070 SELECT * 
0071 FROM   emp 
0072        LEFT JOIN dept 
0073               ON emp.dept_id = dept.dept_id 
0074 WHERE  EXISTS (SELECT * 
0075                FROM   bonus 
0076                WHERE  bonus.emp_name = emp.emp_name); 
0077 
0078 -- Join in outer query block + NOT EXISTS
0079 -- TC.01.04
0080 SELECT * 
0081 FROM   emp, 
0082        dept 
0083 WHERE  emp.dept_id = dept.dept_id 
0084        AND NOT EXISTS (SELECT * 
0085                        FROM   bonus 
0086                        WHERE  bonus.emp_name = emp.emp_name); 
0087 
0088 
0089 -- inner join in subquery.
0090 -- TC.01.05
0091 SELECT * 
0092 FROM   bonus 
0093 WHERE  EXISTS (SELECT * 
0094                  FROM   emp 
0095                         JOIN dept 
0096                           ON dept.dept_id = emp.dept_id 
0097                  WHERE  bonus.emp_name = emp.emp_name); 
0098 
0099 -- right join in subquery
0100 -- TC.01.06
0101 SELECT * 
0102 FROM   bonus 
0103 WHERE  EXISTS (SELECT * 
0104                  FROM   emp 
0105                         RIGHT JOIN dept 
0106                                 ON dept.dept_id = emp.dept_id 
0107                  WHERE  bonus.emp_name = emp.emp_name); 
0108 
0109 
0110 -- Aggregation and join in subquery
0111 -- TC.01.07
0112 SELECT * 
0113 FROM   bonus 
0114 WHERE  EXISTS (SELECT dept.dept_id, 
0115                         emp.emp_name, 
0116                         Max(salary), 
0117                         Count(*) 
0118                  FROM   emp 
0119                         JOIN dept 
0120                           ON dept.dept_id = emp.dept_id 
0121                  WHERE  bonus.emp_name = emp.emp_name 
0122                  GROUP  BY dept.dept_id, 
0123                            emp.emp_name 
0124                  ORDER  BY emp.emp_name);
0125 
0126 -- Aggregations in outer and subquery + join in subquery
0127 -- TC.01.08
0128 SELECT emp_name, 
0129        Sum(bonus_amt) 
0130 FROM   bonus 
0131 WHERE  EXISTS (SELECT emp_name, 
0132                         Max(salary) 
0133                  FROM   emp 
0134                         JOIN dept 
0135                           ON dept.dept_id = emp.dept_id 
0136                  WHERE  bonus.emp_name = emp.emp_name 
0137                  GROUP  BY emp_name 
0138                  HAVING Count(*) > 1 
0139                  ORDER  BY emp_name)
0140 GROUP  BY emp_name; 
0141 
0142 -- TC.01.09
0143 SELECT emp_name, 
0144        Sum(bonus_amt) 
0145 FROM   bonus 
0146 WHERE  NOT EXISTS (SELECT emp_name, 
0147                           Max(salary) 
0148                    FROM   emp 
0149                           JOIN dept 
0150                             ON dept.dept_id = emp.dept_id 
0151                    WHERE  bonus.emp_name = emp.emp_name 
0152                    GROUP  BY emp_name 
0153                    HAVING Count(*) > 1 
0154                    ORDER  BY emp_name) 
0155 GROUP  BY emp_name;
0156 
0157 -- Set operations along with EXISTS subquery
0158 -- union
0159 -- TC.02.01 
0160 SELECT * 
0161 FROM   emp 
0162 WHERE  EXISTS (SELECT * 
0163                FROM   dept 
0164                WHERE  dept_id < 30 
0165                UNION 
0166                SELECT * 
0167                FROM   dept 
0168                WHERE  dept_id >= 30 
0169                       AND dept_id <= 50); 
0170 
0171 -- intersect 
0172 -- TC.02.02 
0173 SELECT * 
0174 FROM   emp 
0175 WHERE  EXISTS (SELECT * 
0176                  FROM   dept 
0177                  WHERE  dept_id < 30 
0178                  INTERSECT 
0179                  SELECT * 
0180                  FROM   dept 
0181                  WHERE  dept_id >= 30 
0182                         AND dept_id <= 50);
0183 
0184 -- intersect + not exists 
0185 -- TC.02.03                
0186 SELECT * 
0187 FROM   emp 
0188 WHERE  NOT EXISTS (SELECT * 
0189                      FROM   dept 
0190                      WHERE  dept_id < 30 
0191                      INTERSECT 
0192                      SELECT * 
0193                      FROM   dept 
0194                      WHERE  dept_id >= 30 
0195                             AND dept_id <= 50); 
0196 
0197 -- Union all in outer query and except,intersect in subqueries. 
0198 -- TC.02.04       
0199 SELECT * 
0200 FROM   emp 
0201 WHERE  EXISTS (SELECT * 
0202                  FROM   dept 
0203                  EXCEPT 
0204                  SELECT * 
0205                  FROM   dept 
0206                  WHERE  dept_id > 50)
0207 UNION ALL 
0208 SELECT * 
0209 FROM   emp 
0210 WHERE  EXISTS (SELECT * 
0211                  FROM   dept 
0212                  WHERE  dept_id < 30 
0213                  INTERSECT 
0214                  SELECT * 
0215                  FROM   dept 
0216                  WHERE  dept_id >= 30 
0217                         AND dept_id <= 50);
0218 
0219 -- Union in outer query and except,intersect in subqueries. 
0220 -- TC.02.05       
0221 SELECT * 
0222 FROM   emp 
0223 WHERE  EXISTS (SELECT * 
0224                  FROM   dept 
0225                  EXCEPT 
0226                  SELECT * 
0227                  FROM   dept 
0228                  WHERE  dept_id > 50)
0229 UNION
0230 SELECT * 
0231 FROM   emp 
0232 WHERE  EXISTS (SELECT * 
0233                  FROM   dept 
0234                  WHERE  dept_id < 30 
0235                  INTERSECT 
0236                  SELECT * 
0237                  FROM   dept 
0238                  WHERE  dept_id >= 30 
0239                         AND dept_id <= 50);
0240