From ca09980a1e79eb18a8539e9b2d589c64acd1cca8 Mon Sep 17 00:00:00 2001 From: ted kaemming <65315+tkaemming@users.noreply.github.com> Date: Fri, 14 Jun 2024 00:48:19 -0700 Subject: [PATCH 01/18] perf: Move cohort calculation queries to offline workload (#22968) * move meaty query to offline * also move `get_cohort_size` to offline --- posthog/models/cohort/util.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/posthog/models/cohort/util.py b/posthog/models/cohort/util.py index 118c0baec74eb..a505fd4e8489f 100644 --- a/posthog/models/cohort/util.py +++ b/posthog/models/cohort/util.py @@ -8,6 +8,7 @@ from django.utils import timezone from rest_framework.exceptions import ValidationError +from posthog.clickhouse.client.connection import Workload from posthog.clickhouse.query_tagging import tag_queries from posthog.client import sync_execute from posthog.constants import PropertyOperatorType @@ -324,6 +325,7 @@ def recalculate_cohortpeople( "new_version": pending_version, }, settings={"optimize_on_insert": 0}, + workload=Workload.OFFLINE, ) count = get_cohort_size(cohort, override_version=pending_version) @@ -370,6 +372,7 @@ def get_cohort_size(cohort: Cohort, override_version: Optional[int] = None) -> O "version": override_version if override_version is not None else cohort.version, "team_id": cohort.team_id, }, + workload=Workload.OFFLINE, ) if count_result and len(count_result) and len(count_result[0]): From 92ce1dd50adf2548700b5bd6c4b1e1fa2eba5b63 Mon Sep 17 00:00:00 2001 From: David Newell Date: Fri, 14 Jun 2024 08:50:43 +0100 Subject: [PATCH 02/18] feat: add method to inspector item preview (#22958) --- ...s-app-insights--trends-line-edit--dark.png | Bin 134803 -> 133851 bytes ...s-app-insights--user-paths-edit--light.png | Bin 196704 -> 196304 bytes .../playerInspector/ItemPerformanceEvent.tsx | 1 + 3 files changed, 1 insertion(+) diff --git a/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--trends-line-edit--dark.png index b8f2ab3e5f57198f7dc87eef64080afbb9792d4e..4c93657d5e0b6b8a7e92a16023adc8a3ddf467c5 100644 GIT binary patch delta 20207 zcmc({by!tvzcxB4Y3Y&@P&!3IQc9FYK)So6I|kB?C`d_nH;Qy4sC0KD9ny6kTx;#K z&$rj!@80Ly@B58E=5n$6(nKz%MNz4LoS<$MlWln zC^9@=uDaD=iTi$R)(_>fLP)3H6!(xkopo}S$oXMaAKJ@<4&hZt3fWYLoo#c&o zN|$8AOmaeUQgXx9_SP13FO@~70^|IxJ;nQ%$KfBbhTaVvwl2-<9W@Cf$p{NVlq6?3 zFom?I=TT@-P6u`qov>-Jw~8V{tmaaADR`mx<}tU zLqa@)Yg-=O@||J9L5T+LX{&qGT#n2|i>coeQQW#-_#B3@i{%$;gH4%u$SMsN@z}1x z;j*Vw%s+oVjB&s(+buwejW3hQ$DOA{tjhnWTr%843mK<=Wj`<~Yi@5RX3?y9+7^hZ zF#DaLBlL+FzJ!3sF`3H_Vry3ymSiM_pJ;kNQ)+kj^XWz}WG)Nkp!bz{Kayo#hwq<$ z#jAJShp)EuNRx`~886dU3bj_rVEpc=!brfX+vuC!`zot8vgYw4gN~jNUi)9fiH~0+ zVnrnqKXQfc*IZX%9EX&j$59IOR8Jw08Ix$|he@8=h&(K~mb!9!KK z_$7&)oE)#iG1>G?Z>HS#B)x$uBAZTqb6Zf9BWqC2fwZ+!;JegFJB9+~{P5;xk9Q|5 zwco6G%)f?TOKfmIO2F{F|5WDaV$eJCD~k0R$5-RAeNTFoSCnn}9PPVb`$#fU-!gJ; zvN8P#fWCBpt5;^kQT2OM-8J+Y9dD|)Ki|DI;B4Z8(dr1nn>6F93DZa60z9T7na?ooF2|{ub!&*LEl0%7%!r-0#siZ1U6y9*T=JAYalb0j3N@6( z$~p6lXZ?{}=fme@k!}!x#_Mrh-?=t-e0`6Qa24WpxfcCm{(uPE7Sk7YdZDX$Q_eoN zdsj+X8Gmbgd*p^qX%#(U#l*zKY%mLFwh622%Ms~7?k?=|Xl!nMf@T{vviNr_wBpxQ+0oHg^$v8{6ck)k?;nz}+Sig*3s@}vAUAK*<$PzF8@auI zB76fGY&>SOy7546oeRpXeQmKb2l*7Fez$?aVhfe!9Iom$PRw8E@Qf6wbTnL?3~A}c zRhUU@&Mj%uX3be|UI@ORGNx>8Yg<@zx$`~ABg4%>o=nhP%g{fT>Y}!9^8w9;%lR*L z`dF!O5>8w!3W4@Q)l$3jZ|bhD!%wfyofbABmuGAC&#AIy%{S|^S5xOA?W_~sxFtH! zc20Mj8c0~{(kCNW-<`0H6siu@LD3bm>7qy+&fn;*=B}|)grPU)N_3XYO&+?mb1>L_ z*b8wHWd}NirELWmyZ$BC`e?Cqft!^1*vlV=FMCQh&lHH%XS|)Z4IQnq0@vvr8Ej0T z(NwA*0bhPKef{aKGf4N;eu?4!Q}L%|!9IHT?-R50jB4e|8pGAGg~iuNwwLra2My;& zciW$ciYqfQJf(dgjb=UrcJ)gG=-R&!F*2rqU< zB=Kd}>MxmCO@6-1q{`ZHeHEloVnyP4bER;3u`36p<*ULIyg;Ywt~O*Woa+UI#*30q z?&CzT;EZ4i^tGk4!?p1$b981Fmj0rITpjXb-Km?FqJ*Jx+ZHV{{?&*(m>W>K(bsq8 zC2ZLklN--8?~zROMI?E*=0t3k-M16gsIdyHFz(gspVxo4K}F-%=t<(+8F6pXBFLGY zi>qTy_h|UEvFgleYFF)x5fvdzVw7Q5{lY{Q2O0U+kd|=isF#LR9AiiT`s(86lNVKH z0~oJgmu#3?AF%+daP*{6OjHL-w_6JQ?7ehH?&I?-ukCYh`IpaUg1j!U^!78(*dIM= zJy*>-_7cZ9|1TUemEoE)fCIyd}Sc`GWFG&t%a z{av_;eCcZ}y$%^B>98c+A$;DeV#dbpD=xW@yxHE~ymgZiC1hJ+1}&G+lRY6jv|u`$-(m--lpaBB5NPYRT;aW!kK#NX3K*dAm>@kM-38a134l;HJT zroYE!5u76UMZf#)LjEd4wzl+>s22=%C2L~ZMk*H)cP@yvr~IhSQMG%L5{^uR9ny!d zd1}Ky#@(eD_fshxTkKD#f%0?If8dzusvK4t@<_C|qmOUowua8yGq0nP)!y~g$HFjU z)+>ctJ08R8(U3P{@%q11peSYfn_j3CY*AL+grx=(G#JMZNCYZ@xcfT+fT`vGIC0bd&EX zaSQfxsX};gVe*)W+9!1#O3AX>r*!OGcq#D^;*be5+75cNZgcW@T>VU@Zs6B7I3`tQ zkpQ%v+pk~gHp7>n7D_w<@J&f z5Cr)6SSm2a-plOF`XGkJU@fIN$HH}U=^RcsR&MBVd3i|7toa26$YK`|XLiSNl;jOM zuJamFZENUa8;f3r5jYVPifRjk(W2UWc$Fs0p9gDXkxmZQ2Qo>47xCNMvpqdMZ|UkH z8p@G-)kJu({DKmLlH*=U$x4~Q*~{T#CDNgszIMA^ynhqJ30>{JpfBA8$LNCR#M+a8 zCx+l~(jbK_uZI4tdJN9G9Qk3wy5^+?1J#Tq9K}*!}RXT%#Hy{Ekhw`xR zp?+IuZgV+8vf@qmrA7{)Kfy$#eXZIu^CW%iwH)fr3FdHPat#nYY%QtJ8!Cl&?;g97 z-YZb0+Oo37Av~vTo8oyrjV)|F>m%rKybwf52d!6a9~g%L(X{-vF~UDY%k{O-$_lNJ zZXeDk0YnPrhRDkK8l0NF5@%z67oW;4jx>ris<~COlViE9wSrD|=L+YHM8(0S-ql$X zEK*VqjLOg0XC;*Cdaqwco*k~vA8qo)FK{u9IPp1KmF`n4_Q@vg1i0+Z>bLmTvO|x0 zl;n+#>V&)+{Ys;FZnb6gy8wsPx}M|iEM`}vhpEdzFg>|$3_~#mxy0>z&Xh`;_;!Z# z5km3H+jtsoa=ou)(0+y|2Zvt7e(y6evZ-a>gen`g5Zqi!Greu#((@s-Sgev zt89L>c*@p+C0F&H@BK7SH=gOwZoPUdf89}hd&e+?ZhTTwrgWSfi5!$^8ugl;o4fNX zUM_|P_n)tsrXNE_ze_IU8^@+=(6fw6uk~4>U{m1p4Ge2X__KBy-#-b!;Fl~BS!z)+9w&AnUAW9U*@+rc$^Frs$%gz;al8` z&SV&U;?zR~<;tDqe7PEYh(5oeaks6JG9*_%)i@8sy!MggUDzJhBeROy+2dVflqkae zbtmUI|KGbxZ_1$eTK}!(R(E%ldv^4uBq6Lhfpe|Q^Ng{|a_mmwD;B?qh=@_^TM?P$ zVj8G-VfsRyb13$SJ;rNBBNvXUMCex(nzu{G7VDi`3BbY0rs}I_vfciI ziERY`Eb88y^P>%eYu^rD`(qUJ^Pj@G1{V__YpKkL@YUzDv1gXJ~tpr=!GGqug z4ei0MuT}LQ#ASlyfgXgLu&1`R?6k5efnh{!ro3zk_ZJKK;J*->rXimXsnd63h|(N&VE&1rBGRnNSyppEda1N!TC9 zlUrHNVgQck?ORoFJaiOdr_=dLjbyx{; z_LN1VW{61v217{f-V-BzQg0Iye;F0rWh3!zgEp-~dXR5M05O=FeT5Py&d(==eA!It zp}8A^s-6fN3A}D-e1%xR1r;^nuXpK^FOa zSRaB|@0`E)03&`}&L_#R^Wed6kEo=ch&T2yiE2;@`&eeWmc{ z@$y8~yZrm)=iYO#)4ZaZw_5C__#yOku}P^ZbH{*be(xx204t6nA3GO+WE0Em!Msjz zu-k<)wglW7Ww0$XeVV2$9F#)vFgxAa&Hm-)e2*ax(_OmDn@%NyyOHnPGOK)=<1&7@ z;rl=8G@Ttgu?icjX4Jh_*wh>#tx7qzJ z!aoi@kqQQv--YP!Sn9w@A+83AwukUb4YSduxxaw(B1Jo0Dhf6Z!W~r37uUkPGfJUq z%!_H=tF&c#uP&zk?jURQ&R;8?JXQEaF{w;gc2N;r>mk1N1;aB~suq%a7}rVcmqH`Yh>u2`2FxxU#9{dx7P5@)Z3310pBU??I#-|aMy4teN3HH7oH!h=Vd9DMsu z(*EVfeZiLpm!|$?r1Ax}mpNGv{y3-uu1MzowsB!)ln6u<#}5m2=kVMg6-1)9&YdsZ z2x6$&KLz<%WFs<9mbNc!zUcKrcoQRokL`GES7o7-Q_mHhoZeC}xIOC%QDA%$1ovB}qw#&EQB@l{P5F7pNtemr{x-UP zf4F1%PygOBwL~L9zpb^nc-EU1_&=N&^%nJ1QZ%IkO zmtg3RXDTA1qjB)jB%Fy5x*1x0*W=CNiIYsg?|=PV9ztSZU|3N{{8SE=u)T}vK0G^< zUdoKbUonY25?VZ{ShaU_n7Sz5z5?bGrKpIFNb-$^S>MVEBZ0XKKjM$Uy5|u^e9Fr? zz%OtjP$0N%Li<5A8JA*nR~|hvX;SmIZ)BbJG~LS>#DA+8YffV1+ZK$4gAJ#q zrq(<@PVC$K1mn-cdX#h@1w>SVAfvetj{^kb#hBiEOmWX(pZt7=Z{N|IyIXPXpXgTo z7AGKoF$pnJ1o)w@o|nV{pFi{ZWn1 z|M|G#7zyzS`3z|I>_O!rI7W{;ss7rL_fpxSo}L0AB*Y=bvn+GOBxEkDsqvM;#)j~S z{JPDM#AD6!vi=O2=?Q#ge4?jOOmcGAxwu<`f>HdkEZR6G%5q>p26AO3|Y#^`JZ@~%tzM^+BG7ax{8?ke84)L=9 z2|)VBf=xsTmAZ)hIm_q5p`Ur<3A*80;0+CF=ws0So#-gi$Fg%g8vQLgj}pQi@c-2M z6&PbI+N0X*A-sdDz`rEv-e}Ri zY%1$`V=$r)V=6MfSImY4uSsTH2CQAzv+-XXF=GaXUgC7$Md1=h!w# z9dQq&N-ryne)wicgg(V@>6A&JKK-f$dm2scJfR)q8PQei7-&^l zruyn+QyrI?UakKgrI5d=#H$#2ui)UP>Apynb;M`)q8w(33%*xCvmx|?0>Zc}f&wRN zHtG|lrZ38#vc}O+9~izek~mWq7k{v9@8(QIqq}5RLMm3RKFW`i9RxP1K4|Uwl7$Iu z5-K5zZ!;KJ-=BwjP_3MrHU*i*#t!+=#U&)ACp+tXp4`FO2)a2U4+jaa zsXNJ^l6rvP)*|YxbN)cj+&uqiu`xKAe6~^cW(Ud)#GGGV_leHzT4+b5d;vw02}aUJ zkS?|bVY!~t(|@m`oM}QuX%0Y-gC5nV1|Aq^hpJWEqnfzMwtQ-65>0Onu-$(rtjwt5 zOe8BNSHPK{RmIsO@TB3|!61oSJo$y}(!f;`y;9C&kfRmspXEij?TzhfmfIikHS|Qs zkxhTX+no(sy7mj2coq0@T<7qfm{(uz0&&mJD^8rBw471q9v2y)f+*tX2+1UFn(<5S z3nZRpRlzwpIEZgN`6LlZqOS1SmI^3Vrh$Y@a!puB$eZF~*_>GE0?88_gOv>@wOYn) zO7!DniT$aX)V)(Xc3SzPRwCV)&i)nzJu9p5GxQHe=57qT45~F4cekcODqhDbX*-|J zL-g7;1~oAe_JK9l8u}*?bYZ)gCGSl1P?D6xoeWfzqh~tUi5b>%FX>CY`hd|c0A*VT z6Zx)6(>@N*Wh@doI<}M2v+a+GhQ3G{^chB9apUTdXSKZ5;>BNXGDAxy;Mjiur=pZ|O-($zH#4G0bG0SUFR8FA z%h~9MHezo@u@R^1ok+>~PlkW?eb@YS^h1;OeY)=4?!4C)Y-jpcS9zPqK&_$2kv&nI z!FatL=4+ig|H3$^&tT<1qO76{5ys2U{}96gj@_c2UEm9Z_v+QFpQ|TlQNKWrYwnzd zfc&e&uWoDvPl%6?cOD$STAh2XdopEbWP5VbH9H4~A~gD~67_iZjOde%R_8v=#om#s z;L9u)<79bIfG%_BqU5!^ydO%)l2I*}RZ&?j>!2=2%mRr9#=W1a!mn-kP9flk2v$dY z(zfn6W;vBZaF_BD%jNa?(q79=e~m0tvH2&f0Sx4mZSnbHrrWXHkG67@5~FtJ+JhIw z%FNp=rfYvj`CT|?XiYpKe)L(GHRYrwR@#((r)z+rhNOQNQmeOR1zQm`m!HYd=wf|! zk$C~}aM)d{T^@D4ny$lx@oQ?{E&>R-I|B5ux;^>hyugf{2J2b>J z!^Z{c(wAI}tY&j^YQW7TpzMw&&YV$WazTI zZYTcCyWM}^aA9l9A3y?W+I6F+rd>aj$4-s}F%x70H7K~?U;vPOaH(CG%b|A+fOp-WMx$s{32nL_4^8AMSn!_b zx^LHg4Ys4d*pg05V9hUEdbRM==3&z;?}`@+kSN2s6mql4tY~-jTByQ!IJtW*)hngs zrei2iBl}S#`D|FTrmC&&oLrUJPC|yKV4X_`P@dbJpBUn)>BdYR$FW#`V$eiEzF5;hiN~nGS%WfBVRRw6pWtd~}mX_XtrOC$mcq zcoHIxAxktqC#zhYlH!?MC-0t}C518f{$q0K@2XQL%qt#S{f(Hb-x4DaiCFcA)`R56s82NQxk1rqTIz4jX38@;fw=QDVJ>-)~Dbe#?h@3pDNR zSyvcd&R>g(e7;89$bOtqw)B}KSS zxof}i22)Dd{B$jPu9JPN7>RpNXo{r?S^(mrKY{?2vsXH%Xd#&XuCth zzDJQGmx`*0zuQQX{vQUn+X_4d1LH0MFxFEZJk`oVInySlp*b?jJ? zn;I{~O)GnegHA}h)z*$Goc4_f%I44?d<-9$47oh@#QSQwBxxP z7)`!w2TMlzD&*E6e_&DfNpF*EV=LeGJam%3WH)(0E0+?f`RR4rNHs)8_$>)ZNeR#D z;)=~l{ru>RP${=hbbiJoPqBf~L?$VV>!#MhMDItv#72D_b7Ii=xY|d7m9V8*x^lf) z=HVhmOd_^31enGri#Mb^HdO0&Wj~HSCVrgG$?h)UwtQ|mW+R?7%EAH7%2aLkvveG^ z_?^@2?FfdG3L}BgxeIEL&+v3p#h@6bq?13(Nn8c-!>z_;c7`Lv$OKm-fcK+U&P$Us zKR-`yNvtM?!Hj!6-@LiHNRz!_MM3un8Z!NnVV(3UPoag}^hb)S&Ee$)x=f;gSaNAn zA=A0%7^%kzIpTv~yD;0WQ`B#|@x!a{hDPUJ%ru3?u@+K7PtZ|52M#rMDVEAvPdAds zTQs(`$g`V=#&tG&ja^t?eliulpZ@m>b$zcbs61VK_w6cx)4jMM+)ed_{YC-Q|4W4!{3bKAvK(GYbgi+QxPt=g1`m1b09G zdLay~#m;O)6f|PV^Aum={yx0z?by4kq3LtE!tdA$y+#W8C#$U^q~k94$BxNekIuO! zt6ql$Vs6rK(-P`%u2H=Vx*C&k_i7sUzI2%M_Q?8n$R~F}5hVHj-e>14lR$6E=MAgU zvah$t96*JUi!nCd+`I{*jFgHkx^?+6^onEzOb;NL3NwHp!%p2cxxnJFf_-DSB!Jr48KmNaW<^|<$_TJ&l>U0xh$z+ds=K(m83@e*VR6tf(YI9M47u5Q zw=mTAIr1n2W>K5nIGxJ#wo7@SCHEa4$t@_ivZ;1iG3`mBp%HBpBAP_UyZS>n1 zP-wcW$ANoRKe7rmDeGj$DqfdxgxBO1AW_9yMtTZ+OK{ig-_S`NsUhcrtDH|VZ z<8jjZjYP?I#RB$v?r!@z7n4F+8dr{NDiWl`sdUNi{Gh%*XFiCsdd~Cg0gpE9F3B`y zvF1ZhO4-E6;+cU*c658JjGyC>Vaz%;xbmrjy;YY(n-`q+LPN(>Vwx#|r(S7c)03rZ z-Fk0C)0+qTc50w6Veqh%UE$`zl|szKIS@XrPc$$&?@S_4&JB&1?bB_|)@nC+orivuY7HxI0VJsoCBW z{Nf@q!Wg@-wHyqBi*(;Q(v9Kcr#SqY0?__TLtLC#ses>TP~t!{=h_c&LVN1D z@UY0pySEUgbO_NvDsaBfQg6I6l}K2%>OWHNiXdFT!#8Rz-!`$36?P=W;iwuditqW(^Mk%2Y7}@QjSriNIm(Y}SBD(! z6J%)Etgq_uC(rrwFLH66NJsOn=dx-phK<(j;@@v9IJ|7?T3&fEd+e}zD`{vNMD0OX zlrOc97sL?J2$}PseRX%507sHy%U~SsKw_jAQdXF7gd^A^V%Yq)7g|mZZJzcN0s-R# zM6?>~3(gK3EiviR-M;6-CEK5ZY6LL%FP^H_mh1LKx4^^9CR*``SkITPE>7~)2FMw+ z(LU{F35hG}CiB&F9YfBomaAH@ry+~18^(Z8mZzCZ2oE9b8f>4-s?~Ypne=@O)DirW z&AZ?0|0~xA;L|eunPRMQEqr$G@`q28g^+>DmK#2sZ}F3KJ=)*`_9BR2hOcd)MZ_!a z^nD@R7)+$u_@;29?;dwvE>1#h1+a3FMe21pP8-9m(-WMw6E|qBZNlrybT8}O4hey7 z1<^yH!4VN7ZXVj*%l0r(-JEa>b{9yB?Xi)r9%c=ESp}CMAaReJ@94QA(S{1{C;5~r z8QL+8(cy#ZkEL@Y@rj8U?$rgS2fd-Z(89YGdFLnPvYU)dQ&uMG^+rg5N%mr2;O92~ zo4gf8gxk_=EZQG5xSXk**+#tJdm~Vxg(o*~2Lhh>{^U11KNJ#QdR<#l!IVp1A)V~d z&AfPC3dM;^L2>FAaRze*sw3k(`P&rvA5$w1d52?bcE=UYq|PXIXQ22D0hI#J{A-uj zLc+Ml;-^8jYMQy%{G*eTXbTGq_fpMC86Lz^J#!?nShkgGgvER{I^7Ra+PR8?nFqQ%S4ITS;0ffr;kobIlyZ5efBh<8j;`R9uQuU&QES(+x~}k$Go*Je|eeao0DN=^gDcwggTX z(T|REC#HcMC+S~XvjiY%kllx9*g;f!kLPt-hH`-fdVe(78TPEy{1 z^g&H@S(!^-G_TCYd%#dDnCsr>C>N`&ev#Opqn!VaVX#0m_e19mDOXXH=BM2U%XkN9 z>H7Kr%$D4HpSvLp1LdD0R%tUeVu2*?f#CJ)B)+v;LF%Y{8XFiDkMO#P^;481|fcXMu5XD@6KxS(jn2@ zdi)e`dRnX8^QUMPs7D;Gx$E~gd%K?Ocm)o{6oBd`c9zDEkSU?+LnUX*pf4a}B4yNNm|H5H@|FY? zAhilJ*4xoq&ng$@^-6V8l0Z$71jluawLrD--9`l<*%Ux?o*C9zZg1TL_Xgy@Zq~ipMsi_&}~k zPBT+HExS>E^Rm|ZI@931%I!z^j+R4iiD0*NgUpO_Ge87O`9;Heq1zIyC~TG`eBAW{ zDyu4Mo*e1bGmSg{mRGs@t?N8OINhsmRIS{KW3t9Ppn8*AKk`EzrjQV-@T45wby`?x zXy?dpx)txmgt#tj-fIy*Fp4Z}Fk4E0B(&pnXR5T^{E+b5M?u|OCn1*;oz`|1a{elb zu+@}zn-Az-(&LYx_wL5?ccBA5mLF94p5`{LEN$9J*l`B-ft1I(1-R<|EITn!5KH&? z^n>_u8s+FiA<=`&Gj!nHaCJCoGl3kMtxg~sN=7}89`&~~9LUr6y1iZUgq67e22yL% zujEU;ojQo;%w`Ind`u=&EPZW#c{$|%OV)E%C;O%TQYTBipaaARq%^Ry5|7Vi!{mE%7tmR(bwoy~n& zUpaZv&Ja#~M8l|35Uj#Pm}!9I0=^o4iL(00`_pe%GW<=UrFxN8BeB!waOd#P%Hcy_ zqX)A2-ZzIfP<(v6-hS(oy*zaUka)E=UcET9${K5urpj*WExMXIp3+swj{%24Wie6! zSE_#acojQ(a%YH7*!aYb{@)DX%~T~NXZ>o1^R|XsttZa1JqfqhXwd5FA&ug*t#cbT z5WL9SEewMUe|l!7%pq=-b7k@wnpeg)^kaLC=FMAI{i5DrR!&aN$JT==3%hOQAcOE6 zbHTn%Nq%ia+b`!3knrkwGbz8m+< zK9{-X*+zN_0Z)Gr6I+U#7rx35KRYzZFbY{j`Rt64^vS9tu$qZ$aQjG>@>}W>lBp@3 zfG4rPF_UWBl;&YZhADJXvOaa98AHG08%I@IX1eQLq}lYsFe9$ft5KFYOc1_AyX!JQ zdT)2GDYHnkM|Ck4Orq}k3Vp`os1sNi#V^VXh=ShXv4x`xd(nmr8*Aaac3PO9Bf+V2 zxLzsYiVdrKmz)fnbmi0s%$4geuX+1Enp?%RRQU9o<+5r8Ql0+dg-pN{(*>N${E~;p zk~IueRK*<~AKxVt@C9l1Kt%xEt#B$Dc3L9B`p(^!zE6Ept9EbTQ;Vx-yA4#5cuHDI zW;|?vjiXjsO<*MR*K{?vv<*$K9`xbjm#Cfj`gAUz$jWk%ug>t!lEC29R z)#kg`UjX*S&C04oAp&spjC$kllT7wMEA@VNjyuBQsMM-W1i5d1NryT?K%K^kSVB9{ z*XG-Tg7Ikr-ny+iCg?z94O*oyrVTD85M84nENUxES_qdwKuv02t2 zn3`Yg=p{)^3qL5$f8UiU8gQUi<%%RKssm`jFp=pXEEh@JrR-g zsedy`NTXLKCUqrV4-S_O`NeJ;-6Q|l!ZE{N-TJpCVrv_ZBJ+vsdT{3^-(lfgjkSoC z74x$w61Jb(+u{=p#W+u6T=w{B!OMlz37Oyat|%}VZdKsV#;8O~3oRk=6 zR2ltJVKGtzI3lOfZyZs>)jR7Wb?zMdS8D(!HdR#U_Eo6TX{bvj1^Lj^Wc_duffB<0 z7CQuR-EW!%He&OSAFNCjnVvZSUArI3*TA2Q5%sr^{DvDrSkuwfee$-~2m~ZS03A(D zr)dD${4Gr1(n8@Y)7;f<+uq)8Mi2#b*Ibd+rNAsbFx33+GJ$fl=9Gl zupYXhK>EgvO?pLPzXV@a&48h#q(n@zk{8FJz?uQb5TvAGQIx_@NhlFG9hmAN%9NRo zo-x;txonk_%$v!?(&+`cBzL>a?5dgyg*vXnqHFZ1AVC(HTSwbhh;ch#9rWIen7NXwOZScm# z!*hs_R~O00O;Zk0kL6ksk%~phmhuTnAXx4+alJa1btVb{^I_urJ&w=<$bX>QGS2Nd zL;xA?8!Trmg>;$%W3wNk5mW>uB#;F4CSuY_W{>+}2Op&5%Nx-8FAlJbML@5^xoW>J|D1T8V`2Qhk2Ks+l zGk?!I&@&1a2jpeUXpBFB{1w<8RKj{pOfK<9e*x}vV$=O=|Mu4Z5tRq}M_iu2pVi+} zgpAC8*Lgr(BL;90{qeVN)<-HywR&T}_fQ-0Ym$3E7^(Fl)2;csd;N+goIM5M;Smx2 z4VtFn5)w%V%;&gmW9>`NfP}9(8z3CY#VhsIZWo^}8=fYN`Rn1x#_Rf59ak1=b z7XsM(M61IaG?*SUp27f9JTxrlgGTMF6_XMe5fIF>Lrv9Ki9%!i$h|;`g-4c5Z zhxA?Lw4f$UsVuGR$^G}Jyx!7CK7aBydS-411$}mOkk{q#8((<<{K5%04FPh73Nm_u z@)@oQBZMlAj_w~AuyA=6hT=|!@nCjkcOsKX?))@E-|rk`tsQUtf)u|vGAI|mB%#dA zxUJg*!`m|2c}Kg>xfS&24b-dSscC91&0L&->=c(m$TLfh?JN%t90Uk3u!?jl;f$f4 zm}gVm#W2_{{IEUs=C+guOY`+`yG=j=1bezi1+Q9iXMS{>|K5dat^Gsg{L6<$MMbw| z!BgGZcdrE#5)#s1Cu^K$I5L1(ZvJPbDX7X}fx}|htg2_SP%aFdyFNvS=~-BWg4*}O zw}iuu=zClRsuKH)9Scj)5;BZlXBr8Fn?BXC1UiBK^XrN>;^NONwj3<7whBuw6sx6- zmGciCGBY#p9jr)y6ozoLzc>!li@94Av2rp3~+lmm^}@Mz(1BP&1nNv;U1rpSrEU= z?n2-8O&SCsmd6$fl+f-tDhx2Po-K7^f-vZw{_bpBM+XT@lE>mxPk~!ct#O=|rnfcO zK%~v*(!82lBbu%N4{Iz^{$1SwHCbTsFoB`CMX|!emp85ycY9w@)&q*DDV^lw*W>qR zE&+^khlYk`YX-swMbq2zOClF!9X{i6oUO*gdy1OKV~Hj$jSi4i|FAGl(3Hr^`eQ@y zO;{K@1>|g}oo)XR01}u1qHuk*5d&E-#I|N!*k>NSm{8R|$8 z*4bIK(nOYP@a-VsOG8uBu;cAX80>gQ(5Jtw%<+WnNtY-*P?PJq83=)R79+lv6vdMv zBfP_76mzyUA<*a>)mZ!8WPL&~K(vM(oMr5c9t|q<2rzsXyOxncI9q#1e;Haoz@7vt-aaT=tJ$7^ zdjg=mTUe6U;~M_sN3!bCH#J`0yS>5G2WSt(h~m#ugDI+UcUHR?5&dcJ z#-l_4HrV^US{YisYatvL9W>Vy#kVmZoZypUMBAikMq4fQm+`g1d_oD)mSxP1*CQyOT6szOD*LQ~Q z3lqV9e7pi0w7&MdJ0`b-DbUBzs}wu{JELz683$xYgk_DV_6d4lB0dZy>H-b43yUu? z03G7l{vxZbqoYr>RwN*a0;~;LGszz&r8drgRHI0ld0Xc>Y25fi39<@yP!yy4`pj9t z?Hr@pVg%9A3jOQE`&KH=ivqr0Td=k8m55$^RHbJ*A7a0KKXM!t)8VS-B zXtzscXr&Sp<`26Nva*gA8+_ioh+lFkHsEp_4KkU?RSA?+>8^z=DT!!K4};S&I4 zDbN$}#Y)g-3CCwjuia&bK`i=o?stgYFI2 zgJp)$I()zA^72j^l=FTk-JvNgkq-*UUz>K957o0IrYzFa)9E#;P(aam>XXLMW-T`r z%A$fobB=fO_8RARy69F_k`izhB0vv>zkB_#a|8()8*53J162_W# zks3$DO&mbfY-S&5iFbB%A%q+MdM5@r zRqn{>za0|}2}uY*gL&yLQj(KDJ|6vQrg`fX6SCALZ!y!As}G+Ni24~H(TWch z!{%;$(gUq;LH-E(loI&WavHnlfX`3LE$7iJS&)@wZ1EtYND%bqGYiAZ%skAHmYq5H zgWf!-`T+@@Rr@$7x*P{M4`ez?WB_$xy14LESx?;~V$~9tk--pGY+vbB?axv~h+$NR z2d*1bM#YW_RBV4%H2G`2RBd`q9>c6i27cI3zY@;A?PUeHD)iWV8V0a_(Vv6a3c0UX zBDOO#GO0qTrD7RT0U;PP@=C{Dfj~kjhC%7x?VxrHfsy2s=~63fZ`$jYLF3M?Cx~HG z!M**_!66{Yvi9-smc-M~uAk#v`~aQiV{)EtA@aP^C7u95%$;nqU4HFTX<0!e0PCw9Jn4ad;4ybNCN4STl}e? zJ*th7nT|+1-nJjjZ-)*AV=(sWBokAXHaGF#hyhS_;EM`+d_n@%)(k(u9KxEL>o$%` zv@m_7l+zV6?`({%kn?#yo|)LKeqz^yoFYrwHray)y!FETLZ<8aV{_IwVnLCuLzNtj zX9aYkIt{HqE7t&jgz4yDeckM%z|Sy~6xqGyuS#T3+{pll2jNf>MNL)o^~&S&1}8wXN9pxFXooI zS^$zBMkkNwiv(CBY&x_8n>XgH$X?HHJ@e9KK$rp}!QL+`c))J-_xEoG|IGpDsAB1R z5^Iqph&S7(1Nn`F;2Z5YiF#MI`96oIGGy$Z^I=4!^CQUf^VR;%z9mtJX40F-=z3>V zdQy_jo$x5G)Ov%$U)IEaXCPTvE!qBs6qRr=&~C{$*YKUOhMRkRrjF=UiALOvM7naf z(W8hLcwqz%x1na4-OvXs79f7$QhW`Wm|BMY(I#a~gB~n2Rwg2d&tMQ#Y07s0(IZ?W zbOQ0VJ4buJ>5BLMc&4#S56(CYxaM@{;zYBF3KF2&IG_g>Fqsws@nu5$@on5ro#DwQ zFC6%1&qB-`@gj#mvj^#4bm*14e{?R~^6&qB>%#ve-T8;f9gWxn15-=OV58rn7932E z%>KM=-r6jW>fN7x3)GMx$zq@orPv={ked4cY^Yej*&Z*4fvfpGv^nEI9}a`*8Nq?? z>=n0vC04)v3}?Rmd`5WtNrMhPe4>%SXLC3FB9oa542C*#`;Q60U;g8x(0~5y-`@Yf zeLM8uUCBRbHqf6N^-mi9AC3gf=|NmEG{>8Jo z-T(hWfB)&Tf&QaO_}^CX|5C%j`v1*X{nHowH*1CdQ`7mcnGN*cH01xR+1$z>@Du;6 z;s4?2(BFBjf8lJv`u~v+{in_b`oFjJzjq$`zia+rxAONdH8}r=y@CD*!PGxP5Dfo! b&7TacvK9A&RYwcV74||xPP{}^&-ecUOButd delta 21167 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 diff --git a/frontend/__snapshots__/scenes-app-insights--user-paths-edit--light.png b/frontend/__snapshots__/scenes-app-insights--user-paths-edit--light.png index 59476e592f344f761d86c232f694fada7b27b867..dd4d471e99c5395c293494279dd8a72e53d47acb 100644 GIT binary patch delta 128674 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

jkpf&D_8AsF)6LFMj_R~Dd9r*O}?Ew9?d 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

?LXbXX&Y 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

QC7nkR*Jau-JB+NHhoUg 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 ) : (

+ {/* We only show the status if it exists and is an error status */} {otherProps.response_status && otherProps.response_status >= 400 ? ( From 5f119af46a2cf5dd0a1f4488d4a521a9cdd67e7e Mon Sep 17 00:00:00 2001 From: Sandy Spicer Date: Fri, 14 Jun 2024 00:57:13 -0700 Subject: [PATCH 03/18] fix: fix celery queue type error (#22973) fix queues --- posthog/tasks/tasks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/posthog/tasks/tasks.py b/posthog/tasks/tasks.py index 351f99878fcff..c370e70207454 100644 --- a/posthog/tasks/tasks.py +++ b/posthog/tasks/tasks.py @@ -508,7 +508,7 @@ def monitoring_check_clickhouse_schema_drift() -> None: check_clickhouse_schema_drift() -@shared_task(ignore_result=True, queue=CeleryQueue.LONG_RUNNING) +@shared_task(ignore_result=True, queue=CeleryQueue.LONG_RUNNING.value) def calculate_cohort() -> None: from posthog.tasks.calculate_cohort import calculate_cohorts @@ -631,7 +631,7 @@ def schedule_cache_updates_task() -> None: retry_backoff_max=30, max_retries=3, retry_jitter=True, - queue=CeleryQueue.LONG_RUNNING, + queue=CeleryQueue.LONG_RUNNING.value, ) def update_cache_task(caching_state_id: UUID) -> None: from posthog.caching.insight_cache import update_cache From 0ea5d6a5ef35d059ca03e3b827d362090fc66e32 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Fri, 14 Jun 2024 10:06:04 +0200 Subject: [PATCH 04/18] feat(cohorts): add activity logs (#21805) --- .../ActivityLog/activityLogLogic.tsx | 3 + .../scenes/cohorts/activityDescriptions.tsx | 55 ++++++++ frontend/src/types.ts | 1 + posthog/api/activity_log.py | 16 ++- posthog/api/cohort.py | 68 +++++++++- .../api/test/__snapshots__/test_api_docs.ambr | 1 + .../api/test/__snapshots__/test_insight.ambr | 18 +++ posthog/api/test/test_cohort.py | 118 +++++++++++++++++- .../models/activity_logging/activity_log.py | 9 ++ 9 files changed, 286 insertions(+), 3 deletions(-) create mode 100644 frontend/src/scenes/cohorts/activityDescriptions.tsx diff --git a/frontend/src/lib/components/ActivityLog/activityLogLogic.tsx b/frontend/src/lib/components/ActivityLog/activityLogLogic.tsx index 4ba47decd2902..250f42da557cd 100644 --- a/frontend/src/lib/components/ActivityLog/activityLogLogic.tsx +++ b/frontend/src/lib/components/ActivityLog/activityLogLogic.tsx @@ -11,6 +11,7 @@ import { } from 'lib/components/ActivityLog/humanizeActivity' import { ACTIVITY_PAGE_SIZE } from 'lib/constants' import { PaginationManual } from 'lib/lemon-ui/PaginationControl' +import { cohortActivityDescriber } from 'scenes/cohorts/activityDescriptions' import { dataManagementActivityDescriber } from 'scenes/data-management/dataManagementDescribers' import { flagActivityDescriber } from 'scenes/feature-flags/activityDescriptions' import { notebookActivityDescriber } from 'scenes/notebooks/Notebook/notebookActivityDescriber' @@ -36,6 +37,8 @@ export const describerFor = (logItem?: ActivityLogItem): Describer | undefined = case ActivityScope.PLUGIN: case ActivityScope.PLUGIN_CONFIG: return pluginActivityDescriber + case ActivityScope.COHORT: + return cohortActivityDescriber case ActivityScope.INSIGHT: return insightActivityDescriber case ActivityScope.PERSON: diff --git a/frontend/src/scenes/cohorts/activityDescriptions.tsx b/frontend/src/scenes/cohorts/activityDescriptions.tsx new file mode 100644 index 0000000000000..ceb4726ce7b77 --- /dev/null +++ b/frontend/src/scenes/cohorts/activityDescriptions.tsx @@ -0,0 +1,55 @@ +import '../../lib/components/Cards/InsightCard/InsightCard.scss' + +import { + ActivityLogItem, + defaultDescriber, + HumanizedChange, + userNameForLogItem, +} from 'lib/components/ActivityLog/humanizeActivity' +import { Link } from 'lib/lemon-ui/Link' +import { urls } from 'scenes/urls' + +const nameOrLinkToCohort = (id?: string | null, name?: string | null): string | JSX.Element => { + const displayName = name || '(empty string)' + return id ? {displayName} : displayName +} + +export function cohortActivityDescriber(logItem: ActivityLogItem, asNotification?: boolean): HumanizedChange { + if (logItem.scope != 'Cohort') { + console.error('cohort describer received a non-cohort activity') + return { description: null } + } + + if (logItem.activity == 'created') { + return { + description: ( + <> + {userNameForLogItem(logItem)} created the cohort:{' '} + {nameOrLinkToCohort(logItem?.item_id, logItem?.detail.name)} + + ), + } + } + + if (logItem.activity == 'deleted') { + return { + description: ( + <> + {userNameForLogItem(logItem)} deleted the cohort: {logItem.detail.name} + + ), + } + } + + if (logItem.activity == 'updated') { + return { + description: ( + <> + {userNameForLogItem(logItem)} updated the cohort:{' '} + {nameOrLinkToCohort(logItem?.item_id, logItem?.detail.name)} + + ), + } + } + return defaultDescriber(logItem, asNotification, nameOrLinkToCohort(logItem?.detail.short_id)) +} diff --git a/frontend/src/types.ts b/frontend/src/types.ts index b3cca7bd90f98..b91060b2e20be 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -3686,6 +3686,7 @@ export enum ActivityScope { SURVEY = 'Survey', EARLY_ACCESS_FEATURE = 'EarlyAccessFeature', COMMENT = 'Comment', + COHORT = 'Cohort', TEAM = 'Team', } diff --git a/posthog/api/activity_log.py b/posthog/api/activity_log.py index dd369f94c98fb..5645d038bd6a7 100644 --- a/posthog/api/activity_log.py +++ b/posthog/api/activity_log.py @@ -11,7 +11,7 @@ from posthog.api.routing import TeamAndOrgViewSetMixin from posthog.api.shared import UserBasicSerializer -from posthog.models import ActivityLog, FeatureFlag, Insight, NotificationViewed, User +from posthog.models import ActivityLog, FeatureFlag, Insight, NotificationViewed, User, Cohort from posthog.models.comment import Comment from posthog.models.notebook.notebook import Notebook @@ -114,6 +114,7 @@ def important_changes(self, request: Request, *args: Any, **kwargs: Any) -> Resp my_comments = list( Comment.objects.filter(created_by=user, team_id=self.team.pk).values_list("id", flat=True) ) + my_cohorts = list(Cohort.objects.filter(created_by=user, team_id=self.team.pk).values_list("id", flat=True)) # then things they edited interesting_changes = [ @@ -168,6 +169,17 @@ def important_changes(self, request: Request, *args: Any, **kwargs: Any) -> Resp .values_list("item_id", flat=True) ) + my_changed_cohorts = list( + ActivityLog.objects.filter( + team_id=self.team.id, + activity__in=interesting_changes, + user_id=user.pk, + scope="Cohort", + ) + .exclude(item_id__in=my_cohorts) + .values_list("item_id", flat=True) + ) + last_read_date = NotificationViewed.objects.filter(user=user).first() last_read_filter = "" @@ -218,6 +230,7 @@ def important_changes(self, request: Request, *args: Any, **kwargs: Any) -> Resp & Q(id__in=deduplicated_notebook_activity_ids) ) | Q(Q(scope="Comment") & Q(item_id__in=my_comments)) + | Q(Q(scope="Cohort") & Q(item_id__in=my_cohorts)) ) | Q( # don't want to see creation of these things since that was before the user edited these things @@ -231,6 +244,7 @@ def important_changes(self, request: Request, *args: Any, **kwargs: Any) -> Resp & Q(id__in=deduplicated_notebook_activity_ids) ) | Q(Q(scope="Comment") & Q(item_id__in=my_changed_comments)) + | Q(Q(scope="Cohort") & Q(item_id__in=my_changed_cohorts)) ) ) ) diff --git a/posthog/api/cohort.py b/posthog/api/cohort.py index 139f8f3747d24..3e776167b8de4 100644 --- a/posthog/api/cohort.py +++ b/posthog/api/cohort.py @@ -2,9 +2,12 @@ from posthog.clickhouse.client.connection import Workload from django.db import DatabaseError +from loginas.utils import is_impersonated_session from sentry_sdk import start_span import structlog +from posthog.models.activity_logging.activity_log import log_activity, Detail, changes_between, load_activity +from posthog.models.activity_logging.activity_page import activity_page_response from posthog.models.feature_flag.flag_matching import ( FeatureFlagMatcher, FlagsMatcherCache, @@ -22,7 +25,7 @@ from django.db.models import QuerySet, Prefetch, prefetch_related_objects, OuterRef, Subquery from django.db.models.expressions import F from django.utils import timezone -from rest_framework import serializers, viewsets +from rest_framework import serializers, viewsets, request, status from rest_framework.decorators import action from rest_framework.exceptions import ValidationError from rest_framework.request import Request @@ -403,6 +406,69 @@ def persons(self, request: Request, **kwargs) -> Response: return Response({"results": serialized_actors, "next": next_url, "previous": previous_url}) + @action(methods=["GET"], url_path="activity", detail=False, required_scopes=["activity_log:read"]) + def all_activity(self, request: request.Request, **kwargs): + limit = int(request.query_params.get("limit", "10")) + page = int(request.query_params.get("page", "1")) + + activity_page = load_activity(scope="Cohort", team_id=self.team_id, limit=limit, page=page) + + return activity_page_response(activity_page, limit, page, request) + + @action(methods=["GET"], detail=True, required_scopes=["activity_log:read"]) + def activity(self, request: request.Request, **kwargs): + limit = int(request.query_params.get("limit", "10")) + page = int(request.query_params.get("page", "1")) + + item_id = kwargs["pk"] + if not Cohort.objects.filter(id=item_id, team_id=self.team_id).exists(): + return Response("", status=status.HTTP_404_NOT_FOUND) + + activity_page = load_activity( + scope="Cohort", + team_id=self.team_id, + item_ids=[str(item_id)], + limit=limit, + page=page, + ) + return activity_page_response(activity_page, limit, page, request) + + def perform_create(self, serializer): + serializer.save() + log_activity( + organization_id=self.organization.id, + team_id=self.team_id, + user=serializer.context["request"].user, + was_impersonated=is_impersonated_session(serializer.context["request"]), + item_id=serializer.instance.id, + scope="Cohort", + activity="created", + detail=Detail(name=serializer.instance.name), + ) + + def perform_update(self, serializer): + instance_id = serializer.instance.id + + try: + before_update = Cohort.objects.get(pk=instance_id) + except Cohort.DoesNotExist: + before_update = None + + serializer.save() + + changes = changes_between("Cohort", previous=before_update, current=serializer.instance) + + log_activity( + organization_id=self.organization.id, + team_id=self.team_id, + user=serializer.context["request"].user, + was_impersonated=is_impersonated_session(serializer.context["request"]), + item_id=instance_id, + scope="Cohort", + activity="updated", + detail=Detail(changes=changes, name=serializer.instance.name), + ) + class LegacyCohortViewSet(CohortViewSet): derive_current_team_from_user_only = True diff --git a/posthog/api/test/__snapshots__/test_api_docs.ambr b/posthog/api/test/__snapshots__/test_api_docs.ambr index 70fccf17e398f..8793984c350a5 100644 --- a/posthog/api/test/__snapshots__/test_api_docs.ambr +++ b/posthog/api/test/__snapshots__/test_api_docs.ambr @@ -110,6 +110,7 @@ 'Warning: operationId "batch_exports_pause_create" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/pause/\', \'post\'), (\'/api/projects/{project_id}/batch_exports/{id}/pause/\', \'post\')]. resolving with numeral suffixes.', 'Warning: operationId "batch_exports_unpause_create" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/unpause/\', \'post\'), (\'/api/projects/{project_id}/batch_exports/{id}/unpause/\', \'post\')]. resolving with numeral suffixes.', 'Warning: operationId "app_metrics_historical_exports_retrieve" has collisions [(\'/api/projects/{project_id}/app_metrics/{plugin_config_id}/historical_exports/\', \'get\'), (\'/api/projects/{project_id}/app_metrics/{plugin_config_id}/historical_exports/{id}/\', \'get\')]. resolving with numeral suffixes.', + 'Warning: operationId "cohorts_activity_retrieve" has collisions [(\'/api/projects/{project_id}/cohorts/{id}/activity/\', \'get\'), (\'/api/projects/{project_id}/cohorts/activity/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "event_definitions_retrieve" has collisions [(\'/api/projects/{project_id}/event_definitions/\', \'get\'), (\'/api/projects/{project_id}/event_definitions/{id}/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "feature_flags_activity_retrieve" has collisions [(\'/api/projects/{project_id}/feature_flags/{id}/activity/\', \'get\'), (\'/api/projects/{project_id}/feature_flags/activity/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "insights_activity_retrieve" has collisions [(\'/api/projects/{project_id}/insights/{id}/activity/\', \'get\'), (\'/api/projects/{project_id}/insights/activity/\', \'get\')]. resolving with numeral suffixes.', diff --git a/posthog/api/test/__snapshots__/test_insight.ambr b/posthog/api/test/__snapshots__/test_insight.ambr index 1376e752451f9..972bf8c24e289 100644 --- a/posthog/api/test/__snapshots__/test_insight.ambr +++ b/posthog/api/test/__snapshots__/test_insight.ambr @@ -1628,6 +1628,24 @@ LIMIT 21 ''' # --- +# name: TestInsight.test_listing_insights_does_not_nplus1.30 + ''' + SELECT "posthog_taggeditem"."id", + "posthog_taggeditem"."tag_id", + "posthog_taggeditem"."dashboard_id", + "posthog_taggeditem"."insight_id", + "posthog_taggeditem"."event_definition_id", + "posthog_taggeditem"."property_definition_id", + "posthog_taggeditem"."action_id", + "posthog_taggeditem"."feature_flag_id" + FROM "posthog_taggeditem" + WHERE "posthog_taggeditem"."insight_id" IN (1, + 2, + 3, + 4, + 5 /* ... */) + ''' +# --- # name: TestInsight.test_listing_insights_does_not_nplus1.4 ''' SELECT "posthog_team"."id", diff --git a/posthog/api/test/test_cohort.py b/posthog/api/test/test_cohort.py index 82740d73ed515..14b6b60b51484 100644 --- a/posthog/api/test/test_cohort.py +++ b/posthog/api/test/test_cohort.py @@ -1,6 +1,7 @@ import json from datetime import datetime, timedelta -from typing import Any +from typing import Optional, Any +from unittest import mock from unittest.mock import patch from django.core.files.uploadedfile import SimpleUploadedFile @@ -34,6 +35,31 @@ class TestCohort(TestExportMixin, ClickhouseTestMixin, APIBaseTest, QueryMatchin def capture_select_queries(self): return self.capture_queries(("INSERT INTO cohortpeople", "SELECT", "ALTER", "select", "DELETE")) + def _get_cohort_activity( + self, + flag_id: Optional[int] = None, + team_id: Optional[int] = None, + expected_status: int = status.HTTP_200_OK, + ): + if team_id is None: + team_id = self.team.id + + if flag_id: + url = f"/api/projects/{team_id}/cohorts/{flag_id}/activity" + else: + url = f"/api/projects/{team_id}/cohorts/activity" + + activity = self.client.get(url) + self.assertEqual(activity.status_code, expected_status) + return activity.json() + + def assert_cohort_activity(self, cohort_id: Optional[int], expected: list[dict]): + activity_response = self._get_cohort_activity(cohort_id) + + activity: list[dict] = activity_response["results"] + self.maxDiff = None + assert activity == expected + @patch("posthog.api.cohort.report_user_action") @patch("posthog.tasks.calculate_cohort.calculate_cohort_ch.delay", side_effect=calculate_cohort_ch) @patch("posthog.models.cohort.util.sync_execute", side_effect=sync_execute) @@ -281,6 +307,96 @@ def test_cohort_list(self): self.assertEqual(response["results"][0]["name"], "whatever") self.assertEqual(response["results"][0]["created_by"]["id"], self.user.id) + def test_cohort_activity_log(self): + self.team.app_urls = ["http://somewebsite.com"] + self.team.save() + Person.objects.create(team=self.team, properties={"prop": 5}) + Person.objects.create(team=self.team, properties={"prop": 6}) + + self.client.post( + f"/api/projects/{self.team.id}/cohorts", + data={"name": "whatever", "groups": [{"properties": {"prop": 5}}]}, + ) + + cohort = Cohort.objects.filter(team=self.team).last() + assert cohort is not None + + self.assert_cohort_activity( + cohort_id=cohort.pk, + expected=[ + { + "user": {"first_name": "", "email": "user1@posthog.com"}, + "activity": "created", + "scope": "Cohort", + "item_id": str(cohort.pk), + "detail": {"changes": None, "trigger": None, "name": "whatever", "short_id": None, "type": None}, + "created_at": mock.ANY, + } + ], + ) + + self.client.patch( + f"/api/projects/{self.team.id}/cohorts/{cohort.pk}", + data={"name": "woohoo", "groups": [{"properties": {"prop": 6}}]}, + ) + cohort.refresh_from_db() + assert cohort.name == "woohoo" + + self.assert_cohort_activity( + cohort_id=cohort.pk, + expected=[ + { + "user": {"first_name": "", "email": "user1@posthog.com"}, + "activity": "updated", + "scope": "Cohort", + "item_id": str(cohort.pk), + "detail": { + "changes": [ + { + "type": "Cohort", + "action": "changed", + "field": "name", + "before": "whatever", + "after": "woohoo", + }, + { + "type": "Cohort", + "action": "changed", + "field": "groups", + "before": [ + { + "days": None, + "count": None, + "label": None, + "end_date": None, + "event_id": None, + "action_id": None, + "properties": [{"key": "prop", "type": "person", "value": 5}], + "start_date": None, + "count_operator": None, + } + ], + "after": [{"properties": [{"key": "prop", "type": "person", "value": 6}]}], + }, + ], + "trigger": None, + "name": "woohoo", + "short_id": None, + "type": None, + }, + "created_at": mock.ANY, + }, + { + "user": {"first_name": "", "email": "user1@posthog.com"}, + "activity": "created", + "scope": "Cohort", + "item_id": str(cohort.pk), + "detail": {"changes": None, "trigger": None, "name": "whatever", "short_id": None, "type": None}, + "created_at": mock.ANY, + }, + ], + ) + def test_csv_export_new(self): # Test 100s of distinct_ids, we only want ~10 Person.objects.create( diff --git a/posthog/models/activity_logging/activity_log.py b/posthog/models/activity_logging/activity_log.py index 141130ea4f80e..c05b0cac48bbd 100644 --- a/posthog/models/activity_logging/activity_log.py +++ b/posthog/models/activity_logging/activity_log.py @@ -18,6 +18,7 @@ logger = structlog.get_logger(__name__) ActivityScope = Literal[ + "Cohort", "FeatureFlag", "Person", "Insight", @@ -133,6 +134,14 @@ class Meta: field_exclusions: dict[ActivityScope, list[str]] = { + "Cohort": [ + "version", + "pending_version", + "count", + "is_calculating", + "last_calculation", + "errors_calculating", + ], "Notebook": [ "text_content", ], From 7e3a36510286c3f5f8e7628221f69af91ac3e310 Mon Sep 17 00:00:00 2001 From: Ben White Date: Fri, 14 Jun 2024 10:57:09 +0200 Subject: [PATCH 05/18] fix: Deleting pipeline destinations (#22950) --- ...--funnel-top-to-bottom-breakdown--dark.png | Bin 110864 -> 111515 bytes ...-funnel-top-to-bottom-breakdown--light.png | Bin 109778 -> 110400 bytes .../src/scenes/pipeline/destinationsLogic.tsx | 88 ++++++++++++---- .../hogfunctions/HogFunctionInputs.scss | 9 ++ .../hogfunctions/HogFunctionInputs.tsx | 99 +++++++++++++----- posthog/api/hog_function.py | 26 ++++- posthog/api/plugin.py | 4 + posthog/api/test/test_hog_function.py | 31 +++++- 8 files changed, 201 insertions(+), 56 deletions(-) create mode 100644 frontend/src/scenes/pipeline/hogfunctions/HogFunctionInputs.scss diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown--dark.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown--dark.png index 4d8660c88304e1feadb9c9c72b170d33eef937e1..fb1fbd220178d18c1a7c60b7863a5ebfdc559de5 100644 GIT binary patch delta 93580 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 delta 93555 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

`Vn%>pzbJ(x0YbH>M~@MiZ~$H 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 S;o}5fiqO=*S#;yxlm7*@hfk{j diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown--light.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown--light.png index 643ed8a4088bcbbe45375a7501e5069b248f8f67..4bc0d3a54c2ef9a737105ff561527bf39a6c4919 100644 GIT binary patch delta 74240 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[ @@ -38,10 +45,13 @@ export const pipelineDestinationsLogic = kea([ toggleNode: (destination: Destination, enabled: boolean) => ({ destination, enabled }), deleteNode: (destination: Destination) => ({ destination }), deleteNodeBatchExport: (destination: BatchExportDestination) => ({ destination }), + deleteNodeHogFunction: (destination: FunctionDestination) => ({ destination }), + deleteNodeWebhook: (destination: WebhookDestination) => ({ destination }), + updatePluginConfig: (pluginConfig: PluginConfigTypeNew) => ({ pluginConfig }), updateBatchExportConfig: (batchExportConfig: BatchExportConfiguration) => ({ batchExportConfig }), }), - loaders(({ values }) => ({ + loaders(({ values, actions }) => ({ plugins: [ {} as Record, { @@ -86,6 +96,26 @@ export const pipelineDestinationsLogic = kea([ [pluginConfig.id]: pluginConfig, } }, + + deleteNodeWebhook: async ({ destination }) => { + await deleteWithUndo({ + endpoint: `projects/${teamLogic.values.currentTeamId}/plugin_configs`, + object: { + id: destination.id, + name: destination.name, + }, + callback: (undo) => { + if (undo) { + actions.loadPluginConfigs() + } + }, + }) + + const pluginConfigs = { ...values.pluginConfigs } + delete pluginConfigs[destination.id] + + return pluginConfigs + }, }, ], batchExportConfigs: [ @@ -109,9 +139,11 @@ export const pipelineDestinationsLogic = kea([ }, deleteNodeBatchExport: async ({ destination }) => { await api.batchExports.delete(destination.id) - return Object.fromEntries( - Object.entries(values.batchExportConfigs).filter(([id]) => id !== destination.id) - ) + + const batchExportConfigs = { ...values.batchExportConfigs } + delete batchExportConfigs[destination.id] + + return batchExportConfigs }, updateBatchExportConfig: ({ batchExportConfig }) => { return { ...values.batchExportConfigs, [batchExportConfig.id]: batchExportConfig } @@ -138,6 +170,27 @@ export const pipelineDestinationsLogic = kea([ // TODO: Support pagination? return (await api.hogFunctions.list()).results }, + + deleteNodeHogFunction: async ({ destination }) => { + if (destination.backend !== PipelineBackend.HogFunction) { + return values.hogFunctions + } + + await deleteWithUndo({ + endpoint: `projects/${teamLogic.values.currentTeamId}/hog_functions`, + object: { + id: destination.hog_function.id, + name: destination.name, + }, + callback: (undo) => { + if (undo) { + actions.loadHogFunctions() + } + }, + }) + + return values.hogFunctions.filter((hogFunction) => hogFunction.id !== destination.hog_function.id) + }, }, ], })), @@ -195,7 +248,7 @@ export const pipelineDestinationsLogic = kea([ }, ], }), - listeners(({ values, actions, asyncActions }) => ({ + listeners(({ values, actions }) => ({ toggleNode: ({ destination, enabled }) => { if (enabled && !values.canEnableNewDestinations) { lemonToast.error('Data pipelines add-on is required for enabling new destinations.') @@ -207,18 +260,17 @@ export const pipelineDestinationsLogic = kea([ actions.toggleNodeBatchExport({ destination: destination, enabled: enabled }) } }, - deleteNode: async ({ destination }) => { - if (destination.backend === PipelineBackend.BatchExport) { - await asyncActions.deleteNodeBatchExport(destination) - } else { - await deleteWithUndo({ - endpoint: `projects/${teamLogic.values.currentTeamId}/plugin_configs`, - object: { - id: destination.id, - name: destination.name, - }, - callback: actions.loadPluginConfigs, - }) + deleteNode: ({ destination }) => { + switch (destination.backend) { + case PipelineBackend.Plugin: + actions.deleteNodeWebhook(destination) + break + case PipelineBackend.BatchExport: + actions.deleteNodeBatchExport(destination) + break + case PipelineBackend.HogFunction: + actions.deleteNodeHogFunction(destination) + break } }, })), diff --git a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionInputs.scss b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionInputs.scss new file mode 100644 index 0000000000000..4e7140c67d64b --- /dev/null +++ b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionInputs.scss @@ -0,0 +1,9 @@ +.HogFunctionInputCode { + .monaco-editor { + border-radius: var(--radius); + + .overflow-guard { + border-radius: var(--radius); + } + } +} diff --git a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionInputs.tsx b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionInputs.tsx index 2f3cc63865729..f17226633c5f2 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/HogFunctionInputs.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/HogFunctionInputs.tsx @@ -1,3 +1,5 @@ +import './HogFunctionInputs.scss' + import { Monaco } from '@monaco-editor/react' import { IconPencil, IconPlus, IconX } from '@posthog/icons' import { LemonButton, LemonCheckbox, LemonInput, LemonSelect } from '@posthog/lemon-ui' @@ -5,6 +7,7 @@ import { useValues } from 'kea' import { CodeEditor } from 'lib/components/CodeEditors' import { languages } from 'monaco-editor' import { useEffect, useMemo, useState } from 'react' +import { AutoSizer } from 'react-virtualized/dist/es/AutoSizer' import { groupsModel } from '~/models/groupsModel' import { HogFunctionInputSchemaType } from '~/types' @@ -74,11 +77,21 @@ function JsonConfigField(props: { onChange?: (value: string) => void className: string autoFocus: boolean - value?: string | object + value?: string }): JSX.Element { const suggestions = useAutocompleteOptions() const [monaco, setMonaco] = useState() + const [height, setHeight] = useState(200) + const [manualHeight, setManualHeight] = useState() + + useEffect(() => { + const value = typeof props.value !== 'string' ? JSON.stringify(props.value, null, 2) : props.value + const lineCount = (value?.split('\n').length ?? 1) + 1 + const lineHeight = 18 + setHeight(lineHeight * lineCount) + }, [props.value]) + useEffect(() => { if (!monaco) { return @@ -125,34 +138,64 @@ function JsonConfigField(props: { }, [suggestions, monaco]) return ( - props.onChange?.(v ?? '')} - options={{ - lineNumbers: 'off', - minimap: { - enabled: false, - }, - quickSuggestions: { - other: true, - strings: true, - }, - suggest: { - showWords: false, - showFields: false, - showKeywords: false, - }, - scrollbar: { - vertical: 'hidden', - verticalScrollbarSize: 0, - }, +

{ - setMonaco(monaco) - }} - /> + > + + {({ height }) => ( + props.onChange?.(v ?? '')} + height={height - 2} // Account for border + options={{ + lineNumbers: 'off', + minimap: { + enabled: false, + }, + quickSuggestions: { + other: true, + strings: true, + }, + suggest: { + showWords: false, + showFields: false, + showKeywords: false, + }, + scrollbar: { + vertical: 'hidden', + verticalScrollbarSize: 0, + }, + }} + onMount={(_editor, monaco) => { + setMonaco(monaco) + }} + /> + )} + + + {/* Using a standard resize css means we need overflow-hidden which hides parts of the editor unnecessarily */} +
{ + const startY = e.clientY + const startHeight = height + const onMouseMove = (event: MouseEvent): void => { + setManualHeight(startHeight + event.clientY - startY) + } + const onMouseUp = (): void => { + window.removeEventListener('mousemove', onMouseMove) + window.removeEventListener('mouseup', onMouseUp) + } + window.addEventListener('mousemove', onMouseMove) + window.addEventListener('mouseup', onMouseUp) + }} + /> +
) } diff --git a/posthog/api/hog_function.py b/posthog/api/hog_function.py index 17ee1bb2b0995..9ddc46cc3b45f 100644 --- a/posthog/api/hog_function.py +++ b/posthog/api/hog_function.py @@ -1,12 +1,13 @@ import structlog from django_filters.rest_framework import DjangoFilterBackend +from django.db.models import QuerySet + from rest_framework import serializers, viewsets from rest_framework.serializers import BaseSerializer from rest_framework.decorators import action from rest_framework.request import Request from rest_framework.response import Response - from posthog.api.forbid_destroy_model import ForbidDestroyModel from posthog.api.hog_function_template import HogFunctionTemplateSerializer from posthog.api.log_entries import LogEntryMixin @@ -55,6 +56,7 @@ class Meta: "created_by", "updated_at", "enabled", + "deleted", "hog", "bytecode", "inputs_schema", @@ -74,6 +76,7 @@ class Meta: ] extra_kwargs = { "template_id": {"write_only": True}, + "deleted": {"write_only": True}, } def validate_inputs_schema(self, value): @@ -82,10 +85,17 @@ def validate_inputs_schema(self, value): def validate(self, attrs): team = self.context["get_team"]() attrs["team"] = team - attrs["inputs_schema"] = attrs.get("inputs_schema", []) - attrs["filters"] = attrs.get("filters", {}) - attrs["inputs"] = validate_inputs(attrs["inputs_schema"], attrs.get("inputs", {})) - attrs["bytecode"] = compile_hog(attrs["hog"]) + + if self.context["view"].action == "create": + # Ensure we have sensible defaults when created + attrs["filters"] = attrs.get("filters", {}) + attrs["inputs_schema"] = attrs.get("inputs_schema", []) + attrs["inputs"] = attrs.get("inputs", {}) + + if "inputs" in attrs: + attrs["inputs"] = validate_inputs(attrs["inputs_schema"], attrs["inputs"]) + if "hog" in attrs: + attrs["bytecode"] = compile_hog(attrs["hog"]) return attrs @@ -108,6 +118,12 @@ class HogFunctionViewSet(TeamAndOrgViewSetMixin, LogEntryMixin, ForbidDestroyMod def get_serializer_class(self) -> type[BaseSerializer]: return HogFunctionMinimalSerializer if self.action == "list" else HogFunctionSerializer + def safely_get_queryset(self, queryset: QuerySet) -> QuerySet: + if self.action == "list": + queryset = queryset.filter(deleted=False) + + return queryset + @action(detail=False, methods=["GET"]) def icons(self, request: Request, *args, **kwargs): query = request.GET.get("query") diff --git a/posthog/api/plugin.py b/posthog/api/plugin.py index 72ffa1c01a93a..eb147a70d6d51 100644 --- a/posthog/api/plugin.py +++ b/posthog/api/plugin.py @@ -906,6 +906,7 @@ def safely_get_queryset(self, queryset): class PipelineTransformationsConfigsViewSet(PluginConfigViewSet): def safely_get_queryset(self, queryset): + queryset = super().safely_get_queryset(queryset) return queryset.filter( Q(plugin__capabilities__has_key="methods") & Q(plugin__capabilities__methods__contains=["processEvent"]) ) @@ -922,6 +923,7 @@ def safely_get_queryset(self, queryset): class PipelineDestinationsConfigsViewSet(PluginConfigViewSet): def safely_get_queryset(self, queryset): + queryset = super().safely_get_queryset(queryset) return queryset.filter( Q(plugin__capabilities__has_key="methods") & ( @@ -939,6 +941,7 @@ def safely_get_queryset(self, queryset): class PipelineFrontendAppsConfigsViewSet(PluginConfigViewSet): def safely_get_queryset(self, queryset): + queryset = super().safely_get_queryset(queryset) return queryset.exclude( Q(plugin__capabilities__has_key="methods") | Q(plugin__capabilities__has_key="scheduled_tasks") ) @@ -961,6 +964,7 @@ def safely_get_queryset(self, queryset): class PipelineImportAppsConfigsViewSet(PluginConfigViewSet): def safely_get_queryset(self, queryset): + queryset = super().safely_get_queryset(queryset) return queryset.filter( Q(Q(plugin__capabilities__has_key="scheduled_tasks") & ~Q(plugin__capabilities__scheduled_tasks=[])) | Q( diff --git a/posthog/api/test/test_hog_function.py b/posthog/api/test/test_hog_function.py index 94c3b5b1c4d14..0e6eda95bbaf5 100644 --- a/posthog/api/test/test_hog_function.py +++ b/posthog/api/test/test_hog_function.py @@ -76,11 +76,7 @@ def test_create_hog_function_forbidden_if_not_in_flag(self, mock_feature_enabled def test_create_hog_function(self, *args): response = self.client.post( f"/api/projects/{self.team.id}/hog_functions/", - data={ - "name": "Fetch URL", - "description": "Test description", - "hog": "fetch(inputs.url);", - }, + data={"name": "Fetch URL", "description": "Test description", "hog": "fetch(inputs.url);", "inputs": {}}, ) assert response.status_code == status.HTTP_201_CREATED, response.json() assert response.json()["created_by"]["id"] == self.user.id @@ -124,6 +120,31 @@ def test_creates_with_template_id(self, *args): "filters": None, } + @patch("posthog.permissions.posthoganalytics.feature_enabled", return_value=True) + def test_deletes_via_update(self, *args): + response = self.client.post( + f"/api/projects/{self.team.id}/hog_functions/", + data={"name": "Fetch URL", "description": "Test description", "hog": "fetch(inputs.url);"}, + ) + assert response.status_code == status.HTTP_201_CREATED, response.json() + + list_res = self.client.get(f"/api/projects/{self.team.id}/hog_functions/") + assert list_res.status_code == status.HTTP_200_OK, list_res.json() + # Assert that it isn't in the list + assert ( + next((item for item in list_res.json()["results"] if item["id"] == response.json()["id"]), None) is not None + ) + + response = self.client.patch( + f"/api/projects/{self.team.id}/hog_functions/{response.json()['id']}/", + data={"deleted": True}, + ) + assert response.status_code == status.HTTP_200_OK, response.json() + + list_res = self.client.get(f"/api/projects/{self.team.id}/hog_functions/") + assert list_res.status_code == status.HTTP_200_OK, list_res.json() + assert next((item for item in list_res.json()["results"] if item["id"] == response.json()["id"]), None) is None + @patch("posthog.permissions.posthoganalytics.feature_enabled", return_value=True) def test_inputs_required(self, *args): payload = { From 919d0176997af2183610e108fbdbb5eab2a43096 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Fri, 14 Jun 2024 11:03:57 +0200 Subject: [PATCH 06/18] fix(hogvm): if without else, add base64 and url encoding/decoding (#22976) --- hogvm/__tests__/__snapshots__/ifJump.hoge | 3 ++ hogvm/__tests__/__snapshots__/ifJump.stdout | 3 ++ hogvm/__tests__/__snapshots__/stl.hoge | 10 +++++-- hogvm/__tests__/__snapshots__/stl.stdout | 8 ++++++ hogvm/__tests__/ifJump.hog | 20 +++++++++++++ hogvm/__tests__/stl.hog | 12 ++++++++ hogvm/python/stl/__init__.py | 32 +++++++++++++++++++++ hogvm/typescript/package.json | 2 +- hogvm/typescript/src/stl/stl.ts | 19 ++++++++++++ posthog/hogql/bytecode.py | 2 +- 10 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 hogvm/__tests__/__snapshots__/ifJump.hoge create mode 100644 hogvm/__tests__/__snapshots__/ifJump.stdout create mode 100644 hogvm/__tests__/ifJump.hog diff --git a/hogvm/__tests__/__snapshots__/ifJump.hoge b/hogvm/__tests__/__snapshots__/ifJump.hoge new file mode 100644 index 0000000000000..0e946f4101f07 --- /dev/null +++ b/hogvm/__tests__/__snapshots__/ifJump.hoge @@ -0,0 +1,3 @@ +["_h", 42, 0, 36, 0, 32, "email", 45, 32, "", 36, 1, 11, 40, 12, 32, "ERROR - Email not found!", 2, "print", 1, 35, 32, +"3", 2, "print", 1, 35, 32, "1", 2, "print", 1, 35, 32, "", 36, 1, 11, 40, 14, 32, "ERROR - Email not found!", 2, +"print", 1, 35, 32, "3", 2, "print", 1, 35, 39, 6, 32, "else", 2, "print", 1, 35, 32, "1", 2, "print", 1, 35, 35, 35] diff --git a/hogvm/__tests__/__snapshots__/ifJump.stdout b/hogvm/__tests__/__snapshots__/ifJump.stdout new file mode 100644 index 0000000000000..27f921abd174f --- /dev/null +++ b/hogvm/__tests__/__snapshots__/ifJump.stdout @@ -0,0 +1,3 @@ +1 +else +1 diff --git a/hogvm/__tests__/__snapshots__/stl.hoge b/hogvm/__tests__/__snapshots__/stl.hoge index b3613e9644619..df6a1ac4eef7c 100644 --- a/hogvm/__tests__/__snapshots__/stl.hoge +++ b/hogvm/__tests__/__snapshots__/stl.hoge @@ -1,3 +1,9 @@ ["_h", 32, "-- empty, notEmpty, length, lower, upper, reverse --", 2, "print", 1, 35, 32, "234", 2, "notEmpty", 1, 32, -"", 2, "empty", 1, 3, 2, 40, 11, 32, "123", 2, "length", 1, 2, "print", 1, 35, 32, "tdd4gh", 32, "Tdd4gh", 2, "lower", -1, 11, 40, 11, 32, "test", 2, "upper", 1, 2, "print", 1, 35, 32, "spinner", 2, "reverse", 1, 2, "print", 1, 35] +"", 2, "empty", 1, 3, 2, 40, 9, 32, "123", 2, "length", 1, 2, "print", 1, 35, 32, "tdd4gh", 32, "Tdd4gh", 2, "lower", 1, +11, 40, 9, 32, "test", 2, "upper", 1, 2, "print", 1, 35, 32, "spinner", 2, "reverse", 1, 2, "print", 1, 35, 32, +"http://www.google.com", 2, "encodeURLComponent", 1, 2, "print", 1, 35, 32, "tom & jerry", 2, "encodeURLComponent", 1, +2, "print", 1, 35, 32, "http://www.google.com", 2, "encodeURLComponent", 1, 2, "decodeURLComponent", 1, 2, "print", 1, +35, 32, "tom & jerry", 2, "encodeURLComponent", 1, 2, "decodeURLComponent", 1, 2, "print", 1, 35, 32, +"http://www.google.com", 2, "base64Encode", 1, 2, "print", 1, 35, 32, "tom & jerry", 2, "base64Encode", 1, 2, "print", +1, 35, 32, "http://www.google.com", 2, "base64Encode", 1, 2, "base64Decode", 1, 2, "print", 1, 35, 32, "tom & jerry", 2, +"base64Encode", 1, 2, "base64Decode", 1, 2, "print", 1, 35] diff --git a/hogvm/__tests__/__snapshots__/stl.stdout b/hogvm/__tests__/__snapshots__/stl.stdout index fe9463feee70a..762eff9197ef2 100644 --- a/hogvm/__tests__/__snapshots__/stl.stdout +++ b/hogvm/__tests__/__snapshots__/stl.stdout @@ -2,3 +2,11 @@ 3 TEST rennips +http%3A%2F%2Fwww.google.com +tom%20%26%20jerry +http://www.google.com +tom & jerry +aHR0cDovL3d3dy5nb29nbGUuY29t +dG9tICYgamVycnk= +http://www.google.com +tom & jerry diff --git a/hogvm/__tests__/ifJump.hog b/hogvm/__tests__/ifJump.hog new file mode 100644 index 0000000000000..4e4e7084dc798 --- /dev/null +++ b/hogvm/__tests__/ifJump.hog @@ -0,0 +1,20 @@ +let props := { +} +let email := props.email + +if (email == '') { + print('ERROR - Email not found!') + print('3') +} + +print('1') + + +if (email == '') { + print('ERROR - Email not found!') + print('3') +} else { + print('else') +} + +print('1') diff --git a/hogvm/__tests__/stl.hog b/hogvm/__tests__/stl.hog index 111b42e3abff9..add53abc003b5 100644 --- a/hogvm/__tests__/stl.hog +++ b/hogvm/__tests__/stl.hog @@ -2,3 +2,15 @@ print('-- empty, notEmpty, length, lower, upper, reverse --') if (empty('') and notEmpty('234')) print(length('123')) if (lower('Tdd4gh') == 'tdd4gh') print(upper('test')) print(reverse('spinner')) + +print(encodeURLComponent('http://www.google.com')) +print(encodeURLComponent('tom & jerry')) + +print(decodeURLComponent(encodeURLComponent('http://www.google.com'))) +print(decodeURLComponent(encodeURLComponent('tom & jerry'))) + +print(base64Encode('http://www.google.com')) +print(base64Encode('tom & jerry')) + +print(base64Decode(base64Encode('http://www.google.com'))) +print(base64Decode(base64Encode('tom & jerry'))) diff --git a/hogvm/python/stl/__init__.py b/hogvm/python/stl/__init__.py index 134b7335f92ac..818dc888fa39e 100644 --- a/hogvm/python/stl/__init__.py +++ b/hogvm/python/stl/__init__.py @@ -107,6 +107,34 @@ def jsonStringify(name: str, args: list[Any], team: Optional["Team"], stdout: Op return json.dumps(args[0]) +def base64Encode(name: str, args: list[Any], team: Optional["Team"], stdout: Optional[list[str]], timeout: int) -> str: + import base64 + + return base64.b64encode(args[0].encode()).decode() + + +def base64Decode(name: str, args: list[Any], team: Optional["Team"], stdout: Optional[list[str]], timeout: int) -> str: + import base64 + + return base64.b64decode(args[0].encode()).decode() + + +def encodeURLComponent( + name: str, args: list[Any], team: Optional["Team"], stdout: Optional[list[str]], timeout: int +) -> str: + import urllib.parse + + return urllib.parse.quote(args[0], safe="") + + +def decodeURLComponent( + name: str, args: list[Any], team: Optional["Team"], stdout: Optional[list[str]], timeout: int +) -> str: + import urllib.parse + + return urllib.parse.unquote(args[0]) + + STL: dict[str, Callable[[str, list[Any], Optional["Team"], list[str] | None, int], Any]] = { "concat": concat, "match": match, @@ -126,4 +154,8 @@ def jsonStringify(name: str, args: list[Any], team: Optional["Team"], stdout: Op "run": run, "jsonParse": jsonParse, "jsonStringify": jsonStringify, + "base64Encode": base64Encode, + "base64Decode": base64Decode, + "encodeURLComponent": encodeURLComponent, + "decodeURLComponent": decodeURLComponent, } diff --git a/hogvm/typescript/package.json b/hogvm/typescript/package.json index 3080a86f544f9..de1a0b9db0bf3 100644 --- a/hogvm/typescript/package.json +++ b/hogvm/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@posthog/hogvm", - "version": "1.0.11", + "version": "1.0.12", "description": "PostHog Hog Virtual Machine", "types": "dist/index.d.ts", "main": "dist/index.js", diff --git a/hogvm/typescript/src/stl/stl.ts b/hogvm/typescript/src/stl/stl.ts index cb358360ff754..303ef460ed81b 100644 --- a/hogvm/typescript/src/stl/stl.ts +++ b/hogvm/typescript/src/stl/stl.ts @@ -86,6 +86,25 @@ export const STL: Record } return JSON.stringify(convert(args[0])) }, + base64Encode: (args) => { + return Buffer.from(args[0]).toString('base64') + }, + base64Decode: (args) => { + return Buffer.from(args[0], 'base64').toString() + }, + tryBase64Decode: (args) => { + try { + return Buffer.from(args[0], 'base64').toString() + } catch (e) { + return '' + } + }, + encodeURLComponent(args) { + return encodeURIComponent(args[0]) + }, + decodeURLComponent(args) { + return decodeURIComponent(args[0]) + }, } export const ASYNC_STL: Record Promise> = { diff --git a/posthog/hogql/bytecode.py b/posthog/hogql/bytecode.py index 7a9ae7165f6f4..1a5933a88bc92 100644 --- a/posthog/hogql/bytecode.py +++ b/posthog/hogql/bytecode.py @@ -248,7 +248,7 @@ def visit_if_statement(self, node: ast.IfStatement): response = [] response.extend(expr) - response.extend([Operation.JUMP_IF_FALSE, len(then) + 2]) # + else's OP_JUMP + count + response.extend([Operation.JUMP_IF_FALSE, len(then) + (2 if else_ else 0)]) response.extend(then) if else_: response.extend([Operation.JUMP, len(else_)]) From ec59e6f43d6a5550548db1cf7ce2b1e018a3e854 Mon Sep 17 00:00:00 2001 From: timgl Date: Fri, 14 Jun 2024 10:44:58 +0100 Subject: [PATCH 07/18] perf: Remove extra breakdown query for trends (#22885) * perf: Remove extra breakdown query for trends * fix * fix actor breakdown * fix breakdown tests * fix * remove most breakdown_values_override calls * fix tests * fix baseline * remove unnecessary test * fix histogram * fix: Don't allow window function with distinct as it's wrong * fix tests * fix * Update query snapshots * fix histogram --------- Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- mypy-baseline.txt | 22 +- posthog/hogql/functions/mapping.py | 1 + posthog/hogql/printer.py | 5 +- .../insights/trends/breakdown.py | 222 +- .../insights/trends/breakdown_values.py | 279 --- .../test/__snapshots__/test_trends.ambr | 2052 +++++++++++------ .../test_trends_data_warehouse_query.ambr | 96 +- .../insights/trends/test/test_trends.py | 10 +- .../trends/test/test_trends_persons.py | 1 - .../trends/test/test_trends_query_runner.py | 25 +- .../trends/trends_actors_query_builder.py | 3 +- .../insights/trends/trends_query_builder.py | 119 +- .../insights/trends/trends_query_runner.py | 103 +- posthog/queries/trends/breakdown.py | 5 +- .../trends/test/test_paging_breakdowns.py | 3 +- 15 files changed, 1621 insertions(+), 1325 deletions(-) delete mode 100644 posthog/hogql_queries/insights/trends/breakdown_values.py diff --git a/mypy-baseline.txt b/mypy-baseline.txt index 300c901c82196..00e42297ced4f 100644 --- a/mypy-baseline.txt +++ b/mypy-baseline.txt @@ -152,6 +152,15 @@ ee/billing/quota_limiting.py:0: error: "object" has no attribute "get" [attr-de ee/billing/quota_limiting.py:0: error: Unsupported target for indexed assignment ("object") [index] ee/billing/quota_limiting.py:0: error: Unsupported target for indexed assignment ("object") [index] posthog/tasks/email.py:0: error: Module "django.utils.timezone" does not explicitly export attribute "timedelta" [attr-defined] +posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown_histogram_bin_count" [union-attr] +posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown_type" [union-attr] +posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown_type" [union-attr] +posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown" [union-attr] +posthog/hogql_queries/insights/trends/breakdown.py:0: error: Argument 1 to "parse_expr" has incompatible type "str | float | list[str | float] | Any | None"; expected "str" [arg-type] +posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown_type" [union-attr] +posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown" [union-attr] +posthog/hogql_queries/insights/trends/breakdown.py:0: error: Argument "breakdown_field" to "get_properties_chain" has incompatible type "str | float | list[str | float] | Any | None"; expected "str" [arg-type] +posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown_group_type_index" [union-attr] posthog/hogql_queries/insights/trends/aggregation_operations.py:0: error: List item 1 has incompatible type "str | None"; expected "str" [list-item] posthog/hogql_queries/insights/trends/aggregation_operations.py:0: error: Argument "chain" to "Field" has incompatible type "list[str]"; expected "list[str | int]" [arg-type] posthog/hogql_queries/insights/trends/aggregation_operations.py:0: note: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance @@ -298,19 +307,6 @@ posthog/hogql/query.py:0: error: Subclass of "SelectQuery" and "SelectUnionQuery posthog/queries/person_query.py:0: error: Incompatible type for lookup 'pk': (got "str | int | list[str]", expected "str | int") [misc] posthog/queries/event_query/event_query.py:0: error: Incompatible type for lookup 'pk': (got "str | int | list[str]", expected "str | int") [misc] posthog/hogql_queries/sessions_timeline_query_runner.py:0: error: Statement is unreachable [unreachable] -posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown_type" [union-attr] -posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown_histogram_bin_count" [union-attr] -posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown_type" [union-attr] -posthog/hogql_queries/insights/trends/breakdown.py:0: error: Argument "exprs" to "Or" has incompatible type "list[CompareOperation]"; expected "list[Expr]" [arg-type] -posthog/hogql_queries/insights/trends/breakdown.py:0: note: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance -posthog/hogql_queries/insights/trends/breakdown.py:0: note: Consider using "Sequence" instead, which is covariant -posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown_type" [union-attr] -posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown" [union-attr] -posthog/hogql_queries/insights/trends/breakdown.py:0: error: Argument 1 to "parse_expr" has incompatible type "str | float | list[str | float] | Any | None"; expected "str" [arg-type] -posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown_type" [union-attr] -posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown" [union-attr] -posthog/hogql_queries/insights/trends/breakdown.py:0: error: Argument "breakdown_field" to "get_properties_chain" has incompatible type "str | float | list[str | float] | Any | None"; expected "str" [arg-type] -posthog/hogql_queries/insights/trends/breakdown.py:0: error: Item "None" of "BreakdownFilter | None" has no attribute "breakdown_group_type_index" [union-attr] posthog/hogql_queries/hogql_query_runner.py:0: error: Statement is unreachable [unreachable] posthog/hogql_queries/hogql_query_runner.py:0: error: Incompatible return value type (got "SelectQuery | SelectUnionQuery", expected "SelectQuery") [return-value] posthog/hogql_queries/events_query_runner.py:0: error: Statement is unreachable [unreachable] diff --git a/posthog/hogql/functions/mapping.py b/posthog/hogql/functions/mapping.py index bda37830c4b37..d079b7878534c 100644 --- a/posthog/hogql/functions/mapping.py +++ b/posthog/hogql/functions/mapping.py @@ -466,6 +466,7 @@ def compare_types(arg_types: list[ConstantType], sig_arg_types: tuple[ConstantTy "timeStampSub": HogQLFunctionMeta("timeStampSub", 2, 2), "now": HogQLFunctionMeta("now64", 0, 1, tz_aware=True, case_sensitive=False), "nowInBlock": HogQLFunctionMeta("nowInBlock", 1, 1), + "rowNumberInAllBlocks": HogQLFunctionMeta("rowNumberInAllBlocks", 0, 0), "today": HogQLFunctionMeta("today"), "yesterday": HogQLFunctionMeta("yesterday"), "timeSlot": HogQLFunctionMeta("timeSlot", 1, 1), diff --git a/posthog/hogql/printer.py b/posthog/hogql/printer.py index b44191b41095e..136e8ecab70fd 100644 --- a/posthog/hogql/printer.py +++ b/posthog/hogql/printer.py @@ -1145,7 +1145,10 @@ def visit_window_function(self, node: ast.WindowFunction): identifier = self._print_identifier(node.name) exprs = ", ".join(self.visit(expr) for expr in node.exprs or []) args = "(" + (", ".join(self.visit(arg) for arg in node.args or [])) + ")" if node.args else "" - over = f"({self.visit(node.over_expr)})" if node.over_expr else self._print_identifier(node.over_identifier) + if node.over_expr or node.over_identifier: + over = f"({self.visit(node.over_expr)})" if node.over_expr else self._print_identifier(node.over_identifier) + else: + over = "()" return f"{identifier}({exprs}){args} OVER {over}" def visit_window_frame_expr(self, node: ast.WindowFrameExpr): diff --git a/posthog/hogql_queries/insights/trends/breakdown.py b/posthog/hogql_queries/insights/trends/breakdown.py index 49491429cf54f..9c8af0064ba42 100644 --- a/posthog/hogql_queries/insights/trends/breakdown.py +++ b/posthog/hogql_queries/insights/trends/breakdown.py @@ -3,12 +3,6 @@ from posthog.hogql.constants import LimitContext from posthog.hogql.parser import parse_expr from posthog.hogql.timings import HogQLTimings -from posthog.hogql_queries.insights.trends.breakdown_values import ( - BREAKDOWN_NULL_STRING_LABEL, - BREAKDOWN_OTHER_STRING_LABEL, - BreakdownValues, -) -from posthog.hogql_queries.insights.trends.display import TrendsDisplay from posthog.hogql_queries.insights.trends.utils import ( get_properties_chain, ) @@ -17,6 +11,11 @@ from posthog.models.team.team import Team from posthog.schema import ActionsNode, EventsNode, DataWarehouseNode, HogQLQueryModifiers, InCohortVia, TrendsQuery +BREAKDOWN_OTHER_STRING_LABEL = "$$_posthog_breakdown_other_$$" +BREAKDOWN_NULL_STRING_LABEL = "$$_posthog_breakdown_null_$$" +BREAKDOWN_OTHER_DISPLAY = "Other (i.e. all remaining values)" +BREAKDOWN_NULL_DISPLAY = "None (i.e. no value)" + def hogql_to_string(expr: ast.Expr) -> ast.Call: return ast.Call(name="toString", args=[expr]) @@ -30,7 +29,6 @@ class Breakdown: timings: HogQLTimings modifiers: HogQLQueryModifiers events_filter: ast.Expr - breakdown_values_override: Optional[list[str | int]] limit_context: LimitContext def __init__( @@ -42,7 +40,6 @@ def __init__( timings: HogQLTimings, modifiers: HogQLQueryModifiers, events_filter: ast.Expr, - breakdown_values_override: Optional[list[str | int]] = None, limit_context: LimitContext = LimitContext.QUERY, ): self.team = team @@ -52,34 +49,19 @@ def __init__( self.timings = timings self.modifiers = modifiers self.events_filter = events_filter - self.breakdown_values_override = breakdown_values_override self.limit_context = limit_context @cached_property def enabled(self) -> bool: - return ( - self.query.breakdownFilter is not None - and self.query.breakdownFilter.breakdown is not None - and self.has_breakdown_values - ) - - @cached_property - def is_session_type(self) -> bool: - return self.enabled and self.query.breakdownFilter.breakdown_type == "session" + return self.query.breakdownFilter is not None and self.query.breakdownFilter.breakdown is not None @cached_property def is_histogram_breakdown(self) -> bool: return self.enabled and self.query.breakdownFilter.breakdown_histogram_bin_count is not None - def placeholders(self) -> dict[str, ast.Expr]: - values = self._breakdown_buckets_ast if self.is_histogram_breakdown else self._breakdown_values_ast - - return {"cross_join_breakdown_values": ast.Alias(alias="breakdown_value", expr=values)} - def column_expr(self) -> ast.Alias: if self.is_histogram_breakdown: - return ast.Alias(alias="breakdown_value", expr=self._get_breakdown_histogram_multi_if()) - + return ast.Alias(alias="breakdown_value", expr=ast.Field(chain=self._properties_chain)) if self.query.breakdownFilter.breakdown_type == "cohort": if self.modifiers.inCohortVia == InCohortVia.LEFTJOIN_CONJOINED: return ast.Alias( @@ -95,19 +77,15 @@ def column_expr(self) -> ast.Alias: expr=hogql_to_string(ast.Constant(value=cohort_breakdown)), ) - return ast.Alias(alias="breakdown_value", expr=self._get_breakdown_transform_func) + return ast.Alias(alias="breakdown_value", expr=self._get_breakdown_expression) - def events_where_filter(self) -> ast.Expr | None: + def events_where_filter(self, breakdown_values_override: Optional[str | int] = None) -> ast.Expr | None: if ( self.query.breakdownFilter is not None and self.query.breakdownFilter.breakdown is not None and self.query.breakdownFilter.breakdown_type == "cohort" ): - breakdown = ( - self.breakdown_values_override - if self.breakdown_values_override - else self.query.breakdownFilter.breakdown - ) + breakdown = breakdown_values_override if breakdown_values_override else self.query.breakdownFilter.breakdown if breakdown == "all": return None @@ -136,60 +114,33 @@ def events_where_filter(self) -> ast.Expr | None: right=ast.Constant(value=breakdown), ) - # No need to filter if we're showing the "other" bucket, as we need to look at all events anyway. - # Except when explicitly filtering - if ( - self.query.breakdownFilter is not None - and not self.query.breakdownFilter.breakdown_hide_other_aggregation - and len(self.breakdown_values_override or []) == 0 - ): - return ast.Constant(value=True) - - if ( - self.query.breakdownFilter is not None - and self.query.breakdownFilter.breakdown is not None - and self.query.breakdownFilter.breakdown_type == "hogql" - and isinstance(self.query.breakdownFilter.breakdown, str) - ): - left = parse_expr(self.query.breakdownFilter.breakdown) - else: - left = ast.Field(chain=self._properties_chain) - - if not self.is_histogram_breakdown: - left = hogql_to_string(left) - - compare_ops = [] - for _value in self._breakdown_values: - value: Optional[str] = str(_value) # non-cohorts are always strings - # If the value is one of the "other" values, then use the `transform()` func + if breakdown_values_override: + if ( + self.query.breakdownFilter is not None + and self.query.breakdownFilter.breakdown is not None + and self.query.breakdownFilter.breakdown_type == "hogql" + and isinstance(self.query.breakdownFilter.breakdown, str) + ): + left = parse_expr(self.query.breakdownFilter.breakdown) + else: + left = ast.Field(chain=self._properties_chain) + value: Optional[str] = str(breakdown_values_override) # non-cohorts are always strings if value == BREAKDOWN_OTHER_STRING_LABEL: - transform_func = self._get_breakdown_transform_func - compare_ops.append( - ast.CompareOperation( - left=transform_func, op=ast.CompareOperationOp.Eq, right=ast.Constant(value=value) - ) - ) + # TODO: Fix breaking down by other + return ast.Constant(value=True) elif value == BREAKDOWN_NULL_STRING_LABEL: - compare_ops.append( - ast.CompareOperation(left=left, op=ast.CompareOperationOp.Eq, right=ast.Constant(value=None)) - ) - compare_ops.append( - ast.CompareOperation(left=left, op=ast.CompareOperationOp.Eq, right=ast.Constant(value="")) + return ast.Or( + exprs=[ + ast.CompareOperation(left=left, op=ast.CompareOperationOp.Eq, right=ast.Constant(value=None)), + ast.CompareOperation(left=left, op=ast.CompareOperationOp.Eq, right=ast.Constant(value="")), + ] ) else: - compare_ops.append( - ast.CompareOperation(left=left, op=ast.CompareOperationOp.Eq, right=ast.Constant(value=value)) - ) - - if len(compare_ops) == 1: - return compare_ops[0] - elif len(compare_ops) == 0: - return parse_expr("1 = 1") - - return ast.Or(exprs=compare_ops) + return ast.CompareOperation(left=left, op=ast.CompareOperationOp.Eq, right=ast.Constant(value=value)) + return ast.Constant(value=True) @cached_property - def _get_breakdown_transform_func(self) -> ast.Call: + def _get_breakdown_expression(self) -> ast.Call: if self.query.breakdownFilter.breakdown_type == "hogql": return self._get_breakdown_values_transform(parse_expr(self.query.breakdownFilter.breakdown)) return self._get_breakdown_values_transform(ast.Field(chain=self._properties_chain)) @@ -202,115 +153,14 @@ def _get_breakdown_values_transform(self, node: ast.Expr) -> ast.Call: return cast( ast.Call, parse_expr( - "transform(ifNull(nullIf(toString({node}), ''), {nil}), {values}, {values}, {other})", + "ifNull(nullIf(toString({node}), ''), {nil})", placeholders={ "node": node, - "values": self._breakdown_values_ast, "nil": ast.Constant(value=BREAKDOWN_NULL_STRING_LABEL), - "other": ast.Constant(value=BREAKDOWN_OTHER_STRING_LABEL), }, ), ) - @cached_property - def _breakdown_buckets_ast(self) -> ast.Array: - buckets = self._get_breakdown_histogram_buckets() - values = [f"[{t[0]},{t[1]}]" for t in buckets] - # TODO: add this only if needed - values.append('["",""]') - - return ast.Array(exprs=[ast.Constant(value=v) for v in values]) - - @property - def _breakdown_values_ast(self) -> ast.Array: - exprs: list[ast.Expr] = [] - for value in self._breakdown_values: - if isinstance(value, str): - exprs.append(ast.Constant(value=value)) - else: - exprs.append(hogql_to_string(ast.Constant(value=value))) - return ast.Array(exprs=exprs) - - @cached_property - def _all_breakdown_values(self) -> list[str | int | None]: - # Used in the actors query - if self.breakdown_values_override is not None: - return cast(list[str | int | None], self.breakdown_values_override) - - if self.query.breakdownFilter is None: - return [] - - with self.timings.measure("breakdown_values_query"): - breakdown = BreakdownValues( - team=self.team, - series=self.series, - events_filter=self.events_filter, - chart_display_type=self._trends_display().display_type, - breakdown_filter=self.query.breakdownFilter, - query_date_range=self.query_date_range, - modifiers=self.modifiers, - limit_context=self.limit_context, - ) - return cast(list[str | int | None], breakdown.get_breakdown_values()) - - @cached_property - def _breakdown_values(self) -> list[str | int]: - values = [BREAKDOWN_NULL_STRING_LABEL if v is None else v for v in self._all_breakdown_values] - return cast(list[str | int], values) - - @cached_property - def has_breakdown_values(self) -> bool: - return len(self._breakdown_values) > 0 - - def _get_breakdown_histogram_buckets(self) -> list[tuple[float, float]]: - buckets = [] - values = self._breakdown_values - - if len(values) == 1: - values = [values[0], values[0]] - - for i in range(len(values) - 1): - last_value = i == len(values) - 2 - - # Since we always `floor(x, 2)` the value, we add 0.01 to the last bucket - # to ensure it's always slightly greater than the maximum value - lower_bound = float(values[i]) - upper_bound = float(values[i + 1]) + 0.01 if last_value else float(values[i + 1]) - buckets.append((lower_bound, upper_bound)) - - return buckets - - def _get_breakdown_histogram_multi_if(self) -> ast.Expr: - multi_if_exprs: list[ast.Expr] = [] - - buckets = self._get_breakdown_histogram_buckets() - - for lower_bound, upper_bound in buckets: - multi_if_exprs.extend( - [ - ast.And( - exprs=[ - ast.CompareOperation( - left=ast.Field(chain=self._properties_chain), - op=ast.CompareOperationOp.GtEq, - right=ast.Constant(value=lower_bound), - ), - ast.CompareOperation( - left=ast.Field(chain=self._properties_chain), - op=ast.CompareOperationOp.Lt, - right=ast.Constant(value=upper_bound), - ), - ] - ), - ast.Constant(value=f"[{lower_bound},{upper_bound}]"), - ] - ) - - # `else` block of the multi-if - multi_if_exprs.append(ast.Constant(value='["",""]')) - - return ast.Call(name="multiIf", args=multi_if_exprs) - @cached_property def _properties_chain(self): return get_properties_chain( @@ -318,11 +168,3 @@ def _properties_chain(self): breakdown_field=self.query.breakdownFilter.breakdown, group_type_index=self.query.breakdownFilter.breakdown_group_type_index, ) - - def _trends_display(self) -> TrendsDisplay: - display = ( - self.query.trendsFilter.display - if self.query.trendsFilter is not None and self.query.trendsFilter.display is not None - else None - ) - return TrendsDisplay(display) diff --git a/posthog/hogql_queries/insights/trends/breakdown_values.py b/posthog/hogql_queries/insights/trends/breakdown_values.py deleted file mode 100644 index aee02dd9ccefb..0000000000000 --- a/posthog/hogql_queries/insights/trends/breakdown_values.py +++ /dev/null @@ -1,279 +0,0 @@ -from typing import Optional, Union, Any -from posthog.hogql import ast -from posthog.hogql.constants import LimitContext, get_breakdown_limit_for_context, BREAKDOWN_VALUES_LIMIT_FOR_COUNTRIES -from posthog.hogql.parser import parse_expr, parse_select -from posthog.hogql.placeholders import replace_placeholders, find_placeholders -from posthog.hogql.query import execute_hogql_query -from posthog.hogql_queries.insights.trends.aggregation_operations import AggregationOperations -from posthog.hogql_queries.insights.trends.utils import get_properties_chain -from posthog.hogql_queries.utils.query_date_range import QueryDateRange -from posthog.models.team.team import Team -from posthog.schema import ( - BreakdownFilter, - BreakdownType, - ChartDisplayType, - ActionsNode, - EventsNode, - DataWarehouseNode, - HogQLQueryModifiers, -) -from functools import cached_property - -BREAKDOWN_OTHER_STRING_LABEL = "$$_posthog_breakdown_other_$$" -BREAKDOWN_OTHER_NUMERIC_LABEL = 9007199254740991 # pow(2, 53) - 1, for JS compatibility -BREAKDOWN_OTHER_DISPLAY = "Other (i.e. all remaining values)" -BREAKDOWN_NULL_STRING_LABEL = "$$_posthog_breakdown_null_$$" -BREAKDOWN_NULL_NUMERIC_LABEL = 9007199254740990 # pow(2, 53) - 2, for JS compatibility -BREAKDOWN_NULL_DISPLAY = "None (i.e. no value)" - - -class BreakdownValues: - team: Team - series: Union[EventsNode, ActionsNode, DataWarehouseNode] - breakdown_field: Union[str, float, list[Union[str, float]]] - breakdown_type: BreakdownType - events_filter: ast.Expr - chart_display_type: ChartDisplayType - histogram_bin_count: Optional[int] - group_type_index: Optional[int] - hide_other_aggregation: Optional[bool] - normalize_url: Optional[bool] - breakdown_limit: int - query_date_range: QueryDateRange - modifiers: HogQLQueryModifiers - limit_context: LimitContext - - def __init__( - self, - team: Team, - series: Union[EventsNode, ActionsNode, DataWarehouseNode], - events_filter: ast.Expr, - chart_display_type: ChartDisplayType, - breakdown_filter: BreakdownFilter, - query_date_range: QueryDateRange, - modifiers: HogQLQueryModifiers, - limit_context: LimitContext = LimitContext.QUERY, - ): - self.team = team - self.series = series - self.breakdown_field = breakdown_filter.breakdown # type: ignore - self.breakdown_type = breakdown_filter.breakdown_type # type: ignore - self.events_filter = events_filter - self.chart_display_type = chart_display_type - self.histogram_bin_count = ( - int(breakdown_filter.breakdown_histogram_bin_count) - if breakdown_filter.breakdown_histogram_bin_count is not None - else None - ) - self.group_type_index = ( - int(breakdown_filter.breakdown_group_type_index) - if breakdown_filter.breakdown_group_type_index is not None - else None - ) - self.hide_other_aggregation = breakdown_filter.breakdown_hide_other_aggregation - self.normalize_url = breakdown_filter.breakdown_normalize_url - self.breakdown_limit = breakdown_filter.breakdown_limit or get_breakdown_limit_for_context(limit_context) - self.query_date_range = query_date_range - self.modifiers = modifiers - self.limit_context = limit_context - - def get_breakdown_values(self) -> list[str | int]: - if self.breakdown_type == "cohort": - if self.breakdown_field == "all": - return [0] - - if isinstance(self.breakdown_field, list): - return [value if isinstance(value, str) else int(value) for value in self.breakdown_field] - - return [self.breakdown_field if isinstance(self.breakdown_field, str) else int(self.breakdown_field)] - - if self.breakdown_type == "hogql": - select_field = ast.Alias( - alias="value", - expr=parse_expr(str(self.breakdown_field)), - ) - else: - select_field = ast.Alias( - alias="value", - expr=ast.Field( - chain=get_properties_chain( - breakdown_type=self.breakdown_type, - breakdown_field=str(self.breakdown_field), - group_type_index=self.group_type_index, - ) - ), - ) - - if not self.histogram_bin_count: - if self.normalize_url: - select_field.expr = parse_expr( - "empty(trimRight({node}, '/?#')) ? '/' : trimRight({node}, '/?#')", - placeholders={"node": select_field.expr}, - ) - - select_field.expr = ast.Call(name="toString", args=[select_field.expr]) - - if self.chart_display_type == ChartDisplayType.WORLD_MAP: - breakdown_limit = BREAKDOWN_VALUES_LIMIT_FOR_COUNTRIES - else: - breakdown_limit = int(self.breakdown_limit) - - aggregation_expression: ast.Expr - if self._aggregation_operation.aggregating_on_session_duration(): - aggregation_expression = ast.Call(name="max", args=[ast.Field(chain=["session", "$session_duration"])]) - elif self.series.math == "dau": - # When aggregating by (daily) unique users, run the breakdown aggregation on count(e.uuid). - # This retains legacy compatibility and should be removed once we have the new trends in production. - aggregation_expression = parse_expr("count({id_field})", placeholders={"id_field": self._id_field}) - else: - aggregation_expression = self._aggregation_operation.select_aggregation() - # Take a shortcut with WAU and MAU queries. Get the total AU-s for the period instead. - if "replaced" in find_placeholders(aggregation_expression): - actor = "e.distinct_id" if self.team.aggregate_users_by_distinct_id else "e.person_id" - replaced = parse_expr(f"count(DISTINCT {actor})") - aggregation_expression = replace_placeholders(aggregation_expression, {"replaced": replaced}) - - timestamp_field = self.series.timestamp_field if hasattr(self.series, "timestamp_field") else "timestamp" - date_filter = ast.And( - exprs=[ - parse_expr( - "{timestamp} >= {date_from_with_adjusted_start_of_interval}", - placeholders={ - **self.query_date_range.to_placeholders(), - "timestamp": ast.Field(chain=[timestamp_field]), - }, - ), - parse_expr( - "{timestamp} <= {date_to}", - placeholders={ - **self.query_date_range.to_placeholders(), - "timestamp": ast.Field(chain=[timestamp_field]), - }, - ), - ] - ) - - inner_events_query = parse_select( - """ - SELECT - {select_field}, - {aggregation_expression} as count - FROM {table} e - WHERE - {date_filter} and {events_where} - GROUP BY - value - ORDER BY - count DESC, - value DESC - LIMIT {breakdown_limit_plus_one} - """, - placeholders={ - "select_field": select_field, - "aggregation_expression": aggregation_expression, - "table": self._table, - "date_filter": date_filter, - "events_where": self.events_filter, - "breakdown_limit_plus_one": ast.Constant(value=breakdown_limit + 1), - }, - ) - - # Reverse the order if looking at the smallest values - if self.series.math_property is not None and self.series.math == "min": - if ( - isinstance(inner_events_query, ast.SelectQuery) - and inner_events_query.order_by is not None - and isinstance(inner_events_query.order_by[0], ast.OrderExpr) - ): - inner_events_query.order_by[0].order = "ASC" - - values: list[Any] - if self.histogram_bin_count is not None: - query = parse_select( - """ - SELECT {expr} FROM ({inner_events_query}) - """, - placeholders={ - "inner_events_query": inner_events_query, - "expr": self._to_bucketing_expression(), - }, - ) - response = execute_hogql_query( - query_type="TrendsQueryBreakdownValues", - query=query, - team=self.team, - modifiers=self.modifiers, - limit_context=self.limit_context, - ) - if response.results and len(response.results) > 0: - values = response.results[0][0] - else: - values = [] - else: - # We're not running this through groupArray, as that eats NULL values. - query = inner_events_query - response = execute_hogql_query( - query_type="TrendsQueryBreakdownValues", - query=query, - team=self.team, - modifiers=self.modifiers, - limit_context=self.limit_context, - ) - value_index = (response.columns or []).index("value") - values = [row[value_index] for row in response.results or []] - - needs_other = False - if len(values) == breakdown_limit + 1: - needs_other = True - values = values[:-1] - - # Add "other" value if "other" is not hidden and we're not bucketing numeric values - if self.hide_other_aggregation is not True and self.histogram_bin_count is None: - values = [BREAKDOWN_NULL_STRING_LABEL if value in (None, "") else value for value in values] - if needs_other: - values = [BREAKDOWN_OTHER_STRING_LABEL, *values] - - if len(values) == 0: - values.insert(0, None) - return values - - return values - - def _to_bucketing_expression(self) -> ast.Expr: - assert isinstance(self.histogram_bin_count, int) - - if self.histogram_bin_count <= 1: - qunatile_expression = "quantiles(0,1)(value)" - else: - quantiles = [] - bin_size = 1.0 / self.histogram_bin_count - for i in range(self.histogram_bin_count + 1): - quantiles.append(i * bin_size) - - qunatile_expression = f"quantiles({','.join([f'{quantile:.2f}' for quantile in quantiles])})(value)" - - return parse_expr(f"arrayCompact(arrayMap(x -> floor(x, 2), {qunatile_expression}))") - - @cached_property - def _id_field(self) -> ast.Field: - if isinstance(self.series, DataWarehouseNode): - return ast.Field(chain=["e", self.series.id_field]) - - return ast.Field(chain=["e", "uuid"]) - - @cached_property - def _table(self) -> ast.Field: - if isinstance(self.series, DataWarehouseNode): - return ast.Field(chain=[self.series.table_name]) - - return ast.Field(chain=["events"]) - - @cached_property - def _aggregation_operation(self) -> AggregationOperations: - return AggregationOperations( - self.team, - self.series, - self.chart_display_type, - self.query_date_range, - is_total_value=True, # doesn't matter in this case - ) 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 80d7c6c77345e..f7cca83fa28a4 100644 --- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr @@ -184,61 +184,42 @@ # --- # name: TestTrends.test_breakdown_by_group_props_person_on_events ''' - SELECT toString(e__group_0.properties___industry) AS value, - count(e.uuid) AS count - FROM events AS e - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) - GROUP BY groups.group_type_index, - groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) - WHERE and(equals(e.team_id, 2), and(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-12 23:59:59', 6, 'UTC')))), and(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-12 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 - ''' -# --- -# name: TestTrends.test_breakdown_by_group_props_person_on_events.1 - ''' - SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))))), 1))) AS date, - arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) - and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, - ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value FROM - (SELECT sum(total) AS count, - day_start AS day_start, - breakdown_value AS breakdown_value + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number FROM - (SELECT count(e.uuid) AS total, - toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, - transform(ifNull(nullIf(toString(e__group_0.properties___industry), ''), '$$_posthog_breakdown_null_$$'), ['finance', 'technology'], ['finance', 'technology'], '$$_posthog_breakdown_other_$$') AS breakdown_value - FROM events AS e SAMPLE 1 - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) - GROUP BY groups.group_type_index, - groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) - 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-12 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.uuid) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(e__group_0.properties___industry), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + 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-12 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) + GROUP BY day_start, + breakdown_value) GROUP BY day_start, - breakdown_value) - GROUP BY day_start, - breakdown_value - ORDER BY day_start ASC, breakdown_value ASC) + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) 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)), - arraySum(total) DESC, breakdown_value ASC + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC LIMIT 50000 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, @@ -248,7 +229,7 @@ max_query_size=524288 ''' # --- -# name: TestTrends.test_breakdown_by_group_props_person_on_events.2 +# name: TestTrends.test_breakdown_by_group_props_person_on_events.1 ''' SELECT persons.id AS id, toTimeZone(persons.created_at, 'UTC') AS created_at, @@ -273,7 +254,7 @@ WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) GROUP BY groups.group_type_index, groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) - WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')), ifNull(equals(toString(e__group_0.properties___industry), 'technology'), 0))) + WHERE and(equals(e.team_id, 2), equals(e.event, 'sign up'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-02 00:00:00.000000', 6, 'UTC')), less(toTimeZone(e.timestamp, 'UTC'), toDateTime64('2020-01-03 00:00:00.000000', 6, 'UTC')), ifNull(equals(e__group_0.properties___industry, 'technology'), 0))) GROUP BY actor_id) AS source INNER JOIN (SELECT argMax(person.created_at, person.version) AS created_at, @@ -293,6 +274,20 @@ max_query_size=524288 ''' # --- +# name: TestTrends.test_breakdown_by_group_props_person_on_events.2 + ''' + 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('2020-01-01 00:00:00.000000', 6, 'UTC'), toIntervalDay(21))), 0), in(session_replay_events.session_id, [''])) + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 + ''' +# --- # name: TestTrends.test_breakdown_by_group_props_person_on_events.3 ''' SELECT DISTINCT session_replay_events.session_id AS session_id @@ -309,27 +304,49 @@ # --- # name: TestTrends.test_breakdown_by_group_props_with_person_filter_person_on_events ''' - SELECT toString(e__group_0.properties___industry) AS value, - count(e.uuid) AS count - FROM events AS e - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) - GROUP BY groups.group_type_index, - groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) - WHERE and(equals(e.team_id, 2), and(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-12 23:59:59', 6, 'UTC')))), and(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-12 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.person_properties, 'key'), ''), 'null'), '^"|"$', ''), 'value'), 0))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.uuid) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(e__group_0.properties___industry), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + 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-12 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.person_properties, 'key'), ''), 'null'), '^"|"$', ''), 'value'), 0), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_breakdown_by_group_props_with_person_filter_person_on_events.1 @@ -375,45 +392,73 @@ # --- # name: TestTrends.test_breakdown_filtering_with_properties_in_new_format ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - FROM events AS e - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC')))), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Firefox'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', ''), 'Windows'), 0)), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', ''), 'Mac'), 0))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.uuid) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Firefox'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', ''), 'Windows'), 0)), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', ''), 'Mac'), 0), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_breakdown_filtering_with_properties_in_new_format.1 ''' - SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))))), 1))) AS date, - arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) - and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, - ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value FROM - (SELECT sum(total) AS count, - day_start AS day_start, - breakdown_value AS breakdown_value + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number FROM - (SELECT count(e.uuid) AS total, - toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, - transform(ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$'), ['second url'], ['second url'], '$$_posthog_breakdown_other_$$') AS breakdown_value - FROM events AS e SAMPLE 1 - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), or(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Firefox'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', ''), 'Windows'), 0)), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', ''), 'Mac'), 0), true) + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.uuid) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-22 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$browser'), ''), 'null'), '^"|"$', ''), 'Firefox'), 0), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', ''), 'Windows'), 0)), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', ''), 'Mac'), 0), true) + GROUP BY day_start, + breakdown_value) GROUP BY day_start, - breakdown_value) - GROUP BY day_start, - breakdown_value - ORDER BY day_start ASC, breakdown_value ASC) + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) 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)), - arraySum(total) DESC, breakdown_value ASC + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC LIMIT 50000 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, @@ -475,26 +520,44 @@ # --- # name: TestTrends.test_breakdown_weekly_active_users_aggregated ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', '')) AS value, - count(DISTINCT e__pdi.person_id) AS count - FROM events AS e - INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC')))), equals(e.event, '$pageview')) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT count(DISTINCT actor_id) AS total, + breakdown_value AS breakdown_value + FROM + (SELECT d.timestamp AS timestamp, + e.actor_id AS actor_id, + e.breakdown_value AS breakdown_value + FROM + (SELECT minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC'))), toIntervalDay(numbers.number)) AS timestamp + FROM numbers(dateDiff('day', minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 00:00:00', 6, 'UTC'))), toIntervalDay(7)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC')))) AS numbers) AS d + CROSS JOIN + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS actor_id, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), true), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC'))), 0)) + GROUP BY timestamp, actor_id, + breakdown_value) AS e + WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) + GROUP BY d.timestamp, + e.actor_id, + e.breakdown_value + ORDER BY d.timestamp ASC) + WHERE and(ifNull(greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC'))), 0)) + GROUP BY breakdown_value + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_breakdown_weekly_active_users_aggregated.1 @@ -541,26 +604,44 @@ # --- # name: TestTrends.test_breakdown_weekly_active_users_aggregated_materialized ''' - SELECT toString(nullIf(nullIf(e.mat_key, ''), 'null')) AS value, - count(DISTINCT e__pdi.person_id) AS count - FROM events AS e - INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC')))), equals(e.event, '$pageview')) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT count(DISTINCT actor_id) AS total, + breakdown_value AS breakdown_value + FROM + (SELECT d.timestamp AS timestamp, + e.actor_id AS actor_id, + e.breakdown_value AS breakdown_value + FROM + (SELECT minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC'))), toIntervalDay(numbers.number)) AS timestamp + FROM numbers(dateDiff('day', minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 00:00:00', 6, 'UTC'))), toIntervalDay(7)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC')))) AS numbers) AS d + CROSS JOIN + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS actor_id, + ifNull(nullIf(toString(nullIf(nullIf(e.mat_key, ''), 'null')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(equals(e.event, '$pageview'), true), ifNull(greaterOrEquals(timestamp, minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC')), toIntervalDay(7))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC'))), 0)) + GROUP BY timestamp, actor_id, + breakdown_value) AS e + WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) + GROUP BY d.timestamp, + e.actor_id, + e.breakdown_value + ORDER BY d.timestamp ASC) + WHERE and(ifNull(greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC'))), 0)) + GROUP BY breakdown_value + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_breakdown_weekly_active_users_aggregated_materialized.1 @@ -627,40 +708,78 @@ # --- # name: TestTrends.test_breakdown_weekly_active_users_daily_based_on_action.2 ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', '')) AS value, - count(DISTINCT e__pdi.person_id) AS count - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___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)) 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, 'name'), ''), 'null'), '^"|"$', '') 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 and(equals(e.team_id, 2), and(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-12 23:59:59', 6, 'UTC')))), and(equals(e.event, '$pageview'), and(or(ifNull(equals(e__pdi__person.properties___name, 'p1'), 0), ifNull(equals(e__pdi__person.properties___name, 'p2'), 0), ifNull(equals(e__pdi__person.properties___name, 'p3'), 0)), ifNull(in(e__pdi.person_id, - (SELECT cohortpeople.person_id AS person_id - FROM cohortpeople - WHERE and(equals(cohortpeople.team_id, 2), equals(cohortpeople.cohort_id, 2), equals(cohortpeople.version, 0)))), 0)))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT counts AS total, + toStartOfDay(timestamp) AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT d.timestamp AS timestamp, + count(DISTINCT e.actor_id) AS counts, + e.breakdown_value AS breakdown_value + FROM + (SELECT minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))), toIntervalDay(numbers.number)) AS timestamp + FROM numbers(dateDiff('day', minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(7)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC')))) AS numbers) AS d + CROSS JOIN + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS actor_id, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___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)) 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, 'name'), ''), 'null'), '^"|"$', '') 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 and(equals(e.team_id, 2), and(and(equals(e.event, '$pageview'), and(or(ifNull(equals(e__pdi__person.properties___name, 'p1'), 0), ifNull(equals(e__pdi__person.properties___name, 'p2'), 0), ifNull(equals(e__pdi__person.properties___name, 'p3'), 0)), ifNull(in(e__pdi.person_id, + (SELECT cohortpeople.person_id AS person_id + FROM cohortpeople + WHERE and(equals(cohortpeople.team_id, 2), equals(cohortpeople.cohort_id, 2), equals(cohortpeople.version, 0)))), 0))), true), 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, + breakdown_value) AS e + WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(6))), 0)) + GROUP BY d.timestamp, + e.breakdown_value + ORDER BY d.timestamp ASC) + WHERE and(ifNull(greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))), 0))) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_breakdown_weekly_active_users_daily_based_on_action.3 @@ -735,27 +854,49 @@ # --- # name: TestTrends.test_breakdown_with_filter_groups_person_on_events ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - FROM events AS e - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) - GROUP BY groups.group_type_index, - groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) - WHERE and(equals(e.team_id, 2), and(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-12 23:59:59', 6, 'UTC')))), and(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-12 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), ifNull(equals(e__group_0.properties___industry, 'finance'), 0))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.uuid) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + 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-12 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), ifNull(equals(e__group_0.properties___industry, 'finance'), 0), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_breakdown_with_filter_groups_person_on_events.1 @@ -810,27 +951,56 @@ # --- # name: TestTrends.test_breakdown_with_filter_groups_person_on_events_v2.1 ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - FROM events AS e - LEFT JOIN - (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, - groups.group_type_index AS index, - groups.group_key AS key - FROM groups - WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) - GROUP BY groups.group_type_index, - groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) - WHERE and(equals(e.team_id, 2), and(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-12 23:59:59', 6, 'UTC')))), and(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-12 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), ifNull(equals(e__group_0.properties___industry, 'finance'), 0))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + 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, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', '')), ''), '$$_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)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + LEFT JOIN + (SELECT argMax(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(groups.group_properties, 'industry'), ''), 'null'), '^"|"$', ''), groups._timestamp) AS properties___industry, + groups.group_type_index AS index, + groups.group_key AS key + FROM groups + WHERE and(equals(groups.team_id, 2), ifNull(equals(index, 0), 0)) + GROUP BY groups.group_type_index, + groups.group_key) AS e__group_0 ON equals(e.`$group_0`, e__group_0.key) + 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-12 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), ifNull(equals(e__group_0.properties___industry, 'finance'), 0), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_breakdown_with_filter_groups_person_on_events_v2.2 @@ -883,52 +1053,87 @@ # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - FROM events AS e - WHERE and(equals(e.team_id, 2), and(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')))), and(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 value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT e__pdi.person_id) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1.0 + INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_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'), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.1 ''' - SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, - arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) - and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, - ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value FROM - (SELECT sum(total) AS count, - day_start AS day_start, - breakdown_value AS breakdown_value + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number FROM - (SELECT count(DISTINCT e__pdi.person_id) AS total, - toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, - transform(ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$'), ['other_value', '$$_posthog_breakdown_null_$$', 'value'], ['other_value', '$$_posthog_breakdown_null_$$', 'value'], '$$_posthog_breakdown_other_$$') AS breakdown_value - FROM events AS e SAMPLE 1.0 - INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_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'), true) + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT e__pdi.person_id) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1.0 + INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_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'), true) + GROUP BY day_start, + breakdown_value) GROUP BY day_start, - breakdown_value) - GROUP BY day_start, - breakdown_value - ORDER BY day_start ASC, breakdown_value ASC) + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) 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)), - arraySum(total) DESC, breakdown_value ASC + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC LIMIT 50000 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, @@ -1290,38 +1495,76 @@ # --- # name: TestTrends.test_mau_with_breakdown_filtering_and_prop_filter ''' - SELECT toString(e__pdi__person.`properties___$some_prop`) AS value, - count(DISTINCT e__pdi.person_id) AS count - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, - argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___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)) 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, '$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), 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 and(equals(e.team_id, 2), and(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')))), and(equals(e.event, 'sign up'), ifNull(equals(e__pdi__person.properties___filter_prop, 'filter_val'), 0))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT counts AS total, + toStartOfDay(timestamp) AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT d.timestamp AS timestamp, + count(DISTINCT e.actor_id) AS counts, + e.breakdown_value AS breakdown_value + FROM + (SELECT minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), toIntervalDay(numbers.number)) AS timestamp + FROM numbers(dateDiff('day', minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(30)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC')))) AS numbers) AS d + CROSS JOIN + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + e__pdi.person_id AS actor_id, + ifNull(nullIf(toString(e__pdi__person.`properties___$some_prop`), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS person_id, + argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___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)) 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, '$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), 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 and(equals(e.team_id, 2), and(equals(e.event, 'sign up'), ifNull(equals(e__pdi__person.properties___filter_prop, 'filter_val'), 0), true), 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 + WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(29))), 0)) + GROUP BY d.timestamp, + e.breakdown_value + ORDER BY d.timestamp ASC) + WHERE and(ifNull(greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0))) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_mau_with_breakdown_filtering_and_prop_filter.1 @@ -1394,26 +1637,64 @@ # --- # name: TestTrends.test_mau_with_breakdown_filtering_and_prop_filter_poe_v2 ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.person_properties, '$some_prop'), ''), 'null'), '^"|"$', '')) AS value, - count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS count - 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)) 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'), 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')))), and(equals(e.event, 'sign up'), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.person_properties, 'filter_prop'), ''), 'null'), '^"|"$', ''), 'filter_val'), 0))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT counts AS total, + toStartOfDay(timestamp) AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT d.timestamp AS timestamp, + count(DISTINCT e.actor_id) AS counts, + e.breakdown_value AS breakdown_value + FROM + (SELECT minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), toIntervalDay(numbers.number)) AS timestamp + FROM numbers(dateDiff('day', minus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(30)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC')))) AS numbers) AS d + CROSS JOIN + (SELECT toTimeZone(e.timestamp, 'UTC') AS timestamp, + if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS actor_id, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.person_properties, '$some_prop'), ''), 'null'), '^"|"$', '')), ''), '$$_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)) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), and(equals(e.event, 'sign up'), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.person_properties, 'filter_prop'), ''), 'null'), '^"|"$', ''), 'filter_val'), 0), true), 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 + WHERE and(ifNull(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), 0), ifNull(greater(e.timestamp, minus(d.timestamp, toIntervalDay(29))), 0)) + GROUP BY d.timestamp, + e.breakdown_value + ORDER BY d.timestamp ASC) + WHERE and(ifNull(greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0))) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_mau_with_breakdown_filtering_and_prop_filter_poe_v2.1 @@ -1520,29 +1801,51 @@ # --- # name: TestTrends.test_person_filtering_in_cohort_in_action.2 ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - FROM events AS e - INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) - WHERE and(equals(e.team_id, 2), and(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')))), and(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'))), and(equals(e.event, 'sign up'), ifNull(in(e__pdi.person_id, - (SELECT cohortpeople.person_id AS person_id - FROM cohortpeople - WHERE and(equals(cohortpeople.team_id, 2), equals(cohortpeople.cohort_id, 2), equals(cohortpeople.version, 0)))), 0)))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.uuid) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_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'))), and(equals(e.event, 'sign up'), ifNull(in(e__pdi.person_id, + (SELECT cohortpeople.person_id AS person_id + FROM cohortpeople + WHERE and(equals(cohortpeople.team_id, 2), equals(cohortpeople.cohort_id, 2), equals(cohortpeople.version, 0)))), 0)), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_person_filtering_in_cohort_in_action.3 @@ -1610,29 +1913,51 @@ # --- # name: TestTrends.test_person_filtering_in_cohort_in_action_poe_v2.2 ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - 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)) 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'), 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')))), and(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'))), 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 - WHERE and(equals(cohortpeople.team_id, 2), equals(cohortpeople.cohort_id, 2), equals(cohortpeople.version, 0)))), 0)))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.uuid) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_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)) AS e__override ON equals(e.distinct_id, e__override.distinct_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'))), 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 + WHERE and(equals(cohortpeople.team_id, 2), equals(cohortpeople.cohort_id, 2), equals(cohortpeople.version, 0)))), 0)), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_person_filtering_in_cohort_in_action_poe_v2.3 @@ -2233,19 +2558,48 @@ # --- # name: TestTrends.test_timezones_daily.4 ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - FROM events AS e - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC')))), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT e__pdi.person_id) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_timezones_daily.5 @@ -2421,19 +2775,48 @@ # --- # name: TestTrends.test_timezones_daily_minus_utc.4 ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - FROM events AS e - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'America/Phoenix')))), lessOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'America/Phoenix')))), and(greaterOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'America/Phoenix')))), lessOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'America/Phoenix'))), equals(e.event, 'sign up'))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'America/Phoenix'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'America/Phoenix'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'America/Phoenix'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT e__pdi.person_id) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'America/Phoenix')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'America/Phoenix')))), lessOrEquals(toTimeZone(e.timestamp, 'America/Phoenix'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'America/Phoenix'))), equals(e.event, 'sign up'), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_timezones_daily_minus_utc.5 @@ -2609,19 +2992,48 @@ # --- # name: TestTrends.test_timezones_daily_plus_utc.4 ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - FROM events AS e - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'Asia/Tokyo')))), lessOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'Asia/Tokyo')))), and(greaterOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'Asia/Tokyo')))), lessOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'Asia/Tokyo'))), equals(e.event, 'sign up'))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'Asia/Tokyo'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'Asia/Tokyo'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'Asia/Tokyo'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT e__pdi.person_id) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'Asia/Tokyo')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$os'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-29 00:00:00', 6, 'Asia/Tokyo')))), lessOrEquals(toTimeZone(e.timestamp, 'Asia/Tokyo'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-05 23:59:59', 6, 'Asia/Tokyo'))), equals(e.event, 'sign up'), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_timezones_daily_plus_utc.5 @@ -2999,85 +3411,113 @@ # --- # name: TestTrends.test_trend_breakdown_user_props_with_filter_with_partial_property_pushdowns ''' - SELECT toString(e__pdi__person.properties___email) AS value, - count(e.uuid) AS count - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, - 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)) 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, '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), 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 and(equals(e.team_id, 2), and(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')))), and(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__pdi__person.properties___email, '%@posthog.com%'), 1), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', ''), 'val'), 0)), or(ifNull(equals(e__pdi__person.`properties___$os`, 'android'), 0), ifNull(equals(e__pdi__person.`properties___$browser`, 'safari'), 0))))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 - ''' -# --- -# name: TestTrends.test_trend_breakdown_user_props_with_filter_with_partial_property_pushdowns.1 - ''' - SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-07-01 23:59:59', 6, 'UTC'))))), 1))) AS date, - arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) - and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, - ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value FROM - (SELECT sum(total) AS count, - day_start AS day_start, - breakdown_value AS breakdown_value + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-07-01 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number FROM - (SELECT count(e.uuid) AS total, - toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, - transform(ifNull(nullIf(toString(e__pdi__person.properties___email), ''), '$$_posthog_breakdown_null_$$'), ['test2@posthog.com', 'test@gmail.com', 'test5@posthog.com', 'test4@posthog.com', 'test3@posthog.com'], ['test2@posthog.com', 'test@gmail.com', 'test5@posthog.com', 'test4@posthog.com', 'test3@posthog.com'], '$$_posthog_breakdown_other_$$') AS breakdown_value - FROM events AS e SAMPLE 1 - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, - 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)) 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, '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), 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 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__pdi__person.properties___email, '%@posthog.com%'), 1), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', ''), 'val'), 0)), or(ifNull(equals(e__pdi__person.`properties___$os`, 'android'), 0), ifNull(equals(e__pdi__person.`properties___$browser`, 'safari'), 0))), true) + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.uuid) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(e__pdi__person.properties___email), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + 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)) 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, '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), 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 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__pdi__person.properties___email, '%@posthog.com%'), 1), ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', ''), 'val'), 0)), or(ifNull(equals(e__pdi__person.`properties___$os`, 'android'), 0), ifNull(equals(e__pdi__person.`properties___$browser`, 'safari'), 0))), true) + GROUP BY day_start, + breakdown_value) GROUP BY day_start, - breakdown_value) - GROUP BY day_start, - breakdown_value - ORDER BY day_start ASC, breakdown_value ASC) + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) 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)), - arraySum(total) DESC, breakdown_value ASC + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 + ''' +# --- +# name: TestTrends.test_trend_breakdown_user_props_with_filter_with_partial_property_pushdowns.1 + ''' + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-07-01 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.uuid) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(e__pdi__person.properties___email), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + 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)) 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, '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), 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 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__pdi__person.`properties___$os`, 'android'), 0), ifNull(equals(e__pdi__person.`properties___$browser`, 'chrome'), 0)), and(ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'key'), ''), 'null'), '^"|"$', ''), 'val'), 0), ifNull(ilike(e__pdi__person.properties___email, '%@posthog.com%'), 0)), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(total) DESC, breakdown_value ASC LIMIT 50000 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, @@ -3249,81 +3689,52 @@ # --- # name: TestTrends.test_trends_aggregate_by_distinct_id.2 ''' - SELECT toString(e__pdi__person.`properties___$some_prop`) AS value, - count(e.uuid) AS count - FROM events AS e - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, - 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)) 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, '$some_prop'), ''), 'null'), '^"|"$', '') 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 and(equals(e.team_id, 2), and(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')))), and(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 value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 - ''' -# --- -# name: TestTrends.test_trends_aggregate_by_distinct_id.3 - ''' - SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))))), 1))) AS date, - arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) - and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, - ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value FROM - (SELECT sum(total) AS count, - day_start AS day_start, - breakdown_value AS breakdown_value + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number FROM - (SELECT count(DISTINCT e.distinct_id) AS total, - toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, - transform(ifNull(nullIf(toString(e__pdi__person.`properties___$some_prop`), ''), '$$_posthog_breakdown_null_$$'), ['some_val', '$$_posthog_breakdown_null_$$'], ['some_val', '$$_posthog_breakdown_null_$$'], '$$_posthog_breakdown_other_$$') AS breakdown_value - FROM events AS e SAMPLE 1 - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, - 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)) 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, '$some_prop'), ''), 'null'), '^"|"$', '') 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 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'), true) + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT e.distinct_id) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(e__pdi__person.`properties___$some_prop`), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + 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)) 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, '$some_prop'), ''), 'null'), '^"|"$', '') 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 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'), true) + GROUP BY day_start, + breakdown_value) GROUP BY day_start, - breakdown_value) - GROUP BY day_start, - breakdown_value - ORDER BY day_start ASC, breakdown_value ASC) + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) 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)), - arraySum(total) DESC, breakdown_value ASC + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC LIMIT 50000 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, @@ -3333,7 +3744,7 @@ max_query_size=524288 ''' # --- -# name: TestTrends.test_trends_aggregate_by_distinct_id.4 +# name: TestTrends.test_trends_aggregate_by_distinct_id.3 ''' SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))))), 1))) AS date, arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) @@ -3372,7 +3783,7 @@ max_query_size=524288 ''' # --- -# name: TestTrends.test_trends_aggregate_by_distinct_id.5 +# name: TestTrends.test_trends_aggregate_by_distinct_id.4 ''' SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))))), 1))) AS date, arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) @@ -3411,6 +3822,45 @@ max_query_size=524288 ''' # --- +# name: TestTrends.test_trends_aggregate_by_distinct_id.5 + ''' + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-24 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-31 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT e.distinct_id) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_prop'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + 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'), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 + ''' +# --- # name: TestTrends.test_trends_aggregate_by_distinct_id.6 ''' SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_prop'), ''), 'null'), '^"|"$', '')) AS value, @@ -3515,19 +3965,54 @@ # --- # name: TestTrends.test_trends_breakdown_cumulative ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - FROM events AS e - WHERE and(equals(e.team_id, 2), and(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')))), and(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 value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayFill(x -> ifNull(greater(x, 0), 0), arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date)) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT day_start AS day_start, + sum(count) OVER (PARTITION BY breakdown_value + ORDER BY day_start ASC) AS count, + breakdown_value AS breakdown_value + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT e__pdi.person_id) AS total, + min(toStartOfDay(toTimeZone(e.timestamp, 'UTC'))) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_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'), true) + GROUP BY e__pdi.person_id, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + ORDER BY day_start ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_trends_breakdown_cumulative.1 @@ -3578,19 +4063,54 @@ # --- # name: TestTrends.test_trends_breakdown_cumulative_poe_v2 ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - FROM events AS e - WHERE and(equals(e.team_id, 2), and(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')))), and(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 value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayFill(x -> ifNull(greater(x, 0), 0), arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date)) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT day_start AS day_start, + sum(count) OVER (PARTITION BY breakdown_value + ORDER BY day_start ASC) AS count, + breakdown_value AS breakdown_value + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + 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, + min(toStartOfDay(toTimeZone(e.timestamp, 'UTC'))) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_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)) AS e__override ON equals(e.distinct_id, e__override.distinct_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'), true) + GROUP BY if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + ORDER BY day_start ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_trends_breakdown_cumulative_poe_v2.1 @@ -3628,8 +4148,62 @@ ORDER BY day_start ASC, breakdown_value ASC) ORDER BY day_start ASC) 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)), - arraySum(total) DESC, breakdown_value ASC + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)), + arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 + ''' +# --- +# name: TestTrends.test_trends_breakdown_normalize_url + ''' + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayFill(x -> ifNull(greater(x, 0), 0), arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date)) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT day_start AS day_start, + sum(count) OVER (PARTITION BY breakdown_value + ORDER BY day_start ASC) AS count, + breakdown_value AS breakdown_value + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + 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, + min(toStartOfDay(toTimeZone(e.timestamp, 'UTC'))) AS day_start, + ifNull(nullIf(toString(if(empty(trim(TRAILING '/?#' + FROM replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', ''))), '/', trim(TRAILING '/?#' + FROM replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', '')))), ''), '$$_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)) AS e__override ON equals(e.distinct_id, e__override.distinct_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'), true) + GROUP BY if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id), + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + ORDER BY day_start ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(total) DESC, breakdown_value ASC LIMIT 50000 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, @@ -3639,25 +4213,6 @@ max_query_size=524288 ''' # --- -# name: TestTrends.test_trends_breakdown_normalize_url - ''' - SELECT toString(if(empty(trim(TRAILING '/?#' - FROM replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', ''))), '/', trim(TRAILING '/?#' - FROM replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$current_url'), ''), 'null'), '^"|"$', '')))) AS value, - count(e.uuid) AS count - FROM events AS e - WHERE and(equals(e.team_id, 2), and(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')))), and(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 value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 - ''' -# --- # name: TestTrends.test_trends_breakdown_normalize_url.1 ''' SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, @@ -3708,26 +4263,31 @@ # --- # name: TestTrends.test_trends_breakdown_with_session_property_single_aggregate_math_and_breakdown ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')) AS value, - max(e__session.`$session_duration`) AS count - FROM events AS e - LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, - sessions.session_id AS session_id - FROM sessions - WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) - GROUP BY sessions.session_id, - sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_id) - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC')))), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT quantile(0.5)(session_duration) AS total, + breakdown_value AS breakdown_value + FROM + (SELECT any(e__session.`$session_duration`) AS session_duration, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + LEFT JOIN + (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + sessions.session_id AS session_id + FROM sessions + WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) + GROUP BY sessions.session_id, + sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) + GROUP BY e.`$session_id`, + breakdown_value + ORDER BY 1 DESC, breakdown_value DESC) + GROUP BY breakdown_value + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_trends_breakdown_with_session_property_single_aggregate_math_and_breakdown.1 @@ -3736,18 +4296,19 @@ breakdown_value AS breakdown_value FROM (SELECT any(e__session.`$session_duration`) AS session_duration, - transform(ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$'), ['value2', 'value1', '$$_posthog_breakdown_null_$$'], ['value2', 'value1', '$$_posthog_breakdown_null_$$'], '$$_posthog_breakdown_other_$$') AS breakdown_value + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value FROM events AS e SAMPLE 1 LEFT JOIN (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, sessions.session_id AS session_id FROM sessions - WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) + WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) GROUP BY sessions.session_id, sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) + 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'), true) GROUP BY e.`$session_id`, - breakdown_value) + breakdown_value + ORDER BY 1 DESC, breakdown_value DESC) GROUP BY breakdown_value LIMIT 50000 SETTINGS readonly=2, max_execution_time=60, @@ -3942,19 +4503,33 @@ # --- # name: TestTrends.test_trends_count_per_user_average_aggregated_with_event_property_breakdown_with_sampling ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'color'), ''), 'null'), '^"|"$', '')) AS value, - count(e.uuid) AS count - FROM events AS e - WHERE and(equals(e.team_id, 2), and(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')))), equals(e.event, 'viewed video')) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT total AS total, + breakdown_value AS breakdown_value + FROM + (SELECT avg(total) AS total, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.uuid) AS total, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, 'color'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1.0 + INNER 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)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) + WHERE and(equals(e.team_id, 2), and(equals(e.event, 'viewed video'), true), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(0))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC')))) + GROUP BY e__pdi.person_id, + breakdown_value) + GROUP BY breakdown_value) + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_trends_count_per_user_average_aggregated_with_event_property_breakdown_with_sampling.1 @@ -4198,44 +4773,49 @@ # --- # name: TestTrends.test_trends_person_breakdown_with_session_property_single_aggregate_math_and_breakdown ''' - SELECT toString(e__pdi__person.`properties___$some_prop`) AS value, - max(e__session.`$session_duration`) AS count - FROM events AS e - LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, - sessions.session_id AS session_id - FROM sessions - WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) - GROUP BY sessions.session_id, - sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_id) - INNER JOIN - (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, - 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)) 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, '$some_prop'), ''), 'null'), '^"|"$', '') 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC')))), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT quantile(0.5)(session_duration) AS total, + breakdown_value AS breakdown_value + FROM + (SELECT any(e__session.`$session_duration`) AS session_duration, + ifNull(nullIf(toString(e__pdi__person.`properties___$some_prop`), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1 + LEFT JOIN + (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + sessions.session_id AS session_id + FROM sessions + WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) + GROUP BY sessions.session_id, + sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_id) + INNER JOIN + (SELECT argMax(person_distinct_id2.person_id, person_distinct_id2.version) AS e__pdi___person_id, + 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)) 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, '$some_prop'), ''), 'null'), '^"|"$', '') 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(person.created_at, person.version), plus(now64(6, 'UTC'), 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 and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) + GROUP BY e.`$session_id`, + breakdown_value + ORDER BY 1 DESC, breakdown_value DESC) + GROUP BY breakdown_value + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_trends_person_breakdown_with_session_property_single_aggregate_math_and_breakdown.1 @@ -4324,7 +4904,8 @@ GROUP BY sessions.session_id, sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 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`) + GROUP BY e.`$session_id` + ORDER BY 1 DESC) LIMIT 50000 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, @@ -4348,7 +4929,8 @@ GROUP BY sessions.session_id, sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_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`) + GROUP BY e.`$session_id` + ORDER BY 1 DESC) LIMIT 50000 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, @@ -4438,67 +5020,103 @@ # --- # name: TestTrends.test_trends_with_session_property_total_volume_math_with_breakdowns ''' - SELECT toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')) AS value, - max(e__session.`$session_duration`) AS count - FROM events AS e - LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, - sessions.session_id AS session_id - FROM sessions - WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) - GROUP BY sessions.session_id, - sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_id) - WHERE and(equals(e.team_id, 2), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC')))), and(greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0), toIntervalWeek(number)), range(0, plus(coalesce(dateDiff('week', toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC')), 0))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT quantile(0.5)(session_duration) AS total, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT any(e__session.`$session_duration`) AS session_duration, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value, + toStartOfWeek(toTimeZone(e.timestamp, 'UTC'), 0) AS day_start + FROM events AS e SAMPLE 1 + LEFT JOIN + (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + sessions.session_id AS session_id + FROM sessions + WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) + GROUP BY sessions.session_id, + sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) + GROUP BY day_start, + e.`$session_id`, + breakdown_value, + day_start) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(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=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrends.test_trends_with_session_property_total_volume_math_with_breakdowns.1 ''' - SELECT arrayMap(number -> plus(toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0), toIntervalWeek(number)), range(0, plus(coalesce(dateDiff('week', toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC')), 0))), 1))) AS date, - arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) - and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, - ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value FROM - (SELECT sum(total) AS count, - day_start AS day_start, - breakdown_value AS breakdown_value + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number FROM - (SELECT quantile(0.5)(session_duration) AS total, + (SELECT sum(total) AS count, day_start AS day_start, breakdown_value AS breakdown_value FROM - (SELECT any(e__session.`$session_duration`) AS session_duration, - transform(ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$'), ['value2', 'value1'], ['value2', 'value1'], '$$_posthog_breakdown_other_$$') AS breakdown_value, - toStartOfWeek(toTimeZone(e.timestamp, 'UTC'), 0) AS day_start - FROM events AS e SAMPLE 1 - LEFT JOIN - (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, - sessions.session_id AS session_id - FROM sessions - WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) - GROUP BY sessions.session_id, - sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_id) - WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up'), true) + (SELECT quantile(0.5)(session_duration) AS total, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT any(e__session.`$session_duration`) AS session_duration, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start + FROM events AS e SAMPLE 1 + LEFT JOIN + (SELECT dateDiff('second', min(sessions.min_timestamp), max(sessions.max_timestamp)) AS `$session_duration`, + sessions.session_id AS session_id + FROM sessions + WHERE and(equals(sessions.team_id, 2), ifNull(greaterOrEquals(plus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(minus(toTimeZone(sessions.min_timestamp, 'UTC'), toIntervalDay(3)), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), 0)) + GROUP BY sessions.session_id, + sessions.session_id) AS e__session ON equals(e.`$session_id`, e__session.session_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'), true) + GROUP BY day_start, + e.`$session_id`, + breakdown_value, + day_start) GROUP BY day_start, - e.`$session_id`, - breakdown_value, - day_start) + breakdown_value) GROUP BY day_start, - breakdown_value) - GROUP BY day_start, - breakdown_value - ORDER BY day_start ASC, breakdown_value ASC) + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) 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)), - arraySum(total) DESC, breakdown_value ASC + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC LIMIT 50000 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, diff --git a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_data_warehouse_query.ambr b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_data_warehouse_query.ambr index 916b036f00e17..5b65891935f0c 100644 --- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_data_warehouse_query.ambr +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends_data_warehouse_query.ambr @@ -1,19 +1,41 @@ # serializer version: 1 # name: TestTrendsDataWarehouseQuery.test_trends_breakdown ''' - SELECT toString(e.prop_1) AS value, - count(e.id) AS count - FROM s3('http://host.docker.internal:19000/posthog/test_storage_bucket-posthog.hogql.datawarehouse.trendquery/*.parquet', 'object_storage_root_user', 'object_storage_root_password', 'Parquet', '`id` String, `prop_1` String, `prop_2` String, `created` DateTime64(3, \'UTC\')') AS e - WHERE and(and(ifNull(greaterOrEquals(toTimeZone(e.created, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-01 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(toTimeZone(e.created, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-07 23:59:59', 6, 'UTC'))), 0)), and(ifNull(greaterOrEquals(toTimeZone(e.created, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-01 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(toTimeZone(e.created, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-07 23:59:59', 6, 'UTC'))), 0))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-01 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-07 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.id) AS total, + toStartOfDay(toTimeZone(e.created, 'UTC')) AS day_start, + ifNull(nullIf(toString(e.prop_1), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM s3('http://host.docker.internal:19000/posthog/test_storage_bucket-posthog.hogql.datawarehouse.trendquery/*.parquet', 'object_storage_root_user', 'object_storage_root_password', 'Parquet', '`id` String, `prop_1` String, `prop_2` String, `created` DateTime64(3, \'UTC\')') AS e + WHERE and(ifNull(greaterOrEquals(toTimeZone(e.created, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-01 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(toTimeZone(e.created, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-07 23:59:59', 6, 'UTC'))), 0), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(total) DESC, breakdown_value ASC + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrendsDataWarehouseQuery.test_trends_breakdown.1 @@ -51,19 +73,41 @@ # --- # name: TestTrendsDataWarehouseQuery.test_trends_breakdown_with_property ''' - SELECT toString(e.prop_1) AS value, - count(e.id) AS count - FROM s3('http://host.docker.internal:19000/posthog/test_storage_bucket-posthog.hogql.datawarehouse.trendquery/*.parquet', 'object_storage_root_user', 'object_storage_root_password', 'Parquet', '`id` String, `prop_1` String, `prop_2` String, `created` DateTime64(3, \'UTC\')') AS e - WHERE and(and(ifNull(greaterOrEquals(toTimeZone(e.created, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-01 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(toTimeZone(e.created, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-07 23:59:59', 6, 'UTC'))), 0)), and(ifNull(greaterOrEquals(toTimeZone(e.created, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-01 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(toTimeZone(e.created, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-07 23:59:59', 6, 'UTC'))), 0), equals(e.prop_1, 'a'))) - GROUP BY value - ORDER BY count DESC, value DESC - LIMIT 26 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1, - format_csv_allow_double_quotes=0, - max_ast_elements=1000000, - max_expanded_ast_elements=1000000, - max_query_size=524288 + SELECT groupArray(1)(date)[1] AS date, + arrayMap(i -> arraySum(arrayMap(x -> arrayElement(x, i), groupArray(total))), arrayEnumerate(date)) AS total, + if(ifNull(greaterOrEquals(row_number, 25), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-01 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-01 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-07 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + ifNull(toString(breakdown_value), '$$_posthog_breakdown_null_$$') AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(e.id) AS total, + toStartOfDay(toTimeZone(e.created, 'UTC')) AS day_start, + ifNull(nullIf(toString(e.prop_1), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM s3('http://host.docker.internal:19000/posthog/test_storage_bucket-posthog.hogql.datawarehouse.trendquery/*.parquet', 'object_storage_root_user', 'object_storage_root_password', 'Parquet', '`id` String, `prop_1` String, `prop_2` String, `created` DateTime64(3, \'UTC\')') AS e + WHERE and(ifNull(greaterOrEquals(toTimeZone(e.created, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-01 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(toTimeZone(e.created, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2023-01-07 23:59:59', 6, 'UTC'))), 0), equals(e.prop_1, 'a'), true) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY arraySum(total) DESC, breakdown_value ASC) + 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, arraySum(total) DESC, breakdown_value ASC + LIMIT 100 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=1000000, + max_expanded_ast_elements=1000000, + max_query_size=524288 ''' # --- # name: TestTrendsDataWarehouseQuery.test_trends_breakdown_with_property.1 diff --git a/posthog/hogql_queries/insights/trends/test/test_trends.py b/posthog/hogql_queries/insights/trends/test/test_trends.py index 26a1b7f1a6d4f..c3838fa8fd63c 100644 --- a/posthog/hogql_queries/insights/trends/test/test_trends.py +++ b/posthog/hogql_queries/insights/trends/test/test_trends.py @@ -1117,11 +1117,7 @@ def test_unique_session_with_session_breakdown(self): self.assertEqual( [(item["breakdown_value"], item["count"], item["data"]) for item in response], - [ - ("[4.95,10.05]", 2.0, [2, 0, 0, 0]), - ("[0.0,4.95]", 1.0, [1, 0, 0, 0]), - ("[10.05,15.01]", 1.0, [0, 1, 0, 0]), - ], + [("[10,15.01]", 2.0, [1, 1, 0, 0]), ("[0,5]", 1.0, [1, 0, 0, 0]), ("[5,10]", 1.0, [1, 0, 0, 0])], ) @also_test_with_person_on_events_v2 @@ -6503,9 +6499,9 @@ def test_breakdown_filtering_bar_chart_by_value(self): self.team, ) - self.assertEqual(response[0]["aggregated_value"], 1) + self.assertEqual(response[0]["aggregated_value"], 2) self.assertEqual(response[1]["aggregated_value"], 1) - self.assertEqual(response[2]["aggregated_value"], 2) # the events without breakdown value + self.assertEqual(response[2]["aggregated_value"], 1) # the events without breakdown value self.assertEqual(response[0]["days"], []) @also_test_with_materialized_columns(person_properties=["key", "key_2"], verify_no_jsonextract=False) diff --git a/posthog/hogql_queries/insights/trends/test/test_trends_persons.py b/posthog/hogql_queries/insights/trends/test/test_trends_persons.py index 1751c7482dd40..ff1991ff537d8 100644 --- a/posthog/hogql_queries/insights/trends/test/test_trends_persons.py +++ b/posthog/hogql_queries/insights/trends/test/test_trends_persons.py @@ -343,7 +343,6 @@ def test_trends_breakdown_hogql_persons(self): ) result = self._get_actors(trends_query=source_query, day="2023-05-01", breakdown=20) - self.assertEqual(len(result), 1) self.assertEqual(get_distinct_id(result[0]), "person1") self.assertEqual(get_event_count(result[0]), 1) diff --git a/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py b/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py index c87d55643d771..aeadb90d1b199 100644 --- a/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py +++ b/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py @@ -9,8 +9,7 @@ from posthog.hogql import ast from posthog.hogql.constants import MAX_SELECT_RETURNED_ROWS, LimitContext from posthog.hogql.modifiers import create_default_modifiers_for_team -from posthog.hogql_queries.insights.trends.breakdown_values import BREAKDOWN_OTHER_DISPLAY -from posthog.hogql_queries.insights.trends.trends_query_runner import TrendsQueryRunner +from posthog.hogql_queries.insights.trends.trends_query_runner import TrendsQueryRunner, BREAKDOWN_OTHER_DISPLAY from posthog.models.cohort.cohort import Cohort from posthog.models.property_definition import PropertyDefinition @@ -811,7 +810,7 @@ def test_breakdown_is_context_aware(self, mock_sync_execute: MagicMock): limit_context=LimitContext.QUERY_ASYNC, ) - self.assertEqual(mock_sync_execute.call_count, 4) + self.assertEqual(mock_sync_execute.call_count, 2) for mock_execute_call_args in mock_sync_execute.call_args_list: self.assertIn(f" max_execution_time={HOGQL_INCREASED_MAX_EXECUTION_TIME},", mock_execute_call_args[0][0]) @@ -981,11 +980,11 @@ def test_trends_breakdowns_histogram(self): breakdown_labels = [result["breakdown_value"] for result in response.results] assert len(response.results) == 4 - assert breakdown_labels == ["[10.0,17.5]", "[17.5,25.0]", "[25.0,32.5]", "[32.5,40.01]"] + assert breakdown_labels == ["[10,17.5]", "[17.5,25]", "[25,32.5]", "[32.5,40.01]"] - assert response.results[0]["label"] == "[10.0,17.5]" - assert response.results[1]["label"] == "[17.5,25.0]" - assert response.results[2]["label"] == "[25.0,32.5]" + assert response.results[0]["label"] == "[10,17.5]" + assert response.results[1]["label"] == "[17.5,25]" + assert response.results[2]["label"] == "[25,32.5]" assert response.results[3]["label"] == "[32.5,40.01]" assert response.results[0]["data"] == [0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0] @@ -1992,10 +1991,10 @@ def test_to_actors_query_options_breakdowns(self): assert response.day is not None assert response.series == [InsightActorsQuerySeries(label="$pageview", value=0)] assert response.breakdown == [ - BreakdownItem(label=BREAKDOWN_OTHER_DISPLAY, value="$$_posthog_breakdown_other_$$"), BreakdownItem(label="Chrome", value="Chrome"), BreakdownItem(label="Firefox", value="Firefox"), - BreakdownItem(label="Safari", value="Safari"), + BreakdownItem(label="Edge", value="Edge"), + BreakdownItem(label=BREAKDOWN_OTHER_DISPLAY, value="$$_posthog_breakdown_other_$$"), ] def test_to_actors_query_options_breakdowns_boolean(self): @@ -2042,9 +2041,9 @@ def test_to_actors_query_options_breakdowns_histogram(self): assert response.series == [InsightActorsQuerySeries(label="$pageview", value=0)] assert response.breakdown == [ - BreakdownItem(label="[10.0,17.5]", value="[10.0,17.5]"), - BreakdownItem(label="[17.5,25.0]", value="[17.5,25.0]"), - BreakdownItem(label="[25.0,32.5]", value="[25.0,32.5]"), + BreakdownItem(label="[10,17.5]", value="[10,17.5]"), + BreakdownItem(label="[17.5,25]", value="[17.5,25]"), + BreakdownItem(label="[25,32.5]", value="[25,32.5]"), BreakdownItem(label="[32.5,40.01]", value="[32.5,40.01]"), BreakdownItem(label='["",""]', value='["",""]'), ] @@ -2105,8 +2104,8 @@ def test_to_actors_query_options_breakdowns_hogql(self): assert response.breakdown == [ BreakdownItem(label="Chrome", value="Chrome"), BreakdownItem(label="Firefox", value="Firefox"), - BreakdownItem(label="Safari", value="Safari"), BreakdownItem(label="Edge", value="Edge"), + BreakdownItem(label="Safari", value="Safari"), ] def test_to_actors_query_options_bar_value(self): diff --git a/posthog/hogql_queries/insights/trends/trends_actors_query_builder.py b/posthog/hogql_queries/insights/trends/trends_actors_query_builder.py index 2d404f0a8c092..bf55a3eb82489 100644 --- a/posthog/hogql_queries/insights/trends/trends_actors_query_builder.py +++ b/posthog/hogql_queries/insights/trends/trends_actors_query_builder.py @@ -384,12 +384,11 @@ def _breakdown_where_expr(self) -> list[ast.Expr]: timings=self.timings, modifiers=self.modifiers, events_filter=self._events_where_expr(with_breakdown_expr=False), - breakdown_values_override=[self.breakdown_value] if self.breakdown_value is not None else None, limit_context=self.limit_context, ) if breakdown.enabled and not breakdown.is_histogram_breakdown: - breakdown_filter = breakdown.events_where_filter() + breakdown_filter = breakdown.events_where_filter(breakdown_values_override=self.breakdown_value) if breakdown_filter is not None: conditions.append(breakdown_filter) diff --git a/posthog/hogql_queries/insights/trends/trends_query_builder.py b/posthog/hogql_queries/insights/trends/trends_query_builder.py index 015e269e5628e..75418ffba2a3e 100644 --- a/posthog/hogql_queries/insights/trends/trends_query_builder.py +++ b/posthog/hogql_queries/insights/trends/trends_query_builder.py @@ -8,13 +8,13 @@ from posthog.hogql_queries.insights.trends.aggregation_operations import ( AggregationOperations, ) -from posthog.hogql_queries.insights.trends.breakdown import Breakdown -from posthog.hogql_queries.insights.trends.breakdown_values import BREAKDOWN_OTHER_STRING_LABEL +from posthog.hogql_queries.insights.trends.breakdown import Breakdown, BREAKDOWN_OTHER_STRING_LABEL from posthog.hogql_queries.insights.trends.display import TrendsDisplay from posthog.hogql_queries.insights.trends.utils import series_event_name from posthog.hogql_queries.utils.query_date_range import QueryDateRange from posthog.models.action.action import Action from posthog.models.filters.mixins.utils import cached_property +from posthog.hogql.constants import get_breakdown_limit_for_context from posthog.models.team.team import Team from posthog.queries.trends.breakdown import BREAKDOWN_NULL_STRING_LABEL from posthog.schema import ( @@ -98,14 +98,12 @@ def _get_events_subquery( no_modifications: Optional[bool], is_actors_query: bool, breakdown: Breakdown, - breakdown_values_override: Optional[str | int] = None, actors_query_time_frame: Optional[str] = None, ) -> ast.SelectQuery: events_filter = self._events_filter( ignore_breakdowns=False, breakdown=breakdown, is_actors_query=is_actors_query, - breakdown_values_override=breakdown_values_override, actors_query_time_frame=actors_query_time_frame, ) @@ -132,7 +130,13 @@ def _get_events_subquery( ), ) - if not self._trends_display.is_total_value(): # TODO: remove: and not is_actors_query + # If it's total value, we should order the results as there's no outer query to do the ordering + if self._trends_display.is_total_value(): + default_query.order_by = [ast.OrderExpr(expr=parse_expr("1"), order="DESC")] + if breakdown.enabled: + default_query.order_by.append(ast.OrderExpr(expr=ast.Field(chain=["breakdown_value"]), order="DESC")) + + else: # For cumulative unique users or groups, we want to count each user or group once per query, not per day if ( self.query.trendsFilter @@ -197,12 +201,15 @@ def _get_events_subquery( wrapper.group_by.append(ast.Field(chain=["day_start"])) wrapper.select.append(ast.Field(chain=["breakdown_value"])) - wrapper.group_by.append(ast.Field(chain=["breakdown_value"])) + if not breakdown.is_histogram_breakdown: + wrapper.group_by.append(ast.Field(chain=["breakdown_value"])) return wrapper + # Just breakdowns elif breakdown.enabled: breakdown_expr = breakdown.column_expr() + default_query.select.append(breakdown_expr) default_query.group_by.append(ast.Field(chain=["breakdown_value"])) # Just session duration math property @@ -236,7 +243,9 @@ def _get_events_subquery( return default_query - def _outer_select_query(self, breakdown: Breakdown, inner_query: ast.SelectQuery) -> ast.SelectQuery: + def _outer_select_query( + self, breakdown: Breakdown, inner_query: ast.SelectQuery + ) -> ast.SelectQuery | ast.SelectUnionQuery: total_array = parse_expr( """ arrayMap( @@ -322,24 +331,47 @@ def _outer_select_query(self, breakdown: Breakdown, inner_query: ast.SelectQuery ), ) ) + query.select.append(ast.Alias(alias="row_number", expr=parse_expr("rowNumberInAllBlocks()"))) query.group_by = [ast.Field(chain=["breakdown_value"])] - query.order_by.insert( - 0, - cast( - ast.OrderExpr, - parse_expr( - "breakdown_value = {other} ? 2 : breakdown_value = {nil} ? 1 : 0", - placeholders={ - "other": ast.Constant(value=BREAKDOWN_OTHER_STRING_LABEL), - "nil": ast.Constant(value=BREAKDOWN_NULL_STRING_LABEL), - }, - ), - ), - ) + query.order_by.append(ast.OrderExpr(expr=ast.Field(chain=["breakdown_value"]), order="ASC")) + # TODO: What happens with cohorts and this limit? + if not breakdown.is_histogram_breakdown: + return parse_select( + """ + SELECT + groupArray(1)(date)[1] as date, + arrayMap( + i -> + arraySum(arrayMap( + x -> arrayElement(x, i), + groupArray(total) + )), + arrayEnumerate(date) + ) as total, + if(row_number >= {breakdown_limit}, {other}, breakdown_value) as breakdown_value + FROM {outer_query} + GROUP BY breakdown_value + ORDER BY + breakdown_value = {other} ? 2 : breakdown_value = {nil} ? 1 : 0, + arraySum(total) DESC, + breakdown_value ASC + """, + { + "outer_query": query, + "breakdown_limit": ast.Constant(value=self._get_breakdown_limit()), + "other": ast.Constant(value=BREAKDOWN_OTHER_STRING_LABEL), + "nil": ast.Constant(value=BREAKDOWN_NULL_STRING_LABEL), + }, + ) return query + def _get_breakdown_limit(self) -> int: + return ( + self.query.breakdownFilter and self.query.breakdownFilter.breakdown_limit + ) or get_breakdown_limit_for_context(self.limit_context) + def _inner_select_query( self, breakdown: Breakdown, inner_query: ast.SelectQuery | ast.SelectUnionQuery ) -> ast.SelectQuery: @@ -364,7 +396,47 @@ def _inner_select_query( query.order_by.append(ast.OrderExpr(expr=ast.Field(chain=["day_start"]), order="ASC")) if breakdown.enabled: - query.select.append(ast.Field(chain=["breakdown_value"])) + if breakdown.is_histogram_breakdown: + histogram_bin_count = ( + self.query.breakdownFilter.breakdown_histogram_bin_count if self.query.breakdownFilter else None + ) + query.ctes = { + "min_max": ast.CTE( + name="min_max", + expr=self._get_events_subquery( + no_modifications=False, is_actors_query=False, breakdown=breakdown + ), + cte_type="subquery", + ) + } + query.select.extend( + [ + # Using arrays would be more efficient here, _but_ only if there's low cardinality in breakdown_values + # If cardinality is high it'd blow up memory + # Clickhouse is reasonably clever not rereading the same data + parse_expr("(select max(breakdown_value) from min_max) as max_num"), + parse_expr("(select min(breakdown_value) from min_max) as min_num"), + parse_expr("max_num - min_num as diff"), + parse_expr(f"{histogram_bin_count} as bins"), + parse_expr(""" + arrayMap( + x -> [ + ((diff / bins) * x) + min_num, + ((diff / bins) * (x + 1)) + min_num + if(x + 1 = bins, 0.01, 0) + ], + range(bins) + ) as buckets + """), + parse_expr("""arrayFilter( + x -> + x[1] <= breakdown_value and breakdown_value < x[2], + buckets + )[1] as breakdown_value + """), + ] + ) + else: + query.select.append(ast.Field(chain=["breakdown_value"])) query.group_by.append(ast.Field(chain=["breakdown_value"])) query.order_by.append(ast.OrderExpr(expr=ast.Field(chain=["breakdown_value"]), order="ASC")) @@ -380,7 +452,6 @@ def _events_filter( is_actors_query: bool, breakdown: Breakdown | None, ignore_breakdowns: bool = False, - breakdown_values_override: Optional[str | int] = None, actors_query_time_frame: Optional[str] = None, ) -> ast.Expr: series = self.series @@ -479,7 +550,7 @@ def session_duration_math_property_wrapper(self, default_query: ast.SelectQuery) query.group_by = [] return query - def _breakdown(self, is_actors_query: bool, breakdown_values_override: Optional[str] = None): + def _breakdown(self, is_actors_query: bool): return Breakdown( team=self.team, query=self.query, @@ -491,9 +562,7 @@ def _breakdown(self, is_actors_query: bool, breakdown_values_override: Optional[ breakdown=None, # Passing in None because we know we dont actually need it ignore_breakdowns=True, is_actors_query=is_actors_query, - breakdown_values_override=breakdown_values_override, ), - breakdown_values_override=[breakdown_values_override] if breakdown_values_override is not None else None, limit_context=self.limit_context, ) diff --git a/posthog/hogql_queries/insights/trends/trends_query_runner.py b/posthog/hogql_queries/insights/trends/trends_query_runner.py index 50d7db4160255..4717e0a3e4943 100644 --- a/posthog/hogql_queries/insights/trends/trends_query_runner.py +++ b/posthog/hogql_queries/insights/trends/trends_query_runner.py @@ -22,13 +22,13 @@ from posthog.hogql.printer import to_printed_hogql from posthog.hogql.query import execute_hogql_query from posthog.hogql.timings import HogQLTimings -from posthog.hogql_queries.insights.trends.breakdown_values import ( +from posthog.hogql_queries.insights.trends.display import TrendsDisplay +from posthog.hogql_queries.insights.trends.breakdown import ( BREAKDOWN_NULL_DISPLAY, BREAKDOWN_NULL_STRING_LABEL, BREAKDOWN_OTHER_DISPLAY, BREAKDOWN_OTHER_STRING_LABEL, ) -from posthog.hogql_queries.insights.trends.display import TrendsDisplay from posthog.hogql_queries.insights.trends.trends_query_builder import TrendsQueryBuilder from posthog.hogql_queries.insights.trends.trends_actors_query_builder import TrendsActorsQueryBuilder from posthog.hogql_queries.insights.trends.series_with_extras import SeriesWithExtras @@ -215,60 +215,65 @@ def to_actors_query_options(self) -> InsightActorsQueryOptionsResponse: ] # Breakdowns - for series in self.query.series: - # TODO: Add support for DataWarehouseNode - if isinstance(series, DataWarehouseNode): - continue + if self.query.breakdownFilter is not None: + res_breakdown = [] + if self.query.breakdownFilter.breakdown_type == "cohort": + assert isinstance(self.query.breakdownFilter.breakdown, list) + for value in self.query.breakdownFilter.breakdown: + if value != "all" and str(value) != "0": + res_breakdown.append( + BreakdownItem(label=Cohort.objects.get(pk=int(value), team=self.team).name, value=value) + ) + else: + res_breakdown.append(BreakdownItem(label="all users", value="all")) + else: + # TODO: Work out if we will have issues only getting breakdown values for + # the "current" period and not "previous" period for when "compare" is turned on + query_date_range = self.query_date_range - # TODO: Work out if we will have issues only getting breakdown values for - # the "current" period and not "previous" period for when "compare" is turned on - query_date_range = self.query_date_range + query_builder = TrendsQueryBuilder( + trends_query=self.query, + team=self.team, + query_date_range=query_date_range, + series=series, + timings=self.timings, + modifiers=self.modifiers, + limit_context=self.limit_context, + ) - query_builder = TrendsQueryBuilder( - trends_query=self.query, - team=self.team, - query_date_range=query_date_range, - series=series, - timings=self.timings, - modifiers=self.modifiers, - limit_context=self.limit_context, - ) + query = query_builder.build_query() - breakdown = query_builder._breakdown(is_actors_query=False) - if not breakdown.enabled: - break + breakdown = query_builder._breakdown(is_actors_query=False) - is_boolean_breakdown = self._is_breakdown_field_boolean() - is_histogram_breakdown = breakdown.is_histogram_breakdown - breakdown_values: list[str | int] - res_breakdown = [] + results = execute_hogql_query( + query_type="TrendsActorsQueryOptions", + query=query, + team=self.team, + # timings=timings, + # modifiers=modifiers, + ) + breakdown_values = [ + row[results.columns.index("breakdown_value") if results.columns else 2] for row in results.results + ] - if is_histogram_breakdown: - buckets = breakdown._get_breakdown_histogram_buckets() - breakdown_values = [f"[{t[0]},{t[1]}]" for t in buckets] - # TODO: append this only if needed - breakdown_values.append('["",""]') - else: - breakdown_values = breakdown._breakdown_values - - for value in breakdown_values: - if self.query.breakdownFilter is not None and self.query.breakdownFilter.breakdown_type == "cohort": - is_all = value == "all" or str(value) == "0" - label = "all users" if is_all else Cohort.objects.get(pk=value).name - value = "all" if is_all else value - elif value == BREAKDOWN_OTHER_STRING_LABEL: - label = BREAKDOWN_OTHER_DISPLAY - elif value == BREAKDOWN_NULL_STRING_LABEL: - label = BREAKDOWN_NULL_DISPLAY - elif is_boolean_breakdown: - label = self._convert_boolean(value) - else: - label = str(value) + if breakdown.is_histogram_breakdown: + breakdown_values.append('["",""]') + is_boolean_breakdown = self._is_breakdown_field_boolean() + + for value in breakdown_values: + if value == BREAKDOWN_OTHER_STRING_LABEL: + label = BREAKDOWN_OTHER_DISPLAY + elif value == BREAKDOWN_NULL_STRING_LABEL: + label = BREAKDOWN_NULL_DISPLAY + elif is_boolean_breakdown: + label = self._convert_boolean(value) + else: + label = str(value) - item = BreakdownItem(label=label, value=value) + item = BreakdownItem(label=label, value=value) - if item not in res_breakdown: - res_breakdown.append(item) + if item not in res_breakdown: + res_breakdown.append(item) return InsightActorsQueryOptionsResponse( series=res_series, breakdown=res_breakdown, day=res_days, compare=res_compare diff --git a/posthog/queries/trends/breakdown.py b/posthog/queries/trends/breakdown.py index e0bab69fe666d..663ccd42ccff6 100644 --- a/posthog/queries/trends/breakdown.py +++ b/posthog/queries/trends/breakdown.py @@ -18,7 +18,6 @@ PropertyOperatorType, TREND_FILTER_TYPE_EVENTS, ) -from posthog.hogql_queries.insights.trends.breakdown_values import BREAKDOWN_NULL_DISPLAY, BREAKDOWN_OTHER_DISPLAY from posthog.models.action.util import format_action_filter from posthog.models.entity import Entity from posthog.models.event.sql import EVENT_JOIN_PERSON_SQL @@ -82,6 +81,10 @@ from posthog.utils import encode_get_request_params, generate_short_id from posthog.queries.person_on_events_v2_sql import PERSON_DISTINCT_ID_OVERRIDES_JOIN_SQL +BREAKDOWN_OTHER_DISPLAY = "Other (i.e. all remaining values)" +BREAKDOWN_NULL_DISPLAY = "None (i.e. no value)" + + BREAKDOWN_OTHER_STRING_LABEL = "$$_posthog_breakdown_other_$$" BREAKDOWN_OTHER_NUMERIC_LABEL = 9007199254740991 # pow(2, 53) - 1, for JS compatibility BREAKDOWN_NULL_STRING_LABEL = "$$_posthog_breakdown_null_$$" diff --git a/posthog/queries/trends/test/test_paging_breakdowns.py b/posthog/queries/trends/test/test_paging_breakdowns.py index 47ea447005c1a..b7bee93f31dc6 100644 --- a/posthog/queries/trends/test/test_paging_breakdowns.py +++ b/posthog/queries/trends/test/test_paging_breakdowns.py @@ -2,12 +2,13 @@ from freezegun import freeze_time -from posthog.hogql_queries.insights.trends.breakdown_values import BREAKDOWN_OTHER_DISPLAY from posthog.models import Filter from posthog.queries.trends.trends import Trends from posthog.test.base import APIBaseTest from posthog.test.test_journeys import journeys_for +BREAKDOWN_OTHER_DISPLAY = "Other (i.e. all remaining values)" + class TestPagingBreakdowns(APIBaseTest): """ From 756b7f80edbd5ddb061eec492866f4933b6748eb Mon Sep 17 00:00:00 2001 From: Juraj Majerik Date: Fri, 14 Jun 2024 13:20:32 +0200 Subject: [PATCH 08/18] feat(surveys branching): add UI to define response-based branching (#22935) --- ...funnel-historical-trends-insight--dark.png | Bin 14543 -> 12643 bytes ...unnel-historical-trends-insight--light.png | Bin 14301 -> 12357 bytes .../scenes/surveys/QuestionBranchingInput.tsx | 132 +++++- .../scenes/surveys/SurveyEditQuestionRow.tsx | 19 +- .../src/scenes/surveys/surveyLogic.test.ts | 440 +++++++++++++++++- frontend/src/scenes/surveys/surveyLogic.tsx | 122 ++++- frontend/src/types.ts | 7 +- 7 files changed, 683 insertions(+), 37 deletions(-) diff --git a/frontend/__snapshots__/exporter-exporter--funnel-historical-trends-insight--dark.png b/frontend/__snapshots__/exporter-exporter--funnel-historical-trends-insight--dark.png index f427261f0c8010f06b2182d23f21ea35f32b3b67..a820c399ecbf23f0a477f1d6c54d82101a2b8272 100644 GIT binary patch literal 12643 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 F{{zP_KF9z7 diff --git a/frontend/__snapshots__/exporter-exporter--funnel-historical-trends-insight--light.png b/frontend/__snapshots__/exporter-exporter--funnel-historical-trends-insight--light.png index fa79b1b313e1daf2ac05ee5cadcd1a1f37c26b24..1276a2564f958e5581ebd905eed12aa2877600ef 100644 GIT binary patch literal 12357 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 I_@!U}6Vnj=vH$=8 literal 14301 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 rZu ({ @@ -25,6 +26,8 @@ export function QuestionBranchingInput({ })) .filter((_, idx) => questionIndex !== idx) const branchingDropdownValue = getBranchingDropdownValue(questionIndex, question) + const hasResponseBasedBranching = + question.type === SurveyQuestionType.Rating || question.type === SurveyQuestionType.SingleChoice return ( <> @@ -33,7 +36,14 @@ export function QuestionBranchingInput({ className="max-w-80 whitespace-nowrap" value={branchingDropdownValue} data-attr={`branching-question-${questionIndex}`} - onSelect={(value) => setQuestionBranching(questionIndex, value)} + onSelect={(type) => { + let specificQuestionIndex + if (type.startsWith(SurveyQuestionBranchingType.SpecificQuestion)) { + specificQuestionIndex = parseInt(type.split(':')[1]) + type = SurveyQuestionBranchingType.SpecificQuestion + } + setQuestionBranchingType(questionIndex, type, specificQuestionIndex) + }} options={[ ...(questionIndex < survey.questions.length - 1 ? [ @@ -47,22 +57,122 @@ export function QuestionBranchingInput({ label: 'Confirmation message', value: SurveyQuestionBranchingType.ConfirmationMessage, }, - { - label: 'Specific question based on answer', - value: SurveyQuestionBranchingType.ResponseBased, - }, + ...(hasResponseBasedBranching + ? [ + { + label: 'Specific question based on answer', + value: SurveyQuestionBranchingType.ResponseBased, + }, + ] + : []), ...availableNextQuestions.map((question) => ({ - label: `${question.questionIndex + 1}. ${question.question}`, + label: truncate(`${question.questionIndex + 1}. ${question.question}`, 40), value: `${SurveyQuestionBranchingType.SpecificQuestion}:${question.questionIndex}`, })), ]} /> {branchingDropdownValue === SurveyQuestionBranchingType.ResponseBased && ( -
- TODO: dropdowns for the response-based branching -
+ )} ) } + +function QuestionResponseBasedBranchingInput({ + questionIndex, + question, +}: { + questionIndex: number + question: RatingSurveyQuestion | MultipleSurveyQuestion +}): JSX.Element { + const { survey, getResponseBasedBranchingDropdownValue } = useValues(surveyLogic) + const { setResponseBasedBranchingForQuestion } = useActions(surveyLogic) + + const availableNextQuestions = survey.questions + .map((question, questionIndex) => ({ + ...question, + questionIndex, + })) + .filter((_, idx) => questionIndex !== idx) + + let config: { value: string | number; label: string }[] = [] + + if (question.type === SurveyQuestionType.Rating && question.scale === 3) { + config = [ + { value: 'negative', label: '1 (Negative)' }, + { value: 'neutral', label: '2 (Neutral)' }, + { value: 'positive', label: '3 (Positive)' }, + ] + } else if (question.type === SurveyQuestionType.Rating && question.scale === 5) { + config = [ + { value: 'negative', label: '1 to 2 (Negative)' }, + { value: 'neutral', label: '3 (Neutral)' }, + { value: 'positive', label: '4 to 5 (Positive)' }, + ] + } else if (question.type === SurveyQuestionType.Rating && question.scale === 10) { + config = [ + // NPS categories + { value: 'detractors', label: '0 to 6 (Detractors)' }, + { value: 'passives', label: '7 to 8 (Passives)' }, + { value: 'promoters', label: '9 to 10 (Promoters)' }, + ] + } else if (question.type === SurveyQuestionType.SingleChoice) { + config = question.choices.map((choice, choiceIndex) => ({ + value: choiceIndex, + label: `Option ${choiceIndex + 1} ("${truncate(choice, 15)}")`, + })) + } + + return ( +
+ {config.map(({ value, label }, i) => ( +
+
+
+ If the answer is {label}, go to: +
+
+
+ { + let specificQuestionIndex + if (nextStep.startsWith(SurveyQuestionBranchingType.SpecificQuestion)) { + specificQuestionIndex = parseInt(nextStep.split(':')[1]) + nextStep = SurveyQuestionBranchingType.SpecificQuestion + } + setResponseBasedBranchingForQuestion( + questionIndex, + value, + nextStep, + specificQuestionIndex + ) + }} + options={[ + ...(questionIndex < survey.questions.length - 1 + ? [ + { + label: 'Next question', + value: SurveyQuestionBranchingType.NextQuestion, + }, + ] + : []), + { + label: 'Confirmation message', + value: SurveyQuestionBranchingType.ConfirmationMessage, + }, + ...availableNextQuestions.map((question) => ({ + label: truncate(`${question.questionIndex + 1}. ${question.question}`, 20), + value: `${SurveyQuestionBranchingType.SpecificQuestion}:${question.questionIndex}`, + })), + ]} + /> +
+
+ ))} +
+ ) +} diff --git a/frontend/src/scenes/surveys/SurveyEditQuestionRow.tsx b/frontend/src/scenes/surveys/SurveyEditQuestionRow.tsx index ec3b03d54b41d..e1b24b1bea182 100644 --- a/frontend/src/scenes/surveys/SurveyEditQuestionRow.tsx +++ b/frontend/src/scenes/surveys/SurveyEditQuestionRow.tsx @@ -87,11 +87,9 @@ export function SurveyEditQuestionHeader({ export function SurveyEditQuestionGroup({ index, question }: { index: number; question: any }): JSX.Element { const { survey, descriptionContentType } = useValues(surveyLogic) - const { setDefaultForQuestionType, setSurveyValue } = useActions(surveyLogic) + const { setDefaultForQuestionType, setSurveyValue, resetBranchingForQuestion } = useActions(surveyLogic) const { featureFlags } = useValues(enabledFeaturesLogic) - const hasBranching = - featureFlags[FEATURE_FLAGS.SURVEYS_BRANCHING_LOGIC] && - (question.type === SurveyQuestionType.Rating || question.type === SurveyQuestionType.SingleChoice) + const hasBranching = featureFlags[FEATURE_FLAGS.SURVEYS_BRANCHING_LOGIC] const initialDescriptionContentType = descriptionContentType(index) ?? 'text' @@ -134,6 +132,7 @@ export function SurveyEditQuestionGroup({ index, question }: { index: number; qu editingDescription, editingThankYouMessage ) + resetBranchingForQuestion(index) }} options={[ { @@ -201,6 +200,7 @@ export function SurveyEditQuestionGroup({ index, question }: { index: number; qu const newQuestions = [...survey.questions] newQuestions[index] = newQuestion setSurveyValue('questions', newQuestions) + resetBranchingForQuestion(index) }} /> @@ -212,8 +212,17 @@ export function SurveyEditQuestionGroup({ index, question }: { index: number; qu label: '1 - 5', value: 5, }, - ...(question.display === 'number' ? [{ label: '0 - 10', value: 10 }] : []), + ...(question.display === 'number' + ? [{ label: '0 - 10 (Net Promoter Score)', value: 10 }] + : []), ]} + onChange={(val) => { + const newQuestion = { ...survey.questions[index], scale: val } + const newQuestions = [...survey.questions] + newQuestions[index] = newQuestion + setSurveyValue('questions', newQuestions) + resetBranchingForQuestion(index) + }} />
diff --git a/frontend/src/scenes/surveys/surveyLogic.test.ts b/frontend/src/scenes/surveys/surveyLogic.test.ts index 56e6615beb36f..4b12c4b1459f1 100644 --- a/frontend/src/scenes/surveys/surveyLogic.test.ts +++ b/frontend/src/scenes/surveys/surveyLogic.test.ts @@ -1,9 +1,9 @@ -import { expectLogic } from 'kea-test-utils' +import { expectLogic, partial } from 'kea-test-utils' import { surveyLogic } from 'scenes/surveys/surveyLogic' import { useMocks } from '~/mocks/jest' import { initKeaTests } from '~/test/init' -import { Survey, SurveyQuestionType, SurveyType } from '~/types' +import { Survey, SurveyQuestionBranchingType, SurveyQuestionType, SurveyType } from '~/types' const MULTIPLE_CHOICE_SURVEY: Survey = { id: '018b22a3-09b1-0000-2f5b-1bd8352ceec9', @@ -398,3 +398,439 @@ describe('single choice survey with open choice logic', () => { }) }) }) + +describe('set response-based survey branching', () => { + let logic: ReturnType + + beforeEach(() => { + initKeaTests() + logic = surveyLogic({ id: 'new' }) + logic.mount() + }) + + const SURVEY: Survey = { + id: '118b22a3-09b1-0000-2f5b-1bd8352ceec9', + name: 'My survey', + description: '', + type: SurveyType.Popover, + linked_flag: null, + linked_flag_id: null, + targeting_flag: null, + questions: [], + conditions: null, + appearance: { + position: 'right', + whiteLabel: false, + borderColor: '#c9c6c6', + placeholder: '', + backgroundColor: '#eeeded', + submitButtonText: 'Submit', + ratingButtonColor: 'white', + submitButtonColor: 'black', + thankYouMessageHeader: 'Thank you for your feedback!', + displayThankYouMessage: true, + ratingButtonActiveColor: 'black', + }, + created_at: '2023-10-12T06:46:32.113745Z', + created_by: { + id: 1, + uuid: '018aa8a6-10e8-0000-dba2-0e956f7bae38', + distinct_id: 'TGqg9Cn4jLkj9X87oXni9ZPBD6VbOxMtGV1GfJeB5LO', + first_name: 'test', + email: 'test@posthog.com', + is_email_verified: false, + }, + start_date: '2023-10-12T06:46:34.482000Z', + end_date: null, + archived: false, + targeting_flag_filters: undefined, + responses_limit: null, + } + + describe('main', () => { + // Single-choice question + it('set response-based branching for a single-choice question', async () => { + SURVEY.questions = [ + { + type: SurveyQuestionType.SingleChoice, + choices: ['Yes', 'No'], + question: 'Are you happy with our service?', + description: '', + }, + { + type: SurveyQuestionType.Open, + question: 'Glad to hear that. Tell us more!', + description: '', + }, + { + type: SurveyQuestionType.Open, + question: 'Sorry to hear that. Tell us more!', + description: '', + }, + ] + + await expectLogic(logic, () => { + logic.actions.loadSurveySuccess(SURVEY) + }).toDispatchActions(['loadSurveySuccess']) + + const questionIndex = 0 + + await expectLogic(logic, () => { + logic.actions.setQuestionBranchingType( + questionIndex, + SurveyQuestionBranchingType.ResponseBased, + undefined + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 'Yes', + SurveyQuestionBranchingType.SpecificQuestion, + 1 + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 'No', + SurveyQuestionBranchingType.SpecificQuestion, + 2 + ) + }) + .toDispatchActions([ + 'setQuestionBranchingType', + 'setResponseBasedBranchingForQuestion', + 'setResponseBasedBranchingForQuestion', + ]) + .toMatchValues({ + survey: partial({ + questions: [ + { + ...SURVEY.questions[0], + branching: { + type: SurveyQuestionBranchingType.ResponseBased, + responseValues: { Yes: 1, No: 2 }, + }, + }, + { ...SURVEY.questions[1] }, + { ...SURVEY.questions[2] }, + ], + }), + }) + }) + + // Rating question, scale 1-3 + it('set response-based branching for a rating question with scale 3', async () => { + SURVEY.questions = [ + { + type: SurveyQuestionType.Rating, + question: 'How happy are you?', + description: '', + display: 'number', + scale: 3, + lowerBoundLabel: 'Unhappy', + upperBoundLabel: 'Happy', + buttonText: 'Submit', + }, + { + type: SurveyQuestionType.Open, + question: 'Sorry to hear that. Tell us more!', + description: '', + }, + { + type: SurveyQuestionType.Open, + question: 'Seems you are not completely happy. Tell us more!', + description: '', + }, + { + type: SurveyQuestionType.Open, + question: 'Glad to hear that. Tell us more!', + description: '', + }, + ] + + await expectLogic(logic, () => { + logic.actions.loadSurveySuccess(SURVEY) + }).toDispatchActions(['loadSurveySuccess']) + + const questionIndex = 0 + + await expectLogic(logic, () => { + logic.actions.setQuestionBranchingType( + questionIndex, + SurveyQuestionBranchingType.ResponseBased, + undefined + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 'negative', + SurveyQuestionBranchingType.SpecificQuestion, + 1 + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 'neutral', + SurveyQuestionBranchingType.SpecificQuestion, + 2 + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 'positive', + SurveyQuestionBranchingType.SpecificQuestion, + 3 + ) + }) + .toDispatchActions([ + 'setQuestionBranchingType', + 'setResponseBasedBranchingForQuestion', + 'setResponseBasedBranchingForQuestion', + 'setResponseBasedBranchingForQuestion', + ]) + .toMatchValues({ + survey: partial({ + questions: [ + { + ...SURVEY.questions[0], + branching: { + type: SurveyQuestionBranchingType.ResponseBased, + responseValues: { negative: 1, neutral: 2, positive: 3 }, + }, + }, + { ...SURVEY.questions[1] }, + { ...SURVEY.questions[2] }, + { ...SURVEY.questions[3] }, + ], + }), + }) + }) + + // Rating question, scale 1-5 + it('set response-based branching for a rating question with scale 5', async () => { + SURVEY.questions = [ + { + type: SurveyQuestionType.Rating, + question: 'How happy are you?', + description: '', + display: 'number', + scale: 5, + lowerBoundLabel: 'Unhappy', + upperBoundLabel: 'Happy', + buttonText: 'Submit', + }, + { + type: SurveyQuestionType.Open, + question: 'Sorry to hear that. Tell us more!', + description: '', + }, + { + type: SurveyQuestionType.Open, + question: 'Seems you are not completely happy. Tell us more!', + description: '', + }, + { + type: SurveyQuestionType.Open, + question: 'Glad to hear that. Tell us more!', + description: '', + }, + ] + + await expectLogic(logic, () => { + logic.actions.loadSurveySuccess(SURVEY) + }).toDispatchActions(['loadSurveySuccess']) + + const questionIndex = 0 + + await expectLogic(logic, () => { + logic.actions.setQuestionBranchingType( + questionIndex, + SurveyQuestionBranchingType.ResponseBased, + undefined + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 'negative', + SurveyQuestionBranchingType.SpecificQuestion, + 1 + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 'neutral', + SurveyQuestionBranchingType.SpecificQuestion, + 2 + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 'positive', + SurveyQuestionBranchingType.SpecificQuestion, + 3 + ) + }) + .toDispatchActions([ + 'setQuestionBranchingType', + 'setResponseBasedBranchingForQuestion', + 'setResponseBasedBranchingForQuestion', + 'setResponseBasedBranchingForQuestion', + ]) + .toMatchValues({ + survey: partial({ + questions: [ + { + ...SURVEY.questions[0], + branching: { + type: SurveyQuestionBranchingType.ResponseBased, + responseValues: { negative: 1, neutral: 2, positive: 3 }, + }, + }, + { ...SURVEY.questions[1] }, + { ...SURVEY.questions[2] }, + { ...SURVEY.questions[3] }, + ], + }), + }) + }) + + // Rating question, scale 0-10 (NPS) + it('set response-based branching for a rating question with scale 10', async () => { + SURVEY.questions = [ + { + type: SurveyQuestionType.Rating, + question: 'How happy are you?', + description: '', + display: 'number', + scale: 10, + lowerBoundLabel: 'Unhappy', + upperBoundLabel: 'Happy', + buttonText: 'Submit', + }, + { + type: SurveyQuestionType.Open, + question: 'Sorry to hear that. Tell us more!', + description: '', + }, + { + type: SurveyQuestionType.Open, + question: 'Seems you are not completely happy. Tell us more!', + description: '', + }, + { + type: SurveyQuestionType.Open, + question: 'Glad to hear that. Tell us more!', + description: '', + }, + ] + + await expectLogic(logic, () => { + logic.actions.loadSurveySuccess(SURVEY) + }).toDispatchActions(['loadSurveySuccess']) + + const questionIndex = 0 + + await expectLogic(logic, () => { + logic.actions.setQuestionBranchingType( + questionIndex, + SurveyQuestionBranchingType.ResponseBased, + undefined + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 'detractors', + SurveyQuestionBranchingType.SpecificQuestion, + 1 + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 'passives', + SurveyQuestionBranchingType.SpecificQuestion, + 2 + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 'promoters', + SurveyQuestionBranchingType.SpecificQuestion, + 3 + ) + }) + .toDispatchActions([ + 'setQuestionBranchingType', + 'setResponseBasedBranchingForQuestion', + 'setResponseBasedBranchingForQuestion', + 'setResponseBasedBranchingForQuestion', + ]) + .toMatchValues({ + survey: partial({ + questions: [ + { + ...SURVEY.questions[0], + branching: { + type: SurveyQuestionBranchingType.ResponseBased, + responseValues: { detractors: 1, passives: 2, promoters: 3 }, + }, + }, + { ...SURVEY.questions[1] }, + { ...SURVEY.questions[2] }, + { ...SURVEY.questions[3] }, + ], + }), + }) + }) + + // Branch out to Next question / Confirmation message + it('branch out to next question or confirmation message', async () => { + SURVEY.questions = [ + { + type: SurveyQuestionType.SingleChoice, + choices: ['Yes', 'No'], + question: 'Are you happy with our service?', + description: '', + }, + { + type: SurveyQuestionType.Open, + question: 'Sorry to hear that. Tell us more!', + description: '', + }, + ] + + await expectLogic(logic, () => { + logic.actions.loadSurveySuccess(SURVEY) + }).toDispatchActions(['loadSurveySuccess']) + + const questionIndex = 0 + + await expectLogic(logic, () => { + logic.actions.setQuestionBranchingType( + questionIndex, + SurveyQuestionBranchingType.ResponseBased, + undefined + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 0, + SurveyQuestionBranchingType.ConfirmationMessage, + undefined + ) + logic.actions.setResponseBasedBranchingForQuestion( + questionIndex, + 1, + SurveyQuestionBranchingType.NextQuestion, + undefined + ) + }) + .toDispatchActions([ + 'setQuestionBranchingType', + 'setResponseBasedBranchingForQuestion', + 'setResponseBasedBranchingForQuestion', + ]) + .toMatchValues({ + survey: partial({ + questions: [ + { + ...SURVEY.questions[0], + branching: { + type: SurveyQuestionBranchingType.ResponseBased, + responseValues: { 0: SurveyQuestionBranchingType.ConfirmationMessage }, // Branching out to "Next question" is implicit + }, + }, + { ...SURVEY.questions[1] }, + ], + }), + }) + }) + }) +}) diff --git a/frontend/src/scenes/surveys/surveyLogic.tsx b/frontend/src/scenes/surveys/surveyLogic.tsx index 9b3964b64fdf3..b66a5326228a3 100644 --- a/frontend/src/scenes/surveys/surveyLogic.tsx +++ b/frontend/src/scenes/surveys/surveyLogic.tsx @@ -157,7 +157,18 @@ export const surveyLogic = kea([ isEditingDescription, isEditingThankYouMessage, }), - setQuestionBranching: (questionIndex, value) => ({ questionIndex, value }), + setQuestionBranchingType: (questionIndex, type, specificQuestionIndex) => ({ + questionIndex, + type, + specificQuestionIndex, + }), + setResponseBasedBranchingForQuestion: (questionIndex, responseValue, nextStep, specificQuestionIndex) => ({ + questionIndex, + responseValue, + nextStep, + specificQuestionIndex, + }), + resetBranchingForQuestion: (questionIndex) => ({ questionIndex }), archiveSurvey: true, setWritingHTMLDescription: (writingHTML: boolean) => ({ writingHTML }), setSurveyTemplateValues: (template: any) => ({ template }), @@ -661,38 +672,87 @@ export const surveyLogic = kea([ const newTemplateSurvey = { ...NEW_SURVEY, ...template } return newTemplateSurvey }, - setQuestionBranching: (state, { questionIndex, value }) => { + setQuestionBranchingType: (state, { questionIndex, type, specificQuestionIndex }) => { const newQuestions = [...state.questions] const question = newQuestions[questionIndex] - if ( - question.type !== SurveyQuestionType.Rating && - question.type !== SurveyQuestionType.SingleChoice - ) { - throw new Error( - `Survey question type must be ${SurveyQuestionType.Rating} or ${SurveyQuestionType.SingleChoice}` - ) - } - - if (value === SurveyQuestionBranchingType.NextQuestion) { + if (type === SurveyQuestionBranchingType.NextQuestion) { delete question.branching - } else if (value === SurveyQuestionBranchingType.ConfirmationMessage) { + } else if (type === SurveyQuestionBranchingType.ConfirmationMessage) { question.branching = { type: SurveyQuestionBranchingType.ConfirmationMessage, } - } else if (value === SurveyQuestionBranchingType.ResponseBased) { + } else if (type === SurveyQuestionBranchingType.ResponseBased) { + if ( + question.type !== SurveyQuestionType.Rating && + question.type !== SurveyQuestionType.SingleChoice + ) { + throw new Error( + `Survey question type must be ${SurveyQuestionType.Rating} or ${SurveyQuestionType.SingleChoice}` + ) + } + question.branching = { type: SurveyQuestionBranchingType.ResponseBased, - responseValue: {}, + responseValues: {}, } - } else if (value.startsWith(SurveyQuestionBranchingType.SpecificQuestion)) { - const nextQuestionIndex = parseInt(value.split(':')[1]) + } else if (type === SurveyQuestionBranchingType.SpecificQuestion) { question.branching = { type: SurveyQuestionBranchingType.SpecificQuestion, - index: nextQuestionIndex, + index: specificQuestionIndex, + } + } + + newQuestions[questionIndex] = question + return { + ...state, + questions: newQuestions, + } + }, + setResponseBasedBranchingForQuestion: ( + state, + { questionIndex, responseValue, nextStep, specificQuestionIndex } + ) => { + const newQuestions = [...state.questions] + const question = newQuestions[questionIndex] + + if ( + question.type !== SurveyQuestionType.Rating && + question.type !== SurveyQuestionType.SingleChoice + ) { + throw new Error( + `Survey question type must be ${SurveyQuestionType.Rating} or ${SurveyQuestionType.SingleChoice}` + ) + } + + if (question.branching?.type !== SurveyQuestionBranchingType.ResponseBased) { + throw new Error( + `Survey question branching type must be ${SurveyQuestionBranchingType.ResponseBased}` + ) + } + + if ('responseValues' in question.branching) { + if (nextStep === SurveyQuestionBranchingType.NextQuestion) { + delete question.branching.responseValues[responseValue] + } else if (nextStep === SurveyQuestionBranchingType.ConfirmationMessage) { + question.branching.responseValues[responseValue] = + SurveyQuestionBranchingType.ConfirmationMessage + } else if (nextStep === SurveyQuestionBranchingType.SpecificQuestion) { + question.branching.responseValues[responseValue] = specificQuestionIndex } } + newQuestions[questionIndex] = question + return { + ...state, + questions: newQuestions, + } + }, + resetBranchingForQuestion: (state, { questionIndex }) => { + const newQuestions = [...state.questions] + const question = newQuestions[questionIndex] + delete question.branching + newQuestions[questionIndex] = question return { ...state, @@ -943,6 +1003,32 @@ export const surveyLogic = kea([ return SurveyQuestionBranchingType.NextQuestion } + return SurveyQuestionBranchingType.ConfirmationMessage + }, + ], + getResponseBasedBranchingDropdownValue: [ + (s) => [s.survey], + (survey) => (questionIndex: number, question: RatingSurveyQuestion | MultipleSurveyQuestion, response) => { + if (!question.branching || !('responseValues' in question.branching)) { + return SurveyQuestionBranchingType.NextQuestion + } + + // If a value is mapped onto an integer, we're redirecting to a specific question + if (Number.isInteger(question.branching.responseValues[response])) { + const nextQuestionIndex = question.branching.responseValues[response] + return `${SurveyQuestionBranchingType.SpecificQuestion}:${nextQuestionIndex}` + } + + // If any other value is present (practically only Confirmation message), return that value + if (question.branching?.responseValues?.[response]) { + return question.branching.responseValues[response] + } + + // No branching specified, default to Next question / Confirmation message + if (questionIndex < survey.questions.length - 1) { + return SurveyQuestionBranchingType.NextQuestion + } + return SurveyQuestionBranchingType.ConfirmationMessage }, ], diff --git a/frontend/src/types.ts b/frontend/src/types.ts index b91060b2e20be..e568b42145ce6 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -2660,6 +2660,11 @@ export interface SurveyQuestionBase { descriptionContentType?: SurveyQuestionDescriptionContentType optional?: boolean buttonText?: string + branching?: + | NextQuestionBranching + | ConfirmationMessageBranching + | ResponseBasedBranching + | SpecificQuestionBranching } export interface BasicSurveyQuestion extends SurveyQuestionBase { @@ -2723,7 +2728,7 @@ interface ConfirmationMessageBranching { interface ResponseBasedBranching { type: SurveyQuestionBranchingType.ResponseBased - responseValue: Record + responseValues: Record } interface SpecificQuestionBranching { From ad3050bf740ece751eb53522f7d3a31acf2bfaef Mon Sep 17 00:00:00 2001 From: Julian Bez Date: Fri, 14 Jun 2024 12:40:14 +0100 Subject: [PATCH 09/18] feat(insights): Move dashboard tile async load out of feature flag (#22979) Move dashboard tile async load out of feature flag --- frontend/src/scenes/dashboard/dashboardLogic.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/frontend/src/scenes/dashboard/dashboardLogic.tsx b/frontend/src/scenes/dashboard/dashboardLogic.tsx index 1d18ab9c31ac9..f3856bc674fb6 100644 --- a/frontend/src/scenes/dashboard/dashboardLogic.tsx +++ b/frontend/src/scenes/dashboard/dashboardLogic.tsx @@ -1022,13 +1022,7 @@ export const dashboardLogic = kea([ const queryId = `${dashboardQueryId}::${uuid()}` const queryStartTime = performance.now() const apiUrl = `api/projects/${values.currentTeamId}/insights/${insight.id}/?${toParams({ - refresh: values.featureFlags[FEATURE_FLAGS.HOGQL_DASHBOARD_ASYNC] - ? hardRefreshWithoutCache - ? 'force_async' - : 'async' - : hardRefreshWithoutCache - ? 'force_blocking' - : 'blocking', + refresh: hardRefreshWithoutCache ? 'force_async' : 'async', from_dashboard: dashboardId, // needed to load insight in correct context client_query_id: queryId, session_id: currentSessionId(), From 6133af0e355792a4c9bc38f04364ef472e910859 Mon Sep 17 00:00:00 2001 From: Paul D'Ambra Date: Fri, 14 Jun 2024 13:17:50 +0100 Subject: [PATCH 10/18] fix: ignore replays with null first url (#22975) * fix: ignore replays with null first url * Update query snapshots * update tests * fix tests --------- Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...on_recording_list_from_session_replay.ambr | 80 +++---- .../session_recording_list_from_filters.py | 7 +- ...sion_recording_list_from_replay_summary.py | 2 +- ...t_session_recording_list_from_filters.ambr | 212 +++++++++--------- ...on_recording_list_from_session_replay.ambr | 200 ++++++++--------- .../queries/test/session_replay_sql.py | 2 +- ...est_session_recording_list_from_filters.py | 26 +-- ...sion_recording_list_from_session_replay.py | 2 +- .../test/test_session_recordings.py | 4 +- 9 files changed, 270 insertions(+), 265 deletions(-) diff --git a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_session_replay.ambr b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_session_replay.ambr index d8d0967eb9896..41094c453fec8 100644 --- a/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_session_replay.ambr +++ b/ee/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_session_replay.ambr @@ -50,7 +50,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT %(limit)s OFFSET %(offset)s @@ -107,7 +107,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT %(limit)s OFFSET %(offset)s @@ -163,7 +163,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT %(limit)s OFFSET %(offset)s @@ -219,7 +219,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT %(limit)s OFFSET %(offset)s @@ -249,7 +249,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -292,7 +292,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -322,7 +322,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -365,7 +365,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -395,7 +395,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -438,7 +438,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -468,7 +468,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -511,7 +511,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -541,7 +541,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -592,7 +592,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -622,7 +622,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -673,7 +673,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -703,7 +703,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -754,7 +754,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -784,7 +784,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -835,7 +835,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -865,7 +865,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -916,7 +916,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -946,7 +946,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -997,7 +997,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1027,7 +1027,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1078,7 +1078,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1108,7 +1108,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1159,7 +1159,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1204,7 +1204,7 @@ HAVING argMax(is_deleted, version) = 0 AND current_person_id = '00000000-0000-0000-0000-000000000000') as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1249,7 +1249,7 @@ HAVING argMax(is_deleted, version) = 0 AND current_person_id = '00000000-0000-0000-0000-000000000000') as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1294,7 +1294,7 @@ HAVING argMax(is_deleted, version) = 0 AND current_person_id = '00000000-0000-0000-0000-000000000000') as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1339,7 +1339,7 @@ HAVING argMax(is_deleted, version) = 0 AND current_person_id = '00000000-0000-0000-0000-000000000000') as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1384,7 +1384,7 @@ HAVING argMax(is_deleted, version) = 0 AND current_person_id = '00000000-0000-0000-0000-000000000000') as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1429,7 +1429,7 @@ HAVING argMax(is_deleted, version) = 0 AND current_person_id = '00000000-0000-0000-0000-000000000000') as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1474,7 +1474,7 @@ HAVING argMax(is_deleted, version) = 0 AND current_person_id = '00000000-0000-0000-0000-000000000000') as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1519,7 +1519,7 @@ HAVING argMax(is_deleted, version) = 0 AND current_person_id = '00000000-0000-0000-0000-000000000000') as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1562,7 +1562,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1605,7 +1605,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1648,7 +1648,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1691,7 +1691,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 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 fc0c3781946d5..f6b2652c9b2aa 100644 --- a/posthog/session_recordings/queries/session_recording_list_from_filters.py +++ b/posthog/session_recordings/queries/session_recording_list_from_filters.py @@ -252,7 +252,12 @@ def _where_predicates(self) -> ast.And: return ast.And(exprs=exprs) def _having_predicates(self) -> ast.And | Constant: - exprs: list[ast.Expr] = [] + exprs: list[ast.Expr] = [ + # a missing first url indicate delayed or incomplete ingestion and we can ignore those + ast.CompareOperation( + op=ast.CompareOperationOp.NotEq, left=ast.Field(chain=["first_url"]), right=ast.Constant(value=None) + ) + ] if self._filter.recording_duration_filter: op = ( diff --git a/posthog/session_recordings/queries/session_recording_list_from_replay_summary.py b/posthog/session_recordings/queries/session_recording_list_from_replay_summary.py index 78b204d872314..1e34d247a42d3 100644 --- a/posthog/session_recordings/queries/session_recording_list_from_replay_summary.py +++ b/posthog/session_recordings/queries/session_recording_list_from_replay_summary.py @@ -642,7 +642,7 @@ def ttl_days(self): {provided_session_ids_clause} {log_matching_session_ids_clause} GROUP BY session_id - HAVING 1=1 {duration_clause} {console_log_clause} + HAVING s.first_url is not null {duration_clause} {console_log_clause} {order_by_clause} LIMIT %(limit)s OFFSET %(offset)s """ 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 d620633d8d16f..3dfc09ffd8e85 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 @@ -24,7 +24,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['custom-event'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -61,7 +61,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['custom-event'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -98,7 +98,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['custom-event'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -135,7 +135,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['custom-event'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -186,7 +186,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person_id, '00000000-0000-0000-0000-000000000000'), 0)))) GROUP BY s.session_id - HAVING ifNull(greaterOrEquals(duration, 60), 0) + HAVING and(isNotNull(first_url), ifNull(greaterOrEquals(duration, 60), 0)) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -223,7 +223,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -260,7 +260,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -297,7 +297,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -334,7 +334,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -371,7 +371,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -408,7 +408,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -440,7 +440,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -472,7 +472,7 @@ 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 - HAVING ifNull(greaterOrEquals(duration, 60), 0) + HAVING and(isNotNull(first_url), ifNull(greaterOrEquals(duration, 60), 0)) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -504,7 +504,7 @@ 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 - HAVING ifNull(greaterOrEquals(active_seconds, 60), 0) + HAVING and(isNotNull(first_url), ifNull(greaterOrEquals(active_seconds, 60), 0)) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -536,7 +536,7 @@ 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 - HAVING ifNull(greaterOrEquals(inactive_seconds, 60), 0) + HAVING and(isNotNull(first_url), ifNull(greaterOrEquals(inactive_seconds, 60), 0)) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -568,7 +568,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY active_seconds DESC LIMIT 4 OFFSET 0 SETTINGS readonly=2, @@ -600,7 +600,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY console_error_count DESC LIMIT 4 OFFSET 0 SETTINGS readonly=2, @@ -632,7 +632,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 4 OFFSET 0 SETTINGS readonly=2, @@ -664,7 +664,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 2 OFFSET 0 SETTINGS readonly=2, @@ -696,7 +696,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 2 OFFSET 1 SETTINGS readonly=2, @@ -728,7 +728,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 2 OFFSET 2 SETTINGS readonly=2, @@ -760,7 +760,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -792,7 +792,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -824,7 +824,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -856,7 +856,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -888,7 +888,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -920,7 +920,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -952,7 +952,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -984,7 +984,7 @@ 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 - HAVING ifNull(greaterOrEquals(duration, 60), 0) + HAVING and(isNotNull(first_url), ifNull(greaterOrEquals(duration, 60), 0)) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1016,7 +1016,7 @@ 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 - HAVING ifNull(lessOrEquals(duration, 60), 0) + HAVING and(isNotNull(first_url), ifNull(lessOrEquals(duration, 60), 0)) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1053,7 +1053,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1090,7 +1090,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$autocapture'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1127,7 +1127,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1159,7 +1159,7 @@ 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 - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1196,7 +1196,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING ifNull(greaterOrEquals(duration, 60), 0) + HAVING and(isNotNull(first_url), ifNull(greaterOrEquals(duration, 60), 0)) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1233,7 +1233,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING ifNull(greaterOrEquals(active_seconds, 60), 0) + HAVING and(isNotNull(first_url), ifNull(greaterOrEquals(active_seconds, 60), 0)) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1275,7 +1275,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1312,7 +1312,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1366,7 +1366,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1420,7 +1420,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1457,7 +1457,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1511,7 +1511,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1565,7 +1565,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1617,7 +1617,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1669,7 +1669,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1706,7 +1706,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1743,7 +1743,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1780,7 +1780,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1817,7 +1817,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1854,7 +1854,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1891,7 +1891,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$autocapture'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1928,7 +1928,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -1965,7 +1965,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2002,7 +2002,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['a_different_event'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2039,7 +2039,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['a_different_event'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2076,7 +2076,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2113,7 +2113,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2150,7 +2150,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['a_different_event'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2187,7 +2187,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['a_different_event'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2241,7 +2241,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%@posthog.com%'), 1)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2278,7 +2278,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2332,7 +2332,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%@posthog.com%'), 1)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2369,7 +2369,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2406,7 +2406,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageleave', '$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2444,7 +2444,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE and(ifNull(in(console_logs_log_entries.level, ['warn', 'error']), 0), ifNull(greater(positionCaseInsensitive(console_logs_log_entries.message, 'message 4'), 0), 0))))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2482,7 +2482,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE and(ifNull(in(console_logs_log_entries.level, ['warn', 'error']), 0), ifNull(greater(positionCaseInsensitive(console_logs_log_entries.message, 'message 5'), 0), 0))))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2520,7 +2520,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE and(ifNull(in(console_logs_log_entries.level, ['warn', 'error']), 0), ifNull(greater(positionCaseInsensitive(console_logs_log_entries.message, 'MESSAGE 5'), 0), 0))))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2558,7 +2558,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE and(ifNull(in(console_logs_log_entries.level, ['info']), 0), ifNull(greater(positionCaseInsensitive(console_logs_log_entries.message, 'message 5'), 0), 0))))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2596,7 +2596,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE ifNull(in(console_logs_log_entries.level, ['error']), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2634,7 +2634,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE ifNull(in(console_logs_log_entries.level, ['info']), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2672,7 +2672,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE ifNull(in(console_logs_log_entries.level, ['info']), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2710,7 +2710,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE ifNull(in(console_logs_log_entries.level, ['warn']), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2748,7 +2748,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE ifNull(in(console_logs_log_entries.level, ['warn']), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2786,7 +2786,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE ifNull(in(console_logs_log_entries.level, ['info']), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2824,7 +2824,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE ifNull(in(console_logs_log_entries.level, ['warn', 'error']), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2862,7 +2862,7 @@ WHERE and(equals(log_entries.team_id, 2), equals(log_entries.log_source, 'session_replay'))) AS console_logs_log_entries WHERE ifNull(in(console_logs_log_entries.level, ['info']), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2899,7 +2899,7 @@ in(s.session_id, ['00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000001' /* ... */]) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2936,7 +2936,7 @@ in(s.session_id, ['00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000001' /* ... */]) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -2998,7 +2998,7 @@ FROM cohortpeople WHERE and(equals(cohortpeople.team_id, 2), equals(cohortpeople.cohort_id, 2), equals(cohortpeople.version, 0)))), 0)) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3065,7 +3065,7 @@ FROM cohortpeople WHERE and(equals(cohortpeople.team_id, 2), equals(cohortpeople.cohort_id, 2), equals(cohortpeople.version, 0)))), 0)) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3112,7 +3112,7 @@ FROM cohortpeople WHERE and(equals(cohortpeople.team_id, 2), equals(cohortpeople.cohort_id, 2), equals(cohortpeople.version, 0)))), 0)) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3161,7 +3161,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla@gmail.com'), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3210,7 +3210,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(notILike(person_distinct_ids__person.properties___email, '%gmail.com%'), 1)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3247,7 +3247,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview', 'new-event'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3284,7 +3284,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview', 'new-event2'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3330,7 +3330,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person_id, '00000000-0000-0000-0000-000000000000'), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3367,7 +3367,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3404,7 +3404,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3441,7 +3441,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3478,7 +3478,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3515,7 +3515,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3552,7 +3552,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3589,7 +3589,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3626,7 +3626,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3663,7 +3663,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3700,7 +3700,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3737,7 +3737,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3774,7 +3774,7 @@ GROUP BY events.`$session_id` HAVING true))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3811,7 +3811,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3860,7 +3860,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3897,7 +3897,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3946,7 +3946,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -3983,7 +3983,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -4032,7 +4032,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -4069,7 +4069,7 @@ GROUP BY events.`$session_id` HAVING hasAll(groupUniqArray(events.event), ['$pageview'])))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, @@ -4118,7 +4118,7 @@ HAVING and(ifNull(equals(argMax(person.is_deleted, person.version), 0), 0), ifNull(less(argMax(person.created_at, person.version), plus(now64(6, 'UTC'), toIntervalDay(1))), 0)))), 0)) SETTINGS optimize_aggregation_in_order=1) AS person_distinct_ids__person ON equals(person_distinct_ids.person_distinct_ids___person_id, person_distinct_ids__person.id) WHERE ifNull(equals(person_distinct_ids__person.properties___email, 'bla'), 0)))) GROUP BY s.session_id - HAVING true + HAVING isNotNull(first_url) ORDER BY start_time DESC LIMIT 51 OFFSET 0 SETTINGS readonly=2, diff --git a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_session_replay.ambr b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_session_replay.ambr index 45277b504d4b8..58c6d9940430b 100644 --- a/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_session_replay.ambr +++ b/posthog/session_recordings/queries/test/__snapshots__/test_session_recording_list_from_session_replay.ambr @@ -41,7 +41,7 @@ HAVING 1=1 AND hasAll(event_names, ['custom-event'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -88,7 +88,7 @@ HAVING 1=1 AND hasAll(event_names, ['custom-event'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -136,7 +136,7 @@ HAVING 1=1 AND hasAll(event_names, ['custom-event'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -184,7 +184,7 @@ HAVING 1=1 AND hasAll(event_names, ['custom-event'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -260,7 +260,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview', 'custom-event'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND duration > 60 ORDER BY start_time DESC LIMIT 51 @@ -304,7 +304,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -348,7 +348,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -392,7 +392,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -435,7 +435,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -479,7 +479,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -523,7 +523,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -553,7 +553,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -583,7 +583,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND duration > 60 ORDER BY start_time DESC LIMIT 51 @@ -614,7 +614,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND active_seconds > 60 ORDER BY start_time DESC LIMIT 51 @@ -645,7 +645,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND inactive_seconds > 60 ORDER BY start_time DESC LIMIT 51 @@ -676,7 +676,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY active_seconds DESC LIMIT 4 OFFSET 0 @@ -706,7 +706,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY console_error_count DESC LIMIT 4 OFFSET 0 @@ -736,7 +736,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 4 OFFSET 0 @@ -766,7 +766,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 2 OFFSET 0 @@ -796,7 +796,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 2 OFFSET 1 @@ -826,7 +826,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 2 OFFSET 2 @@ -856,7 +856,7 @@ AND s.min_first_timestamp >= '2021-01-01 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -886,7 +886,7 @@ AND s.min_first_timestamp >= '2020-12-30 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -916,7 +916,7 @@ AND s.min_first_timestamp >= '2020-12-12 00:00:00' AND s.min_first_timestamp <= '2021-01-01 12:46:00' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -946,7 +946,7 @@ AND s.min_first_timestamp >= '2020-12-11 00:00:00' AND s.min_first_timestamp <= '2021-01-01 12:46:00' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -976,7 +976,7 @@ AND s.min_first_timestamp >= '2020-12-10 00:00:00' AND s.min_first_timestamp <= '2021-01-01 12:46:00' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1006,7 +1006,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2020-12-28 23:59:59' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1036,7 +1036,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2020-12-29 23:59:59' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1066,7 +1066,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND duration > 60 ORDER BY start_time DESC LIMIT 51 @@ -1097,7 +1097,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND duration < 60 ORDER BY start_time DESC LIMIT 51 @@ -1143,7 +1143,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1188,7 +1188,7 @@ HAVING 1=1 AND hasAll(event_names, ['$autocapture'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1233,7 +1233,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1263,7 +1263,7 @@ AND s.min_first_timestamp >= '2020-12-25 00:00:00' AND s.min_first_timestamp <= '2021-01-01 13:46:23' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1308,7 +1308,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND duration > 60 ORDER BY start_time DESC LIMIT 51 @@ -1354,7 +1354,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND active_seconds > 60 ORDER BY start_time DESC LIMIT 51 @@ -1408,7 +1408,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1453,7 +1453,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1534,7 +1534,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1613,7 +1613,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1658,7 +1658,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1737,7 +1737,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1814,7 +1814,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1892,7 +1892,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -1970,7 +1970,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2016,7 +2016,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2062,7 +2062,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2108,7 +2108,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2154,7 +2154,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2199,7 +2199,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2244,7 +2244,7 @@ HAVING 1=1 AND hasAll(event_names, ['$autocapture'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2290,7 +2290,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2336,7 +2336,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2382,7 +2382,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2428,7 +2428,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2517,7 +2517,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2562,7 +2562,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2651,7 +2651,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2696,7 +2696,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2742,7 +2742,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview', '$pageleave'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -2782,7 +2782,7 @@ AND level in ['warn', 'error'] AND positionCaseInsensitive(message, 'message 4') > 0 ) as log_text_matching GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_warn_count > 0 OR console_error_count > 0) ORDER BY start_time DESC @@ -2824,7 +2824,7 @@ AND level in ['warn', 'error'] AND positionCaseInsensitive(message, 'message 5') > 0 ) as log_text_matching GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_warn_count > 0 OR console_error_count > 0) ORDER BY start_time DESC @@ -2866,7 +2866,7 @@ AND level in ['warn', 'error'] AND positionCaseInsensitive(message, 'MESSAGE 5') > 0 ) as log_text_matching GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_warn_count > 0 OR console_error_count > 0) ORDER BY start_time DESC @@ -2908,7 +2908,7 @@ AND level in ['info'] AND positionCaseInsensitive(message, 'message 5') > 0 ) as log_text_matching GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_log_count > 0) ORDER BY start_time DESC LIMIT 51 @@ -2939,7 +2939,7 @@ AND s.min_first_timestamp >= '2021-01-14 00:00:00' AND s.min_first_timestamp <= '2021-01-21 20:00:00' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_error_count > 0) ORDER BY start_time DESC LIMIT 51 @@ -2970,7 +2970,7 @@ AND s.min_first_timestamp >= '2021-01-14 00:00:00' AND s.min_first_timestamp <= '2021-01-21 20:00:00' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_log_count > 0) ORDER BY start_time DESC LIMIT 51 @@ -3001,7 +3001,7 @@ AND s.min_first_timestamp >= '2021-01-14 00:00:00' AND s.min_first_timestamp <= '2021-01-21 20:00:00' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_log_count > 0) ORDER BY start_time DESC LIMIT 51 @@ -3032,7 +3032,7 @@ AND s.min_first_timestamp >= '2021-01-14 00:00:00' AND s.min_first_timestamp <= '2021-01-21 20:00:00' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_warn_count > 0) ORDER BY start_time DESC LIMIT 51 @@ -3063,7 +3063,7 @@ AND s.min_first_timestamp >= '2021-01-14 00:00:00' AND s.min_first_timestamp <= '2021-01-21 20:00:00' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_warn_count > 0) ORDER BY start_time DESC LIMIT 51 @@ -3094,7 +3094,7 @@ AND s.min_first_timestamp >= '2021-01-14 00:00:00' AND s.min_first_timestamp <= '2021-01-21 20:00:00' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_log_count > 0) ORDER BY start_time DESC LIMIT 51 @@ -3125,7 +3125,7 @@ AND s.min_first_timestamp >= '2021-01-14 00:00:00' AND s.min_first_timestamp <= '2021-01-21 20:00:00' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_warn_count > 0 OR console_error_count > 0) ORDER BY start_time DESC @@ -3157,7 +3157,7 @@ AND s.min_first_timestamp >= '2021-01-14 00:00:00' AND s.min_first_timestamp <= '2021-01-21 20:00:00' GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null AND (console_log_count > 0) ORDER BY start_time DESC LIMIT 51 @@ -3229,7 +3229,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3336,7 +3336,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3423,7 +3423,7 @@ HAVING 1=1 AND hasAll(event_names, ['custom_event'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3474,7 +3474,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3525,7 +3525,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3571,7 +3571,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview', 'new-event'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3617,7 +3617,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview', 'new-event2'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3662,7 +3662,7 @@ HAVING argMax(is_deleted, version) = 0 AND current_person_id = '00000000-0000-0000-0000-000000000000') as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3707,7 +3707,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3750,7 +3750,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3795,7 +3795,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3838,7 +3838,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3883,7 +3883,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3926,7 +3926,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -3971,7 +3971,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4014,7 +4014,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4059,7 +4059,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4102,7 +4102,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4147,7 +4147,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4190,7 +4190,7 @@ GROUP BY `$session_id` HAVING 1=1) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4235,7 +4235,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4283,7 +4283,7 @@ HAVING argMax(is_deleted, version) = 0 AND (ifNull(equals(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(person_props, 'email'), ''), 'null'), '^"|"$', ''), 'bla'), 0))) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4328,7 +4328,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4375,7 +4375,7 @@ HAVING argMax(is_deleted, version) = 0 AND (ifNull(equals(nullIf(nullIf(pmat_email, ''), 'null'), 'bla'), 0))) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4420,7 +4420,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4471,7 +4471,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4516,7 +4516,7 @@ HAVING 1=1 AND hasAll(event_names, ['$pageview'])) as session_events_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 @@ -4567,7 +4567,7 @@ GROUP BY distinct_id HAVING argMax(is_deleted, version) = 0) as session_persons_sub_query) GROUP BY session_id - HAVING 1=1 + HAVING s.first_url is not null ORDER BY start_time DESC LIMIT 51 OFFSET 0 diff --git a/posthog/session_recordings/queries/test/session_replay_sql.py b/posthog/session_recordings/queries/test/session_replay_sql.py index d2d0edb16c35a..8be7d3b88b1da 100644 --- a/posthog/session_recordings/queries/test/session_replay_sql.py +++ b/posthog/session_recordings/queries/test/session_replay_sql.py @@ -105,7 +105,7 @@ def produce_replay_summary( distinct_id: Optional[str] = None, first_timestamp: Optional[str | datetime] = None, last_timestamp: Optional[str | datetime] = None, - first_url: Optional[str | None] = None, + first_url: Optional[str | None] = "https://not-provided-by-test.com", click_count: Optional[int] = None, keypress_count: Optional[int] = None, mouse_activity_count: Optional[int] = None, 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 9f09d82f8f034..2cc1aa2e4fae4 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 @@ -132,7 +132,7 @@ def test_basic_query(self): first_timestamp=(self.an_hour_ago + relativedelta(seconds=20)), last_timestamp=(self.an_hour_ago + relativedelta(seconds=2000)), distinct_id=user, - first_url=None, + first_url="https://another-url.com", click_count=2, keypress_count=2, mouse_activity_count=2, @@ -154,7 +154,7 @@ def test_basic_query(self): "inactive_seconds": 1188.0, "start_time": self.an_hour_ago + relativedelta(seconds=20), "end_time": self.an_hour_ago + relativedelta(seconds=2000), - "first_url": None, + "first_url": "https://another-url.com", "console_log_count": 0, "console_warn_count": 0, "console_error_count": 0, @@ -313,7 +313,7 @@ def test_basic_query_with_paging(self): first_timestamp=(self.an_hour_ago + relativedelta(seconds=20)), last_timestamp=(self.an_hour_ago + relativedelta(seconds=2000)), distinct_id=user, - first_url=None, + first_url="https://another-url.com", click_count=2, keypress_count=2, mouse_activity_count=2, @@ -337,7 +337,7 @@ def test_basic_query_with_paging(self): "inactive_seconds": 1188.0, "start_time": self.an_hour_ago + relativedelta(seconds=20), "end_time": self.an_hour_ago + relativedelta(seconds=2000), - "first_url": None, + "first_url": "https://another-url.com", "console_log_count": 0, "console_warn_count": 0, "console_error_count": 0, @@ -563,17 +563,17 @@ def test_first_url_selection(self): "session_id": session_id_two, "first_url": "https://first-is-on-second-event.com", }, - { - "session_id": session_id_three, - "first_url": None, - }, + # sessions without urls are not included + # { + # "session_id": session_id_three, + # "first_url": None, + # }, { "session_id": session_id_four, "first_url": "https://on-second-received-event-but-actually-first.com", }, ], - # mypy unhappy about this lambda 🤷️ - key=lambda x: x["session_id"], # type: ignore + key=lambda x: x["session_id"], ) def test_recordings_dont_leak_data_between_teams(self): @@ -591,7 +591,6 @@ def test_recordings_dont_leak_data_between_teams(self): distinct_id=user, first_timestamp=self.an_hour_ago, last_timestamp=self.an_hour_ago + relativedelta(seconds=20), - first_url=None, click_count=2, keypress_count=2, mouse_activity_count=2, @@ -604,7 +603,6 @@ def test_recordings_dont_leak_data_between_teams(self): distinct_id=user, first_timestamp=self.an_hour_ago, last_timestamp=self.an_hour_ago + relativedelta(seconds=20), - first_url=None, click_count=2, keypress_count=2, mouse_activity_count=2, @@ -1230,6 +1228,7 @@ def test_all_sessions_recording_object_keys_with_entity_filter(self): first_timestamp=self.an_hour_ago, last_timestamp=(self.an_hour_ago + relativedelta(seconds=60)), team_id=self.team.id, + first_url="https://recieved-out-of-order.com/second", ) self.create_event( user, @@ -1242,6 +1241,7 @@ def test_all_sessions_recording_object_keys_with_entity_filter(self): first_timestamp=self.an_hour_ago, last_timestamp=(self.an_hour_ago + relativedelta(seconds=30)), team_id=self.team.id, + first_url="https://recieved-out-of-order.com/first", ) (session_recordings, _, _) = self._filter_recordings_by( @@ -1266,7 +1266,7 @@ def test_all_sessions_recording_object_keys_with_entity_filter(self): "end_time": self.an_hour_ago + relativedelta(seconds=60), "active_seconds": 0.0, "click_count": 0, - "first_url": None, + "first_url": "https://recieved-out-of-order.com/first", "inactive_seconds": 60.0, "keypress_count": 0, "mouse_activity_count": 0, diff --git a/posthog/session_recordings/queries/test/test_session_recording_list_from_session_replay.py b/posthog/session_recordings/queries/test/test_session_recording_list_from_session_replay.py index 7bfbd6fcb3f67..09b1c68cfe122 100644 --- a/posthog/session_recordings/queries/test/test_session_recording_list_from_session_replay.py +++ b/posthog/session_recordings/queries/test/test_session_recording_list_from_session_replay.py @@ -1151,7 +1151,7 @@ def test_all_sessions_recording_object_keys_with_entity_filter(self): "end_time": self.an_hour_ago + relativedelta(seconds=60), "active_seconds": 0.0, "click_count": 0, - "first_url": None, + "first_url": "https://not-provided-by-test.com", "inactive_seconds": 60.0, "keypress_count": 0, "mouse_activity_count": 0, diff --git a/posthog/session_recordings/test/test_session_recordings.py b/posthog/session_recordings/test/test_session_recordings.py index 401eaa01365ed..eee3c288c3be9 100644 --- a/posthog/session_recordings/test/test_session_recordings.py +++ b/posthog/session_recordings/test/test_session_recordings.py @@ -254,7 +254,7 @@ def test_session_recordings_dont_leak_teams(self) -> None: "recording_duration": ANY, "snapshot_source": "web", "start_time": ANY, - "start_url": None, + "start_url": "https://not-provided-by-test.com", "storage": "object_storage", "viewed": False, }, @@ -399,7 +399,7 @@ def test_get_single_session_recording_metadata(self): "end_time": (base_time + relativedelta(seconds=30)).strftime("%Y-%m-%dT%H:%M:%SZ"), "click_count": 0, "keypress_count": 0, - "start_url": None, + "start_url": "https://not-provided-by-test.com", "mouse_activity_count": 0, "inactive_seconds": 30, "active_seconds": 0, From 0d78e0fd8b6eb62805c3ce5f1b36a86ea4d1b87c Mon Sep 17 00:00:00 2001 From: Shawn Lockhart <64715274+shawnlikescode@users.noreply.github.com> Date: Fri, 14 Jun 2024 08:09:23 -0500 Subject: [PATCH 11/18] feat: add NOT options for url targeting (#22653) Co-authored-by: shawnlikescode Co-authored-by: Neil Kakkar --- frontend/src/scenes/surveys/constants.tsx | 12 +++++++++--- frontend/src/types.ts | 9 ++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/frontend/src/scenes/surveys/constants.tsx b/frontend/src/scenes/surveys/constants.tsx index 738e51b2a209a..6411868691bbd 100644 --- a/frontend/src/scenes/surveys/constants.tsx +++ b/frontend/src/scenes/surveys/constants.tsx @@ -1,3 +1,5 @@ +import { allOperatorsMapping } from 'lib/utils' + import { Survey, SurveyQuestionDescriptionContentType, @@ -17,10 +19,14 @@ export const SurveyQuestionLabel = { [SurveyQuestionType.MultipleChoice]: 'Multiple choice select', } +// Create SurveyUrlMatchTypeLabels using allOperatorsMapping export const SurveyUrlMatchTypeLabels = { - [SurveyUrlMatchType.Contains]: '∋ contains', - [SurveyUrlMatchType.Regex]: '∼ matches regex', - [SurveyUrlMatchType.Exact]: '= equals', + [SurveyUrlMatchType.Exact]: allOperatorsMapping[SurveyUrlMatchType.Exact], + [SurveyUrlMatchType.IsNot]: allOperatorsMapping[SurveyUrlMatchType.IsNot], + [SurveyUrlMatchType.Contains]: allOperatorsMapping[SurveyUrlMatchType.Contains], + [SurveyUrlMatchType.NotIContains]: allOperatorsMapping[SurveyUrlMatchType.NotIContains], + [SurveyUrlMatchType.Regex]: allOperatorsMapping[SurveyUrlMatchType.Regex], + [SurveyUrlMatchType.NotRegex]: allOperatorsMapping[SurveyUrlMatchType.NotRegex], } export const defaultSurveyAppearance = { diff --git a/frontend/src/types.ts b/frontend/src/types.ts index e568b42145ce6..ed3339591df09 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -2615,9 +2615,12 @@ export interface Survey { } export enum SurveyUrlMatchType { - Exact = 'exact', - Contains = 'icontains', - Regex = 'regex', + Exact = PropertyOperator.Exact, + IsNot = PropertyOperator.IsNot, + Contains = PropertyOperator.IContains, + NotIContains = PropertyOperator.NotIContains, + Regex = PropertyOperator.Regex, + NotRegex = PropertyOperator.NotRegex, } export enum SurveyType { From 645fc179a811b21c448398a0a61f63be5aef3e8f Mon Sep 17 00:00:00 2001 From: timgl Date: Fri, 14 Jun 2024 14:26:54 +0100 Subject: [PATCH 12/18] fix: Fix breakdown_value not in list issue (#22983) --- .../insights/trends/test/test_trends_query_runner.py | 2 +- posthog/hogql_queries/insights/trends/trends_query_runner.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py b/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py index aeadb90d1b199..5ac3c588fd970 100644 --- a/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py +++ b/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py @@ -1851,7 +1851,7 @@ def test_to_actors_query_options(self): IntervalType.DAY, [EventsNode(event="$pageview")], None, - None, + BreakdownFilter(breakdown_type=None, breakdown=None), ) response = runner.to_actors_query_options() diff --git a/posthog/hogql_queries/insights/trends/trends_query_runner.py b/posthog/hogql_queries/insights/trends/trends_query_runner.py index 4717e0a3e4943..18374b0677ce4 100644 --- a/posthog/hogql_queries/insights/trends/trends_query_runner.py +++ b/posthog/hogql_queries/insights/trends/trends_query_runner.py @@ -215,7 +215,7 @@ def to_actors_query_options(self) -> InsightActorsQueryOptionsResponse: ] # Breakdowns - if self.query.breakdownFilter is not None: + if self.query.breakdownFilter is not None and self.query.breakdownFilter.breakdown is not None: res_breakdown = [] if self.query.breakdownFilter.breakdown_type == "cohort": assert isinstance(self.query.breakdownFilter.breakdown, list) From 5941d487f2a0a3490d9b91ef1e583d52919d2ed8 Mon Sep 17 00:00:00 2001 From: Tiina Turban Date: Fri, 14 Jun 2024 16:59:30 +0200 Subject: [PATCH 13/18] chore: remove log line (#22986) --- plugin-server/src/utils/event.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/plugin-server/src/utils/event.ts b/plugin-server/src/utils/event.ts index 3f02106b3b8a6..d6f4392f26812 100644 --- a/plugin-server/src/utils/event.ts +++ b/plugin-server/src/utils/event.ts @@ -10,7 +10,6 @@ import { PostIngestionEvent, RawClickHouseEvent, } from '../types' -import { status } from '../utils/status' import { chainToElements } from './db/elements-chain' import { personInitialAndUTMProperties, sanitizeString } from './db/utils' import { @@ -257,13 +256,6 @@ export function formPipelineEvent(message: Message): PipelineEvent { '$unset' in combinedEvent.properties) ) { setUsageInNonPersonEventsCounter.inc() - if (Math.random() < 0.001) { - status.info('👀', 'Found $set usage in non-person event', { - event: combinedEvent.event, - team_id: combinedEvent.team_id, - token: combinedEvent.token, - }) - } } const event: PipelineEvent = normalizeEvent({ From 7710c62fd265a2cba4486b1ac8b4cfd0457bcecb Mon Sep 17 00:00:00 2001 From: PostHog Bot <69588470+posthog-bot@users.noreply.github.com> Date: Fri, 14 Jun 2024 11:10:13 -0400 Subject: [PATCH 14/18] chore(deps): Update posthog-js to 1.139.2 (#22984) --- ...funnel-historical-trends-insight--dark.png | Bin 12643 -> 14543 bytes ...unnel-historical-trends-insight--light.png | Bin 12357 -> 14301 bytes ...el-top-to-bottom-breakdown-edit--light.png | Bin 183126 -> 181125 bytes package.json | 2 +- pnpm-lock.yaml | 8 ++++---- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/__snapshots__/exporter-exporter--funnel-historical-trends-insight--dark.png b/frontend/__snapshots__/exporter-exporter--funnel-historical-trends-insight--dark.png index a820c399ecbf23f0a477f1d6c54d82101a2b8272..f427261f0c8010f06b2182d23f21ea35f32b3b67 100644 GIT binary patch literal 14543 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 F{{zP_KF9z7 literal 12643 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 I_@!U}6Vnj=vH$=8 diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown-edit--light.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown-edit--light.png index 928391c9da297686b1fecbd4a0ee2c5d62daebe0..3ddc4b47993f43a303bf70608e084ef0017e08d1 100644 GIT binary patch delta 145738 zcmaI;cRZK>8$J$`P!Y-|BpKNv$}Fo$Mr5z7gv@NZO4+Njcae}y_R8L5XK%9iUcd9| z{rUdB_x;CxzaM!#-sv^2>-jvN=XspRahz9wIG(3BUJk7fa$hmp2m8~F(nl<1SHE5G zD84TBNc@TT^@YR1JVlAp>v-JJcuZ;-!< zmzT$zgIQULSwQ1QB<@4q)+vAyllgXeIbet&d5E11@8ZRaH*en5&wVs-kA4xWB+HX1 zQ8CWREg>!}sG~8vu$D;tf=!5%%ipFZx#}e{=ZkT-QIpp>okE`Q(JrS(xn>s^n*=fPVM4f-=D&qclXy@H zheZCF{)t~v_H?+(p5p^iays!S(WOi5seRG^`*>Ij%MwbftHi_yf0KeQ;N#Eqsp-vr z^`^bS&W=w=NGL2KauE+NNg+YBe0RwF?~V%@yZU`IGc(Uw`2^95kpyZD`13|5G$Nw$ z_+ZOiC?JMYNGK*k?+s;zZm@1P!Yn9Q+Gd}hmuK4dBTRYeT!wbZ=PaGFt3*Wi%N$mm z_C_6fqT~pcv@6}BUL?4O|NgBgE-p^NV{jfhJxHk)G#|)fym|8j|EnSE^@#^ZOXF@^ zmtPGRGBPu#wCr$o29{>|$BDW}FZ86?&9y~QUqy86%XH0)ZfMC0H()0u5FGhm|&cbF_S37>b>@gDxxN14$>IgerYQNO5 z*q0usd3Lfl&V29QV4A%caxg<|(jF~kU~q#*$l>OlJ7EV~^II)!*?$I_o14EPXQvh; z#aFnvxZtk$JCRd~sy8RauNSUj;JkkaH$_ZEU55P>nL_k^PR7zzrV ztbJ9&0-L3r4$FUdLS-2r2GeF%H!a04bxy{(XEx94kp@3_!|yeKxG3hl;JCDh!-A!$ zXnphZv09no<5KG+and3p8M1%J$|oS8&VrxUsOjU?R)@8*Cn_o`z60I_G_vyY1Z9qE zoJAIJdFAEh>+9>*`(^tNd)dQepAFNGsED0x6RTzG&O*RsT95wyYpR-|UhTd&IFUCfvv99im3aj&aHSS=UBUf&2 z?gvj#Wc0V)c$E2@z17j>;iBNSHaQ4-xD5S;?qq@iDXICf0$Cw%*PTVuso4-S`E+I%yp}6jf7@QzL@snKdG}zrK_mW zvKt}zX8aB^w^Gplz7swU7Ki3fmRxpD&L9bIg6G_!qUwhJWE_v=<(Y(p$~1W-rKC1` z6vTL(*7bFrXGvG9&fZk+PvN;Dn~42CzsHqO5?fDK%f1bZXVMn=4)OQL zqvp4;HcNoahsI9;1&@bDzR495lDb4Ge{QNk`FhDNlGm<#tFsV)`YoZiC<3J`k5+{+ z;P(8RjiyFQ>~?p8X@sPEzCT&fi`-iq?+g|@eFQnfX*Nuaf?FSBxbT%BeDdzAHWS{) zAR5D(4;O_un;0nYaa1!AO{pTw(MTRcoUySnNISW*jRlE

u~$tS)pdE^D!AWmQ#G zC+cCzdR1?Jn)Uq{vByAzP(_6Vj>v1+rJ5Z~G!HV#$C{qGZq2pt7N5hy!t@CY#JUOG59Fv=~*N~Zw}G`BMVDYnmX%}iS__w ztz?Ls)IPJJpDzv9{H&8Y++&O9{I%rpsrY;bbX^0XRBWykjSJSTv{hz5>%Zs5;a@Lq zVZk24^d!-FYmQy7@>)o99UNcN{tQY8L-)Y7@u;OEm!idaU5&;siJceB#h;I~FgXtC zDI@&mTKkV3%q9u--OhN}%lhxXqnwQ!%}Lg)-X3gKFJx!Uw@?y$)OrrUL*g|J4Goqs z+2}jwssoz}rBqF(lt(K*oW*Y$+s0FT)g5QF|anzn1qq4H{ zTS`j4`2Z)B5ykXAKGWYAex*Dl)FOxrA4XP|Coh5h+E|=%Yxuo_&eT*E$Pq8Ay4+?y zJ^a121N+TK^~95hG=kT9;{LgF=P>>b7iFI;M5v}GL)p6~AHabzWUcvc2$u0SN)FId(T*>_cx|@UuCasDvr=p4-XHYMwgY9o$M_y zTe!KqQ;N9!Jh_{xo_o$ulQXj2M1_@9*0^1CytHe;-iG|c6m#jyP{DMJRps+PInM=_ zM^ZfO+D(xBE2O0LAL%7bhYK?+MgYdR;t{>rbI92cA_00Q%#YPH`)ftJ3Et|%8vk?0S1R$YAnu`_ovU7rEmi0y}FAiTkJ3czoGfWm#`ZW7xf{*}kuQ0}T?SW8N*j6-?~9 z<&jVadEEA`kDe$ROFn$a3&qIR&d&L8AqD+eX{F*bMbDnIv-9piR>ddw%IaI;p`mr< z&Rc)Voq5yY{7=!H?c-);Wo77AMB~!A<+RwBj|Em{85$biVqwYAlX(98xjH+Ufq?;F zwZ6;u_R=P_Tbr7$L(Y?Y91_lnuw ztUinK7BEUN;GIcidBeecl6~k(!gSC(N?V(^WEZf85J*$@lN$RIqzdjl>^uFs*m!-B z?>`VSYx?^OCVxy|U7e)I`}b@Guf)aA@yE1JrkOoqUER{8ifM1iGj4?{jIJ$U#9p%k zWez;Qs!-M0xrxKb7XMs;a_X6?9SLHc$&VvU2lI@5nF}CGN@O}5mp;{vBH0NRLtJ;+ z0aY^Vxou#_3ECS>{CX$wjes<*<47^ARIR@1bcYKAK0q(gY75RpGh23f4IqZcqq{Yp zcxXNf4JGlqOg;B|EiRF|3kt)=d;-#)Yxs~QTAt`vXJ>ZZ<<8i9c236|jV}lD7$+wu z-S#KFW5tm80X-xR3zq=tRgbgUws+tDs{|z`|3znEl}WDpU590gOwEE)`uR6f^O`oB z(}(9}US14|v0n|Fm0qpNu(jOjtoWgbQ&8h_NS+ZP{{^3I`Hc}rJbzc&6(_PF`>%1w zlt1K8SoS%tE|r`;AIu|atvd4+bh|bbq1x}How)ju2M_SBkL`H`2WM(>@&Odx#n=0BDA~hJ-{%w+!aLaNZq!fgTe`YY`_4I#O&N z0y-u@?h_l0bT43w3Ea!gYXZx&GF1__#$dV>$T8)|o2|PEK0X(M=){8h%qspZeYAW^ zZC_tOU9K>EM8TepvYFZ0vyw`ySy=t2_P4Gr)#R-xv#_v_9~(~IJ-?Xs{{GjuBXVs^ za|VGG--);dlk5y-K6@o1%0>n)vL+|TR)DCk?hs<1Bn$z^ceT}EydEEKDz7YL+O zgf|S%GoSdB} zr>1HqYrSP2KW5wgFHnfFHQf<>OML;HA@j*d`j z{s^#9d#X|r#T_$}2rfMw{p0-&KJ)$ngyCV3^|Dug>dd} zP<~wyyC|j4(*LJ+M!`(tbjE??+6cbx8&heLK)tESC)Ja5JjfQ#f%2KxMnVz~2XYbP zSy}W^28n&hYYB8yS$~%~S`p9+H_f%jP>Q-0*XF@-h$wA`^w8AN@g16?zOgebLgBYh z(~MAii7m~qy3w>0XH+gu1!jZ3zLb)b`1_r@uWdVn*qN4G=y}dEr+mC&szdcP`-`Yy= znk!Fylh*M9kz2MohZS=dUd?)RHn1_>s8Qi^XJxqP1zfCgkVkw-NG-~?Ob3fOogU0X zx;HMEA`!ovotMB?G;IGWe=tWgGgXE4$ef3VCqpCO%W=#(MHMk57Vpi7-p{(pfw!0w z!irxn$4fk=s?SZ)1f>>EUPeX+YhV_Kq>df*k-RS3ru|tuk6*v$t8m%5!NTIh z^dwqQQSsMoYlN@Azad~fsCrCtk=CtaiWh9kibu1S=-%wV`|#oX;oe%Xd0R?5Roe@xs2U=@rRm5?713)YQ}fX?PHTQe*;AT_c zJr=`-fk0e@n(oX(<{3ZT6}WNZhOFF0<`2aiKe{y+97?l}wijwU;)D(s)3c$GuWN1f zhc2CgTp586f-JDsZEc8L^QNE6^h|SzldJ3Fi1U*Zs!LwhB5PbHWt(CzGqjWi zG#>x`KJn^JjS!s@3WRbZ=Mp;^@4b6bGxPHXx2d6IVVLq!{iGrv84=#tws@>(;Fd zts(+X@oJwd3}~3GeEcy34B6z-TGf186fee4%h71$!FwDVNRE9DrvI)tkxVAWWaJWynD{c6s$!e!nacI~ z^Jk}pD9yTCjud}lL>`C# zhH?!M7IxzrbUPD(edOYWqo9vfE3rWN)C)G|AwufRzz`6TBV_)`Ic4t>^e{wAy%_tq zwoTurJj6PFyS;4$D*{(lOhW#+hw1B`cy4HGcE?FCVOLjI2ha$G-%|emMUlnqwO*e+ z@MK$?tz50`-qtM$MCe_J_Q24-N_W@OgHELXkp>2EWaZo4j{$R&ap~g!>P=IQ;(K`& zh?Z|Q(+$s9_W-ATg*FhMg8Nt64k4Xr8}LRyV%dG*Xh3Owy*d&lFz!a|xL5P-g|svd zP=wE$KQq3D-lS#cKT^4fUxrKtWoVIm8|TRUDFYik8{W15Hq&7p>1a%$r=``^mM`}i zw79{uaihAL!%VpHd94?U!hs3?^yyRiPQMleiLTp5J=M6HeTHU%9~{tL2Z||vNGWC+ z8B=7~Wd5G@{^Z0YBDVNRFXNV@0bB62kE~9IMTV-0skUos$V5L1RG$ccIj(hD6JDfjQ~@E zGM9gftmshGrfmEzh1rmM=Bpyh1+!}&(n5G~LS_QO2C~-o4n{o4-@x@+y+HU{io@bHK0Z^8(b=slBBPYlQ+UemK@+hG(_hw^$SFBb{WkUvwi@;aCI%<2r_nXth_p}C}9 z`uY}N{u|ufAO8=fV3BW7e`&Sy$dXFHvaJ_MQ$AR)C8R06iyRN zvL}GF@Z;ngf#&%;TILvL@L!rM3U?XJyMFt2_v9L!7aprI;gq7zj^;X({K>_|AbGVz zjc^n*vtet#J{2Q>Ce<^ ztn(#?D*hFSdZ3g(sp&d@z~mk;OCTUDG>5IdsE8O+z8=6lZvrg6?Xvw>GiY-T z7;O_E)gWs_Hj%r3AA^&VGef70Ect2k2jn90@)G13IKDF~CC@06^!t81GuBn^Sl`_I z@idQ_nHd*l-PhFqNlPOxi}rb6N^R}(F{Y};R?#>c3$$fEL8v~O0;@g}Y?i&mY_pB!{5S=my>>wQdPFLf)diAP0;1QriZ(hIt7M9=&CFM&6 zG7I3^fo3jlqYm(EDPPJe12xA8x&z3LZ$(^p*Y~Q<;`H7ec*6Uv8)+QZtIke>LEY&8 zlS|_H9g&aogQf&hBjhs+{umJ@#pBa4PCqS@KNkG1iEk5^S`2b?U~T1?h{ev1c}?=8 zps?H^7dcgl5_bnt87aN6lpTS1Vc{e7sU%>X~E;i}NK_-)0)X_|5h+ELTAEcd1n zL;qHE<_^LE2JmuoIl4A`1b)#b3NieFK(l_1kMBUcR^YZ<0*0e*)48ob@Fv5~uGpml zK5`lQLwJz^kl#Q`#|b}8ybZdH=b%O5cr4(RJ)}^cgk8J%cRULVzs;0nUS8gxVjBj* zxFFQW$nN=v_qTW6C9lKqB9<@gAPRj-@e@hX2p1-j@op0c@UzE4Dbki%2RV2 zxv1NoV#w)!($irT$I`l~g)6W4sUfGaeqzBu8%F>F0NC=aC&i=rUun*sjIsmRkA)oG zJ#75qMNgtsd*_@jTXSdU3t*g48sPZY?fB$m0a`=ImZ>YhEu(?gnd?mGgh;kLd;=Y- zgy`Ylq^A+{v$MIc7oI}iQbHz6cRW|7E^ac9pA6u!UcPiTXNn^yJzBMibxo^~tM+(h z_>0O^;gm3oxg}YY`Lz96^?{8JD&$qV#Id7$1zE@qwiXg~q1CuNkk(yYUGj{0euEbM zR1|od4ac|#MO7z(kg|)~W})+%NK1*I0*>)Ki%rt+L>wtRXy|-G8ox7Q?N7W9S^G|T zeYI@uDjAvdbVDFYgFuFx-JEUh{xN~0%t9gzHxR;-!h}dBzBLQbfJVzdB4XgO?}Dm6 zAC*R)(M4Dz;e(kFpnu=m&3EKFZelE_?X zx|;n3|1TQUKxlL$Q6|lFmkcxMjy4Vm%-3T1)UH3yi z=oIJ`L=V16BpLusD;InBlZVGSlg@Y@OYM%(g_V^jKnDEDe-Z5dr2=xr8sK8Psk)0M z9kCj<4;by;A9Fl+$gfw;E0f%{RPtdDhv* zr8`ZTnSe%667r_`UzUqXx0S5j??ljAZb)KE4G@NvA8=XvT9+~5S@2U=o$OLec;Vmb zYGDKo4DkD>gaj)EGW4{e;$lcb8U+IJH38oQ)%dQ>)Oj><0uhfMa*z-}bJqY^0^wx{ zr58$9SE>@j;r4bc?$LA7eMf7{z*2Gq(`x$glj$Q3d&oVWD` z^za)XU2;M60mLH@$0m~h71bFuG5e=SYb)=4sRE@z8mvRUJa})~n|cNGP!xA$sy+sl zfi0i{G%#Uc(NJ|9O5adp%3u{DhDv$+>yv;jLLwuZ4tJKIBYnL#HmVzufSg7((z*ux z`gI>Ayn%#j9o5@dz7CO8+uj}sazgI&TAX+gb+0Y~(H0E|$_v!i@(QE^B##H+KB1v` zr9cMzY&W3eI9LQ#lMosR$)qkoXgKJF!kKv->dx_EQFG7*4K}!cTGwSB6e+_6?(Ys; z(X?34X|uEg51~9eFwcg?>&*2+Q75sIsZMTk-TPY!9#}Ef?hIFx^@vkiZgAn%4rBcm-Qk4D z;jwZe?_nmkaX#^`ni|Zz5b;v)Z3Af!bEo0qwv_g1Zt_!m5@=1gdjCs}Ko1y$XpM0U z3x9mP)hT>-yaih1v*L<~h#(}iR}y;smoL>eb~pxamZ&=mtfswG%T;e<31bx&v457) z9=OrWoUjfzxYhlbt1C-K2y8Cx(5$~iJ~Py;V>taStuxrDH-Ag<8bfU3z z$nhsII1De{HmJLB6k-jQ0uvJ^K%N|SNPT9%Hll;4_4|M7V_0ccL zlwE?byX3N4KpTFHk0F9vt98bqLvg3xUN~N_oY&D za%I+SA7s=}yJb>e(wXEbaD4g57dM7o%i@}(Mq%u0?%AZp)4P`vFn$t?-Qv*= zacIM3i5}6|KMGmXce0A?*&#*)0BU13a7#dqCxL#we{{43^*axaBxuVL38L<-Bf3bM zO5)y2N!dkG=pr{ZyT4`{37iXQe&pgZsbXAtDE*8oV?~-u?2RxKShu5lp5cL1o_J3UEZlcP%SGXpJIGqeA+sM*L?eeY0% zMYGUCBh&7>h)5i$t*Tkt3+rc}+D-DuL&*n{K{qBC_VV%y*DBP^oC88cyV&|&Z?6iZ zXYQDG<1A!8&e3+RjnXv_^=^P3#iL-##D`L)wyt~I1^gjq7|v)I)Yh;gJt z-qqFlV-%M-f9W}Rmdhj%B%O4tAgzkXUdg$KMHL`xH*ndW&?y+)j#4jo+Tak7uHNyp z+Gpc!dTx_9;Xw1Nv!{pH%E}4>Hoz45?3RhPK{+`&w#3!XR%)cX0#^z$RLx6f!yJj- zGJ*9Bi{vj#yqgKXI?^e$po9tvkN_-uewvw_`No)1%^rQ}YM_!q$CLYcTse8O|AKP2woe_J7>hd_pI)gk}&YO<@QSb2)OZ6WaX zPvX>qpe46$>d^hMrv-)@N*bK`0)`?bxUHZUfoA?)1^9%T?qbbNI z@m}0nclzvwuHXKREG(8viaoyPDs=S>qPsU$i~~HDo+TSU*eESp>h*;Wm5&odeJ(ao zB<{t&pYMp926@_Wb)*CmD)3I#U}amuB07f#*~G*I>zWupfB$pE@}3lh;j$JI1%;Tn zxK{}BIV7Z&Lm{PSa$y0HF){frq2>kb0y~+1tst{P{5KF%ckLnhw6Y5T`wdVPb=$eJ zgT;$QARJn>=LMR+etvmkX@q!qh9H&zZ2+}UZFQH_=6hCHruRSDE({>{y-?>Bc5%VD ztd{v2Am%OU^7ZR{u8{UCU7;{LQ{$bYi>yN2XzYt7C+2)>xG1Rj>Y}NFe@J|Ar`9rH zSC^X&)oghad#g1xn1hGRcsSm4cvsS1;cf%r!@EqVfI9LNZTY{as+dLdU1Xfxbe3ac zxRs{X)Y9>*b`(!Qz)@Rg6ueOs0S6SDTTSh)HAbu!v}t{%SFiP!KNYymA9LBi9(g(? z1FlTg{K4gI;?B*Hrk5ljTba=b6X`>>-?hQFl=MeoMXv2^%WW-L?QH0+wH2}lreU!m zugl2F+M2}xLq9n?`)tu?x5ytXd9X?K(3XH%knl1U-vo#>C=USg*^rhFxZPp^TYObb zzX3xEV4?6kmB{rUNl7?>4k ze{EMs?gd@D_tYd7P%rq%D6PRJIaFk&psA@@GEJ=*>hltEA&|}bAr}j-8)xWM#e=xn z12C9Vr?l=J7VfoOtv)+?kUh?hs?O4%y5FhQt-ZR#I2X9}TX^T}eww(@vAvvs<5!w0 zBIDMMKUWR8-yGifQRe#9eNuTI&oPmGDLI5fcj;X#8?_?NxJ)${wNgk>0U07LZNkbF zf*I0$-$i-RBJ%IVzh39!S}UY+*X|Vq!L@)!yaZ)ka}67TkBB@efJSTV zH_s(B09Tk(!je_fok9Q6$Th$QQp>@N8gdL6q&$ZmXkGo{C#v?R{2>Xy=c+pXTwX3r zb;qm@)bEAfG@TIl3S3$z3?QBWysh-i>IfC4ahzs(BJuM2rwNQpqFN5-M4GRNZr zD*j;3b1bOc%&?FUF(4>uS)QzxZ^^^n7-WZNW_}0q3TU1qb%MT0IUP2wV4#sGppAq3 z1d*Q!47i{IsF1SruJ=Rg zt$HlaXNA-sQ^$X74bl<2#{T-n)Q1cqPma&*lWsCGZGz&s+4YdF&w*u15RM@*Dj)Cr z`}#g_kG@mB)ge?s6$2cpQU+5cn@p<*t77^chz9|SU*ZLtPu|tn0K$!$}TEO zo8HGdYW9I>r-o4M_&#`4PLB2-ru2LQn+-I`R^GXcsMF%`eq{wR@Bj{rQ*p`jpX$X< z8#e^w2pk<9`J#Ums1Qw=@W!;y%+7ua5BJi{Y#6Qggr*I=$rtEY4Wi;DD%KcG=q@KAhMQdY)m`ujR)JSxLqQG!k&^d{cob?}MV+S&r4 zs?I?+QlL3vuK$IZ-cm5;aM&(E^&l|5)T2nK0__dLw*KqWP-7E9yUE?J6$* zQXcs526+)}vaDxAJ$8&Nwybf%T$C*NKaE0s#H~B;3xRp}w~Gr43*Wwd`xp_yJW5o@ zA(5#%y}BBdkdW|`<-gCKBD)Fq*3sDb(6SJ2^*@?brTg-OkWZ!LA*LmKoXX6Xpa8zA zucOUgA^P`{#hd@^L&dKOz~Wx`Pn!RbYIA4fzGNwV2v6zFkkt|`PMu*)5`PFRkTKwv z|9x;GCny_UV> zqS8$HG|yp0!&_C^a^X(EjVAs1-`8A*y7BFsEao}sqANKh(K%7`vWVt+G+H+s95AC=o) zOyZ$KK#5hHp4&gdjd%q0CrxE?jZRK+nn;E9+4DV5wg^kjwtvfL{K@E_Y4(YR#=^{; z2__N6Z+u6`PM{-JSEcmtD`VK&=7S%inBJzJ6t%np`YE9CLNB_7zWJZaQq$twcOC3s z!^7kP0>M|!jb6M!1wkZfU1G0dS!*Z%> zrsX$sJ-1Kj4`}&A1XAez82``lWY*N&-eAB3Qq{}9rhrzr0gO!y-O~&Op1uB}`4vy`UzK42s{)@TcvIO)Fj6^%DD85 z2UxbY!lOM>^0TV$ARQa~pdm+#-pp z0v;@&o|{@&<)Wd9B?U1n^p^7SQZ|@5pqoU2 z2gdy*q`&`>GgV;2*O3-k;J?AVj0K%BZBEtd(o!q%YzzIF)L_n_gDW!tgSEwY4X zf*^a@m52@S7AuGODw3t96jgumEtr^|g4Y8U!EAgNbTZ-X-x76obrY+r@<3~~iip1G zh@Aw_H6{qyJTNhEl&6QBpaUinN=x2Ht7V;)VBdJ<2JTP{kOxuCM`d3ZJt0N6WypGM z;2?ba{#|wHVhB;e0~nE-pMPj=ZT-so22yu9`Dq$>=zba92FH+#+J_eIC^-z4uphFo z9M>xL1dnNmh<<^)_vKmHU7H-kMuKoo9Wz7_Ss~trJ_rM3WSY~8e$X*6BSG2&+1*AR zH7$b-hq8?zV_t@IfZEJPMzmK;=4ru_C>uB$bsLz9c32AJ0C>53um2K(CI-wd+cjaQ z-(x=}){wI@k-?{AT-jAPfxTul#KKuw2vpjL>A5-8#Wgg8xuf-Q8CU=e=>L;?7Oqv+ zT~Lak#K*aP`}U)YZ*GYGA0he46Gk>R|FYH6^g@ZNQ(j7Gd|+$P=bIaN1neJ@aju}$ z_Dss#%d0!j__46CFsi>Pi0qKKRE$-+fqsHAbwH}px^F81$xwM!U=AA_Tgv|FGYSbn z#irnIt~Gz~;DKWA=$E@1A3uLSH~W*-y08sWjP>F6OO#;)0un`d#V$Ln(2OQmnBTW? z^xWjL9EnsALry|rfM&Q+k)=QRG5MJLo(>vT(Mghwp{pT92PM#-Bl8Y$ z89$4fexyCTGocCHCWMR7vr4!lC4>%kfq<2EP~$3gq9|M&>KUqQYy{7c5|^`!Q%G2t zys85Z4C%3iJ);x)W5xmWMN*Eo!WvaTo^_i?Mh3fdFzpkVKe`8APG5VJxKWFw+Y#0voWQTvGX8nE)HZH(=Ih=H@h zU2secHRyN+gu9NJsM8Y|S`brefCFxZ9~r2G;6vHv#L^yE`BJWm-4QuO;vzSKpfJUQNTGR zs~H4@9+2WMJ-kI;6tU>G+gL}-%$*}su&YOWhLE;)b~1`iUc&$viQ0m+m;hG{1S`hx zo5k2!Sz$|Fio|Hdf$jjC53cB7pr1fM#Kiy}^$D~!mM(JtuB06G!Hp6vvdED597;+P zknhCB#NZ0X(NR*~LbOY$9^SuCJTe-qKru5rZ#^q}4MSA)vN@v?26!~YxWT?a#c$Cx z>NwsGlqaT?!V04jI@C9!`>i4#jUcRJH!N!#o1`zl#KmizKY!*j%nuuP>NLr>y>ko9 zaa-z{*u|x#)AQ8UJqDFykhPsbd$qB*H->VXs)DdKKzfDHH{)PJ_qCVc<$p7S7@pz} zLMF(-5_DfzmjEE0k#RC4pCGt$OH0~f(@}1!Ezm(Zj(KLD=WAeEJMIC6m9LrkUN+gF zKSKiwdAjN}dS)e8z&=K*&TayRU3f#i5x)U{4CZfBKGQp##U+UI)WRS}fhG`+DB|@6 zeh?NrA_cuM0LVO$4!gTFI77OEv(fh%USRxoe;$y;y;fe4+S68vd z3_<@z$jEi|3H1iImMtgd$q|?ue(t*?EJ8K0(1jre4rhIR_fHwqKxTXx z?K^RV9k#aS2H<22P7(XnTYWH?*a^pzU4X9U7O=h3Fm7|_sVY?JgL$zt4F+S(o6O9p zR`8rZ1}qIc7(mY$cYl)s>i8o_t!il_ps;?JYe!;u!O@Y@FXpz-{WzRG%{K2k+!HuG zx`BHibK80{GKv=xPf1A$s=hZPnDM~7!aDE}t=8frLpL=PF#-9^*5N_S@KKRd;qptR zXF6$0&?R^|IXT(f+qhwp?+YyHdEBDZjeXQ0v_4sztIiHyrpWNWQB*K9COcOZ$sQ1qkk9{EPvK=ns8KGSCxr~>;JPRt9k&fl@@@bvGR zq27F?pwQ5mV&wl}u^8C%3xtHY*KgeL0G==p$U(sfcC?DT^1dFs4jX02M@7kFAeq)W zkgXRiom4W(A!(M!c>l>Qc@pF%BV$*Qm7e#9`*4$xHF%&<8+0W~m7kp+6;Lhhpd1Qd ze{{eY4Ax*BEO|Oi2RHZUk2;KK-I5VQcfw~_67I*ez*At?%>MbEJ5+(SRiw9Aaz2K~ zpO@Ntp_jk{m-_;aI`A-9z?(s`YJ&ls^_>&MT+%#H+8+#);K=>33J@Q z5=>`72Ce!|fQ`Zm@P!9}eHYcZAurKb;;4aJ48{W=J$Yh`%7NI}sCx^%`^!t{=0Z)o zLQVY`Vircjg*%0}@Ja3@!2H0#!OnmlI){Q{V({!D9-tg-{4osvI~Nf`+FEm8a)B6B_#pruu0U4M2lJM~9%ig1>4a z$D-bk6lBbBV8{A3-3pTLDq(QLP!gb<4=|((Bfhcj|F4s+Tcv>oPWqFmtwETVMJFN; zcUQC)_5lK4mKx9on@O@Jm!is9XlSUc6|-d)%-h#Qx!^mKkf@spT|<}tE)$_RrKRD{ zhRRA&z?PRE%*8B^SDl^ZJC1KCg}pp$6yseGi8|kX!Gpy8em&{=E0_#EeAwr)NgkY6 zeSXD*u(&0UaH{n0Q-_xxejXWbyU83s=_h+K{bBKcbmbQPJHGDWn_EZk+mPc(J|=o@ zdbjaxa<0gGdnKKBn2Aj~>{pLU7e>njpiRa=MQ}LaFmwce`vQc!EJ^PdFg$#QIUj)6 zm=+hY%oEXpYG5FHo0W9+z|I*!Cl)_7WdN=n1sFnx0U;RNzX}Z$81pS&UBbho1m!{E zL^VYkfnLx}G1KT>SV96_R8-WnF)lVXJUzW}Gdi^_j{K63TjU+8rNT+zEA5q+k}`qk zD*$JHoq;#-_u*x0d;8_N-2&B=5NtIzAt5Z;@L#N*5KrhdB`jr~LGJGi4PKy3T3%68 z5Xl+n5)9s>yc5k1qzsDR6BBP3AcltMW(85O28_B1DCL`F^{m9ndk+sZTS2Zr24(_clkQjH z%rMH5@R@$pNr3C0ghE@`2%}4w6X9Bxx#ln8#vU~PUcN}o1j*kSogcE9Le4|Q%jC9v zc#mkoy`St2;s!byY(a7Gt``!f#Heoxhq#b3El+1TR;Hc z@yYvG8bo$fo=grbfDkY1Ao^qFxEXRyQmA;SGQ`Qn6?}z3T2WoS z2^xylSB5J|-{(Jx9%bv=Rs&?werv@k%|f=??P2{Hr`F>x)Vaf@MHZEXw3 zck=i8rZ3}Qp*;|Cx|P5dfK2B$(i%d=uWM+41LX&l=BSOV-M3D7Zw@$&(S`$9pM{YU zUR3CSU_ljI;9yg&r|$4MZyKS-YdD(0BD;}2QxqUR!^={;Mb*l*6YZTPVfF?JNXyMj zsI?fKrN_j?Y>N|$fD*5I_9_We7Y0L1J zCDS%XpQ8ao7+@CGza6y?z6cmu!GrN@dln6S<6IJ~2HT?9*;yVS5m2uJD#!v7W?M{- z&Q7$gIvQOoUaLG}9jSx?0#pnK3)n@)Iq|RHd09rlcLa$dpy6>gSPhY%=5}z@z-DPW zkVS*yJzy_}EY)qH=n{%-6M^#uSYXt|DlE(@pLe(W1&p@9lQ^L3?|}yTE4cy)2CM~DoLnPL5@X?UCg>C!;M4uBgtN9{n`zc%HZC#piBj@(cwoj1YV!m}3Sc;b zIv9uR@BIS66?NC<23%Y+m{3qV8c;xgcCJADC@YB6gLeouvfi_uxd4$0Purk(@b$yQ z!r_LY2R}bQ)@#p|!bGvookOVx&}xcEhspq%G`F|UqJtO!*t|N!d!+~LDC=8^vBLsc zimwo3rXxItMm14vsPKoR}{ z-V8|5n_^;BZQV}5xV?Z`ifclMLjb5Tc}^P!sIySZs=|063j(XStjzFs6za8Q3vBHY zg%o^Ae+eBs0eAooNjMH$&l2daq<8yzbSt|QR}*809-k`OZmh8^Jvz^b2X`cC$!YIm zRNc3^u?w~P{q{DA$2p1R)g~;^H%Z^Z+O9*^8jeS}bS`ulwxJ`5l3yfGB!1}>phJF3X$?-WEd6{1poHy_62v=9{N_?g%QOA8G zBN9BQ?bG$wBil;B=NtEmA4nv;0Bo=rt0;z=#IhKnGBWl_41#tNzrpy5-2`^3~zTa#rJ~MU+bFd zRo8<*d{D-4ay}rUpm^G@X1f9ogfO9Ay>I+K5DUusbREuIVc2INN73Opco30QF%@>Q z2G@T2)0yAV?7$zFnAkvL>GNns8L$S-(&f31l-iqX7Fp^fi$eCjGFb%79M2`Zt$X%| z6!g{4&tvzczpjEMdHR&I4+n4xgK%4kBZJhUM~n2FcDt?bY;HeGP7q5fvLN}c*@!h? z?xpb$sMkLi1K4v4`?`H$`ELkB2!dDf7Cfv4?mwOPde`HyO5Wh>pDhu4#H< zArS0?FuqkjaxKs9Har>w_t)rX2+pU#^w;!;x$5BQDK1@XWUz4g(mQJfx4On2Z5!<*R|9(wltb+l^iaUr6%@h-+X}XJLGuV8srUci@679{=`( zWoT-Dpq4~n3wQP7fih&&lE`@R2M=hmv7Nu^WH=@K`bFgNz){|%tjz_&F&pj9>@=5rt)0IN3tTNLUQOeKA9 zcxVaV3+w+Kh!5~^EcW?dXGx{~PdQRnj8uU83vD}dblm#Y+Dfjchk%{phkFJLLo?!i z>v;6|F8m`W=BqEftw&K~1IiZ);a@@E@TJX$vZvyxsR=;vWNB23!$hNBn+eDa z4<#k*?%eZg+OgeT*6{Q9zmqAAW|kS8M60!ekIgvwKw4-C!pplkWRM^<1pFYC= zw3L>U18Ui|r^?E}3e^wSz6YrJ!kZD@)Efj(^S+Q>x_FVEmjTPq588$ai!VBwG1aByrK z9vvNg?yC}4@6pvq8Xyg)FP0_{T`ixxsbCy1^c|>Yz^ninmlvGMnlM1HiU}C|P%439ETSo^>(4gc?GF(D0 zMAGs;T!}4QN$H=fu!4}lmSlT~{{0iIS4J9WF`QI;VYkLOi(JQ!|&XKStO9uZt^5xt)kN*Qi(AWO&r2~z0R#tj1yy@XP z?f|b#r$>jp@W%Y_J%1oFe(7`Hg{{4Er9>9z{inm78&LnBtfa=GIjwJMb?!kAljFxI z=T8|KuWgYnTNc*aLPG5Da+|kM#&zSz_78D@^7*@Lz088C^{iIP>2o*qKt`P-Wok}m-<`^@Y~-WQD?p??dc z{ZRJmcriKx4>U|0SlLqbszibKGJs+PrF3`*mWlV(5FfwQSiqpgcMwL<$FUuEo*g3! zCGI9BCY$hNClrZbfI1-o7M@qbyti*Vp*#TkR59SJL6e(;M9X3KZr)Vr;0%UD?}EYt zbbXPlC^!xOAJX0gtjE3G`wojmW-`lINkTGY$gm6{vosh=hD1a~GhN0aGbMzOOwmLo zBr1vwO9>4`8kQu4jOqEDx%aX6e%^Z@&-*^_Iu6HuuciLOb^Wg2?>xWL*`kM;!_Tjd zzkYp52*`Rz-M=jR;uaDwh#`=&ML;>Hz@-o0x#q1&IThsP3o4EFoeEIVQlX-g-5gLr zuoV@27Xo7O_zN+!z3)Hm;UZxtFXRT@`#ks;W}*EXAkbm0UwmHo;@EwIdQ zkW-#5Y(L!E1)E2eQBbO9H>rJ>>4U1*%JS*&QsT`D*9ZZjGGN)$>y%30aF5rp;B7%w zVg{hSKM4&gB7QD_K2TwLM#i_CykBM~ABcP#6#YFs%|6e&0w+?8@8FU}5biZVflQJ& zr-s~5Sdo8@Wn<2X%N^d?iToKi;N7w~pwstw2S_b==k(Dbs}kgmtT2105tTTe#*t?Z93o{I-kJZk*u35XBzK_xpL_C!kRDWu8Tmo zidg`k-YPi(bT!miHcQDHNP(5S&H419ygVPxj}6*in82LR!uC9Od)3ejFTBL>IlN4) zZRPp4|Fv&L?YPoxu=!cGL4}Q#uNy4egYtC0u;?C-UUOp0K5!X7a-{ifS^2pn6Uy9Q zSXR1*C{{_%d&P6?PUk@vvSjTdz>Dy_rd0hx>&8Nux+sXwh>(%{(m;OsDSSn2p4S9i z`|5Tp&wp=7e517+T=nMhc40*mzn;4t$Ki|Q0k>`uA!N0zQJn%% zHdq^A<*|h-{{179DVC1ImC#F<2J%tvgQ|%gjl9S7mCj_`NNxdnL;FQI!5NilSL zKYfkp9RXu+!?kbc@Rn|bRGE`^-ro60xttCzBWg(B7Clfq|E4DKF7U00yjzUW5F4N% zto)jwIssp0dlZOt+O%mZhCfO#$kRs|01lBNmeruDpSGNvqVTKn6Lw;qMh4dT0q)-U(jv$)ENoV4UvjJ!fwW8odokpxz2 z&4ZxUvZaI{%~E2P-G;7zAUrC%l4Ti_!!CBz9KT1JANHIkc&oTlZ%?}V?W3s%D;z;1 zB4P)gqW-`VHf#pwEykKY*s^)f?~@f}>x#DR7n_T)K??fM}Lcmh#5oCg~_A5`^i!S{F zK&O$pAN}|4l@11zQ)4eLFUf0&Ie*!4#^*zuQ!`DfORuw~Fl(Z3Wfv6w3ct*<98Ok= zIzqiuk<0$_HpYAt&&r@dgGd_)5KVBc7fSRKs|C-my6eu2O5XQ}!$nJXG0v)725``< zCxK#;iw3cy0?r?)Irdz|ySx&u%r zZzk|HS=J$(0__JmZDjist09`DQlmD&MWzS!;?RR;Wo40~`KaO$hhODY6B84<>moLg z=$v=dEV1!OP-@jWR&YGaTJPz}R8{~&AnPZOFZ*sVO~s|tBTG|kP(P!R*?3ERkP&%z#T;bLTTc?r{uc|WrK_VKkANYJ!9W1 zJp38pc{wXtHw(EDz?;X|kr%{w>W*9_f;?F@*IY-RXDiVuxa^$JIB#x*bq(MYJ*neF zM}mTB9zF#J6arJd^UwPWU9}9ffb+Y`tMk_-)3^h3k02kzT;$Wm!7R z9TuOwd%%-mB~RqlR4^jc4*K<}8!-(7UCY{2{z>s1;{pQiuN8Uj-OduVuyduw?wTPx z&F9RSvqZs&uibY~^6ppWwk+Iy<5&Vj4hgQrH~L7`yjKo6;sdOl+nWyU)@AydSq=Z9 zchoY=9DRc`$-Oi(1#n0?!MO|D8!_?5z@;B9!{`c?FTut&{z0nkpYYW6&EtmGm#2Ot zyQ7Y#>+;a-FvG|BE{_v%jggB~>nH*f6+^hIa~6^7DZ?f40fonOEq8}F9>8A}u?dbG zr(*o321tQ^su_^!arDIXu9_bcyPr`i8cz+k8algydHz3<)w&-NzQhi(s=aZumSBA^ zDc7Ssy*RyNIv4D?827l6Hc(1OAf>U!#;Vk45VSerxl!s_ogXeVeutYMf}BcJ<8ZyaGWjKT?I&cu&QXUFL9&AUMNcUte(?9F}4fevAIb z2Ohx8SSMOAsuRK>S zZCPW^hUiI-4x@<>5%Q@n1sZTUTtj30GPle!pFbSX!|YtAfdilJvp##qt7psl#1ow4 z^{H2Zg|^(VenA(8em%R_=<`D8It9$Qs89Jps0{&bFN=!Ma?MZKp{V}^4dUdj1A)Pt zS#Zjc@krq+8E=xMOgLZhd-tAi;oOrJ_md1h7&g${rE!&Qwi~fg-eFCROz^7Q?CaY_ z@}fvQkUK;Ka?M`t#+T<+{R*IAdG+?~nwyo|jJnb%NuCjx9~SJJLM3khE~A`J8fAT> zCR?`=H3)$nu|tY8w*;Rp9z8njNHv^baOSL*s>+oir$Pb_1`>ngr?xc*V}b}KD08V( z*nMwF3E?_(>(;F-lb2A71#_#un}?({;NN&Gg{+cDDp(|`(l~FIDIb4^riU5Ihn~sC z0*!~W?L$Dq&zmvlc?=|di~c~;rgJuBQJ#gnjg>lHN(A~0gP(8aR&}BJY-Q!PjyfeL zTPk2WNIe<`X{FIuNn8(Il7EHe;RXJusB3gBB2+G9%~{eXIj#Q^C4J+mBObm`j*<9c zNb`_-@$E_df$3U(`aE2IV*I4fS16!pi?9+8_fs3uo|s-Xr$n5(okw{;%_cx}_n||} zdOSDZO*GAX(gQHm(iD<1+y^uJZ1qhPO-)#uEJ6DT-K?x4!Uq%X^#FYmuvoA{eJi_1 zOwFw!&SZ*EKggPe8H7wLpxB7ayngh=QK{agkG&UYP)rbw%i;vs&MQw`WDBQ|Hys$S zsiWg74`u(Qk4e@MtybxMcjs59O9nOF9l9X(u5sx1g3vS#jYG!(Ey8s+FGy)@<=nB0 z(#2^(+`+0JJJpAeb94JP;pm{VTEh~~cG3Kt9#L#<@{jY7MfOD5P2?6=*F?kCT+YZx zPC7N}+KL0BKIsmdb9AqV@3;y!RSjRydWai0X=lcoOt1o(Q zHP&DP90uZ$8a=Ifo`1jp1bv`Vdb$D+cx z5Y|wg+w+P)a+DF{z*QKhYZoEeupzPHS60QL)lVONN-!8E>4+}_;+)DWPJE< z^svH&&wzZZGrLCCyv>hVlbxnGIYnJa`VCY42|--{z`aG(4u{pf$8Bc?oH%_tl^?DC zX9Fl{$c*3-CCz9GZG8ky>(a&asGxGy|NK`F?9$*NYuoM4nlsMKY;as$mYQ0TiG@Yo zwZJ}Q%R2zX)6?$^4Gp|7N)h&hf6nM@)<1icqoTlXbb5x#oo7~4cTM^0uVFK@+GuD7 zb=B*%|HTWvZAJ}WG&!@B#Yr^A6f!F$r;sQFTb~&{*>dyY+$b}>YP_HblB7LJmLK8^P@V1KqD%~$g1v)9m|Z%$RVPcn~aq^+Zqe>bc7{(Au@ z+o82?s%8;BaR{*H>NP*>)ksg@Gj8(u6GuDk%&^^&p?7u(VzY@_d*9} z&l}dKA1<&wk1=d*Rb^gP=1rf03+dBjd+(qAM8JdL6aj5t*YCt8EtUs%!J-FBP~#Cu z3`DVpW(iPoMra;&|HDg;3p~D*y`B1l^5O$u#C*t12YkWO@*_%5gW~m${StDbn6mnS zzKtq@lLPP@gjT$fo4LDP;GWv%*oFrNyl)3Din?+1MuX&Mm3PwG)~TJDl#;R&c1BxQ zw^L{3r5dounGavG@*`ZVhSfd^=js0&pj&mKNYC`1tjJTM=#e0eWHsE|XQOZoxq^z@hulA`wLoONAu zus2F^6_<0wOZom<|3QCr(`?!U+l$O(bMF3yo5@ZrNHY6?9eZSbGO z20EPHdGVq~dASoyaI{fB_TpzRU*Xno*5={l`1Z}+Ligsv6Q}Y^igx%YKCPZx4g31_>yyh5t>uAszFdCf%8!uxp5{*` z3~I_fxRMZl;&kdnyX@L3BiAP(B@oby3Ueg8ko1nq_lzJsWwA?vYbTEz*IK3fnO54p zdYxToZWc*~gbxR_Wkp+GkvkUb=*> zq0<9$%6>L;4pDG4r>xPeBRTXE{C`fF5x4!eaBb6G4lBMFi1k1Zd`9KaP|ubmx=Z(G zFFYvt!SX!}|LC z$bq@VR3nm#PsM_ns8+58mW;ycf_P^37+ABj8mC=qpn0hxYZ$&m=nm`b^X zB-`?Ai==y6u#qOGcI?^ZcJR}u87!L!3*Q=gtqu@v-&q+tbkoMIM87&g-TQ2h`u)q5SzrM znlHkY%23Okqt}~6MWxHD_w9Rlt;&!39}c27?|$WMslbvelppQDXiiZDt}ef=blcWp z=t0zr5>^4`mPW|;Sc!22X89(l6~$-icljKx^%vHqr?W<@BGGA7qXgDG;N4$i*`Yh0 zhd&Djb;RwsFP}c0pnfg9ON+`rcIj&iF|y_ z3+)q@sbQzzyWVLEVvuQE0SNsPUH#iv&nFVTc)R3w2SM!UwY zjmzto-+qwRxp(h?(nAf9QVm>FH1Mx=pX=7ESG(UGp?D63BLfLDb8)FN;=t${nyzhw zu*ym>60&v4ju1^tZrp|3Yc*@FAAdKk^N?=AM7a?N!TV2}F=I4qTdYhJgfVZak&Y`Y z5~;q|g0M7i*Dej8_7bEo0<_Wg{t0mZM|Ip=S#DNXmmjoOf;e)>-vaqnSD&TB(L*cC<3F1b z$~%@7ZML9zdM|kJV@Hp!<-!9zcvC%Ss-7F37r4oJ^t$SQ(f$^%A9xQv+8)xLcs`Bj z$v6;Ky6yLJwo?NjJ(nF``#MUE($Z3$cc&JvTfpVEy?-QPd$adn>L0g?ci3k1<8qrL z9jx3u+?qB~RM1z^lJDAmz$p8shSSHWB~9EzPihY2ASi-~S3yvcZKMV3oV)E)cMA}z z2}wE6($1Kma5ks;kTEkNKCk-zB;n}7ODo*ZnY2E)=CL2zu^gQ!lj*T9{LQT*hc;4G z?LuD(Ggi)&f+(fROC{&;N~$MCEUj0D5nL_2A}^Gj(~t?NBwbLT%PEAKrG+QybM z6dvOUFd??N8?*pDw&m;|))AEGO4HitV0F%%IRj|xh;Reu1C`RQ4YtN-^C?75MnwGW z;+ReA8aQ~GP+YT*U$^5{p%arRJj$#CeHGiu2fnPde+BYG?N}|tx_Z{8^NN=Bwww}a z|IM45BL4Pv^PD^A#{7Plo3zbV8J?ih>_HGq)F(MPW24WLvMZaeif%IV9A197I?R8yI6C6fOAi+Xn`vUa&v)WsuU;$?m4EvMJ);4_tfAM96jWWPWk6V(WS+z5VM8tYQH$ zP(%vXE_!iv#8Pav>NN-StB%egw}z9@ln*JpREt+!uybh9#ewVv5BRaO7awHy3RrB} z;oio@mc1&H)wWR#%6`I*Mwa@3{wPlx=1l zO+4hq)r-xL6%gM#w*oA*Q_a1rog)1 zpjmfg%1PMwOw0Pp*QAcHJDLPeQ*@t77S@!#LbgV5nAHcqxUnNi;)G;wLyg=$GBl9# z@YKy7F!=G@hrif{!BAs*PggidWWWZIhL4X`TF#l%C$PRecT6mqkjw{tKvVtC^Y|<0 zm*1co5D#wJq?QH#cjq}fJ1^7pKG>{Ho7>oRZ_-Yurlm=2u*<0KB6)-TL*%RrWiNq_ z6n=?eJNXPpJW9HY*ai~vKEk*C3W=sL;gJ(&2=~lFFqttU8F?wPx848W^?Wz_@AW^t z1w~k3;E>NF?`R!w1v4(FCPP;wD?|LO)BwOVXYT&E!d@Jutkmz`uN8NSW%+9SK?tyy zuU;k5t}uL}Bm96~(CYGfT*A=ZPiF3wVM3~^s&!RWo$er!{P>MCmSGv1&|RxS>??o% zlxj!@!C8=Ch+`++R8xc2bGe$c$Lr*Ot1I+ZOl&)K>*mA8tdBWSIM&&lzOrKdbIiS- zhb&y@^W*dR+ypk5k)uYrV?mLMA7#Dov-I7M&oq}*)PmIAL<{z%3%W8)X1`FTleWLr$&~Zn~>2M)$pCePnKKGTa@J85O(5WOm->(DrrA; z8`SAq<5xhl+?iRgO?@G5+Q^2+3d~XE_#1lVV0cM(`G*gVvyQLb6IhQ*MW90)CB~k- z6}ovpcVT|15+W(g-l&Dph^&+yBeT4Fn@NOvOkY&_2|QK2z%O3EzD)-pV;y*#mmp}p zGj^f_8`|~r^dQqq6IN-mPr2M|khW69NLK5I$W)0nDYT zfCEmO(^_Z|=vbNN$MN+wBk0${fK^8e(&kcTKnwOZ`SaLS3-#B;IO0J$nccHhE4(8> z{l9+wGBsS#rEsOjG~UXhN3+_J4Jm&Z>9N4yXVh%P_N;!38`)+FD_W$bJ*aU#e*MDt zcmck?QRY?|17{sw_`UTAh}5{@^Lmu`Du8$LDW4-37sh9lv@#SwYEyC-k z+w31~KqyQ%D?4_0?>W=l^z}-{Ot2^C*p~9tuXyu{QcDGXnXwVc{EyC1gU9Q=1%e}r z#wI2Y<55gdW+6=ClAM^HbawHHS*<`Z+R-|8qJL%I&hAhJTKf}1uam)($llf*BM8^- z7LA-fp(xm@jGVZI92<(rxp871U^riJuKV}yXVARY@6*=u{pa(RH+PG&#nScJP0=OL z-HOvdMkc_OtU@dHsd3aET^gaVSs@5RYBhKr?u;i<%*?cG3BVwp4YAYvD@krn^V~GtsxC97d85P>lw4q z(=&wAY2eEWg5e^7EAoNP9an$=nf{_cWw%cK9ijy!q{z0ZoPAL{Vn9|JAJyA%OD4FB{Gd0xcvA@o{_ zG>Lj({_HwW4vy1)YrJMwa~0Y6VQS?5#H^vl6;HxlaQyd5Ma4-TAO9mkkVV^!7Q`i_ z@ub@VV$C68`EFFA3J(}E6P|0go5zEs)RwpR+qUS^>N`oC{AobsM;H2y0dYWp1J6&i z>VhH9nY=jbwIdBvn7@>rLtJ}N$VHrQEL3(nUo}Tvb?hH?ymu-7hyTJ1Tik4N^QO=L ze!1~4ufICft9MET2}Wl{L`I*%&-z=TujR2>leGu`Lreg~j-QO0u9xfFrFmnQj49*gyr>;xXC-(^*9`5!jxT;&2kDho;Wi?jMRLPX~o|GVapmK&uZQDj0dy z4giLJ)}84Yg+;p#??nMS%}~O zZCxLBuP_`M4>a8)F17dUmsOlih80g2u=>;EJzc?MEtce`U49gH%E#3|Uqpe>G~o`C z(bhmSt!^x)OvHiyO9Yy75LS<_UFOpru1LS8tnrj+S}yB?cK#Kd`qF;oY`W&GlL%x( zQRqY5<-lxPLTQDETo%2V-fSX*GupY~;$dFmS!N88XJ6Yr^q{T`gaU3U>=ioeNY3&r z+xc@o*FIp%&`T&4j?&|q`c8lYpY?a<=?y5fH{1QKVA&kq>*T4aQ+JI;LcXL`kLTU= z^fp?XEcSn+#@tDC<1^OGDcOda+SX_48TR!HH1DFq@C-xO`Q)O}Upz|To}H&5$dT!i zV2aCnsJUwX7LFUexnrLAq}y8TUi$jIo3(FmR#f$qP4lTvMJqM6r;~;&`zgRVHDXf0 zAr>yO`fmN6tT|$SbIZ?ioc~vmzN5 z#=2b%cgGnoWinz@NlNzHHZfxIn6LcICHl4=ht|JX90XORf@g{SmVhn=!_M~eyB47H zTDNYUjgh8b%Hn?Mu&bhp8~P>JWKr7@ue;YWtG1)xd?*clKq><@&n$(FsR?Hr@6i;q zLDwEV4(H}BQ&s(F|8eNE++2tMB82Y|WH3`yPXAKEhi1+V3(%dJU)m%L5xnA=am96o ztv@xXzZi;N+p##!1xIbJy%d81xE+r^JR-49jGfBIpA`LnT>0{;A5z2?KG z@~A7XG!&<yeLigU2%!ay&6_j^$T{gS%(gVBhq{`lZyjPmoFb+`%0?F5BP z&dnW&m`VI6opWis{rzuVR-E4qL=o2e>ie1)!mgA>f^^L=t!63L&q~e7Y1grL@A7+# z=*z}H8$N&j-2B{o-RZND&%uI?qQrr$ck^@`IAiFX0wWvC4@LPm7YaP2tE;-AcS`d* zgW_gtXdS76S>lLEv)U?EXwcl@t*L&krFW@ESj5B6X zY71smuNb*ry~h#Po-)A)`>{+tp=hkvsL>*P>^5eTPWPyuzCw@(hYC@Nz3;5P@8Rb5 zUN90+)TMSu!3Jz6oDw)?=j(gxz|PMz5Gq8Hh9&km`#tmfHMxA*M);bODjZ!vkYV4@Jy z+keYJPP3=OrQq$LRerSV>ecoDd56^NRC_j@UfsES`JYm8q@3{1-1orsw`h1OQ{;fdh(&hj7 z?e9-Ip!=^VvA9K*Bozn{L^D-5^@jq5Sby*BRhiU^)&JNf^21->#^%YNu$fh&Q&nN! z$E8Inr+1vykT1(W1x3y#TJ^(1;3UOjiMA#M;|yRNz+u{21*$aD}vu+oi@H?!<}ec|}*0~H~1Q;0NXoNAEfq5=h-Jz&$k-*_<~ zjs1^Xw{FRh3GU`%%2~2tBH!c?Auh!5wl<eL;WZn`JrKL-h z!2+c*;W#J=tWe6Y*J>mqf%A*`Y&FPK5z)Gl3rr#mGqif7gNKkP-8M&=?;ltGC^9bu|PQeo$kx!`)+|s z3G~icacSM35k$_Cf+ri@qwZn%8@-qn*cV>p`yY@QDg+PTD*FZ>=q$Q)s$iioMzT?yLQv#rZBR9^Pr#f91W}v3K8I_RG$9N^ACZ)}lqev2%L;5(>z(1VXdZMPlx zIP}3tWcM{7H#dAAa$WLVa8ZDgGbyQNEu~hRQ=uwSKFM3R8^m7D(2=9J1RFO2T8ZBG4l-L6VZK`W= z8;A)U;l$>>dz-6J+^z;3mUa+%mfw%;8T$}d7u{D5&o1h}X4hLE29QDB7%!Py_k+XU zBeh$k{=Kym5p=u^^?}MJt-)YI+b%!5o|l*RPjq)1)pmgEfHTLbOo$fRfT9N3d>2B&{ko&N`3{-g^uVvq+n%Z z5b^$`v#+Qvr!}u#`&ryd9~t|G|Bae$44e`U{X%3gea~L$GT*IPB^DokKjCR$1zg{B zfsA%Cf>={SBe@{(z4)(y$HZaR2W>9zA3XWjoJ0B9_emkqRdlxjmWjoNC-%`AzQ!rK zYP;iWe|FwmQBlEHxpSg*M;nk!G4V$wxh>9bGSYD1&NUC#=Xqq{KY8>71kLD2i!t4&2XK{C8#Ou!70(^tATBOUN+JrZ9-p)`V{yNW%ap7=&_v;n zoHohix$*)dE{x;cF$oV&KYkbRWTP z_=9ajCdklx@Y^l26vhOJx;WY{^Umt24nHdFfkA+}1~+QdXjfiWN4AkqC7EdjF)MN} z{e{p67*GpM6K;YLUMq0=ufn!va-tW{hor`_cTK$7g&S`C@oBgEzl7jMx7%A_N}x3* zG>0LYqj+BU?=%`B*z)>T*eZCzPSUMEW&7#Z#&gq5T^%N?qg2nCLG;os#W=}u~2^?V-JvSk;;kzPUMzkKmR4hmD1|AkF5st5ns3gBa4uiS9V!7M!XpPBlKy*Ict+3!ELegMw!$q<7wtWjf z<^ux-^vAas)f@dM2#ngdQUmy*#JhL5AqHvo#z60CH}5aCu460Vv9%vEXwb2Ti!ZU| z5zg|@s=@l0lO*t+jzTA97@A-Vqj$DBvTRV?>?O(^GoVOt?%%&(0&@4IIhqGV=QI`w zncMKdrdC}uV12TGk*krMoqdo1nva~Nkt_0sp+JyHrl(CqTXJ(5ve`;TC($N4ym{R7 zta-Rh+EK8CPTTU~W^!@__D*^##=goBJ=S$iakTcIIRLf+BMGTCQxBxH;bRE^u{`hE z_EV?2v8#nxiGz(!bPAuVijhe2mIR?*Djrz&`5?odeKhLpY(D1s4A5r#ucxn94HoG! zFVB2yzwaT6?E4}bM!&Ti^;g?W8{-4(3GAc@NXp3xM2EhY+b@k5eAD(jgm7N~@P*Yl z>-ATl-n^RP@`VBuw-I?oMfVS@Dvraj*% zbqG!+r2+es7F*WHX=-E`8}o9IcjM2bEYFJC1bqHC`CeU;-lhf(Ic@Fw2@MIN_4cV9 zcNCYEdFAyH8MJu5X!m8lMRas@_APdTf1X`2@I5XvR4%A&7tsC0Ze(f?l1be_BcQuA zt!d+ula=Hb|NJwK*8VFrmWYk?3=E1{d9@{VN)mgSQH=sUg$A3}Ps_j{0BPVe?fX<( zCRbeSiGUaZPmRV}1_|_yJD*6AG)-;HBoDQ#w}>vAkMF8P$9R*tI6NlRcXDvJo|59j zW1Dfob_&?iQ-%Dz$fWKQmgd~K<4c$Qfi3b_rd=DDPlSbNC}zYLZOY2Y32WJP}V}ly%zGBdCSZ=Yb?S}CQRbAVTidz6Sp4ZbYgJ05xWz|=ha`|-=N2qZIG2D zF)xf*U&tM{>#aP-4g`KCBjS)Gb|Ynn|5>nP$#|G!-(**kj0LVketl+Ia2=L0+XLgd zMuFeKz{)dPi1WDsR&%P4pPzI4Z{zoHemo4HI~)Vv_;KU(+CHCV0k}j&+$kiDa}0mP&n@P0WEx`uIsW3B5L*>9Vq^p#_?vuESu;{b zK3XubyUDKT=>D8rw(PpH9`*+YHb<5Q?6d7o&zVsh5s1jdTl{BXi_#=(2&N zNx!xwRH6C%UCUP(ig(W_cpmR=6T=&yo?JSFw+oJ|Th_nMTIiHMgd}l++YI&SCw@WF z_4tH+aW#=n-PcyRzYzAH&75hOw>h-P4;oPNy+ix(1U_7r7+gxzE>V!5(9OjoQYNk{}1IIvQ;M;_Of`hn;AtUcS8 zl+oNm`K6+wBD=&C-lO0ZFV5qEhGE28&3P8ao_xofR^fN=PUInzykUmb8s+^c>%XJi zs(I(pg&tk@*0x!*`%){VcDFvd61i*?K6ZQCo2-j%F)h4~TeAtu6z6?kQ=T6M`XA%n zT!rH<^r_><+NS4c`NJ&u&!SdIezk%pT;^E7ji2p%X$lT}T)t;#oJoYb**bLj%fw9( zS-UwqLJj7JhzEyjSO`bF8jBTAgEF^r&ebQaRV4EEXjlWkefx|EG~q;Jnt9u`%*<#p zesTNZUbzHaUHZ`HABIxO0W8@CL<~sYGJ8fF=Z^z&3tH`XNzsCo?MzYwZN13Id8u;= zR*1{ixf?NZx{;B$$I5_RyF}Xxq0#fhB~R+obs-^&Cfj-vDlZn9G;x@4Pd{&PFgxb_ z`JNaR<(p9-qUw{xEvc{D5B&Rdz+Yx&X1f=T`-?H@fYh}Z!QdQd6g(|2jh2dS>n|## z?K?P4j(lH{bp7GOrsXRR_HWy8-@bh%Zzx6E`u9JVZ$0(YWc3R2w@fsyVcN$H_!Vky zTeGpg$NdJo`gc!hb3dN%W|Y$MYRgUBb{bRZT^2Kofi^(bsn?gb31^;+t~)L6Nb15H zmAX5%Nm(>J*Jx7rHTt=U4Td%~iaEHvTyG;3d}_iVgKbI>vM+VSd}&{+wpN2)hK?)X3auosWby2m zExc7-@6AOTOyh0Hep-Oy1{dc>i2c59@2#C*zf3d^Z2i#Tg6W(Co=egmKW@3*XcVy~ zyq>miA{!Yux8VR~zyQr#)2uijq-&u4nRo>J%GKL^y;<#oDTZTzX)LPaZQ4+^ zmyP*TtSX(9#9TyWl5^lJiVVq0!ipqjd>D;gd-v8lIxO;DTAIn5OHW#-cD!KqK7o3) zWTCIbdaAHwJ41!bEJr+69F4vjja7{&DU%B6ayk~lU4FPc#z!ra{!K41rT6){O$oWTUX@EHJK=n+E(fYn_<{uswpu>VW^K=&JsagD!yFENALaF= za?gIJL&qk*4AI;=yE0LVXWC4l3ZD2sQ6x>@-C|-{e=n2pElrL)4c$GozB2k7O>$_I zO#k?x;%6{z#INQ*!GyNr`Z_)8J-f=uvL53dgEYMlR4tf4AAh1m$|DE3K)EQ%9i)uh zpg8HA@MaA+<6VzBYgvznz|qfyHu(H5Z|)k^!5l!8&q{xM|85GKZ2 zDDw}~=7}g5O}41+s0zMuVUGRnu!*2VJw#Db(}87VuJpuQZak;w3#%NR`&eBjVN0eD z2Qy}wss&e4QH$b8A)}&XYHbsQv-zc^6ImsWPELtbJ(xp9G}~TXok>t#^!2B!&zfha z8;sKD!e^L_3>G#b;Ee7Gm#aTV6*vaJEfxffl>>#sHIZwGB-p`eI&sT+o zH&JiMlp)-qcw-u?eriVOyqZ+gEQ#(PnWZ)X_Jg;um^l-Y>OKr`rn2EC-$OEZ8?+nH z0QOHD?yK&-)BM-dw5NKy$cK$OD`=+ct#BT!&QWR>G`-Frf9Me)D@SIkGD~@rpFfgq zi3zqFZaaH=ctoxF;UbA?v~S%=y^t(g32#ArqHEqjvs&E7p3`=_Hw*M^lDbNEjC~r; zLxC4Dm&{o4{N$7%t0I#J*tNub1`{D)jIWQ1h&gB0(G%%9L`O(l)|r`Fb#UAlH8G+VEZVOGXZ(w4olnMJqnR$f(Zb$&(?v zB_KWZU7@vc4u0qn!4Kb;UU)FltM}eXGe<1`4=n+f7um76d#w%KB4!PMwnvA4dav@u z{{;7fsP}&bZm_{hxmt3l5r@dA&`jKD$9f&Ma7eu7*;Gv}nXk&!u9FyaF6_*>JSFYU7NwBf;vp9;zw=jwFo^P!pZ>b3``MlCGPpYq&Q zUBH{3Up~fG&G|V#_u1CD!|u&!@!^|k2ZI%rnKs!oi@(Q4&zvcE7a5@FWV%P`PqFEq z3)~gW6<{N$3NW?tnSPAg%|ThYvPZP-jl7vv1#(XtZ>OG~mA}dvkN!-@SXcNAs-q0qmSVoVk?|rAo3Wic%$Ew8X~6#KMw{w4Zfr~2 zQT_9VEj#$846dk{eBxBd)XZC9QKLvo|6nj~Lc;d=_%Ki@-Pai=<5pkkZM?kEk&gz! zk&);B{>~I#x2no7GTuyu{hwJS`{Keo9S$q_@{0nrX|BDj5wLhO< zz4x`RT?!In!R%4uwOqM!CEK(}AB&1?6#t3XA2|k*hyTVn6-gGSCb`5kPT(a;XQ4Mg z`vdexYJ|v$2y5bJ3_m|IQOUjPzL$-sFJq)Rt5oXZkHzHk3KjN^#Khxso@la!Fe6eM zn}@yXFrbBVhdSjfi8jtWKTZ5GX(+bkK5~idwV-&3;VaZ%Rp{p zhokKbn)T`1H|750V^O2rm%Z+rkvi;0kAS(JH6Dz~`P(cye3yp;G)3cfo3UbP(cuyB z;H~4YIlpO%;&{O2xY;DgQ(fMC{8&aGih&zA=aN_DVDXr#2;9kT$)^Dvt#h423n7CN ziyeMA+3ZHO4}C^#5~Q3&VrOLVozhbLI3?Q$T7U8qtMiOA(>Fb_^4v~-H)zMs zKZ>C=B|Qke^p&TT1}mNy$Sevrl&fHDGFB6`#oET^=J2X-Q&^q^7Q6}xu*&DkQeD00 zZYwpA^m$Nyhij>(P8m(7EzmdeHK(~xUXQ0@HG^}9cZCP+F+_uv-$KK{K(c-J{JOfa=8V0`?`s7|J753!@vTLs{m6;~!E-uf zG+krowCNEC(Q+`|TMAX?9j+vGQE*4ZSSp;h4r)5eH9Uq!lw6Q`>BC(q~j z-&HkZHRyyiMQHTzF3!svGtDm{I{t@H>08NCZ)9t0i;he}08l>YsW8=` z69@=bk2{ruYP8?(TyMDu{4^=DL zhOM~K?KVxW*3g+4i2j9X&i{fO#uu2eo&8dJU_wpmT)%z0-gcuTz;cwTBbn$&95qio z2;YpzJ}4mQ$W0e55n~TNESbb@8$Q&2V`w}* zdl2J~cClC1dQY5JAYmSDN#O00!-N~lMMFkzR>tOx^4C>~xZs?8-z>_XZ78`?dyk%* z=B~CAT;`oz8DBh@>d0ft598)I*U_6uv>ST4l8W_PYOUS8xvmNy(b2Uk)b`GAK=FUT z6W?C@-=V_(40fvVLZNt}GiWzv8l6WQA}3|v2gn5QwDUW}zEp?r4pUb{Y|i9nu%J%> zl1uG*72<-D^CN9*O_?Gk<4DXx3&Blf%7z3N1qPA>5GYw`illJs&m_8Ql3+^9i!O)AkuFlj#CJoa zvd%(oMcXP5I`9i)Q3N@-x_0Z_`L9ZYMYM8B;F};;7Y~l3>G>bf#o=SoCsPv(4Zvb( z4obxTL|(jjf=5a#U=Xq*sumN^Rp!OjjGGUTIzG_9Pc z%zDux?@gP=?6#+*$r}~$yYjiIr_rESLiUj>2|@Ykr(GU>b!t_VY1m^(ztnfXe({Sn z{l54633fw%dc(CmmFCZ^Ld|-XJPDry%pp?Yg5kBpXUF!Ufz*k9`){#0<-dY)|7R?& zpmDHJ*a$RfbrKhQsU%I^LM)F^8_`!A2eL9b&W?GZ`AL7^*R8x52R?T-c}mmx1y^`_5e~hHZ!{&y6p9554vQK zjJ4nUS+Y0m*^@|x@yH2)9MPNNJo%3#M<82?&r{)!>_yyz)4h5~K?u8C$s`5Bk<|i# zd?x3PPO!ErV;HPCn(g9w)B(1trR}lH?aSTOT+2cZZ@^k|aAMSjA62(gw&rMUbi4X{ zG@#qICHCs4Bi*_MqzrrTEN_aV`>Ia;TPp98bK|wX`vsm@Hfu}9i}C)=a`<#&I+uZE z=-G5)Cemj@&EZ;4vJn#%=uh zvI$Ko2=WGi1r>J0lUm&yNSo%Tt7rJKzo2Q#zk|~n8vJ)SP380JN*dmVwUEK) zPNLR){dx{`KmPI(Y)(6WWzl=~ zm7@^Oz{?xx;#$sB?WM2Zti1Uj-hIAu<>zA};TyAH^l}{t;rF+=m6kRkeoO!NpZb;g zPrEdvf@abUVQN;~%5Kyd*2J#sT3y}GhID~3lFIy??)F>8CT*YZXj2x_6EKC{jDtI5 zSm!W!GispqKmWLiNOM0a5A;nY;TzZk*n^W@FDGk3x6wtiCU zzI6QGo&OKxS?mO4vXRGA)*L*VM&x$2VyHqRlUgimecdkuRp-wQG1Ajc*H5YG6zIe}ZB6p=&bj z<-*c08x_K0JX&gz`*&@X-|*K&-`IhGwVYs%AM(cpzoqNHbgA`}TL-8&Af3_Qekr13 zAleOFV~3BA&*hQpZ}5G#YdPrN{f%yc!rELMik$9|o4UICnOV^~yogZ_Yi#z3cp91D zC(vtSnoSDv?~}YA$%epn9m{?6a^JZ76}P8D^k^yVaN1q)0TD!f=69gqqJ@&0YS#H(y*XedTqncoTBJT+*2$005a$~{~A6%nLV%&9FP z)>^^Ur#Jw7;2T}DpTR&FzPfVUQKwkj+NQ9`CY;N7{`?3wI1E;fG+K*uFZGcyIJLH6 zdh-(hPyoDB!Tbify+3;SkC*LMT%A{*{rO~!=^^gHL6}wN%^O%w%v2gUcrfF}aeDlc zxCkUe8-6Cs*ddNy3G3jm_aG%-xbVb74IlaOAwx3Y_V(Vd@d7xl7)rRBpo@!hMBpwy z6|~Ba^nI288U1Q*|6kBA#*rfk-r?`x0#znV__ezsouX&;WN~#eG;B|kNvSEhaZEdz zMD@*{{Afh4o-o_$F-bF5jjrUl>_ zX$JxYmX_Y74*Q0W^eNFdpqxYB(CCsoj3| zkf1phA=RlM!!s{v!D{O`e)ax~Qg+)8hFkVOxbg2!j5BwBqdXQhEy!&f;w?Dgd!n8D zw}95Ge5(gZk5;lHO`7FVzUK4ri4(7mRu8(=xoA|k8g_3 zCtNljl9!Uc>C2nP>1}ccEi&A4AX*u+s_Us?5d+Yz{0p0!r+~LNKBsO1!;;$Z@_UWE z_UA3Hv=q;Cw4G_zu^FeSYFJvvZ)d*mq^YH)&y(q#c+azE*NsiSgmz)(_yd`QoL}#l zXW?+gGtm1(1{6VMPEJeB9#8L8Ii@ElRd*V3;&f=If8$v7cG^10Lir6i?QGe`TLGcU z-`%wuutFkZ)-=!mgl+X?=-<%NxTq1ou_)ff==ZVp```Z)!s6fm?-4ASs6ox0QL&ARDoo3?G6q5tj#?y@nH?^^;%jGq*@DQ=Udnc3r~7Um&#rkIvU3j$Vq$)ysS|Faq!SRIKUbRMs*pATVIUa;si5XYxsN zlM@r0xf-mXyXc{5CKqpWK3^|477mY2Oc1~1uE|+h2iOvay4U5(GIhvi)MuR`u8_Ich1p4 zC4Sh>H&2?6pEN=1TZMDkLYt{c7h)PrIIY3cvVu|_7m0olA@+A!83QVTXsC(e< z)Vk9;?0l8CE&0UOg|>M&?%r)+V7_A6vSn$87(9|PqwBc1G}5Sae;xj^{`gjouHoNe zlXZU?my4oHTw+v{>SLyFLWC*cN|Xd;I)r2yJP!DZ0$;+OxI1z=hkHrN%z| z5IHSK@-($gP=Vzbtt6@Arb)@2cc8Bc-JXy4uF_&4SP&CkG3n@A2@s0 zUeADS+b%lYe0Xw_q(H6b1cq>`64ev+YD(pi=e0x;4J_#B;u7XpapA%RNyq2Q3MBY6 zE6d;FFMA(Bs=+b_WXPz{1&$4qO0VgpIu zTDJ9v=%VNdAH8fy8>`sG(HjwD<4ctT{Uw6{A3aLgqeZ;zh*KHjRgeCOxfITg5@h7M zW6e)K9>jk{?Lk?l@`4lAPCcOa+&b1GW8p?Klc^-S&&0)FA%W)G+gmPFfB`AG9CyDR zFkk>|k>t|`IDQtUIc0-}Qh#&^k~b1EuB29gH8AyhV%RCzX?lto4y)Ly4l-q1+hOlq zi1BFYy%A6S`2x&>@ThJwCp)y>#`O)x|2ZoDOQOSGdz;Tyea<6VK=mU9ucYciU5h7? zb#-~xB1S|>SQ{cuyGN(ztx8f>$W&I5YqKIyG$q}>y#*XiMi{7#ImWKLYxtI9>t24L z9%$Ka#Y|^#p|)$uj;($DAMc@BT6M~s*DYwAqJ58&89RDDL#1`1-qG{P^aA$K7M`Ut zJ&Wdk>!fluu{HC()L#F!2MaJg-qR?>ram$YqaTcFAtzApvX^XoHg5mysm+2gI+ZcB zPscr&dTqQS<2o{Bq1Th`UxF9&C9X1%U8s@#dLd7$`g=c1%#C{FgdFfum}Ma5e|^v@ zNDlL5gX-6>AMBC#2GZEBOAJ^;i3^}EgrBg2(BaA=+~q2gNo#ii3|fWp5!A2?BR}eJ zOWMJMqrpmL2N3*M0_*_#wScgAZKbcorHt-GoA5D8mObrJLWuY*c zgy(x#-4RWz*o;V0B~ifWhp>?RjrdvzA;3KFR?33LcYuyWh>371H8u54qr!FCt3Q^# zcyS#bv`7DwV=bxMJErx|+2qz*VA|-V%9DMUhU@B!orISm1z)tkvV-1EO+CuUt4Hjj zPoJip#pzJ;DAar>jX%omB)I*F)X`E?LTTBBuP2q+Y*LIL!_#4@X4yXsA0dn2{Onfo zR&z@uy)REXP!RFr#1?Xbww%y0{iUQDzjUkLXuJ0E{cL%4Ke#IHr}s!a*fQjn0%Y-Y z<(ap-J9hlcxyz2M^41KM=z2~XQFEc;GsvFnHZY0xy@V|Y4TWqMVBNtQlN?jjV(n1{ zN|*^cT1xTiu$pbr=RB&uzG_UHCHOXs`mY;^tRD4BIvEq1@p`|){*Ds(6#Ejw;Cm-L zHfe{W_1mXAGm%}#w{&*QvNrJM1L7uBV5uq%Pk3o_ug`mG`Y3pPkhO70#^ijcsG2rv zC{TH!FX@gx@KOS9L51H(Rsx3}dwDo92W+(>WEEwj`h4q4^#*8+P>i<{yR=n^tV%Zz zkCE$MiptqyJ0J6uZY?00wz1_aJb=cIlo}Qj+V>ICGavO@vfI{nS3O7BWb|6a=2t!6TB0@xMS{MyeDhy8V<;xj_VKlzlC@USUZiW=B3Mpap;`zWHf)>scI1|fFsV8%gVTA!uKF1 zLwqixRGPc#WlN{ZS?X4Fz!njGFfT7w*ph3=FF+k_KWY3g&fWwp$F+U?zB4bGB^g4- zCPK@QGL@u^4I&XmrOYWq(UnieCo=Xt*W`+fia z_P*O|+t#+$(%pSu_jR4;aURFM@5g==vjPbAXndze*Hlz-sfBdf0Q8&%a%S701iS}JIqX~mCG$o4|#^jKw|JoOUU?yJx2i_HaL+7$?NR1+x>%~~u zD`tz&FQ0v`?)$fE*O%PoJ2*inaS)rHlHTXyZ2!@iTubi`+x zFZuj0Ir-t|?}01oqw}2iId;d+3$^f2O;y*;_QH9;g%>8sNRLhEQ$a{4pd933vZ__N z5O4oNz_*!w&=?vw!ytAMvpr-&#zKV`tm^Y?hSc<6?GG)QnGaU((-T-rrOf{A?+xYg6z&we_3CF=43wcCl|u&Edlj!6e!t*%bz8 zkdMC(kl3pbCWIkvI1VXLFi)4-4K#lU(6I}X&W?(T5#uh2{rOzFv;)>b$g{H0yU*%*xY()OSVJeJ=gxnh?wvhg36fDQS=`lCU3fHCC=PYbl zc8uS)QZ{lnX_F$<#=P=0C=%LrZImyFBlXds2xWL-sxxM}CKrEMq7Vmj0~k*?D-R(=`%G?N9mnS65hz^AjUbg5??fpPi4^k{*~Py1RuX zeEY?4>y-_&V^+MH8S^lSLWpR_iZ&q^7L5(Qe!{MjW6%zJZf=OQmVfuPXDs~xh+wJQ zcGM?v5IS~Nv#?&1vin z`H>(bo(4~JR*vvfkzSo9+;<IZdqUNj{H%`o}K_?GW zxJ=M$c=>$52GP`U#nsqYv)f7uR9@`bqA^9qQn8TalcvpJRRz%JKW1fCwvtcho;{}# z^1lA~A^Z&-SW&{Yyz1z-Pni5Z)9X0C?rT$)#E9BI9#7$WV(M+eCbt!!yw6||Fe^?U zWV|)sA~gTIb}Vq>-o+Q9f(dc464a0gKd7TX!xD~PQJ;BZM`s=T=Nid>j=?fOBP@Y( zKR++dhcjYIXrG18&#jv~Z(c}F$(r(n$}DGs>$=Y`?*em8fshtq8hZ~x2Vv-|5Lw2U zmD2AU!HCFytV7m_vE<~y2Owz46P|B(mL{URbA+OxYo?mg0;2)5)6*KEv6aerNC>Sa z+efrd3QF?Zs59>_Zp(DMa3keB{oucmB$vo8T zioVUEi1%H&a;1|;Ymp=EKfxmx=6am^&ZDFx5-As2?u6bMM7u z=`oA@cUC7E*DECp(i_Qlx4loY%f74nm|aMSru_huL^8b(@Lqwq=p_$0W`fUQR6Qi1 zo7;o%s=$S|JKwi&zJFMMc^Pdo$A|}LYCaHz>tKW>jdeGr0SDehHB>in!Eqsb24oj$5D zV)=#Y<(qf8SJTwz-1giY=HK2&cO$F&7 zjnH3zD@ zbD^?Of5x|Pu=Q1fLv z`y8am{Kl4+&6@{gd%hnjf8$iO#-^-!KOGXdG71loE|Ydn=Cq&I>+r@HV(UGMrT~^S zN6n5pt9S%9GqNJ2=@s$$5*< zKm2E}a&Q=kkl<%+Z6#07`VVgZ{_f_IR{3!eMyG~7^Q+zd)7XB+f-XizT_NHoW}Z5_ zdTsT+`?=qO_pFtVN8xVuL6t!36nb)hfGm~$hbsi$YE`QBqX~W zDa0nsa9-M%d3n|}Ez(k&l8LX)(Xhc4yr|!BvBm=M421Xo* zwiGHbkzthVn2P`n#)Pu7A*f85HV}@l#sBHLqV0+^zni~k4ZyPpm0Ce*X&R@g@6A!v z;ERa7qH7F=HLb7W02i%6R3MsH%VR%1U-~x&gYD?rW$N5?H1sdg5^GO!1;l=nDS(59YZG7cr$NlgyF;pJUiW0K2viwn?s8W7Lx=`l8Z zQ(s%YuIJ(F116Z$H586se_}1^^WF>P6y|;inA8A)O)%y3$977Bp^2L^7D7|l5Go)e zPRYrc6QHv;f}s4S)00#`_lBC=4Qhmh*_2`aoT%!+OLH(Ens;HHudbu{r!EDyF5@NL zf{c^bW1d{_`BkSrEhb0fXiVT7{%V%^CnKdHg79Y(zp-rQfa)0uXyDH*afr|uwW?l< zM0{YQ)3xEmydPEm&DcPPO zK71r-{;x$}hW8(66T0uopRtKV|GtpH=8kn*OIfwRt5rO>(44Ybpdhgc_+ir9x2KSn z2-9P?h~Kg4fz*G;No2a{+PDCeiT(-NGALw9$&z4~%^W9>3>QAhLiI=&u0X!%adu$) zOxCW9L2fQaU@`Sh*m9HEnd~ViHT~pizF4)C|G;+Ko2pIp90LRG0xQIhYsSH0siZD! zU)GWI1Y~5oXM^ZHBrBUXWMMbqJHW9!tyiAL_6=XZl&ngP|9SZO4Uac-ehZoJA;9d_ z)h|YT`*m~p!{Y$~AzASSrL$bs3^-f$cYBz^VD$1?vL%w@aMY-rr2%1-{UQO>*WdcU zzSol9?Q^${yG?E;@}7kCQpL)uHA0R1+Ba3lYC`?n?CdK`GR+R7&a_%`JI-zP=klJH zF0VZl{!`TJrXlEpGYy70ZiytqrQ@IQlSxn82w|wo#B`a-Q+o!OeVBN)A$aUrCCal` z^tN)&a~~q_6?CDu!+&zv-McoswxOC88d?=;yXrNgbB+^f9_3VaV0)w15vi=`N5g&L zdHB9*YSn%6q^G?s+OTDlX;Vc1X4jd41c)W zL**a2@a~pj&_qren%yfWJ$&#W@-x!p{T*sgh`U9rz2tHFgJy^JqEoA9&z?d)oZPRk z_T|#;QbGOc@HYdor`NR#AgWt7YE-um-4YO>^J4b$i^wW7GA_j?4MUb}szRUV05lCl z1I|w~TZ7Q^XLYXqaP2G&T?O$ue&#kdLq2wkJneY;(D5UCmVNIIl6-7+(Y8TJQitTt z+M`ApojRHdn5E9^ll#5HPgT_&G~rOpg;w6iT?fFAfDgCe4UMNI%zb5h7KHZ8iM@N< zj+}k&00$DM1&($HE7SB_^#jc#X5a{nhWMpLKzq>1FYipiA|MYmk z>~&LkzPm>@tlDN1)jV2JE9SR#&73+z%dvd0O0V(lAC}xeq~7H|jly((t%1bC*xFtR z-Gu$hmHW6scn4;NH7<^Vj(vDgA>hViPNLWrZy+vTTGM-pc>O>B_kYL3{a+~7|3mi) z{_p>US4?iWw7z7GsegH4>Uizt=>yxT_x0W3(_%<`NJNBcfmuZSyOs7smcA-9@%eG! z_z`bI2d8-}i+2Vei}aRPAM&oM=#cJ*o%&n*zH1WusA9j?TF-VTnuZ43ROEDs$|($7 zd+PVCj5|q>HlOt9c=XmFxt`LVsk$;18wa&Wg6YHzFUf&(4?>I~yj{v*7_|KYx}!pPd!b1UPNx;1^vVz<#48 z`T*t&V$>bKn9O#@jnB)kNx;rNlhh!T#!Q|(`Q_|2$@gBHbZTBZbmYjp_g=Tw)iug? z9x+hse*9KCdHCHY{jYYlqQFjL z3L$kxxU!F`SAbP~rXZfTcNlQ~{H9w|V<+r()EqJ3uc=eZGTRl#FLtsuFmcXY{16** z{33o&vvco;SlET!CbOM^q!6s%ymmoX?x4-z_V^GH(exI7Y@fyb>+$MdiFbgN4tY&4 z>meE%zOB2c>m5F3(*k-UcEXZw4o5)XqevGc9M zf|d5{o!%yYnEne@Rh=rEBby052H|G@Fq~ZQ27Pri|AaJO_wm#17Z*1ZZ=>KF>D_I_ zvg`pPzPDRnF|fK%`K{$C>ij@&(4IYe)D~v+ocgf!+%9Wxd_80Mk9b4=PI`L8qsD8liHu=NP#G(lW(Xwq6wU%x-v0`OAZfpiUEB6sY5ltXmqo9eIB7+lYt=Vb?$} z)c*bBezjV>xYk^)aXr}#vB$)h!-B>yfifEz8BsJEF;vxQ*Y{+i@J5vSQ+3;@hRhXo zcDRYZiDpDmr*|k#Y-hHdta&KDv^Ay{`1QXh`|IYJ8jiM9YgXfvL3tV3lyL` zg{sC~IrlZ)Ta;Zpj&$5nM(a1#pWs%+$qrql4Nr4r-U_E(0~;?dS$np_q2|0r7&$eI z^*ETPXp|FP6fhgf5*?%_x;F=zh3GdIBcpR|Cv@`-KkL)O<4aku=@S$H)jLwqvo?jB z9?%lnR(bTdG!BWsV8Y^QX#ANYY=!Bq81$U_W&Q1yZ^n=uS7jG$=teIEqnuL&mPsc= zhA?HNI!4B&R{pe?hNh;p2Pi~w!#E05&QiUsMi8Fo6ZNRSJZ*MU@#2Bt2;qPgU3DZ$ zN3<4Z-~&4m9f{MfpOdCdn`WZh%+SiG@tW6Mpd_xLL}P%0X0ZN_)-oWhImT^XzI=Ic z$%9Tb;3Gtxf2m-2G7pzNmA-wXKEZc}*Hpa4;_?7#*!Z~7Hk0x6qYrsuOy?l{0LiAN zkak^UXOg3**YeJk(bru+9x|)PuA9X%;Qi{_Dtml^d|~3n_z56S_E53+;_1f5wzNAV z?i>9iUfg)viJ`SlT~`)MxK*W#YG>&IehO2Wm4kZjvG%Czv{64gKEjtpp_(chmpC=viNL#_*{mrDnqs$97bGl>#+ljj_(vs=heIu5zNm%lt9Dtp@c zg|P>>5W;MAP?=yT1mNzt?-%H0m9%0R0ft)BUyOmM_=zeMz&2Y~5yJwmPlsO*sqC6V z_PGI|NPe)8iHqr1i-}Mcb{hiFh5LbtYs55Vb_Yc!Re?QfE65^WERb-Cnau1kVj0%w(p4rlUVrXA@XMVJNVn1tl<)aVRg_^fE_QKaDEM~BX(e}}6L8E#|$Pl-8(AqWppyqYDe8i??S=0vg9^dm}_$Tza%zx&q_*c;b zf)CejawCLm8Jr;$L{igWh``r3*6*kE39myR=EQv6%=<|9f3m4Xp@0E`0|W`Z7UmW5 zKe=vU&%&k`%@;Hzh+$^b?w};eckhPWIdgNSd;55Z1u_1FmOD8eWBGpl`X&CtRCYRG zT-E&F*Vh3F8_k;4f%IM~U=ic$u@w-t%SX?k{LF>Lo;L1G z<5u;2p*f@BsJ$>;6fNpi(H=a*4IUntWJLDFS>Zkd(l{H-{NrL{@4+Pj4|P@ZG#IPbsP2Oo_)oe^yMoE-w#1Va{K99ZMqEi! zU4s_U{jCuF=*1704r)H#+%c!^_aO|%Q{?-K2gg@2C*c;f5w zI(6iy5)wqKPR&D;g=LqBRsdgSfQ^)cDHOT#nlaCvtzfQLLaB&vTefUT%@3_&9MpW0 zxtZB9{C2<&ETSy;^6b0j{zW%o2sj2|8P=QrqSa6VY|}irl}4*xWqZ z^EO*w=zP9MoOP!`nN}A8wAbD8i{O+xGsgeffgkp*!#afav8T&(@#3aB3)AJ-5~W4Q z8L{)*KA^@RBK}8Z3GL(T`UT-8T@ss@vVc-Jm}u=zzJK3^X2JZ;H4DP`f?a1~A4A;t zZxH7;DQ;-aPNu_DtrF{N{g*u`RfORVjpn_PT}aL~2dvrZ-^LWuRCga{ojbV}WLWS_ zB!yLpSA*9P8U)}jRe$dPwe)BkgNhR40*yTv4%<6B`^<~BRFwN$Tf2~0Xn0{}YIe3C zJ%)*kIiXLBkr)mRA3Uaisd}OhW=`wF0n_F)pAl{8mziTT6aE|f@dL=72?|yTu8}si zoKYc`QMIh6S2(iMLdXWwD52fs)n&=CJpj@>$W<0X0R16;OCOO*iPmhgF~!k+jdvH! zV+<^6CC(=?1d&-7Vh}1s-r%ngH;s~7UJ5Ong!)w+If$4Ozt5%a62>?%&oqN>Wwnaw zT&SwiH7~m5#($guSUDrP#AqGoz-Ihz#Hix6kf`{D48#0pClh11m$fid-!EvhLTCrm z7cyrI72(0e@h13;pKHgse^V9nPx3EOu|tD_g$=@xe`kJ^XgcKR8JwYYFzVUTi&w9H zpqNN;UllYc{Ny6lWoufg1Og&8_`SW|v~OhEF&$2L_pm z%fR0yuIh@FBd7c4H#g?gGEQ?d0^H!IO2RKtn1FeE|J8fb*NF#rDRwRH<&x!gUu)s5 zN1QWwhlO!468}!1z)j3ZFU)=ZY;5_1KiR3$(;1av-^Uqm3crgm`gTKo-n%M6Ra?du z8dLZX?=ikCT5MFjyFmDz@S|YDZn_wWBFr&`WEj)*&52r3MRjAB;orexbs)mu{Qkn) zPh(Cym!J&broBM_!#(RZaB4iEe=zvkKojFxkrs&Cr1DE;UaczE7L^#@a)7cwaQWva zPA4mph@wp`6#cSo5Goa&kKx3eLEkA|FYYBW9X{jn`l(9*DicRI zh*PE8;-=|(ZtDK6$&=xCpzK~e++bvASPA$i%-q#2&U!(}a_LMPxuI?^H26=0x7;o7 z)}u!jEvN|Fe$pi;+}-`wl87bIJ&ZK~d31Qs2D0eZ$}TnU?ly&e6UIei#*%1`gBup% zYk|H)+`m-;?!_QTCPlqmmXYO=848^j1Wl8t5Vj(~5*;L=O7oe2X4|%=Sd$19X!@*W zUN{*k)OrR@-jrfLrPBu{M})$mObZyk187hq_4%ipwQ;mLK!^D`4&HU996YoRvoOKT ziRqj!W5SB|xRV^TgOc%x7&f+oW|!WA6J#xlszG!ckYpnWRh8_yL{SnDi~G@=10ejN z_T(qLK?sin`t>uYcyP-k+zvVrNT`}-kORk$r*pm||IODKuaM}rGrJ4Z z34fFDy1lD}7_k2#b93|WFWjFYH7p>}b8lGq?9W&?K%RXcgL<{^rKbe5mex&D6V^1- zrcbZV*5%M7Xo%U7lr%f;N1r$sC(a5aGw>@ya>7!H%b#)w10A8!plxafy0ecEn&@rJ zBceZk5`hWcQy8gX4(ZKa5K0hX4@V&=E`)7d61IO_rf)wK{eZMXB%7O4c*NaMsnVdc zv7il>YH07J`r4LghHxGgUN5pXE6YrgMH2x(?)ABH^{NAHb?(L4&T;uq9vm3HKVfZ2 zJ5h;|M7XDdl>*`$xFJ>RStQFPqqyM zI|R;7rtYrsxJS2cLhU)Owy3js-mogk6mdenLCASwJ?EV%c}_9A!;a7>z2!h(WB zX95o%H1&Ry6b9Bq+9`~pgq%=DK@~`?a+oLSXgbcI)b8X^Td4`h;dOdoIGz(%6tzh_ zb*AIOHM1|w@8)lkB06hG7pgX^FNDk&z9!6E`}QJ;QT4NeV#(P`@MyaG;K9ep)Oyvf zUAykX^P>Q5+&p&kls~-MVxVU;WlAd!BED}Wxw>fBq3-&2OQC@(YEMr|=Mc67 zA|Q$Z#EwU|2+132J3Jx%ij*d>z9H&t0m~Um+8v7@vabN1q}Y1BW@m4o_+`NoSLIFQ zljQ2vi4Ih|Ko+8DO9)L!sz?pPIsV>?A`XCd5qeu(%33BHocUzQ`A2TA+JG zF3XzVRVuE@Y58{%{}wySzC`^r;*E%d`ZF;bHK!l z)LTNPLr%)oP-|VJ(}!Tb?c_;i^cuoMh%GcL;3`XpAv=wuh3T9TRy+97Zx^x+Oma9k z{NCmuKO13eW$WyGykhsHH}@VRXr?cVo@z0l7d?}71^F&FPE5c<7?_M$ z(XZw5{Wtan_J4qcNBBn4Cp167)p(V=(MsA7g|455&E}Zn5z!~IxEKZYzH^Fcb`92J z?&;HF?~rcMbheGg`9osklUL8W>@b};I)jYG--Y{rKRJ23aJTyTQ`&%>PvrBrlAg8B zLWfO(w-M99>P@SE{rY9Ma%BdhaKUX0kb;wTN5(^E!n=^cA##G5DR}?>V1;MNfQ=Nr z9v+BALS1K2<1fv>sY4nY@Nl680caRtECJa#;8X&-wZuWAcjiCI+8r}meYSLN5=^=n zsRx@bJd|pW{AOb~(J(7UoKc&n+`m7$!gn=sN^CfmN9_>zpH~8oAOB!H<)h-Ohgzls zTCXRtZA*{8e!X->Ta%2^Lq_~qL`76UL5{jFA=W;vh*q6s>|7cCJ}al!?7)sKid?@C zOIu5`N=wgSp&;%jt2t`W1D08I0JT^ie!!i-z<+^Ptvx6cwn2 zx_{=a5O$MLv{TY@{0S^=__7z8d-m?FWv>hHSDZ#1o?-+NpaxazO#1QiOOCVBNNncV zNT)`xY2p&$RJu-X9=Uq{TiKgzUsyCjR5F}p4?PQf@>mq>nI7}T5kZA)l{wRxmp$uo zZ`Bm*`0z7lnyO}nx>VQH4B`MMN-A7m5TjzxoigIr{MrfQJbLsO^N)L;zC4LrAIRgg{ zymkx0|C;{n``=7kMYRP^|AeeKc5$`xV?9RJK(nkUM14)dAgYPXZ< zJ;P*72+HuM5>uc#?nIwBxJg@iN#0k#O#QFsfAYJ;?b(ok#^n(h6oJl`cHD5~eH~^# zCZ85H4LDjM4%=BLGLN2M#c`wvw!hyuUT%ay0!f&8gcN2eGMmj>Lt@Ak`j)Mkaos5e*k zfoH0nykWFgS@#H;s%RC#G@l+H%S-7pk+!fP)bcu)t&@(p|NYDz$00V~@0ZPO1`i(0 z1MNeKLG%;JI(J0WRph_Vd)Oa1a>R1c@a=&I+XzIRJDWaCWSp9mVvjj*tNOn#!)&H* zWofBm2?x;Ra5J^6C9Id@Twlgp} znO_mrJv5*2SEaJ&d{8NI#5nIhJz-8y)9xY7rnFe?=7wXWn!pn{f5nhzW+eyvK|T+5 zJ#IKrUK-USRMmGz*X#>3$P`1qe;jAzlk2(W!o#t-{jQ1jAf)y#RFI(O6Tz^*y*R7> z?=5ZsucQ>r>FRDhx%I)`e8E?R3-s3e99N|Sq?pW11?vg8xJuyye&glqFm=oGX+)Xb zK0aoOW3pE4_*uHIuSAL<>L#E%p>3BjfwXT85Mv z{yV;+ZSqBW8C5hZPr>peGVnBKmS6~zwAm+wIeCc1Se51o%aD`fzr)Y$MaGBBOQcBfVB zd-)Rr$quIioqUft)^psZxyBbowk7P#*<-~{v0t3($c=>h3%+7UVDn0vszeUXChn`D zF*Tsm**ukrgGP?DTqT$Kn!B+(K3>wHTXdFZ5Y?%$#UY_5$;2?DIm+!!>*ZurYj?c( zJ(}C#ZvB-lIdW!|ci^+uB+V2gWq)o_3@BV*aXBRCV>+#$K2$(>?Eiiws(F-(XoJj1 zJt+Ty8Z}x^Q&bq>Y0y|H{L72*kfe^Yf1t`&bZrN+?s~ZXy35n}wllK~71=&v_ed8v z#YwZ^<%u;+OBP+*98?2URi^|LdZIf|3rLDN{MJ?DjeZ(k66u>h)``XdzRE1CJ}**J zjW)LaR8m6F9V=S#sptZyMQ!hVx+_{?F_xU%jB=7DOEKOTLC@r9N#?s^uM$%`LJg$>~T24Q?*0%)8QmJ{-`tCfwq(}UeEll2sGHRpy6N9}Q2|{?{VCJINf0highyeShYo+zV2n;m zSki@=MV97Wi^;$01vFzziduW+C03MZ$>=T?~Eq zTh>Mm_o0|k+i$Y=L?;ut%Aug3eK-e@h@`)@U%a?bPkHm3!xD=V=fvJrn>anl>G-Dp zz`Te&5@)A-1X=%BaskrpPh+Dq_5<6qeEFe}MeaYirt~&Ct>@ z@Xd)HQ8tNV$gZ?j|Lud_fS~obi-IR3SvIT~tM%_FY~=4gDzdcmwO$>&uHQRvg#G^2 zDs9|UKAf(TB967$SRqtwi0-T3bTU_1fFFSfBr`ic+$uk8(4}iqY`J7oTwV4N;}455 zyX>8;XBimvx><@jitn~tRY&OKj3KTS>r`B_9# zVW(EeE`W0GMc56{d{n)1!GPB5Ds0r(AL_j3><{OVVx*g1{_#5PFUP_nkOwcK8*G`9 zk}87}@i1FUox-{qW*TLjD2;!T|2kZn9-$%_O?`!F{6}Ta*sB-P-efN^R#Y(k^hS5C z^|D^p8NiR(ehL<^UY*T$X0Gj&nKQLq^VBLEfGg<`oV-z6`%1TNr=u(^z;>=Ab!uct zpBzJGv*G^v^UF6JSa&KpnNllOt9*5kytnrnrEc98+t>bdYXwCkvCj>|%|afh-+P^{ zu+}`wu~Uh>VU(f$lIpTYir)l#azvQM4PIE z0ReXtJtC7EJlYPP72nFc3w+oW^)B=J^_%wS(X1Zb#y+3Bu>YsP8cplyoq>Nc>9R%t z@z7|pVk=XVa~6&lCOdyp{?dOCyJNEDkv4}VKc0<)L-EC{nTzaae>>SW@Z`z(&A&%- zh85KR`8~Yt-3chdanmp-dUk8n!L_RFL|1-?aK!B`G&D{irr8k=e3JOQ@w2vf*vV5n zdUA|hf9W5Q)rMzF9D)<2YgfWL*e8>$y#n)f+GScm+njjzV>0K=-W`vgjSU&l^y#{{tB_E`1|-h#eRvKe_zcngA%5}1#x8) z87C63lwz%oO$$(*x<69QTXJ7>9dd~g_=pJW^DgQZ!5j#J>#rDNkX|IlGQs?&gK%L3 z5=!)dTZ^9Zy%!7^#urfiNWa9Wb5Yn~l9hjV{JQeiG2|S7wQXw;O-g>O{O>Pi^e@TL zq!m_jyLw+;^CxWI=~Fr;()pOK`^GOfSh3)lSCl*@<#bR5%1a#fVkgBs*!%?}m40K! z9Pc&Oy;OO;RIf+!8G-bLbmAhD6_$Xfsr#R^$Q^P{G{6Aj7k}sO(1?1=TcyP-i7y+m7G5NEO4|dXc!<&C6pw37^&N-n1-@Fz}UA(Mml-VzwAb#SQNbj-wW!5oSW9VITz-u01$A81lzeSFMWEAEAqs78&4iT?gK;gF*BUI*bOH- zA-@B7YBS`pHSU;ToV@Il^0mvC&83K7C9|0S0hdkp2s**I92>hqVrD(4<1T22#j935 zA$1a7a*w~>3-RklNaR$PM_SB6GRuXvkxVoip1hk6kV#Stt6?TQ~W?(-4ir~NPl@D zUYw#6MDsf?yM8GzeC&Xl7+_P$gPfT0MFxH&+w}eU9MSfQ8lNdG-uw26$AZ2CCMI&u zet<(k@uE$XrDwe-I9)>dB1R))=;-%dPBgU1M9oLFT|^}=_l^p2kgl$EO#Oqy(xA&u zSp!Mc+Xr9Uwnb${@sXgQb`uCrvg=aAI2qeeSg9<=txHfPRMwTZ8~!|bH#|N(JbdB| z{Zdm@nCUtOW#yP&umkbH>gK1l5K>mjzPo`ZE8K5nl^7*2fI7ede8JFxkP-(vnrwqN zm?Op50Djxq+lSB3VICLl8-jc1Fs08uc3IAl;sg!=EL4O@0>c`7V&PmNhiM&UjWTg< z8kzdDrGL{HURYQtDl>Lu?HdoBA7@x<{;+>g)d7}ruS)-y@#p6(-j*lGU!toY+l z#qY-f3D!c2;M2k2z-umb+}aYbAtI4N!ZABf7Jf@Fa`Ym-zW~{g%a|Is;;0=lvr_?f ztL`U?J1g(i6ViNd{)6-x%AP8=Ny1nbky4S8xI?yqfmQDg zw!11I0$~P03CT%mwzCqXC;)^?KVxV;_e_8jV#}$U&(ej6wCL11VVzryuUQPHU~E8y z7EkFz&yb*NpgG9FLqN>j!`jfF^)2^NIft0Y>9&@cgn^?%?%SB?rv=^qqod# zRco&=fBg~7NrQfmK^!d9CeQPFeKk#JH;40jOU;L(qSLN+ZU9W*Y)X3V8;jot&rPH^ z1n*{I_7HEyWS9d$-Nkt`Y<*Kcj`69L{MBYy16^OmUsTU<)Y zt@>JJmG<0Q?Ga*KhIn*GpEGMrenOYB=;-Lkd2ydQFR12dSF5f9dBlffrRhD9Mqv#{ z-gqw1*V`KsP`>&7=pHW7zZXuOIyL+a&O0)p-IYKk9&m(+sbWjvf`W?fhH>y51J;4p z6^?)dkYG^#%Ss>jV|?SdqDRVu9CKt|{7%Vl&#}hV@uKEfwJJu_Zz&J}g&}@4&o$PA z-`dNWkiJG(Mv19hfR(3$1u4krudR`6!M^tPA`5q+HPs#P=L)qjG7e-{m& zp9a4>Cc0O6HtxQ^4qlF$3}Lt&ztMLjjP9vV(1@N%B+Mk{aK1f0yj1=Co+0;1x76oc zIA3R!p|GY=FaL#BV&>{Ub#-EF z3V4G+ASS^-V(diJ@vAMUy@V`)W+kBWKy+HPn>8ghZWbS*A+S#{n&FNaQcsaOkZ-9t zJ~K3^xiIQVbe(YM#y!y{pa2lLrRSgTbKo5fKvNm0-jg~uRLFfs?DP}O_9#Ts-J76< z5w7(h7NlZr8Nk@U{KpXtp;~y_9Ro&`se;MHY?G(9%Ot!2C&T2_RE?8MPf7q_XP$2S z?Ht#g8ehOf+S*BInE7j?S{;RT3s_NP(9?|>IB zA_X&453`J_#ATd7DTXMH*3rRtk{7$Z| z85O*wo-8#PC5&*hCdvH(haos7=2O}`|F1Yue(*9;N6dioVx7RTouBk&jw84nC=8&9 z80!@iA$#ko6Fa45(G=_2N)RVJkCEEh0nL&}fqpC|u_8RrLeGKSt>2O+ zi)IA?eILBR#n zsEGH~%EI$%5O7WZA3thWg*%)*T3KE8BlM%*b_<*Mnqp|z_`yyFC9^bc}{Ha;r( z)8Kah1*U0=3zmBMEE5Y5HByGbu1oG_Dc~4OhU}+2#K)SMWI;RsL29Ibwx+{R>6Ckq z1f6WKxs9Jz{FS6P=23$oB$RnBSV*$`bj8sMBw3TZpFOVmFTjh|7EU_*?~8PGZ|LP! zi6)ZC{{=hQ-NY$w9(}Km*xA=NREEahjxh-jg(70ZiyQIEaSqltTmWy}>yYLKIlLod zm%kcL-YmvOGk66@zu@Q2Vq^>MVFMY70lGL8-y|ZDiSCkresy~X`zZnQE-zxE3kw)D zQHAf`O`tlR8}CAc&1^gB6I}nT>OMN{_Vq0!0lUloLfid}%{^aQuz>LycQP|OAy%Wa zP4vFQG@-3=A@@3?xW5r;;gOWg3@}zaZ;DBo^W^VFS46-Jse}C--WY*OOD~Z*BF87g z^#2ne{d~X6Y+uIegg7~quzKo3fvQq=R0ZZ?R7yI&abFFj9a|L()GwX(&u)aQ#3P7= zXXTib0V&Sj*OvBpDq}G>R7Pq+3YT6>zEMpTr4|D}!(@?g_G7#3^Hzt^OmOQ%19SFH z`Ty0T+nN-%#w3i@L~B+Su2ytnoLz4-r{w=FMGs^}o}$`AS}g`Rl9-iP-wqj8a$)?a zH(Pfi|7?MF^vPPmxxiWWd4d9St)8BwM+^O|EfxQE^W1%OD!1c`^YhkTVvsF*l{VBj zBoRgsUXh@uGIR?wbOwx4e@>fOYQ>Z z8?hv1!n0gR{e-@qUweIBTGLcUOh-+8an?@Vu+bjgb|D z1-P#e&lAw;*6%O6GBFHED0Pngj|Im0|5BQWX#_Gc7mi=2;0`!bFTRab|C)3I`43pl z*eCHE=%|X$?s=M4j#h1AxLL>Ey-!ta{P#}NIy(HYrogZ%nMErHl^F1r+#OQ#6b|y< z9*Gy$j&=KF!Ipy(5O!@c!CS|iAEHKAOmi%9oNp-?g9j8@kK-+7*1nMFiAby`&HHv? z#oJqdI;V&mOvs%Vtr$0^Vt+Om8aaH4@#@lJ$BxO;`tBlFG)4^B&>`hAS6ZL;kx&yB zlF{n&v@aup5>6i!B5f|D0;Q0Ve^Oq%di7I}=pF?NvokK4gsXoQYP66X#j8U@B$Z*~ zFL-h?vqX^aQ41-~8+i?6gNb30vqJO_Ug-Rf^zwMbgCFkJfh%Ns9&lgwx(@DwZei-s-k0v8K6sSb*L5jd_RegPL zATkcQcNnV7LCXJ0jI^OOq8gExumA zDF953matrg?hxpMi{g|=tFAYMiLsg>G(ywK_)w0M7EqIk&5TU#JbS`{Q9OaxYQbZe zMJSdYLl5NfhD2EO;Up!6Jw5pETd88x%idwhUD|AFCCp>Q9A_GhL@ORwF9vuCIbOQ( zYC?uZcR?EKtN8>nuesM&Dns}1!NTuGbkQMot7`L6#2ua;&Bp6kEs&h2V{f@PL23toxm?G|MphsEswGI4J z)pH@Aj3XgMpB#y>(Dlk3K`bbdPg>p%K43s4uzd1XwD1Fv68H%-4V( z9~rVB9rbdC5bOE-&%RX*Ejbl|2-0!s4o(iQwwiGwx9n;+!*1272Fuu;?m^>jH?DG@ z(EhhH`~#d?g)R{We<)%^GY^v;_S4@$*cK@s9eL1Q*VmPI=P(ek26&%w=!904W@b@) z0pOF&)nS4;TpX=72q|y4cz}~@rg#q*CDjV+G z*;~nJUv^RIaYAWzcw;*8>OeriM0fY@k&(trpV`^Z4w>}HU+_h{j~BD)N71fcPaJym8NNETbI4QwfO{cyG)FpRVMvK7Yy2{cb`Ac&kbq( z#oei@<`1@lI^)X)_nUP8{!T)HKV9^6V&8$^`|sPR6+$0PGZ@XlLC!y#YK4KW2@hGt zrVkz1oXL_oPJaYW6m;t42mVQ_RMIEKzN6#-gGR1u-gp5U()mvV&KJ^Nx~2blp&T#l zqo($kwRIki&3sR7%y}PD)zGEexY$j-=@NO*nLtuN8oK zh~3v_NX)aPqL(hndD_3Z6Tt8vG=$@;nPZjhVptr?tA~UJiv#yiu89o z;xPZ8M%?RD!h$AM*412ovS$4<3MyN=$Hlj@=_IZPB9YE0P`2ovbn$i*4Ixw>>6b{_ zzJ55d%8X&HdU|?dVtG&kb^oM9$^E-P5xC?5Lx*8BT7AwYdIx*-LHk>T!{8O!O?3|w1z=HK3K$Kmg za}8S@A(!XWjZC)e6nJueRb9^6kd|X5_n#QD#n3zV&O7hthZB96l)ZbzvaP-gQWM-l z7z)v7y|yhigk2F7)I+{fKV@2)+mDSU+SP!n#KsCn10r1b3R zm43i^AzE(7|M}J#kjkzg*&9o?32GRWI)kkzlYBqG08(Nl38AjxzSIL(WoTtve*XOV z*m!9ixuY-(B|(@)*0yz9L&d|X94ZV|zklyu-?vuGQkL*s_^O2 zvK6L4sLKoieR<@oBk#}6L`?o#}z^YgCX%JsJ1I*Isq%B3=; z@wS?6yJtK8+#NDg!B;il)Gi)#<#3T}1PLMV>UHacpc`rRNpNlkiB3i;ORC#)5l;;a zR2z930udw`oZu%x%Y-m7tu`|c>_L3b#%4}EY3x`e%bI3-JFhhVdcVi2q2S6g!BB#w z(y!hgC*ahF59Pf`do>y|o`9|c4GAANxjSSzEGy9o3XNx3RKvm1dN@{L#IiI(0-*TB zsORe5TT#pSt=ll5;CoJwuhm-PIV23{&({kHDXVo$F_AzQQ@`5Ys=MXXlms$d@hw1y z5~f9wajVWU>OK2Y$uFJ89qXc(bE*`914qi5Z>6SOP%793RI~IE88kNV&HB)@LohR? zITTtL_d_9ifOfEoEa6zC(kp!)UADdJ4wV&h2-wvc*15VilitB27&=G6WsAYzn0N*FzcQR9)KS5#E^0THLGdea;?zA^(cNaMg z%T8Z^bZ+*-q)21= z%8id|l}3+n+A=%pmg1SQ8>^c2)@n1kYs|`}ucXkn2^-v!_I$i7>*F)y}W4S5_3{t;(4YGV2}lQ6|2# z4)Y4FY4Gm6ZS~hXDsjb3NAbN|yLQ+yx3w)kJc_(|;LwpH`&4epU6;n22LAYJ+o{*M zx^Aia{_Gt4URM~nN87y^c=g-2+c~F>{hToWOWMK3#H|p^vQ2)0d)ntWbf~SZoxRWg z@uv>V)M*`8{N?qnZE?$9y#E%d{qoXUT|k>Nv*+h#?h<$7oAJpnR_{JZpL_^h{yI-6 z`&B=E&}!9$9u85UXlZEyFP$6w8|AD}kvV6f`Ne!flk_YNJMOt_ahIW_*O3c;lfQ!amaER#ufYvu&j7ycMp*=z${ zZKEakZ+(7D{yaJ7LjHtjBP!`$OilJK?AW=-;9D1*%m*bWPhMP*d^=US)tevN=Boa5 zt?U~(=8x{JdWSBuK4Zr=RatgBYmCG6#ZA4KWNo9V@a}eOoZ| zJmK_=8ciiAQ3$F1%%nytQ9#Z)_p(Dpg`^+p3} z-7{wqO`u`|6XmENQ^h0{P%q~)ppqUO4&H3CFe;#*_0sPOm4j2Vk38dELQtoYJc>dE z(#9`-4~`LFMtdl%vBv63qq|y{_8mLU-v8)c6WQ0#ue8_X?o+-Y6EMKf{u|^@o2i}u zWNrKG_W1iJ8a}m`z3kCzOLO`0TMeI;$pvpYsmx_3mzbYvZu{uv`U6mFoT@S}DIih} z265J`SzayM$Nk>9@Wjj9A$6@Bbd8}gwOg0^u{M+1plWtAJ~>2D zjEX$)uvlmVS&Fte9({Qu-RQ@ln!1QLR9rBJ_es%2R~34BTll+UqgDmI%)q}KLdOSX zSpkPCh;J*=`7DmM`3@*Ih3%+twWI*B1@53E^qZ%5{QT6;Z#UN{gT-zW84^f6UTC(F z_H16ts_h(ESl9nGRXU=%@#EzFgZiFZ@zL%ybCa*U)e!Tniycwy2j0Qmkk0Y~PM$8Ym;$3cQIxN(x+QBYFW|;Wn%Cqang~PRC zvIZXct8;!*to_0QK1=DTG*ol2{nES(gA-gU?>!BX(<+*@ptoHgsc+xRL2e0i`}ms- zLrltPns~2R@ZAUuEv`?)f;U%Lp2{v_Bpw3yf6_9$_=PU2ixjbGb zqr{g8cAX3F-`-_-_mriM!wNg|!BLuPUTrapd}H4#VYhvHb|2T(ATtNjBj%u_lV-(6{CFKR{j3fuG1Nu zwcEhY?|?zcI61y;zkXrraSgT7k*0<_wiZgJMz(f#Tal4kM9mGJzP#POcGuVbZdYGd z-79GPOoKnaEM;B~j}}JVtUs50=+vqGyf7GGPy~XsCBreJC_J{LQ<}{I+j5 zCC;0lpPj8BJFsDVM-kR;&c5I*dyNcW{;i(-w{Kte^J`M`=eg}x*!`Y!is1I(N1#sc zcP}1WV}X!TkTNx@%eJeRmPn2z!PYrJ;y^ptFJE|5Eg9bJv+w;iGTB;fZP|n@hv{-M z#*5NKsMTTf2Tg}*rxrNOyj|t@z2@ma5vS(t=-*E}uJs(l`k4%7ny0h=tfjEwq}x8m zlA*m8*DOjB8(x%ec$qgUa$TDl)8|=?ZivgtU6geH`_kNOV<|9Vmg?6pFDplT>YaO( zb7kqXo*l>U@O_(oyXMOVJRGM5-gfGUK^QN+F!qYGTPS*ZO#_07wHbq{2n76)oaM*Osg`V-9qHZtH z$T&Que}R3Q;Q?)K)O?ptX^$Q~UfX*G{j7Re{PnwX8-(VdXMKt*7t8K+U8tEP0U4PtwCPQ-Dt%S$ zw!F4tV0M(FS@Fv_@99Hg_J2*(9mX6J!jb;U!MkEA7Hzuixxk-IIQK)w=HAO*cs8A> z)gChA&eNwIz#x>y*(rIxsX4siQ2m!1i-)etZz&8I33e@c+46=pJv5^=HM~Da>AyXe zc5m9T)b4L5Y!u|%v~3$=q52g#DYxB@-MgJ%5)%5T z`ValP=#59?i~Mainb8QcjTZW}IjXBGr2Mf!)V)c4dnS49E*)UXK|tE8=kcS>&Ye4l z;)dTkJoai5pV~LnrPT1!o%{D&bo==6fU5t2Dd9|(pUm6}Hrq1Yzqu|s0|Nu@?w#!9 zX8IH5s`__Art)IlT=7LL+9j$gB9H5*tzBK=(OpAfsP@R60hiWDD|Q)9nv^iG)d3}? z34Q(bhaAmW_xHbkLFuwghK{(;l>Qysv{|&ou1TcDD*b+aL!A#PCSKDBH=CetczEE= zaupbWgX6M%gPN-&C*r=OK(Psn^@rRZn@-|u@P(1Pdnk0^rO)NuXKTu2@$)mn6@MaaFEK~A@lW=}xs6YW*E-J? z%d_#%2u(%tIs7@;T~YpDFa4k1R{Gz)Z<}ShGVXouk&`EPynel0K|x_cq(%0+(c%KT zA2w;bXvvah=H}WUjAiE+h>t7vKN3{m^T?4GOBa>R$_wdW+V+N-2GB4(Xl&&%8~8{>`fuP*vMuu>H_Dlynse{U!=jzcHna~qduCvK{ZvDGW9 zp`)&yFCQvy+oTlv76W`+o-6UMksa)-t9v>3QsWJeIlXmjlXY=~@zA6D%+wH;-p(z* zICqvWjl(-R5OdZkoi?aD(doJJ%`)-S689*y-Z5ibN$KoM6FM|oo_pmlUbKtk3KmKl zhMZ0qoX088+k1?H8lO-f#Az?qsk&`tawZL@!lp5C#Zk$;@#(sE<82mI6+JjcC4gg# zaF$7;)d9e9GQBUjZGF#eH?u^HKBk}{G-R(+Ej}07`PL)J^|qovDY7O4&*W zx6}v;iut+-tQfi&qVRDfKj_7 zCRe3Bd}wYR5xU`A?#c(7H}PoJ%riWfu*xR+tzY9-I~(zF`X%8=DighcaUa2h??b!$ z2yBZWKjGP51)>uKS|cebsp)>H_joZD=OPT6SveD9I&%r)K%vQ%@U17iLr1t*sN6>j zi`#ghH<9s@rm%2(LS)QNRW3BYzk?_5E#;qzUDq4hY?byf_-DP*~+>x=8Ixno? zUIX1YB`%Z!FSO>a>NDOKt2&idO#}hM*lgd27K;B5V`l=_^SZVDe;KzjHW?x^Cz&H6 zLr7#uA(2GpBAFunk|{;W6w*MF%9K<}QAkn=DVj(nLqbKFz27_gob#OLInVpPKA*GC z-l>1T;lA&+)^%O$TGK2BFOSsm{oylXU)tR%D&aKZRa_2Iz?7s_+1fbK zif-&%`Q&0?XW#UlDEFkl+&VXfgb{x!np(%4oZghLtc{yTrhXF<1c${A^b*bZ3bVYG z`A?4fMyTk===ds7t|?X5)a-;3RNxz~ZmGM_xv85N?9 z(a!mK=4OelgtkI98oLRZ%$v1FdwX$lac7+ZT+(Et3t}WYIT`VN^uyR&D9LWKm>jrY z{jJ}W;l{DB5fh+XPhF^$iO~YW7;ToP7?BK%wfjo~Z1;+qty{N>9>Nk@3b#S}0+b4* zHGF=_bfx-b_W4~N*%T<5@N@@<8vSr)bg- z{mCX{TwHVx8QVtZA21H-uX~}%%D9dhnYP0{ea`9*m}u2vvtzrlD41PO>AX*&iD`il zcOvNC%Vi8)(8tH|eY1a&k5t4q5DsZ{ujDYioAxS_Lc-wy!9tw@K|}2bJa* z=J;~_FDW?6+4Zor6L zSX30^u&E?qlc^_$2{u|LY!}nF`d^5dtc0kktIV1WJLl?}g(0!u`nVi8U+FSK#SNL3 zOop*gC(dF}AwR9u;N{n#K4h-wePl_P>{utvmhto@#EC>m+ele?bNHT ze&Cnh3Yx!lyLNk!3`&@7-OA2ZLYH})15Fg=2pjgK(;A^bC*o}ZX`lt@s;jFi6Wxwg z1r{dCH>9%#!K*D57zcVF!L{E2d9Z%$MbdRP@Vm8 za&pG$k=$#!G~bg~H(hv+Ed^vwouJ8!Fbz|ld1gv7a+51w6ALy#@Jx;z9X!3)CCJ+LMgMy3`t#RC zT-X=0$4a^UZu+RsQ_3Zkj==|c}{Z7r!I$uzg zbN{<#Z0UMp%9rbg(R=hxX?S?2^=RsrKQ7G7!$76k&M#4AUHciF&ksEODSYWa(&C&^ zf9JaEdJP(+knVflEi|>F?WlKl{;{j=?D~#Er&L^Cz6-A;&l+azkwYj7seyzYYheMd zJFf!U(y)LJffp-cJ)M67s4pw5B`sNK zXSa_X=$Zcg%ab-4TAS;DB#* z$L^oOpGDS*9!B_l;K4`Nmz-=($?d;>uoZ8M4RZW=Gjs!YU#>l0tC4fzW%{g=r;)wB zH2G3;aia91IJxUxDdXPFaP#zaFG;?rWts>Qo=R?f0{I=!e)OT<6X&MdR0dEm9cJGm+3 zC|G#TJ8>Q78k#3U%_2p@xT*G?)J}}7X4A=%P&%}t(UaD&Xr+@S6ybL)qwc>#l6N_Lj=ehI6(gVd%3><2*-B{06=9 z9mKE|La*jyT0N*US#bN#p^?^`%*_vVm1$)vNp@>bmwofd9`A)=YSiPSje5n`bdXhf zt>kS^@1>lRzd9xIPmyHKKXN;Pxw0CaKcT8DXhVT{dZQjy6Q@rKc&$0nEJYqpR}}d&A^SzHsmggZjuQz}3k7M9q5SIA zA6C4Nyy1``Utd#n+}wJn8xx93FgG4evMD+;WZ2Z*0h?xVx4^efd>ZNLII0w6#HVY& zu}5x#%rtJ?c=W@za`2sPG*Z}-)9juR<#Wm-rfw3JsIrnhdOJW`XIs>$TZ>84etMGUan?XBkGar5TbDJKR`4Yl+2?J665Pswg= z!^7(7Ihn07g+hvgk*oquC1!rVIgrP-YA8-lS^-&tC=c6C57|1a&6Yo9dCmZGxfMON zIdw@mCGXqz4`_dclKu<-k!H&4<2un#cQt_{fN&tcbF3WR!9vbEEkHk+wwTU`!==Ed zNH(3Ztt+Xa`~Pev7eA4t|0CymSM;*{UdYi26n0ugUid|n?i>1%4(DP}8DUO~adn?s z%`Y@=;dmz5;l^d8e=In@d%u1yYsy{r(zCTN|4Q1XpP%iA+ucY|9}_vbmDa!R*M~SN zKfY82U7)d@3o1xX{ox4E(2&Wo`g1L^lG0G|W1Ahr`*3HD26NmIxp!T5uVKQV z&1U<~g)a6AdTrWJGO0H7Q{UFu$+Sql_sR@;+3Uw)O2X?N*Hl0WJRqA>k=;$7mc3%Z z;hlf*m{Y^=z8DU^vO&6zfm%GZUpvMh;VtnO?lX7V&=g-&3} zid1>5rcW_`h-NE?4jCe;AgGGYzjB~KT=RAV8=@X)ea&IzW=*ph1t_{-PA{UwvN9aP@e|9tQ{^=+z7r%b#?Z`Ti- z>P6G!&=niUQPdqD_WbG7wqn(hLE`YRlMg|9+vB>h*pz>}UvHDhettW@728^GL?LpbER967kLay~K%G#BRN<1drxHWIMYPQzLQf$JWR;i;>jmD& z(*!4J5Y=~6%uN8?LJM2w9v3PnF(OiY3K+>z=KVsc_qk7)OU0!|bYj!~sE(7b993LS ziRkpFe|Z~i`pNW*QT&afHk%#%9l*4MFr)!k{0nuvP%CiNZZu1NIZof%3t=>x79+Kq zkvWM-08&#VDc;GFtjNs;)=wmUy7$&l#`+`2jLsw zSUv@z5oW21IRA>lnc#}i&(5H;U6gTjz{k3}RHhv6z&>XYupK74a-;%6BX9HLOBJe- zwq!PvHy~^~zGXMALZU|{(qHh**mm9&a0Csh;yNhfEN$PBzSM$ILo1=3Ug&4P58+pRUr3o}K}lKfRvob@{De=-_Q$H;P|B zBEV^yWF`mbboT6=ATupb6$RyztOMQ&Kd!7uodJ`Y6=<-V4ScKyaUssO&1B0M!%IB& zAf{C{bfUXRh?D7TmC3|4Q8Y%VC>%Zvup8R?jI%U5PQlh?Hcm zKuui-4wTv~y?-LiG_si8IzfB@Mnil6&55lB9-C5lWcBs0jZt!r!^x4e?*T^RNU9sv z$IQQCm~SUygRIrGbHS%h0S|m?U!W!|J4TOoeHtO`ArN8p-e?(dtuLHNVq0GOSQnR3 ztgRNTNU%KBW|G;5u7b+=v^Fd|#f@aKYv1$lJSNSZ+a5sji+<e5{Nn zI9s)OMSFe&p%M$v^*VX-o6cI4t6Ow@(`h}}MJfM+#5IXD36du+&OHANio``_cYXFl zJYFerxRaW?2;Tuf-d3d*`BHQr^cZ2eQ_0qDKPQ7!l#xk?Kin!r0yIz*b4ldB6L{8r zw2!{Fv2=f(f-0dCxb7vI8fBvqvd^h!G&b+ad1JGUUUZVz+2sioFJW725DQp~1q2>I zvC|H27qO7Er>1+GzY-D>KBo1Q0+*=>(KYjvJ%BP!^7JU4j?BH5Z@Ru;*fN)@v16;= zq)ZBV`CKLHOl=BKwNTfKaL!44Q|KU}Kg5*iJ25-mtxo)R1(G<_&Nj|@6LpEkBTWo` zDKe(}bprcg!C3Q9q>{mL^Sr2*8gPkEV^?diMS^n2U+3}(mWcO0R#&^xHB85SpM47n z{F`u<{YcBqLd@e(=Hk%4B(QfFB*ufNo~ylbri_d%^4i?BKh`8w|S_dN!$6;!-))u3a{4vTv;IGL1VCW5yvF%$(X{*14XKp0<3q%X+nIKa6n*% zYp?%)_ulKx3!n^b>ZJEY@I<%xM2rR$5q%M7!wR3gUSTPg4s>X2w|2+EUM}c-aT|lJ zS3I{8NFc5AIV-liyT3j1Hlgl$e8-kszW2zPdqd}!)OtqI&4Qb)&G&*Dty^Dl`>o5Y z@a&QQBth%`2TMx+@ozNgzGsEQBZGp1=5B0Fh7%vmzs8K~y!mCL#*L4RxL9VlS7Vg3 zJ3uL#(vEJOgP>akbds2um|KZh4*_nML4%awdB~2poqX|o)B#G;o5{&?gp9Lya(zZk zHa5OVD$l$**&ag(GszP34H*MXSEMiBTnG{`Bt)EAax&+S$xV!mjoWx%qiGV;UmI+@ zMYrjfe4+t)gghpvqHiO8%_#z7@tqmm^}qOx8uhT=LB3! zSZNbz$N)!k--Gm;a5L2LX8^o;wh?pB|zfYL0vMK4))4=P%O&D9{1?U!pr`5K3r-(G{GlzqjU{^ymDTzkaQ>!1=f_{;F%&t`)<8XlH9DdvJa07SvtM#IDCN@XCr0 zBu6q=1g9n7YaBL9B8ye9{D+~?7Ns3rr%Z+giKxigez*Cil$V3`-kTxmYyt_$V3sS7 zhg(LkXoNCN#1LRX4k1Pmjnyl_&fF60hdgj6o}s{04F(O829d;T8W`MYtl4v`vW7-Wx-Kv%+LKL5 z(W*@wAzpURzM}V@$bq}kCEPT69lkg4NyOWcYiNL$jh-@PZ~nT&fFt^d!kiZ`UVLap zpYGiofeVbavC%{dDKEPe83|WmU)WYA&TV0nLbcPDNmp@+&8|pAvrJ-rjnqD!nq!TH z1M2jk>BvH!jYL9QwRsi{yV002a^R;T@kHClH}HM43Kq8ZX-q$d_44I^g?$=WFn7T} zd;%nm4)~fb9%yl_r>V*wPfyWb!H}D#00<&i>)Epj-AO}Q>Aea5^y!mns&w#ezQo@- z9M?_thcckf6~H(CkykT5hkM9}ul{9j;HlPkx>?hsgO+-Ip+n0$EC%pPprOtzII+Wo zX&FN~WJ#RSqE8)1I!%sBVpz)3z^%KO<-N9UPmJCfu^ip3oX;Z<+P?SGI-^6zM$&0h zIJ~YP6aaP69ox5V{l*pj7|+^zg^m2lAemE}zZmzha)h?#BiAWCgu(D3xq#5LbFY60 zZ~oTZNdG3h88X)4*KFl?7L8y2j2J!Z>+^1MvW)Yc*RN<9?CNd(z^T}?nU7H)Ajx4) z)!hUvOPMDpqbtq*#0mBDQ$Nzinxaz-ADTpxecOo_eK#$QeXzXwD!DgGbQObB2`zC+ z>`yX@TfCdb5+O%K&a*cidiofN;Vc4c1EI6MPyj7;W$qnHF@(X*zyg!|G9WPkuDA zSU%lq#J+^?+ZPTrP;YECZZHs|=Sy-7j!DSXv-=*~vxQIx>???)xfNpkA>M7#tLLB% z7BQKfE=Gm@p#i`O)qEW`N*iZi3-EiZBQymDQYRX%#Y<%QwNg=O#H~bcYZS4za0t5> zuSAhj9IG);kvD%BUe>*7ulR1oP?fX%W<7J=4G}q(UB8C7AleimlMVTaHJH;fB)B0b zVCyEMaMneBa5`LXR$grzb6*bT>5^Ih|6MUvIk_NMCPR65F?S{B_g2!QuFl`ygtD2( z5k+J{D3g)fnuS@$n;WkGYi!zTyTpV9u6!r0x{-6xU>ML_gna^<>Br@2v0!x3ubSPE;f0s6c}n8Y_^H*MuYizFj;(V&Sf?6GckdL?k2f7w=BJ>|A- z&psS5+iFDjg79T7X}00VYmS#oy%P)99quaIf9TK-0u?>ma^RVyriSqBbg|?d$u3J= zaPUO4=FP`1Ufhj-U#~9Xe$94%&Wu5lAmKnjhgQM_$M91d?#(@ukkH3v@)YoaPR1do zKfx*gbE!|ChtoL}co&#un{-wy8EtWldmeVXQ_+!_3!M2bcU3PhiTFhZ4D#_?*+(S_pjH19+$B!%DzrPjPteBsorqHN+ zsnf3?dM>|zZWL>EPW-ywSYDvMAS7Y}!RbABXkl@&HAR!zj}200W~RV~!Ayo0S61#T zESx7Y1eq8}O!cfuCm?GNIA66%lgT6uq$+@aAyqCt!i{Y8PNxkRN>@`=9XRCLg2&w! ztoNxo{Ia*t85+qiEqkb0_UctBq6kLF4xsZ^44GuaUsH&=CRa9n*xgv~#$$WFV)Ml}jhz@8=y}u!$pppnVBCin{Jyruj)y})M58l%sjaMjpnO9=`%G=cJAKY z75VLXHS94v2&oQ9^$O|dvx}xPree3#4F8y`jH)45>_RDj;D8(aD7z*i@yy>(L}%;$ z5n+wf!I*u#+J07Wdsr6j8nmOcnO*1Se-fakAab{$(NiwerG%V5T};AkG-b+dN?+Gg zmMXrh#(nPP)b9i0L7w+b_6gDwiTT*=a53-+47?a~qH|LeS|dT^+(7_WtefuyA|j{_ zOr1Tlak!HwJBxmTBB?cAV^^KOULKaofrC0=JjoUl2~yslN6jb*7DP{Tj9x!@AwN$fLc{f(0p9}Lo_Sc z|0NX_b)<6>?(anY`2-H+lz`^>&hD2n2SEyw@`?=s!()E!L%f;RPI5L7n#WcZZ{G^d z#tUF2C|Xxqsj(1oz7_SyeA>Z9|xI35nY-oLfK{ zrr5Ivot}{j~C9oYK2a+Wr$(USJSAc|&&ObvM*wK;> zi7!RBd1hFE%wtr;GohhEFQL(%4g?bA$4AD^h%81;GloY^&$|KvA1RESB!h+Z#2}cA z@$A+w4PB|7irL0b5yIq;-e+jedKt4j^+b<~u|piMYj>|XWHb|ljgV*Aa-9tfG)%+H zGMd;u`+joFRJ{=+f|*Z7Cug%x1}+$s+b1O_kFjfI{km7^;1Ij_Z)QHL8rTrcZ2KVh z5qsShT;H}Wwew@i(oYsVDdME_x+ZZN>o3j%wjqytfnqcFozt!Em zfA?+@Zd!^IHC9jNR9h+?=KMbiv^mV>$1nj~W3Le&J>$d**AR@|#5;j+V|?oVVG_VF z&SGQn(ZzYAvGUfY0|yTlqX}AL&qB(G$-`WA=|TA74C*ny(TxtV{AD@te^iL$jf~v$ z-Jhb%|5#Hqb7eaH1>DswCTMm(n09+W2lREKA`3cU^QX4^lO68ZwZ-r3DwUVh9pZ;S$Jk3n9#rW9 z{4mSlW|tMk4`JBQ$qi3-@R(mz^+&&VK$M*gqkAz(jS{Eu2nus;s?Uw)vh2M4&u-KD-eq<+g2-oM@ba zzBx&%RkAk!dR>Isp_$}AJN*4S62%c~y3($FXs!rCnYQB(pPw99GZihBmRTr>nBkSR z?}L)*BQT72sMw(Yu5$A4nkN(fM?&f7e`j2DS8@rVwEgh-!DZXY4I4I0%FDBm=84g* z?L_`->ki{-fs$z>_*5m46zV`JlEcDr`(_Kh25{-I@#`*W@ESKYVlrt?eq zFjmgU71|k^a|EaXfZyg7!~NvQ80)#7mYozSNX5W~k~ytyA1>L_Cx6x{webf_=N0Jd zTsWn_*V}vI5@|_~>4P84Pb+A0WL0p&yzY-0S?#L7@(FSpnjaj0Yuz~V_B!C0umyxg zEV(MMDP+{DqH>Yt7Toa!#LKEN3ojD1TtPtxQUr6qX9yfY z0ZRxX)Lc8~=}a^>mYM+_U^uv7h10Pqvlh-SD5=@{PYi1OiHlleiAE<`pKPgQfJ?2S zp82a*I~5pzI<;)=iP_z~&9&~0%dxel5=-H7n02y`@0#^=f<>J1X@z%x-U79%b#+zN z{+Q2=GtO&C+u~GC+a)gKEB!x8kGzxjp52VS8B@T*b%TyTU~p{qr;lDHFbV4wD};i~ z;TWHK^YP;=8LM0WE1v<1GOaOBY+|;2jLN`C$u0;T>9{oBm$cUG66@{;)r@YtF4z9_;>}L90x}76R^|1Q@Rc6sW=}?|EtsHncx;b@LU|XG ze<*FS2!*@^~pRYNny_A%_|)+048hJ?z=sV#6RQaRyT4I)iP zUMgJ$t<==S?8azat#otE`PNc>Gm+6mfFhx-3Na1a(1u(Tw5S;Xaq1wU~93`Nle`sYe7$T2R3uBnhnPhmQ~(w2YnoJu6>ucK>L0YHzTv9koW*>8+YCP2{5n?1Y_^i=y#sfT+F>i$TosX24!V*S*Cth9;8 zRQr3umG!S+h{@mAKC2U|Xb-!QbnH^{3&pgovyRTxzAaCV5f`5xUElvToN<1;sTvm1 z_bXCYuvr3*HOsHXgz|r)J3-L?GFRY?TNxROU==T8ijdDB-fGH6hm<>Q-dqA3r!r0V zUVKBj@$*9^#y3STw{3nU7tjP0uK{l;m4bwJ!souZLOKrdntVX&K3TLWIE;=a4ElE1 zXdV-L%C39(^5g2S%ri@?MU-RNzkZf@ZEin*LWB@WfX$<;vpv|7E$hN<|7#otE||UWyNmQs)FtOkET{r@)!^dWz%Gst?*08) z{y%}2XJ_9rZcYGyLdk~)uxQ_NZHFWEgwn8XyCw^JKqjwWSaY|`yJP*@i=F6w=eSA zowzlx=eXk~|BxkTY&q4e|HMz*X*9c`Cb221LdTwLB^_}tdl_o}J*rLmRI><{Q5A1N zPS##`)m`IWd=#}}r{ZJn64$tO7OPVT#{ph%-#ccgxs4hH(>?tM^xN0>vmLHyyj~x^ zZL`fw>1Nft8% zhxWXhFFy6)crP_dmo`*GNGbXa`S3gM+J}#4?_KdOeLiLLSht3~w>4}vcHiLTCyfub zw`zST#`V-m&m=APPb!9|?OwM%Zd2sCZu<^RcT?rrP5X2n-{3Df2e~xaUz3)U{~UMJ z*2wRZ>_*mlDf4iK)4jOBK{cbx0~`Y=B|B-WDqz}qIS-}6MlofIr#lYAv+4nJ|GdwM zekX$(T$;_aZQwt|P^}K8H58Iy0FW09G`y5c|Ke#TxS>}x#e$YLx_c-wvMZm!tg>#! z=1AfdoGW-A@BCF7$PNi+7||h}`Nsh?u*xY>{4Vzt))ed5Tg=ZPCArLuoWTX}3gZr< zO)sgaNM{nmWC)t$kxNu3+Sr^jDFpvRKb-x|netYQw1=*3gO>}5&K{<_sARFZm*-#U zO>R%+?FLw^-O=-V(fkLOB-}UQMMAYMnn$RjJee9@gcYN3Tm#Hn`t(Nql5{V-(4>dO z16qcFvjyiSW&^?Zl2dzx25i3f&F(V~>kT$E!v2XWYL2$5n4Cr(>3HRXuhr%~R4^yd zP>Uh8V1&Xb3Zaloyq%`hwX4(Dm%e)JYnbISloQr$YEY_P=0)HpX zg(yD|yr^}D4wFGkFhw*rS5=afZqbD?jdsc7c73qjWgO?Whs&nK3SO8$Y4dmLShP}B zUi@=cL27DhxnGq~3AwU+EMw`-FWT&x$iFX&oFmFT;oSxT#N)(B{)~ExG7$P`$_EyY z4eW>_Q=NN;e!5tK0YxKgNC&9yJrYtVIWcN3V@Z@rQS7tLp5*>>l>TDRrp;0(z>2oL z+;3t^D0N*EAqF^_xrAjf0W_4xr&HoL4PWQZHp_b_W)FiS4#d4nCUhQvSO+Q>;T!3l zY#rqMwL0t`*|#u;$7pKxqg9qC$2O9{CJ_aj#{U%k81U`ywbrdvExeKRqG-7+47ApS$(&PS!DqOv%mCcz}8v|fe9m2nTW)b>7crlN|V>``)P`9AyC7)uj*1) z4Q?-Hs}k(;Jd&;ZTSw06-`4ci8DUC>oM>kE>F*KVG`?iDx&FY@)O5P|pu56A%i@pE zTJC$ZH7ViumCaiU?HubmeA)uq@4hs^X%`SP^gs&RL*TMJG|3htvJIc5x_7&;6#i`G zKf}M!OHq&&( z-|OZ2SYPeCcM$;R#jo#!eus)2mMHfY)q1d>=?;o!WV6+yplEjEecFXDSa&h!#sxz66 zy1D-Jpc0cAAL=y*T0Tm@_T6oV)g{50M~E5I=-iO*uTJt`uL9mUvwKT1;Cj2%xVd03 zW#c`RPm(C+jZ$R-7r77i);qO(DzGmQ;M~g{pwv1o$nuZ?KbgfHAM=P&&!k2NuH+Bg)`q*R%UXn=`no{Q|KT(fO2!b0tW}!-=ItN6zXwCoBBb<)F8RO>7UXddw55K zK^A+0*$8wwdx2FE>ZES@v8%IS@ZQiVg3zUyS98<4|C%o!7b1|No8pGacNUu?1F-27 zRU9oSuC;6L)kgMjt0-(Bx%ge;2;96pc|LH!@)!gjHXOplh5p%5I);XqgEQ|Q*Uie3 zEUZtu8;u&awY=@&1}pMs%q)9&TF-QtwD^#Af4|JSZVFR!1M3Xzd(O{tP~U04?Uwjp z7EYeNOl&SOD2%R#O-y4E!++W2<(RxOo38Qud5eBC(0V%F(k?%$CbCcnC_?V}=Diqq zp4&3M$H6^_(awa6vE!)4`nTVAZo!QJPGf9d#!BF=@jqi$J`rtqtT}Te`geI?_vswG z#j`kGxoFX9b^0DV_wT=-=qRRs$bDprQ53@}MV3QJF^r)CT&m~@&#`U#A)%%PnB?u` zlYMtDurGx02#>p49QwO`ePb+wOLq@cg*P;wg@&*W5inNMY@_Sksf&6vuS38nRN#JuUtIC5Rd^ zppo4)WBmOoLH`gFaL5564mdVN3_?*-x`nEemxVZS`X2l+_~RoVw0K)t1RkB!FU-@U z8oR@ioLRK>CgyMiZUGblLn~-c{qx-uj~!@avmTkYa~?A=T1wvwr01Jn>{KHyj0{*( z`uepI<3Lz4&7@ z&bJHSQKp&Q(sI%-n;zvg2DdUR+Rd)j_Bc7O^ZlaK7f(A6yD?Uoi%C0lUmGGLP3nGT zdxyA@KY#ZRd>ZI*IHKBH%?s4DAp@))e^jt(1i8O{-tYQ2(C1aYECGln5~g_ zXriH^Xv9Q*mqfK}_v{*2^J0DgOy&T@|J=H*QsV9ztOo(vWo2b8`A*L92JZm=FO+iv zhTq_pi)ufsDQVO{%tMbFB@CVXhMzon((L@)!@$gg@K*yEId3Z*B%u}P39h-VG);7t z|N8#?cX{e2pu4#*Hc$ut+{U9Wf>;dh=uQo{D)#_=h^ZXT-Lr} zdo5b`nJ3`H0c>|~&~d*;r5ptC?>nHf zkR>ka`#gH3+H>cc=IGoP65I}HOBM&ne>7yl5AU*G1!m4GC}xxI9HHUG{x*U$cC^jd z`H*f;VZV@^9Hyq%ks)iqQ0feGpqRN#&oq(T*M0%`>fTNxkAp2&l%in1d_+Pa$mm}m z&>>;I%T`_37hHxFZxux1!cvZ5#^pT^)}L5yIko&I0Rn994)zI4zVm#)av0%UQOt5NJ3DHFlVOU1|fqD%8m_Be0DEj#T}!S zkh*tT?0p7jeuYbVgTm*`Pu}%D5m9NRD=jIx=_=QN0ab^i3-L;1Da^oN6biwKV+AW! zeOcq}a!r~vAy-%u)s9d{%1HU6h{W=~6w+F4Dub}QA&fOTtSz7&lHF1U9*LQCZMqu^ zIoK?Q8{01+wG^@I&5;`rs6w;CVnW~rXVe0uzkx`wKo_9LcNM>XKb7`RP!-Ye9ycui zX7?z)j}XDxc+e5ndRbiV2H*+Jnkv1oE`0Z4MnKoEeXlvbK+Pehbbu=KGPmGCfC~p> zGfPGb#GxS?tpDq?)i0S7>z~PCez8P<@qi-{4uvjJ?T$>ou_WTTI0Y&H2d9%jfN2C# z^yn4<%w%%w9H$#{c(~Yg>gY&1Z;phXK7EP41uN&O@noX|-=(k8btJXgJE5x}*l8LR z-HA-yTIr9irYYyF%>G%zB=TSOUV|ha6UTBjbMtCwX?rAG_SnNOUbb$DRC_LuBEUW_ z`Qr_PCmq$*htWYEzdkrP_$vr1*4d{gNc-CVDAoAQOo?{yPn7&Zsaro@9cYE=DH%u` zCUcoG5kI*Fj81SKY%WHPkwGHw*?Pe%wtw2P7H#)U;EQ8NC;h%Ji@@KS1-#*3C&4iV zP;*oYC#cU`qNOr>$)i05zaX1;Lvry)O}es;Zd9Db{zLUgas#jR0m8PD>xBM=JmvktWKQ*!rzmGw_^j}_*vT_akKRKvOPm}#cUzY(%pRTBgg?# zNS}(*&C`|pS)HKP7zkL#?-&nXNs4sI<;%2mVIRxd`pP30e1Mn}OKGy^Re>q=5W5S% ztA2U(qKe4@$2e6ACmD)!NF*5yf)&q}g!ksBH&S+uUB=EyXpYcC>H0p0hMaS;Yt}ja ze&4dy(=_sqDc}`;niMwdz{k1{!`JnireD<%8xJvG!aB83+sIf|L_E1{pN`#DAM;*x zOXq6eQC>C0JCFAB@9r?qQQJ5BS9$NDWVG^Ycy)f26M|c_6)^#R7v9x7W~LN6)q&j3 ziYTld-2p3I5@7&yKQ*gOT{6cHqQY7+vg1Zv{=)8gtLq8x6L!8W=L3_U4wGEITBhGJ zoVemh<9z_0onj0Ztz83utRb!5C`2{@+LYal1`%^>Z~Binkpo9z=4#9C#)qs+q}yVW zV{-m4JpRSlDKY=?guc@O5rgQsb#A--MJc-(6)lZcxprJVbkntaHJ1%CeG+^R$9<$s zkD@UM*>&LZ8$^khyhbrWg5ufD-!Uqvmqlky%>xq;%--9>sX|`SC8vL?e@X3C)j1b# z=RX|yT_V46*toH$me#!`-}xEg&JJ$N2AxVBWkI74P%1(}7J9-Y#I(9+{zTDkY@i93N#LE;xNo`FPgp}iIG8x*$x%!bG=Wo)lovV}M-0$doIo8rWuI-8uB2zXvP`qXk_x2|N$B>r;)p@jYT zC|6drjjkVv=AKMjMYe0~5ld}VF~5^Okn=A$W-XDHJ$Zj|=NLl8J(3<1gcRf|nXewI zv=B2Ofs&W-ukoh?6K?ALCXd`s{MVjW|3Xe49!yCa`u<~d4NE$y|j-T_GnsEUE-KI@Wk=M`{9i@N;m2j>iV5G_z+-jGw_({ zNKvd-JvWY5q!j7qJ8YvAH9FtpZtyF3AeOk+jLrwLI)%iA*4G6(4vKF*DsE@C4Ie6( zb?VsAkCY^vmFD#vV1H+TQRsdT_n!g;X=(6d`h$h;`fJ6{4N(vUq0gf2*6JM^s;z4) zDjdC2gM2?Ume=y_qa?53`@9MNc-mNARSI=$Az0I(cgLlS@~>|OHB$9(FFTmM)GKes zRXsC5EFYP%WKfTT?L1#z3|tcR=3-zEr5;h_+0KsYyG4ytefN0YHv`?Q z*#RHsTSvMZJsa_-Tvz3{?>tg&^kV;v%So$rpC8ojZy`PVebs;6$W({d0~`7#H<4G8 zHoZR3h!TPqFo#Yhby*mXWnu34pnB6oPi$4~hz__X(A^#DOY1YU(bt;tNjCOtf z{3RdKBdqvm@C5&Su4-?K{Q{>=X1@r3WHmM4!C5+UqF1O8itd0dQ#UY{Z2$S;b)bJi z6c(U!y8wSLGudKgUR7zT6Q=;nHEex>LcfI3oDNr+;%xE*XgV0QNB|)0vd%?6L)Kf| zlztXa#l3-5Aj#IRx~&Av%&^A5g&G`*q2SEy%txSI^s5H05EEuaYImrwRCf!Q{(0^ULs^6O0k_H(I#j5hSJxQ?e=w*$NO~DQ8fw%eyeg8(dzSwr%eg#z~G2 zYt{sjVL{q$17974vQ7rxmc$DcP0496QzrcA@+TMkGb5WRDvIGujP(+xC-7p(HPdSc ze8n69wr>OuG7ZIo$SpIRi^zW(8LP0UAT^+~$46k1Ec5)^`MggO#Kxo1|43&!IjEIG zc#L^o=6~+_UES!O3f0*~QB4I{L}e=sNelI&CAyhpCx$t=K?>(ziCA#sx`}2IZ*l|^ zaAf3Dv3c*yKHc#B5SiL(5j|_7cZf4ZBog_L_jz~-c#lh;6Kis8V0VRyouk43C1wb! z)7ijEGZE5zF4;Kt7e)@RAtt!++%Ev}^!i*iNo2*%k?Lw{8Wf}O((^Dk>~`a*%TwcO zwLt>{f48%@%DQ@a=?uk}@(%AuwMcE8{8i-?E7Ryqr`La zbSnl&LF2b0sRc8e8o%|lT0x>>K5xwjF=X`>*qJ=b1u5CRt(u4DW(Agv8aXkMAwc^+*LJ&JlvI# z^{SpbsXXW|HROAT+8165bEF~s%(TG!a98fwXpuZb_5K^EzVg+26ic7B>C(YCY4m6oYolB2$OlVR%Y4bZY=oxdifOcGAF{t3g!GD8(lbMhRXS~XHvo~*s{74QGFXEtvHiTB zSZ!$@{LqMt-lg#ahHDal)+UmUH@Nn5y1wAo3jk5tkk~>~bEm&vt>LySDgtA(8y=O^ zf@19q{9Typ(+KtlJ30Eo(g#$jf=wl5Oh=GMMJxtg>e`9@j4j6{j$c&wCNw=GGZ%Bv zqMjZ3$c`8Jq2P#^)=-r(C`$}kC)h#(YRW1Lq}Zht#NxyvT^FYnhGn>!%sl@61P}p# zwFm(b*jJ$7f6;~X1%zM9Y&RpE) zez(DkSqU8v|0*e-G1$`XBBe0DM$91TDoylSOm+hqurlu9vc*sk0vJPbDzZ(^ca`s{ zo!9REACQ@PPS!bR799%My`*b%pR63{mkF6U^TP{mVL5_G>oy?Xw@s|5^Dh}bc!qOX z3|1x`8U)j|(!$v}!DNJifn;#+P;U$orpfK=@nQVLiBJ&AV1)a_wL?F=DSSW8vFwGK zipqF&TIVWaRIcoPpW)U_MXPLc;KnC?jM6zLRt45w22Bs@;(2p-Qf=VCXl?R z5;@4!7or72za@rX|BdC1eMM z8_|XiT)Lg2Pq5CU6_bpN?rwj0_tra##4~V&C_2S$W3vgOG%coLshPdhzpc;`(lM>; zH=wN|0rm*k0j8oA&h0+jDxs|+?0wMsC&VDpXU@C^9oV)*y=J)K>OfoJ+rbrpt^UM3 zEO~G1d&OIeMaI!E1JY!0x?^>~{mNg1Cw6lA8?Ea+?CQtDj&Dv*7662@s@Hm{AWwhe z`yX1Mjf>*ir&bR2TNw9g<&kgKwtm+wj8lH6!+rxLvN35aq8SRDq`6`Uu<>Cn+w2M5 z22uRb6W^*;E9;_Jloi}_l(|9FTE?ED`ADOEJQD{rWB4cXH}m76yC&b^TmFe-0b@yj zaICyD_Y*e;tX;E4Afn4_hwz?|n2v!xs@8w+){2P{o}QDB+v;td22_2#YfC|{DaZeg z(1=fO#Sz!6LF(|V;^CkBOnJWgMeT^JlEUS~?r&GMj&t_9{nzQ%Wa!8HSN%9~uITNKh0E@to z0Y9VJ*Vj+*FIAXI4uncz(H$;tavv;MZ2NGtumf3Ld#SIj`Nv(%s3%#xyIpK+Qk~nV z?T_$S)09=jwV@_^JC^gMO?oU+_4 z!(+c^tNZ*oU0?roGPWA!QRdxq?H1?B+D~-Kuh!?Ss;Uz>`GmTIf?YQ@xhQf`6A^iE zV+gTE#@$_9(e52ujqs5tVFfJbAmoX{*jJnqZ1rN@%?WN{|8huvnXUGt?ymp(%9475tLoz}%c?Nlo)@D_V|I3Wc5Id)1L+gI$v#zn~S_hF8MvD%;!n;%GoS)VbUV9={Jv3%8y|3BXEm+?xI?F zHx6#U{J+5x%i?3bk31GsFiU@2i1A^(d4oxUK^C5!aVDA0@RNpmyuS?e@5V* zMeP@jTHnjkuDN;p7rNg^d)4;SY)4sq^q0L#nkyyonh&Q^R6SG57cT$5VFOveJ}2re z@581%Q1A!l?(Q{azJveOcH=(xD7F|}(>P%K0JGI@Km@}Yzfm?Ned?|M=ZWjAUDayu zqV2_QEyjtwapJlqzUfWmHALaBE4?s#ASce>Lk`yhuQ<7U%ZQZs9B){?yFAY5&ftm7 z0#a-uzm7b=J8#vU#RC^b{`j1|O84jI?8P@1>&`s0cePjPbg{)cS&SQHxwOXl$!SS> zj<)83x~YMB6JEL=hj2AI33xE&=qe5;LG_j(v)QnlI#m49Pebq1sc^x7Z8_h`mdZnKc0#N2U#YC_^% z4;se8|dADi{Nf=yGCL47x-Z@$NHHw6Vo7P|Y{FX4W9QE_l zOwkR*enEUvvReAy0T9$e!(0C&p~fO{^AG~I$T4+o(G(0>nR`k44Fl*e<`#F9Mr^op z?T3qA^6jBQN3{G?V^vk^+0xPjuS?b~@i5(&=to#Y#3m$sdS@NQ) z==S}@h!!bfb!PTA@|0^*25pFqnxjo=(7_dBDS(b7Cf-pQu<05>cru(6&Ddh9G|q*{ zC7JC-N)A#`v&PW0?SId7&@$3DlbPUDLrk+KlRl(vaexCn&pg2IXS;n9r2j4JI@@y0 z*JaSZH0M@9ia1gLy0z#zjVQHn?T0@%Ib6NhUf(Y8Wo|;-ra^|%SeP}!0}Q;irx*zw zYyo)^9@#FRQMxhf^mXU2|3S{FuMy$yuKz{7 zLVtV392K~!hOxGLFoX$4cI3Jiv!@;kks)--c$HIjX?dU5Z#cdUAlKqiO*a%xTL&% z$!sU9+W(S%NkU~w`bAs5f$szz8;#7?K4Xt+1C3mE$^KAUy6B19lz+%6U;Tf{DL)M& znqSA<`d4l2jb#6vUUDDXpJIin4U^}1g&4ETNzsoI4+f)SLpx6{FeGgkAl*< z)^P`Z=IlH8?+MyJ@-uar;9h_K{2&Ri6r_&5J)8}vq@rS*xMNI1Mq>RlT~ik68imNS z3(!|t|0|WI<0V;jb3EQvb7y~x{mHY}o(ZqnR!-d~4q#^nqsZ-bz#!mmWmVtEdDo7X{=zYKGCEdRB+T=? z$t}e}A`@vAp#r$NJ6w*$?uf+GN_>?9Luc=VPCfo(%683}c%i!>q3nu*D?nfNe@oc< z`$fgHJ!@qDK;38J{FC23^b;GkaJ={Lip&wihv(}r!0t;#Fy4k3d?|sfL?UDrQ>Rgg ztQ|R_b!(?2r%kuce=+kr_~ibji*`MbOdsV;rA`%u4BP$@esaQSJBj4%4u)M{p4|AA z0tSx6?-XadV!MHc3U$U>P(s~DjS8T9LP)fHb>^?K|9ZqiG%X{RjLUs4h*GKjKAvI= zS3b2GMT!yv9uU=<7w+y)iDwi2(X|cn?D+Z7`YIbm1c2qk_Fq#_?nL2{xj6af%jG#Y zu2r(pLWC*+ZQL>ZGlXSU{qzQW9rx_p7eXoerdCBmBMY(<^&z#jC@*lg9z(5CC4KtD zk=P@3k!ow7cY4qk*RTK5ds_-2w97f>{*r}fF-(B6 zjU%e`<;%k_#&&-8>>0iv{(u>m@%CGR1_Z%T%jNSfz)Q;)7ydM{zfsV)z>dgf*vxZm z?2<84nN#aZ4oZI_w>>8|+xU@JF&|q!VS`e^~j|`dqHer;OAnKlgueOkwFXEs;QacN;o% zW4Lm^sj-clHybWweLjjxvRbG5(eXb0%1EU|X7-EqM;caMUJeu-@Kn8-x0NFRrR;R%?C+S$;|dh|LeEqu zwLEfiB!JIPNl6dnSJ|nTQo-T1Elb0}aY~$cjA6j=z`l7CHoB43b)JB-0h5#e7ZhZg zcK;Fy7+ZPaacpZ5>FSL>d(N#k5geo_l=1GOy*OtieaqrSwy`wR;H!9yuizbnOjCMv z10dlH53(yb)eFIeTRxhD0-yes7t$$b@^6v#qZ`ZfCSD;Ucbf27_{wO|%zW5nq ze^&HvpFI3eaLSV(jb%}W+sUKgi4CmJ2R7$A!R!z&TiBhaotnSu4meRXu-@w%H+Qf$OW1`E^Ct8Q4C7C{I4%D|S%tx1cS1 z00_z*m(HP_LnvxmjSEo67T`9lZEydEV+fkCbbWgefg8FmJJCXRf&Je3OE8e&ws7dY zXVBLlg9-@i*~WXybp9j~+t~`}5ti;yQEkv`<{v@uIyR?jlQ`|oldI!jk5g^#4gKGQ za9|~3qsBgfvKl@>(O0~)wqu`>D)Iy$XAdAlp`w_YjicHcYrWRhov}(aNQ=0A65OF-%*K;ZJjfcI6{dZAZ3A5L;>(ECHLkoK&!^&$_j`| zq0EL1!>{m9Dj&7@(e(5bekszl^lqqNy=srCaMeD9)khpjt--qN<+T7ctmMsokhVe^ zPm$;XdZ1OWI-wk9oH#4~#B40os1=jG^R{#nAKjG*PY97k*SN*{^ z2e@hVXx%W<4T=*qbshF#LCf!cK+=44ZmN3tYN$YZ4b(koJ{q8sX@I?;tz@{kzkluu z3^AdkU6hRr5dt9IMioi5N61#bVC$=x&Y?%8h!@IH1F#jCC3J!o6huVxi1e3v{*bV+ z_t0EGfkYhTrrmv3OA5gv7+JE5n}k%mQIdBD@UU%R>Q&#?1v zKDFW`1Iz99Bmh1AHx-zUmetebh+qa`WohQ02g4kgAlRr6H55K~;Mk5@n*v1@2hai| zw9xVZ`Tko_D1<YWc_G%EP`0M!wZkX!&-e?$aA0X4?bc>@L8A=D%)`m%Zm z^ubjMjOEd8lbV`Z(o3o8!xI!8`2J9()1nXsv|ds05;$^&Pq?>>yDg4k%Y>u+7z(JN zt^vZrWoqrXZsFAutyyqB{eOb#SC_=auMWjlBWtf(o+N13?g#+%15iD5L{}$6c^}eV zfe~~G6f^JOqM^_PD(3)iDa?I1`=fkO^X??{NDgQEpOUA-3!xSTVr1f$KWkAhTlI;g zsjYFsyOtE3OQXR?b8!RC6DXFUG+a?xsl#hv(fj`8*9=kw`h%C?N&w6<3DXzWzH%^7 z13{!Yz+U~X&?K3Jv*SG{CYT19P@;m4c85AtpFr<=RNTnZ=L8BGmoBOq%9vEo%f}a{L@P1QNkaUIku;!#~x+Mfy*?oC> zZvffF0bsrpU@55EEfV%S=G~?NE=-5UGRS|ZyijiI!a{=O_|M31HGf{l3hMWE?p2RN z!6XOFSZJ%KLtCVO3FTkT1J8)JY84v;Tq88SsDB-m!4c~ihwA>%qmrxV@mxIqtYi+rZL}MPSqe@m7dSYaj;S1{5l^G=x=|UBp;z-@B=>gr64Uo6p;Z%l#(J&hL9`_*}NiM(XD)&n>JAFb7X*wyR7DtCU?vai z4|**9$aMdKDx!+!)<8$GxF4v2(3uYHpM_Yd&{5mpF;(Y|5Bu}4b%YkH#x1?bjHXuTZ*e zzfK$weeBzMF3J@+!u|5K>C2*w{Xe5AkgoA0}?nC2benWgKLLl9U8_C z$}(4unp7S_`Rm7f{o*{!?lG?nfl@)@M02zA<)Ks%unNAe8s$gE#VKZXF$RxN)@S#& z{+;RT{&-}FhxHl<4Pfy&?jJYjA$H&X%l>q%5KF4I5c%Kd7i^1f*TI7ts5;lT`W^t6 z2@53(eS=A-?=nLT->?P7e?0Jn0QmU&U7HjX6z@QcTD7;3gB~5>)Qx&HpxxXjiSWh2 z==vV0U7i0Fv_gGzXXB|~@nk2Ni|En*Yv^X7^ioG;=^?0Hpu_7BqhZx;xepWx0jSd; z*6B8=4*o9W+kW;S zO4R-lwPBNgXtIH}hsc$Sn-5VTlG}7`1F$pbfa7w~wt`b90h(I^&b}c4_Q4j|0R2yw zrILZ~)d-o1tJw27)Q3jIZkiC-C*V#5r7Q6pa)0~Zov5T4jDBB&0z?2Tz@g>66e1uz zJ+r&A10-3L@r443z_W!n(@ik>nzIcN>1dKEy4nJ`1`6>eNZg3Ato*}p0Z?FQodyO5 z5`a1x4RQs59?AH;?<0}__{i-96vvQ_5x}dmq?xf)H+}ZJ{rn@ z*WK9I>-xc2snZ6!v8;_n8bED))RpwB!QWnV%*lTptGsg7J+jFMgp-aZW`s}@30k@* zID|;)zty~8)$0j}6epWY_Ip9+5s%72Z zVKQugWhQv)v4ZGv$ie=&)K7KK0mxFNVqx)xhWiEV%j)T)0*pi?Ix@F!hv-cKou7^S zDITLZ?t=_Fvd5Czfy<+ApDcUL-?(o4_J268iIH&IOnr;U|Ncr+f&}l>dHae=vcYa> zdbszp*m5-K3)Tc&`Cq~8WRSUjsr>A8%8wfKz_rZK`Dk%BYjAb zMN;Cwnujq+nCkh~!MWY6Bf7DpgI>A2wrix^r8nr?*>3;x4N=K-49HYM;h11H&z)Rp zw{CL`T3Ya#@75T0BXgdoMjV&+62?4SA+JN=du}WM6&3c#B@K8B)4PN63d_?!Ci1lh z!~pGuT!?|MUti*p9Nh{GTgp8gIs7%6cPJodJ?;$6Zp-7VkC^@3DXM`2rFQjXd+BpF`ujL{n&78Rkw5 zH>9TU9aU{-I*^7_yS-qM#fMCz2*LgCWqz0Wj3cloKlf%013qs7$B$NO($m1S!Aq+0 zP9Prc>$DWsAM4Hf1))Bp7JYK*!RJV}2aTWd#|*lyoYQ%sKvl4#&zGPTVUCAOeIGZv zR2&3oUjqE`XtW0LlE+2gHg=7ycO_hQV2}fZPVWq zl84`SQF_3p+_=5O)V1O5yN|(uK}w_7k?)yXDKGekz~<;z@;*etghmgfg8}ABI65#5@7=$Z3<|H!bVv%8503bQWGell+IXqX>kXH+N(D& zI<1_hIDO7br!0SBG9#+odH$mHXiY!_Bye6N#?*Z+d0cZE@AKqD<4sITIYoCEIBr7A zdSZDwPw@<#b__e`3ZRJhDO1+bt@I?4so$|ZY%$v{-cW!|wdNS{yw1v6=o#X+{Kth` z`!iuZ3l`xiB5Bwn`-YA;=LMAB@)3bgDd<}ps`rnXMJ{409gm5@?*u%1u@(nxI@h#3 zhl^-|_6L??STR=&d?I=X2#IULYdoZ`UorprojN4c&0w4b{4M(thn?kyMDem;i{f%- z!+3O2U_XQy_5LP(y-nof z1!8?H4CH{M4IXv8by2)?2jy)1LN+e@$YO)zFOgdIq&J!YpkE?1d_=4o3%SxtG!!aE z1&~JwO#wXcM0W?%2h^?}jq|JbMF>!p`rOYVb~w19F5xpS1-HK>sXY#3OVWS#EK4ox zP$W9v5B|a@z*R#+k6qUhn~%YO-;zsSrPX47Pu5Z0X{N@MO$uO&n+aC|j z`ch2@o(|X0E%xUtKxxlH6KZ5==v6RPLm(+>t?@(fZ^QX0@A0j`SWT{9Q|#lt@0GDI z5TzP;lPOBf-&S{FJ15w7aVSFo^9!m6^@jq$tr|u>_L7p$i#>muKbYhxeq-Fzfa~;! zE}kweq|*ADkhLzsxY36wA-vo>a4ujY3ChY+N|t1VnTSSh@CNoM#()?huRKdR zGcz;ryu@c5OqV-%tO{)R_D{tt55a{1?9-pmk8pO>fSv<`VP#FqIhdAA^!FD9>QId5xJ3}j>*nQa-Y7eCx07x0g{q8CO#a7euvp$6u}Rzt2c&h#>f%mTDmy_IE| z)6$GBEP~)vo~80iu(_{^^gWyT&?(tWC{^$w0Z(2@>1op9d*te$$;pp)$eyFRvR=ED zZU3L`o07+?a|#CIl&f2ekyeMA`DrS7y4ze+1O#|ME*XC|6(9w$=j-Jk1Q@KpI$c@J zCdNQ++Z+O*bgddu;(3sBe88ZozxSi5++lu*j{H3CWLsqV?)I=J#tVAaoZDuCPx`xe z-;ZNPs@=#(D|h_VE~7PU&rl9E$iK6qwc0*1J3z;}jL5jmyjq}bT!e?j&l7!hsFtQu@^s`0AFCbgb(P@>VhbQH05|@ai+JD9yG1tiFHUc zXOyA&dsnuWuEa`yk0H{t^z>6>hX`||qTwT(z@CWvegTqdBiIot7IU%~uf*!amdTO= z&QQ3?hHJ0<=f(~<+)E0c)f+?7r~8o$ZKnYrEd*a+A}$fVVj4Od_1xb@H{t0xSR_K1 zrV+#kz_7b@J^X-Ar)jwIZj3f^3Iq9N-xfQP=C;g~e@*=fxFvPZ`}n1C##@E|as=MQ ziJ6I=VroAsc!`${U*jE>0LjJE5^bgn67&f{K_OD{++?SNw>N%BN?NIaaKEXk2}&>n zwV2?S9xw0G3*%rQ(KNGMK1F`R9OE^KRL_ zEHC1?+31R=C$*BM_8Yn_gB2#U;DYl`a5>L9@9gzCac0@|OGQ5DW^_A~svTQa_5v`h zvQ?ljjokK`p5EaT?A+sgtOC(-apE?oFopwNqpOT!sJAyn;Q+7!_T&t%+q=ZwN&fZU zzhj%UzEtU3f<#fUo(4A&!V3Z6XtoCC7xWI!^1BPdLCX-rFlr8K`n9UysNh{wBMF#F zplH!7E6?&3%&(tCe54zU!9cP`Cf?ZKPsed{7#uY|#0P|3rLWe0mZ#-qVuTeVR}Q&y zDEOKhhpkzfD1D!qEieAzS-HJ*W|kk`74nlI2q0CJE?AEILFSPkb%&9G$7YeKNs+;wOb%AlTRWMl-RBy1Sq4c#kz3qP!Ioys0( z>147T9Gq$ddruPDF0c*qZ83JRw{Pr>my+S8F%pi*Y&!d*>Un1K}hqxq3yXmaTuFlk@cq+;luq z9;*@?OG|H>E5~p2z^l5Id$#k-hcj$PeCIKrVEa^C+hw{wl9L|%$bNUcoCxerl@f)t z&Gt`5ZuC9&S9s>;G+v4?08X?DyaD}Je{M0c)2D;S0>=-<((c4|iP&#n#6R_i97u`~ z-UD%izmVe`h(~Lg=$kj${Zn*omOb0sMIU%@Dn+L(54_rMK74o%EbDtpo;*5mn1iwY zG=EL2cH!`n=Xe=`x*6AtE=?(t0JnFSf zODlXlbFTAE83wHUL>%_wN*kfs@a0BkUJC%gH{BcPt30WEVK(V*Mg(Q~MJR3>T3F!P zXH&mZ9gSC!R*Rmt69wzR)j#tBAiO2Q^b`%y4q2Q6{gdLQ#M?9&ufERHsseXT2B+LR z6=;mK##Zlf(4;)K``|ZLUEAlV1@+wJ`KAO|=H=ur=@}YQK(sFS5(5${{%5QR2T<6d z|GeJABFK?aWYk6f2+De9YaV;lgvAuAn1w}yNLUd>Xv4<^YY|paQ6jqvrQrzxe(-~u zPs6yb9~mM3tqLFGq*-3klWkfbN;{z#l~La`c;@%-7>ZEQHSeITixKUnP=Cp|A3V8O ztt|JmaHg0Mc2Y{p8R z<5~C(ImjWP+!2C278K@E5qi$54Muvn5)vN&X1AQdIEIt+*3cpez08H z62b>pBnZZKo2mOG89X^M?|ZQ6f786@PeJ|j@1Yo+REm@GR$jgaI_}tz%2q1dPFo;H zYM)K_^l66$q-~x&RH>ry#Qv(2)bk}qVDKd;*f0|%YngMxFD+)%Y&Esg_@Zr7-CTb ztOC)S4Ufl$h0+AoL9Rp?PzzU;%6^L@rtXl9APEX_%~-ns?-O&-D$&fPl-W=jS+o3b zJbUhuHH-WWcb`(o%tRk)x_sIxz6gv%aJnvL3}}gukH5jjl|*vwZkfq*7@FsJ;7imIM^KCFDCRAtX-#q@PhhDC^C>mN? z5*aYi&VZR5D98HE5f!b-J&rmVB=vBHm)zwO=FNz7bfHH8JLGI?scC`sYYC%5B*=ID zwYa@AGN@sE#G#3DX~s8MBkOv4&c?*_Qv^2!h4ywH+r5P|)H@?U!3cnD*j@6rLM

q!pxKKs1`%1Wmt&Q~Pn`f;?KOT)*8 zlYY0H*QYsu^X}q7r%8dHm+8e>QBp>6&)tg}11%!pOShDA zpuc<{RcReQu zMc1xNp<3MiZM})Nbqg^V&*2TX7}I(!PG#a^U?LwGmKwM zcApslgHheY10>gs%huLsCCo2E$%~Puz~$B}WI*G6_Q;-G>(^A6n4ml>*+4rcX+=G( ztE)$x!F%_chWlqpo@5^aa%_IT@tDW)~b9{MDOZVEhl4nD zR&Er%zcMlT2P%Lnpuu8c!01nef$=Q{b0?NNFx{7Ga&qkQ!g&chQmZQWU%EdT@4hLn z>td{o9=Zp<#BtwDkcnjtvXUo1THoK*5p@075u4l8nf$16xRstugIj*)%e}J#uG|NQ zHjh7sgNFFmHY}L-zZt-J8vX-y6hWEIv9ET~qsJeUpTmsfXmOtj`SI-evl|wQ9II;& zcA7(DKYWZGt`M_5xL7q@8klp38q~DsYOTjp)y84?+au=PpnToDkrBenNy_0?6t8%WTHY=fzFv>89+TKWhk?$>FnWvM8_6kRKHzEASXT_1eKcR4Q{v z^|$B7IbqDx(a(%z3vLZRGKkq=Hg&}0-EWE--Nn=yAdEK_HO8LVZcD=-yO5498g|QZ z3e+N_`0i5X47zV6dOmqSirGkCv>rbqfHFkHeLA0^w$ys~1zwN!$isx?<@J7rb{FbORR$dk2L8{st&P&nj_%&neg4IxH*{{e)CL~| zh8Q^TL%@8iWi!~`Hvg)xK_HSG)YTn5@3Pr}!{{^BdXHmhti)dUV{UH2vx(~>>Un;2 zQeQh?HE{&NO4eL2wPOO1)9SWmC=**40cLl6bwG;=rdxf3{KgvJCX4ykx4!U%ru4w@ zPtU#`Jhf5gAiQ}qklQ4$tNNR0Vh%uzCco+%|a)TAD^kgkTMKr4Oa8nEs)7wpO{t`O6v~yf`1c&(^&p zmAM<)x}&N;CF#7Xtn_A&3RXyzStkua6CE*D+F#7hCqKySGTi;7lJ)Qh4$v^X0jxpL zTMWH{Y0DQF!=;3+h`D*A=8z2VbCv`pV1O^dai_ib5Gx_}=B8b8R!07D>I)?{E}twr zbMwa`yVoz0oF1?Cjc&(AH#B91;7T$X0|SU2K!CyQh~~#bR2D#=wT%r83}a(fMbRs8 zP!W7Gb_O77T#SggCeji-#Xf;FG6B*8_6uLJFkcgd)!oT4fV%p_=hOJ83t?ZlHp!)Y z0#TD&Z-hgxZY>NnMrTW5V;=W^@D3nLfNWHHP+;mmA?jcz(fUVJfCU;| zFdUMk!kfZis#A=UZHhTy$Zr)CNa>viRip$B2y@!M+ddxm|U!-Wft>wTIEj*h4P z=IM;YC&W)4RysY7RaR2;%Z|59Z9%sRxzFh^B`_(E^3Ov)sRS4nhCtKHczgv(fg=T< z+S=Ko1N~>?wX|N=qsZsW%Tokix1yp~v>lzC9=IFijRfM&jm=CXZ;U9#Unc{Os`zK* z8`;-4*ZlKWD4s8GR2p7(k?$*HReF;tK`#H;*?)3%~=I_mcfUi~wjl%1lN}?x~ z_1ps$)+oH!T;i$L)nX8DU(Er6M*SN1;G}9b-Y>7mNvvfkn5Ekal#F-{9an!DfL{jz zV*d4r4gmp7=vhh06U<6tiM zvU*P4am(F|&}2BTU(S7fe-KW0&$j=FGKj2#;qwt09QP;jVnXcIA&C|O%*7lQQ>?2$ zXX)hgoIY)TB)0{e6A_06Qg}f=<7vJ>BPEO;HOntyhH_2M6}2QIw10yuRWm}M2FmVR z0X*1#Dd+Z&%RtupJb6Rv$`!JK{QdOX>g4itCs`fU_p443ol^M;&{f%M{qfCOB4ObH zT@w!L?}(&;q_&)nvOM3u^F)5v1LMib$>@cX<3PJ6>mwSB^!~QwuH_ynI3*bU{z&&T zro*{D@hx(a_hnY`tF)w~`KQ3_D){BpcjQoG>IR$$_YiT4bcHY=a|w4PiHA#6B8@FC z7l{uCzgrEK(~O7H1+Go8rB%tgC?)P)z$ah7Qh4ML`N95LpA#Ye=JBaU_nT=CGEad^ z94xh5Jw=-2eYu*NX5w&v#}O%*UmYfGNRNzSka8U?La%xJLN6axwJDEy?7925M`ap~ z3=)B&kF3j}JP4J=4h{6A`tqk7JB7G{@IV#}7=*0GQaE})8F?`5PBFhtCTl72s4Y}kZc{FL<_R9!^@xbwL7q&>zFh=gdE3qd4v;0ilANG1 zTjk|Q!8PPwa5d;vg8GVVr_4K(%P4#U-2)%1=dg;1;JP`k$hU?ql`uXmP(kn1^;LGZ zdvVbw6%eusO(5vrl(rdn1Vd)nX?yKj9L(v{R7HB-z{`O_!^TGPTc9udBR0O z2?pDdj?o`;zMY=7a>rKssstxth349?9xT^bFN;A6Fzm_yIRU-%z5S<`B18Z-OBtTl zoLK&$Q}QPIH7^2~2_aMcKb?u7AiMf_Jh8T(Hq3j47RB3lWz?qc#NGO8Xli=@Pd^_D zQmLvEPmZ_9!lAaWjSxW_E=Ex5!$XB9WZ=gvJA}A}?5w;>;eEwScD1Rc3gTZbn-)$w zq+WqGxM2$U1zFiSnHSU1XX13?&_LFc#}_>4JG71H!ZV{-f-n+_hUTWEXX&1Zf5eUq z#g*pvsi=rAl|7;I!O8#GS8PTzlLzN4eGt-YA5vBcB01y8QrRy8ky^NsNw}PLbkjaw zg+du6|GGGol-b?_B+uhs-lePZpbsyzT>}u2Gp3B?EFE3lNW)tJVz}{HauE#q_%5$G zDHvQit!SmBaKHJ+M+i$2*0UydMgbq6?0@N-#54`o0Q9B54z{lh$4fsyy5_AfXA1j5h{FV z+88rhDttLL=zmB<%M)7oY^l$qUgR_Xb>ovWa%0vSAh@V-yyQxIs$HImd5!b_=Xh26 z$;@GvBPZQ&cz5NZ$pJ+~?^pJ%enWEHMf}^t7t7qe%iSWb4W>u)QCyM;oPI@a`g%`R zKQ&yHaV_dAg;bon>B(n~I_cKQJwDy6>s_@>LrsMErq=B%wk@pSHw7HORu1u*R&{Gj zyeX?c@noh{Kas1jJUD1QtYr^Y&IYYKBg0|+e#P~1bn122V@W#xZw1af%M!TW+Qxcp zr-PxT{{jv?^=*TSFVCSh-|n+Wq*{1-%Sqb3NJ{RT=9zuCo6;I?jHYCcGImQ`(u(`{ z+5h5Qj1|Apze~YPNYOsVxe&yJ*kCaS93UjccGn@)m0vr>sQZFG*kD3bjB0cVC&YK0 zD&PT!RM{Ku*sK=}8X!;HaognCt`4wrP?y`D5}MBvMzX55qS}=AAcSAvPMB^)-;Sz2y(DqCx%wS>$ePs zW>)QTGW;;f2)LfyQM0r2Q;G>_o8|r2%$(<|=-|j0fcIqCULkN9Wu&+*tUAPAaSd1T zrSHcvN9oP++R?OViy&SHuQ@BjnC<3p;T!IcZm^ukqKtHn#-#lhDAA%lX<=_)aZ3 ze`F7wFEl}F<+}^atg7Tuc<0s^)JeIyJ4+bxsUs>X&gAPWJP{{_A^%V zt!f!dX>&OdBL_5vpNE;FtsqmC2zVIY|1NI zZ+8nBF}ID&>OZm%!1Z1ozd%LC%_8E7S7DNTJmgk>4(^up!y6M!XDL+>HYFMhiUAIe zBj{f5;*y}VRC_^3k;lQyaFlR;;fpda+&J>~@o^aqgv+_g1F+HONUXma_?7(XSYS;N03u8MxfC26|~s%bMFX$_N#?>yf+dMU=& z{Xf>9Cp1goTtd(h6LD6y-%uEL_S@}SI4Ya+zeWXKdjzv?%Q94bTn!5h;-K<8gC>i? zLZSVGj-vha@h~&L*Zov-Q~Z94>cgGdC44iS_lMt>I`(a@_ z>x0H$XuLFhtIw7;Lz@|B?`J_3kAVD$2xBod<0~6@aK>!?G!?92Xut$D4;zUje`{D0 z2E!m>SJk%10PQ-v3iR-v5}e77G5qmi25g1R!nWe1|MiZ)Ltk8yB{h|t5=^_`s10;Q zLTFxHe&yNNc%kRL)f4CaVt)tACy;lPLjn~4kas72Zn(Gf=o4GR&IbYt`2KD(DFQQ` zK|I01u|9v;DMh7`4H`6cZItPeo06OcW|&_`hnVIiA}-C3=vTWTd&67ToD38OTnksA z2N!ng9`w_529e3#Th3)xcAWne zIuT9N?Y*nbw4=Xfew@qfe%rjQL_4_Eqb9a5p=okK^b#I|c2JAa#tT{_!KtAX(n3x?=%%G{ z;V&x4LkblGyqoy3sbV#cjKuN_v3+VGE~ZW7K~R2 zF(7YM=uR@=0DsY<0997$#H;@8aB9Rz|G1pYX*JOMz>`Z{Jx}c-thwmpwVV=-JL~rW z_SH3HIl|1%6?(F!SL45XV%>--?c;o)1%1|q{v6+6supVP?e4GW z!13}Fh@Z0uYo5>B0kRnkG#`kR1G{@X(En+CaNF;fx}E=nGyN7sfX#z_QVAr#F7)N% zKr07>;@6!@cS)|`!z_YvnWjvZ9I#3Rk(;;}!XvTctpjOz z;THm>K0aFgJFCZM-%koyF(Ys_1E5tMk?I@0ko7>}K@5)$YN}4kc$E}PU2r9NI?G+R zh*1_Zf;=}uajN<=MF!fqvm{Av6--bQa;c3SYUJuLmPW0_c7h@cz=ZkwqcfNXft zF>JofXDq%d|NC~v;qBODl)-WUNdQErCVl-s$Q7*iYVH6+$);et(kEjg72o}<|AK;w zp~@lS=j#d7WxJ{L{9~zXsym2X@NlsL0`UJ^Tr1{m7BfoUGBP(O#tAJPLH!q6 zm2{*pNmDb~zd2e&`xXn*y^4B8$&`!%bdE~)!rbEG|5VAj#)ZM%k}lV2 z<^0j_hkP3t@U2P3n$EVQ=#b|VxQg|nn2~zMpBewfizpHOhlaq^7iae=0 zoc#EyRZ<{{B(0(K8i`=r_wNkZc66$EbWMos>7XVCeLeQmp)CDT%<2&`JcNA0v5&=u?CL1#K!z>RfLn@4dIzi6PO` zD)6I#vlgrh8?>3Fjd zKWW#qQv~`a=9XL@V#grgg5-~ff=_=D-6UW~Mm{^}p8l-JLc{^%li{1q%Wye z>v;j-{XVhfzCJZz|5HkiF``@WkDMRUW!4g_V2;B1TBpi6dveSTGxu|fO9W8IwaJXz zYvwf)EK(+Ra5F%fAyfSLCk;>6d5fWUcwjyHp?__9t9*UfMt`XLPYW4>$R`8V&{cT6 zKEoAq2;BPzPix(F&btSON#`bPp>WU3b3*mIYf{YDud@zMwLj5=V)4<*;l+bB?7S#3 z#$s_4U)6GZanpTEoflFa_&TGc~KR-E?m2ylk3=51uFnc+NO1aH~h4aTb7Ib0?{UTMib2Mh1l;D#F zK;x$oYJZ>~p>U{Y!jZtMv05Z>?P{u=ydq8&Cr z7iog=0?{_OYv07w{Vba0OF3qiKivi|1*qMwRk!|IDJLv~;}HT_dS4$>13x6Y1!d03 z$t4GYWf2w=Z;u@?^hkj&51w4I050tAZu;@3x3YqE4gtu|c4_YtF5Y1mn({93ry!(aRYHtt}N(E?msyOtb@t&?BMmK`J_coKa5N2@ORnab7(+9OAi|Z z>3%mXlbH!2Ip+)}1;l$HOSPTxfv{2tS`FbI3FouI#|EHE8t`*qjW$5pRJ4>2^g_jJ zC%gzGNRkq^9c+x2j?PTQa%pZYD`dE%Owwvs|H%grVUB~$fdT#pYQR=%C0^Lac=b62 zNJl=zVKH}YHf8P4`YZ)_HwI+a#BedWT89Zy%ClN;@HLVqVn~KhJc7gcimOgS0MKo9J;g{Wdnfk%%ec_REWCCrdHSb~1;}ZVt|9VTNr3u#Zd50DUN>jV| zhljJXtaF;=7EDle5odR^W#5@wIu@^C7I48D4WCTJy&%wKg+a zJeMxv85vCg$5oS?JC3JJn<$=^mpkZ%m3B;F=Qh^{75!DQ=WXN=1=R>>HyB9z1B_ra zoi(xRaC0o_dPGzj15iXgbQ2!e+Ruhj1k0fS3I8{KLPBS+Oyy*m%dZwbg2=HBt%4`gP>qwz0KmruP&Gxl5OVqiOm5mL*$ow#^ zQ0eKPCr^jU=`bJ}6mPzQeI)@Xum?3xNDPTWyi$NiEsz#0ex_BlOm02>eirj=j<=S3 zADtP~t15oDfz!L~9?rXgTcl!+3n}Hl@VtNp(Oz=Axj$Bv{t|(27BO{sVY|}Q`Eo-+ zI#WN_+@1?<##Jbv8i3{S$*`U^!`8{czWJBTI2PS2-gtC@H&X`QBj$eTQ&Gi>u5f;Q z89n_@7ZIhRR9Rz*YLAHCJa04BB&}@hRcKaNTNW2Y9Ike`8Mr+dP&+IKtn^UAX~&0| zQ1RY9qy=`Ao}yMw=WTA%m>8O~;?^(HtZQxdAR_t<@MTf@>q*!wuYOfs&_p`e9peIw z1uIQS%Ot2q$v3yQYynH_jF+IbwY34{Bgx+=ZbcDx22wCEWNtN;`Mb{KIsRv;vx?dhQaW_d`cwT_O?)4_5LOFWmG zHwn1)t1zGlROu7o=dTCX01O7*%gUdf2QjW7O%BwB=3NIwQb!`xusgK^wE22ZP)MjH zO`fFidI*2|N)5dixCn+svEKuZ!jlF-p}@vXwp(AK&|}j8q!0x_f<-<8A$GXzFa&@E z<2o;!qUhe1xHHp046ez@znQVIjHCV;Kdd_I`jeNH>4bs@$vJk=_9tj@pWHW)^agC8=fbyg#ta&of8aq*Sj)Ju z4VvW*=SN`kuz)o>@$Azixrn^(f$CHnLoXnTPXTI%vKL@$GwI7Zsa0M(03byfpb#)v zyMo%PLGvc*FrBW1pY5*%k5%b-_5%Vi3E8+pIFC<$bgHZCb%9H-2Gp(-pfuvp>^lEa zg5G5CQ!0e382{tKX0rh}rI#|J4Y2;NNnJgA^mIPMdU2EI&mZFLTY9FZTHeEOaNPR% zumXSM_Z2U2tG|~h`F`nH(CzDY50K<^dx3uh$*kR|ju}8V8jCW!KN&T$VWhkD4J-hi zKnam2C-`@^|0S{ZH$3~lNUZPJ5?#*yGZ1;r;O#BLCn$(Y8o=o6lUw&G0Gs~3$iJ$U zGO}fB<(O=5=U4%#o+^l>t@(ecnw&=eT5D*#Y;MGg5Zsj@QbZm&Z*Y=4eH+l0FJFkk z>GFS$lI-(ph0tEw2U0tb$3GPp`$a|q29kFAH$c{)GnIu96>Mzm`=G}DFYWT3{qx^K ze&8ey;0@|)j(jR9F-!9z_J^!&fW_~_?j6)@JW`7o46~qDl9FfuQATJtgIQ89%5Fs;V)C#e?l$2b9+Y8OylNX7+_bu4e zTZs)AwEidmoRM(}+9jopC_NG$-#LNJUf1f@9vpIR-09y-YR@bE&-HkY6KfcY#f)&O zwEOfO+DCpy^8QN#Wxd>gTdh#~{1)MQ)=mHZBhYZ7;9Q0Mk2{K;iQ=?yP{O;s0h-mu z-d?Kh?QPVu7!?sxfkN_rbo(8pfA1z&fxdRb@7Y-bj0lM1Bex)Q2>}%bRI}${@DX4@ z1db3vX3^Jz^HhZYo)m4MM3cpN@ggorhtLcXaG~;oPy*I@VQy|xXxV^BmhnDhlwi<9 zmN&WW2Vw-I z5k>%r>!f*#@WCqUeU>oDt+lkZSs)9&;22!SEg+is5A2co`VvpasCb%hK(R1L5;D&<15-avn?+XB>6bNM)XNcWCY@qAN=*go#XiM zD;q+fkNc=wak>Vnsrgh?)QDOkaJT*^Hu10K(`{aIF*AIurN6E1vyv-R4gPmI4c zLTC`l-2_4J+}tY(f|fq;*E^QSV9Ua1Jt6{L8^)l124-;s*e9&(vgv{OUxCw#K1Ld@ z8~OwI#q$h^bU48QljV^Fz9W>C9 zcr4IbI;xG^UK|Z>2a|48u7%!J@RDeTzk-4$ST~%j2zte`z#c_k z3hXiY;X^hjoced4)%aY8PNj%ABin!ImPaal@knSe7~svI-{iX6HYrR>j2A4)lMwOS z2#j3}hEeQ!9ZbSC2xq=Lq>`y5maP^7r5X+f=3K_Eq%bHZe)j8t@f!HUpbjBGCr^bx zVCvU_a16ETm#+Y)bTmh+am}3L36@;Nfu{YU}PL3QEf_Kz^P8y1>RPFA&mSLTy8`Qo3~QyN015GXo>?w$R-m z!cndLNoPe#tZnW4VIGdVNy&ePhSwJF_2mo`0&jBC;m?zo+nJnnCeiJtL#J+<5bqyG z(SB&r(rnR-ZMijIx#y%{o58g*I+-@eMiQdxs*0Md0QW%#q?fNtGdm6fsBl^C=qyBY zqBJHT3N}I4IJ)NQxN0OqU!i+SLSp6?=RA?uTS6bS`Df>L&q1yIdKk26&A^*per9zd z9Z2Jiu=j1~YSJD}d}V-DPxRDZ#=gf&F6wdovc30g*_v}=jbrte?wX(4M`;YN?d6#=6i`6=> z)`a|Yf!NtFKF)+DR)VqjnPKpj4Tp+^1rpyK9UVdH99Uaht2zpc%jIf~%ol9!Gj2N?rZC5Lu+SiF!lNL>7;uHb)e4gXDoa$x77-H@ z095Q0aP1NhGSK_PH|frA4XcvE;KCo@6(aS%AlOu^33{a|?9bN>oDvmsJz3SI#XAwMta z9`~dg{32MGnKAHAf#~}~nG*nxdJvGRs?q|R2ml++FyTKzTr|XNXw8t@L+};+5`z|ym~mU&M@WAO zg8@tkZ9~ad+nQ#=@vQ`}hJ#(<$F}WUULb1cW{qcjk_dO!CZiPukQThCRHtXw=un zFN!2pcG@inXYQEmBk$GQv&qy=-j0^z)Gh0|^`!aJ>gs(+G3yW-tbU>#bF?n7jmOCD zVDdn?|M@}{d!bwS>}KT(kkTGECl2f+en_71VURWd*&H>#W9iwYeXljD*G+hee|mFA zEOSkrec9(IuP0>JZ{UVZjgRayA)W&mgCW>uEQCH0g)6iyX5+l)EV=YxgZBe(qU;gy zue}B>+^~=V*gz;?NU#B#Lkv1|N^m@20gr>**rFd5G z(zuVN^xcQO&u=N^EPV@@T@KzKFM04FdBSjz#=(O!sm>% zG1of{-fxyXexvCRu1K7(cWPbKKb4l!03t*3jbEi9GCj}_{(*>`36F@fJDGTmDBu4t z$!}r^xorUAH^~mpG9kTC9u*WR{wA&DTtggspNk<3*r_2`N7&CBXCJ&4^B}!UiDG%A z`U>gU)!d#!GZOh^=$lbO{k3(PNB26{NQIlu-0;qm)CZYiC!-o}Q$y9?T0+>-sSi#a zbB^go_~;Qkcn&D;?sQ!->Phi#pq2PME1m?qG0Es>&eq=aSz7HOx4#P& zs!t~<6A-ECGofN8>6cqZ_P$$onWu3r?zLKIA-Q6vnyK|&Fw1?ldT2I&|S zC8PwD4v}sF>6UJh?(Xh}vqsGaB-Eqs|{ zmo{Pvm(iqsPW>Vh37b__SwuVM&@pPTJuk6c@ma-RkevvgWQRRCEc`(hK}G8_sLH(f zQ^1AgTRL{=pS;(Rpi{NTo^>v%>D4cF51dQrD|bUy?nFL%f|WH|DzzAcE2}$F^8)+T z*QgJpE`td&t4Rc%A8<$p9(QA1E~f`}A|9Q3(Oq-F7LqMW6LXF+Huad*$;ET>6 zm&;%b!uv)k-*D4G8;oBAYnbX@s4 z?`C4qr#jiHTvdmdsUbS`;RBre586Cheu|6eN)2XFTIkOxaqrd}dXGF2^{WkJ6Io@A z8j^UqAXK`9s5O{qg9Z>}P{#&xD~HxbKC-EDjpl>OaZxm0wCfT|*@?4}Ld(aCzsGsB zV|dBJ)z}TL8ANg#71vrM?UstJ5VkEbQtXaU_)y=URnQyB?eeP+w4%v4&5|}66K8sEikDgUInB7bbBS*)gs-xpNbR#fS zRCBM9lA1o6U07&>S{De{pOb(8p2O+@m2;i{1p06biMlY`ewv+{CN7!{CnBtX&DCEj z>;R2t@ZhLmG&@<6DOktdQxB0OBQyK;YlZsZP0)IS!c>ZM?-5V3V%h~zQK1<}i<9<%?f;piu{y5p9(u ztg0$W8O61zboQiA9&95TsCj5Tj%v%y8!*O6^hyOQ$oT-NCyFFKep>RB&XnVLWbWsK^`2 z-5VRtCIq}%$*mJrpJv_isPRRODhz9*)C_CQ8XZGAoOO1>^W{je0A`LOFJGWDSzt3r z9o*v>pk(Z&OVv|jorot7dyki&*UVn_OT0wapq{tXFo^Aw9bHA}&8Om;Sc_DDa8~j(BgEOuW_r-wh zOn5L555j6igPANQIJmhdqB*R{;}jWtNspa~9zR26{^6 zW~(m1yN+7n$Wpf)ahj>rc9yvJ3~( zv2aO0Bq<^yAc}3!k#jzR&2$Ff&!s1IM)SPoQ+o%z{z>{ae#D$28XC@>8*t=KC?1|n zf0BXw847VnV9+Cz_1brVHT89xjktr$nr0wwfd7U<(B^}74?BW=*O(srXgO$(&E^jv zc?R<^wv(+(tR{ve!E4*jq##T8-pwpD3PFyo!{(A7G-wP`Q;w~CxSyIyeaW3rsW2PL-`lD}oaGV%!!6rrld^M@n}2npbMoPJ=+3WAiAzhkS# z!nX`l87ZcwrUc*>fW__=$DO5VP`1?q5cP-!UUvyGP24CdwE~+hjtf_b`G<@1 z!Z?k%hKtMm!7DpX(03a0`r6ToOX@Ary5U6kc;IM;_F|uV_-H`?4>sIDwKCpsW-%uZ z>wcFB%I9)9>@0x#)qSANO+vK-y-v4LIV*{y(soj!QeG-jSX2xLB5Uwh=yY~^I6qjx zo~fupz@>8z$}9AVq!PCU-_*hBa;CY?-KOg;!RE53!MwiGeUlFz}TyR}^!ZoDXPDP7ckS zoMVvL+I*9_{!N7a4T0fdOMXy7Hf69}de6b3N|A_ej(+>ARwdoQqvd9yp?S{L^nG-O zJN%vD7TmCpq?{m8a(^c|9x;FQ3KgI9hmYWUc4>`1DCO>}NRD@4+Q?}+)gZ$|K5xA` z!b7K4Dg@>i#voN4U;WWLX${$KjY;8xA7N7UQ1Iw5h&PRT3bYIn=EvJKo>}aGJXvb? zggQyb_VG$2*Kyi#&oN64=zHhu`nGf0bml^vutWr}K|5(5S3tmc@lOI@e~$fQP^Dur zz&GeFuJ?_qoM+a@=eE0BUfyoCzcK1V^yD4X#}t0#EibqbPC&IhfI3EXiw3A!qYcrt zM46_h!lVWFHj+^%m*fT^{_0z$5SuJ+{576AX zCld%lRuw_eif_&!#nUYRmT4srrb0rvXgUWsGS+ z#%(qlam0aryH)e9+#PUmfd>T{EGW{q6>@OhI2ePo?wNcXae+V2{>o_weBoiOz6N%M zFARh(;atGP@$*Bi8Nl>TOw1?ac~FuMNTorxuLJZ^d=l|^H@EqY2Y;)<kqvK`M$x=I5UK6aZ0u|?sHtkix+o}UIn!deXz;H@xAZA41JhIf+tV{X zI5_xGk>(cGwH+O%{6R^clhvEeV{@1M{HEHo=oH9n~G zF?b($7248&&=XfqEIfg@eXBv8qk53<^5fvF_%~m}WwPWV;GkAtygC)%{gQmc_^)x2 zfIu`Mr=?wvOEp*L;?~F>)yT=~5>Vg-44hU=Xh8b$$&<*)NQ88-{Dpv&w(U*gzlO&; z?%v+s;sp}^Ak?W1R#zk631FK0n^cgK8@_J;+mgsO8g(uRzi>4?RPA(kl;<+u1F)Ig z6l>N)7(IH`9le1}`#Sj>9|jS-@ps`#JPf$oP#5Qmp-rp9CH@Y8yBbq}->c>v1O=t4 zY9#v7`XJcM_)XM`4+cdOpL!6HE4^^_4eG?M{;or9a5nD;`QxY zT4S(kx$${lBG!xFG~SWJHy`##Uz_)8{1aMnvOshelSrE78wH$O#}~88v)6{N1?YeL zH;`JrXE7Ho)_=W#6?cZiZtN}svV6qc<_$7>qve?A*pkiiRpaWeD(-hPVfe*xw1j5I zi7f`xs5SkZmsZ%VCIl&F0!FZz_ww=4nGe(zi(&j~&6j=;d=3Kc*T>@<#qb`3`64&= zomTDU9^b+eM+Tj>A3DwD8w<^P>#d=j!{2v=9w+|np;ym;@6UJgp$c)k@MAG)8CdHd zU@rxe3?^?d@oK;DZwl08?(gkMCW;yEEI+}hEI+QVP#NO9*y)fT~1ZcsJ8{ z7L;f}@%l_d)Dw0%>?c}79XuBJgJ?KDgLw#Kw{@Le5-?X=8=uhyNM)c_I>hhVKuYWs zL^789bQk$(FgmXKDsqprKL<*etlsp3IPE&k3G9hoJw#V7=(X(mv{!__$ej^y3~BcV zk>$1dDPbDr{9oUXy&H0$S)o;CPtRd&W67A~!=23mqpTmus0$uVWb+7*jkInO5}^}{fm1MF1zdNR0z#dxolH$adD1SJsmt*)z@!#+ah^Eo!~=ly*LoU6ozIV{9z9JmY{p}0;XBnHqLJK%BI#JTUR33B)OJ1WM00Al3%Fu7CH3~0 zPSYaS1pSF8YuW|Z*4NKy4Ca%}r$XtAh}$Xtdx7oHwU2!C$GUm=&dxFQ;2|?MMs$t} zKYtz6?L)l$KIII!2uw95ae@g0tojvBE-tAoQxdt%z3}4g1+?9!+ZJ``R&i1+)*9X& zG~D(igdLV8cy|Oj?(&lw`tb6OppHBXCEXCVeW44)Z1^W>KJ~sjFW=G82Gg4<1=x9N z@-qg*n7VVkaB2T{CW8ETD)Qf%2vtd|N7(^G_a{crhM<3;_qshf45Me22E#TD(Bxqc zYm&)QyJ~B@t5eW89p&wHv!2ml?Al9T;$xx7&9ya+{te1>)kDm8+eGV)@r_#x+s}#@ zKrUn~w_V>75MAM{CXJ>0*!T#O&S%-lCD@liNm>t5h;uz=HEWvp4TopW*ZGN`cwGbG z#ECbT{gGP%Ng>Y-`i8|?b#4$73%DW#i!Y!T9q5jIM`C<2f=}8S_5$5v9JD*=r~|v> z!v8jA(ED!-3+DfNrSMk&hFO&AgvQz249w3-Xm|7UXcHI1eq*YtUok28@7r$(60v<7 zs0rH@9B?ea6_if3_(KQ&uEy1i7cYW?WQtPWBfyZ?pvIZ8e}gD^PCQV&OJE771Jt7c zx;7~wrwEO(U+wL7I0|jOhP$W+mH~2? zjHs5d0aF(`PVeA66yCGFGE4*`4}$&|D?v_QtloNiK^B#0L?vcpTn_ zt`ef~d_aA5NL{v@X(529@ciUxf4(E`BE)74Xf9ra--K$hKPoXF=PxZS1xGuvY#wMG zyaaK=MrgVPZll&n2_V=k99&XTA`J+4KT@9XH|hVzM2l>R2~Fu+p`nWLKrS60EdPX? zK-Sd{oNqq!Aubs3-ULv?Ul2xy=O+hPA}ZdAs%s~XT!iyQBG~4_Z~q8IVyKI>!PEdD zPyHMVu~3G0fF7M#MONG4o8YOW1-A~Bmam}14}&fSir#_71tx=RsE$62OfpPz$jEiT zcH0S@F)*ONbI}#n!kssrXB9O)*AB zNO;k&o$8f9Knu%LgCdStB*%4#+?@rhUT~iAfj9amQ}qc3$c22U($Ii5uJK^LFHA>C zKo!DC`4@DFG0;1Ktr6tr@<3ng9Vm5UBGBLsrr18+oAgHoJ;Bkp{9xfRoJP)oE)ORL zbapfVKMNOQY|LlYYr)WfDTX??qpQ!go%isHTa|_g#t{gWgMClEh=K)V^b=s1-K_y&kV*ny(`J*dl|?+Uuw-q0k4 zk~=Qe4JA*C!nBfbNSsfRiM_w-wsg^{{;U z^Nj9L1YH{+zv?IgMJIJji#l9(aG@zk@!%IJyNm&|hmp`1b|dAVs~<8|OWZpQC;;U- zKLSG6=ocwHgiVSsXzB6<0e?Q0=APu&n69=X_8!nJ&9R&o8F5_YK~2HIB;?E<%&qZp zb64mi20@qf)*>L}8DYPf0{#^A18aVAyG+#X5gmX`1XX`Nh!A|%z;Okk7Ysv1ao2QL!B+#2l5aj`{}Rp=p=)*3=dUZ2cvjm zuD6~5VL@$5;b3Pt$m@KtR!3w8G%p<-Qf>o6x!+JhmTpHe?5OFRkkBPaS`*-0m`KeI z2fXzmtM;%!;xLd3;)eiP110A(cH75qv4sfO*h@f)m!)$K7yw8N>xb z!=Znj4c?XT`6d`PPRAV@*z&btf+cER0`-R^SPlS#iUEOgfBN!0@@_78Er@UouQSFR z7$btPJ!%dLARP1sK$)cxVyuO&Ej!r51yKQVFciF_EcVtkq2L(CVe!3R`VLIAhw9~U z_~>GUUj=Jg8f@2vK8rP^gF$zM`|Hw;rpLlmK4PJs*%S{!663k)XgTWe7NesI_-jM3 zGYLed!BB;qg@vV7km+CU;^}O0>1s*D&bLDun8Me`)ax9sH)>m-9NDMJXW`(+v`Kz@ z`i`Z5(|X|+Tr}2ce*<-VgB4G$Oh-fG1AuI zeGbZZ@6Mi=aw<*uchx?2N^FYG9Gyn~0P+{cB<}ydtKc=vbM-HjX-Y9)zg?{-&O311hkovuTRqa*vdzRil$Pb@dVX<LG?SHEo*#zr9koG0D$OPmkcAQ_mU4G)0$msXEZ1`_@~ z>(-cpkC`7x!dM>dVZjN0QazqSoRD3=c_u@+35a5!!&w(3oVTw6_eGD8&U|Hv z^V6Njtp%f*0Cz~;I{875VQV_7IrsazOsayf)(g>&SZC_@?=!=@OLQ7Tx>8hQ$Uk~_ z9DK|_vVS<==~j-G3XuO%D-d1}b=eyid?cIh4ksPj5{GTV^BZ?&psFU`45mK(0Dpke z-m^`;j28C`6uYz`^L161R$bSJk9;-PG``-0E1RMv05d*}O5st{i`txKl{aN&^ndd)(?y0h^0 zPTZM-Gb-ob~l=H8=_;ibH*|u%T-iL%eJgOvrUG30z z|C=B^IQSY^lu+81276ZYTU)mV>I_rIh$R|ie+R#^Dx{jI2Rx50;7AOaVguyl1W)w1 z0aeUkk_(g8iER;^|9Lg^7p^_`P$CuO2c6Jw+8%V^|M6+#c9SN|q$m2MH>sVj;F5I@ z6$;;%-v9ODa>M{Lh?Ki%z)DcLS}am4avQWn^!syeU%_YK5blRAVgU236__eotRZ9f zUiuLS#X10t@KXuFV1aFnVgHCnMS*eu(8M0CAvVa7@oH=@g1C(8!E z#an}Yfkw2kKQm)Mr#+ZXv2Ke%S`lhw;D6RSz!3Y=mndf=td^5neG9a~PC}rg3=t9l~zkS7=*az*&%h>4{+n;k#&mRUDY^ zg79z16k8%nT%khI5pSrCu`vr3nr#iRSTaqmH$YgJG$%MZed#Lijf`pV9_w7j0Ixm*X5Pt7dcD^GfW&|<@MLFW5Uf;T zw67dE3A=WZaL`NRp+c`W-Dzik*mvSV_jbUzf(&5+aXcan*g{<(F{}eDW@{pJyYcd% z*&7iI6;EboC6%mqkl0Wwjv`O_xZc{eZ-Mk>5e67i0j%C3*JhdPU~8qmvFf{`F7r=zH(;aewX7z$iK3(HIHAy zNx1gJ`681HF6w{*TO|2|xkn-Nr{d7SBj$a3&NVngNr||E(&UW!%+{)fuD&=m!w+6y zJnGbb$}+bR*`IV#>Q&N8QRU<24uO*r!vC}bSP;-G*fk}iC^7r*N@jtfqmc?W794*- z^z#|G*P+$Tn|y?3gmOUvi=0J;la3Nsh=O;rlkg<8ApaB3p%>MDwOl5$j4u_mXC?;v zg3&bpwy5D0wX*R3MQC0#*sgG6KwK<>ZOD3|=am#frI~{vWI4I?{{|SqT`a2_eqsw2 zaqj(WtZ!u4kKwS-fHtOJ335C+UDf_lr6FXkf-JISK+B2)RNtvMI6~EtV_*AC{fLE9 z$5}cUOvb@PV8GD`Pb-g4DTF@&8Aq@FMWC56yjA#vm^DBd$aIJ6#QmpfSs{_z9#IoG z<*h@Pa%^$2dAb>i_?jY5KQEp{`6`AB^Jx^9#j4dvsr~-sQP|twn}B4CDgouh>(qXy zSDwCo`!+D=_Tw)XzbRyY$3PLV&$rip%sz*@?f#qT-lfrknD4cpZh-x97*oPSg&$9g z{gA4_e1Io$LKZlFOgH>cJ(gHkBqZ@!_0vvq6%nbDo*Sae2VNlzc^93N26)j5?m@z5U^(ElQ$@_h>kWj(UG^g_-^XCO8x`9rgN$2w>0EU0j|esH-?Ms9G$|s%v#ykH+$R6HLT~g0^T=^iZz#v3 z`X&>3UVbRkwls7Ypw3mo>3nbnJhe2(f7POmd$DNl#tE*QYDQQI*2guDGPA~d3#x_Y z2&o_rneJ?x>f6h@p|+3tew-rO3IAQ8J{mo}&2)?*AowDo&)%Yo9VZ-u3eT@8&(3JMAy?!Qi!e1>4`tauT{ROq*lP;A#wd$b*q_DYXe zzI!g*^o2(DY$Z$4@Yl!BZar4|^yzlsDIQzGhw6oHBMjJzZ-7Whee+{&|NAXMJnPS| z1BRkuC1zp(fRe%UpUAKW$SEj3fB}c)`UE9!G)q9nAX~PM;n0*jQIDAzYh71n-iJTM zE(jC(`qc!=UVbe@RU#BT0j6Oncw+p%JCn(QPWcI!>Dh80wf3;0>#t}@MHO!3Qm)EQ zXg4&BhWg~kaC1gCMW27&VZoPufr0QI8{U$0hgdwX`Uj;c~ub@Fwixxgn8_vfdXO;~j7frZsBqE7^xh(pRe{f`#lrfgXKd1+ zI==7}un<6cCKdP~_~WO&^yab6YEwgicEd#YN2n88j#WMbz(wWv+RbszUR}P5QXfLj zV03$!P2dX)G-#-u{2eFA&PBZ3(h?S9G1c(e<#?MN?1&b%4&+X{d(||L3cXsww>d$p zanhf!ZE^{LBYw-Nsk>26YSoU(6a3!@!{!X#7>INT?{w$tOtPth)UcS{3lZj?EQ0KE*>8nkVMv|Z|cVD;Z3s5!+HE*!qxJoGuB!a(bjn7)! zv@dw-4Hm4%!?}K{VLWUm@3VqZZyhv(?6$wMhcfS4K?9)wry=&o%eBM5^|l;d5!*V% zqgB^~hEVz%#itys$5Am8p#p|J^gP3*}-`)#z0IFCXD69Q_?|!m; z!5MXzqR0;Iz?j$E(H(=e^7NZn4d5TeA5&gN05aFxi>y;H zdYT75DSEn~_3;$Sm|dw&KPIjARuG>PB#<<{Ih!H=X-8aeVuVopTGnSNgr1X zRHyh=rivP*mPPPoZLw1hvF>0k4Up?Ot8j7{cPC0YofWgjiAn z#j3LGbcNAcsm|1#SxF-8Ts2N0(fiMGM+$v->U7F2L}ul$6cq6JP72@6&EdlsRHiGY zjIJeEXVm6S9SCQsj1&Pgh}i7{4nWE~G^+m2k(d9CQ;FAfqdIclH`8<8sSq^Qn{s$X zXDXU-+n@5!r+(z$EZH*ip(DAdtaLfPzW%7V;sR@WeP}!u#@*H}3i`(n`0M z_U?OH)})G)E-X5tH3tA){+MOvf-RCr!@=>O)7oI=8IIXze@=2{DV_A?R} zh!*SFi`*2zdCovMdE?w}_4d`wzO2J>i`f)GIdfa-KTic}!a@7z{|jTXJ!w1tC&swH z^eYs!30bcEwC30deY>#5TX94jQu?MNrwAFQxGW$*vkuzGT3X{3p9}Xd2`s5Pt%j^! zvTM5;DIFuD1pnQYWM-Bq5%Fvl_t5fxKuq)(e+PE2WZ0sJlorKKFbMR{s1B$f8!5X6 zMFJ5Wom=3zsqu%Jte=Yl04(<3-R}tq)cIoFv6q@|xL}%@kNELJ-&OMxS^|2QTQ?g? zt@pm#QB&krLy*L5_TPdIH`bC1KEJW?P^;|QCjaQ$_TS-GMD=p!)bhBz{#zNX8R@fb zKkIhp1Y7p|(`eofMvK{es<~T#D~66by^Zfr`6sDZZrKyo*1QpV|M!>nQJ0A0eHfBQ z{Lk7Sym(p5L;JU4Bv2FGr<-$^i)!Vy6?yx67-?b5e}zX!P20w^aj#W#r~9qw#WwH! zt2G_}DA9S==T;at@gkb?rM3$0e?F}t-v~EEYOwc?J8s3JUKR6SjVoVIzVSVSbMB*d zj%_+rx(M(;jvDNZ@B0+Q-#pm3%U^B&?}>Jns1(1|Q+%rF$ot2q%-4fYUE<+-b?z zXBT$dm7(}vf|vA}jt&xU;+C7UZ8rWYt?v(@%;v3>$^FBP7>LJx#=}THE#IGbL!-#33`Zq9hncYw z)+ZTCVBe$h!}=VIng1wRM7`zW(W~$G`56Qj?SDy}6%0u)EVQ4H{!Z{B;!3VH2f5Y@ zn*bUHy|KEv?T(_**BZe`6kB!bgGA;!F+aWuFi)xO!_0e{yG)l)9N2TlJphLpf}Pv zv!|@NOR=TLyA|zt)h`z;@#feK1W_$LH5`6d10d&2Y zZLhcX(i!yWhdV$FCh z5mk<61sBHFV#`=eWV|lxZu}V^zOz3Yqmdgb=Un0wES~l{R!mKaHLWexEF`Qa0Z*I1 zRSC)09SkOG4PGA3CBgMKmPt{1Tzx3~aAy-adX=IzqIW2o(K@j>T3|~pP9*!?$xwZu zqSJkB%*e1*Tf$!ftsG7fSZXyAP0{tZHkq~DvwiAJc{%#7X}@!WD$D0bX0$bjr*Aek zb8KLs1k!5&1V%vM&T!<5UC8x<*(QY@39we;m!UBg<-JR8s~`D2bJE3H%zYC2H%AsL zSI8uYUk-+hGST{9!qp$l-)>P}BXJ|!VN)p7z{8$x*Qsfc==-tHuspKDKgvtO>105U zVZFdM@h4$(sL+ChbVTwA)L5p*9bDZm+DI3;XhWZC?&O51v^$e|^t8}_*7+F0f09~} zGSsV1tG6)4xHZogcvabtLF2cAUR!8G(=@h}FJtx$?SSRMR+dT$o{mz!^PodGi-~Vg zkhJ?wklYehLbo2q>wtiC1>P75s`lx{)%@$EC$3o97ZWz4#D>eup7fW_JFbl4GAolp zNyTrOs6X5Jen-cQKh-7dtD2ig;%a||S%|E*FwOm5(B^6gn)A=N*%(djdc*hPAlI$N z_`p{8$#Gd%>_O^&u3Oi$&;Hk}ij({DT_SDLxIgN4FJ^?N$GiDgYCOBtzj>>39Z+68pTtjra9hfu$!p6ct5{r(^)=w(J4>s9tht- ziDqNdtNIENr`PAtju3=?f1eiJn`*0`%a&&3brM6H!8@}tOxAVeZ@O{LRkqXf-K1*M zYD$VT+pdNd9upl$Zxtvk(zG13k4D0Me62UNaW%#QImz-9gkr= z$}8ok_f{fI+^Q;za+C0xQ^`6LeRS7;Vv1$| z)oRa-!5wE8c&Vgia~Eyboyx!b9j$M5eOy;yHXaJ$aXfW+a;J23i)OPRSYv(X zJ4;6Ajb3LWi-FwWwUf?)7GrGE}jsWBoYbJqhTQPTqy0p|XK}r8t5+-t_u8Ck! zy~5WDrup&34G^Qd#oL6N&vtFjsTPUZ?O}exdn}wWaFye&Is5hN<6UW^H8MM!oR2}k z@UElFfXL_wi9zR#^#vRPeWi*w%XGOB{WXU*CE~mM!MfvH7JpOY-QycFdrMD z>URTbXZPlCQ~{}!S@Y7v$nSlUr}EBF&4MrKB6%MP2*{x)bjX~85bNaE|^wMgQU97!$qJ;RUI6{Z44hg&zh%Y>`SLd^w z*@9D0wO%vs(y3QqLQ|Mp2(3I;TvcV@ix}x#J!jP0qka6jn|6V0zAz`iV=l zwt@%H-JWaB-QOzqwF2AvvreTi9~PF*@$B>G~ajIj86*;-nD zSKdAGA>O(7T+m4@Eax`l8I*PY1VVWW*7(dWO2vae?3+VEd3A}SqdCRc>j;J=kT==- z@vYI;I5q)wsPydh0R6A9`XialwYyH1A0>{ihV+FRhwTp7ipob>8+~>47$u$E*ol1| z7raHp!PRX7&LD^=D%4%s67x5AXR|z`J%HQFC4VCk+YQDpRcjH?&VpN>#cJ}1m81M z$0GaNU)wy-hWk2vjc14NdSQ$u)`a~_yF-sDu;02-oc)`yrZ+Vs&E8OIjf55qlv_n1 z7y-u3BG3{Wj|Oc-Pqjvb0Qdj}9^{Un1>6iYpu$025sIPJ6{jbnaP9=0LLwj!05>58 zeBJWn9pzjHfGmm?Sx$q8^)zsCsDUHVSk7)TAOJ|B#t3$L;FOB9mDkj>fL}c_0{m)d za6eGYp@3>3(_<*`D*GU5gpNKF+&lDuTmeHB z(F1x=;ebEB2na!v86fz>P6-$=;RVGX8fO4sq63F1(9~c8Z{wFf_*K~SrIi3fyL9Q& zHz0@;b6VEOth%1TOa}ZM{Nl>iR@z4KW9V$#A1)W5Fd*o+gOr&bu!28Bhb`VgOxpfHP^{Q-a*Fwua~)(z!Dcmap>9T4Pz-n!}vRUK%_aGH-{U;rVR z{g~)9c^%qr(g5ii8X98iKOoulUxpFEQ+m2er*X1W0RL_vsP9VV57=m_hzM?*Sy6F^(D(9{H7 zS~r;Bl7QrZSKD7=OAjg}DBufxvV!0c51F7Lii)JKIQrF>t(~z)2RU0^X5jf(xQ=%o zXx?onw=F0nWrL%Omg?6>vP_Pu=(IdJFzQ?!MNXsGN9?N8#Q-7&_>C|9ObC4C_QDIA z0ss^`x%p0yI=`IrTrCD+62%dh!)1zX5F;lBgr6(C{qV0=Hm{Dg9bjsRSIjnt;JU(l z!8Bj!dN|^=DGqc3F>A2R@m?)IZ2KwhcHwG^!>ubMTwk8puKWNX4d4dJpdJDJk7ucX zEbeTDyGAhjhwnWiymCQVkbGm0gX_JA12ii=6KuWC;xmESlmaam#eP6UhL!OG8WZqs z3}tixV1yo5-RH5vRCSkq%2s?>f3;6mORM2U8;+Lqa9SZVEXwMjzDjY(>vB}szX(lW zxXTo|3_@6=Nq{Hbo$u@x35NQS^5H27TGq4Fuwe9`H9y z_a?ldG^P$jgqHLr5C+;GbHfF&Cnm%!RM27;0vUV8>hD-g0AI%Iw?{*BGXNA|tN^0M zq75n;VE3{Nx|W}yK-XDhrJrlI1+bo`6zL=oF?<372H)Uk0KPMv?gs(Y9AHdPN2_ta ziV%e|>0X8?rwtQ_z%&A;;U+-hI&<|UfL~a7k<6(Q(5HKVxD?j~cqJ%|eMQ#<+_9U- z=3OWUgY2XsK;=Tmfr-#rMHh6Qo7itm%hruTAibH^+no#^SVsVGSRg*jgQCO$5WBV5 z>rbPY1BzT1QW5zqQ@MP2Z2*?+fQtgYtO3SaEQn}>L6JeL<`Q6y#DPBxgpYWD)f?9R z04d3hsmA9JJ;Ca?9iK_(669=&+gW8hgn$oz2n!+!Kmw2`gb)9~1lFDp45k$*T0)F# zfhB}KN*Ifwl>1;J+zt(*QurDAg}R@ zO_Y^AsK~XLZK7z##wTx;#ke_YUL(*2iWL*RxA%?nsMPpQJj8nx7zer>Xiy9UnI;r< z?0NmZF$uVbxAr;bU`&{%MmLj&fGx^TYZh{XkZy5_L&!VqBLQ_9q(=bFsS8)|D`7(- z6%`{Vmv~PNbtrnl{6fXaYElDIO#2)T&RU-BN^uFEzu8Ivb>+>ka7#11h;S+f?R12lf5`W(%I7juV0BYb0=Hu^6+>`Ba|Ytl`zQ#)JTyL<%1e+8~Y^ z_PkW)rEEi{>_IMf?fL;dly)JH5lA2N62q&pviU?5J~n^mb;q^qx7o42GfLyS-D^PE0Z}bI;t|(@{(CUz_Q=a7?J@wM^2}PeU)h(%2EI z@RYxYZ$LstF1IEF)_|S95peGfK~=T)@3;>l)cekh0wQcAriaSp z#Cm$(=KlH@eskTPNvB=<{SoKYb5W=7)K|_26{sj%PSLu-5d_$IP=7k0-_4AfSZE)e zFh8W&k4B=+3!L(CLl1fv`DR-3;rT(;*P+sSZNQK*Rd@xxKz1uyc$+Cb|a zP38(P7cj|eF^h(-o)at%EI1PVA3q<)O{r|oJEzZ2a=)RLY|0X|bm)vNOf5Wb$7p*` zM+>c?%K;?<(#jVp$mPCKSN!Esh~GBhdS60!TA!CL>(wZWHN-M=>@_|kE|w{xVx7^z z!;YLK#6|L~1<181|BEZaCjYZv=w#oS`3|D|yw6uzV7Nke@pH{tMee(Uo4ixBr>PFN zJh^rMi%wGVIZ4NATB=^`bEL`fAROw-T39dp@0;hF;3?{CKjQ{>wgR; z__-F~jKBxcum2yy%HK=;;{|SrS%N~A1_OE$hOaax{3{$>dM9$~=#}iLI7xa;UW!CpU>hO%0{x7Nv@*l3tcTa9L(v^PuYZfsynVI=GFW^EoZ&p0` z?nVgai}l7mVX-%cra`?Q$t2`5;53UB*Kx@e&XfQSm&s823fu6+*qFwm|-w!m5)!a3=d|TPgYLvL>pcix=_J@f!1nNY9Qk9rKS!#t|wnFjS zhqkLD2>@AVfd~jdZMbG{mip|*bTbOX=5gHlovkex?YP3J>_J1`j?qrcSp-VYr^6*~ zB@s{B=oHhL>LlRSrz}8Cp+-Q^;@}@A-u+N(qwJ9t-Z< z3nVBgzqZLU*19djmVJpZp3pPLOVmxk)BN07tXpDtvF;7F9G$p^ZEysA*8O#5%_S!?nwRP+P-C*JTqie4TdzR`%O2nVRW+h?_P`to4h#%r(P_B$(Zj=$J1aR^=&@Y-Z`eFpp`IYR zVs%#1if_3;HZ+tYYg=AP?mG&B$obB1Q_^a5d=>+Pg(bKDyKCiBRvg4==_|qcS1zo% zz*sYZup3J8kdIFtavNFL;fC7M7V65`*pGk>DsOLJM1H?4s5mmM+?{w;Mf*@nQ85gU zM&Vn0JjF0_dfXjNL`s?oJGLZ{2>f6tO9tRIyMn?w41H`Y99bdr4y*L=rJY&R38e^1MPp|q5#i24x2P{+k%Y(mP*HAX@xr5m$=KM~g^oCne3L;r-BI+RUEL?yHLGC8 z#mkoqu^yySIy&({^h!!kr|IRy^L_!@;@h%ULPC=8UemZ;^6#iSy#@_INfniC zBNb|~&~Jd4<0M9K$^efJqJ~nwqtC?`%mIZRMe4E#9pOAt9*3>pz}R86m=I`<<{4Zb z0;!&+H+fB3*$=>k{U()I@_L``kc9^YL3x$!iLHppr&xbR?Yd;hYb-g4l}hch$IHw> zGZKgmN%^M3sW4B_dj+C-56|w$|?$vhCG z?tqKS%E(M*lc3N1+x&=%#+>dMbhES0Vq&U}Iy~_gl>%ET@b+19I9@4PeFJ)JvZQ>2 zHC{LK;LK~48G%d%2m+(z5uD(}1GlO!k|pQluSlSWPC_J+WsXZ#y01%q7!H3S$AL(Cc$u#aF{=Z15)mz$B(yxJR%bKSjb#N zTpTjjG#2f;D+RkKv#r^*zz7mVbRf}(hBavf;I*cPhP6FXY;0^@wg~wAYbsvn(vSD2ELl9jYxE8Adgtm;qLXHCe>A3b{X zM^;`n0gfs}Z5blD#n}d4y z@VEL}KxHJoa@U5&?UtP>@PLVNJT^8qZV?eFr-j4%r|_sAA6UA9-iP_gUTw?!+z>() zK%x ziFyKx+ie4U8h{cFjE5;xRF~$TTW>@6q7PmQh-+xR+bnx>%6(XNI>TNOKykccThTdD z>zxP8M4q)u%;No-h~ZzDNf01Fg?1jOMtPZh)YO82BU0O^LGKU)v2fHw8ZeKqw8pK{tUc-`KOihSom!i+FNrS#pCWoELJmO z{?1+TesHoC4pg(BzCCPFPeRD&Qo6{z#$r;D$nCqV^2vOn2Fn>rFAIMXyz8CMfzVXk zla<11*+EF?mmOANv3_pU`6EhS77tr%3UYcv$f)%}&2AhyFYmcwq?fA*rHWnvxyrtN zJ>Ell>sCC_ED9#4r>9}!N`jxp0(ZpUa4Tuci;E2rGY<|=^XaUcuiBiknV6Wa_|E~5 zIuSOdpAeCpcZY3fxz&h(`qBw8gF+Y>Wu2($)Eh@2`=~gQ^%=93t=AEe9wsBgBv8@m z{q+&M8|Zr`{W&jSHik3le$vExsVc*|)6a~>-TLTrJg~VQ(9=s$1qlO3==W4(kg5s$ zkhvQunk4|GCZ6igf3aS=fA@$s^QH20@$sw%7Z{dWHI;+PXrsO^y}9F zMnR(J+o{|~bRRvUOLnkuxjHpHoovFNv-^nOt)Z<=4t5YqVW&P%|~m;+HHDd01`osF`6#LYc4X%7KjDO>9!6EpL6pSHj3exESLo?$yqZH>(7 z0~NSdSCqQ3xu?7J>G5s}+h<}X9nX6YILHt%f?>6s5~5Yi5$NylUx45S*us>;LXLi8 zHrQJp!E}P%FK2Ms0b<#u%YX0M;}SNVC8*W^1|*P-oLnMoLlDk}sjc76|9P>#zJ4$j zB=IFUcqV^e+uZyIfO%5kXb1iCU(~FBU*aomg0pQU8yl9>Q*2X(q}>MD3b)9})FxUQ^^f?MNIZ7Fy{QY;)e`0W4thkH~l!k{M)v=(VlxEnOco_?8-C7tv`rzTi z4j|cXfqLPC$B#u}ShvvcVDqFG&yAfGzN__!h=fOe0V#gkTQv`>{nS^h4+2LzgdKzIFTd z^djI#XN4iT+SuH5R=oiKn>uz!^IfZ+G>BX}!8gXZ4F`Uv7_&wEOt`P416hpw7-&_CyVgMWR$llI6bIfeW)$=|`h<^o#$*xMsHZmT zJ3MrvgP*`KXT(~wKC^8N>n9aT7^H)cG}(?U7WJ)%oec?w0wbJ0P~Kv{VIFWg*CRcZ1Gd8H7vs6DW6Pfa1?XDyo+de|uo%508kN z809HtIKck34V=?dD3UJpWye8oDVf%e>w5Z#hNdgRtULt@xJ7wTCzUWOU3dTV>64Qb z5j-7X+j%m)FaN8qD-WbHZQm!8`dXN&YzftL$d<~IL`lmu$G&E#CQDI{aLAIkWn{EW zjY!Cn63)R9PKYp6vS&GjY^f|KQMM4i>owo^`~CI#t2(dK`@YZf-1l`|_eMlTvGViZ zOn75=xYZ}9)8kRL^eC?@Ko8UijZhxK^N+*JxuG_`J?r@8_<$ifnklrFT%SQxnkkwb zbMOb4@q!8KPJc}0fn&Gu^2+{L7smo{!E14YP{IjFNH{+kEp@JE35VY8fUzl-=nJg| z9iGUr&UwioE3AbiB{NX}r?7dm4oc3O)w_fG+!A0M(Kj85(pso6wPU=rwUos1IKK~y|*Ijs&n&I~;L zeZ)yD0fxhc&^a1Vtg!ejJFTWh|AyGk12VTO8Ks(p&+ac5Bj8b z;Dj*{fzOI+FTJ?EyS-;IC9F7w-v{E^JIMr_)2d`Dm1l zyRy=SYvuS7bj02otuG^h^4?a=A)zELv2XPA2dV?VF$2zz5Bf^Wuq!bAaqsx8d4RU3 zaqdK3hkJ8ByI#-GumwF2K0GyHr>8f=K}6iU_i4{oSWXbf%vQ8D_T{N-Xjt1mIlc33 zzEO-S4QjoIKzGJC)ZYybm;qz~mXK8*Z~K?jnDw-Kff{p>ikXQ_ZO+ zu<)%3^W$5Eg@s9%OL(YPz$VN<6GfG=x`5b@#Hx9%ICbAoR)8Sq#rFo}Vk+W8sM_fJ zV{en~6vlfBCHN%tV=!BDKm|3w&vtqAZxuH-q>!sdd@JARL%vLavjBKmH(?P3Y>p7$ z`!=e1_Uu28Ol>gaMnq)nht<+Jgp%9L^rCzEUM{^i2V*LKu_+EJK*o)lON|)#hWAig zP71GqFeG^#5X=Mw?jf8bi^=}MBKXIX2!74X&yGaK#4xc#Y7?}(J)5);q9gY+_;btk z^(y128dlh`32{oqpn%|ZX*l9yrNz%YFCP2PMLR}g zvl5e%%37s?+}8#7!<&Co2f5JI)eW-egRATH+XqTXjN!7x#L|B*n>4|OCVOl!Xi~pdDTw46oB!Zot+oK z#3>*Igd2@vu*CV7SDTpJSH4XHIxJRNg-om5`W(Von=f_XkSz?dh5k-@-P< z=vwTGvHt)N#~MXX>~KpRor}mu2C!XwXEPAU&zm;w$HQU@q&u)$7;a zuO_IA?|pRh$C)3ZdQU=--c;&BXu!EW^|q5j%>6bbLFnPvm z>kivI5Ef~F!{U%2@WOU-2TDu~ZrZ;6$eDHF&n(xxHUE50M=R!(Q z`j^TFnGWHUj|HKWh7ZLRfvB}dN z4H%|e4{pynxO3-OVi7|2BptRgHbP;00Z^A38gMMz@ZeJ)wdAhJsQctPYvwDl%$~nB z-GgdD8FEiH{46XaG=Qpq%>K+Er4kJZLEvFGxLc?{mOehYq)ef9roCB#BO)p~SYf}= zkY*;GZN(?Fp+k2~uK_pzY(DE*)VJ;v4pZK)A>X*F zBJe3R8boRoon2h2TyoM7Je!#tA=rpRbt}vTUgo+*Qb}eK78W-2`u=6yePm>0a%yVo zvh_JWVb+_c+BQ5KnPD27`Crl;@&DRf0Fk-NHo17(H%C{`NKRSVW_aywAt9kpU*3NG zsytlRm3HaUi3xEP>chV>KX=)>s09AOCvY(f_nCNnx;Cx`hH=q2Leqg!iHnGccsNqB z;BeyQ^#;hJLG})jPw3r9mG@P%GWL87P~8Mn8A0GOJWNSd;{I^>Zqo9}W6aMgQKg7l z7gp;V$O9Vdgbv9SnB~b|=8J2)ys5xU9a2rJdrf1b8P=BmYzDVLp*Vht&FYD?boh%} z8>dMcaxOsDIA|p;9E`KCZ-^-(BJv1>1jqJeKIjRIRNBcJpZh72DBhT!eKYgcaA~%D zyU{`fn>XyX(Ea6DxxcG|ZKt6#t0OSE3n6nR9IRg_Bg)n`AmC~7w|A@Z`Ve!ozyPMk zrY4@&=diNAJrRNXQUBr=^(O6QD@RYCIpuOqV>!_hwvK;dXpyG`{Y@{s1U*DI9F}Te z&mEX^Vk7b01U)=d?-gQS*#{1D+|chIWOW>9D=jtk71x7f_TZ7Umv z#$6eRmmiGV!!Wh8yN5d2w7!a)h4xW*?mPmPP{4>3^2I~0V5WEY8~FM@>778xj!UY2 z&!5XmOCK&MD9CjGlsN=`zN@HqeHdX-__>DDSZv)destO&3w=EUrJP2Y5IA&@#K2CB!) zmRfdTcaqAPu&AiQu3bkFhRt9sEE9~C_%N*;vbBYskYoPY_Gdl2tBPmkvWIO=*~M7X z)W$|r;LMj9B=aN>0`$WQ_m13C53uUuWr^*wavE~9tN)^#^4xh|1{Qrk5ae@*JjcFR zui`TBDApsKIyc^A6r)WPe}2kS>h!AKc7^`oK~j<`q)rl7VZS_fpDs&D2p($b#{?D@ zF~@TxFQ>|>t6QRAvjLLdINFTR!pYQ%Jf5i;iUhgxwRd+O{IAaFtNC7gtVYEKyodnj z*%lY=Hj)eBh}MYs$wb4Eje~8j2^kjMt_tV14<&E>J z%nBC_8mx47#;A9yw0HNMYURwQvXLU1YP7z`nY!R@BG;(gz%6@eroXNt&*j{O5-O?(x$LCjgQG=M~Gc?ToNlAE0 zKy;sVUdNpdx#rn19l%&FiTAz!gI7{l3BjpK}xj zUfy)Bw%*)UJ=E-s{yAl3L>Z?446DypS5}&!bx)l3!pq}p!XLhSS7zgA8|BUvU&N$J z)Zm=e$6;Oq(9w-sLJ(xo0}9~GWCvZEc60A!3FjL!u1PWu*uh0?f4Gx3=h{{ut#X9i zNI(hFH0-84zv4OV6W>OA0|t|$#-WHS5C|85cw~AzW;!pE$*D1El}(-ct$sLMf6cH^ zPzS*ru8*G$d!MyHUvY`*ea)77`|#vJcc(wSiSgcoyR|MP0*CoF#~5=vy;b*6EMug{rc*Ofrj$F)i+{Jc76Af)XFs~@YlE+7RLJ0eZtu}*=x*eNc9nh%s81|6NzeN z{YY++QT~!>>ruS;A?$HWy!^=MXlN&j(p$H>L%_hCst8^Yw38!b_ycs1fsTJ@TwlTC zAVuvkTs%pFA)d+@#ed??vI3jf!518g*kCM6(H*4tF@xa!f=Uup98zwLVadiHjEGg4y&pG~yb zlDhKeqA|me&_IWJM?1T8@_ebNm|{L&mXVW{ebZO) z;e&HK5%znK~(BA1@fh+A!=BY|%VI>cji*>2tHsN?JpxFJ3s@Z^>BqkLGLl+Uknu63>YD z%}KKBMC~8=@PYIrE5xjiShlii$!hIik(j z@Qx5`)56`A*9=p$M)Rwxd6N;#X;4GalFTe5RQ)fmct+Oimkt@i7hDw&Vm(e;)hOmu z?jG1~X`JB9e5+z9yuSQ{?DvMei9b@8oI7D#%ue~~B=#v@s! zr=PrXVT~KAQ7HEgV&Yzn%e6)QH9wWBsfgx@=GN9}e#|A59toTQVKK4yq>f8ba+?rD zlavjttliz3Tu7yYA&2?hnq`|?o$;w%^N^&-@4u^tm%FrXpFUD#wg%jB_hj{PnqV1j z;=(c)1OPnGJs=(=mGvn{|A2jP=(nFo$t F`ZvC%glPZ( delta 147416 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 W@3U!7t5g%o3uu~pN7Ig+y8J&bb;K_K diff --git a/package.json b/package.json index 1eb41c4aff559..0c31a4fba5e43 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,7 @@ "pmtiles": "^2.11.0", "postcss": "^8.4.31", "postcss-preset-env": "^9.3.0", - "posthog-js": "1.139.1", + "posthog-js": "1.139.2", "posthog-js-lite": "3.0.0", "prettier": "^2.8.8", "prop-types": "^15.7.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 04a1d312b247f..e2792e5699e33 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -260,8 +260,8 @@ dependencies: specifier: ^9.3.0 version: 9.3.0(postcss@8.4.31) posthog-js: - specifier: 1.139.1 - version: 1.139.1 + specifier: 1.139.2 + version: 1.139.2 posthog-js-lite: specifier: 3.0.0 version: 3.0.0 @@ -17707,8 +17707,8 @@ packages: resolution: {integrity: sha512-dyajjnfzZD1tht4N7p7iwf7nBnR1MjVaVu+MKr+7gBgA39bn28wizCIJZztZPtHy4PY0YwtSGgwfBCuG/hnHgA==} dev: false - /posthog-js@1.139.1: - resolution: {integrity: sha512-+JDu2S7z6sh9Q5kj0oh/W8PZJMQ1gSigWi7gbY4NwwCq2M3t0wNFjxlfHbAo1GncRWDxen+IC+3J7oJ8TJGnkA==} + /posthog-js@1.139.2: + resolution: {integrity: sha512-myyuOADqZvYwgqmriwlKDEUDwLhscivFLh67UWBj4Wt9kOlmklvJb36W0ES2GAS6IdojbnGZGH5lF3heqreLWQ==} dependencies: fflate: 0.4.8 preact: 10.22.0 From fa00f3528a3c512375477a65f428e61e7306cdbb Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Fri, 14 Jun 2024 17:27:26 +0200 Subject: [PATCH 15/18] feat(hog): empty, not empty (#22980) --- hogvm/__tests__/__snapshots__/stl.hoge | 30 ++++++++++---- hogvm/__tests__/__snapshots__/stl.stdout | 40 ++++++++++++++++++ hogvm/__tests__/__snapshots__/tuples.hoge | 12 +++--- hogvm/__tests__/__snapshots__/tuples.stdout | 1 + hogvm/__tests__/stl.hog | 45 +++++++++++++++++++-- hogvm/__tests__/tuples.hog | 1 + hogvm/python/stl/__init__.py | 15 +++++++ hogvm/typescript/package.json | 2 +- hogvm/typescript/src/stl/print.ts | 3 ++ hogvm/typescript/src/stl/stl.ts | 24 ++++++++++- 10 files changed, 154 insertions(+), 19 deletions(-) diff --git a/hogvm/__tests__/__snapshots__/stl.hoge b/hogvm/__tests__/__snapshots__/stl.hoge index df6a1ac4eef7c..b55b0303ac63a 100644 --- a/hogvm/__tests__/__snapshots__/stl.hoge +++ b/hogvm/__tests__/__snapshots__/stl.hoge @@ -1,9 +1,25 @@ ["_h", 32, "-- empty, notEmpty, length, lower, upper, reverse --", 2, "print", 1, 35, 32, "234", 2, "notEmpty", 1, 32, "", 2, "empty", 1, 3, 2, 40, 9, 32, "123", 2, "length", 1, 2, "print", 1, 35, 32, "tdd4gh", 32, "Tdd4gh", 2, "lower", 1, -11, 40, 9, 32, "test", 2, "upper", 1, 2, "print", 1, 35, 32, "spinner", 2, "reverse", 1, 2, "print", 1, 35, 32, -"http://www.google.com", 2, "encodeURLComponent", 1, 2, "print", 1, 35, 32, "tom & jerry", 2, "encodeURLComponent", 1, -2, "print", 1, 35, 32, "http://www.google.com", 2, "encodeURLComponent", 1, 2, "decodeURLComponent", 1, 2, "print", 1, -35, 32, "tom & jerry", 2, "encodeURLComponent", 1, 2, "decodeURLComponent", 1, 2, "print", 1, 35, 32, -"http://www.google.com", 2, "base64Encode", 1, 2, "print", 1, 35, 32, "tom & jerry", 2, "base64Encode", 1, 2, "print", -1, 35, 32, "http://www.google.com", 2, "base64Encode", 1, 2, "base64Decode", 1, 2, "print", 1, 35, 32, "tom & jerry", 2, -"base64Encode", 1, 2, "base64Decode", 1, 2, "print", 1, 35] +11, 40, 9, 32, "test", 2, "upper", 1, 2, "print", 1, 35, 32, "spinner", 2, "reverse", 1, 2, "print", 1, 35, 32, "", 2, +"print", 1, 35, 32, "-- encodeURLComponent, decodeURLComponent --", 2, "print", 1, 35, 32, "http://www.google.com", 2, +"encodeURLComponent", 1, 2, "print", 1, 35, 32, "tom & jerry", 2, "encodeURLComponent", 1, 2, "print", 1, 35, 32, +"http://www.google.com", 2, "encodeURLComponent", 1, 2, "decodeURLComponent", 1, 2, "print", 1, 35, 32, "tom & jerry", +2, "encodeURLComponent", 1, 2, "decodeURLComponent", 1, 2, "print", 1, 35, 32, "", 2, "print", 1, 35, 32, +"-- base64Encode, base64Decode --", 2, "print", 1, 35, 32, "http://www.google.com", 2, "base64Encode", 1, 2, "print", 1, +35, 32, "tom & jerry", 2, "base64Encode", 1, 2, "print", 1, 35, 32, "http://www.google.com", 2, "base64Encode", 1, 2, +"base64Decode", 1, 2, "print", 1, 35, 32, "tom & jerry", 2, "base64Encode", 1, 2, "base64Decode", 1, 2, "print", 1, 35, +32, "", 2, "print", 1, 35, 32, "-- empty --", 2, "print", 1, 35, 31, 2, "empty", 1, 2, "print", 1, 35, 33, 0, 2, +"empty", 1, 2, "print", 1, 35, 33, 1, 2, "empty", 1, 2, "print", 1, 35, 33, -1, 2, "empty", 1, 2, "print", 1, 35, 34, +0.0, 2, "empty", 1, 2, "print", 1, 35, 34, 0.01, 2, "empty", 1, 2, "print", 1, 35, 32, "", 2, "empty", 1, 2, "print", 1, +35, 32, "string", 2, "empty", 1, 2, "print", 1, 35, 32, "0", 2, "empty", 1, 2, "print", 1, 35, 43, 0, 2, "empty", 1, 2, +"print", 1, 35, 42, 0, 2, "empty", 1, 2, "print", 1, 35, 2, "tuple", 0, 2, "empty", 1, 2, "print", 1, 35, 33, 0, 2, +"tuple", 1, 2, "empty", 1, 2, "print", 1, 35, 33, 2, 33, 1, 2, "tuple", 2, 2, "empty", 1, 2, "print", 1, 35, 32, "", 2, +"print", 1, 35, 32, "-- notEmpty --", 2, "print", 1, 35, 31, 2, "notEmpty", 1, 2, "print", 1, 35, 33, 0, 2, "notEmpty", +1, 2, "print", 1, 35, 33, 1, 2, "notEmpty", 1, 2, "print", 1, 35, 33, -1, 2, "notEmpty", 1, 2, "print", 1, 35, 34, 0.0, +2, "notEmpty", 1, 2, "print", 1, 35, 34, 0.01, 2, "notEmpty", 1, 2, "print", 1, 35, 32, "", 2, "notEmpty", 1, 2, +"print", 1, 35, 32, "string", 2, "notEmpty", 1, 2, "print", 1, 35, 32, "0", 2, "notEmpty", 1, 2, "print", 1, 35, 43, 0, +2, "notEmpty", 1, 2, "print", 1, 35, 42, 0, 2, "notEmpty", 1, 2, "print", 1, 35, 2, "tuple", 0, 2, "notEmpty", 1, 2, +"print", 1, 35, 33, 0, 2, "tuple", 1, 2, "notEmpty", 1, 2, "print", 1, 35, 33, 2, 33, 1, 2, "tuple", 2, 2, "notEmpty", +1, 2, "print", 1, 35, 32, "", 2, "print", 1, 35, 32, "-- replaceAll, replaceOne --", 2, "print", 1, 35, 32, "L", 32, +"l", 32, "hello world", 2, "replaceAll", 3, 2, "print", 1, 35, 32, "L", 32, "l", 32, "hello world", 2, "replaceOne", 3, +2, "print", 1, 35] diff --git a/hogvm/__tests__/__snapshots__/stl.stdout b/hogvm/__tests__/__snapshots__/stl.stdout index 762eff9197ef2..5d85f96594bf7 100644 --- a/hogvm/__tests__/__snapshots__/stl.stdout +++ b/hogvm/__tests__/__snapshots__/stl.stdout @@ -2,11 +2,51 @@ 3 TEST rennips + +-- encodeURLComponent, decodeURLComponent -- http%3A%2F%2Fwww.google.com tom%20%26%20jerry http://www.google.com tom & jerry + +-- base64Encode, base64Decode -- aHR0cDovL3d3dy5nb29nbGUuY29t dG9tICYgamVycnk= http://www.google.com tom & jerry + +-- empty -- +true +true +false +false +true +false +true +false +false +true +true +true +false +false + +-- notEmpty -- +false +false +true +true +false +true +false +true +true +false +false +false +true +true + +-- replaceAll, replaceOne -- +heLLo worLd +heLlo world diff --git a/hogvm/__tests__/__snapshots__/tuples.hoge b/hogvm/__tests__/__snapshots__/tuples.hoge index c2efc1fd7f680..e5577761448b6 100644 --- a/hogvm/__tests__/__snapshots__/tuples.hoge +++ b/hogvm/__tests__/__snapshots__/tuples.hoge @@ -1,6 +1,6 @@ -["_h", 33, 1, 33, 2, 33, 3, 44, 3, 2, "print", 1, 35, 33, 1, 32, "2", 33, 3, 44, 3, 2, "print", 1, 35, 33, 1, 33, 2, 33, -3, 44, 2, 33, 4, 44, 3, 2, "print", 1, 35, 33, 1, 33, 2, 33, 3, 33, 4, 44, 2, 44, 2, 33, 5, 44, 3, 2, "print", 1, 35, -33, 1, 33, 2, 33, 3, 44, 3, 36, 0, 33, 1, 45, 2, "print", 1, 35, 33, 1, 33, 2, 33, 3, 33, 4, 44, 2, 44, 2, 33, 5, 44, 3, -33, 1, 45, 33, 1, 45, 33, 1, 45, 2, "print", 1, 35, 33, 1, 33, 2, 33, 3, 33, 4, 44, 2, 44, 2, 33, 5, 44, 3, 33, 1, 45, -33, 1, 45, 33, 1, 45, 2, "print", 1, 35, 33, 1, 33, 1, 33, 2, 33, 3, 33, 4, 44, 2, 44, 2, 33, 5, 44, 3, 33, 1, 45, 33, -1, 45, 33, 1, 45, 6, 2, "print", 1, 35, 35] +["_h", 2, "tuple", 0, 2, "print", 1, 35, 33, 1, 33, 2, 33, 3, 44, 3, 2, "print", 1, 35, 33, 1, 32, "2", 33, 3, 44, 3, 2, +"print", 1, 35, 33, 1, 33, 2, 33, 3, 44, 2, 33, 4, 44, 3, 2, "print", 1, 35, 33, 1, 33, 2, 33, 3, 33, 4, 44, 2, 44, 2, +33, 5, 44, 3, 2, "print", 1, 35, 33, 1, 33, 2, 33, 3, 44, 3, 36, 0, 33, 1, 45, 2, "print", 1, 35, 33, 1, 33, 2, 33, 3, +33, 4, 44, 2, 44, 2, 33, 5, 44, 3, 33, 1, 45, 33, 1, 45, 33, 1, 45, 2, "print", 1, 35, 33, 1, 33, 2, 33, 3, 33, 4, 44, +2, 44, 2, 33, 5, 44, 3, 33, 1, 45, 33, 1, 45, 33, 1, 45, 2, "print", 1, 35, 33, 1, 33, 1, 33, 2, 33, 3, 33, 4, 44, 2, +44, 2, 33, 5, 44, 3, 33, 1, 45, 33, 1, 45, 33, 1, 45, 6, 2, "print", 1, 35, 35] diff --git a/hogvm/__tests__/__snapshots__/tuples.stdout b/hogvm/__tests__/__snapshots__/tuples.stdout index 182639c8af8be..a602254cd3101 100644 --- a/hogvm/__tests__/__snapshots__/tuples.stdout +++ b/hogvm/__tests__/__snapshots__/tuples.stdout @@ -1,3 +1,4 @@ +tuple() (1, 2, 3) (1, '2', 3) (1, (2, 3), 4) diff --git a/hogvm/__tests__/stl.hog b/hogvm/__tests__/stl.hog index add53abc003b5..7cb6c0fdba908 100644 --- a/hogvm/__tests__/stl.hog +++ b/hogvm/__tests__/stl.hog @@ -2,15 +2,52 @@ print('-- empty, notEmpty, length, lower, upper, reverse --') if (empty('') and notEmpty('234')) print(length('123')) if (lower('Tdd4gh') == 'tdd4gh') print(upper('test')) print(reverse('spinner')) - +print('') +print('-- encodeURLComponent, decodeURLComponent --') print(encodeURLComponent('http://www.google.com')) print(encodeURLComponent('tom & jerry')) - print(decodeURLComponent(encodeURLComponent('http://www.google.com'))) print(decodeURLComponent(encodeURLComponent('tom & jerry'))) - +print('') +print('-- base64Encode, base64Decode --') print(base64Encode('http://www.google.com')) print(base64Encode('tom & jerry')) - print(base64Decode(base64Encode('http://www.google.com'))) print(base64Decode(base64Encode('tom & jerry'))) +print('') +print('-- empty --') +print(empty(null)) +print(empty(0)) +print(empty(1)) +print(empty(-1)) +print(empty(0.0)) +print(empty(0.01)) +print(empty('')) +print(empty('string')) +print(empty('0')) +print(empty([])) +print(empty({})) +print(empty(tuple())) +print(empty(tuple(0))) +print(empty(tuple(1,2))) +print('') +print('-- notEmpty --') +print(notEmpty(null)) +print(notEmpty(0)) +print(notEmpty(1)) +print(notEmpty(-1)) +print(notEmpty(0.0)) +print(notEmpty(0.01)) +print(notEmpty('')) +print(notEmpty('string')) +print(notEmpty('0')) +print(notEmpty([])) +print(notEmpty({})) +print(notEmpty(tuple())) +print(notEmpty(tuple(0))) +print(notEmpty(tuple(1,2))) +print('') +print('-- replaceAll, replaceOne --') +print(replaceAll('hello world', 'l', 'L')) +print(replaceOne('hello world', 'l', 'L')) + diff --git a/hogvm/__tests__/tuples.hog b/hogvm/__tests__/tuples.hog index e7bd601c7ed2f..da57b0bd497c5 100644 --- a/hogvm/__tests__/tuples.hog +++ b/hogvm/__tests__/tuples.hog @@ -1,3 +1,4 @@ +print(tuple()) print((1, 2, 3)) print((1, '2', 3)) print((1, (2, 3), 4)) diff --git a/hogvm/python/stl/__init__.py b/hogvm/python/stl/__init__.py index 818dc888fa39e..f61674dd3ed1a 100644 --- a/hogvm/python/stl/__init__.py +++ b/hogvm/python/stl/__init__.py @@ -64,6 +64,10 @@ def notEmpty(name: str, args: list[Any], team: Optional["Team"], stdout: Optiona return bool(args[0]) +def _tuple(name: str, args: list[Any], team: Optional["Team"], stdout: Optional[list[str]], timeout: int): + return tuple(args) + + def lower(name: str, args: list[Any], team: Optional["Team"], stdout: Optional[list[str]], timeout: int): return args[0].lower() @@ -135,6 +139,14 @@ def decodeURLComponent( return urllib.parse.unquote(args[0]) +def replaceOne(name: str, args: list[Any], team: Optional["Team"], stdout: Optional[list[str]], timeout: int) -> str: + return args[0].replace(args[1], args[2], 1) + + +def replaceAll(name: str, args: list[Any], team: Optional["Team"], stdout: Optional[list[str]], timeout: int) -> str: + return args[0].replace(args[1], args[2]) + + STL: dict[str, Callable[[str, list[Any], Optional["Team"], list[str] | None, int], Any]] = { "concat": concat, "match": match, @@ -146,6 +158,7 @@ def decodeURLComponent( "length": length, "empty": empty, "notEmpty": notEmpty, + "tuple": _tuple, "lower": lower, "upper": upper, "reverse": reverse, @@ -158,4 +171,6 @@ def decodeURLComponent( "base64Decode": base64Decode, "encodeURLComponent": encodeURLComponent, "decodeURLComponent": decodeURLComponent, + "replaceOne": replaceOne, + "replaceAll": replaceAll, } diff --git a/hogvm/typescript/package.json b/hogvm/typescript/package.json index de1a0b9db0bf3..53c5805ebe241 100644 --- a/hogvm/typescript/package.json +++ b/hogvm/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@posthog/hogvm", - "version": "1.0.12", + "version": "1.0.13", "description": "PostHog Hog Virtual Machine", "types": "dist/index.d.ts", "main": "dist/index.js", diff --git a/hogvm/typescript/src/stl/print.ts b/hogvm/typescript/src/stl/print.ts index 26fad2f4080e9..b70e554a7256e 100644 --- a/hogvm/typescript/src/stl/print.ts +++ b/hogvm/typescript/src/stl/print.ts @@ -42,6 +42,9 @@ export function escapeIdentifier(identifier: string | number): string { export function printHogValue(obj: any): string { if (Array.isArray(obj)) { if ((obj as any).__isHogTuple) { + if (obj.length < 2) { + return `tuple(${obj.map(printHogValue).join(', ')})` + } return `(${obj.map(printHogValue).join(', ')})` } else { return `[${obj.map(printHogValue).join(', ')}]` diff --git a/hogvm/typescript/src/stl/stl.ts b/hogvm/typescript/src/stl/stl.ts index 303ef460ed81b..7966e58ff2d93 100644 --- a/hogvm/typescript/src/stl/stl.ts +++ b/hogvm/typescript/src/stl/stl.ts @@ -27,10 +27,26 @@ export const STL: Record return args[0].length }, empty: (args) => { + if (typeof args[0] === 'object') { + if (Array.isArray(args[0])) { + return args[0].length === 0 + } else if (args[0] === null) { + return true + } else if (args[0] instanceof Map) { + return args[0].size === 0 + } else { + return Object.keys(args[0]).length === 0 + } + } return !args[0] }, notEmpty: (args) => { - return !!args[0] + return !STL.empty(args, 'empty', 0) + }, + tuple: (args) => { + const tuple = args.slice() + ;(tuple as any).__isHogTuple = true + return tuple }, lower: (args) => { return args[0].toLowerCase() @@ -105,6 +121,12 @@ export const STL: Record decodeURLComponent(args) { return decodeURIComponent(args[0]) }, + replaceOne(args) { + return args[0].replace(args[1], args[2]) + }, + replaceAll(args) { + return args[0].replaceAll(args[1], args[2]) + }, } export const ASYNC_STL: Record Promise> = { From 601fd3a1ce8745d8746f726904632e22b15b30af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Far=C3=ADas=20Santana?= Date: Fri, 14 Jun 2024 17:30:19 +0200 Subject: [PATCH 16/18] chore: Bump max memory usage for batch exports (#22895) * chore: Bump max memory usage for batch exports * fix: Set limt Co-authored-by: timgl --------- Co-authored-by: timgl --- posthog/settings/temporal.py | 1 + posthog/temporal/common/clickhouse.py | 1 + 2 files changed, 2 insertions(+) diff --git a/posthog/settings/temporal.py b/posthog/settings/temporal.py index 75e5b9c3ea93b..140fa36dd44f9 100644 --- a/posthog/settings/temporal.py +++ b/posthog/settings/temporal.py @@ -27,6 +27,7 @@ ) CLICKHOUSE_MAX_EXECUTION_TIME: int = get_from_env("CLICKHOUSE_MAX_EXECUTION_TIME", 0, type_cast=int) +CLICKHOUSE_MAX_MEMORY_USAGE: int = get_from_env("CLICKHOUSE_MAX_MEMORY_USAGE", 100 * 1000 * 1000 * 1000, type_cast=int) CLICKHOUSE_MAX_BLOCK_SIZE_DEFAULT: int = get_from_env("CLICKHOUSE_MAX_BLOCK_SIZE_DEFAULT", 10000, type_cast=int) # Comma separated list of overrides in the format "team_id:block_size" CLICKHOUSE_MAX_BLOCK_SIZE_OVERRIDES: dict[int, int] = dict( diff --git a/posthog/temporal/common/clickhouse.py b/posthog/temporal/common/clickhouse.py index 2640bf95c1f97..ad8bfe8173e82 100644 --- a/posthog/temporal/common/clickhouse.py +++ b/posthog/temporal/common/clickhouse.py @@ -417,6 +417,7 @@ async def get_client( password=settings.CLICKHOUSE_PASSWORD, database=settings.CLICKHOUSE_DATABASE, max_execution_time=settings.CLICKHOUSE_MAX_EXECUTION_TIME, + max_memory_usage=settings.CLICKHOUSE_MAX_MEMORY_USAGE, max_block_size=max_block_size, output_format_arrow_string_as_string="true", **kwargs, From 2ce1dac6ec170c68005ef101827c1b3c0e363099 Mon Sep 17 00:00:00 2001 From: Paul D'Ambra Date: Fri, 14 Jun 2024 17:25:26 +0100 Subject: [PATCH 17/18] feat: faster ingestion warnings (#22985) * feat: faster ingestion warnings * obey mypy --- posthog/api/ingestion_warnings.py | 50 ++++++++++++++------- posthog/api/test/test_ingestion_warnings.py | 40 +++++++++++++++-- 2 files changed, 69 insertions(+), 21 deletions(-) diff --git a/posthog/api/ingestion_warnings.py b/posthog/api/ingestion_warnings.py index c246d990d61e2..a820c8c02fc3c 100644 --- a/posthog/api/ingestion_warnings.py +++ b/posthog/api/ingestion_warnings.py @@ -17,11 +17,25 @@ def list(self, request: Request, **kw) -> Response: start_date = now() - timedelta(days=30) warning_events = sync_execute( """ - SELECT type, timestamp, details - FROM ingestion_warnings - WHERE team_id = %(team_id)s - AND timestamp > %(start_date)s - ORDER BY timestamp DESC + SELECT + type, + count(details) as total_count, + arraySlice(groupArray((details, timestamp)), 1, 50) as top_50_recent_examples + FROM + (SELECT + type, + details, + timestamp + FROM + ingestion_warnings + WHERE + team_id = %(team_id)s + AND timestamp > %(start_date)s + ORDER BY + type, + timestamp DESC) + GROUP BY + type """, { "team_id": self.team_id, @@ -34,17 +48,19 @@ def list(self, request: Request, **kw) -> Response: def _calculate_summaries(warning_events): summaries = {} - for warning_type, timestamp, details in warning_events: - details = json.loads(details) - if warning_type not in summaries: - summaries[warning_type] = { - "type": warning_type, - "lastSeen": timestamp, - "warnings": [], - "count": 0, - } - - summaries[warning_type]["warnings"].append({"type": warning_type, "timestamp": timestamp, "details": details}) - summaries[warning_type]["count"] += 1 + for warning_type, count, examples in warning_events: + summaries[warning_type] = { + "type": warning_type, + "lastSeen": examples[0][1] if examples else None, + "warnings": [ + { + "type": warning_type, + "timestamp": timestamp, + "details": json.loads(details), + } + for details, timestamp in examples + ], + "count": count, + } return sorted(summaries.values(), key=lambda summary: summary["lastSeen"], reverse=True) diff --git a/posthog/api/test/test_ingestion_warnings.py b/posthog/api/test/test_ingestion_warnings.py index 05e893babfa3e..21a996c0236dd 100644 --- a/posthog/api/test/test_ingestion_warnings.py +++ b/posthog/api/test/test_ingestion_warnings.py @@ -1,4 +1,5 @@ import json +from math import floor from freezegun.api import freeze_time from rest_framework import status @@ -14,6 +15,7 @@ def create_ingestion_warning(team_id: int, type: str, details: dict, timestamp: str, source=""): timestamp = cast_timestamp_or_now(timestamp) + data = { "team_id": team_id, "type": type, @@ -29,6 +31,22 @@ def create_ingestion_warning(team_id: int, type: str, details: dict, timestamp: class TestIngestionWarningsAPI(ClickhouseTestMixin, APIBaseTest): @freeze_time("2021-12-04T19:20:00Z") def test_ingestion_warnings_api(self): + a_lot_of_ingestion_warning_timestamps: list[str] = [] + # more than the number the front end will show + # KLUDGE: it is 59 here so that timestamp creation can be naive + for i in range(59): + seconds = f"0{i}" if i < 10 else str(i) + minutes = floor(i / 10) + formatted_minutes = f"0{minutes}" if minutes < 10 else str(minutes) + timestamp = f"2021-12-04T13:{formatted_minutes}:{seconds}Z" + a_lot_of_ingestion_warning_timestamps.insert(0, timestamp) + create_ingestion_warning( + team_id=self.team.id, + type="replay_timestamp_too_far", + details={}, + timestamp=timestamp, + ) + create_ingestion_warning( team_id=self.team.id, type="cannot_merge_already_identified", @@ -69,10 +87,24 @@ def test_ingestion_warnings_api(self): response = self.client.get(f"/api/projects/{self.team.pk}/ingestion_warnings") self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual( - response.json(), - { + assert ( + response.json() + == { "results": [ + { + "count": 59, # count is correct and not limited like the examples are + "lastSeen": "2021-12-04T13:05:58Z", + "type": "replay_timestamp_too_far", + "warnings": [ + { + "details": {}, + "timestamp": t, + "type": "replay_timestamp_too_far", + # even though there are very many warnings we limit the number of examples we send to the frontend + } + for t in a_lot_of_ingestion_warning_timestamps[:50] + ], + }, { "type": "cannot_merge_already_identified", "lastSeen": "2021-12-03T00:00:00Z", @@ -108,5 +140,5 @@ def test_ingestion_warnings_api(self): "count": 1, }, ] - }, + } ) From e92f66b100333f866db8de97afffc5318fe8b72b Mon Sep 17 00:00:00 2001 From: Julian Bez Date: Fri, 14 Jun 2024 17:49:39 +0100 Subject: [PATCH 18/18] feat(queries): Add reject_on_worker_lost for async queries (#22898) Add reject_on_worker_lost for async queries --- posthog/tasks/tasks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/posthog/tasks/tasks.py b/posthog/tasks/tasks.py index c370e70207454..a9cf873fdbd9b 100644 --- a/posthog/tasks/tasks.py +++ b/posthog/tasks/tasks.py @@ -47,6 +47,7 @@ def redis_heartbeat() -> None: retry_backoff_max=10, max_retries=3, expires=60 * 10, # Do not run queries that got stuck for more than this + reject_on_worker_lost=True, ) @limit_concurrency(90) # Do not go above what CH can handle (max_concurrent_queries) @limit_concurrency(