// 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(''); });