|  | // Copyright (C) 2023 The Android Open Source Project | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | import {constraintsToQueryPrefix, constraintsToQuerySuffix} from './sql_utils'; | 
|  |  | 
|  | // Clean up repeated whitespaces to allow for easier testing. | 
|  | function normalize(s: string): string { | 
|  | return s.replace(/\s+/g, ' '); | 
|  | } | 
|  |  | 
|  | test('constraintsToQueryPrefix: empty', () => { | 
|  | expect(normalize(constraintsToQueryPrefix({}))).toEqual(''); | 
|  | }); | 
|  |  | 
|  | test('constraintsToQueryPrefix: one CTE', () => { | 
|  | expect(normalize(constraintsToQueryPrefix({ | 
|  | commonTableExpressions: {'foo': 'select * from bar'}, | 
|  | }))).toEqual('WITH foo AS (select * from bar)'); | 
|  | }); | 
|  |  | 
|  | test('constraintsToQueryPrefix: one CTE', () => { | 
|  | expect(normalize(constraintsToQueryPrefix({ | 
|  | commonTableExpressions: { | 
|  | 'foo1': 'select * from bar1', | 
|  | 'foo2': 'select * from bar2', | 
|  | }, | 
|  | }))) | 
|  | .toEqual( | 
|  | 'WITH foo1 AS (select * from bar1), foo2 AS (select * from bar2)'); | 
|  | }); | 
|  |  | 
|  | test('constraintsToQuerySuffix: where', () => { | 
|  | expect(normalize(constraintsToQuerySuffix({ | 
|  | filters: ['ts > 1000', 'dur != 0'], | 
|  | }))).toEqual('WHERE ts > 1000 and dur != 0'); | 
|  | }); | 
|  |  | 
|  | test('constraintsToQuerySuffix: order by', () => { | 
|  | expect(normalize(constraintsToQuerySuffix({ | 
|  | orderBy: [ | 
|  | {fieldName: 'name'}, | 
|  | {fieldName: 'count', direction: 'DESC'}, | 
|  | undefined, | 
|  | 'value', | 
|  | ], | 
|  | }))).toEqual('ORDER BY name, count DESC, value'); | 
|  | }); | 
|  |  | 
|  | test('constraintsToQuerySuffix: limit', () => { | 
|  | expect(normalize(constraintsToQuerySuffix({limit: 3}))).toEqual('LIMIT 3'); | 
|  | }); | 
|  |  | 
|  | test('constraintsToQuerySuffix: group by', () => { | 
|  | expect(normalize(constraintsToQuerySuffix({ | 
|  | groupBy: ['foo', undefined, 'bar'], | 
|  | }))).toEqual('GROUP BY foo, bar'); | 
|  | }); | 
|  |  | 
|  | test('constraintsToQuerySuffix: all', () => { | 
|  | expect(normalize(constraintsToQuerySuffix({ | 
|  | filters: ['id != 1'], | 
|  | groupBy: ['track_id'], | 
|  | orderBy: [{fieldName: 'ts'}], | 
|  | limit: 1, | 
|  | }))).toEqual('WHERE id != 1 GROUP BY track_id ORDER BY ts LIMIT 1'); | 
|  | }); | 
|  |  | 
|  | test('constraintsToQuerySuffix: all undefined', () => { | 
|  | expect(normalize(constraintsToQuerySuffix({ | 
|  | filters: [undefined], | 
|  | orderBy: [undefined, undefined], | 
|  | groupBy: [undefined, undefined], | 
|  | }))).toEqual(''); | 
|  | }); |