From 8fcd33b2100606efd0174e0d8f536d44486b35a8 Mon Sep 17 00:00:00 2001 From: Marcus Hof <13001502+MarconLP@users.noreply.github.com> Date: Mon, 21 Oct 2024 22:44:19 +0200 Subject: [PATCH 01/14] feat(cdp): add microsoft teams template (#25652) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- frontend/public/services/microsoft-teams.png | Bin 0 -> 9929 bytes posthog/cdp/templates/__init__.py | 2 + .../template_microsoft_teams.py | 83 ++++++++++++++++++ .../test_template_microsoft_teams.py | 74 ++++++++++++++++ 4 files changed, 159 insertions(+) create mode 100644 frontend/public/services/microsoft-teams.png create mode 100644 posthog/cdp/templates/microsoft_teams/template_microsoft_teams.py create mode 100644 posthog/cdp/templates/microsoft_teams/test_template_microsoft_teams.py diff --git a/frontend/public/services/microsoft-teams.png b/frontend/public/services/microsoft-teams.png new file mode 100644 index 0000000000000000000000000000000000000000..8c06355885650f683fce3cef6d973a138219325e GIT binary patch literal 9929 zcmeIYWmr{T^e#I0rg78V2ug@ZY@}l&-6hfj(v7s_raKfRltu+Xy1N?`P&%c%JJ0_8 zpL?HsKb>#q+xfKST5GH^#~jaCV~+P7Gg4hu4iA?a7XW~#ATO;600cFJ0BlUu#n2_+ z^1nM*O}Q7K_!sRa0E|FETJojW>)rHsNYb&Y?iQ`FxsE|@?!h4BBKgRp&+C}AkBKVG z%tzMQvUsSCm!j=*&;wIPa4V2XF_F}{dKn|VjK?tU&c|HDDj6fJ^6I&=OWiCpgWTnV z-0(T=b-h?h3h(-BRqgZLEv-A#rCHa#x&@)r?E-@uN1_!%4C%l|ZRC;13a_&Uf)oi5 zQ3%prGYoX_F3p#!o{bSCP!nPt=|Ug~dRF7GXSmqlE2eay=qm(B=;=$&j)p?P4~Pb1 zJQ*Qad3$8Bk%LlUyC{XLE3i*JO|nbvFrEDmX|#0r9;bmWT!4)9$Znh<%z>mYC>IGB z1?!Z39*v!T>88XsfL$Gln_)&QJ|ko<_1WsUHSTo2H%`OYYgxMI!98%{Wjb}Qz$#I0 zaOD|(0f8XNZ4M+NreYhOs5CUhz{EeL+5+LfGq3B&q$MgN@3A|DalON<49JD%&mPV< zqO4u4%Avljcsj6wXYBt|(v6U|89fUQC!!BdrV0t=F8%K4v09*f!tR&P&Ir{1sJL>l z6lO2yvxy`|IP+8XK)8A7_#lOJCJ&LUG`3G(nb!wwa@9eh$QA0Qg}Nn_tqBYgrS5Ea?GmIvf- z#B-ZHHtarkCDr`H2G9g=%kSGXH47bs6c*PM5|4%OnmPXZtdk{K^gS|F47!|<2aB22 z%|0Gn=l5rd+u08j9l;1jv*(5b76+x9s^F`$YEjOESCejyIABymsiOLMY*FH5TNV0M zqh&d{1bbqSty5l_`jc-pw;a2y$bnlj=I0bLI&G=4sNnr!w zz)O@@zZSeCpD_{$xL$OQal*Wq(StFY8If$5S|0abO^?>_j@x8-JOaIeojMaW^U7IN zLWBjZ54)2I-~wUx&0XbTduN?L1gA<+kv#Mu_j~cK7I!Ib%!?tZQ-0BQmh#w=F(czM zPba$Q8iFT`V7QUqc57xF%YBp!V{-w!t3ST_>6U7C5ub)S0%S4je^)McvTo@!^~gN` zlDef;<4@b3OkK#4v`wy~zC;A9KlkY!^D_{aceG$RfBgQ?^6AeMswZD08Y-F1=+-pk zpg<+j$Y9}$IqWS)E0K!Spsp^AkN@w>msUTe2t=qQ?jqGSEZ)ilni51Z8E&w^Z3V^9 z^Bi;)tgpq+VTl<*Z29UNA;B|SlRWJ=5{ro>o+ zFH*|2nIuv@M9VkHd1w-+wnChZ72|<9eePIHz2JTMDZ=5It)qDJ^F%5lV6M4KdRqqHzEw{Pp8dqBM0Pfrtg6;598q{(fjFXS7qr)0m{if z>44H7*U1E27is%7Vw>nGSL$ECl|x;r^}}iK9U&ub7OW6HHv#IRlHwHQ6-SNY9u4g( zHex(FZ!UNM8RC6-19zPcwvUNP8{~2K`Awq=A=uDR+LzPNnz$n)yqByf<--maATgCS za$gOy$28Nk|EXV55R<}%m8OS&(i19e5Zp-FM z7@JlDpJLtmgG#*HT?B4X3$C}du~v-(U++a;_%pQiC|dEBy{o|?H09K@S<)~#LrlkW zgZG!3*kunG^u7AG?jGrZVTM!D>LMF!*9SvQEgzW!p)f;TW23tnWl_8oL5D6ImfTcH zGM|>{f*HvYc+PtD2^y3dUs2#aoI=e(Y6jCXX3#LcZh{1U|HNL-Qh$7L*I)Mj^!OFM z!-r$aK>U-6%)2Yg11*;24_yQq`EILhV8aPhw6f%f(?I`Db+}Y7lEa_b{Al84mdCnZ zM(v}Er^W-s-uhUj1f}kZG}FY*U9;JOs(>y8Q6F_V`5Ghy)uMl~Ulx=&$4L=Aoic!2 z`Qwgk{OQcfl*{2Ota~>Y=N3c^zUC(VcEA8XaCQ>>l+CInXu?%9n%`j3@`2u}tA&e3(c9zqp_!v%4J)T^_ws zj{%58<%z#l^f);>&vE3oxo@DYD>fVf_-jg4^u8Y!DNhQMLe1`($9S-Trgs0j$Jl9+ z8FuC9x+C=8JONP7s9z%G-b4R4NlU?Q8hr}VFXJ?}{09Rs9fbmfkDBC>s^rq$a~1JPVzI_WVausD7#~R*S=FaL}n!H1ZKVvZ^UY?Fy@~0 zGWsyF$#Gb)4 z-`STw*+>766p)v+hl-TOpW4#3>MdMstFw~NL-D7X-`*Jqrz=rNcpXVxX=;On7ef{W zk$|yo6y0CU_9*0%-cQtR^lzRlA(IVPwhFyXk^!N6xg=blp7Pigf=F_GZ+l*aS45Md z@EUVViks!mqL$kw-91)-3oZS*!`K9EHN3tBQE)oE;Gyhmr1U3J00&$ZnuqP!ZB>tn z4C?O$I3*A*wCFbkUrI=wDYcaU{A2dIlmFdxza@9(awylXFQFxu*wOnhCVHwllYE1v z9=w)Mv#7?ea(Cy&^nGE8ORN%Y7?O_+VI43F<#6$UGSPWL^P@^KkygsDU5kwbORCg_ z#d0b1)DFGFsJ>U#us`-vMfwsg9uMWqgvK`WRN6P z7*c`(6NevI$C@1oB#EJloF^ytltw(qPRz;`ij>nwQTj(*@H;$VfosgwFFEO0KW+fLzhUtD7l|LHlL9*&_K6xtlF4fEo zikt%Y57LA$xf$cy$BMC~dc!mhW=noWN)S^)H6z-T4%X8*`FGxviYan62 zZC$kdRK9W5NGEaLOON%%_H(#&LHZgL8)%=pneveqTdmo-aK`&}D|s;z(_9a&S-P+W5Yw;V z4sW^%Acbn0Lx}V3E&RDX?3H|j4suC?ubHU0v(Uq1#W`(E{2|D|f&0rBmveo%f;LEY zz7$cv)#OEIeTKjCZ4Tp~xzEJ;jYj#NZJKEbSJ++##>K|!MZXgM^%**nvED{I=XAe! zd>c$4!Y)3rF!4_aVDpPKGTP6;pW5jv8W^1Gv{pRxI-_I_V?m0K85;{vk{rCysa^hi zUw2=a-nW#EW5s#TPqe2nu6{=^im@}PKUpTdKSqd|jNcQOdvzxtmj@VYw{ML@ZH%=g zu8}?PZ?zVB-CH`WhIqsA(1WU{o~{)bN?*E-5~BRwx~BrXA1q2~+B|iDeh23{HS3`v z!PL6Eq*!#k&k}Wj2p(nfP!YQi;~zz}&&^B6oo-ku5{aA5VtZWFaBuO;gP`9{sZqwl z%R8&hDy3hEk(GVL(5AUa3E7vTrO;e_`akPWTatAE=0;lG^Hl;1srQG=nb@E3X)eq# z?^(fphTWB@Af_!UQVP|oXds9JMT|-#W5D)=ItWdUjw0Ym!o~p%4CYNtyb@1UN&PK; ze=pl@zkH5Pn>Zx+@tS3RcZZ)qx7uF0U+Fsr=(ok{DCGjAIx@2=w&gpcnfjiE@|{&I$FOAH{b@#ZzOqp`yA zSAxVfPx0MV8n1h(h|pQ+-Blk_3_fDaE}P8hK%aOPRt`nN%;ndgl>_86OzQTsUa_R- z`6@aNENVtPxQqADjp+LBi`Rx+6@df#3M)BxOE+`Sh@)s|O(6uw-$ z7?udx!rs4QhJWCSRPL$sbP%BKTz}>$d`P983ehmQ471Zc);frJ80h{HNNh_L5w*gl`3OQd-ItN7=G z5B7<9C0>~LbT|hIKVzbY@w<6htWbGaA!Ems5%emuoNoT50Vz&_G1?|pSTnlRYf%yx zm-qqvV_!rax-9maOSs8e*}>?Hl#18^B^np;zc@OKbQQIEAMcv_LIML^(5T5PcPs7l z>QyigDR(!xVV}R=CSPD>YI~7|54d_-gwgETpF9g!Sc`txu=I9-={K&HnUKvW21h(M zt+E*f`k>quHHYbO!@{%1F`mQq=CgC1SV@poV2IeEznr6pRY-KCophkVnu)-J(>*co zn0kN=8okh5ly7U{A9zdKz+wLRi&^MtIs!yloI85KlR4>e$`YFLy;#WBy7=g{^wnTzEjNV1-EwGd&@6Gd@tlDRqM#8cH<89dhurESb&75GT!UZm-o6`n9ZGquvirboQy zYz++rdCserT3-M6S&Wf6Z*#|DaN@}UOKNS6)pddhy`P&~{Q1bqE>9s~d&>8AswTdZ zLX{?I^R3;;Lgrl~hQxIj_0H6v^=gOa?kC_t8%66p0Ocu65CnNwa`7^XJ}KA5h9aLv zaT%eW8=;{Pi5221nFINB9L0x3FDXs9U?l8P69RJ)w9ytrhe!qnKi27)dcx2WJA2KzzJai8 z%5%+#nR|y5voD(O4AhH3<4Xw@V_}e0<73h8*Y@B+_|6<@C1YQ4tL5HK&aNO##Fm*l zy3JI!N2Fn7q)cRJaC0UN`5HL`nMQZ!qVcj`|Nbj4)A#6P@-BxQnDZom28`KIs%bL8 zXe!{H%Y#~eaP=A8#ujX{K^Yxu(22J+v`^Gd?@vm+LmLa|eRGKe%GvJZ>OE+&zVKJ& zE~gt^p|6@gLbtV8GDzl+{cwE&4T1=`Ffrmvh?B!KjE`x&&|ua(w>Kb%a`|^P zkRWq-z4e)@r0I~qzQN}?Ug?5q5r4`v!<)s)WOQ<~nP75Jn;`oO2xDT#+#!3*tGI z-W~H3YJv!i{GlDb*jYx_ylJS%147aMRy%I*RgX;1{5R?Hjkftf6Kiem zh}gUSR!DNrYLsV&wf?K%8wlb}HWY<|&)(@_A)?$1W_QBJdQ1inZGqQa7yjS53#M6) zz${d@=}eugD&+7dBb*H0(1suwrpSQ#%JJfKhH-=Eek2<5wjS%R$qE!e5HB!}Odp#V zubb%T2#h;TMp^UK>L5`sP_Y*XHS+N;HSOR(Im6ulmhC4+4zK|_@B=2x-3}X@DC)ww zCWkyo8G2UqMH$L6-qQpn1o`Qn)4Dh)v4So(psuaTEP_&nsG`LH1^qVWtN)dwJY&eSwfj1i`)_-WW(=)6 zZTtJB5C=?homTD_b-c5cOQhiI<7B>HGAPD8vI3Rex}uU&{%9glp}Sc5M3x#$@jvDq z4LPh}mDXek2=ldso7%9!5fwNI0gO$@kDZG!z&jWiehx*prjKso$%BLzz#Y5s5VgJi zN^Y$p2P<44#`y&G^De4xo?xPgOdX&eF6H+B`y3avbEOe4`}}_@GJ*4CYWa>e-B5Tm={jAc)e)O(iArI6qB5Sc@_Qf&-2Sfb`!L=if0&p_y|i;J@#SV`v9K%tKls z8wKAU^vrL@p{)LYg<&8>hb|?V%TD;8+CF4a%?aWw?`^?c6r6>0@NA1~PIG2E5_Trw zcbpB&$gn0HZE}L0%kESq^9y9oT+@S$3xd{5nFLujGX<4EBav6RS&S?|J`3?b$!Ipr z+UZTKrk4JfS2R>^?*`h-IIo#<;Dt#H8G+a z)|hhaAOKQ$h|urOvxV-sh5%onS!X=eic4Z1LJqkIk$wIo`{FBVQE#kza65DMO%4*? zLy_pXJJWNaRom4-(#v$dbyWrfspY`p}2m$#8`sNaU6Di!dYEb16$Nt`op7m10rx?AQt0xT$jE)!uFKpEWQO~D;<90(4V{uM zF7D2zFWsCEe<#t{ARYbyIPw3tcTfBWMBunoL zRfaPGc{wkK>Cp=1ZcqKss$M)A^0qW7RIXovvGvom#3ubF8 zF3OUNMvT@tx`s0Uj`_L|h9cOLkl+%d^2JW$Q?drYs9@QX;j&s~GK*gN-cDxNYAI5k z*Gq7=5P3@%W}5T!hVY|~KNA;ZQ4pWsX)bPeSHzWTH^c}~|5q?%KJ|hih(lHHcFyx= zRCjs?Mfp-w>Q2t(+Ym4|T3F6)GC~qHWS2k>R+3wJ3}(9|oSLd|=IUx-lcq0Jl>SU! zg2#SHb|CLEp26$?You&`&J!+@w=#+|uk&;7>ub})gpkY=ml9k>CApj|XZ3j~BXz9l zki^8kkM0Nf53BBT+_W-JJ^?Mo0SXMDpebV7{t3fD-JX zztQnsipSoQ0NJI^_ciE!fDnfwCoAjGzeIGg5cTM#eXgb-mMIDx?Pi!GzbUvV8(vl! zKoGe7u?$Y3{oxGt(AKx?d=ptXU26T(@fWj+0sAE$3!7?~$aYBZLW|L`$#6#KqBzv| z@>5mDx<7Y}ok;q$`?%NkU*d9-fPKuFEJ+J%dMKnt1n2fUj%{h5f2~DZwf<5>=F_{G@!(rz~3w{NJt-&I~4IBdYx(1RSE9~6FPN^TW+u$RErjOlb z#5^+zkGDD(DCz-Y?4u0Ne*q;BL8mjN$ptc`&*pwHF)W;-6)-XvahIMFP6x z8iy)y){Ofa9P^%nWs=qqB9n`zN3(um3t<<2;tSM~Mb{Rt$93$STN*?tNEv3kZv59p zb8zz=3tnQH;}$fl@}%{g0k6L0W^XV+UCrOa_=0=mZ@the!@!~5dXeZfPx_RzH6wO- z@G{N1mpjhNvnfBk)&cY_XV}&5D3+?%2hsY${X%REV3U!f)iQO1568^2NlF|-5l?J% zyu^Ev47hj^nKzK8orUB~vc&_8)2iUP#J4SS+G9ELPu+U^@GmNm*BO=Ys8m(P1J*ya zVmpunPr?kVZp#jn9@FI#PC4;L+N4$Ua$Qs-t3d2_X^pBn_RAl>fx5Llv-YJN-j4)g zw0jmUHX&$2|IXVwxt)y!U-^Hr(6~90__X}ovvi@BO6(^!wJ68lRP_D&$5IDUT1l|y`O$t$w?ux&KC`+ z{#MI=awaXD9DGeJ-S=IO58h3f>K#n}X7gEVXl~#xs=wpfmrO7Z^W#(9_TAI5RUMy0 zdoev7;aek+l@P1ce4SSUr}ca&%bnLAc%dBdPG)|GxFxvlm6Xb=1MX_V9~LMGJu&i~ z%9NXK-unaqrsscW0f=TKFfSI!2CD?#oI7d_{gH|~I#!kmbW^cvtH60Xm zxdm*Ovp$0!4*@H`?1&}8GrP5BybVW8UXxZvt~uMC=!V|5G4~0bJI!TAzXvKHi*2_{ z=kD8wH%;egC)zR;)2VgW_YEa5if*+#QFgrc8Ifu?-=(t|x%Ih{76atF4;BHxs!(g_ zBn@*FK&CBl4W}P^3ZU^Um*B0d>4o%O#Aq9xeUKo_X_>g`t5mDI7`GVEA&Ob{bJ=e& zIA3N6#*CG(70Ta7VOTUK?{CHRH~CM)5>AUTz^!syW~CXb8-#W(os~(vX`}j= zKI+VOv|P4wlgh+0hZuNexvCgl8xl@d*cGZH&cU5XdEa zz!}YZwGB=*G)UCA`{9F{@pVgF#zcDsi5FTM%=C@2z zEAaX0a6hXNE@e2TYgE=4;2&hc2@W1+K6ful4%%P=m*pAbSY%D^ea^NtwqfHw+t1IN zaDZ>Wse@mSHtd>JypEz~lMUhK=jZ;;NSNhv^c7gt`p&ss1mUSz@g}sq{u^4WA_;-6 z?XyRWEgS`#dIzj?gqB^5NQ1@jg8j?1cV>19j}-6m7CFQ{n2Sl+S{Jbb=Nb6^($-2! zPq&~t-kBV^-yLVH2{}QppKC+v?xM zF`38>O78WcXEam^XUj&l@z)40%GRHCW2*tZiZG$SKLDdtU%?N%YvKqe=mupS@qw0` zKha>twq3aRk`ru=+shimjtf>7A-<#t}IMH4?8IXy2$OyTvW;@~pw0oMyO z+%;Xe;`FhD!TudN5@faDKAFBh$ulfE4^1#;JoW1%H1N2O4r5Dl3vj|8$mb@yfQu-Ygv(&=I3S zBMHZRs#6aZ5qw)?D2V0Vc6_oFGNa~7xo1)Il;KX@(d&7NWthFbsotu{b43Hya3(O! z?YB3JP?4J9L|?{5GE;}8j3h*Oy{Bq&{cNH4t|c^iqWuAAeDzl z4~E_GYjgOKH6d?&R4aaJ%(yZxrol8o0-BAFQ*!n`uLvvncx?Pok?9g2a8PxZbd)`e z=8QJq7iX}02^Mo}U)N{M)mF?pd;eza)slMwD;{fwhKgblvn*zP4Pi=p=X6~XLhGxoksXAB_pxp{w~KHJ&( z9I2tvLu;3y^*ct&#h$H*v6%?J=0w(dKxIOEufOa9ji?wf655~_Y|qFMrCkHz)uxHq zIX|qEUMF8A$4MY0ed9?ZT2@xC`Rwp{zL*%UG}^-;5~$X0;~7tB`Zi^Ew$D1Q*CXDW zE+)+Vhr=vDgt9R;az94eAlYDCqp58~_*{+&^xo2*2|)|XZvXIn$x95>7<4Ydo$ZO- z#`W&g%9TuP(Q0E~Hml3yProl0Y4^u)zXpYZ?& zTy@{~L`2G##lV>nvMSA&LWKswuk$2Am!_Js)`%0lyE!`lNVN!I9}qJ&P~iFhkXEaDq+C9Yj?BVpECH zew+J8xqEezHz2%9W*GY+pE3#{Gz57_FoLpB{0+9=N1h016pCRa4JCnVFk+)dK?yQc k!E9Nm^F9At!5fKdR(eWTjLLe{*)*Uaqbgne!X)T_0ifLF#{d8T literal 0 HcmV?d00001 diff --git a/posthog/cdp/templates/__init__.py b/posthog/cdp/templates/__init__.py index 30a7ca761f8c6..d4ed9189111ff 100644 --- a/posthog/cdp/templates/__init__.py +++ b/posthog/cdp/templates/__init__.py @@ -28,6 +28,7 @@ from .activecampaign.template_activecampaign import template as activecampaign from .google_ads.template_google_ads import template as google_ads from .attio.template_attio import template as attio +from .microsoft_teams.template_microsoft_teams import template as microsoft_teams from .klaviyo.template_klaviyo import template_user as klaviyo_user, template_event as klaviyo_event from .google_cloud_storage.template_google_cloud_storage import ( template as google_cloud_storage, @@ -62,6 +63,7 @@ mailjet_create_contact, mailjet_update_contact_list, meta_ads, + microsoft_teams, posthog, rudderstack, salesforce_create, diff --git a/posthog/cdp/templates/microsoft_teams/template_microsoft_teams.py b/posthog/cdp/templates/microsoft_teams/template_microsoft_teams.py new file mode 100644 index 0000000000000..da8a1506f9d61 --- /dev/null +++ b/posthog/cdp/templates/microsoft_teams/template_microsoft_teams.py @@ -0,0 +1,83 @@ +from posthog.cdp.templates.hog_function_template import HogFunctionTemplate, HogFunctionSubTemplate, SUB_TEMPLATE_COMMON + +template: HogFunctionTemplate = HogFunctionTemplate( + status="free", + id="template-microsoft-teams", + name="Microsoft Teams", + description="Sends a message to a Microsoft Teams channel", + icon_url="/static/services/microsoft-teams.png", + category=["Customer Success"], + hog=""" +if (not match(inputs.webhookUrl, '^https://[^/]+.logic.azure.com:443/workflows/[^/]+/triggers/manual/paths/invoke?.*')) { + throw Error('Invalid URL. The URL should match the format: https://.logic.azure.com:443/workflows//triggers/manual/paths/invoke?...') +} + +let res := fetch(inputs.webhookUrl, { + 'body': { + 'type': 'message', + 'attachments': [ + { + 'contentType': 'application/vnd.microsoft.card.adaptive', + 'contentUrl': null, + 'content': { + '$schema': 'http://adaptivecards.io/schemas/adaptive-card.json', + 'type': 'AdaptiveCard', + 'version': '1.2', + 'body': [ + { + 'type': 'TextBlock', + 'text': inputs.text + } + ] + } + } + ] + }, + 'method': 'POST', + 'headers': { + 'Content-Type': 'application/json' + } +}); + +if (res.status >= 400) { + throw Error(f'Failed to post message to Microsoft Teams: {res.status}: {res.body}'); +} +""".strip(), + inputs_schema=[ + { + "key": "webhookUrl", + "type": "string", + "label": "Webhook URL", + "description": "See this page on how to generate a Webhook URL: https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet#create-an-incoming-webhook", + "secret": False, + "required": True, + }, + { + "key": "text", + "type": "string", + "label": "Text", + "description": "(see https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook?tabs=newteams%2Cdotnet#example)", + "default": "**{person.name}** triggered event: '{event.event}'", + "secret": False, + "required": True, + }, + ], + sub_templates=[ + HogFunctionSubTemplate( + id="early_access_feature_enrollment", + name="Post to Microsoft Teams on feature enrollment", + description="Posts a message to Microsoft Teams when a user enrolls or un-enrolls in an early access feature", + filters=SUB_TEMPLATE_COMMON["early_access_feature_enrollment"].filters, + inputs={ + "text": "**{person.name}** {event.properties.$feature_enrollment ? 'enrolled in' : 'un-enrolled from'} the early access feature for '{event.properties.$feature_flag}'" + }, + ), + HogFunctionSubTemplate( + id="survey_response", + name="Post to Microsoft Teams on survey response", + description="Posts a message to Microsoft Teams when a user responds to a survey", + filters=SUB_TEMPLATE_COMMON["survey_response"].filters, + inputs={"text": "**{person.name}** responded to survey **{event.properties.$survey_name}**"}, + ), + ], +) diff --git a/posthog/cdp/templates/microsoft_teams/test_template_microsoft_teams.py b/posthog/cdp/templates/microsoft_teams/test_template_microsoft_teams.py new file mode 100644 index 0000000000000..737f9d1722047 --- /dev/null +++ b/posthog/cdp/templates/microsoft_teams/test_template_microsoft_teams.py @@ -0,0 +1,74 @@ +import pytest +from inline_snapshot import snapshot +from posthog.cdp.templates.helpers import BaseHogFunctionTemplateTest +from posthog.cdp.templates.microsoft_teams.template_microsoft_teams import template as template_microsoft_teams + + +class TestTemplateMicrosoftTeams(BaseHogFunctionTemplateTest): + template = template_microsoft_teams + + def _inputs(self, **kwargs): + inputs = { + "webhookUrl": "https://prod-180.westus.logic.azure.com:443/workflows/abc/triggers/manual/paths/invoke?api-version=2016-06-01", + "text": "**max@posthog.com** triggered event: '$pageview'", + } + inputs.update(kwargs) + return inputs + + def test_function_works(self): + self.run_function(inputs=self._inputs()) + + assert self.get_mock_fetch_calls()[0] == snapshot( + ( + "https://prod-180.westus.logic.azure.com:443/workflows/abc/triggers/manual/paths/invoke?api-version=2016-06-01", + { + "method": "POST", + "headers": { + "Content-Type": "application/json", + }, + "body": { + "type": "message", + "attachments": [ + { + "contentType": "application/vnd.microsoft.card.adaptive", + "contentUrl": None, + "content": { + "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", + "type": "AdaptiveCard", + "version": "1.2", + "body": [ + { + "type": "TextBlock", + "text": "**max@posthog.com** triggered event: '$pageview'", + } + ], + }, + } + ], + }, + }, + ) + ) + + def test_only_allow_teams_url(self): + for url, allowed in [ + [ + "https://prod-180.westus.logic.azure.com:443/workflows/abc/triggers/manual/paths/invoke?api-version=2016-06-01", + True, + ], + ["https://webhook.site/def", False], + [ + "https://webhook.site/def#https://prod-180.westus.logic.azure.com:443/workflows/abc/triggers/manual/paths/invoke?api-version=2016-06-01", + False, + ], + ]: + if allowed: + self.run_function(inputs=self._inputs(webhookUrl=url)) + assert len(self.get_mock_fetch_calls()) == 1 + else: + with pytest.raises(Exception) as e: + self.run_function(inputs=self._inputs(webhookUrl=url)) + assert ( + e.value.message # type: ignore[attr-defined] + == "Invalid URL. The URL should match the format: https://.logic.azure.com:443/workflows//triggers/manual/paths/invoke?..." + ) From c3b0cb21f5e69f974e692d62c136de5b6004b9f5 Mon Sep 17 00:00:00 2001 From: Paul D'Ambra Date: Tue, 22 Oct 2024 10:38:58 +0200 Subject: [PATCH 02/14] feat: watch next and sort different (#25701) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Michael Matloka --- ...t_session_recording_list_from_filters.ambr | 151 ++++--- .../components-playlist--default--dark.png | Bin 18423 -> 18414 bytes .../components-playlist--default--light.png | Bin 18004 -> 17977 bytes ...ents-playlist--multiple-sections--dark.png | Bin 14300 -> 14296 bytes ...nts-playlist--multiple-sections--light.png | Bin 13993 -> 13980 bytes ...components-playlist--with-footer--dark.png | Bin 18423 -> 18414 bytes ...omponents-playlist--with-footer--light.png | Bin 18004 -> 17977 bytes ...er--trends-line-insight-detailed--dark.png | Bin 21655 -> 21701 bytes ...r--trends-line-insight-detailed--light.png | Bin 21344 -> 21385 bytes ...r-failure--recent-recordings-404--dark.png | Bin 102908 -> 104250 bytes ...-failure--recent-recordings-404--light.png | Bin 106269 -> 107721 bytes ...layer-success--recent-recordings--dark.png | Bin 55364 -> 57176 bytes ...ayer-success--recent-recordings--light.png | Bin 55379 -> 57238 bytes ...uccess--second-recording-in-list--dark.png | Bin 55303 -> 57100 bytes ...ccess--second-recording-in-list--light.png | Bin 55361 -> 57206 bytes ...s-app-errortracking--group-page--light.png | Bin 106113 -> 106113 bytes ...p-notebooks--recordings-playlist--dark.png | Bin 41252 -> 44264 bytes ...-notebooks--recordings-playlist--light.png | Bin 41622 -> 44543 bytes .../components/CompactList/CompactList.tsx | 4 +- .../src/lib/components/Playlist/Playlist.tsx | 80 ++-- frontend/src/lib/constants.tsx | 1 - frontend/src/queries/schema.json | 8 + frontend/src/queries/schema.ts | 1 + .../project-homepage/ProjectHomepage.tsx | 4 +- ...ecentRecordings.tsx => WatchNextPanel.tsx} | 31 +- .../filters/OrderingFilters.tsx | 38 -- .../filters/RecordingsUniversalFilters.tsx | 55 --- .../playlist/SessionRecordingPreview.tsx | 13 +- .../playlist/SessionRecordingsPlaylist.tsx | 81 +++- .../sessionRecordingsPlaylistLogic.test.ts | 84 ++-- .../sessionRecordingsPlaylistLogic.ts | 71 +--- .../tiles/WebAnalyticsRecordings.tsx | 2 +- frontend/src/types.ts | 6 + posthog/schema.py | 3 + .../models/session_recording.py | 2 + .../session_recording_list_from_filters.py | 9 +- ...t_session_recording_list_from_filters.ambr | 399 ++++++++++++------ ...est_session_recording_list_from_filters.py | 6 + .../session_recording_api.py | 8 +- .../test_session_recordings.ambr | 40 ++ .../test/test_session_recordings.py | 2 + 41 files changed, 674 insertions(+), 425 deletions(-) rename frontend/src/scenes/project-homepage/{RecentRecordings.tsx => WatchNextPanel.tsx} (76%) delete mode 100644 frontend/src/scenes/session-recordings/filters/OrderingFilters.tsx diff --git a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index 2a88759e116ee..c21b2882da6ed 100644 --- a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -16,12 +16,13 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, %(hogql_val_3)s)), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, %(hogql_val_3)s)), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff(%(hogql_val_4)s, start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s - WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_4)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_5)s), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_6)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, + WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_5)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_6)s), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_7)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id FROM events - WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_7)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_8)s), now64(6, %(hogql_val_9)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_10)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(nullIf(nullIf(mat_pp_rgInternal, ''), 'null'), %(hogql_val_12)s), 0)) + WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_8)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_9)s), now64(6, %(hogql_val_10)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_12)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(nullIf(nullIf(mat_pp_rgInternal, ''), 'null'), %(hogql_val_13)s), 0)) GROUP BY events.`$session_id` HAVING 1))) GROUP BY s.session_id @@ -47,9 +48,10 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, %(hogql_val_3)s)), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, %(hogql_val_3)s)), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff(%(hogql_val_4)s, start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s - WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_4)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_5)s), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_6)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, + WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_5)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_6)s), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_7)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id FROM events LEFT OUTER JOIN @@ -59,12 +61,12 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_7)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal, person.id AS id + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_8)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_8)s), person.version), plus(now64(6, %(hogql_val_9)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) - WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_10)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), now64(6, %(hogql_val_12)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_13)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_15)s), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_9)s), person.version), plus(now64(6, %(hogql_val_10)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_12)s), now64(6, %(hogql_val_13)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_15)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_16)s), 0)) GROUP BY events.`$session_id` HAVING 1))) GROUP BY s.session_id @@ -90,9 +92,10 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, %(hogql_val_3)s)), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, %(hogql_val_3)s)), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff(%(hogql_val_4)s, start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s - WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_4)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_5)s), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_6)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, + WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_5)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_6)s), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_7)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id FROM events LEFT OUTER JOIN @@ -102,12 +105,12 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_7)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal, person.id AS id + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_8)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal, person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_8)s), person.version), plus(now64(6, %(hogql_val_9)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) - WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_10)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), now64(6, %(hogql_val_12)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_13)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_15)s), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_9)s), person.version), plus(now64(6, %(hogql_val_10)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_12)s), now64(6, %(hogql_val_13)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_15)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_16)s), 0)) GROUP BY events.`$session_id` HAVING 1))) GROUP BY s.session_id @@ -133,12 +136,13 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, %(hogql_val_3)s)), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, %(hogql_val_3)s)), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff(%(hogql_val_4)s, start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s - WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_4)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_5)s), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_6)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, + WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_5)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_6)s), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_7)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id FROM events - WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_7)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_8)s), now64(6, %(hogql_val_9)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_10)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(nullIf(nullIf(mat_pp_rgInternal, ''), 'null'), %(hogql_val_12)s), 0)) + WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_8)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_9)s), now64(6, %(hogql_val_10)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_12)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(nullIf(nullIf(mat_pp_rgInternal, ''), 'null'), %(hogql_val_13)s), 0)) GROUP BY events.`$session_id` HAVING 1))) GROUP BY s.session_id @@ -164,12 +168,13 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, %(hogql_val_3)s)), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, %(hogql_val_3)s)), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff(%(hogql_val_4)s, start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s - WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_4)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_5)s), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_6)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, + WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_5)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_6)s), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, %(hogql_val_7)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id FROM events - WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_7)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_8)s), now64(6, %(hogql_val_9)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_10)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(nullIf(nullIf(mat_pp_rgInternal, ''), 'null'), %(hogql_val_12)s), 0)) + WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_8)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_9)s), now64(6, %(hogql_val_10)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_12)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(nullIf(nullIf(mat_pp_rgInternal, ''), 'null'), %(hogql_val_13)s), 0)) GROUP BY events.`$session_id` HAVING 1))) GROUP BY s.session_id @@ -195,7 +200,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -228,7 +234,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -266,7 +273,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -299,7 +307,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -337,7 +346,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -370,7 +380,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -408,7 +419,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -441,7 +453,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -479,7 +492,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -512,7 +526,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -565,7 +580,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -598,7 +614,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -651,7 +668,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -684,7 +702,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -737,7 +756,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -770,7 +790,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -823,7 +844,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -856,7 +878,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -894,7 +917,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -927,7 +951,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -965,7 +990,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -998,7 +1024,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1036,7 +1063,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -1069,7 +1097,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1107,7 +1136,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -1143,7 +1173,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -1179,7 +1210,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -1215,7 +1247,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -1251,7 +1284,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -1293,7 +1327,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -1335,7 +1370,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -1377,7 +1413,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -1419,7 +1456,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -1461,7 +1499,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -1503,7 +1542,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -1545,7 +1585,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` diff --git a/frontend/__snapshots__/components-playlist--default--dark.png b/frontend/__snapshots__/components-playlist--default--dark.png index 78a17bfdf2b8b92a434ea09bc9fe1324a0fc2d8c..468e9713658778f35b46d6b68a12ab067821e463 100644 GIT binary patch literal 18414 zcmd6P1zgnYy7eF`h*FB6ARsCsAu7_Pgmj5?DcwU45(5f|fOJWBmvo09(%s!L)X>e$ z_j26(+s&EfTU*7& z#V>;EB1%h25`1u-*P)+=2nRu|cU;>)Fmg{$#AG!t#{H}EXFtN}g{Fbt%$yt@2O>zf zrz}xQcJ_E}t#K{saL079%8cevDAdSkeT}Ga#8dz~ zB{P$LV{MH9_BEgyoRW8~i=Xnkz-tACjQ5yWqKiow5J-I56_0xGOcq>Oaxfwve5{I1 z=w4t!!PAuFWTD3g*C3E?weQ;bK|$9WcOQedHAS%BfM1vIx`MCYif`YA92a$-Kcoe? zxE;4RS&4lJ>J#@S#zfWT#ounK%N8~0Nx$V_R{y8}h zd|Nud%x&Ze1o9mJ1*C0j=({y#_sB?P-_-fJ3F@qD?7Sl=>gAn{!TICqu-|YV_e&YX zk%CL3!?~cG%eQxE`SaOJN(Y>Z?4o6)Z&H(VB711)MAQjNgn4u)?zk_e@@;qgd%jcL zHdC|KjnJ;xN>}ruXnyD!S83pVk&tkuwaF8+my4WY=tpcAkh;}156t0aiVE!jhXP(i!(6q2fH9@0x68swg!Ytp`3+c~DT?^2ej-a*JL zN8Td)h(uSUrtVw3ZWp0+ws?Fx))nR)8x=maM>Bd>FjgBn5qyyo3f@!TWKt;RkTJBY%ea$1?fQ`_Rcm-RM}1b9%?0ryiSJ} z>)}}`V-pkV=+m8V&;32M0%P0Dft!U<>kMp6XoS@!1&R39m;n%pg7s%ROm4fw%nV#_Z@*x3e-0ZVDYI@r@|v^b zJ^69$n{zV_o(6q|%W;*kHX`LCFxV!>c(I3ZSKI?&lkX%1HO|uFpnTRhz(g%-9^xsh zsEk0zhzH(fy)&^o?$pKbJ z5FgI9>H2yyt+EQo9Ie&)-J`SZlU$R*g(VVj4`xXA6CzfyaqP>#rjkaoK4W{z`?)41 zDGBO~6$rL?pP(yA!+)R-Y|CD7i(b6^xPLYLq#tbi=TE?P6s=wMw*1Xze7(4r@eKlT zO}y*6@FqWp~fW=nDvBnd-}j%Mi#L$c0nmhJQf%H%Xm#xl?d~xbz$uaHB3W zGxLf_QkvvDf8-o@*LHBV7Sj5wR*At-r@^4HnVE)RanYC{;@)VQBpiy|n06zS3!{A0 z*-=eQV*RPDG3p}(GEGfG>#CGzrJt|dwyvb!QN2I?LgD3NIW?P|K1*s>;g_9ut9yaz zv@gp?2ablfkTSGsimzX9oas;Hs0sJ7FM!ctCg;R3)hm9?$g|xNoF+F)NAR6o>T8MW z1EY5)z283OO`5vogWPij17~-2BU$4ix;qwot&(z%fY&C`Z1Y$-E{FYf(EDJJRDz> z4O3aNcxG#Bf9cYY-ssNG)fB;JbuL*hZ$wo_cy*GDDg`ch2+Vl+gr}S^7Zz{rS}dI$ z5|e~~CQGYj>6TF_)-rXvK=r-xokw*H(^OMwVq&lPk%1TOtU-r{1**x%4o}+hiD&BV zsH>D$QzQVcVP3wLo}M03G=7$2I&8t~p@{{iUXz-vj&xEbN;b>w_%E zeRz0`vj;)Ymk=HywXwz#IWAWf#<0q$tP`%hXohn4fXo%r8h_@gF%~wy_la~Qv`x5L zX00vd;@DTPuVrMXzm_L^tu-a9HT4|Z$S~l{IQ50wWkP|-s5m@?+}Qo%7j8rjUR=w>-rD)f zi~^th@cbKk+B@39ZBn5=m7B{w_XR`&sNqxcC8}LEF%%60ky!I(0R|(%shozq$(zTV z_jjUgD&K#bpPd~GQs9y@5)TO)@1be;}qGYv$n()GeKpu-pLp;epCDYNfarHJ^M8?MEHja->(SBc?pV!xqN#p(` zbnk#!!yvM&yRT0}yLxy8u>*EV@6GSpTd1#}rsK)Oc9?c;Y*V9d36tZ%Y?P&;Tz763 zI*-xF%LlW+^c!BATi;j|@1kYLxu~6Q-?>5wnKtwiVSIFHXvon_y>>&Q)+|cGe9F?o=IHF;IJW#Q zn3d}HtOMQI33B`2<~DBg!^aWdb#Bl|$%(SMhLb2sWR;ZoA><&>ryA#Q6^6r~&^>$@ z5fw4XP@9+j0em^{F{ga@#1075(hTH0JV)O2*dV~-$SXt8st&NsgowmUaNkvvqXFJ;*j{6a8-ysjpU2}^qc?WkO7o+ zm{@q5``cwsR7vxSZyi(%s$+6=gHgjz^iqVa4zvqL3|?J#G>jMY#N#BU+>`MH=x<-% zeC3UT!hm~Hk9=xX)4^7Z!BNX(-T~(@^H`zD5{pT3Ny(!k)zS3?8^U!KeMvOb_?6n& zoH+>qf@S#-^kk7kD2q>{s(I~f%MC)R`EPESAa33^kY7}3Z)xY6vgHgE?Z1&!r*+It+Af1HQOhXokf3AxhPMu3bO0Y-Y8M_I6- z!T<>y8BxNf@)BziEGpKBCQrfq(x_ctSzeL1(^?)Rft`_=J9BclUCpaAcZ1H`%F=3l zb09T3I?Fx4wJxC5TO5$+y**s;&pqJdWhd5iT6L_8`NdBY*LLsa`{xxJf*REs87c*l zu$<=wPSosO0FEmPbMa)L*~O!_A}QLHW9j3Y5jggjX{-H!QwU% z=oC~I6Kl!Rh*5YQtIy(@WCS&Ee2OSaZu~whTVQIguWEJTXX63(^2_(GO=J$Wi9skT zcMx0%1TwQsA|oTEKKr7$c!Ze>i)XBgv8iHWVtB3nz=m=5i-zEF6Nt&ZHnm9(oO#B} ztKm~#SS$0XqopO3$CL58*LbZ>j1ixpj10_cPun1^3;(5%m=b|c<4ME44{mnKou%D< z0}L%VvMQ!$$nqoSfA@e(x;LTv?8;OV3})E9ESIzq8lHDBYLBq; zlMGz`a#$i_W->AK`OcH7)RITkdy>lb7psk2?1enbbPVDtm3*vs!V{?_)<;K2mq(CH zYOsr!%)2_vR}jVdo-%j9su9c1_^6NT>-}!i{`Al??S{Y9muJFM0}xG3b*7xrQLa=G z42Uy{Kl|&qT0i0eS1{Li$UCh`!~q?^(3lH>-(~R zTZ+j@Q1IIIPO+~~RLcX5YaI_ z>WHn3KZReS(p}wm%{y>E&)=t0Xbf;h|7s+&S>gxjpPPTq@-DTzED_2a3_mmP2=^O2 z5qTv~C0PrNR9^mCSuP>W)6!$Ck0GHGENqb_3=d@Kh&0RWRVvU=)yQP0z_uzx$mzG?r440;fNURMb^UF8$Wh-7g zo&=ATqG?q$jCEpQOj-#f09E5lTP}b7Siwb=T%IDFT3w!^xA_LQWhJ(HO3y%x%KZTi zHGa>aouyp}-Wy_{g^k6Pnofo#@kdn2nH3+Ab8QFvpM7QG=~^3GEE|-ftgLdc3tYG$ zNY6k&(0_Sgh`oP^od9GX701S@{`{(s`<#AYQ8FoZBhHtuAe$>Ht!?S64QRipxFk?fVFk+gud}ERdK=NW`;g#&B_wx7s5G>J!)G zer4{$S?P)CBmkss;Z8zuM_qpy03}GuR8<494k*36B+jVTg%2));Ak?>(;X5LQZ+iD za$Hyf0#9|!dP{O&5b+Hi!IpyZ2&0yD?%tcm#;c^4E>J+1&%DKtJqZ#M69up{a&wK0 zjoF^C9j|T@6}Jz5Y#X@eZewSM>Z3c^ljpRb9*ct?zdMM9qW2!2kA%#>CVt|4ZV&zf zfGlYb_;BH@zrWw^;~GHgGIgfhFhv3b=!vD#{l{`{vIz=t1Z7}VF_ zUzR#)xX<;S94yu{)##{NA|@5%p~1nIU2y0~#eF&pN4ri1nLOX1SI`~NtSR>SSgKEJ4cjN+TqL52>G3< z(s;5xpc_gFxdR zP|%y$JqwU=o4Ss3g$T!k4$fi=6C_JcKTVrq!_?|pZH9GpJ)2|n!T|0k#LVaTB-GX`xwfk#@ zp-pF}qsdrsaw6e!4o>q!V|nRL1p(3LZ$$NkQzA#>kB>hdA72&_6>Q*#v-WkwZ4Vn8 zzZ=?i6Fi{XIL}ZYKmQ-0=z;`SUuk34T(F144?ps`%81%Q=Z@Tosj6lpFs!>we>j^) zs2-hpZ=c)*JeORJuny4CSHU|3imzU68!H*y3{4wppD`RA8;Osu zyym_}LTX8_+}-J|kCS=n$u8Jb^z`)Z0V^w!sj2!mbdqZEWaNNi4RA_8bcvrwjn!-= zP(KaavH&X*0-X>{XhtOn=1;Boc0XDMET%y05Pf$WbRJ?!(d1>MaHVK+iu3 z&t>T_SVkZot+VvWt}&V_6(&qB_EI_s5_IsWR-7HMV_Uo+PD7u?&|CEZJBY z<7*KE_=%NqoQ?HP*Awx_fjTen*t;Qu?w`0wUbM4YE8RxW4f{j zMn@~Ujg3k@dxeW67*FRL;@~wS>w@5`yM$I3?Dyymh<%F3;f(|1CioPu^>ky^v~>*F zbdGs^IJ+2WuX{P@N4pdB*1EWq4rs06`z)9L?W=fyRD+a(%9#CO4U&6M;SmE%LFd(r z7lflZz$FKV=nZn-ky@Hi*RbJeZou;dS^Jq;Jp>Bu zH6GsaBfgr(M(VjA2;{Y0d4+Wnvbg8imX?}tp$2USTRG|JMQSLOS+7GCYm#X6R$`2s zyn1_r(T~OYrutg^*Pcyn@~~mOv~xuCCb-&uoACE=iR8Ck4?qJ#e*lp!p^MK8&Siw zF*<)R$;!?W^JM3Yg#Vma)QGaVg8EOUi808o4Rm9J&DkG+QCD|TD-ch6DCPAkNbPve zL&Cj2Ex0A-756J5iH%2S-8OyrYa4YCm#?k^hS_b<@(!Ef;lp>uS%u!MeWr^R&w#2f zLlYBL^yL5EODZ=ZFJ1uK?kGghd`+7!CN6|=yKpB0XyoBcTrAXXAwx4Ub#Z@M$Q z+zhS3&2!qE=D+d7rTE)@T3U9NRi23#53ZNHAVzz7h0}4O)_SU&cKJ)$!|>Ur<>)RL28?-?clX}sp z;p}$GmsL+{N`D-huB@!xxRM`6$>`u$Gf~<;sGoCUoUd%E%_YJ}e6XC4II1SK~-yb(1Gg|o?d z*jb4g-e~#ip;xY^T2}g-<&A&^c}2z4Db{|$z2YK{p{rKvN_i)Ur6}HmT1vz>hD|Ps zN1ZH=7krz@=$G)y9RGm{+h4lYGZ@QlFjyJv3zjW5m14j~=&xRYo1yqzjoLSEB;{h3 zL05X%&jdo9Zg#R9EZi zdxBSTaD#)~yAiKIAr=#}&bFFpR?As;TazK8Df%iKs4}k>QrKc=$zM9_>9Q8X?2yWe~_+}F0cJ?#^M`KrI&m(wlsjYSv8ey{a*0NA zk55In55zJwc}*8uW(Q_$?3S2>_v1T73_Cg)Ff~_KGqjCt0Gfap;(EahFxeL~wvOCm z%oFOXD{%f>mWSOlw~lilCPTTJb0vJ-OY}fP$Q(V%>fqxe)7JJE-(OF}7naMaQ7)eh zcHsmOLDv)A35a+}7iYxLD?Fc zDxtE5j{vpKA0zE}aszR!5$91*u${|0H8?m(&UyU+tdt4I8pqSat-$-1w0=#^AvbY6 zdi8AWdAt+Z%qBH8Gz49=`)ot|UdH9{YnBONXJku~rlzfy=no8J4QVdZJ$0kyawoWc zi-_KOwrfY`e)z|aFVUzoc^A>FJm_%IJ2EOpPAm_!8|1Pp#lcyN{8Stdt4(u&4BwH( zglg$GH!S4nnJ-vY1ZL~$4Om=UsN)?fVY#QJ%^JHs0|PS_&+-;EgKgmYJOl!xV`EG0 z5uCQI^Pn&<6@5r~EPwMEm-}+`t!IYQ*0G~3T_51lnbp$;;HX zwP*^$+qMTA&?zVK0+R!Fn>kNP72YrhJ&M2s0g7_xWsdlCl0$A%pGGcXN>)*`Zp1ug zu6oA}9FHwaPjurIULAMdTu=Yr>R>A?6&*tk+l}amnUh*RTQ2ImkBhK84};`~r-0Um z>a;>tweP;BPDx|VPNB=pS${&6oSIsaFIU$$Gf}Jc0!<+B`Zz-rIVl{MnF-iGO&>x= zE6V`vB48&V$r~Vh;`Ak9=Cvc%QgictFiFoWrgtV6TLW^@JO*1x1*IYEi!PEe$Gd_+ z!%m%|r$@ZZaH-(vt#Ez?ghxPSv?>(|2yU&+w4hB9K}-D0CfK01!@Jx%pzas8_-zw9 z<$SQtK6$I$zNe{D05eHv7NNB0T#BsA4RE~_hFnD;BBj~=IIS!^lB#z%Gg^QD?di>m<(-KdOdzySeM70Ls+K<)wwUaJjX-gI4Q#+x zE_|q1MoCG@f}J!s>^SG(u%PU4A2vlkTxnpyE-jvl+KFzgB_X^`ech`BI@M0bl?;3+ zSwr^SGH=eJzIl3zpyW$8V)~g&y-zU(KU^ra=7?S$a`aJ{QR){V}F* zy0gEkF1g0xw%~>On2Z zkz1{W<}6>QRorKOqfx)GEBV2G_w!&Ga%SLNI5nMj-0OZ1__4$LXxNLa%uJd)zVK7! z=5vPY^mvQ^Misk#)k){rYW1PU(BF*;J(S!uyiD(QhsCT)S2pd`yyW+Y7%0N7&Y^{&Xs2Bqt}QG(KcH%Sph1c3cE{)%)m& zh74IAZ)XB+j(dTpsx0ZsprX$MCa6^87fZGU=`G(PmbArM=nM80e{y+;rPO49-(m$t z2V-!r?S&a^gNnVL7Is$cH6gZ@%f~%s=|J|urUI4W-oBtKRG^NS@D1as;4Ch=fZS`d z38Xi-CAf8(mPrh2j>rnGst@QWL}>G0DW8OJa``vi@M#=#Vh7%^;u6&Do8*qCLNaIh zw}CQ8()?Ge(eu(zOG`>(xne+R?e4wpW;LkP?!nGF5iFJ?B6&FrOkcOepHPV#FV>Pk zI_$9bwV_XnZKmtqGbnNVt=O;t%ol(u46qhoz8uW*v`eg%?3U!CM>R|;DSaWSLJwP* z&bI2Q1!nqM=A|>pA9_>6!k293esu92-U5E8s`hyv_t2lJwD5uv8<;hqSkVScOQ=eI z#-(ms)K8@@MT#n=XXKa=VcSGD$_zP{OY|S-Q64W%(f8LeFM{akvHSHVt?}uZV7vksIl9NCD*1-dIE4(6+X+ zqKXVawNof zZxBoY&F>HCoeVjuIrbew~0~=>NHpY6O&m_sF_~d4&AA<(_ zHt&RDW&glgjUy7aCE|b3ehCcGGVZU1zRJeKtvP90im1m%-U68zRaKy(01Ro8{udy} zk0_w&^);Vgfb!~i`>y7Zv+zwIY}(nN$vs!_pi2lIiKW+O;P$+0=c%=A5jv= zgh)s_7e|1?kqx4^#WRQ2kONRI*kR-!IoadGI?;2qTX)jW0es9uQKFJJ>Z8p8(u=ZPsE3q6;oq6KJ(m>@;3mLl^kN{pkqN*nLD7i4M3$Fv!p=v7BPib z8gq`^-A~++Z_J8Cd$$LZy@1nUgJ?>W+u9g)LTr-+ycQ`ibMfP0Wi`E&w6JmdcAh9> z9W!cYYy;Y+H3^kcpIk~`A5u0+e*$gJse8Ok5d^OkRf$ON++|7TwAQDN5f9A%@q?Bl z`%r-J7isw4Sm6svU3`-p7M3nZR02hYv>;iZJ)`)t*jNI{mOpv0CHwr@Oxz7K{mjGn{(? zZwnxva3eLcY9}mNZ+jlbKu`Z)`@jCWGT{C?e;IOY0#wEkh!w`-BbzxTO+rt<-Cyiq zR(x2DL^$E2TxFHzA1|L+m#c<`Dm3}U@mwdTMRZT1+>vvY+|LYwdG4UK4Oq6SY&b{H+|Ije2Vptf zfFBwxsqgKM(rGZQj{Acm*VJ_RzAyVrP~rmB-LPn@RD(yrs`VWDMvC>BiD8KIW|`v; ze@YnF*08&nJkcxM>4nCB^z7c;*SiM#3_wUcXhr^Nqv#~EIjG`v2eOh%&vpRj*4=}%C%o5Om2lu0ms}0%iJpN2 z{exHRpB&&H++}*@Il%s9p;o=pfWHU^8mKaU)J~LSu+Njp{C1KKs@u!?!KfPGwUz$F zzdb`6NADB@_?!zggd4!VYxsv>%YkQy`2nE1C3o~@)`i9%x@mt9Q#$0hRhj!+Ia`K> zEnIVNfBP1{X6+ajDE7RGj)rJfw?;H-GnHy>&3kcF1@97 zU1;Om8L7%CEZq5T+a`vh72&88WNq9La>RTMgxc=3=091|UOiF8#kDP!3ffl2O3j|KvcA)q|J1=Z3AE>PQ*m4|2tA-h zLAP+kg>pb#j6ik7A*y_gllxZKMxC5{U5S&Ab#?8foOiOyGd5%fg+)`WN=se}J?Q zMCtxxUhqlRA)lvILUMVD7a^qoT`)Yt;IWv7K$-p9NS=zD-%L%T9vd4GXG4ITS5fr= zjF~OUnT9%__GQaJ@94q$h8q78iDuj6{M{!a z@PeBcI%2x|+uQ_fQWM#TtoXY_!W+;&U@`#hQpYE$XD9ohW*R49Mt(U17iT;_RQMCH z=l?;o*|xo48mS~3Ta1R%0XNkHI$fB>G~T&?xT+u6`_xpJu3hy{?h7CMs~Qj(iG8k6 zktgCg6jz^lmC0w9F@TA!gN#5xk?A+x2ei`BcU68C0iPO7ddi7t!#pl_MjFxdxkTi2 zC{3;k!d!H=P$Jxdc8K4#^04yfHQ6)9CZ{7kA6zD#{x_0ZA?gRG#PymE; ze@K=%LpeH|Yoada*_yIBE_YLD<*L{o+hhtbgIMz%8XWWC_c$ib4I8F<`O08RZmd>W z<<4Ih$jmeW8HE$HYxwY@ccOaq9d@VUhqORVesK43azWxNDKlATXF+FYOseFB7oAEh z?_7!zueIyb6tAiL}$H^N4>S6kbZPKAw~g{j=wv}4{nz*-H@f3{l3q?QFl!-;w|W=uMBM9n zvSsE!I#`i+n^W5!jE?w9#Me!1hd$KiCp^n0-~!4eURq=pmIxayE-vmVoch0H0A}@} z^P-@>%qL(;k&=?qer0v|O_1061=v^)m?oJCDuPMTSpJo7|A(FmrynPYVCbI*{^Iv7 zKsJCK11bOC+mN6g!bsezg)wl9Xf= z`)nO7Y4X;{A5sEvC=)X?SC;nMlyX#}&OHKFr$V#w?=h8fEr!=t(>8U$&;qIot5a0G z+E9NVv75q*bJ0@dMs^OdnCfKYvnO+=tueD?Mh4OyE>j=O`zg6ocRQuTD9KE+vUmG| z={dqc9(Xa5@n_cNzc@c!wd>hSvXpE1h#(XIa#wO1^$h_aGYhz3CUft6#JkO5@f;3+ zpPaIJjC;Q!wJTnoKCw9=3q{+`ajSZEQ!h{-AqF4Ou+` zt1Kw60wTp;nh%_*`b6L+*o((RoHxq<)mY0HDpl>8euv-wwo zQ|XdP>)L#>QWVtGns(_R@yOY&kMwH|JpWCtpi1UEA^5NQa_Rb@>u()^9|@92q9^d_ zXPxWx)m2EB`$I$U>Mwsu;9qw1{=*yFnD*0k7@*HNoLM(yoL*8!qNKDi)U+3%Rd$i+ zhNdaoiKMtTKCTVmT}`t|x_D+!V0I3wR$I)MfLt2|y1IF7&QIzQ{QLWI4cfn;ruvgh zN}76otZ!`VJqsThwRb4nadz_Yk@(@;H+6eCEpwC^ zbj}jY&Q{e=c7~lxG;&6zr-k2dY!xm(;y}*{b7Q5IeG%;Y+~MKx@l*tT;>#MI#rmes z6}TY8+9sx2KjIFZz?49hAU^z0gzkUUwGq3T6#=XxLZJ5z&ebVm=HGuAcV)vCOvbXp zKL_nUoMQmhpU0QGDJfUh)|^n5FdLhB67|w(ewp6wZyydo-!iWYNID^xTmBOZ zvUT&lz~(cFp@>D6-Cdh-WoA3O!Jpa{!43AClr2KR`{&oapIG(tD)@o;sV^A4y zU+&cSHW2)}3;)ecaL4G;O2@Fv+K*l5%GKLrQtafu`h4Ol`VbZJ=oP;>VWU)ciQ6Tt ztp<)OaQsFE;Y+qz3TcJ3um^()CMi(Qfo-&}m_4?NKz%UJfNJ$pKl7tJ`eFw?7v%im z^6_FxRq>cK0kSSO;Bd_Jv;#nu;7j}|22L+ zqQ+Mh;?!ZjU=_fFq|?UM^XR;j3GQKE;7xI!vUVr9zCEtcd_B(QVc2TrH;1u!MX03|D|4Gjv2fOJWBcXta&!_eK`4Fk-) z4||_|-h1A2&b?>fbI!i^yek~(*3yTyB0)gC;5Pu;Lfn0Ng zKv3K;uYqTZ#9pj{e^9LC#Y7-^J>=lQJ&44MXK(CcHmB@W?u;OWcSBHqc)EEcpiE|e z$UiPq3>Cf3Jz4dZQClv7Au)+SH1Oq{H@dei*3cOkiWo~jUrWWzut5<;G0kW{g^IWqxa3lZIIXFvX?HgZ1qD7= zv@~Yo;Ly+m3W}{@TcRRj2qYnTsvhZvmz0+$bF?!f%SUw!ylG0B79TtckXKZEKp_=? z27%0$QWN=t`(z{}B>Y@y0B$voCP@6vn>P$;UMLXAE}sYl6#{t#LAeQmG(Z&7F#57> ztgn9XVEz3ICz*vR9(Y8#=_laoQ@AJ>0krrxP#e!(`S=hBG`ALQIRd(e5Qrw{sjF=Z zZLlr+fU=U9nAZzf&mjW@^0XbV0qa6=Z_?P>`VspL9B_#nC^=8Xygb&Ze{Og_zXox0 zMFmf=)l6>w`O#~(n!O5QoEs2GRUYvanue0+-pg50M}&fFmDR}2 zyL~fa1umJfrej)Jbnjs&v77#tlop_ph3*n8)8 zw{}lZ3fLtSxPNJdxYo0H-EsZN#^99LLCt^CM^#fRKZ2gh8SnIiK(6$ zewsXcuih`ZjFXeQGj|9!cyo6KHaTf|6rrV6vOn#Nv5GsbNh$3o4Qp{7P*~@!77SR= zT2DRh?7fU(oH(uQv?TH^wLFS49?45bhDHXtY+4~K`SkeTf=SKKB}R}Hs4yQ-RcQ@>?AUu4zo>8y(M_tW@zxo2d zIkG%6b8WnI!y|A$m`r3&Yp3qum_xZTZ?QUW@s7y!T~2v837A(5jmjGv{rCHqyIpW8 z1yl}N9*)^Uxkt`Vs7$6eM}~*fYHmMlD|r9BH%90g(rLLuYVC-VbIkQ}h(W`|(6E0{ zSJ*17!7;YMacUqQ1u`2paui*_$M>_@3s+B#QqUnKF){I*9OF!_qbvLjqd#8K{4((n zE-l?{!lhQl^V;#9g2DlZ@-3<(It2Pn$gabB2cgAG-TFlNxzUH4U;Vu!OamreUq9Dr zINqvrh9AmJV}>m>x?|8kmW2tIn}spfB8IeFhWh8ekr{|%+MjQgmptKgJv$obP)30? z7;kvyyMdi?S!SlRGhk4A^0G3zV10vZ*wGwJRngE$8#G&3!4-XYXbBz7ELk|7&w2T9 zt=I!E_me7Kh%CV?uZxpYf(GFBNEnelc{~X_&))LuhkeB3qWb=JDzdn?o z5&~IW(&TaTqpQtM%9>{xW#&do85@}$6Pe(QZu9R=K{XGJ#XFkxi%m^))_O}zPgWtr za~5DRrZ|UEHlU#?t1IUp9iBFgofY#hLBWHt>6OX$hvRYi^$OeX02G|)NOP5Cn16WZ zaJN>{(b3%LJkZAnYv8%tO3P4xW^Qd8*o_G%^LywEa-mp9O&Dw^P1Gomrz6yEgn^D7 zispUTUe_TIB>FX#PnzFtYc0e9Fqq$SBYanwp&15cCVF4E%Z3KoebtD}WqK+1hRypO z5jBD5ME=#zuU)nAsJ-bcFSoXO^>Z&JIl0aJlXl^%w*e6ym~>4E%-NoM$Sc5lheZnT z2L%({G6eme8-Sm?ZV+?`Yxq+1MQYc+MU|SIe}!7t4W67SwWH zSuL7nS&8G^xz`Wz%8ykHU~vQeko%GK`olap5J>sR-eK6{K_@{!9#K*2~i@Svg8 z7(Iw@(Pptyabe%tpQ=`TJC;r~F|H;R&DUl$%+cxHGQWLy>7g>>L@YQsAXVwjo9#1r z_53{kxn8_&n?Lw|4qrY)%E~nFQr_eK4-#%4}+H+;p0ACzIPZUq6K^ zntQ~@>y-b%flx+3hG#uy(wFZ+0xts8?yld{m#>O5NR^HFj zl@;QSFCW~HM97A~qN0g3ItAM=*L_|jaTxS=9%~sHY^=?(?(VU$vXbx*TZkpZS2@I2 zc)Sq#itSqIUK`ucR-Tjua~VsQ5X0B+(zJlD6d(Kd>=mA;e^>RP^wyR9Sjl$@Kg!O? z2rZk0C!35GB)$^F1$QC%O31DB3Fi%J>F#dJE$|B!!$^V{x^u=wzjBS5mXTL4FfR{# zMuN-jEpvEvboRMw{v@`&M_|@E>8F7Fh6xT<>YyYBVuSP}EwirfT5-%9m^U+XG6wtZ zzE)P&QdXA5%*>B)d?KL(H)Fc7J?S-s}ogFkkTtT7RsnK9$Ck{ z{R80PjVn$eY_}U|Mv{?ggKTss7FGd!Vp>GV&9kXK%h<^88=byhe6T6^<0ut%r{`7T z>5S5z@^UKhW=~(yB>IqcipON~1d?-fSVKcYZ%*@L(G%7}~*#xZ1SZBW`Z)of!%q zFg76s*DX$`8GMrFwUea2rQf}~s@5HM_FP-t%uMsReZU%{P-PS0xnbRDh>i~TH6_}M z6`mj_VNrWV6XfA3hK^wxFWlSlRLeXoQsNMSN#CY-m<7(>i88Y%+}vdBPNQ^G=1^{B z2eZm&458w*#riS^#bcJweMZTaRtpaA0DAG|ZbdHKsmWt+&nu4oBOow+(e1L&?ufjg z>Br|61IJk3J6Bfa^rE8m-4ij~)*q7mC8dHyr>EOkw@5iH7q|BJZ8XVxVtd1w@b5(T z!3%8s&e!LfzYGsfOG-=P27FCX_7r_lCOHnh4*zJwGvdOeTJxi>v@|U4a=J#(@%3z3 z%%pFeCYf&b60!Q*mD0w61?>9VXdg*49==Ke=X@f71Ckz`W1~rR&v@T+nN5x^NO;Y} zJd$7>f@o^~2eQaUXC79hkmO$1WUpxtE2FZuE<4tEI{vhRTl zGD#VtTsW@fwzm>>WPx3}Yt(%H4+8BV<^Kg*h7Gw;$kS%FQpm2<_s{<+ME?!!PT+An zKiOH?TKb5PQffbH>iR~2;mE)Cu$eu%^OY}wS&M%0fI>)>X@>6Z>@%-BNl3#TuwK}1 zqoL&F<;B@C=)+Q=XhL;X%dRCW**oME;oH-d3z4O&s;We)Y-{_k`MhmKewG+2xW1A! zGj$$Zf`fP0daVygXDjW$WgdR)wG=?*dxILfqeMug+07RO5LF4RxY&q0zAaNv`p&F! zow!U{*y=fSszkZBz*r`ayTd=n1+pmSMRvXpycp;#tmnz=42$i-w@ zovEtdqH7fvJ(A*VVwxkXpBARh)+H3AZ>+;oja^r)&{G-0?UP6D6F~X+ha28w*EmJ} zmsr#(IVB8FcxKn+&diQn^)CS5u3=uxcjF~Dbr#fo)<{@+d~qQ%hIeasW}fP*Y=RF@)rniJ;&l7?75h2Rdz}+n9$6$~$)=0>v>u&apuY%I}<>g5zPF z?fl7_c+rMfoaS7mB(qz%b!q7 zQ+%sWoT5XlKH&w2#yl2R9s!s|*1$~EIn_PnoU6R;DIg-QXyez=raZev0zOkN)VFv5 z&c?mGtV!!}{rZUG7ph4TNdf=)>gW; z`P5D{STFHDYvpdNEGOLx2^I_Qeh_Y#Y;+WTd*iOU|o{rABboHvzkwM z1|h;iX60paK92ex=KQK`>gNaTk9)V)Xkycz5WW(9zlKZ9O5`0UMF;(9A}+`584cc5 zLq{;_5f&3u)Df1Sc1#-$1{%Y$I=Q_ql|?_T71kS0wETeEtV1ayvv%Yj!M>gQ&YL$d zVGle`PEHYV8yjgIosh`P_L=JRj8xk)^*kJEz-f{l{cnSXG9ri9Fz1-e;N#=#{g^#Y z`(1)Lr{glN_s7agdsuWJK=*UvyaASUlDn&HWp95#5hhx?B_?RzFYt*dNytl_5duu8 z&b68Pbp7Y|W5^@=vvFRunN3vnPfnWr*nJ=ER5LZDP9Ud~-m}Ae~1751-N9u zWVhZsfWL&~6Dx{*Eus{?0eNyEj}7VdVEh1{{l_TfpDyWxTH%Ux0TtLvukO_*?h^l4 zP#%)^7!akL67e}D6E1#1&dg}^tjtUjQgVx}2ubCAD{i=5c4nsSz%TU6?ekp)zz+ln z4pxK2XBX7u?4cK~(}$Wndp#3Kjg<$hHA<3_ogy0#G$?)MzV}CxFebN3y{@qB&7)Xf zUmxbO9Y@75J2@~V_Jw+EZtvHDZ}2_!o||&+VzEk&9!@8fFwq^6?djZy%r#LqG&cT2 zIh!Hr{A~0@zSTOR+o?+g=8KWRCp}4By+1St&`i6(Go9`#B9;R|) zdhU7Qo8}0Im(_5-cN+E{jBZipfCY3%8;f$20@mwr5LFV8>vz=NRT8}6IYtiyu%-uX zgxYrSLib)^#b#~@iL`^zd-y-}dC16u2z?8+%XH`|KPV{3C{X&&(v%GENT1&RY+ag(6#@B`Fu9^1&PU@4S9uqt4TFK6R zLPJe^?@>xolKgX>ry3g08XAJsDRl^ve0}(?I~v&LwI_`p0s~f4$h`k(?wJjhKuZ~v|#{!O2>?2w)d00TUxkNe66Ek zZx{$YQ-#$lRA?O@M@~`~Q;QZ7n8A4S{AC8~3fv3#42AWr-&)vID(&rz+3IIS zS|v*sB@~-m{&Z9kW#1!7C56>gzeh|~Fsdb{9c#M3{<(0gPC-rri6=5RIEYC-G{ouW zC#|1G=eiS@6h1y?S;^-S=i=<%+>F`pk`;~=9Yz1(Eck}-v|aSCG131k~a7)M|$ztX1W+5!D@P9V&Q#V z?uhK>rF9D%>#D67FfG>nXfvop-Y+CK$pNxHcfYJukL~ElYM!AIynBajt8e&NWp<&O z>B)z|pF!oFog?<9JWwI!JaH)#k&WhI&h2b3TryP!M>b9tK>?azO+upEW2}ZVw^!SS z=G4z~KkVV34-YFj96KI_Z$0}oVQIQcUv=pdYH%s1>*N=u5j3vfy(6$Zi`gZVO~QUwC5t=*y$)XxfwRa4;3i>Gnl@j@0Y>!#ymIriHGXdt4>xb+s)KC7YFm@(qFVlAQ0@1j5~!o7sj=M*_?k2jF?^4pmFiVV zAwp$*f7oO1Exo)skyf|3Fqe5A;nW8nee1PuW0+7G*DyWDz?HHPFJ4?)7(RtIGsXzC z8ZuF3oE9-$678p$k;1(XIqrMn$t$T6kdoiyPN}MLxW8a%4aXN5pP1n13$?ydyT9La zMf;ON)prSQV=~Dp(yfd{TwAOgYwdw^u&J zlz1gWl9IjA1P#9Rj>vaudwIQXnCV1>k~$@;>gDVL)9&#%N%0hhj+QaQ%Lpi(Q zYuBDXWO~T?1RZGDBVdw6);IVaIR{F$SPMCyu&xka_u5v10q}slb8~_W^k;)Y`W`_? znX#b}7Z;ZV@$W3CU1X?O)CKgrKFmme23r`q4Tqm`1KDL&@pnV%zSI)*VaLuJJdtZ< z=Ffn})X*vUXCO5)k}ZmC?zb%{=Z|tyAJ^75V!kvne6MM_kY?f;HSTyzggSuxR7Ui{ z<#S9q1%>+_ZV`HWg=t%tmX{^!-D!z@r|Kh}17^hpdJz>TR%&N06J z4P~#Lp1{;X{8&O2fo?E6^yLHv5Y^vYlD{i2D#9}brEtMt&K@Pb!jv0MW2x*| zuaQdDxwG+Cirj9|YrF=)Exo<8>7*T$XBYSl5MqvX@SgtnYumB>ac{FzQ}q&$f?07> zLq0^P0+jbgLpl|Hw+{K5XE=b?0PP6G1k@}9s#BedGz$(FFh(>7|}IGY}5%`mJ}A=xFY!ZkTXbHvNB+pbIABL z;47J!m;|$GR;k~+bfVq~22y8PaUG?sazwT8V<~2{bTtMaP?cg*J2(j7i1F{p*OhQM zzn!e~-l@|ud@p1QpClH33bxU-`0o}Pk-7(T&#a}KK$U}SdUaqLGgjPS;^ox~W73k| zlHdZ916Hh9NPwhTmy};>JPS*gq}gO>?rR0d{AUb{d+0Nn87Z!q)J8@|9)auYQ9vW$ zPzb4q%E|%7qf(thL>yR&P1OFBg6msI8I`r7q*c{t{iWC7nz>2FXud)SaT4HX0z+Y6 zxxpiFw^okBK()2yh4ZEKi>0Y*q`lQ-#D<`y)j^SLTpIt^7VQ%@^@)iI;4!feb$RSu zL~g8?77^0oOQ_iCTJ+fpBNJv^m`K^RD`tkJ?IZTN&)^cY!M`ewPPF(_xiuT_%ul92 z+qe0r_y5K{SBTYvYDa6W(zRQ2&S0X?o7vB4>g;#iMQ>G50Ix$+73-P`Ej~-3l{M7r z)~(|eOPhyG**LDQhwr3nN}j7t=zI#;$?HpyyDv7)%BHnaIyZTyUP;4Vcq12AZKNWf zQpn_k^j7U)$>HwT`ucjZe~5jCJ6xzpX+0kRN9_&jA{L-}0!MhpD)!uqiuo>&#k;du z{&UX{e!o9F=$K}Nu2NeK~>tqBob{9#1kHa1k^<&VKlwzQJZD!_Wxj^UnUDUYIwnon` zgL){{vUA?8t_Kn-C@QALa}G)$*;w-^V_9k_=Uy(27*CzlQ;jt;?FmTA_HZ~}^J^o^ znZ>Fw{tGT_hjtS-6f0=l${$<8h5>>6ngzHc4a9OxYQiumKP^57M@SE91$2Fw{_?hn zH4nK@l8mlCbVIXB0vaEq91NTOa`-EgMul#^0l;sE_I0AgBk+Cmmse^qmo7Y$-7r?x z!pp@K1(N!ii=)HL`0!DeqylkzXCdg@An4o*45@LBu-NQNME3{;`gdFxA_z}j&c$k^ z=U%1!_&6#mY8esH;>AuY8%FX8Om?2km}gnPT@f4m;J~2x6%xv_XK^!tTg9xo@QaQa zQtm?bh|oWf_1ycYX~v~C)C#e9x@VrJQCxNEFjvVDxl?yurhcg>84<%5DH9=hw>Dzh zwy-;i39V9V>qg=^Gt}}YuWQkv>&RmlJ}%?sL)J~vx!Lr{=ve-cxA1ynF?^k)qa)4L z_?O#@cp_b0-+JS_;g`$#UbqzG0w4M~kfNFfudrulB+Y@`lR%XZ{J}d|NIpwiULh`{ z+L5U885hZ8vTq)Ez<`3A>|)_e3F-`gZfNK`(ln-^2=7o_P3i6Ejg1vjJ5GIfV3K{} zD``e9DYH3}Ka)8iJi%f^;~^DgQfCu=VP#rBeaDDL{}5|M(Q4WGaJI3T;+c!JW4w@a zIR9Aw-Y#NQX995vKRZ7QcHOnUlzBOtE=zT1q1{)gkcpuJpX?6ryQfIB9kwcXXK8Mo zkfmM#9YsXAMzO8n<>C3+!3vMd@_f1ASA=5o(2#v65fX$0e*B=s!ky63*S|<|l(Vyp ziP;>=d6&h2am=22!=)-l2|B%l{QTJaoa%D?tp zZm^?QIp=^NrWY{hvF-Zgq@>{7#61HIic1wixbRX%o@S?Z5HQs7L~tm9>}=s?rmU!V zgo{~cll|?Nnxyvj%*DVQuqMKDXU^m@va+@(FQrYlYTYpwgbOt*j8Dn~CSK2dIXl0 zmAx%alZ|`wakY0-P}BYyHGsWSuOHDj+dibRrYKe{0s&WL#?eL2E9>~w~vPk7cx;kB~J1Dh=_sx z5=tmJJ6P5=NXyI+uz$xQDwmrZfJx2CS$gZ1NF3!(Pb}7zgElNCZF?XCf1@}A=zo-~ z^S+88*hTB>mi+cP(*=pozxmPg^Xw-l;UJur)scu^$4DlzGQ;MX5yEDsYPv2#DrOysL@Qrs(&!+}l(mENN_<)CR z{OUAXiADO~Wq0atquRcC>zlW90#)S67Ss{?(R8;3X zA&l2P8I0h(`t_#igT$NeCzYL>#_={={={={@y%6sshh7Zs6|@t#%|^rV{i^zbOmGz zcg4KtHCYWjA?jj5*0ZGv^~z{H2X>R2+2G`)_GP<#{4LGBLOJ03vejD|^eWFtAXUhm zA8pSydr?xFff@#gv4U~?3()uHiw~_~D-%1%W##2w*UvXrSJltAs*dO-Qv-%3Dh$=c z3y^0q*v5i2si~@JY7t}nJEL>uJqy0`^JFtF)zIE;3Jo5HN_ejo0a8=v*YJ;+YwWLllF--I!^07B!1mU^25HEC+DK4RdepT0m4VOM z@RrE?i^LaX8v&^-=F)fLZD@}4_lCY5>KrVq_WNB`Hq$k9TRO%%&W|~A7aiUodp}Vl zGal2}jg7VJiLH^dUV80x7)T9{+p~k5#~kvQ)Ox9+iH#_h&q)P7fXK_Mtym9>0Z?! zf>2SRyQ$Jl@yTU<-FY4#{{}Vd#S);f*QjQ|wZV?1qmcN{?%22%-#gCF*VeWjuWiKW zKpQ+!9Y-k(aCeOPyOI7l%u<+-Zu|WH)KQy0V5gM#{@tbI?LeN6Q= z_R*X$!ljNP*#Ev*NSHGh7!HT8{~cN7u$1{fq!cE1Qp;=5qE~ylktdEw#HBJb^u@1& z$nUNkde_#6w48T2fnskL`L8b;+JyZqw`0bDAe-X*<%|SM|Hp|Ae3d0(Ml+ zyK%r5eC~x4$v&msso&W6{d8M^1x(D8WaEjO=-&z?=%ME4ZWRI@RQW?+M$moph=}}y zaf@xIJoTXOqaMRvxyF;qxKvyvK(RMcb+CIuTlrQ)L3$vFB+wVok*N)G zGpwu;{gZBAuYmv?sDU7%B)^({CW$#l;9)-3|6;cf4y0YNfFCmqRhGwxHzr!*tp_x( zwhxF}DgEO0aTvm?0UYoi2#+5OLH%(gp*xd%U8*cBEZDgb*7gjsFU|oz0p}w!l0J9Y z`EG?ydO*WLE!sg<4G_5@t(ihoCBFr~5T}LT@hnfw6yMJcfw-1c4#@WiOxg1ms!UQO ztCt45(r}zNH1aqI)HJ#ix$f`Dl0;4wvRy$+!YtP4xWjw97X-0&CFqHd5U-Q`j@n@1 z<#gYA`GOpZPmNx}3+=6PS6_n2g`~M=$Z=t5p-^O`5>V#PUqt2lm2R@0_Q>$A$V`K8 z${^$bq;!#=7xqd(Wbz0sf+h9MLMo}d<2di1sbpERvr_keJX`7D`J+9)v8y5q7&f*N zjxR=)L+I+%l$Gnb_ZtG%NTw`)gEgQLJu(~hli#Bqfd_zhSN^SB zW+Hn+US1u@qTtDEu_2ApKB=mD1SYtdvKM;QA?Tcn`cr_D>4B#UVum#}|D5r62BOk> zAL+**;EVjso0^H?bN+&7dEi=~eI#df>4bI_jMUWJM`0#FC~7De>po#;IuA9e4(k5_ zs0&P#PulQds817&idCH%UocW?J8Nd=2rE~BnalP0K-c%TGWu^YoKdl!UP>zE9U z`~3s@^c>5j>`cLSeH^ig#_8=3`yUN`BQpyRi&H)A+x?=82#t((fO9M`JQt$a%Y%U;Qo5FI39$1HRdpkJf zV4+I<;Z~qYCABkI*~vscwCB6o`-J@RAIBlLv>ZgYg-2u4uOgg|jHi?Z;0hIvS=VFSTzODwDXOh~N0q7!=plkm zqkTZy&oo?{yB&0xRq*wvt;D(iQ{gbrB3@u=Xa>A!&7pEGuooc|=|{#C-_e-d=Fu+*+%U}Z*2=R4gC zK>B*PLn(7X&5C$bd*uuM$~FaR38TAZqlp@7fHaz7*ohxIS^$3Mzmfu4QE z#j01gme|c=-v4#T_CLkioP5{)0;xRz9&n#(3v*Kx{8zp^2^Ip~#I*L20F94~ma6;f zyRHoVt#BQ~PPIF&2C?F`Z=E>rUyjyPDp@Ckct?gk z-xf=#m5tU$m?L!np1h*Q{oOr6JIB@swDJT?^P45$ij|ebH>goQQHK$Rk&>bUHDP0Y zeMvt$zEx{)Y$|L0P9%Mp^>1F|KOGh8)tP;ot0yUZG*(iYoV+0VYgQ`=_g&&{{(6)u z2uy%@weAGS&=L{P1hT>mUnwNMAqYoU%xMR$w(DAYb$uadk*|2Ls}c$_z=si>6MJk+ocX=1;^lSa{n^-+Nu7<1sD;Bg3g+OB=$it8MhwO;NY||9+rJg zBlO|JH7b#>QBkDSz}ZbJENt%@T-=#b7?kH%V^#LTgPqyrhKHv$Kd#oGpkxe#LOHWWyFI%{LPkZ9Ge7}X~ z-UCH;(|vdMvfg+Dy@Y)3p)OhnSC5c|#|}fER!2?MxTB(@{q72xganjVM{l@e;I295 zKEQ9!i5wU+IUYz>om=d?N06453Z2LVC&MZ)RviX2zIXU2Z&h{W7xZ(hO1`i#MX!2c zhevdppSt^1Ccq0)F32DPbU3@Gv0n@Iv#MLK#j&v6So_HG$60=2+j201(PD; zZw=)>Sh$%Oc)t+AG$bw`@HI6JctC-_6blk65cHoIkGzs|^V@(dOfwP}uf^kX5e;jB zAXyNfsEe0tsGJ{}8HmqM9E5c^mb9FRcv*0k?fixsPO@h=Qf#q z3~g)zn>oav_Hbil=djmciz4<0wSpAOWf?|$IQ*cusz&l`qjtDxY!fsYITt!C?JXF- z5(J%U5J71dELBN`5Ior6B=gAh;G}>>Lb&zElQ?rLOIAFQ;9v!yid5~!Ug-@Qo!W(y zQ|ePA4ojLpK_)nZw?-a!*Bmo_-knEwj>Et}xIk!kmBEI-$R##z)lK>-d0H1ZI)1ag+hg{XNy8 zY+DxshE**iEANf7qtB}V^)r|L9%xP5=-8|e=LTQWEh5MXg6-+5I5J2|BHh&?^kBkF z_eo*J=@;uD8HFgU)TDw#FKlAp7c^_ye*#o*5fd)Q;~bLTf{Kicm1Bd0B{m0N-dat& zB51%>YkmG5T?sU5IuPoV)TO$T)XYrp=DCY%RA3Ul3;qnjnIRLEd!sHD>b*w*q|59v z4p;GSo!#9bE*KKbMAfcyd{dTDpFSb9qeY!odXGh4b}9vm)4rbzYJ4`a(p&tvZzS4C zAHP<(sr@5K?fO&e&9Ypw?(XiFH>t|n+a{*Ej~d;*4r_<;y>*AX)<7RynW~NSR%++j z`LTE;9cVbSB?geV#Q*QZP!FNI8B|m!lr@A?xjK+5kW#;7YU0n9N zv+u!hz=8+a?`jeEmwx2-)iqABBVVjmtd@L!{GcllGSOJ5a{wKFpl3sV0M>k;W=-+^ z?VzpTV<2LwQ}mS1_z=u)Cr)caItElO?`uEXaCX0+Q@i^T@VYhT5DI+_{x#Q-N(l#)$?p? zpTFZFCO`x%fCy8Z=HE!yYMT0+4@i1_ufhp>=(|8bq9f}R#s!BSgrMnvZC`>;D2Trw zS*-x#=6b%g59|Tx^qDzy^QwGk`yCx%j(JwlIkuVYdYwiLUtlPH9Y2}+I@kQWlmGy| zS=rgH%LOJ&>zuz(su?N?(!Too1D{^5GdQF3RjaVz^G3pgf49b36l?E}0i0wu;rgfJ z@^(vE-g~+a{)EDRT&*?^9%9LN6^ z@|$vrSp;n0-yY*ofwP3<-y#iM$Y_JMJdDVz{}3E^A^|qh|IUzG`)s2-4*d(^S|~WML6VmUskD1J zHwr2Q+ZixEkWkTQkYB}u$R}$WAXO7{MzwXe&M)SbS`FQ{(+4$IxaY8Bl|ZOWQY_wM z)A7N0Sg@KJReR~*>(gxmSMB3?6K|$k8r-X07|zS=3UW1=m5$|E1-nL|lY&>N7$l3f zYhqNGx6?lL#2YUa8yef6#gYuLAnN<8_Una%L!Fqz@QPM8cBbvmS%81!awM(7eG7;i zPZ|G!Z1L`4hEq9Qm;wo!a_Cw^23$Kr%XDLY#&LD$NT!3@HeuzD>({tS(Cv;#bq=kK ze*lb$6C}>hWvI4TL*}1}k7heV{qyceZfsCjrGoO-)Siho$rycGT{VT)?Cc#gW_XuA7*37XY?Dn-*4wPgd-NK{$_0vRFFTK=VD%Xq+ zt8p+{fb9Go$LybN;YDaULVICPZ=zcWMDXwQ$W!Db_<-^cJa`p@(n9dco~;cexAAh3X!X|A2!4-yr8J^qBA@48|UN4 zP6hScd|YO4+W#?c9bPYNCl=C$(fBj;Xx zkpe<=NW&Ax)QzgxSc>ompJ$~p-ya>}a>E6BB~!;K+6uRphy1{TeXMGn`lgh$_2cA+ aGe|k)_MOivIOSj>Arhi8FY-j*ef~ePnd1Tg diff --git a/frontend/__snapshots__/components-playlist--default--light.png b/frontend/__snapshots__/components-playlist--default--light.png index 40f9f663960a249810ce731e8bcc1896b5230165..38ca665d24d649e841fbecf754300614695cc200 100644 GIT binary patch literal 17977 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 B^`8I$ diff --git a/frontend/__snapshots__/components-playlist--multiple-sections--dark.png b/frontend/__snapshots__/components-playlist--multiple-sections--dark.png index bb70cad772b92eb76da90d269a9c56ee8c61f2bd..98a2b91fbfc6d30b48cec378585db2f1dd248785 100644 GIT binary patch literal 14296 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 hfMFa%_1uT$Mn8-N_NEI#7fM_d05RfbuP$)SR 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 B+OPls literal 13993 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 V-`u|14t5)I?~cOlT$JJC{{eY$<6-~+ diff --git a/frontend/__snapshots__/components-playlist--with-footer--dark.png b/frontend/__snapshots__/components-playlist--with-footer--dark.png index 78a17bfdf2b8b92a434ea09bc9fe1324a0fc2d8c..468e9713658778f35b46d6b68a12ab067821e463 100644 GIT binary patch literal 18414 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 aGe|k)_MOivIOSj>Arhi8FY-j*ef~ePnd1Tg diff --git a/frontend/__snapshots__/components-playlist--with-footer--light.png b/frontend/__snapshots__/components-playlist--with-footer--light.png index 40f9f663960a249810ce731e8bcc1896b5230165..38ca665d24d649e841fbecf754300614695cc200 100644 GIT binary patch literal 17977 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 B^`8I$ diff --git a/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--dark.png b/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--dark.png index e3e93b3dd9678360493d495ab090800a9f994b6f..b54d4facb0bfe8353e19863b17eee837e4aab6c0 100644 GIT binary patch literal 21701 zcmeFZcT`hdw?2vuuuxtV5D<8=fJ#%4A}y~`K|nxyCnCK|@8nejC`b_mq(()0@4ffl zI|;po5^5kJ<+u30bM6@T-gCw|-^J^7(x=U=A zsHmvu6ka}8r=q$5{ye)wdlr1i7psbck25an@=&V0zMJb*RDV(_Jb$X`nYfAa@YPyw zY}j3e{+aV<1eHmOuvrJ=nLn-z*r0s!$I8NfF&Ws;+QedQH>_;!bEmR$Q!2#i-;MUR z2{W;F1yWr!dDc;Z<)Se)`~5e+U)^jtGJG}Jt>3Svg($I_oM1DUl2f9cuv?pHF*1}9PTVLx1=%Bzh zIwmIi+x2{->b#5$t9D$$$1{fI4%)Pthc8~-wH^CCyv{Lw5p-^sqWK{D>sPfDISY$J z44+Q!)O(rDj?U>Sx8kAogDE%LkdTm3A@GmYPbHHC1qF?Z-R&iriZB*i4V-0Ce~XA@ zr>keWZH!|ZqRvoJHRzN$psF5ZYFb#V;2bJYXAHBobLm=Jr>mJj6Px_(!6CMzS(UX0 z_8wH0W}1BW?@yw0!Id|b_wV2D?3md0(Fa#_a`jtR{XugRABWamN3*obJ@{tdod2IP z*nejG%^x4Vlj|L^?KWc>YECQJK|(jYk3U2RW=ptqV&uAtUUTy752)hv8})U8ay%#3)EM0b+!{0)Xt7n#{jZ-d?<$H$F6 z=(8(y#TVRW4%kUuAob!iMF=)?GCZb7(!D>jX&hwtg*?#3okNiekrytrkWX?wfH6v2 z>1KWRx58zUCD$*>YD{^q)^hvWG|@#2o?6Rt1(vs%6Jq6`}z zRvTlvSvuKeIR)=}CY(ep{mW|ee-S^6eMS9f3}8uShk9=ArpE~O3L#;gQQERROj`NI zwUl|1eua7JvIlorb_(|26^`{Uy5H^N%q67bNM|!?1k5J zKqXdlMA$?fJh6TZb`u3AAs;JCpXMEVYh;dO@**dGneWFMvq{?G5|f0#Q&H_G3%gA| zP4Xey0S@gy)GmPiM zAf_wn{jw)bx5H)hw6(R@)23JB(m9`G_>?m?ok^;4oOqqslVempwsg@HO1mg~6OOB7 z*=k9jPIcFyf*cV;xDm2J2R1`@#N*H{zg~FVmJjXha~R0S{*>oB%w0|9D(d`Y<~>TQS0$wAlB%bxTMb9!xd{`&QcvFTzvyjrg~?HbRkcqvE! zBL|~!$o6!&3{KPkX`_nQd;94!1)Cb9X)&gA6_LE8d{g!90oht9cj-4v9fN$@Ih(VT zf@|Rr9Fl>Yy>O}6qThZz&we;fdGGQiV18z()nw5NTJGDoQ%q6 zQC#6A97>g#XESs8J`~QJHIg|sshe7=nF;>j8}V7y5uy9bqmSB}x!NK*N)~0t>Jq=< zm~S2~Ec};q*;ApknVJ|67A%4~PkmWwd>{DvVnbgN{pJi^5Jxqj*bpb zTqQSzgoODVVTI=B8RXD3Gnd&8}{z}k(H2NKJlplOsnm=wORpW>occbz=^Y(M%1K8ou(D3yl zmN42_im1m<>AKvZm>d=>s1p4xE$GYCF13ovJ~O`ot|LVi!HBUiH`+smKxt=5eF5-# zEK(_kAH|xFO|THZumg|&ss_fNb+|F!-PdPa>1^Km;$&-_ki{pYnnuAlG-vDNU*zsV z*8c#(bC!%#3zs1;jo~Wa%>QD9HU~cGYzE^ySQ{jjXsGIIzm~Avp1F99H(#&VJ^iMy zii$gl`cOXXrjfq>SUwCX7s?h>KkeQX6~-wd2CT83o^%tcTV%E#!2&~@1%P=H&?_p@ z8|GnUWmR@|p@{fH!#Pm~Wmam%+P#cTU`D#fXBOUQ3qyE$tKG6=Y{zr_Hnu$YWEb<; zUr|vVvt=3!xXh18F>Et-v3o8=HYdyco_ccIKzh*JKi8ZcuHaB?Hfb&|UbluDxjmlB zzFqvtyWYd~hOo^>HCpV#h3+nhyq;#sd~kO?7gXYhU-ez3m^Agw5J8D@rP#hFPo8*r zg~*3xR`(tiyX0nRa0oNM?s4PJ*Up2fQg+JK)C{ZUjr@AAHr8|; zgjmpZlxP@t6MFpSxT9Y-VKl9moU329iLSL>RpH?BS;$=O*0C${$D(Db-L{0C7M28z zVYM%|rpgq;ic50%y>vMnrjLI|Z%mh~wujO99?u`AD(#1}y)#2T^QM51FQ#XS+pMhh z;qv|K#9d1y%U{^uyVye6pu{RUF0RtzFrG*h%6o-Aog_HY55vsFG@50UZJ$7b#EI4V zl2yEnPJ@ESn|?08BEm>&v7oeBJzYvnVsy_8d^u6RDkf3%Cw|yyWt2da-eL87mcb@S z*6=*2a{ZX2Ny}Y{@Tw=_NSnoaQadA=BWaf58)LnSJY7TUIg)PFlnpK;`c1>SgUw>8P9@n9FiqS38%d% z=UpUBQ2(~bezz*8isbGwWCk~l8O@IEubd;g(2&>KvGovX#6Z3y(ud-1 zi4TfVeS&Y%FSQ9|D)b)ZxkG-k3@)?0-v`UUMO<4nZTpg~T{~5mYv5R?1wy#ZNXO>X zVS_#7xXgYU!PqCgU*ggyn?js-m$6=!^uRDeZ-}_hl&p*FF$+0NyHk3{<76yVXn$Jv zbApg=SeEk+xA{as|FL7_bj8B@tRl6G?f&JvBYuP%v+aTmmmD+C2j01cM^GN-P z3qCy55%=|+|8hcaec*~GR$a*E!j{eDCAsqUB{UFX zcsrNZL;PwZoLswL^4NB2>8Kp7S?hf`G&Hmd^K@D(7$07D1(3jjLh1z}C08qZg$oXM z0mws1Nr^(jdL;W2CWnfKa%+AV**ZQsS98yCx5jIK)^k5MC7hr=E=UuGd|2qKma8v% z>ejDVn3-c>N$k)YAl-Jy2(XDeXgcY165NW5ypOgky+<+O>Hd*Djvy^MEVhXX+vXUS zW|@aDb0e0!V;%kPEb_j>pmV!hK1Y>%ChF1_@}*dTe*2;02y`t-zs~I9#_`B{yd(%iwv?e{@omdQsBrp{a56|cNFR*m&5FcNQ++$zx! z77=*{659@DX)$Uw(XCBDoZ_gWf-9VrwIO_o3uP0%!c8Q!&B~HnhPe@N;{Lq2aqgx{ zLv;uGYQyJn2>CaF0zQY5$BUWBJLL}a+>fmz6MTuHh@CM5ED!wR*L!??K8K~^eUPKg zU@3($U`G;|f7#1Nz$artA4Vsp_Bfuj_ zudJQvJOH=p{j`_@mE&TRwgd3SFo}hoz9h*&#+9C= zqrPgay;EtW%WA3PtXSo;mcM@^Ml0KPG*8rHJJun;w6rnDEFvl~S<+1(zyc``jKp$E zxX0MWSwPpmq}sZ$i?K?>33w8H2B#R$%M62pmEFGmKGs>x=k0xrU)@R^NuB$5{YiR6 zQZzjh?y{pyImu>h!il|et`oN&2g^YfDZAL2o}47=qXGi_9j;}+?Esc2pP4+pVq9u$ zkdYJq$e`RtFGVi&guL5;btKtWm)Sc|76rHw_qqIh4}WZkReF~g;_nWy_^r|~3BAwr zyjtN`E!K%I-bo)qsQ0a^Liv8(a+8z6YP+w>54fVrNk6i(+0O-IjTIu>Bc@T!-pgqoutp zTu=R0J{}0s1f7%e;M^m!44y#7DVTN3(z;;FQ9ug5W;bRiK8^G;~X~v>xS-yXx)rtS-{JbnOK zWXD|3^ZB(g!$&bTZ?at9i?hTj8NtWWe5wyuC{i0e!*v8TKf-#>l7YU8)Zy?E)=#SX+?I!KN4>wH;K)Nmh7iDRr*I*9%i6%vSnwSA%CNjbm<=($Jo zVc3q_^r|a~PK5hlij=qaiJc|Z3QuN_H`uG(*JtjCA8ps8zgAA#m$;uhl>rJq0-Baw z?>WQm#wYf!`-Hxyo}3a0vzarurTBUgvg!jAitDWAo=N!^B7sx)e#cush_2d-Nr()` z`ZKM&5^z%6SGW%_ZaW*zfzsr)kNI>yk1E&ubIVc5QAvJ_`S3x2nA$nLc0TO)E6CdF z=~nn2#*1%Gq3?yDT|p#N66bP3BOUpPBm3#Y%1U?5jvF_bioc*_Y3_?gp&- zwVv}?o0s3Fw0~T8^#)L63zcm-%u@-b;draJ9=?h?ViD|OKUhQp;8W^2?hfFF`Ce@imlYCdDT`jH7IKJvca6@MM0p*rGR2TOh?FKe;n{6ePOGJ6X1h zii%L$auQj!oJ>|-o*mrZ<7Woy88}pvCRYPp*N2|)@=6Ig?p83g z^YU6hqs_0wwS5bhl_ix#b$1N`UPXFy{HduabQZJMQ!LbzB$cmlLg9 z(v%Z=kPu2!NIfi7F}i8F8$9r5-kU7Y@5Rwlj$5}JJ^3*3KvMJ=2q%kv>oo zZ=9MLO2v~1Tv~=T%hcp5KsIlP61S-7FsrL9Gd{DBaTX@O)nAvVN+yMpRJc5vtcNXo zW(rZ;4ax9%IsIh<6?=EKvvVfEp)cFuE+5Gfyz+G z>~G8Jkw-E^v-Kh)8O)fKoLpbZlP8lPz?@Xkyi-u<45fJNgD7;Dm-plpHpRuMq&wDb z;W+YUITo(~Wv+p~tEa~fwbx+gtw7FcYWl#~^!X%KETc*=?ungoXzGTr&2Po(5|rn; zG*`(l39LiwpR0ce!iqWSJRA8WgUi!zSd#92U)vrJQ?-yFw8~o_k4^db{ zUEtj^et&}h+oWf$UbU7@c$Df}_4~J3W7CWN`ke(Ccy&Gac6760WxHx$6);hQO6O6R zeuhbnc5qXJL$N_WRla`d10hEzwZTAb0Ruyq!)Q2p*uHvyQrroBVV1*lG(4#0c#l&$ z&}gZcRRi>}JcNaNsB+PQ`;E=YsdtP#W_{L7&Q)=`cGOctn4uEn3P-MYf1RMbsF;+I zkM>8$(f0%dP#QF+J#LrK$euIQ)^&thJ?Z2h0l`VdrMJaLa>s~ zLL&kR%j5Duuy%6@Yvi%@!zpDJ`Ply;SDXR^5C%#Mh>s9#i-3gb>~^_;iSF2nOL%kF zo)!9%jLNf5NJrk3o->d)v#^MXiQyQiLxtAY&7VF|&M@#Kn(g{@)AnsAmA`CFqQ$H2i!%aGNu|yYKoc;7B#J{Npu)hFC0@s)jqJTm^5w#tAjM&-Z%Xe^o z8NF!+XijVEU2eq3Dv$1tj(ZSu6kwzO_)5q9<;EkM{aCNwQJs|~GZtn+$jU@iwL8RY zCnY?HF|UGn0^{%PGcLB+deojYRNMYjs8$*@9cAmUS?^zKf3vMFKAJvHPp2NuZou=*tFt0OiWE)^Z4`-;Tr@e~XURs&>z1Y%0*1Jzk2k z=0>C^`)_BaBfGo0Y{v7Hi_?_ZSC)XnG?trS7yWx>!?EUxBbvzA1mW~Nu5syqFuPjV z&dC9_n!0l|2q%feX@L06*u-7y1AxN%z|VYR!bc?n7aDs6uSo&&E|eCJzo76&N3&Cf z8sMxJg(!yYLDG+HBNib&br3}|HPYSI2K*OU=kko8w72CPxc?59-rHep3K6Om1}ZLN z6O!V5G*L*o&o}M4QVFN{v&Z(ub3iNh^XieV3%jG)I#MP5-1%2fCH>`V(LeJAV0E_; zJ1Yr}Zd*f7o;;-kYkzEWjEbInX+=!%{{1*95A@|{#&su-M?4~6(K%1&*2|QrVi}=M zPMyI_d=DJdfiBJ1^dZ2jv-w5H-UGp2hk+ly{jjMlvTSE3S_%G60ibwxv7U9f?kr=| zfJuJp@VatX*50Yd@6Bsy3B7r!k!Xsuk@p?DQ83e8}D-h|xOzx85vL$$8 zHMT0H`+X9xN}?}G$T9Je>B@4fKeo!2CR)g-*4vFlI0TGRkyFe%(!goDrlz&BG89W$ zeO5k0Xzx9e_Ue*%S?RMKEoyxv&#(sg5F@np5~?lf)DKT#&65I+p~U8(aJ#`8y#%on zBlq>Yom%au+M;i^d3Vh6ikJhs#(M7|(8px`ykn!I={a!T_@OJ9S`5bWPxFHiWWVq?ZVO6_e3c+(KXpJj+(`0VaAJy8iI={Mc-QmjT)e1# zq+)8F%kBlH*g8PD7@O|%CY{D!ZUk;?s_ya9x=v8tz|p|7NTx`>;QTsFP+VMG$lhL? zpM?MZxeQ-kz{&NCE$qQg&>tj*?tY=~Vt#Ejx8;B!@x;4fEDtU?yE-UOcdB$hh$ifc z>Y(te5aMPP7q8N+AC|<})Csz)((2ZH;5ORO9aTKriH^J?yFFow8P6XF=c81m{X zMLPxRPBk5Odw@@Nddqaq?=0Qt3SjJea?;azt?divu1e__p`_S4ESUyuCaJjNrYW3a zAj6ys+k`o-Be6BrZzjR^8C#v~X6x>v+!a53r3#1Cx9hQASfvE@xB-0x3M@BbX>()c z!7PvyIwzdCcw$+3#RE8HyzRh=qOBbP)EU0X)gto%I<^tY(T0#J8-zgI@1y6Q@u8eU z3e~2AE+pM->dBapYh;nV5e=0q+%vne^~}tIs(HgIb;DL5HO+dvtWCLXl-WuH8BYfB zuGM@N?zVP$x|AEN81V_?KN`k~OK`ORYVE1uVpNX%8N^k&>UgAMDCs=%Jv)!wdB7?H zcI(pnzk@&w|JEbK$ETEMEQ|kEjP$|<0GV|xOUritR}Bppn=d*b_8+v}cdxSqpcMW% z^ul5PbWzlNv%Ev%jYqwryYsIY6uvc=lN$wL!U$-5 z(m)^R9BK`TO>}Sb0@2X5wJUm5SXh?ei7AED0t(?!b79;bUa?rY8k7SBYdw>B7?yA% z((eFkH}*jtnzs4t8XC?#vUC`Y%OqNTW?Z- z{$*}M3S>MF2K(l#vHc|udAhHLJNO9_(oU(G8`As9bm`M1Nw>12+nKPzgLM(vWP(Bz zPvw)zNl}}T@AYryMf&S@AP~wjXwPHS1Vn*?qYSO=G0doKnQc^lDKR~_z6P?Q}r}P7W{f}CJ{|aUQPxSY%KHmKQ)s_A=wf~yh|2AX)S1bX! z=D(?K{L5DVvekdBf&I%%{^ceA@{<2tBmUR=`2WcIFxzYp1B|nJ?j=CVZ&;?jQuPVl zo49bwYpJGfXjFQu&Yx^1}`X;t* zU`_~elLkt5zU&+|zJ5v%Yx9f*^MYWX`j<}o(7u_d1|`BpMMX=zMh~K=-uHrX4{Pi7 zFne<75mOLoqUp2=KZN+~&olWgDy;858dfG9=ZTF(@B5=a5^c)McRel^c--gX%T_mU zr%=8TJ#!-!!Q*UwNI98032wGU@R`_ol;+DeB|Myqp1yz1A%d^`+U#gxl{32ECjz#G z6FYkYcgx(|JX7;!Y8{5FM>87K74Lj>z9wbs8M?FbWh<}jn!M*VYTpp|?Z4TV1g4n4 z5Ncoi+ucx~xvOipr*f-GW{XJdOryD#%M=9PxE9`3VTHu?*wfN`%mE@f5e15z`v_m; zA856zb}DbS%!`8ODXX69^{$<+`xlcAUs6Q)v@1LLbbid zKBb1|7gwJ<_VK&yKG?Mr8Zq@5xjlXV1aC2E4a_2L3e1x9q$vUG&9a5xu;XQ@c#4iR z+5@&VSRmEV;71+6?LzO-_49#7CC-(gXbK6mdKrdowRDv&^X^NtUPmNxv@f5YE2Y-M zzGyEs7N+IoFPUUq_;wj+SF)fK_U_%goxgw>Sx@LyjEKNTFdS<{h2 zWn1J-O`E9_)_&=uriE6eGV^J$J3m7XGQf;v)>`yV*}}d3tgWqEbGzgnL(0S)66`#O zDdY#@rQfcGvcFl?MM;Q(fZ7pVv9F4${-kassAslwB!{c#>bG$R9XO0zP~uB%at$k; z_m;xjRKI`cS4>rpCC^0yQ6>ilbEQByXWBx--1})~UB)?1clq8%!KEcEHiKaHciig~ z+uT9H)a6(v^2XQps2~=Yr!lCTj1qUhTSj6aj|F0g*3@(ePN-h76$<^1qiDra;q&__1oJ!X#=HW)*_gUz<9u*b5 z!^2UOZPpz{a(h+zBr)9y&#+WWG%^CZ{54gHGO$^Dy0Kzd=R1<|2uNmjLNyV46OLS{ zI=^Whn4js?0V_A6xL>kXA!?=_>FEthw73!7CxFZxg zPTKAFcMwY}SBp6Deh@OZ`09+$el;)e(NgkE53+l8zs&#S<13!w!@ifz(rVLFQ?HVw z?@Lw*g}2vxVA1cN$%h07Pjh@xAY#ibIm2Tg``I+jRdfYWO8aDMQ+SlwW?Op?2N$!R z1%+kJI^{4bpA(zg?E6r-A;~<}KXdL4H%v8X`cHEyqLG}VNv^Rcd2)^Hr=;Xa_L7z1 z=XaGGdR%GfkDKwrsC~_tU&~k*-aK zVFEtKc!;#t;I)+k)nJ8l zglUS3BUS4=%mTbqQXpwpVEh+%olsR?k9@;of<0Pxe!hQy<_HU^aIftcALo^oEz8Wj zUq8pj-7?;8@aNn$=&^5de)!RrlzESi?GOU*TNfIttmf2txDhZC8650$aANw^)4Ir> zfk((U-t(}`n2QVB>L{3zoehch=HY*A=Dlz|?p2ICPL)tw^oGL7#^!wgb_iRKD`shF zYgjqu@2IH7p5M=zL)^B!xw-E=zEd&%rNyYT{?qd>b!KLmhEYdBJ2A_l7AN)0Z=J?^ zcXkfyr6wjO-d9zbH-DF0TK}ve7k0xvJx5w((fOs-4r15TOByY7f*Zz0@v{w9aa`jVoektq0Ug?b&Ue)~&at@7OnC^sIf^t1NESs2{SSlNCnbEJe!I^p-U zCliFkn3!S*uvtvWQ>?!3mR~1I1xH#xSeIKE)t{^3EgoKZJig?$T-O(9c#``3g&ZTa zZniEZD@*dwb!y~(l)miL#DpiYrE{!wq+3H{SS*LaU!fB*7QKXfmP;uTQ0=B2 z@sYL1n1%8RTQ^C_BI}no>_=!UUbNnItRZ(HE}FuL>z1`{DJds^K!t^isIRQe*29ou zbbr%zDEF$}+Z@kVm6K!UHhT$`ZjMDZ_P}dK%+%MH`6eHCyEyN|;wX{j$>6$l<;tIk>rBxH7^WLH zZVaTIDNwk^e2D`T+;5;k%mUL zM?U`qWMcB-*>m3Nt6qQ1o8$;-djJBD?bz29BsyA0zZ zx-4~=c+)g!d)ip;OeVc}J6`pg<#HM-o{8@7BQtlxv91ow36J|p9lt-N@f-w(6gP(7 zB{ikmj$aZba0tdOuB<4MVEoMDV!@e|>Z+=W%F3y!iGyv97qo+-GOu*p2%$DFdUp!1 zHa0$0&wR`)9!?Mu7l%EF4h%fMk=wECoN}w#T-a+b8FuSd)30B*?CdHo1;kt|)Mt%g zU+#>OeE&DZ?xnAsTug4R{pOD|9$j4|U%wLO)NOp5YY zvbxmVtB3O}d~%bQR~|!A&wNF~m#0L5<92NG)?l#|_wS!SzjjU?$fX~B7xpTAmHfD| zPo=;To6i>mZ!pW}XL58?4z2cyy|~zJD8&CjC||;Fg}*ehdEOPfogTqA)JI;&Vy98F z;mz}FNhT_f+?v9|!VnRkJ{7cBM^zd+82dMtPnTsI1ZXpV*3l{3YFr9X<;q8oZ2rzl-)`yj(ce{Q5uA{`Q{+Qx=2*M zqod7dG=~Vh<89&ZtgNZg(bloCw(05w#Z)k&oxKCILfw&!ikuunBi(VS+jJt&1+I=( zS5>qzgw^_`^9wpKie^5?hUr=QIK(|nXg1O9zQPT!+YT9Yh?hD4{;HK>% zJ#jL85)xJ`U!FhM&YdOyNZwe+UBfiA{7nZoY(ijiqv=zT^)JU*795)5u}{>Pt{7(mmyltbZ9nYE?;)k!> z&H6F(m(Q~$Wj%l3_U_%AQ}8g-oZmrunsfh#Crpy;Bb8=>Sdq-1jb%ccSgQCNOgB5-K{AN(qp5Cs}oo3MtTv9Rn4d$R2qFTal6DnZaV0QpY%Y<6_DV*??K>yxh+Sl(6?D5+=?1jNG3X0s!H)dG&mu7 zgoW;Ww3p+08McgtDfavY>O0EFEdPVfs4B-Ye^pYoFW#m*c-D?&{PQ&M55(l_<-xf-UY!v0?J{Aie&zrr+NXsnfX}|kRyuxsM>X3a@2b&8seYRNm z?b=8^C`~Ysb>&}16e%dscJ_8#3adpyxj3Rs6)A7MEVLt`gRb{)N5u;criLVBhlD&; zMJ-`47>1jYMO&aMDp5jD%_-kNJilV%DI(%WLo$Mqg(dd=qrtp9K}1Bu-&8BvqSj5z z%S^~TmW)-h^z#F5Z_x_B2xq1FWjM91EI?bkoC|V5~6;>(l z-|CsasjpC)b4s=PU&hBUa(OJ<;BZ_X#+C6hc2-TmFoDufhf{c-oZ#{9>kHoLH8nXk z&{Xvc=MOeFXDVxmc?45$f`=SiT3A&+$e&~06xt&j z_v?H5@W9NpT;Y!w@|KQ{1MB-D28KD84#^vH7zF_eC}oP1HIA-Lh+?Wk$jkQ-}C;N_#5vb9_CQZQQ+H zw04D4m>?3kwZd!q>BDRP053V1kC>*Wh40_jIy!a|6QwbR!TqbS%B)pr9>_ap&n389 zx`&^Ue4Cq_Jf%6KI$u7n933AA>26|rT2w4JfSw-Aj%xCV^+>G;*57))x3TaeZAhY` zathJ|HF3|l+F?-&%g=+zfl*S=q`)q73RN2B9Zs3rE8API=O%@FKqxbt1qBg3Io-}r zQYNoG9(?rVG`Nf$^~&nv;3G&oF`vmHc+FuSWpFbxbs;J4TZWa*6nyTrQ)lR2aCLqU zytB1+vMq1}yDCrX3|gb3 z0FBeqU9>3Fot&)9b+j>ZIx@~Tevhg?nXPh5U>vHgt{3PpJK#xKzhXg~$awX}K(T!I zHjALeL#_uPS>0=mH*hoD{0rKVXXNvOjt+le`~YYfN!{%w4xyks%Sc5hdo@`StbP&MeVeU#)u9z9J&_f-n6FXDYJ{ zMbNZfDd5Fj;fwz{Y_&C(JN@N@`6_70+bfDIs31sjVeVJi0v! zx0xBl>@H>Dh9xqE(T2~+|WXHr&ImTeE@tDL2d zED3-#%=#SVg3{MdpB{=O4oTd}}oJA~%Fw66FsEaHlpy_Tj@nou-yf zj<}9JeKb-6w#j5eb_WxaLV{Q54cW(!A6Lj9ZF|GUZPJt~aGg; z{)fi#V?KK$>pvR)zL4Kr?JSzEioKU5HB_w>v&FTypYP@E%?K?)o1Li3S$M$fAEn4$ zH>_5n1*7@eX%>5+9ho;;$?F<<>5<{C$yIS{6x=6$!x0B)(!h9NkPD z7?=yVYz)Ab3KW{C%daApO$idnDUd0T%9IKnQz1GD-@0YjXuB_5oY!_`EnhwJ`$*Bs z5}ib~2z=B2t(LXHF^_I{n~byDYaU#ti`&D#wOGa?Q_CV<{%sDXKfqG(t6f{l9HyZs zuX+?Bph19OXH)F_lvZ!cYf!g655M_{A3%}~AM`)tlD31N z*~nW_o!1sj<*#t*8=NeS&(hoYaTwS6x>=|%kZ2e($`zuDvKCXh0ZV=N`ZW^$^+~1I z75J3espn+I=dpye@qg~>3aa$--llWN^wdyIS4b`5M3H17EoCW@!B)%N5h5>>HZeDnm=Zj86;?K zCMJ5nsR^3$>(+}~gFx>o?aLVq0B#~}Y?Lc5E)G8lmy!=g*l`3>Ovc zt*!Z&ik7l@)RY%rYiXm`q;&dH*$rj%lj8d3-?fEuY%MPOZQznnJ~)sQHc)r@?E1IN zh9XKI2-KD?C)jK7sNNKHo@ka2KXM?|AsSme`Bdw2Ej?DkYn5{z*vFJRPS;6~m1b9? zo&E^@a-{T~QkDO*i?d)VtKRp*8$-p^$mV0?5DVjJjfS=Nf0~Gz+1jMhpMP)r@Wr3B zdLP%%J{@5jNEVxB?-r{HOetB~E?V)zf%Zk%M%e~S)cXqt1;{9#2+*gBHf0Sxl^)n+hr1%hL9{%lS zQasuFK+C0gsKC)XLo;i|!n{~9pr5wX#-5CctRBHNC1^KtL1lD)f%o;!b+0~C{ z4OHOGhtosy{FT#}8^H1Z@MIod{K=iyk0E(!@+@&FKlE(hdtW?Rxs5K{@3X!OEyi;E zqj4(fq#nNup3e)cx{HszPZV84{V#HdeON))MGEwz+5g}d#-jiE7!4ZTz!578NB_^B z$?4#HjS0M%aeDkP*~U^`#!FhtYOwvb3##v46PSrlNZ3f{i|saZhJI3?{Fa~-QFFoq zl=L;S@LOA35z2BbnRHmrgSvFXZu9%s+kp(FrKP=HRYg8n*??c485g!t_I;ai#>U2% zS!#3Dl3U;QCVrK8$fN)B^-T)N%*KYTw8o9e=x*aZ#(V{CV~uA`Hn~#$pq;xa2{R+V zf0K!eOPS5`>iRk(Q$E+AV7&w2D~;?I;^#;2?mK*a+2Wg|%9k5Az^}7^uqNr!cEBk^ zj8-%^Hf{tuUkDr9`Lm5vqS+(ny8J-H=q2i~{L*5dNnTGeEz||CTDv+s$5Sv+p6;J_ zjW{m&u^NTed_20d^_x%YC-_YQTu(%VFel{OrDSH(c z1A%ho^a7-AObhV7MeJ(zW;2s7C)neN)s)HW>g5~Ie_^YzFI%6^ zx*&SL#n$HK_g|&^t}ZUhPsmav>(nuH0wYkjyx+V!u(TB$33*;@p#q=BTh{9#vZtNXh={v6TFqQBIJIYo2F>zNKmPEjZx9 zDEGuaA>mgosw*pp#@Qktf=rD5ed)^$*@F$ZV@YW#H^S4)%Yp37p+)`54CvQBaC~lB zn)Xktspy*3{{3}C1Sp*++2XshC!gqNUkPJ(otyg#1iUN^W|kr$Dj}$?!<2isQTN}y z@p^7jdUm#wR&?^TuhmxVMQ%GWTgv-p0K}aui8Gb^WO7~4|6yt9&u6PDN$RRdwR`b* zu6C}MxX8+)+020pW_)dCxGDYRA2z<06dP-)Y4#jr-P^rh74uA~N-|h1+Iq4>%31ZT zAx4wq=H|zbAKbAh-q>!ClF8?St}QHP2*097-q+o`^v*le$WHaqA!X@HAD_ky3K5*- z!dH{T)HZcKq(BoMp4J}9Ze(P%-+u&Ia<)hNZ}fs~A@{@hLqx=Ca?)MKomo=5FlTuA zT&WkPs=w#e)k^`CBXSUMl6m(0Fm@?I$Kbbaog!qMXfvv|8`SCR@@rH4{mOjzjk*PF za-)-?q+H}~g||m_ngP-0?dRV*uU{McKlRkL@^5rYRkzMrz03yIT9CZX&({@i@xnhp zJ`~y5%dh9S1AtTPTGm@f$JNal{Mgp?2(sL9mQ}_EG4`NJ@q^l*#!=9kv_QmY39j5B zFYg=;{dY<8tK3TqsXfnv!fk4pFc@Hdz+^H)0ublHdjTSbs~WF#c&cKu0pgy$FT^Ef zF@lBvo|V922|^d^sdIq`Ql6AdAkS|M8%cL}I0oY`LkWv&%l*534%vZ1p)U z#Y%(K?KXB!=Cf0#hTFRWUPQ*oGvVkgTOE(Uptk4y?iY@ml&kSle$00~ZX@nkx*NwW zY_H!@^{<>s=ZHdz0y&!J3s*Mzn?rlw5{ZUBQ?sS9u`VwUJv{ue>dkbz>PT{JeV17g zki<1IEi;axi3zQ{LJEw<{P#z!I^)&j_@9!4Ser&0)Zy@Z{D2!(5H*4N(* z`Oq9}K5}j;@H?S@XlN<_ed8`Wr*X<_pjfqY;6}Y z7-93h^MXO96M9vJx^`6389|;Zuaxx*n~!_ReBqToQr&P6UPmWs$Njyer=L0d1_wI~>1ltp5( ztFf?mwIo&6wYymK^u#^p&(CS-IRU~K@-z9Y*|h9Dx<9nFwUw%_C#Ce^%)f_=1HeqK zGc)r=cVXh=mr(UBEzfNQ>7 zTP`fQMfb5f3Wsv{@j2;-7>H7qS%eIGGV&??sN*Tu7zh5C#Iv=oo42EbH@n{9Tw+L% z%bS#~607|?&Gud>p@((BTu6bS&R#cR=$!J6p#Q?m>^%4HLbaZ^g_3U0S-F1DQ$ZuG zOB^s!QPJA^&6GB|!nUm7V5JJN8BUoh`4@6I$4kR841*(Got;JpD<9I*(ulU>wl+3Q z%E~~S1?2ti)z50lqE=ckp~#na?Z#kS2aiSXAE?~5vAaG#GD5)P)yHupk}uyj+SXFx zA=SU&r@J_U1_)V!gt9e_DyisBj4c*NG-&R<dSCy3>t4o1fdKT_Km8S8s1wHv#>exMYzqO4Qo0KPs#~u? zIh~Y}IP+z$5%Wb(0Zy`Kd$$}r3DaazoRE;9$IpCd@leL;QmG+N6wnEK62Afyn>sp* z`%W<0R6+;8x#2M({r&U%ctb%C?}cyoqj)pM-FM%%UGDD{6cS1g?6rAZx(&$yzhQUI z^w;G}d4E7JUCL9w0pVfaM=HNcRX3{m{>XO4)xdxqU=-W7gPd-ik{Dld<)p%Jx;h1d z^mpo7x_I_|0|?(B?SM_=fl~jKyNy(z#(y*BXL6eueN$XMc1qz@xzRoUE-^`}KmMyH zP(;07qL_vc(9oYdxpyx!a6O5Ma|`H{lsfwlY_&QwF`=sii)DmNv;~6g^dLIr3J>i2 zs)?4*i$g+&S$UaiLQk_DLKS?*m{6)x?gEAfxL(x`obzP}D%O6=J>W?}a^-S{6 zzorl>CL61mYEXy9_2k@PVOhms;)gB!s1G(3WDXX?kVqd~+@Y;bNNXgBY*i;G8r>du zu}M#EI~`^*AtDwcBbQJoBevD=xJ?(1o!Y}FXzyo_OP!tfp&xu?ywv4s@87GC^&a^& zQ{!tY^K@XjoJ0e1py^>cm&-(=5^Ed=>uL4Q$zA)%sa;)#HegsMU;n43Skf^`Q$-~? zFIq(CBK2Q2r%Z(I;_w7;CKro-!d^)KvU6*z5-TRT(p)De`zTq`{4I-kxt>UrMenO$ zG5ja*yo`)$^W5CeR|yZ68YUI1XU`xwOlQM+61?uMP_wOOa( z(|4fF)#u~cVjYb8lo$3v!SYw>DL8An2f*1;>uP&AyM|B}#h%hA1)q%wpVzAzEUfYS zIHmd1R_91DwipAcylY~gl`M@_`BwhTWIpi{c@s;VDj~b??d|zulkO^^$uu8}b~N>h z2~njRV%l1ZZAVm8%pdb6q$7&G{$7-nh7X{n7<*1uCk`P#rtYj!Do0AZ9--xA__n5!~;8;hjWfsyc37 zn5thh6f&9hZJBmQKgoSQF&54K1MIW_baIJyt#jEKY}aF{ZoXQKk6s=nO(am RdnN$nb5B=4mvv4FO#tji&>jE) literal 21655 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 diff --git a/frontend/__snapshots__/replay-player-failure--recent-recordings-404--dark.png b/frontend/__snapshots__/replay-player-failure--recent-recordings-404--dark.png index 789d794e15160bda950af5a6b6b760e4e756ba38..e88dccd9f2b55e81af53b42f8250b8cdd3322341 100644 GIT binary patch literal 104250 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

6q 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 LkuH@o{rJBCB@ZS( literal 102908 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 literal 106269 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

*K$VvBd#0qP?H_)g%<{0LgC|D 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 B+DZTb diff --git a/frontend/__snapshots__/replay-player-success--recent-recordings--dark.png b/frontend/__snapshots__/replay-player-success--recent-recordings--dark.png index b2d4c263e841a2080741a4b39ad8846c354f81c6..102a4203a02af2232137391f7e88a0c99a16798a 100644 GIT binary patch literal 57176 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

6q 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 Ib4q9e0QlNkC;$Ke literal 55364 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 diff --git a/frontend/__snapshots__/replay-player-success--recent-recordings--light.png b/frontend/__snapshots__/replay-player-success--recent-recordings--light.png index 600363cbe918f00eb3d41b7be74419019571dc7d..a0cb77b34bb3ddf78b51b585922afe22f6296b97 100644 GIT binary patch literal 57238 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 WjQ-w}kW=_rbf-_ARZJtDzws~0nM!d0 literal 55379 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

6q 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 F1OQE@>6`!n literal 55303 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%0Dbe<8;cY|>79crht^o%fHkeSGTN?`*w2 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 Ng)9ENq`Bd*{{^bAKu-Vw literal 55361 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 z z$<7Y;jT5QKFDHHi(Q4T$Uu9-aLOpz3O3DF92Q1I++qaQJ7j}6a!@fb0CF}8n9ZQuj z_CuO%+F;h_uZ-eX_XiPx^gQm|RBY+b5iorA-I?HBf0&tu<{EA*yzQ;`kB*{Q6->lo zCF}jt9zPIbz!%}x>|tPFU}e4Az)eX(0ps(JmUv;yclRTclkw*-ilgFN=L}l3e=HfG zxCdu}^>1coh5>I$si{TjdCh*6mLHN6qM}4VN1;;!)jqFBBQFoni|4rg$I$q7=uqIG zC`w}R5Nm6HhJgUq-|?rfHZVS1cw+Z0RdeR)ZkcGCVUaSPil08--dGU0)z_DQO=8#d z+^Mk{|70*8pUa-5*|Og3mmDiCRzJK*S#<5RLwEpr(m{$#PxM8Z)C~=pgBbzTkN}^1 z%$w=!@AnOS!4WKS&i2ZcI9keVl@}ZLV>3Kj{X~X$kbBp!be-gN{;9YvQ#&c{yHBX8 zut{|vfMCmb&(JTdBIvSM7D#Dmm2G+VE^LsNjcsmr*8a*B#a)iq7N&Gj1ETl>$_K}i zWp5MyyToRtCbO$=<=O1kYNv4$+`t>$yt(B>t@_ZG=%}b$RE%a878aK;AG2tV!PK8_ z6+`e>b$%P@h1yD~j_wYW0Qd$Kqa?R8JhTvpgiNX{=vsa(UH(os&Rd&BDPxM1Jq4Z# zUORAl!p4>IMa3(Y>PzP&(PzeRT;lm_B^?0LJ3p zuz{xLr7Kr@vQ^_NPuq!34vHCml>MW4eYj_3rk@25K-6VoVr-1+fF!LF1)f241kKcY z;{=fw;R2)eTlCD7)=ZK)OkHU_vs!xto!i0EXAG^Mb*#zX6KG+iGKaaLKdij z)*w)n;CeLl^&3a$(dIM%t2`IQ1%PR2y@-Say4O3|{8rn)RSQ*kYMFH$%+TE#vNX&BZ0I&LXZM$g8PmD@12;Oekdwu@)+Vr{GPlgHn>vc4Ns8p|w3 zVHs@Qy0y%W*C1Sn51Eo9r0F2%fl(#>O?0U`b?-i&dHuI)Dv5c;bamHZxF= zo1beFS7xUvb=#BpDBM)5?VI}6xpbzohKR?T`K0rG6Uw7+)y$EVD&Zm3-!$|45HW#W z_|&c!{azIoT(Q-6nwy;>^Awj}mz6PY+omWG$C32D{j#`S7!AB-8lE!?I-qz*X*FA@=MJweu3x<+e zoj$bpXn4*C*#mZKtr}0wL=w~v9Ej9OjE%K0H-BR;@{zEj`9xoUh5{e$n~S8jlG1X2 zr*~=AGtV-MMiSgEUxe78&G+uDOijBLGrG@f~Xp7Y&aVaaC8 zr~Tmi2pKe5yxN9I`GrFRTv4ZKXqmzZ*?cF)w3*v;gn2baNbACGU;=Lp@)qPE;oHv2 zl!4Zj4`z%z9&Y90+RAcQ!8U#?875#+T8T=knx-5`sQu;!pPa3&Z2*D8N>p&$O_j_t zH%A&mh)SmQ(fuNPbej1olCVqOe3njaqScm_MEU7uYu6{)S5w`Pi-gDAY$E2aZ`W33 zl%u5^Kd(EV9xg*xNZ{O~r#nv>>O>K!*1guarqJr6iaA;Qf`W7u0Zf6)Go>ek&&q3_Ma zv_gwt4VKf4Z@~~$GP1Uue425;NkO;2eF-~yj`Hc0oDPL~j`R|xmS6h!Co859;=k`` z6aD}Gn>?1nvDQYMo@?cop4i(~<@J6%eQXG<7Cw+?}spJ%Dte z!-rK^R)%R#q?hPD$;?#@L~SzFdk7$$fdpPAF}>gQ_r3hZv&AwoAB*(LVWr!*?NDJX!bNK8sv`Ab(sP6OmrpluQ}IzSyye*4C9 z!bv_s{eEGgow@lTLL*cm5s{AO=7NktIHkw`bai%~rWk@;0(%YU8z2Y@3JQIoYmoAd zrvZPuK(C-o6?E-LqmU7FU-$>nxY0!Kp3?*bauYu;%K5gal#WE1w{t% zJeO*mxuqqR@xee4rE^nLmF{yUfoYjbDJos6OX=@Hifs)~z2C+W+sqsP}Ye`T__pF-hEBg0vAUO|SO} zvKVeC9_Gk4X_N#C6g5~(xWKX0+1Xihp5lwq2GX8Hat`y$mroaEbZ)ro&dkho-~YEt z$(pTjtDQgJT3lORh&H{M=^c1ahmWgwA329#dVqRb1R>)Wpeu;cDRugPA0oCaiKh;u z&M-L#?d05k)P1;nAZn=JgO6d3?vIayhxViqMUY6s%$ zAN+k;Oc0>3(gv$N_X%S&%6JmZ0k6Twp{Uq*_$*YuSC&`)z5j~|tM@#zD04+cb(&Hz z-2ti+$hk8`ll@O~V`J&;AA!&Q-%Aknm)zaohwIW>C(b2^Was5kaM1oA3Xk9uPygPP zQ_~NAEDmxX(9pQo+5IW|lR6+DxC$G-zWB{TOn<*cTT`c1}$u}=>=k-h!$5vN6nn+O0ZWtyWx;h@TVr^FKfRP| z`=kq^-Ir_W^#3xMX!I4v&q41&GJpT7%=qsr+IWy4{@o|CQpx|BvDEJp^K}yCIqg$l z{rg6;_1(AS)w0Dsb&|N1maxyo9!%x1ZvFQ~4LNo7vbginN_h@WF~tvCkVPD(H2?F1 zbUH+oPVaJ9vk5W9!4%eK&d6!+{!cU$J#*&FCPE;krc6-7M8Q2%3yZC>DwijjMKG46 zGLDk>KW{O`6&Ye{Q{X8rbc2GvMI(q-Ck)oC?(WSQ8ti*-n~UVz{EzQ^pkuhWbRLsQV?j~*{y9gXnIZ##V_V@E@M4Vqrwhnj-V3q@n^b8IZ%;jjwU; zv28C)^!k^-$xdy>Q#E^%m#-w|8FnB+O)=xeViH+tDR`ca4z1hr9emF_twhm#4=Uk& z6AAAuMrrcs(7i3y@j0YUb}AG&LxBRQ1ltGsru5n@8oI{E$FtEj6&nlQ$>GZ&=|iS( z&WqiiUZ|?BjtMYsZf@cd5)Ml=sH-q#$liYT`**e6P7EA0sQvr!t@!dwuhaa-L{(&`=*%P z#nO)^ma78|GAVOM&o6mL<~8{|nT}G)2C#z`my@GtYMQ1J#BCy|&KU_?c(*aeOwltk zF8!V{tPj@1{8n)AcyV)s3XglgK6vR`cvu)FpvoTGgG)YjaL1j3o%>XG?8vytM!3bd z{zdPKUc!Rebi%Z_=_Pin&QsE?=L9)wr6ZN!jLvr@acgMR*v-S!&}|hWJO@$!$eS7x4yiSV+@v` zEAJEOTmHZ%$j3&ZDPwg|o>Nmthc@YbPUrLnH=lq&S8uPwLF3jW#?v!0n zppvk~5aUe~BO=aSNVwxi9s7$k7l}yp_a|Gz_&VD%OZC*VEy;S2lnQhof>xs;WGaTk zrg1R3=}nT^<;&p2V`5{wp~XU)tE{YyQp$gpKWp)3w9@IhkyCp^16);S*caVDxq`!k zwSucPyQD=OzQM@f$sX*|I?BpW9!e;QWzom>E+^Eidro!+;pM+?^CMAkJ#GSyZ z$0o+`FHAS0$UsFmi@|I_cJJN^h=>p)WY;y09QiQuusq@ohN^%bhZ_w3`tM)A<~)3O z{aYJ{#jdMTHd~w1_DReQ*VO^&meCg$7Iy3PUCH|V#&3D@a9|srZMN1VWKqbo2lni_ z@p>Nk=2mddr+BRnCD0aL#Y1yznpAUyRV zCU(2Jiq$g1EHhSjftQvt__cMcCkL6;3Q3P$`E4hY=3r?l0jb_76VrS|D948{F`kr` zR*YZ`HA=xBUb*oKJcWXuz<@=wp5(J}FDzwpo13S*6dmR1K=2mXVLMlXo}yopIITvSk5 zkpX38>u^_m*F*SC6TuHBBqp*-d(cFfpF^t|ynOgR*Qu@@9HMvv_<;yE+1j9%o{ZDM zn4Mu->9T{P6qOE~ViuefoE#jN0KCiSlgdsS?&N_gq^b%MIsf+U9Rw>d`5YV^$D216 zdQCyG2h3Gs?%^SBZZtGof#K(KD7enJhk!X{EW3ikCZ9m|d{bYqo_sv=QM;aiEGDro z{Uo1vDC|W~h|Ns;!-rC~Jpx2kCNh6SH7LfA*zPAJ41vvkmv9UdUts|P;(#A6uk0tR zS|cMP5cq(yGBYz{4&u%lqPKu3&{ef;Q=nyD$9QXeKki6n&8 zn>EcnhOflnz!g;R3_$%XELZLAS=re9U`RBgE(|uO^1)GzAT6$4F38UfL&m~4 zLn0q6vt_tT#8|gMOav=YxOemBYxqrd?-CzU22$I3ZLFV6GZnk$zcF;(PdrLFqwU4{ z_k}-`e8N)jk#R*ld2+!1R6BOO3{OgGe)Gm0HxathR9nVtlrZ8Bp9JbscLbo;Eqn6B zdZ}avV}KA}C^+atvokZbu~f5OqlAXFYo$u`r6i{))d5OIhzp;}3xtex@4id!IuUD+C z;p%LJ$FZ_kZv8uKPVhZk3yGk4pp}1|Hct5vMlmkVR?Rh<*R9M-tt#o3sZ$%5dmWrx zTwH`f7ADc&H*e$<+N2?LW6YxF7O>wzgbeRYb}}+;VTeeVBQ$t2Pb?OEFYJ1>*Obn#!qqpU?&~JdL zj&OGN4qQT3G`G2r8Wy<^>bR9?VthQqiGh-UYKnjgxKd!9sIdf1VQXR0-KG7OX+R}I zqp>+CCWe+Z0`DN}^bmPw)%1JL$heq(!zJrWM;$&4Zu0d_iwTU zN>J9r2;vMNO3G5AR`}= ztR=H3WrWrpKd*;*c_hUjEC7aA4bSyGx!F1~YCsdI+||aSE9ieV7be#PmF$s^ik@)j ziHeq1R8)Z66BUhFttm^u{8rMwAVu<`B9jvH9RwbB_Rmn~DKg-+218cX!&#(jfb;~{ zbs7>UlsY((LG3W)e*OHJoh|HbeSOo$Qc+n5CIwnT`GGa%I&ln5RX?x=M@C2Ia{$)a z5GAf8K(N@egU7#qMgHFS@p?B!1_YNKL9dV$q74z(e)MM8Br#RmkGUV>#rPPwED(m)v62zt zAbc?Swr<3S1SCjUi86`qB2PEL2m15-_uFF3J_>#qS7B77!9%rsw<*FXE}_X(00G6u z#^%Q|#LQ^Hd7$K`XQA+1xJubBt*kIJGqZvHgdB>xVc7epdf|bw4XcY_hCH&B58Vk3 zb#`&NDq4&z^KoE6oc0mG_XrzJqD!;>X~Q*$m@^+I=H^Uwb?KOyS6=UyZR}NftpBLh zx}C4U>e?a^Al3a_+m~beG%q|Y?`!Yrf$tGh>EKS7#cm%v9sJaAJIXvlGuYR+ziu7y7^5%YIl0XMC)uB`@0r0vtQyyw zJ%OkgAOQn2-U-=JA~9at)YKFxaFD!E2#jo`GA$Dm%qezD3vjb?sm7+Ioy+YU_v1N5 z0S5=VcZu*6CLg)<%74?Asb?3pwOm|8eKn1Y!jdY!)MNR7W zrK8jRS;w~nX!~)ReMMbP)HZc%b z!7tv;AT8N7{;OAUb`q<-ehAI0bN7kE@%U+v?7vI3Y}S%xWNxU6VS_zAZU^X-a6TcS zTDKV{`x~T+7+4r9K{LM#S;V-;i_Y&V4zGYcY|q}k1U!b`ok4_?HGWA!-=?N|K3=)f zm8S{)nj(WFpqm!JDmGN>^YO)t&$1g!yG=SZOuS`eVSJLCFv!=r!?u|8cP(zG+V8(n zkS629B-_-O+j{YcjHUOU1hxE4L__vSl*H424;W61-6M4`z+B3PXol_;4|ODC_hFylX`)it z{>Ye^z~0f+3giPl&uZ1~w#i@c?cj8e`nPYJWz+eJp`QO6gMYi3L#D_+znoW95PN%3 z0m}H;LDl+3l>>nqSP{|D(bKc2g;L=@cH3K676Li~(WB$DC?d%=`%dXtgQl0hk&r?%2(&~@!QCGPW z)PPGApZV$D(-SljD(}%GLPPob<;xR5@ulCY_>rtEdA?ZAz&K%3U!VbFV`E|!{e~n7 z0>STdbNlY)#YJhDpph~8j0JU!jZcD_#yDO$8oGvu*^0g4377dneps1Sk+$AOH85s7FAH@Y3%y7q&goxJU;BUos>jS{LnN|6}`GZ%vVpXyi zxQW2-D51VoRL`1aD!jVTWp|V_x(WCR7GCs{_^r-2z_iVyEZ;Ot|eDB%JZ<3sJGYDFV>+)c=$UVSsM%a z=9hpGKu}EuFK~8G2^UqY3YYB73I!Qos6qHyXP3{3k00K7?$(*+G^b3%t(#xM zGXNWvGmr=(&s}DTSx6!t+M1e?)Vl8Xl=mR%s?3gK>c>3rPvfM zNi>2~dpMp>dBkkt;IJ{|J`CT%J;h9n$46K3i^DWO zq>I+nlhfP})H1!HCZnritZARqd&~))*O-UFOH@RJ^W!(w><+k-;5Y%%hoi(6Q5m3l zg&CMGYP5;xgDMX#uJtV@-$VW(EgS%9CP~Nd$b_n3dy2A2?No5R2{5EyU67`5G_yjcb>YA^AVAxbS8@IhV|kT*2X7iARZxG_cJ+QE zKobuz3K#UC8Hp?@x>(=3&2@#D=bWmk>iFd|RHwxbX{kOfZ(+DCj~0a3CUfNO_~Nv; zVrL)?-k0@TkK$5A4$dc^d8~veudA4TRkz5zYm}fJFmye#M}*OLlSKY(M?8`F8Ki+Zt(Wt=@ady z;{^@f@GS6SKy!_ajo1yN;J6emo*3XB-=FU#P@ED&J%UMOiee_P7Vz~9a6+$n?-Ugc z8=LU(;L{#X@Xf$TH0WfxcmzTqV74E21lIXybsz@nojWlh998WJmv1!oJ^AR;%FT6$ z2^6c%(!v5L>1}jn4!|}?8utbjE)#5I`1*<#Ik?RZpP3n^4s0qM~OGuP^ zm7}c2q&O5})EuJTi`Q0@eunHh_@jqZQ-17LIdkioS9f-rl-AQ)-L;=ve0Nbs43}(zn8H)%2Xh^^+O?`xFZa(smjDeC;ji}&HMD4qP)tionx36ShYF&|g+IBTOSgz) z>5HOFFshoMRy@RZZ5ZS6f!%=r4+a9h{%jGhySMg+xmnfFu&T#n36N(Jk6|ct%oJz8 z;3mN+c|)KNt*)s0H$K1IlA-Z!WQ2%@l$MRK7o+na4;h%54FPD7U((al(U&0ct6%$w zFK55m{Vc+0@>f=`?C|SwTf(6a%V)m^-9b4Tn9J){iK;`6J7_)9B0Jg|_|R}VYx)+* zyxM2w8SmDOc=($q+zX4!m75<*E$9N?G_CwbCP%RfZT$7_2V*0shS3!P<`-oF+#5Kq zqSCCM(uwvNG8D-pho8apP`C;}z}EYi+Y0tHgBe=Gjs}J1a_yS_b0@B)i;6UFz#K%d zoY2C3MY2V}KF~0XhlK?NM`2EADCyt_Y(B8fOo=PcdOXEqdcl>r&kX2lX^l)yE}@8t zx;)uvx}Es_n!`Qahv(6c6i{!rhDwlh%cqr46M<7o2AwoAQUXnW=}%sMl8v#1mc4xu z==0O3l^L0t8yXsVr9^I2jI;w!U_!AqWA zQwp%A2zGFezIsJqjbLD5k-qebTv~*5$1e!PJ%8>A<27rMs_`4MqpWkWV<57=ee3I* zTE!T8Z{HAM`cT15u&eHXDv@oIC^>8?1YZ(I=dL$Q?8lb(4mm)NDRw=^t{vR+346o zhxT&2tD9;Z;1QFqB! z?%D=v3Q!O)`@5&oUS7(d60!?xI->blwP(EsT#Bx?V44Wz#hsPrZq z*n|cJ5OOF&Z=7o56Lh<;#vT0nh5<<}Pp|RkVe|ieV^97m-=+UCIh@)e_kVEs z{WtC3Yj|@TxBf@TGB=XUN~RG}p#`h9KV`JrC zuaK-Yr|bqSjBDXD_FG?teGc&q5Wer~v)tSXkUuD73?ET}cN7r#4v=R5gk_Ue#C|GD z0y*Iu$^ayC2q3%-)nz+L%UU!Z@f@S>L@O~+r5$@bsqE1E{o@b0b`>QlVLwhYwxMH)|mKLM$gno=-87AfKWypOd$Qc3T*{hpE9qme#A#)0_+E2=WP0kn(%&?o)`2oCK{dC($xA_2(J zH+>B~fe;8_!b1gD4`@ruc;JK4mkXu{eKW8k7%i-Wm?ky+K&yuEL+s}WM6ENJdyWm7 z0rYbtAeNvg_CR^gc4S*v-@c8Fm4f?F+^0kVX1)=JD|K{;h>E(vXGg7Tsi>s1vbcCZ zDXHrDbJTOy?J*E7Kmr|ByMOW0r7xqS(V%C5%(rjfE+tikn#1p{R6hZoROpY=L!}Ay z1^nFPfPMy9PaMem;5 z=sYJ2tBHcV{3GKkagaG!Xw+OzUtVo>cK&(v@>^+WOYH0z1tlXc?uMo-@U!w1q*jcI z3Wx#?$NNDHfM|l&jb20H3nips8Xjv{Bf^i)`KFh(y06qdIgH`2o$x)C>=GR{^ z#CZ;yI7)S8%t=UI#Et^`{yIH<9Y2tu=Jwjg3dpur4nCwp<&=Iy{U!bo`6nGPUy5TwIaLSz40-njqbo-v0srzO=MN;uSy$ z1KM5d@$iw8dx;ql=uJwEj&_C|K>u8vsUBP*Bpqmb5;)FmrUcJ}Eb(r`g!tre)t{z7 zC-}z8ul5s!kmF6hX5TjF*ENY*VNaCRiN5oSjHRoVoTE&@Ry+7o1$=dlIo$o0qm$yq3=U~N;24c z`SK|0@R44qw_qb7ZD=MhmJj=)RZTSqlN3#jz8j#jMRf&F#g7r;x>d}^IaALI31GB^ zK=TH^3w(44emep{03Q(-|AfggQ4SZT3-a@uT3cbl^(kBczvuh&E43UAmL6KE8u%ry z_W8F)vWI{SMUkfz7F} z(w{zOwf7g0A^J{>-=%_ufT>bHy1A_@y=Hu199!*w8c^T+p#KX#O&l8zR)G<{kKQ*| z3?NZJN~6IUK{ZS#y)Z{ZoY46C^(cyxijD&uhiE8%e86)byMcg%Fj8NPknX$qWjj;& zt(MO-GvN=Xl63Y4YT(h%hXT6dz|w*O+QX@FapJzK9>i?MrMUR`QRds#VPjrS?U-PW4oY>)zef9XUqOa( zZJrneWL#b4Y!2y&LN=LIge{B`f~eh#$cJ^Mvyqr*2f zHtv=v;2ymqvS-O0t7FM~TJX})8w(M}rHeOdUd?;e@ZJmNNpQOEj@t^h1#AFHxK-?| zrVLO3h;}pR^SXL9ENPlO5DNnb{3r?WCB%qGJ=K3yQX+!kEvo`@vpA^)LG2dXZU_q;X(CJSFh_{=Zz4ISRc>~O$cT(t>=xAQu`2au^Ux}% z>|tQXtI~I^5;XDij?T`Xph!V-XBHLNqgF(YM(ZTAx=MmKwCZVWiZtKl+k}k9;y)1A z@7zhm>3?e6RbC621v)X2a+DMZM5*mdLH6gq`(S=L>`F(NW-Sg;LWDzPr=y|qr=f)U z1)T{(kP?P(rKZ**9Gr>fUYH$9B4hw!Gz<)Qfzgp>okLtAzO*fr$Fp#3fq?k-5tI<@ zb@(ZE?ASq(G3>h{$jf{C^_PmOs?p21YiLAdh9wWD7sbUX{&vG+dkKgEnoGjvTN_RZ z#=;~~DyGaa!e>r1sjzT}!chYE`Db;k{uLZf;u!<%0GoI!z9jl9n9cV->OHiQ;xyn^ zFtVwVt}2erGegJ-q;}H1x3}$L(VyFe1&)*@yZU3x^RFKr>S}P}4HhV@e6Z&-jz}cx zWG-QQnBW;;ETxO&Ngf^w_ky=4kdQ}nWe^el{5D!;P+MVkC`>T2Lh+&7t##hLd6R`Y z{Jmk~*J&T-|7tlrudg4{YxLX+hsiep0KI&93BzAFBPoi{q1YBN4}p9U9{wJO{6XYo zRyhO@e_!7s0uE;+splLbKN1es7)eWo_f1+_8WtP>-J;^+CdkKNhahl)DS}+XY5EK$ z4<5=#3=_gmK))epFTZJ2Wr|}{{jI(6P3C*{?15_mQ#Ww-%PbyM)2DK<5n*@la+9de zg7R{A$Srtu(&}EXN<`<$Xiez4P&5>HB;epn*o#WYsu<+hJjE z3d8(2OS1}#h?HQ3AT(Ov_zqp&)W86gy#{|0@h#|~^n_8pxY)s#K_e2= zCou8q3q-kdAe3<+29$XmtJpOVWHTK|_=4gU<0K3p9jLCVT0y9Sw#G>xI`jQIx7z(S zk)^+2`h#|i^OJzQ059dAg*6OCp<)eq4zq!`8IvB%qpGU_-i1x zIpMonVY&sM@RNvzl_koVHsv-Uwu|8G%Y%cr6GEEI(F^hmdmFL_Q1*BQ(W32#8@$`;{rjmD;Sx77Nli;LRa2vafKhIL;IGRIJbWi8 zFE}Z2Rm36-!rcV2Z)Orqs}U|@unaQZY!a=-(_VnF}*MZ^`LHi)XHVeen19e~9V z{swd+L7u|}QtaGmSYqA;bpbkDDw=?>q;O&^V6YI{aIkhs4fJdj;abho;KrCTRb99`?LWhQi7s%hS2)J+7@wA#8 z`#;tB!SD9UTm*_g5mgL&6_w>6YvgBG=tw!Sl$|2N!@g9w~p)&!|Fi$#u@-IN>DZK zV*r4>yiG4&oH8}7!&U~WMc_xq zgQQcI0VhB%rYr)pf$+y<1$czZyST8c+su!=-9=Wo`)%K* z_fuGR*tsa8B#s?JpQV_n=+zmxu}@v^ps&rj6h^Z3m)(|s00XC1eitf2xe(wq(~z%s zh@PC6EW#fv^2t#oOnsZ~DC2daA&BkOv?%kJ>lJCU-goRY{63^fA7vQCPBz6rLvs&i zpn+_>W7~s7uIAQJ$GM4Y1|8iW^@MG)tX)gf9|U&Yo#VG9x6bzD%)c+ZmtH5PGQoYm zbmqK75IVHExwv2)*Us<4bHq%V=q=I`W2jn@sP^8L$A(z>n&c28Xk)_4D$L2vy=^yb zN?MwOwRL~nI?B&8%F2Ck+L{KNXfO>f&Cz{N(%hJx1SBvqo6j*`2f>JiaUVCJjt{{dmqx-nA(y zL*U?H%{Leg#FdhfG4%>)uFH<6?Y$#{?pXF;-wepZUtK(6F2X2BGsyI^JIr#krkGsg zJ++>ptkkKWSi4-@+)<%$z2gNKkC_%WJW3fF9yllrr$Yy7n46np?JWF?S-$-lmyaR? zLLm^`K?2DTjSWhzu!Mhvt!<1mqM@^==hNd$Hv@iw|G$<$^+1CM!Zrs3EFEx5m0?%{ zU#u4@Qy?gm;=In3r=Fnh^~Sy;+QR4vQy^p!b(%L=Kk!VA&CCeay+%C*NddbP3i{~i zD8g0^795G4>Fa~(5kxDt7I<^gv`ax>@xOOL#X9b&8?Kp?LcX!BPM8L+!*(n1iHf;< zY2`I20x9HaLfCB%tjrEcVGur|5p;Dqnd7QzYSrlUJbeO|<_@b;v;r=}zqNlq?g7t* zEzD3t4DJd$-31?M@ZNp*U7l@fm+r!3h1USPnolF{VFJk0NeP0X(A09gd?6{?!m2I*4$pFQ#%7~e-8)wCWyIv=|6RQHy-$f0Ns>yw(b zz}UXN>nQ4Bfx%=_D?2+M?EPv|V1+ZHNaA%@myTo#9{SnbPMm=RGxhA$)PU7dJUe}X zI9O$Ih7EQiR@)K+Is~%rs-Ljhp>1XSwUZDh9p=I3E)% z@2J9jW{nt(w)=}m0Br>Y1UNZ4QSyw;%osmx-<8&SPFWd_;2W#WC}9D%Aq$7AWTyg| z;`sq0KTHbsJ_w%A_{J%;gpqHSD;z>%>2Frn)6-k$NjLci;qi_8LhFgLxu4G)X8kX& ztBBQQASM*P>X`evHI(Yq3hXAEKsv0tW9)J7r%$zIs-S*Ni>?&3C~Z7!IUKT~9ea*O zS&^N$KQ;Gv#_{yt_I8e>>3c6v+8b!MAbephnYgb3*Wg&$#({aSg_)1>-a|klN=gmr zUL}oN0dCjI7bT5MVZu?FI9xL`^Ppb^j5oldz9(T3#>*?y8)c|;!y%JZ;0qc8(jUT~ zuLMi~u>`e14ebBIYJVoQfDoZqW3-sakt6#tj1>(5HC5EC(iPw|fbQYCVd*DNYZ%2m zrE6ez?l=gN=|rcde)w_?IxbxL_FxD{h;u*Qq0<9=*d4YLc%-C~n#|Y1 zbdk0l{7WXc->a|Fz~S=!`&F2G0yWN`j|*`0 zePPLmfswdg$IeHX5`@-_>U9_|@LPen5DRe9JrooCFEA_#jee5DP+-`6KYnE1XeRd` z(9FlSHbHR$A~;_Mr*WP~R}t1Nz?xRR&hFh2V7DtPD$tVvv(f_g14dPsmX{aj=X-)4 zL#sJRb5H3{5buX!i~^6-nbkSzB1y7ggC9Ug6HFpS=pIm0Gk>BF`xw=>%)GqD=4KTE zdi2Dyyo6jz5k!DMGFQ7&l%CGc&Hc8qF%J|pkQL0tSojz+sgg}xS`{*`{DpP-&KCJ} zY+`Ex9}u^zn4fX&qqC#e8E<5jEGK;8}113+d5MlUa|=K=&yN=>*J0ds`l)}XyW!)Te_ve zF4miYf+Ia6bU*`|d#qvOf%;_i@zJm>p*3Q9dV2bcfq}#(a~x5eo0}Ud|G;1e zhV6(XkY;#d%JOY_0yM6Giy{d+e7XYkXcC7ZO)Eb#a?hs>20Isx2LUeR6VgK+VqxgdQ~zs_mz>LX$`@LoYAM{@}eF<}kTnC0gWo zyy1{Z=z>)O^#` zB%>u{P?`sBz0jTY)aA%yzBuc79atU|Rgtdn?3XV$XqYfix^PQMO3L&Bu6Kij-tc0& z_C{}71_RH;^zkB|C3UQJt*Rs`YU_)7H^DsRZdi4(>eDL`9|mU1$qF4QLkf$8-^gz zjp-X3`~36CY}s-X9*FJaC#&#wF_-yFaWWJLJ3 zQSLtBsHq#V(a`$tam!swijk;*2k^6<5qci2`ZemhP`(8Y%v>Szy1!n~whru3;#buS z6pfcr`4X3tGjeC;&d!oXkr!9-!0VQNSTJncR$M%h861(|+mw~QF zRF{tE7YNu16kdI_=)sUjQ-_Frs+R9n+T`A>Rgnu%E?-WNs#0~Y-%H5T;fp#6Orw$0 zJoc%agl^vDg%#D3SZov0C|FV>Qe-!Z83^9SIR`n$x13Vg!^AW-I;ss41-qPiCn{>r zA!ojL*z9;>RbcA5(g}*;yOV`vpD!pVDFxrUrBW`-H;7I5P$$0w zk+OuDikFRy5909=s0kp>urcAe;nOY9H#CGI;tFa6N4ldJ(|Onp#;z8@6)YA0bp>Wd zG25Q+ND?+>UNG{&np|8>R8dpIz`L4fU`C)gpdSGMcc{L89AN?bw?y>2Va< z(Cli^VbxQ39d8F%Od3HFt7n3F7@wZmB|X_(ew)mHqyoPXA{PAVy5{duy@B;BRMVE3 z#vum}H27jsI%35ZmH&NVMx;rxyNe4t!vX*9xxK-^qJxEW+$D0ltE;-QGU<3i6o`Pv zrLhTUQo*Xw?*GhrM&@rx1or_TNFwOr?*7U|dRzAGC}tS{`Q3tRvFnvm5$(tcqnS;&edU(Vr;DL((u9LzY6^Q z4s0TL(!sg^ne*F_5)sj&cyj6WEz-FP6Z@4>_mlbaqTT_S>Dyr)BWxswrNi}Fx zKl7DXY!ohdGZKFzI}#q1OA(~v z_650#*JSpOA3sK}7C4VL#|GG2Sn*|%Tmvu24a)5cb@;G?wanjxvZw>0V+gjy zA@1Szl{M(1G3g)JPyhX)Q}+Kp>3{taYzchPN&7tSaCf(BQxw+;5SSN6(6#sI?@SMm z^Y8wB$LYT#hsNGY|NTZ(o#6iF(JcJu4@rb7qC}N719A;DKT58h#h{*kW661Xc|Eh~ zwn2fT^#$_^(V7njPaq8d9_-4bQ86x7AXNa6umb8Cw>2wazKWIAH<0e}0vGmTUiwcB zYzNReSq%n-Ztxd&lepYrE`Bqj?RqK25_ogAQ24z1Z9*`Ku?4+aJRgIdBAS z01U{OA23i6w^6HC%M&My!?y}q*b$5o-iCpA$Hi~9(V$J+Z$3o%+@49^x)8L=4h}So?ar4zaboGc#4rpDZn*OJc)c$R*w^T> z+(5mDG5(iP+roFzh3I!K!+UiI5hYdX~+!au$Jfl)83ayW4*WU+U=B3DpV5nC>2T) zm534w88SQ~6eXFGd8QpwBo&W&NIb@nvCLb=79w+oXh50gF+At`YM;H%`mOhz^{(GJ z>-_b$TJK=*$MYRNpZjy)*LB_3{bd?dKO~1qYRO*E!*0RLyOg)c8c$q6WI54BW@z{o z(HSk|NzJB+FqeCTRHKoo=0Lju1GqFDQIpfk%Bbn__$MbP#epM&1d4zC_U&7+hua2! z*cQBw0Msscy%fzsnkgEOxd8~ZT|}bQHkX6j#!tPAc$Pl-IWgI_s%)Lc%s&K?EQNV2 zebd|%#`1D~{J^*e;3xe@X9^<n8gJ>xsWQ$GVApIB<4!JU7bwfCAVOh&8zDyb{a7To50LtrBWUvhNhSqGO+R0*g#$;nk<8HFFS)IXQ4FuLHxr0IUp z@5mm6<_3Y(ASvi;QFeof5(ir)AyI@4aO`F$c)9CVwJ_0|L)9BC;UtV~{!N-?oVYG2mC*Pm;)sK2?)=1B#h%IKy~{%QOX8^ zoz@emvgMF|C;T0dTW-}z!)-%GiDp1285tRDX=LTrf)jv}zu}gsi^i6g-3T-Qd=z7M zvMV5oGJYSxZs)Go3D`w)2hzCO*uT|@}A8* zJ^nJAkWx>ve=KXxu^|YfxCfwP!o+}XtVHV{f+tQa03}53l?{&=h+hF)1JBTEiPF#C z4!!y*?O70D3Qu_!!%D10TN<+$jzk&eowUFGRW-F4j}kpq0?TVpQwd{x=v$Einu&zt zPynKkAQ;4J{$uDy0QU{8QAmadR!!vi8`RcdYv1U}%TFd!SWLA*b3jn|Hp-gy$!YHFCnYzdrzJFubZ!U|;Pw z!DSHY7vvBslJk2kKOk8p(mbSL)i)*j&d(#riC!JWa=)Dne3glW)nIub3}Sn>DXE`B z*}4>Hcf2>E`sXhk4>bsg0x+zVN>*YZ6mmc_E;DQb&kZYyR2|$Af(9{B1~K~_FY&?< z>2-8;um?f=Tc93IUIe{?%TZQRnjRnTM^1X*^4Kmf;2iCEx3JZIo|Xn6rHiTvOzDDe zE8`?EgKoI{?f1HYms_is%E%wmvoub0ogjMwJmkF*hpA=pbTF)j=1bsvq-upDP|@La zl{VT}uHneLYAULLN>KWuwl?LHW6h%pK<_SCM_BntH#8Us%`=$OB0dke5D;5^ydUcx zw&J;N4z^a%=d@mrbm!Q0Plx<&d=0@k-EqS>+(a=>3%% zqAx57_5j5U*3{u`%s}u?Sohq^$zrTaCIkrxgHU)VP$BbcdjCERVZ}R$vv*;fRoc8g zCmAi-NI*imNccY{ov*BVm+zpqqwoFlh2&LP$Y6|fz)1kw5G4l4|J3cj9e(2*1(+X1 zwHm{PWHnyWTTqtmc$7uWc+G(}Yk6{YJ^^xqlp7L6U>*o7^1aZv;RKwVm;iW%Qt6ck z%{|>7el_TfcF3he2Iqh8o)8(cMb0C@KwtpQ3caeg@a4ikg`Z07fRR762{?7j%3`rF zD=crECg@&b($nPf+&U7xi$A67A>F_qBI8hSNQE@`k)x9nnjLqFS?}THrH+N;^JwJ7 zO5l6X7{o(ys4BJj{xIi;d>Yvj96ipih8rUDEzi+yP@9O%qrzkwkQAbxVn8ZR&Snfj zTgE8>OGxY7ICARmt5)gP#-duofgZd}G)$qhAv3G&ijZJ^{opiUHj)0+vrdID-XGVq z#>+2C8su#tuF;88r#^}DM;|q>}m6GXB}Uz&Ox_pdzLCWy6f3BBq4->5U008 z1MdPc3dI+ZtP)<_^h@!uUD`^WL3`3#>tuEKc=gyx7V7+7 zNmys()c4v%qYaV8VNeOS9rh9m8pT;_gX?N{US?;rO2;QA0*qzT*S`lwjhLo|Si$IR zh!Px%*KLxnj%}rg@nfBEF9j!Gfi7V!ssiQC07Q~7@0mc=e{irY)Ie_;L1B4uQiUXg z2B7%q4-f$0S{n?Pq`@9RSR}ZAe-fTV#cMoW`JEd;ULm0z0q!;*4K|fnkRaMW`yDDl zadHTwpu#ZrZTcpt=Vr(WaoI$kiKzG%p!KL|nPZ7YD*64Z+sin58~T*JgWxW4p<@0 z0QwTq2B`>Og)Q#Ea&g)y1+nu`nuKI8q8da3vJDpG;2e>6PUxpRSKXhZV*%(TJ`pKV z?6@l8Jl4^3jpfm_TJZ6}=0FV*RvZv3WbuDG7H!|SWmf?+0a|yyd*T4U?I=&hl!Y|VOtQ> z)PjSzY~K8=*%X`nW)TXMnWnMk|t?^}-vl)H}MMPF+Ch|8w z+c&EuN|C+I5V9*NTIUrZ=tM=4@QqDC-on<@1bqqoVk9lQB>H^@q8z&TG6-+Su^P5y z6Ztw@Y1c(AqWr&Fc+Rc=>@8Ha$gUe+{w`6PuIrz6Y2TlnaX7K&lNdY_02)kBJzqYb zi1p$wD6>-b=hVck00g0106Zb=aIO^myN>;z>ifT|_q!`dM&TI)LK!h_yS2~y=q?5Kq8VQ6-#L?m0R(*k&UGgib&3zDfKY+5)e#8YJ1{B@Rj-=<&Xlkl+ZTDl(^PGBuhR}0{8Wi6Fd!8 zp7E7cC|XZM2_8A39;>>I3BM|SX@Z)Fv-QZ4Nu*c&6n@AuhSvOgxe9|#$?7zTgu^rI}4mVS-eZL$R}byuvdt??6B?da-8l2Z>B zj{nauz|%yeqyB{wA_AEO!Ua~#uC#h7xKv>*A0j9r5Ccd^pWc#h3xCNdbkd1ZYCBM6`W3*sV(?Cs(TzTupOHu(2Gk<>(*(P zxaMarVGk{Sm!fTw#^{)299%%qt2*wXpLof-1x^fTb8kZ*eo zroF`5ooP4Au;_esxRuBKJ~@@>x&Tmd5pNNA8n7Wa_7N2iPT2ifTzFl-T8(Fi+SD1W z!0_R?C>gKd#4;HKu#RdKMpL0L|1!jI;IMp1l#m%BGQ*L>+s9|?cczA?r#-PoRT#$m z6JtuITQ2dMfyJWZeWP3QZuQ!=Q2rg309yybTe?`^11f(kGzdGGNWTC~BvPLT2O|b; zi}iP+@&+FRA^?CdLP9wlssWdweA0Y83@JH22;%fy08-D{TJh0yK2VsVTo}d$=V9)x zRzSG~e6i2O)r*)kyhXZ6P`-<%XhVmK1S1JrFt3f^nt5-mT;7?gV;o3xq3J;JJ%CdZ z$5{|S;bn6qS(u-fP&G8*|?dIbhR`&LJFJBT1Zh|K7x9n$L`ZOB?bEqD1 z32-AIj5VN9VI-lR^4>_~O#O)Uf<;TNoY*a=I7qz_p=!xHL~f|U0A<_+=MPr1J#ZKR zZYXy_=MR8KA&xyKZr5i)tP~@e$KkvkO%3($yo=cqdVa5tV~19L->#iNg~MGKc*|D!=YPtof9Dtd%PQ{w z#|McgMMo#`7jv8GQodBq;fU#whm79R+M}9&M?Hhqckmxbdw){ov$q_PM)Ss(+FZ!C zxIgk?OYFNR3bwNuKQ>rgC~oP_n$<9xUg+cAHTHF-rrf{ojI*yj&7mMP=D{Y~&bF`u zDfcF>Ipu5dp%%CPWD3Z4{hS|EVCiWvxXSPBvG*r8el9l@yA_@9quM1BA@%-J=yvCh z_wV&0KV^vLp8X**ADPhjW4SAF%0;t#%75Q|7IpQ&>Z{LBT?kTOI@X#}TYIyQ`<&Ai z!JUqRo5p_&eGK&zzvkU|$1`fKr|p>KS@0J!2!&++?)u;88wPXl%Llwa>1!=b+*6%g zEdCke_|*M#ZfdGrXLO#C4qk{=QKygs$NWxqe}=#! z%|K$VIj)`VEd>GKmU4=uwv3 znbg_R4-2^;@U4p7yY9xEXwMpUzC=jgdb- zizPIgh_;)jk>i?833@abe}jX`{JiqHJ#+2I$Nn^L8px@^pf29+O2Kl0R5BB%nfRqk zE|cqr=T{cUZH^z)1x-zRiccRBRy$yyq1h>sT4W{15Szh%BWWosui7O{`i6-1%uKDq zNZQQM$^sYiY>M}Brg%@(xK~fJ%2v^C%BM=WoQgd8bm5!NP`#P$`u6y}CvB}$ueUsw z4EcDKsAGE%o{37((%x?vcTkJDmSdc@um6wctd|tynL*7hrgq^RcjqE^6Jm#_x+Zqv zFc*FtZO*>%IP-(`4;~0L#-+T!D@rp|zgTzoK~v3h<}~H2EhH(Am2hy|nnDR9d8u+Q zYD*{yZQM)V`NX6lr-v1vVIBH22pg{}En z#MApbdlWfUNm;(KN-e@=*P$K7`XOOqkMZ~MN;7zVSc>_aezHhY z`_tuFW3LqX7qS843ugOr>m$52`g)Li1ZqTEzO$h&X4g||*v(VoWMq`g8ps{y!bZ1i z=N5h@l2@$Un@H~kCLa;0y4I-nh~oLn(hS}XOCD8bM}?#BeEl{^uW^HeBe^a7fK9+E z9&vHhLCv+bWu3qOMkl7Keep(4n{&+Fl#kv1-Yu-O-3Oj$9iu5WzevN-nf`kkH^)r& zd#P&Q>L1R=@=y98+|=L4y=u7(9Nziz_9`+%teMpL$KPHj)@+$Og=oGtTVCe0#{5ZU zl@aZL?x&_L2VLG=gZ9IFaRt(FwCv(W}*{f$743Tnvt%1 z(q(FUwdiiD^qaVdu-sKQIg^;(Ld!~@$dxu+5Xb4;6p&2vM@4Y zR$kKmHS~0K0-T)U6zOEkg}c`qSY9V9NQy?L+}OMH)UrvRs@i_BBh27lofr_3r;#-n zNeRV2U=bwuoRCPCE>9oA5b^8>Js^=$o&cannt#A&gn7*wpqeN~q+`(!jjFG}+xz_T zf^Mn19>WE+b=t73X1}AHSa|Epo%C%T1*sY-zy>N!tQSybnc9u`^AK%1i;Ik6)m>%0 z2SqPz{YWw!KkZi>TV=M7{a76%lfaqjg@P0BZKKXIiSMJRnOKghRlEt=7q%Epf7|yE zM9_fIQEd~&Kl~y zAbbT{!7b@}96rwSplZ5$ol^eBqiQ$*O{k{gUnHAdoAXLzW^A|uV zj_GN_Sp@VI=!4PXS%`$mn1ovquoEMXcYC2v4MUl(0p53XoP+9GDMEeynm4F{0Znb@ z<{p8&5l{dC8fe4-iVesEBLzIl?$8r-0erQ=BA^-`938cM-Bqm&8!lk#s52py!YeMB z@8k3=8-uhP?W$1r!mv9Zr9SHWKJL9WpP_I<>B|i%DhhYM=dK{dXaHeQ4x+EkPV9jN zhyo19)rCf_*e$H{+b9rg=vQENP^l>iHv$xyTb@kt=H<8JDyBsy~&EKzeG?wEs%W5d02Z6nzABU%j%Guk5YX(*2~{ z?Os?18#_O9ba#Imd{a{BGOG_VYVY|)q5VHJNpArdpsg}1vf0&b@Mg!d`r)(C%(S|3 z!E3}tR&LSNC8Y0NpGV$YMyYa&M%7UZ{RqjcDQRg+Rt3?L7A+Kk)`<b4cI!j{d+TWP)>rWm<9Z62RUrx7km+>;T2! zuQ3NqnE)^gM@x=qmf|@@p0FE$#sdE-0$-N9>uGiAAF-T4NDgC|8l3+$fIxzQk=n{f z1LKZoo(doa{UYeR1lpmOsLVwIn!39sU2pL7=g+VmHL4Bx{6RH#>#0mg%6FkwZAOKEElcTe2zS$4%FtnO$C_IkOiKR?A=!HD!cCaqh#ug`|7 z%E9#VjQ$jd=qc{y$(T`(Pr1flp4GW`O?Vc%G-K*9ggz$sD_^nfU43*zXWmjG#$tJ} z78rDQ(YADHm=De8+emWFkBn6&r4|323O{b3;Obhm@!93lE)Qc-`7cU0N!hb{JS z`v+0868`16>Pk+_A}g4Nf*88_@kK1qKv4dj4ocg2;S*&v=w@T-LJtRfL_<8_e4dhx#N!(+np6fF7_WH};EkYB0Gf*+G;y%A)62Rh z&lkZjgXRJXza|<{q36NiYZ0hml3jtDU>~Db6+QlTR#pVo+~)sVop&pf(ZmP>Q0Pk` z66p)zQS2BXrc>aWKmyo7%?G&f+V$(M9~&EO{=DtJygdEvnf*EvY$*hmJdA7K>c6^WG8Ot&aDVF!k=V;V{_t(9?4F~a z#!Q8stTs2WQ_N@*^Wp|v)cX)(>z6t{z1#1szhJTi=-HFc5=Fn=TXOI~Y%qehS^bcd} z1X^;TffN80h77}KhfudshYpL2{{%{gsO1O-2Y!_n7EyIWx(J4dQ$Xfm7eXj))RYC$ z^O9%McpZuss!9BD;C3L)4;Fiamalb6LLgLY$%l>}#s=B}tJxn(#|kZTUQE)ZC=%8V zc&T;Th<(DCs{r8EZ3-e_ngXiT2*04fU30{FMpK$C0w9|9$yvqsvoiOK3fA?cSMK}`M< zeJGH3QTr&Jg9=1kR{{LuOoR94Ro!zo*m|JzVLEjT zQV0z_PCXd#K>1m7NgoV6yo~}Kd<+dyJdN<~OJpEHV(&lMhEqxYoqPjn-@e4P<1DMT zA6*)#&H!Bi9~x+^#|d|on#*Guk!jR;2|H`+_WA0J-_}Pg+bv>fVqjBA{Z5Y^=b@~v z|K@MF0W%r}4h$8tNIGU5&nDAPM}u|f8M?MO7K_D-E**LKcNMHs+h*O+7QTc1p_)8_SmAc9uH95Zh#G5x-*j#FW_)8;Q*9p``LnD?Xh+dKJK2miG8Le;taD|Kt zIYIQ)h#3TL1c?H_dMNmA^;B-^f3gN$-ALzP9&HQyZSMoC{r=FuoRyIQp1`39J2+4x zcq-|UrOb#w+c#~p0@uRWL}cnx7A1xSQ(uu=U+ zm41}cmNJ0wLkTs>ZQ7Pa1p^8i=Vm)M)o8XZ$DlU5C1fqK%lWafsj=xafu&y6do)>7 zMFGXj-34&3T=V$nAqD?%(Fu#H`ueigm+5IyX=RUo9_dx$^cb48kGUgks}DU82A^=9 zka(lkB<-A`SBQy(sT+A(Ne;6qBO{uA-Ll>=XT}a80tGQ{2h0hme<6#X>IvrwQIXe1 zJj2dnmzVk(qtG89{8Q5jS{2!entd!e6;}NX&t#dt$+(lE!ezP?_28!jUv+rV3q#_7 zE;3|HG?@2SISi{FCZr+ADD|)o@l5tmaA*^$C7yoZs;{wUXu8XX(PpHj?_`ASgvaZG zD^MKIy0Qx3J}iWwSpxGF%t&kyy*q@`eIS*l+g*xZ3F1aRq%L@94TIR$FYx%!nxiNQ zpmA=L{wU5UCT8YHQM2H8-;YDw3T?Y6(ot6$4MCMd%6$+A>|7pg<>14%5EB=d zzw`knpx5CtE`4vG%4YO>dTmS>6hxwIXJZrCm(Q|e?o(NrWOvlY2gu|DH?tNxu-t6S z%gy=b?^jLBqdyPDwAI(1oc=&Ru{@X|OdE99hKXl~dekrud}?my72}g<7%vY=jh9u} z?qAU?n>Qu)q3Y@Q6rtsGS{|``@iSE zyxFCueG&dz9E#gTrqG5q^ub{bj2faOApTnWt-jkMAXz6jW$ONEtHs617KGWNW#>bXt_f`;4!Q&9&z;-9bTgWtQq|Bf0f9mJP|gDsFL3rYgW3%W8L`%LLFZBAfSx9j zb(L@td7YL{+&e<$+O1q7^S9%4`zb`z_ff`z;}ilV&pq`7P4WU-PM3XdSclZRxGU&BF*F~c+K zRMpy^D@ZIZXZ-A=w&$i4Xz69T=Ehw9B=^T}()aN7X%{oE_dj`L@WuzJhE;X21&QQm z6MY;cOv&+yBi%-kZb9eG?J8Sg#lbQ)|K<~~`-8K8gMBU8?w$32!axp`py zU}=ODjUz9MF9|Bb6x1*gw6O#_fbj+qj2HIS9%fI<^rt+iBK7Zcr{&EF8 zN^$kuyiOPFQVXXB-h2~Hp&ZmpPEg~6TNoql-Wv@@S{z6-N#x#mH}HwS2?^KU{Dq?# z2$Aw(2}rTUstF4h$QQpEE^M}et?$eXF|P|x>Vb_fy`4@%{M)NfcAQ~ydtUXx$JKxSn zo@Hm&zzG6&-Wg~GL*}8MI}jrq2KN)QQk`sM5t7AgHImhk@~^Y-ZSTR=JNs>|qn!{j zZ)@m9dN^qbhTI_Muqw6)j;$0R_3nPo>ShvD} z3J+CBb*LWeoH#Rr54JOqN@&ZME{S*GTeek;+qs@$IBfORXY}Fr3yW6aosgZN-f)B{ z6jcn4A@sa|?mEqDR&+d~Zt-U~ZHqMAe~T-_y#rfLoRyP9-bO^*Lq*n@D}vUXbUi*L zp2LT&P`pCsC5}-~kfETu(p@+T=@uZ-shI|dMMkg7puGh!ppmW11&vz`9TQN3+yuEP z+Y*$ndC<>pzSkTWKz>&N3N!6kRg6E`Wo&@#eIn9V_$=1&saRE4k!4R;&y0-ApCZ+# z^A`)mW7dTV;?V97r=5=x@kL?Btd&rYE@d(67 zX#e5PM7bM6{L!j?f^q~N!{q0htAXMQMO^k+vP13&Q8O3DY+)ZLmhP3zfE)m(Pp}8e zL1sih9OZ$xi*s1fWsKq;_DC(+9BR|EJKb`iPC#u-7%nnPO)>Tqil8b z5JiQSA%?&Xj_{X+&;xRwZr<>#;8F7g9Kft);r45UrDo$k&Nx4ZsYLVj}lJrcR|lf?V&BeaPiZL)nsJxqO*8DBg!2-VIOC zJ$tTU<>FmUp#g7ds>w7L$}GZl9o?D`&)#L(sUL1JR2`F=nkwRPi0Gr@!r-8d&ye3N z{rp}k!CcvjB=!7Upwz9;rveYn2pqaGmaTm_o~ly2Dn1oDQg3rm4Ec$vokz2hxrcpo`%z#JL{bOa#cL5B}TK5X2J zZCg8pCs5wu6vT@miU|ZD=i(AXUg(4dkmA*RWyk9&Iay& z&m}QRbNH@S8Ph+p!!yy?YW7ti@Vm*~y;6r1!X`@5(1Xelj$>HdML=8k6 z7sDBG$43rPQ2tZsjvr9m#UsqJrRwU$bzWbd{70r~VWWV=RCX`-> z6Lw@&mEDmY=pnhEYWat6Z9_vWEQDQi4S%-0Z<<7b-Cwkd_)Y@Zq9lVz`8E5tQR z3~J-&bPA{9>VrPlKB$YFK*<}Out)OmpYQ7JXT8*+Q0LroB+(WBL%S_3*@UmonFk-b zZTuuWJih)~Tf5|B6iSi6gup;J*cr;nr3A)drk&EdmUUon==R^!�@dJ+JKatksN* zOHbj$9Ujqx$=BRcn>kGF3giOQT5S#!GtRFFD^OABRkgIFuQs#W!>dBbJL&lMZs{QY e`@bO&nfJI}+W*i%-ztar1@f}WGU?J+?)(py0vw3| diff --git a/frontend/__snapshots__/scenes-app-errortracking--group-page--light.png b/frontend/__snapshots__/scenes-app-errortracking--group-page--light.png index 0d0cd6d752a46f14c2db602226b17ee750af9f17..6afb89461f2286e43d56dbfacae9ee41183d2616 100644 GIT binary patch delta 7112 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 literal 41252 zcmd43Wl)?^*DXjKk`RbMf`?$i2^yS0aCdiice+VJ6Ck(;cXxM4Ah<*07TjGLY3MoR zz2B|5b?=XF=Eu}@r7BOgJaW!Hd#}CLIt0kch+;m*e~gBPhAA%gSpg009s&*R?hyK2 z@Qw!8>vZtn9Y+OGLA2rl!c8=^w`k&@KPkB-?##KWz3e7dm26d-(5NWnrFsj2vW)RK2g?|F3U#`V;-<8*PPu*e{(Rj%<$7^^}1O z5J!fVLVw*T`S|d*!HYfgJGb9THF$IRumflM*O#>YT=h_CRnsA(n`ggLho_vJ4P)e= zmy~{%OAq?^@4Eu>I0Hx4V^(8$TaQ&to>vVv4m!}hdGkgpp0&6%bz?b47U%Ij=;O1q z>Uezoi;D+iMCiZUDIaTtAEzGC@EC~tq^14oQHjBYg}Lr8^yV$^@^D&3h{DLO^3*{;#)7Bmsv@(=lrZd{nh`P z+C!qNViPL9ORKI?W23I1bwo!Qb2(Wq9JsTygJr&n!}E4EVpCXD z6df6PMb3jz|}v3mLxlYIYbyhJw?JK{~s#^kTEuNiF#sE~;n&#lfr+0D&O zOaj)fuCChW*h*Ro?{c()Y7p?9!kw2?vZ}?M8>}8zF4o&zlLZBNE$&x)<3)0d^DHcU zYwNEkXJ&RL>r`cQtIYP6c4qyH24o~@N0qd;%9=> zV(s&Jb@y0ImVN>+fnWW7p(HpvLRoT114n!Fh_Igr7mg}*6JJ(HC3o@kIb5t32D#5oSZ*Vc-zFzN($W^pH+lG1N{o&So!IRwD5<@| zc8jD*XL;j+N@ID`nqNNc>S$?cY<)_~J2%uNCo3z|V`|w;PyeLJv7|B+J}?kM zI#O6x7XJ0?@2g5yTFU~L-RT%jhEHo(*gd;tYxG+2^{nE9T~adQdE0suX+qqK)!8PL zR?bxi{_i; zce;gQrdgDTczJn+$b`y9X|_iqlx2h|T(}zR-8VM3I{tJxe54>w-gBrg6TDshXlxIq z!z;C-Uaa+c$Nl^Z&kc`^RP++`@@20quOx>xD!-li8xuo8PClM*ZDU}i)zX}Suem!_ z@n-n3bUfFS^KZ1ONMe5Ii#KkO*h{nUIP8&Jdm+A1?~5P%bDoI(*}B-6m;r+_n5Ofo zlc{C-y?eH}IIk5cJUr?%M6q&iHa0h7W}1tN*h+$2uRVSR6MR*8G&?gnnOiodps2`6 zI8Xpris9<*=+LNDd5e9n-2hz{d0P^cBgWZ2+BP@ZmQ?Rcr&Vkg+TOv(?|yXBpFk>` zVR+8d91zf5W6e1$sp>_-`}k!M2 zAGC7l79k()AaQ+dd;k7}*SN3n3A`aY4YPciuU_Grm>Odd4#jpGF~{|Ny?2?Nm4)*P zweo5n-*7R{&Kw|ef59Nz!L@8fSs=-4QoFrKP2*2WLs1aEF|b-Kxr}m70>gyf|ICU#kunq`tz!_4Ql^`V+2BZ((on z@apQT+1c6O!9H@0ONzUnI=c!B!xfXkx6*5}jH4CtSqmAf37uFn(|Jt{tl()vo@8Wg zJ3EA2J`9(v!us;zYSr{ps!D@Fgq%uhokIfrY|7JdFG&eA6f}CqMs7S38fW=l)w`lT z<%AGjo@|MuyQ6N}k{S@bQz`zBb*u)r!F^b6OC&w`QD`X;l$adup<&EMYw8-2Lq>k$ zvMxjP5EH+PcDczT8lUh*e&K)WMAVCNWTtBO^%Y{Uudi=#uwdwWOqC@S1r@DaIJO|4 z_f5nZX;YfwJ^WzY>yx<2qNPTp7q7N9X0?dDcv)T^hO!`fH{<)Ev0-^t)pfg%AW_G~ z$IsSzrd%!PMHDhleHVF1ugUIxME;G2ntqj%Do3u@T6@MUdV((pmXVbwj@ddq0)G`4 z*KIUCJ&i3G6oeTZgqbI(NnnW^DBPZ!l?Ot{oHafs+vL!@g{q4>N3LzWH_1{M8tU%h ztZbN1#N|{O)S1BJE?9RBVs&BQ?OXrOWyO1ueBLn}#`%OtS8{#3+^#cKmbBRD z#5`_FX-!HS24oYLTFgW zpC9|%>P}CCWwsYuToc%f8XI}gNy`QeFh~atb%!=8p%72kouOjG&NCAelh#-KRNRQZ zspGmjcWaFrW;V9y7EASAP@Nc8cY^W!`f{MFv_vQy&pLPY)DyykR*%IQrP|lV+;%7L~+Z^^T zAW|*H%H0ur$#DORkq8BC?W7ob&G*EaNWLg15LiF5&!cN6%gf8j-U+8jg}Gz;6O|Vx zr>!aBB#%#&EOgnbsMM`&Vx!-`zB2*(PqCA&HhPG>LF-V_>hwJMvg4GsGz;SuN*S|mQyhwTX>zCfu`9?e`v&@88zk}!E zc}7*<`+Gi>2y@&j%XK5u^%eg?Nwt#Xd!*zaK8ULwF@FfaUfS3YgYVCaXea)K*l60+ z+G8cQBw)Vwy~X8DL9!o(!!xrb2>EST6Z+??JX5~S z^x!*W6i!fG(>3Q{;bh{!PEbgty`7ZjIK;8KeY7US#(X5y>gwb9w5kx=`fdDN>xA(E zY5Y!}Kx4~Nkmlwap{jGwuf3oGB>5ff*{?Q0tMNtmvu_15sN6|ACS4sWqVCZybQ#Cv zcA}P4G(VI_%Eq%MvoW_7va#;NcOP6!uKsc8Bq?lT^t6AhpUphJ{QI8Wg|YCr^rtc+ z&-g_xZov!a2e_i+#991OA{B#9{sH{d?+UF_@&7)P%Xr)S==MmCt?TF?R#(C-_xksd zvJV}}?Sa5pu1U=P)-(wG=K!9M5s8gm3P1bTkI?)`v(?j@`|w`WLINqZZ!Rn>EH6LY ztUBO&d?W>l#!m@To3n?I;ioC!=f(M9+@5W$nE7~h!pp}mq`ac44$rHg{$8HO4-yj# z2_90Txy#^3SVY&PX}5PG;H)4RBbzaN|L#}jZ}QW7I?YlZ7tEWY!b;ZA@V48>|MDZh zuNDc9ItTwYM=7tYW?qpXoH~N2mFhr+{qF4T%Ud7$21WP&V0yBQ3}iSv0E{(es*yy* zE~xh7_bmmlFVA-Ar?c&>wXCA{qn|)7PiS0ScW3G@w3`li*pHSjyps~~B}6{zBi}3@ zWnwI^^(W!s-7uZ0pD%1rn3c8!8`~}n^e^m>9RKw9Mse!Y6gO>D<68v_KUtq^c$xSH zwe!0v42L#mV`C#~hNbQMGmSDUdAG^yt^>c`SOySQks4Fod5dZHJkv8;mkcs&&UNwF z96l;Hdu^tJhuX+x;=10RQg1L(wvh1p6Zz=rL!oi~p2t=CK9}%dFTt)Q;bY(4+hI*@ zrSWF;{&PS|Nl7_1#py+yf^A@Bwc>i(7#D{}O3ui*kXC$MP7z4Bv(2DUo``K=VC8i& z!uitBkT_ITNoh7WeDth{fNgRIG#)PnrKF`xw76`otUec6&rWum&SYztm|S5I$5b_R z1Sf?M&UYFyyYnRb2+fiCo%Mve9Q<9Nr>C#gD*pbxgT(tO9Sx1v>4XQ(7;g3Q3jE;j z&0M;swOUL3WwX4Rl2U<6(J-0c%+z!cKJTZS=8jMTLvwR^Ev@v73|^ByF(DzJxQg|_ zu{_nmMdXwsK0ZDL1qJB9PPe&>waWfD#De@y)CojpSxL%zf zl98?q`^XLRr)xgAKko%#qrlsbUMnA!M;hH7%iIQ%T0XjUiS4T&Z;d$~oa|T_7)YTH zkB(-ID=av2xtKBTB)abNeHP)3cKqTXc$*i$=t{4O?iiVx20~exnKN-=K0@ywKD>ls zlaY}LcI6D}!e(?DT(pfe$ppnbJh)Cj?6yrjFeD>WZ^(GDbaGO%EX&Noyeg_GCnrE3 z6%(TndZ0jZdU}dMYL43FBD+RCtn5o_nKZqk^yF@c?v2G3bZ|TlA>?f~Tqo{sdqqKr zL&o!t7ouIpg^OFoZlfj&30`!lR|)X&G~mV3kjm0R?Yhz@j~_pM`ZTu_1D$lO>W0xZG|+Q+EW_02GDJFo z{qSUGI?wP*oh7I94-aU&i;E!l)UC&hPuXs!QNFPWkyI+CgT+Jx1HtJThPaICH_X)T zBYzH$*9Kk{O9Np3jxP-)skufTjcO~I>mgE5iUeS947 zIhSy8IMJRT7D?~4w$X~BpjgQ~ua&j6IqP)ohYXt6XB9u!Vc3j=#b9{NSf_L4+h7Gx zF)@+X3>Uf$S~($OEv5tgx}`9h5@pFXZLc4(v5%a8j%G`xOQff#|JeffgDv>t#fz6O zbn)@uoa~Kh7v5!i?46BpVq>d1huyzmF^M6dIh`zSZca96x&>os{52A@y*c9ab88j7 zb4?X_d7J&eEIB#rKr_jTzuO*oP9^&;w@SOgLBlXG#h zAst6x#e3R~^@uz%tbYZ%D&x6A8A37IkuimGHRFWH$jInqkL3XAD@no+g^!F#NlNm2 zoSgqn%c#|2sB-!B<uJvzwvRn>xqADg*@liZFKv+>Y&>sk;G)LVNP8mC@SNA^4@BzGLBJ~63{BTloZnO ztid$v#}}}$xQeyC>8kzygc>mQoQW?`+js7HlU!~dn_gHGb3>2%>Yf-I&lVQ$7>q2K>Jh~r zNqHN{fbaU>u%Keu#gTE$?GvL3C_f+k)!X0I+kKSPbf>_eWbR-1f7vHX{u-MQZusXP zLH*yNrS;=~{#0@OSBTJ3rTT(``nE#;T>~u&gUsdjVrc&dIQri}tV{*mw?EDuwisg` zotQ9Xdc%reRBtHH{8ixB@?m+o12YQ_1R{rXD$*Zt-@;!)>xF@t%6Ldm$SvKk1oQD} z5)g23bUZpb;!GUbdM4Tp9~%R8_~aDx{#~fUQGvs@s`q+TP=-@OkBqg?ciCX?Vqr>eVsEEQ;b%g^b3tgh($QGK1S@|3 z?5vWCFUdFo8`X`t@sJ6@NL0g$%izP*)4N z(eKe3IYl#bvpP15nKW^3+6pca4-r_{AZN;gadX4f&U{;~sBgRP7|~m_UnRc3^;T9_ zRd3IwqthH0*Ef^(e?J$v;@F@-r{2%buz4HaF}1DqRgE?0!v5__%O#bb)pNcBe#r5{ z4svJf$xF1q6M`ATue=K*+YL0-)t`U;3o1N7Xv%~d(SPkeI#3o+*Kn}1P8u8YFvM!^ zg`Aw8Iyg8KFuaiCJz~UA4_g&tb9A<-a9eq2jY-ex3|HG~amF7is+#z&NI?9D@AB*L z9keezU|i;!B0Xbeg7Mih%dz=%50LI!L;YbhHT%l0PW(y>d`%LPl8oAC^fha(4;;@( zK1Re}Ui$rc(86GJA(tfLOv0HzgZ`i;*}~H7nhkpT9A%jE?I!PX2rODckQrhb)b-5F z>^4Wn9M>5rDO%D;&Cgt_Lqblok(_C|3-gxaH`f=(v0KlMAEmKuNUhaWTI~D`Umwt= zd;gvs_J)9<&UMr2Y*yF;C$Qas>CM<{YUD>JF346?05~~?>fwbKmp1ZZ5}*#C2!#!< z(;Dx09i>e>SugU{Uv)jU21D3!ihoRjI1VoTMHBc04Xwx2THExvqe@@)9WDb;d_pW0 zoi{$wF)P=a$glo9MasQ{DIU+W)}Wr|(e<2|sKj#j(R$%PRWoz*>ne|_7<%q}?svHl zgA?&V!Kk-ee60I6xz^L&1%f!c4usv;$4C-EUDw>y*e(QnJ}-%CBJ1_r8ZOisebBb1 zY%`5DAPj$#x04FiIH?u8XZw*bxD|HW!*C5!4i4A3OX=hFeo)RApYGT35X)My zJ@onD(&zul2U<~9JuuMS?9gu8FqquhdX%Gy-e`Y|uP2cA$N{&>X+7R&?rgQCiY$%F zFvTi4+nqCGjR(~aVUwJlO)2vIdz&8?B}}V@*bOo7lmG0?Z#}6SN92CXX^D1&iiXDJ zl;dl}E`MR+Oq)X&Cv}fS&a`YXovkjF)l9SH%$c^qDk!qTzQQ>-oMd(41-ShwBK!?* zoB3w?p~N}>)b;#$tj?zt`jzOC1#eXgDj7ph3UeF$X>MWgPGi8J{IY8Qw%1Lqzhwo3 z+ovlKsb>0v$#ZX<>Pr@!^}F|YuMqn)oO%Ka$LoyZ)~17d)_dAqB)l%~m}#a#UzHiK z%vEVSQG-g2h?MHg_jKexdUjXdkC1 zC)v_TCrQCwq)#LIO-Q&(HP!fRi(Q@I8A6X-0;6f?^`zfUdye5uy6#N~bf#J_S1-I2 znCY+%b_#0F0kAihkSl4vN-}4g!5;qG0Vz1b?;omzeZR=Y&LBIHw2&I{$bh5Pxclac=ZSliM+FiutIi>-O4kj%#TCd{w!OL_dEWf8droZA>$C z%;Z84^moftGFdVGeNs8n*A=QM3mvkFG#WRf7y3=A&ePmA1%F_2=^$Vdj$I+Lpg#7L z)zpl_M}i>4R2phE#gK{Oq^in4R8oO~p7Jy4F<+abKB0Rf`QGyJ$vf$FL>_cSQlZ#b zSu^>XAxTV@YpjbJ!=VNR-?0dge|5wZmMVz&5@FmIZL zO1?}^+FrM<0*#>&`QeJ_W9hWqyr9R+uHU*-hBA%FkwKIJA3I|NEb>tpK$Pw=1hIEm`Kyf zsgh#m;wF-I-EGt9^4vaS5B89pg0BI`3nGBxTYXsar&nCSU*Ih^EgdyA^`c#Kj=H== z?@>`9oy+dz3!KBZA8t1Jb3))nmZH%OATO~DA=;0-Bwx$UOsc&UOiUsGY(yp?)eqiT zw4M*A2dimLxSyRIg1|LM@#U?3JyNQFO%b@x8;a55iZIz8r_bX8_(8MA%0Jls1s>FU zUAy4zF1w7)^fiyZf?lZ*$F?U?zdf$GQLb7OyQ-@K|DO!7gBDpyCKokBxqlT zkB?7R8A@td{b_38@I2d~+Tz|5@FbE5jZwre9-v^SPsLD5iN zwS8s+176VTOCl{5)WXk>hK6HeruS?8uzh5_BRJ8+2@%n#k9@}`{}x+KU0tGjwAMc3 z!0xatRx+kYqtZ>-cWHB`W}?1|mW20N0=uD%IELwpe_E?DP%!@fmluGDtCHJI&sD+U zC@Ajun~+V>h2=$U8BW6KV$Nvkr|Yh+90T9*a9O}Gq4UcmvnF>gODB9-w^us{r@cDc z6^`!RFUD9F^+ukX56lYZ<&{hn>M%^FDy@z$wAh+LIz0ko3$rBWKbrqT)SaOCv=jEp$4m>F+LXkd+e=|#an^;Lj55>+ixZg=x7>-lpDf{e6E z`-{=+n~NKv_ySE+XXn$=oDiG&+Tw*TzX1_^b#{sT;I>j>T9zU5jDYzZaZ11r+Ckfe zVU~lA=u1p(@|oeWvBf9n{qYUKBpjDLSuDr6bk-}g4m~Rvv@wiZ!;WaAM!WGiTwK#d z8m^!v;Bj3ua&Z|5&!9pl-JU2O8G>64=Qm|%ccl3&W!Ue{)=||fT5fZ-Di^3Qd|+mE za&|Oj+VI2Li(_{laY>n5Wq-e(8}0lV+#BdT>rXdSRXQ|lTvoq37XadrV%!sC%1JAi z(d>aa&y)42m}2!NtG0S&pYK5mOarHus^;5fHCA(G2>g7r1ubR~ekIXvfhmgpOCtuoQ7)8VXiM}gq*^i;Rp zOs6ws_wGHPI4P6Zfh3pxDOvQX7FWNoX}>|w<6K#V*q!^7GpbUofw=wvaAhDMWh^Z% zeZSA+gv0@!WP3J`mvlvCgNOmKEtywYRmJUM6`K-UGE2qh?nN9d^U^c^_y|XrAb~4_ zV_dDh`H;2vVqWBLG z2QROs^mf_@cYn_{U|Edivw2O1wTb>g2`l2#*lv$xE$^r+Jp3JN-zyTD6criSyRN+G zQwj>H`@1HI?*3kYn_oh`fJ%XUAepykA-7<^v+-QDM2EJfp|$nhc;TEFdVt5}&S9He zO?9!o{ZaNe>YC7;_@8#uv3Vji!)a2G61YAV(7Lt^fm!Ch_yU<%Ml0sW(+qpewE z^BnI~N#!8AHqneV&hYid$T+p@ntGP;#S>fxGFWb2+0&C#7JjJJKLV;SsB`(yVj}+( zc@db=DMK?70@xpy9VK;jb%DSAoE4^WIizoy+_s{`;ShulZ-cA-zK+)ItI>En1aFjz zgwsP%Tf0dVt3*b-UViloi*Ty>)K=Ifr?{BiPGF&WcQ%jevgTq(qr#&dgxO>E_ounh z4xi!QEyry#=hJI!QEA8PGUB}V`BG35@hy24ej$Xh8qyYtAlCsk-}!V$S?TuWw9*yO zpD^ByCH^W&W}(cH(XVaM?qfpDd0!kGWZ^~#cw0d2X!3AbXxNwQ#bp4*z+whdx0@Or zoA5x0mjXd|AMy<@?tFhQ852{j^$a^$II56qYil4^*>HOFWt!efTj2JSncZ9S#}uGO zprl`HP0#cvY)khyth?@R-%Fy`sFh0Li^Gmcio9A8zpuP8T-94^PliEiJKyYiyjE0x zx9c)OIAhq#YAZ7{Ge&c2em+JdL%d%bp!8EG=RD(k_pVK4NuH=Go4vph74>5=Wkl!a zgIr4eM6b4(O2mFag4lh1Pk3Hh(_Cr9WqUkHvu3X=PsCJd(QR{fmS+y-p)4k=s(NDG zAe)hb5li+i1B%++)+4@{iw-+Kok*yxbQ1KB8LzQ5R*2R_4J|Iuvt+{yR1t^E2Vr3| zN*?qg|AJ<1Wo2WFU8B*gIJn9gkYRbR#AFVXojB{N&8v*My%swUUuK&ay*E9&4I18h zPw6=3PrADNyFwZ!YoZT*WFW6ec+UpS6)B6gE8e|3+FbCq6_=0+Uyw03ryer~x>o0v z2gkS0WqC||JUr$%Cx8=CTrE*hv>ap3=-G6tKM1gDM=`LlvMQ;nVqw;Of@BVx!Bxc{ z5JY*vB{<&=V`7lDw^Pt%pG0PfvE|t-G~g0z^c0kMtM_7vzY6WVI#|?1{fvuK=#6E( z^6-?M12bNtGsmcV7*Q}w?uT4ow@6@5% zo>z&9vmCYy;>AAzpI2_|Xu-+I=>6AL2!nLFGt_2XWwEpP&512zT>5D9wPxS?F@S&^ zHq$D@4{7}_9}NzSX9pKVH9)je>TTMQ=e5+^scn2PE)8-Y$sQZf*+&yOu=Wo^aG%=fr=TTNZTJ9Khd z3@?E}Sw+PKP)6F1LK71SyNSAO+ou1?*<<00vvo{@Ax(hqN* z>Jxc#&-C?`I1Ab?%ru%O1qV9=!&94RP$a&Bi%v{kc%2bvO_XL2y>XeEg@wi4n+X)g zCNp%qr)Mxm0}2WUD8^tGJ4V|e+to=hY#Jy?;PCA~ySvtbKYkn?9rxC1<$LF13VZk8 zN6Rf^W@a%R(2(n$-I>4kYi;ey-B2!=h_$Z+P7#>zojV+Xj|1nMP;Zg68r0`rH$|GR zmuH)J9#_R1O;X*@UvF($0MQElF@Qb;7lEn(4UXi<%IfNR6NkPge%@|UK>&As^^BI0 zhUNty*Q%WAn%rP4W2AOG2M*L~x=+29@RT)PB*PcQF;oXMa^c5P9jK)9a$8&Fxg^H4 zz}F?`Rtxa4riz0*S^(6`$Y5qmr_dLYO>5J~H;_|O%J=e@H%wYpYtFDAVgzvCDrc4p z(`>ZgpIvA(_p0`EM>{tH*8`{H8M1uUJ0N&9ChNx~72v9KyX)!!b*AviRIzlo=f&8FkB@oSlHMnFD%P8GiDE&UOwo3a0L;!cm4hze*@MIVseaYV5nI)Im)Lrj&wrUjTREa=gW5 zzBH-bfOzsGln5nSI9-|NjsND2R-==!1zB_R4X>x0^-OshFj!D6K7V+539uXs8{38B z4-VzU;bp3Omk4ngneP660$z{WLeE6ekmQ4@X7lYB%&(t*6YnKi#(7^Mj0cl_M4#=? zHCZN1;Ba?J{42eE`ucY`R@jQ!&?QKG*+O6Q~3Dps8dxe5QOu)*$&7+iI?SaqbFnbw)HY zK7MxM6zUoNR$cmEHOS7&0c2{K?t+3Tm8KZMZOToJ9 z&UAsBk7P`7PtO3@LtT_yQrJ^gCh>TUF?)0qG%rBet@mm# z5hMk!2N(=C|M;v0$Ke{do`rRil`5R(_*F1^Z0JAE~jYHW>cNG_z4+zQ%jM z%up1Av_GC5$i;mAC~+@X;aQ2!siT91-PJ(T>}*LJHq{O1^=j`*1&SC9`V640CJL_; zJUZGv*BU#5@wJben9N6N?>!3bvA{+{`@FigYCXL)T9nY)3c54H?Yx}ETw~yM0IIdi z796@e9qjANOp=wvW4yLNP~*Jux7xBZ#`nouqXcBG0`coL%GeXM9$uFxQ%Ls;Dio*w z^<{r+&X0Dj=A{~^i>>P7BG=tXK~tu)J$`a69Ksh|?mbcqONO!2yJNew@ylD#e{ z&aO5dy&NynpwlTInV3kSL50t?FWQL&5$b9wH3C8`OA;3pQt2cv$?|vwnc~7_B7Xg? z9N83hYptvGKZjtBqny7g8-xl150Dk+*-)Cd*v$tfR^YLrr0gIVFKXV}_6E@bHxXP&TcE1{^!Ldn%PR&)%`o~4p&XyWV@a1zBu z%}M=!!(^>f3KKKfL^{6S)!Foex`O31bxs~KTA?i(P^IgEroKbb`a@ z{qD!$IzYqB^z=dq)<^!#%^9&RQ}qWa z1k`7nxq5oqb}Cq7zZYUf*sb6@J%uVK+}SR7TW(K>_zzE5^iqx49<#$rSYKc0Ck|U> zCP3ile(^+*P&P~9fAH!mCG}hGjoj*gCYWck^;>fp|! zGbVbUtra{yqfR|d&bN2e(ABrSs4OBr2ZOO66j=LyrD}yh@&jbr2{(Ze(;HX8d-Kf@ zs54oZz$=>K9+SJBIq<{Hp8>zY(vhcC&^JD_J|#N4Q>TCui+ z<6mOHu~&6olrx>21Q*cJp!vRvel_>wDdh6V+(d;kr!tE1Z^chK8$6C>Ns-osKYzQz zGA2T=3B0m%Kd%J=(@Lrna3fySsnfAlCntvp2%LLC>q;;$H<{vq{Y3iZOGCl??ZOvQ z+3|&+j+N*BBaXbfl|7nn{Yhbhs;Z)jk^RfK!+2X78eA4zR=AR5l)HZ&dL=k1d>^>; z5Q|D{7o?T~?~ATQfBs(Z4-o|wjV`@%<sUGdc;QaN z$MGR4t>g93s*yZ@A;+sAn2721d1|3)YuNeFMi1~^78t0kLcx@#~z}G=6q`t zbmM{Ig_goAK@tlJlDdd4sQiyeqqGqb_V}NUB|xmLO(Z0Ak3FH^pe&yomtxtW4q$75 zUf0)YJu)hP{6{1DOu>Nh;eTpxB0J!6U=986+d2LlJ3jPPobEX~R^$iV8l}+CG7B~c z>}V5LRrhcj{=IR~ruY9qsQYhR@c&<5(Zx&Rs>1Sg;@%nFeMU5`>`K?dl?XHzG&FIL z%{#Y3(nLJ3xV~!S8Y=3lov$1cIXbckifL$gBvdCAFxGF8SD8YQ#P%R#prMg}DB%8* z@*-Fy19!s-`9`5X%9#O*jKu{XeaZJBuVTh!&`1ssj|&gy^j;j<3RzY4bG%hC-(nz+ zXvtQ_cU7#pR9s&P*!??OX6wKBMMG0o?Do7!_xYK??wq{IJC>#X5(2rFH>CXjeLhPC z4-XGu$krxFQ_ws-eMrX3yZpPYvoj<~!YhuvN}5G+6o3Mk&Dr16_0LiU2fMl&J@UQVzJFE;bBynqKsACJxw_MrLo(u%M%mHLd;pa*q4~3BM*VjoZIyxTDHqKrl zNUUe7kNam_SBaYo9e`&_{AH(yyGxOBZ)0jI6Fd9f!SGAh{rT8wy=4)ZNXlT#@ydX_ zyzW>=-Mc>DYOEKMA|oRY-hpbUxTR-rx-J4tZWi0q({MOUCP#73^Y7nbIDA6El{Cd{ z1+aE3O*zi{Yx-7J$j#9l(+_2UwF6C&N@JCaO|j3-o5{Ycytq7Z48O?m5>c3@#=L_FkIx6KMwC)L`0}LPKIR#@2=0L9PQ=PYC9wGMO6BDn;E6d8N%gTrWsoAgT<+3}^I4f{Bp}c+QkGfSKHv?t$f_a+fa^e|&L&U0Vf>;Zr?8MNH`I!~!Eyar61VHQ z=koZR=QDrhWLEpxi1y>pHAE~PpJNAzuFgov3$6hWyWuoXWYW_|+_0A}bPc}*`veNK zCY5d=7bAFn^=EKVNy#SwNhI^uTTj)unRX^SaHy)PF4P+f?d!}5OP)A66A^7=5}(ZI zTCx-JIef#8NYS-hAK;ahbrtl_$+`M1)cI%n@W?3#7l|zH6+c`psMoob@pBiOIeHgL zZKCVzHJqHJ1eYXn15YVv1F@HuMov;9Md5HYSeR@IAOEu_j0_Amvt4YcT%49>uZJoQ&!C)bLJ0gedxVK!>(uR)FX-VR;`SME zE0$BO?IR-wooCX~+cCl3C1vI1{y%=mNJ!)<&onw0-~v_-7Uu3~%I9_tj65Q0$B2c? zCyGb_1Y}#u+#AbP=rw@?GIfs7c<4hqbv{Ju4dh0isze|ln>#%X?R2yr?HL&XjN$dr z*E#K3PqCZSv{W|lBD-8m)S{4v+h_755!V16} zz>05gZ?4kW6Csnss9XJhPq=ltQx=`H8G54>v%fl}%-oAO*bt=GIz26!{rY}h67&s1 z=y+^L+Zhk6=vNgA zJWhAkDj+Wd+iAdL%nV%j#?o!+*xH4qR5=p~`Y%)wIIaWJ5Cf1{6InbvPRzX(HcK=; zUGs@Rlcf3krpj{S9Sq2l`cp?^gfi5mpS88E`?qj>9%6#MHQuN+$%$l8rB+2Ofl$8g zlA2u1K)RALYN}eOCA90?ZN#8iuh+Nnyfr?3nWKlOOi@9B8QQ9}7_!9)=XE|}ie^aR z^|YV=Mxj)fT)a2O{pr?T7xv_J37tmcx3)z&$oa(9s?b9egY!Oz50Y@36I;+_XSTsT z5KFnsh?&DygCo_OM6hezn!Dy|r+5~F0!GN`VbDJv47>(PB{x+bz%1VKTo9NvxSfvr zdU|5UFs!F5xm?%olV(;%aeM9wE}&jGQAXB5wif_NLJqtCz&9x6WAr72jB6_m=+0oG z%@<>mlE|K>s#j2|GNw?#8ll(OLR5?wa}3*BN|mupa<}GarEUZtH0`0GvRbufoY6}!1wST^JP3@Tplr_Uh;uqVk|UqiX{uMGhH7ac zmndj`hhw6ni`44aDbL(j>y5XowbQw8l~zPY5!@kxo!)nq*TYSo8mi#X14xRzS1COa zuNgFChyuw8EG;ecQD56yTS0&VefDUo%(Mp{2S}GZtw~te#>UU+f^m83n+YB5+MV{m z`-1+(#WFzkUa=w|AmFe%p9FakRJJu*2dw78LaR}4cb8F<0l1*JxVW9&ds4u}xjF5= zn-0n8oLJjv!2b+6)C-M{ArV34i=6N!>IVo!IQgwNyK;Ci6S+VO>GXwq~klx=J$x&UfW zBrZZL^*)rCo0{|HYO+ib$dm6&urkADhkg7)^Bw@isGnx1)e}y()cFn@9oG47Z8S#~ zbmcH?1VfT==m$W9_Kp)7M58pCq*TIsV^9?8ZYPuCWiP%8*sW~b^7hXK8+m4BlcPAz za=`8az{er>_@lH=S9@Pu{O%f(Q`^{Hm!12III-h*y@@ED?XB3Jc)Sq4s+t=M9vn@n z4`FhV!tec@)_n5sHg+mMsAmnXSY=hMk8}X}m*;yKa+>S=2#Z*}TDIvxtTHpXZQ_v- zm>-I5eh(x}!|uE!9%*K6)jWR)K`wkxZ%r1P@_jcl%JN47Cic1^ z{^Vr@$K`MEAae~XHFvkn@8@am&O81Z8Tp2P^jUgN2)(Wh+1 z$vp8nfTK4^;!;LV^%rd0ww&66etrXimshK0qo;R3(t@Q|F-0_8lVu{ZwRUxnt*Ii_K^tI|NjP73T8!+(fy6|KL^^b} zLc{p;vO+@6HWft^Sk38zj!(CNZqOtvA@R)f1#}}dD&QmJx>#}HAusQ29$iYjo9MrN zf%0ix?MnY6N`j6mkYJ4D+w|h=Yag#0hA#u|2|ik5Vv-H~)p-IC#g~hE5K;?b0-C47 z>DMP0l0>wU7DC-k331dXJ_1>g8)SQHIy>o~KYvyLF$%(q`&yy>4^L=-yUeZS8SHf( zsghg=l)Iv$p)=rfhFduS;Zmd}2CiT`--tt7sNAddrZmy|HN#J#taCs_7OOWLE@qUb zr@y;s@C3HvSVnabk?+8&nl`!#G8>?tNMXP`4ME)qtv>stgmVfSOEdw@9Hi%1YZ)B4 z(P18eCOF<-(5LRY0?PKO$yhV`H{4N71Vy{gXACW^=5<)19E3oa;eY7+{#;f)@FW zCHguj%xb_9dDw~Nn*ETKHX;w`T-I(O7LzugPIqUK#d6(p^(j!LMa>o|_3ToB`}~40 zbD_=`UHM$FBb0<5s7H$H%Cxah3Al3Y$*A(l!9F&PpG?rFrv`NL+^$y5Zi^@FPjY-i zyC2@4&BW~p!Xstx`!13ZOw5UFVY>S&fSr70`+NtWZ;6mWJYI|1cfm>;W*bQ*o+K=S z4!d28LgY`tVqYIPoTur1lKNj>fC|s6pv}m36<)~Ysj;Sp#_Ci5Si_x-aD%2EJ*JKj zJaPI*b5Fx7ikPBfz0y-{TXf2+>$ebWX^5j8iT>iY6xCJr?E@PR=NJ`&cP5 zI7Sy7-*SIb?apd(6zWPh9Y-q+rtO97CUgW5mqF+9=bIXyY=a$jig8oVQu6b9$mZB{B>`X4V2xv;T~1NuHO5g%I+_+Rhc^}z`^i$?{2 z`z9#p59oN1A~8~M^~%(?$BV5dOD%N6oW>?n;?r8dn2r_1l&k560-qtB#z)nyP#oYO z>p1BKS|@056lSUypx1iLalk>A8T0Z*rfg-2|3gf|i6U+4Ab>g`fNh4u#5g%QCy=WY z3$33-4RjCc>s@uq&5{d?l6eABiTU%R;_!;B=LxcJtB%FhO-&_d*awa3XPSZpieCyJJ({ zYGvig!GTz_z)*T!V03hQ5;ua&#fq`68?-3g&X*d*#LrJ@D3lc?E0lZJT654lWPb|s zcIN{=Iv{`%z>0bKrYldD1LY>r8J})Y&fRDAkjAT zGsEeWBUWDuPS;pAm?GH0HtlX@kdyE@pg$&+Hj;_8fiRbzmPV>l2LQqKg61<~9vYRs z)iGy)#3N1v0|RqB2QeRCwtNMck=t|pByL`@{jqMN*qeiyA=qpAh#8s>y*a~Xw5oK( zEE-;a1{z#RF3(V8G)rGsC;>PW#o7nSi>5AcL}72*nSf%!N|{05idYB2kjPKL9;EXY zyHNcK0a}+8l4pVKTn=WT2MGakYn`FqPx0NUSOt#M-UC-i@r6!m46yC4(a!;BxOzXY zt1j1!QGKH9sL3PQ1LuSDBAXTbZsY+7n_sf|`Q=^~B1nEH$xu^+UvzZV*Jh}UjE$Gz zQZT_MVD?;csEatIr?Utp;!PLobYUNNzJK?Vh{)RYqfnVd9(qe;KwRD?*j&Knx}|4q z47Lj+_8=R(4V|H=$P0Ndx!QNb)qoV$Z{46A2nH{HDAMg(;()+F)fGFi@gbG};WNUa8lX$!6K$6xZjB>Yx0a@%`)F&bTrb(bXz ziIt+*TAt*{l2{J?MM0JF*5zF1;-lf^$O~HKUtr5yt~#Vx`^hi4+f7|x_WkmH7brUP z6tsdQB}PQsOK=mLkt~u!o-=~yq^Y^R#?YVZzRkkIPt50#UQbr^0#Fduw)M(d~|))W=K=E%A77HumRs$+&VFa-*W)7?IhOv}eQ%`||Y5M?SVX1?zIE z=k~)(IH*LvtG2Uew?AvOV{C~BQo&PVuKWVebuiQ%meZg*`-^0NT1~;gz_(%21vqU$ zZ##FYQ2^J!IV-+j8`!Gd@rQ4r0r7Xv6DyzlJvbE_&R5U>`qM443;%5O|L@qp|If%c zeH9N$XJ=G>c}@-QC@HF82R_&i(E<-x=q-cU*^K zkFjC-t~Y+~Z_fG5=Xqu`v!gqE8B4 z*^E)M?00N@>o3%>2agV11V5=vCQ)qvZ#{MX2lx1$qW#5}V~A@T7(BGydS2|6z~%!L z`CyT;rj(f(VdHKh0}m29qJ((AGnI1dLuc>o9RHfEz1Ck;!o_R264p+Oi&B46X^2_L3nMMh!bw4tm*_jy+fv*o37-Y4OXhV~( zKgozl6ksY&DuQh-LwN`?5FfanZM|5^aM~r$dBcAn5A$f}IQqBF^)NXd{ncPP|48n} zW7J~7yLZyBUcI7|B+pEbAI#RT0rZ4Wh$wtzbyd*irQF(;9f1qKp7~)i?~x9&R2U5e$eIbdaDdOk)W*33{a$9$vA))~6s+9CmQimRhV zRn^*6x=5w-DnpQJnkweJxmWW>9?(boBNKmTd?D+-kAS-JxpLXBp`Ml6jSR?A3Asj; zyj@)8HdoA62C}egGm(h@9a4gAmmy!CbM5u&+K889Pu@#k@*tIY`Wzo$UjF&w-FtEG ztMr_EG?#|##BXBg%#{uF%mufK31`#70*C%=`~{OSo?I=>MyM?&pF(LIt2Dj z^z`+|!f`sb^`b{vSeOWI(NOD*Rr0K;?sdc96PP=NnfD=36~P7V8_jRqzT`Z^5?H>VqPD&4k0H%ptW zTVZEH!D)4eI;p5w(b4frWSiLVQ zxP|LIY6-tNW;^H}_06silyNh$8~0@`W-760Rv9^JX?1%^s@47huAL82IY_Z{$2YEp zA$NDT&3i`La%vdtYDDrAKENhR9{PDfA#gyW6?dHxF zcp>>LSC);jxujK5$G;o4Ux6Cz#f#%ZhoQke?*QrB2ES{!4}n0CZc6>^79#&~LH}9t zH@vOZ+Dzjx)&jj($MYX5o*EOgYB(-V6H`z~V2VjfP<4(E4h`L#dM~Mb8p4xFH ziAmBqzF1a*>!ZLrbqD>*Rdf2dSr)Bp6O$5YKvUgxS>);`e7rkZ$-PE%g$yw<9kgB3 zY2RuA(e{uB=8@yZhNYZse_rBQE>kETV!>vpR#Z9-fsI}8qNel~!dpTdAzYh|AfB&A z*-k=9UFCS3lYR-Wvvql^?9G}d^m^Zv8x558y#I@pUH=u2{aoF~w`q+UM`K+>Da@~a z*C!Qn(hqm;udkG0`w+K*XOFhU%K_LgfLG`dw#~lOw+lCc{N`u8*FYh^P5#(v26Ief z>?mO+>J8#cQ2y&tqHgvxSEIndyI9n+U5_ePe|~AQ)E4PA%`PoX62bysB+x6mw9RH3r-MEvVr@B4tHI*<$G0fGYyO7y` zrXg25R-}#mTzQh&Z!VS~$GXo>_#~>M*Wkv|M`r4z@}u#3W`z(1ln9RIyV-MWN3x*K z?<#^tL^Yvu60y9~Ggf8I4C(L}m#SQ7-)4P${1CNhO@5P}nOUo&`m$}n zko&|&us)@fD}`wm3vub0&E849P|518*X;o!iI(Ti?T+?W@DNYlNF{nP)4W7rs?UvI zk$r5#TT;C~L>1X5NiMXv7k$j;dg34Z1XMws87E-J5y^Ejw}Mgv`bRyZ``YR2gMo`R zAZcWjAxAHLqK(|!+403$?gulKqGc|k+qZ}I^4pu6(Ojk?oj$se^ZChBcS`YuS*I%Z z^U3}YV>RQFy?xvnLXqbpria$_6<%%boBNCG9iTU9ZOz)Jir7jIx)kB4UOg@m0Qd9y zZ2&m&5%&@ku>6RKD8)`wlXe#K%RhenC@0hyG!=BeQL6oizhL_#Wr-ydc>g&%1 z(~8p4o&Zbuz0dahGpP=K{&e%2e{BtRg*{!=h0@04kknV$jnYAOF2t4N^Tqc}8)=7? ze9(4}lOyHupJsc}=IL31Bf7kDy9iuUJ`Pviv)gj$QtCDh- znVFeA>%su?NAemPZa}?9y}sA->GPVq*&q!)J<>V9`rntSqdSks`e2#*m6+~FW zY$0&azt-KIADr4w&hHX+ME_C6`VExwMaGSNL#oBOn!o0<`8>X3Z@@p;><*D2V!Oj- zvk_UcPQ<3ZxO?I`AZ+&FWlJ(sznZb(>R4G(VWG*XR~s(n^)V+2Ov~sRhxM3Mz7q51 z*488I<27y3v#C|5z1HOp7Bc7+o?iZ#b_>4|6E>=i)d#Gs)i#GiOA1JMWgr-Sy1EzO z?R~gBfq&)`**O!jHClqI%C0OrI2jg-V{`w_^659`O^3~i_+!|oLG%L$d7sa?h2P`=8d-`kO}163#f%0z1VlvtMFuk_(>pdUdj5ReuGJU+;Lm;YQqF zuTolOnffF7E_%UiFGlMQc8}ZIn{fiZ$ScUrhTJA3n&)_|eMULSsXcy=H~MV8&#!1@ zXq?+jO#JNG`6F~#nm__Wb#0`orYzCmYSR{NeOy7_K%>R`iWB0#J9t;1Kklr=@KlzBtBmXW`XW&yB^cP`ta?~|%ZDU_Qt7)e7 zXrO&V8qaB}j3IPe5(lSRhzUOM{v2=mUc~{EU8x5i;=ae-f2GSQUm|C%zYSdoiCq%m z7-erhl3%#TOhnT56}coGTpWJAm5n5-s$ugYlnNB@$Jl z_1pdfa@L{@*p}z(TzCY2BKJ8+{X}YUFW|5BtNAVrb+cCKw`;zV-haayCNkY^U_*+t zuY*32%QcG+iq|c9BtxdQi<)Pxc%o8FFDz?l{#L0joV4N@VN*@$u|RqtXYX|pC-rM6 zWA)Q%<$_xC-WFZg6%#Dz-u>mgM`^HTfj++Avrslun&?@H zoXvI5jEoFx*sHoYM=|}1&G+}dcABv$DXOV~PF&e1s8HWi z_1j0yrl!`(l0j5pV>^#O4jy&hQ&Q^RXmPy3OSWCS%eRoNTGm<|h7*SL^Z$Cf{A+UI zhx9I=9fxw2QCU&Q6+aQ|>oz_r-UtYCqS*gJw(?(stI%pXG+l z$E(RWY;1IOX{qbB7cXDF?5gp$ynIzLM|tY)_-9sO>6b5gZI7b*w}~r%5E2q9F>CVM zY&-?|P}a%{lTuDBkNvYsF*#X9jS9V96azsIy9Qs`4Wis{RND>#$kdOA7&0)P zpP73-%WXaiz96mbu;j>3j7v<}mVq?JW&acXET)4TLd~_cIUT1CY-`LJ*>clLK)ATo z*G886rUL)gt-gTcB|7N{n@#RJ$q}bnScVpS7c{p zL_9Rx=|#>rN=KbB3dXxSkMfn|GQGT~u_J?^ zr}!oowds(-b~P7ziM1i7RNS6FpBd=7Z*MlfHGCuldgm*9u-MFo%kv5gnIAtE_id2y zmVjt3j0w~eE9IZL(b3sY%iilsxXCIgsOOvX)`|vTQL||tX`CGIjPS5S=eEG68Ij`M z0wxWyjt=+;*x#kd`ATgz5ha| z*PMc5euTz+z&`oIz`*$U&JBpIEiK}33a#Ni%q*>#)bA$0>35u}%WlewiGBP1_5mX! zmwgiY;R^>lglfvwp1Dqkn!1|}6)bo38oL9PeQvcIg&HWfl_T*fGTa8w*y1~WCC2?y zxm7upl_!u#dIUzDYrcY=dsblNXDNtWW_ogc1nr8M70ZsNrFnAPp9U6X-;Zpg^B5T1 zW7N*$=Z}@E;IFDgDl;DoRtXIg*ThW(1_gDG6?5&1sL3cdy?t10KFXnYa{J6m^s``P znrca3hHe2!$$o26({g6(<4#YD-W(~n?r7|Hhft=~N~rrMX|eQ^BFNZHCr@IdqmN?v z+`p;XahfjCFku&{*{^|>kS~?o;pX&WfxD8tOQpqTOFnJQ9TMB@{ZzCK!!M-`&c0bC z1%=bnnE8j0K@4h;0sBQWpWLt5SO{LffnX(HgLrt!lBqr8PEcHqqUAJe? z?(6$->;y(tRg}n)QQ+*PuWBk~6DC?N_7#ZkyPc9NX1&=yY8#fO74RFS5^~K5?8&XmdD5_xaEGLta3POdY13tsGvYd zJ@coY30zg=CxNr%rcxPowEpdwKx6jL9|Yv;Cz;(OH@u>vAm2_)`{GXQCt{pFmY^FJx*`B2C@}x^kHoVbz`RBjBX%exWgTv6d=?&QUB6%8n z8;aMV-2Cv2nyXLISTPsRxOj=%Y-PbxTeN@F>pabx{qngq9c!3GV%Oom?07;hF(sTh zMr`i4StJr^K3Mte#f!t0!*hO;ImqA{8C%r2%-=q|GgTB76SH~nwK0x5almA6Mhs1T zO@r-et5KRi?fjs}QnLmFUW~X8tSC`qV`QBYKC0LF{MX$S@9RaEV(_L`P+{o_Q_IA_ z&p+7B&r_6>!@;~xbZdKPoT~+iG)~Lh7EMk_;5S*gi+K6+rLsr^*^3wT1EubSbv-T~*(`QGN^hJ?sv{ckj~CwZj@7j{#>NSD}!) z1{@Opw+n&K(E3mQpYAp`HxvZpYPQElhpQ?zCJ<-`Y7XMBxdY(KI=a=kzICHPyu|jB z{Wuu-X4$Bfm@YR+lDQ2ZG%9X}&JiHSDqZb?vi_BzK{A|U5*5DffmcLiw5>kB#kdhF zO2zMDGJ!D<3kg)qN(zepWPIiM`CA9g>>h!zn9HB+50~gS`bCytQ4=%-urM+4Su8B* zA5Yn)rpG^W8(Hx74ghX2@hwwvqoJ>I`a~=?vmxY9Yzk|9dO%{Goz3hcAr5Lupo`xm z=WWQ`U}d*H_(`qA8jXYPv!LA{SS(`Q(ahEUe;7sw?5pmRZ%JX zI^AedIuiKv3sNapuEvnK_5ASH@B3^TM_l$za3B7ORc2;%_nD@P^{ReZQHX<8%y7gm zKo%VA?1a-|5&S@RqY^Nx1JY2tX6bXxE*T|zwX&#^u&`NuJv~1XA=}-I*+lTYDlpd8 zn%-OEyF(TGGTR&aFB!ubv(pWJbZ8FC%0N}_*gW;t{)^Mc@#RcROxOWmhKlBMov0F< z*P(V6zJ`nHUw`Tflo(0@yY7q-hc{$~^AdPv7P?@({l(T9@|90RT_(XLhgF$5IbWR#$46x0w-}g+P&QBSG4S6g+j`jSaoq!=J9K|eD6ZiDeH;j|g4I~;lk04U~hiUwu+4ujqn&RJ;$=q?%R*&3N zD62}7CL*<`(VxU|a-_NQZEVs(+QfTeX!n&A7n_Wwp|297`pURyC|jH^l88G;eIU=& z`km~if3!0(i;CqGYLLrx=uL%-8@wJt%fyDRawLx(;=XYD`IfhXxd;SUQ9tqqdD(9U z@?2bsm8MY!aKM9{W-faSVC{DKlMnTm$u)ir)(1>tvjsrs4dh41njGb=xz!5eesfM^ z-wl$rfLQO>*?z^v>gL0ce}W-~%8$sKgWsD8&Q^n@V%eR&!Wt7jN-YBD&wVL*qU+NmskdaC`4dQyOK%X#e?Ku}L!_;>bCrvgrKA)cZg>R73tttm ztO>&-KC3$&>!kkVFbm1JRP+;aVhU0cB8#`@tV>6E{!+s`-=83wy6dswrvG?Frx5=8 z?aJV;{u>(ui(fwAdQ3_f+?pVqD|HXSWo2s@N7xODZVg{8X%-=;#Hwe&vF ze_e|QcfOa_`^dBU%#I2FulyJT06$2TB6KJOS3s@Jq)XM18nL{d2_R_ zncdCpFMt2oi2UMW6sq&dIT(nzYj&Gu>*^Yg$<#p2MD0N?;KoQz{WYUj=dpCOAaN`4 zz()M1PalQ-qn}VfDOT_~kB0s#Jd6pSmlpL>ih6sHm)t_cI6By_cI)=}8lLl8(0ib_ z^5g(b8yjY78cr71r|$a3#@J^?+<$gg49Rbkw@g|Poj(@hqt~BVz~baw0e`eXWi@=n zErMW7YA>&7;G}rgP4JqVX}#WJEU_iO+1P`OEH_#{{qq?wA+`VPxA1<&J{2AUTp2Pm zGO?&3W(k6RDG)9db(NNe!{pdsKz?t1e%jDfmxO|VK4~+YJ*Ac2+ zzb10_*E30btw<0G`1pUFws?Z|RqXVLheICJEWN+S)}UA~|1A1k#Og^D3bhk2tTU}q zFQ=LD`_nZULf>***NtCQ<>g*@TiuQ3kZ@7QPu|-jqo81t`Jk?rnU?fCwMXuC&+FGc z5oV<5^&au#@7!6@7mXXmwfFAf;PA-}gBTrZL*o%ea=xwpaeZk#1Q>q3Fjtfl7NDmO z!|Sf9_!bbLDTxz_cZ=jOJ@fmf2*~%<1>G{LC@od?Tt6G_*i$R{^Xb~!)gubMjwmjzgFwY> zj+(cf=o=D5`^3EfeW5v!BTHE!HBsnDS03 z%=B5*YchEewb!bQ{8vf+8iwaWWXM2^Ny)3V;zL|5;8!tT>1H`1Gf6JSzL{clk7=PY{zRofk{Sy=@19gh{{VH@3?_be-0Ki(?}`0BUq zbcSg9MP?L*XEi(I$Krlc4G6YArN+%YI||-~O@F78g|*+pqENT;xlQdX28-^kj~>pX zi)uCs643iba=Yhk=p~1wiv<*$4i|Q#IJnv4#dF?N{60r+6d(|_M+1Y9opZHb{pqb*mu}XuZh6y1$VP?*OeyC zMyV)4iwy%Z(^XgJlF0A~9X&nMp~}^r=KJzIy+a>_MblT|fv$~LZ0q;GfM$^0`iV7^ zT}qo+5XJJ>xVfQ&0+ylUZs+%DXkIzoK*=!x@)Osuu@534C}5m-&iVM9@7QaW*oEX- z?*9kiFX+;gXa`m4nKkk%MRc(%`SJWb@rEcZo{q4eT!&Ef5;7^Rv@qg4Fh{KW1qvXE|WhhlZyzBtNKcv~{C8 z@n$>FIltShh}a61LRNT;{sra49K{yZHxRewRQh6dboTd-o1h^8I@&d;=pF4953`-%#EZ@4XC+ z4Db+J*w@o^8OM*$BaNgs^wCuS&Y@S|?B(|h7tsEDJT0BWTP_+G^Pey{u>YNJ|DR;- zhg}6Ol9GONH!pDaxUbFPg|@DzH>*stz;qgmnwB>C*)wXA+;LQPAEeII!dI^w&VvFC z0Ad6q)N-cU+OGR!LiesVIAeXQQeTIdi|NQB3#m|XF_*ZvciH;5vy)@k_wU{VFRHS# znP0tfx`hD$A9yQjlG3R}g@fssn1*w6KYf$!huXf+`K>UauWz}knhGNWqu%_CgJabL z?Y!qJ-=-Ei8&QS&!qMnW(*>L6$E=zvxT=H$Pd7LyA|)YVL`t;rcYHv3xs${5q^FWF zO(|}ob7G>?X*e%0&!|^i&LLFj?RyCsnJ)`@BsM7Xw{AK8hZ57iSSIynT?E$ z^z;(BLu$v$$_R=uyg{K^>#7@8O3U^7%_ek`5rq?KA9_LoZ3#S zw&U&xcP-)qDPimCXm5X)*Ai)P(aH(Bm(HvyCpQgXA{iMI4$ki907?P`?A=$deSUn$ ziakZrFo>18Rq~2B;QSv+mG^3MCCOG#DqV;&D~m&WGD7s8J^KyWJ$pgEmbPYZ1;=

nB)U80oSizPoWcll}Ow71a37(HRIQ8*Tu70i+6O(j4-cyIBrqnQ3m6HmxrDX)jj&W`l z76v*x-(gj`6Q}aoulJk61fD>=*K*s7nwMY8^bR zC&zFm&i(nV2o74>dI%tg*Zziv|Fb&E)#Dw1Z~xyaP#M2p|CrP_3){XyN#D`IrnZ(= zke^?Ok9Ez|)GfqIfNKP2W?dbRK?WJB&LlGc>#2@jTUAXBOr$))Rx0)>OQqi9@D_3L zJj>0KULZ1+%$K$rFl(pzcGR`cf zjtuzXn_p1i8WtWB5*-{8t*x!S%P9E4N#xygox-QH`(^8(1#PYIh^DIWlFUBD->2NoIU%xUmY4!C+bh|U!8tq(T5f=+bNltFod_%$IV|I4i=SmmeXuV-1FaMhj6=4}A zZFCQ(`V}X zo1Rd;R9?13H@Tl)|4&qLcPv3Q7e?m%hzws^ESk3h+IlsxGJuyrWw) zOuwIrg(VRTe1xxoAId&(rk<-rbV!Sch-hjCsJ_DOWF~cDAVa@GA&fI~*I60yrSieE z`OBpX<7P~1kx;hu3iE#=VcGuxQ~U2ea&8PrKh*K3UFGOn`2F0y#6CoU?6tJCG&N{ZKzuBq-L zou<3k*6b=I;aMx>W7K{uK;2hTROAwv-VOVkZR`ezLVrT0ebBQfAk~yT%YyHmXoQwm zomL3m_YYhx`{@m_0=4RC_gEcx{ z|Fghh)&p zbO1B0>W)@b;8WAk()M-;1-9uCAm&c_8~ZzI0@Tf67*$~4!aP;eq{YE}{Mz&IAFxJ6 zjyDN#jm+jx`H#0|mvxyHwJUP=D>>vH0n%D022;G9ob>cfIP*32lwULwN5dD8?QYOP zk&Cgh1c2HAqVS*Z)2{ZZDu&L*wq!H+qEIlb!eVi&C`TO!8uNEOV4zf0T--)odcppg zBdW2z*vuHJR%jgkrhey2vEo@G+sesF& zg2D?-$J4oNDC9l?3;RxAUnrz*GAxBg$>G7l5~lMr)#i{1Ra#xSa)pGqsRjKiNQ(0Jx_s268a1u9Mkw@ zVJ4H4)9RuPukC4d+Rswo`df+1P8|}$A&ZZJFpw;l+TnR}?u+^AV%2b9f7L$}87)6L zIs%#kIO)~wY_dOI5(%+i?xO{Z!}9VuaHWHUC-HU1`(JN`&Y$u|v(htV#>L5$6fG<$ z-~1dL_yd)Y9I>%CSXAUKE^fmsK+Dlz#!nwg!ycGVLA8}8fhG(|t73U}frWQ-)s5$MGz7dG?bV48>m+| zcKF`lRN~)VPRq5BadWzaMz>IpzCA3)@BQ=QOF_FQUzY~ z=t7QgEr1d@D9@y%iq%S3HM`xOy^BAdPW1?EkLJAzfCdmVaf&)MN=65_iPKFup>?yi z5+19H4$0Xs)Ytp_`sPlh3``vPD5B%8Qu@lNszSUU%|CB!&3)k`9b7B)AjXNFk&_cW zqSdsp2-%`6AE{-dzV3*BiynQJE}v-JPC2Qmo5#lde+Ro^Y`-qm|J^F1U4 zMhJ}-`*9Ur@{meIHZ>`${%{vNzTq{pqSC{O>cs*t^T@sPmKD-sh=4@`4l?fQqjnyF z0Dut$QvwAX{>wOkMhK0d)8 zKLTRS&d#~m-~XY+CxYBa2J7ob9?(#fAKQPc2oM_FM=i# zV*IkUKA-WN4dNw2>$QQwliZPN>Gi<^Jv_v{`-wn$mB56}M9?D62g(iu<%6(7Xg~fx zK?2#3)04}<%b#DTIshKaKQR?V&W+N?d$w_u*}>r*TUebfVcNZBL_z+N(o>Zv>WYf&toKwxl?5en!Burc3^%IeJ`Emw^90{Wrj}cfP z*49d_^>uZ0i2MAa%di}w# zuJ~uvBNf&#HcqE8$F+^@wUc-h5c0Bka@xqeZb!YrzyhvXQ=98}ny^JE?)NrA z-#~(^YGmXD<_XYH*45Ej%I<`>D}DNN;-AY2e=bW=3h97I%e)A>C!gF`HHv4#ntr~Y z7R8nETpeDf6f9-ChdNhywQyKK@9TTEZ54FWX*GayjEaN^kC?(~azqSpoCF(HbJ3I( zfn0S#Dk?IfiDgc^)|VfCIS|*RYtu`UQcWxq!e=*fM_$o3r*Z{MB5n8kg7KRlWf@&JO2_z+oR_ot&PfZ)kloFf6+%Lk9NDM9B=) z?3Xb#UryPh#YSIP_~_@Cb|Zn`A+Vl02sjeaKqgSA_WUH?u$H+^b5ZL|dF0ufX;AXI zm?+vwji!KV{FT$*6Zgs2PDjQ|Tm^jGxiH>otkf2i6;|*zbLVJ~3mUnIG^AFQm}|Uy zc!%3;>`YmO2fW1q*T<#eS%XyiDXvnq^6rsiNRtt;z>gKgbNAWMuPs95akTv`qQ>FB63~-!a zh9w{=Sk#m;W8Ar#StXvpRD!Ax%*nyeqsGE;2-OUP^H_>?cYTG{a30&a6Oi?~x|~W! z^RS7_`9+Xm7%-zzqYX(gqRQ+ybJ*#~jvg*~6~+I_J;trr)UDqhvC9gYkQm7>i@<9BmF-c<}zY;@Z0vJ47kTnfRnWpCP^RLMCu zi1Y!zzEfaS*l75vR=16f;_Gkp&)bSLFJGFWJ7cVanr|4wni}M2@neAJ$OB2%g zLD;N&2pE2*bQzr69gT}vjk~9DBQ^6)X3dQiS)$H+ymfu9WBUM0umBz!1Y-1B+H2+b zUslddav?`OAOvT+sfUI{w=pp@Gn@2?MAoQQ*zv+t!~~8Xv6^w|>67Je#j2dKv9Z;R zi;N7E5_thXiqFy6=0N4+0fcE?JV zgn}AwS{<*nBaMQ>|9bB=K?0L*HYn1vvu)KXG&Ew~4U`e&c6JEKD3wHi6~kRhEDJXr z<{AR>Y61t?S9DBTz>G}byE!`uqS^kUsiwLLgt@c+6gVa(S!n?R&UZvb|7O)Jf9Wgr zNf==}RGe4%Fi}ud^@r`szyh-On`{?gNjoc>i?*_(e&w4Tmjk@Yk5X`I!2Z2F#fyTF zu)uj;(*qCs#X@{zbm1gMjv*f_E5Ar`Hn(Ct6|O4_%}tM|{_qk)h{x9eX@19}kw1q* z+v32;;f<^5DeGy>9WMoMYC5SqO5nyd5%?1K{+Rp3mjbzQrm*(0a@Sm-^W`R1!2&tE z{22_hu&CWB_@|~u)=`_au)9Du9{$iR%hz{h)cO2N*CJREt4AG2^Vsfy2*4u{2wXmS zM<-2r!LAgmFo3}Fw1MS9gjHZ|1=ot7rl>3r8MqxxGHYlM0Zq`SYkTw_4h~MPc9oKk zfrnIBcmrHG!9PI2c@Et^tW1Y%#4z~sM8(bR*@wUH{dHhD8OHwp%S}pN-k&w>>)z&i zdVK>}a!R>x9_eoVjd%&#mHi>h+JAEa{MC;k{SfMJP1OdklapodWMEoB#?kI@>NK4q z#HLX#z6$f*DB0awfaKojM?p(ZPfS5jVZDC_Vb#0K&`NyiyPG2&K5D&s`xG+jZKLfdNBd>NRsWaWJZ{{+rkH_eF?tSw>IY=&x3X&C2bs4@E1g z^z@>Tje&2a$yzDK#IPqCoS#tJ@3?GF>c<7$ZXoo67eSBad9@|-f@;r-abQP{o>_Wu z6SOB?pgrNVzm2gm`YV{@qJaN@$CCN)D*At>p#D#|Hvh{}s_B7Y2*rNVnc5EWgrtXV zf8||kO=j8Ulgf44cDmH~oN9+I7X;>~-#_57$Z-zWmL87`vd^`~JWK3~$dIJ2-q_i^ zX+9)&u;oDGdY~jIiGd~pRZFBw#e!YH$hf=a7VeGWyyBI2BUNShkDQVwL=g}Xp?w&U z!~n!UAYW=69gUVcMj~gq#3F6QwAzLEu!8uyG|!o6EFzL7_->3}8Jt5)3`nyRrtTNX zHfS+0KKK!_=j-R(I|9s3iziWZhN5D!-$W9VQ&PCaj5Sr{B>$AGR|raOoFYPTF*aPG zZjg~v$W|L0O^fs_V+d}B3EzOwI1$D^4PkolV5hif(IBql?ZYu$JxDWwvRi7+VoBi zg7fAX@$s7mX_?Yd5BEF+a-&UiOV%I93T~U2V91xH8%oOs$1t|EKtBIZ2ZIAu3L7E( z@D&|98=DaSy^q8V-x&yQQV2>>Y&D&VjaT0Uu)=6hIm;>|B0T*o90A(SQBhHGaeMx6Pq(p)@lL1Y*~1ar*6eYDUHqAjiOvx0Vau^7e-AA+#3{ zo$-HcfBEtN43GB8VXILHZ;cum(eJ2iQD*MyDE&o)IzGjBOYjWHj6eLoVBvuxej*7a z&7aR#JLPpyss>z37=(l&-T_p!M7X~KUW$ofxhvkiNBg2aM!@gWCt*k0RhSr4sQN;* zacg~Puy&xmeGfPlPv2U&xm70$#}29P9YaHg8oc;kD=O}7xKQGgB=;2i0RjqD08~a$ zFd}O2yPTe=85-HGjWD45$9(*L0*ZA{(r*m+Ao*xGe4BN6hlcALssLfcwD6cu;|hMSQ{KteWg!KLW|JG)PW-^_Oo$E%4k7^IlJ zbxEQM3Pt_a=HMcP9Lo5aHn3b~kIe~a%Z)2mgTP-n;|bG$=(NY72yMvCUFZTY>%8rh zQlb}|F~?qC*`|vhTMu}edWl~3pmZr(S`1h8rR#?tXbjQl7+~PQ)W%x}%||Mw=*3SV zr(_N^5`4}1TZw)}v(xk)U`8v7$-u<44f;*(em-70f4r%)0|w9l0<+^5At9d=3M}mb zf60n6v9c0>QQtT}#^%V4dEM~yyoA4L+D*Wyem>mZ*hsKDJUR*s{r>Qd?-s18t?Or; z5+_R(5g4R?bE~Vh70SZ{7y~P+AhLu5r1>;%ZYF2EQecwsX>Dcx&>&PaamasvniEEH zr@sQ`s=Ybc2ZsfiW~KS`-8+E4?mlo>2>c*l=II%}?-K?+J&(Y;IvRx(Z$RsR<(Y7) zz2#cE+9{I;V9SFi9`%d?-u{by+0aA7jBEp}pM+cQ`%|`}q9WV*kq)7sW~~WPo8?QV zXQ*KYbKgIW3hORzo|7E%HEV{qwkWO|ATG8oA>eYoqU8YL3f-E5vIEVz23>G^QWl5S z0Nz-+J}@vOss~q8A=d{xN+4|lv#YtOMMg|aRkZoMy1NVVtp$f~1`IS_Pe-G@ zX=%XW^-(%3Xx0)I&h!bJ^1;UlZU&S1rk0k;kQ&GBK2)LTXhS;DV|I4OipK?KrhZf* zny;HD3>OU5Bl!EVP(0l#C*_&!7;IpUCepiy`u)&@NBz3T8rF<5I)`0-L ziHkS8gpm-CaU0D%%s2rjL=Xw??(*Fr;eSZYFxbKN)Pe7$dS<|BS!PjI+d9e1i*6C) zxl1ulG~JT*s(}qJwMXq?$!Lm`n|~c;?e^CP`jt6e)j|ouou#CF`kcVJ#1SIqZL@@pJUNCS58q;QAH&=GgG1$hF(BU2t?ZJ;lXfz9(Vo%R!aaC z69^q^jgzWkU;?Wn4yRdMZUG)a!^`<{G8oDQ!U!kCZ2nR&JN&IcGlpP0`j4AU~%R4SiBuKJXEcPW?(C+4pk8!Qu6W%2JOPt~J%Z6AYY z5a78WHrF%i4#tCax~!bKHY%GbxEa-DIGkF-V*91s2?>nyCHqb}1%*{qnYN|nSBNKH zU9$pt->`B&ew+bR6WE4XRMTMV05Vx03WbMY6m$cj%of}u(jln9S@~hDU4Aw9* zBBHL2E{&Q`l)=p$kC%+z>5+mA+I)I)@*9x37MAVdguobUaj0IVjvb(4sBWU8j~9#j zbsvXE!?512#ID@ucmk*nBZKxUpf4ohhsMTzth(_*}5`%K6uiH6ec zp|NtP3jP_^jaxWC29M=3?FQr|k`M1a6=;HAN!m)Xku4J$83FLD_1X&XBI=|RFKE19 z)}OD2Rz1kaz(4MI-~OJ5%R%7$JkWt9AxQRB>)7wyCV#Dlw6j}-<@Y@@@^~wGePdGiIltmV415Hkzk7S_ zpL?VkbS)&gnepq=!t_VTM%wtvFB+Onofr{#|96JV-8_eCA$eA{H*bQXqida)SkATI zyFWMy7sz+%GBh%n0K&)LGWJSx!%%zNpm@9hY{fQ;+ZY_UKy3bCui`?KGs}&Gi<@gX zEs~n7FC#5LAhV9-JNSC=@mAM(?baZ%Bgax&`8pGR)5P*wM*1-#*h?bgFXiPILN*VUNBbR8 zFGU(6`Rvb0*q!Pi5X0ub2_7m3@2*_=3{7y-C!J7cg81VeEhh`$>SdoUy@t`WVzve7{9PW9imxT0?bi z(wTom0zMiZ#KX@&NrBD})h*Js1%q>ta8UO~EX`6NhVa+x$#E!l2lqq1Sec$7HJvVK z>G%F@Z$&Btr2)((HDTdt%T-k-=B>XoT=C)YAXivF7SAv?!ld^0jvbTfx#$Lv9d}>o zIS+2Zle!azbe)?_ZqeBiBi*GWdNd|+Zzj!YTnQ2&Ma71t{{Cv9mIE82n2XDH zc*cEMRG3ZRqF@mF36~*S5M0ckwPF3#A=CnSDVN#`H zejJ}wX+E9!8UN{T(%TNpqE&wAYkf~Mk*$o;hHGArz7*;@2d4kO`1B&hWoYnqF&=t3 zKq>``K9NLDd*+Qq0C7N8Jk{M@Sy>56gg6p(aC)B-KOTQM%;NfWALXq4rKO0uo7dcI zKqKYtEso8pKuBBV%WWRPNB%w+hsh3XjIb8$7i5s{YTQnXfBwW{5Ol%L$TSAvqnmvU zW%cC9iQ=EnUSKZ_EZK@44X(#r1!b52N^2apU&r)=X4Bxv2MiYlbhw|8NKelQ{r(+Y zo8d4ru_(Y)__YVXV7Ne?l0mtz3;@)|Dx+?mj;>Aw-}U#o*Z(;(sh?NT!3GNmCmO6{ zCq(~Gqz)HXol7r3Yql8V*+x-cGSwLF2X#XVC}xM(aLsT@_PQe+K>GFSI`SfUfk(J{m)HG5Imya}DT<6CpilPa1s( zM}F}y*!vD!9Sh%T)3*Ti1uuyl4Z*M|JSdL8fj|IgZpZs;E`$W63;QlZC^6fLm(pL= zDhr$67C`ZG#3!nHDDSiL+F7#D^ge+EPErgM30n&Rl!_TksDrQ>A0I(Y8bC(+lj zA~l7D?|MLHV>Z4g3a7Fz5wIvn?{nw!d9Tx$C=l*Y89$PJh~Zivg}0X15(^xBxcp{> zYDCI~aC4-`6>MR&T3dmd=296;SLeAtULhy@EPm|3GpYzmQ*ae&X!J52E;sCA+jhiu z11f(sujLa~UXI7i6Ti;XUlE2l&68uG*=J9;fvnGGx$+iNR$H3=4g&6Zjy*@fkCUtT zuPs>^ii{g}7#=;c^a(vtRaF$h4Cm9I`&?NG2D&wF+j9Ya%Rv0ErKD>yea_jJvQ7fI2=t$qRH7s2aw-YTW-XonIE38vD;d=;aY8 z70r9bZ{HUvg0Q7~JEK}o4$_Wvj-cHJh0i++u# z2mU<7BKZ@^ZQh>)sIueSWN(o~7)ehG5QH`g9-)BJ+tSz{3$4}ufT1*rx{3cJ#1r1} zQ5Z|`R87>=+iP9Sv&;oaL#pb-rM{ximitb^8T(mnQI9wU1uc7*Y*CX9`+gj#-t;5r z7*p}v)Ht92MNI?YDWhDqDGKAH>0b*fpM&0`PQ-IV+{kDEC1PnQ7C?z6vV&0$_nO&r z%x_^~sdmZwm2>7a3=Ez_O=zX~0|utv)rAXsxovvI&!1rHsueHOK_7isT6bw5#y zv}J2qz*zkT4mj5|W)ct*_Kc>H6}j$>oDWs(-{o6A@}Hj1-`DBN|2;$HJ>(I0MMRwD z?mY(2c=nqJA1&iXwIUk-=eHB(G6y{F+$FyJbuu5B%+gekt(uu|s{qj`g!(#_Oe-tj z5bjO=H%@a&C^Ju_v_@_-m9td)Hvjm1Go52BdriT7j;9jy56)%j z>hn*2RaF5u1XM0*yqvw<>9FhMI^95(ty(qbSyQC5**Ja_D)E1{cdcJd9%(!--NUX` z_}~!^70B5`&jC?^9w><@iGpHlRlFdu+%E;IA*4#fC0D9NYZ2Hg0a_5G2pDJ*LwLnd z!bKYB21B^tA_+kWmyipDB!uuLJM4%33--hAIewZs^Uj=kpLw5oX5Qa3&u@^MBT?>V ziB>j4wUi@Y(tm%vXTtN#iWDvyjeaQ!wqWP~NY&y?uXuq-lb~21#@!OK&i{ebtJk?u zIAV1`H871B2-c`=eN*z97-qz;S8=^49JJWgnJjK6U|Ovmd4N|wbhG7ZuNQnJdQF9*U*#J9;Ow9D89pDtbTj+Qw`!Q zNyQa!#)^T&kE~dw)xh+DtVG^bs0?z+%UZU zi9=B+&I<34MrXZxu`jOct46~Q(B5Hb8%>Gu)_q^f+JHSh4K(8bDJDCVV|QGxPwfle zP9Lno9-v*mxpL6caaIm4n`-ANGiBTQ%FJc{a#?l#7i??gfb7@x_>wgrhKcySmd;6jiA zPbW_g-TKk_YL3LMjmU|;36I>HFeT(F%$|ckn;rF>DXqsD7c!x)>ea@wZ!B$gWUs){ zwou?)6=3<@F~KlwH>eY6ZF3I`eYX~T>F{c?o0ifqS7)7kk&$;p){#Zq;@M_~EV`w} zqas~fwwy+moJUbeW>gnMlkqupRT`m_((~$*_@C&%sd&v%@m)8BE#MWb!aRNY>k1l( zE6X#scd-gyFR$_Y#x^%MCt4V=F1B^4HGE#y%Gig4Si;jrm;4&8 zU3W6E$Gpgj>&)1k9Fhj1HZT;SJ)5*}D1mG2V`y_NQc~t`ss9{N-F3&(dtNoR;di7P z09>t~;t1?W6HiA?!7ovB6^z0QfVmDrv5%X>69qcaX^;JSuYarMOO?j5Vwfoc{=&z{ zuC0AKY3+|f9-rG2MZdLNLSG*(IlMJ@dqB>k2v?{+e_SoZ1QJE1l^7mrrj>11t^BOl zL|gpPkE;IU)PdSOCaivyJ z-(+bQBdH{@N`k?uiw*(CUJYNH6>5s|X5_%|wly9;#I}uLsTsq4Nb6S$2GV`BTCsHL zxb?f~)S0Bd2g}mxJmu+1`{JGiRSKyHdXq9RTPv)kzJdZUbQjJ`H_s$oabR*#g^;2uH% z$qW7J83mDai*MnX&Mz-*Hh~Y~X+DFe95)nVN*0teiUgZ#^n@ z(D)M{F&w);@G2J-x$g>#@Ud9mJ*!*aRe@lsSvw_T6DyWSb;Tn4q(8a(L%d;+?(c(2 zjy8Z)(XhS?9Wj0biazW*Nz5-vzI_+1d3jwJA_&s`La+YloVPbJKNKS8)N=@AE;Ar? zYvZ7s+r$Zfm(qa+kn>MJ=j&7`F{qa~tC<_8zK%8nb{p3wY=&GW3ru@LKf`1~&8n%g zi85t_GR#ppocSc^d1K2Wztas`(Y!DYs--pfopwwL!r^LSqP(>D?GHjF32M<#Hy#Lf z*v8g3OoVX3H6N2pC+D8Gq}b>GRW~-#SQ&fl=h$O7LkcT_uz|k#Y+MDAxb-X^laE(L zhGUMdU_HLl*!iwLUd_Uv7hCDIJxzAwR*?pD3l4>z@wDx>^GnV)8q^UH zh)4PRfdlRzVLLk`FrEm+bzm?MPcH%I>ifd?1M*%O{@*4-_s0-k_2{kiBAC(LU$%n$ z?Ck7YX?7d~i|$MXh=F~Y*BX{)c({hgC`Fv{m4f-ro#21hDcSwR!%jG8Cfei&9yqKX zL^1l?_ahKr`x!56<6~g9 zB}6Q!a5hacm&6hXX4kM)WM`M16^g3Q zLNNyp?{PXZelOII)r^z+O9Du{5lJmxPK5v}I3gB9Bmv=?9Bmv5=(GbQiaY?{3+e=X zCNu8EIi$mQE1MlwfGr-U=z<2O@ z-rx7F^}TDo|Gvlq9M0VLxldeYUwiM10C`z4>_;yi-MV!PTS8n|@z$-oC%10h8Nj#$ zUeV+sP6OX=e^L~K-YV*QxpC{(t6LJnACz4Zw`ZKS@g+ze?ja~62kz&-PW$>98%w|V zdzyan?hL~HZ;|t{lhev}{fXQ09ikHb+wOMycQ-`-41{lAv^TvN!oUlJ&z(fnPWANl z^+_Keb{acH2L@b1Q3F2mLsJA0_HvnsY0weyAs;^>ugxiG#wPw?GqDakP}~Rgbdb;e zt;nUca1QRj7Cf-Kj-1rl61Ee}%q{(w%>Lrb5yXv3;i-Z$84XzfuJS%04KtPUE~>5+ zokBS~AT5iNAh~v#5Zx*Fi36riL8+1 zXCGXOS>pe@lw<(9BQg5f=a`p%Yn`&AX1kS{s5@S+Y+mLq7ylYi1$JTmvDlDLj%yQA zdi2#bdHDyaWZ(YwOf7gYDup{)+y9zHhScq!Om`&LQ>nogNIUH>J=mPgbJL8gjmPJ2 z-?aD~{+c`AuS0l2aE?w>Lh1Nfrv!R?lSk40-*0~{i;K=g_Ux1i;%BtYyM{kEX?Tv- z_Ds<+73<3&`*#Q0C*gy9GAjugLQ*pAVL#R~kquEAFR#tI`r$lj1mOq4PcL6phcFld=+231!H;%mE7k;hOR}GaO zp?mvDQ4!^bouF6ek?9t8c@ue=IE>AOx3bBna#}d0UWD+AwmMROd`N zSLYFD;$*zGi3g<(dvAKD(eS=$NZ`3BMromOKIK%MYY+y6QIp+fye~p#x^Z{je-Go+ zr*iwHwjA~6xvVCkQIgXo21*_ti(l`53Y2f4ELE?w%)G|^;FnD1Jz3HD5=YGUTcAii zKXr960cH(ZL3Z(YPT0c(PRivXSCNA}m3*SI`&7`@px&N}rgavI%8Cl*x(6BY1sTh) z^@=Q+#iEKpr$3{7bk38-t(OyGir0}^aH~~uqL>rAu64Y97$3ax z8pmV-_p8M-DbB7GF1xVc;NU`=%xt+7#N_1hHbO>EPfnsH()EBSEe0~=%i9iKcPbJiiu7u`*}eopEeSnepJ{9?&!1s&7FJeMxe?B- zfmv5qR+y0eeawSZ#&`kGz=nooW2&`YEn_=7I|GBO(|sc&iX}4sT9rKGbVKqy-%aAF zq}r3skwPOA6G$BG$%~&htTMx8{LMtLGuV8(m>i{`DpgF;v_tfA`~Hg5aukEw(&FOL zDVj66Fb-FTQRikCt^61<iX3}14_PffY!^8rKP6cOVs^1!BlhFEE;5n>Mrt;Sa*^&;$@9(GnE?j1 zB9iAMwQ!E_AtAHn?slrGPC-O)e-~F*ODn5xRaVs2ctyowJQD~0(}=#L#turN3I84j zew~kd^9o;HeRE~NGq#?oVdK}4pKn!~2CX0wGBUToePT8xmzX^J;f%S+|siA zd%`6*RAn$TlU4`WzQ5a;9Uc)rGxK6|b6@V-os)${f>GxSv98O4FZdD_8WS$BZSc51 z0s$fX)lEiG><~!b^xjKZnE=vKrI>l=6X@LdM~BDmd$c^%t6Iy|Jw4XA&eg*TYZH%8 zgoL)r97szvII?(-KXq!dQ3y|x&Lg4BxCFBdK!9@C0!{7}l4Wh2?&59o0^LC!py zGO|TtC+Q^q2oA=7il4&o{sf=27dbRINcMIQH}~RU#yS0RpAJ+!hDiWKIWe)d^CJ>+ zK`)rIGq3kmI2^8Vu-d!q6#_c#d2yUZOaJ=yYfkDAi8m#<&mTNECn6#QHxaa+z=L+o z)?ehSR&u=^P>a+H+$1K^3!TdeYd<@PfeJNK4zK9mZM+_n%j<->w;>P#cugxEXX=DH znt?+rUN5;3+-~P?vP`lv@tm@fva1JYmK!&KgI3O1$lm1Bk}LhHlA9VcT zt#NS*AqpX(Z(sYQ@S)SwGfiZCk88<^ju_*M^Ob6ydWW<7%iJ5YJ-Are-@YB7@Tsb* zqV|!!OqRsBSS&WzTfB4T0>@974I1{JFhO1~iruwZd_x+`=Shh{GH zLz!n(bhIc2qQrpBy=ytcIAG4f*bW=wGXMsKKm;Sz@vO#TV?)~Qi)RN4h3e_-Bdhg9uHJuxsy* zx#NVKC~RHg<{n)isx0TZYP<_hB^dN5^)LmJXdJ0G(und-uEtwBW0&y`3USKOm1#w* zsuDRlIfar5W?2knNKlw!5=55<*u!9wZZ&`Yyl18c17K)qEsT+?Zy25!{u_K||w@ zhoZRjS57J~E1PR@7sCh$4hjl3@-Lb*F)?9tJOynS7!nWz;}_g#x(Yns;;MA#>pWKY zomP9`1qB6kO4KNqx=blGf{ANI&&>4nh^VO1bTcld7%7a@RzobT?mJjvQm*8Z8zY^( zZ};d$6m)fyyFN+MZ?}pnD4Xe}FltqS8_`S~Fb2oB3P*S7ObPB+IUTG6ZRz*1v0EbGxVDTIj$!pqP-R)shGV0xP5tx_fl zr}eAK{4jri^)~_^_v8nTNUpEk1MwD-3!)en10@aMWry{SmF_PwO!tL7gG`0cfu^R- ze%N3r1`F+uQpGDl^&^}XKQ?Ck7xUD^m!sHiO|kBiA8Rwxv?ZoYN6IXd$< zl?RexG2B+DSt%|d>xy?=VmX@Ud471V;fMn!d8SZ{7&@FSn`F=yPN<;lb#c6tr<{vg z={8d;f25dyf(O;Da}mMF)v2XUP|TKPgmwh2!R07e^UY0-tq)fY*1*+V-Kq@A=_F%D zYE-10ovUA;#D?05;TuKJgr}99K*b!zo|#;}lU&tf(}6b(*gCgh5xp*wi#L`&vI*QoGVp##FRzo10CUPjxUd z;ZF9VdF^lM!IBcGbM5+7cX+zG+MQrZ)hklc)neosrX07;*3HH-|DA?%XMg zbj(DB6{KoDqD$$$2U>n+Rf{}AbvN=~IC)$h!fmF;OmxD+Gu_z0TQMO@*)n824*I#u z*f&@03V)I2QL5gv5IJjiCoi!t*DqZOyL~86A?_@c{a+sVD4%u^9`s3v*lb)Tp-Lu+ zr@6A|B1=Xq?hu4S?((&2>jjPKkc48n6MlD`@2!T%IXOA&7D{I9R+BYe^`iXlhy2dS zuf}oV?(Rq1&R5eS0mJYv{+XRAXSd_^sb5}8*GF5|i!1qP4m5Y6FJiXAsJiibGD}7i z&SA}CwaV8C->$Zs+n6nsYkm;?@bR9pi;pzH~{wOfIrJwW(1 zj{m`eP)n?WSC^Ih;%TEon1ZIJW?Wnxh`^e1dUj(4f}ezT>R`H!Zfv&G!ky`>eL5}+ zXb~tzN`Gibh=9Z1`kI`c)An>4THF12J2dde;=$R*#>T}7sif?A18nqZE}z|8{qFU} zd{2+Gjg1W>VO;vN>EN->(?DA(kVCTCUV}LsdL};OAr%+cKp37h5;#Z z+)^&GmcoF0GWg)3t~^hx?FM~*$~GiLCMqkakdo#K=+Pyg3(?}VYjoT?_6b;u?JF%UwVn8t9R7elm;PoP(BlOBU0j@; zVIB#IiM+@@Ssa554>^brB{lUEXipCVYd}^Op@#=gnQLsl>X>Se775ALG;4$+K@#%f zL>c-$%F$LK4*o?nW0|RHKJ;ROX5B;f!D)5|F<9~NkQ+MUBP@iKdx`?J_lKp?5gdiDynvenX(p;c|m zX5WbVfBP#gdPV?o2*Wa@_QoaS(?3s9GCqlqSN$Fw92EG&aF&{y8X)DA?gckz>waW# zP_W6dsF)ZV38A!%aggD&=g+BVXvDm`lQ8iKsracxMF0?^qocF8hi8Wb1Vl}1)vERe z5z94t9ULQu*VKx&8$EfAn`>k$t;VcJYg)Is#KulS^_MSdje?=2t1=X87))T*AUyEQszT8%eGqpvOeUr#ln^Vc7-kq(d@frCDgXJkuaC5IL`bvdYzV<;K?Nj?$ zt2ffo(6o2v`Y8p!2+#g$srg04WQ^?cieJROcfSdXxo+>@7y1T$h{CKRSG>if1>yt$yZC%~JMMNm^IIXAU=QqDG=6+*`nN(^d zrd#XA&&`b(&*m*>$A%cATkJu;6e!E((K0aqi{$z9=QX)@_*-q~OG!oLyoXxY+Q-JmMpy$%X>3gO!w0Um3z@3w;-<$3;Qf_0Q<4_hPsl>2 zI%^rG@bu`R&omz6Zo?tgL{wqgN59NeRhUD>gw2MziVAcn?1+ z$SW@&2Cr1xO%c9yIM{}JM~(l39$n;!k9vq_{Jhc3?y=Kf&0Xo(Az(+Z1Vo6{IPY58 z>h8DWehChCyuRJIGu0?171X}X4?BF{E<4-SCJIgM=tNj_4vB!cXc$siR>tRqmIsko zR22NG#8hT2v-^sS#p8R=bMNG$WUHiJtubC+UJwUV3N=kG+c+k9CQ&cmxVtn|2fwJj zE;o%zPyZGj9i1+86r3=&e2gXX1X`?F?=h0I;H0vh*5EljI=VBEdbvPx(c8-)IYxOM zgaKab9L8?gc}yCOk!hQKvFYm z77hZ4WD>N>qAS0~7?B1}Fe@vo_I8?#%uKo>!T)k6Hw4PcP9`mZ8d0+nOQ~K)lau86 zGtJpBk(9rBMSLEBuvp4=^O$M4bo=x!aeh7_UF_@$^h%?=Yidf$_YTS+nVZ9LayeD# zAyKxfVd*Ntt=z1u=lU|XwTEm=c5Vh1TWvZ`;k z@~@l;^F++SjXGgC0@dH$Prf?LY9c|D4KX@vXdrcTbUfakJvl#00Bi_2p|&;!Wd}8|s+wU8MC$8CW{SN-2U&(moZN}#lQrHc{;oM$*-7(Ko%=}Lg z7fy7DLC>3;-J&&s+rPW~)E1n0b{@W8w_I+Q*>vn7bQ*c+B|Z7?8nhN?qFZzuhbfqf zclTa)k_IN*FxWqS@E>?B89bs*icn$kMn+E`9U!OB5hnr5{kOLt$e2rB{d=5S?|Uiz zCgQ$$IK8`GyGNFLVIEh_hv?)w6GBhlXV3J0`o}H)Ur(q)x=vD3zPKSLA7g-WgPhDV>uA)78-F`sq(!~L`t+kr7~ z7TzQ~;;_f_R4L}&MKQ(ZRs4)+44-?_%l=*Em#{*3{?_u0NdmKVjP@HE=X#G+dG$b* z8-#!B^HZ_ROqv)+(tl0gC%vOz{x=Gr^)UZeBJu72oNN3~lfAB*n+!$1s8zT!l@gS#Y`1m`KUd6f_WH-oz zY;hLGBF#}*iR7V;V3ZO*EsZjqa=EGQCLj7q0a!Xb6gehU{>0RfArCdRu7aQ9)_0>(QNC=xUI@czV{C6^U%Hyd98}mVXxvXLtYi z0GKN=KCi!{Qnv%jH^|A$*&0>`&c-qEFf9gg?N#f3F5-DnF?zb&gm4;q-ugV0er}V* z&CRXX;E_t()z=r&enFKUbcZCL@7w!V^ZPE7lau$8X}P)KP~S&XYWM?uA{Q;*oj|CG zFsAz6(AbmVTM^Dz5sT5VYAlQuY_+)_yOehS7A>=Re1jVhE%L|p>Rcp-*&#m73nRHo zQ~92?oHm*jq0cocEk_k|iP6pw{jX(_S1cD|!c~EB z7LX*=o8e#aRbHcC#Uw!#$q*40Wzwvmq@&AKD<<Jne4$}2l@_zqDJ z1##I%(OTDX;ZJiEGoT#MN~{SydJNaC|hjn3zAE zQWmoYs`~w&5i;>iDNB}V>&1uXE?4N*sQhua6C@qU?}yqr73KNcio?D#Pl8&34re`+ zrLr?wIRbMMK9lDxix9~zW({((-b{E?#3VKqnU9pbee1I%D=X`2zt-|#hv#Gk9gHnD zHnu03-{=e#6-30STa6?aVLS4LE)?mwhmdh!Z475WBBXcNopnU}*!%h2XMQz2o1Z>+ zTAIXr(S<~v=#{UgIO;Ws5;SOR+Jnw%aoG*Blb&&)P%EE*Py7aG^YQ`*56W}qU_F{= zBBA!4mcSNKw{yCWKi42KHK7iM+I>0aiMDOPb!P6ekb)Yw$<+eAp&ER$MPi9YE}1s! z>hi+blfVAz(mRHqlAXOk*K-``NRrgLbsy=tHEiU{ppm#HLVFwuv~!F#K>x|7I1dmv)U- zE)1knWDKb=m+<}Et}n||XX$6?%PL;IJc8Eqt-pKT~0$RLAQS z%W2c)hi!G2>0vVWr>YFO!Xn&EwD<4Ez%o~QRY}P}`fFU`l;q^uzND$xo%Qu~>@BV& zL2uKwKAZ53#ze)f`tS%s8fA#u2j7tvUY$as z-~cizD9nY2FH1w;d2MHumq#qOJO-N!se5 zx=k2+4KmVi53wDc@^rGD>g|naGP1I|qLt9NY7*`uuLqBJc(p36x7O!}vVzAuBLr*3 z6;?)FxD^OQo@^Zbbp*+>qeGBV0cEAg83?(gTu#tSH>50w<>hhX)$Uxq*$@x~k)uUM zGBGv$H76n8PsK4@QOg$j(Kh$*d?{Djv6*rbCqnHnW!E^8SkKl~%I>%U3drRQHM-as zGgh=RS*MZj?!3$93MeLOnMB3fXsd7MWcjLR<<&IVSy>?`3F`S-R!gG2c5^koL>-U0 zAKt&ug)$e#*tcA(_c)X6OkD>AWE|VtNTJePp}~?#x9alpGA*5at15A$NY57$Y{EQRXWWHA8EkwDT%kRWa%fQXJ_;?=MZ68ezodhl`$E)f4RdNK5WsyqR zeIvzdy4A9mR6#MAzEEgKShE=Kg_99mPfGPiR7P&uL(?3Jt{AP3vBIe&%aNxT_j;!G zz3`{p9VtPEO&RihXKhit9qg5_XF+9UWwH59MKHjWH?YLTRRfi;wV34A=Lb@FUO0HPAu2B-H+=?d7TLJ_VoHdrg9@NL`{?!d?RMo zEwih(o^4y%A1l@y{%xPGQNEfi;OQr!HmfsLy<1XJqF(6+_Z+1!H|vjjBVTmqAoL~6 zd2d2>P|Tb2t>TSpJO7?Iez_{VN{`=xleM-xej-@J?#_q0jb1VUPlE}3N_6~QVkPL~ z%?eULksnczEaF2|3$#~}kV`?4uv{D6D`4E9N2u1g@2aY*9`80DrEu;P51Yw)T_^Ln zjZ9F8;g036frRObLM)^=@yx8=t%%E3cXxf~Vs!@#0aI+uhP_J^3vI5ln?uxV6%#VV z2zc)sA7n9N5xuE#IOBsD9~ZzuVgw8a827#kczWf_r#20we#3;6oAzBoPM^GRqM@KL zIxSI9Y^|~w)~g@qi>edy=jy*y6nlE9-xj!(93 zZs(T+cwgSXwOm%`Y)qq<=<4YB?S3+wRLeCyJbZC<*_`pU6PyL$Xi8)=y8=w*&Nlrp zyXS`DAIodPvP)`7rRGP5FszNCR_D$|6E3@H6mkMWLjz>kSEiHe9STO_5sEmZvml-c zxQ(a-Uy6QeqM*#JTV9xd|8jv{HC1KP+ZWf_)%EC6%?FJAL+kX+sM<#wfamP=Rrm@nA(7?7sAC+rdyxfY^rqT5r4hYn5&8lM$KYMqd| zO4-Mj*HJ!ryCI~y^&UrPSKH5}UYDZ8#A|?HP#_phGdZxEOT&HnjvWZUqgc!YIIR#L z?OLZ9@1qxpdOpTNes?G39QhAATa;Z#;9%|4HF@@&Br_wU#EwC&N(T;mKCA=m0f>4l zAPMSVZ3E?ptbDD6Hk)a{fF>=1q4f}wl zVt2p`=wQ;ut^jgueNa0DW|E_$Z0Y3RwljVpT{SZ{*8csG<+P21+Oy@mLBujPq`Rx9 z2Ys@f`;(U|miL@SCjKqhs}d13IqJWrRr51J#JYLT(cSZLg`vjmr4R0^W=gd{c8tj=v*b5vx{Ol6g{uS}d6Ce*g!`&%X>nOD+n>QcJGbKiR|t@cYMi#7 zl94@e6SO`_COz63r||jllG|`Ni}7H!UqOiK)-6fEM3MvRfegq_XW&vuhnR=BWJP+_ zU+@eyQ@@H)I8*OS&W{2Bix16HE-kOFR#Us*LmxlHez`Gh_RxRxz9|lF=r4=Og0#48 zCVc#ekzIHMd-&6c&Cv^PAB`Ll<=F<$akWL{?D^4F=@)(V^}A5TDNtMbWDm+IlMM zM%+2TCFOLPnZyR?)`|Htas#1y>`&_G2_l(R>etS4vs@`6=8Myf;h;5U3`m@Yh9tcn zG-en)2k~`%B>XLH;ADdl)~BIGrKw7<1#~NrY%(%3CX~xc%PO7*2=_Se&$v5TPnWok zZNsriI8V3wEjSV_X_NY(QZS|<7McDEeA3Pl$9TB+!d8&kIH`eT`ek;wR zO}Mu@LvA=Fj=xfFIQEoaX(`;*&0)97w6})ENGyfdIaTYVh>FWFHD}&-rsj=C*&7f! zP%H19ajPYx=z+@#;#1F|+rXXT zO0uaP*#nf=fq}Pte9$Ob07*aM;i9D_-T8QyQhz_KBx5HGG{Z-db z^o1JCBQlK^+)yw(pM6iwqvz$1@87@Ix<;BrYvZt$jglk)0%d zE978$yZaFmQKQn$VkGLggF1k>!Wh65D)q)QNyRW;ov&;ilk%3Am$~v)@;?#hSGWTE z1&yXAdiiW$;ph(F^KEAzadH&Ca(}&YpWec8Un@g2aMQxtT6!2n zRQ7`?7L=87Y91v~5Q1-EVIevi?y6aB!Qr@h`2Bk*koUI*OSEjGeoscyD)ps|1Jeum z2Ld%nYAfDx-4z@3;Uqot_5i{uyICLl=TBb1-%`sZzsD%8s4ym*SFCsAfQk#Zi1G9D zgTTHjw)3M-%eBG#x(Mog=T;<(l~q26)n$5mx>l9-UusSVt9N#@FO!Kv&cVgY37oSvq`EQW1$xU}5L_;fwhm4feHA~!3F%U=z)k}C z;dG^yTz@iu$V&lD^c{`O0F=nv!FW|=eFzUedi${Nwd=iAqr`yjMktJLsj!8dvYXdm?RsGQ^9`qjhD!}E@ZN1Un* z-%*`Fq|$aKkCJ`>=m*^~cdKj>NUp0jex17yv43_|d0n=FC5U?ETUG`DS z62r;-p2&rTgBlk=K-#4t4gSwgSY$#c%jbDBScS5hao(Q;>JC#pYG@v2ss z#c_A`2n|12Y6~G3Ff`xMtW0inDfOJ{!wXC2F|?l%?|-><@4mjTc_~ zOEC8$(`YSG%ehfDHe$hKVad^C&pu|FG7=-KEzdp@R*p|j^3c+rg49wYE)Ga`^n1MO zm`DAsDnPC0QXh;q-m~s-$@FPeWf4ubr`Rh2vC~>nGxoybT_Qjy)XL zxyhuYB=-~KXrYzdcnvm_Ze4{_l3;|bfdPvvss)GCqsp4@5EkvttZV+Ocz0noLxa#PF^HrIMgIa-2_QGLvy3lzO*Uep{&crP~qJ!$8W7SbB8GWT94!TCpy$XO%&H zr!BruRoNCPH1B&~UOnS=@&MBlt7X~K+dE!#;C;0XFP5tYTm?3{fU?3Dkm7evOt=7w zCx-dq8?CCZmyk$!LJ;B#@G0R`-M07U68YV;8W#8az%G=&{*)p}tD9@3kx%)!L>13D6-8mkiH5ygbLaCU@0XW)^-j(<9X4H(E_0q*s=QP`ociuU*mH zlK^OSvcWUx1=jMuOMkKi^E?%?T8hzfM#MQ!K86_!Y;c8MUEjZdtuA*XxO=Rm(AZVt%XF-0n+^k2aOd^~29F z4-&>pOVn>96TJ|qVE18w|B#bH?ybVEXl@mFc)7|BXDwY)5Wi$sSn zhtsd^0M=FuyYjN9%YxG}sY+p1>lw|XttX1NJ}aUYE@}Arbr=~LKVg-Z6-fmI1xewp ze!uti@k6mQshJo}yU3LI_uLBeRH+!I0`Cz^n=onZGw#l`ZDR%5JoQ*QBC{c23&Uw$ z`Q*~}k`%v4_5K?%ptFJS`l39Ym&ueN7 zOPlty!jb>gM;a*!{;J=IYaL%@o zfYfv6hJhr+VP}dF(>*#m%E`*9=*c9Ec_ez4iy4V8@|!Z_e~fUkrC@RZ@oe!=B?1na z7s6*ZFWicM@E>E{=dAyTJ^#BVergkU)6yHGr2(Y?KHdvhZFTu}g=QQ66UEG5^i2Hw z;eTVd`yUDHe>(F2bL9Qs-Xv%d*b_y`dSAG*W8pL?j5(eaH=Er&@2en5DLJMso=7XF zsC*U@pgfcWkRfG^3=J_LoSd8|$T_Ck$tWr~ztXu`%YWaYHb!_#HOSs;{ryG*?DkHo z5eOQ(9{Q&a!rmHX(?&CCSp$o)iAkmP*}oQ~0{<${G-6AYZavb^YnI9%VasU#uecZ&>1d4j|}IoT#o2NM&s)@cXsbaW1=5@6%1tW*I! z$wTbT-RMakCsGeS^=r(OnYmqT7i10=YgLN%>B)mube3}xq;;wfj|%Avqzb`7t8i&b;cI|p}huY zeZBip(2pPC^auTd*}%3km6) z^{fS5d0i{TUA4-rE3h$EIPQN!p1~@e461)J_F=eT1zLbZitHTjPicJR{wOdF_=Y*a z0ImW<2u0C7T`HfRWVTO$uTqRN>xuQ;`vZY?fG1e%Ny=RQA^8qvijIUXAqcTB$Lk7}k8@}QxiAtt7Qb~O8kHh2YR zShy{GZ3LG^WJnm@RN6F1N0Q^=(Gso;B^}*+_ zlQ)(K`71)_H+ph%c3V|4;Sfhv)#&PKyHo#<(2k#wZ>9h!1M&&sh@3vdT%y79g$ksQ z!`4Jw0}0~>=Zac(J?Yb)$cP)2Z1`fT z+Ro=^!{zxKO?EvswHUncxVRgQ!AL9=A4;!M26y6@my;|0Gf7QNS!FrO$-xnfhnm{G z)+*6w`V)hWeLPN#1H_4R@y(mp!;E@DL9wAWSH5{x4nA_We!RNh&Ib>eaYwHh zY8l{P z5CMF3X1#`%&dvb5r-Vn0ujT{kEBU<_UgIy07i^RncfPKw0#A!Y)R(W6?KD_p0`_@0 z4cL0|S8K|q7gzNc*5|EQ#Bq3Ye+LalHwmS`_e;}hR9UkO6KMcLfFY-7$jiQa#nQgS zOqy@KntlVz*wOZAy7?%z&j`?B^cVQ3Tg=>};^b1|nX*I%wLspVdPDU$?i%?%LgzNwwLSqw zI&dNxbBczNQ6)4w@9J7zX^3IKL7^s_(B)!lcTdqmvtP+yDyxHNY*2IQ^Rp|8fsKxs zdG$fOkRJ{Z&BEj0+DKqq01-+C1O9Qr@C2!oDH%~{qdyz-<*(2KiJ3(Sg^^!>?*cYH z3(6(FH6+5r2NZFZ^1tlGt;0*5K63NlBO`EE0n*QK7f zv+Foo%F@tu0d&>io#cbZLFi zNcu5N05x2WKKT1-hjpFjK{UdAtS-*_4B!ax5l*)qoErSXwPV$8I-^vXbEVQm%mXZD z$^<9zm@>DCn^2cK}KxYhR_f^=<^))xo z{2ly4S{mIV%N0Y#)#dE$93f+T@nxsz&LI0GD8mD6Xj@y07qI7^S560Th0EpG%w$D{ zg&9~{P8KFq-@kL4t(l&W@9P<32T-W}l&}fqX!7O%&Fe3NK$4YiU_dwH3?UcHrPPAK z%9Oo;#}OK3XJSHE8-rbpu5-dg-$qn1Xu6KKz|9~)Vn!23BpjIjj z1Q@_e$tJ%8Ops^iE*lIK?K-ayfSTM0kXi#z=vxMg``S4A$4-oG4oTrikePv^HrY#s zhGqT2r`xdT9!2gv@|>3>(&epr;eckioUwjIt}$@Z)9X-&YR@V?1#S#AGh--r&Nlz z*VhL?p<{^wg$eG)bZg8R=d))nz5%FWZFqEbzPf@}s@siG?tOEPU{`g?+iO6pLYDWJ z-a7FUQT6mPusY8Hkpq+}s~n*LZ=jMlA+Zx25MYv@Drv)@%6@Uq5zZ}tyj@yqpGTl* zOvn(=@~M4k3E$d=L1HH=v56^Pmwz0b&6tqRPCCHG)_C!+cPtnI4;9b{qZxHdKMtbP zROmQ4i+~$Gw`G0(Syhu{h)$I?75<`HzN+KccAQK+JL}uG@?JHoy$L`t2MUG`*x8g% zLD>Mm+hHu;;_6rl%w#H!^?KyfyRD*{Ksy z;%TS^J@#nd&ObUxm$X+M50k3@Zy3rI?Al$9xG0$bFt$_nn=63N)7%HR+k&Uy44}?5 z60um-BK|VZO7H6r2qA&G>k`m zt+AU5Edg@6(jRe*LMg+nEiLKG4J_z96aL1rnGuqXW`44L56}QuGf{DyOH0G0IgGDb zx2X_8z?pJuJ|_K&w$Z2^CyE|{2L*L;=%euh;Ieia2WK{oY%JjN8h|?@QPBBIZ+}4= z{u45mSvy5HH=YQlrvX>G70V0FVm)^_ii#ZL4rP<-;>4mGT=rpO1@Im=lQ&!4SGwV;}UOU?2vfLrD(5Z1UCBpRt_#F%; z!r~m7`mr;7#UK^dhGHu(8!Mi2S!iknr6~SB(+0zzU@+Ap?OtnM-flf}Jwm(Lx+LyT zI9d_lnCy(m67>;#TU~U1D#gWmB~J&yj4|dJ5nLmGa%{#ozx0kVPS!qXc%bLWvxY;^=Wb` zx{~n}i0Dn6(JlB`ChaCri^13ys^qVB#}pGd_BGx2-km57@~nl8!a7$DqMU!F2{2nT zp9Lp$py%~Ltk05R`1I)@uKY?7ehr54R#(i^0MsXPH;%SlP#J>IIX+f#+Mb}VByiLJ zLnzo75PtXiF;mRN_>T<=F`O95Mh`muCZEo-vonvY8pmr;)SeLwxUD27Yuw4+2YT>x_)>JP#t@otvr(=Z&ExR|1w#3&6ZU5VQxL@egxeMw$my{Qsft zO~AQq-*sVc^@>V~Qkka)Wk}{Bq!gJ7WhO(0j3Gm&3Y8?3%%K6vl*p8!%w;AaGG-?8 zJni%G{?}UjTi@F2+j}3!_dDL>JybvZp69vm>pHLVJg@5p`O886b4GcG%{+w1G!Ls2~Kx-2ds(OF#FQIXKJNZyA9zhl294a+yvj=Wp0 zb;2Pj)Q51hDl3l>KQQO!3EYg1j@9m$?z`Xp zDj^K_mpb?HetV!2`22bQP`5N$LraV2+JK91wES}(>BA!dUE4b`RfY1y&8EEC7w%PW z2!u>Rdv?vKOWNSH`|{&MT7x)hvcy!Pv7p)by4m-?5&ohXSI@5GuC%kUMak~YQeI- zXKiI+to^V&&0538f{GZJXp%dmB^n-w_yqXS;L(lvsT?CZvpCh~?R_pH9w|FXGs$FS zUJoXi!72V3zKhDr3FIlzWm8fJvq^)|c@$9}l281NpA^e-GGuc?QLMS`0&!nR{yVbn ze}m8a|NSj`K>@J1uvAi#*?Y4FT}rvK*`T|q+-K(^&c&#&9#hwHLW^8Y>$ctA-SUd^ zJt|uF@0W{;=IK~B6m2%Hk=)rAB#Tb;@Q`SXL7?z|>~~4}@~hSFnfn;H3d6&%@2%Z5 z`jZ^LsPOn}?blQMoDQ-2LoQ3<;aeCl>}2_;RalOXFQeBk_t2qx#f%z5$0XU#Ub}WF zSf5z8xT)`F=N|L%@$GO`d--}bDhj#+CPWaon}kFr_Vw!%`%DhZzm>kQ#2Q4I-M;zx zgLgA3%OB&MjR?`;`TuM*{%>f_tA(2%z9uLzuzO;HhmuUKIxQhV=+=lD`l6^()y-Ay zgE#*C5_|LtA1W^Ec`F)pAuM(kxK<3#K(`mMAE?Iqe4Bk08dc1x>lZOyqgmTB2(Sz( zW-YB~{rKo3;yQx;(P(-aVhj{R%?uMa34Q;=7i4696}V=9UywbL9C0!^p{(lpbgdgqn-lrUx&@y>~&4GGg)EDi>H zd;1>U;*pUNuodP81}|T~#;BoNW39Z){SPYouA7)NilYBfoN)q+g3A60u_*Kl(Ny{? z-({vn-!qO{=y!iV{_MW7?mpGxb7o6Te)*I9{QTr(%eC=xg$VxP-ZDQhr$51v!1(6v z1dlYR*{{&}+cQi9o;`b3RI~yA&QK~OQcQiq1#BZF#XNu_+D2$n$1#y1R zRv3Q`>RCR7Q{-mvxwRknyu7w<*`lMXTT)z{=P=yc*Js~X?tl69`E-rsp&>J^qeqUM z*V98+ZjYk)1zhhP9)BrjVYkKiK|u{zO6?ylz&?uKzBz-%56ISI`^G>nYz7Zg^wzt~ z%wUehckdoOAzrD8i3U6T{QTfLy46$cLqie&e6SzZ<3k4zj^Tl0<6zv505323?%kWC zW4yh+!y+Q?dwajvNCv41I*DG`_H#wWgH5W;q&f`aHmIdZcheu^;ZfGMNY-i1vT9dQ zP{5<(U}Nh;597xA8botU(P=C|)i1d=OU+UWqXtqgo&s$BtX#V=#S6dKL0civn-W8T zmS>tC?qvhd`rfpT5ygDakNkoH_#(JCImuX1F~a`Rf}ZLRAC~`onn3A{;tf6XPoALt zMD6lr^Ij2R7rU8bLq>&#E&g)qx|!P{<41EvUA?`nt-xbVl#{c%tSs*EZE?r3u*G&; zAPRj+p=YhHF9cu@UMQ-|$<1vj1`yh|eS4E8W0(5^0~dw}A;Ji;lmh8s%uvn#I}fi$ zht`>76l}gQ1LM`}*Jsb3t$4x^865mQ*M1O0IJLB>!_cH>`uc=?bU=VI<|5s`o#*dg z^WLBYL~m*6PI*Pe7s5ARp{%ijA4X7IJgTj#n&(yaonXvxvH4P2`LK(d_bmJHJPdwrt%B#Q}qkbfw7{gz)n8+`t+yE-nV@x^w4Fd<+}z!si41^)JuD z{D~+ARS+!;=@V!= zEaC4YmAtXOzK-Atjr~v?M>jF>Fs-dN2zT1-BU8(n0?ShJmHC3TJqobo(-n@ynGqlhza&Go%z3L|&9vJ~y zx`NGu{co}Z?y3a{5um#ped&Uek}M(xt#<9&1!tQUcQhU|Xf2PSdX^w*QGv3?MipjC zs4AM;#EXwF>RVM+Utb?cJ1l25R@Qjs7>~*BGraw*&|*_{a;0Y`;JkwUCn7vt&aKe@ zZ#lSuPqyQ;3}L^m(STKwxc)5|ber?-+jhA+@jCe2wYA*XFqoTFR_5ce9O?W|jC+!t z%xUt(D=lpT%k;$YL3t}A;a)JCX3 zPUo+h!{w@9h?y2u9UbCgVk-+>o-N60X)J(U zz<#jymZRhP%0v;ih4k68quH?u2~MaU`YHm{uU=&owv}4ET@)GF{z}I0#*G^x+`1R# zBmQ-byP@w(S0Z4*BAf8~^$fT~Nl8gIw%2=V-`-Vj_%<_*IGLmKr>EqB=gN4tpw-V^ z2Txvugf{y$>)Ep=m~YNXOJg4(jt!2E%0JVUktxG;pKaT=RmVuil=Of?UmT3_q*3KA z{`%D%1|N7uBmh#dZvi+)fB$Bm;t--?7ceS+j5dV2NFikznZv@uIbYhvb~8zg_4V<2 zuA@QQ>(=NGj5T@QCSX`fh7ZUXAY@k0tkqa*PmsZjc5f3CYjE!f9CF^@Fr)4A<;!rl zz{X+GX+Fh#?~01n;^pnX2TX49-k4p!31WorfWGqzU1{GG?na(v+bLh|x5>$f$SYyI zMnfrW_@N~FX$UE(?hE7NO+MfGYkqz{CZ!84T#L)gjY)OEuU@h03a(|8O%6vJzZn_I z+<1F7!o^&rhnzi3VVVQc33?|2KX~PapXtQUb31;Ux^HkoU0=To*&bM5!8am;*8NDR z!?XL_DP?2ejYZVFNi;5Z+ss!Gq|6=Vgtu>VOll&2JbAUBxypv)@4x@1VmiUbMic=i z6q^XJkfkR7=@H@=kYtJ)|D(q@l4@?E*E^YK{sH~WR)K`zPeLL~_kZw~`)pr$l~1W? zGZTa}WC_Nn#!I@7tF@S^?%1?Ed#tvafyjTST-G*-fzNUCEpI43{4*oR+>7%cbo-OJ zYV%_T3ReEp=lkEitX|m4(2Hz;RB_#{mKASFQjMt@T%h0%O2& zx<_)Al94erIax@E*<-dl}dgNdNKeQtkU)!vF5$ib$vA#;1l~+%wg!H+u|ff>GXslgagQ%-?;HEF7CR40T_?n zU(X}ga$*=B+xgM=P0iQ$XM&GJeSO=P!_w5r^q_ zA3b*LAxE1225$H6-MjGvpB+(DxpawuY{)ODI`C9cr~&Pcj*J{pj3_lsM|{Djsh1Ds z1{ixd;ny|?U;|7dDkgUH@ZpBhPpp8T>4@a0W*!EcUcW9PEQ|p=x1F6cEn5DxrW+xO zzkK-;ZB?1Y_x|3AafQh#DTohle>!qOws9OkUK_^SXY>GFcyY0@-9`ah3`j{yaiROj zwsF$P>+9<~t7D89Im?#2%wl4ZORdC0%6vpqH;w%0G&^(|fkNMN?Ri!IqcK3S*_j!P zE`>omIQAxY=qKAA^pcIWWx)SB>>gO$&njr$p`oKgPeUVUQhiYRp_i8zB0ioL5(1K+ zhKh>aWcQc7Z09MZNfE-40`)zXd~$6&HS~)=-QU9`VfVXIF;dXy{(ZrNllV5s;;yqp zEINx-JVpEV?K^o{F-rI*;y&hD8GKl6ZPk#jL^+As7}zfb@MVyfKcd9+jg<-}Pgpq~ z1*0l)LJ1)uq4&Y0hyz{}Z0Y^`_g}nt5o;K?4WEgba7!#LE@lE=Tm}DSF)mB2=Extt znuSqOI<~fxKqG^-FFwK9fly%5g4{vFrS&E`c@-b3^6OW*`bED3JlL*RH8l@0Fes8W zG&Q~M7Z4Dr?!B+W9lGQg1ZW6+3|!w3is}+q37{9p$BX|1@+diph>4vzaROl9<2{eT zR?=N?W9S-X2tav(4-T_Y!U6-Cbv)KrU5>niYZak6#&caWM;h;%=*Z=}{%zl$Jpn9d z@2{ezjq34!mfuLrPZ`K&YrO$4O3TaFCrkF=g1rL~?DZj}^_Kd22bMh811wP+DU@c_ zo`vlV+?(&Yv5pm_!FknUJHc*sy{fypkn-x4p{(pfEPGJM$h)P%Ha{~H@jWaoEL1!V z8mg*B1_obdi#e|^_Ll98cN=buL%w_6?&9LIyu1t($n0T1pr^)H?Mq8b_?v2Ky*5k1 z0CYBtG;d#_`qFO)-ki2wz;)gdP`1EzVMl0Fs<~PQIzDdC9p^GNX&D1>{rdEHX6$N_`~2E7=d@z zzQ!R^h=_!TxH>y)XlY^5wA9w7BDSQ^3gBAZUQ3Mr%AVbE?Cj;sQ%&vSDBSY%#aT+* z+dqNs&b*|pz4CeEr1~Fn7Q}B{NpV$~+SRL#6{YVI6UiqqB?~DLpoVEo{v1lz%FD&5 zkqpeubJ3+zTrA!57Go@jRGtHvO5!Kumf}{1?ErU*_+t!x+04ugK^ncMv_g|NUO-bOCZ?Wg6zHKL zAt>!NdI#Up9y;VtFEWiFj7Q+PI(0!#j-1P;J!`yjW3N&L`kQoARH*jvm(kbDwUdDb z;=F)u_vfcisYJI%6aD$>Dk?-~*)xB548sMnRftu|d5y;JBM=a{i`7-Pp0^j}<<0L~ zfsi&fMgi84q|OtM#>BG_7hSPWoSYUgKy|M)qlDYBwuipXtH25s0mBE#P3UO9Cnz%k zr?zF7R+N^WJdB>My?gf}rlY_aY0u{23V8Hrx#s~>)QcBBUFYz0?$jlgnU1NctHT)d zCNJ+c-pcCKb;I0zyfwX~u5JRmy(8Zx!&r5OoCP@sc|{l@mC19J7qIR28TZj2DGGlN zD0RfihhoIi%HksX(W6-X>w}UTmoHt?z%X_ebhdIB6glxrTaGF-GErM*<8~RrqhD ztA7`+e6lUmIb@?wa^w4tAM5k&HrRM6MWI#w#Md4k9w0=hlHYutTv(8VgaPsbgBKJ{ z^U`!bg|t-}FA<+4AYjjq9ikqqIgcMJz#Kv3No#8*9uwHrux1;y)ldf)0o#$boZa`w z&x7yfuf(@+XEDDC8Om=pW{(M{`=o+d2`tH{4_a8i{ zix3$7cVsg=m5n-+eCJLiwuZ*WZ*_GQ!31+_rb{5A2PH3)NCjLoYB~p6U|L5_?v8b$ z!=3&1Eh^CJZ{Oafrds1Kv2wgVe3-`FgtvB7l7xt$-S*PA_gTdKn-^f@h!t{}7Hd`L zVmN6dNUes^1@AxroZBug4Rj(BHy#n+B;_X^!ed1s&ELNxgc?Hea{ilr7(H;bdG8W^ zedR1F2&QAwGq7L&B_cA?1b+)#xCUp)BwLm>qRwjMjlDYqK~ifZ+C3| z{@}LQ2t)#&F3WLW%%iIQAE-DS_u(HWQ=~%n=!@Q!n%rMgX7l*oz2cS+{6sM(`FTbf7s$FX<6ERgr9<{?G{2H_8O6@& z%rt*ytXXKhomfSg+{R1HS5#D0A5hT61ELxk*{?0%(mLg~Xp0GzcfSA}50B?#`xEOP z!E0fnOL-5Bm!(c!?g>drV#bw$SbwB@HtSz4=BiNAIuzU|4ek{ddLT*{tdY?NgBwVV zr(Ng2H#A^Uz*Qt8qr1)DzoY&|DvpSZocQ%Al;+RRkADA<#G(IA65j}UNk&Fi-_!(@ zdhfx5ipPie$XImIwM{U3?9l&eYWyjC$H&(IxG^;YVEOND+klrOkTiZ^%w4>Kh|`~_ z@bEU=TsrahXV8KJ=HPWZ{)Zw)BO{97p*|-_h44_sE4_#a38A5)qJphqs#gYyLW_}! zX`;U$yfqCiEug_jfB*Bqz|ZviX=r{R@^9U~8}cUyxIfB9V3f(pNo-|G>Dm}cbe#MK zY#49Lr~rf41clI;b479tx0Yn3bjNl2#Zo&B;KLrde2x)EYb|kk(z4QLGWrpb} z`^{g3g&hP4yWPCngn>PO+Ow6x$+fmFq5~R{6=phA0kcotzz~9X=h4Zbq@pskwniC& zmj^zXU}TM9daGp?76Gv9koxYRt#qS76@6S%C}gUK?HMc;xD-IwBByj?52rcYp4&U0q#WbSuoxUWh&8712+C6cPz+XY+1YmFVfC zqNA;ijQCJr1K4XtV<-psesE;cWU!@w{1~U+1e%hMd7Fo4=o@iVZg!o zj^g51>6}IX6Z<=y6&V>>ROG3rr-!GHN?c0n&YOhw4b1Z_13ueWU$KGkg5(S@N~#9~ z=s{^&Gqbn3xguPbRa9PexuA@K0T{?5K_Ps4tc_3bQ(}<=1ug$uYzOZ^#6F=aU*Zzn zSgTuuNZ}sFfR0{ZIn);*^YiWcFKTg9k|D*|*2MF))f%P`!S@I|Pgp_m9%rhicv}I9 zn7VCzcE4o>BN+}HH~;}M%SwA-&?n$|M8xvM#>rop<==(jlLQhI5bZjGiB>o=1YUY9 zXp~_43xv}G6pMONC$1syF=@$S~Lz6)f ziq8tb1#W_GXE9vKn780FPzd4%#gYIYA9Yjkm|Gh)0Bb$h;ln;I zE&y=lw8rnqx7|Yxgpo`y3ZY#hi26Y{@%2Tn4_bVw&dtp|zj5{`85+!PL!tp~N-yeg zOtt3wcZcQK;m*!ZRNU+sbCs>Et?fG2njRgEdT<`pDxI)xES}u8Yq2k0An+{gW)MA> z;TE(N36P|aCi!V&aeyeZkWi9eP>#Z0i43Skz&fz%AiRYH2V;cQOYkOuncjh@Ur^@( zM1RW3IVU5-AnCD+LJu0_Y;*(mKDTz(WAlpd-|^vRfQR4gA4&%aY4<;qyWmKN-kkza z*=i+-3ql145i2%Uiv1*GKtgKj9|XbQza0ju!x3x{nDah;YAOIS(#$lwtf;8y>?~~0 zC*_6EbXa_5aP;uNIUudx7~*sq{sFo3@17{F1c+{HnJ&7Gi#VzjbxB1f0*367<|J&a za2XpIeCGfBaviK?z;8td={VxH$t1W4*cXf{o5BDkA_BAS{lzx zbu#E6h+7;8*r>)*Q)^pVveN~jzkpW)ZpHAWW-R+t91;agp=E~1A@LolTBz58UQd?= z-BZQKyOTzi+JAQRKd4pcZe=a`w??mm6N<3d8~sB?M`!i-S8AP2l8{{1mW#<^OzH#< z?0E9{F()^7{GQb1SOk`|(^YAbuL(pG+s|C}pboU3b;Bze@IJ!AtvG?hYfgk-N!Mx| zyg%kkO3L4<;lbjC-XTwLN+g;5Zx|+XzgAX?1C9^RJr554dF=SrmLIUF-K*+9&cWf% zHEf5~iLia<%wG>mE(bqLx}tJp{2{)#TYKu3vHT>LDvBWP#U_yJ+5x-}2NftTF3!7*>U%TCw{OS4eamt@$8_P6 zdc}Y(S!Bw)cR&AymA0HPFIJC5;pUC$M3t4_sxqz{Yl%h08=@opTh&aPWw8mQm4E2Q zNs2EY-4;dR#VvgQ{v;l1e*UV3rfYOb52(q+q$K;?jvr457eXOd<#bOHO8p>i0%7t0 zZSv1?PyYoA9AvDw{_OF0nunVhlqBK-yQaqhwha8ayWPj87T;Z;f6{1^%9Z**;&lJl zNcG>DVf_msb$wGnR>yQy)YY9(@(BrLgO@kEaRb4^3KcnWfcdYt_z<|JZFoBmtE8kS z)L95@$nfw8ps{*#Zm#C**PFL)>1LQHR?Yck79Lt#8jMj)oJSRx3^DGbV=XxP7gy)3vcoDVHX#y~@GXd|+u(6YI; zLcx>JI0`Zm^PquN;FtIH^~G*QR933;35Flz_wVm^Bq`MMYUzjsT(?D82V&RpVh<{ruh2 z1FJw25(&^Rm}Ocpet-keU=&@OBu)$%E;Yu>e4R1vZS6KfuHkgH*&{KqzORR{|Ks<{@k$(j#0!&yVIc zDu)N+B3U@xGk`=W`;SQ6|1a$cc@|i;7#@XC59#&Pf(L_Lx$&Z#i0B2H(F7zeg6CzlquXN`rv01Vm$0_-8y}1WM7IcG)06y zSZ=sC#m!MHHUC@7kaDS|v3t$T&E-b-(a@x7W|U*4!?zfMyj%y}4;u)qe9Y33O;IaA zm5}2$TvvZb$C9H9wxHnjj2#pI^62al=&WO5mo&tN95gh;ZP{7E&vhKrt$IRxazjH@IQ?$ zE&5=bet9gBaU&bU5*jX%8J3rQ$BQaH<2P1u&4FQJqL=os~ zd^6Vi+b&rd8BBTTo>{_d%2#YiDHWMBP0Et}zkk<{LpH&a@*NH)PfXtdxF#|7mdsGZlYbq8~(0&SABpt=SvgY^M= zbCcxw+1_6D_3K{gu+cPHT3YYG>1n$uUQF-%*$NkPC8hL`WgwD&ldgn>1o%k@J3B2D z22JWlSQ6FG&q;x=(mNNhggIttbDEOV`#rO zH*h_~lPBL6sh>G>mr}ao(UV<~H6}k@ zHr7uwY+r7pEc8@&OQ5(4CAJ(KR|`&Fp`i%@h@(#+Sc`gAt&>%0Nl8XoOKuX+GL~0X zlq2{Pb8=ccJJ(V7P%yS@^vXCj#Dl>nY9N-#wJz$HO9jZ+iwDEbk1XUEmOX-M05~`c zE*dKZv38&R6NMs*^BP4rfu?&_yBO;DPguS8A-y1_P}TS@Ki>`E5ev%Sos9|%pCe#` zgBa2-zKo%I46FhS1+)e9FJnDJ1f0cJnb$(mHhnx+OErJr0OSTVObUc5av}PDn66MGYmTz#9!uf>HSU*AX@5uVK z$aOb2@z5&WeCM0z&Xr;#W6u4t4l(aH z?WCkwGa7DHDv1!a5zoi{AF zhiyQs0v`s!Plj8I@Amwd3m6aSN+@Yw_wIp3#V|UjrRnR^l{Q6dj%exww=|GvW5mm; z@&0p3i4k1D*y~v9I2Qxy_9e9>0J9Mm{^+PSICW}jwy5)?Lqk!gU9;fK?rqVwOui{y ziEBZ$mv++4vF$;jQhk}wVqp1td-*jP%gzJbP_=pyJ3-RbLAHSFB%SfP3ZzD5{&-*?r;u0=yzDtEA)8K% zt{ryv8F>fYokPel6$m#Q%U+^qr)&wZ+SvFw9543BzEd+-w7Bmp2Ze@KbnMA9{`z!s z(pI#JtnfN42a(ftgl)P|5ntbOI2XF_z{IHQJVM?Wj3~fLpuZ@A5kXHt1_H4Y|K`nO zly68PDGaf~`1H%e2{8k8F>n$Aw!uvF5*k6a<0bq|5@xHyLe3aU!)w<9gM(+0WKq+B ze}c4&pM{#nPt$JD5251<&I?3A3F05_fEt{Q!pt1|(TgZ2NX(m5EXKenXAY?y0xbsE z0L+GGiUf>udt?cpY|H#G))F$yI{+8UA$eok@W{ECKB=rtq zp?m6?BPPKJnKi$=qJZyQK^Ga|la@fHGOODTwCfX!A0LhO&VUNKQ^u9P)JL_l891En z|I&K6ZDv~Awg5JbJIdL}B;VB%*M0!THlQLBI0(p8)Nzd9PqaV*U~jfzW*}fRWGLhaa;9nQKqzXsm4u*O zQ!|dJt2mtb<%x<4ia#BcYbbGLqU~A5uiR&JMYw>))7^ayXqsmKeqI3p$Unb-ze!4J zM{T!=vnrk)5fILed;8W5X%>3|WF@#b1Yr|LUrBufs>juE2AGLMyu}c2>`aS`s)pxD zNhBK7T?pH|8yjXTCSc+ord)S?*%~6Lc)ZKqQRw#JFKCL&IL&Etpt7!BR)`b?Kv(@*;oVeo~F_K90fy&z2}(1^%S!^AE!x$v+45z z{~8m-x?e~{EiLNK>*Or#yu26*F+cl(m!r%WUX2N5ZlP$AyoC6KCMER20Gb45+U7*R$A3 zc(mMx^Bl)VCMJ;nmp3)|!Tx^UHo@!HuGwPolF|_htw(rdq`ZAE>1e*|!jszU#0jq# zj~vv{`iQ5k^C~W`S%W+2&6`rooyz*?T%=sxQs67jd*%`wFtlnv2W75u~q@}Y>hteY2E70#Agi|sNa8p^?bO&meS&*zK zX&OTztibSb2&}X!EoMiZgteii#R(kY&6|e=Ej92l@7>$dGz~A)(`V0yt5C|&(bBH3 z&eTyk;5^mH7cbm_HI~sTJ&H5qmRg$tVlg|qpHM)m@T4&+^1a7Lgl{h0yxGZ~60r2h z$+IF`GvgO$tU`ib0?bCVs%1RhMZzC{J?7C|_ZP36oE)g}(hp(cd%>nr^b=cTH&9so z3sheyP|hm&AR{1RF?lS$^u1efd+s7J@!$hUaG;}|p$~IFgTa_2C+7>M9~wR6sK{0s zuiEI-@`G%<;j%>5ifQ~Vl=Ou+IW<)R0TyY5=*v(kT2IB+Jj%lI67dA?Xz-${SFTuH zJV2bts$1xm>v17wi*nf(vrB6iI3XK@L`j()9`FuC9opK~mfkjo5VK?3J&^YJ|33yO z?5NwEEXIiPI@}8#x%PU4nOwpdp<8a27T#Gl1U$ zL0DB))g<7uJ`=NnDi=IkSoA$x_aGx5roGRfKJ6VFOMdlAnr>+{tq1`W2VBZ9GM5d` zfS|-V3A}L90E~d!MW5s~EHhjXu}XC1#ZS%Nzl+<5n4XuDGdtd{?xxy%ft18sZc;6o zM#pFnpA?IH9joT=EoVT{;}(Gc;MU2xRAhpiiL<417Y`@E@swLmwWS=eY+$aPSEG)c; zWT3d`;M?+YTkLLtC2i2OYiG})9dF(e_<=aIQ$PSI7+RH?;Q=*A$N3<(3$$ZHs@MD( z?vVO&wxW7Ge&PgNUPtqHRUyJ3RR{y+kEkiC5G6bXq@rkfk(rWksQk>t3D>t8(R!1f z4xPMjW~sUpL<&*y;Qh#b1n^u>dmN@jH#P+I1yltRHtJ*uUGq~@=9c~pJw`t2)Tom| zQk}iO3o<)|B7|P5wko8a2w;9(V@SwVAoKuwk;dSe{li+lLAmZLS-_=Fo+w?qbV)UW zitiK&v%)b!p;4JvKRE%HC4m;&b(Vm z@T_B~4@wGDBOs@V!Zjn(inbBY3b4-b42%l)DH-X~C$0?F|&vXQX7`S9T> z<*6Irk1gBb7GnY8pJvscV6nn6#;^Xi>tT8MNmNE4=|O^2AD#~k41^VH_RlYEV|4&v zn1QgkDqX*QKQJShQY-%T-@E`=0YnMs?2KudG%eGAb=$*4gt(5M&q?D)2}Rb(+*}hY zygQ$PBv67%r^+VrlMOf~AXj9Vl*B|AP+Zvb5;0vkV+w7vs3sp7FHt$&9H>4NR18fK zOZA~71SokFOYn}up(44l6p)+i0{({1jcWU|LU39I+g)n_7v}2S-v84NSvTl z-|ydQnwqFr%T0z^IXL9rcvtlc&U@W?j{^q*=KxVLz65d|j>>{7@goooBxMS{=K<)n zkd;O750~`x@S@n!W&Q>q5tJry+|{c`KKzzOiYHuGH)bzNx&_Av^nj=+6`I5JU9bRDNf=7!-<9)11?N*ZRzMM~=c5b_e9W@4hnbOeMcpp8z!p6)FlKNOwozLn9 zQSb^23WgNEkv!Gd<{Z=Mi~t3fsO-yk?{0X>Z#=pd-OqyB)Y`i9qlLPu=^(-`?6fcy z)S@@)%{qWMCJjOK-9QIZO*mhIhu7@zQ3zYJ*I@<&F2SO+xN*ZfsUbKh)ko**)gRs8 zNSXEQ{S9D;gTjZwa%xiD`bCDP6?7K>~n+Q3gr6Ij+d8_W|LE?w+wov{=HDK^>ossE6xEe5Yq( zQf4x6M}?2pV_&sD^)E|Mb3tvVwY-R&8-Dc*J}S18`(*cBTLUZ&7$kGumZtaIZ+U%T zPeg&ag$2l)PGnesYV=1P$hBWU;fn1Bh7vl}MJ1(F&tFiF@L=F5XbQ!$y6#8;ZU+2S zF~$673y+}SRb}OXxD=Bn`SUX~ z)Oz&56C~a8O<3)~))3<$!2t%LiRLZP3u=0dSb-31WMmZd4ZjKilX|AHt}cLb`ip=9 z1T(D1a|0Xv&bP88dMrMJY!taY`xbKITA2&tz(0~M7-F$oBm4-{K|64>Bp|&TDXW@h zw4qg?IGqs4ksr3){ruwxxaUGe^8MZd?z@1>v=N?)R*_jTR76BX1WEbLVZ<=VNeb@y ziul~je{0PrY7pN8_b8B1MjPNf9zOEGK2I{msl+`;mLajOq2mKncwuJ60RR{U3~F|y z?)Tm_WHH=r?48xOuSp{IUTq{K9bR?~xs2->ZX{-qrHJ2gf19R<{4e*-!Ehugu%Fek5~6C@SQ=vaHeFQ#At zGe*I^AQ?d1odYWJ*|XF-jnw5h@_m@vE7WpZMAB%yg>4|gpmf_WXQlQ-j`_|*n8@?; zL~Cl%#)!OWwuJPK{vycHhOn}t>imV9{J~CI_Wb$#K;ot%GM8hDMoG6HA}&$lsFJ+X z=fRoRuU=Vq=F1TyuVIJT7FmNCMa|6(c7lf9A%kA6H zSkSZuCoWN%Q4+S1k&)v7>SV+bQUF0r`}YG?!7Yx~MyRyj6))GNh~f%p4Xzp%Z`64x zW`1^c#Z>isShi3U^7voT!!LwY96}QpN`8alZNz1su^v`F@LA}XkdPA=u><&734D3>#y0OJ6t2w zT@nM60}R`I1zLvP-Vd01M3P8Ud|X8xi;5C`TXsO>NS7$N68eFiU@gOUqG%#G2%IIj zCWJFF)vrWqT_qJfwQ6mDs^tN~5P%HE!A)hhO(-UoAWG|bV5J_b-lnHu4 zMn;+-x8SxxqQdJYlnf-GCK@a})LK&6FtWoA&3=MtDM?9*Yx4x(g(h66Kf?!z#!ieU z;lYi>$_3hmJZZu+!I zI%r-~QTYJb91AvD!aZ-Dd8^b;as+j}$jA*VmF87i521J-t_V(rv$%c$Ko8+!C}#G!q5~ z2V)qQT-tVOX)N<$;P2Sj*yLn!!atFOQ55|M9$?W?%b_An>(T=L6QO^CSq3P#O0%J! z14MlroPk?h0Ot!YD=LPcibJ094umpD%RWue_ELnYHDhz(eGP>^+4*s zcy)btShYul4~VnJc728V8;kA|Vn3 zmMx_;P#8fqYW}lAk9fEK{P`%Kjb!o=+63@Qg7_X8DJCL^nF$F;pCvXiBCQVvGm?KpdkbsS4J2Q_cGzo*C1+6F@wS7?vwn-lg8ln_OFO!y zFePpV$?%`_`2`IC?4x;K7GxBn=DPNhELNi(a(ZTFG!&5FG$^F^?*l9PP+LHCX_`iQ zLJ)vzgZ@6kaej#J{`wae#2yfRz}W;L2j9~&Uu>A8xBItr!x0?TtB1lcGZTfpE#8O3 z30$xSN@n=RHmJ}b^@(%VxiJVGi{>7!e8|VEb)5^;;WRx!`xCdn?;@oJ;s@YBHVa{nan6X|Enr0qJUITmyt$Mm<*}8`nI<;G)&FTqFDzw>K9aQ zgfu#f9_TobqF;sfz-$cJ!Ymi|9U#}?xpn06dT#b(p0FhWUDA$0jYOA6z>)>)7_Jav zoP(DL$9b=<&4_up#hMx#wz)b#gh0xT1O+Tanzg_LENECw5ueaA>U zX*;`9H7OVp_5t-5MrfkJ93%tg!<+_1SRL@}F{!fR8zsmU_?U3_49B`#k|4UFU6jAYus} zbOXf);R4YSHWO?M93b{}?3I@)*5aW%Uk2H^xnOrrKUccFe>}wme+(|nD8hy zqcMq@IcRVR!10-c=P2coA3^j82nh{NIiqX^TVgcu2NMRG5pX_#mO6XZ2qg)?<*c?l zk{@~x(CG(h7^5zizc?O518My3m^x(z1qUZ5G!-W0k9_D71b$&ksiLBbxE>%b z>^K^dj1n;uBO^EPIH8Y@jVT<}1KR}LjqHXBX3|+41MW#T&N4&pdQ7@@{i6qozYkIl zHWrq{_FV^2ADjX$FKRZIpf4yq0IK7fp~w7~W|Jh>oB%fa%z4kr{E>h`Q(*?)IhoEQ zQ!xg2OuqN(v!bG=-M{~%$J*_PATeR#dOMKvAeZ0)dO~SvYIyksLIiX0>}>62k7~8=gwWb#>`TRQ331j zFPHwHvccQ~PD(PED8O)@IFnl$6~6qXqP*N1-CFR>!OdD7##;^4bvs4BNDsa28X70P z%FQfe2>}#)3K9Ea$A3I)-e!_+Rh)0|_z1tHV0(GF35KW?yCNx}BOETis*Wc(Loo~} zXZKMqu5nm>5W-MI;9)p~T*KN#Aqk2b=I0+M_4Z_y1TJdu-a<6i$GThHYm~0Rl+WJL zn%G>idWz!=36c|#Y;he66pnV#1fxPq+CzEq)2@G+2Y|)v+zw;_xTQSv zYLYw4`t61Ts^-wKhnMF?7eIT&r?vO6OOM0M)!VC5#9?7Ex;(QHRzgRAOjMa5$Yz!E zjfwEee>L}u(>dqBzhZqjF@Yubcv~yiV^}b#qW63@Og9@KoXObo80mEI&>^(>p?0d@ z0q;E#%fZiqYmjZ3+~4%%p|VI;x^Vc04J&WLk9BPI$Aq)Hzq<#!--UbjmZ?oaW3zv0kzKX4(nK^B;^SKpcZUTL_FBH85s%u`zqA8%Y_64eiRvjNsdjJy+gq$4zr_ouB|qfX=EhYzkUOh zAl_q!h_B6su+oZ0i6#AZ_}S6oF47j$ORIor0D=z>Ju6pI+(o_x8{DcX-hWaj7SL57 z=kr#pRqS7dulQJ!2dV6n!J)qpl|BtT<6E&qsIl}?qzv`HHd|MNsc>4rX$D_qCc=Ul z3dU+b7zos+tWEZRb<>raWB_@uqZ1O(lV;yOLNY|X<8TqZIq(#?p^`NZSA8e;y? zZD*8lq)keIh9t5kD?1ymePgUt4B!UFgbP5%M1j{IPizr-2jPl1b__$s2T&nKEbfNJ zwu@dE$4&vH6hNy-wq&Yyr`r|l`_ki*kr8*JuBya8v84(6vATRz?S*EWizFm5yM>%Q zec7GKVqU%KMY*PZgq~z^89(Zhk`gy;GnmB!o)1;q>~1C(mnA$Zn1sc-xs`xozI^FH z=JpN*Pw^=)k5SSCb8)JHTnNid``&pDJhMI++f6dyHoJ-=nhM=l@Oc~h?;vHt&`-_C zSj$Nx2Wa+`A~=kMl!6v_8nIp`^k$Ukts84cKdOSpH@V?BRR0Ag3B({px9#XDDTmjs zqy#|&zzYw%03hZFW0l$Mx4q;6xnXX3|5~E7C?VGJwT2ub^z^F}|Kex6Drdg6s?jef zGP1dhY(|PCqUm3a{svp_-l-epWu~aAw)ru3Si1yTEYIf?yT&qrmCG z%MT|y7*tT9FqL3*AvsB`@8$pkx0@I^L`_A7-fJB-HTa4;Q2dj&IBq2|+eJ(cxWn`0 z=~ET2(Q{i#`1k(!=R|=2=!f!W=W~ShIZKM2DC9}%#o513r~hV>nkg1C#h=ae{&hgX z|J}5M|C5;sJ!rWAhjJQ1#tbm}$Osribcc0`{--Xe%q;}jQZEj?{{L)(+S-+efU_{M zq3^oDq-PuqUBsVw zcId|}xVuYib^G%t!&Ook8VfATheLH5JNrH-4m@Tc`6-3M3z*E>+8R~zVTlB<*;z2@ zp9Tj8Fr)Q(NJ!R#uY2y@?SORd6K{{!XXg*;S_K0RQ=2mH~p8eCQdu7EgN(Q ziH`o`9wXfT7E6K5AA{lV)c+S>c7MmY#Cot*xGLYw6Lx)4{`9bXZ_L}kn3$sLRUz}y zWW@>7e=*Z1Y&h+P@I{BCXYdJnyJ%f#(Gq)U`Swl-`ck1OVUFejd+U1l)CU45Ga8vJvvcSTRWwo>mkwNO6_ua^u2qTtgYaqLtaIT=kB{FQgdEmYpUzq zEZe$Ayx!L5zH-F1vHKD2KCee9W{#WEhH?#g8SqV*3|+@mV?ZYCuTp1Msaj zSSB#e2RJos7k)Wa{DE^GJqiupQ_QI1hlh40Uw=+ljO&&`f9doc{ifEd#+9s0yz% z&5R>R6JKre3?o+GS#{(+h#h}5O^*R5Uw?fDG8mN)S_yhV0&{D;XPz>+ zo1xy{GktY!VZ`FosCoBzc30teRy+2LQ-?o_9E+ltKNZK!G8gulGJ2*6Hx*14@8ohb z=BF)~sTHH^lE7z2mlFntV6rA&(;?c{ORIyDOrMDQ10<{4*fiGCtA?QfkJ;C)DyRjl za;E)-IuCwYP4iqkLF>OxJkQlJ&@FztdQd0%Y27CZ7Dh%#LC@gZK>hcYz(bad;sI6; z^mRjOMit?gRzE36{rK0Vd%6cj?2K0p01wg1a^veRiU5P&q>6EmoeyxvtsBT{6iZ_x zxGoR;+^msG9PDXV`f%@55&BXyAr~sSjXV2_MQ?kpsnS^b- zYlONi?M&$`mSR+dDGHW<{`qnK)68^xIoygx*S_4tM6G$o-~1|9uR?+Tz_dR3VEiMDs8b56c#HM`bDKL_Sc+|4&c2GuIbr0w|TrQDWUYKC| zgy~w;zUQ7m+g$VooTL6k>6*CGVPEHejy0X>@6x*CsG*fNmE((+j}1!hm+2cy{`t4N zz;AYG)c_>c(p;M7ucwEUG_ZI;>{AGJz&p0@6Att04N+*eol@6xxsEL|m4saUWZc4RwkH(k*C=me-RK7^HLV(gTh&$|RcDdR#_)YQIrdXYp0 zfil4%>B}!B+!CgAaadpuLJg>BcplLf*#TfAlr3v#*B*6WOJAR9PsbvcqQt2$trUk_ zeW3j=_Cpn3oXN7iKR{~XyRD=`Pt0<9o`x~J&ynj(2^KP#D1lWEj(K;P>g=MmadPS- z;@C>cr{}(7S(wyDEqO7m#^#pwSjJDcpEoe*(RKPIfc86io`TG&0#E4sF>cdeQMbc{ z?$015C?vFyvmFvdicaqIPm8oQgtwTWpqn!_LPfKU@{o|mz!2f~0?bh-Q@1;Uu-S8Z z_7Z|2B3XIs34Um1$9Q<^YHQbf4-^s81CGR``)C&|k0gPKOvU)4?t43N^^$Xm$_xvl z?%;?K91wN;Mp3(th8C?}XQv9s_Qlo!%|y%77_a|VcQuWeI&Lsa`oj*i!y(WaIl(tS z93N?o;g6c^R4!|CEy`a`B30qS)xh-vo}%~%zx*OJwB_e!NZH(I(y*f0*PV9ydN|ar zcNc1EluPMVKv@>6;0kYXwbg7Zfo13P%2>u!JlHD4Kz(sU%Mhk;M3*urE-K%AVs{_n z_*1--#|nawM|1Z5OSLS{{Qw9URUblg`>8d8dFV~;#k3!_}L0%k{OSD-^ z{E1mS8trTd+oS&4i2A2nqggPRy8g*EMT-F#ozvDnkd9!FLT|kVJ{b@daPp*8_OC2h zQ@hswI1%lA`AWBL&4B_VjAHVG3DLJlf-W%T0gN9~_PDrAxLQd|9?h7=x1v zwigT&er^{Oest;*^nveob|?Z^z6jgPoePDb5fQfy{YcLI1gDkeF_*O1Y>}FKgpbc2 zLICm~A`|BA^};TI_%4Xs(rQ65_`<0Z4hkF|>_BYQiFfPSNAu@?Xyf4#O=Znj)K4#V zdtswk3EQ3}FSkDSg&WHYRKEqpPS3>>CTy&}B9n+~_Yorj`4LrxPMolS@uGqu5WE8B z-rYhIGxCOFekA#Q99@ee5__=Wjwpm-OkGy?me*4xBoyv)=gz3PB6=0B{IO^b3WwRe zrD%N)RysX=h5(7>A&e6Jb#Lp&M!Z7!DbMxQR%)xR!ZkR|)7!z`6i)fuL_vf>R}Usf zxh?iQh+GleI>{(zWrCr1@NE2q`KyEu4;$K_1WGgzy`IQ@j4)$9SJ%tMb1RQ*X(k%z zQgN*aw1E2%i-w^%AjK4ItW7BEBor2|=Z&Vqybm}bkCljtd|Udke^;Hr*JKJGt^f2CcPQ@AOBPVErqJg1+(77snmLhl})%{@08*Z;Y`3Q$$ZeqF=)e*q9D2Qiv2xf%Ou8 z1>XlEwQv$(AW$Z*0_cEv;^C(bJG$afA}m+9w*l(beoc75)%}vZvtWCzonDmLAx4SU?^FN=yo(xhXtHnmJ$LpxFo|+0&IjNQ~RGcIslam z|Ad=BC)t#q+jK%Z=L%3@T&N!C@##AEKlX?z2lSkK$myd5HMfy{hTIeJX*2@cVj#kT zwyP6hv4YW+(_;?Xz}zmeRGqF1&UCnr4hSwRf(ufL5>7unBP8UQc z*QWyf)%`e*9W!%&S53ahbFNuk-+iu`E9M;-^v%~)5@z?@Sgjl=yaC=8X02!;8@;g+ z^yu_S9>t8FDkGawa&|;@6*P7aHN3_VId)BoLWi9-wAXS(zKCZ3a?~#A(!SBdCz#!g zJG+}+coNVEsq!?kTJ%YS;+u3?zgvnVZtf*{n7e{mpm?H4o=^peHtmH@*9rB)>F4u| zJ8DnXwwfCuhCtSQ;z@rEoF@Xo`uajq1=D-T+O3g3A1_w5;3)YK7!vR_S~jS~hBv5N zY^;;uD+T27{QrkkFD16dk*UreU%}JmBV!dPPum9-Htf` zc?h`L*12&#bmAmjFQ?lz;G2NdH^$%8+6?M^eLlMgjKgVU7+ldpDYdfOusr5GT-VM~ zva_2;Kfs@&jdf@O=nFSPdLmZ#ANrRemUFdY6UiXYGc#wAW8f`+`%c%VTEjw-+$HV*&T1W7VKZ48IkvNy0b2zg5;L z`XAf57C6)gnw|q5;UH^Sv;^4x-{^1IIoA-hiU-(=0M73GU$uJOEnt(lkh|>VrKi9O zx_7VO5nxmCMui{)!$0pyTKvSJprmalEv_T|<;+ka7oZq>ldp}+ghCN=wS zqJHea(M6!YvwnCUE=a4){XY*_%x=vRPJhF2fekoXb*q{sW19W^Ijtdf47m#betQ&1 zd3_LDC!jTz|G-ILwYqlg%FMUVXCGSm5!k}Ndi}cf;-1aD_8%GMtO2g<^OKa6zkcNp zaM@sw+hSn-+SOGCJpB&1oUs&`Yk_4~51(w7k@4+nC5xqhw0RDkwEBLh*nZ6lk5#L^ zy*xFwwLu3$04w5Z{-ZbbfOEINLIAi1y;Q!wMo07HY>VP;fj@!vWSCR|=SP-2d9rKP zte!1ffC$)2{I_`DHZ$PB>7+SxfJeRF+k8Ot>7E*3R~R^-`)cx}SHVG-tjc`+JTu=H zDomO)Y0|Zg$+5s0V#}W_cBOLXN`Sq`1-ZaWKUV`6w*i~2pyh19IkESJ7Po;X=m8ht z%>!1@7c;i(O>Zn)@QE?Q_+my#AmbdqIiM>P7Xlr{ARsjrxTAiQIT{Y5iD0B;hJsnM zfbGoA+!dfrHYFy&_8xFw^V}QTw1B6T`dO<_{-GZ96FAlX^=qm6AK(y}LlUp>{$rPDHI`~a?@1J11icgeS3)4TNQ6mYQl&xTKbujK)E zW7RBrEL0EN8#LA3?u5trjJH;6*Zt|~Idf~)u1}xJqjxJZFidcGe8j%u#r?0qC4-VP z*T!nC{8aFh)2Cp^r^8F0O!1#9{Pu#Pt>w-29}anfiu`WQRc`BhtK(Y$|DK8f4dZ*d`njxgN@xNA0DB}Y literal 41622 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 V{bJ^2K#&aAuG|z$5xw>B{{S{#n+yN| diff --git a/frontend/src/lib/components/CompactList/CompactList.tsx b/frontend/src/lib/components/CompactList/CompactList.tsx index 3d66e898e185f..52f831c034a87 100644 --- a/frontend/src/lib/components/CompactList/CompactList.tsx +++ b/frontend/src/lib/components/CompactList/CompactList.tsx @@ -10,7 +10,7 @@ import { themeLogic } from '~/layout/navigation-3000/themeLogic' import { EmptyMessage, EmptyMessageProps } from '../EmptyMessage/EmptyMessage' interface CompactListProps { - title: string + title: string | JSX.Element viewAllURL?: string loading: boolean items: any[] @@ -34,7 +34,7 @@ export function CompactList({ style={theme?.boxStyle} >

-

+

{title}

{viewAllURL && View all} diff --git a/frontend/src/lib/components/Playlist/Playlist.tsx b/frontend/src/lib/components/Playlist/Playlist.tsx index d7cc5ba845b4e..3d720f1f146e2 100644 --- a/frontend/src/lib/components/Playlist/Playlist.tsx +++ b/frontend/src/lib/components/Playlist/Playlist.tsx @@ -44,6 +44,7 @@ export type PlaylistProps = { onChangeSections?: (activeKeys: string[]) => void 'data-attr'?: string activeItemId?: string + controls?: JSX.Element | null } const CounterBadge = ({ children }: { children: React.ReactNode }): JSX.Element => ( @@ -70,6 +71,7 @@ export function Playlist< onSelect, onChangeSections, 'data-attr': dataAttr, + controls, }: PlaylistProps): JSX.Element { const [controlledActiveItemId, setControlledActiveItemId] = useState( selectInitialItem && sections[0].items[0] ? sections[0].items[0].id : null @@ -115,6 +117,7 @@ export function Playlist< setActiveItemId={onChangeActiveItem} onChangeSections={onChangeSections} emptyState={listEmptyState} + controls={controls} /> )} ['title'] notebooksHref: PlaylistProps['notebooksHref'] @@ -166,6 +170,7 @@ function List< onScrollListEdge: PlaylistProps['onScrollListEdge'] loading: PlaylistProps['loading'] emptyState: PlaylistProps['listEmptyState'] + controls?: JSX.Element | null }): JSX.Element { const [activeHeaderActionKey, setActiveHeaderActionKey] = useState(null) const lastScrollPositionRef = useRef(0) @@ -203,42 +208,49 @@ function List< return (
-
- } onClick={onClickCollapse} /> - - {title ? ( - - {title} - - ) : null} - - Showing {itemsCount} results. -
- Scrolling to the bottom or the top of the list will load older or newer results - respectively. - - } - > - - {Math.min(999, itemsCount)}+ - -
-
- {headerActions.map(({ key, icon, tooltip, children }) => ( +
+
setActiveHeaderActionKey(activeHeaderActionKey === key ? null : key)} - > - {children} - - ))} + icon={} + onClick={onClickCollapse} + /> + + {title ? ( + + {title} + + ) : null} + + Showing {itemsCount} results. +
+ Scrolling to the bottom or the top of the list will load older or newer results + respectively. + + } + > + + {Math.min(999, itemsCount)}+ + +
+
+ {headerActions.map(({ key, icon, tooltip, children }) => ( + setActiveHeaderActionKey(activeHeaderActionKey === key ? null : key)} + > + {children} + + ))} +
+ {controls ?
{controls}
: null}
diff --git a/frontend/src/lib/constants.tsx b/frontend/src/lib/constants.tsx index 36db4c50cdc65..cb2a0ba0d42e7 100644 --- a/frontend/src/lib/constants.tsx +++ b/frontend/src/lib/constants.tsx @@ -215,7 +215,6 @@ export const FEATURE_FLAGS = { INSIGHT_VARIABLES: 'insight_variables', // owner: @Gilbert09 #team-data-warehouse WEB_EXPERIMENTS: 'web-experiments', // owner: @team-feature-success BIGQUERY_DWH: 'bigquery-dwh', // owner: @Gilbert09 #team-data-warehouse - REPLAY_DEFAULT_SORT_ORDER_EXPERIMENT: 'replay-order-by-experiment', // owner: #team-replay ENVIRONMENTS: 'environments', // owner: @Twixes #team-product-analytics BILLING_PAYMENT_ENTRY_IN_APP: 'billing-payment-entry-in-app', // owner: @zach LEGACY_ACTION_WEBHOOKS: 'legacy-action-webhooks', // owner: @mariusandra #team-cdp diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index a9dc7be1bf476..17b6c0f9d0ee7 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -10260,6 +10260,10 @@ { "const": "mouse_activity_count", "type": "string" + }, + { + "const": "activity_score", + "type": "string" } ] }, @@ -10833,6 +10837,10 @@ "active_seconds": { "type": "number" }, + "activity_score": { + "description": "calculated on the backend so that we can sort by it, definition may change over time", + "type": "number" + }, "click_count": { "type": "number" }, diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index 1887f57ee0f96..2f70bfb77b41b 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -331,6 +331,7 @@ export interface RecordingsQuery extends DataNode { | 'click_count' | 'keypress_count' | 'mouse_activity_count' + | 'activity_score' limit?: integer offset?: integer user_modified_filters?: Record diff --git a/frontend/src/scenes/project-homepage/ProjectHomepage.tsx b/frontend/src/scenes/project-homepage/ProjectHomepage.tsx index 996894f9ac42e..69aff96dc8600 100644 --- a/frontend/src/scenes/project-homepage/ProjectHomepage.tsx +++ b/frontend/src/scenes/project-homepage/ProjectHomepage.tsx @@ -15,6 +15,7 @@ import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { Dashboard } from 'scenes/dashboard/Dashboard' import { dashboardLogic, DashboardLogicProps } from 'scenes/dashboard/dashboardLogic' import { projectHomepageLogic } from 'scenes/project-homepage/projectHomepageLogic' +import { WatchNextPanel } from 'scenes/project-homepage/WatchNextPanel' import { Scene, SceneExport } from 'scenes/sceneTypes' import { inviteLogic } from 'scenes/settings/organization/inviteLogic' import { urls } from 'scenes/urls' @@ -24,7 +25,6 @@ import { DashboardPlacement } from '~/types' import { RecentInsights } from './RecentInsights' import { RecentPersons } from './RecentPersons' -import { RecentRecordings } from './RecentRecordings' export const scene: SceneExport = { component: ProjectHomepage, @@ -70,7 +70,7 @@ export function ProjectHomepage(): JSX.Element {
- +
{dashboardLogicProps ? ( diff --git a/frontend/src/scenes/project-homepage/RecentRecordings.tsx b/frontend/src/scenes/project-homepage/WatchNextPanel.tsx similarity index 76% rename from frontend/src/scenes/project-homepage/RecentRecordings.tsx rename to frontend/src/scenes/project-homepage/WatchNextPanel.tsx index fcf8571001a9a..41edce03290bb 100644 --- a/frontend/src/scenes/project-homepage/RecentRecordings.tsx +++ b/frontend/src/scenes/project-homepage/WatchNextPanel.tsx @@ -1,15 +1,19 @@ import './ProjectHomepage.scss' +import { IconInfo } from '@posthog/icons' import { useActions, useValues } from 'kea' import { CompactList } from 'lib/components/CompactList/CompactList' -import { dayjs } from 'lib/dayjs' import { IconPlayCircle } from 'lib/lemon-ui/icons' import { ProfilePicture } from 'lib/lemon-ui/ProfilePicture' +import { Tooltip } from 'lib/lemon-ui/Tooltip' import { humanFriendlyDuration } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' import { asDisplay } from 'scenes/persons/person-utils' import { sessionPlayerModalLogic } from 'scenes/session-recordings/player/modal/sessionPlayerModalLogic' -import { sessionRecordingsPlaylistLogic } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' +import { + DEFAULT_RECORDING_FILTERS, + sessionRecordingsPlaylistLogic, +} from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' @@ -28,7 +32,7 @@ export function RecordingRow({ recording }: RecordingRowProps): JSX.Element { return ( } suffix={
@@ -47,15 +51,28 @@ export function RecordingRow({ recording }: RecordingRowProps): JSX.Element { ) } -export function RecentRecordings(): JSX.Element { +export function WatchNextPanel(): JSX.Element { const { currentTeam } = useValues(teamLogic) - const sessionRecordingsListLogicInstance = sessionRecordingsPlaylistLogic({ logicKey: 'projectHomepage' }) + const sessionRecordingsListLogicInstance = sessionRecordingsPlaylistLogic({ + logicKey: 'projectHomepage', + filters: { + ...DEFAULT_RECORDING_FILTERS, + order: 'activity_score', + }, + }) const { sessionRecordings, sessionRecordingsResponseLoading } = useValues(sessionRecordingsListLogicInstance) return ( <> +
+ Watch next + +
+ + } viewAllURL={urls.replay()} loading={sessionRecordingsResponseLoading} emptyMessage={ @@ -68,7 +85,7 @@ export function RecentRecordings(): JSX.Element { } : { title: 'Recordings are not enabled for this project', - description: 'Once recordings are enabled, new recordings will display here.', + description: 'Once recordings are enabled, recordings will display here.', buttonText: 'Enable recordings', buttonTo: urls.settings('project-replay'), } diff --git a/frontend/src/scenes/session-recordings/filters/OrderingFilters.tsx b/frontend/src/scenes/session-recordings/filters/OrderingFilters.tsx deleted file mode 100644 index c322dc01749ef..0000000000000 --- a/frontend/src/scenes/session-recordings/filters/OrderingFilters.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { useActions, useValues } from 'kea' -import { LemonRadio } from 'lib/lemon-ui/LemonRadio' - -import { sessionRecordingsPlaylistLogic } from '../playlist/sessionRecordingsPlaylistLogic' - -export const OrderingFilters = (): JSX.Element => { - const { orderBy } = useValues(sessionRecordingsPlaylistLogic) - const { setOrderBy } = useActions(sessionRecordingsPlaylistLogic) - - return ( - - ) -} diff --git a/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFilters.tsx b/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFilters.tsx index 9c6ce8e90fed6..d8021c5dab0e9 100644 --- a/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFilters.tsx +++ b/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFilters.tsx @@ -1,4 +1,3 @@ -import { LemonSelect } from '@posthog/lemon-ui' import clsx from 'clsx' import { useActions, useMountedLogic, useValues } from 'kea' import { DateFilter } from 'lib/components/DateFilter/DateFilter' @@ -14,7 +13,6 @@ import { cohortsModel } from '~/models/cohortsModel' import { AndOrFilterSelect } from '~/queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect' import { RecordingUniversalFilters } from '~/types' -import { sessionRecordingsPlaylistLogic } from '../playlist/sessionRecordingsPlaylistLogic' import { DurationFilter } from './DurationFilter' export const RecordingsUniversalFilters = ({ @@ -29,9 +27,6 @@ export const RecordingsUniversalFilters = ({ useMountedLogic(cohortsModel) useMountedLogic(actionsModel) - const { orderBy } = useValues(sessionRecordingsPlaylistLogic) - const { setOrderBy } = useActions(sessionRecordingsPlaylistLogic) - const durationFilter = filters.duration[0] return ( @@ -92,56 +87,6 @@ export const RecordingsUniversalFilters = ({ durationTypeFilter={durationFilter.key} pageKey="session-recordings" /> - sorted by -
- {orderBy === 'console_error_count' ? ( + {filters.order === 'console_error_count' ? ( ) : ( - + )}
diff --git a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx index f2e485f9fb315..61f59ac76efed 100644 --- a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx +++ b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylist.tsx @@ -1,5 +1,5 @@ import { IconGear } from '@posthog/icons' -import { LemonButton, Link, Spinner } from '@posthog/lemon-ui' +import { LemonButton, LemonSelect, LemonSelectSection, Link, Spinner } from '@posthog/lemon-ui' import { BindLogic, useActions, useValues } from 'kea' import { EmptyMessage } from 'lib/components/EmptyMessage/EmptyMessage' import { Playlist, PlaylistSection } from 'lib/components/Playlist/Playlist' @@ -10,7 +10,8 @@ import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { useNotebookNode } from 'scenes/notebooks/Nodes/NotebookNodeContext' import { urls } from 'scenes/urls' -import { ReplayTabs, SessionRecordingType } from '~/types' +import { RecordingsQuery } from '~/queries/schema' +import { RecordingUniversalFilters, ReplayTabs, SessionRecordingType } from '~/types' import { RecordingsUniversalFilters } from '../filters/RecordingsUniversalFilters' import { SessionRecordingPlayer } from '../player/SessionRecordingPlayer' @@ -23,6 +24,81 @@ import { import { SessionRecordingsPlaylistSettings } from './SessionRecordingsPlaylistSettings' import { SessionRecordingsPlaylistTroubleshooting } from './SessionRecordingsPlaylistTroubleshooting' +function SortedBy({ + filters, + setFilters, +}: { + filters: RecordingUniversalFilters + setFilters: (filters: Partial) => void +}): JSX.Element { + const simpleSortingOptions: LemonSelectSection = { + options: [ + { + value: 'start_time', + label: 'Latest', + }, + { + value: 'activity_score', + label: 'Activity score', + }, + { + value: 'console_error_count', + label: 'Most errors', + }, + ], + } + const detailedSortingOptions: LemonSelectSection = { + options: [ + { + label: 'Longest', + options: [ + { + value: 'duration', + label: 'Total duration', + }, + { + value: 'active_seconds', + label: 'Active duration', + }, + { + value: 'inactive_seconds', + label: 'Inactive duration', + }, + ], + }, + { + label: 'Most active', + options: [ + { + value: 'click_count', + label: 'Clicks', + }, + { + value: 'keypress_count', + label: 'Key presses', + }, + { + value: 'mouse_activity_count', + label: 'Mouse activity', + }, + ], + }, + ], + } + return ( +
+ sorted by + setFilters({ order })} + /> +
+ ) +} + export function SessionRecordingsPlaylist(props: SessionRecordingPlaylistLogicProps): JSX.Element { const logicProps: SessionRecordingPlaylistLogicProps = { ...props, @@ -91,6 +167,7 @@ export function SessionRecordingsPlaylist(props: SessionRecordingPlaylistLogicPr )} : null} notebooksHref={urls.replay(ReplayTabs.Home, filters)} title="Recordings" embedded={!!notebookNode} diff --git a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.test.ts b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.test.ts index 876ef29c38af9..34d594bbaaf83 100644 --- a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.test.ts +++ b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.test.ts @@ -1,6 +1,5 @@ import { router } from 'kea-router' import { expectLogic } from 'kea-test-utils' -import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { useMocks } from '~/mocks/jest' @@ -194,17 +193,17 @@ describe('sessionRecordingsPlaylistLogic', () => { describe('ordering', () => { afterEach(() => { - logic.actions.setOrderBy('start_time') + logic.actions.setFilters({ order: 'start_time' }) logic.actions.loadSessionRecordings() }) it('is set by setOrderBy, loads filtered results and orders the non pinned recordings', async () => { await expectLogic(logic, () => { - logic.actions.setOrderBy('console_error_count') + logic.actions.setFilters({ order: 'console_error_count' }) }) - .toDispatchActions(['setOrderBy', 'loadSessionRecordings', 'loadSessionRecordingsSuccess']) + .toDispatchActions(['loadSessionRecordings', 'loadSessionRecordingsSuccess']) .toMatchValues({ - orderBy: 'console_error_count', + filters: expect.objectContaining({ order: 'console_error_count' }), }) expect(logic.values.otherRecordings.map((r) => r.console_error_count)).toEqual([100, 50]) @@ -228,32 +227,6 @@ describe('sessionRecordingsPlaylistLogic', () => { sessionRecordings: [aRecording, offsetRecording, bRecording], }) }) - - it('uses the orderByExperiment feature flag to set the default orderBy', async () => { - featureFlagLogic.actions.setFeatureFlags([FEATURE_FLAGS.REPLAY_DEFAULT_SORT_ORDER_EXPERIMENT], { - [FEATURE_FLAGS.REPLAY_DEFAULT_SORT_ORDER_EXPERIMENT]: 'click_count', - }) - - const logic = sessionRecordingsPlaylistLogic({ - key: 'tests', - updateSearchParams: true, - }) - - logic.mount() - - expect(logic.values.orderBy).toStrictEqual('click_count') - }) - - it('falls back to the default orderBy if the feature flag is not set', async () => { - logic = sessionRecordingsPlaylistLogic({ - key: 'tests', - updateSearchParams: true, - }) - - logic.mount() - - expect(logic.values.orderBy).toStrictEqual('start_time') - }) }) describe('entityFilters', () => { @@ -526,6 +499,7 @@ describe('sessionRecordingsPlaylistLogic', () => { ], }, filter_test_accounts: false, + order: 'start_time', }, }) }) @@ -562,6 +536,7 @@ describe('sessionRecordingsPlaylistLogic', () => { ], }, filter_test_accounts: false, + order: 'start_time', }, }) }) @@ -792,18 +767,43 @@ describe('sessionRecordingsPlaylistLogic', () => { }, ], }, + order: 'console_error_count', }) - expect(result.events).toEqual([ - { - id: '$pageview', - name: '$pageview', - properties: [ - { key: '$current_url', operator: 'exact', type: 'event', value: ['https://example-url.com'] }, - ], - type: 'events', - }, - ]) + expect(result).toEqual({ + actions: [], + console_log_filters: [], + date_from: '-3d', + date_to: null, + events: [ + { + id: '$pageview', + name: '$pageview', + properties: [ + { + key: '$current_url', + operator: 'exact', + type: 'event', + value: ['https://example-url.com'], + }, + ], + type: 'events', + }, + ], + filter_test_accounts: false, + having_predicates: [ + { + key: 'duration', + operator: 'gt', + type: 'recording', + value: 1, + }, + ], + kind: 'RecordingsQuery', + operand: 'AND', + order: 'console_error_count', + properties: [], + }) }) }) @@ -831,6 +831,7 @@ describe('sessionRecordingsPlaylistLogic', () => { ], }, filter_test_accounts: false, + order: 'start_time', }) }) it('should parse even the most complex queries', () => { @@ -889,6 +890,7 @@ describe('sessionRecordingsPlaylistLogic', () => { ], }, filter_test_accounts: true, + order: 'start_time', }) }) }) diff --git a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts index 946e9579f07cd..ae44cf66c7500 100644 --- a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts +++ b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts @@ -12,7 +12,6 @@ import { isLogEntryPropertyFilter, isRecordingPropertyFilter, } from 'lib/components/UniversalFilters/utils' -import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { objectClean, objectsEqual } from 'lib/utils' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' @@ -44,6 +43,7 @@ interface Params { simpleFilters?: LegacyRecordingFilters advancedFilters?: LegacyRecordingFilters sessionRecordingId?: SessionRecordingId + order?: RecordingsQuery['order'] } interface NoEventsToMatch { @@ -77,12 +77,15 @@ export const defaultRecordingDurationFilter: RecordingDurationFilter = { operator: PropertyOperator.GreaterThan, } +export const DEFAULT_RECORDING_FILTERS_ORDER_BY = 'start_time' + export const DEFAULT_RECORDING_FILTERS: RecordingUniversalFilters = { filter_test_accounts: false, date_from: '-3d', date_to: null, filter_group: { ...DEFAULT_UNIVERSAL_GROUP_FILTER }, duration: [defaultRecordingDurationFilter], + order: DEFAULT_RECORDING_FILTERS_ORDER_BY, } const DEFAULT_PERSON_RECORDING_FILTERS: RecordingUniversalFilters = { @@ -103,6 +106,7 @@ export function convertUniversalFiltersToRecordingsQuery(universalFilters: Recor const console_log_filters: RecordingsQuery['console_log_filters'] = [] const having_predicates: RecordingsQuery['having_predicates'] = [] + const order: RecordingsQuery['order'] = universalFilters.order || DEFAULT_RECORDING_FILTERS_ORDER_BY const durationFilter = universalFilters.duration[0] if (durationFilter) { @@ -143,7 +147,7 @@ export function convertUniversalFiltersToRecordingsQuery(universalFilters: Recor return { kind: NodeKind.RecordingsQuery, - order: 'start_time', + order: order, date_from: universalFilters.date_from, date_to: universalFilters.date_to, properties, @@ -206,6 +210,7 @@ export function convertLegacyFiltersToUniversalFilters( }, ], }, + order: DEFAULT_RECORDING_FILTERS.order, } } @@ -223,6 +228,7 @@ function combineLegacyRecordingFilters( function sortRecordings(recordings: SessionRecordingType[], order: RecordingsQuery['order']): SessionRecordingType[] { const orderKey: | 'recording_duration' + | 'activity_score' | 'active_seconds' | 'inactive_seconds' | 'console_error_count' @@ -277,7 +283,6 @@ export const sessionRecordingsPlaylistLogic = kea) => ({ filters }), setShowFilters: (showFilters: boolean) => ({ showFilters }), setShowSettings: (showSettings: boolean) => ({ showSettings }), - setOrderBy: (orderBy: RecordingsQuery['order'] | null) => ({ orderBy }), resetFilters: true, setSelectedRecordingId: (id: SessionRecordingType['id'] | null) => ({ id, @@ -326,14 +331,13 @@ export const sessionRecordingsPlaylistLogic = kea { const params: RecordingsQuery = { ...convertUniversalFiltersToRecordingsQuery(values.filters), person_uuid: props.personUUID ?? '', - order: values.orderBy, limit: RECORDINGS_LIMIT, } @@ -365,7 +369,7 @@ export const sessionRecordingsPlaylistLogic = kea ({ - selectedOrderBy: [ - null as RecordingsQuery['order'] | null, - { persist: true, prefix: 'orderByExperiment' }, - { - setOrderBy: (_, { orderBy }) => orderBy, - }, - ], // If we initialise with pinned recordings then we don't show others by default // but if we go down to 0 pinned recordings then we show others showOtherRecordings: [ @@ -522,10 +519,6 @@ export const sessionRecordingsPlaylistLogic = kea { - actions.loadSessionRecordings() - }, - resetFilters: () => { actions.loadSessionRecordings() props.onFiltersChange?.(values.filters) @@ -648,13 +641,13 @@ export const sessionRecordingsPlaylistLogic = kea [s.sessionRecordings, s.hideViewedRecordings, s.pinnedRecordings, s.selectedRecordingId, s.orderBy], + (s) => [s.sessionRecordings, s.hideViewedRecordings, s.pinnedRecordings, s.selectedRecordingId, s.filters], ( sessionRecordings, hideViewedRecordings, pinnedRecordings, selectedRecordingId, - orderBy + filters ): SessionRecordingType[] => { const filteredRecordings = sessionRecordings.filter((rec) => { if (pinnedRecordings.find((pinned) => pinned.id === rec.id)) { @@ -668,7 +661,7 @@ export const sessionRecordingsPlaylistLogic = kea [s.featureFlags], - (featureFlags): RecordingsQuery['order'] | 'control' | null => - typeof featureFlags[FEATURE_FLAGS.REPLAY_DEFAULT_SORT_ORDER_EXPERIMENT] === 'string' - ? (featureFlags[FEATURE_FLAGS.REPLAY_DEFAULT_SORT_ORDER_EXPERIMENT] as - | RecordingsQuery['order'] - | 'control') - : null, - ], - orderBy: [ - (s) => [s.selectedOrderBy, s.orderByExperimentFeatureFlag], - (selectedOrderBy, orderByExperimentFeatureFlag): RecordingsQuery['order'] => { - if (selectedOrderBy) { - return selectedOrderBy - } - - if (orderByExperimentFeatureFlag === 'control' || !orderByExperimentFeatureFlag) { - return 'start_time' - } - - return orderByExperimentFeatureFlag - }, - ], }), actionToUrl(({ props, values }) => { @@ -730,7 +700,15 @@ export const sessionRecordingsPlaylistLogic = kea { - actions.loadSessionRecordings() - }, })), // NOTE: It is important this comes after urlToAction, as it will override the default behavior diff --git a/frontend/src/scenes/web-analytics/tiles/WebAnalyticsRecordings.tsx b/frontend/src/scenes/web-analytics/tiles/WebAnalyticsRecordings.tsx index d0c2c9c0b2579..ee32168dd7817 100644 --- a/frontend/src/scenes/web-analytics/tiles/WebAnalyticsRecordings.tsx +++ b/frontend/src/scenes/web-analytics/tiles/WebAnalyticsRecordings.tsx @@ -4,7 +4,7 @@ import { EmptyMessage } from 'lib/components/EmptyMessage/EmptyMessage' import { IconOpenInNew } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonSkeleton } from 'lib/lemon-ui/LemonSkeleton' -import { RecordingRow } from 'scenes/project-homepage/RecentRecordings' +import { RecordingRow } from 'scenes/project-homepage/WatchNextPanel' import { sessionRecordingsPlaylistLogic } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' diff --git a/frontend/src/types.ts b/frontend/src/types.ts index 0a28032ade19e..aabdbcb8bf99d 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -41,6 +41,7 @@ import type { InsightVizNode, Node, QueryStatus, + RecordingsQuery, } from './queries/schema' import { NodeKind } from './queries/schema' @@ -1057,6 +1058,7 @@ export interface RecordingUniversalFilters { duration: RecordingDurationFilter[] filter_test_accounts?: boolean filter_group: UniversalFiltersGroup + order?: RecordingsQuery['order'] } export type ErrorCluster = { @@ -1411,6 +1413,10 @@ export interface SessionRecordingType { * (assumes the recording was loaded from ClickHouse) * **/ ongoing?: boolean + /** + * calculated on the backend so that we can sort by it, definition may change over time + */ + activity_score?: number } export interface SessionRecordingUpdateType { diff --git a/posthog/schema.py b/posthog/schema.py index 1ba777cd25b26..65514233aa3d8 100644 --- a/posthog/schema.py +++ b/posthog/schema.py @@ -3928,6 +3928,9 @@ class SessionRecordingType(BaseModel): extra="forbid", ) active_seconds: Optional[float] = None + activity_score: Optional[float] = Field( + default=None, description="calculated on the backend so that we can sort by it, definition may change over time" + ) click_count: Optional[float] = None console_error_count: Optional[float] = None console_log_count: Optional[float] = None diff --git a/posthog/session_recordings/models/session_recording.py b/posthog/session_recordings/models/session_recording.py index 5ac777a4b8dff..dbbeea9bf42f4 100644 --- a/posthog/session_recordings/models/session_recording.py +++ b/posthog/session_recordings/models/session_recording.py @@ -61,6 +61,7 @@ class Meta: _person: Optional[Person] = None matching_events: Optional[RecordingMatchingEvents] = None ongoing: Optional[bool] = None + activity_score: Optional[float] = None # Metadata can be loaded from Clickhouse or S3 _metadata: Optional[RecordingMetadata] = None @@ -202,6 +203,7 @@ def get_or_build_from_clickhouse(team: Team, ch_recordings: list[dict]) -> "list recording.console_error_count = ch_recording.get("console_error_count", None) recording.set_start_url_from_urls(ch_recording.get("urls", None), ch_recording.get("first_url", None)) recording.ongoing = bool(ch_recording.get("ongoing", False)) + recording.activity_score = ch_recording.get("activity_score", None) recordings.append(recording) diff --git a/posthog/session_recordings/queries/session_recording_list_from_filters.py b/posthog/session_recordings/queries/session_recording_list_from_filters.py index 38e06c4e4837d..19b1a38a97743 100644 --- a/posthog/session_recordings/queries/session_recording_list_from_filters.py +++ b/posthog/session_recordings/queries/session_recording_list_from_filters.py @@ -73,7 +73,13 @@ class SessionRecordingListFromFilters: sum(s.console_log_count) as console_log_count, sum(s.console_warn_count) as console_warn_count, sum(s.console_error_count) as console_error_count, - {ongoing_selection} + {ongoing_selection}, + round(( + ((sum(s.active_milliseconds) / 1000 + sum(s.click_count) + sum(s.keypress_count) + sum(s.console_error_count))) -- intent + / + ((sum(s.mouse_activity_count) + dateDiff('SECOND', start_time, end_time) + sum(s.console_error_count) + sum(s.console_log_count) + sum(s.console_warn_count))) + * 100 + ), 2) as activity_score FROM raw_session_replay_events s WHERE {where_predicates} GROUP BY session_id @@ -100,6 +106,7 @@ def _data_to_return(results: list[Any] | None) -> list[dict[str, Any]]: "console_warn_count", "console_error_count", "ongoing", + "activity_score", ] return [ diff --git a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index a0fc5699f9ee7..cc367480e0f1e 100644 --- a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -16,7 +16,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2023-01-03 23:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2023-01-03 23:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2022-12-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2022-12-28 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2023-01-04 00:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -54,7 +55,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2023-01-03 23:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2023-01-03 23:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2022-12-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2022-12-28 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2023-01-04 00:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -92,7 +94,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2023-01-03 23:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2023-01-03 23:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2022-12-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2022-12-28 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2023-01-04 00:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -130,7 +133,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2023-01-03 23:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2023-01-03 23:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2022-12-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2022-12-28 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2023-01-04 00:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -168,7 +172,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -215,7 +220,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -253,7 +259,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -291,7 +298,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -329,7 +337,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -367,7 +376,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -405,7 +415,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -443,7 +454,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -476,7 +488,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -509,7 +522,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -542,7 +556,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -575,7 +590,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -608,7 +624,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -641,7 +658,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -674,7 +692,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -707,7 +726,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -740,7 +760,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -773,7 +794,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -806,7 +828,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-30 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -839,7 +862,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 12:41:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 12:41:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 12:46:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-12 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 12:46:00.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -872,7 +896,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 12:41:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 12:41:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 12:46:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 12:46:00.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -905,7 +930,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 12:41:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 12:41:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 12:46:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-10 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 12:46:00.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -938,7 +964,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-28 23:59:59.999999', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -971,7 +998,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-29 23:59:59.999999', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -1004,7 +1032,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -1037,7 +1066,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -1070,7 +1100,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1108,7 +1139,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1146,7 +1178,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1184,7 +1217,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -1217,7 +1251,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1255,7 +1290,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1293,7 +1329,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1336,7 +1373,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1379,7 +1417,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1422,7 +1461,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1460,7 +1500,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1513,7 +1554,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1566,7 +1608,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1604,7 +1647,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1657,7 +1701,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1710,7 +1755,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1763,7 +1809,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1816,7 +1863,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1854,7 +1902,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1892,7 +1941,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1930,7 +1980,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -1968,7 +2019,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2006,7 +2058,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2044,7 +2097,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2082,7 +2136,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2120,7 +2175,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2158,7 +2214,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2196,7 +2253,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2234,7 +2292,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2272,7 +2331,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2310,7 +2370,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2348,7 +2409,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2401,7 +2463,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2439,7 +2502,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2492,7 +2556,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2530,7 +2595,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -2568,7 +2634,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -2607,7 +2674,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -2646,7 +2714,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -2685,7 +2754,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -2718,7 +2788,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -2751,7 +2822,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -2790,7 +2862,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -2829,7 +2902,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -2868,7 +2942,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -2907,7 +2982,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -2946,7 +3022,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -2985,7 +3062,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -3024,7 +3102,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -3063,7 +3142,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), @@ -3101,7 +3181,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), @@ -3159,7 +3240,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-07-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-21 20:00:00.000000', 6, 'UTC')), 0), in(s.distinct_id, (SELECT person_distinct_ids.distinct_id AS distinct_id @@ -3223,7 +3305,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-07-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-21 20:00:00.000000', 6, 'UTC')), 0), and(in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3272,7 +3355,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-07-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-21 20:00:00.000000', 6, 'UTC')), 0), and(in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3321,7 +3405,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3374,7 +3459,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3476,7 +3562,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-07-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-21 20:00:00.000000', 6, 'UTC')), 0), in(s.distinct_id, (SELECT person_distinct_ids.distinct_id AS distinct_id @@ -3520,7 +3607,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-07-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-21 20:00:00.000000', 6, 'UTC')), 0), in(s.distinct_id, (SELECT person_distinct_ids.distinct_id AS distinct_id @@ -3564,7 +3652,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-08-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-07-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-08-21 20:00:00.000000', 6, 'UTC')), 0), in(s.distinct_id, (SELECT person_distinct_ids.distinct_id AS distinct_id @@ -3611,7 +3700,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3649,7 +3739,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3687,7 +3778,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3725,7 +3817,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3763,7 +3856,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3801,7 +3895,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3839,7 +3934,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3877,7 +3973,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -3915,7 +4012,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -3954,7 +4052,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT console_logs_log_entries.log_source_id AS log_source_id @@ -3993,7 +4092,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -4040,7 +4140,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -4087,7 +4188,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, ['session_id_one']), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4125,7 +4227,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, ['session_id_two']), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4163,7 +4266,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4216,7 +4320,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4269,7 +4374,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -4302,7 +4408,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -4335,7 +4442,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT DISTINCT events.`$session_id` AS `$session_id` @@ -4377,7 +4485,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-01 13:41:23.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-25 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), 0)) GROUP BY s.session_id @@ -4410,7 +4519,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4448,7 +4558,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4486,7 +4597,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4524,7 +4636,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4562,7 +4675,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4600,7 +4714,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4638,7 +4753,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4676,7 +4792,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4714,7 +4831,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4752,7 +4870,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4790,7 +4909,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4828,7 +4948,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4866,7 +4987,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4904,7 +5026,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4942,7 +5065,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -4980,7 +5104,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -5018,7 +5143,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -5056,7 +5182,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -5109,7 +5236,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -5147,7 +5275,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -5200,7 +5329,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -5238,7 +5368,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -5291,7 +5422,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id @@ -5329,7 +5461,8 @@ sum(s.console_log_count) AS console_log_count, sum(s.console_warn_count) AS console_warn_count, sum(s.console_error_count) AS console_error_count, - ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing + ifNull(greaterOrEquals(max(toTimeZone(s._timestamp, 'UTC')), toDateTime64('2021-01-21 19:55:00.000000', 6, 'UTC')), 0) AS ongoing, + round(multiply(divide(plus(plus(plus(divide(sum(s.active_milliseconds), 1000), sum(s.click_count)), sum(s.keypress_count)), sum(s.console_error_count)), plus(plus(plus(plus(sum(s.mouse_activity_count), dateDiff('SECOND', start_time, end_time)), sum(s.console_error_count)), sum(s.console_log_count)), sum(s.console_warn_count))), 100), 2) AS activity_score FROM session_replay_events AS s WHERE and(equals(s.team_id, 2), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), 0), ifNull(greaterOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-14 00:00:00.000000', 6, 'UTC')), 0), ifNull(lessOrEquals(toTimeZone(s.min_first_timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), 0), in(s.session_id, (SELECT events.`$session_id` AS session_id diff --git a/posthog/session_recordings/queries/test/test_session_recording_list_from_filters.py b/posthog/session_recordings/queries/test/test_session_recording_list_from_filters.py index e18cb0941d27a..55eb5034a4e7d 100644 --- a/posthog/session_recordings/queries/test/test_session_recording_list_from_filters.py +++ b/posthog/session_recordings/queries/test/test_session_recording_list_from_filters.py @@ -144,6 +144,7 @@ def test_basic_query(self): assert session_recordings == [ { "session_id": session_id_two, + "activity_score": 40.16, "team_id": self.team.pk, "distinct_id": user, "click_count": 2, @@ -162,6 +163,7 @@ def test_basic_query(self): }, { "session_id": session_id_one, + "activity_score": 61.11, "team_id": self.team.pk, "distinct_id": user, "click_count": 4, @@ -372,6 +374,7 @@ def test_basic_query_with_paging(self): assert session_recordings == [ { + "activity_score": 40.16, "session_id": session_id_two, "team_id": self.team.pk, "distinct_id": user, @@ -400,6 +403,7 @@ def test_basic_query_with_paging(self): assert session_recordings == [ { "session_id": session_id_one, + "activity_score": 61.11, "team_id": self.team.pk, "distinct_id": user, "click_count": 4, @@ -1398,6 +1402,7 @@ def test_all_sessions_recording_object_keys_with_entity_filter(self): assert session_recordings == [ { + "activity_score": 0, "session_id": session_id, "distinct_id": user, "duration": 60, @@ -4083,6 +4088,7 @@ def test_top_level_event_host_property_test_account_filter(self): assert session_recordings == [ { "active_seconds": 0.0, + "activity_score": 0.28, "click_count": 10, # in the bug this value was 10 X number of events in the session "console_error_count": 0, "console_log_count": 0, diff --git a/posthog/session_recordings/session_recording_api.py b/posthog/session_recordings/session_recording_api.py index c51d3105cadc7..6f1f272e40012 100644 --- a/posthog/session_recordings/session_recording_api.py +++ b/posthog/session_recordings/session_recording_api.py @@ -6,7 +6,7 @@ from datetime import UTC, datetime, timedelta from prometheus_client import Histogram -from typing import Any, cast +from typing import Any, cast, Optional import posthoganalytics import requests @@ -142,6 +142,7 @@ class SessionRecordingSerializer(serializers.ModelSerializer): ongoing = serializers.SerializerMethodField() viewed = serializers.SerializerMethodField() + activity_score = serializers.SerializerMethodField() def get_ongoing(self, obj: SessionRecording) -> bool: # ongoing is a custom field that we add if loading from ClickHouse @@ -151,6 +152,9 @@ def get_viewed(self, obj: SessionRecording) -> bool: # viewed is a custom field that we load from PG Sql and merge into the model return getattr(obj, "viewed", False) + def get_activity_score(self, obj: SessionRecording) -> Optional[float]: + return getattr(obj, "activity_score", None) + class Meta: model = SessionRecording fields = [ @@ -173,6 +177,7 @@ class Meta: "storage", "snapshot_source", "ongoing", + "activity_score", ] read_only_fields = [ @@ -194,6 +199,7 @@ class Meta: "storage", "snapshot_source", "ongoing", + "activity_score", ] diff --git a/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr b/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr index 550009ec55f1c..ef29f7d875751 100644 --- a/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr +++ b/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr @@ -4777,6 +4777,46 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.193 + ''' + SELECT "posthog_sessionrecordingviewed"."session_id" + FROM "posthog_sessionrecordingviewed" + WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 + AND "posthog_sessionrecordingviewed"."user_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.194 + ''' + SELECT "posthog_persondistinctid"."id", + "posthog_persondistinctid"."team_id", + "posthog_persondistinctid"."person_id", + "posthog_persondistinctid"."distinct_id", + "posthog_persondistinctid"."version", + "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_persondistinctid" + INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") + WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', + 'user10', + 'user2', + 'user3', + 'user4', + 'user5', + 'user6', + 'user7', + 'user8', + 'user9') + AND "posthog_persondistinctid"."team_id" = 2) + ''' +# --- # name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.2 ''' SELECT "posthog_organizationmembership"."id", diff --git a/posthog/session_recordings/test/test_session_recordings.py b/posthog/session_recordings/test/test_session_recordings.py index 7e6cf8e929807..47d1598e1e9a8 100644 --- a/posthog/session_recordings/test/test_session_recordings.py +++ b/posthog/session_recordings/test/test_session_recordings.py @@ -277,6 +277,7 @@ def test_session_recordings_dont_leak_teams(self) -> None: "storage": "object_storage", "viewed": False, "ongoing": True, + "activity_score": None, }, ] @@ -504,6 +505,7 @@ def test_get_single_session_recording_metadata(self): "storage": "object_storage", "snapshot_source": "web", "ongoing": None, + "activity_score": None, } def test_single_session_recording_doesnt_leak_teams(self): From da6131f6cc7a620af561f5f939024e28aa9c85dd Mon Sep 17 00:00:00 2001 From: Anirudh Pillai Date: Tue, 22 Oct 2024 09:48:39 +0100 Subject: [PATCH 03/14] feat(alerts): toggle alert threshold lines (#25700) --- .../components/Alerts/insightAlertsLogic.ts | 10 +++++--- .../lib/components/Alerts/views/Alerts.tsx | 3 +++ .../InsightQuery/utils/filtersToQueryNode.ts | 1 + .../nodes/InsightViz/InsightDisplayConfig.tsx | 2 ++ frontend/src/queries/schema.json | 7 ++++++ frontend/src/queries/schema.ts | 2 ++ frontend/src/queries/utils.ts | 7 ++++++ .../ShowAlertThresholdLinesFilter.tsx | 25 +++++++++++++++++++ .../scenes/insights/insightVizDataLogic.ts | 2 ++ frontend/src/types.ts | 1 + .../legacy_compatibility/filter_to_query.py | 1 + posthog/schema.py | 2 ++ 12 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 frontend/src/scenes/insights/EditorFilters/ShowAlertThresholdLinesFilter.tsx diff --git a/frontend/src/lib/components/Alerts/insightAlertsLogic.ts b/frontend/src/lib/components/Alerts/insightAlertsLogic.ts index 5ef92b84b8de2..f95c941eb3896 100644 --- a/frontend/src/lib/components/Alerts/insightAlertsLogic.ts +++ b/frontend/src/lib/components/Alerts/insightAlertsLogic.ts @@ -35,6 +35,7 @@ export const insightAlertsLogic = kea([ connect((props: InsightAlertsLogicProps) => ({ actions: [insightVizDataLogic(props.insightLogicProps), ['setQuery']], + values: [insightVizDataLogic(props.insightLogicProps), ['showAlertThresholdLines']], })), loaders(({ props }) => ({ @@ -62,10 +63,11 @@ export const insightAlertsLogic = kea([ selectors({ alertThresholdLines: [ - (s) => [s.alerts], - (alerts: AlertType[]): GoalLine[] => + (s) => [s.alerts, s.showAlertThresholdLines], + (alerts: AlertType[], showAlertThresholdLines: boolean): GoalLine[] => alerts.flatMap((alert) => { if ( + !showAlertThresholdLines || alert.threshold.configuration.type !== InsightThresholdType.ABSOLUTE || alert.condition.type !== AlertConditionType.ABSOLUTE_VALUE || !alert.threshold.configuration.bounds @@ -76,14 +78,14 @@ export const insightAlertsLogic = kea([ const bounds = alert.threshold.configuration.bounds const thresholds = [] - if (bounds?.upper !== undefined) { + if (bounds?.upper != null) { thresholds.push({ label: `${alert.name} Upper Threshold`, value: bounds?.upper, }) } - if (bounds?.lower !== undefined) { + if (bounds?.lower != null) { thresholds.push({ label: `${alert.name} Lower Threshold`, value: bounds?.lower, diff --git a/frontend/src/lib/components/Alerts/views/Alerts.tsx b/frontend/src/lib/components/Alerts/views/Alerts.tsx index 004a848377edb..4bb1129fd1146 100644 --- a/frontend/src/lib/components/Alerts/views/Alerts.tsx +++ b/frontend/src/lib/components/Alerts/views/Alerts.tsx @@ -3,6 +3,7 @@ import { IconCheck } from '@posthog/icons' import { Tooltip } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' +import { FeedbackNotice } from 'lib/components/FeedbackNotice' import { DetectiveHog } from 'lib/components/hedgehogs' import { ProductIntroduction } from 'lib/components/ProductIntroduction/ProductIntroduction' import { LemonTable, LemonTableColumn, LemonTableColumns } from 'lib/lemon-ui/LemonTable' @@ -104,6 +105,8 @@ export function Alerts({ alertId }: AlertsProps): JSX.Element { // TODO: add info here to sign up for alerts early access return ( <> + + {alertsSortedByState.length === 0 && !alertsLoading && ( ): TrendsF return objectCleanWithEmpty({ smoothingIntervals: filters.smoothing_intervals, showLegend: filters.show_legend, + showAlertThresholdLines: filters.show_alert_threshold_lines, hiddenLegendIndexes: hiddenLegendKeysToIndexes(filters.hidden_legend_keys), aggregationAxisFormat: filters.aggregation_axis_format, aggregationAxisPrefix: filters.aggregation_axis_prefix, diff --git a/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx b/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx index 1e72d999b1dfe..d75685def2228 100644 --- a/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx +++ b/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx @@ -14,6 +14,7 @@ import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { axisLabel } from 'scenes/insights/aggregationAxisFormat' import { PercentStackViewFilter } from 'scenes/insights/EditorFilters/PercentStackViewFilter' import { ScalePicker } from 'scenes/insights/EditorFilters/ScalePicker' +import { ShowAlertThresholdLinesFilter } from 'scenes/insights/EditorFilters/ShowAlertThresholdLinesFilter' import { ShowLegendFilter } from 'scenes/insights/EditorFilters/ShowLegendFilter' import { ValueOnSeriesFilter } from 'scenes/insights/EditorFilters/ValueOnSeriesFilter' import { InsightDateFilter } from 'scenes/insights/filters/InsightDateFilter' @@ -77,6 +78,7 @@ export function InsightDisplayConfig(): JSX.Element { ...(supportsValueOnSeries ? [{ label: () => }] : []), ...(supportsPercentStackView ? [{ label: () => }] : []), ...(hasLegend ? [{ label: () => }] : []), + { label: () => }, ], }, ] diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index 17b6c0f9d0ee7..c243cf67ba628 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -11476,6 +11476,10 @@ }, "type": "array" }, + "showAlertThresholdLines": { + "default": false, + "type": "boolean" + }, "showLabelsOnSeries": { "type": "boolean" }, @@ -11546,6 +11550,9 @@ }, "type": "object" }, + "show_alert_threshold_lines": { + "type": "boolean" + }, "show_labels_on_series": { "type": "boolean" }, diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index 2f70bfb77b41b..92b6d52f251db 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -835,6 +835,8 @@ export type TrendsFilter = { display?: TrendsFilterLegacy['display'] /** @default false */ showLegend?: TrendsFilterLegacy['show_legend'] + /** @default false */ + showAlertThresholdLines?: boolean breakdown_histogram_bin_count?: TrendsFilterLegacy['breakdown_histogram_bin_count'] // TODO: fully move into BreakdownFilter /** @default numeric */ aggregationAxisFormat?: TrendsFilterLegacy['aggregation_axis_format'] diff --git a/frontend/src/queries/utils.ts b/frontend/src/queries/utils.ts index ed9cfc8d2fcf1..f2828675a643d 100644 --- a/frontend/src/queries/utils.ts +++ b/frontend/src/queries/utils.ts @@ -301,6 +301,13 @@ export const getShowLegend = (query: InsightQueryNode): boolean | undefined => { return undefined } +export const getShowAlertThresholdLines = (query: InsightQueryNode): boolean | undefined => { + if (isTrendsQuery(query)) { + return query.trendsFilter?.showAlertThresholdLines + } + return undefined +} + export const getShowLabelsOnSeries = (query: InsightQueryNode): boolean | undefined => { if (isTrendsQuery(query)) { return query.trendsFilter?.showLabelsOnSeries diff --git a/frontend/src/scenes/insights/EditorFilters/ShowAlertThresholdLinesFilter.tsx b/frontend/src/scenes/insights/EditorFilters/ShowAlertThresholdLinesFilter.tsx new file mode 100644 index 0000000000000..17948bec59b00 --- /dev/null +++ b/frontend/src/scenes/insights/EditorFilters/ShowAlertThresholdLinesFilter.tsx @@ -0,0 +1,25 @@ +import { LemonCheckbox } from '@posthog/lemon-ui' +import { useActions, useValues } from 'kea' +import { insightLogic } from 'scenes/insights/insightLogic' + +import { insightVizDataLogic } from '../insightVizDataLogic' + +export function ShowAlertThresholdLinesFilter(): JSX.Element | null { + const { insightProps } = useValues(insightLogic) + const { showAlertThresholdLines } = useValues(insightVizDataLogic(insightProps)) + const { updateInsightFilter } = useActions(insightVizDataLogic(insightProps)) + + const toggleShowAlertThresholdLines = (): void => { + updateInsightFilter({ showAlertThresholdLines: !showAlertThresholdLines }) + } + + return ( + Show alert threshold lines} + size="small" + /> + ) +} diff --git a/frontend/src/scenes/insights/insightVizDataLogic.ts b/frontend/src/scenes/insights/insightVizDataLogic.ts index f80f24e4f74fb..aec4a1eb32ed8 100644 --- a/frontend/src/scenes/insights/insightVizDataLogic.ts +++ b/frontend/src/scenes/insights/insightVizDataLogic.ts @@ -44,6 +44,7 @@ import { getFormula, getInterval, getSeries, + getShowAlertThresholdLines, getShowLabelsOnSeries, getShowLegend, getShowPercentStackView, @@ -158,6 +159,7 @@ export const insightVizDataLogic = kea([ interval: [(s) => [s.querySource], (q) => (q ? getInterval(q) : null)], properties: [(s) => [s.querySource], (q) => (q ? q.properties : null)], samplingFactor: [(s) => [s.querySource], (q) => (q ? q.samplingFactor : null)], + showAlertThresholdLines: [(s) => [s.querySource], (q) => (q ? getShowAlertThresholdLines(q) : null)], showLegend: [(s) => [s.querySource], (q) => (q ? getShowLegend(q) : null)], showValuesOnSeries: [(s) => [s.querySource], (q) => (q ? getShowValuesOnSeries(q) : null)], showLabelOnSeries: [(s) => [s.querySource], (q) => (q ? getShowLabelsOnSeries(q) : null)], diff --git a/frontend/src/types.ts b/frontend/src/types.ts index aabdbcb8bf99d..e07f0597a2aac 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -2248,6 +2248,7 @@ export interface TrendsFilterType extends FilterType { breakdown_histogram_bin_count?: number // trends breakdown histogram bin count // frontend only + show_alert_threshold_lines?: boolean // used to show/hide horizontal lines on insight representing alert thresholds set on the insight show_legend?: boolean // used to show/hide legend next to insights graph hidden_legend_keys?: Record // used to toggle visibilities in table and legend aggregation_axis_format?: AggregationAxisFormat // a fixed format like duration that needs calculation diff --git a/posthog/hogql_queries/legacy_compatibility/filter_to_query.py b/posthog/hogql_queries/legacy_compatibility/filter_to_query.py index 585f37f387755..a8cc01a0b89fb 100644 --- a/posthog/hogql_queries/legacy_compatibility/filter_to_query.py +++ b/posthog/hogql_queries/legacy_compatibility/filter_to_query.py @@ -400,6 +400,7 @@ def _insight_filter(filter: dict): "trendsFilter": TrendsFilter( smoothingIntervals=filter.get("smoothing_intervals"), showLegend=filter.get("show_legend"), + showAlertThresholdLines=filter.get("show_alert_threshold_lines"), hiddenLegendIndexes=hidden_legend_keys_to_indexes(filter.get("hidden_legend_keys")), aggregationAxisFormat=filter.get("aggregation_axis_format"), aggregationAxisPrefix=filter.get("aggregation_axis_prefix"), diff --git a/posthog/schema.py b/posthog/schema.py index 65514233aa3d8..b77997f9f74f5 100644 --- a/posthog/schema.py +++ b/posthog/schema.py @@ -1387,6 +1387,7 @@ class TrendsFilter(BaseModel): display: Optional[ChartDisplayType] = ChartDisplayType.ACTIONS_LINE_GRAPH formula: Optional[str] = None hiddenLegendIndexes: Optional[list[int]] = None + showAlertThresholdLines: Optional[bool] = False showLabelsOnSeries: Optional[bool] = None showLegend: Optional[bool] = False showPercentStackView: Optional[bool] = False @@ -1409,6 +1410,7 @@ class TrendsFilterLegacy(BaseModel): display: Optional[ChartDisplayType] = None formula: Optional[str] = None hidden_legend_keys: Optional[dict[str, Union[bool, Any]]] = None + show_alert_threshold_lines: Optional[bool] = None show_labels_on_series: Optional[bool] = None show_legend: Optional[bool] = None show_percent_stack_view: Optional[bool] = None From d964cbe45ae44ebfad8f7d3fd69bb5fe1fa9e8c6 Mon Sep 17 00:00:00 2001 From: timgl Date: Tue, 22 Oct 2024 11:56:24 +0100 Subject: [PATCH 04/14] perf: Speed up filtering persons pt 2 (#25718) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...t_session_recording_list_from_filters.ambr | 96 +- frontend/src/queries/schema.json | 7 - frontend/src/queries/schema.ts | 2 - frontend/src/scenes/debug/Modifiers.tsx | 33 +- mypy-baseline.txt | 5 - .../api/test/__snapshots__/test_query.ambr | 34 +- posthog/hogql/ast.py | 12 + posthog/hogql/database/schema/persons.py | 132 +- .../test/__snapshots__/test_persons.ambr | 436 ++++ .../test_session_replay_events.ambr | 53 +- .../database/schema/test/test_persons.py | 208 ++ .../schema/test/test_session_replay_events.py | 21 - .../test_person_where_clause_extractor.py | 44 +- .../schema/util/where_clause_extractor.py | 70 +- posthog/hogql/modifiers.py | 7 - posthog/hogql/query.py | 4 + .../hogql/test/__snapshots__/test_query.ambr | 66 +- posthog/hogql/test/test_modifiers.py | 68 - posthog/hogql/test/test_printer.py | 108 +- .../test/__snapshots__/test_lazy_tables.ambr | 18 +- .../__snapshots__/test_property_types.ambr | 6 +- ...actors_property_taxonomy_query_runner.ambr | 39 +- .../test/__snapshots__/test_funnel.ambr | 92 +- .../test_funnel_correlation.ambr | 310 ++- .../test_funnel_correlation_actors.ambr | 115 +- .../test_funnel_correlation_actors_udf.ambr | 242 +- .../test_funnel_correlation_udf.ambr | 310 ++- .../test/__snapshots__/test_funnel_udf.ambr | 92 +- .../test_insight_actors_query_runner.ambr | 183 +- .../test_lifecycle_query_runner.ambr | 16 +- .../test_paths_query_runner_ee.ambr | 136 +- .../test_retention_query_runner.ambr | 11 +- .../test/test_insight_actors_query_runner.py | 35 +- .../test/__snapshots__/test_trends.ambr | 414 ++- .../__snapshots__/test_trends_persons.ambr | 10 - .../test_actors_query_runner.ambr | 76 + .../test_error_tracking_query_runner.ambr | 357 +-- .../hogql_queries/test/test_query_runner.py | 8 +- posthog/models/person/util.py | 2 +- posthog/schema.py | 8 - ...t_session_recording_list_from_filters.ambr | 254 +- .../session_recording_api.py | 39 +- .../test_session_recordings.ambr | 2266 +++++++++-------- 43 files changed, 3407 insertions(+), 3038 deletions(-) create mode 100644 posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr create mode 100644 posthog/hogql/database/schema/test/test_persons.py diff --git a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index c21b2882da6ed..165204b598715 100644 --- a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -61,12 +61,18 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_8)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal, person.id AS id + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_8)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, %(hogql_val_9)s), ''), 'null'), '^"|"$', ''), %(hogql_val_10)s), 0))))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_9)s), person.version), plus(now64(6, %(hogql_val_10)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) - WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_12)s), now64(6, %(hogql_val_13)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_15)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_16)s), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_11)s), person.version), plus(now64(6, %(hogql_val_12)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_13)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), now64(6, %(hogql_val_15)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_16)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_17)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_18)s), 0)) GROUP BY events.`$session_id` HAVING 1))) GROUP BY s.session_id @@ -105,12 +111,18 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_8)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal, person.id AS id + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_8)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, %(hogql_val_9)s), ''), 'null'), '^"|"$', ''), %(hogql_val_10)s), 0))))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_9)s), person.version), plus(now64(6, %(hogql_val_10)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) - WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_12)s), now64(6, %(hogql_val_13)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_15)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_16)s), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_11)s), person.version), plus(now64(6, %(hogql_val_12)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_13)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), now64(6, %(hogql_val_15)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_16)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_17)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_18)s), 0)) GROUP BY events.`$session_id` HAVING 1))) GROUP BY s.session_id @@ -539,14 +551,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email + (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -627,14 +642,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email + (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -715,14 +733,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email + (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -803,14 +824,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email + (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index c243cf67ba628..20a58c6d3d9fa 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -6533,13 +6533,6 @@ "enum": ["auto", "legacy_null_as_string", "legacy_null_as_null", "disabled"], "type": "string" }, - "optimizeJoinedFilters": { - "type": "boolean" - }, - "personsArgMaxVersion": { - "enum": ["auto", "v1", "v2"], - "type": "string" - }, "personsJoinMode": { "enum": ["inner", "left"], "type": "string" diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index 92b6d52f251db..c8a898136bd39 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -227,10 +227,8 @@ export interface HogQLQueryModifiers { | 'person_id_no_override_properties_on_events' | 'person_id_override_properties_on_events' | 'person_id_override_properties_joined' - personsArgMaxVersion?: 'auto' | 'v1' | 'v2' inCohortVia?: 'auto' | 'leftjoin' | 'subquery' | 'leftjoin_conjoined' materializationMode?: 'auto' | 'legacy_null_as_string' | 'legacy_null_as_null' | 'disabled' - optimizeJoinedFilters?: boolean dataWarehouseEventsModifiers?: DataWarehouseEventsModifier[] debug?: boolean s3TableUseInvalidColumns?: boolean diff --git a/frontend/src/scenes/debug/Modifiers.tsx b/frontend/src/scenes/debug/Modifiers.tsx index ee4f0175a724c..b75c4a185a087 100644 --- a/frontend/src/scenes/debug/Modifiers.tsx +++ b/frontend/src/scenes/debug/Modifiers.tsx @@ -47,22 +47,7 @@ export function Modifiers; modifiers? value={query.modifiers?.personsOnEventsMode ?? response?.modifiers?.personsOnEventsMode} /> - -
Persons ArgMax:
- - setQuery({ - ...query, - modifiers: { ...query.modifiers, personsArgMaxVersion: value }, - }) - } - value={query.modifiers?.personsArgMaxVersion ?? response?.modifiers?.personsArgMaxVersion} - /> -
+
In Cohort Via:
; modifiers? value={query.modifiers?.materializationMode ?? response?.modifiers?.materializationMode} />
- -
Optimize joined filters:
- - setQuery({ - ...query, - modifiers: { ...query.modifiers, optimizeJoinedFilters: value }, - }) - } - value={query.modifiers?.optimizeJoinedFilters ?? response?.modifiers?.optimizeJoinedFilters} - /> -
Property Groups:
Self: return self def lazy_select(self, table_to_add: LazyTableToAdd, context, node): + # assume that if the select_from is not persons table we're doing a join + try: + is_join = not isinstance(node.select_from.type.table, PersonsTable) + except AttributeError: + is_join = False if self.filter is not None: - return select_from_persons_table(table_to_add, context, node, filter=clone_expr(self.filter, True)) - return select_from_persons_table(table_to_add, context, node) + return select_from_persons_table( + table_to_add, context, node, filter=clone_expr(self.filter, True), is_join=is_join + ) + return select_from_persons_table(table_to_add, context, node, is_join=is_join) def to_printed_clickhouse(self, context): return "person" diff --git a/posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr b/posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr new file mode 100644 index 0000000000000..895f7d27f5942 --- /dev/null +++ b/posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr @@ -0,0 +1,436 @@ +# serializer version: 1 +# name: TestPersonOptimization.test_alias + ''' + SELECT an_alias.id AS id, + an_alias.properties___email AS email + FROM + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS an_alias + WHERE ifNull(equals(an_alias.`properties___$some_prop`, 'something'), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_array_filter + ''' + SELECT persons.id AS id, + persons.properties AS properties + FROM + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, + argMax(person.properties, person.version) AS properties + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(in(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), ['something']), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + WHERE ifNull(in(persons.`properties___$some_prop`, ['something']), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_events_filter + ''' + SELECT replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, 'email'), ''), 'null'), '^"|"$', '') AS email + FROM events + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'something'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(events.team_id, 2), ifNull(equals(events__person.`properties___$some_prop`, 'something'), 0)) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_join + ''' + SELECT persons.id AS id, + persons.properties___email AS email + FROM + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, + argMax(person.id, person.version) AS persons___id + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'something'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + LEFT JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons__pdi ON equals(persons.persons___id, persons__pdi.person_id) + WHERE and(ifNull(equals(persons.`properties___$some_prop`, 'something'), 0), ifNull(equals(persons__pdi.distinct_id, '1'), 0)) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_join.1 + ''' + SELECT persons.id AS id, + persons.properties___email AS email + FROM + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, + argMax(person.id, person.version) AS persons___id + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'something'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'whatevs'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + LEFT JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons__pdi ON equals(persons.persons___id, persons__pdi.person_id) + WHERE or(and(ifNull(equals(persons.`properties___$some_prop`, 'something'), 0), ifNull(equals(persons__pdi.distinct_id, '1'), 0)), ifNull(equals(persons.`properties___$some_prop`, 'whatevs'), 0)) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_left_join_with_negation + ''' + SELECT persons.id AS id, + persons.`properties___$some_prop` AS `$some_prop` + FROM events + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), persons.id) + WHERE and(equals(events.team_id, 2), ifNull(notEquals(persons.`properties___$some_prop`, 'something'), 1)) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_left_join_with_negation.1 + ''' + SELECT persons.id AS id, + persons.`properties___$some_prop` AS `$some_prop` + FROM events + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), persons.id) + WHERE and(equals(events.team_id, 2), ifNull(notEquals(persons.`properties___$some_prop`, 'something'), 1)) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_left_join_with_negation.2 + ''' + SELECT persons.id AS id, + persons.`properties___$some_prop` AS `$some_prop` + FROM events + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), persons.id) + WHERE and(equals(events.team_id, 2), ifNull(not(match(persons.`properties___$some_prop`, '^something$')), isNotNull(persons.`properties___$some_prop`) + or isNotNull('^something$'))) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_left_join_with_negation.3 + ''' + SELECT persons.id AS id, + persons.`properties___$some_prop` AS `$some_prop` + FROM events + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), persons.id) + WHERE and(equals(events.team_id, 2), not(ifNull(equals(persons.`properties___$some_prop`, 'something'), 0))) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_left_join_with_negation.4 + ''' + SELECT persons.id AS id, + persons.`properties___$some_prop` AS `$some_prop` + FROM events + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), persons.id) + WHERE and(equals(events.team_id, 2), not(ifNull(equals(persons.`properties___$some_prop`, 'something'), 0))) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_limit_and_order_by + ''' + SELECT persons.id AS id, + persons.`properties___$some_prop` AS `$some_prop` + FROM + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + ORDER BY persons.created_at ASC + LIMIT 3 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_limit_and_order_by.1 + ''' + SELECT persons.id AS id, + persons.`properties___$some_prop` AS `$some_prop` + FROM + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + ORDER BY persons.created_at ASC + LIMIT 2 + OFFSET 1 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_simple_filter + ''' + SELECT persons.id AS id, + persons.properties AS properties + FROM + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, + argMax(person.properties, person.version) AS properties + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'something'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + WHERE ifNull(equals(persons.`properties___$some_prop`, 'something'), 0) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_subquery_alias + ''' + SELECT source.person_id AS person_id, + persons.id AS id + FROM + (SELECT if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id) AS person_id + FROM events + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + WHERE equals(events.team_id, 2)) AS source + INNER JOIN + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(notEquals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'something'), 1))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(source.person_id, persons.id) + WHERE ifNull(notEquals(persons.`properties___$some_prop`, 'something'), 1) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestPersonOptimization.test_versions_handled_correctly + ''' + SELECT persons.id AS id, + persons.`properties___$some_prop` AS `$some_prop` + FROM + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + ORDER BY persons.created_at ASC + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- diff --git a/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr b/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr index aa990fe2c7b66..ac17c9db9f049 100644 --- a/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr +++ b/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr @@ -188,14 +188,17 @@ WHERE equals(events.team_id, 2)) AS raw_session_replay_events__events ON equals(session_replay_events.session_id, raw_session_replay_events__events.`$session_id`) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', '') AS properties___person_property + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', ''), person.version) AS properties___person_property FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__events__person ON equals(raw_session_replay_events__events.raw_session_replay_events__events___person_id, raw_session_replay_events__events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'person_property'), ''), 'null'), '^"|"$', ''), 'false'), 'true'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__events__person ON equals(raw_session_replay_events__events.raw_session_replay_events__events___person_id, raw_session_replay_events__events__person.id) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(ifNull(raw_session_replay_events__events__person.properties___person_property, 'false'), 'true'), 0)) ORDER BY session_replay_events.session_id ASC LIMIT 100 SETTINGS readonly=2, @@ -244,7 +247,13 @@ LEFT JOIN (SELECT person.id AS id FROM person - WHERE equals(person.team_id, 2) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), equals(persons_where_optimization.id, toUUIDOrNull('00000000-0000-4000-8000-000000000000')))))) GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(raw_session_replay_events__pdi__person.id, toUUIDOrNull('00000000-0000-4000-8000-000000000000')), 0)) @@ -273,14 +282,11 @@ HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', '') AS properties___person_property + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', ''), person.version) AS properties___person_property FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) WHERE equals(session_replay_events.team_id, 2) GROUP BY session_replay_events.session_id ORDER BY session_replay_events.session_id ASC @@ -308,14 +314,17 @@ HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', '') AS properties___person_property + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', ''), person.version) AS properties___person_property FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', ''), 'true'), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'person_property'), ''), 'null'), '^"|"$', ''), 'true'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(raw_session_replay_events__pdi__person.properties___person_property, 'true'), 0)) GROUP BY session_replay_events.session_id ORDER BY session_replay_events.session_id ASC diff --git a/posthog/hogql/database/schema/test/test_persons.py b/posthog/hogql/database/schema/test/test_persons.py new file mode 100644 index 0000000000000..4cb7640830ba2 --- /dev/null +++ b/posthog/hogql/database/schema/test/test_persons.py @@ -0,0 +1,208 @@ +from posthog.hogql.parser import parse_select +from posthog.hogql.query import execute_hogql_query +from posthog.test.base import ( + APIBaseTest, + ClickhouseTestMixin, + _create_person, + _create_event, + snapshot_clickhouse_queries, +) +from posthog.models.person.util import create_person +from datetime import datetime + + +class TestPersonOptimization(ClickhouseTestMixin, APIBaseTest): + """ + Mostly tests for the optimization of pre-filtering before aggregating. See https://github.com/PostHog/posthog/pull/25604 + """ + + def setUp(self): + super().setUp() + self.first_person = _create_person( + team_id=self.team.pk, + distinct_ids=["1"], + properties={"$some_prop": "something", "$another_prop": "something1"}, + created_at=datetime(2024, 1, 1, 12), + ) + self.second_person = _create_person( + team_id=self.team.pk, + properties={"$some_prop": "ifwematcholdversionsthiswillmatch", "$another_prop": "something2"}, + distinct_ids=["2"], + version=1, + created_at=datetime(2024, 1, 1, 13), + ) + # update second_person with the correct prop + create_person( + team_id=self.team.pk, + uuid=str(self.second_person.uuid), + properties={"$some_prop": "something", "$another_prop": "something2"}, + created_at=datetime(2024, 1, 1, 13), + version=2, + ) + self.third_person = _create_person( + team_id=self.team.pk, + distinct_ids=["3"], + properties={"$some_prop": "not something", "$another_prop": "something3"}, + created_at=datetime(2024, 1, 1, 14), + ) + # deleted + self.deleted_person = _create_person( + team_id=self.team.pk, + properties={"$some_prop": "ifwematcholdversionsthiswillmatch", "$another_prop": "something2"}, + distinct_ids=["deleted"], + created_at=datetime(2024, 1, 1, 13), + version=1, + ) + create_person(team_id=self.team.pk, uuid=str(self.deleted_person.uuid), version=2, is_deleted=True) + + @snapshot_clickhouse_queries + def test_simple_filter(self): + response = execute_hogql_query( + parse_select("select id, properties from persons where properties.$some_prop = 'something'"), + self.team, + ) + assert len(response.results) == 2 + + @snapshot_clickhouse_queries + def test_array_filter(self): + response = execute_hogql_query( + parse_select("select id, properties from persons where properties.$some_prop IN ['something']"), + self.team, + ) + assert len(response.results) == 2 + + @snapshot_clickhouse_queries + def test_alias(self): + # This isn't supported by the WhereClauseExtractor yet + response = execute_hogql_query( + parse_select( + "select id, an_alias.properties.email from persons as an_alias where an_alias.properties.$some_prop = 'something'" + ), + self.team, + ) + assert len(response.results) == 2 + + @snapshot_clickhouse_queries + def test_subquery_alias(self): + _create_event(event="$pageview", distinct_id="3", team=self.team) + response = execute_hogql_query( + parse_select( + """ + select person_id, persons.id from ( + select + person_id + from events + ) as source + inner join persons ON (source.person_id=persons.id) + where notEquals(persons.properties.$some_prop, 'something') + """ + ), + self.team, + ) + assert len(response.results) == 1 + + @snapshot_clickhouse_queries + def test_join(self): + response = execute_hogql_query( + parse_select( + "select id, properties.email from persons where properties.$some_prop = 'something' and pdi.distinct_id = '1'" + ), + self.team, + ) + assert len(response.results) == 1 + + # more complex query + response = execute_hogql_query( + parse_select(""" + select id, properties.email from persons where + (properties.$some_prop = 'something' and pdi.distinct_id = '1') OR + (properties.$some_prop = 'whatevs') + """), + self.team, + ) + assert len(response.results) == 1 + + @snapshot_clickhouse_queries + def test_events_filter(self): + _create_event(event="$pageview", distinct_id="1", team=self.team) + response = execute_hogql_query( + parse_select("select properties.email from events where person.properties.$some_prop = 'something'"), + self.team, + ) + assert len(response.results) == 1 + + @snapshot_clickhouse_queries + def test_versions_handled_correctly(self): + # Tests whether we correctly grab $some_prop from the person with the highest version + response = execute_hogql_query( + parse_select("select id, properties.$some_prop from persons ORDER BY created_at limit 100"), + self.team, + ) + assert len(response.results) == 3 + + @snapshot_clickhouse_queries + def test_left_join_with_negation(self): + _create_event(event="$pageview", distinct_id="1", team=self.team) + _create_event(event="$pageview", distinct_id="2", team=self.team) + _create_event(event="$pageview", distinct_id="3", team=self.team) + response = execute_hogql_query( + parse_select( + "select id, persons.properties.$some_prop from events left join persons ON (events.person_id=persons.id) where notEquals(persons.properties.$some_prop, 'something')" + ), + self.team, + ) + assert len(response.results) == 1 + assert [x[0] for x in response.results] == [ + self.third_person.uuid, + ] + response = execute_hogql_query( + parse_select( + "select id, persons.properties.$some_prop from events left join persons ON (events.person_id=persons.id) where persons.properties.$some_prop != 'something'" + ), + self.team, + ) + assert len(response.results) == 1 + + response = execute_hogql_query( + parse_select( + "select id, persons.properties.$some_prop from events left join persons ON (events.person_id=persons.id) where persons.properties.$some_prop !~ '^something$'" + ), + self.team, + ) + assert len(response.results) == 1 + + response = execute_hogql_query( + parse_select( + "select id, persons.properties.$some_prop from events left join persons ON (events.person_id=persons.id) where not (persons.properties.$some_prop = 'something')" + ), + self.team, + ) + assert len(response.results) == 1 + + response = execute_hogql_query( + parse_select( + "select id, persons.properties.$some_prop from events left join persons ON (events.person_id=persons.id) where not persons.properties.$some_prop = 'something'" + ), + self.team, + ) + assert len(response.results) == 1 + + @snapshot_clickhouse_queries + def test_limit_and_order_by(self): + response = execute_hogql_query( + parse_select("select id, properties.$some_prop from persons ORDER BY created_at limit 3"), + self.team, + ) + assert len(response.results) == 3 + assert [x[0] for x in response.results] == [ + self.first_person.uuid, + self.second_person.uuid, + self.third_person.uuid, + ] + + response = execute_hogql_query( + parse_select("select id, properties.$some_prop from persons ORDER BY created_at limit 2, 1"), + self.team, + ) + assert len(response.results) == 2 + assert [x[0] for x in response.results] == [self.second_person.uuid, self.third_person.uuid] diff --git a/posthog/hogql/database/schema/test/test_session_replay_events.py b/posthog/hogql/database/schema/test/test_session_replay_events.py index cf74a0f66d182..8b396a3b44691 100644 --- a/posthog/hogql/database/schema/test/test_session_replay_events.py +++ b/posthog/hogql/database/schema/test/test_session_replay_events.py @@ -9,7 +9,6 @@ from posthog.hogql.query import execute_hogql_query from posthog.models.event.sql import TRUNCATE_EVENTS_TABLE_SQL from posthog.models.utils import uuid7 -from posthog.schema import HogQLQueryModifiers from posthog.session_recordings.queries.test.session_replay_sql import produce_replay_summary from posthog.session_recordings.sql.session_replay_event_sql import TRUNCATE_SESSION_REPLAY_EVENTS_TABLE_SQL from posthog.test.base import ( @@ -351,25 +350,6 @@ def test_select_person_property(self): ("session_with_person_with_person_property", "true"), ] - @snapshot_clickhouse_queries - def test_select_where_person_property_without_join_optimization(self): - response = execute_hogql_query( - parse_select( - """ - select session_id, any(person.properties.person_property) - from raw_session_replay_events - where person.properties.person_property = 'true' - group by session_id order by session_id asc - """, - ), - self.team, - modifiers=HogQLQueryModifiers(optimizeJoinedFilters=False), - ) - - assert response.results == [ - ("session_with_person_with_person_property", "true"), - ] - @snapshot_clickhouse_queries def test_select_where_person_property_with_join_optimization(self): response = execute_hogql_query( @@ -382,7 +362,6 @@ def test_select_where_person_property_with_join_optimization(self): """, ), self.team, - modifiers=HogQLQueryModifiers(optimizeJoinedFilters=True), ) assert response.results == [ diff --git a/posthog/hogql/database/schema/util/test/test_person_where_clause_extractor.py b/posthog/hogql/database/schema/util/test/test_person_where_clause_extractor.py index 252382d545b40..f805ec14ed79c 100644 --- a/posthog/hogql/database/schema/util/test/test_person_where_clause_extractor.py +++ b/posthog/hogql/database/schema/util/test/test_person_where_clause_extractor.py @@ -1,4 +1,4 @@ -from typing import Union, Optional +from typing import Union, Optional, cast from posthog.hogql import ast from posthog.hogql.context import HogQLContext @@ -7,7 +7,7 @@ from posthog.hogql.printer import prepare_ast_for_printing, print_ast from posthog.hogql.visitor import clone_expr, CloningVisitor from posthog.models import PropertyDefinition -from posthog.schema import PersonsOnEventsMode, PersonsArgMaxVersion +from posthog.schema import PersonsOnEventsMode from posthog.test.base import ClickhouseTestMixin, APIBaseTest @@ -40,9 +40,7 @@ class TestPersonWhereClauseExtractor(ClickhouseTestMixin, APIBaseTest): def prep_context(self): team = self.team modifiers = create_default_modifiers_for_team(team) - modifiers.optimizeJoinedFilters = True modifiers.personsOnEventsMode = PersonsOnEventsMode.DISABLED - modifiers.personsArgMaxVersion = PersonsArgMaxVersion.V1 return HogQLContext( team_id=team.pk, team=team, @@ -64,9 +62,10 @@ def get_clause(self, query: str): assert new_select.select_from.next_join.alias == "events__pdi" assert new_select.select_from.next_join.next_join.alias == "events__pdi__person" - where = new_select.select_from.next_join.next_join.table.where - if where is None: + outer_where = new_select.select_from.next_join.next_join.table.where + if outer_where is None: return None + where = cast(ast.SelectQuery, cast(ast.CompareOperation, cast(ast.And, outer_where).exprs[0]).right).where where = RemoveHiddenAliases().visit(where) assert isinstance(where, ast.Expr) @@ -79,12 +78,12 @@ def print_query(self, query: str): def test_person_properties(self): actual = self.get_clause("SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com'") expected = _expr("properties.email = 'jimmy@posthog.com'") - assert actual == expected + assert expected in actual.exprs def test_person_properties_andor_1(self): actual = self.get_clause("SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' or false") expected = _expr("properties.email = 'jimmy@posthog.com'") - assert actual == expected + assert expected in actual.exprs def test_person_properties_andor_2(self): actual = self.get_clause("SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' and false") @@ -95,28 +94,28 @@ def test_person_properties_andor_3(self): "SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' and person.properties.email = 'timmy@posthog.com'" ) expected = _expr("properties.email = 'jimmy@posthog.com' and properties.email = 'timmy@posthog.com'") - assert actual == expected + assert expected in actual.exprs def test_person_properties_andor_4(self): actual = self.get_clause( "SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' or person.properties.email = 'timmy@posthog.com'" ) expected = _expr("properties.email = 'jimmy@posthog.com' or properties.email = 'timmy@posthog.com'") - assert actual == expected + assert expected in actual.exprs def test_person_properties_andor_5(self): actual = self.get_clause( "SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' or (1 and person.properties.email = 'timmy@posthog.com')" ) expected = _expr("properties.email = 'jimmy@posthog.com' or properties.email = 'timmy@posthog.com'") - assert actual == expected + assert expected in actual.exprs def test_person_properties_andor_6(self): actual = self.get_clause( "SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' or (0 or person.properties.email = 'timmy@posthog.com')" ) expected = _expr("properties.email = 'jimmy@posthog.com' or properties.email = 'timmy@posthog.com'") - assert actual == expected + assert expected in actual.exprs def test_person_properties_andor_7(self): actual = self.get_clause( @@ -129,7 +128,7 @@ def test_person_properties_andor_8(self): "SELECT * FROM events WHERE event == '$pageview' and person.properties.email = 'jimmy@posthog.com'" ) expected = _expr("properties.email = 'jimmy@posthog.com'") - assert actual == expected + assert expected in actual.exprs def test_person_properties_andor_9(self): actual = self.get_clause( @@ -148,21 +147,26 @@ def test_person_properties_andor_11(self): "SELECT * FROM events WHERE properties.email = 'bla@posthog.com' and person.properties.email = 'jimmy@posthog.com'" ) expected = _expr("properties.email = 'jimmy@posthog.com'") - assert actual == expected + assert expected in actual.exprs + + def test_person_array(self): + actual = self.get_clause("SELECT * FROM events WHERE person.properties.email IN ['jimmy@posthog.com']") + expected = _expr("properties.email IN ['jimmy@posthog.com']") + assert expected in actual.exprs def test_person_properties_function_calls(self): actual = self.get_clause( "SELECT * FROM events WHERE properties.email = 'bla@posthog.com' and toString(person.properties.email) = 'jimmy@posthog.com'" ) expected = _expr("toString(properties.email) = 'jimmy@posthog.com'") - assert actual == expected + assert expected in actual.exprs def test_person_properties_function_call_args(self): actual = self.get_clause( "SELECT * FROM events WHERE properties.email = 'bla@posthog.com' and substring(person.properties.email, 10) = 'jimmy@posthog.com'" ) expected = _expr("substring(properties.email, 10) = 'jimmy@posthog.com'") - assert actual == expected + assert expected in actual.exprs def test_person_properties_function_call_args_complex(self): actual = self.get_clause( @@ -179,6 +183,12 @@ def test_boolean(self): ) actual = self.print_query("SELECT * FROM events WHERE person.properties.person_boolean = false") assert ( - f"FROM person WHERE and(equals(person.team_id, {self.team.id}), ifNull(equals(transform(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties" + f"ifNull(equals(transform(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties" in actual ) + + def test_id_in(self): + actual = self.get_clause( + "SELECT * FROM events WHERE in(person.id, (SELECT person_id FROM (SELECT argMax(raw_person_distinct_ids.person_id, raw_person_distinct_ids.version) AS person_id, raw_person_distinct_ids.distinct_id AS distinct_id FROM raw_person_distinct_ids GROUP BY raw_person_distinct_ids.distinct_id HAVING equals(argMax(raw_person_distinct_ids.is_deleted, raw_person_distinct_ids.version), 0)) AS person_distinct_ids WHERE ilike(distinct_id, '%test%')))" + ) + assert actual is None diff --git a/posthog/hogql/database/schema/util/where_clause_extractor.py b/posthog/hogql/database/schema/util/where_clause_extractor.py index 9ed7be296f483..b87906a9af519 100644 --- a/posthog/hogql/database/schema/util/where_clause_extractor.py +++ b/posthog/hogql/database/schema/util/where_clause_extractor.py @@ -6,7 +6,8 @@ from posthog.hogql.ast import CompareOperationOp, ArithmeticOperationOp from posthog.hogql.context import HogQLContext from posthog.hogql.database.models import DatabaseField, LazyJoinToAdd, LazyTableToAdd -from posthog.hogql.errors import NotImplementedError +from posthog.hogql.errors import NotImplementedError, QueryError +from posthog.hogql.functions.mapping import HOGQL_COMPARISON_MAPPING from posthog.hogql.visitor import clone_expr, CloningVisitor, Visitor, TraversingVisitor @@ -43,13 +44,15 @@ class WhereClauseExtractor(CloningVisitor): clear_types: bool = False clear_locations: bool = False capture_timestamp_comparisons: bool = False # implement handle_timestamp_comparison if setting this to True + is_join: bool = False tracked_tables: list[ast.LazyTable | ast.LazyJoin] tombstone_string: str - def __init__(self, context: HogQLContext): + def __init__(self, context: HogQLContext, is_join: Optional[bool] = False): super().__init__() self.context = context self.tracked_tables = [] + self.is_join = is_join or False # A constant with this string will be used to escape early if we can't handle the query self.tombstone_string = ( "__TOMBSTONE__" + ("".join(random.choices(string.ascii_uppercase + string.digits, k=10))) + "__" @@ -110,10 +113,18 @@ def visit_compare_operation(self, node: ast.CompareOperation) -> ast.Expr: if result: return result + # if the comparison is negative and it's a join, we don't want to filter down as the outer query needs to be able to filter down results + if self.is_join and node.op in ast.NEGATED_COMPARE_OPS: + return ast.Constant(value=True) + # Check if any of the fields are a field on our requested table if len(self.tracked_tables) > 0: left = self.visit(node.left) right = self.visit(node.right) + + # Too complicated + if isinstance(node.right, ast.SelectQuery): + return ast.Constant(value=True) if has_tombstone(left, self.tombstone_string) or has_tombstone(right, self.tombstone_string): return ast.Constant(value=self.tombstone_string) return ast.CompareOperation(op=node.op, left=left, right=right) @@ -129,6 +140,8 @@ def visit_arithmetic_operation(self, node: ast.ArithmeticOperation) -> ast.Expr: return ast.Constant(value=True) def visit_not(self, node: ast.Not) -> ast.Expr: + if self.is_join: + return ast.Constant(value=True) response = self.visit(node.expr) if has_tombstone(response, self.tombstone_string): return ast.Constant(value=self.tombstone_string) @@ -139,43 +152,25 @@ def visit_call(self, node: ast.Call) -> ast.Expr: return self.visit_and(ast.And(exprs=node.args)) elif node.name == "or": return self.visit_or(ast.Or(exprs=node.args)) - elif node.name == "greaterOrEquals": - return self.visit_compare_operation( - ast.CompareOperation(op=CompareOperationOp.GtEq, left=node.args[0], right=node.args[1]) - ) - elif node.name == "greater": - return self.visit_compare_operation( - ast.CompareOperation(op=CompareOperationOp.Gt, left=node.args[0], right=node.args[1]) - ) - elif node.name == "lessOrEquals": - return self.visit_compare_operation( - ast.CompareOperation(op=CompareOperationOp.LtEq, left=node.args[0], right=node.args[1]) - ) - elif node.name == "less": - return self.visit_compare_operation( - ast.CompareOperation(op=CompareOperationOp.Lt, left=node.args[0], right=node.args[1]) - ) - elif node.name == "equals": - return self.visit_compare_operation( - ast.CompareOperation(op=CompareOperationOp.Eq, left=node.args[0], right=node.args[1]) - ) - elif node.name == "like": - return self.visit_compare_operation( - ast.CompareOperation(op=CompareOperationOp.Like, left=node.args[0], right=node.args[1]) - ) - elif node.name == "notLike": - return self.visit_compare_operation( - ast.CompareOperation(op=CompareOperationOp.NotLike, left=node.args[0], right=node.args[1]) - ) - elif node.name == "ilike": - return self.visit_compare_operation( - ast.CompareOperation(op=CompareOperationOp.ILike, left=node.args[0], right=node.args[1]) - ) - elif node.name == "notIlike": + elif node.name == "not": + if self.is_join: + return ast.Constant(value=True) + + elif node.name in HOGQL_COMPARISON_MAPPING: + op = HOGQL_COMPARISON_MAPPING[node.name] + if len(node.args) != 2: + raise QueryError(f"Comparison '{node.name}' requires exactly two arguments") + # We do "cleverer" logic with nullable types in visit_compare_operation return self.visit_compare_operation( - ast.CompareOperation(op=CompareOperationOp.NotILike, left=node.args[0], right=node.args[1]) + ast.CompareOperation( + left=node.args[0], + right=node.args[1], + op=op, + ) ) + args = [self.visit(arg) for arg in node.args] + if any(has_tombstone(arg, self.tombstone_string) for arg in args): return ast.Constant(value=self.tombstone_string) return ast.Call(name=node.name, args=args) @@ -459,6 +454,9 @@ def visit_alias(self, node: ast.Alias) -> bool: def visit_tuple(self, node: ast.Tuple) -> bool: return all(self.visit(arg) for arg in node.exprs) + def visit_array(self, node: ast.Tuple) -> bool: + return all(self.visit(arg) for arg in node.exprs) + def is_simple_timestamp_field_expression(expr: ast.Expr, context: HogQLContext, tombstone_string: str) -> bool: result = IsSimpleTimestampFieldExpressionVisitor(context, tombstone_string).visit(expr) diff --git a/posthog/hogql/modifiers.py b/posthog/hogql/modifiers.py index 42cb7f2f04433..710a3b3b5befb 100644 --- a/posthog/hogql/modifiers.py +++ b/posthog/hogql/modifiers.py @@ -7,7 +7,6 @@ HogQLQueryModifiers, InCohortVia, MaterializationMode, - PersonsArgMaxVersion, BounceRatePageViewMode, PropertyGroupsMode, SessionTableVersion, @@ -61,18 +60,12 @@ def set_default_modifier_values(modifiers: HogQLQueryModifiers, team: "Team"): if modifiers.personsOnEventsMode is None: modifiers.personsOnEventsMode = team.person_on_events_mode_flag_based_default - if modifiers.personsArgMaxVersion is None: - modifiers.personsArgMaxVersion = PersonsArgMaxVersion.AUTO - if modifiers.inCohortVia is None: modifiers.inCohortVia = InCohortVia.AUTO if modifiers.materializationMode is None or modifiers.materializationMode == MaterializationMode.AUTO: modifiers.materializationMode = MaterializationMode.LEGACY_NULL_AS_NULL - if modifiers.optimizeJoinedFilters is None: - modifiers.optimizeJoinedFilters = False - if modifiers.bounceRatePageViewMode is None: modifiers.bounceRatePageViewMode = BounceRatePageViewMode.COUNT_PAGEVIEWS diff --git a/posthog/hogql/query.py b/posthog/hogql/query.py index 2516d8007d815..a979444f8c919 100644 --- a/posthog/hogql/query.py +++ b/posthog/hogql/query.py @@ -200,6 +200,10 @@ def execute_hogql_query( modifiers={k: v for k, v in modifiers.model_dump().items() if v is not None} if modifiers else {}, ) + # Uncomment to print clickhouse SQL + # from posthog.clickhouse.client.escape import substitute_params + # print(substitute_params(clickhouse_sql, clickhouse_context.values)) + try: results, types = sync_execute( clickhouse_sql, diff --git a/posthog/hogql/test/__snapshots__/test_query.ambr b/posthog/hogql/test/__snapshots__/test_query.ambr index 96bfad37a5a50..46ac6d2fc1e3f 100644 --- a/posthog/hogql/test/__snapshots__/test_query.ambr +++ b/posthog/hogql/test/__snapshots__/test_query.ambr @@ -459,16 +459,19 @@ SELECT DISTINCT persons.properties___sneaky_mail AS sneaky_mail FROM ( - SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_1)s), ''), 'null'), '^"|"$', '') AS properties___random_uuid + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_1)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___random_uuid FROM person - WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( - SELECT person.id AS id, max(person.version) AS version + WHERE and(equals(person.team_id, 420), in(person.id, ( + SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 420), notIn(persons_where_optimization.id, ( + SELECT person.id AS id FROM person - WHERE equals(person.team_id, 420) + WHERE and(equals(person.team_id, 420), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, %(hogql_val_2)s), ''), 'null'), '^"|"$', ''), %(hogql_val_3)s), 0))))) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_2)s), person.version), plus(now64(6, %(hogql_val_3)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_4)s), person.version), plus(now64(6, %(hogql_val_5)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - WHERE ifNull(equals(persons.properties___random_uuid, %(hogql_val_4)s), 0) + WHERE ifNull(equals(persons.properties___random_uuid, %(hogql_val_6)s), 0) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=4000000, max_expanded_ast_elements=4000000, max_bytes_before_external_group_by=0 @@ -538,14 +541,11 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN ( - SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail - FROM person - WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( - SELECT person.id AS id, max(person.version) AS version + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE equals(e.team_id, 420) LIMIT 10 @@ -599,14 +599,11 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( - SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail - FROM person - WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( - SELECT person.id AS id, max(person.version) AS version + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE equals(events.team_id, 420) LIMIT 10 @@ -631,14 +628,11 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN ( - SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail - FROM person - WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( - SELECT person.id AS id, max(person.version) AS version + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE equals(e.team_id, 420) LIMIT 10 @@ -663,14 +657,11 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS s__pdi ON equals(s.distinct_id, s__pdi.distinct_id) LEFT JOIN ( - SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail - FROM person - WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( - SELECT person.id AS id, max(person.version) AS version + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS s__pdi__person ON equals(s__pdi.s__pdi___person_id, s__pdi__person.id) WHERE equals(s.team_id, 420) GROUP BY s__pdi__person.properties___sneaky_mail @@ -723,14 +714,11 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS pdi LEFT JOIN ( - SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail - FROM person - WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( - SELECT person.id AS id, max(person.version) AS version + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS pdi__person ON equals(pdi.pdi___person_id, pdi__person.id) LIMIT 10 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=4000000, max_expanded_ast_elements=4000000, max_bytes_before_external_group_by=0 @@ -754,7 +742,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS pdi LEFT JOIN ( - SELECT argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version) AS created_at, person.id AS id + SELECT person.id AS id, argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version) AS created_at FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -782,14 +770,11 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS pdi ON equals(pdi.distinct_id, e.distinct_id) LEFT JOIN ( - SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail - FROM person - WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( - SELECT person.id AS id, max(person.version) AS version + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS p ON equals(p.id, pdi.person_id) WHERE equals(e.team_id, 420) LIMIT 100 @@ -836,14 +821,11 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail - FROM person - WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( - SELECT person.id AS id, max(person.version) AS version + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE equals(events.team_id, 420) LIMIT 10 diff --git a/posthog/hogql/test/test_modifiers.py b/posthog/hogql/test/test_modifiers.py index 5c4f235d49080..83c0e72572b11 100644 --- a/posthog/hogql/test/test_modifiers.py +++ b/posthog/hogql/test/test_modifiers.py @@ -5,7 +5,6 @@ from posthog.models import Cohort from posthog.schema import ( HogQLQueryModifiers, - PersonsArgMaxVersion, PersonsOnEventsMode, MaterializationMode, ) @@ -155,50 +154,6 @@ class TestCase(NamedTuple): for value in test_case.other_expected_values: assert value in clickhouse_query - def test_modifiers_persons_argmax_version_v2(self): - query = "SELECT * FROM persons" - - # Control (v1) - response = execute_hogql_query( - query, - team=self.team, - modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V1), - ) - assert "in(tuple(person.id, person.version)" not in response.clickhouse - - # Test (v2) - response = execute_hogql_query( - query, - team=self.team, - modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V2), - ) - assert "in(tuple(person.id, person.version)" in response.clickhouse - - def test_modifiers_persons_argmax_version_auto(self): - # Use the v2 query when selecting properties.x - response = execute_hogql_query( - "SELECT id, properties.$browser, is_identified FROM persons", - team=self.team, - modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.AUTO), - ) - assert "in(tuple(person.id, person.version)" in response.clickhouse - - # Use the v2 query when selecting properties - response = execute_hogql_query( - "SELECT id, properties FROM persons", - team=self.team, - modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.AUTO), - ) - assert "in(tuple(person.id, person.version)" in response.clickhouse - - # Use the v1 query when not selecting any properties - response = execute_hogql_query( - "SELECT id, is_identified FROM persons", - team=self.team, - modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.AUTO), - ) - assert "in(tuple(person.id, person.version)" not in response.clickhouse - def test_modifiers_in_cohort_join(self): cohort = Cohort.objects.create(team=self.team, name="test") response = execute_hogql_query( @@ -263,26 +218,3 @@ def test_modifiers_materialization_mode(self): "SELECT replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, %(hogql_val_0)s), ''), 'null'), '^\"|\"$', '') AS `$browser` FROM events" in response.clickhouse ) - - def test_optimize_joined_filters(self): - # no optimizations - response = execute_hogql_query( - f"select event from events where person.properties.$browser ilike '%Chrome%'", - team=self.team, - modifiers=HogQLQueryModifiers(optimizeJoinedFilters=False), - ) - # "ilike" shows up once in the response - assert response is not None - assert response.clickhouse is not None - assert response.clickhouse.count("ilike") == 1 - - # with optimizations - response = execute_hogql_query( - f"select event from events where person.properties.$browser ilike '%Chrome%'", - team=self.team, - modifiers=HogQLQueryModifiers(optimizeJoinedFilters=True), - ) - # "ilike" shows up twice in the response - assert response is not None - assert response.clickhouse is not None - assert response.clickhouse.count("ilike") == 2 diff --git a/posthog/hogql/test/test_printer.py b/posthog/hogql/test/test_printer.py index 021dee3bcf947..4eb13c3ef64e4 100644 --- a/posthog/hogql/test/test_printer.py +++ b/posthog/hogql/test/test_printer.py @@ -20,7 +20,6 @@ from posthog.schema import ( HogQLQueryModifiers, MaterializationMode, - PersonsArgMaxVersion, PersonsOnEventsMode, PropertyGroupsMode, ) @@ -1107,94 +1106,24 @@ def test_select_sample(self): context = HogQLContext( team_id=self.team.pk, enable_select_queries=True, - modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V2), ) query = self._select( "SELECT events.event FROM events SAMPLE 2/78 OFFSET 999 JOIN persons ON persons.id=events.person_id", context, ) - self.assertEqual( - query, - f"SELECT events.event AS event FROM events SAMPLE 2/78 OFFSET 999 LEFT OUTER JOIN (SELECT " - "argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, " - "person_distinct_id_overrides.distinct_id AS distinct_id FROM person_distinct_id_overrides WHERE " - f"equals(person_distinct_id_overrides.team_id, {self.team.pk}) GROUP BY person_distinct_id_overrides.distinct_id " - "HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) " - "SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) " - f"JOIN (SELECT person.id AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), " - "ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, max(person.version) AS version " - f"FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " - "HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), " - "ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), " - "plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) " - "SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, if(not(empty(events__override.distinct_id)), " - f"events__override.person_id, events.person_id)) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", - ) - - context = HogQLContext( - team_id=self.team.pk, - enable_select_queries=True, - modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V2), - ) - self.assertEqual( - self._select( - "SELECT events.event FROM events SAMPLE 2/78 OFFSET 999 JOIN persons SAMPLE 0.1 ON persons.id=events.person_id", - context, - ), - f"SELECT events.event AS event FROM events SAMPLE 2/78 OFFSET 999 LEFT OUTER JOIN (SELECT " - "argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, " - "person_distinct_id_overrides.distinct_id AS distinct_id FROM person_distinct_id_overrides WHERE " - f"equals(person_distinct_id_overrides.team_id, {self.team.pk}) GROUP BY person_distinct_id_overrides.distinct_id " - "HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) " - "SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) " - f"JOIN (SELECT person.id AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), " - "ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, max(person.version) AS version " - f"FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " - "HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), " - "ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), " - "plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) " - "SETTINGS optimize_aggregation_in_order=1) AS persons SAMPLE 0.1 ON equals(persons.id, if(not(empty(events__override.distinct_id)), " - f"events__override.person_id, events.person_id)) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", - ) - - with override_settings(PERSON_ON_EVENTS_OVERRIDE=True, PERSON_ON_EVENTS_V2_OVERRIDE=False): - context = HogQLContext( - team_id=self.team.pk, - enable_select_queries=True, - modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V2), - ) - expected = self._select( - "SELECT events.event FROM events SAMPLE 2/78 OFFSET 999 JOIN persons ON persons.id=events.person_id", - context, - ) - self.assertEqual( - expected, - f"SELECT events.event AS event FROM events SAMPLE 2/78 OFFSET 999 JOIN (SELECT person.id AS id FROM person WHERE " - f"and(equals(person.team_id, {self.team.pk}), ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, " - f"max(person.version) AS version FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " - f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, " - f"%(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " - f"AS persons ON equals(persons.id, events.person_id) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", - ) + self.assertIn("FROM events SAMPLE 2/78 OFFSET 999", query) context = HogQLContext( team_id=self.team.pk, enable_select_queries=True, - modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V2), ) - expected = self._select( + query = self._select( "SELECT events.event FROM events SAMPLE 2/78 OFFSET 999 JOIN persons SAMPLE 0.1 ON persons.id=events.person_id", context, ) - self.assertEqual( - expected, - f"SELECT events.event AS event FROM events SAMPLE 2/78 OFFSET 999 JOIN (SELECT person.id AS id FROM person WHERE " - f"and(equals(person.team_id, {self.team.pk}), ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, " - f"max(person.version) AS version FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " - f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, " - f"%(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " - f"AS persons SAMPLE 0.1 ON equals(persons.id, events.person_id) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", - ) + + self.assertIn("FROM events SAMPLE 2/78 OFFSET 999", query) + self.assertIn("AS persons SAMPLE 0.1 ON", query) def test_count_distinct(self): self.assertEqual( @@ -1966,7 +1895,10 @@ def test_inline_persons(self): dialect="clickhouse", settings=HogQLGlobalSettings(max_execution_time=10), ) - assert f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(1, 2, 3)))" in printed + assert ( + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(1, 2, 3)))" + in printed + ) def test_dont_inline_persons(self): query = parse_select( @@ -1993,7 +1925,10 @@ def test_inline_persons_alias(self): dialect="clickhouse", settings=HogQLGlobalSettings(max_execution_time=10), ) - assert f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(1, 2, 3)))" in printed + assert ( + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(1, 2, 3)))" + in printed + ) def test_two_joins(self): query = parse_select( @@ -2009,8 +1944,14 @@ def test_two_joins(self): dialect="clickhouse", settings=HogQLGlobalSettings(max_execution_time=10), ) - assert f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(1, 2, 3)))" in printed - assert f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(4, 5, 6)))" in printed + assert ( + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(1, 2, 3)))" + in printed + ) + assert ( + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(4, 5, 6)))" + in printed + ) def test_two_clauses(self): query = parse_select( @@ -2027,7 +1968,10 @@ def test_two_clauses(self): settings=HogQLGlobalSettings(max_execution_time=10), ) assert ( - f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(7, 8, 9)), in(id, tuple(1, 2, 3)))" + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(7, 8, 9)), in(person.id, tuple(1, 2, 3)))" + in printed + ) + assert ( + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(4, 5, 6)))" in printed ) - assert f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(4, 5, 6)))" in printed diff --git a/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr b/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr index a447055b84d04..eaf024ade223b 100644 --- a/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr +++ b/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr @@ -23,7 +23,7 @@ SELECT persons__events.event AS event FROM ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS persons___properties___email, person.id AS id + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS persons___properties___email FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -45,7 +45,7 @@ WHERE and(equals(cohortpeople.team_id, 420), 0)) AS cohort_people LEFT JOIN ( SELECT persons.id AS id, persons.properties___email AS cohort_people__new_person___properties___email FROM ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -59,7 +59,7 @@ SELECT persons.id AS id, persons.properties___email AS email, persons.`properties___$browser` AS `$browser` FROM ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_1)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser`, person.id AS id + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_1)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -79,7 +79,7 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -100,7 +100,7 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT argMax(person.properties, person.version) AS properties, person.id AS id + SELECT person.id AS id, argMax(person.properties, person.version) AS properties FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -157,7 +157,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser`, person.id AS id + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -177,7 +177,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s, %(hogql_val_1)s, %(hogql_val_2)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser___in___json`, person.id AS id + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s, %(hogql_val_1)s, %(hogql_val_2)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser___in___json` FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -233,7 +233,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser`, person.id AS id + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -254,7 +254,7 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, argMax(person.properties, person.version) AS properties, person.id AS id + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, argMax(person.properties, person.version) AS properties FROM person WHERE equals(person.team_id, 420) GROUP BY person.id diff --git a/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr b/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr index c0c2e1a610370..1f89a22c1d04a 100644 --- a/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr +++ b/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr @@ -4,7 +4,7 @@ SELECT persons__extended_properties.string_prop AS string_prop, persons__extended_properties.int_prop AS int_prop, transform(toString(persons__extended_properties.bool_prop), %(hogql_val_8)s, %(hogql_val_9)s, NULL) AS bool_prop FROM ( - SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS persons___properties___email, person.id AS id + SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS persons___properties___email FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -53,7 +53,7 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT argMax(accurateCastOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), %(hogql_val_1)s), person.version) AS properties___tickets, person.id AS id + SELECT person.id AS id, argMax(accurateCastOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), %(hogql_val_1)s), person.version) AS properties___tickets FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -83,7 +83,7 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT argMax(parseDateTime64BestEffortOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), 6, %(hogql_val_1)s), person.version) AS properties___provided_timestamp, person.id AS id + SELECT person.id AS id, argMax(parseDateTime64BestEffortOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), 6, %(hogql_val_1)s), person.version) AS properties___provided_timestamp FROM person WHERE equals(person.team_id, 420) GROUP BY person.id diff --git a/posthog/hogql_queries/ai/test/__snapshots__/test_actors_property_taxonomy_query_runner.ambr b/posthog/hogql_queries/ai/test/__snapshots__/test_actors_property_taxonomy_query_runner.ambr index a0724393e1fe3..11f10398b6ae2 100644 --- a/posthog/hogql_queries/ai/test/__snapshots__/test_actors_property_taxonomy_query_runner.ambr +++ b/posthog/hogql_queries/ai/test/__snapshots__/test_actors_property_taxonomy_query_runner.ambr @@ -81,15 +81,12 @@ (SELECT DISTINCT persons.properties___email AS prop FROM (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - toTimeZone(person.created_at, 'UTC') AS created_at + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons WHERE isNotNull(prop) ORDER BY persons.created_at DESC) LIMIT 100 SETTINGS readonly=2, @@ -108,15 +105,12 @@ (SELECT DISTINCT persons.`properties___does not exist` AS prop FROM (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'does not exist'), ''), 'null'), '^"|"$', '') AS `properties___does not exist`, - toTimeZone(person.created_at, 'UTC') AS created_at + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'does not exist'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___does not exist`, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons WHERE isNotNull(prop) ORDER BY persons.created_at DESC) LIMIT 100 SETTINGS readonly=2, @@ -135,15 +129,12 @@ (SELECT DISTINCT persons.properties___age AS prop FROM (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age, - toTimeZone(person.created_at, 'UTC') AS created_at + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons WHERE isNotNull(prop) ORDER BY persons.created_at DESC) LIMIT 100 SETTINGS readonly=2, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index 8c5b1b85d1b2e..fb6f9d4cc1fee 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -185,8 +185,8 @@ WHERE ifNull(in(steps, [2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -479,15 +479,18 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -586,15 +589,18 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -604,8 +610,8 @@ WHERE ifNull(in(steps, [1, 2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -704,15 +710,18 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -722,8 +731,8 @@ WHERE ifNull(in(steps, [2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -822,15 +831,18 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -840,8 +852,8 @@ WHERE ifNull(in(steps, [3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index be8b077d2fca2..8ee62ceadae10 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -228,14 +228,11 @@ persons.properties AS person_props FROM (SELECT person.id AS id, - person.properties AS properties + argMax(person.properties, person.version) AS properties FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -410,14 +407,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -432,7 +432,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -460,14 +460,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -601,14 +604,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -623,7 +629,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -651,14 +657,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -792,14 +801,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -814,7 +826,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -842,14 +854,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -983,14 +998,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1005,7 +1023,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1033,14 +1051,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1154,14 +1175,11 @@ persons.properties AS person_props FROM (SELECT person.id AS id, - person.properties AS properties + argMax(person.properties, person.version) AS properties FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -1336,14 +1354,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1358,7 +1379,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1386,14 +1407,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1527,14 +1551,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1549,7 +1576,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1577,14 +1604,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1718,14 +1748,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1740,7 +1773,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1768,14 +1801,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1909,14 +1945,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1931,7 +1970,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1959,14 +1998,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr index 46d4cbd700ebb..7fc8c6038b0c4 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr @@ -115,7 +115,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -368,7 +368,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -547,14 +547,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -569,7 +572,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -597,14 +600,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -642,7 +648,6 @@ max_bytes_before_external_group_by=0 ''' # --- -<<<<<<< HEAD # name: TestFunnelCorrelationActors.test_strict_funnel_correlation_with_recordings ''' SELECT persons.id, @@ -739,14 +744,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), notIn(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -761,7 +769,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -789,14 +797,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), notIn(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -930,14 +941,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), notIn(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -952,7 +966,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -980,14 +994,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), notIn(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1025,5 +1042,3 @@ max_bytes_before_external_group_by=0 ''' # --- -======= ->>>>>>> origin/master diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr index 3a16355324cb4..7ffa9ae0a988b 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr @@ -67,7 +67,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -199,7 +199,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -313,14 +313,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -332,7 +335,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -354,14 +357,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -397,205 +403,3 @@ max_bytes_before_external_group_by=0 ''' # --- -# name: TestFunnelCorrelationsActorsUDF.test_strict_funnel_correlation_with_recordings - ''' - SELECT sum(step_1) AS step_1, - sum(step_2) AS step_2, - arrayMap(x -> if(isNaN(x), NULL, x), [avgArrayOrNull(step_1_conversion_times)])[1] AS step_1_average_conversion_time, - arrayMap(x -> if(isNaN(x), NULL, x), [medianArrayOrNull(step_1_conversion_times)])[1] AS step_1_median_conversion_time, - groupArray(row_number) AS row_number, - final_prop AS final_prop - FROM - (SELECT countIf(ifNull(ifNull(equals(step_reached, 0), 0), 0)) AS step_1, - countIf(ifNull(ifNull(equals(step_reached, 1), 0), 0)) AS step_2, - groupArrayIf(timings[1], ifNull(greater(timings[1], 0), 0)) AS step_1_conversion_times, - rowNumberInBlock() AS row_number, - breakdown AS final_prop - FROM - (SELECT arraySort(t -> t.1, groupArray(tuple(accurateCastOrNull(timestamp, 'Float64'), uuid, [], arrayFilter(x -> ifNull(notEquals(x, 0), 1), [multiply(1, step_0), multiply(2, step_1)])))) AS events_array, - arrayJoin(aggregate_funnel_array(2, 1209600, 'first_touch', 'strict', [[]], arrayFilter((x, x2) -> not(and(empty(x.4), empty(x2.4), ifNull(equals(x.3, x2.3), isNull(x.3) - and isNull(x2.3)), ifNull(greater(x.1, x2.1), 0))), events_array, arrayRotateRight(events_array, 1)))) AS af_tuple, - af_tuple.1 AS step_reached, - plus(af_tuple.1, 1) AS steps, - af_tuple.2 AS breakdown, - af_tuple.3 AS timings, - aggregation_target AS aggregation_target - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, - e.uuid AS uuid, - e.`$session_id` AS `$session_id`, - e.`$window_id` AS `$window_id`, - if(equals(e.event, '$pageview'), 1, 0) AS step_0, - if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1 - FROM events AS e - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))))) - GROUP BY aggregation_target - HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) - GROUP BY breakdown - ORDER BY step_2 DESC, step_1 DESC) - GROUP BY final_prop - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=23622320128, - allow_experimental_analyzer=1 - ''' -# --- -# name: TestFunnelCorrelationsActorsUDF.test_strict_funnel_correlation_with_recordings.1 - ''' - SELECT DISTINCT session_replay_events.session_id AS session_id - FROM session_replay_events - WHERE and(equals(session_replay_events.team_id, 2), ifNull(greaterOrEquals(toTimeZone(session_replay_events.min_first_timestamp, 'UTC'), minus(toDateTime64('2021-01-02 00:00:00.000000', 6, 'UTC'), toIntervalDay(21))), 0), in(session_replay_events.session_id, ['s2'])) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestFunnelCorrelationsActorsUDF.test_strict_funnel_correlation_with_recordings.2 - ''' - SELECT persons.id, - persons.id AS id, - source.matching_events AS matching_events - FROM - (SELECT funnel_actors.actor_id AS actor_id, - any(funnel_actors.matching_events) AS matching_events - FROM - (SELECT aggregation_target AS actor_id, - matched_events_array[plus(step_reached, 1)] AS matching_events, - (matched_events_array[1][1]).1 AS timestamp, - nullIf((matched_events_array[2][1]).1, 0) AS final_timestamp, - (matched_events_array[1][1]).1 AS first_timestamp, - steps AS steps, - final_timestamp, - first_timestamp - FROM - (SELECT arraySort(t -> t.1, groupArray(tuple(accurateCastOrNull(timestamp, 'Float64'), uuid, [], arrayFilter(x -> ifNull(notEquals(x, 0), 1), [multiply(1, step_0), multiply(2, step_1)])))) AS events_array, - arrayJoin(aggregate_funnel_array_v1(2, 1209600, 'first_touch', 'strict', [[]], arrayFilter((x, x2) -> not(and(empty(x.4), empty(x2.4), ifNull(equals(x.3, x2.3), isNull(x.3) - and isNull(x2.3)), ifNull(greater(x.1, x2.1), 0))), events_array, arrayRotateRight(events_array, 1)))) AS af_tuple, - arrayJoin(aggregate_funnel_array(2, 1209600, 'first_touch', 'strict', [[]], arrayFilter((x, x2) -> not(and(empty(x.4), empty(x2.4), ifNull(equals(x.3, x2.3), isNull(x.3) - and isNull(x2.3)), ifNull(greater(x.1, x2.1), 0))), events_array, arrayRotateRight(events_array, 1)))) AS af_tuple, - af_tuple.1 AS step_reached, - plus(af_tuple.1, 1) AS steps, - af_tuple.2 AS breakdown, - af_tuple.3 AS timings, - af_tuple.4 AS matched_event_uuids_array_array, - groupArray(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS user_events, - mapFromArrays(arrayMap(x -> x.2, user_events), user_events) AS user_events_map, - arrayMap(matched_event_uuids_array -> arrayMap(event_uuid -> user_events_map[event_uuid], arrayDistinct(matched_event_uuids_array)), matched_event_uuids_array_array) AS matched_events_array, - aggregation_target AS aggregation_target - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, - if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, - e.uuid AS uuid, - e.`$session_id` AS `$session_id`, - e.`$window_id` AS `$window_id`, - if(equals(e.event, '$pageview'), 1, 0) AS step_0, - if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1 - FROM events AS e - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0))) - GROUP BY aggregation_target - HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) - WHERE ifNull(greaterOrEquals(step_reached, 0), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) - GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source - INNER JOIN - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), in(id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events - FROM - (SELECT aggregation_target AS actor_id, matched_events_array[plus(step_reached, 1)] AS matching_events, (matched_events_array[1][1]).1 AS timestamp, nullIf((matched_events_array[2][1]).1, 0) AS final_timestamp, (matched_events_array[1][1]).1 AS first_timestamp, steps AS steps, final_timestamp, first_timestamp - FROM - (SELECT arraySort(t -> t.1, groupArray(tuple(accurateCastOrNull(timestamp, 'Float64'), uuid, [], arrayFilter(x -> ifNull(notEquals(x, 0), 1), [multiply(1, step_0), multiply(2, step_1)])))) AS events_array, arrayJoin(aggregate_funnel_array_v1(2, 1209600, 'first_touch', 'strict', [[]], arrayFilter((x, x2) -> not(and(empty(x.4), empty(x2.4), ifNull(equals(x.3, x2.3), isNull(x.3) - and isNull(x2.3)), ifNull(greater(x.1, x2.1), 0))), events_array, arrayRotateRight(events_array, 1)))) AS af_tuple, af_tuple.1 AS step_reached, plus(af_tuple.1, 1) AS steps, af_tuple.2 AS breakdown, af_tuple.3 AS timings, af_tuple.4 AS matched_event_uuids_array_array, groupArray(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS user_events, mapFromArrays(arrayMap(x -> x.2, user_events), user_events) AS user_events_map, arrayMap(matched_event_uuids_array -> arrayMap(event_uuid -> user_events_map[event_uuid], arrayDistinct(matched_event_uuids_array)), matched_event_uuids_array_array) AS matched_events_array, aggregation_target AS aggregation_target - (SELECT arraySort(t -> t.1, groupArray(tuple(accurateCastOrNull(timestamp, 'Float64'), uuid, [], arrayFilter(x -> ifNull(notEquals(x, 0), 1), [multiply(1, step_0), multiply(2, step_1)])))) AS events_array, arrayJoin(aggregate_funnel_array(2, 1209600, 'first_touch', 'strict', [[]], arrayFilter((x, x2) -> not(and(empty(x.4), empty(x2.4), ifNull(equals(x.3, x2.3), isNull(x.3) - and isNull(x2.3)), ifNull(greater(x.1, x2.1), 0))), events_array, arrayRotateRight(events_array, 1)))) AS af_tuple, af_tuple.1 AS step_reached, plus(af_tuple.1, 1) AS steps, af_tuple.2 AS breakdown, af_tuple.3 AS timings, af_tuple.4 AS matched_event_uuids_array_array, groupArray(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS user_events, mapFromArrays(arrayMap(x -> x.2, user_events), user_events) AS user_events_map, arrayMap(matched_event_uuids_array -> arrayMap(event_uuid -> user_events_map[event_uuid], arrayDistinct(matched_event_uuids_array)), matched_event_uuids_array_array) AS matched_events_array, aggregation_target AS aggregation_target - FROM - (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, e.uuid AS uuid, e.`$session_id` AS `$session_id`, e.`$window_id` AS `$window_id`, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1 - FROM events AS e - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0))) - GROUP BY aggregation_target - HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) - WHERE ifNull(greaterOrEquals(step_reached, 0), 0) - ORDER BY aggregation_target ASC) AS funnel_actors - WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) - GROUP BY funnel_actors.actor_id - ORDER BY funnel_actors.actor_id ASC) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.id ASC - LIMIT 101 - OFFSET 0 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestFunnelCorrelationsActorsUDF.test_strict_funnel_correlation_with_recordings.3 - ''' - SELECT DISTINCT session_replay_events.session_id AS session_id - FROM session_replay_events - WHERE and(equals(session_replay_events.team_id, 2), ifNull(greaterOrEquals(toTimeZone(session_replay_events.min_first_timestamp, 'UTC'), minus(toDateTime64('2021-01-02 00:00:00.000000', 6, 'UTC'), toIntervalDay(21))), 0), in(session_replay_events.session_id, ['s3'])) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr index 2ce1ce619f3a2..b640659ffa298 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr @@ -177,14 +177,11 @@ persons.properties AS person_props FROM (SELECT person.id AS id, - person.properties AS properties + argMax(person.properties, person.version) AS properties FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -297,14 +294,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -316,7 +316,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -338,14 +338,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -432,14 +435,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -451,7 +457,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -473,14 +479,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -567,14 +576,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -586,7 +598,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -608,14 +620,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -702,14 +717,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -721,7 +739,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -743,14 +761,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -845,14 +866,11 @@ persons.properties AS person_props FROM (SELECT person.id AS id, - person.properties AS properties + argMax(person.properties, person.version) AS properties FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -965,14 +983,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -984,7 +1005,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1006,14 +1027,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1100,14 +1124,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1119,7 +1146,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1141,14 +1168,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1235,14 +1265,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1254,7 +1287,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1276,14 +1309,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1370,14 +1406,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1389,7 +1428,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1411,14 +1450,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` + (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr index 5716fdbd2c292..9045825898133 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr @@ -106,8 +106,8 @@ WHERE ifNull(greaterOrEquals(step_reached, 1), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -328,15 +328,18 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -392,23 +395,26 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) WHERE ifNull(greaterOrEquals(step_reached, 0), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -464,23 +470,26 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) WHERE ifNull(greaterOrEquals(step_reached, 1), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -536,23 +545,26 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) WHERE ifNull(greaterOrEquals(step_reached, 2), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index a035cd71bf10e..f2ad687c51992 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -58,14 +58,11 @@ ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.properties___name ASC) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, @@ -109,8 +106,8 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -121,39 +118,36 @@ and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0))) AS source INNER JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT DISTINCT actor_id AS actor_id - FROM - (SELECT min(events__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) - and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) - and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) - and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, arrayJoin(temp_concat) AS period_status_pairs, period_status_pairs.1 AS start_of_period, period_status_pairs.2 AS status, if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id) AS actor_id - FROM events - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) - LEFT JOIN - (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, person.id AS id - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) - WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) - GROUP BY actor_id) - WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) - and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0))) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT DISTINCT actor_id AS actor_id + FROM + (SELECT min(events__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) + and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) + and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) + and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, arrayJoin(temp_concat) AS period_status_pairs, period_status_pairs.1 AS start_of_period, period_status_pairs.2 AS status, if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id) AS actor_id + FROM events + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) + GROUP BY actor_id) + WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) + and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0))) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.properties___name ASC) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, @@ -219,29 +213,26 @@ WHERE ifNull(equals(num_intervals, 2), 0)) AS source INNER JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals - FROM events AS e SAMPLE 1 - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) - GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0)) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 2), 0)) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.properties___name ASC) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, @@ -285,6 +276,72 @@ max_bytes_before_external_group_by=0 ''' # --- +# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query + ''' + SELECT name AS name + FROM + (SELECT persons.properties___name AS name + FROM + (SELECT actor_id AS actor_id, + count() AS event_count + FROM + (SELECT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS actor_id, + toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, + e.uuid AS uuid + FROM events AS e + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(e.team_id, 2), ifNull(notEquals(e__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(timestamp, toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(timestamp, toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')), equals(e.event, '$pageview'))) + GROUP BY actor_id) AS source + INNER JOIN + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT actor_id AS actor_id, count() AS event_count + FROM + (SELECT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid + FROM events AS e + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(e.team_id, 2), ifNull(notEquals(e__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(timestamp, toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(timestamp, toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')), equals(e.event, '$pageview'))) + GROUP BY actor_id) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.properties___name ASC) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- # name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV1 ''' SELECT name AS name diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr index b3d749554f12f..b015b6ef963f2 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr @@ -70,8 +70,8 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -148,8 +148,8 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -223,8 +223,8 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -298,8 +298,8 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at FROM person WHERE equals(person.team_id, 2) GROUP BY person.id diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr index 326acba019703..a93e47ecb4120 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr @@ -1267,7 +1267,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -1415,7 +1415,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -1562,7 +1562,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -1710,7 +1710,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -1858,7 +1858,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2005,7 +2005,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2153,7 +2153,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2301,7 +2301,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2448,7 +2448,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2687,10 +2687,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2853,10 +2853,10 @@ and isNull(path_key))) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -3006,10 +3006,10 @@ and isNull(path_key))) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -3172,10 +3172,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -3346,10 +3346,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -3689,7 +3689,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -3933,7 +3933,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -4177,7 +4177,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -4421,7 +4421,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -4816,7 +4816,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -4963,7 +4963,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -5192,7 +5192,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -5421,7 +5421,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -5568,7 +5568,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -5715,7 +5715,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13121,7 +13121,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13269,7 +13269,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13416,7 +13416,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13564,7 +13564,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13712,7 +13712,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13859,7 +13859,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14007,7 +14007,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14155,7 +14155,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14302,7 +14302,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14541,10 +14541,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14707,10 +14707,10 @@ and isNull(path_key))) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14860,10 +14860,10 @@ and isNull(path_key))) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -15026,10 +15026,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -15200,10 +15200,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -15543,7 +15543,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -15787,7 +15787,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -16031,7 +16031,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -16275,7 +16275,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -16670,7 +16670,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -16817,7 +16817,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -17046,7 +17046,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -17275,7 +17275,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -17422,7 +17422,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -17569,7 +17569,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr index 63d18ae1c4380..0350486731c92 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr @@ -337,14 +337,11 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(toDateTime64('2020-06-10 00:00:00.000000', 6, 'UTC'))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-06-17 00:00:00.000000', 6, 'UTC'))), in(events.event, tuple('$pageview', '$pageview', 'non_matching_event'))) GROUP BY actor_id) AS actor_activity GROUP BY breakdown_values, diff --git a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py index d34bdfe8876b5..045132aed54ec 100644 --- a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py +++ b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py @@ -8,7 +8,7 @@ from posthog.models.group.util import create_group from posthog.models.group_type_mapping import GroupTypeMapping from posthog.models.team import WeekStartDay -from posthog.schema import HogQLQueryModifiers, PersonsArgMaxVersion +from posthog.schema import HogQLQueryModifiers from posthog.test.base import ( APIBaseTest, ClickhouseTestMixin, @@ -213,7 +213,7 @@ def test_insight_persons_stickiness_groups_query(self): self.assertEqual([("org1",)], response.results) @snapshot_clickhouse_queries - def test_insight_persons_trends_query_with_argmaxV1(self): + def test_insight_persons_trends_query(self): self._create_test_events() self.team.timezone = "US/Pacific" self.team.save() @@ -233,39 +233,10 @@ def test_insight_persons_trends_query_with_argmaxV1(self): ) """, - modifiers={"personsArgMaxVersion": PersonsArgMaxVersion.V1}, ) self.assertEqual([("p2",)], response.results) - assert "in(id," in queries[0] - self.assertEqual(2, queries[0].count("toTimeZone(e.timestamp, 'US/Pacific') AS timestamp")) - - @snapshot_clickhouse_queries - def test_insight_persons_trends_query_with_argmaxV2(self): - self._create_test_events() - self.team.timezone = "US/Pacific" - self.team.save() - - with self.capture_queries(lambda query: re.match(r"^SELECT\s+name\s+AS\s+name", query) is not None) as queries: - response = self.select( - """ - select * from ( - - - } - series={[]} - properties={[]} - /> - - - ) - """, - modifiers={"personsArgMaxVersion": PersonsArgMaxVersion.V2}, - ) - - self.assertEqual([("p2",)], response.results) - assert "in(person.id" in queries[0] + assert "in(person.id," in queries[0] self.assertEqual(2, queries[0].count("toTimeZone(e.timestamp, 'US/Pacific') AS timestamp")) @snapshot_clickhouse_queries diff --git a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr index 14201b4e6b41e..2145d20999bcc 100644 --- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr @@ -70,14 +70,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$bool_prop'), ''), 'null'), '^"|"$', '') AS `properties___$bool_prop` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$bool_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$bool_prop` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$bool_prop'), ''), 'null'), '^"|"$', ''), 'x'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC'))), and(equals(e.event, 'sign up'), ifNull(in(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), (SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -257,10 +260,10 @@ WHERE and(equals(e.team_id, 2), greaterOrEquals(timestamp, toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(timestamp, toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')), ifNull(equals(ifNull(nullIf(toString(e__group_0.properties___industry), ''), '$$_posthog_breakdown_null_$$'), 'technology'), 0), equals(e.event, 'sign up'))) GROUP BY actor_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT actor_id AS actor_id, count() AS event_count, groupUniqArray(100)(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS matching_events @@ -349,6 +352,114 @@ max_bytes_before_external_group_by=0 ''' # --- +# name: TestTrends.test_breakdown_by_person_property_pie_with_event_dau_filter + ''' + SELECT sum(total) AS total, + if(ifNull(ifNull(greaterOrEquals(row_number, 26), 0), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT count AS total, + breakdown_value AS breakdown_value, + row_number() OVER ( + ORDER BY total DESC) AS row_number + FROM + (SELECT sum(total) AS count, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, + ifNull(nullIf(toString(e__person.properties___name), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), notIn(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(notILike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), '%person3%'), 1))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-21 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(notILike(e__person.properties___name, '%person3%'), 1)) + GROUP BY breakdown_value) + GROUP BY breakdown_value + ORDER BY breakdown_value ASC) + ORDER BY total DESC, breakdown_value ASC) + WHERE isNotNull(breakdown_value) + GROUP BY breakdown_value + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, total DESC, + breakdown_value ASC + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestTrends.test_breakdown_by_person_property_pie_with_event_dau_filter.1 + ''' + SELECT sum(total) AS total, + arrayMap(i -> if(ifNull(ifNull(greaterOrEquals(row_number, 26), 0), 0), '$$_posthog_breakdown_other_$$', i), breakdown_value) AS breakdown_value + FROM + (SELECT count AS total, + breakdown_value AS breakdown_value, + row_number() OVER ( + ORDER BY total DESC) AS row_number + FROM + (SELECT sum(total) AS count, + [ifNull(toString(breakdown_value_1), '$$_posthog_breakdown_null_$$')] AS breakdown_value + FROM + (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, + ifNull(nullIf(toString(e__person.properties___name), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value_1 + FROM events AS e SAMPLE 1 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), notIn(person.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(notILike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), '%person3%'), 1))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-21 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(notILike(e__person.properties___name, '%person3%'), 1)) + GROUP BY breakdown_value_1) + GROUP BY breakdown_value_1 + ORDER BY breakdown_value ASC) + ORDER BY total DESC, breakdown_value ASC) + WHERE arrayExists(x -> isNotNull(x), breakdown_value) + GROUP BY breakdown_value + ORDER BY if(has(breakdown_value, '$$_posthog_breakdown_other_$$'), 2, if(has(breakdown_value, '$$_posthog_breakdown_null_$$'), 1, 0)) ASC, total DESC, + breakdown_value ASC + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- # name: TestTrends.test_breakdown_filtering_with_properties_in_new_format ''' SELECT groupArray(1)(date)[1] AS date, @@ -689,14 +800,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'p1'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'p2'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'p3'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), and(or(ifNull(equals(e__person.properties___name, 'p1'), 0), ifNull(equals(e__person.properties___name, 'p2'), 0), ifNull(equals(e__person.properties___name, 'p3'), 0)), ifNull(in(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), (SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -1370,14 +1484,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'Jane'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-26 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-02 23:59:59', 6, 'UTC'))), equals(e.event, 'event_name'), ifNull(equals(e__person.properties___name, 'Jane'), 0)) GROUP BY day_start) GROUP BY day_start @@ -1536,10 +1653,10 @@ WHERE and(equals(e.team_id, 2), and(ifNull(equals(e__group_0.properties___industry, 'finance'), 0), ifNull(equals(e__group_2.properties___name, 'six'), 0)), greaterOrEquals(timestamp, toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(timestamp, toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')), equals(e.event, 'sign up'))) GROUP BY actor_id) AS source INNER JOIN - (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, - person.id AS id + (SELECT person.id AS id, + argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at FROM person - WHERE and(equals(person.team_id, 2), in(id, + WHERE and(equals(person.team_id, 2), in(person.id, (SELECT source.actor_id AS actor_id FROM (SELECT actor_id AS actor_id, count() AS event_count, groupUniqArray(100)(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS matching_events @@ -1659,15 +1776,18 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop`, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'filter_prop'), ''), 'null'), '^"|"$', '') AS properties___filter_prop + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'filter_prop'), ''), 'null'), '^"|"$', ''), person.version) AS properties___filter_prop FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'filter_prop'), ''), 'null'), '^"|"$', ''), 'filter_val'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, 'sign up'), ifNull(equals(e__person.properties___filter_prop, 'filter_val'), 0)), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), toIntervalDay(30))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id, breakdown_value) AS e @@ -1733,15 +1853,18 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop`, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'filter_prop'), ''), 'null'), '^"|"$', '') AS properties___filter_prop + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'filter_prop'), ''), 'null'), '^"|"$', ''), person.version) AS properties___filter_prop FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'filter_prop'), ''), 'null'), '^"|"$', ''), 'filter_val'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, 'sign up'), ifNull(equals(e__person.properties___filter_prop, 'filter_val'), 0)), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), toIntervalDay(30))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id, breakdown_value_1) AS e @@ -2104,14 +2227,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'person1'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -2147,14 +2273,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'person1'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -2216,14 +2345,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - nullIf(nullIf(person.pmat_name, ''), 'null') AS properties___name + argMax(nullIf(nullIf(person.pmat_name, ''), 'null'), person.version) AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_name, ''), 'null'), 'person1'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -2285,14 +2417,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - nullIf(nullIf(person.pmat_name, ''), 'null') AS properties___name + argMax(nullIf(nullIf(person.pmat_name, ''), 'null'), person.version) AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_name, ''), 'null'), 'person1'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -3397,16 +3532,19 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$os'), ''), 'null'), '^"|"$', '') AS `properties___$os`, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$os'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$os`, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$os'), ''), 'null'), '^"|"$', ''), 'android'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'safari'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-07-01 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), and(or(ifNull(notILike(e__person.properties___email, '%@posthog.com%'), 1), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', ''), 'val'), 0)), or(ifNull(equals(e__person.`properties___$os`, 'android'), 0), ifNull(equals(e__person.`properties___$browser`, 'safari'), 0)))) GROUP BY day_start, breakdown_value) @@ -3456,16 +3594,19 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$os'), ''), 'null'), '^"|"$', '') AS `properties___$os`, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$os'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$os`, + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$os'), ''), 'null'), '^"|"$', ''), 'android'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'chrome'), 0), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%@posthog.com%'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-07-01 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), and(ifNull(equals(e__person.`properties___$os`, 'android'), 0), ifNull(equals(e__person.`properties___$browser`, 'chrome'), 0)), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', ''), 'val'), 0), ifNull(ilike(e__person.properties___email, '%@posthog.com%'), 0))) GROUP BY day_start, breakdown_value) @@ -3533,14 +3674,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'some_val'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), ifNull(equals(e__person.`properties___$some_prop`, 'some_val'), 0)) GROUP BY day_start) GROUP BY day_start @@ -3584,14 +3728,11 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY day_start, breakdown_value) @@ -3641,14 +3782,11 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY day_start, breakdown_value_1) @@ -4678,14 +4816,11 @@ raw_sessions.session_id_v7) AS e__session ON equals(toUInt128(accurateCastOrNull(e.`$session_id`, 'UUID')), e__session.session_id_v7) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY e.`$session_id`, breakdown_value) @@ -4741,14 +4876,11 @@ raw_sessions.session_id_v7) AS e__session ON equals(toUInt128(accurateCastOrNull(e.`$session_id`, 'UUID')), e__session.session_id_v7) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY e.`$session_id`, breakdown_value_1) @@ -5419,14 +5551,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'person-1'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'person-2'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), or(ifNull(equals(e__person.properties___name, 'person-1'), 0), ifNull(equals(e__person.properties___name, 'person-2'), 0))), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -5475,14 +5610,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - nullIf(nullIf(person.pmat_name, ''), 'null') AS properties___name + argMax(nullIf(nullIf(person.pmat_name, ''), 'null'), person.version) AS properties___name FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_name, ''), 'null'), 'person-1'), 0), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_name, ''), 'null'), 'person-2'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), or(ifNull(equals(e__person.properties___name, 'person-1'), 0), ifNull(equals(e__person.properties___name, 'person-2'), 0))), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) diff --git a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr index 46cefcb7c8f49..8b88bfb2d9371 100644 --- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr @@ -1,14 +1,4 @@ # serializer version: 1 -# name: TestTrendsPersons.test_trends_all_cohort_breakdown_persons_leftjoin - ''' - - SELECT count(DISTINCT person_id) - FROM cohortpeople - WHERE team_id = 2 - AND cohort_id = 2 - AND version = NULL - ''' -# --- # name: TestTrendsPersons.test_trends_all_cohort_breakdown_persons_leftjoin.1 ''' /* cohort_calculation: */ diff --git a/posthog/hogql_queries/test/__snapshots__/test_actors_query_runner.ambr b/posthog/hogql_queries/test/__snapshots__/test_actors_query_runner.ambr index b98c8fab5986f..7e097645bdbfb 100644 --- a/posthog/hogql_queries/test/__snapshots__/test_actors_query_runner.ambr +++ b/posthog/hogql_queries/test/__snapshots__/test_actors_query_runner.ambr @@ -1,4 +1,80 @@ # serializer version: 1 +# name: TestActorsQueryRunner.test_persons_query_search_email + ''' + SELECT persons.id, + persons.id AS id, + persons.created_at AS created_at, + 1 + FROM + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name, + toTimeZone(person.created_at, 'UTC') AS created_at + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + WHERE or(ifNull(ilike(persons.properties___email, '%jacob4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(ilike(persons.properties___name, '%jacob4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(ilike(toString(persons.id), '%jacob4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(in(persons.id, + (SELECT person_distinct_ids.person_id AS person_id + FROM + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids + WHERE ifNull(ilike(person_distinct_ids.distinct_id, '%jacob4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0))), 0)) + ORDER BY persons.created_at DESC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestActorsQueryRunner.test_persons_query_search_email.1 + ''' + SELECT persons.id, + persons.id AS id, + persons.created_at AS created_at, + 1 + FROM + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name, + toTimeZone(person.created_at, 'UTC') AS created_at + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + WHERE or(ifNull(ilike(persons.properties___email, '%JACOB4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(ilike(persons.properties___name, '%JACOB4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(ilike(toString(persons.id), '%JACOB4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(in(persons.id, + (SELECT person_distinct_ids.person_id AS person_id + FROM + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id + FROM person_distinct_id2 + WHERE equals(person_distinct_id2.team_id, 2) + GROUP BY person_distinct_id2.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids + WHERE ifNull(ilike(person_distinct_ids.distinct_id, '%JACOB4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0))), 0)) + ORDER BY persons.created_at DESC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- # name: TestActorsQueryRunner.test_persons_query_search_snapshot ''' diff --git a/posthog/hogql_queries/test/__snapshots__/test_error_tracking_query_runner.ambr b/posthog/hogql_queries/test/__snapshots__/test_error_tracking_query_runner.ambr index 9a973fc39730b..86f7a0a0b99b9 100644 --- a/posthog/hogql_queries/test/__snapshots__/test_error_tracking_query_runner.ambr +++ b/posthog/hogql_queries/test/__snapshots__/test_error_tracking_query_runner.ambr @@ -42,14 +42,11 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), equals(events.event, '$exception'), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1)) GROUP BY fingerprint LIMIT 101 @@ -81,14 +78,11 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), equals(events.event, '$exception'), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1), has([['SyntaxError']], JSONExtract(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_fingerprint'), ''), 'null'), '^"|"$', ''), '[]'), 'Array(String)'))) LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -142,302 +136,6 @@ max_bytes_before_external_group_by=0 ''' # --- -# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.1 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user_1' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- -# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.10 - ''' - SELECT "posthog_datawarehousejoin"."created_by_id", - "posthog_datawarehousejoin"."created_at", - "posthog_datawarehousejoin"."deleted", - "posthog_datawarehousejoin"."deleted_at", - "posthog_datawarehousejoin"."id", - "posthog_datawarehousejoin"."team_id", - "posthog_datawarehousejoin"."source_table_name", - "posthog_datawarehousejoin"."source_table_key", - "posthog_datawarehousejoin"."joining_table_name", - "posthog_datawarehousejoin"."joining_table_key", - "posthog_datawarehousejoin"."field_name" - FROM "posthog_datawarehousejoin" - WHERE ("posthog_datawarehousejoin"."team_id" = 2 - AND NOT ("posthog_datawarehousejoin"."deleted" - AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.11 - ''' - SELECT "posthog_propertydefinition"."name", - "posthog_propertydefinition"."property_type" - FROM "posthog_propertydefinition" - WHERE ("posthog_propertydefinition"."name" IN ('$exception_message', - '$exception_type', - '$exception_fingerprint') - AND "posthog_propertydefinition"."team_id" = 2 - AND "posthog_propertydefinition"."type" IN (1, - 2, - 3, - 4, - 5 /* ... */)) - ''' -# --- -# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.2 - ''' - SELECT "posthog_errortrackinggroup"."fingerprint", - "posthog_errortrackinggroup"."merged_fingerprints", - "posthog_errortrackinggroup"."status", - "posthog_errortrackinggroup"."assignee_id" - FROM "posthog_errortrackinggroup" - WHERE ("posthog_errortrackinggroup"."team_id" = 2 - AND "posthog_errortrackinggroup"."fingerprint" = (ARRAY['SyntaxError', - 'Cannot use ''in'' operator to search for ''wireframes'' in ‹�” ýf�ì½é–"¹’0ø*Lö¹SY A�Ξ÷ԝf - ˆ�Ø'])::text[]) - ''' -# --- -# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.3 - ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 - ''' -# --- -# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.4 - ''' - SELECT "posthog_datawarehousetable"."created_by_id", - "posthog_datawarehousetable"."created_at", - "posthog_datawarehousetable"."updated_at", - "posthog_datawarehousetable"."deleted", - "posthog_datawarehousetable"."deleted_at", - "posthog_datawarehousetable"."id", - "posthog_datawarehousetable"."name", - "posthog_datawarehousetable"."format", - "posthog_datawarehousetable"."team_id", - "posthog_datawarehousetable"."url_pattern", - "posthog_datawarehousetable"."credential_id", - "posthog_datawarehousetable"."external_data_source_id", - "posthog_datawarehousetable"."columns", - "posthog_datawarehousetable"."row_count", - "posthog_user"."id", - "posthog_user"."password", - "posthog_user"."last_login", - "posthog_user"."first_name", - "posthog_user"."last_name", - "posthog_user"."is_staff", - "posthog_user"."is_active", - "posthog_user"."date_joined", - "posthog_user"."uuid", - "posthog_user"."current_organization_id", - "posthog_user"."current_team_id", - "posthog_user"."email", - "posthog_user"."pending_email", - "posthog_user"."temporary_token", - "posthog_user"."distinct_id", - "posthog_user"."is_email_verified", - "posthog_user"."requested_password_reset_at", - "posthog_user"."has_seen_product_intro_for", - "posthog_user"."strapi_id", - "posthog_user"."theme_mode", - "posthog_user"."partial_notification_settings", - "posthog_user"."anonymize_data", - "posthog_user"."toolbar_mode", - "posthog_user"."hedgehog_config", - "posthog_user"."events_column_config", - "posthog_user"."email_opt_in", - "posthog_datawarehousecredential"."created_by_id", - "posthog_datawarehousecredential"."created_at", - "posthog_datawarehousecredential"."id", - "posthog_datawarehousecredential"."access_key", - "posthog_datawarehousecredential"."access_secret", - "posthog_datawarehousecredential"."team_id", - "posthog_externaldatasource"."created_by_id", - "posthog_externaldatasource"."created_at", - "posthog_externaldatasource"."updated_at", - "posthog_externaldatasource"."deleted", - "posthog_externaldatasource"."deleted_at", - "posthog_externaldatasource"."id", - "posthog_externaldatasource"."source_id", - "posthog_externaldatasource"."connection_id", - "posthog_externaldatasource"."destination_id", - "posthog_externaldatasource"."team_id", - "posthog_externaldatasource"."sync_frequency", - "posthog_externaldatasource"."status", - "posthog_externaldatasource"."source_type", - "posthog_externaldatasource"."job_inputs", - "posthog_externaldatasource"."are_tables_created", - "posthog_externaldatasource"."prefix" - FROM "posthog_datawarehousetable" - LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") - LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") - LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") - WHERE ("posthog_datawarehousetable"."team_id" = 2 - AND NOT ("posthog_datawarehousetable"."deleted" - AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.5 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.6 - ''' - SELECT "posthog_datawarehousejoin"."created_by_id", - "posthog_datawarehousejoin"."created_at", - "posthog_datawarehousejoin"."deleted", - "posthog_datawarehousejoin"."deleted_at", - "posthog_datawarehousejoin"."id", - "posthog_datawarehousejoin"."team_id", - "posthog_datawarehousejoin"."source_table_name", - "posthog_datawarehousejoin"."source_table_key", - "posthog_datawarehousejoin"."joining_table_name", - "posthog_datawarehousejoin"."joining_table_key", - "posthog_datawarehousejoin"."field_name" - FROM "posthog_datawarehousejoin" - WHERE ("posthog_datawarehousejoin"."team_id" = 2 - AND NOT ("posthog_datawarehousejoin"."deleted" - AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.7 - ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 - ''' -# --- -# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.8 - ''' - SELECT "posthog_datawarehousetable"."created_by_id", - "posthog_datawarehousetable"."created_at", - "posthog_datawarehousetable"."updated_at", - "posthog_datawarehousetable"."deleted", - "posthog_datawarehousetable"."deleted_at", - "posthog_datawarehousetable"."id", - "posthog_datawarehousetable"."name", - "posthog_datawarehousetable"."format", - "posthog_datawarehousetable"."team_id", - "posthog_datawarehousetable"."url_pattern", - "posthog_datawarehousetable"."credential_id", - "posthog_datawarehousetable"."external_data_source_id", - "posthog_datawarehousetable"."columns", - "posthog_datawarehousetable"."row_count", - "posthog_user"."id", - "posthog_user"."password", - "posthog_user"."last_login", - "posthog_user"."first_name", - "posthog_user"."last_name", - "posthog_user"."is_staff", - "posthog_user"."is_active", - "posthog_user"."date_joined", - "posthog_user"."uuid", - "posthog_user"."current_organization_id", - "posthog_user"."current_team_id", - "posthog_user"."email", - "posthog_user"."pending_email", - "posthog_user"."temporary_token", - "posthog_user"."distinct_id", - "posthog_user"."is_email_verified", - "posthog_user"."requested_password_reset_at", - "posthog_user"."has_seen_product_intro_for", - "posthog_user"."strapi_id", - "posthog_user"."theme_mode", - "posthog_user"."partial_notification_settings", - "posthog_user"."anonymize_data", - "posthog_user"."toolbar_mode", - "posthog_user"."hedgehog_config", - "posthog_user"."events_column_config", - "posthog_user"."email_opt_in", - "posthog_datawarehousecredential"."created_by_id", - "posthog_datawarehousecredential"."created_at", - "posthog_datawarehousecredential"."id", - "posthog_datawarehousecredential"."access_key", - "posthog_datawarehousecredential"."access_secret", - "posthog_datawarehousecredential"."team_id", - "posthog_externaldatasource"."created_by_id", - "posthog_externaldatasource"."created_at", - "posthog_externaldatasource"."updated_at", - "posthog_externaldatasource"."deleted", - "posthog_externaldatasource"."deleted_at", - "posthog_externaldatasource"."id", - "posthog_externaldatasource"."source_id", - "posthog_externaldatasource"."connection_id", - "posthog_externaldatasource"."destination_id", - "posthog_externaldatasource"."team_id", - "posthog_externaldatasource"."sync_frequency", - "posthog_externaldatasource"."status", - "posthog_externaldatasource"."source_type", - "posthog_externaldatasource"."job_inputs", - "posthog_externaldatasource"."are_tables_created", - "posthog_externaldatasource"."prefix" - FROM "posthog_datawarehousetable" - LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") - LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") - LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") - WHERE ("posthog_datawarehousetable"."team_id" = 2 - AND NOT ("posthog_datawarehousetable"."deleted" - AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.9 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- # name: TestErrorTrackingQueryRunner.test_hogql_filters ''' SELECT count(DISTINCT events.uuid) AS occurrences, @@ -458,14 +156,17 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'email@posthog.com'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), equals(events.event, '$exception'), ifNull(equals(events__person.properties___email, 'email@posthog.com'), 0)) GROUP BY fingerprint LIMIT 101 @@ -498,14 +199,11 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), equals(events.event, '$exception'), and(less(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2022-01-11 00:00:00.000000', 6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2022-01-10 00:00:00.000000', 6, 'UTC')), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1)), or(ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_list'), ''), 'null'), '^"|"$', '')), lower('databasenot')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_type'), ''), 'null'), '^"|"$', '')), lower('databasenot')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_message'), ''), 'null'), '^"|"$', '')), lower('databasenot')), 0), 0))) GROUP BY fingerprint LIMIT 101 @@ -538,14 +236,11 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), equals(events.event, '$exception'), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1), and(or(ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_list'), ''), 'null'), '^"|"$', '')), lower('databasenotfoundX')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_type'), ''), 'null'), '^"|"$', '')), lower('databasenotfoundX')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_message'), ''), 'null'), '^"|"$', '')), lower('databasenotfoundX')), 0), 0)), or(ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_list'), ''), 'null'), '^"|"$', '')), lower('clickhouse/client/execute.py')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_type'), ''), 'null'), '^"|"$', '')), lower('clickhouse/client/execute.py')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_message'), ''), 'null'), '^"|"$', '')), lower('clickhouse/client/execute.py')), 0), 0)))) GROUP BY fingerprint LIMIT 101 diff --git a/posthog/hogql_queries/test/test_query_runner.py b/posthog/hogql_queries/test/test_query_runner.py index 927930dad2da0..57dd961fbdb96 100644 --- a/posthog/hogql_queries/test/test_query_runner.py +++ b/posthog/hogql_queries/test/test_query_runner.py @@ -92,8 +92,6 @@ def test_cache_payload(self): "hogql_modifiers": { "inCohortVia": "auto", "materializationMode": "legacy_null_as_null", - "personsArgMaxVersion": "auto", - "optimizeJoinedFilters": False, "personsOnEventsMode": PersonsOnEventsMode.PERSON_ID_OVERRIDE_PROPERTIES_JOINED, "bounceRatePageViewMode": "count_pageviews", "sessionTableVersion": "auto", @@ -115,7 +113,7 @@ def test_cache_key(self): runner = TestQueryRunner(query={"some_attr": "bla"}, team=team) cache_key = runner.get_cache_key() - self.assertEqual(cache_key, "cache_93427f8f06e6cc8643a394ae002de2c1") + self.assertEqual(cache_key, "cache_f3537dabae0c3bf5ca038413fc1a0566") def test_cache_key_runner_subclass(self): TestQueryRunner = self.setup_test_query_runner_class() @@ -129,7 +127,7 @@ class TestSubclassQueryRunner(TestQueryRunner): runner = TestSubclassQueryRunner(query={"some_attr": "bla"}, team=team) cache_key = runner.get_cache_key() - self.assertEqual(cache_key, "cache_bb6398a99867dfbdc45a2fc4fccb8f27") + self.assertEqual(cache_key, "cache_a56e8e639aba0d22f86b228ff44c5a65") def test_cache_key_different_timezone(self): TestQueryRunner = self.setup_test_query_runner_class() @@ -140,7 +138,7 @@ def test_cache_key_different_timezone(self): runner = TestQueryRunner(query={"some_attr": "bla"}, team=team) cache_key = runner.get_cache_key() - self.assertEqual(cache_key, "cache_e0c2bb1ad091102533399ebdddbfb24d") + self.assertEqual(cache_key, "cache_1c3b6a542b4a10f3c609df3c98968b5c") @mock.patch("django.db.transaction.on_commit") def test_cache_response(self, mock_on_commit): diff --git a/posthog/models/person/util.py b/posthog/models/person/util.py index 4dbf3117a1a46..7aa883c9bab68 100644 --- a/posthog/models/person/util.py +++ b/posthog/models/person/util.py @@ -106,7 +106,7 @@ def bulk_create_persons(persons_list: list[dict]): distinct_id_inserts.append(f"('{distinct_id}', '{person.uuid}', {person.team_id}, 0, 0, now(), 0, 0)") person_mapping[distinct_id] = person - created_at = now().strftime("%Y-%m-%d %H:%M:%S.%f") + created_at = persons_list[index].get("created_at", now()).strftime("%Y-%m-%d %H:%M:%S.%f") timestamp = now().strftime("%Y-%m-%d %H:%M:%S") person_inserts.append( f"('{person.uuid}', '{created_at}', {person.team_id}, '{json.dumps(person.properties)}', {'1' if person.is_identified else '0'}, '{timestamp}', 0, 0, 0)" diff --git a/posthog/schema.py b/posthog/schema.py index b77997f9f74f5..958c773b23be0 100644 --- a/posthog/schema.py +++ b/posthog/schema.py @@ -683,12 +683,6 @@ class MaterializationMode(StrEnum): DISABLED = "disabled" -class PersonsArgMaxVersion(StrEnum): - AUTO = "auto" - V1 = "v1" - V2 = "v2" - - class PersonsJoinMode(StrEnum): INNER = "inner" LEFT = "left" @@ -722,8 +716,6 @@ class HogQLQueryModifiers(BaseModel): debug: Optional[bool] = None inCohortVia: Optional[InCohortVia] = None materializationMode: Optional[MaterializationMode] = None - optimizeJoinedFilters: Optional[bool] = None - personsArgMaxVersion: Optional[PersonsArgMaxVersion] = None personsJoinMode: Optional[PersonsJoinMode] = None personsOnEventsMode: Optional[PersonsOnEventsMode] = None propertyGroupsMode: Optional[PropertyGroupsMode] = None diff --git a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index cc367480e0f1e..b3064cee9586f 100644 --- a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -1513,14 +1513,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), 1), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -1567,14 +1570,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -1660,14 +1666,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email + (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), 1), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -1714,14 +1723,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email + (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(nullIf(nullIf(events.`mat_$browser`, ''), 'null'), 'Chrome'), 0), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -1768,14 +1780,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), ifNull(equals(events__person.properties___email, 'bla'), 0))) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -1822,14 +1837,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'something else'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), ifNull(equals(events__person.properties___email, 'something else'), 0))) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -2422,14 +2440,11 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), 1), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, 'is_internal_user'), ''), 'null'), '^"|"$', ''), 'false'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0)), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -2515,14 +2530,11 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email + (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), 1), and(ifNull(equals(nullIf(nullIf(events.mat_is_internal_user, ''), 'null'), 'false'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0)), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -3418,14 +3430,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla@gmail.com'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla@gmail.com'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -3472,14 +3487,11 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(notILike(events__person.properties___email, '%gmail.com%'), 1)) GROUP BY events.`$session_id` HAVING 1))) @@ -4279,14 +4291,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'test@posthog.com'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'david@posthog.com'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(ifNull(equals(events__person.properties___email, 'test@posthog.com'), 0), ifNull(equals(events__person.properties___email, 'david@posthog.com'), 0))) GROUP BY events.`$session_id` HAVING 1))) @@ -4333,14 +4348,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'test@posthog.com'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'david@posthog.com'), 0)))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), or(ifNull(equals(events__person.properties___email, 'test@posthog.com'), 0), ifNull(equals(events__person.properties___email, 'david@posthog.com'), 0))) GROUP BY events.`$session_id` HAVING 1))) @@ -5195,14 +5213,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -5288,14 +5309,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email + (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -5381,14 +5405,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email + (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -5474,14 +5501,17 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email + (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT persons_where_optimization.id AS id + FROM person AS persons_where_optimization + WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) diff --git a/posthog/session_recordings/session_recording_api.py b/posthog/session_recordings/session_recording_api.py index 6f1f272e40012..68ecd7bb21120 100644 --- a/posthog/session_recordings/session_recording_api.py +++ b/posthog/session_recordings/session_recording_api.py @@ -32,7 +32,7 @@ from posthog.cloud_utils import is_cloud from posthog.constants import SESSION_RECORDINGS_FILTER_IDS from posthog.event_usage import report_user_action -from posthog.models import Team, User +from posthog.models import User from posthog.models.filters.session_recordings_filter import SessionRecordingsFilter from posthog.models.person.person import PersonDistinctId from posthog.rate_limit import ( @@ -40,7 +40,7 @@ ClickHouseSustainedRateThrottle, PersonalApiKeyRateThrottle, ) -from posthog.schema import HogQLQueryModifiers, QueryTiming +from posthog.schema import QueryTiming from posthog.session_recordings.models.session_recording import SessionRecording from posthog.session_recordings.models.session_recording_event import ( SessionRecordingViewed, @@ -353,10 +353,8 @@ def matching_events(self, request: request.Request, *args: Any, **kwargs: Any) - "Must specify at least one event or action filter", ) - distinct_id = str(cast(User, request.user).distinct_id) - modifiers = safely_read_modifiers_overrides(distinct_id, self.team) matching_events_query_response = ReplayFiltersEventsSubQuery( - filter=filter, team=self.team, hogql_query_modifiers=modifiers + filter=filter, team=self.team ).get_event_ids_for_session() response = JsonResponse(data={"results": matching_events_query_response.results}) @@ -913,12 +911,9 @@ def list_recordings( filter = filter.shallow_clone({SESSION_RECORDINGS_FILTER_IDS: remaining_session_ids}) if (all_session_ids and filter.session_ids) or not all_session_ids: - distinct_id = str(cast(User, request.user).distinct_id) - modifiers = safely_read_modifiers_overrides(distinct_id, team) - with timer("load_recordings_from_hogql"): (ch_session_recordings, more_recordings_available, hogql_timings) = SessionRecordingListFromFilters( - filter=filter, team=team, hogql_query_modifiers=modifiers + filter=filter, team=team, hogql_query_modifiers=None ).run() with timer("build_recordings"): @@ -974,32 +969,6 @@ def list_recordings( ) -def safely_read_modifiers_overrides(distinct_id: str, team: Team) -> HogQLQueryModifiers: - modifiers = HogQLQueryModifiers() - - try: - groups = {"organization": str(team.organization.id)} - flag_key = "HOG_QL_ORG_QUERY_OVERRIDES" - flags_n_bags = posthoganalytics.get_all_flags_and_payloads( - distinct_id, - groups=groups, - ) - # this loads nothing whereas the payload is available - # modifier_overrides = posthoganalytics.get_feature_flag_payload( - # flag_key, - # distinct_id, - # groups=groups, - # ) - modifier_overrides = (flags_n_bags or {}).get("featureFlagPayloads", {}).get(flag_key, None) - if modifier_overrides: - modifiers.optimizeJoinedFilters = json.loads(modifier_overrides).get("optimizeJoinedFilters", None) - except: - # be extra safe - pass - - return modifiers - - def _generate_timings(hogql_timings: list[QueryTiming] | None, timer: ServerTimingsGathered) -> dict[str, float]: timings_dict = timer.get_all_timings() hogql_timings_dict = {} diff --git a/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr b/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr index ef29f7d875751..74c042c140f95 100644 --- a/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr +++ b/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr @@ -595,32 +595,6 @@ ''' # --- # name: TestSessionRecordings.test_get_session_recordings.20 - ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_get_session_recordings.21 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -632,7 +606,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.22 +# name: TestSessionRecordings.test_get_session_recordings.21 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -653,7 +627,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.23 +# name: TestSessionRecordings.test_get_session_recordings.22 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -726,7 +700,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.24 +# name: TestSessionRecordings.test_get_session_recordings.23 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -745,7 +719,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.25 +# name: TestSessionRecordings.test_get_session_recordings.24 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -757,7 +731,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.26 +# name: TestSessionRecordings.test_get_session_recordings.25 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -778,7 +752,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.27 +# name: TestSessionRecordings.test_get_session_recordings.26 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -851,7 +825,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.28 +# name: TestSessionRecordings.test_get_session_recordings.27 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -870,7 +844,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.29 +# name: TestSessionRecordings.test_get_session_recordings.28 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -898,6 +872,14 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- +# name: TestSessionRecordings.test_get_session_recordings.29 + ''' + SELECT "posthog_sessionrecordingviewed"."session_id" + FROM "posthog_sessionrecordingviewed" + WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 + AND "posthog_sessionrecordingviewed"."user_id" = 2) + ''' +# --- # name: TestSessionRecordings.test_get_session_recordings.3 ''' SELECT "posthog_team"."id", @@ -966,10 +948,26 @@ # --- # name: TestSessionRecordings.test_get_session_recordings.30 ''' - SELECT "posthog_sessionrecordingviewed"."session_id" - FROM "posthog_sessionrecordingviewed" - WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 - AND "posthog_sessionrecordingviewed"."user_id" = 2) + SELECT "posthog_persondistinctid"."id", + "posthog_persondistinctid"."team_id", + "posthog_persondistinctid"."person_id", + "posthog_persondistinctid"."distinct_id", + "posthog_persondistinctid"."version", + "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_persondistinctid" + INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") + WHERE ("posthog_persondistinctid"."distinct_id" IN ('user2', + 'user_one_0') + AND "posthog_persondistinctid"."team_id" = 2) ''' # --- # name: TestSessionRecordings.test_get_session_recordings.31 @@ -1485,21 +1483,26 @@ # --- # name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.10 ''' - SELECT "posthog_datawarehousetable"."created_by_id", - "posthog_datawarehousetable"."created_at", - "posthog_datawarehousetable"."updated_at", - "posthog_datawarehousetable"."deleted", - "posthog_datawarehousetable"."deleted_at", - "posthog_datawarehousetable"."id", - "posthog_datawarehousetable"."name", - "posthog_datawarehousetable"."format", - "posthog_datawarehousetable"."team_id", - "posthog_datawarehousetable"."url_pattern", - "posthog_datawarehousetable"."credential_id", - "posthog_datawarehousetable"."external_data_source_id", - "posthog_datawarehousetable"."columns", - "posthog_datawarehousetable"."row_count", - "posthog_user"."id", + SELECT "posthog_datawarehousejoin"."created_by_id", + "posthog_datawarehousejoin"."created_at", + "posthog_datawarehousejoin"."deleted", + "posthog_datawarehousejoin"."deleted_at", + "posthog_datawarehousejoin"."id", + "posthog_datawarehousejoin"."team_id", + "posthog_datawarehousejoin"."source_table_name", + "posthog_datawarehousejoin"."source_table_key", + "posthog_datawarehousejoin"."joining_table_name", + "posthog_datawarehousejoin"."joining_table_key", + "posthog_datawarehousejoin"."field_name" + FROM "posthog_datawarehousejoin" + WHERE ("posthog_datawarehousejoin"."team_id" = 2 + AND NOT ("posthog_datawarehousejoin"."deleted" + AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.100 + ''' + SELECT "posthog_user"."id", "posthog_user"."password", "posthog_user"."last_login", "posthog_user"."first_name", @@ -1514,7 +1517,6 @@ "posthog_user"."temporary_token", "posthog_user"."distinct_id", "posthog_user"."is_email_verified", - "posthog_user"."requested_password_reset_at", "posthog_user"."has_seen_product_intro_for", "posthog_user"."strapi_id", "posthog_user"."is_active", @@ -1524,105 +1526,13 @@ "posthog_user"."toolbar_mode", "posthog_user"."hedgehog_config", "posthog_user"."events_column_config", - "posthog_user"."email_opt_in", - "posthog_datawarehousecredential"."created_by_id", - "posthog_datawarehousecredential"."created_at", - "posthog_datawarehousecredential"."id", - "posthog_datawarehousecredential"."access_key", - "posthog_datawarehousecredential"."access_secret", - "posthog_datawarehousecredential"."team_id", - "posthog_externaldatasource"."created_by_id", - "posthog_externaldatasource"."created_at", - "posthog_externaldatasource"."updated_at", - "posthog_externaldatasource"."deleted", - "posthog_externaldatasource"."deleted_at", - "posthog_externaldatasource"."id", - "posthog_externaldatasource"."source_id", - "posthog_externaldatasource"."connection_id", - "posthog_externaldatasource"."destination_id", - "posthog_externaldatasource"."team_id", - "posthog_externaldatasource"."sync_frequency", - "posthog_externaldatasource"."status", - "posthog_externaldatasource"."source_type", - "posthog_externaldatasource"."job_inputs", - "posthog_externaldatasource"."are_tables_created", - "posthog_externaldatasource"."prefix" - FROM "posthog_datawarehousetable" - LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") - LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") - LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") - WHERE ("posthog_datawarehousetable"."team_id" = 2 - AND NOT ("posthog_datawarehousetable"."deleted" - AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.100 - ''' - SELECT "posthog_sessionrecording"."id", - "posthog_sessionrecording"."session_id", - "posthog_sessionrecording"."team_id", - "posthog_sessionrecording"."created_at", - "posthog_sessionrecording"."deleted", - "posthog_sessionrecording"."object_storage_path", - "posthog_sessionrecording"."distinct_id", - "posthog_sessionrecording"."duration", - "posthog_sessionrecording"."active_seconds", - "posthog_sessionrecording"."inactive_seconds", - "posthog_sessionrecording"."start_time", - "posthog_sessionrecording"."end_time", - "posthog_sessionrecording"."click_count", - "posthog_sessionrecording"."keypress_count", - "posthog_sessionrecording"."mouse_activity_count", - "posthog_sessionrecording"."console_log_count", - "posthog_sessionrecording"."console_warn_count", - "posthog_sessionrecording"."console_error_count", - "posthog_sessionrecording"."start_url", - "posthog_sessionrecording"."storage_version" - FROM "posthog_sessionrecording" - WHERE ("posthog_sessionrecording"."session_id" IN ('1', - '2', - '3', - '4', - '5') - AND "posthog_sessionrecording"."team_id" = 2) + "posthog_user"."email_opt_in" + FROM "posthog_user" + WHERE "posthog_user"."id" = 2 + LIMIT 21 ''' # --- # name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.101 - ''' - SELECT "posthog_sessionrecordingviewed"."session_id" - FROM "posthog_sessionrecordingviewed" - WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 - AND "posthog_sessionrecordingviewed"."user_id" = 2) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.102 - ''' - SELECT "posthog_persondistinctid"."id", - "posthog_persondistinctid"."team_id", - "posthog_persondistinctid"."person_id", - "posthog_persondistinctid"."distinct_id", - "posthog_persondistinctid"."version", - "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_persondistinctid" - INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") - WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', - 'user2', - 'user3', - 'user4', - 'user5') - AND "posthog_persondistinctid"."team_id" = 2) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.103 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -1674,13 +1584,6 @@ "posthog_team"."modifiers", "posthog_team"."correlation_config", "posthog_team"."session_recording_retention_period_days", - "posthog_team"."plugins_opt_in", - "posthog_team"."opt_out_capture", - "posthog_team"."event_names", - "posthog_team"."event_names_with_usage", - "posthog_team"."event_properties", - "posthog_team"."event_properties_with_usage", - "posthog_team"."event_properties_numerical", "posthog_team"."external_data_workspace_id", "posthog_team"."external_data_workspace_last_synced_at" FROM "posthog_team" @@ -1688,136 +1591,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.104 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user6' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.105 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user6' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.106 - ''' - SELECT "posthog_user"."id", - "posthog_user"."password", - "posthog_user"."last_login", - "posthog_user"."first_name", - "posthog_user"."last_name", - "posthog_user"."is_staff", - "posthog_user"."date_joined", - "posthog_user"."uuid", - "posthog_user"."current_organization_id", - "posthog_user"."current_team_id", - "posthog_user"."email", - "posthog_user"."pending_email", - "posthog_user"."temporary_token", - "posthog_user"."distinct_id", - "posthog_user"."is_email_verified", - "posthog_user"."has_seen_product_intro_for", - "posthog_user"."strapi_id", - "posthog_user"."is_active", - "posthog_user"."theme_mode", - "posthog_user"."partial_notification_settings", - "posthog_user"."anonymize_data", - "posthog_user"."toolbar_mode", - "posthog_user"."hedgehog_config", - "posthog_user"."events_column_config", - "posthog_user"."email_opt_in" - FROM "posthog_user" - WHERE "posthog_user"."id" = 2 - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.107 - ''' - SELECT "posthog_team"."id", - "posthog_team"."uuid", - "posthog_team"."organization_id", - "posthog_team"."project_id", - "posthog_team"."api_token", - "posthog_team"."app_urls", - "posthog_team"."name", - "posthog_team"."slack_incoming_webhook", - "posthog_team"."created_at", - "posthog_team"."updated_at", - "posthog_team"."anonymize_ips", - "posthog_team"."completed_snippet_onboarding", - "posthog_team"."has_completed_onboarding_for", - "posthog_team"."ingested_event", - "posthog_team"."autocapture_opt_out", - "posthog_team"."autocapture_web_vitals_opt_in", - "posthog_team"."autocapture_web_vitals_allowed_metrics", - "posthog_team"."autocapture_exceptions_opt_in", - "posthog_team"."autocapture_exceptions_errors_to_ignore", - "posthog_team"."session_recording_opt_in", - "posthog_team"."session_recording_sample_rate", - "posthog_team"."session_recording_minimum_duration_milliseconds", - "posthog_team"."session_recording_linked_flag", - "posthog_team"."session_recording_network_payload_capture_config", - "posthog_team"."session_recording_url_trigger_config", - "posthog_team"."session_replay_config", - "posthog_team"."survey_config", - "posthog_team"."capture_console_log_opt_in", - "posthog_team"."capture_performance_opt_in", - "posthog_team"."surveys_opt_in", - "posthog_team"."heatmaps_opt_in", - "posthog_team"."session_recording_version", - "posthog_team"."signup_token", - "posthog_team"."is_demo", - "posthog_team"."access_control", - "posthog_team"."week_start_day", - "posthog_team"."inject_web_apps", - "posthog_team"."test_account_filters", - "posthog_team"."test_account_filters_default_checked", - "posthog_team"."path_cleaning_filters", - "posthog_team"."timezone", - "posthog_team"."data_attributes", - "posthog_team"."person_display_name_properties", - "posthog_team"."live_events_columns", - "posthog_team"."recording_domains", - "posthog_team"."primary_dashboard_id", - "posthog_team"."extra_settings", - "posthog_team"."modifiers", - "posthog_team"."correlation_config", - "posthog_team"."session_recording_retention_period_days", - "posthog_team"."external_data_workspace_id", - "posthog_team"."external_data_workspace_last_synced_at" - FROM "posthog_team" - WHERE "posthog_team"."id" = 2 - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.108 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.102 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -1849,52 +1623,7 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.109 - ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.11 - ''' - SELECT "posthog_datawarehousejoin"."created_by_id", - "posthog_datawarehousejoin"."created_at", - "posthog_datawarehousejoin"."deleted", - "posthog_datawarehousejoin"."deleted_at", - "posthog_datawarehousejoin"."id", - "posthog_datawarehousejoin"."team_id", - "posthog_datawarehousejoin"."source_table_name", - "posthog_datawarehousejoin"."source_table_key", - "posthog_datawarehousejoin"."joining_table_name", - "posthog_datawarehousejoin"."joining_table_key", - "posthog_datawarehousejoin"."field_name" - FROM "posthog_datawarehousejoin" - WHERE ("posthog_datawarehousejoin"."team_id" = 2 - AND NOT ("posthog_datawarehousejoin"."deleted" - AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.110 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.103 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -1906,7 +1635,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.111 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.104 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -1927,7 +1656,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.112 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.105 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -2000,7 +1729,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.113 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.106 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -2019,7 +1748,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.114 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.107 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -2031,7 +1760,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.115 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.108 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -2052,7 +1781,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.116 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.109 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -2125,7 +1854,15 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.117 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.11 + ''' + SELECT "posthog_sessionrecordingviewed"."session_id" + FROM "posthog_sessionrecordingviewed" + WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 + AND "posthog_sessionrecordingviewed"."user_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.110 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -2144,7 +1881,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.118 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.111 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -2176,15 +1913,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.119 - ''' - SELECT "posthog_sessionrecordingviewed"."session_id" - FROM "posthog_sessionrecordingviewed" - WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 - AND "posthog_sessionrecordingviewed"."user_id" = 2) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.12 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.112 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -2192,7 +1921,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.120 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.113 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -2220,7 +1949,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.121 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.114 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -2286,7 +2015,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.122 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.115 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -2305,7 +2034,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.123 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.116 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -2324,7 +2053,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.124 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.117 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -2356,7 +2085,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.125 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.118 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -2415,7 +2144,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.126 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.119 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -2447,66 +2176,7 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.127 - ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.128 - ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.129 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at", - "posthog_datawarehousesavedquery"."table_id" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.13 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.12 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -2572,23 +2242,56 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.130 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.120 ''' - SELECT "posthog_datawarehousetable"."created_by_id", - "posthog_datawarehousetable"."created_at", - "posthog_datawarehousetable"."updated_at", - "posthog_datawarehousetable"."deleted", - "posthog_datawarehousetable"."deleted_at", - "posthog_datawarehousetable"."id", - "posthog_datawarehousetable"."name", - "posthog_datawarehousetable"."format", - "posthog_datawarehousetable"."team_id", - "posthog_datawarehousetable"."url_pattern", - "posthog_datawarehousetable"."credential_id", - "posthog_datawarehousetable"."external_data_source_id", - "posthog_datawarehousetable"."columns", - "posthog_datawarehousetable"."row_count", - "posthog_user"."id", + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.121 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at", + "posthog_datawarehousesavedquery"."table_id" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.122 + ''' + SELECT "posthog_datawarehousetable"."created_by_id", + "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", + "posthog_datawarehousetable"."deleted", + "posthog_datawarehousetable"."deleted_at", + "posthog_datawarehousetable"."id", + "posthog_datawarehousetable"."name", + "posthog_datawarehousetable"."format", + "posthog_datawarehousetable"."team_id", + "posthog_datawarehousetable"."url_pattern", + "posthog_datawarehousetable"."credential_id", + "posthog_datawarehousetable"."external_data_source_id", + "posthog_datawarehousetable"."columns", + "posthog_datawarehousetable"."row_count", + "posthog_user"."id", "posthog_user"."password", "posthog_user"."last_login", "posthog_user"."first_name", @@ -2645,7 +2348,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.131 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.123 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -2664,7 +2367,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.132 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.124 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -2676,7 +2379,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.133 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.125 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -2697,7 +2400,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.134 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.126 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -2770,7 +2473,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.135 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.127 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -2789,7 +2492,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.136 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.128 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -2822,7 +2525,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.137 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.129 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -2830,7 +2533,26 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.138 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.13 + ''' + SELECT "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user1' + AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.130 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -2859,7 +2581,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.139 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.131 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -2925,26 +2647,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.14 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user1' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.140 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.132 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -2963,7 +2666,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.141 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.133 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -2982,7 +2685,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.142 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.134 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -3014,7 +2717,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.143 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.135 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -3073,7 +2776,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.144 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.136 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -3105,33 +2808,7 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.145 - ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.146 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.137 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -3143,7 +2820,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.147 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.138 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -3164,7 +2841,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.148 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.139 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -3237,26 +2914,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.149 - ''' - SELECT "posthog_datawarehousejoin"."created_by_id", - "posthog_datawarehousejoin"."created_at", - "posthog_datawarehousejoin"."deleted", - "posthog_datawarehousejoin"."deleted_at", - "posthog_datawarehousejoin"."id", - "posthog_datawarehousejoin"."team_id", - "posthog_datawarehousejoin"."source_table_name", - "posthog_datawarehousejoin"."source_table_key", - "posthog_datawarehousejoin"."joining_table_name", - "posthog_datawarehousejoin"."joining_table_key", - "posthog_datawarehousejoin"."field_name" - FROM "posthog_datawarehousejoin" - WHERE ("posthog_datawarehousejoin"."team_id" = 2 - AND NOT ("posthog_datawarehousejoin"."deleted" - AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.15 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.14 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -3275,7 +2933,26 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.150 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.140 + ''' + SELECT "posthog_datawarehousejoin"."created_by_id", + "posthog_datawarehousejoin"."created_at", + "posthog_datawarehousejoin"."deleted", + "posthog_datawarehousejoin"."deleted_at", + "posthog_datawarehousejoin"."id", + "posthog_datawarehousejoin"."team_id", + "posthog_datawarehousejoin"."source_table_name", + "posthog_datawarehousejoin"."source_table_key", + "posthog_datawarehousejoin"."joining_table_name", + "posthog_datawarehousejoin"."joining_table_key", + "posthog_datawarehousejoin"."field_name" + FROM "posthog_datawarehousejoin" + WHERE ("posthog_datawarehousejoin"."team_id" = 2 + AND NOT ("posthog_datawarehousejoin"."deleted" + AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.141 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -3287,7 +2964,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.151 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.142 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -3308,7 +2985,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.152 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.143 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -3381,7 +3058,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.153 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.144 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -3400,7 +3077,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.154 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.145 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -3434,7 +3111,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.155 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.146 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -3442,7 +3119,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.156 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.147 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -3472,7 +3149,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.157 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.148 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -3538,26 +3215,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.158 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user9' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.159 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.149 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -3576,7 +3234,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.16 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.15 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -3608,7 +3266,26 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.160 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.150 + ''' + SELECT "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user9' + AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.151 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -3640,7 +3317,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.161 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.152 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -3699,7 +3376,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.162 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.153 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -3731,33 +3408,7 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.163 - ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.164 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.154 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -3769,7 +3420,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.165 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.155 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -3790,7 +3441,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.166 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.156 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -3863,7 +3514,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.167 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.157 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -3882,7 +3533,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.168 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.158 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -3894,7 +3545,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.169 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.159 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -3915,7 +3566,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.17 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.16 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -3974,7 +3625,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.170 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.160 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -4047,7 +3698,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.171 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.161 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -4066,7 +3717,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.172 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.162 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -4101,7 +3752,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.173 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.163 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -4109,7 +3760,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.174 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.164 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -4140,7 +3791,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.175 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.165 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -4206,7 +3857,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.176 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.166 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -4225,7 +3876,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.177 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.167 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -4244,7 +3895,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.178 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.168 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -4276,7 +3927,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.179 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.169 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -4335,7 +3986,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.18 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.17 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -4367,7 +4018,7 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.180 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.170 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -4399,33 +4050,7 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.181 - ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.182 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.171 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -4437,7 +4062,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.183 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.172 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -4458,7 +4083,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.184 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.173 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -4531,7 +4156,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.185 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.174 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -4550,7 +4175,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.186 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.175 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -4562,7 +4187,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.187 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.176 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -4583,7 +4208,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.188 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.177 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -4656,7 +4281,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.189 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.178 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -4675,33 +4300,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.19 - ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.190 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.179 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -4737,47 +4336,19 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.191 - ''' - SELECT "posthog_sessionrecordingviewed"."session_id" - FROM "posthog_sessionrecordingviewed" - WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 - AND "posthog_sessionrecordingviewed"."user_id" = 2) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.192 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.18 ''' - SELECT "posthog_persondistinctid"."id", - "posthog_persondistinctid"."team_id", - "posthog_persondistinctid"."person_id", - "posthog_persondistinctid"."distinct_id", - "posthog_persondistinctid"."version", - "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_persondistinctid" - INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") - WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', - 'user10', - 'user2', - 'user3', - 'user4', - 'user5', - 'user6', - 'user7', - 'user8', - 'user9') - AND "posthog_persondistinctid"."team_id" = 2) + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.193 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.180 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -4785,7 +4356,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.194 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.181 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -4817,39 +4388,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.2 - ''' - SELECT "posthog_organizationmembership"."id", - "posthog_organizationmembership"."organization_id", - "posthog_organizationmembership"."user_id", - "posthog_organizationmembership"."level", - "posthog_organizationmembership"."joined_at", - "posthog_organizationmembership"."updated_at", - "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organizationmembership" - INNER JOIN "posthog_organization" ON ("posthog_organizationmembership"."organization_id" = "posthog_organization"."id") - WHERE "posthog_organizationmembership"."user_id" = 2 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.20 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.182 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -4861,7 +4400,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.21 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.183 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -4882,7 +4421,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.22 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.184 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -4955,7 +4494,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.23 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.185 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -4974,7 +4513,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.24 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.186 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -4986,7 +4525,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.25 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.187 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -5007,7 +4546,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.26 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.188 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -5080,7 +4619,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.27 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.189 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -5099,7 +4638,28 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.28 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.19 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at", + "posthog_datawarehousesavedquery"."table_id" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.190 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -5122,11 +4682,20 @@ "posthog_sessionrecording"."start_url", "posthog_sessionrecording"."storage_version" FROM "posthog_sessionrecording" - WHERE ("posthog_sessionrecording"."session_id" IN ('1') + WHERE ("posthog_sessionrecording"."session_id" IN ('1', + '10', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9') AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.29 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.191 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -5134,13 +4703,91 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.3 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.192 ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", + SELECT "posthog_persondistinctid"."id", + "posthog_persondistinctid"."team_id", + "posthog_persondistinctid"."person_id", + "posthog_persondistinctid"."distinct_id", + "posthog_persondistinctid"."version", + "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_persondistinctid" + INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") + WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', + 'user10', + 'user2', + 'user3', + 'user4', + 'user5', + 'user6', + 'user7', + 'user8', + 'user9') + AND "posthog_persondistinctid"."team_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.193 + ''' + SELECT "posthog_sessionrecordingviewed"."session_id" + FROM "posthog_sessionrecordingviewed" + WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 + AND "posthog_sessionrecordingviewed"."user_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.194 + ''' + SELECT "posthog_persondistinctid"."id", + "posthog_persondistinctid"."team_id", + "posthog_persondistinctid"."person_id", + "posthog_persondistinctid"."distinct_id", + "posthog_persondistinctid"."version", + "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_persondistinctid" + INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") + WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', + 'user10', + 'user2', + 'user3', + 'user4', + 'user5', + 'user6', + 'user7', + 'user8', + 'user9') + AND "posthog_persondistinctid"."team_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.2 + ''' + SELECT "posthog_organizationmembership"."id", + "posthog_organizationmembership"."organization_id", + "posthog_organizationmembership"."user_id", + "posthog_organizationmembership"."level", + "posthog_organizationmembership"."joined_at", + "posthog_organizationmembership"."updated_at", + "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", "posthog_organization"."updated_at", "posthog_organization"."plugins_access_level", "posthog_organization"."for_internal_metrics", @@ -5155,12 +4802,264 @@ "posthog_organization"."setup_section_2_completed", "posthog_organization"."personalization", "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 + FROM "posthog_organizationmembership" + INNER JOIN "posthog_organization" ON ("posthog_organizationmembership"."organization_id" = "posthog_organization"."id") + WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.30 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.20 + ''' + SELECT "posthog_datawarehousetable"."created_by_id", + "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", + "posthog_datawarehousetable"."deleted", + "posthog_datawarehousetable"."deleted_at", + "posthog_datawarehousetable"."id", + "posthog_datawarehousetable"."name", + "posthog_datawarehousetable"."format", + "posthog_datawarehousetable"."team_id", + "posthog_datawarehousetable"."url_pattern", + "posthog_datawarehousetable"."credential_id", + "posthog_datawarehousetable"."external_data_source_id", + "posthog_datawarehousetable"."columns", + "posthog_datawarehousetable"."row_count", + "posthog_user"."id", + "posthog_user"."password", + "posthog_user"."last_login", + "posthog_user"."first_name", + "posthog_user"."last_name", + "posthog_user"."is_staff", + "posthog_user"."date_joined", + "posthog_user"."uuid", + "posthog_user"."current_organization_id", + "posthog_user"."current_team_id", + "posthog_user"."email", + "posthog_user"."pending_email", + "posthog_user"."temporary_token", + "posthog_user"."distinct_id", + "posthog_user"."is_email_verified", + "posthog_user"."requested_password_reset_at", + "posthog_user"."has_seen_product_intro_for", + "posthog_user"."strapi_id", + "posthog_user"."is_active", + "posthog_user"."theme_mode", + "posthog_user"."partial_notification_settings", + "posthog_user"."anonymize_data", + "posthog_user"."toolbar_mode", + "posthog_user"."hedgehog_config", + "posthog_user"."events_column_config", + "posthog_user"."email_opt_in", + "posthog_datawarehousecredential"."created_by_id", + "posthog_datawarehousecredential"."created_at", + "posthog_datawarehousecredential"."id", + "posthog_datawarehousecredential"."access_key", + "posthog_datawarehousecredential"."access_secret", + "posthog_datawarehousecredential"."team_id", + "posthog_externaldatasource"."created_by_id", + "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", + "posthog_externaldatasource"."deleted", + "posthog_externaldatasource"."deleted_at", + "posthog_externaldatasource"."id", + "posthog_externaldatasource"."source_id", + "posthog_externaldatasource"."connection_id", + "posthog_externaldatasource"."destination_id", + "posthog_externaldatasource"."team_id", + "posthog_externaldatasource"."sync_frequency", + "posthog_externaldatasource"."status", + "posthog_externaldatasource"."source_type", + "posthog_externaldatasource"."job_inputs", + "posthog_externaldatasource"."are_tables_created", + "posthog_externaldatasource"."prefix" + FROM "posthog_datawarehousetable" + LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") + LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") + LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") + WHERE ("posthog_datawarehousetable"."team_id" = 2 + AND NOT ("posthog_datawarehousetable"."deleted" + AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.21 + ''' + SELECT "posthog_datawarehousejoin"."created_by_id", + "posthog_datawarehousejoin"."created_at", + "posthog_datawarehousejoin"."deleted", + "posthog_datawarehousejoin"."deleted_at", + "posthog_datawarehousejoin"."id", + "posthog_datawarehousejoin"."team_id", + "posthog_datawarehousejoin"."source_table_name", + "posthog_datawarehousejoin"."source_table_key", + "posthog_datawarehousejoin"."joining_table_name", + "posthog_datawarehousejoin"."joining_table_key", + "posthog_datawarehousejoin"."field_name" + FROM "posthog_datawarehousejoin" + WHERE ("posthog_datawarehousejoin"."team_id" = 2 + AND NOT ("posthog_datawarehousejoin"."deleted" + AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.22 + ''' + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.23 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at", + "posthog_datawarehousesavedquery"."table_id" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.24 + ''' + SELECT "posthog_datawarehousetable"."created_by_id", + "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", + "posthog_datawarehousetable"."deleted", + "posthog_datawarehousetable"."deleted_at", + "posthog_datawarehousetable"."id", + "posthog_datawarehousetable"."name", + "posthog_datawarehousetable"."format", + "posthog_datawarehousetable"."team_id", + "posthog_datawarehousetable"."url_pattern", + "posthog_datawarehousetable"."credential_id", + "posthog_datawarehousetable"."external_data_source_id", + "posthog_datawarehousetable"."columns", + "posthog_datawarehousetable"."row_count", + "posthog_user"."id", + "posthog_user"."password", + "posthog_user"."last_login", + "posthog_user"."first_name", + "posthog_user"."last_name", + "posthog_user"."is_staff", + "posthog_user"."date_joined", + "posthog_user"."uuid", + "posthog_user"."current_organization_id", + "posthog_user"."current_team_id", + "posthog_user"."email", + "posthog_user"."pending_email", + "posthog_user"."temporary_token", + "posthog_user"."distinct_id", + "posthog_user"."is_email_verified", + "posthog_user"."requested_password_reset_at", + "posthog_user"."has_seen_product_intro_for", + "posthog_user"."strapi_id", + "posthog_user"."is_active", + "posthog_user"."theme_mode", + "posthog_user"."partial_notification_settings", + "posthog_user"."anonymize_data", + "posthog_user"."toolbar_mode", + "posthog_user"."hedgehog_config", + "posthog_user"."events_column_config", + "posthog_user"."email_opt_in", + "posthog_datawarehousecredential"."created_by_id", + "posthog_datawarehousecredential"."created_at", + "posthog_datawarehousecredential"."id", + "posthog_datawarehousecredential"."access_key", + "posthog_datawarehousecredential"."access_secret", + "posthog_datawarehousecredential"."team_id", + "posthog_externaldatasource"."created_by_id", + "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", + "posthog_externaldatasource"."deleted", + "posthog_externaldatasource"."deleted_at", + "posthog_externaldatasource"."id", + "posthog_externaldatasource"."source_id", + "posthog_externaldatasource"."connection_id", + "posthog_externaldatasource"."destination_id", + "posthog_externaldatasource"."team_id", + "posthog_externaldatasource"."sync_frequency", + "posthog_externaldatasource"."status", + "posthog_externaldatasource"."source_type", + "posthog_externaldatasource"."job_inputs", + "posthog_externaldatasource"."are_tables_created", + "posthog_externaldatasource"."prefix" + FROM "posthog_datawarehousetable" + LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") + LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") + LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") + WHERE ("posthog_datawarehousetable"."team_id" = 2 + AND NOT ("posthog_datawarehousetable"."deleted" + AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.25 + ''' + SELECT "posthog_datawarehousejoin"."created_by_id", + "posthog_datawarehousejoin"."created_at", + "posthog_datawarehousejoin"."deleted", + "posthog_datawarehousejoin"."deleted_at", + "posthog_datawarehousejoin"."id", + "posthog_datawarehousejoin"."team_id", + "posthog_datawarehousejoin"."source_table_name", + "posthog_datawarehousejoin"."source_table_key", + "posthog_datawarehousejoin"."joining_table_name", + "posthog_datawarehousejoin"."joining_table_key", + "posthog_datawarehousejoin"."field_name" + FROM "posthog_datawarehousejoin" + WHERE ("posthog_datawarehousejoin"."team_id" = 2 + AND NOT ("posthog_datawarehousejoin"."deleted" + AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.26 + ''' + SELECT "posthog_sessionrecording"."id", + "posthog_sessionrecording"."session_id", + "posthog_sessionrecording"."team_id", + "posthog_sessionrecording"."created_at", + "posthog_sessionrecording"."deleted", + "posthog_sessionrecording"."object_storage_path", + "posthog_sessionrecording"."distinct_id", + "posthog_sessionrecording"."duration", + "posthog_sessionrecording"."active_seconds", + "posthog_sessionrecording"."inactive_seconds", + "posthog_sessionrecording"."start_time", + "posthog_sessionrecording"."end_time", + "posthog_sessionrecording"."click_count", + "posthog_sessionrecording"."keypress_count", + "posthog_sessionrecording"."mouse_activity_count", + "posthog_sessionrecording"."console_log_count", + "posthog_sessionrecording"."console_warn_count", + "posthog_sessionrecording"."console_error_count", + "posthog_sessionrecording"."start_url", + "posthog_sessionrecording"."storage_version" + FROM "posthog_sessionrecording" + WHERE ("posthog_sessionrecording"."session_id" IN ('1') + AND "posthog_sessionrecording"."team_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.27 + ''' + SELECT "posthog_sessionrecordingviewed"."session_id" + FROM "posthog_sessionrecordingviewed" + WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 + AND "posthog_sessionrecordingviewed"."user_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.28 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -5183,7 +5082,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.31 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.29 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -5249,7 +5148,19 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.32 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.3 + ''' + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.30 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -5268,7 +5179,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.33 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.31 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -5287,7 +5198,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.34 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.32 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -5319,7 +5230,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.35 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.33 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -5378,7 +5289,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.36 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.34 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -5410,33 +5321,7 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.37 - ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.38 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.35 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -5448,7 +5333,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.39 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.36 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -5469,19 +5354,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.4 - ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.40 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.37 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -5554,7 +5427,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.41 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.38 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -5573,7 +5446,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.42 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.39 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -5585,7 +5458,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.43 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.4 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -5606,7 +5479,28 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.44 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.40 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at", + "posthog_datawarehousesavedquery"."table_id" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.41 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -5679,7 +5573,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.45 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.42 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -5698,7 +5592,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.46 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.43 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -5726,7 +5620,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.47 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.44 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -5734,7 +5628,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.48 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.45 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -5758,7 +5652,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.49 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.46 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -5824,28 +5718,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.5 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at", - "posthog_datawarehousesavedquery"."table_id" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.50 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.47 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -5864,7 +5737,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.51 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.48 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -5883,7 +5756,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.52 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.49 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -5915,7 +5788,80 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.53 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.5 + ''' + SELECT "posthog_datawarehousetable"."created_by_id", + "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", + "posthog_datawarehousetable"."deleted", + "posthog_datawarehousetable"."deleted_at", + "posthog_datawarehousetable"."id", + "posthog_datawarehousetable"."name", + "posthog_datawarehousetable"."format", + "posthog_datawarehousetable"."team_id", + "posthog_datawarehousetable"."url_pattern", + "posthog_datawarehousetable"."credential_id", + "posthog_datawarehousetable"."external_data_source_id", + "posthog_datawarehousetable"."columns", + "posthog_datawarehousetable"."row_count", + "posthog_user"."id", + "posthog_user"."password", + "posthog_user"."last_login", + "posthog_user"."first_name", + "posthog_user"."last_name", + "posthog_user"."is_staff", + "posthog_user"."date_joined", + "posthog_user"."uuid", + "posthog_user"."current_organization_id", + "posthog_user"."current_team_id", + "posthog_user"."email", + "posthog_user"."pending_email", + "posthog_user"."temporary_token", + "posthog_user"."distinct_id", + "posthog_user"."is_email_verified", + "posthog_user"."requested_password_reset_at", + "posthog_user"."has_seen_product_intro_for", + "posthog_user"."strapi_id", + "posthog_user"."is_active", + "posthog_user"."theme_mode", + "posthog_user"."partial_notification_settings", + "posthog_user"."anonymize_data", + "posthog_user"."toolbar_mode", + "posthog_user"."hedgehog_config", + "posthog_user"."events_column_config", + "posthog_user"."email_opt_in", + "posthog_datawarehousecredential"."created_by_id", + "posthog_datawarehousecredential"."created_at", + "posthog_datawarehousecredential"."id", + "posthog_datawarehousecredential"."access_key", + "posthog_datawarehousecredential"."access_secret", + "posthog_datawarehousecredential"."team_id", + "posthog_externaldatasource"."created_by_id", + "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", + "posthog_externaldatasource"."deleted", + "posthog_externaldatasource"."deleted_at", + "posthog_externaldatasource"."id", + "posthog_externaldatasource"."source_id", + "posthog_externaldatasource"."connection_id", + "posthog_externaldatasource"."destination_id", + "posthog_externaldatasource"."team_id", + "posthog_externaldatasource"."sync_frequency", + "posthog_externaldatasource"."status", + "posthog_externaldatasource"."source_type", + "posthog_externaldatasource"."job_inputs", + "posthog_externaldatasource"."are_tables_created", + "posthog_externaldatasource"."prefix" + FROM "posthog_datawarehousetable" + LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") + LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") + LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") + WHERE ("posthog_datawarehousetable"."team_id" = 2 + AND NOT ("posthog_datawarehousetable"."deleted" + AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.50 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -5974,7 +5920,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.54 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.51 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -6006,158 +5952,40 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.55 - ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.56 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.52 ''' SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.57 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at", - "posthog_datawarehousesavedquery"."table_id" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.58 - ''' - SELECT "posthog_datawarehousetable"."created_by_id", - "posthog_datawarehousetable"."created_at", - "posthog_datawarehousetable"."updated_at", - "posthog_datawarehousetable"."deleted", - "posthog_datawarehousetable"."deleted_at", - "posthog_datawarehousetable"."id", - "posthog_datawarehousetable"."name", - "posthog_datawarehousetable"."format", - "posthog_datawarehousetable"."team_id", - "posthog_datawarehousetable"."url_pattern", - "posthog_datawarehousetable"."credential_id", - "posthog_datawarehousetable"."external_data_source_id", - "posthog_datawarehousetable"."columns", - "posthog_datawarehousetable"."row_count", - "posthog_user"."id", - "posthog_user"."password", - "posthog_user"."last_login", - "posthog_user"."first_name", - "posthog_user"."last_name", - "posthog_user"."is_staff", - "posthog_user"."date_joined", - "posthog_user"."uuid", - "posthog_user"."current_organization_id", - "posthog_user"."current_team_id", - "posthog_user"."email", - "posthog_user"."pending_email", - "posthog_user"."temporary_token", - "posthog_user"."distinct_id", - "posthog_user"."is_email_verified", - "posthog_user"."requested_password_reset_at", - "posthog_user"."has_seen_product_intro_for", - "posthog_user"."strapi_id", - "posthog_user"."is_active", - "posthog_user"."theme_mode", - "posthog_user"."partial_notification_settings", - "posthog_user"."anonymize_data", - "posthog_user"."toolbar_mode", - "posthog_user"."hedgehog_config", - "posthog_user"."events_column_config", - "posthog_user"."email_opt_in", - "posthog_datawarehousecredential"."created_by_id", - "posthog_datawarehousecredential"."created_at", - "posthog_datawarehousecredential"."id", - "posthog_datawarehousecredential"."access_key", - "posthog_datawarehousecredential"."access_secret", - "posthog_datawarehousecredential"."team_id", - "posthog_externaldatasource"."created_by_id", - "posthog_externaldatasource"."created_at", - "posthog_externaldatasource"."updated_at", - "posthog_externaldatasource"."deleted", - "posthog_externaldatasource"."deleted_at", - "posthog_externaldatasource"."id", - "posthog_externaldatasource"."source_id", - "posthog_externaldatasource"."connection_id", - "posthog_externaldatasource"."destination_id", - "posthog_externaldatasource"."team_id", - "posthog_externaldatasource"."sync_frequency", - "posthog_externaldatasource"."status", - "posthog_externaldatasource"."source_type", - "posthog_externaldatasource"."job_inputs", - "posthog_externaldatasource"."are_tables_created", - "posthog_externaldatasource"."prefix" - FROM "posthog_datawarehousetable" - LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") - LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") - LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") - WHERE ("posthog_datawarehousetable"."team_id" = 2 - AND NOT ("posthog_datawarehousetable"."deleted" - AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.59 - ''' - SELECT "posthog_datawarehousejoin"."created_by_id", - "posthog_datawarehousejoin"."created_at", - "posthog_datawarehousejoin"."deleted", - "posthog_datawarehousejoin"."deleted_at", - "posthog_datawarehousejoin"."id", - "posthog_datawarehousejoin"."team_id", - "posthog_datawarehousejoin"."source_table_name", - "posthog_datawarehousejoin"."source_table_key", - "posthog_datawarehousejoin"."joining_table_name", - "posthog_datawarehousejoin"."joining_table_key", - "posthog_datawarehousejoin"."field_name" - FROM "posthog_datawarehousejoin" - WHERE ("posthog_datawarehousejoin"."team_id" = 2 - AND NOT ("posthog_datawarehousejoin"."deleted" - AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.6 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.53 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at", + "posthog_datawarehousesavedquery"."table_id" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.54 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -6230,7 +6058,26 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.60 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.55 + ''' + SELECT "posthog_datawarehousejoin"."created_by_id", + "posthog_datawarehousejoin"."created_at", + "posthog_datawarehousejoin"."deleted", + "posthog_datawarehousejoin"."deleted_at", + "posthog_datawarehousejoin"."id", + "posthog_datawarehousejoin"."team_id", + "posthog_datawarehousejoin"."source_table_name", + "posthog_datawarehousejoin"."source_table_key", + "posthog_datawarehousejoin"."joining_table_name", + "posthog_datawarehousejoin"."joining_table_key", + "posthog_datawarehousejoin"."field_name" + FROM "posthog_datawarehousejoin" + WHERE ("posthog_datawarehousejoin"."team_id" = 2 + AND NOT ("posthog_datawarehousejoin"."deleted" + AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.56 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -6242,7 +6089,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.61 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.57 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -6263,7 +6110,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.62 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.58 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -6336,7 +6183,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.63 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.59 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -6355,7 +6202,26 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.64 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.6 + ''' + SELECT "posthog_datawarehousejoin"."created_by_id", + "posthog_datawarehousejoin"."created_at", + "posthog_datawarehousejoin"."deleted", + "posthog_datawarehousejoin"."deleted_at", + "posthog_datawarehousejoin"."id", + "posthog_datawarehousejoin"."team_id", + "posthog_datawarehousejoin"."source_table_name", + "posthog_datawarehousejoin"."source_table_key", + "posthog_datawarehousejoin"."joining_table_name", + "posthog_datawarehousejoin"."joining_table_key", + "posthog_datawarehousejoin"."field_name" + FROM "posthog_datawarehousejoin" + WHERE ("posthog_datawarehousejoin"."team_id" = 2 + AND NOT ("posthog_datawarehousejoin"."deleted" + AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.60 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -6384,7 +6250,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.65 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.61 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -6392,7 +6258,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.66 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.62 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -6417,7 +6283,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.67 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.63 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -6483,7 +6349,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.68 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.64 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -6502,7 +6368,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.69 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.65 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -6521,26 +6387,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.7 - ''' - SELECT "posthog_datawarehousejoin"."created_by_id", - "posthog_datawarehousejoin"."created_at", - "posthog_datawarehousejoin"."deleted", - "posthog_datawarehousejoin"."deleted_at", - "posthog_datawarehousejoin"."id", - "posthog_datawarehousejoin"."team_id", - "posthog_datawarehousejoin"."source_table_name", - "posthog_datawarehousejoin"."source_table_key", - "posthog_datawarehousejoin"."joining_table_name", - "posthog_datawarehousejoin"."joining_table_key", - "posthog_datawarehousejoin"."field_name" - FROM "posthog_datawarehousejoin" - WHERE ("posthog_datawarehousejoin"."team_id" = 2 - AND NOT ("posthog_datawarehousejoin"."deleted" - AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.70 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.66 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -6572,7 +6419,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.71 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.67 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -6631,7 +6478,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.72 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.68 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -6663,33 +6510,19 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.73 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.69 ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.74 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.7 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -6701,7 +6534,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.75 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.70 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -6722,7 +6555,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.76 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.71 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -6795,7 +6628,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.77 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.72 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -6814,7 +6647,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.78 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.73 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -6826,7 +6659,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.79 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.74 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -6847,19 +6680,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.8 - ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.80 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.75 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -6932,7 +6753,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.81 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.76 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -6951,7 +6772,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.82 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.77 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -6981,7 +6802,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.83 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.78 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -6989,7 +6810,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.84 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.79 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -7015,7 +6836,28 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.85 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.8 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at", + "posthog_datawarehousesavedquery"."table_id" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.80 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -7081,7 +6923,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.86 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.81 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -7100,7 +6942,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.87 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.82 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -7119,7 +6961,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.88 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.83 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -7151,7 +6993,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.89 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.84 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -7210,28 +7052,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.9 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at", - "posthog_datawarehousesavedquery"."table_id" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.90 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.85 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -7263,33 +7084,7 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.91 - ''' - SELECT "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organization" - WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.92 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.86 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -7301,7 +7096,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.93 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.87 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -7322,7 +7117,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.94 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.88 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -7395,7 +7190,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.95 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.89 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -7414,7 +7209,80 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.96 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.9 + ''' + SELECT "posthog_datawarehousetable"."created_by_id", + "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", + "posthog_datawarehousetable"."deleted", + "posthog_datawarehousetable"."deleted_at", + "posthog_datawarehousetable"."id", + "posthog_datawarehousetable"."name", + "posthog_datawarehousetable"."format", + "posthog_datawarehousetable"."team_id", + "posthog_datawarehousetable"."url_pattern", + "posthog_datawarehousetable"."credential_id", + "posthog_datawarehousetable"."external_data_source_id", + "posthog_datawarehousetable"."columns", + "posthog_datawarehousetable"."row_count", + "posthog_user"."id", + "posthog_user"."password", + "posthog_user"."last_login", + "posthog_user"."first_name", + "posthog_user"."last_name", + "posthog_user"."is_staff", + "posthog_user"."date_joined", + "posthog_user"."uuid", + "posthog_user"."current_organization_id", + "posthog_user"."current_team_id", + "posthog_user"."email", + "posthog_user"."pending_email", + "posthog_user"."temporary_token", + "posthog_user"."distinct_id", + "posthog_user"."is_email_verified", + "posthog_user"."requested_password_reset_at", + "posthog_user"."has_seen_product_intro_for", + "posthog_user"."strapi_id", + "posthog_user"."is_active", + "posthog_user"."theme_mode", + "posthog_user"."partial_notification_settings", + "posthog_user"."anonymize_data", + "posthog_user"."toolbar_mode", + "posthog_user"."hedgehog_config", + "posthog_user"."events_column_config", + "posthog_user"."email_opt_in", + "posthog_datawarehousecredential"."created_by_id", + "posthog_datawarehousecredential"."created_at", + "posthog_datawarehousecredential"."id", + "posthog_datawarehousecredential"."access_key", + "posthog_datawarehousecredential"."access_secret", + "posthog_datawarehousecredential"."team_id", + "posthog_externaldatasource"."created_by_id", + "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", + "posthog_externaldatasource"."deleted", + "posthog_externaldatasource"."deleted_at", + "posthog_externaldatasource"."id", + "posthog_externaldatasource"."source_id", + "posthog_externaldatasource"."connection_id", + "posthog_externaldatasource"."destination_id", + "posthog_externaldatasource"."team_id", + "posthog_externaldatasource"."sync_frequency", + "posthog_externaldatasource"."status", + "posthog_externaldatasource"."source_type", + "posthog_externaldatasource"."job_inputs", + "posthog_externaldatasource"."are_tables_created", + "posthog_externaldatasource"."prefix" + FROM "posthog_datawarehousetable" + LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") + LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") + LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") + WHERE ("posthog_datawarehousetable"."team_id" = 2 + AND NOT ("posthog_datawarehousetable"."deleted" + AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.90 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -7426,7 +7294,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.97 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.91 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -7447,7 +7315,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.98 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.92 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -7520,7 +7388,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.99 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.93 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -7539,3 +7407,173 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.94 + ''' + SELECT "posthog_sessionrecording"."id", + "posthog_sessionrecording"."session_id", + "posthog_sessionrecording"."team_id", + "posthog_sessionrecording"."created_at", + "posthog_sessionrecording"."deleted", + "posthog_sessionrecording"."object_storage_path", + "posthog_sessionrecording"."distinct_id", + "posthog_sessionrecording"."duration", + "posthog_sessionrecording"."active_seconds", + "posthog_sessionrecording"."inactive_seconds", + "posthog_sessionrecording"."start_time", + "posthog_sessionrecording"."end_time", + "posthog_sessionrecording"."click_count", + "posthog_sessionrecording"."keypress_count", + "posthog_sessionrecording"."mouse_activity_count", + "posthog_sessionrecording"."console_log_count", + "posthog_sessionrecording"."console_warn_count", + "posthog_sessionrecording"."console_error_count", + "posthog_sessionrecording"."start_url", + "posthog_sessionrecording"."storage_version" + FROM "posthog_sessionrecording" + WHERE ("posthog_sessionrecording"."session_id" IN ('1', + '2', + '3', + '4', + '5') + AND "posthog_sessionrecording"."team_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.95 + ''' + SELECT "posthog_sessionrecordingviewed"."session_id" + FROM "posthog_sessionrecordingviewed" + WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 + AND "posthog_sessionrecordingviewed"."user_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.96 + ''' + SELECT "posthog_persondistinctid"."id", + "posthog_persondistinctid"."team_id", + "posthog_persondistinctid"."person_id", + "posthog_persondistinctid"."distinct_id", + "posthog_persondistinctid"."version", + "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_persondistinctid" + INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") + WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', + 'user2', + 'user3', + 'user4', + 'user5') + AND "posthog_persondistinctid"."team_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.97 + ''' + SELECT "posthog_team"."id", + "posthog_team"."uuid", + "posthog_team"."organization_id", + "posthog_team"."project_id", + "posthog_team"."api_token", + "posthog_team"."app_urls", + "posthog_team"."name", + "posthog_team"."slack_incoming_webhook", + "posthog_team"."created_at", + "posthog_team"."updated_at", + "posthog_team"."anonymize_ips", + "posthog_team"."completed_snippet_onboarding", + "posthog_team"."has_completed_onboarding_for", + "posthog_team"."ingested_event", + "posthog_team"."autocapture_opt_out", + "posthog_team"."autocapture_web_vitals_opt_in", + "posthog_team"."autocapture_web_vitals_allowed_metrics", + "posthog_team"."autocapture_exceptions_opt_in", + "posthog_team"."autocapture_exceptions_errors_to_ignore", + "posthog_team"."session_recording_opt_in", + "posthog_team"."session_recording_sample_rate", + "posthog_team"."session_recording_minimum_duration_milliseconds", + "posthog_team"."session_recording_linked_flag", + "posthog_team"."session_recording_network_payload_capture_config", + "posthog_team"."session_recording_url_trigger_config", + "posthog_team"."session_replay_config", + "posthog_team"."survey_config", + "posthog_team"."capture_console_log_opt_in", + "posthog_team"."capture_performance_opt_in", + "posthog_team"."surveys_opt_in", + "posthog_team"."heatmaps_opt_in", + "posthog_team"."session_recording_version", + "posthog_team"."signup_token", + "posthog_team"."is_demo", + "posthog_team"."access_control", + "posthog_team"."week_start_day", + "posthog_team"."inject_web_apps", + "posthog_team"."test_account_filters", + "posthog_team"."test_account_filters_default_checked", + "posthog_team"."path_cleaning_filters", + "posthog_team"."timezone", + "posthog_team"."data_attributes", + "posthog_team"."person_display_name_properties", + "posthog_team"."live_events_columns", + "posthog_team"."recording_domains", + "posthog_team"."primary_dashboard_id", + "posthog_team"."extra_settings", + "posthog_team"."modifiers", + "posthog_team"."correlation_config", + "posthog_team"."session_recording_retention_period_days", + "posthog_team"."plugins_opt_in", + "posthog_team"."opt_out_capture", + "posthog_team"."event_names", + "posthog_team"."event_names_with_usage", + "posthog_team"."event_properties", + "posthog_team"."event_properties_with_usage", + "posthog_team"."event_properties_numerical", + "posthog_team"."external_data_workspace_id", + "posthog_team"."external_data_workspace_last_synced_at" + FROM "posthog_team" + WHERE "posthog_team"."id" = 2 + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.98 + ''' + SELECT "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user6' + AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.99 + ''' + SELECT "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user6' + AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 + ''' +# --- From ca5f7f3cc6c48e9732d2d4babfa0770846e491b9 Mon Sep 17 00:00:00 2001 From: PostHog Bot <69588470+posthog-bot@users.noreply.github.com> Date: Tue, 22 Oct 2024 10:51:04 -0400 Subject: [PATCH 05/14] chore(deps): Update posthog-js to 1.174.3 (#25724) Co-authored-by: posthog-bot Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...er--trends-line-insight-detailed--dark.png | Bin 21701 -> 21655 bytes ...r--trends-line-insight-detailed--light.png | Bin 21385 -> 21344 bytes package.json | 2 +- pnpm-lock.yaml | 14 +++++++------- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--dark.png b/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--dark.png index b54d4facb0bfe8353e19863b17eee837e4aab6c0..e3e93b3dd9678360493d495ab090800a9f994b6f 100644 GIT binary patch literal 21655 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 RdnN$nb5B=4mvv4FO#tji&>jE) diff --git a/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--light.png b/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--light.png index 332ea24ce308456a5c4dc18262bded8de8689748..d4377362d92701640737571d7d9f29c058ada487 100644 GIT binary patch literal 21344 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 literal 21385 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' dependencies: react: 18.2.0 - unlayer-types: 1.111.0 + unlayer-types: 1.139.0 dev: false /react-error-boundary@3.1.4(react@18.2.0): @@ -20927,8 +20927,8 @@ packages: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - /unlayer-types@1.111.0: - resolution: {integrity: sha512-CjdOROIUrZXrtkLUrInMvTucEWRdWWEmPleCOhwsDTwUXg9LocjzI6drgdYoia/lyyoYPfHOXYw5SxdJk7hlvw==} + /unlayer-types@1.139.0: + resolution: {integrity: sha512-2ZyXKVtlKFGyeURmjN2OxyEanOLpth+5sSUv53BumEDXZpEKncMBaLGuFZgZsJwZvuavG9OvVyyrdRvkmHJYdQ==} dev: false /unpipe@1.0.0: From c1a9f9d7830a6ae51333e177d65c70ff27a15745 Mon Sep 17 00:00:00 2001 From: timgl Date: Tue, 22 Oct 2024 17:29:59 +0100 Subject: [PATCH 06/14] revert: perf: Speed up filtering persons pt 2 (#25731) --- ...t_session_recording_list_from_filters.ambr | 96 +- frontend/src/queries/schema.json | 7 + frontend/src/queries/schema.ts | 2 + frontend/src/scenes/debug/Modifiers.tsx | 33 +- mypy-baseline.txt | 5 + .../api/test/__snapshots__/test_query.ambr | 34 +- posthog/hogql/ast.py | 12 - posthog/hogql/database/schema/persons.py | 132 +- .../test/__snapshots__/test_persons.ambr | 436 --- .../test_session_replay_events.ambr | 53 +- .../database/schema/test/test_persons.py | 208 -- .../schema/test/test_session_replay_events.py | 21 + .../test_person_where_clause_extractor.py | 44 +- .../schema/util/where_clause_extractor.py | 70 +- posthog/hogql/modifiers.py | 7 + posthog/hogql/query.py | 4 - .../hogql/test/__snapshots__/test_query.ambr | 66 +- posthog/hogql/test/test_modifiers.py | 68 + posthog/hogql/test/test_printer.py | 108 +- .../test/__snapshots__/test_lazy_tables.ambr | 18 +- .../__snapshots__/test_property_types.ambr | 6 +- ...actors_property_taxonomy_query_runner.ambr | 39 +- .../test/__snapshots__/test_funnel.ambr | 92 +- .../test_funnel_correlation.ambr | 310 +- .../test_funnel_correlation_actors.ambr | 115 +- .../test_funnel_correlation_actors_udf.ambr | 242 +- .../test_funnel_correlation_udf.ambr | 310 +- .../test/__snapshots__/test_funnel_udf.ambr | 92 +- .../test_insight_actors_query_runner.ambr | 183 +- .../test_lifecycle_query_runner.ambr | 16 +- .../test_paths_query_runner_ee.ambr | 136 +- .../test_retention_query_runner.ambr | 11 +- .../test/test_insight_actors_query_runner.py | 35 +- .../test/__snapshots__/test_trends.ambr | 414 +-- .../__snapshots__/test_trends_persons.ambr | 10 + .../test_actors_query_runner.ambr | 76 - .../test_error_tracking_query_runner.ambr | 357 ++- .../hogql_queries/test/test_query_runner.py | 8 +- posthog/models/person/util.py | 2 +- posthog/schema.py | 8 + ...t_session_recording_list_from_filters.ambr | 254 +- .../session_recording_api.py | 39 +- .../test_session_recordings.ambr | 2796 ++++++++--------- 43 files changed, 3303 insertions(+), 3672 deletions(-) delete mode 100644 posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr delete mode 100644 posthog/hogql/database/schema/test/test_persons.py diff --git a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index 165204b598715..c21b2882da6ed 100644 --- a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -61,18 +61,12 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_8)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_8)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal, person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, %(hogql_val_9)s), ''), 'null'), '^"|"$', ''), %(hogql_val_10)s), 0))))) + WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_11)s), person.version), plus(now64(6, %(hogql_val_12)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) - WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_13)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), now64(6, %(hogql_val_15)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_16)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_17)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_18)s), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_9)s), person.version), plus(now64(6, %(hogql_val_10)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_12)s), now64(6, %(hogql_val_13)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_15)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_16)s), 0)) GROUP BY events.`$session_id` HAVING 1))) GROUP BY s.session_id @@ -111,18 +105,12 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_8)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_8)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___rgInternal, person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, %(hogql_val_9)s), ''), 'null'), '^"|"$', ''), %(hogql_val_10)s), 0))))) + WHERE equals(person.team_id, 2) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_11)s), person.version), plus(now64(6, %(hogql_val_12)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) - WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_13)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), now64(6, %(hogql_val_15)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_16)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_17)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_18)s), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_9)s), person.version), plus(now64(6, %(hogql_val_10)s), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_11)s), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_12)s), now64(6, %(hogql_val_13)s)), greaterOrEquals(toTimeZone(events.timestamp, %(hogql_val_14)s), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, %(hogql_val_15)s), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___rgInternal, %(hogql_val_16)s), 0)) GROUP BY events.`$session_id` HAVING 1))) GROUP BY s.session_id @@ -551,17 +539,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email + (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -642,17 +627,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email + (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -733,17 +715,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email + (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -824,17 +803,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email + (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index 20a58c6d3d9fa..c243cf67ba628 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -6533,6 +6533,13 @@ "enum": ["auto", "legacy_null_as_string", "legacy_null_as_null", "disabled"], "type": "string" }, + "optimizeJoinedFilters": { + "type": "boolean" + }, + "personsArgMaxVersion": { + "enum": ["auto", "v1", "v2"], + "type": "string" + }, "personsJoinMode": { "enum": ["inner", "left"], "type": "string" diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index c8a898136bd39..92b6d52f251db 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -227,8 +227,10 @@ export interface HogQLQueryModifiers { | 'person_id_no_override_properties_on_events' | 'person_id_override_properties_on_events' | 'person_id_override_properties_joined' + personsArgMaxVersion?: 'auto' | 'v1' | 'v2' inCohortVia?: 'auto' | 'leftjoin' | 'subquery' | 'leftjoin_conjoined' materializationMode?: 'auto' | 'legacy_null_as_string' | 'legacy_null_as_null' | 'disabled' + optimizeJoinedFilters?: boolean dataWarehouseEventsModifiers?: DataWarehouseEventsModifier[] debug?: boolean s3TableUseInvalidColumns?: boolean diff --git a/frontend/src/scenes/debug/Modifiers.tsx b/frontend/src/scenes/debug/Modifiers.tsx index b75c4a185a087..ee4f0175a724c 100644 --- a/frontend/src/scenes/debug/Modifiers.tsx +++ b/frontend/src/scenes/debug/Modifiers.tsx @@ -47,7 +47,22 @@ export function Modifiers; modifiers? value={query.modifiers?.personsOnEventsMode ?? response?.modifiers?.personsOnEventsMode} />
- + +
Persons ArgMax:
+ + setQuery({ + ...query, + modifiers: { ...query.modifiers, personsArgMaxVersion: value }, + }) + } + value={query.modifiers?.personsArgMaxVersion ?? response?.modifiers?.personsArgMaxVersion} + /> +
In Cohort Via:
; modifiers? value={query.modifiers?.materializationMode ?? response?.modifiers?.materializationMode} />
+ +
Optimize joined filters:
+ + setQuery({ + ...query, + modifiers: { ...query.modifiers, optimizeJoinedFilters: value }, + }) + } + value={query.modifiers?.optimizeJoinedFilters ?? response?.modifiers?.optimizeJoinedFilters} + /> +
Property Groups:
Self: return self def lazy_select(self, table_to_add: LazyTableToAdd, context, node): - # assume that if the select_from is not persons table we're doing a join - try: - is_join = not isinstance(node.select_from.type.table, PersonsTable) - except AttributeError: - is_join = False if self.filter is not None: - return select_from_persons_table( - table_to_add, context, node, filter=clone_expr(self.filter, True), is_join=is_join - ) - return select_from_persons_table(table_to_add, context, node, is_join=is_join) + return select_from_persons_table(table_to_add, context, node, filter=clone_expr(self.filter, True)) + return select_from_persons_table(table_to_add, context, node) def to_printed_clickhouse(self, context): return "person" diff --git a/posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr b/posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr deleted file mode 100644 index 895f7d27f5942..0000000000000 --- a/posthog/hogql/database/schema/test/__snapshots__/test_persons.ambr +++ /dev/null @@ -1,436 +0,0 @@ -# serializer version: 1 -# name: TestPersonOptimization.test_alias - ''' - SELECT an_alias.id AS id, - an_alias.properties___email AS email - FROM - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS an_alias - WHERE ifNull(equals(an_alias.`properties___$some_prop`, 'something'), 0) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_array_filter - ''' - SELECT persons.id AS id, - persons.properties AS properties - FROM - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, - argMax(person.properties, person.version) AS properties - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(in(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), ['something']), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - WHERE ifNull(in(persons.`properties___$some_prop`, ['something']), 0) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_events_filter - ''' - SELECT replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, 'email'), ''), 'null'), '^"|"$', '') AS email - FROM events - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'something'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) - WHERE and(equals(events.team_id, 2), ifNull(equals(events__person.`properties___$some_prop`, 'something'), 0)) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_join - ''' - SELECT persons.id AS id, - persons.properties___email AS email - FROM - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, - argMax(person.id, person.version) AS persons___id - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'something'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - LEFT JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons__pdi ON equals(persons.persons___id, persons__pdi.person_id) - WHERE and(ifNull(equals(persons.`properties___$some_prop`, 'something'), 0), ifNull(equals(persons__pdi.distinct_id, '1'), 0)) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_join.1 - ''' - SELECT persons.id AS id, - persons.properties___email AS email - FROM - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, - argMax(person.id, person.version) AS persons___id - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'something'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'whatevs'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - LEFT JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS persons__pdi ON equals(persons.persons___id, persons__pdi.person_id) - WHERE or(and(ifNull(equals(persons.`properties___$some_prop`, 'something'), 0), ifNull(equals(persons__pdi.distinct_id, '1'), 0)), ifNull(equals(persons.`properties___$some_prop`, 'whatevs'), 0)) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_left_join_with_negation - ''' - SELECT persons.id AS id, - persons.`properties___$some_prop` AS `$some_prop` - FROM events - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), persons.id) - WHERE and(equals(events.team_id, 2), ifNull(notEquals(persons.`properties___$some_prop`, 'something'), 1)) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_left_join_with_negation.1 - ''' - SELECT persons.id AS id, - persons.`properties___$some_prop` AS `$some_prop` - FROM events - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), persons.id) - WHERE and(equals(events.team_id, 2), ifNull(notEquals(persons.`properties___$some_prop`, 'something'), 1)) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_left_join_with_negation.2 - ''' - SELECT persons.id AS id, - persons.`properties___$some_prop` AS `$some_prop` - FROM events - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), persons.id) - WHERE and(equals(events.team_id, 2), ifNull(not(match(persons.`properties___$some_prop`, '^something$')), isNotNull(persons.`properties___$some_prop`) - or isNotNull('^something$'))) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_left_join_with_negation.3 - ''' - SELECT persons.id AS id, - persons.`properties___$some_prop` AS `$some_prop` - FROM events - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), persons.id) - WHERE and(equals(events.team_id, 2), not(ifNull(equals(persons.`properties___$some_prop`, 'something'), 0))) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_left_join_with_negation.4 - ''' - SELECT persons.id AS id, - persons.`properties___$some_prop` AS `$some_prop` - FROM events - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), persons.id) - WHERE and(equals(events.team_id, 2), not(ifNull(equals(persons.`properties___$some_prop`, 'something'), 0))) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_limit_and_order_by - ''' - SELECT persons.id AS id, - persons.`properties___$some_prop` AS `$some_prop` - FROM - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - ORDER BY persons.created_at ASC - LIMIT 3 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_limit_and_order_by.1 - ''' - SELECT persons.id AS id, - persons.`properties___$some_prop` AS `$some_prop` - FROM - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - ORDER BY persons.created_at ASC - LIMIT 2 - OFFSET 1 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_simple_filter - ''' - SELECT persons.id AS id, - persons.properties AS properties - FROM - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, - argMax(person.properties, person.version) AS properties - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'something'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - WHERE ifNull(equals(persons.`properties___$some_prop`, 'something'), 0) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_subquery_alias - ''' - SELECT source.person_id AS person_id, - persons.id AS id - FROM - (SELECT if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id) AS person_id - FROM events - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) - WHERE equals(events.team_id, 2)) AS source - INNER JOIN - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(notEquals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'something'), 1))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(source.person_id, persons.id) - WHERE ifNull(notEquals(persons.`properties___$some_prop`, 'something'), 1) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestPersonOptimization.test_versions_handled_correctly - ''' - SELECT persons.id AS id, - persons.`properties___$some_prop` AS `$some_prop` - FROM - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - ORDER BY persons.created_at ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- diff --git a/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr b/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr index ac17c9db9f049..aa990fe2c7b66 100644 --- a/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr +++ b/posthog/hogql/database/schema/test/__snapshots__/test_session_replay_events.ambr @@ -188,17 +188,14 @@ WHERE equals(events.team_id, 2)) AS raw_session_replay_events__events ON equals(session_replay_events.session_id, raw_session_replay_events__events.`$session_id`) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', ''), person.version) AS properties___person_property + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', '') AS properties___person_property FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'person_property'), ''), 'null'), '^"|"$', ''), 'false'), 'true'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__events__person ON equals(raw_session_replay_events__events.raw_session_replay_events__events___person_id, raw_session_replay_events__events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__events__person ON equals(raw_session_replay_events__events.raw_session_replay_events__events___person_id, raw_session_replay_events__events__person.id) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(ifNull(raw_session_replay_events__events__person.properties___person_property, 'false'), 'true'), 0)) ORDER BY session_replay_events.session_id ASC LIMIT 100 SETTINGS readonly=2, @@ -247,13 +244,7 @@ LEFT JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), equals(persons_where_optimization.id, toUUIDOrNull('00000000-0000-4000-8000-000000000000')))))) + WHERE equals(person.team_id, 2) GROUP BY person.id HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(raw_session_replay_events__pdi__person.id, toUUIDOrNull('00000000-0000-4000-8000-000000000000')), 0)) @@ -282,11 +273,14 @@ HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', ''), person.version) AS properties___person_property + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', '') AS properties___person_property FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) WHERE equals(session_replay_events.team_id, 2) GROUP BY session_replay_events.session_id ORDER BY session_replay_events.session_id ASC @@ -314,17 +308,14 @@ HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi ON equals(session_replay_events.distinct_id, raw_session_replay_events__pdi.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', ''), person.version) AS properties___person_property + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', '') AS properties___person_property FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'person_property'), ''), 'null'), '^"|"$', ''), 'true'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'person_property'), ''), 'null'), '^"|"$', ''), 'true'), 0)) SETTINGS optimize_aggregation_in_order=1) AS raw_session_replay_events__pdi__person ON equals(raw_session_replay_events__pdi.raw_session_replay_events__pdi___person_id, raw_session_replay_events__pdi__person.id) WHERE and(equals(session_replay_events.team_id, 2), ifNull(equals(raw_session_replay_events__pdi__person.properties___person_property, 'true'), 0)) GROUP BY session_replay_events.session_id ORDER BY session_replay_events.session_id ASC diff --git a/posthog/hogql/database/schema/test/test_persons.py b/posthog/hogql/database/schema/test/test_persons.py deleted file mode 100644 index 4cb7640830ba2..0000000000000 --- a/posthog/hogql/database/schema/test/test_persons.py +++ /dev/null @@ -1,208 +0,0 @@ -from posthog.hogql.parser import parse_select -from posthog.hogql.query import execute_hogql_query -from posthog.test.base import ( - APIBaseTest, - ClickhouseTestMixin, - _create_person, - _create_event, - snapshot_clickhouse_queries, -) -from posthog.models.person.util import create_person -from datetime import datetime - - -class TestPersonOptimization(ClickhouseTestMixin, APIBaseTest): - """ - Mostly tests for the optimization of pre-filtering before aggregating. See https://github.com/PostHog/posthog/pull/25604 - """ - - def setUp(self): - super().setUp() - self.first_person = _create_person( - team_id=self.team.pk, - distinct_ids=["1"], - properties={"$some_prop": "something", "$another_prop": "something1"}, - created_at=datetime(2024, 1, 1, 12), - ) - self.second_person = _create_person( - team_id=self.team.pk, - properties={"$some_prop": "ifwematcholdversionsthiswillmatch", "$another_prop": "something2"}, - distinct_ids=["2"], - version=1, - created_at=datetime(2024, 1, 1, 13), - ) - # update second_person with the correct prop - create_person( - team_id=self.team.pk, - uuid=str(self.second_person.uuid), - properties={"$some_prop": "something", "$another_prop": "something2"}, - created_at=datetime(2024, 1, 1, 13), - version=2, - ) - self.third_person = _create_person( - team_id=self.team.pk, - distinct_ids=["3"], - properties={"$some_prop": "not something", "$another_prop": "something3"}, - created_at=datetime(2024, 1, 1, 14), - ) - # deleted - self.deleted_person = _create_person( - team_id=self.team.pk, - properties={"$some_prop": "ifwematcholdversionsthiswillmatch", "$another_prop": "something2"}, - distinct_ids=["deleted"], - created_at=datetime(2024, 1, 1, 13), - version=1, - ) - create_person(team_id=self.team.pk, uuid=str(self.deleted_person.uuid), version=2, is_deleted=True) - - @snapshot_clickhouse_queries - def test_simple_filter(self): - response = execute_hogql_query( - parse_select("select id, properties from persons where properties.$some_prop = 'something'"), - self.team, - ) - assert len(response.results) == 2 - - @snapshot_clickhouse_queries - def test_array_filter(self): - response = execute_hogql_query( - parse_select("select id, properties from persons where properties.$some_prop IN ['something']"), - self.team, - ) - assert len(response.results) == 2 - - @snapshot_clickhouse_queries - def test_alias(self): - # This isn't supported by the WhereClauseExtractor yet - response = execute_hogql_query( - parse_select( - "select id, an_alias.properties.email from persons as an_alias where an_alias.properties.$some_prop = 'something'" - ), - self.team, - ) - assert len(response.results) == 2 - - @snapshot_clickhouse_queries - def test_subquery_alias(self): - _create_event(event="$pageview", distinct_id="3", team=self.team) - response = execute_hogql_query( - parse_select( - """ - select person_id, persons.id from ( - select - person_id - from events - ) as source - inner join persons ON (source.person_id=persons.id) - where notEquals(persons.properties.$some_prop, 'something') - """ - ), - self.team, - ) - assert len(response.results) == 1 - - @snapshot_clickhouse_queries - def test_join(self): - response = execute_hogql_query( - parse_select( - "select id, properties.email from persons where properties.$some_prop = 'something' and pdi.distinct_id = '1'" - ), - self.team, - ) - assert len(response.results) == 1 - - # more complex query - response = execute_hogql_query( - parse_select(""" - select id, properties.email from persons where - (properties.$some_prop = 'something' and pdi.distinct_id = '1') OR - (properties.$some_prop = 'whatevs') - """), - self.team, - ) - assert len(response.results) == 1 - - @snapshot_clickhouse_queries - def test_events_filter(self): - _create_event(event="$pageview", distinct_id="1", team=self.team) - response = execute_hogql_query( - parse_select("select properties.email from events where person.properties.$some_prop = 'something'"), - self.team, - ) - assert len(response.results) == 1 - - @snapshot_clickhouse_queries - def test_versions_handled_correctly(self): - # Tests whether we correctly grab $some_prop from the person with the highest version - response = execute_hogql_query( - parse_select("select id, properties.$some_prop from persons ORDER BY created_at limit 100"), - self.team, - ) - assert len(response.results) == 3 - - @snapshot_clickhouse_queries - def test_left_join_with_negation(self): - _create_event(event="$pageview", distinct_id="1", team=self.team) - _create_event(event="$pageview", distinct_id="2", team=self.team) - _create_event(event="$pageview", distinct_id="3", team=self.team) - response = execute_hogql_query( - parse_select( - "select id, persons.properties.$some_prop from events left join persons ON (events.person_id=persons.id) where notEquals(persons.properties.$some_prop, 'something')" - ), - self.team, - ) - assert len(response.results) == 1 - assert [x[0] for x in response.results] == [ - self.third_person.uuid, - ] - response = execute_hogql_query( - parse_select( - "select id, persons.properties.$some_prop from events left join persons ON (events.person_id=persons.id) where persons.properties.$some_prop != 'something'" - ), - self.team, - ) - assert len(response.results) == 1 - - response = execute_hogql_query( - parse_select( - "select id, persons.properties.$some_prop from events left join persons ON (events.person_id=persons.id) where persons.properties.$some_prop !~ '^something$'" - ), - self.team, - ) - assert len(response.results) == 1 - - response = execute_hogql_query( - parse_select( - "select id, persons.properties.$some_prop from events left join persons ON (events.person_id=persons.id) where not (persons.properties.$some_prop = 'something')" - ), - self.team, - ) - assert len(response.results) == 1 - - response = execute_hogql_query( - parse_select( - "select id, persons.properties.$some_prop from events left join persons ON (events.person_id=persons.id) where not persons.properties.$some_prop = 'something'" - ), - self.team, - ) - assert len(response.results) == 1 - - @snapshot_clickhouse_queries - def test_limit_and_order_by(self): - response = execute_hogql_query( - parse_select("select id, properties.$some_prop from persons ORDER BY created_at limit 3"), - self.team, - ) - assert len(response.results) == 3 - assert [x[0] for x in response.results] == [ - self.first_person.uuid, - self.second_person.uuid, - self.third_person.uuid, - ] - - response = execute_hogql_query( - parse_select("select id, properties.$some_prop from persons ORDER BY created_at limit 2, 1"), - self.team, - ) - assert len(response.results) == 2 - assert [x[0] for x in response.results] == [self.second_person.uuid, self.third_person.uuid] diff --git a/posthog/hogql/database/schema/test/test_session_replay_events.py b/posthog/hogql/database/schema/test/test_session_replay_events.py index 8b396a3b44691..cf74a0f66d182 100644 --- a/posthog/hogql/database/schema/test/test_session_replay_events.py +++ b/posthog/hogql/database/schema/test/test_session_replay_events.py @@ -9,6 +9,7 @@ from posthog.hogql.query import execute_hogql_query from posthog.models.event.sql import TRUNCATE_EVENTS_TABLE_SQL from posthog.models.utils import uuid7 +from posthog.schema import HogQLQueryModifiers from posthog.session_recordings.queries.test.session_replay_sql import produce_replay_summary from posthog.session_recordings.sql.session_replay_event_sql import TRUNCATE_SESSION_REPLAY_EVENTS_TABLE_SQL from posthog.test.base import ( @@ -350,6 +351,25 @@ def test_select_person_property(self): ("session_with_person_with_person_property", "true"), ] + @snapshot_clickhouse_queries + def test_select_where_person_property_without_join_optimization(self): + response = execute_hogql_query( + parse_select( + """ + select session_id, any(person.properties.person_property) + from raw_session_replay_events + where person.properties.person_property = 'true' + group by session_id order by session_id asc + """, + ), + self.team, + modifiers=HogQLQueryModifiers(optimizeJoinedFilters=False), + ) + + assert response.results == [ + ("session_with_person_with_person_property", "true"), + ] + @snapshot_clickhouse_queries def test_select_where_person_property_with_join_optimization(self): response = execute_hogql_query( @@ -362,6 +382,7 @@ def test_select_where_person_property_with_join_optimization(self): """, ), self.team, + modifiers=HogQLQueryModifiers(optimizeJoinedFilters=True), ) assert response.results == [ diff --git a/posthog/hogql/database/schema/util/test/test_person_where_clause_extractor.py b/posthog/hogql/database/schema/util/test/test_person_where_clause_extractor.py index f805ec14ed79c..252382d545b40 100644 --- a/posthog/hogql/database/schema/util/test/test_person_where_clause_extractor.py +++ b/posthog/hogql/database/schema/util/test/test_person_where_clause_extractor.py @@ -1,4 +1,4 @@ -from typing import Union, Optional, cast +from typing import Union, Optional from posthog.hogql import ast from posthog.hogql.context import HogQLContext @@ -7,7 +7,7 @@ from posthog.hogql.printer import prepare_ast_for_printing, print_ast from posthog.hogql.visitor import clone_expr, CloningVisitor from posthog.models import PropertyDefinition -from posthog.schema import PersonsOnEventsMode +from posthog.schema import PersonsOnEventsMode, PersonsArgMaxVersion from posthog.test.base import ClickhouseTestMixin, APIBaseTest @@ -40,7 +40,9 @@ class TestPersonWhereClauseExtractor(ClickhouseTestMixin, APIBaseTest): def prep_context(self): team = self.team modifiers = create_default_modifiers_for_team(team) + modifiers.optimizeJoinedFilters = True modifiers.personsOnEventsMode = PersonsOnEventsMode.DISABLED + modifiers.personsArgMaxVersion = PersonsArgMaxVersion.V1 return HogQLContext( team_id=team.pk, team=team, @@ -62,10 +64,9 @@ def get_clause(self, query: str): assert new_select.select_from.next_join.alias == "events__pdi" assert new_select.select_from.next_join.next_join.alias == "events__pdi__person" - outer_where = new_select.select_from.next_join.next_join.table.where - if outer_where is None: + where = new_select.select_from.next_join.next_join.table.where + if where is None: return None - where = cast(ast.SelectQuery, cast(ast.CompareOperation, cast(ast.And, outer_where).exprs[0]).right).where where = RemoveHiddenAliases().visit(where) assert isinstance(where, ast.Expr) @@ -78,12 +79,12 @@ def print_query(self, query: str): def test_person_properties(self): actual = self.get_clause("SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com'") expected = _expr("properties.email = 'jimmy@posthog.com'") - assert expected in actual.exprs + assert actual == expected def test_person_properties_andor_1(self): actual = self.get_clause("SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' or false") expected = _expr("properties.email = 'jimmy@posthog.com'") - assert expected in actual.exprs + assert actual == expected def test_person_properties_andor_2(self): actual = self.get_clause("SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' and false") @@ -94,28 +95,28 @@ def test_person_properties_andor_3(self): "SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' and person.properties.email = 'timmy@posthog.com'" ) expected = _expr("properties.email = 'jimmy@posthog.com' and properties.email = 'timmy@posthog.com'") - assert expected in actual.exprs + assert actual == expected def test_person_properties_andor_4(self): actual = self.get_clause( "SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' or person.properties.email = 'timmy@posthog.com'" ) expected = _expr("properties.email = 'jimmy@posthog.com' or properties.email = 'timmy@posthog.com'") - assert expected in actual.exprs + assert actual == expected def test_person_properties_andor_5(self): actual = self.get_clause( "SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' or (1 and person.properties.email = 'timmy@posthog.com')" ) expected = _expr("properties.email = 'jimmy@posthog.com' or properties.email = 'timmy@posthog.com'") - assert expected in actual.exprs + assert actual == expected def test_person_properties_andor_6(self): actual = self.get_clause( "SELECT * FROM events WHERE person.properties.email = 'jimmy@posthog.com' or (0 or person.properties.email = 'timmy@posthog.com')" ) expected = _expr("properties.email = 'jimmy@posthog.com' or properties.email = 'timmy@posthog.com'") - assert expected in actual.exprs + assert actual == expected def test_person_properties_andor_7(self): actual = self.get_clause( @@ -128,7 +129,7 @@ def test_person_properties_andor_8(self): "SELECT * FROM events WHERE event == '$pageview' and person.properties.email = 'jimmy@posthog.com'" ) expected = _expr("properties.email = 'jimmy@posthog.com'") - assert expected in actual.exprs + assert actual == expected def test_person_properties_andor_9(self): actual = self.get_clause( @@ -147,26 +148,21 @@ def test_person_properties_andor_11(self): "SELECT * FROM events WHERE properties.email = 'bla@posthog.com' and person.properties.email = 'jimmy@posthog.com'" ) expected = _expr("properties.email = 'jimmy@posthog.com'") - assert expected in actual.exprs - - def test_person_array(self): - actual = self.get_clause("SELECT * FROM events WHERE person.properties.email IN ['jimmy@posthog.com']") - expected = _expr("properties.email IN ['jimmy@posthog.com']") - assert expected in actual.exprs + assert actual == expected def test_person_properties_function_calls(self): actual = self.get_clause( "SELECT * FROM events WHERE properties.email = 'bla@posthog.com' and toString(person.properties.email) = 'jimmy@posthog.com'" ) expected = _expr("toString(properties.email) = 'jimmy@posthog.com'") - assert expected in actual.exprs + assert actual == expected def test_person_properties_function_call_args(self): actual = self.get_clause( "SELECT * FROM events WHERE properties.email = 'bla@posthog.com' and substring(person.properties.email, 10) = 'jimmy@posthog.com'" ) expected = _expr("substring(properties.email, 10) = 'jimmy@posthog.com'") - assert expected in actual.exprs + assert actual == expected def test_person_properties_function_call_args_complex(self): actual = self.get_clause( @@ -183,12 +179,6 @@ def test_boolean(self): ) actual = self.print_query("SELECT * FROM events WHERE person.properties.person_boolean = false") assert ( - f"ifNull(equals(transform(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties" + f"FROM person WHERE and(equals(person.team_id, {self.team.id}), ifNull(equals(transform(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties" in actual ) - - def test_id_in(self): - actual = self.get_clause( - "SELECT * FROM events WHERE in(person.id, (SELECT person_id FROM (SELECT argMax(raw_person_distinct_ids.person_id, raw_person_distinct_ids.version) AS person_id, raw_person_distinct_ids.distinct_id AS distinct_id FROM raw_person_distinct_ids GROUP BY raw_person_distinct_ids.distinct_id HAVING equals(argMax(raw_person_distinct_ids.is_deleted, raw_person_distinct_ids.version), 0)) AS person_distinct_ids WHERE ilike(distinct_id, '%test%')))" - ) - assert actual is None diff --git a/posthog/hogql/database/schema/util/where_clause_extractor.py b/posthog/hogql/database/schema/util/where_clause_extractor.py index b87906a9af519..9ed7be296f483 100644 --- a/posthog/hogql/database/schema/util/where_clause_extractor.py +++ b/posthog/hogql/database/schema/util/where_clause_extractor.py @@ -6,8 +6,7 @@ from posthog.hogql.ast import CompareOperationOp, ArithmeticOperationOp from posthog.hogql.context import HogQLContext from posthog.hogql.database.models import DatabaseField, LazyJoinToAdd, LazyTableToAdd -from posthog.hogql.errors import NotImplementedError, QueryError -from posthog.hogql.functions.mapping import HOGQL_COMPARISON_MAPPING +from posthog.hogql.errors import NotImplementedError from posthog.hogql.visitor import clone_expr, CloningVisitor, Visitor, TraversingVisitor @@ -44,15 +43,13 @@ class WhereClauseExtractor(CloningVisitor): clear_types: bool = False clear_locations: bool = False capture_timestamp_comparisons: bool = False # implement handle_timestamp_comparison if setting this to True - is_join: bool = False tracked_tables: list[ast.LazyTable | ast.LazyJoin] tombstone_string: str - def __init__(self, context: HogQLContext, is_join: Optional[bool] = False): + def __init__(self, context: HogQLContext): super().__init__() self.context = context self.tracked_tables = [] - self.is_join = is_join or False # A constant with this string will be used to escape early if we can't handle the query self.tombstone_string = ( "__TOMBSTONE__" + ("".join(random.choices(string.ascii_uppercase + string.digits, k=10))) + "__" @@ -113,18 +110,10 @@ def visit_compare_operation(self, node: ast.CompareOperation) -> ast.Expr: if result: return result - # if the comparison is negative and it's a join, we don't want to filter down as the outer query needs to be able to filter down results - if self.is_join and node.op in ast.NEGATED_COMPARE_OPS: - return ast.Constant(value=True) - # Check if any of the fields are a field on our requested table if len(self.tracked_tables) > 0: left = self.visit(node.left) right = self.visit(node.right) - - # Too complicated - if isinstance(node.right, ast.SelectQuery): - return ast.Constant(value=True) if has_tombstone(left, self.tombstone_string) or has_tombstone(right, self.tombstone_string): return ast.Constant(value=self.tombstone_string) return ast.CompareOperation(op=node.op, left=left, right=right) @@ -140,8 +129,6 @@ def visit_arithmetic_operation(self, node: ast.ArithmeticOperation) -> ast.Expr: return ast.Constant(value=True) def visit_not(self, node: ast.Not) -> ast.Expr: - if self.is_join: - return ast.Constant(value=True) response = self.visit(node.expr) if has_tombstone(response, self.tombstone_string): return ast.Constant(value=self.tombstone_string) @@ -152,25 +139,43 @@ def visit_call(self, node: ast.Call) -> ast.Expr: return self.visit_and(ast.And(exprs=node.args)) elif node.name == "or": return self.visit_or(ast.Or(exprs=node.args)) - elif node.name == "not": - if self.is_join: - return ast.Constant(value=True) - - elif node.name in HOGQL_COMPARISON_MAPPING: - op = HOGQL_COMPARISON_MAPPING[node.name] - if len(node.args) != 2: - raise QueryError(f"Comparison '{node.name}' requires exactly two arguments") - # We do "cleverer" logic with nullable types in visit_compare_operation + elif node.name == "greaterOrEquals": return self.visit_compare_operation( - ast.CompareOperation( - left=node.args[0], - right=node.args[1], - op=op, - ) + ast.CompareOperation(op=CompareOperationOp.GtEq, left=node.args[0], right=node.args[1]) + ) + elif node.name == "greater": + return self.visit_compare_operation( + ast.CompareOperation(op=CompareOperationOp.Gt, left=node.args[0], right=node.args[1]) + ) + elif node.name == "lessOrEquals": + return self.visit_compare_operation( + ast.CompareOperation(op=CompareOperationOp.LtEq, left=node.args[0], right=node.args[1]) + ) + elif node.name == "less": + return self.visit_compare_operation( + ast.CompareOperation(op=CompareOperationOp.Lt, left=node.args[0], right=node.args[1]) + ) + elif node.name == "equals": + return self.visit_compare_operation( + ast.CompareOperation(op=CompareOperationOp.Eq, left=node.args[0], right=node.args[1]) + ) + elif node.name == "like": + return self.visit_compare_operation( + ast.CompareOperation(op=CompareOperationOp.Like, left=node.args[0], right=node.args[1]) + ) + elif node.name == "notLike": + return self.visit_compare_operation( + ast.CompareOperation(op=CompareOperationOp.NotLike, left=node.args[0], right=node.args[1]) + ) + elif node.name == "ilike": + return self.visit_compare_operation( + ast.CompareOperation(op=CompareOperationOp.ILike, left=node.args[0], right=node.args[1]) + ) + elif node.name == "notIlike": + return self.visit_compare_operation( + ast.CompareOperation(op=CompareOperationOp.NotILike, left=node.args[0], right=node.args[1]) ) - args = [self.visit(arg) for arg in node.args] - if any(has_tombstone(arg, self.tombstone_string) for arg in args): return ast.Constant(value=self.tombstone_string) return ast.Call(name=node.name, args=args) @@ -454,9 +459,6 @@ def visit_alias(self, node: ast.Alias) -> bool: def visit_tuple(self, node: ast.Tuple) -> bool: return all(self.visit(arg) for arg in node.exprs) - def visit_array(self, node: ast.Tuple) -> bool: - return all(self.visit(arg) for arg in node.exprs) - def is_simple_timestamp_field_expression(expr: ast.Expr, context: HogQLContext, tombstone_string: str) -> bool: result = IsSimpleTimestampFieldExpressionVisitor(context, tombstone_string).visit(expr) diff --git a/posthog/hogql/modifiers.py b/posthog/hogql/modifiers.py index 710a3b3b5befb..42cb7f2f04433 100644 --- a/posthog/hogql/modifiers.py +++ b/posthog/hogql/modifiers.py @@ -7,6 +7,7 @@ HogQLQueryModifiers, InCohortVia, MaterializationMode, + PersonsArgMaxVersion, BounceRatePageViewMode, PropertyGroupsMode, SessionTableVersion, @@ -60,12 +61,18 @@ def set_default_modifier_values(modifiers: HogQLQueryModifiers, team: "Team"): if modifiers.personsOnEventsMode is None: modifiers.personsOnEventsMode = team.person_on_events_mode_flag_based_default + if modifiers.personsArgMaxVersion is None: + modifiers.personsArgMaxVersion = PersonsArgMaxVersion.AUTO + if modifiers.inCohortVia is None: modifiers.inCohortVia = InCohortVia.AUTO if modifiers.materializationMode is None or modifiers.materializationMode == MaterializationMode.AUTO: modifiers.materializationMode = MaterializationMode.LEGACY_NULL_AS_NULL + if modifiers.optimizeJoinedFilters is None: + modifiers.optimizeJoinedFilters = False + if modifiers.bounceRatePageViewMode is None: modifiers.bounceRatePageViewMode = BounceRatePageViewMode.COUNT_PAGEVIEWS diff --git a/posthog/hogql/query.py b/posthog/hogql/query.py index a979444f8c919..2516d8007d815 100644 --- a/posthog/hogql/query.py +++ b/posthog/hogql/query.py @@ -200,10 +200,6 @@ def execute_hogql_query( modifiers={k: v for k, v in modifiers.model_dump().items() if v is not None} if modifiers else {}, ) - # Uncomment to print clickhouse SQL - # from posthog.clickhouse.client.escape import substitute_params - # print(substitute_params(clickhouse_sql, clickhouse_context.values)) - try: results, types = sync_execute( clickhouse_sql, diff --git a/posthog/hogql/test/__snapshots__/test_query.ambr b/posthog/hogql/test/__snapshots__/test_query.ambr index 46ac6d2fc1e3f..96bfad37a5a50 100644 --- a/posthog/hogql/test/__snapshots__/test_query.ambr +++ b/posthog/hogql/test/__snapshots__/test_query.ambr @@ -459,19 +459,16 @@ SELECT DISTINCT persons.properties___sneaky_mail AS sneaky_mail FROM ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_1)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___random_uuid + SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_1)s), ''), 'null'), '^"|"$', '') AS properties___random_uuid FROM person - WHERE and(equals(person.team_id, 420), in(person.id, ( - SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 420), notIn(persons_where_optimization.id, ( - SELECT person.id AS id + WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( + SELECT person.id AS id, max(person.version) AS version FROM person - WHERE and(equals(person.team_id, 420), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, %(hogql_val_2)s), ''), 'null'), '^"|"$', ''), %(hogql_val_3)s), 0))))) + WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_4)s), person.version), plus(now64(6, %(hogql_val_5)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_2)s), person.version), plus(now64(6, %(hogql_val_3)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - WHERE ifNull(equals(persons.properties___random_uuid, %(hogql_val_6)s), 0) + WHERE ifNull(equals(persons.properties___random_uuid, %(hogql_val_4)s), 0) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=4000000, max_expanded_ast_elements=4000000, max_bytes_before_external_group_by=0 @@ -541,11 +538,14 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail + SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail + FROM person + WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( + SELECT person.id AS id, max(person.version) AS version FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE equals(e.team_id, 420) LIMIT 10 @@ -599,11 +599,14 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail + SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail + FROM person + WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( + SELECT person.id AS id, max(person.version) AS version FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__pdi__person ON equals(events__pdi.events__pdi___person_id, events__pdi__person.id) WHERE equals(events.team_id, 420) LIMIT 10 @@ -628,11 +631,14 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail + SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail + FROM person + WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( + SELECT person.id AS id, max(person.version) AS version FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__pdi__person ON equals(e__pdi.e__pdi___person_id, e__pdi__person.id) WHERE equals(e.team_id, 420) LIMIT 10 @@ -657,11 +663,14 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS s__pdi ON equals(s.distinct_id, s__pdi.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail + SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail + FROM person + WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( + SELECT person.id AS id, max(person.version) AS version FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS s__pdi__person ON equals(s__pdi.s__pdi___person_id, s__pdi__person.id) WHERE equals(s.team_id, 420) GROUP BY s__pdi__person.properties___sneaky_mail @@ -714,11 +723,14 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS pdi LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail + SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail + FROM person + WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( + SELECT person.id AS id, max(person.version) AS version FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS pdi__person ON equals(pdi.pdi___person_id, pdi__person.id) LIMIT 10 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=4000000, max_expanded_ast_elements=4000000, max_bytes_before_external_group_by=0 @@ -742,7 +754,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS pdi LEFT JOIN ( - SELECT person.id AS id, argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version) AS created_at + SELECT argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version) AS created_at, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -770,11 +782,14 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS pdi ON equals(pdi.distinct_id, e.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail + SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail + FROM person + WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( + SELECT person.id AS id, max(person.version) AS version FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS p ON equals(p.id, pdi.person_id) WHERE equals(e.team_id, 420) LIMIT 100 @@ -821,11 +836,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___sneaky_mail + SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', '') AS properties___sneaky_mail + FROM person + WHERE and(equals(person.team_id, 420), ifNull(in(tuple(person.id, person.version), ( + SELECT person.id AS id, max(person.version) AS version FROM person WHERE equals(person.team_id, 420) GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)) + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_1)s), person.version), plus(now64(6, %(hogql_val_2)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE equals(events.team_id, 420) LIMIT 10 diff --git a/posthog/hogql/test/test_modifiers.py b/posthog/hogql/test/test_modifiers.py index 83c0e72572b11..5c4f235d49080 100644 --- a/posthog/hogql/test/test_modifiers.py +++ b/posthog/hogql/test/test_modifiers.py @@ -5,6 +5,7 @@ from posthog.models import Cohort from posthog.schema import ( HogQLQueryModifiers, + PersonsArgMaxVersion, PersonsOnEventsMode, MaterializationMode, ) @@ -154,6 +155,50 @@ class TestCase(NamedTuple): for value in test_case.other_expected_values: assert value in clickhouse_query + def test_modifiers_persons_argmax_version_v2(self): + query = "SELECT * FROM persons" + + # Control (v1) + response = execute_hogql_query( + query, + team=self.team, + modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V1), + ) + assert "in(tuple(person.id, person.version)" not in response.clickhouse + + # Test (v2) + response = execute_hogql_query( + query, + team=self.team, + modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V2), + ) + assert "in(tuple(person.id, person.version)" in response.clickhouse + + def test_modifiers_persons_argmax_version_auto(self): + # Use the v2 query when selecting properties.x + response = execute_hogql_query( + "SELECT id, properties.$browser, is_identified FROM persons", + team=self.team, + modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.AUTO), + ) + assert "in(tuple(person.id, person.version)" in response.clickhouse + + # Use the v2 query when selecting properties + response = execute_hogql_query( + "SELECT id, properties FROM persons", + team=self.team, + modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.AUTO), + ) + assert "in(tuple(person.id, person.version)" in response.clickhouse + + # Use the v1 query when not selecting any properties + response = execute_hogql_query( + "SELECT id, is_identified FROM persons", + team=self.team, + modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.AUTO), + ) + assert "in(tuple(person.id, person.version)" not in response.clickhouse + def test_modifiers_in_cohort_join(self): cohort = Cohort.objects.create(team=self.team, name="test") response = execute_hogql_query( @@ -218,3 +263,26 @@ def test_modifiers_materialization_mode(self): "SELECT replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, %(hogql_val_0)s), ''), 'null'), '^\"|\"$', '') AS `$browser` FROM events" in response.clickhouse ) + + def test_optimize_joined_filters(self): + # no optimizations + response = execute_hogql_query( + f"select event from events where person.properties.$browser ilike '%Chrome%'", + team=self.team, + modifiers=HogQLQueryModifiers(optimizeJoinedFilters=False), + ) + # "ilike" shows up once in the response + assert response is not None + assert response.clickhouse is not None + assert response.clickhouse.count("ilike") == 1 + + # with optimizations + response = execute_hogql_query( + f"select event from events where person.properties.$browser ilike '%Chrome%'", + team=self.team, + modifiers=HogQLQueryModifiers(optimizeJoinedFilters=True), + ) + # "ilike" shows up twice in the response + assert response is not None + assert response.clickhouse is not None + assert response.clickhouse.count("ilike") == 2 diff --git a/posthog/hogql/test/test_printer.py b/posthog/hogql/test/test_printer.py index 4eb13c3ef64e4..021dee3bcf947 100644 --- a/posthog/hogql/test/test_printer.py +++ b/posthog/hogql/test/test_printer.py @@ -20,6 +20,7 @@ from posthog.schema import ( HogQLQueryModifiers, MaterializationMode, + PersonsArgMaxVersion, PersonsOnEventsMode, PropertyGroupsMode, ) @@ -1106,24 +1107,94 @@ def test_select_sample(self): context = HogQLContext( team_id=self.team.pk, enable_select_queries=True, + modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V2), ) query = self._select( "SELECT events.event FROM events SAMPLE 2/78 OFFSET 999 JOIN persons ON persons.id=events.person_id", context, ) - self.assertIn("FROM events SAMPLE 2/78 OFFSET 999", query) + self.assertEqual( + query, + f"SELECT events.event AS event FROM events SAMPLE 2/78 OFFSET 999 LEFT OUTER JOIN (SELECT " + "argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, " + "person_distinct_id_overrides.distinct_id AS distinct_id FROM person_distinct_id_overrides WHERE " + f"equals(person_distinct_id_overrides.team_id, {self.team.pk}) GROUP BY person_distinct_id_overrides.distinct_id " + "HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) " + "SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) " + f"JOIN (SELECT person.id AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), " + "ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, max(person.version) AS version " + f"FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " + "HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), " + "ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), " + "plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) " + "SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, if(not(empty(events__override.distinct_id)), " + f"events__override.person_id, events.person_id)) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", + ) context = HogQLContext( team_id=self.team.pk, enable_select_queries=True, + modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V2), ) - query = self._select( - "SELECT events.event FROM events SAMPLE 2/78 OFFSET 999 JOIN persons SAMPLE 0.1 ON persons.id=events.person_id", + self.assertEqual( + self._select( + "SELECT events.event FROM events SAMPLE 2/78 OFFSET 999 JOIN persons SAMPLE 0.1 ON persons.id=events.person_id", + context, + ), + f"SELECT events.event AS event FROM events SAMPLE 2/78 OFFSET 999 LEFT OUTER JOIN (SELECT " + "argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, " + "person_distinct_id_overrides.distinct_id AS distinct_id FROM person_distinct_id_overrides WHERE " + f"equals(person_distinct_id_overrides.team_id, {self.team.pk}) GROUP BY person_distinct_id_overrides.distinct_id " + "HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) " + "SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) " + f"JOIN (SELECT person.id AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), " + "ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, max(person.version) AS version " + f"FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " + "HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), " + "ifNull(less(argMax(toTimeZone(person.created_at, %(hogql_val_0)s), person.version), " + "plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) " + "SETTINGS optimize_aggregation_in_order=1) AS persons SAMPLE 0.1 ON equals(persons.id, if(not(empty(events__override.distinct_id)), " + f"events__override.person_id, events.person_id)) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", + ) + + with override_settings(PERSON_ON_EVENTS_OVERRIDE=True, PERSON_ON_EVENTS_V2_OVERRIDE=False): + context = HogQLContext( + team_id=self.team.pk, + enable_select_queries=True, + modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V2), + ) + expected = self._select( + "SELECT events.event FROM events SAMPLE 2/78 OFFSET 999 JOIN persons ON persons.id=events.person_id", context, ) + self.assertEqual( + expected, + f"SELECT events.event AS event FROM events SAMPLE 2/78 OFFSET 999 JOIN (SELECT person.id AS id FROM person WHERE " + f"and(equals(person.team_id, {self.team.pk}), ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, " + f"max(person.version) AS version FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " + f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, " + f"%(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " + f"AS persons ON equals(persons.id, events.person_id) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", + ) - self.assertIn("FROM events SAMPLE 2/78 OFFSET 999", query) - self.assertIn("AS persons SAMPLE 0.1 ON", query) + context = HogQLContext( + team_id=self.team.pk, + enable_select_queries=True, + modifiers=HogQLQueryModifiers(personsArgMaxVersion=PersonsArgMaxVersion.V2), + ) + expected = self._select( + "SELECT events.event FROM events SAMPLE 2/78 OFFSET 999 JOIN persons SAMPLE 0.1 ON persons.id=events.person_id", + context, + ) + self.assertEqual( + expected, + f"SELECT events.event AS event FROM events SAMPLE 2/78 OFFSET 999 JOIN (SELECT person.id AS id FROM person WHERE " + f"and(equals(person.team_id, {self.team.pk}), ifNull(in(tuple(person.id, person.version), (SELECT person.id AS id, " + f"max(person.version) AS version FROM person WHERE equals(person.team_id, {self.team.pk}) GROUP BY person.id " + f"HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, " + f"%(hogql_val_0)s), person.version), plus(now64(6, %(hogql_val_1)s), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) " + f"AS persons SAMPLE 0.1 ON equals(persons.id, events.person_id) WHERE equals(events.team_id, {self.team.pk}) LIMIT {MAX_SELECT_RETURNED_ROWS}", + ) def test_count_distinct(self): self.assertEqual( @@ -1895,10 +1966,7 @@ def test_inline_persons(self): dialect="clickhouse", settings=HogQLGlobalSettings(max_execution_time=10), ) - assert ( - f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(1, 2, 3)))" - in printed - ) + assert f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(1, 2, 3)))" in printed def test_dont_inline_persons(self): query = parse_select( @@ -1925,10 +1993,7 @@ def test_inline_persons_alias(self): dialect="clickhouse", settings=HogQLGlobalSettings(max_execution_time=10), ) - assert ( - f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(1, 2, 3)))" - in printed - ) + assert f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(1, 2, 3)))" in printed def test_two_joins(self): query = parse_select( @@ -1944,14 +2009,8 @@ def test_two_joins(self): dialect="clickhouse", settings=HogQLGlobalSettings(max_execution_time=10), ) - assert ( - f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(1, 2, 3)))" - in printed - ) - assert ( - f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(4, 5, 6)))" - in printed - ) + assert f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(1, 2, 3)))" in printed + assert f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(4, 5, 6)))" in printed def test_two_clauses(self): query = parse_select( @@ -1968,10 +2027,7 @@ def test_two_clauses(self): settings=HogQLGlobalSettings(max_execution_time=10), ) assert ( - f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(7, 8, 9)), in(person.id, tuple(1, 2, 3)))" - in printed - ) - assert ( - f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(person.id, tuple(4, 5, 6)))" + f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(7, 8, 9)), in(id, tuple(1, 2, 3)))" in printed ) + assert f"AS id FROM person WHERE and(equals(person.team_id, {self.team.pk}), in(id, tuple(4, 5, 6)))" in printed diff --git a/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr b/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr index eaf024ade223b..a447055b84d04 100644 --- a/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr +++ b/posthog/hogql/transforms/test/__snapshots__/test_lazy_tables.ambr @@ -23,7 +23,7 @@ SELECT persons__events.event AS event FROM ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS persons___properties___email + SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS persons___properties___email, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -45,7 +45,7 @@ WHERE and(equals(cohortpeople.team_id, 420), 0)) AS cohort_people LEFT JOIN ( SELECT persons.id AS id, persons.properties___email AS cohort_people__new_person___properties___email FROM ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -59,7 +59,7 @@ SELECT persons.id AS id, persons.properties___email AS email, persons.`properties___$browser` AS `$browser` FROM ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_1)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_1)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser`, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -79,7 +79,7 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -100,7 +100,7 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(person.properties, person.version) AS properties + SELECT argMax(person.properties, person.version) AS properties, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -157,7 +157,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser`, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -177,7 +177,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s, %(hogql_val_1)s, %(hogql_val_2)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser___in___json` + SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s, %(hogql_val_1)s, %(hogql_val_2)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser___in___json`, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -233,7 +233,7 @@ GROUP BY person_distinct_id2.distinct_id HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__pdi ON equals(events.distinct_id, events__pdi.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser`, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -254,7 +254,7 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, argMax(person.properties, person.version) AS properties + SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS properties___name, argMax(person.properties, person.version) AS properties, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id diff --git a/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr b/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr index 1f89a22c1d04a..c0c2e1a610370 100644 --- a/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr +++ b/posthog/hogql/transforms/test/__snapshots__/test_property_types.ambr @@ -4,7 +4,7 @@ SELECT persons__extended_properties.string_prop AS string_prop, persons__extended_properties.int_prop AS int_prop, transform(toString(persons__extended_properties.bool_prop), %(hogql_val_8)s, %(hogql_val_9)s, NULL) AS bool_prop FROM ( - SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS persons___properties___email + SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), person.version) AS persons___properties___email, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -53,7 +53,7 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(accurateCastOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), %(hogql_val_1)s), person.version) AS properties___tickets + SELECT argMax(accurateCastOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), %(hogql_val_1)s), person.version) AS properties___tickets, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id @@ -83,7 +83,7 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN ( - SELECT person.id AS id, argMax(parseDateTime64BestEffortOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), 6, %(hogql_val_1)s), person.version) AS properties___provided_timestamp + SELECT argMax(parseDateTime64BestEffortOrNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, %(hogql_val_0)s), ''), 'null'), '^"|"$', ''), 6, %(hogql_val_1)s), person.version) AS properties___provided_timestamp, person.id AS id FROM person WHERE equals(person.team_id, 420) GROUP BY person.id diff --git a/posthog/hogql_queries/ai/test/__snapshots__/test_actors_property_taxonomy_query_runner.ambr b/posthog/hogql_queries/ai/test/__snapshots__/test_actors_property_taxonomy_query_runner.ambr index 11f10398b6ae2..a0724393e1fe3 100644 --- a/posthog/hogql_queries/ai/test/__snapshots__/test_actors_property_taxonomy_query_runner.ambr +++ b/posthog/hogql_queries/ai/test/__snapshots__/test_actors_property_taxonomy_query_runner.ambr @@ -81,12 +81,15 @@ (SELECT DISTINCT persons.properties___email AS prop FROM (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + toTimeZone(person.created_at, 'UTC') AS created_at FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons WHERE isNotNull(prop) ORDER BY persons.created_at DESC) LIMIT 100 SETTINGS readonly=2, @@ -105,12 +108,15 @@ (SELECT DISTINCT persons.`properties___does not exist` AS prop FROM (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'does not exist'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___does not exist`, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'does not exist'), ''), 'null'), '^"|"$', '') AS `properties___does not exist`, + toTimeZone(person.created_at, 'UTC') AS created_at FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons WHERE isNotNull(prop) ORDER BY persons.created_at DESC) LIMIT 100 SETTINGS readonly=2, @@ -129,12 +135,15 @@ (SELECT DISTINCT persons.properties___age AS prop FROM (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age, + toTimeZone(person.created_at, 'UTC') AS created_at FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons WHERE isNotNull(prop) ORDER BY persons.created_at DESC) LIMIT 100 SETTINGS readonly=2, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index fb6f9d4cc1fee..8c5b1b85d1b2e 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -185,8 +185,8 @@ WHERE ifNull(in(steps, [2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -479,18 +479,15 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -589,18 +586,15 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -610,8 +604,8 @@ WHERE ifNull(in(steps, [1, 2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -710,18 +704,15 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -731,8 +722,8 @@ WHERE ifNull(in(steps, [2, 3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -831,18 +822,15 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0))))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -852,8 +840,8 @@ WHERE ifNull(in(steps, [3]), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr index 8ee62ceadae10..be8b077d2fca2 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation.ambr @@ -228,11 +228,14 @@ persons.properties AS person_props FROM (SELECT person.id AS id, - argMax(person.properties, person.version) AS properties + person.properties AS properties FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -407,17 +410,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -432,7 +432,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -460,17 +460,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -604,17 +601,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -629,7 +623,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -657,17 +651,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -801,17 +792,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -826,7 +814,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -854,17 +842,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -998,17 +983,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1023,7 +1005,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1051,17 +1033,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1175,11 +1154,14 @@ persons.properties AS person_props FROM (SELECT person.id AS id, - argMax(person.properties, person.version) AS properties + person.properties AS properties FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -1354,17 +1336,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1379,7 +1358,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1407,17 +1386,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1551,17 +1527,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1576,7 +1549,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1604,17 +1577,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1748,17 +1718,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1773,7 +1740,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1801,17 +1768,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1945,17 +1909,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -1970,7 +1931,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1998,17 +1959,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr index 7fc8c6038b0c4..46d4cbd700ebb 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors.ambr @@ -115,7 +115,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -368,7 +368,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -547,17 +547,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -572,7 +569,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -600,17 +597,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0))))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -648,6 +642,7 @@ max_bytes_before_external_group_by=0 ''' # --- +<<<<<<< HEAD # name: TestFunnelCorrelationActors.test_strict_funnel_correlation_with_recordings ''' SELECT persons.id, @@ -744,17 +739,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), notIn(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -769,7 +761,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -797,17 +789,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), notIn(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -941,17 +930,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), notIn(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, @@ -966,7 +952,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -994,17 +980,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), notIn(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0)) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0)))) WHERE ifNull(equals(step_0, 1), 0))) GROUP BY aggregation_target, steps @@ -1042,3 +1025,5 @@ max_bytes_before_external_group_by=0 ''' # --- +======= +>>>>>>> origin/master diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr index 7ffa9ae0a988b..3a16355324cb4 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_actors_udf.ambr @@ -67,7 +67,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -199,7 +199,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -313,17 +313,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -335,7 +332,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -357,17 +354,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', ''), person.version) AS properties___foo + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'foo'), ''), 'null'), '^"|"$', ''), 'bar'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'insight analyzed')), ifNull(equals(e__person.properties___foo, 'bar'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -403,3 +397,205 @@ max_bytes_before_external_group_by=0 ''' # --- +# name: TestFunnelCorrelationsActorsUDF.test_strict_funnel_correlation_with_recordings + ''' + SELECT sum(step_1) AS step_1, + sum(step_2) AS step_2, + arrayMap(x -> if(isNaN(x), NULL, x), [avgArrayOrNull(step_1_conversion_times)])[1] AS step_1_average_conversion_time, + arrayMap(x -> if(isNaN(x), NULL, x), [medianArrayOrNull(step_1_conversion_times)])[1] AS step_1_median_conversion_time, + groupArray(row_number) AS row_number, + final_prop AS final_prop + FROM + (SELECT countIf(ifNull(ifNull(equals(step_reached, 0), 0), 0)) AS step_1, + countIf(ifNull(ifNull(equals(step_reached, 1), 0), 0)) AS step_2, + groupArrayIf(timings[1], ifNull(greater(timings[1], 0), 0)) AS step_1_conversion_times, + rowNumberInBlock() AS row_number, + breakdown AS final_prop + FROM + (SELECT arraySort(t -> t.1, groupArray(tuple(accurateCastOrNull(timestamp, 'Float64'), uuid, [], arrayFilter(x -> ifNull(notEquals(x, 0), 1), [multiply(1, step_0), multiply(2, step_1)])))) AS events_array, + arrayJoin(aggregate_funnel_array(2, 1209600, 'first_touch', 'strict', [[]], arrayFilter((x, x2) -> not(and(empty(x.4), empty(x2.4), ifNull(equals(x.3, x2.3), isNull(x.3) + and isNull(x2.3)), ifNull(greater(x.1, x2.1), 0))), events_array, arrayRotateRight(events_array, 1)))) AS af_tuple, + af_tuple.1 AS step_reached, + plus(af_tuple.1, 1) AS steps, + af_tuple.2 AS breakdown, + af_tuple.3 AS timings, + aggregation_target AS aggregation_target + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, + e.uuid AS uuid, + e.`$session_id` AS `$session_id`, + e.`$window_id` AS `$window_id`, + if(equals(e.event, '$pageview'), 1, 0) AS step_0, + if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1 + FROM events AS e + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))))) + GROUP BY aggregation_target + HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) + GROUP BY breakdown + ORDER BY step_2 DESC, step_1 DESC) + GROUP BY final_prop + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=23622320128, + allow_experimental_analyzer=1 + ''' +# --- +# name: TestFunnelCorrelationsActorsUDF.test_strict_funnel_correlation_with_recordings.1 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE and(equals(session_replay_events.team_id, 2), ifNull(greaterOrEquals(toTimeZone(session_replay_events.min_first_timestamp, 'UTC'), minus(toDateTime64('2021-01-02 00:00:00.000000', 6, 'UTC'), toIntervalDay(21))), 0), in(session_replay_events.session_id, ['s2'])) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestFunnelCorrelationsActorsUDF.test_strict_funnel_correlation_with_recordings.2 + ''' + SELECT persons.id, + persons.id AS id, + source.matching_events AS matching_events + FROM + (SELECT funnel_actors.actor_id AS actor_id, + any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, + matched_events_array[plus(step_reached, 1)] AS matching_events, + (matched_events_array[1][1]).1 AS timestamp, + nullIf((matched_events_array[2][1]).1, 0) AS final_timestamp, + (matched_events_array[1][1]).1 AS first_timestamp, + steps AS steps, + final_timestamp, + first_timestamp + FROM + (SELECT arraySort(t -> t.1, groupArray(tuple(accurateCastOrNull(timestamp, 'Float64'), uuid, [], arrayFilter(x -> ifNull(notEquals(x, 0), 1), [multiply(1, step_0), multiply(2, step_1)])))) AS events_array, + arrayJoin(aggregate_funnel_array_v1(2, 1209600, 'first_touch', 'strict', [[]], arrayFilter((x, x2) -> not(and(empty(x.4), empty(x2.4), ifNull(equals(x.3, x2.3), isNull(x.3) + and isNull(x2.3)), ifNull(greater(x.1, x2.1), 0))), events_array, arrayRotateRight(events_array, 1)))) AS af_tuple, + arrayJoin(aggregate_funnel_array(2, 1209600, 'first_touch', 'strict', [[]], arrayFilter((x, x2) -> not(and(empty(x.4), empty(x2.4), ifNull(equals(x.3, x2.3), isNull(x.3) + and isNull(x2.3)), ifNull(greater(x.1, x2.1), 0))), events_array, arrayRotateRight(events_array, 1)))) AS af_tuple, + af_tuple.1 AS step_reached, + plus(af_tuple.1, 1) AS steps, + af_tuple.2 AS breakdown, + af_tuple.3 AS timings, + af_tuple.4 AS matched_event_uuids_array_array, + groupArray(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS user_events, + mapFromArrays(arrayMap(x -> x.2, user_events), user_events) AS user_events_map, + arrayMap(matched_event_uuids_array -> arrayMap(event_uuid -> user_events_map[event_uuid], arrayDistinct(matched_event_uuids_array)), matched_event_uuids_array_array) AS matched_events_array, + aggregation_target AS aggregation_target + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, + e.uuid AS uuid, + e.`$session_id` AS `$session_id`, + e.`$window_id` AS `$window_id`, + if(equals(e.event, '$pageview'), 1, 0) AS step_0, + if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1 + FROM events AS e + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0))) + GROUP BY aggregation_target + HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) + WHERE ifNull(greaterOrEquals(step_reached, 0), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source + INNER JOIN + (SELECT person.id AS id + FROM person + WHERE and(equals(person.team_id, 2), in(id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events + FROM + (SELECT aggregation_target AS actor_id, matched_events_array[plus(step_reached, 1)] AS matching_events, (matched_events_array[1][1]).1 AS timestamp, nullIf((matched_events_array[2][1]).1, 0) AS final_timestamp, (matched_events_array[1][1]).1 AS first_timestamp, steps AS steps, final_timestamp, first_timestamp + FROM + (SELECT arraySort(t -> t.1, groupArray(tuple(accurateCastOrNull(timestamp, 'Float64'), uuid, [], arrayFilter(x -> ifNull(notEquals(x, 0), 1), [multiply(1, step_0), multiply(2, step_1)])))) AS events_array, arrayJoin(aggregate_funnel_array_v1(2, 1209600, 'first_touch', 'strict', [[]], arrayFilter((x, x2) -> not(and(empty(x.4), empty(x2.4), ifNull(equals(x.3, x2.3), isNull(x.3) + and isNull(x2.3)), ifNull(greater(x.1, x2.1), 0))), events_array, arrayRotateRight(events_array, 1)))) AS af_tuple, af_tuple.1 AS step_reached, plus(af_tuple.1, 1) AS steps, af_tuple.2 AS breakdown, af_tuple.3 AS timings, af_tuple.4 AS matched_event_uuids_array_array, groupArray(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS user_events, mapFromArrays(arrayMap(x -> x.2, user_events), user_events) AS user_events_map, arrayMap(matched_event_uuids_array -> arrayMap(event_uuid -> user_events_map[event_uuid], arrayDistinct(matched_event_uuids_array)), matched_event_uuids_array_array) AS matched_events_array, aggregation_target AS aggregation_target + (SELECT arraySort(t -> t.1, groupArray(tuple(accurateCastOrNull(timestamp, 'Float64'), uuid, [], arrayFilter(x -> ifNull(notEquals(x, 0), 1), [multiply(1, step_0), multiply(2, step_1)])))) AS events_array, arrayJoin(aggregate_funnel_array(2, 1209600, 'first_touch', 'strict', [[]], arrayFilter((x, x2) -> not(and(empty(x.4), empty(x2.4), ifNull(equals(x.3, x2.3), isNull(x.3) + and isNull(x2.3)), ifNull(greater(x.1, x2.1), 0))), events_array, arrayRotateRight(events_array, 1)))) AS af_tuple, af_tuple.1 AS step_reached, plus(af_tuple.1, 1) AS steps, af_tuple.2 AS breakdown, af_tuple.3 AS timings, af_tuple.4 AS matched_event_uuids_array_array, groupArray(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS user_events, mapFromArrays(arrayMap(x -> x.2, user_events), user_events) AS user_events_map, arrayMap(matched_event_uuids_array -> arrayMap(event_uuid -> user_events_map[event_uuid], arrayDistinct(matched_event_uuids_array)), matched_event_uuids_array_array) AS matched_events_array, aggregation_target AS aggregation_target + FROM + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, e.uuid AS uuid, e.`$session_id` AS `$session_id`, e.`$window_id` AS `$window_id`, if(equals(e.event, '$pageview'), 1, 0) AS step_0, if(equals(e.event, 'insight analyzed'), 1, 0) AS step_1 + FROM events AS e + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + LEFT JOIN + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'foo'), ''), 'null'), '^"|"$', '') AS properties___foo + FROM person + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2021-01-08 23:59:59.999999', 6, 'UTC'))), ifNull(equals(e__person.properties___foo, 'bar'), 0))) + GROUP BY aggregation_target + HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) + WHERE ifNull(greaterOrEquals(step_reached, 0), 0) + ORDER BY aggregation_target ASC) AS funnel_actors + WHERE ifNull(notEquals(funnel_actors.steps, 2), 1) + GROUP BY funnel_actors.actor_id + ORDER BY funnel_actors.actor_id ASC) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + ORDER BY persons.id ASC + LIMIT 101 + OFFSET 0 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- +# name: TestFunnelCorrelationsActorsUDF.test_strict_funnel_correlation_with_recordings.3 + ''' + SELECT DISTINCT session_replay_events.session_id AS session_id + FROM session_replay_events + WHERE and(equals(session_replay_events.team_id, 2), ifNull(greaterOrEquals(toTimeZone(session_replay_events.min_first_timestamp, 'UTC'), minus(toDateTime64('2021-01-02 00:00:00.000000', 6, 'UTC'), toIntervalDay(21))), 0), in(session_replay_events.session_id, ['s3'])) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 + ''' +# --- diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr index b640659ffa298..2ce1ce619f3a2 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_correlation_udf.ambr @@ -177,11 +177,14 @@ persons.properties AS person_props FROM (SELECT person.id AS id, - argMax(person.properties, person.version) AS properties + person.properties AS properties FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -294,17 +297,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -316,7 +316,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -338,17 +338,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -435,17 +432,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -457,7 +451,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -479,17 +473,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -576,17 +567,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -598,7 +586,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -620,17 +608,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -717,17 +702,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -739,7 +721,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -761,17 +743,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -866,11 +845,14 @@ persons.properties AS person_props FROM (SELECT person.id AS id, - argMax(person.properties, person.version) AS properties + person.properties AS properties FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons) AS persons ON equals(persons.id, funnel_actors.actor_id)) AS aggregation_target_with_props GROUP BY (aggregation_target_with_props.prop).1, (aggregation_target_with_props.prop).2 HAVING ifNull(notIn((aggregation_target_with_props.prop).1, []), 0) LIMIT 100 @@ -983,17 +965,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1005,7 +984,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1027,17 +1006,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1124,17 +1100,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1146,7 +1119,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1168,17 +1141,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Positive'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Positive'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1265,17 +1235,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1287,7 +1254,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1309,17 +1276,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1406,17 +1370,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -1428,7 +1389,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT funnel_actors.actor_id AS actor_id, any(funnel_actors.matching_events) AS matching_events @@ -1450,17 +1411,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.`pmat_$browser`, ''), 'null'), person.version) AS `properties___$browser` + (SELECT person.id AS id, nullIf(nullIf(person.`pmat_$browser`, ''), 'null') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.`pmat_$browser`, ''), 'null'), 'Negative'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-14 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('paid', 'user signed up')), ifNull(equals(e__person.`properties___$browser`, 'Negative'), 0)), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr index 9045825898133..5716fdbd2c292 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel_udf.ambr @@ -106,8 +106,8 @@ WHERE ifNull(greaterOrEquals(step_reached, 1), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -328,18 +328,15 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) @@ -395,26 +392,23 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) WHERE ifNull(greaterOrEquals(step_reached, 0), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -470,26 +464,23 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) WHERE ifNull(greaterOrEquals(step_reached, 1), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -545,26 +536,23 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', ''), person.version) AS properties___age + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'age'), ''), 'null'), '^"|"$', '') AS properties___age FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(and(ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.com%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '20'), 0)), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%.org%'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'age'), ''), 'null'), '^"|"$', ''), '28'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-01 00:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-07-01 23:59:59.999999', 6, 'UTC'))), in(e.event, tuple('$pageview', 'user signed up')), or(and(ifNull(ilike(e__person.properties___email, '%.com%'), 0), ifNull(equals(e__person.properties___age, '20'), 0)), or(ifNull(ilike(e__person.properties___email, '%.org%'), 0), ifNull(equals(e__person.properties___age, '28'), 0)))), or(ifNull(equals(step_0, 1), 0), ifNull(equals(step_1, 1), 0), ifNull(equals(step_2, 1), 0)))) GROUP BY aggregation_target HAVING ifNull(greaterOrEquals(step_reached, 0), 0)) WHERE ifNull(greaterOrEquals(step_reached, 2), 0) ORDER BY aggregation_target ASC) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr index f2ad687c51992..a035cd71bf10e 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_insight_actors_query_runner.ambr @@ -58,11 +58,14 @@ ORDER BY aggregation_target ASC) AS source INNER JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.properties___name ASC) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, @@ -106,8 +109,8 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -118,36 +121,39 @@ and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0))) AS source INNER JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT DISTINCT actor_id AS actor_id - FROM - (SELECT min(events__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) - and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) - and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) - and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, arrayJoin(temp_concat) AS period_status_pairs, period_status_pairs.1 AS start_of_period, period_status_pairs.2 AS status, if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id) AS actor_id - FROM events - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) - WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) - GROUP BY actor_id) - WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) - and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0))) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT DISTINCT actor_id AS actor_id + FROM + (SELECT min(events__person.created_at) AS created_at, arraySort(groupUniqArray(toStartOfDay(toTimeZone(events.timestamp, 'US/Pacific')))) AS all_activity, arrayPopBack(arrayPushFront(all_activity, toStartOfDay(created_at))) AS previous_activity, arrayPopFront(arrayPushBack(all_activity, toStartOfDay(parseDateTime64BestEffortOrNull('1970-01-01 00:00:00', 6, 'US/Pacific')))) AS following_activity, arrayMap((previous, current, index) -> if(ifNull(equals(previous, current), isNull(previous) + and isNull(current)), 'new', if(and(ifNull(equals(minus(current, toIntervalDay(1)), previous), isNull(minus(current, toIntervalDay(1))) + and isNull(previous)), ifNull(notEquals(index, 1), 1)), 'returning', 'resurrecting')), previous_activity, all_activity, arrayEnumerate(all_activity)) AS initial_status, arrayMap((current, next) -> if(ifNull(equals(plus(current, toIntervalDay(1)), next), isNull(plus(current, toIntervalDay(1))) + and isNull(next)), '', 'dormant'), all_activity, following_activity) AS dormant_status, arrayMap(x -> plus(x, toIntervalDay(1)), arrayFilter((current, is_dormant) -> ifNull(equals(is_dormant, 'dormant'), 0), all_activity, dormant_status)) AS dormant_periods, arrayMap(x -> 'dormant', dormant_periods) AS dormant_label, arrayConcat(arrayZip(all_activity, initial_status), arrayZip(dormant_periods, dormant_label)) AS temp_concat, arrayJoin(temp_concat) AS period_status_pairs, period_status_pairs.1 AS start_of_period, period_status_pairs.2 AS status, if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id) AS actor_id + FROM events + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) + LEFT JOIN + (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, person.id AS id + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(events.team_id, 2), greaterOrEquals(toTimeZone(events.timestamp, 'US/Pacific'), minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific'))), toIntervalDay(1))), less(toTimeZone(events.timestamp, 'US/Pacific'), plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), toIntervalDay(1))), equals(events.event, '$pageview')) + GROUP BY actor_id) + WHERE and(ifNull(equals(start_of_period, toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific'))), isNull(start_of_period) + and isNull(toStartOfDay(parseDateTime64BestEffortOrNull('2020-01-12', 6, 'US/Pacific')))), ifNull(equals(status, 'returning'), 0))) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.properties___name ASC) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, @@ -213,26 +219,29 @@ WHERE ifNull(equals(num_intervals, 2), 0)) AS source INNER JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT aggregation_target AS actor_id - FROM - (SELECT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals - FROM events AS e SAMPLE 1 - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) - GROUP BY aggregation_target) - WHERE ifNull(equals(num_intervals, 2), 0)) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) + WHERE and(equals(person.team_id, 2), in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE and(equals(person.team_id, 2), in(person.id, + (SELECT source.actor_id AS actor_id + FROM + (SELECT aggregation_target AS actor_id + FROM + (SELECT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, count(DISTINCT toStartOfDay(toTimeZone(e.timestamp, 'US/Pacific'))) AS num_intervals + FROM events AS e SAMPLE 1 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-09 00:00:00', 6, 'US/Pacific')))), lessOrEquals(toTimeZone(e.timestamp, 'US/Pacific'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-19 23:59:59', 6, 'US/Pacific'))), equals(e.event, '$pageview')) + GROUP BY aggregation_target) + WHERE ifNull(equals(num_intervals, 2), 0)) AS source))) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0))))) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) ORDER BY persons.properties___name ASC) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, @@ -276,72 +285,6 @@ max_bytes_before_external_group_by=0 ''' # --- -# name: TestInsightActorsQueryRunner.test_insight_persons_trends_query - ''' - SELECT name AS name - FROM - (SELECT persons.properties___name AS name - FROM - (SELECT actor_id AS actor_id, - count() AS event_count - FROM - (SELECT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS actor_id, - toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, - e.uuid AS uuid - FROM events AS e - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) - WHERE and(equals(e.team_id, 2), ifNull(notEquals(e__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(timestamp, toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(timestamp, toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')), equals(e.event, '$pageview'))) - GROUP BY actor_id) AS source - INNER JOIN - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT source.actor_id AS actor_id - FROM - (SELECT actor_id AS actor_id, count() AS event_count - FROM - (SELECT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS actor_id, toTimeZone(e.timestamp, 'US/Pacific') AS timestamp, e.uuid AS uuid - FROM events AS e - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) - WHERE and(equals(e.team_id, 2), ifNull(notEquals(e__person.properties___email, 'tom@posthog.com'), 1), greaterOrEquals(timestamp, toDateTime64('2020-01-09 00:00:00.000000', 6, 'US/Pacific')), less(timestamp, toDateTime64('2020-01-10 00:00:00.000000', 6, 'US/Pacific')), equals(e.event, '$pageview'))) - GROUP BY actor_id) AS source))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version), plus(now64(6, 'US/Pacific'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons ON equals(persons.id, source.actor_id) - ORDER BY persons.properties___name ASC) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- # name: TestInsightActorsQueryRunner.test_insight_persons_trends_query_with_argmaxV1 ''' SELECT name AS name diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr index b015b6ef963f2..b3d749554f12f 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_lifecycle_query_runner.ambr @@ -70,8 +70,8 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -148,8 +148,8 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -223,8 +223,8 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id @@ -298,8 +298,8 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'US/Pacific'), person.version) AS created_at, + person.id AS id FROM person WHERE equals(person.team_id, 2) GROUP BY person.id diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr index a93e47ecb4120..326acba019703 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_paths_query_runner_ee.ambr @@ -1267,7 +1267,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -1415,7 +1415,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -1562,7 +1562,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -1710,7 +1710,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -1858,7 +1858,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2005,7 +2005,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2153,7 +2153,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2301,7 +2301,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2448,7 +2448,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2687,10 +2687,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -2853,10 +2853,10 @@ and isNull(path_key))) GROUP BY person_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -3006,10 +3006,10 @@ and isNull(path_key))) GROUP BY person_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -3172,10 +3172,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -3346,10 +3346,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -3689,7 +3689,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -3933,7 +3933,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -4177,7 +4177,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -4421,7 +4421,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -4816,7 +4816,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -4963,7 +4963,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -5192,7 +5192,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -5421,7 +5421,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -5568,7 +5568,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -5715,7 +5715,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13121,7 +13121,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13269,7 +13269,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13416,7 +13416,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13564,7 +13564,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13712,7 +13712,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -13859,7 +13859,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14007,7 +14007,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14155,7 +14155,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14302,7 +14302,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14541,10 +14541,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14707,10 +14707,10 @@ and isNull(path_key))) GROUP BY person_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -14860,10 +14860,10 @@ and isNull(path_key))) GROUP BY person_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -15026,10 +15026,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -15200,10 +15200,10 @@ WHERE ifNull(equals(path_key, '2_/2'), 0) GROUP BY person_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -15543,7 +15543,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -15787,7 +15787,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -16031,7 +16031,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -16275,7 +16275,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -16670,7 +16670,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -16817,7 +16817,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -17046,7 +17046,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -17275,7 +17275,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -17422,7 +17422,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count @@ -17569,7 +17569,7 @@ INNER JOIN (SELECT person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT person_id AS actor_id, groupUniqArray(100)(tuple(timestamp, uuid, session_id, window_id)) AS matching_events, count(*) AS event_count diff --git a/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr b/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr index 0350486731c92..63d18ae1c4380 100644 --- a/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr +++ b/posthog/hogql_queries/insights/test/__snapshots__/test_retention_query_runner.ambr @@ -337,11 +337,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), and(greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toStartOfDay(toDateTime64('2020-06-10 00:00:00.000000', 6, 'UTC'))), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-06-17 00:00:00.000000', 6, 'UTC'))), in(events.event, tuple('$pageview', '$pageview', 'non_matching_event'))) GROUP BY actor_id) AS actor_activity GROUP BY breakdown_values, diff --git a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py index 045132aed54ec..d34bdfe8876b5 100644 --- a/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py +++ b/posthog/hogql_queries/insights/test/test_insight_actors_query_runner.py @@ -8,7 +8,7 @@ from posthog.models.group.util import create_group from posthog.models.group_type_mapping import GroupTypeMapping from posthog.models.team import WeekStartDay -from posthog.schema import HogQLQueryModifiers +from posthog.schema import HogQLQueryModifiers, PersonsArgMaxVersion from posthog.test.base import ( APIBaseTest, ClickhouseTestMixin, @@ -213,7 +213,7 @@ def test_insight_persons_stickiness_groups_query(self): self.assertEqual([("org1",)], response.results) @snapshot_clickhouse_queries - def test_insight_persons_trends_query(self): + def test_insight_persons_trends_query_with_argmaxV1(self): self._create_test_events() self.team.timezone = "US/Pacific" self.team.save() @@ -233,10 +233,39 @@ def test_insight_persons_trends_query(self): ) """, + modifiers={"personsArgMaxVersion": PersonsArgMaxVersion.V1}, ) self.assertEqual([("p2",)], response.results) - assert "in(person.id," in queries[0] + assert "in(id," in queries[0] + self.assertEqual(2, queries[0].count("toTimeZone(e.timestamp, 'US/Pacific') AS timestamp")) + + @snapshot_clickhouse_queries + def test_insight_persons_trends_query_with_argmaxV2(self): + self._create_test_events() + self.team.timezone = "US/Pacific" + self.team.save() + + with self.capture_queries(lambda query: re.match(r"^SELECT\s+name\s+AS\s+name", query) is not None) as queries: + response = self.select( + """ + select * from ( + + + } + series={[]} + properties={[]} + /> + + + ) + """, + modifiers={"personsArgMaxVersion": PersonsArgMaxVersion.V2}, + ) + + self.assertEqual([("p2",)], response.results) + assert "in(person.id" in queries[0] self.assertEqual(2, queries[0].count("toTimeZone(e.timestamp, 'US/Pacific') AS timestamp")) @snapshot_clickhouse_queries diff --git a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr index 2145d20999bcc..14201b4e6b41e 100644 --- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr @@ -70,17 +70,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$bool_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$bool_prop` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$bool_prop'), ''), 'null'), '^"|"$', '') AS `properties___$bool_prop` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$bool_prop'), ''), 'null'), '^"|"$', ''), 'x'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC'))), and(equals(e.event, 'sign up'), ifNull(in(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), (SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -260,10 +257,10 @@ WHERE and(equals(e.team_id, 2), greaterOrEquals(timestamp, toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(timestamp, toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')), ifNull(equals(ifNull(nullIf(toString(e__group_0.properties___industry), ''), '$$_posthog_breakdown_null_$$'), 'technology'), 0), equals(e.event, 'sign up'))) GROUP BY actor_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT actor_id AS actor_id, count() AS event_count, groupUniqArray(100)(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS matching_events @@ -352,114 +349,6 @@ max_bytes_before_external_group_by=0 ''' # --- -# name: TestTrends.test_breakdown_by_person_property_pie_with_event_dau_filter - ''' - SELECT sum(total) AS total, - if(ifNull(ifNull(greaterOrEquals(row_number, 26), 0), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value - FROM - (SELECT count AS total, - breakdown_value AS breakdown_value, - row_number() OVER ( - ORDER BY total DESC) AS row_number - FROM - (SELECT sum(total) AS count, - breakdown_value AS breakdown_value - FROM - (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, - ifNull(nullIf(toString(e__person.properties___name), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value - FROM events AS e SAMPLE 1 - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), notIn(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(notILike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), '%person3%'), 1))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-21 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(notILike(e__person.properties___name, '%person3%'), 1)) - GROUP BY breakdown_value) - GROUP BY breakdown_value - ORDER BY breakdown_value ASC) - ORDER BY total DESC, breakdown_value ASC) - WHERE isNotNull(breakdown_value) - GROUP BY breakdown_value - ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, total DESC, - breakdown_value ASC - LIMIT 50000 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestTrends.test_breakdown_by_person_property_pie_with_event_dau_filter.1 - ''' - SELECT sum(total) AS total, - arrayMap(i -> if(ifNull(ifNull(greaterOrEquals(row_number, 26), 0), 0), '$$_posthog_breakdown_other_$$', i), breakdown_value) AS breakdown_value - FROM - (SELECT count AS total, - breakdown_value AS breakdown_value, - row_number() OVER ( - ORDER BY total DESC) AS row_number - FROM - (SELECT sum(total) AS count, - [ifNull(toString(breakdown_value_1), '$$_posthog_breakdown_null_$$')] AS breakdown_value - FROM - (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, - ifNull(nullIf(toString(e__person.properties___name), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value_1 - FROM events AS e SAMPLE 1 - LEFT OUTER JOIN - (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, - person_distinct_id_overrides.distinct_id AS distinct_id - FROM person_distinct_id_overrides - WHERE equals(person_distinct_id_overrides.team_id, 2) - GROUP BY person_distinct_id_overrides.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) - LEFT JOIN - (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name - FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), notIn(person.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(notILike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), '%person3%'), 1))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-21 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(notILike(e__person.properties___name, '%person3%'), 1)) - GROUP BY breakdown_value_1) - GROUP BY breakdown_value_1 - ORDER BY breakdown_value ASC) - ORDER BY total DESC, breakdown_value ASC) - WHERE arrayExists(x -> isNotNull(x), breakdown_value) - GROUP BY breakdown_value - ORDER BY if(has(breakdown_value, '$$_posthog_breakdown_other_$$'), 2, if(has(breakdown_value, '$$_posthog_breakdown_null_$$'), 1, 0)) ASC, total DESC, - breakdown_value ASC - LIMIT 50000 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- # name: TestTrends.test_breakdown_filtering_with_properties_in_new_format ''' SELECT groupArray(1)(date)[1] AS date, @@ -800,17 +689,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'p1'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'p2'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'p3'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), and(or(ifNull(equals(e__person.properties___name, 'p1'), 0), ifNull(equals(e__person.properties___name, 'p2'), 0), ifNull(equals(e__person.properties___name, 'p3'), 0)), ifNull(in(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), (SELECT cohortpeople.person_id AS person_id FROM cohortpeople @@ -1484,17 +1370,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'Jane'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-26 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-02 23:59:59', 6, 'UTC'))), equals(e.event, 'event_name'), ifNull(equals(e__person.properties___name, 'Jane'), 0)) GROUP BY day_start) GROUP BY day_start @@ -1653,10 +1536,10 @@ WHERE and(equals(e.team_id, 2), and(ifNull(equals(e__group_0.properties___industry, 'finance'), 0), ifNull(equals(e__group_2.properties___name, 'six'), 0)), greaterOrEquals(timestamp, toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(timestamp, toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')), equals(e.event, 'sign up'))) GROUP BY actor_id) AS source INNER JOIN - (SELECT person.id AS id, - argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at + (SELECT argMax(toTimeZone(person.created_at, 'UTC'), person.version) AS created_at, + person.id AS id FROM person - WHERE and(equals(person.team_id, 2), in(person.id, + WHERE and(equals(person.team_id, 2), in(id, (SELECT source.actor_id AS actor_id FROM (SELECT actor_id AS actor_id, count() AS event_count, groupUniqArray(100)(tuple(timestamp, uuid, `$session_id`, `$window_id`)) AS matching_events @@ -1776,18 +1659,15 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'filter_prop'), ''), 'null'), '^"|"$', ''), person.version) AS properties___filter_prop + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop`, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'filter_prop'), ''), 'null'), '^"|"$', '') AS properties___filter_prop FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'filter_prop'), ''), 'null'), '^"|"$', ''), 'filter_val'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, 'sign up'), ifNull(equals(e__person.properties___filter_prop, 'filter_val'), 0)), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), toIntervalDay(30))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id, breakdown_value) AS e @@ -1853,18 +1733,15 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop`, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'filter_prop'), ''), 'null'), '^"|"$', ''), person.version) AS properties___filter_prop + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop`, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'filter_prop'), ''), 'null'), '^"|"$', '') AS properties___filter_prop FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'filter_prop'), ''), 'null'), '^"|"$', ''), 'filter_val'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, 'sign up'), ifNull(equals(e__person.properties___filter_prop, 'filter_val'), 0)), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), toIntervalDay(30))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id, breakdown_value_1) AS e @@ -2227,17 +2104,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'person1'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -2273,17 +2147,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'person1'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -2345,17 +2216,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(nullIf(nullIf(person.pmat_name, ''), 'null'), person.version) AS properties___name + nullIf(nullIf(person.pmat_name, ''), 'null') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_name, ''), 'null'), 'person1'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -2417,17 +2285,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(nullIf(nullIf(person.pmat_name, ''), 'null'), person.version) AS properties___name + nullIf(nullIf(person.pmat_name, ''), 'null') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_name, ''), 'null'), 'person1'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'watched movie'), ifNull(equals(e__person.properties___name, 'person1'), 0)) GROUP BY day_start) GROUP BY day_start @@ -3532,19 +3397,16 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$os'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$os`, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$os'), ''), 'null'), '^"|"$', '') AS `properties___$os`, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$os'), ''), 'null'), '^"|"$', ''), 'android'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'safari'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-07-01 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), and(or(ifNull(notILike(e__person.properties___email, '%@posthog.com%'), 1), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', ''), 'val'), 0)), or(ifNull(equals(e__person.`properties___$os`, 'android'), 0), ifNull(equals(e__person.`properties___$browser`, 'safari'), 0)))) GROUP BY day_start, breakdown_value) @@ -3594,19 +3456,16 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$os'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$os`, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$browser` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$os'), ''), 'null'), '^"|"$', '') AS `properties___$os`, + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$browser'), ''), 'null'), '^"|"$', '') AS `properties___$browser` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$os'), ''), 'null'), '^"|"$', ''), 'android'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'chrome'), 0), ifNull(ilike(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), '%@posthog.com%'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-07-01 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), and(ifNull(equals(e__person.`properties___$os`, 'android'), 0), ifNull(equals(e__person.`properties___$browser`, 'chrome'), 0)), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', ''), 'val'), 0), ifNull(ilike(e__person.properties___email, '%@posthog.com%'), 0))) GROUP BY day_start, breakdown_value) @@ -3674,17 +3533,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), 'some_val'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), ifNull(equals(e__person.`properties___$some_prop`, 'some_val'), 0)) GROUP BY day_start) GROUP BY day_start @@ -3728,11 +3584,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY day_start, breakdown_value) @@ -3782,11 +3641,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY day_start, breakdown_value_1) @@ -4816,11 +4678,14 @@ raw_sessions.session_id_v7) AS e__session ON equals(toUInt128(accurateCastOrNull(e.`$session_id`, 'UUID')), e__session.session_id_v7) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY e.`$session_id`, breakdown_value) @@ -4876,11 +4741,14 @@ raw_sessions.session_id_v7) AS e__session ON equals(toUInt128(accurateCastOrNull(e.`$session_id`, 'UUID')), e__session.session_id_v7) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', ''), person.version) AS `properties___$some_prop` + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, '$some_prop'), ''), 'null'), '^"|"$', '') AS `properties___$some_prop` FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY e.`$session_id`, breakdown_value_1) @@ -5551,17 +5419,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', ''), person.version) AS properties___name + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'person-1'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'name'), ''), 'null'), '^"|"$', ''), 'person-2'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), or(ifNull(equals(e__person.properties___name, 'person-1'), 0), ifNull(equals(e__person.properties___name, 'person-2'), 0))), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) @@ -5610,17 +5475,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(nullIf(nullIf(person.pmat_name, ''), 'null'), person.version) AS properties___name + nullIf(nullIf(person.pmat_name, ''), 'null') AS properties___name FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_name, ''), 'null'), 'person-1'), 0), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_name, ''), 'null'), 'person-2'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS e__person ON equals(if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), e__person.id) WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), or(ifNull(equals(e__person.properties___name, 'person-1'), 0), ifNull(equals(e__person.properties___name, 'person-2'), 0))), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))), 0)) GROUP BY timestamp, actor_id) AS e WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) diff --git a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr index 8b88bfb2d9371..46cefcb7c8f49 100644 --- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_persons.ambr @@ -1,4 +1,14 @@ # serializer version: 1 +# name: TestTrendsPersons.test_trends_all_cohort_breakdown_persons_leftjoin + ''' + + SELECT count(DISTINCT person_id) + FROM cohortpeople + WHERE team_id = 2 + AND cohort_id = 2 + AND version = NULL + ''' +# --- # name: TestTrendsPersons.test_trends_all_cohort_breakdown_persons_leftjoin.1 ''' /* cohort_calculation: */ diff --git a/posthog/hogql_queries/test/__snapshots__/test_actors_query_runner.ambr b/posthog/hogql_queries/test/__snapshots__/test_actors_query_runner.ambr index 7e097645bdbfb..b98c8fab5986f 100644 --- a/posthog/hogql_queries/test/__snapshots__/test_actors_query_runner.ambr +++ b/posthog/hogql_queries/test/__snapshots__/test_actors_query_runner.ambr @@ -1,80 +1,4 @@ # serializer version: 1 -# name: TestActorsQueryRunner.test_persons_query_search_email - ''' - SELECT persons.id, - persons.id AS id, - persons.created_at AS created_at, - 1 - FROM - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name, - toTimeZone(person.created_at, 'UTC') AS created_at - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - WHERE or(ifNull(ilike(persons.properties___email, '%jacob4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(ilike(persons.properties___name, '%jacob4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(ilike(toString(persons.id), '%jacob4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(in(persons.id, - (SELECT person_distinct_ids.person_id AS person_id - FROM - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids - WHERE ifNull(ilike(person_distinct_ids.distinct_id, '%jacob4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0))), 0)) - ORDER BY persons.created_at DESC - LIMIT 101 - OFFSET 0 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- -# name: TestActorsQueryRunner.test_persons_query_search_email.1 - ''' - SELECT persons.id, - persons.id AS id, - persons.created_at AS created_at, - 1 - FROM - (SELECT person.id AS id, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email, - replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'name'), ''), 'null'), '^"|"$', '') AS properties___name, - toTimeZone(person.created_at, 'UTC') AS created_at - FROM person - WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), - (SELECT person.id AS id, max(person.version) AS version - FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS persons - WHERE or(ifNull(ilike(persons.properties___email, '%JACOB4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(ilike(persons.properties___name, '%JACOB4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(ilike(toString(persons.id), '%JACOB4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0), ifNull(in(persons.id, - (SELECT person_distinct_ids.person_id AS person_id - FROM - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, person_distinct_id2.distinct_id AS distinct_id - FROM person_distinct_id2 - WHERE equals(person_distinct_id2.team_id, 2) - GROUP BY person_distinct_id2.distinct_id - HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids - WHERE ifNull(ilike(person_distinct_ids.distinct_id, '%JACOB4@RANDOM_TEST_ID::01929020-03d5-0000-a54b-af244f0e0186.posthog%'), 0))), 0)) - ORDER BY persons.created_at DESC - LIMIT 101 - OFFSET 0 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=4000000, - max_expanded_ast_elements=4000000, - max_bytes_before_external_group_by=0 - ''' -# --- # name: TestActorsQueryRunner.test_persons_query_search_snapshot ''' diff --git a/posthog/hogql_queries/test/__snapshots__/test_error_tracking_query_runner.ambr b/posthog/hogql_queries/test/__snapshots__/test_error_tracking_query_runner.ambr index 86f7a0a0b99b9..9a973fc39730b 100644 --- a/posthog/hogql_queries/test/__snapshots__/test_error_tracking_query_runner.ambr +++ b/posthog/hogql_queries/test/__snapshots__/test_error_tracking_query_runner.ambr @@ -42,11 +42,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), equals(events.event, '$exception'), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1)) GROUP BY fingerprint LIMIT 101 @@ -78,11 +81,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), equals(events.event, '$exception'), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1), has([['SyntaxError']], JSONExtract(ifNull(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_fingerprint'), ''), 'null'), '^"|"$', ''), '[]'), 'Array(String)'))) LIMIT 101 OFFSET 0 SETTINGS readonly=2, @@ -136,6 +142,302 @@ max_bytes_before_external_group_by=0 ''' # --- +# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.1 + ''' + SELECT "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user_1' + AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 + ''' +# --- +# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.10 + ''' + SELECT "posthog_datawarehousejoin"."created_by_id", + "posthog_datawarehousejoin"."created_at", + "posthog_datawarehousejoin"."deleted", + "posthog_datawarehousejoin"."deleted_at", + "posthog_datawarehousejoin"."id", + "posthog_datawarehousejoin"."team_id", + "posthog_datawarehousejoin"."source_table_name", + "posthog_datawarehousejoin"."source_table_key", + "posthog_datawarehousejoin"."joining_table_name", + "posthog_datawarehousejoin"."joining_table_key", + "posthog_datawarehousejoin"."field_name" + FROM "posthog_datawarehousejoin" + WHERE ("posthog_datawarehousejoin"."team_id" = 2 + AND NOT ("posthog_datawarehousejoin"."deleted" + AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.11 + ''' + SELECT "posthog_propertydefinition"."name", + "posthog_propertydefinition"."property_type" + FROM "posthog_propertydefinition" + WHERE ("posthog_propertydefinition"."name" IN ('$exception_message', + '$exception_type', + '$exception_fingerprint') + AND "posthog_propertydefinition"."team_id" = 2 + AND "posthog_propertydefinition"."type" IN (1, + 2, + 3, + 4, + 5 /* ... */)) + ''' +# --- +# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.2 + ''' + SELECT "posthog_errortrackinggroup"."fingerprint", + "posthog_errortrackinggroup"."merged_fingerprints", + "posthog_errortrackinggroup"."status", + "posthog_errortrackinggroup"."assignee_id" + FROM "posthog_errortrackinggroup" + WHERE ("posthog_errortrackinggroup"."team_id" = 2 + AND "posthog_errortrackinggroup"."fingerprint" = (ARRAY['SyntaxError', + 'Cannot use ''in'' operator to search for ''wireframes'' in ‹�” ýf�ì½é–"¹’0ø*Lö¹SY A�Ξ÷ԝf + ˆ�Ø'])::text[]) + ''' +# --- +# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.3 + ''' + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 + ''' +# --- +# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.4 + ''' + SELECT "posthog_datawarehousetable"."created_by_id", + "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", + "posthog_datawarehousetable"."deleted", + "posthog_datawarehousetable"."deleted_at", + "posthog_datawarehousetable"."id", + "posthog_datawarehousetable"."name", + "posthog_datawarehousetable"."format", + "posthog_datawarehousetable"."team_id", + "posthog_datawarehousetable"."url_pattern", + "posthog_datawarehousetable"."credential_id", + "posthog_datawarehousetable"."external_data_source_id", + "posthog_datawarehousetable"."columns", + "posthog_datawarehousetable"."row_count", + "posthog_user"."id", + "posthog_user"."password", + "posthog_user"."last_login", + "posthog_user"."first_name", + "posthog_user"."last_name", + "posthog_user"."is_staff", + "posthog_user"."is_active", + "posthog_user"."date_joined", + "posthog_user"."uuid", + "posthog_user"."current_organization_id", + "posthog_user"."current_team_id", + "posthog_user"."email", + "posthog_user"."pending_email", + "posthog_user"."temporary_token", + "posthog_user"."distinct_id", + "posthog_user"."is_email_verified", + "posthog_user"."requested_password_reset_at", + "posthog_user"."has_seen_product_intro_for", + "posthog_user"."strapi_id", + "posthog_user"."theme_mode", + "posthog_user"."partial_notification_settings", + "posthog_user"."anonymize_data", + "posthog_user"."toolbar_mode", + "posthog_user"."hedgehog_config", + "posthog_user"."events_column_config", + "posthog_user"."email_opt_in", + "posthog_datawarehousecredential"."created_by_id", + "posthog_datawarehousecredential"."created_at", + "posthog_datawarehousecredential"."id", + "posthog_datawarehousecredential"."access_key", + "posthog_datawarehousecredential"."access_secret", + "posthog_datawarehousecredential"."team_id", + "posthog_externaldatasource"."created_by_id", + "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", + "posthog_externaldatasource"."deleted", + "posthog_externaldatasource"."deleted_at", + "posthog_externaldatasource"."id", + "posthog_externaldatasource"."source_id", + "posthog_externaldatasource"."connection_id", + "posthog_externaldatasource"."destination_id", + "posthog_externaldatasource"."team_id", + "posthog_externaldatasource"."sync_frequency", + "posthog_externaldatasource"."status", + "posthog_externaldatasource"."source_type", + "posthog_externaldatasource"."job_inputs", + "posthog_externaldatasource"."are_tables_created", + "posthog_externaldatasource"."prefix" + FROM "posthog_datawarehousetable" + LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") + LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") + LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") + WHERE ("posthog_datawarehousetable"."team_id" = 2 + AND NOT ("posthog_datawarehousetable"."deleted" + AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.5 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.6 + ''' + SELECT "posthog_datawarehousejoin"."created_by_id", + "posthog_datawarehousejoin"."created_at", + "posthog_datawarehousejoin"."deleted", + "posthog_datawarehousejoin"."deleted_at", + "posthog_datawarehousejoin"."id", + "posthog_datawarehousejoin"."team_id", + "posthog_datawarehousejoin"."source_table_name", + "posthog_datawarehousejoin"."source_table_key", + "posthog_datawarehousejoin"."joining_table_name", + "posthog_datawarehousejoin"."joining_table_key", + "posthog_datawarehousejoin"."field_name" + FROM "posthog_datawarehousejoin" + WHERE ("posthog_datawarehousejoin"."team_id" = 2 + AND NOT ("posthog_datawarehousejoin"."deleted" + AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.7 + ''' + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 + ''' +# --- +# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.8 + ''' + SELECT "posthog_datawarehousetable"."created_by_id", + "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", + "posthog_datawarehousetable"."deleted", + "posthog_datawarehousetable"."deleted_at", + "posthog_datawarehousetable"."id", + "posthog_datawarehousetable"."name", + "posthog_datawarehousetable"."format", + "posthog_datawarehousetable"."team_id", + "posthog_datawarehousetable"."url_pattern", + "posthog_datawarehousetable"."credential_id", + "posthog_datawarehousetable"."external_data_source_id", + "posthog_datawarehousetable"."columns", + "posthog_datawarehousetable"."row_count", + "posthog_user"."id", + "posthog_user"."password", + "posthog_user"."last_login", + "posthog_user"."first_name", + "posthog_user"."last_name", + "posthog_user"."is_staff", + "posthog_user"."is_active", + "posthog_user"."date_joined", + "posthog_user"."uuid", + "posthog_user"."current_organization_id", + "posthog_user"."current_team_id", + "posthog_user"."email", + "posthog_user"."pending_email", + "posthog_user"."temporary_token", + "posthog_user"."distinct_id", + "posthog_user"."is_email_verified", + "posthog_user"."requested_password_reset_at", + "posthog_user"."has_seen_product_intro_for", + "posthog_user"."strapi_id", + "posthog_user"."theme_mode", + "posthog_user"."partial_notification_settings", + "posthog_user"."anonymize_data", + "posthog_user"."toolbar_mode", + "posthog_user"."hedgehog_config", + "posthog_user"."events_column_config", + "posthog_user"."email_opt_in", + "posthog_datawarehousecredential"."created_by_id", + "posthog_datawarehousecredential"."created_at", + "posthog_datawarehousecredential"."id", + "posthog_datawarehousecredential"."access_key", + "posthog_datawarehousecredential"."access_secret", + "posthog_datawarehousecredential"."team_id", + "posthog_externaldatasource"."created_by_id", + "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", + "posthog_externaldatasource"."deleted", + "posthog_externaldatasource"."deleted_at", + "posthog_externaldatasource"."id", + "posthog_externaldatasource"."source_id", + "posthog_externaldatasource"."connection_id", + "posthog_externaldatasource"."destination_id", + "posthog_externaldatasource"."team_id", + "posthog_externaldatasource"."sync_frequency", + "posthog_externaldatasource"."status", + "posthog_externaldatasource"."source_type", + "posthog_externaldatasource"."job_inputs", + "posthog_externaldatasource"."are_tables_created", + "posthog_externaldatasource"."prefix" + FROM "posthog_datawarehousetable" + LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") + LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") + LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") + WHERE ("posthog_datawarehousetable"."team_id" = 2 + AND NOT ("posthog_datawarehousetable"."deleted" + AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestErrorTrackingQueryRunner.test_fingerprints_with_null_characters.9 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- # name: TestErrorTrackingQueryRunner.test_hogql_filters ''' SELECT count(DISTINCT events.uuid) AS occurrences, @@ -156,17 +458,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'email@posthog.com'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), equals(events.event, '$exception'), ifNull(equals(events__person.properties___email, 'email@posthog.com'), 0)) GROUP BY fingerprint LIMIT 101 @@ -199,11 +498,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), equals(events.event, '$exception'), and(less(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2022-01-11 00:00:00.000000', 6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2022-01-10 00:00:00.000000', 6, 'UTC')), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1)), or(ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_list'), ''), 'null'), '^"|"$', '')), lower('databasenot')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_type'), ''), 'null'), '^"|"$', '')), lower('databasenot')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_message'), ''), 'null'), '^"|"$', '')), lower('databasenot')), 0), 0))) GROUP BY fingerprint LIMIT 101 @@ -236,11 +538,14 @@ HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN (SELECT person.id AS id, - argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), equals(events.event, '$exception'), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1), and(or(ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_list'), ''), 'null'), '^"|"$', '')), lower('databasenotfoundX')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_type'), ''), 'null'), '^"|"$', '')), lower('databasenotfoundX')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_message'), ''), 'null'), '^"|"$', '')), lower('databasenotfoundX')), 0), 0)), or(ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_list'), ''), 'null'), '^"|"$', '')), lower('clickhouse/client/execute.py')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_type'), ''), 'null'), '^"|"$', '')), lower('clickhouse/client/execute.py')), 0), 0), ifNull(greater(position(lower(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$exception_message'), ''), 'null'), '^"|"$', '')), lower('clickhouse/client/execute.py')), 0), 0)))) GROUP BY fingerprint LIMIT 101 diff --git a/posthog/hogql_queries/test/test_query_runner.py b/posthog/hogql_queries/test/test_query_runner.py index 57dd961fbdb96..927930dad2da0 100644 --- a/posthog/hogql_queries/test/test_query_runner.py +++ b/posthog/hogql_queries/test/test_query_runner.py @@ -92,6 +92,8 @@ def test_cache_payload(self): "hogql_modifiers": { "inCohortVia": "auto", "materializationMode": "legacy_null_as_null", + "personsArgMaxVersion": "auto", + "optimizeJoinedFilters": False, "personsOnEventsMode": PersonsOnEventsMode.PERSON_ID_OVERRIDE_PROPERTIES_JOINED, "bounceRatePageViewMode": "count_pageviews", "sessionTableVersion": "auto", @@ -113,7 +115,7 @@ def test_cache_key(self): runner = TestQueryRunner(query={"some_attr": "bla"}, team=team) cache_key = runner.get_cache_key() - self.assertEqual(cache_key, "cache_f3537dabae0c3bf5ca038413fc1a0566") + self.assertEqual(cache_key, "cache_93427f8f06e6cc8643a394ae002de2c1") def test_cache_key_runner_subclass(self): TestQueryRunner = self.setup_test_query_runner_class() @@ -127,7 +129,7 @@ class TestSubclassQueryRunner(TestQueryRunner): runner = TestSubclassQueryRunner(query={"some_attr": "bla"}, team=team) cache_key = runner.get_cache_key() - self.assertEqual(cache_key, "cache_a56e8e639aba0d22f86b228ff44c5a65") + self.assertEqual(cache_key, "cache_bb6398a99867dfbdc45a2fc4fccb8f27") def test_cache_key_different_timezone(self): TestQueryRunner = self.setup_test_query_runner_class() @@ -138,7 +140,7 @@ def test_cache_key_different_timezone(self): runner = TestQueryRunner(query={"some_attr": "bla"}, team=team) cache_key = runner.get_cache_key() - self.assertEqual(cache_key, "cache_1c3b6a542b4a10f3c609df3c98968b5c") + self.assertEqual(cache_key, "cache_e0c2bb1ad091102533399ebdddbfb24d") @mock.patch("django.db.transaction.on_commit") def test_cache_response(self, mock_on_commit): diff --git a/posthog/models/person/util.py b/posthog/models/person/util.py index 7aa883c9bab68..4dbf3117a1a46 100644 --- a/posthog/models/person/util.py +++ b/posthog/models/person/util.py @@ -106,7 +106,7 @@ def bulk_create_persons(persons_list: list[dict]): distinct_id_inserts.append(f"('{distinct_id}', '{person.uuid}', {person.team_id}, 0, 0, now(), 0, 0)") person_mapping[distinct_id] = person - created_at = persons_list[index].get("created_at", now()).strftime("%Y-%m-%d %H:%M:%S.%f") + created_at = now().strftime("%Y-%m-%d %H:%M:%S.%f") timestamp = now().strftime("%Y-%m-%d %H:%M:%S") person_inserts.append( f"('{person.uuid}', '{created_at}', {person.team_id}, '{json.dumps(person.properties)}', {'1' if person.is_identified else '0'}, '{timestamp}', 0, 0, 0)" diff --git a/posthog/schema.py b/posthog/schema.py index 958c773b23be0..b77997f9f74f5 100644 --- a/posthog/schema.py +++ b/posthog/schema.py @@ -683,6 +683,12 @@ class MaterializationMode(StrEnum): DISABLED = "disabled" +class PersonsArgMaxVersion(StrEnum): + AUTO = "auto" + V1 = "v1" + V2 = "v2" + + class PersonsJoinMode(StrEnum): INNER = "inner" LEFT = "left" @@ -716,6 +722,8 @@ class HogQLQueryModifiers(BaseModel): debug: Optional[bool] = None inCohortVia: Optional[InCohortVia] = None materializationMode: Optional[MaterializationMode] = None + optimizeJoinedFilters: Optional[bool] = None + personsArgMaxVersion: Optional[PersonsArgMaxVersion] = None personsJoinMode: Optional[PersonsJoinMode] = None personsOnEventsMode: Optional[PersonsOnEventsMode] = None propertyGroupsMode: Optional[PropertyGroupsMode] = None diff --git a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr index b3064cee9586f..cc367480e0f1e 100644 --- a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr +++ b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_filters.ambr @@ -1513,17 +1513,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), 1), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -1570,17 +1567,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -1666,17 +1660,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email + (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), 1), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -1723,17 +1714,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email + (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(nullIf(nullIf(events.`mat_$browser`, ''), 'null'), 'Chrome'), 0), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -1780,17 +1768,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), ifNull(equals(events__person.properties___email, 'bla'), 0))) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -1837,17 +1822,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'something else'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), ifNull(equals(events__person.properties___email, 'something else'), 0))) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -2440,11 +2422,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), 1), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, 'is_internal_user'), ''), 'null'), '^"|"$', ''), 'false'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0)), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -2530,11 +2515,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email + (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), and(equals(events.event, '$pageview'), 1), and(ifNull(equals(nullIf(nullIf(events.mat_is_internal_user, ''), 'null'), 'false'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(events.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Chrome'), 0)), ifNull(notILike(events__person.properties___email, '%@posthog.com%'), 1)) GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) @@ -3430,17 +3418,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla@gmail.com'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla@gmail.com'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -3487,11 +3472,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE equals(person.team_id, 2) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), ifNull(notILike(events__person.properties___email, '%gmail.com%'), 1)) GROUP BY events.`$session_id` HAVING 1))) @@ -4291,17 +4279,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'test@posthog.com'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'david@posthog.com'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), and(ifNull(equals(events__person.properties___email, 'test@posthog.com'), 0), ifNull(equals(events__person.properties___email, 'david@posthog.com'), 0))) GROUP BY events.`$session_id` HAVING 1))) @@ -4348,17 +4333,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'test@posthog.com'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'david@posthog.com'), 0)))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-11 13:46:23.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-24 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-01 13:46:23.000000', 6, 'UTC')), or(ifNull(equals(events__person.properties___email, 'test@posthog.com'), 0), ifNull(equals(events__person.properties___email, 'david@posthog.com'), 0))) GROUP BY events.`$session_id` HAVING 1))) @@ -5213,17 +5195,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -5309,17 +5288,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email + (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -5405,17 +5381,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', ''), person.version) AS properties___email + (SELECT person.id AS id, replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person.properties, 'email'), ''), 'null'), '^"|"$', '') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(persons_where_optimization.properties, 'email'), ''), 'null'), '^"|"$', ''), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) @@ -5501,17 +5474,14 @@ GROUP BY person_distinct_id_overrides.distinct_id HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS events__override ON equals(events.distinct_id, events__override.distinct_id) LEFT JOIN - (SELECT person.id AS id, argMax(nullIf(nullIf(person.pmat_email, ''), 'null'), person.version) AS properties___email + (SELECT person.id AS id, nullIf(nullIf(person.pmat_email, ''), 'null') AS properties___email FROM person - WHERE and(equals(person.team_id, 2), in(person.id, - (SELECT persons_where_optimization.id AS id - FROM person AS persons_where_optimization - WHERE and(equals(persons_where_optimization.team_id, 2), notIn(persons_where_optimization.id, - (SELECT person.id AS id - FROM person - WHERE and(equals(person.team_id, 2), equals(person.is_deleted, 1)))), ifNull(equals(nullIf(nullIf(persons_where_optimization.pmat_email, ''), 'null'), 'bla'), 0))))) - GROUP BY person.id - HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) + WHERE and(equals(person.team_id, 2), ifNull(in(tuple(person.id, person.version), + (SELECT person.id AS id, max(person.version) AS version + FROM person + WHERE equals(person.team_id, 2) + GROUP BY person.id + HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(toTimeZone(person.created_at, 'UTC'), person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS events__person ON equals(if(not(empty(events__override.distinct_id)), events__override.person_id, events.person_id), events__person.id) WHERE and(equals(events.team_id, 2), notEmpty(events.`$session_id`), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2020-12-31 20:00:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), now64(6, 'UTC')), greaterOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-13 23:58:00.000000', 6, 'UTC')), lessOrEquals(toTimeZone(events.timestamp, 'UTC'), toDateTime64('2021-01-21 20:00:00.000000', 6, 'UTC')), ifNull(equals(events__person.properties___email, 'bla'), 0)) GROUP BY events.`$session_id` HAVING 1))) diff --git a/posthog/session_recordings/session_recording_api.py b/posthog/session_recordings/session_recording_api.py index 68ecd7bb21120..6f1f272e40012 100644 --- a/posthog/session_recordings/session_recording_api.py +++ b/posthog/session_recordings/session_recording_api.py @@ -32,7 +32,7 @@ from posthog.cloud_utils import is_cloud from posthog.constants import SESSION_RECORDINGS_FILTER_IDS from posthog.event_usage import report_user_action -from posthog.models import User +from posthog.models import Team, User from posthog.models.filters.session_recordings_filter import SessionRecordingsFilter from posthog.models.person.person import PersonDistinctId from posthog.rate_limit import ( @@ -40,7 +40,7 @@ ClickHouseSustainedRateThrottle, PersonalApiKeyRateThrottle, ) -from posthog.schema import QueryTiming +from posthog.schema import HogQLQueryModifiers, QueryTiming from posthog.session_recordings.models.session_recording import SessionRecording from posthog.session_recordings.models.session_recording_event import ( SessionRecordingViewed, @@ -353,8 +353,10 @@ def matching_events(self, request: request.Request, *args: Any, **kwargs: Any) - "Must specify at least one event or action filter", ) + distinct_id = str(cast(User, request.user).distinct_id) + modifiers = safely_read_modifiers_overrides(distinct_id, self.team) matching_events_query_response = ReplayFiltersEventsSubQuery( - filter=filter, team=self.team + filter=filter, team=self.team, hogql_query_modifiers=modifiers ).get_event_ids_for_session() response = JsonResponse(data={"results": matching_events_query_response.results}) @@ -911,9 +913,12 @@ def list_recordings( filter = filter.shallow_clone({SESSION_RECORDINGS_FILTER_IDS: remaining_session_ids}) if (all_session_ids and filter.session_ids) or not all_session_ids: + distinct_id = str(cast(User, request.user).distinct_id) + modifiers = safely_read_modifiers_overrides(distinct_id, team) + with timer("load_recordings_from_hogql"): (ch_session_recordings, more_recordings_available, hogql_timings) = SessionRecordingListFromFilters( - filter=filter, team=team, hogql_query_modifiers=None + filter=filter, team=team, hogql_query_modifiers=modifiers ).run() with timer("build_recordings"): @@ -969,6 +974,32 @@ def list_recordings( ) +def safely_read_modifiers_overrides(distinct_id: str, team: Team) -> HogQLQueryModifiers: + modifiers = HogQLQueryModifiers() + + try: + groups = {"organization": str(team.organization.id)} + flag_key = "HOG_QL_ORG_QUERY_OVERRIDES" + flags_n_bags = posthoganalytics.get_all_flags_and_payloads( + distinct_id, + groups=groups, + ) + # this loads nothing whereas the payload is available + # modifier_overrides = posthoganalytics.get_feature_flag_payload( + # flag_key, + # distinct_id, + # groups=groups, + # ) + modifier_overrides = (flags_n_bags or {}).get("featureFlagPayloads", {}).get(flag_key, None) + if modifier_overrides: + modifiers.optimizeJoinedFilters = json.loads(modifier_overrides).get("optimizeJoinedFilters", None) + except: + # be extra safe + pass + + return modifiers + + def _generate_timings(hogql_timings: list[QueryTiming] | None, timer: ServerTimingsGathered) -> dict[str, float]: timings_dict = timer.get_all_timings() hogql_timings_dict = {} diff --git a/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr b/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr index 74c042c140f95..ef29f7d875751 100644 --- a/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr +++ b/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr @@ -595,6 +595,32 @@ ''' # --- # name: TestSessionRecordings.test_get_session_recordings.20 + ''' + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_get_session_recordings.21 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -606,7 +632,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.21 +# name: TestSessionRecordings.test_get_session_recordings.22 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -627,7 +653,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.22 +# name: TestSessionRecordings.test_get_session_recordings.23 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -700,7 +726,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.23 +# name: TestSessionRecordings.test_get_session_recordings.24 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -719,7 +745,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.24 +# name: TestSessionRecordings.test_get_session_recordings.25 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -731,7 +757,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.25 +# name: TestSessionRecordings.test_get_session_recordings.26 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -752,7 +778,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.26 +# name: TestSessionRecordings.test_get_session_recordings.27 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -825,7 +851,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.27 +# name: TestSessionRecordings.test_get_session_recordings.28 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -844,7 +870,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.28 +# name: TestSessionRecordings.test_get_session_recordings.29 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -872,14 +898,6 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_get_session_recordings.29 - ''' - SELECT "posthog_sessionrecordingviewed"."session_id" - FROM "posthog_sessionrecordingviewed" - WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 - AND "posthog_sessionrecordingviewed"."user_id" = 2) - ''' -# --- # name: TestSessionRecordings.test_get_session_recordings.3 ''' SELECT "posthog_team"."id", @@ -948,26 +966,10 @@ # --- # name: TestSessionRecordings.test_get_session_recordings.30 ''' - SELECT "posthog_persondistinctid"."id", - "posthog_persondistinctid"."team_id", - "posthog_persondistinctid"."person_id", - "posthog_persondistinctid"."distinct_id", - "posthog_persondistinctid"."version", - "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_persondistinctid" - INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") - WHERE ("posthog_persondistinctid"."distinct_id" IN ('user2', - 'user_one_0') - AND "posthog_persondistinctid"."team_id" = 2) + SELECT "posthog_sessionrecordingviewed"."session_id" + FROM "posthog_sessionrecordingviewed" + WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 + AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- # name: TestSessionRecordings.test_get_session_recordings.31 @@ -1483,26 +1485,21 @@ # --- # name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.10 ''' - SELECT "posthog_datawarehousejoin"."created_by_id", - "posthog_datawarehousejoin"."created_at", - "posthog_datawarehousejoin"."deleted", - "posthog_datawarehousejoin"."deleted_at", - "posthog_datawarehousejoin"."id", - "posthog_datawarehousejoin"."team_id", - "posthog_datawarehousejoin"."source_table_name", - "posthog_datawarehousejoin"."source_table_key", - "posthog_datawarehousejoin"."joining_table_name", - "posthog_datawarehousejoin"."joining_table_key", - "posthog_datawarehousejoin"."field_name" - FROM "posthog_datawarehousejoin" - WHERE ("posthog_datawarehousejoin"."team_id" = 2 - AND NOT ("posthog_datawarehousejoin"."deleted" - AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.100 - ''' - SELECT "posthog_user"."id", + SELECT "posthog_datawarehousetable"."created_by_id", + "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", + "posthog_datawarehousetable"."deleted", + "posthog_datawarehousetable"."deleted_at", + "posthog_datawarehousetable"."id", + "posthog_datawarehousetable"."name", + "posthog_datawarehousetable"."format", + "posthog_datawarehousetable"."team_id", + "posthog_datawarehousetable"."url_pattern", + "posthog_datawarehousetable"."credential_id", + "posthog_datawarehousetable"."external_data_source_id", + "posthog_datawarehousetable"."columns", + "posthog_datawarehousetable"."row_count", + "posthog_user"."id", "posthog_user"."password", "posthog_user"."last_login", "posthog_user"."first_name", @@ -1517,6 +1514,7 @@ "posthog_user"."temporary_token", "posthog_user"."distinct_id", "posthog_user"."is_email_verified", + "posthog_user"."requested_password_reset_at", "posthog_user"."has_seen_product_intro_for", "posthog_user"."strapi_id", "posthog_user"."is_active", @@ -1526,13 +1524,105 @@ "posthog_user"."toolbar_mode", "posthog_user"."hedgehog_config", "posthog_user"."events_column_config", - "posthog_user"."email_opt_in" - FROM "posthog_user" - WHERE "posthog_user"."id" = 2 - LIMIT 21 + "posthog_user"."email_opt_in", + "posthog_datawarehousecredential"."created_by_id", + "posthog_datawarehousecredential"."created_at", + "posthog_datawarehousecredential"."id", + "posthog_datawarehousecredential"."access_key", + "posthog_datawarehousecredential"."access_secret", + "posthog_datawarehousecredential"."team_id", + "posthog_externaldatasource"."created_by_id", + "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", + "posthog_externaldatasource"."deleted", + "posthog_externaldatasource"."deleted_at", + "posthog_externaldatasource"."id", + "posthog_externaldatasource"."source_id", + "posthog_externaldatasource"."connection_id", + "posthog_externaldatasource"."destination_id", + "posthog_externaldatasource"."team_id", + "posthog_externaldatasource"."sync_frequency", + "posthog_externaldatasource"."status", + "posthog_externaldatasource"."source_type", + "posthog_externaldatasource"."job_inputs", + "posthog_externaldatasource"."are_tables_created", + "posthog_externaldatasource"."prefix" + FROM "posthog_datawarehousetable" + LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") + LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") + LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") + WHERE ("posthog_datawarehousetable"."team_id" = 2 + AND NOT ("posthog_datawarehousetable"."deleted" + AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.100 + ''' + SELECT "posthog_sessionrecording"."id", + "posthog_sessionrecording"."session_id", + "posthog_sessionrecording"."team_id", + "posthog_sessionrecording"."created_at", + "posthog_sessionrecording"."deleted", + "posthog_sessionrecording"."object_storage_path", + "posthog_sessionrecording"."distinct_id", + "posthog_sessionrecording"."duration", + "posthog_sessionrecording"."active_seconds", + "posthog_sessionrecording"."inactive_seconds", + "posthog_sessionrecording"."start_time", + "posthog_sessionrecording"."end_time", + "posthog_sessionrecording"."click_count", + "posthog_sessionrecording"."keypress_count", + "posthog_sessionrecording"."mouse_activity_count", + "posthog_sessionrecording"."console_log_count", + "posthog_sessionrecording"."console_warn_count", + "posthog_sessionrecording"."console_error_count", + "posthog_sessionrecording"."start_url", + "posthog_sessionrecording"."storage_version" + FROM "posthog_sessionrecording" + WHERE ("posthog_sessionrecording"."session_id" IN ('1', + '2', + '3', + '4', + '5') + AND "posthog_sessionrecording"."team_id" = 2) ''' # --- # name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.101 + ''' + SELECT "posthog_sessionrecordingviewed"."session_id" + FROM "posthog_sessionrecordingviewed" + WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 + AND "posthog_sessionrecordingviewed"."user_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.102 + ''' + SELECT "posthog_persondistinctid"."id", + "posthog_persondistinctid"."team_id", + "posthog_persondistinctid"."person_id", + "posthog_persondistinctid"."distinct_id", + "posthog_persondistinctid"."version", + "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_persondistinctid" + INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") + WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', + 'user2', + 'user3', + 'user4', + 'user5') + AND "posthog_persondistinctid"."team_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.103 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -1584,6 +1674,13 @@ "posthog_team"."modifiers", "posthog_team"."correlation_config", "posthog_team"."session_recording_retention_period_days", + "posthog_team"."plugins_opt_in", + "posthog_team"."opt_out_capture", + "posthog_team"."event_names", + "posthog_team"."event_names_with_usage", + "posthog_team"."event_properties", + "posthog_team"."event_properties_with_usage", + "posthog_team"."event_properties_numerical", "posthog_team"."external_data_workspace_id", "posthog_team"."external_data_workspace_last_synced_at" FROM "posthog_team" @@ -1591,51 +1688,225 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.102 - ''' - SELECT "posthog_organizationmembership"."id", - "posthog_organizationmembership"."organization_id", - "posthog_organizationmembership"."user_id", - "posthog_organizationmembership"."level", - "posthog_organizationmembership"."joined_at", - "posthog_organizationmembership"."updated_at", - "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organizationmembership" - INNER JOIN "posthog_organization" ON ("posthog_organizationmembership"."organization_id" = "posthog_organization"."id") - WHERE "posthog_organizationmembership"."user_id" = 2 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.103 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.104 ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 + SELECT "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user6' + AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.104 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.105 + ''' + SELECT "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user6' + AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.106 + ''' + SELECT "posthog_user"."id", + "posthog_user"."password", + "posthog_user"."last_login", + "posthog_user"."first_name", + "posthog_user"."last_name", + "posthog_user"."is_staff", + "posthog_user"."date_joined", + "posthog_user"."uuid", + "posthog_user"."current_organization_id", + "posthog_user"."current_team_id", + "posthog_user"."email", + "posthog_user"."pending_email", + "posthog_user"."temporary_token", + "posthog_user"."distinct_id", + "posthog_user"."is_email_verified", + "posthog_user"."has_seen_product_intro_for", + "posthog_user"."strapi_id", + "posthog_user"."is_active", + "posthog_user"."theme_mode", + "posthog_user"."partial_notification_settings", + "posthog_user"."anonymize_data", + "posthog_user"."toolbar_mode", + "posthog_user"."hedgehog_config", + "posthog_user"."events_column_config", + "posthog_user"."email_opt_in" + FROM "posthog_user" + WHERE "posthog_user"."id" = 2 + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.107 + ''' + SELECT "posthog_team"."id", + "posthog_team"."uuid", + "posthog_team"."organization_id", + "posthog_team"."project_id", + "posthog_team"."api_token", + "posthog_team"."app_urls", + "posthog_team"."name", + "posthog_team"."slack_incoming_webhook", + "posthog_team"."created_at", + "posthog_team"."updated_at", + "posthog_team"."anonymize_ips", + "posthog_team"."completed_snippet_onboarding", + "posthog_team"."has_completed_onboarding_for", + "posthog_team"."ingested_event", + "posthog_team"."autocapture_opt_out", + "posthog_team"."autocapture_web_vitals_opt_in", + "posthog_team"."autocapture_web_vitals_allowed_metrics", + "posthog_team"."autocapture_exceptions_opt_in", + "posthog_team"."autocapture_exceptions_errors_to_ignore", + "posthog_team"."session_recording_opt_in", + "posthog_team"."session_recording_sample_rate", + "posthog_team"."session_recording_minimum_duration_milliseconds", + "posthog_team"."session_recording_linked_flag", + "posthog_team"."session_recording_network_payload_capture_config", + "posthog_team"."session_recording_url_trigger_config", + "posthog_team"."session_replay_config", + "posthog_team"."survey_config", + "posthog_team"."capture_console_log_opt_in", + "posthog_team"."capture_performance_opt_in", + "posthog_team"."surveys_opt_in", + "posthog_team"."heatmaps_opt_in", + "posthog_team"."session_recording_version", + "posthog_team"."signup_token", + "posthog_team"."is_demo", + "posthog_team"."access_control", + "posthog_team"."week_start_day", + "posthog_team"."inject_web_apps", + "posthog_team"."test_account_filters", + "posthog_team"."test_account_filters_default_checked", + "posthog_team"."path_cleaning_filters", + "posthog_team"."timezone", + "posthog_team"."data_attributes", + "posthog_team"."person_display_name_properties", + "posthog_team"."live_events_columns", + "posthog_team"."recording_domains", + "posthog_team"."primary_dashboard_id", + "posthog_team"."extra_settings", + "posthog_team"."modifiers", + "posthog_team"."correlation_config", + "posthog_team"."session_recording_retention_period_days", + "posthog_team"."external_data_workspace_id", + "posthog_team"."external_data_workspace_last_synced_at" + FROM "posthog_team" + WHERE "posthog_team"."id" = 2 + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.108 + ''' + SELECT "posthog_organizationmembership"."id", + "posthog_organizationmembership"."organization_id", + "posthog_organizationmembership"."user_id", + "posthog_organizationmembership"."level", + "posthog_organizationmembership"."joined_at", + "posthog_organizationmembership"."updated_at", + "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organizationmembership" + INNER JOIN "posthog_organization" ON ("posthog_organizationmembership"."organization_id" = "posthog_organization"."id") + WHERE "posthog_organizationmembership"."user_id" = 2 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.109 + ''' + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.11 + ''' + SELECT "posthog_datawarehousejoin"."created_by_id", + "posthog_datawarehousejoin"."created_at", + "posthog_datawarehousejoin"."deleted", + "posthog_datawarehousejoin"."deleted_at", + "posthog_datawarehousejoin"."id", + "posthog_datawarehousejoin"."team_id", + "posthog_datawarehousejoin"."source_table_name", + "posthog_datawarehousejoin"."source_table_key", + "posthog_datawarehousejoin"."joining_table_name", + "posthog_datawarehousejoin"."joining_table_key", + "posthog_datawarehousejoin"."field_name" + FROM "posthog_datawarehousejoin" + WHERE ("posthog_datawarehousejoin"."team_id" = 2 + AND NOT ("posthog_datawarehousejoin"."deleted" + AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.110 + ''' + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.111 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -1656,7 +1927,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.105 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.112 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -1729,7 +2000,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.106 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.113 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -1748,7 +2019,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.107 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.114 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -1760,7 +2031,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.108 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.115 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -1781,7 +2052,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.109 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.116 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -1854,15 +2125,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.11 - ''' - SELECT "posthog_sessionrecordingviewed"."session_id" - FROM "posthog_sessionrecordingviewed" - WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 - AND "posthog_sessionrecordingviewed"."user_id" = 2) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.110 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.117 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -1881,7 +2144,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.111 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.118 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -1913,7 +2176,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.112 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.119 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -1921,7 +2184,15 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.113 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.12 + ''' + SELECT "posthog_sessionrecordingviewed"."session_id" + FROM "posthog_sessionrecordingviewed" + WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 + AND "posthog_sessionrecordingviewed"."user_id" = 2) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.120 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -1949,7 +2220,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.114 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.121 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -2015,7 +2286,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.115 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.122 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -2034,7 +2305,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.116 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.123 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -2053,7 +2324,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.117 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.124 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -2085,7 +2356,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.118 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.125 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -2144,7 +2415,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.119 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.126 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -2176,7 +2447,66 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.12 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.127 + ''' + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.128 + ''' + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.129 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at", + "posthog_datawarehousesavedquery"."table_id" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.13 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -2242,40 +2572,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.120 - ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.121 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at", - "posthog_datawarehousesavedquery"."table_id" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.122 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.130 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -2348,7 +2645,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.123 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.131 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -2367,7 +2664,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.124 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.132 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -2379,7 +2676,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.125 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.133 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -2400,7 +2697,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.126 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.134 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -2473,7 +2770,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.127 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.135 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -2492,7 +2789,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.128 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.136 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -2525,7 +2822,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.129 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.137 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -2533,26 +2830,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.13 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user1' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.130 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.138 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -2581,7 +2859,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.131 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.139 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -2647,7 +2925,26 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.132 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.14 + ''' + SELECT "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user1' + AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.140 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -2666,7 +2963,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.133 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.141 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -2685,7 +2982,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.134 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.142 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -2717,7 +3014,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.135 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.143 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -2776,7 +3073,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.136 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.144 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -2808,7 +3105,33 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.137 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.145 + ''' + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.146 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -2820,7 +3143,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.138 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.147 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -2841,7 +3164,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.139 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.148 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -2914,26 +3237,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.14 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user1' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.140 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.149 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -2952,7 +3256,26 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.141 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.15 + ''' + SELECT "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user1' + AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.150 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -2964,7 +3287,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.142 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.151 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -2985,7 +3308,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.143 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.152 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -3058,7 +3381,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.144 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.153 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -3077,7 +3400,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.145 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.154 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -3111,7 +3434,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.146 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.155 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -3119,7 +3442,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.147 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.156 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -3149,7 +3472,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.148 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.157 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -3215,7 +3538,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.149 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.158 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -3234,13 +3557,32 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.15 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.159 ''' - SELECT "posthog_user"."id", - "posthog_user"."password", - "posthog_user"."last_login", - "posthog_user"."first_name", - "posthog_user"."last_name", + SELECT "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user9' + AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.16 + ''' + SELECT "posthog_user"."id", + "posthog_user"."password", + "posthog_user"."last_login", + "posthog_user"."first_name", + "posthog_user"."last_name", "posthog_user"."is_staff", "posthog_user"."date_joined", "posthog_user"."uuid", @@ -3266,26 +3608,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.150 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user9' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.151 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.160 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -3317,7 +3640,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.152 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.161 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -3376,7 +3699,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.153 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.162 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -3408,7 +3731,33 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.154 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.163 + ''' + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.164 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -3420,7 +3769,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.155 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.165 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -3441,7 +3790,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.156 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.166 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -3514,7 +3863,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.157 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.167 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -3533,7 +3882,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.158 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.168 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -3545,7 +3894,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.159 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.169 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -3566,7 +3915,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.16 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.17 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -3625,7 +3974,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.160 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.170 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -3698,7 +4047,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.161 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.171 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -3717,7 +4066,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.162 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.172 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -3752,7 +4101,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.163 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.173 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -3760,7 +4109,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.164 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.174 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -3791,7 +4140,7 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.165 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.175 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -3857,7 +4206,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.166 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.176 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -3876,7 +4225,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.167 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.177 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -3895,7 +4244,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.168 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.178 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -3927,7 +4276,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.169 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.179 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -3986,7 +4335,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.17 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.18 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -4018,7 +4367,7 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.170 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.180 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -4050,7 +4399,33 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.171 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.181 + ''' + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.182 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -4062,7 +4437,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.172 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.183 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -4083,7 +4458,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.173 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.184 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -4156,7 +4531,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.174 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.185 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -4175,7 +4550,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.175 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.186 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -4187,7 +4562,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.176 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.187 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -4208,7 +4583,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.177 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.188 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -4281,7 +4656,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.178 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.189 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -4300,7 +4675,33 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.179 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.19 + ''' + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.190 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -4336,19 +4737,7 @@ AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.18 - ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.180 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.191 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -4356,7 +4745,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.181 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.192 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -4388,44 +4777,116 @@ AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.182 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.193 ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 + SELECT "posthog_sessionrecordingviewed"."session_id" + FROM "posthog_sessionrecordingviewed" + WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 + AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.183 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.194 ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at", - "posthog_datawarehousesavedquery"."table_id" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + SELECT "posthog_persondistinctid"."id", + "posthog_persondistinctid"."team_id", + "posthog_persondistinctid"."person_id", + "posthog_persondistinctid"."distinct_id", + "posthog_persondistinctid"."version", + "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_persondistinctid" + INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") + WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', + 'user10', + 'user2', + 'user3', + 'user4', + 'user5', + 'user6', + 'user7', + 'user8', + 'user9') + AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.184 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.2 ''' - SELECT "posthog_datawarehousetable"."created_by_id", - "posthog_datawarehousetable"."created_at", - "posthog_datawarehousetable"."updated_at", + SELECT "posthog_organizationmembership"."id", + "posthog_organizationmembership"."organization_id", + "posthog_organizationmembership"."user_id", + "posthog_organizationmembership"."level", + "posthog_organizationmembership"."joined_at", + "posthog_organizationmembership"."updated_at", + "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organizationmembership" + INNER JOIN "posthog_organization" ON ("posthog_organizationmembership"."organization_id" = "posthog_organization"."id") + WHERE "posthog_organizationmembership"."user_id" = 2 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.20 + ''' + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.21 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at", + "posthog_datawarehousesavedquery"."table_id" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.22 + ''' + SELECT "posthog_datawarehousetable"."created_by_id", + "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."deleted_at", "posthog_datawarehousetable"."id", @@ -4494,7 +4955,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.185 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.23 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -4513,7 +4974,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.186 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.24 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -4525,7 +4986,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.187 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.25 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -4546,7 +5007,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.188 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.26 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -4619,7 +5080,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.189 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.27 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -4638,28 +5099,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.19 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at", - "posthog_datawarehousesavedquery"."table_id" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.190 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.28 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -4682,20 +5122,11 @@ "posthog_sessionrecording"."start_url", "posthog_sessionrecording"."storage_version" FROM "posthog_sessionrecording" - WHERE ("posthog_sessionrecording"."session_id" IN ('1', - '10', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9') + WHERE ("posthog_sessionrecording"."session_id" IN ('1') AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.191 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.29 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -4703,7 +5134,33 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.192 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.3 + ''' + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.30 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -4722,35 +5179,79 @@ "posthog_person"."version" FROM "posthog_persondistinctid" INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") - WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', - 'user10', - 'user2', - 'user3', - 'user4', - 'user5', - 'user6', - 'user7', - 'user8', - 'user9') + WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1') AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.193 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.31 ''' - SELECT "posthog_sessionrecordingviewed"."session_id" - FROM "posthog_sessionrecordingviewed" - WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 - AND "posthog_sessionrecordingviewed"."user_id" = 2) + SELECT "posthog_team"."id", + "posthog_team"."uuid", + "posthog_team"."organization_id", + "posthog_team"."project_id", + "posthog_team"."api_token", + "posthog_team"."app_urls", + "posthog_team"."name", + "posthog_team"."slack_incoming_webhook", + "posthog_team"."created_at", + "posthog_team"."updated_at", + "posthog_team"."anonymize_ips", + "posthog_team"."completed_snippet_onboarding", + "posthog_team"."has_completed_onboarding_for", + "posthog_team"."ingested_event", + "posthog_team"."autocapture_opt_out", + "posthog_team"."autocapture_web_vitals_opt_in", + "posthog_team"."autocapture_web_vitals_allowed_metrics", + "posthog_team"."autocapture_exceptions_opt_in", + "posthog_team"."autocapture_exceptions_errors_to_ignore", + "posthog_team"."session_recording_opt_in", + "posthog_team"."session_recording_sample_rate", + "posthog_team"."session_recording_minimum_duration_milliseconds", + "posthog_team"."session_recording_linked_flag", + "posthog_team"."session_recording_network_payload_capture_config", + "posthog_team"."session_recording_url_trigger_config", + "posthog_team"."session_replay_config", + "posthog_team"."survey_config", + "posthog_team"."capture_console_log_opt_in", + "posthog_team"."capture_performance_opt_in", + "posthog_team"."surveys_opt_in", + "posthog_team"."heatmaps_opt_in", + "posthog_team"."session_recording_version", + "posthog_team"."signup_token", + "posthog_team"."is_demo", + "posthog_team"."access_control", + "posthog_team"."week_start_day", + "posthog_team"."inject_web_apps", + "posthog_team"."test_account_filters", + "posthog_team"."test_account_filters_default_checked", + "posthog_team"."path_cleaning_filters", + "posthog_team"."timezone", + "posthog_team"."data_attributes", + "posthog_team"."person_display_name_properties", + "posthog_team"."live_events_columns", + "posthog_team"."recording_domains", + "posthog_team"."primary_dashboard_id", + "posthog_team"."extra_settings", + "posthog_team"."modifiers", + "posthog_team"."correlation_config", + "posthog_team"."session_recording_retention_period_days", + "posthog_team"."plugins_opt_in", + "posthog_team"."opt_out_capture", + "posthog_team"."event_names", + "posthog_team"."event_names_with_usage", + "posthog_team"."event_properties", + "posthog_team"."event_properties_with_usage", + "posthog_team"."event_properties_numerical", + "posthog_team"."external_data_workspace_id", + "posthog_team"."external_data_workspace_last_synced_at" + FROM "posthog_team" + WHERE "posthog_team"."id" = 2 + LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.194 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.32 ''' - SELECT "posthog_persondistinctid"."id", - "posthog_persondistinctid"."team_id", - "posthog_persondistinctid"."person_id", - "posthog_persondistinctid"."distinct_id", - "posthog_persondistinctid"."version", - "posthog_person"."id", + SELECT "posthog_person"."id", "posthog_person"."created_at", "posthog_person"."properties_last_updated_at", "posthog_person"."properties_last_operation", @@ -4760,34 +5261,136 @@ "posthog_person"."is_identified", "posthog_person"."uuid", "posthog_person"."version" - FROM "posthog_persondistinctid" - INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") - WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', - 'user10', - 'user2', - 'user3', - 'user4', - 'user5', - 'user6', - 'user7', - 'user8', - 'user9') + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user2' AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.2 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.33 ''' - SELECT "posthog_organizationmembership"."id", - "posthog_organizationmembership"."organization_id", - "posthog_organizationmembership"."user_id", - "posthog_organizationmembership"."level", - "posthog_organizationmembership"."joined_at", - "posthog_organizationmembership"."updated_at", - "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", + SELECT "posthog_person"."id", + "posthog_person"."created_at", + "posthog_person"."properties_last_updated_at", + "posthog_person"."properties_last_operation", + "posthog_person"."team_id", + "posthog_person"."properties", + "posthog_person"."is_user_id", + "posthog_person"."is_identified", + "posthog_person"."uuid", + "posthog_person"."version" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = 'user2' + AND "posthog_persondistinctid"."team_id" = 2) + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.34 + ''' + SELECT "posthog_user"."id", + "posthog_user"."password", + "posthog_user"."last_login", + "posthog_user"."first_name", + "posthog_user"."last_name", + "posthog_user"."is_staff", + "posthog_user"."date_joined", + "posthog_user"."uuid", + "posthog_user"."current_organization_id", + "posthog_user"."current_team_id", + "posthog_user"."email", + "posthog_user"."pending_email", + "posthog_user"."temporary_token", + "posthog_user"."distinct_id", + "posthog_user"."is_email_verified", + "posthog_user"."has_seen_product_intro_for", + "posthog_user"."strapi_id", + "posthog_user"."is_active", + "posthog_user"."theme_mode", + "posthog_user"."partial_notification_settings", + "posthog_user"."anonymize_data", + "posthog_user"."toolbar_mode", + "posthog_user"."hedgehog_config", + "posthog_user"."events_column_config", + "posthog_user"."email_opt_in" + FROM "posthog_user" + WHERE "posthog_user"."id" = 2 + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.35 + ''' + SELECT "posthog_team"."id", + "posthog_team"."uuid", + "posthog_team"."organization_id", + "posthog_team"."project_id", + "posthog_team"."api_token", + "posthog_team"."app_urls", + "posthog_team"."name", + "posthog_team"."slack_incoming_webhook", + "posthog_team"."created_at", + "posthog_team"."updated_at", + "posthog_team"."anonymize_ips", + "posthog_team"."completed_snippet_onboarding", + "posthog_team"."has_completed_onboarding_for", + "posthog_team"."ingested_event", + "posthog_team"."autocapture_opt_out", + "posthog_team"."autocapture_web_vitals_opt_in", + "posthog_team"."autocapture_web_vitals_allowed_metrics", + "posthog_team"."autocapture_exceptions_opt_in", + "posthog_team"."autocapture_exceptions_errors_to_ignore", + "posthog_team"."session_recording_opt_in", + "posthog_team"."session_recording_sample_rate", + "posthog_team"."session_recording_minimum_duration_milliseconds", + "posthog_team"."session_recording_linked_flag", + "posthog_team"."session_recording_network_payload_capture_config", + "posthog_team"."session_recording_url_trigger_config", + "posthog_team"."session_replay_config", + "posthog_team"."survey_config", + "posthog_team"."capture_console_log_opt_in", + "posthog_team"."capture_performance_opt_in", + "posthog_team"."surveys_opt_in", + "posthog_team"."heatmaps_opt_in", + "posthog_team"."session_recording_version", + "posthog_team"."signup_token", + "posthog_team"."is_demo", + "posthog_team"."access_control", + "posthog_team"."week_start_day", + "posthog_team"."inject_web_apps", + "posthog_team"."test_account_filters", + "posthog_team"."test_account_filters_default_checked", + "posthog_team"."path_cleaning_filters", + "posthog_team"."timezone", + "posthog_team"."data_attributes", + "posthog_team"."person_display_name_properties", + "posthog_team"."live_events_columns", + "posthog_team"."recording_domains", + "posthog_team"."primary_dashboard_id", + "posthog_team"."extra_settings", + "posthog_team"."modifiers", + "posthog_team"."correlation_config", + "posthog_team"."session_recording_retention_period_days", + "posthog_team"."external_data_workspace_id", + "posthog_team"."external_data_workspace_last_synced_at" + FROM "posthog_team" + WHERE "posthog_team"."id" = 2 + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.36 + ''' + SELECT "posthog_organizationmembership"."id", + "posthog_organizationmembership"."organization_id", + "posthog_organizationmembership"."user_id", + "posthog_organizationmembership"."level", + "posthog_organizationmembership"."joined_at", + "posthog_organizationmembership"."updated_at", + "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", "posthog_organization"."updated_at", "posthog_organization"."plugins_access_level", "posthog_organization"."for_internal_metrics", @@ -4807,7 +5410,78 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.20 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.37 + ''' + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.38 + ''' + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.39 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at", + "posthog_datawarehousesavedquery"."table_id" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.4 + ''' + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.40 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -4880,7 +5554,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.21 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.41 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -4899,7 +5573,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.22 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.42 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -4911,7 +5585,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.23 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.43 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -4932,7 +5606,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.24 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.44 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -5005,7 +5679,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.25 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.45 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -5024,7 +5698,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.26 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.46 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -5047,11 +5721,12 @@ "posthog_sessionrecording"."start_url", "posthog_sessionrecording"."storage_version" FROM "posthog_sessionrecording" - WHERE ("posthog_sessionrecording"."session_id" IN ('1') + WHERE ("posthog_sessionrecording"."session_id" IN ('1', + '2') AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.27 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.47 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -5059,7 +5734,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.28 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.48 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -5078,11 +5753,12 @@ "posthog_person"."version" FROM "posthog_persondistinctid" INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") - WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1') + WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', + 'user2') AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.29 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.49 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -5148,19 +5824,28 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.3 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.5 ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at", + "posthog_datawarehousesavedquery"."table_id" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.30 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.50 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -5174,12 +5859,12 @@ "posthog_person"."version" FROM "posthog_person" INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user2' + WHERE ("posthog_persondistinctid"."distinct_id" = 'user3' AND "posthog_persondistinctid"."team_id" = 2) LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.31 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.51 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -5193,12 +5878,12 @@ "posthog_person"."version" FROM "posthog_person" INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user2' + WHERE ("posthog_persondistinctid"."distinct_id" = 'user3' AND "posthog_persondistinctid"."team_id" = 2) LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.32 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.52 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -5230,7 +5915,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.33 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.53 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -5289,7 +5974,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.34 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.54 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -5321,7 +6006,33 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.35 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.55 + ''' + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.56 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -5333,7 +6044,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.36 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.57 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -5354,7 +6065,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.37 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.58 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -5427,7 +6138,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.38 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.59 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -5446,7 +6157,80 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.39 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.6 + ''' + SELECT "posthog_datawarehousetable"."created_by_id", + "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", + "posthog_datawarehousetable"."deleted", + "posthog_datawarehousetable"."deleted_at", + "posthog_datawarehousetable"."id", + "posthog_datawarehousetable"."name", + "posthog_datawarehousetable"."format", + "posthog_datawarehousetable"."team_id", + "posthog_datawarehousetable"."url_pattern", + "posthog_datawarehousetable"."credential_id", + "posthog_datawarehousetable"."external_data_source_id", + "posthog_datawarehousetable"."columns", + "posthog_datawarehousetable"."row_count", + "posthog_user"."id", + "posthog_user"."password", + "posthog_user"."last_login", + "posthog_user"."first_name", + "posthog_user"."last_name", + "posthog_user"."is_staff", + "posthog_user"."date_joined", + "posthog_user"."uuid", + "posthog_user"."current_organization_id", + "posthog_user"."current_team_id", + "posthog_user"."email", + "posthog_user"."pending_email", + "posthog_user"."temporary_token", + "posthog_user"."distinct_id", + "posthog_user"."is_email_verified", + "posthog_user"."requested_password_reset_at", + "posthog_user"."has_seen_product_intro_for", + "posthog_user"."strapi_id", + "posthog_user"."is_active", + "posthog_user"."theme_mode", + "posthog_user"."partial_notification_settings", + "posthog_user"."anonymize_data", + "posthog_user"."toolbar_mode", + "posthog_user"."hedgehog_config", + "posthog_user"."events_column_config", + "posthog_user"."email_opt_in", + "posthog_datawarehousecredential"."created_by_id", + "posthog_datawarehousecredential"."created_at", + "posthog_datawarehousecredential"."id", + "posthog_datawarehousecredential"."access_key", + "posthog_datawarehousecredential"."access_secret", + "posthog_datawarehousecredential"."team_id", + "posthog_externaldatasource"."created_by_id", + "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", + "posthog_externaldatasource"."deleted", + "posthog_externaldatasource"."deleted_at", + "posthog_externaldatasource"."id", + "posthog_externaldatasource"."source_id", + "posthog_externaldatasource"."connection_id", + "posthog_externaldatasource"."destination_id", + "posthog_externaldatasource"."team_id", + "posthog_externaldatasource"."sync_frequency", + "posthog_externaldatasource"."status", + "posthog_externaldatasource"."source_type", + "posthog_externaldatasource"."job_inputs", + "posthog_externaldatasource"."are_tables_created", + "posthog_externaldatasource"."prefix" + FROM "posthog_datawarehousetable" + LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") + LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") + LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") + WHERE ("posthog_datawarehousetable"."team_id" = 2 + AND NOT ("posthog_datawarehousetable"."deleted" + AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.60 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -5458,28 +6242,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.4 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at", - "posthog_datawarehousesavedquery"."table_id" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.40 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.61 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -5500,7 +6263,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.41 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.62 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -5573,7 +6336,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.42 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.63 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -5592,7 +6355,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.43 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.64 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -5616,11 +6379,12 @@ "posthog_sessionrecording"."storage_version" FROM "posthog_sessionrecording" WHERE ("posthog_sessionrecording"."session_id" IN ('1', - '2') + '2', + '3') AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.44 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.65 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -5628,7 +6392,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.45 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.66 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -5648,11 +6412,12 @@ FROM "posthog_persondistinctid" INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', - 'user2') + 'user2', + 'user3') AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.46 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.67 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -5718,7 +6483,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.47 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.68 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -5732,12 +6497,12 @@ "posthog_person"."version" FROM "posthog_person" INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user3' + WHERE ("posthog_persondistinctid"."distinct_id" = 'user4' AND "posthog_persondistinctid"."team_id" = 2) LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.48 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.69 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -5751,12 +6516,31 @@ "posthog_person"."version" FROM "posthog_person" INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user3' + WHERE ("posthog_persondistinctid"."distinct_id" = 'user4' AND "posthog_persondistinctid"."team_id" = 2) LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.49 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.7 + ''' + SELECT "posthog_datawarehousejoin"."created_by_id", + "posthog_datawarehousejoin"."created_at", + "posthog_datawarehousejoin"."deleted", + "posthog_datawarehousejoin"."deleted_at", + "posthog_datawarehousejoin"."id", + "posthog_datawarehousejoin"."team_id", + "posthog_datawarehousejoin"."source_table_name", + "posthog_datawarehousejoin"."source_table_key", + "posthog_datawarehousejoin"."joining_table_name", + "posthog_datawarehousejoin"."joining_table_key", + "posthog_datawarehousejoin"."field_name" + FROM "posthog_datawarehousejoin" + WHERE ("posthog_datawarehousejoin"."team_id" = 2 + AND NOT ("posthog_datawarehousejoin"."deleted" + AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.70 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -5788,80 +6572,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.5 - ''' - SELECT "posthog_datawarehousetable"."created_by_id", - "posthog_datawarehousetable"."created_at", - "posthog_datawarehousetable"."updated_at", - "posthog_datawarehousetable"."deleted", - "posthog_datawarehousetable"."deleted_at", - "posthog_datawarehousetable"."id", - "posthog_datawarehousetable"."name", - "posthog_datawarehousetable"."format", - "posthog_datawarehousetable"."team_id", - "posthog_datawarehousetable"."url_pattern", - "posthog_datawarehousetable"."credential_id", - "posthog_datawarehousetable"."external_data_source_id", - "posthog_datawarehousetable"."columns", - "posthog_datawarehousetable"."row_count", - "posthog_user"."id", - "posthog_user"."password", - "posthog_user"."last_login", - "posthog_user"."first_name", - "posthog_user"."last_name", - "posthog_user"."is_staff", - "posthog_user"."date_joined", - "posthog_user"."uuid", - "posthog_user"."current_organization_id", - "posthog_user"."current_team_id", - "posthog_user"."email", - "posthog_user"."pending_email", - "posthog_user"."temporary_token", - "posthog_user"."distinct_id", - "posthog_user"."is_email_verified", - "posthog_user"."requested_password_reset_at", - "posthog_user"."has_seen_product_intro_for", - "posthog_user"."strapi_id", - "posthog_user"."is_active", - "posthog_user"."theme_mode", - "posthog_user"."partial_notification_settings", - "posthog_user"."anonymize_data", - "posthog_user"."toolbar_mode", - "posthog_user"."hedgehog_config", - "posthog_user"."events_column_config", - "posthog_user"."email_opt_in", - "posthog_datawarehousecredential"."created_by_id", - "posthog_datawarehousecredential"."created_at", - "posthog_datawarehousecredential"."id", - "posthog_datawarehousecredential"."access_key", - "posthog_datawarehousecredential"."access_secret", - "posthog_datawarehousecredential"."team_id", - "posthog_externaldatasource"."created_by_id", - "posthog_externaldatasource"."created_at", - "posthog_externaldatasource"."updated_at", - "posthog_externaldatasource"."deleted", - "posthog_externaldatasource"."deleted_at", - "posthog_externaldatasource"."id", - "posthog_externaldatasource"."source_id", - "posthog_externaldatasource"."connection_id", - "posthog_externaldatasource"."destination_id", - "posthog_externaldatasource"."team_id", - "posthog_externaldatasource"."sync_frequency", - "posthog_externaldatasource"."status", - "posthog_externaldatasource"."source_type", - "posthog_externaldatasource"."job_inputs", - "posthog_externaldatasource"."are_tables_created", - "posthog_externaldatasource"."prefix" - FROM "posthog_datawarehousetable" - LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") - LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") - LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") - WHERE ("posthog_datawarehousetable"."team_id" = 2 - AND NOT ("posthog_datawarehousetable"."deleted" - AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.50 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.71 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -5920,7 +6631,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.51 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.72 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -5952,9 +6663,35 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.52 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.73 ''' - SELECT "posthog_grouptypemapping"."id", + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.74 + ''' + SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", "posthog_grouptypemapping"."group_type", "posthog_grouptypemapping"."group_type_index", @@ -5964,7 +6701,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.53 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.75 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -5985,7 +6722,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.54 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.76 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -6058,7 +6795,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.55 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.77 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -6077,7 +6814,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.56 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.78 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -6089,7 +6826,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.57 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.79 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -6110,7 +6847,19 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.58 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.8 + ''' + SELECT "posthog_grouptypemapping"."id", + "posthog_grouptypemapping"."team_id", + "posthog_grouptypemapping"."group_type", + "posthog_grouptypemapping"."group_type_index", + "posthog_grouptypemapping"."name_singular", + "posthog_grouptypemapping"."name_plural" + FROM "posthog_grouptypemapping" + WHERE "posthog_grouptypemapping"."team_id" = 2 + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.80 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -6183,26 +6932,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.59 - ''' - SELECT "posthog_datawarehousejoin"."created_by_id", - "posthog_datawarehousejoin"."created_at", - "posthog_datawarehousejoin"."deleted", - "posthog_datawarehousejoin"."deleted_at", - "posthog_datawarehousejoin"."id", - "posthog_datawarehousejoin"."team_id", - "posthog_datawarehousejoin"."source_table_name", - "posthog_datawarehousejoin"."source_table_key", - "posthog_datawarehousejoin"."joining_table_name", - "posthog_datawarehousejoin"."joining_table_key", - "posthog_datawarehousejoin"."field_name" - FROM "posthog_datawarehousejoin" - WHERE ("posthog_datawarehousejoin"."team_id" = 2 - AND NOT ("posthog_datawarehousejoin"."deleted" - AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.6 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.81 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -6221,7 +6951,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.60 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.82 ''' SELECT "posthog_sessionrecording"."id", "posthog_sessionrecording"."session_id", @@ -6246,11 +6976,12 @@ FROM "posthog_sessionrecording" WHERE ("posthog_sessionrecording"."session_id" IN ('1', '2', - '3') + '3', + '4') AND "posthog_sessionrecording"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.61 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.83 ''' SELECT "posthog_sessionrecordingviewed"."session_id" FROM "posthog_sessionrecordingviewed" @@ -6258,7 +6989,7 @@ AND "posthog_sessionrecordingviewed"."user_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.62 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.84 ''' SELECT "posthog_persondistinctid"."id", "posthog_persondistinctid"."team_id", @@ -6279,11 +7010,12 @@ INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', 'user2', - 'user3') + 'user3', + 'user4') AND "posthog_persondistinctid"."team_id" = 2) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.63 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.85 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -6349,7 +7081,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.64 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.86 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -6363,12 +7095,12 @@ "posthog_person"."version" FROM "posthog_person" INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user4' + WHERE ("posthog_persondistinctid"."distinct_id" = 'user5' AND "posthog_persondistinctid"."team_id" = 2) LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.65 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.87 ''' SELECT "posthog_person"."id", "posthog_person"."created_at", @@ -6382,12 +7114,12 @@ "posthog_person"."version" FROM "posthog_person" INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user4' + WHERE ("posthog_persondistinctid"."distinct_id" = 'user5' AND "posthog_persondistinctid"."team_id" = 2) LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.66 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.88 ''' SELECT "posthog_user"."id", "posthog_user"."password", @@ -6419,7 +7151,7 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.67 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.89 ''' SELECT "posthog_team"."id", "posthog_team"."uuid", @@ -6478,7 +7210,28 @@ LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.68 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.9 + ''' + SELECT "posthog_datawarehousesavedquery"."created_by_id", + "posthog_datawarehousesavedquery"."created_at", + "posthog_datawarehousesavedquery"."deleted", + "posthog_datawarehousesavedquery"."deleted_at", + "posthog_datawarehousesavedquery"."id", + "posthog_datawarehousesavedquery"."name", + "posthog_datawarehousesavedquery"."team_id", + "posthog_datawarehousesavedquery"."columns", + "posthog_datawarehousesavedquery"."external_tables", + "posthog_datawarehousesavedquery"."query", + "posthog_datawarehousesavedquery"."status", + "posthog_datawarehousesavedquery"."last_run_at", + "posthog_datawarehousesavedquery"."table_id" + FROM "posthog_datawarehousesavedquery" + WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 + AND NOT ("posthog_datawarehousesavedquery"."deleted" + AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) + ''' +# --- +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.90 ''' SELECT "posthog_organizationmembership"."id", "posthog_organizationmembership"."organization_id", @@ -6510,19 +7263,33 @@ WHERE "posthog_organizationmembership"."user_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.69 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.91 ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 + SELECT "posthog_organization"."id", + "posthog_organization"."name", + "posthog_organization"."slug", + "posthog_organization"."logo_media_id", + "posthog_organization"."created_at", + "posthog_organization"."updated_at", + "posthog_organization"."plugins_access_level", + "posthog_organization"."for_internal_metrics", + "posthog_organization"."is_member_join_email_enabled", + "posthog_organization"."enforce_2fa", + "posthog_organization"."is_hipaa", + "posthog_organization"."customer_id", + "posthog_organization"."available_product_features", + "posthog_organization"."usage", + "posthog_organization"."never_drop_data", + "posthog_organization"."customer_trust_scores", + "posthog_organization"."setup_section_2_completed", + "posthog_organization"."personalization", + "posthog_organization"."domain_whitelist" + FROM "posthog_organization" + WHERE "posthog_organization"."id" = '00000000-0000-0000-0000-000000000000'::uuid + LIMIT 21 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.7 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.92 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -6534,7 +7301,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.70 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.93 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -6555,7 +7322,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.71 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.94 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -6628,7 +7395,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.72 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.95 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -6647,7 +7414,7 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.73 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.96 ''' SELECT "posthog_grouptypemapping"."id", "posthog_grouptypemapping"."team_id", @@ -6659,7 +7426,7 @@ WHERE "posthog_grouptypemapping"."team_id" = 2 ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.74 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.97 ''' SELECT "posthog_datawarehousesavedquery"."created_by_id", "posthog_datawarehousesavedquery"."created_at", @@ -6680,7 +7447,7 @@ AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.75 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.98 ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", @@ -6753,7 +7520,7 @@ AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.76 +# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.99 ''' SELECT "posthog_datawarehousejoin"."created_by_id", "posthog_datawarehousejoin"."created_at", @@ -6772,808 +7539,3 @@ AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) ''' # --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.77 - ''' - SELECT "posthog_sessionrecording"."id", - "posthog_sessionrecording"."session_id", - "posthog_sessionrecording"."team_id", - "posthog_sessionrecording"."created_at", - "posthog_sessionrecording"."deleted", - "posthog_sessionrecording"."object_storage_path", - "posthog_sessionrecording"."distinct_id", - "posthog_sessionrecording"."duration", - "posthog_sessionrecording"."active_seconds", - "posthog_sessionrecording"."inactive_seconds", - "posthog_sessionrecording"."start_time", - "posthog_sessionrecording"."end_time", - "posthog_sessionrecording"."click_count", - "posthog_sessionrecording"."keypress_count", - "posthog_sessionrecording"."mouse_activity_count", - "posthog_sessionrecording"."console_log_count", - "posthog_sessionrecording"."console_warn_count", - "posthog_sessionrecording"."console_error_count", - "posthog_sessionrecording"."start_url", - "posthog_sessionrecording"."storage_version" - FROM "posthog_sessionrecording" - WHERE ("posthog_sessionrecording"."session_id" IN ('1', - '2', - '3', - '4') - AND "posthog_sessionrecording"."team_id" = 2) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.78 - ''' - SELECT "posthog_sessionrecordingviewed"."session_id" - FROM "posthog_sessionrecordingviewed" - WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 - AND "posthog_sessionrecordingviewed"."user_id" = 2) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.79 - ''' - SELECT "posthog_persondistinctid"."id", - "posthog_persondistinctid"."team_id", - "posthog_persondistinctid"."person_id", - "posthog_persondistinctid"."distinct_id", - "posthog_persondistinctid"."version", - "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_persondistinctid" - INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") - WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', - 'user2', - 'user3', - 'user4') - AND "posthog_persondistinctid"."team_id" = 2) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.8 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at", - "posthog_datawarehousesavedquery"."table_id" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.80 - ''' - SELECT "posthog_team"."id", - "posthog_team"."uuid", - "posthog_team"."organization_id", - "posthog_team"."project_id", - "posthog_team"."api_token", - "posthog_team"."app_urls", - "posthog_team"."name", - "posthog_team"."slack_incoming_webhook", - "posthog_team"."created_at", - "posthog_team"."updated_at", - "posthog_team"."anonymize_ips", - "posthog_team"."completed_snippet_onboarding", - "posthog_team"."has_completed_onboarding_for", - "posthog_team"."ingested_event", - "posthog_team"."autocapture_opt_out", - "posthog_team"."autocapture_web_vitals_opt_in", - "posthog_team"."autocapture_web_vitals_allowed_metrics", - "posthog_team"."autocapture_exceptions_opt_in", - "posthog_team"."autocapture_exceptions_errors_to_ignore", - "posthog_team"."session_recording_opt_in", - "posthog_team"."session_recording_sample_rate", - "posthog_team"."session_recording_minimum_duration_milliseconds", - "posthog_team"."session_recording_linked_flag", - "posthog_team"."session_recording_network_payload_capture_config", - "posthog_team"."session_recording_url_trigger_config", - "posthog_team"."session_replay_config", - "posthog_team"."survey_config", - "posthog_team"."capture_console_log_opt_in", - "posthog_team"."capture_performance_opt_in", - "posthog_team"."surveys_opt_in", - "posthog_team"."heatmaps_opt_in", - "posthog_team"."session_recording_version", - "posthog_team"."signup_token", - "posthog_team"."is_demo", - "posthog_team"."access_control", - "posthog_team"."week_start_day", - "posthog_team"."inject_web_apps", - "posthog_team"."test_account_filters", - "posthog_team"."test_account_filters_default_checked", - "posthog_team"."path_cleaning_filters", - "posthog_team"."timezone", - "posthog_team"."data_attributes", - "posthog_team"."person_display_name_properties", - "posthog_team"."live_events_columns", - "posthog_team"."recording_domains", - "posthog_team"."primary_dashboard_id", - "posthog_team"."extra_settings", - "posthog_team"."modifiers", - "posthog_team"."correlation_config", - "posthog_team"."session_recording_retention_period_days", - "posthog_team"."plugins_opt_in", - "posthog_team"."opt_out_capture", - "posthog_team"."event_names", - "posthog_team"."event_names_with_usage", - "posthog_team"."event_properties", - "posthog_team"."event_properties_with_usage", - "posthog_team"."event_properties_numerical", - "posthog_team"."external_data_workspace_id", - "posthog_team"."external_data_workspace_last_synced_at" - FROM "posthog_team" - WHERE "posthog_team"."id" = 2 - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.81 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user5' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.82 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user5' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.83 - ''' - SELECT "posthog_user"."id", - "posthog_user"."password", - "posthog_user"."last_login", - "posthog_user"."first_name", - "posthog_user"."last_name", - "posthog_user"."is_staff", - "posthog_user"."date_joined", - "posthog_user"."uuid", - "posthog_user"."current_organization_id", - "posthog_user"."current_team_id", - "posthog_user"."email", - "posthog_user"."pending_email", - "posthog_user"."temporary_token", - "posthog_user"."distinct_id", - "posthog_user"."is_email_verified", - "posthog_user"."has_seen_product_intro_for", - "posthog_user"."strapi_id", - "posthog_user"."is_active", - "posthog_user"."theme_mode", - "posthog_user"."partial_notification_settings", - "posthog_user"."anonymize_data", - "posthog_user"."toolbar_mode", - "posthog_user"."hedgehog_config", - "posthog_user"."events_column_config", - "posthog_user"."email_opt_in" - FROM "posthog_user" - WHERE "posthog_user"."id" = 2 - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.84 - ''' - SELECT "posthog_team"."id", - "posthog_team"."uuid", - "posthog_team"."organization_id", - "posthog_team"."project_id", - "posthog_team"."api_token", - "posthog_team"."app_urls", - "posthog_team"."name", - "posthog_team"."slack_incoming_webhook", - "posthog_team"."created_at", - "posthog_team"."updated_at", - "posthog_team"."anonymize_ips", - "posthog_team"."completed_snippet_onboarding", - "posthog_team"."has_completed_onboarding_for", - "posthog_team"."ingested_event", - "posthog_team"."autocapture_opt_out", - "posthog_team"."autocapture_web_vitals_opt_in", - "posthog_team"."autocapture_web_vitals_allowed_metrics", - "posthog_team"."autocapture_exceptions_opt_in", - "posthog_team"."autocapture_exceptions_errors_to_ignore", - "posthog_team"."session_recording_opt_in", - "posthog_team"."session_recording_sample_rate", - "posthog_team"."session_recording_minimum_duration_milliseconds", - "posthog_team"."session_recording_linked_flag", - "posthog_team"."session_recording_network_payload_capture_config", - "posthog_team"."session_recording_url_trigger_config", - "posthog_team"."session_replay_config", - "posthog_team"."survey_config", - "posthog_team"."capture_console_log_opt_in", - "posthog_team"."capture_performance_opt_in", - "posthog_team"."surveys_opt_in", - "posthog_team"."heatmaps_opt_in", - "posthog_team"."session_recording_version", - "posthog_team"."signup_token", - "posthog_team"."is_demo", - "posthog_team"."access_control", - "posthog_team"."week_start_day", - "posthog_team"."inject_web_apps", - "posthog_team"."test_account_filters", - "posthog_team"."test_account_filters_default_checked", - "posthog_team"."path_cleaning_filters", - "posthog_team"."timezone", - "posthog_team"."data_attributes", - "posthog_team"."person_display_name_properties", - "posthog_team"."live_events_columns", - "posthog_team"."recording_domains", - "posthog_team"."primary_dashboard_id", - "posthog_team"."extra_settings", - "posthog_team"."modifiers", - "posthog_team"."correlation_config", - "posthog_team"."session_recording_retention_period_days", - "posthog_team"."external_data_workspace_id", - "posthog_team"."external_data_workspace_last_synced_at" - FROM "posthog_team" - WHERE "posthog_team"."id" = 2 - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.85 - ''' - SELECT "posthog_organizationmembership"."id", - "posthog_organizationmembership"."organization_id", - "posthog_organizationmembership"."user_id", - "posthog_organizationmembership"."level", - "posthog_organizationmembership"."joined_at", - "posthog_organizationmembership"."updated_at", - "posthog_organization"."id", - "posthog_organization"."name", - "posthog_organization"."slug", - "posthog_organization"."logo_media_id", - "posthog_organization"."created_at", - "posthog_organization"."updated_at", - "posthog_organization"."plugins_access_level", - "posthog_organization"."for_internal_metrics", - "posthog_organization"."is_member_join_email_enabled", - "posthog_organization"."enforce_2fa", - "posthog_organization"."is_hipaa", - "posthog_organization"."customer_id", - "posthog_organization"."available_product_features", - "posthog_organization"."usage", - "posthog_organization"."never_drop_data", - "posthog_organization"."customer_trust_scores", - "posthog_organization"."setup_section_2_completed", - "posthog_organization"."personalization", - "posthog_organization"."domain_whitelist" - FROM "posthog_organizationmembership" - INNER JOIN "posthog_organization" ON ("posthog_organizationmembership"."organization_id" = "posthog_organization"."id") - WHERE "posthog_organizationmembership"."user_id" = 2 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.86 - ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.87 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at", - "posthog_datawarehousesavedquery"."table_id" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.88 - ''' - SELECT "posthog_datawarehousetable"."created_by_id", - "posthog_datawarehousetable"."created_at", - "posthog_datawarehousetable"."updated_at", - "posthog_datawarehousetable"."deleted", - "posthog_datawarehousetable"."deleted_at", - "posthog_datawarehousetable"."id", - "posthog_datawarehousetable"."name", - "posthog_datawarehousetable"."format", - "posthog_datawarehousetable"."team_id", - "posthog_datawarehousetable"."url_pattern", - "posthog_datawarehousetable"."credential_id", - "posthog_datawarehousetable"."external_data_source_id", - "posthog_datawarehousetable"."columns", - "posthog_datawarehousetable"."row_count", - "posthog_user"."id", - "posthog_user"."password", - "posthog_user"."last_login", - "posthog_user"."first_name", - "posthog_user"."last_name", - "posthog_user"."is_staff", - "posthog_user"."date_joined", - "posthog_user"."uuid", - "posthog_user"."current_organization_id", - "posthog_user"."current_team_id", - "posthog_user"."email", - "posthog_user"."pending_email", - "posthog_user"."temporary_token", - "posthog_user"."distinct_id", - "posthog_user"."is_email_verified", - "posthog_user"."requested_password_reset_at", - "posthog_user"."has_seen_product_intro_for", - "posthog_user"."strapi_id", - "posthog_user"."is_active", - "posthog_user"."theme_mode", - "posthog_user"."partial_notification_settings", - "posthog_user"."anonymize_data", - "posthog_user"."toolbar_mode", - "posthog_user"."hedgehog_config", - "posthog_user"."events_column_config", - "posthog_user"."email_opt_in", - "posthog_datawarehousecredential"."created_by_id", - "posthog_datawarehousecredential"."created_at", - "posthog_datawarehousecredential"."id", - "posthog_datawarehousecredential"."access_key", - "posthog_datawarehousecredential"."access_secret", - "posthog_datawarehousecredential"."team_id", - "posthog_externaldatasource"."created_by_id", - "posthog_externaldatasource"."created_at", - "posthog_externaldatasource"."updated_at", - "posthog_externaldatasource"."deleted", - "posthog_externaldatasource"."deleted_at", - "posthog_externaldatasource"."id", - "posthog_externaldatasource"."source_id", - "posthog_externaldatasource"."connection_id", - "posthog_externaldatasource"."destination_id", - "posthog_externaldatasource"."team_id", - "posthog_externaldatasource"."sync_frequency", - "posthog_externaldatasource"."status", - "posthog_externaldatasource"."source_type", - "posthog_externaldatasource"."job_inputs", - "posthog_externaldatasource"."are_tables_created", - "posthog_externaldatasource"."prefix" - FROM "posthog_datawarehousetable" - LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") - LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") - LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") - WHERE ("posthog_datawarehousetable"."team_id" = 2 - AND NOT ("posthog_datawarehousetable"."deleted" - AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.89 - ''' - SELECT "posthog_datawarehousejoin"."created_by_id", - "posthog_datawarehousejoin"."created_at", - "posthog_datawarehousejoin"."deleted", - "posthog_datawarehousejoin"."deleted_at", - "posthog_datawarehousejoin"."id", - "posthog_datawarehousejoin"."team_id", - "posthog_datawarehousejoin"."source_table_name", - "posthog_datawarehousejoin"."source_table_key", - "posthog_datawarehousejoin"."joining_table_name", - "posthog_datawarehousejoin"."joining_table_key", - "posthog_datawarehousejoin"."field_name" - FROM "posthog_datawarehousejoin" - WHERE ("posthog_datawarehousejoin"."team_id" = 2 - AND NOT ("posthog_datawarehousejoin"."deleted" - AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.9 - ''' - SELECT "posthog_datawarehousetable"."created_by_id", - "posthog_datawarehousetable"."created_at", - "posthog_datawarehousetable"."updated_at", - "posthog_datawarehousetable"."deleted", - "posthog_datawarehousetable"."deleted_at", - "posthog_datawarehousetable"."id", - "posthog_datawarehousetable"."name", - "posthog_datawarehousetable"."format", - "posthog_datawarehousetable"."team_id", - "posthog_datawarehousetable"."url_pattern", - "posthog_datawarehousetable"."credential_id", - "posthog_datawarehousetable"."external_data_source_id", - "posthog_datawarehousetable"."columns", - "posthog_datawarehousetable"."row_count", - "posthog_user"."id", - "posthog_user"."password", - "posthog_user"."last_login", - "posthog_user"."first_name", - "posthog_user"."last_name", - "posthog_user"."is_staff", - "posthog_user"."date_joined", - "posthog_user"."uuid", - "posthog_user"."current_organization_id", - "posthog_user"."current_team_id", - "posthog_user"."email", - "posthog_user"."pending_email", - "posthog_user"."temporary_token", - "posthog_user"."distinct_id", - "posthog_user"."is_email_verified", - "posthog_user"."requested_password_reset_at", - "posthog_user"."has_seen_product_intro_for", - "posthog_user"."strapi_id", - "posthog_user"."is_active", - "posthog_user"."theme_mode", - "posthog_user"."partial_notification_settings", - "posthog_user"."anonymize_data", - "posthog_user"."toolbar_mode", - "posthog_user"."hedgehog_config", - "posthog_user"."events_column_config", - "posthog_user"."email_opt_in", - "posthog_datawarehousecredential"."created_by_id", - "posthog_datawarehousecredential"."created_at", - "posthog_datawarehousecredential"."id", - "posthog_datawarehousecredential"."access_key", - "posthog_datawarehousecredential"."access_secret", - "posthog_datawarehousecredential"."team_id", - "posthog_externaldatasource"."created_by_id", - "posthog_externaldatasource"."created_at", - "posthog_externaldatasource"."updated_at", - "posthog_externaldatasource"."deleted", - "posthog_externaldatasource"."deleted_at", - "posthog_externaldatasource"."id", - "posthog_externaldatasource"."source_id", - "posthog_externaldatasource"."connection_id", - "posthog_externaldatasource"."destination_id", - "posthog_externaldatasource"."team_id", - "posthog_externaldatasource"."sync_frequency", - "posthog_externaldatasource"."status", - "posthog_externaldatasource"."source_type", - "posthog_externaldatasource"."job_inputs", - "posthog_externaldatasource"."are_tables_created", - "posthog_externaldatasource"."prefix" - FROM "posthog_datawarehousetable" - LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") - LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") - LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") - WHERE ("posthog_datawarehousetable"."team_id" = 2 - AND NOT ("posthog_datawarehousetable"."deleted" - AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.90 - ''' - SELECT "posthog_grouptypemapping"."id", - "posthog_grouptypemapping"."team_id", - "posthog_grouptypemapping"."group_type", - "posthog_grouptypemapping"."group_type_index", - "posthog_grouptypemapping"."name_singular", - "posthog_grouptypemapping"."name_plural" - FROM "posthog_grouptypemapping" - WHERE "posthog_grouptypemapping"."team_id" = 2 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.91 - ''' - SELECT "posthog_datawarehousesavedquery"."created_by_id", - "posthog_datawarehousesavedquery"."created_at", - "posthog_datawarehousesavedquery"."deleted", - "posthog_datawarehousesavedquery"."deleted_at", - "posthog_datawarehousesavedquery"."id", - "posthog_datawarehousesavedquery"."name", - "posthog_datawarehousesavedquery"."team_id", - "posthog_datawarehousesavedquery"."columns", - "posthog_datawarehousesavedquery"."external_tables", - "posthog_datawarehousesavedquery"."query", - "posthog_datawarehousesavedquery"."status", - "posthog_datawarehousesavedquery"."last_run_at", - "posthog_datawarehousesavedquery"."table_id" - FROM "posthog_datawarehousesavedquery" - WHERE ("posthog_datawarehousesavedquery"."team_id" = 2 - AND NOT ("posthog_datawarehousesavedquery"."deleted" - AND "posthog_datawarehousesavedquery"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.92 - ''' - SELECT "posthog_datawarehousetable"."created_by_id", - "posthog_datawarehousetable"."created_at", - "posthog_datawarehousetable"."updated_at", - "posthog_datawarehousetable"."deleted", - "posthog_datawarehousetable"."deleted_at", - "posthog_datawarehousetable"."id", - "posthog_datawarehousetable"."name", - "posthog_datawarehousetable"."format", - "posthog_datawarehousetable"."team_id", - "posthog_datawarehousetable"."url_pattern", - "posthog_datawarehousetable"."credential_id", - "posthog_datawarehousetable"."external_data_source_id", - "posthog_datawarehousetable"."columns", - "posthog_datawarehousetable"."row_count", - "posthog_user"."id", - "posthog_user"."password", - "posthog_user"."last_login", - "posthog_user"."first_name", - "posthog_user"."last_name", - "posthog_user"."is_staff", - "posthog_user"."date_joined", - "posthog_user"."uuid", - "posthog_user"."current_organization_id", - "posthog_user"."current_team_id", - "posthog_user"."email", - "posthog_user"."pending_email", - "posthog_user"."temporary_token", - "posthog_user"."distinct_id", - "posthog_user"."is_email_verified", - "posthog_user"."requested_password_reset_at", - "posthog_user"."has_seen_product_intro_for", - "posthog_user"."strapi_id", - "posthog_user"."is_active", - "posthog_user"."theme_mode", - "posthog_user"."partial_notification_settings", - "posthog_user"."anonymize_data", - "posthog_user"."toolbar_mode", - "posthog_user"."hedgehog_config", - "posthog_user"."events_column_config", - "posthog_user"."email_opt_in", - "posthog_datawarehousecredential"."created_by_id", - "posthog_datawarehousecredential"."created_at", - "posthog_datawarehousecredential"."id", - "posthog_datawarehousecredential"."access_key", - "posthog_datawarehousecredential"."access_secret", - "posthog_datawarehousecredential"."team_id", - "posthog_externaldatasource"."created_by_id", - "posthog_externaldatasource"."created_at", - "posthog_externaldatasource"."updated_at", - "posthog_externaldatasource"."deleted", - "posthog_externaldatasource"."deleted_at", - "posthog_externaldatasource"."id", - "posthog_externaldatasource"."source_id", - "posthog_externaldatasource"."connection_id", - "posthog_externaldatasource"."destination_id", - "posthog_externaldatasource"."team_id", - "posthog_externaldatasource"."sync_frequency", - "posthog_externaldatasource"."status", - "posthog_externaldatasource"."source_type", - "posthog_externaldatasource"."job_inputs", - "posthog_externaldatasource"."are_tables_created", - "posthog_externaldatasource"."prefix" - FROM "posthog_datawarehousetable" - LEFT OUTER JOIN "posthog_user" ON ("posthog_datawarehousetable"."created_by_id" = "posthog_user"."id") - LEFT OUTER JOIN "posthog_datawarehousecredential" ON ("posthog_datawarehousetable"."credential_id" = "posthog_datawarehousecredential"."id") - LEFT OUTER JOIN "posthog_externaldatasource" ON ("posthog_datawarehousetable"."external_data_source_id" = "posthog_externaldatasource"."id") - WHERE ("posthog_datawarehousetable"."team_id" = 2 - AND NOT ("posthog_datawarehousetable"."deleted" - AND "posthog_datawarehousetable"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.93 - ''' - SELECT "posthog_datawarehousejoin"."created_by_id", - "posthog_datawarehousejoin"."created_at", - "posthog_datawarehousejoin"."deleted", - "posthog_datawarehousejoin"."deleted_at", - "posthog_datawarehousejoin"."id", - "posthog_datawarehousejoin"."team_id", - "posthog_datawarehousejoin"."source_table_name", - "posthog_datawarehousejoin"."source_table_key", - "posthog_datawarehousejoin"."joining_table_name", - "posthog_datawarehousejoin"."joining_table_key", - "posthog_datawarehousejoin"."field_name" - FROM "posthog_datawarehousejoin" - WHERE ("posthog_datawarehousejoin"."team_id" = 2 - AND NOT ("posthog_datawarehousejoin"."deleted" - AND "posthog_datawarehousejoin"."deleted" IS NOT NULL)) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.94 - ''' - SELECT "posthog_sessionrecording"."id", - "posthog_sessionrecording"."session_id", - "posthog_sessionrecording"."team_id", - "posthog_sessionrecording"."created_at", - "posthog_sessionrecording"."deleted", - "posthog_sessionrecording"."object_storage_path", - "posthog_sessionrecording"."distinct_id", - "posthog_sessionrecording"."duration", - "posthog_sessionrecording"."active_seconds", - "posthog_sessionrecording"."inactive_seconds", - "posthog_sessionrecording"."start_time", - "posthog_sessionrecording"."end_time", - "posthog_sessionrecording"."click_count", - "posthog_sessionrecording"."keypress_count", - "posthog_sessionrecording"."mouse_activity_count", - "posthog_sessionrecording"."console_log_count", - "posthog_sessionrecording"."console_warn_count", - "posthog_sessionrecording"."console_error_count", - "posthog_sessionrecording"."start_url", - "posthog_sessionrecording"."storage_version" - FROM "posthog_sessionrecording" - WHERE ("posthog_sessionrecording"."session_id" IN ('1', - '2', - '3', - '4', - '5') - AND "posthog_sessionrecording"."team_id" = 2) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.95 - ''' - SELECT "posthog_sessionrecordingviewed"."session_id" - FROM "posthog_sessionrecordingviewed" - WHERE ("posthog_sessionrecordingviewed"."team_id" = 2 - AND "posthog_sessionrecordingviewed"."user_id" = 2) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.96 - ''' - SELECT "posthog_persondistinctid"."id", - "posthog_persondistinctid"."team_id", - "posthog_persondistinctid"."person_id", - "posthog_persondistinctid"."distinct_id", - "posthog_persondistinctid"."version", - "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_persondistinctid" - INNER JOIN "posthog_person" ON ("posthog_persondistinctid"."person_id" = "posthog_person"."id") - WHERE ("posthog_persondistinctid"."distinct_id" IN ('user1', - 'user2', - 'user3', - 'user4', - 'user5') - AND "posthog_persondistinctid"."team_id" = 2) - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.97 - ''' - SELECT "posthog_team"."id", - "posthog_team"."uuid", - "posthog_team"."organization_id", - "posthog_team"."project_id", - "posthog_team"."api_token", - "posthog_team"."app_urls", - "posthog_team"."name", - "posthog_team"."slack_incoming_webhook", - "posthog_team"."created_at", - "posthog_team"."updated_at", - "posthog_team"."anonymize_ips", - "posthog_team"."completed_snippet_onboarding", - "posthog_team"."has_completed_onboarding_for", - "posthog_team"."ingested_event", - "posthog_team"."autocapture_opt_out", - "posthog_team"."autocapture_web_vitals_opt_in", - "posthog_team"."autocapture_web_vitals_allowed_metrics", - "posthog_team"."autocapture_exceptions_opt_in", - "posthog_team"."autocapture_exceptions_errors_to_ignore", - "posthog_team"."session_recording_opt_in", - "posthog_team"."session_recording_sample_rate", - "posthog_team"."session_recording_minimum_duration_milliseconds", - "posthog_team"."session_recording_linked_flag", - "posthog_team"."session_recording_network_payload_capture_config", - "posthog_team"."session_recording_url_trigger_config", - "posthog_team"."session_replay_config", - "posthog_team"."survey_config", - "posthog_team"."capture_console_log_opt_in", - "posthog_team"."capture_performance_opt_in", - "posthog_team"."surveys_opt_in", - "posthog_team"."heatmaps_opt_in", - "posthog_team"."session_recording_version", - "posthog_team"."signup_token", - "posthog_team"."is_demo", - "posthog_team"."access_control", - "posthog_team"."week_start_day", - "posthog_team"."inject_web_apps", - "posthog_team"."test_account_filters", - "posthog_team"."test_account_filters_default_checked", - "posthog_team"."path_cleaning_filters", - "posthog_team"."timezone", - "posthog_team"."data_attributes", - "posthog_team"."person_display_name_properties", - "posthog_team"."live_events_columns", - "posthog_team"."recording_domains", - "posthog_team"."primary_dashboard_id", - "posthog_team"."extra_settings", - "posthog_team"."modifiers", - "posthog_team"."correlation_config", - "posthog_team"."session_recording_retention_period_days", - "posthog_team"."plugins_opt_in", - "posthog_team"."opt_out_capture", - "posthog_team"."event_names", - "posthog_team"."event_names_with_usage", - "posthog_team"."event_properties", - "posthog_team"."event_properties_with_usage", - "posthog_team"."event_properties_numerical", - "posthog_team"."external_data_workspace_id", - "posthog_team"."external_data_workspace_last_synced_at" - FROM "posthog_team" - WHERE "posthog_team"."id" = 2 - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.98 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user6' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- -# name: TestSessionRecordings.test_listing_recordings_is_not_nplus1_for_persons.99 - ''' - SELECT "posthog_person"."id", - "posthog_person"."created_at", - "posthog_person"."properties_last_updated_at", - "posthog_person"."properties_last_operation", - "posthog_person"."team_id", - "posthog_person"."properties", - "posthog_person"."is_user_id", - "posthog_person"."is_identified", - "posthog_person"."uuid", - "posthog_person"."version" - FROM "posthog_person" - INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") - WHERE ("posthog_persondistinctid"."distinct_id" = 'user6' - AND "posthog_persondistinctid"."team_id" = 2) - LIMIT 21 - ''' -# --- From 996bf9c4c9a9bd233cc2e197a9e9bf34af804cfa Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Tue, 22 Oct 2024 17:36:18 +0100 Subject: [PATCH 07/14] chore(data-warehouse): Added extra props for hubspot syncs (#25728) --- posthog/temporal/data_imports/pipelines/hubspot/settings.py | 4 ++++ posthog/temporal/tests/data_imports/test_end_to_end.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/posthog/temporal/data_imports/pipelines/hubspot/settings.py b/posthog/temporal/data_imports/pipelines/hubspot/settings.py index bd1a8978d05ba..7c73922194aa2 100644 --- a/posthog/temporal/data_imports/pipelines/hubspot/settings.py +++ b/posthog/temporal/data_imports/pipelines/hubspot/settings.py @@ -65,6 +65,7 @@ "hs_lastmodifieddate", "hs_object_id", "pipeline", + "hs_mrr", ] DEFAULT_COMPANY_PROPS = [ @@ -72,6 +73,8 @@ "domain", "hs_lastmodifieddate", "hs_object_id", + "hs_csm_sentiment", + "hs_lead_status", "name", ] @@ -80,6 +83,7 @@ "email", "firstname", "hs_object_id", + "hs_lead_status", "lastmodifieddate", "lastname", ] diff --git a/posthog/temporal/tests/data_imports/test_end_to_end.py b/posthog/temporal/tests/data_imports/test_end_to_end.py index 3e8a183cea36a..544cc5073a466 100644 --- a/posthog/temporal/tests/data_imports/test_end_to_end.py +++ b/posthog/temporal/tests/data_imports/test_end_to_end.py @@ -730,7 +730,7 @@ async def test_sql_database_missing_incremental_values(team, postgres_config, po @pytest.mark.django_db(transaction=True) @pytest.mark.asyncio -async def test_sql_database_incremental_initual_value(team, postgres_config, postgres_connection): +async def test_sql_database_incremental_initial_value(team, postgres_config, postgres_connection): await postgres_connection.execute( "CREATE TABLE IF NOT EXISTS {schema}.test_table (id integer)".format(schema=postgres_config["schema"]) ) From 2ed961583c63ce774b7de88826d6148b33ae972a Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Tue, 22 Oct 2024 17:41:22 +0100 Subject: [PATCH 08/14] chore(data-warehouse): Set the stripe version when listing objects (#25729) --- posthog/temporal/data_imports/pipelines/stripe/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/posthog/temporal/data_imports/pipelines/stripe/__init__.py b/posthog/temporal/data_imports/pipelines/stripe/__init__.py index 45bdd07562517..5b386aa10adba 100644 --- a/posthog/temporal/data_imports/pipelines/stripe/__init__.py +++ b/posthog/temporal/data_imports/pipelines/stripe/__init__.py @@ -337,6 +337,7 @@ def stripe_source( }, "headers": { "Stripe-Account": account_id, + "Stripe-Version": "2024-09-30.acacia", } if account_id is not None and len(account_id) > 0 else None, From d93e17c59295291bb4dd21e9e09f52cea0d2f04b Mon Sep 17 00:00:00 2001 From: Paul D'Ambra Date: Tue, 22 Oct 2024 19:07:25 +0200 Subject: [PATCH 09/14] fix: playlist should track current session id (#25730) --- .../playlist/SessionRecordingsPlaylistScene.tsx | 1 + .../playlist/sessionRecordingsPlaylistLogic.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene.tsx b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene.tsx index a4d27a42ead40..556b585d7a602 100644 --- a/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene.tsx +++ b/frontend/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene.tsx @@ -144,6 +144,7 @@ export function SessionRecordingsPlaylistScene(): JSX.Element { onFiltersChange={setFilters} onPinnedChange={onPinnedChange} pinnedRecordings={pinnedRecordings ?? []} + updateSearchParams={true} />
) : null} diff --git a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts index ae44cf66c7500..35201c4d0f4cb 100644 --- a/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts +++ b/frontend/src/scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic.ts @@ -696,7 +696,7 @@ export const sessionRecordingsPlaylistLogic = kea { const params: Params = objectClean({ ...router.values.searchParams, - filters: values.filters ?? undefined, + filters: objectsEqual(values.filters, getDefaultFilters(props.personUUID)) ? undefined : values.filters, sessionRecordingId: values.selectedRecordingId ?? undefined, }) From fc958eb97671f8bf6ec4efa00fc153ca8ed0d509 Mon Sep 17 00:00:00 2001 From: Phani Raj Date: Tue, 22 Oct 2024 12:09:55 -0500 Subject: [PATCH 10/14] feat(Experiments): UX feedback from private beta of no-code experiments. (#25694) This PR addresses feedback from a private beta customer of no-code experiments. Can't tell if all transforms apply on Element selection in a variant. Allow editing variants before an experiment is launched. Cannot select SPAN & H2 elements Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- frontend/src/lib/actionUtils.ts | 1 - .../WebExperimentTransformField.tsx | 59 ++++++++++++------- .../experiments/WebExperimentVariant.tsx | 2 +- .../experiments/experimentsTabLogic.tsx | 2 +- frontend/src/toolbar/utils.ts | 7 ++- 5 files changed, 43 insertions(+), 28 deletions(-) diff --git a/frontend/src/lib/actionUtils.ts b/frontend/src/lib/actionUtils.ts index 87afffa1a0c4e..9096490300987 100644 --- a/frontend/src/lib/actionUtils.ts +++ b/frontend/src/lib/actionUtils.ts @@ -20,7 +20,6 @@ export const EXPERIMENT_TARGETS = [ 'del', 'details', 'dfn', - 'div', 'footer', 'header', 'ol', diff --git a/frontend/src/toolbar/experiments/WebExperimentTransformField.tsx b/frontend/src/toolbar/experiments/WebExperimentTransformField.tsx index 1ee5b270c8e06..1b9da75065393 100644 --- a/frontend/src/toolbar/experiments/WebExperimentTransformField.tsx +++ b/frontend/src/toolbar/experiments/WebExperimentTransformField.tsx @@ -1,7 +1,7 @@ -import { IconAIText, IconCode, IconMessage } from '@posthog/icons' +import { IconAIText, IconCheckCircle, IconCode, IconMessage } from '@posthog/icons' import { useActions, useValues } from 'kea' import { LemonButton } from 'lib/lemon-ui/LemonButton' -import { LemonSegmentedButton, LemonSegmentedButtonOption } from 'lib/lemon-ui/LemonSegmentedButton' +import { LemonSegmentedButton } from 'lib/lemon-ui/LemonSegmentedButton' import { LemonTextArea } from 'lib/lemon-ui/LemonTextArea/LemonTextArea' import { useState } from 'react' @@ -13,31 +13,15 @@ interface WebExperimentTransformFieldProps { tIndex: number transform: WebExperimentTransform } -type elementTransformKind = 'html' | 'text' | 'css' -const ELEMENT_TRANSFORM_OPTIONS: LemonSegmentedButtonOption[] = [ - { - value: 'html', - label: 'HTML', - icon: , - }, - { - value: 'text', - label: 'Text', - icon: , - }, - { - value: 'css', - label: 'CSS', - icon: , - }, -] export function WebExperimentTransformField({ variant, tIndex, transform, }: WebExperimentTransformFieldProps): JSX.Element { - const [transformSelected, setTransformSelected] = useState(transform.html ? 'html' : 'text') + const [transformSelected, setTransformSelected] = useState( + transform.html && transform.html.length > 0 ? 'html' : 'text' + ) const { experimentForm, inspectingElement, selectedVariant } = useValues(experimentsTabLogic) const { setExperimentFormValue, selectVariant, inspectForElementWithIndex } = useActions(experimentsTabLogic) return ( @@ -57,7 +41,38 @@ export function WebExperimentTransformField({
0 ? ( + + ) : ( + + ), + }, + { + value: 'text', + label: 'Text', + icon: + transform.text && transform.text.length > 0 ? ( + + ) : ( + + ), + }, + { + value: 'css', + label: 'CSS', + icon: + transform.css && transform.css.length > 0 ? ( + + ) : ( + + ), + }, + ]} onChange={(e) => { setTransformSelected(e) if (experimentForm.variants) { diff --git a/frontend/src/toolbar/experiments/WebExperimentVariant.tsx b/frontend/src/toolbar/experiments/WebExperimentVariant.tsx index 27a85d5b4b8b2..53b690316d16f 100644 --- a/frontend/src/toolbar/experiments/WebExperimentVariant.tsx +++ b/frontend/src/toolbar/experiments/WebExperimentVariant.tsx @@ -22,7 +22,7 @@ export function WebExperimentVariant({ variant }: WebExperimentVariantProps): JS {selectedExperimentId === 'new' && experimentForm.variants && experimentForm.variants[variant].is_new && ( { setLocalTentativeValue(newName) diff --git a/frontend/src/toolbar/experiments/experimentsTabLogic.tsx b/frontend/src/toolbar/experiments/experimentsTabLogic.tsx index aba3bd5024790..d5c9dc856eaa3 100644 --- a/frontend/src/toolbar/experiments/experimentsTabLogic.tsx +++ b/frontend/src/toolbar/experiments/experimentsTabLogic.tsx @@ -208,7 +208,7 @@ export const experimentsTabLogic = kea([ /*Only show the add button if all of these conditions are met: 1. Its a new Experiment 2. The experiment is still in draft form*/ - return selectedExperimentId === 'new' && experimentForm.start_date == null + return selectedExperimentId === 'new' || experimentForm.start_date == null }, ], selectedExperiment: [ diff --git a/frontend/src/toolbar/utils.ts b/frontend/src/toolbar/utils.ts index 129cb6092ef4e..5eb07cdd47ea0 100644 --- a/frontend/src/toolbar/utils.ts +++ b/frontend/src/toolbar/utils.ts @@ -95,7 +95,8 @@ export function getParent(element: HTMLElement): HTMLElement | null { return null } -export function trimElement(element: HTMLElement): HTMLElement | null { +export function trimElement(element: HTMLElement, selector?: string): HTMLElement | null { + const target_selector = selector || CLICK_TARGET_SELECTOR if (!element) { return null } @@ -123,7 +124,7 @@ export function trimElement(element: HTMLElement): HTMLElement | null { } // return when we find a click target - if (loopElement.matches?.(CLICK_TARGET_SELECTOR)) { + if (loopElement.matches?.(target_selector)) { return loopElement } @@ -168,7 +169,7 @@ export function getAllClickTargets( .map((el: HTMLElement) => (el.shadowRoot ? getAllClickTargets(el.shadowRoot, targetSelector) : [])) .reduce((a, b) => [...a, ...b], []) const selectedElements = [...elements, ...pointerElements, ...shadowElements] - .map((e) => trimElement(e)) + .map((e) => trimElement(e, targetSelector)) .filter((e) => e) const uniqueElements = Array.from(new Set(selectedElements)) as HTMLElement[] From 95317e5dea262ff3b3e257adb930b550e3d0622f Mon Sep 17 00:00:00 2001 From: Michael Matloka Date: Tue, 22 Oct 2024 19:12:04 +0200 Subject: [PATCH 11/14] fix(api): Apply org/team key scoping more narrowly (#25634) --- posthog/api/organization.py | 8 +++- posthog/api/project.py | 5 +++ posthog/api/team.py | 14 +++++-- posthog/api/test/test_organization.py | 32 ++++++++++----- posthog/api/test/test_personal_api_keys.py | 3 +- posthog/api/test/test_project.py | 24 +++++++++++ posthog/api/test/test_team.py | 48 +++++++++++++++++++++- 7 files changed, 117 insertions(+), 17 deletions(-) diff --git a/posthog/api/organization.py b/posthog/api/organization.py index 3cdd6991a5134..6baeb3181504d 100644 --- a/posthog/api/organization.py +++ b/posthog/api/organization.py @@ -10,6 +10,7 @@ from posthog import settings from posthog.api.routing import TeamAndOrgViewSetMixin from posthog.api.shared import ProjectBasicSerializer, TeamBasicSerializer +from posthog.auth import PersonalAPIKeyAuthentication from posthog.cloud_utils import is_cloud from posthog.constants import INTERNAL_BOT_EMAIL_SUFFIX, AvailableFeature from posthog.event_usage import report_organization_deleted @@ -178,7 +179,12 @@ def dangerously_get_permissions(self): raise NotImplementedError() def safely_get_queryset(self, queryset) -> QuerySet: - return cast(User, self.request.user).organizations.all() + user = cast(User, self.request.user) + queryset = user.organizations.all() + if isinstance(self.request.successful_authenticator, PersonalAPIKeyAuthentication): + if scoped_organizations := self.request.successful_authenticator.personal_api_key.scoped_organizations: + queryset = queryset.filter(id__in=scoped_organizations) + return queryset def safely_get_object(self, queryset): return self.organization diff --git a/posthog/api/project.py b/posthog/api/project.py index 6fbd4e42891f3..0c60c7e649a91 100644 --- a/posthog/api/project.py +++ b/posthog/api/project.py @@ -15,6 +15,7 @@ TeamSerializer, validate_team_attrs, ) +from posthog.auth import PersonalAPIKeyAuthentication from posthog.event_usage import report_user_action from posthog.geoip import get_geoip_properties from posthog.jwt import PosthogJwtAudience, encode_jwt @@ -397,6 +398,10 @@ class ProjectViewSet(TeamAndOrgViewSetMixin, viewsets.ModelViewSet): def safely_get_queryset(self, queryset): # IMPORTANT: This is actually what ensures that a user cannot read/update a project for which they don't have permission visible_teams_ids = UserPermissions(cast(User, self.request.user)).team_ids_visible_for_user + queryset = queryset.filter(id__in=visible_teams_ids) + if isinstance(self.request.successful_authenticator, PersonalAPIKeyAuthentication): + if scoped_organizations := self.request.successful_authenticator.personal_api_key.scoped_organizations: + queryset = queryset.filter(organization_id__in=scoped_organizations) return queryset.filter(id__in=visible_teams_ids) def get_serializer_class(self) -> type[serializers.BaseSerializer]: diff --git a/posthog/api/team.py b/posthog/api/team.py index 566ec7fad57ed..3f47a67791f28 100644 --- a/posthog/api/team.py +++ b/posthog/api/team.py @@ -6,6 +6,8 @@ from django.shortcuts import get_object_or_404 from loginas.utils import is_impersonated_session +from posthog.auth import PersonalAPIKeyAuthentication +from posthog.jwt import PosthogJwtAudience, encode_jwt from rest_framework import exceptions, request, response, serializers, viewsets from rest_framework.permissions import BasePermission, IsAuthenticated @@ -15,7 +17,6 @@ from posthog.constants import AvailableFeature from posthog.event_usage import report_user_action from posthog.geoip import get_geoip_properties -from posthog.jwt import PosthogJwtAudience, encode_jwt from posthog.models import ProductIntent, Team, User from posthog.models.activity_logging.activity_log import ( Detail, @@ -423,9 +424,16 @@ class TeamViewSet(TeamAndOrgViewSetMixin, viewsets.ModelViewSet): ordering = "-created_by" def safely_get_queryset(self, queryset): + user = cast(User, self.request.user) # IMPORTANT: This is actually what ensures that a user cannot read/update a project for which they don't have permission - visible_teams_ids = UserPermissions(cast(User, self.request.user)).team_ids_visible_for_user - return queryset.filter(id__in=visible_teams_ids) + visible_teams_ids = UserPermissions(user).team_ids_visible_for_user + queryset = queryset.filter(id__in=visible_teams_ids) + if isinstance(self.request.successful_authenticator, PersonalAPIKeyAuthentication): + if scoped_organizations := self.request.successful_authenticator.personal_api_key.scoped_organizations: + queryset = queryset.filter(project__organization_id__in=scoped_organizations) + if scoped_teams := self.request.successful_authenticator.personal_api_key.scoped_teams: + queryset = queryset.filter(id__in=scoped_teams) + return queryset def get_serializer_class(self) -> type[serializers.BaseSerializer]: if self.action == "list": diff --git a/posthog/api/test/test_organization.py b/posthog/api/test/test_organization.py index 636a085e86f5d..976ddf99cfcb5 100644 --- a/posthog/api/test/test_organization.py +++ b/posthog/api/test/test_organization.py @@ -1,7 +1,8 @@ -from asgiref.sync import sync_to_async from rest_framework import status from posthog.models import Organization, OrganizationMembership, Team +from posthog.models.personal_api_key import PersonalAPIKey, hash_key_value +from posthog.models.utils import generate_random_token_personal from posthog.test.base import APIBaseTest @@ -138,20 +139,31 @@ def test_enforce_2fa_for_everyone(self): self.organization.refresh_from_db() self.assertEqual(self.organization.enforce_2fa, True) + def test_projects_outside_personal_api_key_scoped_organizations_not_listed(self): + other_org, _, _ = Organization.objects.bootstrap(self.user) + personal_api_key = generate_random_token_personal() + PersonalAPIKey.objects.create( + label="X", + user=self.user, + last_used_at="2021-08-25T21:09:14", + secure_value=hash_key_value(personal_api_key), + scoped_organizations=[other_org.id], + ) -def create_organization(name: str) -> Organization: - """ - Helper that just creates an organization. It currently uses the orm, but we - could use either the api, or django admin to create, to get better parity - with real world scenarios. - """ - return Organization.objects.create(name=name) + response = self.client.get("/api/organizations/", HTTP_AUTHORIZATION=f"Bearer {personal_api_key}") + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual( + {org["id"] for org in response.json()["results"]}, + {str(other_org.id)}, + "Only the scoped organization should be listed, the other one should be excluded", + ) -async def acreate_organization(name: str) -> Organization: +def create_organization(name: str) -> Organization: """ Helper that just creates an organization. It currently uses the orm, but we could use either the api, or django admin to create, to get better parity with real world scenarios. """ - return await sync_to_async(create_organization)(name) + return Organization.objects.create(name=name) diff --git a/posthog/api/test/test_personal_api_keys.py b/posthog/api/test/test_personal_api_keys.py index b5128b95cbbfe..95f404b0bf4ce 100644 --- a/posthog/api/test/test_personal_api_keys.py +++ b/posthog/api/test/test_personal_api_keys.py @@ -483,7 +483,8 @@ def test_allows_access_to_scoped_org_teams(self): def test_denies_access_to_non_scoped_org_and_team(self): response = self._do_request(f"/api/organizations/{self.other_organization.id}") - assert response.status_code == status.HTTP_403_FORBIDDEN, response.json() + # In the organizations endpoint this is a 404s, as we filter out at the queryset level + assert response.status_code == status.HTTP_404_NOT_FOUND, response.json() response = self._do_request(f"/api/projects/{self.other_team.id}/feature_flags") assert response.status_code == status.HTTP_403_FORBIDDEN, response.json() diff --git a/posthog/api/test/test_project.py b/posthog/api/test/test_project.py index a3da3c81f9ce0..9d742b5abc33e 100644 --- a/posthog/api/test/test_project.py +++ b/posthog/api/test/test_project.py @@ -1,4 +1,8 @@ from posthog.api.test.test_team import EnvironmentToProjectRewriteClient, team_api_test_factory +from posthog.models.organization import Organization +from posthog.models.personal_api_key import PersonalAPIKey, hash_key_value +from posthog.models.utils import generate_random_token_personal +from rest_framework import status class TestProjectAPI(team_api_test_factory()): # type: ignore @@ -9,3 +13,23 @@ class TestProjectAPI(team_api_test_factory()): # type: ignore """ client_class = EnvironmentToProjectRewriteClient + + def test_projects_outside_personal_api_key_scoped_organizations_not_listed(self): + other_org, _, team_in_other_org = Organization.objects.bootstrap(self.user) + personal_api_key = generate_random_token_personal() + PersonalAPIKey.objects.create( + label="X", + user=self.user, + last_used_at="2021-08-25T21:09:14", + secure_value=hash_key_value(personal_api_key), + scoped_organizations=[other_org.id], + ) + + response = self.client.get("/api/projects/", HTTP_AUTHORIZATION=f"Bearer {personal_api_key}") + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual( + {project["id"] for project in response.json()["results"]}, + {team_in_other_org.project.id}, + "Only the project belonging to the scoped organization should be listed, the other one should be excluded", + ) diff --git a/posthog/api/test/test_team.py b/posthog/api/test/test_team.py index 74a5995d2ac5b..ba697d073699f 100644 --- a/posthog/api/test/test_team.py +++ b/posthog/api/test/test_team.py @@ -18,8 +18,11 @@ from posthog.models.dashboard import Dashboard from posthog.models.instance_setting import get_instance_setting from posthog.models.organization import Organization, OrganizationMembership +from posthog.models.personal_api_key import PersonalAPIKey, hash_key_value from posthog.models.product_intent import ProductIntent +from posthog.models.project import Project from posthog.models.team import Team +from posthog.models.utils import generate_random_token_personal from posthog.temporal.common.client import sync_connect from posthog.temporal.common.schedule import describe_schedule from posthog.test.base import APIBaseTest @@ -1147,7 +1150,7 @@ def create_team(organization: Organization, name: str = "Test team", timezone: s """ This is a helper that just creates a team. It currently uses the orm, but we could use either the api, or django admin to create, to get better parity - with real world scenarios. + with real world scenarios. """ return Team.objects.create( organization=organization, @@ -1160,4 +1163,45 @@ def create_team(organization: Organization, name: str = "Test team", timezone: s class TestTeamAPI(team_api_test_factory()): # type: ignore - pass + def test_teams_outside_personal_api_key_scoped_teams_not_listed(self): + other_team_in_project = Team.objects.create(organization=self.organization, project=self.project) + _, team_in_other_project = Project.objects.create_with_team( + organization=self.organization, initiating_user=self.user + ) + personal_api_key = generate_random_token_personal() + PersonalAPIKey.objects.create( + label="X", + user=self.user, + last_used_at="2021-08-25T21:09:14", + secure_value=hash_key_value(personal_api_key), + scoped_teams=[other_team_in_project.id], + ) + + response = self.client.get("/api/environments/", HTTP_AUTHORIZATION=f"Bearer {personal_api_key}") + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual( + {team["id"] for team in response.json()["results"]}, + {other_team_in_project.id}, + "Only the scoped team listed here, the other two should be excluded", + ) + + def test_teams_outside_personal_api_key_scoped_organizations_not_listed(self): + other_org, __, team_in_other_org = Organization.objects.bootstrap(self.user) + personal_api_key = generate_random_token_personal() + PersonalAPIKey.objects.create( + label="X", + user=self.user, + last_used_at="2021-08-25T21:09:14", + secure_value=hash_key_value(personal_api_key), + scoped_organizations=[other_org.id], + ) + + response = self.client.get("/api/environments/", HTTP_AUTHORIZATION=f"Bearer {personal_api_key}") + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual( + {team["id"] for team in response.json()["results"]}, + {team_in_other_org.id}, + "Only the team belonging to the scoped organization should be listed, the other one should be excluded", + ) From 859f7221666413ac8c543ee0ed9fa2bea244ae4a Mon Sep 17 00:00:00 2001 From: Michael Matloka Date: Tue, 22 Oct 2024 19:23:07 +0200 Subject: [PATCH 12/14] fix(events): Fix PostHog property filtering (#25732) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...llar-properties-on-person-hidden--dark.png | Bin 0 -> 8366 bytes ...lar-properties-on-person-hidden--light.png | Bin 0 -> 8227 bytes ...-properties-on-person-searchable--dark.png | Bin 0 -> 25882 bytes ...properties-on-person-searchable--light.png | Bin 0 -> 26108 bytes ...emon-ui-lemon-checkbox--bordered--dark.png | Bin 5294 -> 5261 bytes ...mon-ui-lemon-checkbox--bordered--light.png | Bin 5143 -> 5110 bytes ...emon-ui-lemon-checkbox--overview--dark.png | Bin 17863 -> 12597 bytes ...mon-ui-lemon-checkbox--overview--light.png | Bin 17544 -> 11625 bytes ...emon-field--fields-with-kea-form--dark.png | Bin 75399 -> 75397 bytes ...mon-field--fields-with-kea-form--light.png | Bin 72273 -> 72266 bytes ...emon-ui-lemon-field--pure-fields--dark.png | Bin 22779 -> 22757 bytes ...mon-ui-lemon-field--pure-fields--light.png | Bin 22859 -> 22775 bytes ...-lemon-progress-circle--overview--dark.png | Bin 14835 -> 14822 bytes ...lemon-progress-circle--overview--light.png | Bin 14923 -> 14644 bytes ...lling--billing-unsubscribe-modal--dark.png | Bin 53435 -> 53381 bytes ...ling--billing-unsubscribe-modal--light.png | Bin 53350 -> 53163 bytes ...unsubscribe-modal-data-pipelines--dark.png | Bin 82146 -> 81934 bytes ...nsubscribe-modal-data-pipelines--light.png | Bin 81915 -> 81553 bytes .../PropertiesTable.stories.tsx | 26 ++++++++++++++++-- .../PropertiesTable/PropertiesTable.tsx | 9 +++--- .../lemon-ui/LemonCheckbox/LemonCheckbox.scss | 4 ++- frontend/src/lib/taxonomy.tsx | 11 ++++++-- .../components/eventPropertyFilteringLogic.ts | 4 +-- frontend/src/scenes/teamLogic.tsx | 2 +- 24 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 frontend/__snapshots__/components-properties-table--dollar-properties-on-person-hidden--dark.png create mode 100644 frontend/__snapshots__/components-properties-table--dollar-properties-on-person-hidden--light.png create mode 100644 frontend/__snapshots__/components-properties-table--dollar-properties-on-person-searchable--dark.png create mode 100644 frontend/__snapshots__/components-properties-table--dollar-properties-on-person-searchable--light.png diff --git a/frontend/__snapshots__/components-properties-table--dollar-properties-on-person-hidden--dark.png b/frontend/__snapshots__/components-properties-table--dollar-properties-on-person-hidden--dark.png new file mode 100644 index 0000000000000000000000000000000000000000..cb009d55395dd64403f2e1202323a1bf411fffbb GIT binary patch literal 8366 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 literal 0 HcmV?d00001 diff --git a/frontend/__snapshots__/components-properties-table--dollar-properties-on-person-hidden--light.png b/frontend/__snapshots__/components-properties-table--dollar-properties-on-person-hidden--light.png new file mode 100644 index 0000000000000000000000000000000000000000..4c8ac367ea329db53382564b0a016cfe25233011 GIT binary patch literal 8227 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 WVAZwUOYmPK5EVtu$F=fS5&s1a_4=9s literal 0 HcmV?d00001 diff --git a/frontend/__snapshots__/components-properties-table--dollar-properties-on-person-searchable--light.png b/frontend/__snapshots__/components-properties-table--dollar-properties-on-person-searchable--light.png new file mode 100644 index 0000000000000000000000000000000000000000..88a2b1085bae5c0b08908d453db6b9f98bb5fc48 GIT binary patch literal 26108 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
  • 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 UU)rs}$GIR-Qc99V_Y4F72W4%5%>V!Z literal 0 HcmV?d00001 diff --git a/frontend/__snapshots__/lemon-ui-lemon-checkbox--bordered--dark.png b/frontend/__snapshots__/lemon-ui-lemon-checkbox--bordered--dark.png index 6dba78ce8a72003bf42c0e457548fbc3599665c6..9b3f25ef524ce093a3fdadb89831f8fc46b24350 100644 GIT binary patch literal 5261 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 qKXV;_e>dqe<7Q-4_%CiWbi2pD@V literal 5294 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 diff --git a/frontend/__snapshots__/lemon-ui-lemon-checkbox--bordered--light.png b/frontend/__snapshots__/lemon-ui-lemon-checkbox--bordered--light.png index 92b06894e5bddbe7d3d49d2434e4f05bb4326f5a..f24e45c5277171883830ee8a5b793aba942a9eaa 100644 GIT binary patch delta 4751 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 delta 4785 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 X1|PRh5fKqN5s|jKzFIldKJtG6tPe?H diff --git a/frontend/__snapshots__/lemon-ui-lemon-checkbox--overview--dark.png b/frontend/__snapshots__/lemon-ui-lemon-checkbox--overview--dark.png index 9d11b77a107be180a3587481e18729a2e2539304..aadf83a5cca37266abbd364d1726248f28ecb802 100644 GIT binary patch literal 12597 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 literal 17863 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

    H(2*ZVRUs%)DbVN z`o)JjV=Y2pj%tecK1b2gy1)k1Q`u$Q#;)yP@rGc3X&taHgWovH-w&_MaS`)WV#B|c zxl3AAL&FOyo-(5-d0IyD<9#C)tYjFXb-HG{{zhhn!XgUK859*q<+v5L{0bpe@bO5K zyT_>gS6SNkkG2BBZ1j-tkYpg;=ByxIYjO$wNc4MIbcpM%8%)QogEI&-&+|gs9dUwZ z6JjYT-oUY6)Fu6|m}n{+bG*vNa&pQ@j3o0R>cS(-_atrT4!B8dR7VubD z^BrOs5a)Z0F!EH4pW>}?=!@}UkG>vDzIyGdB8}%o9MXe+4|$ch_evp;V-%gr`0oNl z8-=*+Zu-FaSwqLmq>pl3Ya7}iqOkwR{b?m+q%B>kMcBVNk;V<*G<+%JgCF;lk9^wS zL3s9b>jei)?eWByuO|+yye*WQ@9t)GJvwlzZHS-?EdD#QMZ#8XJ>3U7Co?sc4kt&% zVSYWhcmP0{S;wP-J7}{s_dmzr#RYt3Q1B%+xff*$|H7bq53b zcQ5&wUUK{bVnU(ln5kLrI}a8FpF@qHC5p%@`4{LK&wwr!-Se0D2KJMbn}89|%wm>2 zdwxnP+SBHbcnNj;EZ>z!g6lAk=vwGgrw@2fSaEq02j zsECP)>BH2!FXx1UP4u5EM4BOM@W#Y@mPEt`OJGmXgzvX*!1U6VV`|_wDN)miw18Aj ztF4`n0*vIfx2e`&(NA5wBK`}$?Pi7U5-}fT0g2az#m0Q=)?&lT^`TV2ZC+;=um7|) zhqL-SQ`GjS$48_MrnUH#gztVNytoTv{q*&X&>87=$Tb=COc=rr`6pgSVRR z&?%6+%q*}2&rQJ8|Ay6++7k{r@5qJeG}FM3{Tag7SAt=2?dg|N>69=1i1pj2)Py;d>_ z%6aW=lN4tf={kHf_BFaSbAs&sUK^j~~wxT1bQgZyckgWFn6WJuxC`ikT7(d;1S$HC$=G&J;H zSqZTRwPT2b+dyhHrR7w=NTFtJqH)%F)DXyw}@f|G5{KZ>Cg6%XbODTkQn>^T)!YP!Fls zsiZgw!ou*D`fx)S%l^#xadcmrpLl!5bT)bS5BNuZo1s(GblMnP`C4R5zuQy(SIr!c z)1h{Sn1>Lm7Nsj!gwWVgcD`K`VzfVg%uVs8DliiCl}`t^(ANR8Q!+t!$}ig4cc}4u zFgMJ>fj(|#e;~604hz4xZvz_|WXJM0uic$v(LNHs3(@m`XVL=3b@Wne&xx65rPV@w zMK|+r9MKz`EhbHGG8X%*Q(XYVV;wa! z3O(KN1o;qrIjn!5YtcV%ggcH=y0QZzV_u|D_JqjH{XbyagT&#OYz`!(%8yLPPT{ z6!LOd9g@^j;)Pn9#=v;ZB01FUPc>Uq`Mkv64dwFe9r%8$MgHaX1NbpIA5U~8^7!|} z{ptUDluaxahg<9F!0RYQlgiVTAgO=;p2!a!H4uw()feLs^(YP);Zb;r(};Vjt^OR` z()Nb%+nU3ltO>;GD7#$k9pZ+~M+L*L?`q*)!g*&ZwMfUu@9T~m8zabo>HgZDK>(vT zWnzw&fT&)~y6NH51?5J}fV(;&FFm3i9f};izMhp-Njnz%Se3S%)EeXk@#2BCZy`W+ za+xf;a!e~PNK}Y{>qhtn?~KTj26ZC8ilX^Xezl#g}Zj4lhZ-X5T60P_ z=is2;CH;ddjnJS$o=RP7~N3^Q%p_lkS~uS`ABYIlK6{kcW0gZ)7H zin%cJ;q3B|W-BB%+DloPkmUPWt81$n4uz?6bK!*@FVw>wic82%zF8C6l&)0I!E^Xv rq~Repuy{eN(_EV;K2EQ2xf)Hsgtz3HC;1`j>dQ(hN@R;ae*J#{P)xVk diff --git a/frontend/__snapshots__/lemon-ui-lemon-field--fields-with-kea-form--light.png b/frontend/__snapshots__/lemon-ui-lemon-field--fields-with-kea-form--light.png index 8e192d169ba4f33466fe77f2939869fdae52305a..25d4b1bc1c185a0df58d595682ec7700b5abbd73 100644 GIT binary patch literal 72266 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 LO*?C_*!%wh6+6rO literal 72273 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

    (ogAS=4P#I+QI@_VCB)8L(nH>9zJycD zs^N-HL6iy$CtRQNw_;%q(XOixP$`i@(yQMv9bH`?XP$-;TJ{OB(Hs)tJ_&HmGR%u; zG%FdOh|Yry1r^t)T|iTiw=#qviw0^Y`j0!6tak`>K$eetNh_oLkPOENuG{--kn0?Iv;~t2yc1{-jFYe= z5~LVa%}6o)dooHPxi-L{XujA2B_EW$VCPKLJA0b!KX3q3K0aFtyP2BWN^cL8s?;}( z$>QVUn7GvdW@ZXbrvD(sxU5eojEMfh7QM~Tf9M;z9+)yR>xCV0CKe9T;w4M=+SvFR zl=nDX2J6pO!JMv+K`B8q*FI8z-Y~KZWnNE}nspEmNtleO&67ag%a`im^6VW)6dGsS zdh3UWh916zMZ}ieVD}eC*pA?itiwiz`|%9<3lhqX+|G`H?z+bHXQ>Q&AEh|**f2~g zzO(G?J|0#=`jlU&Y-fd`{yl(x2u30N5XqV>)`3aP8eh1&($e}RPv?sHpFJDP4jC97 zg5A*mN@2^6_KdW2TDoy#8C3@Mu@-HHknP)BlB8x5>0+CJnJ0RuQ)aC+t?3;{U_HO951-xvfWuJFb@$4rNdAf_t6G`*1&Y^Gf`B zEY;|j(5!f0ubwoF!WAm_5d|@)r6%=lgGHBZ*kFP7VgoNd(SiIq<^AWZ{se)79i&NF z9Hp06W34&s8q1nI3{(j{{G^5sMNQ_FOcu`KB{2;Sk{A(NysJzPpd*_u^Q~bv?Eo2( znhC7L?s`jC4D0!qSe3F-y9Rna+Cm^hH`m`LX&TwI4EWi*DDjCvtg5blSyT6OJ4;58 z?j4>xS0!xXUrGLW=RIgZ7u3!0x__JznZQ@YfE8nAp5cf$hmkooA=xsmSwoovj3Y=S zf_g9@kBM;~*IPq;)!)INih!&w*Q1sM+}wD(2VDg~J>ARNEoX!wdX(KvXTACJyJw95 z#is(k5DNuHp=0~?)h;>D<0h_OAgHD#y0+5V^zxoWI4o6V9Q5=nS* z`}+%#0a-o>O}xCkIAUq<;v*xm_uR^1gv9U%u`d7+2@L{7joOEUWaY|X>%Tvi1Gob` zbS%Cp`bBAJI)`_Xo4 z@kYu$+KEZS7|F%PL#h=KNt(BM|L40oax!;6h=@C%Cp$+{(we;^tCYVi+28P3<~)!- zJw6Fb?Vmrl?wiE_zqPhCc1c&FMZ+&1WAjUcmd)V*Hm*PX$F%Z4(ghfe6%Osj_6~|| z>ZTNDFMfx}lbM^1*zLbCxgRxpv=DzWOj{To&aFDVp!}z+ZLpf)R#~)U?GXO8_2|k5 z=OLnbn+%f>_=p_pzv{6tn~PSeG`1ySlL;`#Li~Nf&_u*}e8?T#$Ej1W`+ZZ80@0pD7;##cDtlOC@9W?_}*QwK3{p7cWh*&ZiLaeC1+bek>Vx(_=Stb zF@%+2{OXzc8Pa%(_8)IRRr&Sv=N~8Q2%r9tx=82k34HUnNw3D@a+-$OBZQfyh*|c6 zOxeiBys(&(HFTyxekTI0U;ii`-!0f^QJYzla91*In|AYEU diff --git a/frontend/__snapshots__/lemon-ui-lemon-field--pure-fields--dark.png b/frontend/__snapshots__/lemon-ui-lemon-field--pure-fields--dark.png index 24eac264804e4471c4bd3d9570268970c80bc6e2..99779f0baae6dfd336e771d214218c7004177767 100644 GIT binary patch literal 22757 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

    5G*v%=wY5yome*vE%h6Bn3^ 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ä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 Zyi_0Zg9Fr9JzGBde_3tiZ^`@s+6E{i?Fw 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 A9smFU diff --git a/frontend/__snapshots__/lemon-ui-lemon-progress-circle--overview--dark.png b/frontend/__snapshots__/lemon-ui-lemon-progress-circle--overview--dark.png index f271cd3ec278a549cd9b467e770bf1855446165c..50a7c500c04532928fd810af1db431c51932ff53 100644 GIT binary patch literal 14822 zcmaL81z1&4+by~k1*8N-y1PS!O(R=r>Fx#z=}wgr5Ky|iJ48AprNK>icf+RRO#kov z_ndp5b1u(*1lL-7%{kYcbG+|6##kYW@{*Wn#Apx*1XEh-oiYUSXb=3ogZdc!duYC# z27WzqQkH~4%7#d{ArMN4^gA(C_mus4H{BN&6p*7$_INqir#Gl1C>iPoy9GMd^Vw>} zFLxKbh9|To#Y?j%O2@TpyNbruKU%BJp<aB6O4YesQLoD`#z}-h`WcrHBS*hng;|X_Jg>pz5d`vXoA4O2V?J)*=il9NXE6==@!v%1qiZW#j6C@)%MuYEK@SKfYZgh!LDK zzU?k#>mvE+-_b9IJBaHYtPZMegy$E^B0)6BoA4lRLcTNq_~+tE7|7WT*$~Ls2hJpH z2!xc7)&T;sH~ilD2-5ah3>O6gK~WF-{St$8^VGweJhInRyX4LA7bV6RPhpdy`KN4)QQC5S;KqAgYga8dWa6(use2~CfqPh$P79}`itHH3`nuarm#@8u#R`Y zWN)IB8&=>|%l_*p|HqA{uVL{Y3oX%STZJHyB{B=p4X%%=Q-zbeT6E4yBu|l%pNy9} zT@Nh&7IQ&Dx|RLN&CafmS=7RZ&XW!EmXy$T)IE}b|t6%yIlj*(vVyEQ^o z_qf^WhY<>xey^N!KOm(zb)Fdu5p=WhJw977$d5o7FXeV!YLhfXe5L4@B)lsRC*Dt5c^8Zo}!q zJeU2S)ozSHf3DONa1R%n`%7nkXlYGD?ZjOV@6{vw5=LoWRab4WX~rB~BdX{Y$I2;` zy-$C11dI5d*c|`mEL3gqJ1pB6Ok&r^b-n8zlz!3u%W^)djN7FzKpcHDUD(UFyX4B@ zxO}2iZ+fkxdwQCmMpEGos<8K^``XqsnOt0|u`<2n^j~(NA>qk9o5koj@hv(HAIAO| zsUf66zXDY|uH_aM^eJ8!w7Odo!nSS$!}{ZWcK7#VqoQP5i9I$CiVi2K0?0+Yo%j2$ zcuTcK{K(BF+GC3+Yi;H~V;8C9pVx8Gc!B+5Yr9ah3-v_oEo6w@?Luv-0?sM;ys!Fd zBqP%(1B_Q!8eO-~MkVDAMcv)kcU%HS){7^%P*5`qqZ!_bi*sl9Pm=GKsck7`DL($OKz&D|d% zxHG#6KU$37(EIh6YVB~-`kXnUxt{Q7X_+R#$n8)#1I*B5kjQTo$R{@gHHPB@JwX$~ zUp7}VCJJu)zW3Xr5iYxbui7#V_Up2L{yd8yn-RV&AxIu1zg>Ux*A&^()3dvWqSotn zZ9DL*ENUj1=>7r%9ydrbnJRGSrZ_L4lK)=FbI;90{$B%$rP(S!1yaM^DydN0`|cJR z+zz9X;%q%jPp(c2z_YC8VtxrVTKQSBw>MrK7fB&#wVL-a&wtKh_--a-c(K8wS#vK4 zy8+w5a_4Ni<}niVqo$zu)KY4rD~C=?U(0W>tmu9x)qY4%jaIP|&TMDv?qO;BIC5pFGb1)x5n%-VSBu%pp3SAz?w^RhP}(#pAp`Kj)h$$w^Q0j+#7XW_ zo^kCLfItdp>m;)2m_qy6?#dF{@Z$S<2r>SlJklcoqkOOeMfI;#otvkL@9EDXb%Kou zqkGp*ufDjqU9A?cC05SKQOM;WR888@=z=rFONy$i%mjc zph#IfK?!1!<~e>Vwv&SAkgpQn?`UfM6 zpddegp!bagf>v6@^K5M!ZgILX^bW6q%%k=i_V2b4RL5t>h-39aHEHQyIyD&?c?Ug02XjLPy zi@=SJ%FZ?+eqErU_8AO~k?gm5wM|p~?*gtDSKhws!A~HNHg!G_=;rd6MEQ`p{lVPN ze<@bAiueefTC=Zbj%_%33;J)!qFbt7y_GDX-L-kD^*)dI-&$#sJ(`;nilT0A&Y9S~ za`*aymzW&?-wl<)w_m+_1y-l(j+QcA;aGH+v6-pqj&m-CG3bb5Ea4D!rE(!IYD!Ar zkhh2ddwjC|3@vK=;-bRZUWp>Jin4Msk1CkqjnE1COoBE?f-oGIRk(Jcsu5xLx+9+r z7VO`Xq@k()&r}@9;pWF@xj5idPTODwhhu|p6Nl4ta2Vt&t66^s_hF@ZpAIsDKa*gD zZw&9T{?}5c3_*f?Lh`2thyLGt;6Ep5N}7UJ>)LvIrI$bo^X!W>_P6L(ir(Sj;oe>! zA~L7d>%r;={XZOx1??Ze$ePwmiIVMPxCY=VD;qnZMhTWziSQn|bYhI4BbuIe^%5mU zyjThl!y!)i4JrXJF)69QoASHz1cfJ^4sLDSK3NuIl)Kcz>o|ocfsYUfJASy*hG64fYeXweZD>k2H)Z zC5w@Th?MH=Xmqu5H9uiNZTe3~N3&Kn{W;c4FbsZ)(it&tk=9G}#6+!Ei38W&L_~>0 zFr#St@UYe#M(Yr$Z0YqPGF^yGe``ZM)8j4Zq>WK9 zqBC9C??-gBiTWS&YLM&sZ1OXvoP_LU)KRoy7vW#KY<*i=-aSL7 zFt^xz1Jd44%x^}x_w;n%y>D+vW9AF;lFr2q36{xKFCHfh0vnJ$zN1Z6w^luW(#+gk z&2b8JdL$XqIc`<+XSzOzq7ev{wIb8(#rRPojyEl!Abb|^QWHGs{aRGtZD!l^{zYCNS}|2Iha-?63wm*EBiDN0pk#tC@`>Wz|qqR$sE#g&l# zsi06%8XA9gaGN&4BHQ^HyuhmJYO^X>xP;F9@+Y^)$%D9PPpN-|y=jXK4-Y0vhBRgG zOq7;R?iw_E>dk-tSy@Gc6x2bbN#%Eo;`j3{Ih}utS-zerDMl;>A7N(Gnk-!Uxa9LZ+$5(_HZf=#y$t)4gL;|dMXi2P<-_s zR?TyjEf@9tm1}ISM(6msw|WMXd<({{Z0B37*{WnmptT?|uk%RdA{P10{!+YuOTmKFlgIhrzf-zZCJZg%i5HF) zrOeIINJcC+K2UOVqk~e~zB`h{Ww*PF>Mg7oIz!w(*%RzbiHDY_keV~O%^;s7;_w%v zSzq+yj41;H!?l{IL3-$3;3s$kGdA{8Ft&`8)Xz%arwZ_d_j&2*&m;S}<4~W-BX$GF z$_f5vdrdw?-Y`!E;s?!)+n9p#h znW>tWZ$UU*v&nWD4a5(bSROF z|IX;*U%LOl?5)kKL=1l*UD$GEDowcY>eAhy)uF$;lomHKDk3a4eycwXz#S{SY^JI? z_%Yke$+y@OwdZ?vvQVt?Oiawh$EOL!k6*ELVy^Kbqv^14!wTN8o-o?+cIT-R-yTzR zkEkC`&CZQWt?i=aNQUo4St^|SmFM~1LZgOTjdpBGlvQ(~BZV>d(9n>`f<7u0lBJZa ztb&{zeA~IJcztc{*7fY7voj}-O=QKMZ-1u7<790bw9I?(G^V$`e3QredUwh@GdP9*fP+)}=mf^E|)5?Txlj zx2g;4LZzyaC{-=WlS^G&Une3Yq&z;F`spz{@llZFTz*k!XsBI2-8rTgEdaKOLxVh= zQUmE22|`%=PB$8`YoMk)A)sd0KJ2oZst}Xz>FSd$D`Q{K*QXUXH#G&wk5}Hdc^c2I zb=mdFmoR8Bf#+eZS7qHNjA!)Iy^mxBDKWu?%+lK00eeJPq(Os?nXm67m=rCpPpz|( zVTPZ&x@)GcexvKsaN`Bolru8c>w=x;Q#R`J0xp~w+~0!|68OTlXWwT_P>_mxCJdVQ zuAeNVV}6Yc7P7UF_x5$aY)ROfns#c#cAI*XX@@LOxa;h^#J9so-C_#FaD)LeJ?wU#^Z-{+z);rz9)3eN= zmYGFRXJz?-)_$h(g3_nOY3t}mrHMoz`Z`gf)}82s%|TP(HqkjL{eUr7uChXC*2;>0 z;dtBw9v)g()77Go@2#`=R8&o|MrTi}=j~-7nTdOA&BxiD>FR=~25ec?u3}=3?iBE- zV$#z^t%n|eZVMUO-km73naztu(ApBaZL zZm*7s_ke|qYUgCVxI^MwvF0DO8Aox_soLVV!LGiKsLbXS%M?HGXe0Y`-g{{7$?)JS zzUjO><8eJE-Bm01{%aDC zlNEnfW!9@1R_N~UpO*8l1O+X+2R!_dBT1pYJC&;p+b1-wWE7%CGa0{WECy2I4JfUr zivoSJPY{UTTtYP5)j1fp&Pz+>%ga4eHWPgnxf9kCM{h0Z+1TDvJLFSrZf=r1g#5)o zMoRsS15+-vFb^udqgwAanBj?H_rs=QX9g#ro9;!Cm zO0-nEj2*7d^>{)bSW5S3qoShrc6a4OwTZh(p_Wy^n7Q$S)=>_{6&nOni>f9 z)TR;#iy--rKZzok!>l)3hi`-Zvb{_^FAntiN5^&L<>gsp z9@%T`$VYl@Ka{|G)pno$eDA@d`)BW2tDi`Ek13ajkXPEH(NX|2)0zh5lOXrj3K$_k zx}M?scA>fYz_Yj5Y9}EP2UB`|WHL1(MglEMeeJN96Ji3j)fII9L)p+&p_rB$OD0g^ z2ezQ9l@vfRRH`UyHD)!fT4A3JyX&=Pw{r6JDHmhdSlr-lFa}n5lMDaO)g4>%BzoZE zFdnaqo%_w+MSY=0w~L|i!#K8;(<{1~X%J6zpzIQo!a}ZRig0?0q=Wvmf$O#wJutPX znOI~qi6RM5H;H3h&u9S`tNnYA+321h3gnXaP1ZX5GoSOqXD=me#_FAV()|{QadExZ z`&{aEZCQ0I3|*T&sjNVHr#x9qP_>nOwLe>%YY^LuX17qMSFZnOSk!KRuHHoJ;sbw3 z^|VbO4D8vzU2zF9q-1393^8GA7u+m>ly#P?Gw~ecbM-!EQxzO+Pd=}j^n9!HK2A@F zkE9-YKzOtcv+{~#cP5P+jVe92(~l$+@vhirf3MKzX`4pCdSk3JfH6~1u_<6- z4Za{ebmzsqv7YVpkaqpk?KwP826F)~$Veq$K84HV#5$&_CY7f+SpwR2mIHS|AW|IB*Q7K`|GhJ5M_m_AwpwtM+p)lv+dnfg-(vl*pC zdp?`%;X=|`WxSe`8wz|5{T8#`h?D(hhgFHUK>_3f-fPpR1;ZlySA*?WUAxZvGnTUx zn2$d%<)^mJH4yPTc8*l6hq3)qZ*(nvX(W3u9mYdwIofhffuJOjhT%cyEN;+2RvC zaaS>_Nq#Nv7clbWX_!Pr8lU4>K$mPgHY^iqG3CBY`>q3AmGFeisXJz(R6EWxpN`HU zPD|8XS|U8L&H>K5>(U)gmYA5xV{tH9u1^=>Q(Nc$H(li8-xa&o`KkKJ?0wbUIgI&pd33`tOsupgUdtr8>U1IVLEx{!m1#1cmd?`RI zL(0dwIvhRUy{X=5rb8p-p0fhPXv}~a$B7};Y}9)xbtrJ5y;H;<`C$xEf9SK-R>MO7VcK) zP%{&`^Z3vMJHWE6bleY(wU!J|+G52UN;=+fEMv3ll%Vh#!=QTYH8d$1nMx@g#ZHR~ z+gVTi{{3>#15eNK;l5)m=CuKZ-KsNo6m2BAAQ!k2H8WECH49vxEmA&{G4%7SGn@kc ztc9-L=Z5_b;r{SD8(;|F??Fr@$a{HyAn3e(G9LV#f+oP&WVOL%cMhy7uZuxRE(Tg! z_RAfefRX9y&E3E!k)&K_0pmE1#NiuY2&kE|@#TM?V<7u$J%fGto8zFQG+MpsEgrR2 z?}UTc34WjUntf%(jKtqhwvtEyFKfil3{QIbG8yemjcZOG&af@K%4f?-*jJeuZZ(qW zO(Mp*&=RT@ARSXhEvmGfSgZaWueYslQN+h6uIjSe=IB;DMz<_u($@E%#I*j~U-Asz zcyW-Qn@iI8%Ep_<3`Q&k&p#8DuHN>-w>VXz)oQ9xjZ>+R$=#T89Zc$2j}u^}-!U6i z)3~lm+jgPS_VsO1WYoPx%%uwQQcPWN&!?+2rJ_8iAfi}ob`#~RD`UfnD-yf=4#>*w zaykFs_Pge$ch`19qX4wVvLzMR4eA?~d&avdMkC2Zw&$z84i|*45qBk$k!9VjIS2Cs z4|Vr9rv%jGv%I8rs%J_|fZVWyX|Tf!@{*hw2LmYh7gn;(lX=Uy<#Y1l(aB%Ysxl+a z5XYGeRV0(x=NA{VKON=)I0Ob$RQKyt|H**HATpA(pkuo>*MoW~eWs7_o8>LISjG!g zb}v?g(}g00PIm7dOeD34o>=nMGtqFv#c7!h49!6`p{%l)M93EQV9$zd6hv(|2^)eN9+bNRvpkQp>tVR~&z}%?&f8~X) zpQ6@iv*Dp$dbhwbE2_BChb_1guRL;D!(`&l5xD2`DBI7kn7XP{KcWL&Fn9=*OG$mWxv@uyL?UmKl)Od|+>`#v0bXvWyh{L*wq2^!0e9?N~DtC5?-& zlh5z}^C!mBQzkdfoF+9qN4b5@R0{$jiuvaSP{0q1jZ3p#72;x1hW{0C-5aSLe#;xo zWAi7T?v5W&&ASsNd~VCe!{qZY*q6M)1ljn-rk7VBO9DuYhGt45iN!N3BrKe5(sLe3 zF3j(@oYfVzKkIf^<#p3g!!msD)gpOO24rW+$VyKC-mzAThg+k&JimK>i(@rAyY#g+ zyz9#N_%S}-l>3pbVQxB}!P!~#d8YmzQ?<|U^F}{R+5CF9^24a(onlC*f0wc4YvP+S zqpLJB8E(W*psB@Xg0C@0R+j#|L_dYK_07$VjdAp6B0kr4I!SEMRZ(|9=&+&8$25A4 zo?-2_{$kl$Xhs19xMr=ZnXJ#chagdv9a)4AWYXc)Z5Ng@ZKIRq>6qd zKU#dV$ANq{TjL~qx!g*u2#^Ah@LXpoq%Z7F*oB6NbI;pPlsr{P6CvaFbic6GV~wMw%RRgC9!YJy0ObtX zt=ZQ8A1|MqKw^dJl0Sd`yq9L%{MPjSdxl22{w&{`MyYzMZ>naie&Xf@yzdtTKgbAZ z*r3$(Xa4=${1<*)hB#JnZBlY;{wqD0KqpUdw{?T$j@D4zj zQTEpgL;+KOM_){ za&RbQj~0zvVF1SsZ*YgJ1I}@s5Fo(h<$786Ltk?`?M+FCYtJ@}OO7gWfhkCS<#C(B z4=3=sA%lH5-`mC@HE4GA$qu5pymq%+JU&h2eoz&Y5=dp|=N})Q43_5HohVI>iZb`X zdHF*MkXzCQn!M~bD0{MHigPVKwc=ss$xTt-jXd7rWnF@Y$}5%)-pI z!+E(`bjl}Do?Om15NWl94dl`~1bmmt{o<{M!=h1&j)et7ZT8mM4zr{TI5{~%M_&hd z6L9nlS969AIcv!%s^`l;xa>HOK80d*Yz(LKn9P`ZD&Joe`_;Mbn~yINWMyPf#u~ay z=VGKRZ|>4K;nU~m;HR^<8FG4iHwAvlV&5M7`MNGwV_mD+y!ki}yO!p#p`qcICA@0b zq8Zc*7_b7n#RWE<*Iws)f!lIa6SvTq+!9nzYJYu$UqsYxt^%nC+wdw(WCodJm~pCp zd1RztmwEN2H&EqPPp|L-V`Kt#%M_Vo?P(ai>Kzdc>8*B)!=BN!E|*7k<1RWB*8~ab z#Rvq#XbB@zQB#3(WZRke<7gx&epr`LH4x*4AJ4oY#(fcOLlKJBCssVpuKjahvWJ0* zKat$8%4fG*i6$5n7N0(IOJGrGD^luII%3`l?`-ZyYtF#b)UnSh%=oenV;m!Id2&ZT z@DQ_|d1@5-qjWqc$0$Ew#BSbEcXlqRt&LZt%y%zs;d8t4jotu;Q`>>)&%)&lE zQS7tL=>*v#Yf7!j4Sj)w{!1coy!L;^tqFe=j;q)k?c#J{^GW8V@*XzfZo*$`(487_aE2l{5 zU!1t}jBKB2hig;C6JZdu$J^y{koXGm3+VXTJTjz#(X#;a11gP_f1aXxkPg}>nJ?U$ zw1GNA_u>!kD@Oqf3xB_SfqBx!6@}x(pon3UV)aaGNkt(CHbHz5j~gksZr*?xPMD?2 z%pW9$+>saC`PqjEgEr8feKI8Hd#p|}b-)&dfz?$uICeZV zUA=ieQmp9Sl7j*(>QwoB^e`@dNFZv@|^YWOl@G-XgMWb zxl!pIPA-nx+hK_%oKWcDM5*9I%H73sHbX2C8_->A4O{MiPgr9=p~7#h|N8D-C7t_F zih!+p)Q=w?XHy~Rt_SRl-=_ut%g<0k=kUd_uCcMPp<#v3yb^XyD<9qevXxA@#b`C| z)>~>FNQfaadoSFaTrjb)@WbY1`j*uB_>UzciOC(759L!u%IyE+ExdX^H!Hidv!UIj zOV7f}$T;%hwI`75C#$DfIXF0;KX(9Z+b_GtUs~|zVI1%m^Ko`%Hq>PXM^%*t-Dz7_$tpl8oQ>g(&xWLiLV4(rSXG>lHo?VqdGiQ8LmI^4+9 zO^z9!|7vrA)&Z)a@jRsQ_-Uy+2}OE_dU5}xt&Gf0A>7Yp{{(P4U)e1$#r(InrVnTg^nN?SQV=PwQ6pU%;kFSNyHNS5mU~2r0P96EUNCa#v)A8zLz_0~|1hMT{X{ z?(T$*6--ew?swYxaJ41`5H4}DyNgxD^G^X2YA~3tcWe&C`4Rg7Y@oY_q=btDO;IMd zPhU_<%DveLuD%LiX!dGo3@fz-mjP1^48XylJ25bHa#vUFHAbfU&ZL5MD{5Y?^`blS zmmN@j6-|~=sVtV0ahSHZiCigArJ~k=IzpTdDCUlqeI#H-4Fq5cVuof4?` z<o<}skXMze#iuC9fAPkyRwrZszBh+g$D zSy*fWMhVYu?YDpM8B(+U;qI=U?puBxd3L z(pruxv!L6~S8M@yPTk^hV42((oU0wq*AwtlZu;>xOruW7*4rCqY#gO)do>FzOm7mg zF}jm=gtri$VX?jo&BK>2X3Q?n?fn0up)uj4Q9PRX9*a&MkH_Jilj$kN8L?E+onv?*gL+O zo%rbx)VnPTpuw?&X=iY!s(W+=9~i~l?H_DK(*1zI1d4*cfoBOXOnMp|x{9M3CjZO% zVLQ@Vujjw5RZj#Y+oO&fFdr`%6xeRf3oC`#MaZe}NJ-y`Vxkp=VfPIU^$tTRivGN= z7thz%=wkwnL3EY`qV*%9qUz$~U*Asp;D+?HZc>{MU-dcjjsS`aHPh%VG8Z96z{u8* z4s4jkgRnusd@=`;)l%1BA5ehArEcfm9IG6aR7cS_Zt$w-v(wVa+<7*98#eGM3 zJT(riz1FVS{N2AmAB?r%;JW|rVRNlh617mZhyxaUcidx1KtNz;R}K<&#;4eG+!+TAUpIooHkLqI}zv6}u z)nYydR`r1deM~^=b}N68eu8|h!5PV&IMDXS5B}_3Z!Z&a!Uou|=Niu_8;t_9q(%F!tk`frHaa=4PHOn7Jv3?gA&S?Mc$ z2P@RngaOLARd?OVPkw&~SkaurhXlp%TMu1}!Sh0S4p3oUM>>Vv_Rr?=H;WO%pksGk z4FZDDEMUY(s79>*Gmy2WQ$!APljRqvG8!<@Pv715gOUF8ZLQ>j*~Uj9?lTR%y1LRX zRWFBbISY{X5MdyTae^|vy1H8NgVBVqt*yR{jMcFt_}WVg{t%jgPCzRuON-OrE8@kb z#r*(g*Uv}bq^8M2s&S5LAz%?mv4XpphY4Q>>i#$qsH~_M32Fcr^c8l}%0~(g^!IBp ztAU))(urAvIR>zJM2U(2<Sy7Q{F!FhYEVi~2<;kY6Pn3G5;Lo}E|Iy-u1ll#}Ba>Up* z>gwt$rc1iRN#v6FBC`Gnx*e#weFAS7_@khV1C90-3no_44fBDP*`5L;-mTBZJF}lQ zJ%r!VLwvGJ^#n&c=JhgFC7QoQgogvm!Hwtg3Jy(=-`~Q`J~eBQI<&a-Upv0mQT~n} z$qHE#RvGtMd8M_S@6%GSk{Tz7EGWTpe6-}?p*1}XgcAUf@OY46x7-Ei$)&?ftv9z- z7-DP8;FM&H4jMwLD4x|2)ikTR3d^|mqQHHwDLQSe;MD_m^`aOM$mquF9Zt_Vys!q6 zc+^VT zjGRgy**{NWo#VER^H@hm@VS(b5bJ^GS;4YKc}kea)mAxotK0RO30$w%Zt=V?x0;KC z;?C2(JU_qF^C!MZ#X`hBkL-Ll@a+T^~5 zlauQHD&W{;D?ge(0#meUn9vlET0p!*ql!tuMszf&Ij6dQ)G=teR2b-&l=Pk7T&H7e zfk#DriB<4@^UxAWvC!bTuIrDCFds@d+3TI}CwRCz>UfyG|E!5IzM_8b+X6bq1IRz$ z29p~wu@iA)k0CsY+tS`sBOC<2!fuEe1eqX0x88BTsh(RBg96qHoIRdrTLQ*wmxpoX zRr=L@3=H=R2EH@34~mlqKFTU^^%70(rXkR4dO6}oQ|T#&RIh`1w-2)u6gsuGVy&IV zl@gJ}ye1R3B6lzkUE3+QFxl{ltf-mF<~%kp)9PuoK;`0bt&k^Ri2tpF!rQ~*%f<@z zWT}tepw`&V|25?N`4JxFTd3E_i$lOcVx88C&E@`wF+dU6^W)id#0VmYd2BZJp88w| zI`XAdtZy8aDbYabQox0!lT>NJt{FwHs|aBKDK}aNbJqPwB(Eg{!7Z+F|vW!ARl6 z+&_jllj8uBDCBVsyso@J#QHExGX85{ zQ1tLZD_x|y=Noa0`FKTKYBiIyx%q`mmMYUf}L#oBQGRZn*Ww54S;PcMoYjJw58fCZ<*(Q4}b3 zd{fw-d-uS-aq6-DH8aQ6rrdIsoGH|Ji5H=}oDgV5z@cvmMmTE1FjMnU*!6boe1G<} zg;}sGR}6s{`DAfM9mD znI(Kd;&x&yiiO zTMzsc*6hJf$1Aa+D0aI_jQu^DEpH9YSVFTvU0ZZU^X$_q)A|`F8=Ei#!=%d2)wK)t z9R=)bud#X#efXd`3JS`6i;o3pwR*!F0XSasmtccAI-Mp#?W|ZW7t02t^N06wOPijb9C3ONRoog_T}Kk2OTp`;xHd_}OZYZnGy6l`~=o!TV7=$>l4&;FYh5mJr(d zb-yi=a zSM1~EODt^VE^hVri~mmA^=hqxfa}pIVtc$=2fU)Qf@wS3VtwVd==-`0^YYyH6E+{lIN6Jpt|Lyz#_TyWq%PWnovrHmCCwE`(;|cgjcEY~+KSsJM zU#v4z=N4oLrtJl)}_$Ll-pC7Jd`eg76L(KYE+HD&}ra#p=x#`jHH#+Auk z&_;)jnd$1hQI6O%!cP~^m8`-I&i6E!V}bmGd2}HwD=X@7G8R`Vs#ZY{+d7WUH)5GA z(XJmDA4dSD9VqZj`WBmI1|YgrnS}|_k#ki#MCT7=m6uM_X?s^a zFE>}mMv@s}TB&Kdy)BR$D8>p5YKVP!a?3&f_|CyxeWcOXgGk=kyh6c>BXeT_7HvOd`kdH34{paO_8_|TX&SkwwKWRZi0+AM%e^&-G{PI5l DW|9p! literal 14835 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 literal 14923 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 diff --git a/frontend/__snapshots__/scenes-other-billing--billing-unsubscribe-modal--dark.png b/frontend/__snapshots__/scenes-other-billing--billing-unsubscribe-modal--dark.png index f1495e24cf60f79fcc284870484315e518463935..83009eedca75cc0411696e42b80ad1c5f005e767 100644 GIT binary patch literal 53381 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

    Pk~;s<9%;$iEcY*YUUIWI34H+NH8 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 pz=|CyB4>uWQ+HCv1Si@)`#}}=@!2Z~fL*D|b literal 53435 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�$LJX5J4`0+eUS-iY22_-cfotRE5JZi;oiE_ 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 PA|l9Es_8L~R#QM!d-#*56Z^xMI~f#vAY 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 +} diff --git a/frontend/src/lib/components/UniversalFilters/UniversalFilters.tsx b/frontend/src/lib/components/UniversalFilters/UniversalFilters.tsx index b59471de24cc0..117c6b678c59e 100644 --- a/frontend/src/lib/components/UniversalFilters/UniversalFilters.tsx +++ b/frontend/src/lib/components/UniversalFilters/UniversalFilters.tsx @@ -3,7 +3,7 @@ import { LemonButton, LemonButtonProps, LemonDropdown, Popover } from '@posthog/ import { BindLogic, useActions, useValues } from 'kea' import { useState } from 'react' -import { ActionFilter, AnyPropertyFilter, FilterLogicalOperator } from '~/types' +import { UniversalFiltersGroup, UniversalFilterValue } from '~/types' import { TaxonomicPropertyFilter } from '../PropertyFilters/components/TaxonomicPropertyFilter' import { PropertyFilters } from '../PropertyFilters/PropertyFilters' @@ -14,14 +14,6 @@ import { UniversalFilterButton } from './UniversalFilterButton' import { universalFiltersLogic } from './universalFiltersLogic' import { isEditableFilter, isEventFilter } from './utils' -export interface UniversalFiltersGroup { - type: FilterLogicalOperator - values: UniversalFiltersGroupValue[] -} - -export type UniversalFiltersGroupValue = UniversalFiltersGroup | UniversalFilterValue -export type UniversalFilterValue = AnyPropertyFilter | ActionFilter - type UniversalFiltersProps = { rootKey: string group: UniversalFiltersGroup | null @@ -160,7 +152,7 @@ const AddFilterButton = (props: Omit setDropdownOpen(!dropdownOpen)} {...props} > - Add filter + {props?.title || 'Add filter'} ) diff --git a/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.test.ts b/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.test.ts index 82b52b2e38053..5434ff37f76e1 100644 --- a/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.test.ts +++ b/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.test.ts @@ -1,10 +1,15 @@ import { expectLogic } from 'kea-test-utils' import { initKeaTests } from '~/test/init' -import { AnyPropertyFilter, FilterLogicalOperator, PropertyFilterType, PropertyOperator } from '~/types' +import { + AnyPropertyFilter, + FilterLogicalOperator, + PropertyFilterType, + PropertyOperator, + UniversalFiltersGroup, +} from '~/types' import { TaxonomicFilterGroup, TaxonomicFilterGroupType } from '../TaxonomicFilter/types' -import { UniversalFiltersGroup } from './UniversalFilters' import { universalFiltersLogic } from './universalFiltersLogic' const propertyFilter: AnyPropertyFilter = { diff --git a/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.ts b/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.ts index 8afb3cfcfc1cc..943688c46f3b7 100644 --- a/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.ts +++ b/frontend/src/lib/components/UniversalFilters/universalFiltersLogic.ts @@ -6,10 +6,17 @@ import { import { taxonomicFilterGroupTypeToEntityType } from 'scenes/insights/filters/ActionFilter/ActionFilterRow/ActionFilterRow' import { propertyDefinitionsModel } from '~/models/propertyDefinitionsModel' -import { ActionFilter, FilterLogicalOperator, PropertyFilterType } from '~/types' +import { + ActionFilter, + FeaturePropertyFilter, + FilterLogicalOperator, + PropertyFilterType, + PropertyOperator, + UniversalFiltersGroup, + UniversalFiltersGroupValue, +} from '~/types' import { TaxonomicFilterGroup, TaxonomicFilterGroupType, TaxonomicFilterValue } from '../TaxonomicFilter/types' -import { UniversalFiltersGroup, UniversalFiltersGroupValue } from './UniversalFilters' import type { universalFiltersLogicType } from './universalFiltersLogicType' export const DEFAULT_UNIVERSAL_GROUP_FILTER: UniversalFiltersGroup = { @@ -52,7 +59,7 @@ export const universalFiltersLogic = kea([ addGroupFilter: ( taxonomicGroup: TaxonomicFilterGroup, propertyKey: TaxonomicFilterValue, - item: { propertyFilterType?: PropertyFilterType; name?: string } + item: { propertyFilterType?: PropertyFilterType; name?: string; key?: string } ) => ({ taxonomicGroup, propertyKey, @@ -98,6 +105,7 @@ export const universalFiltersLogic = kea([ TaxonomicFilterGroupType.Cohorts, TaxonomicFilterGroupType.Elements, TaxonomicFilterGroupType.HogQLExpression, + TaxonomicFilterGroupType.FeatureFlags, ].includes(t) ), ], @@ -112,26 +120,39 @@ export const universalFiltersLogic = kea([ addGroupFilter: ({ taxonomicGroup, propertyKey, item }) => { const newValues = [...values.filterGroup.values] - const propertyType = item.propertyFilterType ?? taxonomicFilterTypeToPropertyFilterType(taxonomicGroup.type) - if (propertyKey && propertyType) { - const newPropertyFilter = createDefaultPropertyFilter( - {}, - propertyKey, - propertyType, - taxonomicGroup, - values.describeProperty - ) - newValues.push(newPropertyFilter) + if (taxonomicGroup.type === TaxonomicFilterGroupType.FeatureFlags) { + if (!item.key) { + return + } + const newFeatureFlagFilter: FeaturePropertyFilter = { + type: PropertyFilterType.Feature, + key: item.key, + operator: PropertyOperator.Exact, + } + newValues.push(newFeatureFlagFilter) } else { - const entityType = taxonomicFilterGroupTypeToEntityType(taxonomicGroup.type) - if (entityType) { - const newEntityFilter: ActionFilter = { - id: propertyKey, - name: item?.name ?? '', - type: entityType, - } + const propertyType = + item.propertyFilterType ?? taxonomicFilterTypeToPropertyFilterType(taxonomicGroup.type) + if (propertyKey && propertyType) { + const newPropertyFilter = createDefaultPropertyFilter( + {}, + propertyKey, + propertyType, + taxonomicGroup, + values.describeProperty + ) + newValues.push(newPropertyFilter) + } else { + const entityType = taxonomicFilterGroupTypeToEntityType(taxonomicGroup.type) + if (entityType) { + const newEntityFilter: ActionFilter = { + id: propertyKey, + name: item?.name ?? '', + type: entityType, + } - newValues.push(newEntityFilter) + newValues.push(newEntityFilter) + } } } actions.setGroupValues(newValues) diff --git a/frontend/src/lib/components/UniversalFilters/utils.ts b/frontend/src/lib/components/UniversalFilters/utils.ts index f8b63af80ce5e..56eaa52f5f6d9 100644 --- a/frontend/src/lib/components/UniversalFilters/utils.ts +++ b/frontend/src/lib/components/UniversalFilters/utils.ts @@ -1,7 +1,15 @@ -import { ActionFilter, FilterLogicalOperator, LogEntryPropertyFilter, RecordingPropertyFilter } from '~/types' +import { + ActionFilter, + FeaturePropertyFilter, + FilterLogicalOperator, + LogEntryPropertyFilter, + RecordingPropertyFilter, + UniversalFiltersGroup, + UniversalFiltersGroupValue, + UniversalFilterValue, +} from '~/types' import { isCohortPropertyFilter } from '../PropertyFilters/utils' -import { UniversalFiltersGroup, UniversalFiltersGroupValue, UniversalFilterValue } from './UniversalFilters' export function isUniversalGroupFilterLike(filter?: UniversalFiltersGroupValue): filter is UniversalFiltersGroup { return filter?.type === FilterLogicalOperator.And || filter?.type === FilterLogicalOperator.Or @@ -15,6 +23,9 @@ export function isEventFilter(filter: UniversalFilterValue): filter is ActionFil export function isActionFilter(filter: UniversalFilterValue): filter is ActionFilter { return filter.type === 'actions' } +export function isFeatureFlagFilter(filter: UniversalFilterValue): filter is FeaturePropertyFilter { + return filter.type === 'feature' +} export function isRecordingPropertyFilter(filter: UniversalFilterValue): filter is RecordingPropertyFilter { return filter.type === 'recording' } diff --git a/frontend/src/lib/constants.tsx b/frontend/src/lib/constants.tsx index cb2a0ba0d42e7..acdbae72b8530 100644 --- a/frontend/src/lib/constants.tsx +++ b/frontend/src/lib/constants.tsx @@ -219,6 +219,7 @@ export const FEATURE_FLAGS = { BILLING_PAYMENT_ENTRY_IN_APP: 'billing-payment-entry-in-app', // owner: @zach LEGACY_ACTION_WEBHOOKS: 'legacy-action-webhooks', // owner: @mariusandra #team-cdp SESSION_REPLAY_URL_TRIGGER: 'session-replay-url-trigger', // owner: @richard-better #team-replay + REPLAY_TEMPLATES: 'replay-templates', // owner: @raquelmsmith #team-replay } as const export type FeatureFlagKey = (typeof FEATURE_FLAGS)[keyof typeof FEATURE_FLAGS] diff --git a/frontend/src/lib/lemon-ui/LemonCard/LemonCard.tsx b/frontend/src/lib/lemon-ui/LemonCard/LemonCard.tsx index 0ac8c31c817ee..c7f86768b3bfe 100644 --- a/frontend/src/lib/lemon-ui/LemonCard/LemonCard.tsx +++ b/frontend/src/lib/lemon-ui/LemonCard/LemonCard.tsx @@ -1,5 +1,9 @@ import './LemonCard.scss' +import { IconX } from '@posthog/icons' + +import { LemonButton } from '../LemonButton' + export interface LemonCardProps { hoverEffect?: boolean className?: string @@ -7,6 +11,8 @@ export interface LemonCardProps { onClick?: () => void focused?: boolean 'data-attr'?: string + closeable?: boolean + onClose?: () => void } export function LemonCard({ @@ -15,16 +21,31 @@ export function LemonCard({ children, onClick, focused, + closeable, + onClose, ...props }: LemonCardProps): JSX.Element { return (
    + {closeable ? ( +
    + } + onClick={(e) => { + e.stopPropagation() + onClose?.() + }} + type="tertiary" + size="xsmall" + /> +
    + ) : null} {children}
    ) diff --git a/frontend/src/scenes/error-tracking/errorTrackingLogic.ts b/frontend/src/scenes/error-tracking/errorTrackingLogic.ts index 6db23821973ba..c1a847a8ab647 100644 --- a/frontend/src/scenes/error-tracking/errorTrackingLogic.ts +++ b/frontend/src/scenes/error-tracking/errorTrackingLogic.ts @@ -1,11 +1,10 @@ import type { LemonSegmentedButtonOption } from '@posthog/lemon-ui' import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' -import { UniversalFiltersGroup } from 'lib/components/UniversalFilters/UniversalFilters' import { FEATURE_FLAGS } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { DateRange } from '~/queries/schema' -import { FilterLogicalOperator } from '~/types' +import { FilterLogicalOperator, UniversalFiltersGroup } from '~/types' import type { errorTrackingLogicType } from './errorTrackingLogicType' diff --git a/frontend/src/scenes/error-tracking/queries.ts b/frontend/src/scenes/error-tracking/queries.ts index 0358e9096fd6d..6061773ecc562 100644 --- a/frontend/src/scenes/error-tracking/queries.ts +++ b/frontend/src/scenes/error-tracking/queries.ts @@ -1,4 +1,3 @@ -import { UniversalFiltersGroup } from 'lib/components/UniversalFilters/UniversalFilters' import { dayjs } from 'lib/dayjs' import { range } from 'lib/utils' @@ -11,7 +10,7 @@ import { InsightVizNode, NodeKind, } from '~/queries/schema' -import { AnyPropertyFilter, BaseMathType, ChartDisplayType, PropertyGroupFilter } from '~/types' +import { AnyPropertyFilter, BaseMathType, ChartDisplayType, PropertyGroupFilter, UniversalFiltersGroup } from '~/types' export type SparklineConfig = { value: number diff --git a/frontend/src/scenes/session-recordings/SessionRecordings.tsx b/frontend/src/scenes/session-recordings/SessionRecordings.tsx index bccee886cceba..a38b088878c60 100644 --- a/frontend/src/scenes/session-recordings/SessionRecordings.tsx +++ b/frontend/src/scenes/session-recordings/SessionRecordings.tsx @@ -1,5 +1,5 @@ import { IconEllipsis, IconGear } from '@posthog/icons' -import { LemonButton, LemonMenu } from '@posthog/lemon-ui' +import { LemonBadge, LemonButton, LemonMenu } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { router } from 'kea-router' import { authorizedUrlListLogic, AuthorizedUrlListType } from 'lib/components/AuthorizedUrlList/authorizedUrlListLogic' @@ -26,6 +26,7 @@ import { SessionRecordingsPlaylist } from './playlist/SessionRecordingsPlaylist' import { SavedSessionRecordingPlaylists } from './saved-playlists/SavedSessionRecordingPlaylists' import { savedSessionRecordingPlaylistsLogic } from './saved-playlists/savedSessionRecordingPlaylistsLogic' import { humanFriendlyTabName, sessionReplaySceneLogic } from './sessionReplaySceneLogic' +import SessionRecordingTemplates from './templates/SessionRecordingTemplates' function Header(): JSX.Element { const { guardAvailableFeature } = useValues(upgradeModalLogic) @@ -192,13 +193,15 @@ function MainPanel(): JSX.Element { ) : tab === ReplayTabs.Errors ? ( + ) : tab === ReplayTabs.Templates ? ( + ) : null} ) } function PageTabs(): JSX.Element { - const { tab, tabs } = useValues(sessionReplaySceneLogic) + const { tab, tabs, shouldShowNewBadge } = useValues(sessionReplaySceneLogic) return ( router.actions.push(urls.replay(t as ReplayTabs))} tabs={tabs.map((replayTab) => { return { - label: humanFriendlyTabName(replayTab), + label: ( + <> + {humanFriendlyTabName(replayTab)} + {replayTab === ReplayTabs.Templates && shouldShowNewBadge && ( + + )} + + ), key: replayTab, } })} diff --git a/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFilters.tsx b/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFilters.tsx index d8021c5dab0e9..6dfa6d007949f 100644 --- a/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFilters.tsx +++ b/frontend/src/scenes/session-recordings/filters/RecordingsUniversalFilters.tsx @@ -2,7 +2,7 @@ import clsx from 'clsx' import { useActions, useMountedLogic, useValues } from 'kea' import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import UniversalFilters, { UniversalFiltersGroup } from 'lib/components/UniversalFilters/UniversalFilters' +import UniversalFilters from 'lib/components/UniversalFilters/UniversalFilters' import { universalFiltersLogic } from 'lib/components/UniversalFilters/universalFiltersLogic' import { isUniversalGroupFilterLike } from 'lib/components/UniversalFilters/utils' import { useEffect, useState } from 'react' @@ -11,7 +11,7 @@ import { TestAccountFilter } from 'scenes/insights/filters/TestAccountFilter' import { actionsModel } from '~/models/actionsModel' import { cohortsModel } from '~/models/cohortsModel' import { AndOrFilterSelect } from '~/queries/nodes/InsightViz/PropertyGroupFilters/AndOrFilterSelect' -import { RecordingUniversalFilters } from '~/types' +import { RecordingUniversalFilters, UniversalFiltersGroup } from '~/types' import { DurationFilter } from './DurationFilter' diff --git a/frontend/src/scenes/session-recordings/playlist/playlistUtils.ts b/frontend/src/scenes/session-recordings/playlist/playlistUtils.ts index 357c1558d9e3d..23a523d1e1c35 100644 --- a/frontend/src/scenes/session-recordings/playlist/playlistUtils.ts +++ b/frontend/src/scenes/session-recordings/playlist/playlistUtils.ts @@ -2,7 +2,6 @@ import { router } from 'kea-router' import api from 'lib/api' import { convertPropertyGroupToProperties, isValidPropertyFilter } from 'lib/components/PropertyFilters/utils' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { UniversalFilterValue } from 'lib/components/UniversalFilters/UniversalFilters' import { isActionFilter, isEventFilter } from 'lib/components/UniversalFilters/utils' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { getCoreFilterDefinition } from 'lib/taxonomy' @@ -16,7 +15,7 @@ import { PLAYLIST_LIMIT_REACHED_MESSAGE } from 'scenes/session-recordings/sessio import { urls } from 'scenes/urls' import { cohortsModelType } from '~/models/cohortsModelType' -import { PropertyOperator, SessionRecordingPlaylistType } from '~/types' +import { PropertyOperator, SessionRecordingPlaylistType, UniversalFilterValue } from '~/types' function getOperatorSymbol(operator: PropertyOperator | null): string { if (!operator) { diff --git a/frontend/src/scenes/session-recordings/sessionReplaySceneLogic.ts b/frontend/src/scenes/session-recordings/sessionReplaySceneLogic.ts index 492f65fea4038..c2dce12e7f9e0 100644 --- a/frontend/src/scenes/session-recordings/sessionReplaySceneLogic.ts +++ b/frontend/src/scenes/session-recordings/sessionReplaySceneLogic.ts @@ -1,4 +1,4 @@ -import { actions, connect, kea, path, reducers, selectors } from 'kea' +import { actions, connect, kea, listeners, path, reducers, selectors } from 'kea' import { actionToUrl, router, urlToAction } from 'kea-router' import { FEATURE_FLAGS, SESSION_RECORDINGS_PLAYLIST_FREE_COUNT } from 'lib/constants' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' @@ -17,6 +17,8 @@ export const humanFriendlyTabName = (tab: ReplayTabs): string => { return 'Recordings' case ReplayTabs.Playlists: return 'Playlists' + case ReplayTabs.Templates: + return 'What to watch' default: return capitalizeFirstLetter(tab) } @@ -31,6 +33,7 @@ export const sessionReplaySceneLogic = kea([ }), actions({ setTab: (tab: ReplayTabs = ReplayTabs.Home) => ({ tab }), + hideNewBadge: true, }), reducers(() => ({ tab: [ @@ -39,6 +42,21 @@ export const sessionReplaySceneLogic = kea([ setTab: (_, { tab }) => tab, }, ], + shouldShowNewBadge: [ + true as boolean, + { persist: true }, + { + hideNewBadge: () => false, + }, + ], + })), + + listeners(({ actions }) => ({ + setTab: ({ tab }) => { + if (tab === ReplayTabs.Templates) { + actions.hideNewBadge() + } + }, })), actionToUrl(({ values }) => { @@ -52,7 +70,10 @@ export const sessionReplaySceneLogic = kea([ (s) => [s.featureFlags], (featureFlags) => { const hasErrorClustering = !!featureFlags[FEATURE_FLAGS.REPLAY_ERROR_CLUSTERING] - return Object.values(ReplayTabs).filter((tab) => tab != ReplayTabs.Errors || hasErrorClustering) + const hasTemplates = !!featureFlags[FEATURE_FLAGS.REPLAY_TEMPLATES] + return Object.values(ReplayTabs).filter((tab) => + tab == ReplayTabs.Errors ? hasErrorClustering : tab == ReplayTabs.Templates ? hasTemplates : true + ) }, ], breadcrumbs: [ diff --git a/frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx b/frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx new file mode 100644 index 0000000000000..0af2e410aecc9 --- /dev/null +++ b/frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx @@ -0,0 +1,207 @@ +import { LemonButton, LemonCard, LemonInput, LemonLabel, Link } from '@posthog/lemon-ui' +import { useActions, useMountedLogic, useValues } from 'kea' +import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' +import UniversalFilters from 'lib/components/UniversalFilters/UniversalFilters' +import { universalFiltersLogic } from 'lib/components/UniversalFilters/universalFiltersLogic' +import { isUniversalGroupFilterLike } from 'lib/components/UniversalFilters/utils' + +import { actionsModel } from '~/models/actionsModel' +import { + FeaturePropertyFilter, + FilterLogicalOperator, + ReplayTemplateCategory, + ReplayTemplateType, + ReplayTemplateVariableType, +} from '~/types' + +import { replayTemplates } from './availableTemplates' +import { sessionReplayTemplatesLogic } from './sessionRecordingTemplatesLogic' + +interface RecordingTemplateCardProps { + template: ReplayTemplateType + category: ReplayTemplateCategory +} + +const allCategories: ReplayTemplateCategory[] = replayTemplates + .flatMap((template) => template.categories) + .filter((category, index, self) => self.indexOf(category) === index) + +const NestedFilterGroup = ({ + rootKey, + buttonTitle, + selectOne, +}: { + rootKey: string + buttonTitle?: string + selectOne?: boolean +}): JSX.Element => { + const { filterGroup } = useValues(universalFiltersLogic) + const { replaceGroupValue, removeGroupValue } = useActions(universalFiltersLogic) + + return ( +
    +
    + {filterGroup.values.map((filterOrGroup, index) => { + return isUniversalGroupFilterLike(filterOrGroup) ? ( + + + + ) : ( + removeGroupValue(index)} + onChange={(value) => replaceGroupValue(index, value)} + /> + ) + })} + {selectOne && filterGroup.values.length === 0 && ( +
    + +
    + )} +
    +
    + ) +} + +const SingleTemplateVariable = ({ + variable, + ...props +}: RecordingTemplateCardProps & { + variable: ReplayTemplateVariableType +}): JSX.Element | null => { + const { setVariable } = useActions(sessionReplayTemplatesLogic(props)) + useMountedLogic(actionsModel) + + return variable.type === 'pageview' ? ( +
    + {variable.name} + setVariable({ ...variable, value: e })} + size="small" + /> +
    + ) : ['event', 'flag', 'person-property'].includes(variable.type) ? ( +
    + {variable.name} + { + variable.type === 'flag' + ? setVariable({ ...variable, value: (thisFilterGroup.values[0] as FeaturePropertyFilter).key }) + : setVariable({ ...variable, filterGroup: thisFilterGroup.values[0] }) + }} + > + + +
    + ) : null +} + +const TemplateVariables = (props: RecordingTemplateCardProps): JSX.Element => { + const { navigate } = useActions(sessionReplayTemplatesLogic(props)) + const { variables, areAnyVariablesTouched } = useValues(sessionReplayTemplatesLogic(props)) + return ( +
    + {variables.map((variable) => ( + + ))} +
    + navigate()} + type="primary" + className="mt-2" + disabledReason={ + !areAnyVariablesTouched ? 'Please set a value for at least one variable' : undefined + } + > + Apply filters + +
    +
    + ) +} + +const RecordingTemplateCard = (props: RecordingTemplateCardProps): JSX.Element => { + const { showVariables, hideVariables, navigate } = useActions(sessionReplayTemplatesLogic(props)) + const { variablesVisible, editableVariables } = useValues(sessionReplayTemplatesLogic(props)) + + return ( + { + editableVariables.length > 0 ? showVariables() : navigate() + }} + closeable={variablesVisible} + onClose={hideVariables} + focused={variablesVisible} + data-attr={`session-replay-template-${props.category}-${props.template.key}`} + > +
    +
    + {props.template.icon && ( +
    + {props.template.icon} +
    + )} +

    + showVariables()} className="text-primary"> + {props.template.name} + +

    +
    +

    {props.template.description}

    + {variablesVisible ? : null} +
    +
    + ) +} + +const SessionRecordingTemplates = (): JSX.Element => { + return ( +
    +

    Figure out what to watch

    +

    To get the most out of session replay, you just need to know where to start.

    +

    + Use our templates to find a focus area, then watch the filtered replays to see where users struggle, + what could be made more clear, and other ways to improve. +

    + {allCategories.map((category) => ( +
    +

    {category}

    +
    + {replayTemplates + .filter((template) => template.categories.includes(category)) + .map((template) => ( + + ))} +
    +
    + ))} +
    + ) +} + +export default SessionRecordingTemplates diff --git a/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx b/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx new file mode 100644 index 0000000000000..d01e6436142eb --- /dev/null +++ b/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx @@ -0,0 +1,219 @@ +import { + IconApp, + IconCursorClick, + IconFlag, + IconHandMoney, + IconPhone, + IconSearch, + IconThumbsDown, + IconUser, + IconVideoCamera, +} from '@posthog/icons' +import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' + +import { PropertyFilterType, PropertyOperator, ReplayTemplateType } from '~/types' + +export const replayTemplates: ReplayTemplateType[] = [ + { + key: 'signup-flow', + name: 'Signup flow', + description: 'Watch how users sign up for your website. Look for any areas or steps that cause friction.', + variables: [ + { + type: 'pageview', + name: 'Signup page URL', + key: 'signup-page-url', + value: '/signup', + description: 'Complete or partial URL', + }, + ], + categories: ['B2B'], + icon: , + }, + { + key: 'pricing-page', + name: 'Pricing page', + description: 'Watch how users navigate your pricing page. Look for any areas or steps that cause friction.', + variables: [ + { + type: 'pageview', + name: 'Pricing page URL', + key: 'pricing-page-url', + description: 'Complete or partial URL', + }, + ], + categories: ['B2B'], + icon: , + }, + { + key: 'upgrade-flow', + name: 'Upgrade / subscribe flow', + description: + 'Watch how users upgrade to the paid plan on your website. Look for any areas or steps that cause friction.', + variables: [ + { + type: 'pageview', + name: 'Upgrade / subscribe page URL', + key: 'upgrade-subscribe-page-url', + description: 'Complete or partial URL', + }, + { + type: 'event', + name: 'Upgrade / subscribe event', + key: 'upgrade-subscribe-event', + description: 'The event that triggers the upgrade / subscribe flow.', + }, + ], + categories: ['B2B'], + icon: , + }, + { + key: 'onboarding-flow', + name: 'Onboarding flow', + description: 'Watch how users onboard to your website. Look for any areas or steps that cause friction.', + variables: [ + { + type: 'pageview', + name: 'Onboarding page URL', + key: 'onboarding-page-url', + description: 'Complete or partial URL', + }, + ], + categories: ['B2B'], + icon: , + }, + { + key: 'feature-usage', + name: 'Feature usage', + description: + 'Think of a feature you want to improve. Watch how users interact with it, and see where they get stuck.', + variables: [ + { + type: 'event', + name: 'Feature event', + key: 'feature-event', + description: 'The event that indicates a user has interacted with the feature.', + }, + { + type: 'pageview', + name: 'Feature page URL', + key: 'feature-page-url', + description: 'Complete or partial URL where the feature is located.', + }, + ], + categories: ['B2B', 'B2C'], + icon: , + }, + { + key: 'purchase-flow', + name: 'Purchase flow', + description: 'Watch how users purchase from your website. Look for any areas or steps that cause friction.', + variables: [ + { + type: 'pageview', + name: 'Purchase page URL', + key: 'purchase-page-url', + description: 'Complete or partial URL', + }, + ], + categories: ['B2C'], + icon: , + }, + { + key: 'product-search', + name: 'Product search', + description: + 'Watch how users search for products on your website. Look for any areas or steps that cause friction.', + variables: [ + { + type: 'event', + name: 'Product search event', + key: 'product-search-event', + description: 'The event that indicates a user has searched for something on your website.', + }, + ], + categories: ['B2C'], + icon: , + }, + { + key: 'experiment', + name: 'A/B test results', + description: 'Watch how users interact with your A/B test. Look for any areas or steps that cause friction.', + variables: [ + { + type: 'flag', + name: 'Feature flag', + key: 'feature-flag', + description: 'The feature flag that you want to observe.', + }, + ], + categories: ['More'], + icon: , + }, + { + key: 'rageclicks', + name: 'Rageclicks', + description: 'See where users are "rageclicking" on your website to find things that don\'t work as expected.', + variables: [ + { + type: 'event', + name: 'Rageclick event', + key: 'rageclick-event', + description: 'The event that indicates a user has "rageclicked" on your website.', + noTouch: true, + filterGroup: { + id: '$rageclick', + name: '$rageclick', + type: TaxonomicFilterGroupType.Events, + }, + }, + ], + categories: ['More'], + icon: , + }, + { + key: 'scattershot', + name: 'Scattershot', + description: 'Watch all recent replays, and see where users are getting stuck.', + variables: [], + categories: ['More'], + icon: , + }, + { + key: 'person-property', + name: 'Person property', + description: 'Watch all replays for users with a specific property, like a specific email address.', + variables: [ + { + type: 'person-property', + name: 'Person property', + key: 'person-property', + description: 'The person property that you want to observe.', + }, + ], + categories: ['More'], + icon: , + }, + { + key: 'mobile-devices', + name: 'Mobile devices', + description: 'Watch all replays from mobile devices to look for problems with your responsive design.', + variables: [ + { + type: 'snapshot_source', + name: 'Mobile device', + key: 'mobile-device', + description: 'Users who used your website on a mobile device.', + noTouch: true, + filterGroup: { + key: 'snapshot_source', + value: ['mobile'], + operator: PropertyOperator.Exact, + type: PropertyFilterType.Recording, + }, + }, + ], + categories: ['More'], + icon: , + }, +] diff --git a/frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx b/frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx new file mode 100644 index 0000000000000..4a4af39534656 --- /dev/null +++ b/frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx @@ -0,0 +1,142 @@ +import { actions, events, kea, key, listeners, path, props, reducers, selectors } from 'kea' +import { router } from 'kea-router' +import { urls } from 'scenes/urls' + +import { + FilterLogicalOperator, + PropertyFilterType, + PropertyOperator, + RecordingUniversalFilters, + ReplayTabs, + ReplayTemplateCategory, + ReplayTemplateType, + ReplayTemplateVariableType, + UniversalFiltersGroupValue, +} from '~/types' + +import type { sessionReplayTemplatesLogicType } from './sessionRecordingTemplatesLogicType' + +const getPageviewFilterValue = (pageview: string): UniversalFiltersGroupValue => { + return { + key: 'visited_page', + value: pageview, + operator: PropertyOperator.IContains, + type: PropertyFilterType.Recording, + } +} + +const getFlagFilterValue = (flag: string): UniversalFiltersGroupValue => { + return { + id: '$feature_flag_called', + name: '$feature_flag_called', + type: 'events', + properties: [ + { + key: `$feature/${flag}`, + type: PropertyFilterType.Event, + value: ['false'], + operator: PropertyOperator.IsNot, + }, + { + key: `$feature/${flag}`, + type: PropertyFilterType.Event, + value: 'is_set', + operator: PropertyOperator.IsSet, + }, + { + key: '$feature_flag', + type: PropertyFilterType.Event, + value: flag, + operator: PropertyOperator.Exact, + }, + ], + } +} + +export interface ReplayTemplateLogicPropsType { + template: ReplayTemplateType + // one card can be in multiple categories, + // key on the category so that multiple instances of the same card are isolated + category: ReplayTemplateCategory +} + +export const sessionReplayTemplatesLogic = kea([ + path(() => ['scenes', 'session-recordings', 'templates', 'sessionReplayTemplatesLogic']), + props({} as ReplayTemplateLogicPropsType), + key((props) => `${props.category}-${props.template.key}`), + actions({ + setVariables: (variables: ReplayTemplateVariableType[]) => ({ variables }), + setVariable: (variable: ReplayTemplateVariableType) => ({ variable }), + navigate: true, + showVariables: true, + hideVariables: true, + }), + reducers(({ props }) => ({ + variables: [ + props.template.variables, + { + setVariables: (_, { variables }) => variables, + setVariable: (state, { variable }) => + state.map((v) => (v.key === variable.key ? { ...variable, touched: true } : v)), + }, + ], + variablesVisible: [ + false, + { + showVariables: () => true, + hideVariables: () => false, + }, + ], + })), + selectors({ + filterGroup: [ + (s) => [s.variables], + (variables) => { + const filters = variables + .map((variable) => { + if (variable.type === 'pageview' && variable.value) { + return getPageviewFilterValue(variable.value) + } + if (variable.type === 'flag' && variable.value) { + return getFlagFilterValue(variable.value) + } + if (['snapshot_source', 'event'].includes(variable.type) && variable.filterGroup) { + return variable.filterGroup + } + return undefined + }) + .filter((filter): filter is UniversalFiltersGroupValue => filter !== undefined) + + const filterGroup: Partial = { + filter_group: { + type: FilterLogicalOperator.And, + values: [ + { + type: FilterLogicalOperator.And, + values: filters, + }, + ], + }, + // TODO this should set order on the filter group after https://github.com/PostHog/posthog/pull/25701 + } + return filterGroup + }, + ], + areAnyVariablesTouched: [ + (s) => [s.variables], + (variables) => variables.some((v) => v.touched) || variables.some((v) => v.noTouch), + ], + editableVariables: [(s) => [s.variables], (variables) => variables.filter((v) => !v.noTouch)], + }), + listeners(({ values }) => ({ + navigate: () => { + const filterGroup = values.variables.length > 0 ? values.filterGroup : undefined + router.actions.push(urls.replay(ReplayTabs.Home, filterGroup)) + }, + })), + events(({ actions, props }) => ({ + afterMount: () => { + actions.setVariables(props.template.variables) + }, + })), +]) diff --git a/frontend/src/scenes/session-recordings/utils.ts b/frontend/src/scenes/session-recordings/utils.ts index 273152331b5a4..c7e4f61264ed3 100644 --- a/frontend/src/scenes/session-recordings/utils.ts +++ b/frontend/src/scenes/session-recordings/utils.ts @@ -1,6 +1,4 @@ -import { UniversalFiltersGroup, UniversalFilterValue } from 'lib/components/UniversalFilters/UniversalFilters' - -import { LegacyRecordingFilters, RecordingUniversalFilters } from '~/types' +import { LegacyRecordingFilters, RecordingUniversalFilters, UniversalFiltersGroup, UniversalFilterValue } from '~/types' export const isUniversalFilters = ( filters: RecordingUniversalFilters | LegacyRecordingFilters diff --git a/frontend/src/types.ts b/frontend/src/types.ts index e07f0597a2aac..1b97b03886f54 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -5,7 +5,6 @@ import { ChartDataset, ChartType, InteractionItem } from 'chart.js' import { LogicWrapper } from 'kea' import { DashboardCompatibleScenes } from 'lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' -import { UniversalFiltersGroup } from 'lib/components/UniversalFilters/UniversalFilters' import { BIN_COUNT_AUTO, DashboardPrivilegeLevel, @@ -669,6 +668,7 @@ export enum SavedInsightsTabs { } export enum ReplayTabs { + Templates = 'templates', Home = 'home', Playlists = 'playlists', Errors = 'errors', @@ -803,6 +803,7 @@ export interface GroupPropertyFilter extends BasePropertyFilter { export interface FeaturePropertyFilter extends BasePropertyFilter { type: PropertyFilterType.Feature operator: PropertyOperator + key: string } export interface HogQLPropertyFilter extends BasePropertyFilter { @@ -1061,6 +1062,14 @@ export interface RecordingUniversalFilters { order?: RecordingsQuery['order'] } +export interface UniversalFiltersGroup { + type: FilterLogicalOperator + values: UniversalFiltersGroupValue[] +} + +export type UniversalFiltersGroupValue = UniversalFiltersGroup | UniversalFilterValue +export type UniversalFilterValue = AnyPropertyFilter | ActionFilter + export type ErrorCluster = { cluster: number sample: string @@ -4621,3 +4630,24 @@ export type SessionReplayUrlTriggerConfig = { url: string matching: 'regex' } + +export type ReplayTemplateType = { + key: string + name: string + description: string + variables: ReplayTemplateVariableType[] + categories: ReplayTemplateCategory[] + icon?: React.ReactNode +} +export type ReplayTemplateCategory = 'B2B' | 'B2C' | 'More' + +export type ReplayTemplateVariableType = { + type: 'event' | 'flag' | 'pageview' | 'person-property' | 'snapshot_source' + name: string + key: string + touched?: boolean + value?: string + description?: string + filterGroup?: UniversalFiltersGroupValue + noTouch?: boolean +} From fa8c01474cb4316983ddfb44a28aa745fba31f0a Mon Sep 17 00:00:00 2001 From: Raquel Smith Date: Tue, 22 Oct 2024 12:31:01 -0700 Subject: [PATCH 14/14] fix(replay-templates): show event selector button, diff mobile filter (#25739) --- .../templates/SessionRecordingTemplates.tsx | 4 ++-- .../templates/availableTemplates.tsx | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx b/frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx index 0af2e410aecc9..8f977d76163df 100644 --- a/frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx +++ b/frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx @@ -56,11 +56,11 @@ const NestedFilterGroup = ({ /> ) })} - {selectOne && filterGroup.values.length === 0 && ( + {!selectOne || (selectOne && filterGroup.values.length === 0) ? (
    - )} + ) : null} ) diff --git a/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx b/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx index d01e6436142eb..47f5418bb5825 100644 --- a/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx +++ b/frontend/src/scenes/session-recordings/templates/availableTemplates.tsx @@ -197,7 +197,7 @@ export const replayTemplates: ReplayTemplateType[] = [ { key: 'mobile-devices', name: 'Mobile devices', - description: 'Watch all replays from mobile devices to look for problems with your responsive design.', + description: 'Watch replays from mobile device web browsers to look for problems with your responsive design.', variables: [ { type: 'snapshot_source', @@ -206,10 +206,17 @@ export const replayTemplates: ReplayTemplateType[] = [ description: 'Users who used your website on a mobile device.', noTouch: true, filterGroup: { - key: 'snapshot_source', - value: ['mobile'], - operator: PropertyOperator.Exact, - type: PropertyFilterType.Recording, + id: '$pageview', + name: '$pageview', + type: 'events', + properties: [ + { + key: '$screen_width', + value: '600', + operator: PropertyOperator.LessThan, + type: PropertyFilterType.Event, + }, + ], }, }, ],

    S!>fXUYvCSTu7kj+|LaoE2^ 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 K!EE}m-~SIiGgICG literal 53350 zcmc$`cRber-#2`uMG}dSN(dz@BM}i=Mr3A}Y(>f5)sd1}8QGFOvl22&8YJ1-60%qJ zyq`zk-+7(qbzbNB$9>(`-Ai(kB`cw^He+b?H~{cR2MJEsS*fV z@grFnIT`+^Ds!tD|J!s&^}Gxr>)ZZe0^tzhqTCsEr>L8W=2Drx#X+ITq-*9S_VCUc@+dqPZOeYI`ES1!A>*Y;?~*=HR&|_cgMqDB#!jf1W_&eT}@5 zMy%$0xS@*>k9VTa@%rUt#+p|<707FH+3F+rhkrlt>fc_y+kGt3I0|S2U+zF-}kOMW`CIvGn9Ura^u&u{gPOOx&V=f{1U zC;2i-#Qp%DXuc!oiZ6}K6*jZuzMBaecegMS zxRuy;i&}L4`0(NFwaRm}J`Va1HxmdE@%j1v&FNv(ERs%3eP=JGW@J@v@><@GH&PFf zV>@xvv_03Pqj=XA0zo)HE`IIZc5fE9tIu!qOY%=%zDS|Tx=DKA>Kr*i{oW&17U3mA z8$W^2l-ZKme&U4rSDM#Zn>Ts6Y$LrG89Up@kF_J>q!l*0af6#y$o{}qLX*%1uT61+ zSBlC!UKa1d0rC>Q@#B%nz`y?+ZMCsUd%HO4F9?MCmX>$?y9v@Jtedv|^Y#6`@YVi4 zgvn^H{`1p!a=hr@AEnt3{r~ohUdu0Dy}C6&)^@W!|G0?A0bz3$tgyXJ_giOP-PfJv zo}T*K@dZ_E%$w~AgsJss@`;a?{r&uSczGoyB|ilm=!iRWzu0&5=F4AK&CDEU`oD0G zl{roK1qIP8|M>hlCFy1Qmc-3z$;qw7_M`PL&%3(1`d0PnSY}oKN@}PMIYz;{ckkX< z_jzrlX6>UIL+VS<7slGuR8(&DR@_yVTFXCiA1mnOi3Ra09H0L6DUe0#lDz!#K$xM! zWOrAZMtX5TipNQ}MFG}?+rK_OdGf@cSu|_(*1E=(D^9;Y`cIavOpLYVl{ikCGA3oQ zr~SY)%-6NGC~naQ2RgsIxAoe!YmLdu*`wd38^=3~@-DwTcktjr36ot1#MM<)R06wi z6Q;`E)0z{U6p9@uVJ8lZ&g7 zch|06b~X36QxApW`&~$EIPJdto!?kBwW+ptydhD++S=OG)KpVblUdZ-SUc2e;>$Cx z9=AVAB@W|w*K>gf*QS2TTJ!68x$fJ$*VM$MIp0Ffx(An}E?g*CA&ifclT*LgE?n3` zRbKwFk>{V8nIxsij~X%0o~d~#UI|^pMZ;RP=9(x_Qu>~`zb#eqkXDx7mrQY7(Wml> zb|O5=P7>^?Z+;Ebgl*ro-`v!+B~c-)xA&^d=j`%zOEWVw{7t%6HooBwYV$nPT9^5; zB8x`O;wP_F2P%kukqyV$h;NFD>is)I8yXt$R@h68U%zH3MV`Q3DDhYm-?+;CQ>skn zTh@*`nq7|8$M_x|6u9c8&MhJ+=rYrP@d1}tP=Fftgsk^Yi{`YD@bK{H=&oFoniwh1 zEJ1Fs4%QPY|o@2%9*;Yoh{NC50ImRy)tsUy<{a z(^M~mq1&0?6z2o>GaWdfL`k=IZ;YfX&RZTO1K;eQKckJwbyyS%*57rpll3n@{rO#| zrlw}`WpQy4+h3TS{TDVpktTwmwzRawe$LNnevFCr@TpU-(|uLN#l?HLE*&Pmb(tG^ zrhK}{b%BqUiHT`=U?5SjDJm*zxG^~_IQW(>KK#VUh|9*h`||9&``hvLE?>UPr5v+5 zRY^_3%5U)Ymc4!L*RTEDb=B3XX`v=&x883W)KG)4@mHi97 z>rB5-SXe90jRnJCU99JDL*nM`yS{5RHZ*W5MHm|!A2z<1Bl~dI>=^?C1ADSPg4Xm; zzZm1gKl1f`sqE|Pi$lEriN$ljm~H>BK&ic|vJXCm^@){iX_0nza{7K}Jl~r1?#tO-@LuOMVhDWM_bnLk@c233T-xeHr5Pp+!#YivA4J1`kE|`R>`_GOJ9MU zNyL(_@Bk|MTPuOhI|=rc6%`c?4NqyF#>8AIBoc|=o6IY`Hcd}Yb6tvx+p3vy1$Be! z)TvW0pE9ucjm`pDX^V?aGUTE{8P8vJ;k*B-lTwzK*U2@eXx-ud3i~Z$4J+R;_}JH1 z!#g4*MC8VgSN;9{MBy^-GdW{d5%?`;XAxu7`p{{8#Ex?6uAbHoMu?6Il0>n_t(LW+?8 zK9N4Yn~8<_9K=UeeK@r)sXt~0YR(59tj!(kE_Ds#)it%T@f`fh6fuNK(Xh{;%c-TbmUw=f9~8i(E-=lq08-^p}e~0caCXhs6@R{$uO=7 zGJYs;_WwY-rUZR$Tax8Xq~O2x09UqX#cvva=d*tgoSF4alQXzPeWFJ)7g>7bQKyOxj!*ChA>=Ec-{ca2j`V z%ayy0j*M8h=YOfFh|@1|@MYi+@bgP}7PWf+qK1=O(XO;p*yhx|du4aGN7Z9``K{&^g5iE0@rze-{N(u!%jg(= zR1`O*BqE z6?y;dTfn)M-gozZ{P>Zomdw2_^1|{i1(PVYvCQX}=L3h-iuAJbFGU(?xsA5)PE3-c zC^8*4B2KX!%A8tkIY%`yF+mJMulX}O+-Ub=2CsCi`H1Hy1$p`0yu6MAD+WeJCo~rv zuT1Sc?<}>%up^tB9sz!Nd3gbWDLxlqJ#^?0H+NbVI~ie-8k>JA6x((XkN$qWH@B{# z&(793{{9w?_Ir`i@1SG^jjE>R35$jVfF-m=50o&wr$Gi0H3Bm;<}B|%Nm2iKp(SL;X0%0|&Lm2|wY9an z=u@KjP!FkDxc4$1H`-D=nxq`-u`)l7{=Q|)7P<51?`TD$CWtSsEKK$k-ARs%lTP*7 z5oq%uO=YvbBnX=4#^SF)A`JrrgEdE9(DP$sPS>uzC@3fh328=k!*Vi{R;YkSIm zB;Tr)@4$frI=$)HW$}$gp6g3ybup6YMHf7KNxcBwB;T)Z3qNmXx)%SUNAzI;ht zttuW_TwZSI(Ue4~DlJ{(igkOhzo_%VV{N&9_9JR{TieoLZRBGqdxh4Bi16^;G62Zt zhSi3qVz>L`bn1XX5A5F$$g7oYu+~>a$n@!;2RVi0<)@A^rhHCMTp=lq8pye!2X#(uOHSe2HR z7D?r!?d=c~0N5a5^bS*?9~+x;05Wup0?X#d9ejIz7sfjZZ?xs&jE@cvGchurJb9An z?forAGV)lZ{x+VyzW9PeTT?m%OLmkKp3^jBXy<+Y{22flzk4B3m6|#bU4)_&jKKWs z^W&s4SLsc)GB;Xi({nm8_VQZqeQKk@)klVhfm$vl%A0#?W$H9z3!d}e zXJKW98erX$p`Cmwx^H5)hKS6$+)L_=&x3A93R^Td_PCQMg}#25L8;3Dak~_3iN{+H z(|&m&`*1JMmG5Qlt_Kc81KsW1e^P*(TYh@J7bIbJcJ@Z+o1B1vOV-v|s(a`U_UzEe z+*Z6Jf+qguOIfZ;`sq(R3BLezJ73?_%{C~FIB_#AG10`@`ZQKh$n0BiITf?CNl2Z? zQNHc?t1De+x1)z~^6`;mAQ?vQ?t4UmoiC^fgmqsNg{bK6bX^y4%X_-!%VTXqF7zhl z9&5YypHyjmardK-zked-i|thVb^y7PK~{eQ9l7Xf^aq3>+UDy96lMx_eU-^>c9jIrTciuYFeu-&Med zj~_pdV}Aqm8OLTlzvJ%gw_w4v)NpRZu*JZn7XZICV{qtw@u3{0^!>3PoLkBy4{4!sduN+&%PW~&e z;<74<;-*GMGAviFT?NpFe-*pHfXFbqa}_6n@W=1L+-NrLNku$DRE7(zaf(z@jlJOTQ%I`SYDj zf`?gI&*VH0TAvx}Ec&yyvQT5A)!GBjjb4b_SKry`)|7G?@`9Z!y?5|v!Gi}?C@A=7 zzzkhoU3qzVORmW?Zz#p2#0p$q5mg+U(j@#O9(vQz($O^~Dln+2HG;DoJ!oy;(JYcI zC}DqGO~dtBQbIz$MdRS=(jP2EZG;G}g#@~81>dm(Mp{~MGHLST!ovGOkd+DCQcpnY zMSZ&^^LZMmX;G@V%kS(Lo(GzloIG(7yrprW%;)Ha2uhQm!#+xe5;v(r_BY^^vkb=wwl(Cr8 z?((BYxw*w%W{1|-R>JrVFO_$vcAl*VMM967n`<@vR8D1EmG$!U5A;STdf2$Owlik2?kAwUO(a^jD3X7{UTw(;Z#WmTj-o8a%X<@h=JxH| z%gf8qn9|yVxJjZP*b|yKEj>My#gmQ`dh6XGQWIp%eNDaZRNY$16S90PcfG8Zl_hTj z-hzPg7F`88!m(rNcQPZJ8*6^t@01j3Q4+Mz+JW?Ze+6HYj3915X_xwsxeRPpvc zCnuMoUosB~s(f{(=B@J|Fhk93gD&9tSdZmYo1QYeFn|%zq&r^-(Z;vz?4UNKJ$SH{ zRgN!A>kVb}xluqNOUpDLpNqF|AFs)!+9w?J#TZA9q)=cf%yR(N6A}_CA5tGHh@TCn z5d_esKD~HIKp=>wZ)8N=ZSj`%wu?vABkoS+Yg~(xaHsp>Zof(EB$?iF@YAP#V`EXV zvDsIW_4p=#dv3k=5nTMH%CMY(xuE#K>;Ap|~(9roR21CF7VhydWVXi*q<=|b$ z+AS3oUNldGgZqbvmq0D5cUde2(bCe2+YL#RW9ux<)bL{iYh9as6F@E{jbrwPOr9ge zV89|?yfS6t`}e^UHr-<*Bl1#LNL$-(NCnU{q{H9e|L=(lVGbcne;*kOE55cRVyc0wPs;Q8y4ACRaFf@P;qf_!Nxy$;>HzC&ArN^ z=~JAlX=l2YI9DsRKfg%L`0?h5%;77)s0e8SL{_2+#kJ?6)a0x?vrxEoe)sm?!rpxQ z_APdnOZl<$=g*6?1_cH6{`&PSIyyQmOcXnZH&c{F-nJ;pL}QgHKtXQnM8jL>JEEe6 zK)b~yCDaGR^MR!8dXkl6!H%9CYsog05|@o{l3z-WiHSLV`ZSo$*Dqg+?1ohzjOrY_ z;VX5?-kt8W5%=c3j3HdZetn#}HT% zn+8`MbOmjs;LV#iJ7jeXKxl?HU%&nfA3!6`F~stb8uNAq@)*uEF+XlneeoB z3IX@aTrf3Fsvg(Y)*gvaV~VNv*BJG1w!3_MU~FtZ9o^xCn&zF-!+XATc1F>}XJ+!! z`T&ZWzdU>PEd6WMHqpz8&zbMwGF?F@rEYYEW#$4{T2K?Oj4=>Pl#dIEPk?a8~neSNBWdXUuYmS#-O zpZ_#-%>F@&I%&%`xc}Tl87uRmJUQM;P1{8(Z=^|)!Ohaj3MRmX!?YnL>hoHBVXjV2 zI6c)hH8pK*+IW6r> zE<3ui?0osF(Ohxx462lFi;Df4v_aVqZjriU&JRUF-Lza{t<-bFLq_I3svgwuPOmp+0kN(W=?(SRXs~Q{cKu*NACQ+wqGOYH_N;x?>3D0%C ztGXk7>aCyT{jV%}ImcUezb!(qN1e6qDRb}p;DZJboUOw4#L3llWqCP9+@AZ`u~B$H zoptjw3yzRnt9q*0|-2spVU+jXY5sQ9yFSk9;a zEnHAvfkbK{DTs?N0|J77=@nRNfHOM3PPe*b;>0b=or=l@Mf(ej=jxO2@FLVGcqB`U zi{!((s=n_(m2cDdN$UO;K^@ZBgnwlL{$%EUq67@6B-vriptu~gK2g!pMZBF=6|=+r zU!Kj)&XR53EF>t1Er1%uy}Hh2%m8)Q)6>(?um`v;P-^{o$-uB^j~n}w3n2XqAm~u} z9ukR1K5AYww6nK|zA#L6z1pfhe;B3S^y~9_kX(qltT$7A|82jG#2Yc1cD%lc=4@+g zJJMac0$vXzPOI!2#IE6?A$TYK0|RaC?c26&@naH7dY@BjKN=bk5KwVjGd`;veH|7E zD&5_?ccEE$czD3CNo^0>@viYy;;(Ow-+`Y1`($KgYg!GNx2KD*rF|1fJ0(n{F*G!c zn3MEaeS=K__uzYL>+iO#EU}QEslM8m>AMq}&E&bhwkLM zNP4bK{LD2_aXQt?vootsXP>}T$G zm6fvR&zqr_wYRt1AMia?KsSZms+pxH_K!fdkD0loqy(7nU z8mbBGsicweql9FE#z>xm7RkmY!?U+leNUX+=QdRZGxg~5NRXJL(9{SbvTRS9oW8XC z{(Twyg9HstO$VScu{(qNPdQ}Zk(4&z5(ZS0JB9)P4rP^Q>(u&|olA%yy><_Q0n0AH zKsR@Hi2ml#P@oHc{i-N_%;?&++sm^SQ0?IyIyx?ljoq*g16m~+iYHTrlu#{7N?*$&U}!@N~WR!z>|UNdGW#p6+P`@=tr=`goK1pmf%p# z%s!#?njbCf@yN^1&wu^83`*wJt5@O0K<9h*>>0g+_rr&$#Kmc45>$twgf^f3)|O`$ zSXwISz6z;ER<<%O?$ELwU^J@Go-$3nuHB>(we;sVln@;BL6qdNAIGyCM-2M*OE|r{ z{wV+m=5%d!HJG3Lr!3W%9}MH(Z%&w@Q{B%Na$jXVPTgrA`LL5S%A$^r4(hToBY z38xC7Z`_rDEi{6?63uDM(my|?sInjG=hZ7yRB}JaT^iXmUh`*Z8zC+nQlE5Yq=d7r zj!rx5i(h?xvvYGe_-6~DNV(wbKmVInKG*v0mxfI0ORugi^iZ&-rltbasWXTrV=n-eSAY5Pq9?D)==O~pJnl!) z_27rTKYy{y9B+)SZw4C!Zgi}mNi~Xkkw~Zn|7Ao2px?^^!HMtOz#{d@Odx6v>% zK7alkjP3)p+gn`ErQf}KC$%=KhQ50H_B5>V;d3Fs#s&v9RaD{_z5V@_u%ZvjC%NZR z*`^pZ9JUbOKB$SkTrlmNVr>{xCrTjrCu+2AB2=vKA3jVp(T4FS^BDq}grwxKL%8DL zmoKk_=95F^dy%Kg&HkH_nb~o?T?Cf_;w~N#chKB) zFJAOfA*Zx5AAZLZ62uWoGUkoSOazv>< z?#$*YgCnX8yf=*?$Yf<@5rgoHhefE* zsRjMS(;CG6FS-4^f(l=$hU+X#s2B0q{bnY3agvnBf=lPma|sFx9z8k?)(@1#%f~lp zVA)e9>3;Rbjn$FnV=@;mUHXOsOCCN@^N z+)@pJfLTf-NE`+R-9Qi)Ix^)-p~~{jFBlAfxFIvaVcaK;i~~KJmhjaI0^g=xR8;;@ zsV`mP5&{oa>0FR7^Pqkn4-r_-`w$j@aO+ZftD)^vMj;0YEZLu|7j#KI34g z9aH-c-A$&cJ9KMH%(jqmCp|qqZEYt1SCBwBI5=Q|j5j7zyBB=yp_7TP{r1fRr5Mei z$Oy$wEkZI&W$Cl?N9PZZcB4q`+`04Xw{K;(1J$S+$L7k?o01;~T~}Y*O*6AMtF%rw zWF>9IZ8PD!@n4yew}cK7ksS=KZsad{Z0LM!g`Mxkix;3Y z$UTvwQDU|U<>lqYjOMkE7e3SbtlznI!Oku}D~nG#UnJeFUw-Shos0sIp8#Lz_wIEV zY5G!C#lgv$l#=r3n>NJYPt zm>-{#dw`mn+H<<^ETo>H#-~r8VlVJ*%JLUI+Z>-cMqyYcQFpTB%^TQpoE#j81%3JQ z#plv9Rr*~{CQ=${Znl~ZTe#gQTf2W>TXH|PO8VA{f4_BCxu+B>D=ROrzsEaC=b6Kv z&NxYEAdeoATl@FLdai4iUBN*bwkc&~V%jb9hPjfCp5DaR7^VsyvlCq_u%~7g7PJ`d zLteXk_l%pH8?gCsDDoK-9C)FqsQnX(KtiFx!A;*&-o99j)-dUpAAt7OZ@UD9df{0j zgqVygIq`9ESL@@?zGohgVgu8#%i&mi(axt|Oz!OS^ul56ObCJ`CNF9oH5HWR^_xH; z_P}Y|ndvxk2`cX9+u@2>>6{0Y49HpqTT@`QcI`4iDyUe0OWDyas!W+Uzv|pdii-X5 z;&%oWA!;~xTggoM<$-$Oa3PD~21A0sZ1J8o-O1jNHTB)LerYGjWV+u!HnAN3qr&mG z^eK6lZzYo+7d&yIrM0yu&rDfUvjwde+qc@#fM;(V1ZB|t-Me>VF>u+t3T+IRjKK5? zU%h%RYSRs8N;&Fej#1T)VoAg%&>wJY@N1`_Vk9PVDDR~8`G9Z+d<%4SuMZiipeIjuR|??m>SCp|n2KnhT;gYO@C;^xfs^zIp25aWOGse#-_I`8jz z5u;=z?#DT)5M#G-pE?a7I&OZJXXQf_7WDm}oCn2r zR^C7f$Du*R=_+wFeCu>Px;f|d>-mL+g}FHhrzEp>cxk$7VE8torI>}(A;cqXP2|XH zBQu)dU5_gorA6gfmalNd?M`X2S|S>6s3ipo$=I&qr1`R5Yps9#ak)7#0)!wR*hwBcVK zAKfb+g$t>9Y8-r`?h83Qx|*7tPc95KLOOz)8nq&+>W?DR2X=?BfP85J8a)s%sHOEK zW!a|efYxkttH;~sb@rU@G5Qrx{-kN1Y9Ara!-!m#yr!&(aiDgMjuBph*E!w)h7#Ey zPw`2JwR+uEf;~h3(qx=kB)fduO4k}ZTU8iY~!#--(SP#AZuIVa4oLtUx{qSg|DKtM-ZkFlCF-Tp^ckz;ol-=arSX2x*u4_z zi6D)=YcKx-FV`&C#Sj!d7Dm-cwo85eG){(1vRFvBspsfnZ}G{vAcEzJ;&kXGqi`~%x$zmJaI^lMGEU}38`Vns7S(7Xjm(cuzrOH|rA9A>@3bCc1E~tmx_12RV>?^ngKIJRkV=^h@X(fX9xEj5^LO72O%DAu8;$%|mgIwR; zI+xffSmn}_D$}QTSfyT)`SEroAt%S+WX+l^xy7raXInSu>g&1siao6e1Zl~?B#WW2 z8hKq;+K54j&Z4Hn%4(cJEks_Io&El4#6x`%v`9_0fTT#0h({9c z-Ma_p!^qN79N98Rpm#bPCpsU15$E$cpGXxO8w_OZs3$8Crgey zJ+^Zxq~i%p$S>}64AeQ4nG<8}hiX+Kx)l3VwL%?~f9h`MgLy!cdp>~(egYkH-% zSKk$~&2^GYdkD?p~Yx*bk^p;mFmosLsUY&O2drWnkK6fFT!J}Qp;b^Y8 zZOQxHRFBI?KMhJ9B7W|h-|K!&ew`www#0CV&xoblxv{05>g=<2x&U*Pu}1w+H^tO% zqWFG8(omH4pU-Oo$74 za=7?Ad(+{%Q@{Xsa)r|ZnWzP+cR9$&d-p;)3!~}#%R+)6;?@u!KJ57MBj36!!u0ij z;Y)>#bpF@I4~+~Sp*-4162=3@87>qa(*C2_VxAQ$~O9sL;w`I&W(f^O`_IiaKFherM~K7Ns%&R{cjOf?u89Ds78s>l8PNUltxmxY$6Au$#U z6BYCiZYq2ri!*07t@&0W9kFF^im3p)(Z8?Vy#OfEP(|#Vk_q2DINHhJZ@<*T6OjDkX zVXt;m3{n@>JH{|R0NvzGKJ()?buhv*EOB-7}H$E&S`ol@TsaSVf zV!Ntd#U6>HZkONQcx3!Ne;e~Ut;kJ-nMS&SLrmwU!&fcsrl~9K%Gx*`7+EL!FU&?x z`Ee5nUTmaL)cj{-LCE9>C0(v)YxC;8nF8@9(tvBgT!FjQC-F~_jX?PypHf;t80w1{?sO|BvfNwH%GDZ^XZ zb@?AkT7KeYJB+$eYjv1DpMLy!PGf|})vMB?K%~K=WJ)$p5#TT2-YQN`C%YEF0rMRn z`}zALyuT0OUZHLXF5oL6!NI`G0R5ULHW|FSdIo}pPQLkZgl`~jiidyQ^P*y()0Fxp z>ON?h$aeie=98bF-^Rvfz1>)_4btc-yP@9kahOdD<7o_7iO>e z={|PdS-)heJM2?Sq)GDeNl|ia3z0Jac#8- z85p-It>m#7w<2dPcV79%Zv%%30ezSZ_r8K*y8hP z?CIuX>$)#8W*3^<)jVi*O9Yc{=5u9)IPqSkG@RN}SGF7(Oy?7Q?zriAe)4L9kXg2E z&<>#ro7|r8^2gEVcFWl9-A}9S@QdXNI`%H>ds_)M8vnu9s{e#7@LcSUDdaH+hk4`# zA;T$=fBAP}=#JzT!~XplSD1NaTa#!Jb3%@pP2W1=f7o}iwj}#bTjs)_!P>6Q&gJ>> z(TR!Ec0=Eh&C)2RL@OGJU?(~ux4XEAxVaz~*KbU3aJL?$W)wK|KXe43-un7_&@M2! zj~_oG@27b2A^^MSJ|YcTQAF9y`6CJ24oZal?(dgyUsj*qR`WO{{kpaFC2|Zb?e&p^ zXd%48!_7^r8n^rox~bf`bD(nIXB#8U>3GqQkz6)X2MBHaoSU~&(CKa*#vZCw--DmRgc(7@&NiP8txor=!#NvK ztTxqG=GKxO&RI>_6$j|(Px;+enEo_TRd&K?JAY=(#vXf3*Ygved4>-~J(Z5Ee!bw> zy{U5xrr5T~K$Nhd|I?G`7wqe+faJWYDi$ydBNIdFkwIM+)$jC8QxA)a>u6~eu9p3; z6x(yIq@pnjPX#T+Q!%9g-y%}PO4FkUPO#sBQ}fUnA3S&ffyMUrZMcreJlNXXXR6=m ze6AuGu6Tj?-m3RSuC0znGj~P+_jdNM8c7KWT-^aY#>Rl;e+>_7r)ttsh|S7>*k!=M z>M_>1UwidT&V7c<_I~>^N~H7c=}){p%KrL*dU0p8yImL^g8*;lhb}!6&uAk*n@jY^;RndqAlL(%`1?zvSpZTCV0tLc%C4{O<<*{SWd43v2-q*iPvz2$QLOb z8SY9hc37*+egPj3NkU?YktXM}2Sj53;2`3hO#AjBi+g4LJ`KRA3^^7;UP;OR)~%_9 zg&z3Q51!eMj!7}tptuXivI_Q;?M zzWD^W`8qc@O+bcKL_Ko_iC-Wg@J_v-$P?$~N~Q%{ZX41A!UD#o7fYHlug^(x5q z;G zGYyqia$VbKWIl9l`@Al$|88rA#0MRn00WcXyMm)n#WlNrmD(iC;mZTQn3pmiY*o9^pN$@-zY`!wd-0F%ISxoiH&(ITyS{svez82vB! zZbZ2&*Qi$g)6%03egJAYFDGYgY6|e_2<{y+a@j;fh!LH_-F*##c4HHhXvE48_U=@8 zY<6#ITHSewODO_6cw82xP5`^YJdf$@PPy^%V8cB=1ycG~a;J~A6$zY}EL+W1t6IOW z5NN&lTjR-_6)uw}x&;~f6s+-=0%lfPe?)ck@$n7l?v_D8X$#k%@jIp?x$$Z1q3I|s zS_yrJpC=<7v&Ymg3{R#Pl=0z5;-eI=ltc^!lAMt z3*TO7!$M0N@3e_)V02VrPbAbj2#9MReD=VOoHZyzv4tIp=`A?Rn3@uHhJyY-$puBH z7QV$wNx`NT7FJJP$JNdPz5nRP1lSNQb|v<+Mp)l$-)6_yVqOU?h!3#o91G>q~$bbZtr09I-yit`9>&cT>dY#fFX5lViFAh+u z>Fi>c_lRL#H-1_j@N#=Tkhj>+s_E6;~gV zN~!)NaE7>|4&25Er*zJgddnJK-^cv(bRA}E+2JPBB9r_652^_Ns1g5ZO8G=+uN&cCS%AO4 z@E=3F|C@=|zpwNEQuRn-0m(E|=xHd{mjXT7}+4;6Es5e`PJVZ=|SlGe_ z+#&Lb4RAVXWrlv?Xg2GAw$Uw}$TgZGRZO62keM{S4kRE=Ya^P$rr?T`va`5Yef%59 z2Vu0Ysi}#(@CrZ4O#}EsxGZB-di_3E8f+H;dGz|iYLQ!f25+B7MIj5NIqrmuMGjJ# zVvpj=NrdZ{$D=^*4Bs6J0y!(9sxP;qLQ9id^purCIMClt*=+ms{e%2`VF=XRt?=*e zp^BfdZ2J85>lmOsW?g!Z!gzQKvWIpiZ2mp2nzw}#M(~vqhnuJ!^z*efHK*K{h26uN z4b%tR&6hc7=Yu2wRN%{5f!WWvXG9nXcBdA+JS>u` zx_3o9zAxX*v>#;|A-y>9OqdFChiOq^;17SSs5k^xDJrU^{}V&F5c>dk^3iC-{mXuV zKPzpRHj#Y6F%OtwFeJ22GU?W)1nV#%6bCK|iJjOQ7f@6r#(EfHvnlCz2>uU9#&+0? z7uT>VMRH+-rL;bWA*=A+Qi59(O8`h{tg1>xsYB~Idh{qU2tQs-RApgd(YXp$Q#Cao zEmFRAZFw{sju1X17A{7}Y*%6N)2t>c3W}Wkd?=C$%#e#=kr`WCcY`gnu*5R(8ywNB z>gj`U3-E^gFRWk$Jl~HezB#-I2X{7AHHfDMRK2sIAs3t-1zXES!=%=Zqo}-GO6i1o zfw1Ruar-oNZv6sF`qpIxCNUWKPki@|t*tqgZIK(=8F*c8PL5ANfTo|?KyM23#hBij zR_(S6U~P6Q^EYK>WsCIqo_!%_HOjd%;2iSwsqJtB$HXICzZ=-WoqB!1r4aD=_g(*NILsAGsOCKOwpEo<3a$Lk?$@?a5~}!P{X7 z1Ql3!=@=SrU?vx*2ov=CPrEGww7?mWrTo4f(%xedR9{+N9vK?Kw`S+yFhOgC=Z4eO zy922lXm>?;9byn1B)B-CCfLX8>noFBR0)ZR(I;=;yT+*VJh=+`4E*dza%|hTKSZFJ z4@vioj2p|d!(`iyAUSXVa|>=C5L=bzo34WVd<2C7=?|WEJBi?DXJ;o&rE<3= zRql|}*h`q#=l;ui)^IUNl`$;LvH$b#i1%HHVIvobMi4%jF1c%8y)y$wnl(f9601Z$ZO9=udY zs?0EDX6yEgT6aQcJBwtBv-cz4w3L(!sq{KxUA`?>EiGL}nvRAme#{-i+F_!m5l#y0 z8XNKZFK|K?wZEEjz_$rRrdav;C$U8&U1k|2oCKn&l9=>y7^!ydq;tfYf5SxnaN!^H z5)(7CQ(|JEIM~LR{0a^U0f-G9OnK~zzr*$K#ax~g6l3sZ3RaMl$6GN=bqkpv+#rHh z2AL`-KNySNOHU73roXp0C^+~-t@~~nCmp?V4@oLP2?;moM#LcO_UZxKyPI<{fhY4B z0STCcZ{3z`tHPR^75{V~-0|HW}YN3O$v07p7HkVRdbdosA7kkJNKUZaY+K(1nYKpF-~X&O5t$ zl$SSA^d;YsBd_xEth(PWVR2~OIliCRyCEC*Ade|U@I|IP|FOR+o?LmFAr04!rR!{Ut$A8KfQhYyLh51%C3UN zD*kBbKGzJ*QVzF}c`70M;jBg(eU;bnbsssB7K=B%c$hZSWLVyUbuB(zOkcmwGl|r= ziBcJ4(wU=edC78Y7nPI}^Be%N3knNco16Uu16#4S5v2*RGAUT?#)VlEFp9~u7s)+i zR3kJ;7EJhJ+7Kr@&2E}&jhlsu3Dv_?TuHwC(;e*RH=l%C*Ct9P>F&HD4Hi;*CszS` z(8{2@le2QN42If+(hfBGaF(m(y0g`^iM=I_WxxaZ$O5P@+Gyx9gY`*aed& zn_EBGQryzkCQV48X# znR`|PKuf497=oOcou%`wB4r-`{CTM6O?_`^fkClXDHAL3VJ(=hQs6N|b=tAYJzTuX&lGoQ{f6>D znq#foudCaE34J;ShCH4c0YAtLbu>ry%hG>5?o-gC!lqBU(~Cp%t*)*WQdR^1vX{XY zzNu*3N=AhhQm)DOCriqZZy1+$*ABsFHJ#avFRKjp5o67*#0>^V(N5|yhBWss3 zgx3^)3qXZO;e-;`oo7}zljl3Ye*}}?OBl2MAerdcxx3qF>Cn;QRgKR!g;Sk&@~NgU z;Sj9>;yaC0K9pZH!$+pmZ> zEgN@ZgI^vi7vNc;M$1X1s18{eOB5sC7vMuUFw4IM`cqXtYC8Uh{#GV9yf2vcY z@qqmp=f`G1$Hik~@sm`y%P8+)^$)T!H}QrZhSz#~T< z6}{4C2?*~e@4m2&y$C)L4kt?L+?;f_sA;TrB6CVD^&2TlbYHd$yhsm zcNkbnH#Ae#XKe|YLWyHN$u})6Nw5uP!oYbT1iPk4?=&hafIGJ2FHEBrAsb|4lrgkM~W?E#Z)E11JBtU07I$9F8?SQQd{%GVYd*D0HnZi zfXlYe&2aYOB2pYD#l*G{W)X*IFdPu$0lY$}o>YTzT%b{SEDbQ^T=}|sa?ipe;9Jmo zAhBadj>Ivr^6TV3;>%}aXGb|(K}^SE<_p)dwf@RTdUn>895zT>XtarmiL?H`JLmWB z-hIu)L<409cpQ23AMU6 z%o$c9gFlpU_vqtzo7-Q@tfM?o?RjX(F;6WQduM)TW*O|vV`FUrtN=&oVVT0-(oU~{ zC78Mhu4H6oC2^^ZDy9||imusWS`Q!})!h}TO~f*1%e_0XC-HS>+iI|^Fs3au-in8@ zkVq_W!hSeHh;HK59c3=S8e;v>*!Tx61Y6Pxtij%X4)F?vE$1QnPr{)D>> zBrCu6T%1n##)-f0UVr>UQo?O9NK*a}rB`}d8d4KY zmi87Fss8@8h+pQrd|xOdXPuQ|tv~PK8*m(_(S6F3j$lqrGOQPDObha0ca{p|o-HSQ zjk@1lw9gqEoRpC~Lf72fj4$3lVYxW<6KIkN!&1P)78b+cHnEYB=>=PKdLCg*cjHbm z0LYY-l<4|ES>d|U7CZ7yn8 zpWRjGM!ym&lW_V|D~c%-O&g4f&9(qUa$k@J`7R?aC2Cov*Vm}q0H zv|&|)m&sI3^;n($gsTDp^;@K9U|GLCZYeWM)|-}=hPyvq&eXKhCnze9k$zV*9oQTb zKnM!p6k1%rE@b?f=C1S<04y48qZuc-M~z;SJbz1ORu-}-PgIVKHK#L_)OoJ|i3MZ8 zEXN|QRC;>4q04Y0aAd=VwcxE@=^{N+aHR($o#AFN+WF?Y&t4u=xM}|yJHDPNS^7|r zeBx|k9-e)b?0d0Wn0vKWs(M3#>Cv^d@ukJ); zPMQp~N0>I#HnGvqoD+Y6seL13;{!X;4Q?OUvi8duwGyOds0?sOspzlW2oz17Xub zcweIG7fF4c$#i7EF-Tp8_#3QjKkZ(^Tl<-&%Q6}E-M*U$PRi0-h$>Bnj_gaLA34Y{ z(%@C@-)i7G9%kslN_;!ppfIlH`+DQiU>=?yczXGBZ7uJiLtbURwip3g(JJTkF~-g8 z5X1s9hooB$GzgJMUq2dSA{f_=(9#B+6IbS>+(LF;{*A*lGX3*Gq3|6%3Pf z?@Nway%f3>ZSs2BFN!Vt=P{hisU0=K(H9Gr z=GtjxoPhSR*TQJyhd4|t!Eu=@gM(Iyb>nE&Kh)nLU3mDV z@m{omgP{sM*GSr}G4)i52e$UME-1xiN!W{bfw^kJkIAb%j;#4K!s_i$@~lH{83 zKUi@8Slk0Yy-&yTaOcgxNqbeO6ZQ5^LBYMyFR%)qSy zA9ewcBrgkjaM*?hw?I6bbaeaZyw7Y6v+Jcq%QK)Dd1*aCIJED(yW82@ih|S^FCYiI*_HpyS@c@P6PRe8o|cIyZ-deZM>wP>@H#vTx-}zP z#3d+bjXqTuQmCAr@gd@~&^bKG>;yYEr5^9ZY zo>!q(@AyDQjm@GkI$93_Q=;?3iXQkG4V5o&B6Iu88yOje6hVf11c5=7mE3G>SJ0Li zz1Ap7UDWS1%VG)E4|9YfKF&N6&<*g>F#sq^yN<1ffq zjjsFMd-w3(PfAG@!u-;2<|oFrh)qR;DEy8=NWAr#A{`7c{{Foa6MO-me0PZ(-J)*? zv^`|nCV=(@wr^QD3ij@;lSzq)&_ykUtN~NgF+BYU?FVKW-V``aIK(lhiBN$4{AjuCBBG@LrmttzyN-vc5)N{R6Edjmv*(%o>ZK4=S3hBdB5S%Z!TDh*9O7^v+A!feBl zJoND4Lu|(nA8xuHRQMsqE@Hi0T@VX%%-an1iHD27FE5(VNJ+r^lAxM<<->gl&v_sY zLsfol;=BAexO8C}ddMVv5avB}{;-_z$ppN+{Lt|?i4?Yr*nJwSh6#)7aCvEA+ zkCz}eMuY*1fsVWuWC$W%3bwFy0-J!7nXZ-RdC*(@^aCh-uOd}HaP=ljSH#)XZABCR!jNm$i*wovZpOBR; zMR6rrY_Q@= zN;GeS_V^FLw*)^NDsw4$NSZ7xEpb;fZQJ&q<)ObBD=D&J_1=Pc`kCCIk?kzvl%&G#|?y~Z`TOp7KAqz{RZ$G!B=((hTNgx6PHqXgM zsKv3uVM-%KOSO*3Hz7!HG@L+4L2WKtGp_oHuapH?s*D1;dO_Iy=n$A$#9uuX|YX~X_@gXQE zh|WJM*rHp#rs}m@B)41qJyxXFI%2t2cjI0Y(d6SzFv6=w#xpl$4bL9%v?2EASQIetQxc`Wqeh z)C-I6H}WwYVg7MmUcMYf5s`KKaOVdTfx|2zhnG1GGlu)jJ3ZsHmvWZ7hA>zt?SXar$#rAE8VH3R>^b zkN_1TejAMX3d;rn)YTg=)6)kHggYD*7M@2&C@9@4fv2*pj`ny$l7*&q@Dg|4`i7{4 zgi{6@=fr1KarpqDwL6#4*snTx&qH@wV%8^`nz$J9YkfDQW@Wkj=pkGBiEZ9Q=GelZ z!Z$Pp^09pZPwsI;yH4QgvjXjw`$>To&yIiLTwJ#j~;zrv?URv!PHR_ z=;x<|5D@?yG>4Gcl0VmGT(vn68bBH4FW@O8fA-wlBj@|ZXeuM-d~-WR|b2 zqH-9?Blil1IA|ylyh?P)q0=`bn6sQ5(Il${3O{tx37G&Q6!h;>NPvinPCBsORup2f zUEnj&Kda6|cY>RXOA~Jl6aa*&7I2?kr=KStHecnLUgAOXEaoTr)!5GPloM+`P#sz( zp=@&X7_-&Bw5+UoBHr@jACCvFkuI8&SU|99t&$Dz z>9%i2*92B`2x+byy8ScnkZuS9Z4oIMZdVbu1!q!1Qc@_idUkd>>XOiMp;cX8SsC!@ zD%VqxYrdWP%l^J7U?6d`BF^vhxpOWP1@njw(qg2h2=mNG&>y_FXev9Qj{y2X|516* z11c8^lIy_#7BVqrPbLI%Yk2>jt8)r`JO-YKHp+f(Q2%`(i<>n2MUdIRLOd*#7Z~IY zTEz(@yn6KnP_7T31B4AO{`A!uU)FOJ23OhNgdMYfLSq~j|BlRcey#LzN|_~Vhrptn z4|W#|5_K0&!JsEPG&FZqhsS#&f8P~wkA9t&wrH*v+wFQ{Y}anr@79X~t#CIWBb#Wh z{t>>242Uzqhwki;v0Wq@YN+sCecv~^H_;<1S_9tGuPI~K_^h^~-|`iVOhLI_A>;g-#S>nQwT*JK|`LjqLM9U9qo!}V;+ z80tPzVZu2cQ2#&16qj|RqU4irrd!dH=;G9csod>d>}d?ii^EXM$KAzkT2q{a9Q~mdW>nhH4EduIEOLL&+t{fiOA*aj6DQWkgT1*7m^ zAJPq@iHQ1s&jmhHkz=Agb+6Btc{aRqf#PSm3G05` zmW|6lNuddh2oH}5UO!VxK$wvu|9~**Ip)bC?0sV4_G@WYT5SrsAKjW>gst4>9Be`tUnv4}On)f^oy)%~yztT6wL z+TBoC;+IO;O??a=Vs~RcdJ72>U_kd^5CFP`g4dU$oCbft5|L2y)z|9oeHVwerfC~3 zGxI2dME{^DMogMoTC&k!!#hA#4gxOKcIa47D68^lWYRo>;DLkou)Lmw5+VD z+2^))-8zB=KYElwvI81jP`9WQ;nbdCgF_VeRmPoBWzFHMQV z`tR`QVL#s&`gZj7A=eT%X{m+07qV)i!g2FMJO2uja0nQgb(8RMqq+o&t+@^73g0$Q zNML|Gwr}5#YA0A5eow?$e5$BGHcY*+zSR%NuTje2KcmYwTH)~lr3;*^y(1$;KntAm zh3JgI)@oF_cydHQK;X*~wRV_=V^hZrOM5BvE*$u%3K-A@1&)MpwXd&_@Z$7Wquaff z9JodH_U)f2|A%7S`&`YOrH77{W>33^QSy4_jOhRNu3+K=szyZXWBx)XlK<>Q z29X+}nR{>sG7Y37*?)hkLCJ=;0r+20f>*2CAB&H}h>Qia*YT&nKR# znE?9Zv7UL2&h{j_)&t@EQspSip&dy#?~~09fXE2-8N>6}P_w}g znp$JvFOQ~EPzfj~#IPdp2*G%_u+~<)+A(*-5|BX9NEJ;+wim#mSSpBl0KDpqn$TRI znX&4>g)s$=;59a|Eo}MOFZV>A!^rue`M^f8t(vrNYx;6zh$VOGv-sxg;UR~52f$oP zik$5m0zLrFpo3kHVq@?Xv7ZfG)z=RQ58t(Y`v=F8_#O20=fXtQIBDy3AK+$scK%c{ z9YkWQa;#YJe4t?ayE_fhTbWq{>6z36si@TuEdsxpqMZT!=EJOE0F$u0n;&?*L)Fsk zoi4+00tJ`B%}!*;Pp3okP^Is?lbe?}Ovsc`?6y8t4@6HbEf?+_KQ0Nmo6ywKUBiNf z;iRfE12ePkz|mSePDZ=ikpEzB!Ulph3A-7o%7vUR+iXUc;*pO_7B=kZ?ERS!V=Yf> z36Fzy0iBvWH8ln10eU0;oz0~QYe+vs-|LE!2GenSLF4!|Bt-Oj6~pyCGRlfWB_@W3 zpEda|7CQa{8;DMeJ%lk}tpRWm8zk(4C?nsbvmqfNExMvZZ6D-C#b_zlLeE7=INk*r z3ozO+Xg0j>3Fo)jzi?f}SWHGaIoR@$2$l|n-5lMXw=utD!#tw>J>=k%zz&TxFj3%i zsPgG`Zoj*%G5VqL=Ng^(rh<<0;P%6TH3v*Pv-t{UAS_Zr);J`DC3^hRi9%;tNX6Z> zIC}@HpqjD!`Qysm#1*7F!QCz!Q%C78m7%GPP5=!}vGXZxKQ*r*&p@KfaY;f9_iPNR z2K-`#0_aXjLf7!+B57pi%lUJlAB6-3>$+`;&`96X1wDNxkhC(&xL{W9km;D)=jdC) zPH<%UCpIQV3<{~a&U~bQWTbNZ8+!j&c8!D{%!MLaDz54D*|XzFjkip!4W6gG{(kbJ zrDNp6E#_S&0C{#xv(3%PT5^<7*X0&=1;6I>(qnzSo*FkWt%LXEuX?ZGGlv5w`-Ur7 z{vBq0U3bIb7>VQ}N0e7bu)%3UVQrjJP-5@Z;K;}A2)#o%(ptcLq9KGHjX?5tr*w!`pm2iSs2{3U7|TQ_ib}-w!4f+3 z`3Pgw1-b>6VDG?#A4#bf*0yqkM?VZ|XyP_QrxAB2x=mSw;&-2617K!-DZ%VP5&92g z8KcTIB&I!NGKU|IPl$FO!9|XKc>0^zWDQOEC3H2nzCBfX*y7T7$1^1HfTNR*!EG$^ zHg#;0L|SC&Jy;9OgF1_o*19xZm2-G>OzW0+4}xdVP&jffCMG7!wA}_Q)iXtPRn>GP zJkHIR!2J28u@PG0xB2;(k|NL!iHwX?OHzmJwrIY~0bJ6|95`A?f)T9;0{I5QLhv-m zc5Qk_M^B#x7iE6_v1f{LDhb#HXEMG$@ZkmY#l?UE7wSzMLeTeJU$NiZj8pn?Vjntv zy26{UuqArFT&rJUJ7bwa_2ix559YVujCB>XcXm2K;1uCF^$Fl{X7-pt4Re$dQcF7^ zF-J4}kO%iXS@+_D`Zhhs!gTiQ0S~Wz%kId*5&93j{LaMWj~nmq`S>ZyDA?XipH;nPMadO!ad6<^D5#1yRny$bb7uM00~mODiv2eBp;_U0gS(o)SXPm%vCXi4@718!M;L9B|!;-SA` znt%X>u>8_`WzvP<{MT)tPDTG6^jsL_d6Sm-%JK5haS~5l+SDB-&TV2gjm;!O@?!>v z{sE4(g@sf0d2#U-B`KAgNA3CHq1pLTsl2jcLdgxVC5LIx8CMU@CxE#7?u2e89d{V) z@825)S-TY)1h0WwtGsPX&D)o+Y~`=Ark5~Xt8 zvUzpI)ck(U`b?6+iR*iJx0M!!A94xNN8kJb9WMcrwz5 zr~@2czRZ@}TG1+FWURk`+eIx=X4kn$b>T$DC)QJpv1x^&p+WEFz`cbA_EVCMw_icM z7OV{#FiL5#tGeu+&cl@1VpewljC%zwot>+Uowe20s2!jo&)=69(FHa2rx3BAd( zy%k`Os;a&1D}}ymydUv=nci7#`8_>-QN{jUNr|=V#BK@-xiC{&uUwC(*Y?KJFRtJ8 zKFFbm4IhMboQYUID@y!OkTwo;gE14v;%pz^y-PKCB(aTt=w4bLv-YXwG6a;=MxKD) zgI4C*ej`_#YrX}}K4cvvzEqD-I z((!@S_vME7a8rd^U-NYA_|vD~J52YT3x6IKM$C+XG=@+Occ&W$c)l0lbG$a-`ib8( zsnUJWQ~L4q=Lq$_0Mogb7gh2yHSVk1k0eij}ybxl$Y%r_TU-DI;g=;b36_SVZ6tN_S{^f zhAx6TA3k`%dEfvla~K75fu12NaI(3L68x`(qzAv*X#=+ov(xPU#Ly(n{6MJz0HL{N zsQucv=PMAVi0-GTir--veGP}+z4e=+3Pl9oI6OANV>4IIU%I5|5{JyuRB3jR+dp>y z9s*)WP)SM2 z#wHUi%sW3sw}_(I4mB~V6SMjkr%?JJiyu>Kq%}1)b#!)h_G6M%u#jm;O3DN-63Pg` zTtI4*A7_Rh)<$CHoVRo|@=qbL{`gUP;qcjUZP^+-T!WBvTY}FeHMsc$9D@?xy4C;L zGem-9IsLXtUQak6UE+YoM&rTYYL037-`EuPsidH}JnPd5-EHRa#Dc6Lnxtn3!E$2a z8KciWFdM)%-~?ypfQ{ht1jgIo{vH($iVOrY`yhAEfu8Lfyb)hS-xAX7>G}E3RaL0q zA;NO#~Pq zIu9ZE2s9(aMySmOlQ=;z{(G9Sr0Ra5aO@GOdx+>Sgs()Z9I0!BpBMBka@L5^mb`*k*JQZKxkeTEI^mgC1{d4c;i#2xaj{aYlT zXZHDR5D1XfVE^7f^J#wsk>(7R8&t^yFE33@87e41rXmlIA}8%ODQR|PV03_J;&wrg zLT=zVI0%$&MOXJm9sW2B$CD!I|{Jtr?O zi;xM!w7}7$**~(GL|K++qCnK(_I}p)Gau#wxp*CxsWs*^@vb}K~oE|f$*Wnh$ zq<8-bbJx95YwNbq&u+5I^H1V0bx(6v(wG@d)jJNu_sg~I%c+_8 z{YNh;JW|}#kZ*keyYfD_)n3}>UB`|J2w35{)->Q-Lrz`;gN%!yMp7f%17u`m>ut>` zDJeO5c&--y21||w52evFGh69-x5mDY&^)H6q@+k9HVmB2;O_J z{P}g`y}Y9w92|;p;bWR9ZY?nwRZtxcPJI76B&ylBVeMUbCy46_!;3`@NbI1ck~T;s zanquo1OwMiYkAFH0-gUI4y6O?`Uc&SemQZb?zK)qF3fv)2GR9I!W@LY3>}Tp!Y>6y zE=!o63xNEsV6v164=wRl(Tl-R(9WQuusvC1yf5B5q1j8oOy)E>$1o8Q={QcxNXY{)C@Ix~ z(ZT$&ZifkR#GvLn0V$$828>LPd2dJ~B(VBs3n@WDITIo8dp3+!+H!|;*xKBUc1qi^d`gzy=35TnW3O9ryUID3ERbBe9qeS>$(S%^x zCl^u=KiO6qDP=dxwJzej-6(IZC)i13n7JNhnG=?e~+F;HOf9_N0`Qq;2T z{zH1yjGe{fva#`i@a0-mC9y#Van4(1re@jto$g#(zX_$S@jQu)hnlEf{~$kNfH6i| zW2os&msyC6=pA{HJN_(@P$;Z^{nraHLNr&Uz)73X=(DQe`Z6pVr8L3Ehqw0^iC1e| z3shdKFHq&$TSh(ouL>{`k(@7|jCokrxw?NENep|=@pp-sXGsk?cTzT5V{_S;u%x&9wgvQ}%$X`|?uQ&V|V?#%R}F*+|Jqz(}Etyml8*7I0L{ zr;<;D5pyyjq?B}aAfGl$&_d}RUS1BgQO~tsKs$%3KK29I4QeCnn8Xto_opaxjpXIn z?KF8LKvrmI2s$X81ssNJtD0)Zb}IMrPDkd^lAoH?i)`C2inVwHgJUn}+SN61^PvFQ zE+b`vKU#|()}a(lJ3*NTNl6~DYslU(BqUMD7=D{F`unQeeKJmBW(ixpd?KPpn=6uL z#_(qUDbt%)5#%&A9bJ6^Kx~5QX(tE&eWZ?mY6Jxs1rOd>3&Ekt%~8CEf0A3P3-w>e zrtAt7nEgzTB46ER;>xv)P6bj1YryggCm^pQE1B2%(E8g{t4{(QaXn8eB|Jgpj}o8a z=N5}wx4yK>M!j^na8Vr)!K`?dV*!I~UrTnOVI}b3;ZB zn<4|Cx}%9!PlBwe4}u_2EImCvXh!?UeyHpE#yW!GFHMl*BHw(AMb(8v_nS7GzIT20 z8XDv!z<3A}f?sHnT(=OngB2wRyN(yTO4Fa5?nH^1)9wiO0fq@0$}q6>Y8`czfJo3Q z8iNeN(N(?j-VK!>JfH|_vOynpROtE{V#*4XYqwALTzU z$?_d?00(K%m0;eV(SpC6)m|$9i)@euJJEXqBxrnw$iL|4SMR~W8>__>oLZ<|(#;Bg zT}K5MxA9^MxF|T?QC;P*l-{L7GyMw&yV;`mf?5UaEs50df#|5X!Ct4Utek4p$Q4F} zf-=$3^@C8NqszpoSo=PNf(}_1p+omno&(CGYTaPiELZ0WW6;B)xosx^Lhx}RML{f- zq-2_ptO@B)EkF^z*YZ*0B2Qow1}|5+x{^Rkq1%gsI+dP7SU})oSsCKUFa-(06EXu# z@EhnZy7^(zQT~-9_7fUL$h)she5Je}bJB@_FqFpk4)l*ZnV3fU`WldK{7g|cCD>gE z=Wq(pz~FGu9D1IZ0`~*4uV3Xo0(WV`KrSL;2a7Yh|2uZ<7$qUzq#mp1ve?He`k|pU z>K(^-`6N0P88Ck+e4jlT%Er{oT70Bkq!mKfuN|p!7kjml2axFu@mK?)n7y z9*l+}$T7S-oVn4_?7pel80M8fT_Z*SO^{Kj#4$P7Vd6g`(yAS5Tkr2#h6fQW>w^am zz|0`yeQw^t_j2}rX@gD7+u!ro{(BB@Qw4vAKueH2xJ`n61p=Qsk0FhXI6ru zITubK_Ao5WH#7hOc@$xgO9DEffUBSQ(lc{dkwFowK*{#~`})@qH-O0?o|WfBoE{b! zH`d~!dONDCY&YX@Dun zX+d1#&sm=m7Q26n68RKa;2Oux5?oM4q?P}JG}9CxH2JV~<)8eQ{l`D~F9`HDTq%Q& zih0f7Al5eFctOwMVWLrKWQyr-+)jx~x}xbbwbAEzir_`6UIPUB4pJ@a(zuk9_fA#3 zE02M{!5+S0*m5B4a?8rHore1IE|_ZQhvAE`z}*g|=BAAs;cX&rQIzK(HRg%2h7BSF zI)dtEsBZ-Zi}F7hw9We%Ke)Zi&duE>g}0(9@B!@}dSdgoL|nnCbLSpmo|A%tz8T-a zgBVJZsKm+P_CPus8PENS8?!)pNXf&18jMlQD=XWF2L|LMe@srYxpC5ZsXsyyx{Zmc z^4R7rTOeKR-zD!|Bg8xz6c~6mRLDo1{XEHXt$y2vUIxy;X(vIutRJA+WMN}-v(PO& zF0Qns#Jx|AS3I4P4GyomRy9~A3eRVEuw?rB%WW-~*$qvq^Sy_GyFPywpJ%qrorPko z8I%!07#9gU`F3S5HwVWz%wsjFGYLM#VDE&OO=XSHHKfHcH0NB;;%~2_ z%Y)7Up%N5Qq1{VE*-|~&=(-;FV{L6Mwor`$9d2$GjVBBuflZ}Q3D41AT43UxKVG`_ z1B>MEd9#+uTYr3}8;EQskOl^v!6^>!CSWCiX|ko#p)OD~p}M=lx#tuYANSSB_*z?E z2Cs@lyGi1fj2p2}{pI{G@PuQ;2gvd*tP)j)$8%%LrUAkwFd-LG<4)u)f>8l>#if4r z@+DS$sJp1B#F*5G?a+Vb5Fz zcFn5)2JA+I1Ox?#MvWlXrIkT$7lt3w2K7GwK8A*~4+`%LkBp#MgQtK9cLsdMWkig`+v)%^4g`2*XX7J$ zs0zeMg)T+f=MR=I)@X72u9bR#QlctX!cPY@B%v@ft>TpSPhO~gcQK(Q}<|y z`?<%ao$r_C$Vkg^MBCQ@sbt9V6rBr1p7GlkFRlVT;yk^C=oM@}1nV-2t{56^40&9a zfg))U2pTR<3_FG*Af;fg4R+FOxd8@l2x`Q{9B|D6Vt+wA*AjmdpWVyL3*63atSN@A zUCOgbu5P%zdl~2tL^HG_;3jY37vgai{&UsVlD~tZA4#CIxJ*Rs20~UwSb3nOSA2${ zbAsRzQAQ96G9capKV2nm)s^+zx0yJMZKii>!2S1 zpF2|{HgT(Hoo^p8c0yk)B)%}FK zo(~=zz12fnA_A9*$sK09$&MSiueN&$h3EU1+vNy_r_;vqWh6`LXeN(~tf}X;0ixlSN zE{BPWT3Sa^AXe2%)ssOww&FgB8pNp{zV58lndSR-7 z#Sa_GhefG0|AzL`%K+L#E_`rX64P{pBLMFQ9sduSP|wsqG@<;C72|(OLTjCho;PJI z{!aY60@QZlvgnsQAqwA1Jy$}YV8Os>R9X8uI4+3N{lt0Fz2ZFAYCsqVWNv2N{D)37 zc_f02M9Jnx`M{ONi(Pv6&k-^<9a#;O0J?}YQdgGa_nTv3d(H!8u*noX+Lx;fQ>}RB{(^! zff^RjOF=sJh8Rw=;Cv{qVQoWHSH`pSrA>$G*NO_Gg$A{#(|QIJ?F^M2>kb_sxc-=& zA#yt*k=*xBIH`{#ZWa9el{EU#JWu})fWP=Vo%a9fI5g>3zy5ozjn!}YD^Le4Uj6F% ziyv?mbvi0@r#x;}Phxz+=+j1kMAz>d{^HOh{);Ygiq9!2n?GWI^49wcWW5||glv{{ z+3sJF`$bV^QqMX<9s4%vW%hnrs?NM$M_as=m(asG!;xn5h8{{aWc#We%Qpjsxq6GZ z+WkduN+MY)sc2Ap)t7&7M9YLEDv6JOS!b$^3w9(0Iow$+A*;k)1t_}X1B4pBN&y<< zjMTT#A(LvO{($MkE5lfcP5_^etj~xu8Ob$N{;E$m=t7(SYqz9=N`fkKdto7H ziH(a37qj*4(m~PyMmj3U8Jvbji7-^aS`Zo%qF8?g;U8iX`TA`+(Rs+rIn+|h@nNz7 zj18(69v1i1!AGGO44Vc7hhbmAZwC6AhGKGgJ2O+!6Bz7}4%|W_-5!G!L5Y(V5)W$| z8+h^OFz00h8(eH}tuF0TM~W((M#vww#zd+Ls+Fm7V~7A?QudFHx$z9;RS->d-Hq|C zf;VzX%jy#5Cfswy`YHH4)B7o)ZDwbh7B%B6!VubU~+m# zF_rt>=$CiaP*ANUN0%oMmzS4Cs`5dJ-ohOu)ksAh#lY8*)%(nw*c9ka29cqJjox@! zsvMo?CCpAbvYANc1}BGij83pP+;gq1&kpVbRd`87C0dm$!hSdb@E(FJMEwvt|CPl7 zNup%OMT#FETAQ;(+q4Jj{&IJzTxOX zgY;u(>8g&|6H%R~yHd z2tJUtbw*H7GvX~;CcXpX6M`V16ckrFw|m`zzU}jBhN5kent^KvWy|bfojzvGZu4~O zjFOGP;9J~3z+;bi@7BHQlr2x}f97-!FWzn~ou?b_{+)hMe1O){l z44qHJ8RiE_9|m{+#zlg``xu5G?a{9lR%R~i#pePVZii|N^#>Gkm_+fkGqj2S2pS|v zufyoV?}*djJ8(e6ZtBGa9$z0HXjTBmS^=Yoy7BE>q=g}pKnPVd)@~Tm)rRQl-7av{ zA=A<)f=mcK9R!9PIXCM>S1p+bWelj8?NWgUwHaw?1u#(dp1!$bEh-&k=o5Dgah;>1 zaTiZvQOhoSV5`A7P^^bu%l$1Zxwu~q!tIdq*o~o|BWs6Hs32}bhP{p`4RPm!N|GuE z!_Zh;dkD1#staZj3+VBPYv4u$=^1Qg4s#~C3}UF#(4&c0eD-y0OdC%e7O=Fm6sXB& z1=>pdZ4M-oKw}%&ke>|rV>KI!U@Q!j2C0YmTU~_tq4+?N1HjXJTTGMe5VVD{Du&mu z_ha%C_cqUL{l1o`_!f|vp4;~$_z%oRfX>01pZ%d`=np_n$WyR}gKl3bpo&Rr0+Sf8$nL47ORqRf=SBEle#MYT03{U$RLEt~#b5BlyQ><3>F z0*1Ipo5924q0h-9)HuZPt`Gu{44{DjIbiJA{{8W|PDrFZbnOS`t)SA8r3A&(m0?U@ zU=FDM_fvC4t~8Eh3|UmU5b>3Mn*__2o*5grhO9KBxo|x61hcRJW5KJjneR|U-|yPN1vXh z9?*0Y5PBjpA>kLu$7jm8SqF1(06c(*l9Y_tqBCGsS5Poj!98;v7YJRs)3J|-cqJuQ zAZ5e;&}3U;G5zSiLygwt&@sCy>11_cJJUEP#z3cX?B ze(#Jx`0!kynk4k4a0?@J2YuVKl)(K7AoCHj0lUM>GHyblpEe;HMb+jXOH;kKcxv~H z&we>Sdb9Q1@0p>1pddNPCJ}AT0wUgK6yLbt?Gij%XdFW(9{E{g7B`dVQ zaTI`dLpuovvV5~ysfz#rGvY7+8Zbd|7?wsHIF4`-BI`Q!0z5A|YHHUMH!bY*`hE0^ zUB~cAK0oBJliw+BYYTDiXlW@IsGa|m7XQRS6Zcm>HWys~<}Y75@@yYT>@jupJ#@_o z>Q}@{9Ql0gWQ4*1gX(}me1n!*L5VY_7Cn3Vw4~GS%o!i4sK^l;P4L#rB!q$b6L8q$ zc*HVJp?2(YCA7uWW;CUHRZg|+N+*t1dgt(sDXMxKl1kObn{-e4L8%VH3k|f zJmr!Zn=w9Mbml-}=0Q!h)Fh|wJy9|V+B9i3RZC0e`l64Yed6FaVxjw4uBgy<+@jy| zbAjh?o2(E}k#CEFPviUL8>C;I38uWQ}Q@J%aVm1x!8+Yp#h zWZv)`f4%-*FHkw?QZ9|x&wp*WAeI%h?fld8*_jbN*NooPm}WG_ul zP36KqnCkH)>D1erghnIy3+>?#X_)<7@f8Xibn>zc(K*S+_iSLp;r^tV@j#zhN49@M zMy9e>W&oP0rbhc=OUWl#f{^>jwmhG9^%PSlvZhCRd#`AIydi+{N{pXh`Bw{89F+oM za>lV)pSxOMA#4DUg@?Q%khdK@Nu*J6Pdvy>H9UMkJ2#!D5-sc$rKr2x$YFgrBTQ<) zNGz14q$4}e%~nMdTW{Hz1oh-L=x!97B?oRe9N^EmkgA9Kynm>dy`#IhRU0q$+ z-ifD2UY?MzVx#7%fe9u=$TSzdA?#C-C@(HVe$U%-BW$I8UsB26|1J&d2| z2VsH2VA;pxjRR81uwMFtDi^!Y zv#g!a#v+>8&oA;=vqp}5qoyrFtYm!{iLw#LH3T4N@{Hk@erl4^k$wpS)zJDtq3~td z&CDgDU1R|3i`@pp0f*pWVUcvcbn1qX(3yRYIn-WVFvqD>k&yBQd?oiV#PO)D_E6Yj8q($Q;_t3TeRPk;4Z`s9RCR;C8-&8L}lJ zI2Mu`hG4*rKUOP`Q4_BljnEV`_`ZV&^_j-q0FF~;`IDs(BNT$Z!FW;79M_>!7ST3m z%4iM7B%D2`9zS{fB#4?wbAI-s(TM1W;r74;&KTTOVAa%WEZYWOBRA`YKnS{;C>M%Q zPNIN=B&u5V8;*S_vM^v{ptpB2c;uDl!4hLR&zEYo3tUu7R2@Pq zvSR1uu(R_py9ev)T{g&Q60N9N`Z0;X`zuJo0D}W!Wfb1)s8?szGxPTD-d)_;S%ATO z{bD&w?Ujtix<;n$$ciO&Avj-=Gz=kKxptq_1Gvmata70p$H0st#b<|6Jf~RA9J7AB3*T{wQom-$G3~h=Ug#{ zbpKhz+a?cvW9Zp*xWI~WUm6dSk8Hzi3oKe%m?DI12NrGmT^a|M3tI~H@6jCWpx9Ep z?UcM!xkV}O(Vd^a_#Iud>3Aa{--4~--n+}oCLE+16Kspvk<4%aIXOB$QD}Io!A?f< z<0U^tQo}5P*BEetJ>EpJoz8Xo1`17Bksv3>=ArRYDGFCH)2OkcPKJyWzU316=3>K)Q*HjvUf{33k){}=rC*5TF* zB32`abewl}VQ&S)oP=4%M{}u2Mkk28Bv*YuXR>cc$Pc;Z$2JbnELh2DkdbbQ_77>K zoNG3+_I*ux{GA+Wy6%d}D)mL!Q8SVJSi_y-uIhb7QD+9=%CN~^E@%zu*0E&u zf&PA-miEu>p_WCYsSRWd$0a7`=4R*StgUw7-c#ZmN9Pb>t-VbA)0K$ox zo%(=^^nAUF0Aq4qUi^#Rw(TTWKOfn9b-{kO#19-um7c8kJxJlob&G*&_h;=KdwvnY z*2cy&@eTgyCsCb>sT;C7`1u{>S54ilNOF{{fHAJ;fM-cj&yes^YGgfyHi>4cu6Qr5izi9zBM*iO-K3K;dD!}GP>NZ<{>fx-uTQwDagE=p=TYko zE*nTbWI5v8TK^sL3g)HnaQA+m?`DFC!`<;f?M{(_n!e|1WXJE|X^UicS(%-0eLJ9; zadRiD%iLo30E@QonkU>EO&=OQ)TtF;@!ciTbd=rkhu;a)w#<-2hLZ2a_5QHs_|g#wFl4(pZQq_}?ez9cQV`0$@FAw8wavjt43>M&-M`=Dn0l&@uChq?ilz}h zK4dlcjicUMV~U=MXPv&~qgbtji7SUK=3a^5J$B>;-7paM3JyNQqBErW*1l6HSx0m7 zL!yaBnO*{&ae3~6F`iSCABByZ?03bpB73eLbxiYXwG^ETF(=kYV)ku%6E)oct<>Vw zNJxso+3J=DK?gUoLH}wx?W`;?XNCiCu$GH{b7fjtS3iG8&7$(d)fyc9N?(-*VtJ&DV+|jl{LhKY!f2Q}M!Z zB~%$d2{vTo*tQn;SEjT9WxrCVe5ih05Px0!?O>r(rNaD8O14YBCO?+be9jf^p4fUu zJBwE^qSd;+{{2a&pM|=0mhUK3G}G+%j2p*m{vNcrT`>Q$sc=G#XVFf-d8~4o$!y7+ zRJ>uUE7?nV#i~+KYa_|uqerZV-AYYbZb%rmrhQkF;yU-sNH0pN%VoT!wWwPTB@UD1 z6-7Xz(ucdUZY%f4%nY@VK>PTK|r`bMo$8F5ifwLT~ik zPpt7kVX&uJu>A&aJ72CXU+TGUc^k5}(@B5k)mdzP<-@lymj_##lSsce3NA+x`;MXW zsZtNRotK>Ov>>iD{LmGIWnRj?YS*+5Ie^zc|I(yX&M+z;714zcxuxhUP|L4giZzu_ z`NYiYv*}0NeHcZqH~G8g}Imxq0^Ka55d5 zY4}XdDynBb%M1KwA~5^GOYJcS5=ey7ZIbzQeRY3Vn(Z8UJbgyrbU<0)#s%HL?`wWj zQ?bpBNk%Rns7yOd!^k*1K7Kt}l_^gtlj*y;^D8%+*IM*LYZ4^}#n0RDy%I~UHnw^4 zu1HGdbHWhY8S$c(4%5E(4_oJ!M{`DxI9+bJ7vA9Roj1}nG1~G|%2qF_S=edw-b%?q zLGc2WHJ@WoYHu;ah|-_zq+4f2<>>Jcf1CR5axTJ)W$qUZo3wO5X^fl?O2lrUHLmlx zY{zcZdQ@Oo;6`%p_0AHGFF8)l4!dg?*qfGkshJhd-nTO@@s`v|Qm?KK%_{8dJHz%d z?u-_rpwY|cidt`a+KY>+^hOHh<|Km%V~v!R zH+r5$E*rdkJnlC!&wP@TdVskcLS{{nwG}+QdoS?dQlXwwPm6hs8%=eH@X+l<1=xY( z)`=hMU=n)8=k~HYGW_u66)(PEdX@|Px4ynGf6O6h-1R~!N(!y;Y8!L!*z3t`4RKXN zndRQqMmnGM=RQc%^JN&e561?zZD1R|-w3>rk;%(bV>s3DsA$t~6KQn+O3yHuuI#+b zBuS6DJE1#LC&Nh1o#t9);Tufx1kP)Ic~N|1SgXUgzgsURVW9HKP7$N*G%aWboQg(0 z=J+zIJL6JY4ENo+v%`zt1*7zw@a9|d3|wy9NJdvB+|!49+Hojg|5>M*Nm6^PX1lwI z*^{!x)NN8PG>pUR&0iiKUH;vCe}HRm5x*?uDcyvqeZ5{IzOf0__Ec;gLUK$MZX5;T z7b*R9-p0;L#;4OiGRT|lZ2l~COyfX8vlZK^AwexFTeAa0zGHmkqycGc_;eKqy1||7 z?Kt~Vy&!Rl^Ho;Yvg9?Ra15STxMNJ1`l?#}WGuApeQ39EatJ z=_SeA=XSC>EL2sdq&FL7RNRfqFkZ^F(SBW-Sr;^>Y> z74YN``C?`1iwTz#kY+wm0&wXOEK~lCJXPa7zopR6&zFo1cyww6UWw)DQua>2a}nQ{ez0Q2 z_+Z2-(Lc;K18xRx+8iLrL?Zqryi?fz&iE%e6zfFfxIC; zOh>Ma1db80t5Z`(UpV(Ll&3vU5c>Z0lOm6A`q9vgCKDIsC@FW*!mi%-!4j=36JzGB zH&e~Mf0c1ERj(~cAV~M7ZqbPXodO4|k*T;0*|a4U zrZYP?t#5b(;lgbF_HKa+krvkGMaOSH>Hs6ZY)*1mn0Z#a7#mo2B-#d}iI6S*>k7CO@wZxZ-Q$K!W!}@;MalAu!PW5JtAXC7ThBL|& z(%8MszR~Ndrzm$eH<#5E+M`6EW)U?JV0`+@V(Q}orXx%~D=gdFUza&%e(>-O-ZFw4 zbm9F*G8P?&lA03JX201yi?-{_CQX-SPFko;flXMmh8yF1Wo2Z1aZ1f5vQ}?@lE9i4 zX89@2%yN>NO33-3^Y7XDEhz=j9lDUJ#klB8_!z~Bp!ZMVBeH~;^ec-ovrtz0-vrI zSATTm31^UcQGm~%`%912L)pHU{`%_4m(J(TSSB^`P*YVnrrS<^Ot`~JJwB;EA))La zSGm#jyv~Z))$;vuOk2T)bc+PdU!Nz`kH<*k>UO{mx;ZAUK^43`ZZDNJ)QZx_7! zI8SK$%G>@pRu03#+TPgHfupS>$-n1WO^(Wa;W zd2yzXFYXbqmeBl<8I%*s(bAJF?JJAcW4RzNc1XUe7;4;!D#CiH&F4yl&y9|w$M#*< z#~dxgpqkmZ)YNI(gQMCRn&n;MzjF)fWOA%U5ay_8(ji8@vaZ@DfzBpsRLCnM(ISgF zK67+Lkh|Ver)Z{jt}V%Yyr^0}c|NyL%9KsoC?HEbMsnui^3ej#jX`}(v2ICmu`@e9 zT$*3LF~esz^TWJ-A=yvhk-*WnK?Co}aHQltZy8<~n4)kRXj>-gh-2#*T^n{v-mFi2 zYOLcNyA;BzarI1*)PoAOyBf(CyIyOD=2-TB{&hWE+!R&hh4)2nzxr&r)=@nD!RJ48 zvDT|}Yi~eN$Pc8kNbVH4+FH+QKjUazUVDy5s6G9n8^DAxv*|D z<6Nfoa7XG2#l%Ew!9c)?2$&45$G_CIJ=ZUD!SIWr7-~rnoN-~Zlx**rghQr^Jc(Lx z=h3U5#|u8(r#7t@c)v_MwWr40sywPgyq&>}MjWw?^YADe_#k`s*|7}SYQ}(lEAtFj zrk&r2$6M&A#%Ij(^=Jv1vCOqnHn`Z1cV#SD@|%`wl!PA;TAcQ;tMl%5T451$C}w9m zW9<<0Ry~R3*ln=J9``pby)eyds`z=yjImwp(G&yMHP#;pM$r_Mj;V8VZ%mE<@`|Vs zOElGT+C3VQ1RZJ(;^x|Pbv7>K-PCzr&(4)IO<(aM{f$OI-oyHmu{q5aT?QXR-j&}P z;oolR4zDrFUOD>7^n>uH6lWu6VKe*2IO>I}dL4;A!J?w^nVJ_j_3M+e-Ym(GdY->v z5zC}v+sNj|@hOc)itaJT6NE7DsZ686;1o@9e_EGPEREmi6wD zsI=+d`av#PXSVO_1fAwF@la|=HuF@8-m^ zB#XA{@`0D3JAU2Q=Cs|_QKS*&DDO+xy4n_eWLZb%dRJlF<0&~6%d{r(yDn;t4LYwM&IZ({a?m}_L zj|OxHqtc(4VX$%6P`g8IF&m(`VN?Do3AF=mQ^(uCRrq!Vm;P$ zKtyB+3RA7@o_2N_NBru}8m8opuH^X_{Uux6NyVScVJmm|{$X$JM8WTOc$nu{S`1hA z7;RpEa!hkJM8GHbSjp68Ym#d`dC>7Sx1)J<$*WJkAszM4J~D~gI4!QbE~d0_>H0S> zR`qMz(n*c$*Q+13ox9}RNQq8R{0=e(*Xou|CqX9>&1Z&9^qoYgEC^TUJSf8-i8+(7eWWN*z?%*=#kV^1B=`* zLk+1Y`$L6yKs6NEgVyLRcF6zD4Zd2YKS1BaNBn$_#jWri#6%48yCi(8fXSELA|k)y zSzS_H{MERd2WJ<4ly06*JBXi7yB6JjPsqYm*yc&fjasC*J z_585i@HE+HIRV4xkFJ3g?@4$u);c}*@I(Xmm)k*%q@@2<+<6B@mHk=#sVktMU;+sP zBA}906hu(5RWdS?g9HU6DoW0vf(`--O_CsnmY@ht6a)z-ltv^6i3%bhS+J43r{}j@ zTebW9Mg_H_wSGhlua%(>&n4NXQvedNj$9o0~ zY1i=4Pshva&E(|Abnlyf^TvK%pY5B{W2AHstLP7i_GS=*!R6&Pq|CnH^j2f+@PUlB-!*5f!nRIDm>-zPDk|yx{GhWc1WivI;flG_QL%AB zd2R8id6u7BcSY+$7-#u};mq=*kdfuWv{XOJ>aMoag})o*#44?R6_cV%f72zUyGx^n zM}+-L2K!zeUAneD(4_Zb&3VTS7ldkRBHVLJ6>Wc=_VLYY={n+WbV0C*!!6tRVGngZ>a|OTl@^3Os zfCsQ}@2vQ(0=?QMFa`HD; zV#7w|LjL}0`X#Flxq`tv9Yb+l7ta$!q$A^A5mS8m)wyD2|GB>Q=VK<0g&n^toZAbo zgk>fXEUOl^XJV8@cM&5YqrEwQDF zV`HFp@@(YbVn9iM(wKdd`^Zjzr55HgTiSStjF!viTs>7CojdmPx6bj`+${Nndka3d)r;nUAFNF4cIS3Vf#ETR&tr8nAMT#PWvq;P|YCaH)4Pyl!~DvLvPEsB8Cv>+@)*3E4FNHm-@{LvxGN#=zK z^hW#HU%g%I_T-C6!!3#FZhQ`NBPr`t=PRa2f6XLH7RGCrUNlSQq&s{HTb`JCusMR< zlag$n8Ntzay!QoXJRuyu^ z5{l-2y^QFe^R^_G6H32cpBNeGo8>moNNN3@HADM)gUf+MFnoEy?6y;V)kIS~HI>RI z6|73-%VxVP6SJP|uQAl;k=o`o>~f)~oOD+z;12zMQ&r!p64v+83T)M9qccn2wMw*F zl_!6n51BbEoqE%qgEVygNA=-S{+%LR{!+uW>sBsOC419a{6Eu$J4++x%Fj_uU2-u@ zRrY@YO(EFawXZko z`mrYW*M%pV7E*eyb07QlQbc*y39b*+)AhWd-70UTeIJ2|x|uEO1>Fvt*^QaletMgb z2CFqACkx-H;Bvo=VJB-W)9rsLh`zZ&K28hDwG$N#j!6^_-s>}`&OYw_jDPT;0?l#W z6v5A*vrqX9D3`ROCz*|o7tH^$VfkuFad$`lLWrQ5#fzwWX6JJGU7u+Az8L>qUjMdD zF(5JHg{KC6x+vY4x3i{$aj+5oZ+0%o?E_`Xha1=7A@#F~Do=N=R*4X=^(<*vpFgEP z)<%%uKSViBK_=^VL6x1C^&wB{P^7S6FuhNWnh;gp{XX$g6bH#pVuc=OBi}TlWbI3f zvk~N#)XtkZ#ox;=eW3JCOw3(#`NiY+srk+pECX9J=<3PiU4mM#2WB2H&3|DkX*ZLy z_23PQp}oqdK6_TIMynAJ33x75rXKu#af%duxP-d>;<>bE{^zZHjgzbgFIky>`bVP| zm)0vuhW7-_KbV(NkuB!?9BE#bI-I79MW9(%Pk6Fb{YW33N1a(b+S*XN_Fg6}XL#TM zy?)7mkCkei``|_s-`tC`*2XO7_UKQ&@||w_QBHQ(F*qJ8#@`-TZ@Cu6m->#zrV1Hta*4$ zk#elr{I*t@m%{8RNB8*$J_#x&>ngEUg-PDA(R^vyDkpwfHw4QM`q2HvJDpW8em3-- zE5Q0n>Smj7!0eOG8}gjzv$(A`1;+QAVk!1*evsXKdLhX(Y}EAiz+29E3U9uYh%aYr z#h=|G9_i&eYXpNIlFUSpoLZ=RGV{!{s-q!sU{0jkszHhB+;io~Wah~2fov5k&4Sr>&WFp5+28$3KP)5<})Tj>`dz&lK`|a{bUN5SG(6sYO^fZW@8uQqke`C` zCe{nLH;{@|U-*7n9klxNW}PY-1>tHp``EV?d)EBP8vlm(>_%!dc}vslQiT%E((Pqo zJmQ=vfPOgPg!#fxZcP6VZ{NVLaZ}yoqE1o64V~k+vl%tvjVKL2*vK4#;l%>2^}k9s{ESnkM4=SSDAGG9Q?TW97^VDw6k}c7-Q^gCXj#-(;mv{9 z{6}HF{OG9&CPrdT1fN7U%|{Kiu2XIxPcwX{^l!QmE#bro^w32OT6p4t^fY1LVqZ?_Kig4GS>cGRu?_{Hhu3+=q`xM+od3~ zz|a3d(fog3mmh*VSI}xHbR9qvgx6ucJpz40n~ANL@%Zo#qi~~Lht~anHxRXOuoY6+ zJl)R5q{2n^HOXqNtD^!G^7v#y7|2rx3N%)I*@s04p_HNkPF|u0N;zP3Q}B9nlYbEv z6XOPm8ykGEw-GyZ=uqbzYo*v=VX}uPp?LJ~qw^j?R;x+Yb6}5v&$XSmBHVXoc9yD> zdP|wYK<~#ASgY_BK6kuj6HX2hc@sPBJ8E2DNl9V#J`Xh>_9F4MS+##oqDeNLsl?=C zMt4-=S65ZtV^WYo$@F@Ci&N4E;g62Gtlz{24|bZZC$!fyUEio zUwr{UI3$*`7jdDycb=rG97rSd}q}M0mg6tWey`K zfA4lSs40LoUIMCy00`(BAvY=WTkwE-51i~^XB(EOd$2=jWYiAuY{thwfOGOB!XSEp zjpODCGIP7lSWE9X0l5IA4fFIdQ$$GtyMztEA{^r?7Jr5T(x+(Dh{La76mcW);DkP5 zm*(9ZXe+T=)*ycyDj^-h5si`+?vep$zVVOyR|0A4m*g zVueeK4_$&JHpUygF+l%DAk3&eu4QJHHp;0i_>JvqUW7nCIvHwG=-?0kinJ*ZUyi`- zaHd9@pX6g7e9=t96n3U4{OUJ7T_=c-)}@*sfqgTM0qmSIH^e40xZ`&T3$q9^y$Y>J&6#7D1|rN$EDZ&nn2U zJu6$5rh;;)Q~0*X@b$Sg7Oc++zx$ue+1uN%SuLic<^07?MS@pfR_T;#P!?6 zP@_OmvW%t(d4h!b%imB4nnB%xENEO9O_ohtwoIdO@U5yv6w1z>eJ}@QBy0wA0Ac(A zsRjgD4z3=U@zPhlh9NoV(8P2$5oW z5~y|QvP{9qKrE1!_lynKwAbxj@w*h`LWdTJb9rT*z^R_4G%)@>y&7l45PfK9Xy|na ztLexzaKH_GhjP$RV6Lv7o^p3uPxq7&l_D?*suV>TO-25*;~5+p8VZjrv0xT9wzFXH zP$1Q}j3X_XMd+k>L5!p+9oQszlLLhpa&5l@KulGS#kmn}GlPU1bahREDw+>CHkA#B z%#ae{Oyf%FnJ|*#;hYwGD*2`Fsvrghn0yWBJ>bwRElHinAMhV4;oGNhIYqB%yr?&1 z*~G{9j7@R2%a!yO6v}%Bqf6a}&-)}cqf5nHg=rp(UyAy7P6^I$J(ScLC=3oFc;4Y9?qn7~J)uOh^**CszPJEYw+*UnM-kQ@8 zzw;jp=$gp|;+b~N(VqeA;^Ze4S+1}A`$|!<+xKPbQ-iD$2!k|*P*^nse+hj8!@dsp z6Bt!6L&FRymz?vZL={TzWsP`=8k+vA1XVIb zlxH34vM)!X2E)h(R>n_h;7Wjbw(h5AV8mg62Byy7D1wGZ(e*)G)gXVjHyg=M?%&>-U1zLAcDr4_eM&@$#1- z`}PF19Gjx(1n(fJp~I;g4>U*s%h9*tJAZ$ll`_M+&2L%@iB~$Q7?J@mCy>do*1R{C zUa)hA$qv4a^J-#(%-6{pgjx zw=jLlTdIPs|jxDe( zBnaD0fBbO-S!!@l%z`OAuxX^t4}z!#ju*^<2ZSg<_=QwLERX=z@nUGG&p|)CLI^<9XLMZ=3@J1XMU2BT%mPhMou? zy>H+nB=#5>R{#ye+!NS*670YsInZPkb7lu3oXhbD)CV3d@R&rLTc`7A1LZx&UwC8k zaC0XlCUzh!&C%6lWE!6hVbl~XRz|x^i(Xj{!H&XylkJE(@!=#C0ht`AcBqmiSOu*G z)kv6k$>d3}M)hQzV^!f={l(q|a6Lu_`I1|^>#BU@SHzH5m=DaGHVLN;C@TQAol@b7 zO$zAzyLR!}d?TS0D=fH9u!f|nQx(KP>H}#^5Ze+k5MWRQ^=*ir)85_=bNcZXLkoAe zGeo2|X2b*`1~KLwhUfoClE45rh7*os;sb^EZ3|YdM9?if>2WP#A9$6)M)C#Sw8Yl@ zf8xqN4G_ve(eQemXGXbJMDvc|UlVzZ@!30^p<;(I6IWseykGzV^HUPM70f_We&U-wQA4v$~j%ac`WY>AoL=idLC zsfppa-dE;JZrEdg0AqogmR8HiuiH{$a&Cw3B_$=@OiD^lNfA?nu0CJZ_Nwu~%L{?= zt1F{P4D8kWLtWhjxOuX0HPiL<%uM`45%*Edldvx&E9*X1-Q<|RwLt%qqlX(~9@oXV znSUB2?6|G3sFcG~22$yOqTg>gRw zDH>whf`<)5nj-tAAl-Bd}BsJI(}3Pqo{ht zG~&xQ6tNgr>VL=Xwrh}u84H9;q2HzJlx{O7ANcvFxUc+!rXP)sI)4C^CU#0n>Swmd zV}+*84g8s}p(`+QXb9iWF*~taee=yc!sSLU58+a28A&yN@eSxK!C{zfzJF-L?d;W+ zx;F^69lM2xF-{IjC%d}As#sqk@aQuBpVW9546Zi!rDP&f#(wyQqu~mqcmZifp`?(P zW@g=dW}AR~qZtTff9bK*3lpaqw>8qMm?CvCRhExSOsjyl^Yy(>-*?-K$dFjT7TaNO4Z#a`2gt$+%gw5^pvMxFa4x(- zS&givCGS>CD8}OEa5)kBinB^laYqA7L_G_oA)~=AMqWVb{8pZ$5pPYa%o7&pI_6ktBElvvpk;Xc7+V>64n4^71NrI-Yi?TC!esK~8}XE^$Gw_k zhc4YC6yM=^_`~K3>(kzB5?P~>x0fd*GQ@xqdrEm+f8&*p6UzfJ(nLnEHPTHLJ!EZdio|Ra8H)KZqu}XB#z);e`rPV?H{PHc1hwGbukL(W!{XjdHAt9{xAum!yUTD>{I8%^*-2NP=0QrKSabYW;n2#+o z`-e#@ttPfQC79o^KH5WnldW1oxRBzs)*TY+SufgOvgM)fBdUvwGABv4tUx!wtMP8H z4DqZc@v6*`9VRRf7aOZ*K8WY*RxHM?BHVNDxv1go+Oqe?YrQtuR#^>%NbrUTtEHtY zY0zrDN#vN|XHolmYO7Dx6Hd{ZhDXH*18R3ARISW5S~fkF$OjR>H>}PzK)5Nf_vG~D z@W;tzXR4;-*Al*}By#YXxVLXI*=^KR*`-5Ut4S;((=_f^Ms_i~+gS!&PN~GRe-Vuw zj-h_u@=(TN(8;4-NHhAk)*8aWvcGb_qwx2&s)Wnn*LB;Ct6$M1E7|YA5gX<=58PAD zE}$)Bb9OQLih@AJ6{1~eq z^geYwF*`lC+KZ1}z*;1DSU;Jz=}F9#tZ=uGpyB@7m@9X3hW$l|NY(`M<<=>fKhCZW p+P%B~W%lBv&xIz(px9%}0%P$fdLP`&3StbKYNt-0%qCf0`*%u%ZD#-g diff --git a/frontend/__snapshots__/scenes-other-billing--billing-unsubscribe-modal-data-pipelines--dark.png b/frontend/__snapshots__/scenes-other-billing--billing-unsubscribe-modal-data-pipelines--dark.png index bb709a5c8741045e43501ffe1674d87d7bfdd71f..b646b463af3f0624b82b8d336717ca2ef7a6152e 100644 GIT binary patch literal 81934 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 GKlVSJu@JKW literal 82146 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 z┸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 X(zsFkbw-N*lu$Z-ULjfj>Ye`s+F`4Z literal 81915 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 UmMfQSNSoxT6K56E6%7CSU+oLrR{#J2 diff --git a/frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx b/frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx index 440000f5200b5..9f2ab2f83704f 100644 --- a/frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx +++ b/frontend/src/lib/components/PropertiesTable/PropertiesTable.stories.tsx @@ -1,4 +1,7 @@ import { Meta, StoryFn } from '@storybook/react' +import { useActions } from 'kea' +import { userPreferencesLogic } from 'lib/logic/userPreferencesLogic' +import { useEffect } from 'react' import { PropertyDefinitionType } from '~/types' @@ -46,7 +49,7 @@ export const DollarPropertiesOnEvent: StoryFn = () => { return } -export const DollarPropertiesOnPerson: StoryFn = () => { +export const DollarPropertiesOnPersonSearchable: StoryFn = () => { const properties = { pineapple_enjoyment_score: 3, $browser: 'Chrome', @@ -56,5 +59,24 @@ export const DollarPropertiesOnPerson: StoryFn = () => { $initial_utm_campaign: 'summer_sale', $initial_geoip_country_code: 'US', } - return + return +} + +export const DollarPropertiesOnPersonHidden: StoryFn = () => { + const { setHidePostHogPropertiesInTable } = useActions(userPreferencesLogic) + + useEffect(() => setHidePostHogPropertiesInTable(true), []) + + const properties = { + pineapple_enjoyment_score: 3, + $browser: 'Chrome', + utm_campaign: 'summer_sale', + $geoip_country_code: 'US', + $initial_browser: 'Chrome', + $initial_utm_campaign: 'summer_sale', + $initial_geoip_country_code: 'US', + } + return ( + + ) } diff --git a/frontend/src/lib/components/PropertiesTable/PropertiesTable.tsx b/frontend/src/lib/components/PropertiesTable/PropertiesTable.tsx index b245d5db8bae4..296317e5d7e7b 100644 --- a/frontend/src/lib/components/PropertiesTable/PropertiesTable.tsx +++ b/frontend/src/lib/components/PropertiesTable/PropertiesTable.tsx @@ -9,9 +9,9 @@ import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonTable, LemonTableColumns, LemonTableProps } from 'lib/lemon-ui/LemonTable' import { userPreferencesLogic } from 'lib/logic/userPreferencesLogic' import { + CLOUD_INTERNAL_POSTHOG_PROPERTY_KEYS, CORE_FILTER_DEFINITIONS_BY_GROUP, getCoreFilterDefinition, - NON_DOLLAR_POSTHOG_PROPERTY_KEYS, PROPERTY_KEYS, } from 'lib/taxonomy' import { isURL } from 'lib/utils' @@ -249,8 +249,8 @@ export function PropertiesTable({ if (filterable && hidePostHogPropertiesInTable) { entries = entries.filter(([key]) => { - const isPostHogProperty = key.startsWith('$') && PROPERTY_KEYS.includes(key) - const isNonDollarPostHogProperty = isCloudOrDev && NON_DOLLAR_POSTHOG_PROPERTY_KEYS.includes(key) + const isPostHogProperty = key.startsWith('$') || PROPERTY_KEYS.includes(key) + const isNonDollarPostHogProperty = isCloudOrDev && CLOUD_INTERNAL_POSTHOG_PROPERTY_KEYS.includes(key) return !isPostHogProperty && !isNonDollarPostHogProperty }) } @@ -410,9 +410,10 @@ export function PropertiesTable({ {searchable && ( )} diff --git a/frontend/src/lib/lemon-ui/LemonCheckbox/LemonCheckbox.scss b/frontend/src/lib/lemon-ui/LemonCheckbox/LemonCheckbox.scss index 6af35383fcc7e..b991fcd6121a3 100644 --- a/frontend/src/lib/lemon-ui/LemonCheckbox/LemonCheckbox.scss +++ b/frontend/src/lib/lemon-ui/LemonCheckbox/LemonCheckbox.scss @@ -1,4 +1,6 @@ .LemonCheckbox { + --lemon-checkbox-height: calc(2.125rem + 3px); // Medium size button height + button shadow height; + display: flex; align-items: center; width: fit-content; @@ -88,7 +90,7 @@ line-height: 1.4; label { - min-height: 2.5rem; + min-height: var(--lemon-checkbox-height); padding: 0 0.75rem; background: var(--bg-light); border: 1px solid var(--border); diff --git a/frontend/src/lib/taxonomy.tsx b/frontend/src/lib/taxonomy.tsx index 76c60960eec8e..a578556789410 100644 --- a/frontend/src/lib/taxonomy.tsx +++ b/frontend/src/lib/taxonomy.tsx @@ -158,7 +158,7 @@ export const CORE_FILTER_DEFINITIONS_BY_GROUP = { description: 'Automatically captured exceptions from the client Sentry integration', }, $web_vitals: { - label: 'Web vitals', + label: 'Web Vitals', description: 'Automatically captured web vitals data', }, // Mobile SDKs events @@ -1417,7 +1417,7 @@ export const PROPERTY_KEYS = Object.keys(CORE_FILTER_DEFINITIONS_BY_GROUP.event_ * but often more numerous than actual properties set on events and useful to hide * to make those properties discoverable */ -export const NON_DOLLAR_POSTHOG_PROPERTY_KEYS = [ +export const CLOUD_INTERNAL_POSTHOG_PROPERTY_KEYS = [ 'billing_period_end', 'billing_period_start', 'current_amount_usd.data_warehouse', @@ -1443,6 +1443,13 @@ export const NON_DOLLAR_POSTHOG_PROPERTY_KEYS = [ 'custom_limits.product_analytics', 'custom_limits.session_replay', 'custom_limits.surveys', + 'custom_limits_usd.data_warehouse', + 'custom_limits_usd.feature_flags', + 'custom_limits_usd.integrations', + 'custom_limits_usd.platform_and_support', + 'custom_limits_usd.product_analytics', + 'custom_limits_usd.session_replay', + 'custom_limits_usd.surveys', 'free_allocation.data_warehouse', 'free_allocation.feature_flags', 'free_allocation.integrations', diff --git a/frontend/src/scenes/session-recordings/player/inspector/components/eventPropertyFilteringLogic.ts b/frontend/src/scenes/session-recordings/player/inspector/components/eventPropertyFilteringLogic.ts index 2f3ca7b84ae6c..ee56f834a4515 100644 --- a/frontend/src/scenes/session-recordings/player/inspector/components/eventPropertyFilteringLogic.ts +++ b/frontend/src/scenes/session-recordings/player/inspector/components/eventPropertyFilteringLogic.ts @@ -1,6 +1,6 @@ import { connect, kea, path, selectors } from 'kea' import { userPreferencesLogic } from 'lib/logic/userPreferencesLogic' -import { NON_DOLLAR_POSTHOG_PROPERTY_KEYS, PROPERTY_KEYS } from 'lib/taxonomy' +import { CLOUD_INTERNAL_POSTHOG_PROPERTY_KEYS, PROPERTY_KEYS } from 'lib/taxonomy' import { preflightLogic } from 'scenes/PreflightCheck/preflightLogic' import type { eventPropertyFilteringLogicType } from './eventPropertyFilteringLogicType' @@ -50,7 +50,7 @@ export const eventPropertyFilteringLogic = kea( Object.entries(props).filter(([key]) => { const isPostHogProperty = key.startsWith('$') && PROPERTY_KEYS.includes(key) const isNonDollarPostHogProperty = - isCloudOrDev && NON_DOLLAR_POSTHOG_PROPERTY_KEYS.includes(key) + isCloudOrDev && CLOUD_INTERNAL_POSTHOG_PROPERTY_KEYS.includes(key) return !isPostHogProperty && !isNonDollarPostHogProperty }) ) diff --git a/frontend/src/scenes/teamLogic.tsx b/frontend/src/scenes/teamLogic.tsx index 2ebf076409061..3f6d102270525 100644 --- a/frontend/src/scenes/teamLogic.tsx +++ b/frontend/src/scenes/teamLogic.tsx @@ -260,7 +260,7 @@ export const teamLogic = kea([ if (switchedTeam) { lemonToast.info( <> - You've switched to project + You've switched to project{' '} {values.featureFlags[FEATURE_FLAGS.ENVIRONMENTS] ? `${currentProject?.name}, environment ${currentTeam?.name}` : currentTeam?.name} From 45257c125ec58783219d781a98a8b327baf741c2 Mon Sep 17 00:00:00 2001 From: Raquel Smith Date: Tue, 22 Oct 2024 11:12:39 -0700 Subject: [PATCH 13/14] feat(replay): add "what to watch" screen (#25717) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Paul D'Ambra --- ...er--trends-line-insight-detailed--dark.png | Bin 21655 -> 21701 bytes ...r--trends-line-insight-detailed--light.png | Bin 21344 -> 21385 bytes .../UniversalFilterButton.tsx | 13 +- .../UniversalFilters/UniversalFilters.tsx | 12 +- .../universalFiltersLogic.test.ts | 9 +- .../UniversalFilters/universalFiltersLogic.ts | 63 +++-- .../lib/components/UniversalFilters/utils.ts | 15 +- frontend/src/lib/constants.tsx | 1 + .../src/lib/lemon-ui/LemonCard/LemonCard.tsx | 23 +- .../error-tracking/errorTrackingLogic.ts | 3 +- frontend/src/scenes/error-tracking/queries.ts | 3 +- .../session-recordings/SessionRecordings.tsx | 16 +- .../filters/RecordingsUniversalFilters.tsx | 4 +- .../playlist/playlistUtils.ts | 3 +- .../sessionReplaySceneLogic.ts | 25 +- .../templates/SessionRecordingTemplates.tsx | 207 +++++++++++++++++ .../templates/availableTemplates.tsx | 219 ++++++++++++++++++ .../sessionRecordingTemplatesLogic.tsx | 142 ++++++++++++ .../src/scenes/session-recordings/utils.ts | 4 +- frontend/src/types.ts | 32 ++- 20 files changed, 737 insertions(+), 57 deletions(-) create mode 100644 frontend/src/scenes/session-recordings/templates/SessionRecordingTemplates.tsx create mode 100644 frontend/src/scenes/session-recordings/templates/availableTemplates.tsx create mode 100644 frontend/src/scenes/session-recordings/templates/sessionRecordingTemplatesLogic.tsx diff --git a/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--dark.png b/frontend/__snapshots__/exporter-exporter--trends-line-insight-detailed--dark.png index e3e93b3dd9678360493d495ab090800a9f994b6f..b54d4facb0bfe8353e19863b17eee837e4aab6c0 100644 GIT binary patch literal 21701 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 RdnN$nb5B=4mvv4FO#tji&>jE) literal 21655 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 diff --git a/frontend/src/lib/components/UniversalFilters/UniversalFilterButton.tsx b/frontend/src/lib/components/UniversalFilters/UniversalFilterButton.tsx index 049b4cb3da0ee..5b8c367f8291b 100644 --- a/frontend/src/lib/components/UniversalFilters/UniversalFilterButton.tsx +++ b/frontend/src/lib/components/UniversalFilters/UniversalFilterButton.tsx @@ -11,12 +11,11 @@ import React from 'react' import { cohortsModel } from '~/models/cohortsModel' import { propertyDefinitionsModel } from '~/models/propertyDefinitionsModel' -import { ActionFilter, AnyPropertyFilter } from '~/types' +import { ActionFilter, AnyPropertyFilter, FeaturePropertyFilter, UniversalFilterValue } from '~/types' import { EntityFilterInfo } from '../EntityFilterInfo' import { formatPropertyLabel } from '../PropertyFilters/utils' -import { UniversalFilterValue } from './UniversalFilters' -import { isActionFilter, isEditableFilter, isEventFilter } from './utils' +import { isActionFilter, isEditableFilter, isEventFilter, isFeatureFlagFilter } from './utils' export interface UniversalFilterButtonProps { onClick?: () => void @@ -33,7 +32,7 @@ export const UniversalFilterButton = React.forwardRef ) : isAction ? ( + ) : isFeatureFlag ? ( + ) : ( )} @@ -116,3 +117,7 @@ const EventLabel = ({ ) } + +const FeatureFlagLabel = ({ filter }: { filter: FeaturePropertyFilter }): JSX.Element => { + return

    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 V{mI1v{xb_iSU`e5pI76{{|6uf&3FI+ diff --git a/frontend/__snapshots__/lemon-ui-lemon-checkbox--overview--light.png b/frontend/__snapshots__/lemon-ui-lemon-checkbox--overview--light.png index 467fff8f7e1ca4583c1f7cdb952f35a97a2b5c46..6020cb5ecb1bb4306a817b8beb820fe31a141939 100644 GIT binary patch literal 11625 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 CtTYS& literal 17544 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 diff --git a/frontend/__snapshots__/lemon-ui-lemon-field--fields-with-kea-form--dark.png b/frontend/__snapshots__/lemon-ui-lemon-field--fields-with-kea-form--dark.png index 25f23db23c6e61145b40c40118b6e2c7e1fde8d1..8fbdfe8b76fef84e8a04fc19b40475dfa8bf4ce6 100644 GIT binary patch literal 75397 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