| // 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; | 
 | } |