blob: db19eba4d10124d7346e308da294f37409f31069 [file] [log] [blame]
// 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.
// Object to facilitate generation of SELECT statement using
// generateSqlWithInternalLayout.
//
// Fields:
// @columns: a string array list of the columns to be selected from the table.
// required by the internal_layout function.
// @sourceTable: the table in the FROM clause, source of the data.
// @whereClause: the WHERE clause to filter data from the source table.
// @orderByClause: the ORDER BY clause for the query data.
interface GenerateSqlArgs {
columns: string[];
sourceTable: string;
ts: string;
dur: string;
whereClause?: string;
orderByClause?: string;
}
// Function to generate a SELECT statement utilizing the internal_layout
// SQL function as a depth field.
export function generateSqlWithInternalLayout(
sqlArgs: GenerateSqlArgs,
): string {
let sql =
`SELECT ` +
sqlArgs.columns.toString() +
`, internal_layout(${sqlArgs.ts}, ${sqlArgs.dur}) OVER (ORDER BY ${sqlArgs.ts}` +
' ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS depth' +
' FROM ' +
sqlArgs.sourceTable;
if (sqlArgs.whereClause !== undefined) {
sql += ' WHERE ' + sqlArgs.whereClause;
}
if (sqlArgs.orderByClause !== undefined) {
sql += ' ORDER BY ' + sqlArgs.orderByClause;
}
return sql;
}