public makeFilterStatement()

in src/parsers/odata-parser.ts [215:233]


    public makeFilterStatement(rootClause: WorkItemQueryClause, superTypePrefix: string = ''): string {
        const oDataClauses = this.makeFilterStatementSimple(rootClause, superTypePrefix);

        if (oDataClauses == null) {
            return null;
        }

        // get ASOF. Unfortunately, the only way to currently detect ASOF is in the query text itself.
        const basicTokenizedQuery = this.query.wiql.toLocaleLowerCase().split(' ');
        const asofIndex = basicTokenizedQuery.findIndex((e) => e === 'asof');
        if (asofIndex !== -1) {
            // assuming thing after asof is a date. Assuming WIQL has been validated by ADO.
            const dateString = basicTokenizedQuery[asofIndex + 1];
            const isoDateString = new Date(dateString).toISOString();
            return `$filter=Revisions/any(r: ${oDataClauses} and (r/ChangedDate le ${isoDateString}) and (r/RevisedDate ge ${isoDateString} or r/RevisedDate eq null))`;
        }

        return `$filter=${oDataClauses}`;
    }