async function generateSql()

in api/v1/src/datasets/views/sqlBuilder.js [26:71]


async function generateSql(view) {
    let sql;
    if (Object.prototype.hasOwnProperty.call(view, 'custom')) {
        console.log(`Generating query using custom SQL for view '${view.name}'`);
        sql = view.custom.query;

        // If statement ends with a ';' remove it
        if (sql.substring(sql.length - 1) === ";") {
            sql = sql.substring(0, sql.length - 1);
        }

        const accessControlEnabled = (view.accessControl && view.accessControl.enabled) || false;
        if (accessControlEnabled === true) {
            console.log("Using dataset entitlements");
            let newSql = `SELECT * FROM (\n`;
            newSql += await prependLines(sql, "\t", 1);
            newSql += '\n) s';
            let entityFilter = await generateAccessControlSubquery(view);
            if (entityFilter) {
                newSql += "\nWHERE\n" + entityFilter;
            }
            sql = newSql.trim();
        }
    }
    else {
        if (configUtil.isPublicAccessEnabled(view) === true) {
            console.log(`Generating query with public access for view '${view.name}'`);
            sql = await generateSqlWithPublicAccess(view);
        }
        else {
            console.log(`Generating query for view '${view.name}'`);
            sql = await generateSqlWithoutPublicAccess(view);
        }
    }

    // http://b/139288516 Add support time-based entitlements
    // If expiration is specified and delete is non-existant or false
    if (Object.prototype.hasOwnProperty.call(view, 'expiration') && view.expiration && !view.expiration.delete) {
        const paddedSql = await prependLines(sql.trim(), "\t", 1);
        const expirySql = `SELECT * FROM (\n${paddedSql}\n)\nWHERE TIMESTAMP_MILLIS(${view.expiration.time}) > CURRENT_TIMESTAMP()`;
        return expirySql.trim();
    }
    else {
        return sql.trim();
    }
}