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

From: Andreas Röhler <[email-masked]>
Date: Sat, 11 Feb 2017 15:07:36 +0100

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