GNU bug report logs - #25682
25.1; font-lock: fontifying too slow in some modes on very long lines

Previous Next

Package: emacs;

Reported by: Ryan B <public <at> ryanb.org>

Date: Fri, 10 Feb 2017 21:45:02 UTC

Severity: normal

Found in version 25.1

Fixed in version 29.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 25682 in the body.
You can then email your comments to 25682 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#25682; Package emacs. (Fri, 10 Feb 2017 21:45:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ryan B <public <at> ryanb.org>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 10 Feb 2017 21:45:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Ryan B <public <at> ryanb.org>
To: bug-gnu-emacs <at> gnu.org
Subject: 25.1; font-lock: fontifying too slow in some modes on very long lines
Date: Fri, 10 Feb 2017 13:33:52 -0800
[Message part 1 (text/plain, inline)]
i occasionally have very long lines in some buffers, e.g. 10k-20k
characters. font-lock-mode often hangs for a long time (5-10s) when
fontifying these lines.

this has evidently been a known issue with font-lock-mode for a long time,
and inspired a number of optimizations and workarounds: jit-lock/lazy-lock
(formerly fast-lock), font-lock-maximum-decoration,
https://www.emacswiki.org/emacs/SoLong , etc. they all work by deferring,
downgrading, or disabling fontification in certain buffers.

that's nice, but i'd ideally like to keep font-lock-mode on in buffers
where very long lines appear, and still prevent the hangs. i'm considering
adding an opt-in max line length to font-lock-mode, after which it would
stop fontifying or evaluating regexps. i'd love to hear feedback on whether
this makes sense!

here are steps that reproduce this, with gnu emacs 25.1.1 on mac os x:

1. put the single long line under the === below (18572 chars long) into a
file
2. run emacs -Q
3. type C-x C-f <filename> RET to open the file
4. type M-x compilation-mode RET

this consistently hangs emacs for 9-10s for me on modern hardware, a 2014
retina macbook pro.

===

[2017-02-10T07:35:45Z django.db.backends] DEBUG: (0.057) SELECT
"xxx_xxxxxx_xxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxx_xxxx", "xxx_xxxxxx_xxxxxxxx"."xxx_xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xx_xxx",
"xxx_xxxxxx_xxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xx",
MAX("xxx_xxxxxx_xxxxxxxxxxxxxxxxxx"."xx") AS "xxxxxxxx_xx", COUNT(DISTINCT
"xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxx_xx") AS "xxx_xxxxxxx",
MAX("xxxxxxx_xxxxxx"."xxxx_xx") AS "xxxxxx_xxxx_xx",
STRING_AGG("xxxxxxx_xxxxxx"."xxx_xxxxxxx", ' ') AS "xxx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxx_xx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxx_xxxx_xxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xx_xxxxxx_xxxxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xxx_xxxxxxxxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxx_xxx_xxxxxxxx_xxxxx_xx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxxxx_xxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxx_xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxx_x3_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx1",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx_xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx1",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx2",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", T11."xx", T11."xxxxxxxx",
T11."xxxx_xxxxx", T11."xx_xxxxxxxxx", T11."xxxxx",
T11."xxxxxxxxxxx_xxxxxxx_xxxxx", T11."xxxxxxx_xx", T11."xxxxx_xxxx",
T11."xxxx_xxxx", T11."xxxxxxxx", T11."xxxxxx", T11."xxxxx_xxxxxx",
T11."xxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xxxxxxxx_xxxxxxx_xx",
T11."xxxxxxx_xx_xxxxx", T11."xxx_xxx_xxx_xxxxxxxx", T11."xx_xxxxx",
T11."xxxxx_xxxxx_xxxxx_xxxxxxx", T11."xx_xxxxxx", T11."xx_xxxxx",
T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxxxxx_xx",
T11."xxxx_xxxxx_xxxxxxx", T11."xxxxxxxxxxx_xxxxxx_xxxxxx", T12."xx",
T12."xxxxxxx_xx", T12."xxxxxxx_xx", T12."xxx", T12."xxxxx_xxxx",
T12."xxxx_xxxx", T12."xxxxx", T12."xxxxx_xxxxxx", T12."xxx_xxxxxx",
T12."xxxxxxx_xxxx", T12."xxxxxxxxxxx_xxxx", T12."xxxx", T12."xxxxx",
T12."xxxxxxx_xxxx1", T12."xxxxxxx", T12."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
T12."xxxx_xx", T12."xxxxxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxx_xx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx_xxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxx_xxxxx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx_xxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", "xxxxxxxx_xxxxxxxx"."xx_xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxx_xxx_xxxx" FROM "xxx_xxxxxx_xxxxxxxx" LEFT OUTER
JOIN "xxx_xxxxxx_xxxxxxxxxxxxxxx" ON (
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx" =
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN
"xxx_xxxxxx_xxxxxxxxxxxxxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xx" =
"xxx_xxxxxx_xxxxxxxxxxxxxxxxxx"."xxx_xxxxx_xx" ) LEFT OUTER JOIN
"xxx_xxxxxx_xxxxxxxx_xxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xx" =
"xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxxxx_xx" ) LEFT OUTER JOIN
"xxxxxxx_xxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxx_xx" =
"xxxxxxx_xxxxxx"."xx" ) LEFT OUTER JOIN
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx" ON (
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx" =
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx" ON (
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx" =
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx" ON (
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx" =
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx" ON (
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx" =
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN "xxxxx_xxxxxxxxx" T11
ON ( "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx" = T11."xx" ) LEFT
OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx" T12 ON ( T11."xx" =
T12."xxxx_xx" ) LEFT OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx" ON (
T12."xx" = "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx" )
LEFT OUTER JOIN "xxxxxxxx_xxxxxxxx" ON (
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx" = "xxxxxxxx_xxxxxxxx"."xx" ) WHERE (NOT
("xxx_xxxxxx_xxxxxxxx"."xxxxx" = 'xxxxxxxxx') AND NOT
("xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx" <
'2015-04-20T00:00:00-07:00'::xxxxxxxxxxx) AND NOT
("xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx" IN ('xx', 'xx') AND
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx" IS NOT NULL)) GROUP BY
"xxx_xxxxxx_xxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxx_xxxx", "xxx_xxxxxx_xxxxxxxx"."xxx_xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xx_xxx",
"xxx_xxxxxx_xxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx_xx",
"xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxx_xx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxx_xxxx_xxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xx_xxxxxx_xxxxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xxx_xxxxxxxxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxx_xxx_xxxxxxxx_xxxxx_xx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxxxx_xxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxx_xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxx_x3_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx1",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx_xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx1",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx2",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxx_xxxx",
"xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", T11."xx", T11."xxxxxxxx",
T11."xxxx_xxxxx", T11."xx_xxxxxxxxx", T11."xxxxx",
T11."xxxxxxxxxxx_xxxxxxx_xxxxx", T11."xxxxxxx_xx", T11."xxxxx_xxxx",
T11."xxxx_xxxx", T11."xxxxxxxx", T11."xxxxxx", T11."xxxxx_xxxxxx",
T11."xxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xxxxxxxx_xxxxxxx_xx",
T11."xxxxxxx_xx_xxxxx", T11."xxx_xxx_xxx_xxxxxxxx", T11."xx_xxxxx",
T11."xxxxx_xxxxx_xxxxx_xxxxxxx", T11."xx_xxxxxx", T11."xx_xxxxx",
T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxxxxx_xx",
T11."xxxx_xxxxx_xxxxxxx", T11."xxxxxxxxxxx_xxxxxx_xxxxxx", T12."xx",
T12."xxxxxxx_xx", T12."xxxxxxx_xx", T12."xxx", T12."xxxxx_xxxx",
T12."xxxx_xxxx", T12."xxxxx", T12."xxxxx_xxxxxx", T12."xxx_xxxxxx",
T12."xxxxxxx_xxxx", T12."xxxxxxxxxxx_xxxx", T12."xxxx", T12."xxxxx",
T12."xxxxxxx_xxxx1", T12."xxxxxxx", T12."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
T12."xxxx_xx", T12."xxxxxxxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxx_xx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxxxxxxx_xxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxx_xxxxxx",
"xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxx_xxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxx_xx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx_xxxxxxx",
"xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxx"."xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxx_xxxxx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx_xxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", "xxxxxxxx_xxxxxxxx"."xx_xxxx_xx",
"xxxxxxxx_xxxxxxxx"."xxx_xxx_xxxx"; xxxx=('xxxxxxxxx',
datetime.datetime(2015, 4, 20, 0, 0, tzinfo=<DstTzInfo
'America/Los_Angeles' PDT-1 day, 17:00:00 DST>), 'ff', 'qa')


===



In GNU Emacs 25.1.1 (x86_64-apple-darwin15.6.0, NS appkit-1404.47 Version
10.11.6 (Build 15G1004))
 of 2016-09-17 built on hell.PK5001Z
Windowing system distributor 'Apple', version 10.3.1404
Configured using:
 'configure --disable-dependency-tracking --disable-silent-rules
 --enable-locallisppath=/usr/local/share/emacs/site-lisp
 --infodir=/usr/local/Cellar/emacs/25.1/share/info/emacs
 --prefix=/usr/local/Cellar/emacs/25.1 --without-x --with-xml2
 --without-dbus --without-gnutls --with-rsvg --with-ns
 --disable-ns-self-contained'

Configured features:
JPEG RSVG NOTIFY ACL LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: JavaScript

Minor modes in effect:
  helm-mode: t
  diff-auto-refine-mode: t
  rainbow-identifiers-mode: t
  rainbow-delimiters-mode: t
  async-bytecomp-package-mode: t
  global-auto-revert-mode: t
  desktop-save-mode: t
  savehist-mode: t
  show-paren-mode: t
  delete-selection-mode: t
  recentf-mode: t
  global-subword-mode: t
  subword-mode: t
  shell-dirtrack-mode: t
  global-eldoc-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
Saving file /Users/ryan/.emacs.d/recentf...
Wrote /Users/ryan/.emacs.d/recentf
Desktop saved in ~/.emacs.d/
Saving file /Users/ryan/.emacs.d/recentf...
Wrote /Users/ryan/.emacs.d/recentf
Reverting buffer ‘recentf’.
next-line: End of buffer [2 times]
Mark set [5 times]
Saving file /tmp/*scratch*...
Wrote /tmp/*scratch*

Load-path shadows:
/Users/ryan/.emacs.d/elpa/seq-2.19/seq hides
/usr/local/Cellar/emacs/25.1/share/emacs/25.1/lisp/emacs-lisp/seq

Features:
(shadow sort mail-extr emacsbug sendmail ibuf-ext man vc-annotate
log-view pcmpl-unix vc-bzr vc-src vc-sccs vc-cvs vc-rcs dabbrev
image-file dirtrack emacs-lock manoj-dark-theme ibuffer eieio-opt
find-func cus-edit rst fillcode cc-bytecomp make-mode filecache
tramp-cache conf-mode helm-command vc-svn helm-elisp helm-eval edebug
sql view json-mode json-reformat json-snatcher misearch multi-isearch
ido ess-toolbar ess-mouse mouseme ess-menu ess-swv ess-noweb
ess-noweb-font-lock-mode ess-bugs-l essd-els ess-sas-d ess-sas-l
ess-sas-a ess-sta-d ess-sta-l make-regexp ess-sp6-d ess-dde ess-sp3-d
ess-julia julia-mode ess-r-d ess-r-syntax ess-r-completion ess-roxy
essddr hideshow ess-help ess-r-package ess-s-l ess-site ess ess-inf
ess-tracebug ess-mode ess-noweb-mode ess-utils ess-generics cl
ess-custom ess-compat nxml-uchnm rng-xsd xsd-regexp rng-cmpct rng-nxml
rng-valid rng-loc rng-uri rng-parse nxml-parse rng-match rng-dt rng-util
rng-pttrn nxml-ns nxml-mode nxml-outln nxml-rap nxml-util nxml-glyph
nxml-enc xmltok php-mode derived speedbar sb-image ezimage dframe
flymake cc-langs smerge-mode vc-dir ewoc vc vc-dispatcher winner
yaml-mode jka-compr helm-mode vc-git diff-mode rainbow-identifiers color
rainbow-delimiters helm-misc helm-files image-dired dired-x dired-aux
helm-buffers helm-elscreen helm-tags helm-bookmark helm-adaptive
helm-info bookmark pp helm-locate helm-grep helm-regexp helm-external
helm-net browse-url xml helm-utils helm-help helm-types helm-config
helm-easymenu async-bytecomp async helm edmacro kmacro helm-source
helm-multi-match helm-lib midnight autorevert filenotify desktop
frameset savehist paren redo+ delsel warnings grep cus-start cus-load
git-link dash-at-point recentf tree-widget wid-edit cap-words superword
subword jade-mode js imenu cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs python tramp-sh tramp
tramp-compat tramp-loaddefs trampver shell pcomplete sh-script
executable sgml-mode go-mode url url-proxy url-privacy url-expand
url-methods url-history url-cookie url-domsuf url-util mailcap find-file
ffap etags xref project compile comint ansi-color css-mode smie
markdown-mode thingatpt noutline outline log-edit easy-mmode message
dired format-spec rfc822 mml mml-sec epg mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev mail-utils
gmm-utils mailheader ring pcvs-util add-log finder-inf gh-common
gh-profile url-parse auth-source gnus-util mm-util help-fns mail-prsvr
password-cache url-vars rx s marshal cl-seq eieio-compat ht json map
dash eieio eieio-core cl-macs info package epg-config seq byte-opt gv
bytecomp byte-compile cl-extra help-mode easymenu cconv cl-loaddefs
cl-lib subr-x pcase advice server time-date mule-util tooltip eldoc
electric uniquify ediff-hook vc-hooks lisp-float-type mwheel ns-win
ucs-normalize term/common-win tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register
page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
font-lock syntax facemenu font-core frame cl-generic cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese charscript case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer cl-preloaded nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote kqueue cocoa ns multi-tty
make-network-process emacs)

Memory information:
((conses 16 5126063 736652)
 (symbols 48 53998 0)
 (miscs 40 3720 24660)
 (strings 32 157538 77287)
 (string-bytes 1 5024002)
 (vectors 16 90573)
 (vector-slots 8 2240527 189813)
 (floats 8 946 1835)
 (intervals 56 1059644 6492)
 (buffers 976 638))


-- 
https://snarfed.org/
[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#25682; Package emacs. (Sat, 11 Feb 2017 13:58:02 GMT) Full text and rfc822 format available.

Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Andreas Röhler <andreas.roehler <at> easy-emacs.de>
To: bug-gnu-emacs <at> gnu.org
Subject: Re: bug#25682: 25.1; font-lock: fontifying too slow in some modes on
 very long lines
Date: Sat, 11 Feb 2017 15:07:36 +0100
[Message part 1 (text/plain, inline)]

On 10.02.2017 22:33, Ryan B wrote:
> i occasionally have very long lines in some buffers, e.g. 10k-20k 
> characters. font-lock-mode often hangs for a long time (5-10s) when 
> fontifying these lines.
>
> this has evidently been a known issue with font-lock-mode for a long 
> time, and inspired a number of optimizations and workarounds: 
> jit-lock/lazy-lock (formerly fast-lock), font-lock-maximum-decoration, 
> https://www.emacswiki.org/emacs/SoLong , etc. they all work by 
> deferring, downgrading, or disabling fontification in certain buffers.
>
> that's nice, but i'd ideally like to keep font-lock-mode on in buffers 
> where very long lines appear, and still prevent the hangs. i'm 
> considering adding an opt-in max line length to font-lock-mode, after 
> which it would stop fontifying or evaluating regexps. i'd love to hear 
> feedback on whether this makes sense!
>
> here are steps that reproduce this, with gnu emacs 25.1.1 on mac os x:
>
> 1. put the single long line under the === below (18572 chars long) 
> into a file
> 2. run emacs -Q
> 3. type C-x C-f <filename> RET to open the file
> 4. type M-x compilation-mode RET
>
> this consistently hangs emacs for 9-10s for me on modern hardware, a 
> 2014 retina macbook pro.
>
> ===
>
> [2017-02-10T07:35:45Z django.db.backends] DEBUG: (0.057) SELECT 
> "xxx_xxxxxx_xxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxx_xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xx_xxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xx", 
> MAX("xxx_xxxxxx_xxxxxxxxxxxxxxxxxx"."xx") AS "xxxxxxxx_xx", 
> COUNT(DISTINCT "xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxx_xx") AS 
> "xxx_xxxxxxx", MAX("xxxxxxx_xxxxxx"."xxxx_xx") AS "xxxxxx_xxxx_xx", 
> STRING_AGG("xxxxxxx_xxxxxx"."xxx_xxxxxxx", ' ') AS "xxx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxx_xx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxx_xxxx_xxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xx_xxxxxx_xxxxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xxx_xxxxxxxxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxx_xxx_xxxxxxxx_xxxxx_xx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxxxx_xxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxx_x3_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx_xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx2", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", T11."xx", T11."xxxxxxxx", 
> T11."xxxx_xxxxx", T11."xx_xxxxxxxxx", T11."xxxxx", 
> T11."xxxxxxxxxxx_xxxxxxx_xxxxx", T11."xxxxxxx_xx", T11."xxxxx_xxxx", 
> T11."xxxx_xxxx", T11."xxxxxxxx", T11."xxxxxx", T11."xxxxx_xxxxxx", 
> T11."xxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xxxxxxxx_xxxxxxx_xx", 
> T11."xxxxxxx_xx_xxxxx", T11."xxx_xxx_xxx_xxxxxxxx", T11."xx_xxxxx", 
> T11."xxxxx_xxxxx_xxxxx_xxxxxxx", T11."xx_xxxxxx", T11."xx_xxxxx", 
> T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxxxxx_xx", 
> T11."xxxx_xxxxx_xxxxxxx", T11."xxxxxxxxxxx_xxxxxx_xxxxxx", T12."xx", 
> T12."xxxxxxx_xx", T12."xxxxxxx_xx", T12."xxx", T12."xxxxx_xxxx", 
> T12."xxxx_xxxx", T12."xxxxx", T12."xxxxx_xxxxxx", T12."xxx_xxxxxx", 
> T12."xxxxxxx_xxxx", T12."xxxxxxxxxxx_xxxx", T12."xxxx", T12."xxxxx", 
> T12."xxxxxxx_xxxx1", T12."xxxxxxx", T12."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> T12."xxxx_xx", T12."xxxxxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxx_xx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx_xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xx_xxxx_xx", "xxxxxxxx_xxxxxxxx"."xxx_xxx_xxxx" 
> FROM "xxx_xxxxxx_xxxxxxxx" LEFT OUTER JOIN 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx" ON ( 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx" = 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxx_xxxxxx_xxxxxxxxxxxxxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xx" = 
> "xxx_xxxxxx_xxxxxxxxxxxxxxxxxx"."xxx_xxxxx_xx" ) LEFT OUTER JOIN 
> "xxx_xxxxxx_xxxxxxxx_xxxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx"."xx" = 
> "xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxxxx_xx" ) LEFT OUTER JOIN 
> "xxxxxxx_xxxxxx" ON ( "xxx_xxxxxx_xxxxxxxx_xxxxxxx"."xxxxxx_xx" = 
> "xxxxxxx_xxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx" ON ( 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx" = 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx" ON ( 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx" = 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx" ON ( 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx" = 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx" ON ( 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx" = 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx" ) LEFT OUTER JOIN 
> "xxxxx_xxxxxxxxx" T11 ON ( 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx" = T11."xx" ) LEFT 
> OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx" T12 ON ( T11."xx" = 
> T12."xxxx_xx" ) LEFT OUTER JOIN "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx" 
> ON ( T12."xx" = 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx" ) LEFT 
> OUTER JOIN "xxxxxxxx_xxxxxxxx" ON ( 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx" = "xxxxxxxx_xxxxxxxx"."xx" ) WHERE 
> (NOT ("xxx_xxxxxx_xxxxxxxx"."xxxxx" = 'xxxxxxxxx') AND NOT 
> ("xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx" < 
> '2015-04-20T00:00:00-07:00'::xxxxxxxxxxx) AND NOT 
> ("xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx" IN ('xx', 'xx') AND 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx" IS NOT NULL)) GROUP BY 
> "xxx_xxxxxx_xxxxxxxx"."xx", "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx", "xxx_xxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxxxx_xxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxx_xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxx_xxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xx_xxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxx_xx", "xxx_xxxxxx_xxxxxxxx"."xxxxx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxx_xxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxx_xx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxx_xxxx_xxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xx_xxxxxx_xxxxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxx_xxxx_xxx_xxxxxxxxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xx_xxxxx_xxx_xxxxxxxx_xxxxx_xx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxxxx_xxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxx_xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxx"."xxxxxxxx_xxxxxx_x3_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx_xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx_xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx1", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx2", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxx_xxxx", 
> "xxxxxxxxxx_xxxxxxxxxxxxxxxxx"."xxxxx", T11."xx", T11."xxxxxxxx", 
> T11."xxxx_xxxxx", T11."xx_xxxxxxxxx", T11."xxxxx", 
> T11."xxxxxxxxxxx_xxxxxxx_xxxxx", T11."xxxxxxx_xx", T11."xxxxx_xxxx", 
> T11."xxxx_xxxx", T11."xxxxxxxx", T11."xxxxxx", T11."xxxxx_xxxxxx", 
> T11."xxxxxxx_xxxxxxx_xx", T11."xxxxxxx_xxxxxxxx_xxxxxxx_xx", 
> T11."xxxxxxx_xx_xxxxx", T11."xxx_xxx_xxx_xxxxxxxx", T11."xx_xxxxx", 
> T11."xxxxx_xxxxx_xxxxx_xxxxxxx", T11."xx_xxxxxx", T11."xx_xxxxx", 
> T11."xxxxxxx_xx", T11."xxxxxxx_xx", T11."xxxxxxx_xx", 
> T11."xxxx_xxxxx_xxxxxxx", T11."xxxxxxxxxxx_xxxxxx_xxxxxx", T12."xx", 
> T12."xxxxxxx_xx", T12."xxxxxxx_xx", T12."xxx", T12."xxxxx_xxxx", 
> T12."xxxx_xxxx", T12."xxxxx", T12."xxxxx_xxxxxx", T12."xxx_xxxxxx", 
> T12."xxxxxxx_xxxx", T12."xxxxxxxxxxx_xxxx", T12."xxxx", T12."xxxxx", 
> T12."xxxxxxx_xxxx1", T12."xxxxxxx", T12."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> T12."xxxx_xx", T12."xxxxxxxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxxxxx_xx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxx_xx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxx_xxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxx_xxxxxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxx_xxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxxxxxxx_xxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxx_xxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxx_xxxxxxx_xxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xx_xxxxxxxx_xxxxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxx_xxxxx_xxxxxx", 
> "xxxxxxxx_xxxxxxxxxx_xxxxxxxxxxxxxxxx"."xxxxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxx_xxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx_xxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxxxx_xxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxx_xxxxxxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxxx_xx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xx_xxxxxxx", 
> "xxx_xxxxxx_xxxxxxxxxxxxxxx"."xxxxxxx", "xxxxxxxx_xxxxxxxx"."xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxx", "xxxxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxx_xxxxx_xxxxx", 
> "xxxxxxxx_xxxxxxxx"."xxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xxxxxxxxx_xxxxx_xx", 
> "xxxxxxxx_xxxxxxxx"."xx_xxxx_xx", "xxxxxxxx_xxxxxxxx"."xxx_xxx_xxxx"; 
> xxxx=('xxxxxxxxx', datetime.datetime(2015, 4, 20, 0, 0, 
> tzinfo=<DstTzInfo 'America/Los_Angeles' PDT-1 day, 17:00:00 DST>), 
> 'ff', 'qa')
>
>
> ===
>
>
>
> In GNU Emacs 25.1.1 (x86_64-apple-darwin15.6.0, NS appkit-1404.47 
> Version 10.11.6 (Build 15G1004))
>  of 2016-09-17 built on hell.PK5001Z
> Windowing system distributor 'Apple', version 10.3.1404
> Configured using:
>  'configure --disable-dependency-tracking --disable-silent-rules
>  --enable-locallisppath=/usr/local/share/emacs/site-lisp
>  --infodir=/usr/local/Cellar/emacs/25.1/share/info/emacs
>  --prefix=/usr/local/Cellar/emacs/25.1 --without-x --with-xml2
>  --without-dbus --without-gnutls --with-rsvg --with-ns
>  --disable-ns-self-contained'
>
> Configured features:
> JPEG RSVG NOTIFY ACL LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS
>
> Important settings:
>   value of $LANG: en_US.UTF-8
>   locale-coding-system: utf-8-unix
>
> Major mode: JavaScript
>
> Minor modes in effect:
>   helm-mode: t
>   diff-auto-refine-mode: t
>   rainbow-identifiers-mode: t
>   rainbow-delimiters-mode: t
>   async-bytecomp-package-mode: t
>   global-auto-revert-mode: t
>   desktop-save-mode: t
>   savehist-mode: t
>   show-paren-mode: t
>   delete-selection-mode: t
>   recentf-mode: t
>   global-subword-mode: t
>   subword-mode: t
>   shell-dirtrack-mode: t
>   global-eldoc-mode: t
>   mouse-wheel-mode: t
>   file-name-shadow-mode: t
>   global-font-lock-mode: t
>   font-lock-mode: t
>   auto-composition-mode: t
>   auto-encryption-mode: t
>   auto-compression-mode: t
>   column-number-mode: t
>   line-number-mode: t
>   transient-mark-mode: t
>
> Recent messages:
> Saving file /Users/ryan/.emacs.d/recentf...
> Wrote /Users/ryan/.emacs.d/recentf
> Desktop saved in ~/.emacs.d/
> Saving file /Users/ryan/.emacs.d/recentf...
> Wrote /Users/ryan/.emacs.d/recentf
> Reverting buffer ‘recentf’.
> next-line: End of buffer [2 times]
> Mark set [5 times]
> Saving file /tmp/*scratch*...
> Wrote /tmp/*scratch*
>
> Load-path shadows:
> /Users/ryan/.emacs.d/elpa/seq-2.19/seq hides 
> /usr/local/Cellar/emacs/25.1/share/emacs/25.1/lisp/emacs-lisp/seq
>
> Features:
> (shadow sort mail-extr emacsbug sendmail ibuf-ext man vc-annotate
> log-view pcmpl-unix vc-bzr vc-src vc-sccs vc-cvs vc-rcs dabbrev
> image-file dirtrack emacs-lock manoj-dark-theme ibuffer eieio-opt
> find-func cus-edit rst fillcode cc-bytecomp make-mode filecache
> tramp-cache conf-mode helm-command vc-svn helm-elisp helm-eval edebug
> sql view json-mode json-reformat json-snatcher misearch multi-isearch
> ido ess-toolbar ess-mouse mouseme ess-menu ess-swv ess-noweb
> ess-noweb-font-lock-mode ess-bugs-l essd-els ess-sas-d ess-sas-l
> ess-sas-a ess-sta-d ess-sta-l make-regexp ess-sp6-d ess-dde ess-sp3-d
> ess-julia julia-mode ess-r-d ess-r-syntax ess-r-completion ess-roxy
> essddr hideshow ess-help ess-r-package ess-s-l ess-site ess ess-inf
> ess-tracebug ess-mode ess-noweb-mode ess-utils ess-generics cl
> ess-custom ess-compat nxml-uchnm rng-xsd xsd-regexp rng-cmpct rng-nxml
> rng-valid rng-loc rng-uri rng-parse nxml-parse rng-match rng-dt rng-util
> rng-pttrn nxml-ns nxml-mode nxml-outln nxml-rap nxml-util nxml-glyph
> nxml-enc xmltok php-mode derived speedbar sb-image ezimage dframe
> flymake cc-langs smerge-mode vc-dir ewoc vc vc-dispatcher winner
> yaml-mode jka-compr helm-mode vc-git diff-mode rainbow-identifiers color
> rainbow-delimiters helm-misc helm-files image-dired dired-x dired-aux
> helm-buffers helm-elscreen helm-tags helm-bookmark helm-adaptive
> helm-info bookmark pp helm-locate helm-grep helm-regexp helm-external
> helm-net browse-url xml helm-utils helm-help helm-types helm-config
> helm-easymenu async-bytecomp async helm edmacro kmacro helm-source
> helm-multi-match helm-lib midnight autorevert filenotify desktop
> frameset savehist paren redo+ delsel warnings grep cus-start cus-load
> git-link dash-at-point recentf tree-widget wid-edit cap-words superword
> subword jade-mode js imenu cc-mode cc-fonts cc-guess cc-menus cc-cmds
> cc-styles cc-align cc-engine cc-vars cc-defs python tramp-sh tramp
> tramp-compat tramp-loaddefs trampver shell pcomplete sh-script
> executable sgml-mode go-mode url url-proxy url-privacy url-expand
> url-methods url-history url-cookie url-domsuf url-util mailcap find-file
> ffap etags xref project compile comint ansi-color css-mode smie
> markdown-mode thingatpt noutline outline log-edit easy-mmode message
> dired format-spec rfc822 mml mml-sec epg mm-decode mm-bodies mm-encode
> mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev mail-utils
> gmm-utils mailheader ring pcvs-util add-log finder-inf gh-common
> gh-profile url-parse auth-source gnus-util mm-util help-fns mail-prsvr
> password-cache url-vars rx s marshal cl-seq eieio-compat ht json map
> dash eieio eieio-core cl-macs info package epg-config seq byte-opt gv
> bytecomp byte-compile cl-extra help-mode easymenu cconv cl-loaddefs
> cl-lib subr-x pcase advice server time-date mule-util tooltip eldoc
> electric uniquify ediff-hook vc-hooks lisp-float-type mwheel ns-win
> ucs-normalize term/common-win tool-bar dnd fontset image regexp-opt
> fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register
> page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
> font-lock syntax facemenu font-core frame cl-generic cham georgian
> utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
> japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
> ethiopic indian cyrillic chinese charscript case-table epa-hook
> jka-cmpr-hook help simple abbrev minibuffer cl-preloaded nadvice
> loaddefs button faces cus-face macroexp files text-properties overlay
> sha1 md5 base64 format env code-pages mule custom widget
> hashtable-print-readable backquote kqueue cocoa ns multi-tty
> make-network-process emacs)
>
> Memory information:
> ((conses 16 5126063 736652)
>  (symbols 48 53998 0)
>  (miscs 40 3720 24660)
>  (strings 32 157538 77287)
>  (string-bytes 1 5024002)
>  (vectors 16 90573)
>  (vector-slots 8 2240527 189813)
>  (floats 8 946 1835)
>  (intervals 56 1059644 6492)
>  (buffers 976 638))
>
>
> -- 
> https://snarfed.org/

At my machine, which is not fastest, it took 55 sec until cursor returned.
GNU Emacs 25.1.91.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2017-01-02

Linux sprache 3.16.0-4-686-pae #1 SMP Debian 3.16.39-1 (2016-12-30) i686 
GNU/Linux
[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#25682; Package emacs. (Thu, 31 Oct 2019 17:09:02 GMT) Full text and rfc822 format available.

Message #11 received at 25682 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Ryan B <public <at> ryanb.org>
Cc: 25682 <at> debbugs.gnu.org
Subject: Re: 25.1; font-lock: fontifying too slow in some modes on very long
 lines
Date: Thu, 31 Oct 2019 18:07:53 +0100
[Message part 1 (text/plain, inline)]
Ryan B <public <at> ryanb.org> writes:

> here are steps that reproduce this, with gnu emacs 25.1.1 on mac os x:
>
> 1. put the single long line under the === below (18572 chars long) into a file
> 2. run emacs -Q
> 3. type C-x C-f <filename> RET to open the file
> 4. type M-x compilation-mode RET
>
> this consistently hangs emacs for 9-10s for me on modern hardware, a 2014
> retina macbook pro.

The example was corrupted in transit (line-folded), so I've included a
fixed-up version as an attachment here.

Running M-x compilation-mode takes about five seconds for me, but this
laptop is pretty fast.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no
[long.txt (text/plain, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#25682; Package emacs. (Thu, 31 Oct 2019 17:27:02 GMT) Full text and rfc822 format available.

Message #14 received at 25682 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 25682 <at> debbugs.gnu.org, public <at> ryanb.org
Subject: Re: bug#25682: 25.1;
 font-lock: fontifying too slow in some modes on very long lines
Date: Thu, 31 Oct 2019 19:26:23 +0200
> From: Lars Ingebrigtsen <larsi <at> gnus.org>
> Date: Thu, 31 Oct 2019 18:07:53 +0100
> Cc: 25682 <at> debbugs.gnu.org
> 
> > 1. put the single long line under the === below (18572 chars long) into a file
> > 2. run emacs -Q
> > 3. type C-x C-f <filename> RET to open the file
> > 4. type M-x compilation-mode RET
> >
> > this consistently hangs emacs for 9-10s for me on modern hardware, a 2014
> > retina macbook pro.
> 
> The example was corrupted in transit (line-folded), so I've included a
> fixed-up version as an attachment here.

The profile is below.

> Running M-x compilation-mode takes about five seconds for me, but this
> laptop is pretty fast.

Yours is an optimized build, right?

- ...                                                            3375  98%
 - compilation--ensure-parse                                     3362  98%
  - save-excursion                                               3362  98%
   - if                                                          3362  98%
    - progn                                                      3362  98%
     - let                                                       3362  98%
      - let*                                                     3362  98%
       - unwind-protect                                          3362  98%
        - progn                                                  3362  98%
         - compilation--parse-region                             3362  98%
          - if                                                   3362  98%
           - compilation-parse-errors                            3362  98%
            - let                                                3362  98%
             - while                                             3362  98%
              - let                                              3362  98%
               - let                                             3362  98%
                  while                                          3362  98%
   Automatic GC                                                    13   0%
- command-execute                                                  50   1%
 - call-interactively                                              50   1%
  - funcall-interactively                                          48   1%
   - execute-extended-command                                      48   1%
    - execute-extended-command--shorter                            45   1%
     - completion-try-completion                                   45   1%
      - completion--nth-completion                                 45   1%
       - completion--some                                          45   1%
        - #<compiled -0x1ffffffff85d3920>                          45   1%
         - completion-pcm-try-completion                           28   0%
          - completion-pcm--find-all-completions                   26   0%
             completion-pcm--all-completions                       26   0%
          - completion-pcm--merge-try                               2   0%
             completion-pcm--merge-completions                      1   0%
           completion-basic-try-completion                         17   0%
    - command-execute                                               1   0%
     - call-interactively                                           1   0%
      - funcall-interactively                                       1   0%
       - compilation-mode                                           1   0%
        - run-mode-hooks                                            1   0%
         - hack-local-variables                                     1   0%
          - hack-dir-local-variables                                1   0%
           - dir-locals-find-file                                   1   0%
            - locate-dominating-file                                1   0%
               dir-locals--all-files                                1   0%
    - sit-for                                                       1   0%
       redisplay                                                    1   0%
  - byte-code                                                       2   0%
   - read-extended-command                                          2   0%
    - completing-read                                               2   0%
     - completing-read-default                                      2   0%
        read-from-minibuffer                                        2   0%




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#25682; Package emacs. (Thu, 31 Oct 2019 17:33:02 GMT) Full text and rfc822 format available.

Message #17 received at 25682 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 25682 <at> debbugs.gnu.org, public <at> ryanb.org
Subject: Re: bug#25682: 25.1; font-lock: fontifying too slow in some modes
 on very long lines
Date: Thu, 31 Oct 2019 18:32:22 +0100
Eli Zaretskii <eliz <at> gnu.org> writes:

>> Running M-x compilation-mode takes about five seconds for me, but this
>> laptop is pretty fast.
>
> Yours is an optimized build, right?

Yup.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#25682; Package emacs. (Sat, 23 Jul 2022 09:04:02 GMT) Full text and rfc822 format available.

Message #20 received at 25682 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Ryan B <public <at> ryanb.org>
Cc: 25682 <at> debbugs.gnu.org
Subject: Re: bug#25682: 25.1; font-lock: fontifying too slow in some modes
 on very long lines
Date: Sat, 23 Jul 2022 11:03:17 +0200
Ryan B <public <at> ryanb.org> writes:

> i occasionally have very long lines in some buffers, e.g. 10k-20k characters.
> font-lock-mode often hangs for a long time (5-10s) when fontifying these lines.

These issues have been fixed in Emacs 29 -- long lines no longer slows
down Emacs (to these degrees), so I'm closing this bug report.  (And I'm
not able to reproduce the problem in the test case here with the current
Emacs.)

There may be issues remaining with long lines, and if so, please open
new bug reports for those issues (and cases for reproduction would be
appreciated).






bug marked as fixed in version 29.1, send any further explanations to 25682 <at> debbugs.gnu.org and Ryan B <public <at> ryanb.org> Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Sat, 23 Jul 2022 09:04:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 20 Aug 2022 11:24:10 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 307 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.