public makeOrderByStatement()

in src/parsers/odata-parser.ts [185:210]


    public makeOrderByStatement(): string {
        if (this.query.sortColumns != null) {
            const sortColumns = this.query.queryType === QueryType.Flat ? this.query.sortColumns : this.query.sortColumns.slice(this.query.sortColumns.length / 2);
            const sortStatements = sortColumns.map((column) => {
                const odataProperty = this.metadata[column.field.referenceName];
                if (odataProperty == null) {
                    NotesService.instance.newNote('warning', `Property ${column.field.referenceName} in the order by statement does not have an OData equivalent. Leaving it out of $orderby.`);
                } else if (!odataProperty.type.startsWith('Edm')) {
                    // Case: Complex type that has a default property (not expanded in the list of specialProperties).
                    const defaultField = ODataMetadataParser.defaultFields[odataProperty.type];
                    if (defaultField == null) {
                        NotesService.instance.newNote('warning', `The datatype of property ${column.field.referenceName} is not supported. Leaving it out of $orderby.`);
                    } else {
                        return `${odataProperty.name}/${defaultField.defaultFieldName} ${column.descending === true ? 'desc' : 'asc'}`;
                    }
                } else {
                    return `${odataProperty.name} ${column.descending === true ? 'desc' : 'asc'}`;
                }
                return null;
            });

            return sortStatements.filter((s) => s != null).length === 0 ? null : `$orderby=${sortStatements.filter((s) => s != null).join(', ')}`;
        }

        return null;
    }