@@ -35,6 +35,9 @@ describe('PostgresQuery', () => {
3535 interval: '1 quarter',
3636 offset: '1 month',
3737 },
38+ fiscal_quarter_no_offset: {
39+ interval: '1 quarter',
40+ },
3841 }
3942 },
4043 fiscalCreatedAtLabel: {
@@ -142,4 +145,187 @@ describe('PostgresQuery', () => {
142145 const queryAndParams = query . buildSqlAndParams ( ) ;
143146 expect ( queryAndParams [ 0 ] . split ( 'AT TIME ZONE \'America/Los_Angeles\'' ) . length ) . toEqual ( 3 ) ;
144147 } ) ;
148+
149+ describe ( 'order by clause' , ( ) => {
150+ it ( 'multi granularity ordered by min granularity (auto)' , async ( ) => {
151+ await compiler . compile ( ) ;
152+
153+ let query = new PostgresQuery ( { joinGraph, cubeEvaluator, compiler } , {
154+ measures : [
155+ 'visitors.count'
156+ ] ,
157+ timeDimensions : [ {
158+ dimension : 'visitors.createdAt' ,
159+ granularity : 'month' ,
160+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
161+ } , {
162+ dimension : 'visitors.createdAt' ,
163+ granularity : 'week' ,
164+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
165+ } , {
166+ dimension : 'visitors.createdAt' ,
167+ granularity : 'fiscal_quarter' ,
168+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
169+ } , {
170+ dimension : 'visitors.createdAt' ,
171+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
172+ } ] ,
173+ order : [ { id : 'visitors.createdAt' , desc : false } ] ,
174+ timezone : 'America/Los_Angeles'
175+ } ) ;
176+
177+ let queryAndParams = query . buildSqlAndParams ( ) ;
178+ expect ( queryAndParams [ 0 ] ) . toContain ( 'ORDER BY 2 ASC' ) ;
179+
180+ query = new PostgresQuery ( { joinGraph, cubeEvaluator, compiler } , {
181+ measures : [
182+ 'visitors.count'
183+ ] ,
184+ timeDimensions : [ {
185+ dimension : 'visitors.createdAt' ,
186+ granularity : 'week' ,
187+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
188+ } , {
189+ dimension : 'visitors.createdAt' ,
190+ granularity : 'fiscal_quarter' ,
191+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
192+ } , {
193+ dimension : 'visitors.createdAt' ,
194+ granularity : 'month' ,
195+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
196+ } , {
197+ dimension : 'visitors.createdAt' ,
198+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
199+ } ] ,
200+ order : [ { id : 'visitors.createdAt' , desc : false } ] ,
201+ timezone : 'America/Los_Angeles'
202+ } ) ;
203+
204+ queryAndParams = query . buildSqlAndParams ( ) ;
205+ expect ( queryAndParams [ 0 ] ) . toContain ( 'ORDER BY 1 ASC' ) ;
206+
207+ query = new PostgresQuery ( { joinGraph, cubeEvaluator, compiler } , {
208+ measures : [
209+ 'visitors.count'
210+ ] ,
211+ timeDimensions : [ {
212+ dimension : 'visitors.createdAt' ,
213+ granularity : 'year' ,
214+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
215+ } , {
216+ dimension : 'visitors.createdAt' ,
217+ granularity : 'fiscal_quarter_no_offset' ,
218+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
219+ } , {
220+ dimension : 'visitors.createdAt' ,
221+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
222+ } ] ,
223+ order : [ { id : 'visitors.createdAt' , desc : false } ] ,
224+ timezone : 'America/Los_Angeles'
225+ } ) ;
226+
227+ queryAndParams = query . buildSqlAndParams ( ) ;
228+ expect ( queryAndParams [ 0 ] ) . toContain ( 'ORDER BY 2 ASC' ) ;
229+ } ) ;
230+
231+ it ( 'multi granularity ordered by specified granularity' , async ( ) => {
232+ await compiler . compile ( ) ;
233+
234+ let query = new PostgresQuery ( { joinGraph, cubeEvaluator, compiler } , {
235+ measures : [
236+ 'visitors.count'
237+ ] ,
238+ timeDimensions : [ {
239+ dimension : 'visitors.createdAt' ,
240+ granularity : 'month' ,
241+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
242+ } , {
243+ dimension : 'visitors.createdAt' ,
244+ granularity : 'week' ,
245+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
246+ } , {
247+ dimension : 'visitors.createdAt' ,
248+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
249+ } ] ,
250+ order : [ { id : 'visitors.createdAt.week' , desc : false } ] ,
251+ timezone : 'America/Los_Angeles'
252+ } ) ;
253+
254+ let queryAndParams = query . buildSqlAndParams ( ) ;
255+ expect ( queryAndParams [ 0 ] ) . toContain ( 'ORDER BY 2 ASC' ) ;
256+
257+ query = new PostgresQuery ( { joinGraph, cubeEvaluator, compiler } , {
258+ measures : [
259+ 'visitors.count'
260+ ] ,
261+ timeDimensions : [ {
262+ dimension : 'visitors.createdAt' ,
263+ granularity : 'month' ,
264+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
265+ } , {
266+ dimension : 'visitors.createdAt' ,
267+ granularity : 'week' ,
268+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
269+ } , {
270+ dimension : 'visitors.createdAt' ,
271+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
272+ } ] ,
273+ order : [ { id : 'visitors.createdAt.month' , desc : false } ] ,
274+ timezone : 'America/Los_Angeles'
275+ } ) ;
276+
277+ queryAndParams = query . buildSqlAndParams ( ) ;
278+ expect ( queryAndParams [ 0 ] ) . toContain ( 'ORDER BY 1 ASC' ) ;
279+
280+ query = new PostgresQuery ( { joinGraph, cubeEvaluator, compiler } , {
281+ measures : [
282+ 'visitors.count'
283+ ] ,
284+ timeDimensions : [ {
285+ dimension : 'visitors.createdAt' ,
286+ granularity : 'week' ,
287+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
288+ } , {
289+ dimension : 'visitors.createdAt' ,
290+ granularity : 'month' ,
291+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
292+ } , {
293+ dimension : 'visitors.createdAt' ,
294+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
295+ } ] ,
296+ order : [ { id : 'visitors.createdAt.month' , desc : false } ] ,
297+ timezone : 'America/Los_Angeles'
298+ } ) ;
299+
300+ queryAndParams = query . buildSqlAndParams ( ) ;
301+ expect ( queryAndParams [ 0 ] ) . toContain ( 'ORDER BY 2 ASC' ) ;
302+
303+ query = new PostgresQuery ( { joinGraph, cubeEvaluator, compiler } , {
304+ measures : [
305+ 'visitors.count'
306+ ] ,
307+ timeDimensions : [ {
308+ dimension : 'visitors.createdAt' ,
309+ granularity : 'week' ,
310+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
311+ } , {
312+ dimension : 'visitors.createdAt' ,
313+ granularity : 'month' ,
314+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
315+ } , {
316+ dimension : 'visitors.createdAt' ,
317+ granularity : 'fiscal_quarter_no_offset' ,
318+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
319+ } , {
320+ dimension : 'visitors.createdAt' ,
321+ dateRange : [ '2020-01-01' , '2020-12-31' ] ,
322+ } ] ,
323+ order : [ { id : 'visitors.createdAt.fiscal_quarter_no_offset' , desc : false } ] ,
324+ timezone : 'America/Los_Angeles'
325+ } ) ;
326+
327+ queryAndParams = query . buildSqlAndParams ( ) ;
328+ expect ( queryAndParams [ 0 ] ) . toContain ( 'ORDER BY 3 ASC' ) ;
329+ } ) ;
330+ } ) ;
145331} ) ;
0 commit comments