Back to home page

OSCL-LXR

 
 

    


0001 -- This test file was converted from pivot.sql.
0002 
0003 -- Note some test cases have been commented as the current integrated UDFs cannot handle complex types
0004 
0005 create temporary view courseSales as select * from values
0006   ("dotNET", 2012, 10000),
0007   ("Java", 2012, 20000),
0008   ("dotNET", 2012, 5000),
0009   ("dotNET", 2013, 48000),
0010   ("Java", 2013, 30000)
0011   as courseSales(course, year, earnings);
0012 
0013 create temporary view years as select * from values
0014   (2012, 1),
0015   (2013, 2)
0016   as years(y, s);
0017 
0018 create temporary view yearsWithComplexTypes as select * from values
0019   (2012, array(1, 1), map('1', 1), struct(1, 'a')),
0020   (2013, array(2, 2), map('2', 2), struct(2, 'b'))
0021   as yearsWithComplexTypes(y, a, m, s);
0022 
0023 -- pivot courses
0024 SELECT * FROM (
0025   SELECT udf(year), course, earnings FROM courseSales
0026 )
0027 PIVOT (
0028   udf(sum(earnings))
0029   FOR course IN ('dotNET', 'Java')
0030 );
0031 
0032 -- pivot years with no subquery
0033 SELECT * FROM courseSales
0034 PIVOT (
0035   udf(sum(earnings))
0036   FOR year IN (2012, 2013)
0037 );
0038 
0039 -- pivot courses with multiple aggregations
0040 SELECT * FROM (
0041   SELECT year, course, earnings FROM courseSales
0042 )
0043 PIVOT (
0044   udf(sum(earnings)), udf(avg(earnings))
0045   FOR course IN ('dotNET', 'Java')
0046 );
0047 
0048 -- pivot with no group by column
0049 SELECT * FROM (
0050   SELECT udf(course) as course, earnings FROM courseSales
0051 )
0052 PIVOT (
0053   udf(sum(earnings))
0054   FOR course IN ('dotNET', 'Java')
0055 );
0056 
0057 -- pivot with no group by column and with multiple aggregations on different columns
0058 SELECT * FROM (
0059   SELECT year, course, earnings FROM courseSales
0060 )
0061 PIVOT (
0062   udf(sum(udf(earnings))), udf(min(year))
0063   FOR course IN ('dotNET', 'Java')
0064 );
0065 
0066 -- pivot on join query with multiple group by columns
0067 SELECT * FROM (
0068   SELECT course, year, earnings, udf(s) as s
0069   FROM courseSales
0070   JOIN years ON year = y
0071 )
0072 PIVOT (
0073   udf(sum(earnings))
0074   FOR s IN (1, 2)
0075 );
0076 
0077 -- pivot on join query with multiple aggregations on different columns
0078 SELECT * FROM (
0079   SELECT course, year, earnings, s
0080   FROM courseSales
0081   JOIN years ON year = y
0082 )
0083 PIVOT (
0084   udf(sum(earnings)), udf(min(s))
0085   FOR course IN ('dotNET', 'Java')
0086 );
0087 
0088 -- pivot on join query with multiple columns in one aggregation
0089 SELECT * FROM (
0090   SELECT course, year, earnings, s
0091   FROM courseSales
0092   JOIN years ON year = y
0093 )
0094 PIVOT (
0095   udf(sum(earnings * s))
0096   FOR course IN ('dotNET', 'Java')
0097 );
0098 
0099 -- pivot with aliases and projection
0100 SELECT 2012_s, 2013_s, 2012_a, 2013_a, c FROM (
0101   SELECT year y, course c, earnings e FROM courseSales
0102 )
0103 PIVOT (
0104   udf(sum(e)) s, udf(avg(e)) a
0105   FOR y IN (2012, 2013)
0106 );
0107 
0108 -- pivot with projection and value aliases
0109 SELECT firstYear_s, secondYear_s, firstYear_a, secondYear_a, c FROM (
0110   SELECT year y, course c, earnings e FROM courseSales
0111 )
0112 PIVOT (
0113   udf(sum(e)) s, udf(avg(e)) a
0114   FOR y IN (2012 as firstYear, 2013 secondYear)
0115 );
0116 
0117 -- pivot years with non-aggregate function
0118 SELECT * FROM courseSales
0119 PIVOT (
0120   udf(abs(earnings))
0121   FOR year IN (2012, 2013)
0122 );
0123 
0124 -- pivot with one of the expressions as non-aggregate function
0125 SELECT * FROM (
0126   SELECT year, course, earnings FROM courseSales
0127 )
0128 PIVOT (
0129   udf(sum(earnings)), year
0130   FOR course IN ('dotNET', 'Java')
0131 );
0132 
0133 -- pivot with unresolvable columns
0134 SELECT * FROM (
0135   SELECT course, earnings FROM courseSales
0136 )
0137 PIVOT (
0138   udf(sum(earnings))
0139   FOR year IN (2012, 2013)
0140 );
0141 
0142 -- pivot with complex aggregate expressions
0143 SELECT * FROM (
0144   SELECT year, course, earnings FROM courseSales
0145 )
0146 PIVOT (
0147   udf(ceil(udf(sum(earnings)))), avg(earnings) + 1 as a1
0148   FOR course IN ('dotNET', 'Java')
0149 );
0150 
0151 -- pivot with invalid arguments in aggregate expressions
0152 SELECT * FROM (
0153   SELECT year, course, earnings FROM courseSales
0154 )
0155 PIVOT (
0156   sum(udf(avg(earnings)))
0157   FOR course IN ('dotNET', 'Java')
0158 );
0159 
0160 -- pivot on multiple pivot columns
0161 SELECT * FROM (
0162   SELECT course, year, earnings, s
0163   FROM courseSales
0164   JOIN years ON year = y
0165 )
0166 PIVOT (
0167   udf(sum(earnings))
0168   FOR (course, year) IN (('dotNET', 2012), ('Java', 2013))
0169 );
0170 
0171 -- pivot on multiple pivot columns with aliased values
0172 SELECT * FROM (
0173   SELECT course, year, earnings, s
0174   FROM courseSales
0175   JOIN years ON year = y
0176 )
0177 PIVOT (
0178   udf(sum(earnings))
0179   FOR (course, s) IN (('dotNET', 2) as c1, ('Java', 1) as c2)
0180 );
0181 
0182 -- pivot on multiple pivot columns with values of wrong data types
0183 SELECT * FROM (
0184   SELECT course, year, earnings, s
0185   FROM courseSales
0186   JOIN years ON year = y
0187 )
0188 PIVOT (
0189   udf(sum(earnings))
0190   FOR (course, year) IN ('dotNET', 'Java')
0191 );
0192 
0193 -- pivot with unresolvable values
0194 SELECT * FROM courseSales
0195 PIVOT (
0196   udf(sum(earnings))
0197   FOR year IN (s, 2013)
0198 );
0199 
0200 -- pivot with non-literal values
0201 SELECT * FROM courseSales
0202 PIVOT (
0203   udf(sum(earnings))
0204   FOR year IN (course, 2013)
0205 );
0206 
0207 -- Complex type is not supported in the current UDF. Skipped for now.
0208 -- pivot on join query with columns of complex data types
0209 -- SELECT * FROM (
0210 --  SELECT course, year, a
0211 --  FROM courseSales
0212 --  JOIN yearsWithComplexTypes ON year = y
0213 --)
0214 --PIVOT (
0215 --  udf(min(a))
0216 --  FOR course IN ('dotNET', 'Java')
0217 --);
0218 
0219 -- Complex type is not supported in the current UDF. Skipped for now.
0220 -- pivot on multiple pivot columns with agg columns of complex data types
0221 -- SELECT * FROM (
0222 --  SELECT course, year, y, a
0223 --  FROM courseSales
0224 --  JOIN yearsWithComplexTypes ON year = y
0225 --)
0226 --PIVOT (
0227 --  udf(max(a))
0228 --  FOR (y, course) IN ((2012, 'dotNET'), (2013, 'Java'))
0229 --);
0230 
0231 -- pivot on pivot column of array type
0232 SELECT * FROM (
0233   SELECT earnings, year, a
0234   FROM courseSales
0235   JOIN yearsWithComplexTypes ON year = y
0236 )
0237 PIVOT (
0238   udf(sum(earnings))
0239   FOR a IN (array(1, 1), array(2, 2))
0240 );
0241 
0242 -- pivot on multiple pivot columns containing array type
0243 SELECT * FROM (
0244   SELECT course, earnings, udf(year) as year, a
0245   FROM courseSales
0246   JOIN yearsWithComplexTypes ON year = y
0247 )
0248 PIVOT (
0249   udf(sum(earnings))
0250   FOR (course, a) IN (('dotNET', array(1, 1)), ('Java', array(2, 2)))
0251 );
0252 
0253 -- pivot on pivot column of struct type
0254 SELECT * FROM (
0255   SELECT earnings, year, s
0256   FROM courseSales
0257   JOIN yearsWithComplexTypes ON year = y
0258 )
0259 PIVOT (
0260   udf(sum(earnings))
0261   FOR s IN ((1, 'a'), (2, 'b'))
0262 );
0263 
0264 -- pivot on multiple pivot columns containing struct type
0265 SELECT * FROM (
0266   SELECT course, earnings, year, s
0267   FROM courseSales
0268   JOIN yearsWithComplexTypes ON year = y
0269 )
0270 PIVOT (
0271   udf(sum(earnings))
0272   FOR (course, s) IN (('dotNET', (1, 'a')), ('Java', (2, 'b')))
0273 );
0274 
0275 -- pivot on pivot column of map type
0276 SELECT * FROM (
0277   SELECT earnings, year, m
0278   FROM courseSales
0279   JOIN yearsWithComplexTypes ON year = y
0280 )
0281 PIVOT (
0282   udf(sum(earnings))
0283   FOR m IN (map('1', 1), map('2', 2))
0284 );
0285 
0286 -- pivot on multiple pivot columns containing map type
0287 SELECT * FROM (
0288   SELECT course, earnings, year, m
0289   FROM courseSales
0290   JOIN yearsWithComplexTypes ON year = y
0291 )
0292 PIVOT (
0293   udf(sum(earnings))
0294   FOR (course, m) IN (('dotNET', map('1', 1)), ('Java', map('2', 2)))
0295 );
0296 
0297 -- grouping columns output in the same order as input
0298 -- correctly handle pivot columns with different cases
0299 SELECT * FROM (
0300   SELECT course, earnings, udf("a") as a, udf("z") as z, udf("b") as b, udf("y") as y,
0301   udf("c") as c, udf("x") as x, udf("d") as d, udf("w") as w
0302   FROM courseSales
0303 )
0304 PIVOT (
0305   udf(sum(Earnings))
0306   FOR Course IN ('dotNET', 'Java')
0307 );