prepare(throwErrors) {
        const i = this._inner, options = i.options;
        let lastMod;
        if (options.debug && i.ready) {
            try {
                lastMod = npm.fs.statSync(i.filePath).mtime.getTime();
                // istanbul ignore if;
                if (lastMod === i.modTime) {
                    return;
                }
                i.ready = false;
            } catch (e) {
                i.sql = undefined;
                i.ready = false;
                i.error = e;
                if (throwErrors) {
                    throw i.error;
                }
                return;
            }
        }
        if (i.ready) {
            return;
        }
        try {
            i.sql = npm.fs.readFileSync(i.filePath, 'utf8');
            i.modTime = lastMod || npm.fs.statSync(i.filePath).mtime.getTime();
            if (options.minify && options.minify !== 'after') {
                i.sql = npm.minify(i.sql, {compress: options.compress});
            }
            if (options.params !== undefined) {
                i.sql = npm.formatting.as.format(i.sql, options.params, {partial: true});
            }
            if (options.minify && options.minify === 'after') {
                i.sql = npm.minify(i.sql, {compress: options.compress});
            }
            i.ready = true;
            i.error = undefined;
        } catch (e) {
            i.sql = undefined;
            i.error = new QueryFileError(e, this);
            if (throwErrors) {
                throw i.error;
            }
        }
    }
@summary Prepares the query for execution.
@description
If the query hasn't been prepared yet, it will read the file and process the content according
to the parameters passed into the constructor.

This method is primarily for internal use by the library.

@param {boolean} [throwErrors=false]
Throw any error encountered.