public copyResults()

in src/controllers/queryRunner.ts [300:343]


    public copyResults(selection: ISlickRange[], batchId: number, resultId: number, includeHeaders?: boolean): Promise<void> {
        const self = this;
        return new Promise<void>((resolve, reject) => {
            let copyString = '';

            // create a mapping of the ranges to get promises
            let tasks = selection.map((range, i) => {
                return () => {
                    return self.getRows(range.fromRow, range.toRow - range.fromRow + 1, batchId, resultId).then((result) => {
                        if (self.shouldIncludeHeaders(includeHeaders)) {
                            let columnHeaders = self.getColumnHeaders(batchId, resultId, range);
                            if (columnHeaders !== undefined) {
                                copyString += columnHeaders.join('\t') + os.EOL;
                            }
                        }

                        // Iterate over the rows to paste into the copy string
                        for (let rowIndex: number = 0; rowIndex < result.resultSubset.rows.length; rowIndex++) {
                            let row = result.resultSubset.rows[rowIndex];
                            let cellObjects = row.slice(range.fromCell, (range.toCell + 1));
                            // Remove newlines if requested
                            let cells = self.shouldRemoveNewLines()
                                ? cellObjects.map(x => self.removeNewLines(x.displayValue))
                                : cellObjects.map(x => x.displayValue);
                            copyString += cells.join('\t');
                            if (rowIndex < result.resultSubset.rows.length - 1) {
                                copyString += os.EOL;
                            }
                        }
                    });
                };
            });

            let p = tasks[0]();
            for (let i = 1; i < tasks.length; i++) {
                p = p.then(tasks[i]);
            }
            p.then(() => {
                ncp.copy(copyString, () => {
                    resolve();
                });
            });
        });
    }