1021-40ca2f669b13138d.js 229 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712
  1. "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1021],{787:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});var a=t.b=class extends Error{constructor(e,t){super(t),this.macro=e,this.name="MacroExpansionError"}},n=t.c=class extends a{constructor(e,t,a,n){super(e,n),this.variableName=t,this.availableVariables=a,this.name="UnknownVariableError"}};t.a=class extends Error{constructor(){super("Failed to parse macro arguments"),this.name="MalformedMacroArgsError"}},t.b=a,t.c=n},2615:(e,t,a)=>{var n=a(95384);a(69498),a(62637),a(68798),a(7837),a(40313),a(787),n.x,t.qT=n.w,n.z,t.dd=n.E,t.YR=n.D,n.y,n.A,n.C,t.bn=n.B},3145:(e,t,a)=>{var n=a(95384);a(69498),a(62637),a(68798),a(7837),a(40313),a(787),t.qs=n.F,n.G,n.I,n.H,t.yb=n.M,t._q=n.J,n.K,t.VO=n.L},7565:(e,t,a)=>{a.d(t,{H:()=>l,a:()=>o});var n=a(6029),r=a(75155);a(55729);var i=a(76089),s=a(57820);let o=()=>{let e,t=(0,r.c)(3),{userPreferences:a}=(0,s.HW)(),{isUTC:n,timeFormat:o}=a;return t[0]!==n||t[1]!==o?(e=(e,t)=>{let{format:a}=void 0===t?{}:t;try{let t=e instanceof Date?e:new Date(e);return(0,i.Yq)(t,{clock:o,isUTC:n,format:a})}catch(t){return console.error(t,e),"Unknown date"}},t[0]=n,t[1]=o,t[2]=e):e=t[2],e},l=e=>{let t,a,i=(0,r.c)(6),{value:s,format:l}=e,u=o();return s?(i[0]!==l||i[1]!==u||i[2]!==s?(t=u(s,{format:l}),i[0]=l,i[1]=u,i[2]=s,i[3]=t):t=i[3],i[4]!==t?(a=(0,n.jsx)(n.Fragment,{children:t}),i[4]=t,i[5]=a):a=i[5],a):null}},7837:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0});var a=["trace"];function n(e){return"configType"in e&&"sql"===e.configType}function r(e){return"configType"in e&&"promql"===e.configType}function i(e){return"configType"in e&&"sql"===e.configType}function s(e){return"configType"in e&&"promql"===e.configType}t.a=a,t.b=function(e){return a.includes(e.kind)},t.c=n,t.d=r,t.e=function(e){return!n(e)&&!r(e)},t.f=i,t.g=s,t.h=function(e){return!i(e)&&!s(e)},t.i=function(e){return"markdown"!==e}},20123:(e,t,a)=>{var n=a(95384);a(69498),a(62637),a(68798),a(7837),a(40313),a(787),t.$P=n._b,n.Sb,t.hd=n.Rb,t.aI=n.ec,t.Cc=n.dc,t.O9=n.cc,t.Hm=n.gc,t.sl=n.bc,t.t5=n.$b,t.Iv=n.ac,n.Vb,n.Wb,t.mA=n.Ub,t.U4=n.fc,t.o1=n.Tb,t.BC=n.Zb,t.eT=n.Xb,t.uh=n.Yb,t.c$=n.hc},35467:(e,t,a)=>{var n=a(95384);a(69498),a(62637),a(68798),a(7837),a(40313),a(787),n.Z,t.p1=n.W,t.A2=n.N,t.kg=n.T,t.D7=n.aa,t.ou=n.U,t.rj=n.P,n.S,t.bZ=n.Y,n.R,t.P1=n.ba,n.O,n.da,t.zo=n.ca,t.Zo=n.Q,t.Xt=n.X,t.l6=n.$,t.k$=n._,n.V},35871:(e,t,a)=>{a.d(t,{A:()=>u});var n=a(6029),r=a(75155),i=a(76089),s=a(17183),o=a(45749),l=a(7565);function u(e){let t,a,u,c,m,d=(0,r.c)(12),{originalDateRange:p,effectiveDateRange:f,mvGranularity:g}=e,h=(0,l.a)();if(!f||(0,i._p)(f,p))return null;d[0]!==f[0]||d[1]!==h?(t=h(f[0]),d[0]=f[0],d[1]=h,d[2]=t):t=d[2],d[3]!==f[1]||d[4]!==h?(a=h(f[1]),d[3]=f[1],d[4]=h,d[5]=a):a=d[5],d[6]!==t||d[7]!==a?(u=[t,a],d[6]=t,d[7]=a,d[8]=u):u=d[8];let[y,b]=u,_=g?`Querying ${y} - ${b} due to ${g} rollups in query acceleration.`:`Querying ${y} - ${b} to show complete intervals.`;return d[9]===Symbol.for("react.memo_cache_sentinel")?(c=(0,n.jsx)(o.A,{size:16,color:"var(--color-text)"}),d[9]=c):c=d[9],d[10]!==_?(m=(0,n.jsx)(s.m,{multiline:!0,maw:500,label:_,children:c}),d[10]=_,d[11]=m):m=d[11],m}},39741:(e,t,a)=>{var n=a(95384);a(69498),a(62637),a(68798),a(7837),a(40313),a(787),t.EO=n.ra,n.ta,n.xa,n.ya,t.No=n.Ha,n.va,n.ua,n.sa,t.HB=n.Ia,n.Fa,n.Da,n.Ga,n.Aa,n.wa,t.ut=n.Ba,t.$t=n.Ca,t.OJ=n.za,t.Sw=n.Ea},43152:(e,t,a)=>{a.d(t,{gT:()=>S,Hx:()=>T,WG:()=>A,zE:()=>F,x5:()=>M,p2:()=>L,nH:()=>D,JD:()=>U,S:()=>x,xh:()=>O,VB:()=>Z,VH:()=>Y,m9:()=>ee,A7:()=>X,DY:()=>d.DY,_t:()=>d._t,Z7:()=>d.qt,O7:()=>w,ik:()=>Q,gx:()=>j,U5:()=>B,zg:()=>K,r4:()=>P,VP:()=>k,eY:()=>q,xu:()=>et,Ht:()=>R,W6:()=>C,rP:()=>G,GJ:()=>N});var n=a(6029),r=a(75155),i=a(86508),s=a(11370),o=a(80519),l=a.n(o),u=a(6663),c=a(35467),m=a(67270),d=a(76089),p=a(62798),f=a(82641),g=a(39741),h=a(60665),y=a(35871),b=a(61410);let _={"k8s.pod.cpu.utilization":{newName:"k8s.pod.cpu.usage",versionThreshold:"0.125.0"},"k8s.node.cpu.utilization":{newName:"k8s.node.cpu.usage",versionThreshold:"0.125.0"},"container.cpu.utilization":{newName:"container.cpu.usage",versionThreshold:"0.125.0"}};var $=a(92917);let S=[{value:"count",label:"Count of Events",isAttributable:!1},{value:"sum",label:"Sum",isAttributable:!1},{value:"p99",label:"99th Percentile"},{value:"p95",label:"95th Percentile"},{value:"p90",label:"90th Percentile"},{value:"p50",label:"Median"},{value:"avg",label:"Average"},{value:"max",label:"Maximum"},{value:"min",label:"Minimum"},{value:"count_distinct",label:"Count Distinct",isAttributable:!1},{value:"any",label:"Any"},{value:"increase",label:"Increase",isAttributable:!1},{value:"none",label:"Custom"}],A={name:"",select:[{aggFn:"count",aggCondition:"",aggConditionLanguage:"lucene",valueExpression:""}],where:"",whereLanguage:"lucene",displayType:f.t2.Line,granularity:"auto",alignDateRangeToGranularity:!0};function v(e,t){return"auto"===e||null==e?(0,d.tA)(t,80):e}function E(e,t,a){return!1===t?e:(0,d.Ol)(e,a)}let x=b._N;function w(e){let t=(0,p.O3)(e)&&(0,d.WG)(e.seriesLimit)?e.seriesLimit:void 0,a=v(e.granularity,e.dateRange),n=E(e.dateRange,e.alignDateRangeToGranularity,a),r=!1===e.alignDateRangeToGranularity&&(e.dateRangeEndInclusive??!1);return(0,p.O3)(e)?{...e,dateRange:n,dateRangeEndInclusive:r,granularity:a,limit:{limit:1e5},seriesLimit:t}:{...e,dateRangeEndInclusive:r,dateRange:n,granularity:a}}function N(e){let t,a,n,i=(0,r.c)(10);i[0]!==e.alignDateRangeToGranularity||i[1]!==e.dateRange||i[2]!==e.granularity?(t=v(e.granularity,e.dateRange),a=E(e.dateRange,e.alignDateRangeToGranularity,t),i[0]=e.alignDateRangeToGranularity,i[1]=e.dateRange,i[2]=e.granularity,i[3]=t,i[4]=a):(t=i[3],a=i[4]);let s=a;return i[5]!==e.displayType||i[6]!==e.fillNulls||i[7]!==s||i[8]!==t?(n={displayType:e.displayType,fillNulls:e.fillNulls,dateRange:s,granularity:t},i[5]=e.displayType,i[6]=e.fillNulls,i[7]=s,i[8]=t,i[9]=n):n=i[9],n}let T=" \xb7 ",I=" (previous)";function k(e,t){for(let a of e)if(!a.isDashed&&a.currentPeriodKey.split(T).includes(t))return a.color}function C(e,t){let[a,n]=t.split(" "),r=Number.parseInt(a),i=Math.floor;switch(n){case"second":return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),i(e.getUTCSeconds()/r)*r));case"minute":return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),i(e.getUTCMinutes()/r)*r));case"hour":return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),i(e.getUTCHours()/r)*r));case"day":return new Date(1e3*(i(e.getTime()/1e3/60/60/24/r)*r)*86400);default:return e}}function R(e,t,a){let n=[],r=C(e,a),s=(0,d.qL)(a);for(;r<t;)n.push(r),r=(0,i.A)(r,{seconds:s});return n}let q=e=>{let t=e.toLowerCase();return["count","countIf","countDistinct","sum","sumIf","avg","avgIf","min","max","any","anyLast","groupArray","groupArrayInsertAt","groupArrayMovingAvg","groupArraySample","groupUniqArray","groupUniqArrayIf","groupArrayIntersect","groupArrayIntersectIf","groupArrayReduce","groupBitmap","groupBitmapIf","groupBitmapOr","groupBitmapXor","quantile","quantileIf","quantileExact","quantileExactWeighted","quantileTiming","quantileTimingWeighted","quantileTDigest","quantileTDigestWeighted","quantileBFloat16","quantileBFloat16Weighted","quantiles","median","medianExact","medianTDigest","medianBFloat16","stddevPop","stddevPopIf","stddevSamp","stddevSampIf","varPop","varPopIf","varSamp","varSampIf","covarPop","covarSamp","corr","uniq","uniqExact","uniqCombined","uniqCombined64","uniqHLL12","uniqTheta","groupBitAnd","groupBitOr","groupBitXor","groupArrayMap","groupArrayTuple","groupArraySorted","topK","topKIf","topKWeighted","argMin","argMax","minMap","maxMap","runningDifference","retention","sequenceCount","sequenceMatch","histogram","simpleLinearRegression","stochasticLinearRegression","categoricalInformationValue","sumMap","sumMapFiltered","sumWithOverflow","entropy","skewPop","skewSamp","kurtPop","kurtSamp"].some(e=>t.includes(e.toLowerCase()+"("))},M={factor:1,output:"number",mantissa:0,thousandSeparated:!0},O={factor:1,output:"number",mantissa:2,thousandSeparated:!0,unit:"ms"},F={output:"percent",mantissa:0},L={output:"number",mantissa:2},D={output:"byte"},U={output:"byte"};function V(e,t){return(0,c.P1)(e,[c.A2.Number])?.filter(e=>!t.has(e.name))}function W(e){return(0,c.P1)(e,[c.A2.String,c.A2.Map,c.A2.Array])}function B(e,t,a=!0){if(null==e.meta)throw Error("No meta data found in response");if(0===e.data.length)return[];let n=V(e.meta,new Set)??[];if(0===n.length)throw Error(`No value columns found in result column metadata. Make sure a numeric column exists in the result set.
  2. Result column metadata: ${JSON.stringify(e.meta)}`);let r=n[0].name,i=W(e.meta),s=e.data.map(e=>{let t=i?.length?i.map(({name:t})=>e[t]).join(" - "):r,a=e[r];return{label:t,value:"number"==typeof a?a:Number.parseFloat(`${a}`)}}).filter(e=>!isNaN(e.value)&&isFinite(e.value));return a&&s.sort((e,t)=>t.value-e.value),s.slice(0,500).map((e,a)=>({...e,color:t(a,e.label)}))}function P(e){let[t,a]=e,n=(0,s.A)(a,t);return[new Date(t.getTime()-1e3*n),new Date(a.getTime()-1e3*n)]}function j(e,t,a,n){let r;if(null==e||null==a)return;let i=1/0;for(let n of t){let t=e.get(n);if(null==t)continue;let s=Math.abs(t-a);s<i&&(i=s,r=n)}if(null!=r&&!(i>n))return r}function H({response:e,lineDataMap:t,tsBucketMap:a,source:n,previousPeriodOffsetSeconds:r,isPreviousPeriod:i,hiddenSeries:s=[]}){let{meta:o,data:l}=e;if(null==o)throw Error("No metadata found in response");let u=(0,c.zo)(o);if(null==u)throw Error(`No timestamp column found in result column metadata: ${JSON.stringify(o)}`);let m=V(o,new Set(s))??[],d=W(o)??[],p=1===m.length,g=d.length>0,h=d.map(e=>e.name),y=m.map(e=>e.name),b=p&&g,_=!!n&&1===d.length&&(n.kind===f.GL.Log?d[0].name===n.severityTextExpression:n.kind===f.GL.Trace&&d[0].name===n.statusCodeExpression),S=u.name,A=i?r:0,v=new Map;for(let e of l){let n=e[S],r=v.get(n);void 0===r&&(r=Math.round(new Date(n).getTime()/1e3+A),v.set(n,r));let s=a.get(r);null==s&&(s={[S]:r},a.set(r,s));let o=h.map(t=>{let a=e[t];return"object"==typeof a&&null!==a?JSON.stringify(a):a}),l=o.join(T);for(let a of y){let n=b?l:g?[a,...o].join(T):a,r=i?`${n}${I}`:n,u=e[a],c="number"==typeof u?u:Number.parseFloat(u);s[r]=c;let m=t[r];null==m?t[r]={dataKey:r,currentPeriodKey:n,previousPeriodKey:`${n}${I}`,displayName:r,valueColumnName:a,color:_?(0,$.aw)(e[h[0]]):void 0,isDashed:i}:_&&(m.color=(0,$.aw)(e[h[0]]))}}}function K({currentPeriodResponse:e,previousPeriodResponse:t,dateRange:a,granularity:n,generateEmptyBuckets:r=!0,source:i,hiddenSeries:s=[],previousPeriodOffsetSeconds:o=0,maxSeries:l=b.yr}){var u;let m,d,p=e.meta;if(null==p)throw Error("No meta data found in response");let f=(0,c.zo)(p),g=V(p,new Set(s))??[],h=W(p)??[],y=1===g.length;if(null==f)throw Error(`No timestamp column found in result column metadata. Make sure a Date/DateTime column exists in the result set.
  3. Result column metadata: ${JSON.stringify(p)}`);if(0===g.length)throw Error(`No value columns found in result column metadata. Make sure a numeric column exists in the result set.
  4. Result column metadata: ${JSON.stringify(p)}`);let _=new Map,S={};H({response:e,lineDataMap:S,tsBucketMap:_,source:i,isPreviousPeriod:!1,previousPeriodOffsetSeconds:o,hiddenSeries:s}),null!=t&&H({response:t,lineDataMap:S,tsBucketMap:_,source:i,isPreviousPeriod:!0,previousPeriodOffsetSeconds:o,hiddenSeries:s});let A=(0,$.EA)(),v=Object.values(S).sort((e,t)=>A.findIndex(t=>t===e.color)-A.findIndex(e=>e===t.color)),E=0,x=new Map,w=[],N=new Set,I=new Set,k=g.length>1&&h.length>0,C=e=>{if(!k)return e.currentPeriodKey;let t=`${e.valueColumnName}${T}`;return e.currentPeriodKey.startsWith(t)?e.currentPeriodKey.slice(t.length):e.currentPeriodKey};for(let e of v){let t=C(e);x.set(e.dataKey,t),N.has(t)||(N.add(t),w.push(t)),e.isDashed||I.add(t)}if(w.length>l){E=w.length-l;let e=new Map;for(let t of _.values())for(let[a,n]of Object.entries(t)){if("number"!=typeof n||!Number.isFinite(n))continue;let t=x.get(a);if(null==t)continue;let r=Math.abs(n),i=e.get(t);(null==i||r>i)&&e.set(t,r)}let t=(t,a)=>{let n=(e.get(a.groupKey)??0)-(e.get(t.groupKey)??0);return 0!==n?n:t.index-a.index},a=new Set([...w.map((e,t)=>({groupKey:e,index:t})).filter(({groupKey:e})=>I.has(e)).sort(t),...w.map((e,t)=>({groupKey:e,index:t})).filter(({groupKey:e})=>!I.has(e)).sort(t)].slice(0,l).map(({groupKey:e})=>e)),n=new Set(v.filter(e=>a.has(C(e))).map(e=>e.dataKey));for(let e of(v=v.filter(e=>a.has(C(e))),_.values()))for(let t of Object.keys(e))t===f.name||n.has(t)||delete e[t]}r&&null!=n&&R(a[0],a[1],n).forEach(e=>{let t=e.getTime()/1e3,a=_.get(t);if(null==a){let e={[f.name]:t};for(let t of v)e[t.dataKey]=0;_.set(t,e)}else{for(let e of v)null==a[e.dataKey]&&(a[e.dataKey]=0);_.set(t,a)}});let q=Array.from(_.values()).sort((e,t)=>e[f.name]-t[f.name]),M=(u=v,m=new Map,d=0,u.map(e=>{let t=e.currentPeriodKey;return m.has(t)?e.color=m.get(t):(e.color||(e.color=(0,$.ob)(d++,e.displayName??e.dataKey)),m.set(t,e.color)),e})),O=new Set(M.map(e=>C(e))).size;return{graphResults:q,timestampColumn:f,lineData:M,groupColumns:h.map(e=>e.name),valueColumns:g.map(e=>e.name),isSingleValueColumn:y,hiddenSeriesCount:E,renderedSeriesCount:O}}let z=e=>{if(null==e)return e;if(e.endsWith("_rate"))return z(e.replace("_rate",""));if("p50"===e||"p90"===e||"p95"===e||"p99"===e)return"quantile";if("count_per_sec"===e||"count_per_min"===e||"count_per_hour"===e)return"count";if(["avg","count","count_distinct","last_value","max","min","sum"].includes(e))return e;throw Error(`Unsupported aggregation function in v2: ${e}`)},Q=(e,t)=>{let{series:a,granularity:n,dateRange:r,displayType:i="line",fillNulls:s}=e;if(a.length<1)throw Error("series is required");let o=a[0],c="stacked_bar"===i?f.t2.StackedBar:f.t2.Line;if("logs"===o.table)throw Error("IMPLEMENT ME (logs)");if("metrics"===o.table){let e;if(null==t.metric)throw Error("source.metric is required for metrics");return{select:a.map(e=>{let t=e.field??"",[a,n]=t.split(" - ").map(e=>e.trim()),r=function(e){let t=_[e];if(t)return l().format("MetricName IN (?)",[[e,t.newName]])}(a),i=u.fc(f.SX).parse(n?.toLowerCase());return{aggFn:z(e.aggFn),metricType:i,valueExpression:t,metricName:a,metricNameSql:r,aggConditionLanguage:"lucene",aggCondition:e.where}}),from:t.metric?.from,numberFormat:o.numberFormat,groupBy:(e=t.metric,o.groupBy.map(t=>t.startsWith("k8s")?`${e.resourceAttributesExpression}['${t}']`:t).join(",")),dateRange:r,connection:t.metric?.connection,metricTables:t.metric?.metricTables,timestampValueExpression:t.metric?.timestampValueExpression,granularity:n,where:"",fillNulls:s,displayType:c}}throw Error(`unsupported table in v2: ${o.table}`)};function G(e){try{return(0,g.ut)(e)}catch{return e}}function Y({source:e,config:t,dateRange:a,groupFilters:n,valueRangeFilter:r}){if(!e?.id)return null;let i=G({...t,whereLanguage:t.whereLanguage||"lucene"}),s=(0,m.bv)(i);if(s&&null==(e.kind===f.GL.Metric||e.kind===f.GL.Trace?e.logSourceId:void 0))return h.$e.show({color:"yellow",message:"No log source is associated with the selected metric source."}),null;let o=i.where,u=i.whereLanguage||"lucene";0===o.length&&Array.isArray(i.select)&&1===i.select.length&&(o=i.select[0].aggCondition??"",u=i.select[0].aggConditionLanguage??"lucene");let c=[];if(n&&n.length>0&&n.forEach(({column:e,value:t})=>{if(e&&null!=t){let a=`${e} IN (${l().escape(t)})`;c.push({type:"sql",condition:a})}}),r){let{expression:e,value:t,threshold:a=.05}=r;if(!q(e)){let n=`${e} BETWEEN ${l().escape(t*(1-a))} AND ${l().escape(t*(1+a))}`;c.push({type:"sql",condition:n})}}let d=a[0].getTime(),p=a[1].getTime(),g={source:e?.id??"",where:o,whereLanguage:u,filters:JSON.stringify([...i.filters??[],...c]),isLive:"false",from:d.toString(),to:p.toString()};return s&&(g.where="",g.whereLanguage="lucene",g.filters=JSON.stringify([]),g.source=(e.kind===f.GL.Metric||e.kind===f.GL.Trace?e.logSourceId:void 0)??""),i.eventTableSelect&&(g.select=i.eventTableSelect),`/search?${new URLSearchParams(g).toString()}`}function Z({source:e,config:t,dateRange:a}){if(!t||!e||!(0,p.O3)(t)||null!=t.metricTables||!(0,f.sx)(e))return null;if(Array.isArray(t.select)){let e=t.select.some(e=>null!=e.aggCondition&&e.aggCondition.trim().length>0),a=1===t.select.length&&0===t.where.length;if(e&&!a)return null}return Y({source:e,config:t,dateRange:a})}function J(e){return e?"string"==typeof e?e.split(",").map(e=>e.trim()):e.map(e=>"string"==typeof e?e:e.valueExpression):[]}function X({row:e,source:t,config:a,dateRange:n}){let r;if(!t?.id)return null;let i=G(a),s=[];J(i.groupBy).forEach(t=>{null!=e[t]&&s.push({column:t,value:e[t]})});let o=i.select?.[0];if(o){let t="string"==typeof o?void 0:o.aggFn;if(S.find(e=>e.value===t)?.isAttributable!==!1){let t="string"==typeof o?o:o.valueExpression,a=new Set(J(i.groupBy)),n=Object.keys(e).find(e=>!a.has(e)),s=n?e[n]:void 0;null!=s&&"number"==typeof s&&(r={expression:t,value:s})}}return Y({source:t,config:i,dateRange:n,groupFilters:s,valueRangeFilter:r})}function ee({mvOptimizationData:e,originalDateRange:t}){let a=e?.optimizedConfig?.dateRange;if(!a)return null;let r=e?.explanations.find(e=>e.success)?.mvConfig.minGranularity;return(0,n.jsx)(y.A,{originalDateRange:t,effectiveDateRange:a,mvGranularity:r},"date-range-indicator")}function et(e){return!1!==e}},49672:(e,t,a)=>{a.d(t,{VH:()=>p,W:()=>m,fu:()=>d,uI:()=>g});var n=a(75155),r=a(35467),i=a(88459),s=a(12482),o=a(98142),l=a(93108),u=a(6876),c=a(61410);let m=(e={})=>{if(o.VO){let t=(0,l.xZ)();return 0===t.length?(console.warn("No local connection found"),new i.aP({host:"",...e})):new i.aP({host:t[0].host,username:t[0].username,password:t[0].password,...e})}return new i.aP({host:"/api/clickhouse-proxy",...e})},d=(e={})=>{let{data:t}=u.Ay.useMe(),a=t?.team?.queryTimeout;return void 0!==a?e.queryTimeout=a:e.queryTimeout=c.rb,m(e)};function p(e,t){let a,r,i,o,l=(0,n.c)(8),{connectionId:u}=e;l[0]===Symbol.for("react.memo_cache_sentinel")?(a=m(),l[0]=a):a=l[0];let c=a;return l[1]!==u?(r=["direct_datasources/databases",u],i=async()=>await c.query({query:"SHOW DATABASES",connectionId:u}).then(f),l[1]=u,l[2]=r,l[3]=i):(r=l[2],i=l[3]),l[4]!==t||l[5]!==r||l[6]!==i?(o={queryKey:r,queryFn:i,staleTime:3e5,...t},l[4]=t,l[5]=r,l[6]=i,l[7]=o):o=l[7],(0,s.I)(o)}function f(e){return e.json()}function g({database:e,connectionId:t},a){let n=m();return(0,s.I)({queryKey:[`direct_datasources/databases/${e}/tables`,t],queryFn:async()=>{let a=(0,r.kg)`SHOW TABLES FROM ${{Identifier:e}}`;return await n.query({query:a.sql,query_params:a.params,connectionId:t}).then(e=>e.json())},staleTime:3e5,...a})}},57389:(e,t,a)=>{a.d(t,{d:()=>m});var n=a(75155),r=a(2615),i=a(82641),s=a(4308),o=a(12482),l=a(49672),u=a(81973),c=a(78550);function m(e,t){let a,m,d,p,f,g=(0,n.c)(16);g[0]!==t?(a=t||{},g[0]=t,g[1]=a):a=g[1];let{enabled:h}=a,y=(0,c.Ge)(),b=(0,l.fu)(),_=e?.source;g[2]!==_?(m={id:_},g[2]=_,g[3]=m):m=g[3];let{data:$,isLoading:S}=(0,u.Fo)(m);g[4]!==e?(d=["optimizationExplanation",e],g[4]=e,g[5]=d):d=g[5],g[6]!==b||g[7]!==e||g[8]!==y||g[9]!==$?(p=async t=>{let{signal:a}=t;return e&&$&&($.kind===i.GL.Log||$.kind===i.GL.Trace)?await (0,r.bn)(e,y,b,a,$):{explanations:[]}},g[6]=b,g[7]=e,g[8]=y,g[9]=$,g[10]=p):p=g[10];let A=(void 0===h||h)&&!S&&!!e&&!!$;return g[11]!==t||g[12]!==d||g[13]!==p||g[14]!==A?(f={queryKey:d,queryFn:p,placeholderData:s.rX,staleTime:5e3,...t,enabled:A},g[11]=t,g[12]=d,g[13]=p,g[14]=A,g[15]=f):f=g[15],(0,o.I)(f)}},61410:(e,t,a)=>{a.d(t,{Km:()=>n,LD:()=>i,NG:()=>c,Nz:()=>m,_N:()=>s,fz:()=>l,nw:()=>u,rb:()=>r,yr:()=>o});let n=200,r=60,i=100,s=100,o=250,l=500,u=5e3;function c(e){return 0===e?1/0:null==e||!Number.isInteger(e)||e<0?o:e}function m(e){return{limit:{limit:e?.searchRowLimit??n}}}},62637:(e,t)=>{function a(e,t){return null!=e?e:t()}function n(e){let t,a=e[0],n=1;for(;n<e.length;){let r=e[n],i=e[n+1];if(n+=2,("optionalAccess"===r||"optionalCall"===r)&&null==a)return;"access"===r||"optionalAccess"===r?(t=a,a=i(a)):("call"===r||"optionalCall"===r)&&(a=i((...e)=>a.call(t,...e)),t=void 0)}return a}function r(e){let t={};return function e(a,n){if(Object(a)!==a)t[n]=a;else if(Array.isArray(a)){for(let t=0;t<a.length;t++)e(a[t],n+"["+t+"]");0===a.length&&(t[n]=[])}else{let r=!0;for(let t in a)r=!1,e(a[t],n?n+"."+t:t);r&&n&&(t[n]={})}}(e,""),t}function i(e){let t=e.map(r),n=new Map,i=new Set;t.forEach(e=>{Object.entries(e).forEach(([e])=>{let t=n.get(e)||0;n.set(e,t+1),t+1>=5&&i.add(e)})});let s=new Map;t.forEach(e=>{Object.entries(e).forEach(([e,t])=>{if(i.has(e)){let a=s.get(e);a||(a=new Map,s.set(e,a));let n=null==t?"":String(t),r=a.get(n)||0;a.set(n,r+1)}})});let o=new Map;return s.forEach((e,t)=>{let r=new Map;e.forEach((e,i)=>{r.set(i,e/a(n.get(t),()=>1)*100)}),o.set(t,r)}),{percentageOccurences:o,propertyOccurences:n,valueOccurences:s}}function s(e){let t=e.trim(),a=!0;for(;a;)a=!1,t.startsWith("LowCardinality(")&&t.endsWith(")")?(t=t.slice(15,-1).trim(),a=!0):t.startsWith("Nullable(")&&t.endsWith(")")&&(t=t.slice(9,-1).trim(),a=!0);return t}function o(e){let t=e.match(/^([^[]+)\[(\d+)\]$/);return t?t[1]:e.includes("[")?null:e}function l(e,t){let a=o(e);if(!a||!/(Id|ID)$/.test(a))return!1;let n=t.find(e=>e.name===a);if(!n)return!1;let r=s(n.type);return"String"===r||!!r.startsWith("Array(")&&"String"===s(r.slice(6,-1))}function u(e,t){let a=o(e);if(!a)return!1;let n=t.find(e=>e.name===a);if(!n)return!1;let r=s(n.type);return!!r.startsWith("Array(")&&s(r.slice(6,-1)).startsWith("DateTime64(")}function c(e,t){return l(e,t)||u(e,t)}function m(e,t,r,i,s){let o=a(i.get(e),()=>0),l=a(s.get(e),()=>0);if(o+l<=20)return!1;let u=a(n([t,"access",e=>e.get,"call",t=>t(e),"optionalAccess",e=>e.size]),()=>0),c=a(n([r,"access",e=>e.get,"call",t=>t(e),"optionalAccess",e=>e.size]),()=>0),m=o>0?u/o:null,d=l>0?c/l:null,p;if(null!==m&&null!==d)p=Math.min(m,d);else if(null!==m)p=m;else{if(null===d)return!1;p=d}return p>.9}function d(e,t){let n=new Set([...e.keys(),...t.keys()]);if(0===n.size)return 0;let r=0,i=0;if(e.forEach(e=>r+=e),t.forEach(e=>i+=e),0===r&&0===i)return 0;if(0===r||0===i){let a=r>0?e:t;if(a.size<=1)return 0;let n=r>0?r:i,s=0;return a.forEach(e=>{let t=e/n*100;t>s&&(s=t)}),s}let s=0;return n.forEach(n=>{let o=Math.abs(a(e.get(n),()=>0)/r*100-a(t.get(n),()=>0)/i*100);o>s&&(s=o)}),s}Object.defineProperty(t,"__esModule",{value:!0});var p=["service.name","http.method","http.request.method","http.status_code","http.response.status_code","error","error.type","deployment.environment","deployment.environment.name","rpc.method","rpc.service","db.system","db.operation","messaging.system","messaging.operation"];function f(e){let t=e.toLowerCase();for(let e of p)if(t.endsWith("."+e)||t===e)return 1;return 0}var g=t.m=500,h=t.n=5e3,y=t.o=.01;t.a=r,t.b=5,t.c=i,t.d=s,t.e=o,t.f=l,t.g=u,t.h=c,t.i=m,t.j=d,t.k=f,t.l=1e3,t.m=g,t.n=h,t.o=y,t.p=function(e){return e?`cityHash64(${e})`:"rand()"},t.q=function(e){return e<=0?1e3:Math.min(h,Math.max(g,Math.ceil(e*y)))},t.r=function(e){let t=i(e.targetRows),n=i(e.baselineRows),r=new Set([...t.valueOccurences.keys(),...n.valueOccurences.keys()]),s=[];for(let i of r){let r=d(a(t.valueOccurences.get(i),()=>new Map),a(n.valueOccurences.get(i),()=>new Map)),o=r>0?f(i):0,l=r+.1*o,u=!1,p;c(i,e.columnMeta)?(u=!0,p="denylist"):m(i,t.valueOccurences,n.valueOccurences,t.propertyOccurences,n.propertyOccurences)&&(u=!0,p="high_cardinality"),s.push({key:i,score:l,baseScore:r,semanticBoost:o,hidden:u,hiddenReason:p})}return s.sort((e,t)=>t.score-e.score),{ranked:s,targetStats:t,baselineStats:n}}},62798:(e,t,a)=>{var n=a(7837);a(40313),t.i_=n.a,t.uA=n.i,t.O3=n.e,t.Rh=n.h,n.b,t.qi=n.d,t.V4=n.g,t.Xo=n.c,t.wH=n.f},67270:(e,t,a)=>{var n=a(95384);a(69498),a(62637),a(68798),a(7837),a(40313),a(787),t.n_=n.j,n.n,n.p,t.bv=n.m,t.v4=n.q,t.sA=n.s,t.lE=n.l,t.x1=n.k,t.PV=n.v,n.u,n.r,n.o,n.t},68798:(e,t)=>{function a(e){let t,a=e[0],n=1;for(;n<e.length;){let r=e[n],i=e[n+1];if(n+=2,("optionalAccess"===r||"optionalCall"===r)&&null==a)return;"access"===r||"optionalAccess"===r?(t=a,a=i(a)):("call"===r||"optionalCall"===r)&&(a=i((...e)=>a.call(t,...e)),t=void 0)}return a}Object.defineProperty(t,"__esModule",{value:!0});var n,r=t.b=64,i=e=>"+"===e||"-"===e||"*"===e||"/"===e,s=e=>e>="0"&&e<="9",o=e=>e>="A"&&e<="Z",l=e=>e>="a"&&e<="z",u=e=>o(e)||l(e),c=e=>/\s/.test(e),m=t.c=e=>e.charCodeAt(0)-65,d=t.d=e=>e>=0&&e<26?String.fromCharCode(65+e):void 0,p=class extends Error{constructor(e,t){super(e),this.position=t}},f=n=class{constructor(e,t){n.prototype.__init.call(this),n.prototype.__init2.call(this),this.tokens=e,this.expressionLength=t}__init(){this.pos=0}__init2(){this.depth=0}enterNested(e){if(this.depth++,this.depth>64)throw new p("Expression is nested too deeply (max 64 levels)",e)}exitNested(){this.depth--}parse(){let e=this.parseExpression(),t=this.peek();if(void 0!==t)throw new p("rparen"===t.type?"Unmatched closing parenthesis":`Unexpected ${g(t)}`,t.position);return e}peek(){return this.tokens[this.pos]}next(){return this.tokens[this.pos++]}parseExpression(){let e=this.parseTerm();for(;;){let t=this.peek();if("operator"!==a([t,"optionalAccess",e=>e.type])||"+"!==t.op&&"-"!==t.op)break;this.pos++,e={type:"binary",op:t.op,left:e,right:this.parseTerm()}}return e}parseTerm(){let e=this.parseFactor();for(;;){let t=this.peek();if("operator"!==a([t,"optionalAccess",e=>e.type])||"*"!==t.op&&"/"!==t.op)break;this.pos++,e={type:"binary",op:t.op,left:e,right:this.parseFactor()}}return e}parseFactor(){let e=this.peek();if("operator"===a([e,"optionalAccess",e=>e.type])&&"-"===e.op){this.pos++,this.enterNested(e.position);let t=this.parseFactor();return this.exitNested(),{type:"unary",op:"-",operand:t}}return this.parsePrimary()}parsePrimary(){let e=this.next();if(void 0===e)throw new p("Unexpected end of expression",this.expressionLength);switch(e.type){case"number":return{type:"number",value:e.value};case"seriesRef":return{type:"seriesRef",ref:e.ref,index:m(e.ref)};case"lparen":{this.enterNested(e.position);let r=this.parseExpression();this.exitNested();let i=this.next();if("rparen"!==a([i,"optionalAccess",e=>e.type])){var t,n;throw new p("Missing closing parenthesis",(t=a([i,"optionalAccess",e=>e.position]),n=()=>this.expressionLength,null!=t?t:n()))}return r}default:throw new p(`Unexpected ${g(e)}`,e.position)}}},g=e=>{switch(e.type){case"number":return`number "${e.text}"`;case"seriesRef":return`series reference "${e.ref}"`;case"operator":return`operator "${e.op}"`;case"lparen":return"opening parenthesis";case"rparen":return"closing parenthesis"}},h=(e,t)=>{switch(e.type){case"binary":h(e.left,t),h(e.right,t);break;case"unary":h(e.operand,t);break;case"seriesRef":t.add(e.index)}},y=t.e=e=>{if(""===e.trim())return{ok:!1,errors:[{code:"empty-expression",message:"Expression is empty"}]};if(e.length>1024)return{ok:!1,errors:[{code:"expression-too-long",message:`Expression is too long (${e.length} characters, max 1024)`,maxLength:1024}]};let t=(e=>{let t=[],a=0;for(;a<e.length;){let n=e.charAt(a);if(c(n))a++;else if(i(n))t.push({type:"operator",op:n,position:a}),a++;else if("("===n)t.push({type:"lparen",position:a}),a++;else if(")"===n)t.push({type:"rparen",position:a}),a++;else if(s(n)||"."===n&&s(e.charAt(a+1))){let n=a;for(;a<e.length&&s(e.charAt(a));)a++;if("."===e.charAt(a))for(a++;a<e.length&&s(e.charAt(a));)a++;let r=e.slice(n,a),i=Number(r);if(!Number.isFinite(i))return{error:{code:"invalid-token",message:`Invalid number "${r}"`,position:n,token:r}};t.push({type:"number",value:i,position:n,text:r})}else if(o(n)){let n=a;for(;a<e.length&&u(e.charAt(a));)a++;let r=e.slice(n,a);if(r.length>1)return{error:{code:"invalid-token",message:`Unexpected "${r}" \u2014 series references are single letters (A, B, C, ...) and functions are not supported`,position:n,token:r}};t.push({type:"seriesRef",ref:r,position:n})}else{if(!l(n))return{error:{code:"invalid-token",message:`Unexpected character "${n}"`,position:a,token:n}};let t=a;for(;a<e.length&&u(e.charAt(a));)a++;let r=e.slice(t,a);return{error:{code:"invalid-token",message:`Unexpected "${r}" \u2014 series references are uppercase letters (A, B, C, ...)`,position:t,token:r}}}}return{tokens:t}})(e);if("error"in t)return{ok:!1,errors:[t.error]};try{let a=new f(t.tokens,e.length).parse(),n=new Set;return h(a,n),{ok:!0,ast:a,referencedIndices:[...n].sort((e,t)=>e-t)}}catch(e){if(e instanceof p)return{ok:!1,errors:[{code:"syntax-error",message:e.message,position:e.position}]};throw e}},b=t.f=(e,{seriesCount:t})=>{let a=y(e);if(!a.ok)return a;let n=[],r=a=>{switch(a.type){case"binary":r(a.left),r(a.right);break;case"unary":r(a.operand);break;case"seriesRef":a.index>=t&&n.push({code:"unknown-series-ref",message:t>0?`Unknown series "${a.ref}" \u2014 this chart only has series A through ${d(t-1)}`:`Unknown series "${a.ref}" \u2014 this chart has no series`,position:_(e,a.ref),ref:a.ref})}};r(a.ast);let i=new Set,s=n.filter(e=>"unknown-series-ref"!==e.code||!i.has(e.ref)&&(i.add(e.ref),!0));return 0===a.referencedIndices.length&&s.push({code:"constant-only-expression",message:"Expression must reference at least one series (A, B, C, ...)"}),s.length>0?{ok:!1,errors:s}:a},_=(e,t)=>{let a=e.indexOf(t);return a>=0?a:0},$=t.g=(e,t)=>{switch(e.type){case"number":return String(e.value);case"seriesRef":return`coalesce(${t(e.index)}, 0)`;case"unary":return`(-${$(e.operand,t)})`;case"binary":{let a=$(e.left,t),n=$(e.right,t);return"/"===e.op?`(${a} / nullif(${n}, 0))`:`(${a} ${e.op} ${n})`}}};t.a=1024,t.b=r,t.c=m,t.d=d,t.e=y,t.f=b,t.g=$},69498:(e,t)=>{function a(e,t){for(let a=0;a<4;a++)if(e[a]!==t[a])return e[a]-t[a];return 0}function n(e,t){return!!e&&a(e,t)>=0}Object.defineProperty(t,"__esModule",{value:!0});var r=[[26,2,19,43],[26,3,12,3],[26,4,3,37]],i=[[26,2,1,307],[26,3,0,0],[26,4,1,1740]],s=[26,5,0,0],o=[26,3,0,0];t.a=function(e){let t=e.trim();if(!t)return;let a=t.split(".",5);if(a.length<2)return;let n=[];for(let e=0;e<4;e++){var r,i;let t=(r=a[e],i=()=>"0",null!=r?r:i()).match(/^\d+/);if(!t){if(e<2)return;n.push(0);continue}let s=Number.parseInt(t[0],10);if(!Number.isFinite(s)){if(e<2)return;n.push(0);continue}n.push(s)}return[n[0],n[1],n[2],n[3]]},t.b=a,t.c=n,t.d=function(e,t=!1){if(!e)return!1;if(a(e,s)>=0)return!0;let[n,o]=e,l=(t?i:r).find(([e,t])=>e===n&&t===o);return!!l&&a(e,l)>=0},t.e=function(e){return n(e,o)}},69519:(e,t,a)=>{a.d(t,{Me:()=>s,Pd:()=>n,ok:()=>r,so:()=>i});let n=60,r=[900,21600,21600,43200,86400];function i(e,t,a=r){if(e.getTime()===t.getTime())return[{startTime:e,endTime:t,windowIndex:0,direction:"DESC"}];let n=[],s=new Date(t),o=0;for(;s>e;){let t=1e3*(a[o]||a[a.length-1]),r=new Date(Math.max(s.getTime()-t,e.getTime()));n.push({endTime:new Date(s),startTime:r,windowIndex:o,direction:"DESC"}),s=r,o++}return n}function s(e,t,a=r){if(e.getTime()===t.getTime())return[{startTime:e,endTime:t,windowIndex:0,direction:"ASC"}];let n=[],i=new Date(e),o=0;for(;i<t;){let e=1e3*(a[o]||a[a.length-1]),r=new Date(Math.min(i.getTime()+e,t.getTime()));n.push({startTime:new Date(i),endTime:r,windowIndex:o,direction:"ASC"}),i=r,o++}return n}},73854:(e,t,a)=>{t.G=a(91820).a},76089:(e,t,a)=>{var n=a(95384);a(69498),a(62637),a(68798),a(7837),a(40313),a(787),n.Ta,t.Z7=n.fb,n.lb,t.C2=n.Gb,t.zj=n.ab,t.tA=n.hb,t.qL=n.ib,t.DY=n.rb,t.sE=n.pb,t.Ro=n.ob,t._t=n.sb,t.qt=n.tb,t.nw=n.Jb,t.F8=n.Mb,t.A5=n.Ib,n.Ya,n.Cb,n.db,t.Yq=n.nb,t.Ol=n.Ab,n.Hb,n.ub,n.$a,t.ms=n.qb,t.WG=n.Ua,n.gb,t.Bd=n.Va,t._p=n.Bb,t.es=n.xb,t.l_=n.Kb,t.G5=n.Lb,n.cb,n.Wa,n.Za,t.Tr=n.Pb,t.jN=n.wb,n.Eb,n.Qb,n.zb,n.mb,n.Db,n.yb,n.Fb,n.bb,n.vb,n.eb,n.Xa,t.AB=n._a,n.kb,n.jb,t.PZ=n.Ob,t.m1=n.Nb},78550:(e,t,a)=>{a.d(t,{Ii:()=>B,ws:()=>O,Zh:()=>v,GO:()=>E,lo:()=>W,kN:()=>V,n$:()=>N,bZ:()=>I,Ge:()=>A,Sh:()=>C,gt:()=>w,Z2:()=>F});var n=a(75155),r=a(55729),i=a(79339),s=a.n(i),o=a(35467),l=a(20123),u=a(82641),c=a(93251),m=a(12482),d=a(4308),p=a(6876),f=a(98142),g=a(93108),h=a(61410),y=a(3145),b=a(49672);let _=()=>(0,y.yb)((0,b.W)({queryTimeout:h.rb}));var $=a(81973),S=a(92917);function A(){let e,t,a,i,s,o=(0,n.c)(10);o[0]===Symbol.for("react.memo_cache_sentinel")?(e=_(),o[0]=e):e=o[0];let[l,u]=(0,r.useState)(e),{data:m}=p.Ay.useMe(),d=(0,r.useRef)(!1),h=(0,c.jE)();o[1]!==h?(t=()=>{if(void 0===window.document||!f.VO)return;let e=e=>{e.key===g.Gs&&e.newValue&&(u(_()),d.current=!1,h.resetQueries())};return window.addEventListener("storage",e),()=>{window.removeEventListener("storage",e)}},a=[h],o[1]=h,o[2]=t,o[3]=a):(t=o[2],a=o[3]),(0,r.useEffect)(t,a),o[4]!==m||o[5]!==l?(i=()=>{m?.team?.metadataMaxRowsToRead&&!d.current&&(l.setClickHouseSettings({max_rows_to_read:String(m.team.metadataMaxRowsToRead)}),d.current=!0)},o[4]=m,o[5]=l,o[6]=i):i=o[6];let y=m?.team?.metadataMaxRowsToRead;return o[7]!==l||o[8]!==y?(s=[y,l],o[7]=l,o[8]=y,o[9]=s):s=o[9],(0,r.useEffect)(i,s),l}function v(e,t){let a,r,i,s=(0,n.c)(14),{databaseName:o,tableName:l,connectionId:u}=e,c=A();s[0]!==u||s[1]!==o||s[2]!==l?(a=["useMetadata.useColumns",{connectionId:u,databaseName:o,tableName:l}],s[0]=u,s[1]=o,s[2]=l,s[3]=a):a=s[3],s[4]!==u||s[5]!==o||s[6]!==c||s[7]!==l?(r=async()=>c.getColumns({databaseName:o,tableName:l,connectionId:u}),s[4]=u,s[5]=o,s[6]=c,s[7]=l,s[8]=r):r=s[8];let d=!!o&&!!l&&!!u;return s[9]!==t||s[10]!==a||s[11]!==r||s[12]!==d?(i={queryKey:a,queryFn:r,enabled:d,...t},s[9]=t,s[10]=a,s[11]=r,s[12]=d,s[13]=i):i=s[13],(0,m.I)(i)}function E(e){let t,a=(0,n.c)(2);return a[0]!==e?(t=new Map((0,o.P1)(e??[],[o.A2.Date])?.map(x)),a[0]=e,a[1]=t):t=a[1],t}function x(e){return[e.name,e.type]}function w(e){let t,a,i,s=(0,n.c)(7),o=E(e);s[0]===Symbol.for("react.memo_cache_sentinel")?(t=[],s[0]=t):t=s[0];let[l,u]=(0,r.useState)(t),c=E(l);if(s[1]!==l||s[2]!==c||s[3]!==o){for(let{name:e}of(a=new Map(o),l))c.has(e)||a.delete(e);for(let[e,t]of c)a.set(e,t);s[1]=l,s[2]=c,s[3]=o,s[4]=a}else a=s[4];let m=a;return s[5]!==m?(i={dateTimeColumns:m,onResolvedColumnsChange:u},s[5]=m,s[6]=i):i=s[6],i}function N(e,t){let a,r,i,s=(0,n.c)(10),l=A();s[0]!==e?(a=["useMetadata.useJsonColumns",e],s[0]=e,s[1]=a):a=s[1],s[2]!==l||s[3]!==e?(r=async()=>{if(!e)return[];let t=await l.getColumns(e);return(0,o.P1)(t,[o.A2.JSON])?.map(T)??[]},s[2]=l,s[3]=e,s[4]=r):r=s[4];let u=e&&!!e.databaseName&&!!e.tableName&&!!e.connectionId;return s[5]!==t||s[6]!==a||s[7]!==r||s[8]!==u?(i={queryKey:a,queryFn:r,enabled:u,...t},s[5]=t,s[6]=a,s[7]=r,s[8]=u,s[9]=i):i=s[9],(0,m.I)(i)}function T(e){return e.name}function I(e,t){let a,r,i,s=(0,n.c)(10),l=A();s[0]!==e?(a=["useMetadata.useMapColumns",e],s[0]=e,s[1]=a):a=s[1],s[2]!==l||s[3]!==e?(r=async()=>{if(!e)return[];let t=await l.getColumns(e);return(0,o.P1)(t,[o.A2.Map])?.map(k)??[]},s[2]=l,s[3]=e,s[4]=r):r=s[4];let u=e&&!!e.databaseName&&!!e.tableName&&!!e.connectionId;return s[5]!==t||s[6]!==a||s[7]!==r||s[8]!==u?(i={queryKey:a,queryFn:r,enabled:u,...t},s[5]=t,s[6]=a,s[7]=r,s[8]=u,s[9]=i):i=s[9],(0,m.I)(i)}function k(e){return e.name}function C(e,t){let a,r,i,o,l,u,c,d,f,g,h=(0,n.c)(31),y=A(),{data:b,isFetched:_}=p.Ay.useMe();h[0]!==t?(a=t??{},h[0]=t,h[1]=a):a=h[1],h[2]!==a?({dateRange:r,timestampValueExpression:u,intersect:i,enabled:l,...o}=a,h[2]=a,h[3]=r,h[4]=i,h[5]=o,h[6]=l,h[7]=u):(r=h[3],i=h[4],o=h[5],l=h[6],u=h[7]);let $=void 0===l||l;if(h[8]!==r||h[9]!==i||h[10]!==e||h[11]!==u){let t;h[13]!==r?(t=r?[r[0].getTime(),r[1].getTime()]:void 0,h[13]=r,h[14]=t):t=h[14],c=["useMetadata.useMultipleAllFields",...e.map(M),t,u,i??!1],h[8]=r,h[9]=i,h[10]=e,h[11]=u,h[12]=c}else c=h[12];return h[15]!==r||h[16]!==i||h[17]!==b?.team||h[18]!==y||h[19]!==e||h[20]!==u?(d=async()=>{let t=b?.team;if(t?.fieldMetadataDisabled)return[];let a=(await Promise.allSettled(e.map(e=>y.getAllFields({...e,dateRange:r,timestampValueExpression:u})))).map(q);return 1===a.length?a[0]:i?function(e){if(0===e.length)return[];let t=new Map;for(let a of e){let e=new Set;for(let n of a){let a=s().sha1(n);if(e.has(a))continue;e.add(a);let r=t.get(a);r?r.n+=1:t.set(a,{elem:n,n:1})}}return Array.from(t.values()).filter(({n:t})=>t===e.length).map(({elem:e})=>e)}(a):B(a)},h[15]=r,h[16]=i,h[17]=b?.team,h[18]=y,h[19]=e,h[20]=u,h[21]=d):d=h[21],h[22]!==$||h[23]!==_||h[24]!==e?(f=$&&e.length>0&&e.every(R)&&_,h[22]=$,h[23]=_,h[24]=e,h[25]=f):f=h[25],h[26]!==o||h[27]!==c||h[28]!==d||h[29]!==f?(g={queryKey:c,queryFn:d,...o,enabled:f},h[26]=o,h[27]=c,h[28]=d,h[29]=f,h[30]=g):g=h[30],(0,m.I)(g)}function R(e){return!!e.databaseName&&!!e.tableName&&!!e.connectionId}function q(e){return"rejected"===e.status?(console.warn("Failed to fetch fields for table connection",e.reason),[]):e.value}function M(e){return{...e}}function O(e,t){let a,r=(0,n.c)(2);return r[0]!==e?(a=e?[e]:[],r[0]=e,r[1]=a):a=r[1],C(a,t)}function F(e,t){let a,r,i,s=(0,n.c)(14),{databaseName:o,tableName:l,connectionId:u}=e,c=A();s[0]!==u||s[1]!==o||s[2]!==l?(a=["useMetadata.useTableMetadata",{connectionId:u,databaseName:o,tableName:l}],s[0]=u,s[1]=o,s[2]=l,s[3]=a):a=s[3],s[4]!==u||s[5]!==o||s[6]!==c||s[7]!==l?(r=async()=>await c.getTableMetadata({databaseName:o,tableName:l,connectionId:u}),s[4]=u,s[5]=o,s[6]=c,s[7]=l,s[8]=r):r=s[8];let d=!!o&&!!l&&!!u;return s[9]!==t||s[10]!==a||s[11]!==r||s[12]!==d?(i={queryKey:a,queryFn:r,staleTime:3e5,enabled:d,...t},s[9]=t,s[10]=a,s[11]=r,s[12]=d,s[13]=i):i=s[13],(0,m.I)(i)}function L(e){return e}function D(e){return e&&(0,l.o1)(e)}function U(e){return{...e}}function V(e,t){let a,r,i,s,o=(0,n.c)(16),{chartConfig:l,key:u,limit:c}=e,p=A();o[0]!==l.source?(a={id:l.source},o[0]=l.source,o[1]=a):a=o[1];let{data:f,isLoading:g}=(0,$.Fo)(a);o[2]!==l||o[3]!==u?(r=["useMetadata.useGetValuesDistribution",l,u],o[2]=l,o[3]=u,o[4]=r):r=o[4],o[5]!==l||o[6]!==u||o[7]!==c||o[8]!==p||o[9]!==f?(i=async()=>await p.getValuesDistribution({chartConfig:l,key:u,limit:c,source:f}),o[5]=l,o[6]=u,o[7]=c,o[8]=p,o[9]=f,o[10]=i):i=o[10];let h=!!u&&!g;return o[11]!==t||o[12]!==r||o[13]!==i||o[14]!==h?(s={queryKey:r,queryFn:i,staleTime:1/0,enabled:h,placeholderData:d.rX,retry:!1,...t},o[11]=t,o[12]=r,o[13]=i,o[14]=h,o[15]=s):s=o[15],(0,m.I)(s)}function W(e,t){let a,r,i=(0,n.c)(10),{chartConfig:s,keys:o,keyConditions:l,limit:c,disableRowLimit:f,mode:g,metadataMVs:y}=e;return i[0]!==s?(a=s?[s]:[],i[0]=s,i[1]=a):a=i[1],i[2]!==f||i[3]!==l||i[4]!==o||i[5]!==c||i[6]!==y||i[7]!==g||i[8]!==a?(r={chartConfigs:a,keys:o,keyConditions:l,limit:c,disableRowLimit:f,mode:g,metadataMVs:y},i[2]=f,i[3]=l,i[4]=o,i[5]=c,i[6]=y,i[7]=g,i[8]=a,i[9]=r):r=i[9],function(e,t){let a,r,i,s,o=(0,n.c)(18),{chartConfigs:l,keys:c,keyConditions:f,limit:g,disableRowLimit:y,mode:b,metadataMVs:_}=e,v=void 0===b?"exact":b,E=A(),x=(0,S.$r)(l);o[0]!==t?(a=t||{},o[0]=t,o[1]=a):a=o[1];let{enabled:w}=a,{data:N,isLoading:T}=p.Ay.useMe(),{data:I,isLoading:k}=(0,$.oE)(),C=N?.team?.filterKeysFetchLimit??h.LD;o[2]!==f?(r=f?.map(D),o[2]=f,o[3]=r):r=o[3],o[4]!==x||o[5]!==y||o[6]!==f||o[7]!==c||o[8]!==g||o[9]!==C||o[10]!==E||o[11]!==_||o[12]!==v||o[13]!==I?(i=async e=>{let{signal:t}=e;if("all"===v){let e=x[0];if(!e||0===c.length)return[];let a=e.source?I?.find(t=>t.id===e.source):void 0,n=_??(a&&((0,u.sl)(a)||(0,u.h7)(a))?a.metadataMaterializedViews:void 0),{databaseName:r,tableName:i}=e.from,s=e.connection,o=e.dateRange;return E.getAllKeyValues({databaseName:r,tableName:i,keyExpressions:c.slice(0,C),maxValuesPerKey:20,connectionId:s,metadataMVs:n,dateRange:o,timestampValueExpression:e.timestampValueExpression,signal:t})}return(await Promise.all(x.map(e=>{let a=e.source?I?.find(t=>t.id===e.source):void 0;return E.getKeyValuesWithMVs({chartConfig:e,keys:c.slice(0,C),keyConditions:f?.slice(0,C),limit:g,disableRowLimit:y,source:a,signal:t})}))).flatMap(L)},o[4]=x,o[5]=y,o[6]=f,o[7]=c,o[8]=g,o[9]=C,o[10]=E,o[11]=_,o[12]=v,o[13]=I,o[14]=i):i=o[14];let R=(0,m.I)({queryKey:["useMetadata.useGetKeyValues",v,_,...x.map(U),...c,r,y,C],queryFn:i,staleTime:3e5,placeholderData:d.rX,...t,enabled:!!(void 0===w||w)&&!!c.length&&!k&&!T}),q=R.isLoading||k;return o[15]!==R||o[16]!==q?(s={...R,isLoading:q},o[15]=R,o[16]=q,o[17]=s):s=o[17],s}(r,t)}function B(e){let t=[],a=new Set;for(let n of e)for(let e of n){let n=s().sha1(e);a.has(n)||(a.add(n),t.push(e))}return t}},81973:(e,t,a)=>{a.d(t,{AF:()=>E,Al:()=>er,Dp:()=>H,Fo:()=>M,N8:()=>N,Rt:()=>T,YI:()=>V,Ys:()=>j,fQ:()=>Y,fS:()=>en,kH:()=>G,kJ:()=>A,kg:()=>K,nd:()=>D,oE:()=>k,pM:()=>x,q6:()=>P,ry:()=>X,sr:()=>F,u4:()=>J,xg:()=>w});var n=a(75155),r=a(55729),i=a(29594),s=a.n(i),o=a(79339),l=a.n(o),u=a(35467),c=a(2615),m=a(67270),d=a(76089),p=a(62798),f=a(82641),g=a(60665),h=a(12482),y=a(93251),b=a(16932),_=a(6876),$=a(98142),S=a(22e3);let A={resourceAttributesExpression:"ResourceAttributes",eventAttributesExpression:"LogAttributes",timestampValueExpression:"TimestampTime",implicitColumnExpression:"Body"},v={...A,timestampValueExpression:"Timestamp"};function E(e){return(0,d.AB)(e)[0]}function x(e){return e.spanNameExpression}function w(e){return(e.kind===f.GL.Log||e.kind===f.GL.Trace?e.displayedTimestampValueExpression:void 0)??E(e.timestampValueExpression)}function N(e){let t;e.kind===f.GL.Trace?t=e.spanNameExpression||void 0:e.kind===f.GL.Log&&(t=e.bodyExpression||e.implicitColumnExpression);let a=(0,d.AB)(t??"");return 1===a.length?t:a[0]}function T(e){return(0,d.AB)(e).length<=1}function I(e){return e.kind===f.GL.Session?{...e,timestampValueExpression:e.timestampValueExpression||A.timestampValueExpression}:e}function k(){let e,t=(0,n.c)(1);return t[0]===Symbol.for("react.memo_cache_sentinel")?(e={queryKey:["sources"],queryFn:C},t[0]=e):e=t[0],(0,h.I)(e)}async function C(){if($.VO)return S.Yk.getAll();let e=(await (0,_.Q5)("sources").json()).map(I);return e.forEach(R),e}function R(e){let t=f.fo.safeParse(e);if(!t.success){var a;let n=t.error.issues.map(q).join(", ");g.$e.show({id:(a=e.id,`source-validation-${a}`),color:"yellow",title:`Source "${e.name}" has validation issues`,message:r.createElement(r.Fragment,null,n?`Fields: ${n}. `:"",r.createElement("a",{href:"/team#sources"},"Edit sources")," to ensure compatibility."),autoClose:!1})}}function q(e){return e.path.join(".")}function M(e){let t,a,r,i=(0,n.c)(7),{id:s,kinds:o}=e;i[0]===Symbol.for("react.memo_cache_sentinel")?(t=["sources"],i[0]=t):t=i[0],i[1]!==s||i[2]!==o?(a=e=>{let t=e.find(e=>e.id===s);if(!(t&&o?.length)||o.includes(t.kind))return t},i[1]=s,i[2]=o,i[3]=a):a=i[3];let l=null!=s;return i[4]!==a||i[5]!==l?(r={queryKey:t,queryFn:O,select:a,enabled:l},i[4]=a,i[5]=l,i[6]=r):r=i[6],(0,h.I)(r)}async function O(){return $.VO?S.Yk.getAll():(await (0,_.Q5)("sources").json()).map(I)}function F(){let e,t=(0,n.c)(2),a=(0,y.jE)();return t[0]!==a?(e={mutationFn:L,onSuccess:()=>{a.invalidateQueries({queryKey:["sources"]})}},t[0]=a,t[1]=e):e=t[1],(0,b.n)(e)}async function L(e){let{source:t}=e;return $.VO?void S.Yk.update(t.id,t):(0,_.Q5)(`sources/${t.id}`,{method:"PUT",json:t})}function D(){let e,t=(0,n.c)(2),a=(0,y.jE)();return t[0]!==a?(e={mutationFn:U,onSuccess:()=>{a.invalidateQueries({queryKey:["sources"]})}},t[0]=a,t[1]=e):e=t[1],(0,b.n)(e)}async function U(e){let{source:t}=e;if($.VO){let e=S.Yk.getAll().find(e=>l()(s()(e,["kind","name","connection"]))===l()(s()(t,["kind","name","connection"])));return e?(S.Yk.update(e.id,t),{...t,id:e.id}):S.Yk.create(t)}return(0,_.Q5)("sources",{method:"POST",json:t}).json()}function V(){let e,t=(0,n.c)(2),a=(0,y.jE)();return t[0]!==a?(e={mutationFn:W,onSuccess:()=>{a.invalidateQueries({queryKey:["sources"]})}},t[0]=a,t[1]=e):e=t[1],(0,b.n)(e)}async function W(e){let{id:t}=e;return $.VO?void S.Yk.delete(t):(0,_.Q5)(`sources/${t}`,{method:"DELETE"})}function B(e,t){let a=new Map(e.map(e=>[e.name,e]));return 0===Array.from(t).filter(e=>!a.has(e)).length}function P(e){return e.some(e=>"SeriesHash"===e.name&&"UInt64"===e.type)}async function j({databaseName:e,tableName:t,connectionId:a,kind:n,metadata:r}){let i=await r.getColumns({databaseName:e,tableName:t,connectionId:a}),s=(await r.getTableMetadata({databaseName:e,tableName:t,connectionId:a}))?.primary_key,o=s?new Set((0,u.bZ)(s)):new Set,l=(0,u.P1)(i,[u.A2.Date]),m=l?.find(e=>o.has(e.name)),d={...null!=m?{timestampValueExpression:m.name}:{},kind:n};if(n===f.GL.Promql)return d;if(n===f.GL.Session)return B(i,Object.values(A))||B(i,Object.values(v))?{...d,resourceAttributesExpression:A.resourceAttributesExpression}:d;let p=B(i,["Timestamp","Body","SeverityText","TraceId","SpanId","ServiceName","LogAttributes","ResourceAttributes"]),g=B(i,["Timestamp","SpanName","Duration","SpanKind","TraceId","SpanId","ParentSpanId","ServiceName","SpanAttributes","ResourceAttributes","StatusCode","StatusMessage"]),h=i.some(e=>"Events.Timestamp"===e.name),y=i.some(e=>"Links.TraceId"===e.name),b=p||g?await (async()=>{let[n,i]=await Promise.all([r.getTableMetadata({databaseName:e,tableName:`${t}_key_rollup_15m`,connectionId:a}),r.getTableMetadata({databaseName:e,tableName:`${t}_kv_rollup_15m`,connectionId:a})]);return null!=i?{keyMeta:n,kvMeta:i}:void 0})():void 0,_=b?{metadataMaterializedViews:{kvRollupTable:`${t}_kv_rollup_15m`,granularity:(0,c.qT)(b.kvMeta.as_select)??"15 minute"}}:{};return{...d,...p?{defaultTableSelectExpression:"Timestamp, ServiceName as service, SeverityText as level, Body",serviceNameExpression:"ServiceName",bodyExpression:"Body",displayedTimestampValueExpression:"Timestamp",eventAttributesExpression:"LogAttributes",implicitColumnExpression:"Body",resourceAttributesExpression:"ResourceAttributes",spanIdExpression:"SpanId",traceIdExpression:"TraceId",severityTextExpression:"SeverityText",..._}:{},...g?{displayedTimestampValueExpression:"Timestamp",implicitColumnExpression:"SpanName",defaultTableSelectExpression:"Timestamp, ServiceName as service, StatusCode as level, round(Duration / 1e6) as duration, SpanName",eventAttributesExpression:"SpanAttributes",serviceNameExpression:"ServiceName",resourceAttributesExpression:"ResourceAttributes",durationExpression:"Duration",durationPrecision:9,parentSpanIdExpression:"ParentSpanId",spanIdExpression:"SpanId",spanKindExpression:"SpanKind",spanNameExpression:"SpanName",traceIdExpression:"TraceId",statusCodeExpression:"StatusCode",statusMessageExpression:"StatusMessage",...h?{spanEventsValueExpression:"Events"}:{},...y?{spanLinksValueExpression:"Links"}:{},..._}:{}}}function H(e){return`(${e.durationExpression})/1e${(e.durationPrecision??9)-3}`}function K(e){return`(${e.durationExpression})/1e${e.durationPrecision??9}`}let z=new Set(["avg","min","max","sum","any","last_value","quantile","quantileMerge","p50","p90","p95","p99","heatmap","histogram","histogramMerge"]);function Q(e,t){if(!e||e.kind!==f.GL.Trace||!e.durationExpression)return;let a=e.durationExpression,n=e.durationPrecision??9;if(t.valueExpression&&function(e){if(!e)return!0;let t=e.replace(/If(State|Merge)?$/,"");return z.has(t)}(t.aggFn)&&t.valueExpression===a)return{output:"duration",factor:Math.pow(10,-n)}}function G(e,t){for(let t of e)if(t.numberFormat)return t.numberFormat;for(let a of e){let e=Q(t,a);if(e)return e}}function Y(e){let t,a,r=(0,n.c)(7);r[0]!==e.source?(t={id:e.source},r[0]=e.source,r[1]=t):t=r[1];let{data:i}=M(t);e:{let t;r[2]!==e?(t=Z(e),r[2]=e,r[3]=t):t=r[3];let n=t;if(n){a=n.formulas[0]?.numberFormat??e.numberFormat;break e}if((0,p.O3)(e)&&Array.isArray(e.select)&&e.select.length>0){let t;if(e.select[0].numberFormat){a=e.select[0].numberFormat;break e}if(e.numberFormat){a=e.numberFormat;break e}r[4]!==e.select[0]||r[5]!==i?(t=Q(i,e.select[0]),r[4]=e.select[0],r[5]=i,r[6]=t):t=r[6],a=t;break e}a=e.numberFormat}return a}function Z(e){if((0,p.O3)(e)&&e.formulas?.length)return{formulas:e.formulas,operandsHidden:!1===e.showOperandSeries}}function J(e){if(!(0,p.O3)(e)||!Array.isArray(e.select))return 0;let t=Z(e);return t?(t.operandsHidden?0:e.select.length)+t.formulas.length:(0,m.sA)(e.select,e)?1:e.select.length}function X(e,t){let a,r,i=(0,n.c)(28);i[0]!==e.source?(a={id:e.source},i[0]=e.source,i[1]=a):a=i[1];let{data:s}=M(a);if(i[2]!==e||i[3]!==t||i[4]!==s){e:{let a,n,o,l,u=Z(e),c=u?.formulas.find(et)?.numberFormat;i[6]!==e||i[7]!==s?(a=(0,p.O3)(e)&&Array.isArray(e.select)?G(e.select,s):void 0,i[6]=e,i[7]=s,i[8]=a):a=i[8];let d=a,f=e.numberFormat??(u?.operandsHidden?c??d:d??c);if(!t||!(0,p.O3)(e)||!Array.isArray(e.select)){r={formatByColumn:new Map,chartFormat:f};break e}if(u){let a,n=[...u.operandsHidden?[]:e.select.map(t=>t.numberFormat??e.numberFormat??Q(s,t)),...u.formulas.map(t=>t.numberFormat??e.numberFormat)],o=new Map;n.forEach((e,a)=>{let n=t[a]?.name;null!=n&&e&&o.set(n,e)}),i[9]!==f||i[10]!==o?(a={formatByColumn:o,chartFormat:f},i[9]=f,i[10]=o,i[11]=a):a=i[11],r=a;break e}if((0,m.sA)(e.select,e)){let a,n,s=e.select[0]?.numberFormat??e.select[1]?.numberFormat??e.numberFormat;i[12]!==s||i[13]!==t[0]?(a=t[0]&&s?new Map([[t[0].name,s]]):new Map,i[12]=s,i[13]=t[0],i[14]=a):a=i[14];let o=a;i[15]!==f||i[16]!==o?(n={formatByColumn:o,chartFormat:f},i[15]=f,i[16]=o,i[17]=n):n=i[17],r=n;break e}i[18]!==t?(n=t.map(ee),i[18]=t,i[19]=n):n=i[19];let g=n;if(i[20]!==g||i[21]!==e.numberFormat||i[22]!==e.select||i[23]!==s){o=new Map;for(let t=0;t<e.select.length;t++){let a=e.select[t],n=g[t],r=a.numberFormat??e.numberFormat??Q(s,a);r&&o.set(n,r)}i[20]=g,i[21]=e.numberFormat,i[22]=e.select,i[23]=s,i[24]=o}else o=i[24];i[25]!==f||i[26]!==o?(l={formatByColumn:o,chartFormat:f},i[25]=f,i[26]=o,i[27]=l):l=i[27],r=l}i[2]=e,i[3]=t,i[4]=s,i[5]=r}else r=i[5];return r}function ee(e){return e.name}function et(e){return e.numberFormat}let ea={[f.SX.Gauge]:["TimeUnix","ServiceName","MetricName","Value","Attributes","ResourceAttributes"],[f.SX.Histogram]:["TimeUnix","ServiceName","MetricName","Attributes","ResourceAttributes","Count","Sum","BucketCounts","ExplicitBounds"],[f.SX.Sum]:["TimeUnix","ServiceName","MetricName","Value","Attributes","ResourceAttributes"],[f.SX.Summary]:["Attributes","TimeUnix","Count","Sum","ValueAtQuantiles.Quantile","ValueAtQuantiles.Value","Flags","ServiceName","MetricName","ResourceAttributes"],[f.SX.ExponentialHistogram]:["Attributes","TimeUnix","Count","Sum","Scale","ZeroCount","PositiveOffset","PositiveBucketCounts","NegativeOffset","NegativeBucketCounts","Flags","ServiceName","MetricName","ResourceAttributes"],series:["Date","MetricName","SeriesHash","ServiceName","MetricType","Temporality","ResourceAttributes","Attributes"]};async function en({databaseName:e,tableName:t,connectionId:a,metricType:n,metadata:r}){return!!t&&B(await r.getColumns({databaseName:e,tableName:t,connectionId:a}),ea[n])}async function er({databaseName:e,tableName:t,connectionId:a,metadata:n}){if(!t)return!1;let r=await n.getColumns({databaseName:e,tableName:t,connectionId:a});return B(r,Object.values(A))||B(r,Object.values(v))}},88459:(e,t,a)=>{function n(e,t){return null!=e?e:t()}function r(e){let t,a=e[0],n=1;for(;n<e.length;){let r=e[n],i=e[n+1];if(n+=2,("optionalAccess"===r||"optionalCall"===r)&&null==a)return;"access"===r||"optionalAccess"===r?(t=a,a=i(a)):("call"===r||"optionalCall"===r)&&(a=i((...e)=>a.call(t,...e)),t=void 0)}return a}function i(e){let t=r(e);return null==t||t}var s=a(91820),o=a(95384);a(69498),a(62637),a(68798),a(7837),a(40313),a(787);var l=a(5216),u=(e,{module:t,message:a,args:r,err:i})=>{let{sql:o,...l}=n(r,()=>({}));"string"==typeof o?e(`${a}:
  5. ${(e=>{try{return s.a.call(void 0,e)}catch(t){return e}})(o)}`):e(`[${t}] ${a}`,...Object.values(l),...i?[i]:[])},c={trace:e=>u(console.debug,e),debug:e=>u(console.debug,e),info:e=>u(console.info,e),warn:e=>u(console.warn,e),error:e=>u(console.error,e)},m=(e,t)=>{t||(t={});let a=new URL(e instanceof URL?e:e instanceof Request?e.url:e),n=r([t,"access",e=>e.headers,"optionalAccess",e=>e.Authorization]),[s,o]=window.atob(n.substring(6)).split(":");return i([t,"access",e=>e.headers,"optionalAccess",e=>delete e.Authorization]),i([t,"access",e=>e.headers,"optionalAccess",e=>delete e.authorization]),s&&a.searchParams.set("user",s),o&&a.searchParams.set("password",o),t.credentials="omit",fetch(`${a.toString()}`,t)},d=(e,t)=>(t||(t={}),i([t,"access",e=>e.headers,"optionalAccess",e=>delete e.Authorization]),i([t,"access",e=>e.headers,"optionalAccess",e=>delete e.authorization]),fetch(e,t)),p=t.Kc=async({host:e,username:t,password:a})=>{try{return(await new f({host:e,username:t,password:a}).query({query:"SELECT 1",format:"TabSeparatedRaw"})).text().then(e=>"1"===e.trim())}catch(e){return console.warn("Failed to test local connection",e),!1}},f=t.aP=class extends o.Z{constructor(e){super({...e,customLogger:n(e.customLogger,()=>c)})}getClient(){return super.getClient()}buildClient(){let e=this.host,t,a=null!=this.username&&null!=this.password,r={};a?(t=m,r.add_http_cors_header=1):(e=`${window.origin}${this.host}`,t=d);let i=new URL(e);return l.createClient.call(void 0,{url:i.origin,pathname:i.pathname,clickhouse_settings:r,username:n(this.username,()=>""),password:n(this.password,()=>""),use_multipart_params_auto:!0,keep_alive:{enabled:!1},fetch:t,request_timeout:this.requestTimeout,application:this.application})}async __query({query:e,format:t="JSON",query_params:a={},abort_signal:n,clickhouse_settings:r,connectionId:i,queryId:s,shouldSkipApplySettings:o}){let l;null==this.client&&(this.client=this.buildClient()),this.logQuery(e,a),o||(l=await this.processClickhouseSettings({connectionId:i,externalClickhouseSettings:r}));let u={...i&&"local"!==i?{"x-hyperdx-connection-id":i}:{}};return this.getClient().query({query:e,query_params:a,format:t,abort_signal:n,http_headers:u,clickhouse_settings:l,query_id:s})}};t.aP=f,t.Kc=p},91021:(e,t,a)=>{a.d(t,{Kc:()=>T,HD:()=>w,zu:()=>N});var n=a(75155),r=a(35467),i=a(67270),s=a(76089),o=a(62798),l=a(73854),u=a(39741),c=a(93251),m=a(12482),d=a(6876),p=a(43152),f=a(49672),g=a(98142),h=a(79339),y=a.n(h);let b="hyperdx",_=e=>{let t=y().sha1(e),a=(0,i.v4)(e.aggCondition);switch(e.aggFn){case"min":case"max":case"sum":case"avg":return{fieldName:t,fn:`${e.aggFn}${a?"If":""}`,args:["Nullable(Float64)",...a?["UInt8"]:[]]};case"count":return{fieldName:t,fn:`${e.aggFn}${a?"If":""}`,args:a?["UInt8"]:[]};default:throw Error(`Unsupported aggregation function: ${e.aggFn}`)}},$=async(e,t,a,n)=>{let s,o={...e,...Array.isArray(e.select)&&{select:e.select.map(e=>{let{fieldName:t,fn:a}=_(e);return{...e,aggFn:`${a}State`,alias:t}})},granularity:n??e.granularity,dateRange:void 0,orderBy:void 0,limit:void 0},l=await (0,i.PV)(o,t,a),u=y().sha1(l),c=`${e.from.tableName}_mv_${u}`,m={...e,...Array.isArray(e.select)&&{select:e.select.map(e=>{let{fieldName:t,fn:a}=_(e);return{aggFn:`${a}Merge`,valueExpression:t,alias:`${e.aggFn}(${e.valueExpression})`}})},timestampValueExpression:i.n_,from:{databaseName:b,tableName:c}};return{mtViewName:c,dataTableDDL:(0,r.l6)(((e,t)=>{if(!Array.isArray(t.select))throw Error("Only array select is supported");if((0,i.x1)(t))throw Error("Group by is not supported");return(0,r.kg)`CREATE TABLE IF NOT EXISTS ${b}.${{Identifier:e}}
  6. (
  7. ${{Identifier:i.n_}} DateTime,
  8. ${t.select.map(e=>{let{args:t,fieldName:a,fn:n}=_(e),r=[n,...t].join(",");return`${a} AggregateFunction(${r})`}).join(",\n")}
  9. )
  10. ENGINE = AggregatingMergeTree
  11. ORDER BY ${{Identifier:i.n_}}
  12. SETTINGS index_granularity = 8192
  13. `})(`${c}_data`,e)),mtViewDDL:(0,r.l6)((s=`${c}_data`,(0,r.kg)`CREATE MATERIALIZED VIEW IF NOT EXISTS ${b}.${{Identifier:c}} TO ${b}.${{Identifier:s}} AS
  14. ${l}
  15. `)),renderMTViewConfig:async()=>{try{return await (0,i.PV)(m,t,a)}catch(e){return console.error("Failed to render MTView config",e),null}}}};var S=a(78550),A=a(81973),v=a(69519),E=a(57389);async function*x({config:e,clickhouseClient:t,signal:a,enableQueryChunking:n=!1,enableParallelQueries:r=!1,metadata:l,querySettings:u}){let c=n&&!((0,o.Xo)(e)||(0,o.qi)(e)||!(0,i.lE)(e)||!e.dateRange||(0,i.bv)(e))&&1?(e=>{let[t,a]=e.dateRange,n=(0,v.so)(t,a,void 0),r="auto"===e.granularity?(0,s.tA)(e.dateRange):e.granularity,i=[];for(let[t,s]of n.entries()){let o=t===n.length-1?s.startTime:(0,p.W6)(s.startTime,r),l=0===t?a:(0,p.W6)(s.endTime,r);(!i.length||o<i[i.length-1].dateRange[0])&&i.push({dateRange:[o,l],dateRangeEndInclusive:0===t&&e.dateRangeEndInclusive})}return i})(e):[void 0],m=c[0]?.dateRange,d=(0,o.O3)(e)&&(0,s.WG)(e.seriesLimit)?e.seriesLimit:void 0,f=t=>({...e,...t??{},...null!=t&&null!=d&&null!=m?{seriesLimitDateRange:m}:{}});if(g.HT&&(0,o.O3)(e)){let{dataTableDDL:t,mtViewDDL:a,renderMTViewConfig:n}=await $(e,l,u);console.log("dataTableDDL:",t),console.log("mtViewDDL:",a),await n()}let h=(0,o.Xo)(e)?{readonly:"2"}:{};if(r){let e=c.map(async(e,n)=>{let r=f(e);return{index:n,queryResult:await t.queryChartConfig({config:r,metadata:l,opts:{abort_signal:a,clickhouse_settings:h},querySettings:u})}}),n=[...e],r=Array(c.length),i=0;for(let t=0;t<e.length;t++){let{index:t,queryResult:a}=await Promise.race(n);r[t-i]=a;let s=n.indexOf(e[t]);for(n.splice(s,1);r.length>0&&void 0!==r[0];){let e=r.shift();yield{chunk:e,isComplete:0===r.length},i+=1}}return}for(let e=0;e<c.length;e++){let n=f(c[e]),r=await t.queryChartConfig({config:n,metadata:l,opts:{abort_signal:a},querySettings:u});yield{chunk:r,isComplete:e===c.length-1}}}function w(e,t){let{enabled:a=!0}=t??{},n=(0,f.fu)(),r=(0,c.jE)(),i=(0,S.Ge)(),s=(0,o.O3)(e)?e:void 0,{data:l,isLoading:p}=(0,E.d)(s,{enabled:!!a&&!!s,placeholderData:void 0}),{data:g,isLoading:h}=(0,A.Fo)({id:e.source}),y=(0,m.I)({queryKey:[e,t?.enableQueryChunking??!1,t?.enableParallelQueries??!1],queryFn:async a=>{if((0,o.qi)(e)&&e.dateRange){let{promqlExpression:t}=(0,u.$t)(e),[a,n]=e.dateRange,r=a.getTime()/1e3,i=n.getTime()/1e3,s="60s";e.granularity&&"auto"!==e.granularity&&(s=`${({"15 second":15,"30 second":30,"1 minute":60,"5 minute":300,"10 minute":600,"15 minute":900,"30 minute":1800,"1 hour":3600,"2 hour":7200,"6 hour":21600,"12 hour":43200,"1 day":86400})[e.granularity]??60}s`);let o=await d.Vp.queryRange({query:t,start:r,end:i,step:s,connectionId:e.connection,database:e.from?.databaseName,table:e.from?.tableName});if("success"!==o.status||!o.data)throw Error(o.error??"PromQL query failed");let l=o.data.result,c=new Map;for(let e of l)for(let[t,a]of Object.entries(e.metric))"__name__"!==t&&(c.has(t)||c.set(t,new Set),c.get(t).add(a));let m=new Set;for(let[e,t]of c)t.size>1&&m.add(e);let p=[];for(let e of l){let t=e.metric.__name__??"",a=Object.entries(e.metric).filter(([e])=>"__name__"!==e&&m.has(e)).map(([e,t])=>`${e}="${t}"`).join(", "),n=a?`${t}{${a}}`:t;for(let[t,a]of e.values)p.push({__hdx_time_bucket:new Date(1e3*t).toISOString(),value:parseFloat(a),series_name:n})}return{data:p,meta:[{name:"__hdx_time_bucket",type:"DateTime64(3)"},{name:"value",type:"Float64"},{name:"series_name",type:"String"}],rows:p.length,isComplete:!0}}let s=l?.optimizedConfig??e,c=r.getQueryCache().find({queryKey:a.queryKey,exact:!0}),m=!!c&&void 0!==c.state.data,p=x({config:s,clickhouseClient:n,signal:a.signal,enableQueryChunking:t?.enableQueryChunking,enableParallelQueries:t?.enableParallelQueries,metadata:i,querySettings:g?.querySettings}),f={data:[],meta:[],rows:0,isComplete:!1};for await(let e of p){if(a.signal.aborted)break;f=function(e,{chunk:t,isComplete:a}){let n=t.data||[],r=e?.data||[];return{data:0===r.length?n:[...n,...r],meta:t.meta,rows:(e?.rows||0)+(t.rows||0),isComplete:a}}(f,e),m||r.setQueryData(a.queryKey,f)}return m&&!a.signal.aborted&&r.setQueryData(a.queryKey,f),r.getQueryData(a.queryKey)},retry:1,refetchOnWindowFocus:!1,...t,enabled:a&&!p&&!h});return y.isError&&t?.onError&&t.onError(y.error),{...y,isLoading:y.isLoading||p}}function N(e,t){let a,s,u,c,d,p,f,g,h=(0,n.c)(26);h[0]!==t?(a=t??{},h[0]=t,h[1]=a):a=h[1];let{enabled:y}=a,b=void 0===y||y,_=(0,S.Ge)(),$=(0,o.O3)(e)?e:void 0,v=!!b&&!!$;h[2]!==v?(s={enabled:v,placeholderData:void 0},h[2]=v,h[3]=s):s=h[3];let{data:x,isLoading:w}=(0,E.d)($,s);h[4]!==e.source?(u={id:e.source},h[4]=e.source,h[5]=u):u=h[5];let{data:N,isLoading:T}=(0,A.Fo)(u);h[6]!==e?(c=["renderedSql",e],h[6]=e,h[7]=c):c=h[7],h[8]!==e||h[9]!==_||h[10]!==x?.optimizedConfig||h[11]!==N?.querySettings?(d=async()=>{let t=x?.optimizedConfig??e,a=await (0,i.PV)(t,_,N?.querySettings),n=(0,r.l6)(a);return(0,o.qi)(e)?n:(0,l.G)(n)},h[8]=e,h[9]=_,h[10]=x?.optimizedConfig,h[11]=N?.querySettings,h[12]=d):d=h[12],h[13]!==e||h[14]!==b||h[15]!==w||h[16]!==T?(p=b&&!w&&!T&&!(0,o.qi)(e),h[13]=e,h[14]=b,h[15]=w,h[16]=T,h[17]=p):p=h[17],h[18]!==t||h[19]!==c||h[20]!==d||h[21]!==p?(f={queryKey:c,queryFn:d,...t,enabled:p},h[18]=t,h[19]=c,h[20]=d,h[21]=p,h[22]=f):f=h[22];let I=(0,m.I)(f),k=I.isLoading||w;return h[23]!==I||h[24]!==k?(g={...I,isLoading:k},h[23]=I,h[24]=k,h[25]=g):g=h[25],g}function T(e,t){let a,s,o,l,u=(0,n.c)(20);u[0]!==e?(a=e?.dateRange&&(0,i.lE)(e)?e.dateRange[1].getTime()-e.dateRange[0].getTime():void 0,u[0]=e,u[1]=a):a=u[1];let c=a,d=(0,S.Ge)(),p=e?.select,f=e?.from,g=e?.connection,h=e?.with,y=e?.groupBy,b=e?.selectGroupBy,_=e?.granularity,$=e?.seriesReturnType;u[2]!==c||u[3]!==p||u[4]!==f||u[5]!==g||u[6]!==h||u[7]!==y||u[8]!==b||u[9]!==_||u[10]!==$?(s=["aliasMap",p,f,g,h,y,b,_,$,c],u[2]=c,u[3]=p,u[4]=f,u[5]=g,u[6]=h,u[7]=y,u[8]=b,u[9]=_,u[10]=$,u[11]=s):s=u[11],u[12]!==e||u[13]!==d?(o=async()=>{if(null==e)return{};if("configType"in e&&"promql"===e.configType)return{__hdx_time_bucket:"__hdx_time_bucket",value:"value",series_name:"series_name"};let t=await (0,i.PV)(e,d,void 0);return(0,r.D7)(t)},u[12]=e,u[13]=d,u[14]=o):o=u[14];let A=null!=e;return u[15]!==t||u[16]!==o||u[17]!==A||u[18]!==s?(l={queryKey:s,queryFn:o,enabled:A,...t},u[15]=t,u[16]=o,u[17]=A,u[18]=s,u[19]=l):l=u[19],(0,m.I)(l)}},91820:(e,t,a)=>{Object.defineProperty(t,"__esModule",{value:!0});var n=a(15861),r=/\b([A-Za-z_]\w*(?:If|Array|Map|State|Merge|ForEach|Distinct|OrDefault|OrNull|Resample))\s+\(/g,i=/\b([A-Za-z_]\w*(?:If|Array|Map|State|Merge|ForEach|Distinct|OrDefault|OrNull|Resample))\(([^()]*)\)\s+\(/g;t.a=function(e){return n.formatDialect.call(void 0,e,{dialect:n.clickhouse,paramTypes:{custom:[{regex:String.raw`\$__\w+`}]}}).replace(/\$__(\w+)\s+\(/g,(e,t)=>`$__${t}(`).replace(r,(e,t)=>`${t}(`).replace(i,(e,t,a)=>`${t}(${a})(`)}},93108:(e,t,a)=>{a.d(t,{Gs:()=>p,Ir:()=>b,PQ:()=>A,ZY:()=>h,Zm:()=>$,xZ:()=>g});var n=a(75155),r=a(91985),i=a.n(r),s=a(88459),o=a(12482),l=a(93251),u=a(16932),c=a(6876),m=a(98142),d=a(92917);let p="connections";function f(e){let t=new StorageEvent("storage",{key:p,oldValue:i().session.get(p),newValue:JSON.stringify(e),storageArea:window.sessionStorage,url:window.location.href});i().session.set(p,e),window.dispatchEvent(t)}function g(){if(i().session.has(p))return i().session.get(p)??[];try{let e=(0,d.Ol)(m.$E??"");if(null!=e)return e}catch(e){console.error("Error fetching default connections",e)}return[]}function h(){let e,t=(0,n.c)(1);return t[0]===Symbol.for("react.memo_cache_sentinel")?(e={queryKey:["connections"],queryFn:y},t[0]=e):e=t[0],(0,o.I)(e)}function y(){return m.VO?g():(0,c.Q5)("connections").json()}function b(){let e,t=(0,n.c)(2),a=(0,l.jE)();return t[0]!==a?(e={mutationFn:_,onSuccess:()=>{a.invalidateQueries({queryKey:["connections"]}),a.invalidateQueries({queryKey:["sources"]})}},t[0]=a,t[1]=e):e=t[1],(0,u.n)(e)}async function _(e){let{connection:t}=e;if(m.VO){if(!await (0,s.Kc)({host:t.host,username:t.username,password:t.password??""}))throw Error("Could not connect to Clickhouse with connection details");let e={id:"local"};return f([{...t,...e}]),e}return await (0,c.Q5)("connections",{method:"POST",json:t}).json()}function $(){let e,t=(0,n.c)(2),a=(0,l.jE)();return t[0]!==a?(e={mutationFn:S,onSuccess:()=>{a.invalidateQueries({queryKey:["connections"]})}},t[0]=a,t[1]=e):e=t[1],(0,u.n)(e)}async function S(e){let{connection:t,id:a}=e;m.VO?f([{...t,id:"local"}]):await (0,c.Q5)(`connections/${a}`,{method:"PUT",json:t})}function A(){let e,t=(0,n.c)(2),a=(0,l.jE)();return t[0]!==a?(e={mutationFn:v,onSuccess:()=>{a.invalidateQueries({queryKey:["connections"]})}},t[0]=a,t[1]=e):e=t[1],(0,u.n)(e)}async function v(e){let{id:t}=e;m.VO?f(g().filter(e=>e.id!==t)):await (0,c.Q5)(`connections/${t}`,{method:"DELETE"})}},95384:(e,t,a)=>{let n,r,i;var s,o,l,u=a(29143);function c(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t.default=e,t}function m(e){return e&&e.__esModule?e:{default:e}}function d(e,t){return null!=e?e:t()}async function p(e,t){return null!=e?e:await t()}function f(e){let t,a=e[0],n=1;for(;n<e.length;){let r=e[n],i=e[n+1];if(n+=2,("optionalAccess"===r||"optionalCall"===r)&&null==a)return;"access"===r||"optionalAccess"===r?(t=a,a=i(a)):("call"===r||"optionalCall"===r)&&(a=i((...e)=>a.call(t,...e)),t=void 0)}return a}async function g(e){let t,a=e[0],n=1;for(;n<e.length;){let r=e[n],i=e[n+1];if(n+=2,("optionalAccess"===r||"optionalCall"===r)&&null==a)return;"access"===r||"optionalAccess"===r?(t=a,a=await i(a)):("call"===r||"optionalCall"===r)&&(a=await i((...e)=>a.call(t,...e)),t=void 0)}return a}Object.defineProperty(t,"__esModule",{value:!0});var h=a(69498),y=a(62637),b=a(68798),_=a(7837),$=a(40313),S=a(787),A=a(81925),v=a(71963),E=a(71434),x=m(a(79339)),w=m(a(55235)),N=m(a(80519)),T=a(64497),I=c(T),k=c(T),C=c(T),R=m(a(64022)),q="group",M=e=>e?tx`${e},`:tx``,O=(e,t=", ")=>tw(t,e.filter(e=>void 0!==e).map(e=>tx`${e}`)),F=({timeBucketSelect:e,groupBy:t})=>{let a=O([e?`\`${K}\``:void 0,t?q:void 0],`,
  16. `);return a.sql.length>0?tx`${a},`:tx``},L=({timeBucketSelect:e,groupBy:t})=>{let a=O([e?`\`${K}\``:void 0,t?q:void 0]);return a.sql.length>0?tx`GROUP BY ${a}`:tx``},D="cityHash64(ScopeAttributes, ResourceAttributes, Attributes)",U=t.h=({select:e,...t})=>{if("quantile"===e.aggFn){if(!("level"in e)||null===e.level)throw Error("quantile must have a level");return W({...t,level:e.level})}if("count"===e.aggFn)return V(t);throw Error(`${e.aggFn} is not supported for histograms currently`)},V=({timeBucketSelect:e,groupBy:t,from:a,where:n,valueAlias:r})=>[{name:"source",sql:tx`
  17. SELECT
  18. TimeUnix,
  19. AggregationTemporality,
  20. ${M(e)}
  21. ${t?tx`[${t}] AS ${q},`:""}
  22. ${D} AS attr_hash,
  23. cityHash64(ExplicitBounds) AS bounds_hash,
  24. toInt64(Count) AS current_count,
  25. lagInFrame(toNullable(current_count), 1, NULL) OVER (
  26. PARTITION BY ${t?`${q}, `:""}attr_hash, bounds_hash, AggregationTemporality
  27. ORDER BY TimeUnix
  28. ) AS prev_count,
  29. CASE
  30. WHEN AggregationTemporality = 1 THEN current_count
  31. WHEN AggregationTemporality = 2 AND prev_count IS NOT NULL
  32. THEN if( ${""}
  33. current_count < prev_count,
  34. current_count,
  35. current_count - prev_count
  36. )
  37. ELSE 0
  38. END AS delta
  39. FROM ${a}
  40. WHERE ${n}
  41. `},{name:"metrics",sql:tx`
  42. SELECT
  43. ${F({timeBucketSelect:e,groupBy:t})}
  44. sum(delta) AS "${r}"
  45. FROM source
  46. ${L({timeBucketSelect:e,groupBy:t})}
  47. `}],W=({timeBucketSelect:e,groupBy:t,from:a,where:n,valueAlias:r,level:i})=>[{name:"source",sql:tx`
  48. SELECT
  49. MetricName,
  50. ExplicitBounds,
  51. ${M(e)}
  52. ${t?`${q},`:""}
  53. sumForEach(deltas) as rates
  54. FROM (
  55. SELECT
  56. TimeUnix,
  57. MetricName,
  58. ExplicitBounds,
  59. ${t?tx` ${q},`:""}
  60. attr_hash,
  61. any(attr_hash) OVER prev_row AS prev_attr_hash,
  62. count() OVER prev_row = 0 OR prev_attr_hash != attr_hash AS is_first_series_point,
  63. any(bounds_hash) OVER prev_row AS prev_bounds_hash,
  64. any(counts) OVER prev_row AS prev_counts,
  65. counts,
  66. multiIf(
  67. AggregationTemporality = 2 AND is_first_series_point, ${""}
  68. arrayWithConstant(length(counts), toInt64(0)),
  69. AggregationTemporality = 1 ${""}
  70. OR bounds_hash != prev_bounds_hash ${""}
  71. OR arrayExists((x) -> x.2 < x.1, arrayZip(prev_counts, counts)), ${""}
  72. counts,
  73. counts - prev_counts
  74. ) AS deltas
  75. FROM (
  76. SELECT
  77. TimeUnix,
  78. MetricName,
  79. AggregationTemporality,
  80. ExplicitBounds,
  81. ResourceAttributes,
  82. Attributes,${t?tx`[${t}] as ${q},`:""}
  83. ${D} AS attr_hash,
  84. cityHash64(ExplicitBounds) AS bounds_hash,
  85. CAST(BucketCounts AS Array(Int64)) counts
  86. FROM ${a}
  87. WHERE ${n}
  88. ORDER BY ${t?`${q}, `:""}attr_hash, TimeUnix ASC
  89. )
  90. WINDOW prev_row AS (
  91. ${t?tx` PARTITION BY ${q}`:""}
  92. ORDER BY attr_hash, TimeUnix
  93. ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
  94. )
  95. )
  96. GROUP BY ${e?tx`${K},`:""} MetricName, ${t?`${q}, `:""}ExplicitBounds
  97. ${e?tx`ORDER BY ${K}`:""}
  98. `},{name:"points",sql:tx`
  99. SELECT
  100. ${F({timeBucketSelect:e,groupBy:t})}
  101. MetricName,
  102. arrayZipUnaligned(arrayCumSum(rates), ExplicitBounds) as point,
  103. length(point) as n
  104. FROM source
  105. `},{name:"metrics",sql:tx`
  106. SELECT
  107. ${F({timeBucketSelect:e,groupBy:t})}
  108. MetricName,
  109. point[n].1 AS total,
  110. ${{Float64:i}} * total AS rank,
  111. arrayFirstIndex(x -> if(x.1 > rank, 1, 0), point) AS upper_idx,
  112. point[upper_idx].1 AS upper_count,
  113. ifNull(point[upper_idx].2, inf) AS upper_bound,
  114. CASE
  115. WHEN upper_idx > 1 THEN point[upper_idx - 1].2
  116. WHEN point[upper_idx].2 > 0 THEN 0
  117. ELSE inf
  118. END AS lower_bound,
  119. if (
  120. lower_bound = 0,
  121. 0,
  122. point[upper_idx - 1].1
  123. ) AS lower_count,
  124. CASE
  125. WHEN upper_bound = inf THEN point[upper_idx - 1].2
  126. WHEN lower_bound = inf THEN point[1].2
  127. ELSE lower_bound + (upper_bound - lower_bound) * ((rank - lower_count) / (upper_count - lower_count))
  128. END AS "${r}"
  129. FROM points
  130. WHERE length(point) > 1 AND total > 0
  131. `}],B=t.i=({select:e,...t})=>{if("quantile"===e.aggFn){if(!("level"in e)||null===e.level)throw Error("quantile must have a level");return j({...t,level:e.level})}if("count"===e.aggFn)return P(t);throw Error(`${e.aggFn} is not currently supported for exponential histogram metrics`)},P=({timeBucketSelect:e,groupBy:t,from:a,where:n,valueAlias:r})=>[{name:"source",sql:tx`
  132. SELECT
  133. MetricName,
  134. TimeUnix,
  135. StartTimeUnix,
  136. AggregationTemporality,
  137. ${M(e)}
  138. ${t?tx`[${t}] AS ${q},`:""}
  139. ${D} AS attr_hash,
  140. toInt64(Count) AS current_count,
  141. count() OVER prev_row = 0 AS is_first_series_point,
  142. toInt64(any(Count) OVER prev_row) AS previous_count,
  143. any(StartTimeUnix) OVER prev_row AS previous_start_time,
  144. CASE
  145. WHEN AggregationTemporality = 1 THEN current_count
  146. WHEN AggregationTemporality = 2 THEN
  147. multiIf(
  148. is_first_series_point OR StartTimeUnix = TimeUnix, 0,
  149. StartTimeUnix != previous_start_time OR current_count < previous_count, current_count,
  150. current_count - previous_count
  151. )
  152. ELSE 0
  153. END AS delta
  154. FROM ${a}
  155. WHERE ${n}
  156. WINDOW prev_row AS (
  157. PARTITION BY ${t?`${q}, `:""}MetricName, attr_hash, AggregationTemporality
  158. ORDER BY TimeUnix
  159. ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
  160. )
  161. `},{name:"metrics",sql:tx`
  162. SELECT
  163. ${F({timeBucketSelect:e,groupBy:t})}
  164. sum(delta) AS "${r}"
  165. FROM source
  166. ${L({timeBucketSelect:e,groupBy:t})}
  167. `}],j=({timeBucketSelect:e,groupBy:t,from:a,where:n,valueAlias:r,level:i})=>[{name:"filtered_series",sql:tx`
  168. SELECT
  169. MetricName,
  170. TimeUnix,
  171. StartTimeUnix,
  172. AggregationTemporality,
  173. Scale,
  174. ${D} AS attr_hash,
  175. ${t?tx`[${t}] as ${q},`:""}
  176. ZeroCount,
  177. PositiveOffset,
  178. PositiveBucketCounts,
  179. NegativeOffset,
  180. NegativeBucketCounts
  181. FROM ${a}
  182. WHERE ${n}
  183. `},{name:"series_with_normalized_scale",sql:tx`
  184. SELECT
  185. MetricName,
  186. TimeUnix,
  187. StartTimeUnix,
  188. AggregationTemporality,
  189. normalized_scale AS Scale,
  190. attr_hash,
  191. ${t?`${q},`:""}
  192. ZeroCount,
  193. assumeNotNull((SELECT min(Scale) FROM filtered_series)) AS normalized_scale,
  194. series.Scale - normalized_scale AS scale_shift,
  195. bitShiftLeft(toInt64(1), scale_shift) AS scale_divisor, ${""}
  196. ${""}
  197. series.PositiveOffset + length(series.PositiveBucketCounts) - 1 AS positive_last_index,
  198. bitShiftRight(series.PositiveOffset, scale_shift) AS normalized_positive_offset,
  199. normalized_negative_offset AS NegativeOffset,
  200. series.NegativeOffset + length(series.NegativeBucketCounts) - 1 AS negative_last_index,
  201. bitShiftRight(series.NegativeOffset, scale_shift) AS normalized_negative_offset,
  202. normalized_positive_offset AS PositiveOffset,
  203. ${""}
  204. if(
  205. scale_shift = 0,
  206. series.PositiveBucketCounts,
  207. arrayMap(
  208. bucket_group -> arraySum(bucket_group),
  209. arraySplit(
  210. (count, index) -> positiveModulo(index, scale_divisor) = 0,
  211. series.PositiveBucketCounts,
  212. range(series.PositiveOffset, positive_last_index + 1)
  213. )
  214. )
  215. ) AS PositiveBucketCounts,
  216. if(
  217. scale_shift = 0,
  218. series.NegativeBucketCounts,
  219. arrayMap(
  220. bucket_group -> arraySum(bucket_group),
  221. arraySplit(
  222. (count, index) -> positiveModulo(index, scale_divisor) = 0,
  223. series.NegativeBucketCounts,
  224. range(series.NegativeOffset, negative_last_index + 1)
  225. )
  226. )
  227. ) AS NegativeBucketCounts
  228. FROM filtered_series AS series
  229. `},{name:"normalized_deltas",sql:tx`
  230. SELECT
  231. MetricName,
  232. TimeUnix,
  233. Scale,
  234. ${t?`${q},`:""}
  235. ${""}
  236. is_first_series_point OR StartTimeUnix = TimeUnix AS use_zero_counts,
  237. ${""}
  238. NOT use_zero_counts
  239. AND (
  240. StartTimeUnix != previous_start_time
  241. OR current_zero_count < previous_zero_count
  242. OR positive_counts_decreased
  243. OR negative_counts_decreased
  244. ) AS use_current_counts,
  245. ${""}
  246. multiIf(
  247. use_zero_counts, 0,
  248. use_current_counts, current_zero_count,
  249. current_zero_count - previous_zero_count
  250. ) AS ZeroCount,
  251. if(
  252. use_zero_counts,
  253. emptyArrayInt64(),
  254. range(
  255. PositiveOffset,
  256. PositiveOffset + length(current_positive_bucket_counts)
  257. )
  258. ) AS positive_bucket_indexes,
  259. multiIf(
  260. use_zero_counts,
  261. emptyArrayInt64(),
  262. use_current_counts,
  263. current_positive_bucket_counts,
  264. positive_deltas
  265. ) AS positive_bucket_counts,
  266. if(
  267. use_zero_counts,
  268. emptyArrayInt64(),
  269. range(
  270. NegativeOffset,
  271. NegativeOffset + length(current_negative_bucket_counts)
  272. )
  273. ) AS negative_bucket_indexes,
  274. multiIf(
  275. use_zero_counts,
  276. emptyArrayInt64(),
  277. use_current_counts,
  278. current_negative_bucket_counts,
  279. negative_deltas
  280. ) AS negative_bucket_counts
  281. FROM (
  282. SELECT
  283. MetricName,
  284. TimeUnix,
  285. StartTimeUnix,
  286. Scale,
  287. attr_hash,
  288. ${t?`${q},`:""}
  289. PositiveOffset,
  290. NegativeOffset,
  291. ${""}
  292. toInt64(series.ZeroCount) AS current_zero_count,
  293. series.PositiveBucketCounts::Array(Int64) AS current_positive_bucket_counts,
  294. series.NegativeBucketCounts::Array(Int64) AS current_negative_bucket_counts,
  295. count() OVER prev_row = 0 AS is_first_series_point,
  296. toInt64(any(series.ZeroCount) OVER prev_row) AS previous_zero_count,
  297. any(series.StartTimeUnix) OVER prev_row AS previous_start_time,
  298. any(series.PositiveOffset) OVER prev_row AS previous_positive_offset,
  299. any(series.NegativeOffset) OVER prev_row AS previous_negative_offset,
  300. (any(series.PositiveBucketCounts) OVER prev_row)::Array(Int64)
  301. AS previous_positive_bucket_counts,
  302. (any(series.NegativeBucketCounts) OVER prev_row)::Array(Int64)
  303. AS previous_negative_bucket_counts,
  304. ${""}
  305. arrayResize(
  306. arrayConcat(
  307. arrayWithConstant(greatest(0, previous_positive_offset - series.PositiveOffset), 0),
  308. arraySlice(
  309. previous_positive_bucket_counts,
  310. 1 + greatest(0, series.PositiveOffset - previous_positive_offset)
  311. )
  312. ),
  313. length(current_positive_bucket_counts)
  314. ) AS aligned_previous_positive_counts,
  315. arrayResize(
  316. arrayConcat(
  317. arrayWithConstant(greatest(0, previous_negative_offset - series.NegativeOffset), 0),
  318. arraySlice(
  319. previous_negative_bucket_counts,
  320. 1 + greatest(0, series.NegativeOffset - previous_negative_offset)
  321. )
  322. ),
  323. length(current_negative_bucket_counts)
  324. ) AS aligned_previous_negative_counts,
  325. ${""}
  326. current_positive_bucket_counts - aligned_previous_positive_counts
  327. AS positive_deltas,
  328. current_negative_bucket_counts - aligned_previous_negative_counts
  329. AS negative_deltas,
  330. ${""}
  331. arrayMin(positive_deltas) < 0
  332. OR arraySum(previous_positive_bucket_counts) > arraySum(aligned_previous_positive_counts)
  333. AS positive_counts_decreased,
  334. arrayMin(negative_deltas) < 0
  335. OR arraySum(previous_negative_bucket_counts) > arraySum(aligned_previous_negative_counts)
  336. AS negative_counts_decreased
  337. FROM (
  338. SELECT *
  339. FROM series_with_normalized_scale
  340. WHERE AggregationTemporality = 2
  341. ${""}
  342. ORDER BY ${t?`${q}, `:""}MetricName, attr_hash, TimeUnix
  343. ) AS series
  344. WINDOW prev_row AS (
  345. PARTITION BY ${t?`${q}, `:""}MetricName, attr_hash
  346. ORDER BY TimeUnix
  347. ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING
  348. )
  349. )
  350. UNION ALL
  351. ${""}
  352. SELECT
  353. MetricName,
  354. TimeUnix,
  355. Scale,
  356. ${t?`${q},`:""}
  357. toUInt8(0) AS use_zero_counts,
  358. toUInt8(1) AS use_current_counts,
  359. toInt64(ZeroCount) AS ZeroCount,
  360. range(
  361. PositiveOffset,
  362. PositiveOffset + length(PositiveBucketCounts)
  363. ) AS positive_bucket_indexes,
  364. PositiveBucketCounts::Array(Int64) AS positive_bucket_counts,
  365. range(
  366. NegativeOffset,
  367. NegativeOffset + length(NegativeBucketCounts)
  368. ) AS negative_bucket_indexes,
  369. NegativeBucketCounts::Array(Int64) AS negative_bucket_counts
  370. FROM series_with_normalized_scale
  371. WHERE AggregationTemporality = 1
  372. `},{name:"summed_buckets",sql:tx`
  373. SELECT
  374. ${M(e)}
  375. ${t?`${q},`:""}
  376. any(Scale) AS Scale,
  377. sum(ZeroCount) AS ZeroCount,
  378. sumMap(positive_bucket_indexes, positive_bucket_counts) AS positive_buckets,
  379. sumMap(negative_bucket_indexes, negative_bucket_counts) AS negative_buckets
  380. FROM normalized_deltas
  381. ${L({timeBucketSelect:e,groupBy:t})}
  382. `},{name:"selected_quantile_buckets",sql:tx`
  383. SELECT
  384. ${F({timeBucketSelect:e,groupBy:t})}
  385. Scale,
  386. ${""}
  387. length(negative_buckets.1) AS negative_bucket_count,
  388. arrayConcat(
  389. arrayReverse(negative_buckets.1),
  390. [0],
  391. positive_buckets.1
  392. ) AS bucket_indexes,
  393. arrayConcat(
  394. arrayReverse(negative_buckets.2),
  395. [ZeroCount],
  396. positive_buckets.2
  397. ) AS bucket_counts,
  398. ${""}
  399. arrayCumSum(bucket_counts) AS cumulative_counts,
  400. cumulative_counts[-1] AS total,
  401. ${{Float64:i}} * total AS rank,
  402. ${""}
  403. arrayFirstIndex(
  404. (cumulative_count, bucket_count) -> bucket_count > 0 AND cumulative_count >= rank,
  405. cumulative_counts,
  406. bucket_counts
  407. ) AS selected_bucket_position,
  408. ${""}
  409. sign(selected_bucket_position - negative_bucket_count - 1) AS selected_bucket_side,
  410. bucket_indexes[selected_bucket_position] AS selected_bucket_index,
  411. ${""}
  412. (rank - cumulative_counts[selected_bucket_position - 1])
  413. / bucket_counts[selected_bucket_position] AS fraction_within_bucket
  414. FROM summed_buckets
  415. WHERE total > 0 AND selected_bucket_position > 0
  416. `},{name:"metrics",sql:tx`
  417. SELECT
  418. ${F({timeBucketSelect:e,groupBy:t})}
  419. multiIf(
  420. selected_bucket_side < 0,
  421. -exp2((selected_bucket_index + 1 - fraction_within_bucket) * exp2(-Scale)),
  422. selected_bucket_side > 0,
  423. exp2((selected_bucket_index + fraction_within_bucket) * exp2(-Scale)),
  424. 0 ${""}
  425. ) AS "${r}"
  426. FROM selected_quantile_buckets
  427. `}];function H(e,t){return t||N.default.format("MetricName = ?",[e])}var K=t.j="__hdx_time_bucket";function z(e){return null!=e.groupBy&&e.groupBy.length>0}function Q(e){return null!=e.timestampValueExpression&&null!=e.granularity}var G=e=>null!=e.metricTables,Y=t.n=e=>d(f([e,"access",e=>e.formulas,"optionalAccess",e=>e.length]),()=>0)>0,Z=t.o=e=>Array.isArray(e.select)&&G(e)?{...e,select:e.select.map(e=>({...e,alias:e.alias||("increase"===e.aggFn?`increase(${e.metricName})`:e.isDelta?`${e.aggFn}(delta(${e.metricName}))`:`${e.aggFn}(${e.metricName})`)}))}:e,J="__hdx_value",X="__hdx_series_idx",ee=e=>`"${e.replace(/"/g,'""')}"`,et=e=>"histogram"===e.metricType||"exponential histogram"===e.metricType,ea={"=":"!=",">":"<=","<":">=","!=":"=","<=":">",">=":"<"};function en(e){return null!=e&&""!=e.trim()}function er(e){return d(f([e,"optionalAccess",e=>e.some,"call",e=>e(e=>!1!==e.isSubquery)]),()=>!1)}var ei=({materializedFields:e,rawSQL:t})=>{try{let[a]=nb(t),n=new k.Parser,r=n.astify(a,{database:"Postgresql"}),i=t=>{let a;if(null!=t){switch(t.type){case"column_ref":"string"!=typeof t.column&&(a=`${f([t,"access",e=>e.column,"optionalAccess",e=>e.expr,"access",e=>e.value])}['${f([t,"access",e=>e.array_index,"optionalAccess",e=>e[0],"optionalAccess",e=>e.index,"access",e=>e.value])}']`);break;case"binary_expr":if(Array.isArray(t.left))for(let e of t.left)i(e);else i(t.left);if(Array.isArray(t.right))for(let e of t.right)i(e);else i(t.right);break;case"function":if("expr_list"===f([t,"access",e=>e.args,"optionalAccess",e=>e.type]))if(Array.isArray(f([t,"access",e=>e.args,"optionalAccess",e=>e.value]))){for(let e of t.args.value)i(e);"column_ref"===f([t,"access",e=>e.args,"optionalAccess",e=>e.value,"optionalAccess",e=>e[0],"optionalAccess",e=>e.type])&&"single_quote_string"===f([t,"access",e=>e.args,"optionalAccess",e=>e.value,"optionalAccess",e=>e[1],"optionalAccess",e=>e.type])&&(a=`${f([t,"access",e=>e.name,"optionalAccess",e=>e.name,"optionalAccess",e=>e[0],"optionalAccess",e=>e.value])}(${f([t,"access",e=>e.args,"optionalAccess",e=>e.value,"optionalAccess",e=>e[0],"optionalAccess",e=>e.column,"access",e=>e.expr,"access",e=>e.value])}, '${f([t,"access",e=>e.args,"optionalAccess",e=>e.value,"optionalAccess",e=>e[1],"optionalAccess",e=>e.value])}')`)}else R.default.call(void 0,f([t,"access",e=>e.args,"optionalAccess",e=>e.value]))&&i(t.args.value)}if(a){let n=e.get(a);if(n){for(let e in t)t.hasOwnProperty(e)&&delete t[e];t.type="column_ref",t.table=null,t.column={expr:{type:"default",value:n}}}}}};if(Array.isArray(r.columns))for(let e of r.columns)i(e.expr);return i(r.where),n.sqlify(r)}catch(e){return t}};function es(e,t,a,n){return N.default.format("has(??, concat(?, ?, ?))",[e,t,a,n])}var eo=(e,t)=>{if(0===t.size)return e;try{let a=new k.Parser,n="SELECT 1 FROM `t` WHERE ",r=a.astify(`${n}${e}`,{database:"Postgresql"}),i=e=>{null!=e&&("binary_expr"===e.type?("left"in e&&i(e.left),"right"in e&&i(e.right),(e=>{let r,i;if(!("operator"in e))return;let s=String(d(e.operator,()=>"")).toUpperCase();if("="!==s&&"IN"!==s)return;let o=e.left;if("column_ref"!==f([o,"optionalAccess",e=>e.type])||"column"in o&&"string"==typeof o.column)return;let l=f([o,"access",e=>e.column,"optionalAccess",e=>e.expr,"optionalAccess",e=>e.value]),u=o.array_index;if("string"!=typeof l||!Array.isArray(u)||1!==u.length)return;let c=f([u,"access",e=>e[0],"optionalAccess",e=>e.index]);if("single_quote_string"!==f([c,"optionalAccess",e=>e.type])||"string"!=typeof c.value)return;let m=c.value,p=f([t,"access",e=>e.get,"call",e=>e(l),"optionalAccess",e=>e.kv]);if(!p)return;if("="===s){let t=e.right;if("single_quote_string"!==f([t,"optionalAccess",e=>e.type])||"string"!=typeof t.value)return;r=[t.value]}else{let t=e.right;if("expr_list"!==f([t,"optionalAccess",e=>e.type])||!Array.isArray(t.value))return;let a=[];for(let e of t.value){if("single_quote_string"!==f([e,"optionalAccess",e=>e.type])||"string"!=typeof e.value)return;a.push(e.value)}r=a}if(0===r.length||r.some(e=>""===e))return;i=1===r.length?es(p.columnName,m,p.separator,r[0]):p.useHasAny?`hasAny(${N.default.format("??",[p.columnName])}, array(${r.map(e=>N.default.format("concat(?, ?, ?)",[m,p.separator,e])).join(", ")}))`:`(${r.map(e=>es(p.columnName,m,p.separator,e)).join(" OR ")})`;let g=a.astify(`${n}${i}`,{database:"Postgresql"}).where;if(null!=g){for(let t of Object.keys(e))delete e[t];Object.assign(e,g)}})(e)):"expr_list"===e.type&&Array.isArray(e.value)&&e.value.forEach(i))};return i(r.where),a.sqlify(r).slice(n.length)}catch(t){return e}},el=({fn:e,expr:t,level:a,where:n,sampleWeightExpression:r})=>{let i="any"===e,s="none"===e,o=e.startsWith("count"),l=en(n),u={UNSAFE_RAW_SQL:i||s?`${t}`:`toFloat64OrDefault(toString(${t}))`},c=`${n} AND ${u.UNSAFE_RAW_SQL} IS NOT NULL`;if(e.endsWith("Merge")){let n=tx`${{UNSAFE_RAW_SQL:d(t,()=>"")}}`,r=a&&(e.startsWith("quantile")||e.startsWith("histogram"))?tx`(${{UNSAFE_RAW_SQL:Number.isFinite(a)?`${a}`:"0"}})`:[];return l?tx`${e}If${r}(${n}, ${{UNSAFE_RAW_SQL:c}})`:tx`${e}${r}(${n})`}if(e.endsWith("State"))return null==t||o?l?tx`${e}(${{UNSAFE_RAW_SQL:n}})`:tx`${e}()`:tx`${e}(${u}${l?tx`, ${{UNSAFE_RAW_SQL:c}}`:""})`;if(r&&!e.endsWith("Merge")&&!e.endsWith("State")){let i=`greatest(toUInt64OrZero(toString(${r})), 1)`,s={UNSAFE_RAW_SQL:i};if("count"===e)return l?tx`sumIf(${s}, ${{UNSAFE_RAW_SQL:n}})`:tx`sum(${s})`;if("none"===e)return tx`${{UNSAFE_RAW_SQL:d(t,()=>"")}}`;if(null!=t){if("count_distinct"===e||"min"===e||"max"===e)return"count_distinct"===e?tx`count${l?"If":""}(DISTINCT ${{UNSAFE_RAW_SQL:t}}${l?tx`, ${{UNSAFE_RAW_SQL:n}}`:""})`:tx`${{UNSAFE_RAW_SQL:e}}${l?"If":""}(
  428. ${u}${l?tx`, ${{UNSAFE_RAW_SQL:c}}`:""}
  429. )`;if("avg"===e){let e={UNSAFE_RAW_SQL:`${u.UNSAFE_RAW_SQL} * ${i}`},t=`${u.UNSAFE_RAW_SQL} IS NOT NULL`;if(l){let a={UNSAFE_RAW_SQL:`${n} AND ${t}`};return tx`sumIf(${e}, ${a}) / nullIf(sumIf(${s}, ${a}), 0)`}return tx`sumIf(${e}, ${{UNSAFE_RAW_SQL:t}}) / nullIf(sumIf(${s}, ${{UNSAFE_RAW_SQL:t}}), 0)`}if("sum"===e){let e={UNSAFE_RAW_SQL:`${u.UNSAFE_RAW_SQL} * ${i}`};return l?tx`sumIf(${e}, ${{UNSAFE_RAW_SQL:c}})`:tx`sum(${e})`}if(null!=a&&e.startsWith("quantile")){let e=Number.isFinite(a)?`${a}`:"0",t={UNSAFE_RAW_SQL:`toUInt32(${i})`};return l?tx`quantileTDigestWeightedIf(${{UNSAFE_RAW_SQL:e}})(${u}, ${t}, ${{UNSAFE_RAW_SQL:c}})`:tx`quantileTDigestWeighted(${{UNSAFE_RAW_SQL:e}})(${u}, ${t})`}}}if("count"===e)return l?tx`${e}If(${{UNSAFE_RAW_SQL:n}})`:{sql:`${e}()`,params:{}};if("none"===e)return tx`${{UNSAFE_RAW_SQL:d(t,()=>"")}}`;if(null!=t)return"count_distinct"===e?tx`count${l?"If":""}(DISTINCT ${{UNSAFE_RAW_SQL:t}}${l?tx`, ${{UNSAFE_RAW_SQL:n}}`:""})`:null!=a?tx`${e}${l?"If":""}(${{UNSAFE_RAW_SQL:Number.isFinite(a)?`${a}`:"0"}})(${u}${l?tx`, ${{UNSAFE_RAW_SQL:c}}`:""})`:tx`${{UNSAFE_RAW_SQL:e}}${l?"If":""}(
  430. ${u}${l?tx`, ${{UNSAFE_RAW_SQL:c}}`:""}
  431. )`;throw Error("Column is required for all non-count aggregation functions")};function eu(e,t){return"ratio"===t.seriesReturnType&&2===e.length}async function ec(e,t,a,{mergeRatio:n}){let r;if("string"==typeof e)return tx`${{UNSAFE_RAW_SQL:e}}`;try{r=er(t.with)||!t.from.databaseName?void 0:await a.getMaterializedColumnsLookupTable({connectionId:t.connection,databaseName:t.from.databaseName,tableName:t.from.tableName})}catch(e){}let i=n&&eu(e,t),s=await Promise.all(e.map(async e=>{let n=en(e.aggCondition)?await eb({condition:d(e.aggCondition,()=>""),from:t.from,language:d(e.aggConditionLanguage,()=>"lucene"),implicitColumnExpression:t.implicitColumnExpression,bodyExpression:t.bodyExpression,useTextIndexForImplicitColumn:t.useTextIndexForImplicitColumn,metadata:a,connectionId:t.connection,with:t.with}):tx``,i;i=null==e.aggFn?"lucene"===e.valueExpressionLanguage?await eb({condition:e.valueExpression,from:t.from,language:"lucene",implicitColumnExpression:t.implicitColumnExpression,bodyExpression:t.bodyExpression,useTextIndexForImplicitColumn:t.useTextIndexForImplicitColumn,metadata:a,connectionId:t.connection,with:t.with}):tx`${{UNSAFE_RAW_SQL:e.valueExpression}}`:e.aggFn.startsWith("quantile")||e.aggFn.startsWith("histogram")?el({fn:e.aggFn,expr:e.valueExpression,level:e.level,where:n.sql,sampleWeightExpression:t.sampleWeightExpression}):el({fn:e.aggFn,expr:e.valueExpression,where:n.sql,sampleWeightExpression:t.sampleWeightExpression});let s=`SELECT ${i.sql} FROM \`t\``;return r&&(i.sql=ei({materializedFields:r,rawSQL:s}).replace(/^SELECT\s+/i,"").replace(/\s+FROM `t`$/i,"")),tx`${i}${null!=e.alias&&""!==e.alias.trim()?tx` AS "${{UNSAFE_RAW_SQL:e.alias}}"`:[]}`}));return i?[tx`divide(${s[0]}, ${s[1]})`]:s}function em(e){return"string"==typeof e?tx`${{UNSAFE_RAW_SQL:e}}`:e.map(e=>tx`${{UNSAFE_RAW_SQL:e.valueExpression}} ${"DESC"===e.ordering?"DESC":"ASC"}`)}function ed({interval:e,timestampValueExpression:t,bucketTimestampValueExpression:a,dateRange:n,alias:r=K,isRenderingRawSqlTemplate:i}){let s={UNSAFE_RAW_SQL:d(a,()=>a3(t))};if(i)return tx`$__timeInterval(${s}) AS \`${{UNSAFE_RAW_SQL:r}}\``;let o={UNSAFE_RAW_SQL:"auto"===e&&Array.isArray(n)?nn(n):e};return tx`toStartOfInterval(toDateTime(${s}), INTERVAL ${o}) AS \`${{UNSAFE_RAW_SQL:r}}\``}async function ep({connectionId:e,databaseName:t,dateRange:a,dateRangeEndInclusive:n,dateRangeStartInclusive:r,isRenderingRawSqlTemplate:i,includedDataInterval:s,metadata:o,tableName:l,timestampValueExpression:u,with:c}){let m=a[0].getTime(),p=a[1].getTime(),g=u;try{if(t&&l&&e){let a=await o.getTableMetadata({databaseName:t,tableName:l,connectionId:e});g=nh(u,f([a,"optionalAccess",e=>e.primary_key]))}}catch(e){console.warn("Failed to optimize timestampValueExpression",e)}let h=a4(g);return tw("AND",...await Promise.all(h.map(async a=>{let u=a.trim(),g=ng(u),h=/^toDate\s*\(/.test(u),b=er(c)&&!t||!!g||h,_=b?null:await o.getColumn({databaseName:t,tableName:l,column:u,connectionId:e}),$={UNSAFE_RAW_SQL:u};null!=_||b||console.warn(`Column ${u} not found in ${t}.${l} while inferring type for time filter`);let S=i?s?tx`toStartOfInterval($__fromTime_ms, INTERVAL $__interval_s second) - INTERVAL $__interval_s second`:tx`$__fromTime_ms`:s?tx`toStartOfInterval(fromUnixTimestamp64Milli(${{Int64:m}}), INTERVAL ${s}) - INTERVAL ${s}`:tx`fromUnixTimestamp64Milli(${{Int64:m}})`,A=i?s?tx`toStartOfInterval($__toTime_ms, INTERVAL $__interval_s second) + INTERVAL $__interval_s second`:tx`$__toTime_ms`:s?tx`toStartOfInterval(fromUnixTimestamp64Milli(${{Int64:p}}), INTERVAL ${s}) + INTERVAL ${s}`:tx`fromUnixTimestamp64Milli(${{Int64:p}})`,v=g?tx`${g.function}(${S}${g.formattedRemainingArgs})`:S,E=g?tx`${g.function}(${A}${g.formattedRemainingArgs})`:A,x=/^Date(?:32)?$/i.test(y.d.call(void 0,d(f([_,"optionalAccess",e=>e.type]),()=>"")))||h,w=r||g||x?">=":">",N=n||g||x?"<=":"<";return x?tx`(${$} ${w} toDate(${v}) AND ${$} ${N} toDate(${E}))`:tx`(${$} ${w} ${v} AND ${$} ${N} ${E})`})))}async function ef(e,t,a){let n=d(t.formulas,()=>[]),r=await ec(e.map(e=>({...e,alias:void 0})),t,a,{mergeRatio:!1}),i=Array.isArray(r)?r:[r],s=e=>{let t=i.at(e);if(null==t)throw Error(`Formula references unknown series index ${e}`);return t},o=[];if(!1!==t.showOperandSeries){let n=await ec(e,t,a,{mergeRatio:!1});o.push(...Array.isArray(n)?n:[n])}let l=new Set(e.flatMap(e=>null!=e.alias&&""!==e.alias.trim()?[e.alias]:[]));return n.forEach((t,a)=>{var n,r;let i,u=b.f.call(void 0,t.expression,{seriesCount:e.length});if(!u.ok)throw Error(`Invalid formula "${t.expression}": ${u.errors.map(e=>e.message).join("; ")}`);let c=(n=t.alias||t.expression,r=e.length+a,i=l.has(n)?`${n}__${r}`:n,l.add(i),i),m=`${b.g.call(void 0,u.ast,e=>s(e).sql)} AS ${ee(c)}`,d=Object.assign({},...u.referencedIndices.map(e=>s(e).params));o.push({sql:m,params:d})}),o}async function eg(e,t){let a=Q(e),n=z(e);return tw(",",Array.isArray(e.select)&&d(f([e,"access",e=>e.formulas,"optionalAccess",e=>e.length]),()=>0)>0&&Array.isArray(e.select)?await ef(e.select,e,t):await ec(e.select,e,t,{mergeRatio:!0}),n&&!1!==e.selectGroupBy?await ec(e.groupBy,e,t,{mergeRatio:!1}):[],a?ed({interval:e.granularity,timestampValueExpression:e.timestampValueExpression,bucketTimestampValueExpression:e.bucketTimestampValueExpression,dateRange:e.dateRange,isRenderingRawSqlTemplate:e.isRenderingRawSqlTemplate}):[])}function eh({from:e,isRenderingRawSqlTemplate:t,metricType:a}){if(t){if(null!=a)return tx`$__sourceTable(${{UNSAFE_RAW_SQL:a}})`;if(""!==e.databaseName)return tx`$__sourceTable`}return tw(".",tx`${""===e.databaseName?"":{Identifier:e.databaseName}}`,tx`${{Identifier:e.tableName}}`)}async function ey({condition:e,language:t,metadata:a,from:n,implicitColumnExpression:r,bodyExpression:i,useTextIndexForImplicitColumn:s,connectionId:o,with:l}){let u,c=e;if("lucene"===t){let t=new t4({metadata:a,databaseName:n.databaseName,tableName:n.tableName,implicitColumnExpression:r,bodyExpression:i,useTextIndexForImplicitColumn:s,connectionId:o});c=await new ae(e,t).build()}try{u=er(l)||!n.databaseName?void 0:await a.getMaterializedColumnsLookupTable({connectionId:o,databaseName:n.databaseName,tableName:n.tableName})}catch(e){}let m="SELECT * FROM `t` WHERE ",d=`${m}${c}`;return u&&(c=ei({materializedFields:u,rawSQL:d}).replace(m,"")),c}async function eb(e){let t=await ey(e);return tx`${{UNSAFE_RAW_SQL:t}}`}async function e_(e,t){let a="string"!=typeof e.select&&e.select.every(e=>en(e.aggCondition)),n=(en(e.where)&&"sql"===d(e.whereLanguage,()=>"sql")||d(f([e,"access",e=>e.filters,"optionalAccess",e=>e.some,"call",e=>e(e=>"sql"===e.type)]),()=>!1)||a&&"string"!=typeof e.select&&e.select.some(e=>"sql"===d(e.aggConditionLanguage,()=>"sql")))&&e.from.databaseName&&e.from.tableName&&!er(e.with)?await t6({metadata:t,databaseName:e.from.databaseName,tableName:e.from.tableName,connectionId:e.connection}):new Map,r=[];en(e.where)&&(r=tN(await eb({condition:"sql"===d(e.whereLanguage,()=>"sql")?eo(e.where,n):e.where,from:e.from,language:d(e.whereLanguage,()=>"sql"),implicitColumnExpression:e.implicitColumnExpression,bodyExpression:e.bodyExpression,useTextIndexForImplicitColumn:e.useTextIndexForImplicitColumn,metadata:t,connectionId:e.connection,with:e.with}),"(",")"));let i=[];a&&"string"!=typeof e.select&&(i=(await Promise.all(e.select.map(async a=>en(a.aggCondition)?await eb({condition:"sql"===d(a.aggConditionLanguage,()=>"sql")?eo(a.aggCondition,n):a.aggCondition,from:e.from,language:d(a.aggConditionLanguage,()=>"sql"),implicitColumnExpression:e.implicitColumnExpression,bodyExpression:e.bodyExpression,useTextIndexForImplicitColumn:e.useTextIndexForImplicitColumn,metadata:t,connectionId:e.connection,with:e.with}):null))).filter(e=>null!==e));let s=await Promise.all(d(e.filters,()=>[]).map(async a=>{if("sql_ast"===a.type)return tN(tx`${{UNSAFE_RAW_SQL:a.left}} ${a.operator} ${{UNSAFE_RAW_SQL:a.right}}`,"(",")");if("lucene"===a.type||"sql"===a.type){let r="sql"===a.type?eo(a.condition,n):a.condition;return tN(await eb({condition:r,from:e.from,language:a.type,implicitColumnExpression:e.implicitColumnExpression,bodyExpression:e.bodyExpression,useTextIndexForImplicitColumn:e.useTextIndexForImplicitColumn,metadata:t,connectionId:e.connection,with:e.with}),"(",")")}throw Error(`Unknown filter type: ${a.type}`)}));return tw(" AND ",null!=e.dateRange&&null!=e.timestampValueExpression?await ep({timestampValueExpression:e.timestampValueExpression,dateRange:e.dateRange,dateRangeStartInclusive:d(e.dateRangeStartInclusive,()=>!0),dateRangeEndInclusive:d(e.dateRangeEndInclusive,()=>!0),isRenderingRawSqlTemplate:e.isRenderingRawSqlTemplate,metadata:t,connectionId:e.connection,databaseName:e.from.databaseName,tableName:e.from.tableName,with:e.with,includedDataInterval:e.includedDataInterval}):[],r,tN(tw(" OR ",i),"(",")"),tN(tw("OR"===e.filtersLogicalOperator?" OR ":" AND ",...s),"(",")"),e.isRenderingRawSqlTemplate&&""!==e.from.databaseName?tx`$__filters`:[])}async function e$(e,t){return tw(",",z(e)?await ec(e.groupBy,e,t,{mergeRatio:!1}):[],Q(e)?ed({interval:e.granularity,timestampValueExpression:e.timestampValueExpression,bucketTimestampValueExpression:e.bucketTimestampValueExpression,dateRange:e.dateRange,isRenderingRawSqlTemplate:e.isRenderingRawSqlTemplate}):[])}async function eS(e,t,{from:a,where:n,groupBy:r}){let{seriesLimit:i}=e;if(!aX(i)||!z(e)||!Q(e)||!1===e.selectGroupBy||!f([e,"access",e=>e.from,"optionalAccess",e=>e.databaseName])||!f([e,"access",e=>e.from,"optionalAccess",e=>e.tableName])||!Array.isArray(e.select)||0===e.select.length||null==r)return;let s=e.seriesLimitDateRange?{...e,dateRange:e.seriesLimitDateRange,dateRangeStartInclusive:!0,dateRangeEndInclusive:!0}:void 0,[o=n,l=r]=s?await Promise.all([e_(s,t),e$(s,t)]):[],u;if("string"==typeof e.groupBy)u=a4(e.groupBy).map(e=>tx`${{UNSAFE_RAW_SQL:e}}`);else{let a=await ec(e.groupBy.map(e=>({...e,alias:void 0})),e,t,{mergeRatio:!1});u=Array.isArray(a)?a:[a]}let c=tw(",",u),m=await ec(e.select.map(e=>({...e,alias:void 0})),e,t,{mergeRatio:!0}),d=Array.isArray(m)?m[0]:m,p=eu(e.select,e)?tx`max(if(isFinite(\`__hdx_series_rank\`), \`__hdx_series_rank\`, -inf))`:tx`max(\`__hdx_series_rank\`)`,g=tw(" AND ",u.map(e=>tx`${e} IS NOT NULL`)),h=o.sql?tw(" AND ",o,g):g;return{cte:tx`\`__hdx_series_limit\` AS (
  432. SELECT \`group\`
  433. FROM (
  434. SELECT tuple(${c}) AS \`group\`, ${d} AS \`__hdx_series_rank\`
  435. FROM ${a}
  436. WHERE ${h}
  437. GROUP BY ${l}
  438. )
  439. GROUP BY \`group\`
  440. ORDER BY ${p} DESC, \`group\`
  441. LIMIT ${{Int32:i}}
  442. )`,predicate:tx`tuple(${c}) IN (SELECT \`group\` FROM \`__hdx_series_limit\`)`}}async function eA(e,t){if(en(e.having))return await eb({condition:e.having,from:e.from,language:d(e.havingLanguage,()=>"sql"),implicitColumnExpression:e.implicitColumnExpression,bodyExpression:e.bodyExpression,useTextIndexForImplicitColumn:e.useTextIndexForImplicitColumn,metadata:t,connectionId:e.connection,with:e.with})}function ev(e){if(null==e.limit||null==e.limit.limit)return;let t=null!=e.limit.offset?tx` OFFSET ${{Int32:e.limit.offset}}`:[];return tx`${{Int32:e.limit.limit}}${t}`}async function eE(e,t,a){let{with:n}=e;if(n)return tw(",",await Promise.all(n.map(async e=>{let{sql:n,chartConfig:r}=e;if(n&&r)throw Error("cannot specify both 'sql' and 'chartConfig' in with clause");if(!(n||r))throw Error("must specify either 'sql' or 'chartConfig' in with clause");if(n&&!$.B.safeParse(n).success)throw Error("non-conforming sql object in CTE");if(r&&!$.Ma.safeParse(r).success)throw Error(`non-conforming chartConfig object in CTE: ${$.Ma.safeParse(r).error}`);let i=n||await eI(r,t,a);return!1===e.isSubquery?tx`(${i}) AS ${{Identifier:e.name}}`:tx`${e.name} AS (${i})`})))}async function ex(e,t){let a=e.metricTables;if(!a)return e;let{select:n,from:r,filters:i,...s}=e;if(!n||!Array.isArray(n))throw Error("multi select or string select on metrics not supported");let{metricType:o,metricName:l,metricNameSql:u,...c}=n[0];if("increase"===c.aggFn&&"sum"!==o)throw Error(`aggFn 'increase' is only supported for Sum (counter) metrics (got metricType=${o})`);let m="exponential histogram"===o&&l&&"exponential histogram"in a&&a["exponential histogram"],p="histogram"===o&&l&&"histogram"in a&&a.histogram;if("gauge"===o&&l&&"gauge"in a&&a.gauge){var f;let n,o,m,p,g="__hdx_time_bucket2",h=ed({interval:e.granularity||"auto",timestampValueExpression:e.timestampValueExpression||"TimeUnix",bucketTimestampValueExpression:e.bucketTimestampValueExpression,dateRange:e.dateRange,alias:g,isRenderingRawSqlTemplate:e.isRenderingRawSqlTemplate}),y=await e_({...e,from:{...r,tableName:a.gauge},filters:[...d(i,()=>[]),{type:"sql",condition:H(l,u)}]},t),b=c.isDelta?(f="Value",n=nr(d("auto"===e.granularity&&Array.isArray(e.dateRange)?nn(e.dateRange):e.granularity,()=>"")),o=d(e.bucketTimestampValueExpression,()=>a3(d(e.timestampValueExpression,()=>""))),m=`(argMax(${f}, ${o}) - argMin(${f}, ${o}))`,p=`date_diff('second', min(toDateTime(${o})), max(toDateTime(${o})))`,`IF(${p} > 0, ${m} * ${n} / ${p}, 0)`):"last_value(Value)";return{...s,with:[{name:"Source",sql:tx`
  443. SELECT
  444. *,
  445. cityHash64(ScopeAttributes, ResourceAttributes, Attributes) AS AttributesHash
  446. FROM ${eh({from:{...r,tableName:a.gauge},isRenderingRawSqlTemplate:e.isRenderingRawSqlTemplate,metricType:"gauge"})}
  447. WHERE ${y}
  448. `},{name:"Bucketed",sql:tx`
  449. SELECT
  450. ${h},
  451. AttributesHash,
  452. ${b} AS LastValue,
  453. any(ScopeAttributes) AS ScopeAttributes,
  454. any(ResourceAttributes) AS ResourceAttributes,
  455. any(Attributes) AS Attributes,
  456. any(ResourceSchemaUrl) AS ResourceSchemaUrl,
  457. any(ScopeName) AS ScopeName,
  458. any(ScopeVersion) AS ScopeVersion,
  459. any(ScopeDroppedAttrCount) AS ScopeDroppedAttrCount,
  460. any(ScopeSchemaUrl) AS ScopeSchemaUrl,
  461. any(ServiceName) AS ServiceName,
  462. any(MetricDescription) AS MetricDescription,
  463. any(MetricUnit) AS MetricUnit,
  464. any(StartTimeUnix) AS StartTimeUnix,
  465. any(Flags) AS Flags
  466. FROM Source
  467. GROUP BY AttributesHash, ${g}
  468. ORDER BY AttributesHash, ${g}
  469. `}],select:[{...c,valueExpression:"LastValue",aggCondition:""}],from:{databaseName:"",tableName:"Bucketed"},where:"",timestampValueExpression:g,settings:tx`short_circuit_function_evaluation = 'force_enable'`}}if("sum"===o&&l&&"sum"in a&&a.sum){let n="__hdx_time_bucket2",o=ed({interval:e.granularity||"auto",timestampValueExpression:e.timestampValueExpression||"TimeUnix",bucketTimestampValueExpression:e.bucketTimestampValueExpression,dateRange:e.dateRange,alias:n,isRenderingRawSqlTemplate:e.isRenderingRawSqlTemplate}),m=await e_({...e,from:{...r,tableName:a.sum},filters:[...d(i,()=>[]),{type:"sql",condition:H(l,u)}],includedDataInterval:"auto"===e.granularity&&Array.isArray(e.dateRange)?nn(e.dateRange):e.granularity},t),p=[{name:"Source",sql:tx`
  470. SELECT
  471. *,
  472. cityHash64(ScopeAttributes, ResourceAttributes, Attributes) AS AttributesHash,
  473. IF(
  474. AggregationTemporality = 1,
  475. Value, -- DELTA: Value is already the per-interval increase
  476. greatest(Value - lagInFrame(toNullable(Value), 1, NULL) OVER (PARTITION BY AttributesHash ORDER BY TimeUnix), 0)
  477. ) AS Rate,
  478. IF(
  479. AggregationTemporality = 1,
  480. SUM(Value) OVER (PARTITION BY AttributesHash ORDER BY TimeUnix ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
  481. Value
  482. ) AS Sum
  483. FROM ${eh({from:{...r,tableName:a.sum},isRenderingRawSqlTemplate:e.isRenderingRawSqlTemplate,metricType:"sum"})}
  484. WHERE ${m}`},{name:"Bucketed",sql:tx`
  485. SELECT
  486. \`${n}\`,
  487. AttributesHash,
  488. Rate,
  489. Sum,
  490. ResourceAttributes,
  491. ResourceSchemaUrl,
  492. ScopeName,
  493. ScopeVersion,
  494. ScopeAttributes,
  495. ScopeDroppedAttrCount,
  496. ScopeSchemaUrl,
  497. ServiceName,
  498. MetricName,
  499. MetricDescription,
  500. MetricUnit,
  501. Attributes,
  502. StartTimeUnix,
  503. Flags,
  504. AggregationTemporality,
  505. IsMonotonic
  506. FROM (
  507. SELECT
  508. ${o},
  509. AttributesHash,
  510. -- Per-bucket increase: sum of raw per-row deltas. NULL
  511. -- Source.Rate (first row of each partition) is ignored by sum().
  512. sum(Source.Rate) AS Rate,
  513. -- Last cumulative reading in the bucket (by time), used by
  514. -- the no-aggFn last_value(Sum) outer projection. argMax is
  515. -- deterministic w.r.t. TimeUnix ordering unlike last_value
  516. -- which in a GROUP BY context is anyLast (order-dependent).
  517. argMax(Source.Sum, TimeUnix) AS Sum,
  518. any(ResourceAttributes) AS ResourceAttributes,
  519. any(ResourceSchemaUrl) AS ResourceSchemaUrl,
  520. any(ScopeName) AS ScopeName,
  521. any(ScopeVersion) AS ScopeVersion,
  522. any(ScopeAttributes) AS ScopeAttributes,
  523. any(ScopeDroppedAttrCount) AS ScopeDroppedAttrCount,
  524. any(ScopeSchemaUrl) AS ScopeSchemaUrl,
  525. any(ServiceName) AS ServiceName,
  526. any(MetricName) AS MetricName,
  527. any(MetricDescription) AS MetricDescription,
  528. any(MetricUnit) AS MetricUnit,
  529. any(Attributes) AS Attributes,
  530. any(StartTimeUnix) AS StartTimeUnix,
  531. any(Flags) AS Flags,
  532. any(AggregationTemporality) AS AggregationTemporality,
  533. any(IsMonotonic) AS IsMonotonic
  534. FROM Source
  535. GROUP BY AttributesHash, \`${n}\`
  536. ORDER BY AttributesHash, \`${n}\`
  537. )
  538. `}],f="increase"===c.aggFn&&z(e),g="";if(f){let a=await ec("string"==typeof e.groupBy?e.groupBy:e.groupBy.map(e=>({...e,alias:void 0})),{...e,from:{databaseName:"",tableName:"Bucketed"},with:p},t,{mergeRatio:!1}),r=tw(",",a),i=tw(" AND ",(Array.isArray(a)?a:[a]).map(e=>tx`(${e} IS NOT NULL AND toString(${e}) != '')`));if(p.push({name:"TopGroups",sql:tx`
  539. SELECT \`group\`
  540. FROM (
  541. SELECT
  542. tuple(${r}) AS \`group\`,
  543. sum(Rate) AS \`bucket_value\`
  544. FROM Bucketed
  545. WHERE ${i}
  546. GROUP BY \`group\`, \`${n}\`
  547. )
  548. GROUP BY \`group\`
  549. ORDER BY max(\`bucket_value\`) DESC, \`group\`
  550. LIMIT ${{Int32:20}}
  551. `}),Object.keys(r.params).length>0)throw Error("increase + groupBy: unexpected parameterized groupBy expressions");g=`tuple(${r.sql}) IN (SELECT \`group\` FROM TopGroups)`}return{...s,with:p,select:["increase"===c.aggFn?{alias:"Value",...c,aggFn:"sum",valueExpression:"Rate",aggCondition:""}:c.aggFn?{alias:"Value",...c,valueExpression:"Rate",aggCondition:""}:{alias:"Value",...c,valueExpression:"last_value(Sum)",aggCondition:""}],from:{databaseName:"",tableName:"Bucketed"},where:g,whereLanguage:f?"sql":s.whereLanguage,timestampValueExpression:`\`${n}\``}}if(p||m){let{alias:n}=c,p=n||"Value",f={...e,from:{...r,tableName:a[o]},filters:[...d(i,()=>[]),{type:"sql",condition:H(l,u)}],includedDataInterval:"auto"===e.granularity&&Array.isArray(e.dateRange)?nn(e.dateRange):e.granularity},g=Q(f),h=g?ed({interval:f.granularity,timestampValueExpression:f.timestampValueExpression,dateRange:f.dateRange,isRenderingRawSqlTemplate:e.isRenderingRawSqlTemplate}):void 0,y=await e_(f,t),b;z(e)&&(b=tw(",",await ec(e.groupBy,e,t,{mergeRatio:!1})));let _={select:c,timeBucketSelect:h,groupBy:b,from:eh({from:{...r,tableName:a[o]},isRenderingRawSqlTemplate:e.isRenderingRawSqlTemplate,metricType:o}),where:y,valueAlias:p};return{...s,with:m?B(_):U(_),select:[...g?[`\`${K}\``]:[],...b?[q]:[],`"${p}"`].join(", "),from:{databaseName:"",tableName:"metrics"},where:"",dateRange:g?s.dateRange:void 0,groupBy:void 0,granularity:void 0,timestampValueExpression:g?`\`${K}\``:s.timestampValueExpression,settings:tx`short_circuit_function_evaluation = 'force_enable'`}}throw Error(`no query support for metric type=${o}`)}async function ew(e,t){if(!f([e,"access",e=>e.filters,"optionalAccess",e=>e.length])||!e.source||!e.from)return;let a=(await Promise.all(e.filters.map(async a=>{let n=e.from&&e.from.tableName&&e.source;if("sql_ast"===a.type)return`(${a.left} ${a.operator} ${a.right})`;if("sql"===a.type&&!n)return a.condition.trim()?`(${a.condition})`:void 0;if(("lucene"===a.type||"sql"===a.type)&&a.condition.trim()&&n){let n=await ey({condition:a.condition,from:e.from,language:a.type,implicitColumnExpression:e.implicitColumnExpression,bodyExpression:e.bodyExpression,useTextIndexForImplicitColumn:e.useTextIndexForImplicitColumn,metadata:t,connectionId:e.connection});return n?`(${n})`:void 0}}))).filter(e=>void 0!==e);return a.length>0?`(${a.join(" AND ")})`:void 0}async function eN(e,t){let a=d(e.displayType,()=>"table"),n=await ew(e,t);return{sql:aJ(e,n),params:Object.fromEntries(nR[a].map(t=>[t.name,t.get(e)]))}}async function eT(e,t,a){let n=Z(e),r=n.select;if("string"==typeof r)throw Error("multi-series metric charts require an array select");let i=d(n.formulas,()=>[]),s=[],o=[];{let e=new Set,t=(t,a)=>{let n=e.has(t)?`${t}__${a}`:t;return e.add(n),n};r.forEach((e,a)=>{s.push(t(d(e.alias,()=>""),a))}),i.forEach((e,a)=>{let n=b.f.call(void 0,e.expression,{seriesCount:r.length});if(!n.ok)throw Error(`Invalid formula "${e.expression}": ${n.errors.map(e=>e.message).join("; ")}`);o.push({name:t(e.alias||e.expression,r.length+a),ast:n.ast})})}let l=Q(n),u=z(n)&&!1!==n.selectGroupBy,c=u?"string"==typeof n.groupBy?a4(n.groupBy).length:n.groupBy.length:0,m=r.map(et),p=u&&c>0&&m.some(e=>!e),g=u&&m.some(e=>e),h=await Promise.all(r.map(async(e,r)=>{let i={...n,select:[{...e,alias:J}],formulas:void 0,showOperandSeries:void 0,having:void 0,orderBy:void 0,limit:void 0},s=await eI(i,t,a),[o,l]=nb(s.sql);return{sql:o,params:s.params,settingsClause:l,isHistogram:et(e),splitIdx:r}})),y=[...h.filter(e=>!e.isHistogram),...h.filter(e=>e.isHistogram)],_=`toFloat64(\`${J}\`) AS \`${J}\``,$=tw(" UNION ALL ",y.map(e=>{let t=`${e.splitIdx} AS \`${X}\``,a=[];if(e.isHistogram){if(a.push(_),p)for(let e=0;e<c;e++)a.push(`NULL AS \`__hdx_group_pad_${e}\``);l&&a.push(`\`${K}\``),a.push(t),g&&a.push(`\`${q}\``)}else a.push(`* REPLACE (${_})`),a.push(t),g&&a.push(`[] AS \`${q}\``);return tx`SELECT ${{UNSAFE_RAW_SQL:a.join(", ")}} FROM (${{sql:e.sql,params:e.params}})`})),S=e=>`anyOrNullIf(\`${J}\`, \`${X}\` = ${e})`,A=o.length>0,v=!A&&"ratio"===n.seriesReturnType&&2===r.length,E=[];if(A)!1!==n.showOperandSeries&&s.forEach((e,t)=>{E.push(`${S(t)} AS ${ee(e)}`)}),o.forEach(({name:e,ast:t})=>{E.push(`${b.g.call(void 0,t,S)} AS ${ee(e)}`)});else if(v){let e=`coalesce(${S(0)}, 0)`,t="share_of_total"===n.ratioMode?`sum(${S(1)}) OVER (${l?`PARTITION BY \`${K}\``:""})`:S(1),a=`${s[0]}/${s[1].replace(/__\d+$/,"")}`;E.push(`${e} / nullif(${t}, 0) AS ${ee(a)}`)}else s.forEach((e,t)=>{E.push(`${S(t)} AS ${ee(e)}`)});let x=p||g||l;x&&E.push(`* EXCEPT (\`${J}\`, \`${X}\`)`);let w=function(e){let t=[],a=new Set;for(let n of e)if(n)for(let e of n.replace(/^settings\s*/i,"").split(",")){let n=e.trim();""===n||a.has(n)||(a.add(n),t.push(n))}return t.join(", ")}(h.map(e=>e.settingsClause)),N=await eA(n,t),T=tw(",",l?tx`\`${K}\``:tx``,null!=n.orderBy?em(n.orderBy):[]),I=ev(n),k=tw(" ",[tx`SELECT ${{UNSAFE_RAW_SQL:E.join(", ")}}`,tx`FROM (${$})`,x?tx`GROUP BY ALL`:tx``]),C=v&&"share_of_total"===n.ratioMode,R=f([N,"optionalAccess",e=>e.sql])?C?tx`SELECT * FROM (${k}) WHERE ${N}`:tw(" ",[k,tx`HAVING ${N}`]):k;return tw(" ",[R,T.sql?tx`ORDER BY ${T}`:tx``,f([I,"optionalAccess",e=>e.sql])?tx`LIMIT ${I}`:tx``,""!==w?tx`SETTINGS ${{UNSAFE_RAW_SQL:w}}`:tx``])}async function eI(e,t,a){let n;if(_.d.call(void 0,e))return{sql:"",params:{}};if(_.c.call(void 0,e))return eN(e,t);let r=aT(e);if(G(r)&&Array.isArray(r.select)&&(r.select.length>1||1===r.select.length&&Y(r)))return eT(r,t,a);let i=G(r)?await ex(r,t):r,s={...i,bucketTimestampValueExpression:await p(i.bucketTimestampValueExpression,async()=>i.timestampValueExpression&&f([i,"access",e=>e.from,"optionalAccess",e=>e.databaseName])&&f([i,"access",e=>e.from,"optionalAccess",e=>e.tableName])?await a9({timestampValueExpression:i.timestampValueExpression,metadata:t,databaseName:i.from.databaseName,tableName:i.from.tableName,connectionId:i.connection}):void 0)},o=await eE(s,t,a),l=await eg(s,t),u=eh({from:s.from,isRenderingRawSqlTemplate:s.isRenderingRawSqlTemplate}),c=await e_(s,t),m=await e$(s,t),g=await eA(s,t),h=function(e){let t=Q(e);if(!(null==e.orderBy&&!t))return tw(",",t?ed({interval:e.granularity,timestampValueExpression:e.timestampValueExpression,bucketTimestampValueExpression:e.bucketTimestampValueExpression,dateRange:e.dateRange,isRenderingRawSqlTemplate:e.isRenderingRawSqlTemplate}):[],null!=e.orderBy?em(e.orderBy):[])}(s),y=ev(s),b=(n=n$(a),tw(", ",[tx`${d(s.settings,()=>"")}`,tx`${d(n,()=>"")}`])),$=await eS(s,t,{from:u,where:c,groupBy:m});return $&&(o=o?tw(",",o,$.cte):$.cte,c=c.sql?tw(" AND ",c,$.predicate):$.predicate),tw(" ",[tx`${f([o,"optionalAccess",e=>e.sql])?tx`WITH ${o}`:""}`,tx`SELECT ${l}`,tx`FROM ${u}`,tx`${c.sql?tx`WHERE ${c}`:""}`,tx`${f([m,"optionalAccess",e=>e.sql])?tx`GROUP BY ${m}`:""}`,tx`${f([g,"optionalAccess",e=>e.sql])?tx`HAVING ${g}`:""}`,tx`${f([h,"optionalAccess",e=>e.sql])?tx`ORDER BY ${h}`:""}`,tx`${f([y,"optionalAccess",e=>e.sql])?tx`LIMIT ${y}`:""}`,tx`${b.sql?tx`SETTINGS ${b}`:[]}`])}var ek=t.Rb=(e,{stringifyKeys:t=!1,dateTimeColumns:a}={})=>Object.entries(e).filter(([e,t])=>t.included.size>0||t.excluded.size>0||null!=t.range).flatMap(([e,n])=>{let r=[],i=t?`toString(${e})`:e,s=t?void 0:f([a,"optionalAccess",e=>e.get,"call",t=>t(e)]),o=e=>{var t;let a;return"string"!=typeof e?e:null!=s?(t=`'${a2(e)}'`,(a=s.match(/DateTime64\((\d+)/))?`parseDateTime64BestEffort(${t}, ${a[1]})`:/\bDateTime\b/.test(s)?`parseDateTimeBestEffort(${t})`:/\bDate32\b/.test(s)?`toDate32(${t})`:/\bDate\b/.test(s)?`toDate(${t})`:`parseDateTime64BestEffort(${t}, 9)`):`'${a2(e)}'`};return n.included.size>0&&r.push({type:"sql",condition:`${i} IN (${Array.from(n.included).map(o).join(", ")})`}),n.excluded.size>0&&r.push({type:"sql",condition:`${i} NOT IN (${Array.from(n.excluded).map(o).join(", ")})`}),null!=n.range&&r.push({type:"sql",condition:`${i} BETWEEN ${n.range.min} AND ${n.range.max}`}),r}),eC=t.Sb=(e,t)=>{let a={};for(let[n,r]of Object.entries(e))a[t(n)]=r;let n=ek(a).flatMap(e=>"condition"in e?[e.condition]:[]);return n.length?n.map(e=>`(${e})`).join(" AND "):void 0},eR=t.Tb=e=>{let t=e=>Array.from(e).map(String).sort();return JSON.stringify(Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t)).map(([e,{included:a,excluded:n,range:r}])=>[e,t(a),t(n),d(r,()=>null)]))},eq=e=>{let t=e.trim();return["true","false"].includes(t.toLowerCase())?"true"===t.toLowerCase():t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1).replace(/\\\\/g,"\\").replace(/''/g,"'"):t};function eM(e,t){if("'"!==e[t])return!1;let a=0;for(let n=t-1;n>=0&&"\\"===e[n];n--)a++;return a%2==0}function eO(e,t){return t+1<e.length&&"'"===e[t+1]?{skip:!0,next:t+1}:{skip:!1,next:t}}function eF(e,t){let a=!1,n=0;for(let r=0;r<e.length;r++){let i=e[r];if(eM(e,r)){if(a){let t=eO(e,r);if(t.skip){r=t.next;continue}}a=!a;continue}if(!a){if("("===i){n++;continue}if(")"===i){n>0&&n--;continue}if(!(n>0)){for(let a of t)if("object"==typeof a){if(i===a.char)return!0}else if(e.slice(r,r+a.length).toUpperCase()===a)return!0}}}return!1}var eL=e=>{let t=new Map;for(let a of e)if("sql"===a.type){if(eF(a.condition,[" BETWEEN "])){let e=a.condition.match(/^(.+?)\s+BETWEEN\s+(.+?)\s+AND\s+(.+?)$/i);if(e){let[,a,n,r]=e,i=a.trim(),s=Number(n.trim()),o=Number(r.trim());Number.isFinite(s)&&Number.isFinite(o)&&(t.has(i)?t.get(i).range={min:s,max:o}:t.set(i,{included:new Set,excluded:new Set,range:{min:s,max:o}}));continue}}for(let e of function(e){let t=[],a=[],n="",r=!1,i=0;for(let t=0;t<e.length;t++){let s=e[t];if(eM(e,t)){if(r){let a=eO(e,t);if(a.skip){n+="''",t=a.next;continue}}r=!r,n+=s;continue}if(!r){if("("===s)i++;else if(")"===s)i>0&&i--;else if(0===i&&" AND "===e.slice(t,t+5).toUpperCase()){n.trim()&&a.push(n.trim()),n="",t+=4;continue}}n+=s}for(let e of(n.trim()&&a.push(n.trim()),a)){if(eF(e,[{char:"="},{char:"<"},{char:">"}," OR "]))continue;let a=eF(e,[" NOT IN "]);if(a||eF(e,[" IN "])){let n=function(e,t){let a=!1,n=0,r=t.toUpperCase();for(let t=0;t<e.length;t++){let i=e.charAt(t);if(eM(e,t)){if(a){let a=eO(e,t);if(a.skip){t=a.next;continue}}a=!a;continue}if(!a){if("("===i){n++;continue}if(")"===i){n>0&&n--;continue}if(!(n>0)&&e.slice(t,t+r.length).toUpperCase()===r)return[e.slice(0,t),e.slice(t+r.length)]}}return null}(e,a?" NOT IN ":" IN ");if(!n)continue;let[r,i]=n,s=r.trim(),o=i.trim(),l=function(e){let t=[],a="",n=!1;for(let r=0;r<e.length;r++){let i=e[r];if(eM(e,r)){if(n){let t=eO(e,r);if(t.skip){a+="''",r=t.next;continue}}n=!n,a+=i;continue}if(!n&&","===i){a.trim()&&t.push(eq(a)),a="";continue}a+=i}return a.trim()&&t.push(eq(a)),t}((o.startsWith("(")&&o.endsWith(")")?o.slice(1,-1):o).replace(/(?:parseDateTime64BestEffort|parseDateTimeBestEffort|toDate32|toDate)\(('(?:[^']|'')*')(?:\s*,\s*\d+)?\)/g,"$1"));t.push({key:s,values:l,isExclude:a})}}return t}(a.condition)){t.has(e.key)||t.set(e.key,{included:new Set,excluded:new Set});let a=t.get(e.key);e.values.forEach(t=>{e.isExclude?a.excluded.add(t):a.included.add(t)})}}return{filters:Object.fromEntries(t)}},eD=/\b[a-zA-Z0-9_]+\[([0-9]+|'[^']*')\]/g;function eU(e,t){return!e.trim()||("lucene"===t?(e=>{try{return tD(e),!0}catch(e){return!1}})(e):"sql"!==t||(e=>{try{let{sqlWithReplacements:t}=ne(e),a=t.replace(eD,"''");return new C.Parser().astify(`SELECT 1 FROM t WHERE ${a}`,{database:"Postgresql"}),!0}catch(e){return!1}})(e))}function eV(e){let t=e.trim().replace(/\s+/g,"_").replace(/[^A-Za-z0-9_]+/g,"");return/^[0-9_]/.test(t)?`v${t}`:t}function eW(e){return!1!==e.isBroadcastEnabled}function eB(e){return!0===e.isVariableEnabled}function eP(e){return f([e,"access",e=>e.variableName,"optionalAccess",e=>e.trim,"call",e=>e()])||eV(e.name)||void 0}function ej(e){let t=[],a=new Set;for(let n of d(e,()=>[])){if(!eB(n))continue;let e=eP(n);!e||a.has(e)||(a.add(e),t.push({name:e,expression:n.expression}))}return t}function eH(e,t){let a=d(e.where,()=>""),n=d(e.whereLanguage,()=>"sql");if(null==t||!a.trim())return{where:a,whereLanguage:n};try{return{where:ax(a,{variables:t,inputLanguage:n}),whereLanguage:n}}catch(e){return{where:a,whereLanguage:n,error:e instanceof Error?e.message:String(e)}}}var eK={toStartOfSecond:"1 second",toStartOfMinute:"1 minute",toStartOfFiveMinutes:"5 minute",toStartOfTenMinutes:"10 minute",toStartOfFifteenMinutes:"15 minute",toStartOfHour:"1 hour",toStartOfDay:"1 day"},ez=new Set(["second","minute","hour","day"]),eQ=e=>e>="a"&&e<="z"||e>="A"&&e<="Z"||e>="0"&&e<="9"||"_"===e,eG=e=>" "===e||" "===e||e===`
  552. `||"\r"===e;function eY(e){for(let[t,a]of Object.entries(eK))if(a===e)return t}function eZ(e,t){let a=eY(e);if(a)return tx`${{UNSAFE_RAW_SQL:a}}(${t})`;let n=nr(e);return tx`toStartOfInterval(${t}, INTERVAL ${{Int64:n}} SECOND)`}async function eJ(e,t,a){try{return!!await g([await a.getColumn({...e,column:t}),"optionalAccess",async e=>e.type,"access",async e=>e.startsWith,"call",async e=>e("SimpleAggregateFunction(")])}catch(e){return!1}}async function eX(e,t,a){try{let n=await g([await a.getColumn({...e,column:t}),"optionalAccess",async e=>e.type]);return n?f([n,"access",e=>e.match,"call",e=>e(/^AggregateFunction\(\s*([^(, ]+)\s*\(/),"optionalAccess",e=>e[1],"optionalAccess",e=>e.replace,"call",e=>e(/^quantiles/,"quantile")]):void 0}catch(e){return}}async function e0(e,t,a,n){return"count"===a?"sum":await eJ(e,t,n)?a:`${a}Merge`}function e1(e,t,a){return e.aggregatedColumns.find(e=>e.aggFn===a&&("count"===e.aggFn||e.sourceColumn===t))}function e2(e,t){let[a,n]=e,r=nr(t);return Math.floor(A.differenceInSeconds.call(void 0,n,a)/r)}function e6(e,t){if(e.minDate&&!t.dateRange)return!1;if(!e.minDate||!t.dateRange)return!0;let[a]=t.dateRange;return a>=new Date(e.minDate)}var e4=/\bcount(If)?\s*\(/i;function e3(e){return e4.test(e.valueExpression)}async function e5(e,t,a,n){var r;let{valueExpression:i,aggFn:s}=t,o=s;if(e3(t))throw Error("Custom count() expressions are not supported with materialized views.");if(!o)return t;if(!((r=o)&&$.n.safeParse(r).success))throw Error(`Aggregate function ${o} is not valid.`);let l=e1(e,"",o);if(l){let e=l.mvColumn,r=await e0(a,e,o,n);return{...t,valueExpression:e,aggFn:r}}let u=e1(e,i,o);if(!u)throw Error(`The aggregate function ${function(e,t){if("quantile"!==e)return e;switch(t){case .5:return"median";case .9:return"p90";case .95:return"p95";case .99:return"p99";default:return"quantile"}}(o,t.level)} is not available for column '${i}'.`);if("quantile"===t.aggFn&&"level"in t&&"number"==typeof t.level){let e=await eX(a,u.mvColumn,n);e&&(o=e)}let c=await e0(a,u.mvColumn,o,n);return{...t,valueExpression:u.mvColumn,aggFn:c}}async function e9(e,t,a){if(!Array.isArray(e.select))return{errors:["Only array-based select statements are supported."]};if(t.minDate&&!e6(t,e))return{errors:["The selected date range includes dates for which this view does not contain data."]};if(!function(e,t){if(!t.granularity&&!t.dateRange)return!0;let a=t.granularity||"auto";if("auto"===a&&!t.dateRange)return!1;let n=nr("auto"===a&&t.dateRange?nn(t.dateRange):a),r=nr(e.minGranularity);return n>=r&&n%r==0}(t,e))return{errors:[e.granularity?`Granularity must be a multiple of the view's granularity (${t.minGranularity}).`:"The selected date range is too short for the granularity of this materialized view."]};let n={databaseName:t.databaseName,tableName:t.tableName,connectionId:e.connection},r=await Promise.allSettled(e.select.map(e=>e5(t,e,n,a))),i=[],s=[];for(let e of r)"rejected"===e.status?s.push(e.reason.message):i.push(e.value);return s.length>0?{errors:s}:{optimizedConfig:{...structuredClone(e),select:i,timestampValueExpression:t.timestampColumn,from:{databaseName:t.databaseName,tableName:t.tableName},..."dateRange"in e&&e.dateRange?{dateRangeEndInclusive:!1,dateRange:ny(e.dateRange,t.minGranularity)}:{}}}}async function e7(e,t,a,n,r,i){let s=[],o;if(e.with){let a=await Promise.all(e.with.map(async e=>e.chartConfig&&e.chartConfig.from.databaseName===i.from.databaseName&&e.chartConfig.from.tableName===i.from.tableName?e9(e.chartConfig,r,t):{optimizedConfig:void 0,errors:[]}));a.some(e=>!!e.optimizedConfig)&&(o={...structuredClone(e),with:e.with.map((e,t)=>({...e,chartConfig:d(a[t].optimizedConfig,()=>e.chartConfig)}))}),s.push(...a.flatMap(e=>d(e.errors,()=>[])))}if(e.from.databaseName===i.from.databaseName&&e.from.tableName===i.from.tableName){let a=await e9(d(o,()=>e),r,t);a.optimizedConfig&&(o=a.optimizedConfig),s.push(...d(a.errors,()=>[]))}if(o){let{isValid:e,rowEstimate:r=1/0,error:l}=await a.testChartConfigValidity({config:o,metadata:t,opts:{abort_signal:n},querySettings:i.querySettings});if(l&&s.push(l),e)return{optimizedConfig:o,rowEstimate:r,errors:[]}}return{errors:s}}async function e8(e,t,a,n,r){let i=d(r.materializedViews,()=>[]),s=await Promise.all(i.map(i=>e7(e,t,a,n,i,r).then(e=>({...e,mvConfig:i})))),o,l=1/0;for(let e of s)e.optimizedConfig&&d(e.rowEstimate,()=>1/0)<l&&(o=e.optimizedConfig,l=d(e.rowEstimate,()=>1/0));let u=s.map(({optimizedConfig:e,errors:t,rowEstimate:a,mvConfig:n})=>({success:!!e&&e===o,errors:t,rowEstimate:a,mvConfig:n}));return{optimizedConfig:o,explanations:u}}async function te(e,t,a,n,r){let{optimizedConfig:i}=await e8(e,t,a,n,r);return d(i,()=>e)}function tt(e){return`${e.databaseName}.${e.tableName}`}async function ta({chartConfig:e,keys:t,source:a,clickhouseClient:n,metadata:r,signal:i}){let s=new Map((($.vb.call(void 0,a)||$.ub.call(void 0,a))&&f([a,"optionalAccess",e=>e.materializedViews])||[]).map(e=>[tt(e),e])),o=new Map;for(let[a,n]of s.entries()){let r=e.dateRange?e2(e.dateRange,n.minGranularity):1/0;if(e6(n,e)&&r>=3){let e=a4(n.dimensionColumns),r=t.filter(t=>e.includes(t));r.length>0&&o.set(a,r)}}let l=[...o.entries()].map(([t,a])=>{let{databaseName:n,tableName:r,timestampColumn:i}=s.get(t);return{...structuredClone(e),timestampValueExpression:i,from:{databaseName:n,tableName:r},select:a.map((e,t)=>`groupUniqArray(1)(${e}) AS param${t}`).join(", ")}}),u=await Promise.all(l.map(async e=>{let{isValid:t,rowEstimate:s=1/0}=await n.testChartConfigValidity({config:e,metadata:r,opts:{abort_signal:i},querySettings:f([a,"optionalAccess",e=>e.querySettings])});return{id:tt({databaseName:e.from.databaseName,tableName:e.from.tableName}),isValid:t,rowEstimate:s}})),c=new Map,m=new Set(t);for(let e of u.filter(e=>e.isValid).sort((e,t)=>e.rowEstimate-t.rowEstimate)){let t=d(o.get(e.id),()=>[]).filter(e=>m.has(e));if(t.length)for(let a of(c.set(e.id,t),t))m.delete(a)}let p=[...c.entries()].map(([t,a])=>{let{databaseName:n,tableName:r,timestampColumn:i}=s.get(t);return{chartConfig:{...structuredClone(e),timestampValueExpression:i,from:{databaseName:n,tableName:r}},keys:a}});return m.size&&p.push({chartConfig:structuredClone(e),keys:[...m]}),p}async function tn({chartConfig:e,keys:t,keyConditions:a,source:n,clickhouseClient:r,metadata:i,signal:s}){let o=n&&($.vb.call(void 0,n)||$.ub.call(void 0,n))?d(n.materializedViews,()=>[]):[];if(0===o.length)return e;let l=o.filter(a=>{let n=e.dateRange?e2(e.dateRange,a.minGranularity):1/0;if(!e6(a,e)||n<3)return!1;let r=a4(a.dimensionColumns);return t.every(e=>r.includes(e))});if(0===l.length)return e;let u=(await Promise.all(l.map(async o=>{let l=await i.renderKeyExpressions({databaseName:o.databaseName,tableName:o.tableName,connectionId:e.connection,keys:t}),u=e=>d(l.get(e),()=>e),c={...structuredClone(e),timestampValueExpression:o.timestampColumn,from:{databaseName:o.databaseName,tableName:o.tableName},select:t.map((e,t)=>{let n=u(e),r=a.at(t),i=r&&eC(r,u);return i?`groupUniqArrayIf(1)(${n}, ${i}) AS param${t}`:`groupUniqArray(1)(${n}) AS param${t}`}).join(", ")},{isValid:m,rowEstimate:p=1/0}=await r.testChartConfigValidity({config:c,metadata:i,opts:{abort_signal:s},querySettings:f([n,"optionalAccess",e=>e.querySettings])});return{mv:o,isValid:m,rowEstimate:p}}))).filter(e=>e.isValid).sort((e,t)=>e.rowEstimate-t.rowEstimate)[0];return u?{...structuredClone(e),timestampValueExpression:u.mv.timestampColumn,from:{databaseName:u.mv.databaseName,tableName:u.mv.tableName}}:e}var tr=t.G=100,ti=(e,t)=>{if(!Number.isInteger(e)||e<0)throw Error(`${t} must be a non-negative integer, got: ${String(e)}`);return String(e)},ts=e=>e.startsWith("`")&&e.endsWith("`")||e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1):e,to=e=>`\`${ts(e).replace(/`/g,"``")}\``,tl=e=>{let t=ts(e);return/^[A-Za-z_][A-Za-z0-9_]*$/.test(t)?t:to(t)},tu=(e,t)=>{let a=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(/^[A-Za-z_][A-Za-z0-9_]*$/.test(t)?`\`${a}\`|(?<![A-Za-z0-9_\`-])${a}(?![A-Za-z0-9_\`-])`:`\`${a}\``).test(e)},tc=e=>{let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return`(?:\`${e.replace(/`/g,"``").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\`|${t})`},tm=".:String",td=(e,t,a={})=>{let n=tl(e),r=(a.preserveStringTypeSuffix&&t.endsWith(tm)?t.slice(0,-tm.length):t).split(".").filter(Boolean).map(to).join(".");return`${n}.${r}${tm}`},tp=t.H=s=class{constructor(){s.prototype.__init.call(this),s.prototype.__init2.call(this)}__init(){this.cache=new Map}__init2(){this.pendingQueries=new Map}get(e){return this.cache.get(e)}async getOrFetch(e,t){let a=this.cache.get(e);if(null!=a)return a;if(this.pendingQueries.has(e))return this.pendingQueries.get(e);let n=t();this.pendingQueries.set(e,n);try{let t=await n;return this.cache.set(e,t),t}finally{this.pendingQueries.delete(e)}}set(e,t){return this.cache.set(e,t)}},tf=t.I=class{constructor(e,t,a){this.clickhouseClient=e,this.cache=t,a&&this.cache.set("clickhouse-settings",a)}getClickHouseSettings(){return d(this.cache.get("clickhouse-settings"),()=>({}))}setClickHouseSettings(e){let t={...this.getClickHouseSettings(),...e};this.cache.set("clickhouse-settings",t)}async renderMetadataKeyExpression({databaseName:e,tableName:t,connectionId:a,keyExpression:n}){if(await this.getColumn({databaseName:e,tableName:t,column:ts(n),connectionId:a})!=null)return tl(n);let r=tg(n);if(r.length>=2){let i=ts(r[0]);return"json"===t$(d(f([await this.getColumn({databaseName:e,tableName:t,column:i,connectionId:a}),"optionalAccess",e=>e.type]),()=>""))?td(i,r[1]):n}let i=n.indexOf(".");if(-1===i||n.includes("("))return n;let s=ts(n.slice(0,i)),o=n.slice(i+1);return"json"===t$(d(f([await this.getColumn({databaseName:e,tableName:t,column:s,connectionId:a}),"optionalAccess",e=>e.type]),()=>""))?td(s,o,{preserveStringTypeSuffix:!0}):n}async renderKeyExpressions({databaseName:e,tableName:t,connectionId:a,keys:n}){let r=new Map;return await Promise.all(n.map(async n=>{r.set(n,await this.renderMetadataKeyExpression({databaseName:e,tableName:t,connectionId:a,keyExpression:n}))})),r}async queryTableMetadata({database:e,table:t,cache:a,connectionId:n,cluster:r}){let i=`${n}.${e}.${t}.${r}.metadata`;return a.getOrFetch(i,async()=>{let a=r?tx`SELECT * FROM cluster(${{String:r}}, system.tables) WHERE database = ${{String:e}} AND name = ${{String:t}} LIMIT 1`:tx`SELECT * FROM system.tables WHERE database = ${{String:e}} AND name = ${{String:t}} LIMIT 1`;return(await this.clickhouseClient.query({connectionId:n,query:a.sql,query_params:a.params,clickhouse_settings:this.getClickHouseSettings()}).then(e=>e.json())).data[0]})}async querySkipIndices({database:e,table:t,connectionId:a,cluster:n}){let r=n?tx`
  553. SELECT
  554. name,
  555. type,
  556. type_full as typeFull,
  557. expr as expression,
  558. granularity
  559. FROM cluster(${{String:n}}, system.data_skipping_indices)
  560. WHERE database = ${{String:e}} AND table = ${{String:t}}`:tx`
  561. SELECT
  562. name,
  563. type,
  564. type_full as typeFull,
  565. expr as expression,
  566. granularity
  567. FROM system.data_skipping_indices
  568. WHERE database = ${{String:e}} AND table = ${{String:t}}`;return await this.clickhouseClient.query({connectionId:a,query:r.sql,query_params:r.params,clickhouse_settings:this.getClickHouseSettings()}).then(e=>e.json()).then(e=>e.data.map(e=>({...e,granularity:Number(e.granularity)})))}async queryMaterializedViewsByTarget({databaseName:e,tableName:t,connectionId:a}){return this.cache.getOrFetch(`${a}.${e}.${t}.sourceMaterializedViews`,async()=>{let n=`%TO ${e}.${t}%`,r=tx`
  569. SELECT database as databaseName, name as tableName
  570. FROM system.tables
  571. WHERE engine = 'MaterializedView'
  572. AND create_table_query LIKE ${{String:n}}`;return(await this.clickhouseClient.query({connectionId:a,query:r.sql,query_params:r.params,clickhouse_settings:this.getClickHouseSettings()}).then(e=>e.json())).data})}async getColumns({databaseName:e,tableName:t,connectionId:a}){return this.cache.getOrFetch(`${a}.${e}.${t}.columns`,async()=>{let n=tx`DESCRIBE ${tk({database:e,table:t})}`;return await this.clickhouseClient.query({query:n.sql,query_params:n.params,connectionId:a,clickhouse_settings:this.getClickHouseSettings()}).then(e=>e.json()).then(e=>e.data)})}async getMaterializedColumnsLookupTable({databaseName:e,tableName:t,connectionId:a}){return new Map((await this.getColumns({databaseName:e,tableName:t,connectionId:a})).filter(e=>"MATERIALIZED"===e.default_type||"DEFAULT"===e.default_type).map(e=>[e.default_expression,e.name]))}async getColumn({databaseName:e,tableName:t,column:a,matchLowercase:n=!1,connectionId:r}){return(await this.getColumns({databaseName:e,tableName:t,connectionId:r})).filter(e=>n?e.name.toLowerCase()===a.toLowerCase():e.name===a)[0]}async getMapColumnTextIndexes({databaseName:e,tableName:t,connectionId:a}){return this.cache.getOrFetch(`${a}.${e}.${t}.mapColumnTextIndexes`,async()=>t6({metadata:this,databaseName:e,tableName:t,connectionId:a}))}async getNativeArrayColumnTextIndexes({databaseName:e,tableName:t,connectionId:a}){return this.cache.getOrFetch(`${a}.${e}.${t}.nativeColumnTextIndexes`,async()=>{let[n,r]=await Promise.all([this.getColumns({databaseName:e,tableName:t,connectionId:a}),this.getSkipIndices({databaseName:e,tableName:t,connectionId:a}).catch(()=>[])]),i=new Map;for(let e of r)t2(e,"text",{tokenizer:"array"})&&n.some(t=>t.name===e.expression)&&i.set(e.expression,e);return i})}async partsOverlapFilter({databaseName:e,tableName:t,dateRange:a,timestampValueExpression:n}){if(!a||!n||!Number.isFinite(a[0]?.getTime())||!Number.isFinite(a[1]?.getTime()))return tx`1`;let r=tx`fromUnixTimestamp64Milli(${{Int64:a[0].getTime()}})`,i=tx`fromUnixTimestamp64Milli(${{Int64:a[1].getTime()}})`;return tx`part_name IN (
  573. SELECT name
  574. FROM system.parts
  575. WHERE database = ${{String:e}} AND table = ${{String:t}}
  576. AND active=1
  577. AND ((min_time >= ${r} AND min_time <= ${i}) OR (max_time <= ${i} AND max_time >= ${r}) OR (min_time <= ${r} AND max_time >= ${i}))
  578. )`}async getMapKeys({databaseName:e,tableName:t,column:a,maxKeys:n=1e3,connectionId:r,metricName:i,metadataMVs:s,dateRange:o,timestampValueExpression:l,signal:u}){ti(n,"maxKeys");let c=s&&o?ny(o,s.granularity):void 0,m=o&&l?`${o[0].getTime()}-${o[1].getTime()}-${l}`:"",p=i?`${r}.${e}.${t}.${a}.${i}.${m}.keys`:s&&c?`${r}.${e}.${t}.${a}.${c[0].getTime()}.${c[1].getTime()}.keys`:`${r}.${e}.${t}.${a}.${m}.keys`,g=this.cache.get(p);if(null!=g)return g;let y=await this.getMapColumnTextIndexes({databaseName:e,tableName:t,connectionId:r}),b=await this.getServerVersion({connectionId:r}),_=h.e.call(void 0,b),$=y.get(a);if(f([$,"optionalAccess",e=>e.key,"optionalAccess",e=>e.indexName])&&_){let a=await this.partsOverlapFilter({databaseName:e,tableName:t,dateRange:o,timestampValueExpression:l}),i=$.key.indexName,s=tx`
  579. SELECT token AS key
  580. FROM mergeTreeTextIndex(${{String:e}}, ${{String:t}}, ${{String:i}})
  581. WHERE ${a}
  582. GROUP BY key HAVING key != ''
  583. LIMIT ${{Int32:n}}`;try{let e=await this.clickhouseClient.query({query:s.sql,query_params:s.params,connectionId:r,clickhouse_settings:this.getClickHouseSettings()}).then(e=>e.json()).then(e=>e.data.map(e=>e.key).filter(Boolean));if(e.length>0)return this.cache.set(p,e),e}catch(e){return console.warn("getMapKeys rollup query failed for key text index query",e),[]}}else if(f([$,"optionalAccess",e=>e.kv,"optionalAccess",e=>e.indexName])&&_){let a=await this.partsOverlapFilter({databaseName:e,tableName:t,dateRange:o,timestampValueExpression:l}),i=$.kv.indexName,s=$.kv.separator,u=tx`
  584. SELECT splitByString(${{String:s}}, token)[1] AS key
  585. FROM mergeTreeTextIndex(${{String:e}}, ${{String:t}}, ${{String:i}})
  586. WHERE ${a}
  587. GROUP BY key HAVING key != ''
  588. LIMIT ${{Int32:n}}`;try{let e=await this.clickhouseClient.query({query:u.sql,query_params:u.params,connectionId:r,clickhouse_settings:this.getClickHouseSettings()}).then(e=>e.json()).then(e=>e.data.map(e=>e.key).filter(Boolean));if(e.length>0)return this.cache.set(p,e),e}catch(e){return console.warn("getMapKeys rollup query failed for kv text index query",e),[]}}if(s&&c){let t=await this.cache.getOrFetch(p,async()=>{try{let t=eZ(s.granularity,tx`fromUnixTimestamp64Milli(${{Int64:c[0].getTime()}})`),i=eZ(s.granularity,tx`fromUnixTimestamp64Milli(${{Int64:c[1].getTime()}})`),o=tx`AND Timestamp >= ${t} AND Timestamp <= ${i}`,l;return l=s.keyRollupTable?tx`
  589. SELECT Key
  590. FROM ${tk({database:e,table:s.keyRollupTable})}
  591. WHERE ColumnIdentifier = ${{String:a}}
  592. ${o}
  593. GROUP BY Key
  594. ORDER BY sum(count) DESC
  595. LIMIT ${{Int32:n}}
  596. `:tx`
  597. SELECT Key
  598. FROM ${tk({database:e,table:s.kvRollupTable})}
  599. WHERE ColumnIdentifier = ${{String:a}}
  600. ${o}
  601. GROUP BY Key
  602. ORDER BY sum(count) DESC
  603. LIMIT ${{Int32:n}}
  604. `,await this.clickhouseClient.query({query:l.sql,query_params:l.params,connectionId:r,clickhouse_settings:{...this.getClickHouseSettings(),timeout_overflow_mode:"break",max_execution_time:15,max_rows_to_read:"0"},abort_signal:u}).then(e=>e.json()).then(e=>e.data.map(e=>e.Key).filter(e=>e))}catch(e){return console.warn("getMapKeys rollup query failed",e),[]}});if(t.length>0)return t}let S=await this.getColumn({databaseName:e,tableName:t,column:a,connectionId:r});if(null==S)throw Error(`Column ${a} not found in ${e}.${t}`);let A="groupUniqArrayArray";S.type.startsWith("Map(LowCardinality(String)")&&(A="lowCardinalityKeys");let v=o&&l?await ep({connectionId:r,databaseName:e,tableName:t,dateRange:o,dateRangeStartInclusive:!0,dateRangeEndInclusive:!0,timestampValueExpression:l,metadata:this}):null,E=[...i?[tx`MetricName=${{String:i}}`]:[],...v?[v]:[]],x=E.length?tx`WHERE ${tw(" AND ",...E)}`:"",w;return w="groupUniqArrayArray"===A?tx`
  605. WITH sampledKeys as (
  606. SELECT getSubcolumn(${{Identifier:a}}, 'keys') AS keys
  607. FROM ${tk({database:e,table:t})} ${x}
  608. LIMIT ${{Int32:this.getClickHouseSettings().max_rows_to_read?Number(this.getClickHouseSettings().max_rows_to_read):3e6}}
  609. )
  610. SELECT groupUniqArrayArray(${{UNSAFE_RAW_SQL:ti(n,"maxKeys")}})(keys) as keysArr
  611. FROM sampledKeys`:tx`
  612. WITH sampledKeys as (
  613. SELECT getSubcolumn(${{Identifier:a}}, 'keys') AS keysArr
  614. FROM ${tk({database:e,table:t})} ${x}
  615. LIMIT ${{Int32:this.getClickHouseSettings().max_rows_to_read?Number(this.getClickHouseSettings().max_rows_to_read):3e6}}
  616. )
  617. SELECT DISTINCT lowCardinalityKeys(arrayJoin(keysArr)) as key
  618. FROM sampledKeys
  619. LIMIT ${{Int32:n}}
  620. `,this.cache.getOrFetch(p,async()=>await this.clickhouseClient.query({query:w.sql,query_params:w.params,connectionId:r,clickhouse_settings:{...this.getClickHouseSettings(),timeout_overflow_mode:"break",max_execution_time:15,max_rows_to_read:"0"},abort_signal:u}).then(e=>e.json()).then(e=>("groupUniqArrayArray"===A?d(e.data[0].keysArr,()=>[]):e.data.map(e=>e.key).filter(e=>!!e)).filter(e=>e)))}async getJSONKeys({column:e,maxKeys:t=1e3,databaseName:a,tableName:n,connectionId:r,metricName:i,dateRange:s,timestampValueExpression:o}){return[]}async getMapValues({databaseName:e,tableName:t,column:a,key:n,maxValues:r=20,connectionId:i,dateRange:s,timestampValueExpression:o,signal:l}){let u=s&&o?`${s[0].getTime()}-${s[1].getTime()}-${o}`:"",c=`${i}.${e}.${t}.${a}.${n}.${u}.values`,m=this.cache.get(c);if(null!=m)return m;let p=s&&o?await ep({connectionId:i,databaseName:e,tableName:t,dateRange:s,dateRangeStartInclusive:!0,dateRangeEndInclusive:!0,timestampValueExpression:o,metadata:this}):null,g=[tx`value != ''`,...p?[p]:[]],h=tx`WHERE ${tw(" AND ",...g)}`,y=n?await this.getColumn({databaseName:e,tableName:t,column:a,connectionId:i}):void 0,b=n&&"json"===t$(d(f([y,"optionalAccess",e=>e.type]),()=>""))?td(a,n):void 0,_;return _=b?tx`
  621. SELECT DISTINCT ${{UNSAFE_RAW_SQL:b}} as value
  622. FROM ${tk({database:e,table:t})}
  623. ${h}
  624. LIMIT ${{Int32:r}}
  625. `:n?tx`
  626. SELECT DISTINCT ${{Identifier:a}}[${{String:n}}] as value
  627. FROM ${tk({database:e,table:t})}
  628. ${h}
  629. LIMIT ${{Int32:r}}
  630. `:tx`
  631. SELECT DISTINCT ${{Identifier:a}} as value
  632. FROM ${tk({database:e,table:t})}
  633. ${h}
  634. LIMIT ${{Int32:r}}
  635. `,this.cache.getOrFetch(c,async()=>await this.clickhouseClient.query({query:_.sql,query_params:_.params,connectionId:i,clickhouse_settings:{max_rows_to_read:String(d(this.getClickHouseSettings().max_rows_to_read,()=>3e6)),read_overflow_mode:"break",...this.getClickHouseSettings()},abort_signal:l}).then(e=>e.json()).then(e=>e.data.map(e=>e.value)))}async getMapTextIndexKeyValues({databaseName:e,tableName:t,connectionId:a,queryOptions:n,dateRange:r,timestampValueExpression:i,signal:s}){let o=x.default.call(void 0,n),l=`${e}.${t}.${a}.${r[0].toString()}.${r[1].toString()}.${o}.${i}.getMapTextIndexKeyValues`;return this.cache.getOrFetch(l,async()=>{try{let o=[];for(let[a,s]of n.entries()){let n=tw(" OR ",s.keys.map(e=>tx`startsWith(token, ${{UNSAFE_RAW_SQL:N.default.escape(`${e}${s.separator}`)}})`)),l=await this.partsOverlapFilter({databaseName:e,tableName:t,dateRange:r,timestampValueExpression:i}),u=tx`substring(token, position(token, ${{String:s.separator}}) + ${{Int32:s.separator.length}})`,c=tx`
  636. SELECT * FROM (
  637. SELECT ${{String:a}} as column,
  638. substring(token, 1, position(token, ${{String:s.separator}}) - 1) AS key,
  639. groupUniqArray(${{Int32:s.limit}})(${u}) AS value
  640. FROM mergeTreeTextIndex(${{String:e}}, ${{String:t}}, ${{String:s.indexName}})
  641. WHERE ${l}
  642. AND (${n})
  643. AND ${u} != ''
  644. GROUP BY column, key
  645. )`;o.push(c)}let l=tw(" UNION ALL ",o);return await this.clickhouseClient.query({query:l.sql,query_params:l.params,connectionId:a,clickhouse_settings:{max_rows_to_read:String(d(this.getClickHouseSettings().max_rows_to_read,()=>3e6)),read_overflow_mode:"break",...this.getClickHouseSettings()},abort_signal:s}).then(e=>e.json()).then(e=>e.data.map(e=>({key:`${e.column}['${e.key}']`,value:e.value})))}catch(e){console.warn("getMapTextIndexKeyValues failed; skipping this strategy for the current batch",e);return}})}async getTextIndexKeyValues({databaseName:e,tableName:t,connectionId:a,queryOptions:n,dateRange:r,timestampValueExpression:i,signal:s}){let o=x.default.call(void 0,n),l=`${e}.${t}.${a}.${r[0].toString()}.${r[1].toString()}.${o}.${i}.getTextIndexKeyValues`;return this.cache.getOrFetch(l,async()=>{try{let o=[];for(let[a,s]of n.entries()){let n=await this.partsOverlapFilter({databaseName:e,tableName:t,dateRange:r,timestampValueExpression:i}),l=tx`
  646. SELECT * FROM (
  647. SELECT ${{String:a}} AS key,
  648. groupUniqArray(${{Int32:s.limit}})(token) AS value
  649. FROM mergeTreeTextIndex(${{String:e}}, ${{String:t}}, ${{String:s.indexName}})
  650. WHERE ${n}
  651. AND token != ''
  652. GROUP BY key
  653. )`;o.push(l)}let l=tw(" UNION ALL ",o);return await this.clickhouseClient.query({query:l.sql,query_params:l.params,connectionId:a,clickhouse_settings:{max_rows_to_read:String(d(this.getClickHouseSettings().max_rows_to_read,()=>3e6)),read_overflow_mode:"break",...this.getClickHouseSettings()},abort_signal:s}).then(e=>e.json()).then(e=>e.data)}catch(e){console.warn("getTextIndexKeyValues failed; skipping this strategy for the current batch",e);return}})}async getMetadataMVKeyValues({databaseName:e,connectionId:t,dateRange:a,metadataMVs:n,queryOptions:r,maxValuesPerKey:i,signal:s}){let o=x.default.call(void 0,r),l=x.default.call(void 0,d(n,()=>({}))),u=`${e}.${t}.${a[0].toString()}.${a[1].toString()}.${i}.${l}.${o}.getMetadataMVKeyValues`;return this.cache.getOrFetch(u,async()=>{if(!n)return void console.warn("getMetadataMVKeyValues: metadataMVs is undefined");let o=ny(a,n.granularity),l=eZ(n.granularity,tx`fromUnixTimestamp64Milli(${{Int64:o[0].getTime()}})`),u=eZ(n.granularity,tx`fromUnixTimestamp64Milli(${{Int64:o[1].getTime()}})`),c=tx`Timestamp >= ${l} AND Timestamp <= ${u}`,m=[];for(let[t,a]of r.entries()){let n=[];for(let[e,t]of a){let a=tx`(ColumnIdentifier = ${{String:e}} AND Key IN (${{UNSAFE_RAW_SQL:t.map(e=>N.default.escape(e)).join(",")}}))`;n.push(a)}let r=tx`
  654. SELECT * FROM (
  655. SELECT ColumnIdentifier, Key, groupUniqArray(${{Int32:i}})(Value) as Values
  656. FROM ${tk({database:e,table:t})}
  657. WHERE (${tw(" OR ",n)})
  658. AND ${c}
  659. AND notEmpty(Value)
  660. GROUP BY ColumnIdentifier, Key
  661. ORDER BY ColumnIdentifier, Key
  662. )`;m.push(r)}let d=tw(" UNION ALL ",m);try{return await this.clickhouseClient.query({query:d.sql,query_params:d.params,connectionId:t,clickhouse_settings:{...this.getClickHouseSettings(),timeout_overflow_mode:"break",max_execution_time:15,max_rows_to_read:"0"},abort_signal:s}).then(e=>e.json()).then(e=>e.data.map(e=>{let t=e.Values.filter(e=>e);return"NativeColumn"===e.ColumnIdentifier?{key:e.Key,value:t}:{key:`${e.ColumnIdentifier}['${e.Key}']`,value:t}}))}catch(e){console.warn("Batched rollup query failed, falling back to per-key",e)}})}async getAllFields({databaseName:e,tableName:t,connectionId:a,metricName:n,metadataMVs:r,dateRange:i,timestampValueExpression:s}){let o=[],l=await this.getColumns({databaseName:e,tableName:t,connectionId:a});for(let e of l)"JSON"!==e.type&&o.push({path:[e.name],type:e.type,jsType:t$(e.type)});let u=d(tq(l,["map","json"]),()=>[]);return await Promise.all(u.map(async l=>{if("json"===t$(l.type)){for(let r of(await this.getJSONKeys({databaseName:e,tableName:t,column:l.name,connectionId:a,metricName:n,dateRange:i,timestampValueExpression:s})))o.push({path:[l.name,r.key],type:r.chType,jsType:t$(r.chType)});return}let u=await this.getMapKeys({databaseName:e,tableName:t,column:l.name,connectionId:a,metricName:n,metadataMVs:r,dateRange:i,timestampValueExpression:s}),c=d(f([l,"access",e=>e.type,"access",e=>e.match,"call",e=>e(/Map\(.+,\s*(.+)\)/),"optionalAccess",e=>e[1]]),()=>"String");for(let e of u)o.push({path:[l.name,e],type:c,jsType:t$(c)})})),o}async getTableMetadata({databaseName:e,tableName:t,connectionId:a}){let n=await this.queryTableMetadata({cache:this.cache,database:e,table:t,connectionId:a});if("Distributed"===f([n,"optionalAccess",e=>e.engine])){n.isPointerTable=!0;try{let{cluster:e,database:t,table:r}=d(nv(n),()=>({}));if(!t||!r||!e)throw Error(`Could not parse underlying local table from Distributed table metadata: ${n.create_table_query}`);let i=await this.queryTableMetadata({cache:this.cache,database:t,table:r,cluster:e,connectionId:a});if(!i)throw Error(`Could not find underlying local table metadata for Distributed table: ${t}.${r}`);n={...n,...E.pick.call(void 0,i,["engine","engine_full","partition_key","sorting_key","primary_key","sampling_key"]),create_local_table_query:f([i,"optionalAccess",e=>e.create_table_query])}}catch(e){console.error("Failed to fetch underlying table metadata for Distributed table, using Distributed table metadata as fallback",e)}}return"Merge"===f([n,"optionalAccess",e=>e.engine])&&(n.isPointerTable=!0),f([n,"optionalAccess",e=>e.partition_key,"access",e=>e.startsWith,"call",e=>e("(")])&&n.partition_key.endsWith(")")&&(n.partition_key=n.partition_key.slice(1,-1)),n}async getAllTableMetadata({databaseName:e,connectionId:t}){let a=`${t}.${e}.tableMetadata`;return this.cache.getOrFetch(a,async()=>{let a=tx`SELECT * FROM system.tables WHERE database = ${{String:e}}`;return(await this.clickhouseClient.query({connectionId:t,query:a.sql,query_params:a.params,clickhouse_settings:this.getClickHouseSettings()}).then(e=>e.json())).data})}async getSetting({settingName:e,connectionId:t}){return this.cache.getOrFetch(`${t}.${e}`,async()=>{let a=tx`
  663. SELECT name, value
  664. FROM system.settings
  665. WHERE name = ${{String:e}}
  666. `;try{let e=await this.clickhouseClient.query({connectionId:t,query:a.sql,query_params:a.params,clickhouse_settings:this.getClickHouseSettings()}).then(e=>e.json());return e.data.length>0?e.data[0].value:void 0}catch(e){if(e instanceof Error&&e.message.includes("Not enough privileges"))return void console.warn("Not enough privileges to fetch settings:",e);throw e}})}async isClickHouseCloud({connectionId:e}){return await p(await this.cache.getOrFetch(`${e}.isClickHouseCloud`,async()=>{try{let t=await this.clickhouseClient.query({connectionId:e,query:"SELECT count() > 0 AS is_cloud FROM system.table_engines WHERE name = 'SharedMergeTree'",clickhouse_settings:this.getClickHouseSettings(),shouldSkipApplySettings:!0}).then(e=>e.json());return t.data.length>0&&t.data[0].is_cloud}catch(e){console.warn("Error detecting ClickHouse Cloud:",e);return}}),async()=>!1)}async getServerVersion({connectionId:e}){return this.cache.getOrFetch(`${e}.serverVersion`,async()=>{try{let t=await g([await this.clickhouseClient.query({connectionId:e,query:"SELECT version() AS version",query_params:void 0,clickhouse_settings:this.getClickHouseSettings(),shouldSkipApplySettings:!0}).then(e=>e.json()),"access",async e=>e.data,"access",async e=>e[0],"optionalAccess",async e=>e.version]);return t?h.a.call(void 0,t):void 0}catch(e){console.warn("Error fetching ClickHouse server version:",e);return}})}async getSettings({connectionId:e}){return this.cache.getOrFetch(`${e}.availableSettings`,async()=>{try{let t=await this.clickhouseClient.query({connectionId:e,query:"SELECT name, value FROM system.settings",query_params:void 0,clickhouse_settings:this.getClickHouseSettings(),shouldSkipApplySettings:!0}).then(e=>e.json());return new Map(t.data.map(e=>[e.name,e.value]))}catch(e){if(e instanceof Error&&e.message.includes("Not enough privileges"))return console.warn("Not enough privileges to fetch settings, may result in unoptimized queries:",e),new Map;throw e}})}async getSkipIndices({databaseName:e,tableName:t,connectionId:a}){return this.cache.getOrFetch(`${a}.${e}.${t}.skipIndices`,async()=>{let n=await this.queryTableMetadata({cache:this.cache,database:e,table:t,connectionId:a}),r=e,i=t,s;if("Distributed"===f([n,"optionalAccess",e=>e.engine])){let e=nv(n);e?(r=e.database,i=e.table,s=e.cluster):console.error(`Could not parse local table from Distributed table metadata: ${n.create_table_query}`)}try{return await this.querySkipIndices({database:r,table:i,connectionId:a,cluster:s})}catch(e){if(e instanceof Error&&e.message.includes("Not enough privileges"))return console.warn("Not enough privileges to fetch skip indices:",e),[];throw e}})}async getOtelTables({connectionId:e}){return this.cache.getOrFetch(`${e}.otelTables`,async()=>{let t=["otel_logs","otel_traces","hyperdx_sessions","otel_metrics_gauge","otel_metrics_sum","otel_metrics_summary","otel_metrics_histogram","otel_metrics_exp_histogram"].map(e=>tx`${{String:e}}`),a=tx`
  667. SELECT
  668. database,
  669. name
  670. FROM system.tables
  671. WHERE (database != 'system')
  672. AND (name IN (${tw(",",t)}))
  673. ORDER BY database, name
  674. `;try{let t=await this.clickhouseClient.query({connectionId:e,query:a.sql,query_params:a.params,clickhouse_settings:this.getClickHouseSettings()}).then(e=>e.json());if(0===t.data.length)return null;let n=new Map;for(let e of t.data)n.has(e.database)||n.set(e.database,new Set),n.get(e.database).add(e.name);let r="",i=0;for(let[e,t]of n.entries()){let a=0;t.has("otel_logs")&&(a+=10),t.has("otel_traces")&&(a+=10),t.has("hyperdx_sessions")&&(a+=5),t.has("otel_metrics_gauge")&&(a+=2),t.has("otel_metrics_sum")&&(a+=2),t.has("otel_metrics_histogram")&&(a+=2),t.has("otel_metrics_summary")&&(a+=1),t.has("otel_metrics_exp_histogram")&&(a+=1),a>i&&(i=a,r=e)}if(!r)return null;let s=n.get(r);return{database:r,tables:{logs:s.has("otel_logs")?"otel_logs":void 0,traces:s.has("otel_traces")?"otel_traces":void 0,sessions:s.has("hyperdx_sessions")?"hyperdx_sessions":void 0,metrics:{gauge:s.has("otel_metrics_gauge")?"otel_metrics_gauge":void 0,sum:s.has("otel_metrics_sum")?"otel_metrics_sum":void 0,summary:s.has("otel_metrics_summary")?"otel_metrics_summary":void 0,histogram:s.has("otel_metrics_histogram")?"otel_metrics_histogram":void 0,expHistogram:s.has("otel_metrics_exp_histogram")?"otel_metrics_exp_histogram":void 0}}}}catch(e){if(e instanceof Error&&e.message.includes("Not enough privileges"))return console.warn("Not enough privileges to fetch tables:",e),null;throw e}})}static parseTokensExpression(e){let t=e.trim().match(/^tokens\s*\((.*)\)$/i);return t?{hasTokens:!0,innerExpression:t[1].trim()}:{hasTokens:!1}}async getValuesDistribution({chartConfig:e,key:t,samples:a=1e5,limit:n=100,source:r}){let i=E.pick.call(void 0,e,["connection","from","dateRange","filters","where","with"]);return this.cache.getOrFetch(`${x.default.call(void 0,i)}.${t}.valuesDistribution`,async()=>{let i=await this.renderMetadataKeyExpression({databaseName:e.from.databaseName,tableName:e.from.tableName,connectionId:e.connection,keyExpression:t}),s={...e,with:[...e.with||[],{name:"tableStats",chartConfig:{...E.omit.call(void 0,e,["with","groupBy","orderBy","limit"]),select:`count() as total, greatest(CAST(total / ${a} AS UInt32), 1) as sample_factor`}}],filters:[...e.filters||[],{type:"sql",condition:`cityHash64(${e.timestampValueExpression}, rand()) % (SELECT sample_factor FROM tableStats) = 0`}],select:`${i} AS __hdx_value, count() as __hdx_count, __hdx_count / (sum(__hdx_count) OVER ()) * 100 AS __hdx_percentage`,orderBy:"__hdx_percentage DESC",groupBy:"__hdx_value",limit:{limit:n}},o=await eI(s,this,f([r,"optionalAccess",e=>e.querySettings]));return new Map((await this.clickhouseClient.query({query:o.sql,query_params:o.params,connectionId:e.connection,clickhouse_settings:{...this.getClickHouseSettings(),max_rows_to_group_by:`${10*n}`,group_by_overflow_mode:"any",max_rows_to_read:"0"}}).then(e=>e.json())).data.map(({__hdx_value:e,__hdx_percentage:t})=>[e,Number(t)]))})}async doMetadataMVsAggregateColumn({databaseName:e,tableName:t,connectionId:a},n){for(let r of(await this.getAllTableMetadata({databaseName:e,connectionId:a}))){let a=RegExp(`^CREATE MATERIALIZED VIEW ${tc(e)}\\.${tc(r.name)} TO ${tc(e)}\\.${tc(t)}`);if(!("MaterializedView"!==r.engine||!a.test(r.create_table_query)))return tu(r.as_select,n)}return!1}async determineKeyValueFetchingStrategy({databaseName:e,tableName:t,connectionId:a,metadataMVs:n}){return this.cache.getOrFetch(`${a}.${e}.${t}.${JSON.stringify(n)}.determineKeyValueFetchingStrategy`,async()=>{let r=await this.getServerVersion({connectionId:a}),i=h.e.call(void 0,r),s=await this.getColumns({databaseName:e,tableName:t,connectionId:a}),o=await this.getMapColumnTextIndexes({databaseName:e,tableName:t,connectionId:a}),l=await this.getNativeArrayColumnTextIndexes({databaseName:e,tableName:t,connectionId:a}),u={mapTextIndexLookup:[],nativeTextIndexLookup:[],metadataMVs:[],rawTable:[]};for(let t of s)if("Timestamp"!==t.name){if(i&&f([o,"access",e=>e.get,"call",e=>e(t.name),"optionalAccess",e=>e.kv])){u.mapTextIndexLookup.push(o.get(t.name));continue}if(i&&l.has(t.name)){u.nativeTextIndexLookup.push(l.get(t.name));continue}if(n&&n.kvRollupTable&&await this.doMetadataMVsAggregateColumn({databaseName:e,tableName:n.kvRollupTable,connectionId:a},t.name)){u.metadataMVs.push({columnName:t.name,mvName:n.kvRollupTable});continue}u.rawTable.push(t.name)}return u})}async getAllKeyValues({databaseName:e,tableName:t,keyExpressions:a,maxValuesPerKey:n=20,connectionId:r,metadataMVs:i,dateRange:s,timestampValueExpression:o,signal:l}){if(0===a.length)return[];if(a.length>tr)return(await Promise.allSettled(E.chunk.call(void 0,a,tr).map(a=>this.getAllKeyValues({databaseName:e,tableName:t,keyExpressions:a,maxValuesPerKey:n,connectionId:r,metadataMVs:i,dateRange:s,timestampValueExpression:o,signal:l})))).filter(e=>"fulfilled"===e.status).flatMap(e=>e.value);let u=a.map(e=>{let t=tg(e),a=t.length>=2;return{keyExpression:e,rollupColumn:a?ts(t[0]):"NativeColumn",rollupKey:a?t[1]:ts(t[0]),column:ts(t[0]),mapKey:a?t[1]:void 0}}),c=await this.determineKeyValueFetchingStrategy({databaseName:e,tableName:t,connectionId:r,metadataMVs:i}),m=new Map,d=new Map,p=new Map,g=[];for(let e of u){if(e.mapKey){let t=c.mapTextIndexLookup.find(t=>t.kv&&t.kv.mapColumn===e.column);if(f([t,"optionalAccess",e=>e.kv])){let a=m.get(e.column);a||(a={indexName:t.kv.indexName,limit:n,separator:t.kv.separator,keys:[]},m.set(e.column,a)),a.keys.push(e.mapKey);continue}}else{let t=c.nativeTextIndexLookup.find(t=>t.expression===e.column);if(t){d.set(e.column,{indexName:t.name,limit:n});continue}}let t=c.metadataMVs.find(t=>t.columnName===e.column);if(t){let a=p.get(t.mvName);a||(a=new Map,p.set(t.mvName,a));let n=a.get(e.rollupColumn);n||(n=[],a.set(e.rollupColumn,n)),n.push(e.rollupKey);continue}if(c.rawTable.includes(e.column)){let t=tl(e.column);e.mapKey?g.push(`${t}[${N.default.escape(e.mapKey)}]`):g.push(t)}}let h=[];return m.size>0&&h.push(this.getMapTextIndexKeyValues({databaseName:e,tableName:t,connectionId:r,queryOptions:m,dateRange:s,timestampValueExpression:o,signal:l})),d.size>0&&h.push(this.getTextIndexKeyValues({databaseName:e,tableName:t,connectionId:r,queryOptions:d,dateRange:s,timestampValueExpression:o,signal:l})),p.size>0&&h.push(this.getMetadataMVKeyValues({databaseName:e,tableName:t,connectionId:r,queryOptions:p,maxValuesPerKey:n,dateRange:s,metadataMVs:i,signal:l})),g.length>0&&h.push(this.getKeyValues({chartConfig:{from:{databaseName:e,tableName:t},connection:r,dateRange:s,timestampValueExpression:o,select:"",where:""},keys:g,limit:n,source:void 0,signal:l}).catch(e=>{console.warn("getKeyValues (raw table) failed; skipping this strategy for the current batch",e)})),(await Promise.allSettled(h)).filter(e=>"fulfilled"===e.status).map(e=>e.value).filter(e=>void 0!==e).flat()}async getKeyValues({chartConfig:e,keys:t,keyConditions:a,limit:n=20,disableRowLimit:r=!1,signal:i,source:s}){let o={...E.pick.call(void 0,e,["connection","from","dateRange","where","with","filters"]),keys:t,keyConditions:f([a,"optionalAccess",e=>e.map,"call",e=>e(e=>e&&eR(e))]),disableRowLimit:r};return this.cache.getOrFetch(`${x.default.call(void 0,o)}.getKeyValues`,async()=>{if(0===t.length)return[];let o=await this.renderKeyExpressions({databaseName:e.from.databaseName,tableName:e.from.tableName,connectionId:e.connection,keys:t}),l=e=>d(o.get(e),()=>e),u=t.map(l),c=r?{...e,select:t.map((e,t)=>{let r=l(e),i=f([a,"optionalAccess",e=>e.at,"call",e=>e(t)]),s=i&&eC(i,l);return s?`groupUniqArrayIf(${n})(${r}, ${s}) AS param${t}`:`groupUniqArray(${n})(${r}) AS param${t}`}).join(", ")}:await (async()=>{let a=u.map((e,t)=>`${e} as param${t}`).join(", ")||"*";return{with:[{name:"sampledData",chartConfig:{...e,select:a,limit:{limit:this.getClickHouseSettings().max_rows_to_read?Number(this.getClickHouseSettings().max_rows_to_read):3e6}},isSubquery:!0}],select:t.map((e,t)=>`groupUniqArray(${n})(param${t}) AS param${t}`).join(", "),connection:e.connection,from:{databaseName:"",tableName:"sampledData"},where:""}})(),m=await eI(c,this,f([s,"optionalAccess",e=>e.querySettings]));return Object.entries(f([await this.clickhouseClient.query({query:m.sql,query_params:m.params,connectionId:e.connection,clickhouse_settings:r?void 0:{...this.getClickHouseSettings(),timeout_overflow_mode:"break",max_execution_time:15,max_rows_to_read:"0"},abort_signal:i}).then(e=>e.json()),"optionalAccess",e=>e.data,"optionalAccess",e=>e[0]])).map(([e,a])=>({key:t[parseInt(e.replace("param",""))],value:f([a,"optionalAccess",e=>e.filter,"call",e=>e(e=>null!=e&&""!==e)])}))})}async getKeyValuesWithMVs({chartConfig:e,keys:t,keyConditions:a,source:n,limit:r=20,disableRowLimit:i,signal:s}){let o={...E.pick.call(void 0,e,["connection","from","dateRange","where","with","filters"]),keys:t,keyConditions:f([a,"optionalAccess",e=>e.map,"call",e=>e(e=>e&&eR(e))]),disableRowLimit:i};return this.cache.getOrFetch(`${x.default.call(void 0,o)}.getKeyValuesWithMVs`,async()=>{if(0===t.length)return[];if(a&&a.some(e=>null!=e)){let o=await tn({chartConfig:e,keys:t,keyConditions:a,source:n,clickhouseClient:this.clickhouseClient,metadata:this,signal:s});return this.getKeyValues({chartConfig:o,keys:t,keyConditions:a,limit:r,disableRowLimit:i,signal:s,source:n})}let o=n&&("log"===n.kind||"trace"===n.kind)?await ta({chartConfig:e,keys:t,source:n,clickhouseClient:this.clickhouseClient,metadata:this,signal:s}):[{chartConfig:e,keys:t}];return(await Promise.all(o.map(async({chartConfig:e,keys:t})=>this.getKeyValues({chartConfig:e,keys:t,limit:r,disableRowLimit:i,signal:s,source:n})))).flat()})}};function tg(e){let t=e.indexOf("['");if(-1!==t&&e.endsWith("']"))return[e.slice(0,t),e.slice(t+2,-2)];let a=e.indexOf('["');return -1!==a&&e.endsWith('"]')?[e.slice(0,a),e.slice(a+2,-2)]:[e]}var th=new tp,ty=t.M=e=>new tf(e,th),tb=((n=tb||{}).Array="array",n.Date="date",n.Map="map",n.Number="number",n.String="string",n.Tuple="tuple",n.Bool="bool",n.JSON="json",n.Dynamic="dynamic",n),t_=t.O=e=>{let t={};return e.headers.forEach((e,a)=>{t[a]=e}),t},t$=t.P=e=>{if(e.startsWith("Date"))return"date";if(e.startsWith("Tuple"))return"tuple";if(e.startsWith("Map"))return"map";if(e.startsWith("Array"))return"array";if(e.startsWith("Int")||e.startsWith("UInt")||e.startsWith("Float")||e.startsWith("Nullable(Int")||e.startsWith("Nullable(UInt")||e.startsWith("Nullable(Float"))return"number";if(e.startsWith("String")||e.startsWith("Nullable(String)")||e.startsWith("FixedString")||e.startsWith("Enum")||e.startsWith("UUID")||e.startsWith("IPv4")||e.startsWith("IPv6"))return"string";if("Bool"===e)return"bool";if(e.startsWith("JSON"))return"json";if(e.startsWith("Dynamic"))return"dynamic";if(e.startsWith("LowCardinality"))return t$(e.slice(15,-1));if(e.startsWith("Nullable("))return t$(e.slice(9,-1));if(e.startsWith("Variant(")&&e.endsWith(")")){let t=a4(e.slice(8,-1));if(t.length>0&&t.every(e=>"number"===t$(e)))return"number"}return null},tS=t.Q=e=>"map"===e||"array"===e||"json"===e||"tuple"===e||"dynamic"===e,tA=t.R=e=>e.trim().startsWith("Array(")&&e.trim().endsWith(")")?t$(e.trim().slice(6,-1)):null,tv=t.S=e=>{let t=t$(e),a="array"===t;if("map"===t||"tuple"===t)throw Error("Map or Tuple types cannot be searched with Lucene.");return"date"===t?t="number":"array"===t&&tA(e)&&(t=tA(e)),{type:t,isArray:a}},tE=e=>`HYPERDX_PARAM_${Math.abs(na(`${e}`))}`,tx=t.T=(e,...t)=>({sql:e.map((e,a)=>{let n=t[a];return e+(null==n?"":"string"==typeof n?n:"UNSAFE_RAW_SQL"in n?n.UNSAFE_RAW_SQL:Array.isArray(n)?n.map(e=>e.sql).join(""):"sql"in n?n.sql:"Identifier"in n?`{${tE(n.Identifier)}:Identifier}`:"String"in n?`{${tE(n.String)}:String}`:"Float32"in n?`{${tE(n.Float32)}:Float32}`:"Float64"in n?`{${tE(n.Float64)}:Float64}`:"Int32"in n?`{${tE(n.Int32)}:Int32}`:"Int64"in n?`{${tE(n.Int64)}:Int64}`:"")}).join(""),params:t.reduce((e,t)=>({...e,...null==t||"string"==typeof t||"UNSAFE_RAW_SQL"in t?{}:Array.isArray(t)?t.reduce((e,t)=>(Object.assign(e,t.params),e),{}):"params"in t?t.params:"Identifier"in t?{[tE(t.Identifier)]:t.Identifier}:"String"in t?{[tE(t.String)]:t.String}:"Float32"in t?{[tE(t.Float32)]:t.Float32}:"Float64"in t?{[tE(t.Float64)]:t.Float64}:"Int32"in t?{[tE(t.Int32)]:t.Int32}:"Int64"in t?{[tE(t.Int64)]:t.Int64}:{}}),{})}),tw=t.U=(e,...t)=>t.reduce((t,a)=>{if(Array.isArray(a)){if(0===a.length)return t;t.sql+=(t.sql.length>0?e:"")+a.map(e=>e.sql).filter(Boolean).join(e),t.params=a.reduce((e,t)=>(Object.assign(e,t.params),e),t.params)}else a.sql.length>0&&(t.sql+=`${t.sql.length>0?e:""}${a.sql}`,Object.assign(t.params,a.params));return t},{sql:"",params:{}}),tN=t.V=(e,t,a)=>(Array.isArray(e)?e.every(e=>0===e.sql.length):0===e.sql.length)?[]:tx`${t}${e}${a}`,tT=t.W=class extends Error{constructor(e,t){super(e),this.query=t,this.name="ClickHouseQueryError"}},tI=t.Z=o=class{__init3(){this.requestTimeout=36e5}constructor({host:e,username:t,password:a,queryTimeout:n,application:r,requestTimeout:i,customLogger:s}){o.prototype.__init3.call(this),this.host=e,this.username=t,this.password=a,this.queryTimeout=n,this.maxRowReadOnly=!1,this.application=r,this.customLogger=s,null!=i&&i>=0&&(this.requestTimeout=i)}get requestTimeoutMs(){return this.requestTimeout}getClient(){if(!this.client)throw Error("ClickHouse client not initialized. Child classes must initialize the client.");return this.client}async close(){await f([this,"access",e=>e.client,"optionalAccess",e=>e.close,"call",e=>e()])}logQuery(e,t={}){if(!this.customLogger)return;let a="";try{a=tC({sql:e,params:t})}catch(t){a=e}this.customLogger.debug({module:"clickhouse",message:"Sending query",args:{sql:a}})}async processClickhouseSettings({connectionId:e,externalClickhouseSettings:t}){let a=structuredClone(t||{});f([a,"optionalAccess",e=>e.max_rows_to_read])&&this.maxRowReadOnly&&delete a.max_rows_to_read,void 0===f([a,"optionalAccess",e=>e.max_execution_time])&&(this.queryTimeout||0)>0&&(a.max_execution_time=this.queryTimeout);let n={allow_experimental_analyzer:1,date_time_output_format:"iso",wait_end_of_query:0,cancel_http_readonly_queries_on_client_close:1,output_format_json_quote_64bit_integers:1},r=e?await ty(this).getSettings({connectionId:e}):void 0,i=(e,t)=>{r&&r.has(e)&&(n[e]=t)};return i("query_plan_optimize_lazy_materialization","1"),i("query_plan_max_limit_for_lazy_materialization","100000"),i("use_skip_indexes_for_top_k","1"),i("query_plan_max_limit_for_top_k_optimization","100000"),i("use_skip_indexes_on_data_read","1"),i("use_skip_indexes_for_disjunctions","1"),i("enable_full_text_index","1"),{...n,...a}}async query(e){let t=0;for(;t<2;){try{return await this.__query(e)}catch(t){if(!this.maxRowReadOnly&&"READONLY"===t.type&&t.message.includes("max_rows_to_read"))this.maxRowReadOnly=!0;else{let a=t;try{let n="";try{n=tC({sql:e.query,params:d(e.query_params,()=>({}))})}catch(t){n=e.query}(a=new tT(t.message,n)).cause=t}catch(e){}throw a}}t++}throw Error("ClickHouseClient query impossible codepath")}async queryChartConfig({config:e,metadata:t,opts:a,querySettings:n}){e=_.e.call(void 0,e)?Z(e):e;let r=await eI(e,t,n);return(await this.query({query:r.sql,query_params:r.params,format:"JSON",abort_signal:f([a,"optionalAccess",e=>e.abort_signal]),connectionId:e.connection,clickhouse_settings:f([a,"optionalAccess",e=>e.clickhouse_settings])})).json()}async testChartConfigValidity({config:e,metadata:t,opts:a,querySettings:n}){try{let r=await eI(e,t,n),i=tx`EXPLAIN ESTIMATE ${r}`,s=await (await this.query({query:i.sql,query_params:i.params,format:"JSON",abort_signal:f([a,"optionalAccess",e=>e.abort_signal]),connectionId:e.connection,clickhouse_settings:f([a,"optionalAccess",e=>e.clickhouse_settings])})).json(),o=Number(f([s,"access",e=>e.data,"access",e=>e[0],"optionalAccess",e=>e.rows]));return{isValid:!0,rowEstimate:Number.isNaN(o)?void 0:o}}catch(e){return{isValid:!1,error:e instanceof tT?e.message:"Error while constructing materialized view query"}}}},tk=t._=({database:e,table:t})=>tx`${{Identifier:e}}.${{Identifier:t}}`;function tC({sql:e,params:t}){return Object.entries(t).reduce((e,[t,a])=>e.replace(RegExp(`{${t}:(\\w+)}`,"g"),(e,t)=>"String"===t?`'${a}'`:String(a)),e)}function tR(e,t){let a={},n=new I.Parser().astify(e,{database:"Postgresql",parseOptions:{includeLocations:!0}});for(let[r,i]of(null!=n.columns&&n.columns.forEach(t=>{null!=t.as&&("expr"===t.type&&"column_ref"===t.expr.type?a[t.as]=t.expr.array_index&&f([t,"access",e=>e.expr,"access",e=>e.array_index,"access",e=>e[0],"optionalAccess",e=>e.brackets])?`${t.expr.column.expr.value}['${t.expr.array_index[0].index.value}']`:t.expr.column.expr.value:null!=t.expr.loc?a[t.as]=e.slice(t.expr.loc.start.offset,t.expr.loc.end.offset):console.error("Unknown alias column type",t))}),Object.entries(a)))for(let[e,n]of t)i.includes(e)&&(a[r]=i.replaceAll(e,n));return a}function tq(e,t){return e.filter(e=>{let a=t$(e.type);return null!=a&&t.includes(a)})}var tM=[{encodePattern:/\\\\/g,placeholder:"HDX_BACKSLASH_LITERAL",decodePattern:/HDX_BACKSLASH_LITERAL/g,source:"\\\\",value:"\\"},{encodePattern:/http:\/\//g,placeholder:"http_COLON_//",decodePattern:/http_COLON_\/\//g,source:"http://",value:"http://"},{encodePattern:/https:\/\//g,placeholder:"https_COLON_//",decodePattern:/https_COLON_\/\//g,source:"https://",value:"https://"},{encodePattern:/localhost:(\d{1,5})/g,placeholder:"localhost_COLON_$1",decodePattern:/localhost_COLON_(\d{1,5})/g,source:"localhost:$1",value:"localhost:$1"},{encodePattern:/\\:/g,placeholder:"HDX_COLON",decodePattern:/HDX_COLON/g,source:"\\:",value:":"}];function tO(e){return tM.reduce((e,{encodePattern:t,placeholder:a})=>e.replace(t,a),e)}function tF(e){return tM.reduce((e,{decodePattern:t,value:a})=>e.replace(t,a),e.replace(/\\"/g,'"'))}function tL(e){return tM.reduce((e,{decodePattern:t,source:a})=>e.replace(t,a),e)}function tD(e){return w.default.parse(tO(e))}function tU(e){return e.replace(/[\\%_]/g,"\\$&")}function tV(e){let t=tg(e);if(!(t.length<2))return N.default.format("mapContains(??, ?)",[t[0],t[1]])}function tW(e,t){return N.default.raw(null!=t?d(e,()=>""):N.default.escapeId(e))}function tB(e){return e.replace(/\s+/g,"").replace(/`/g,"")}var tP="<implicit>";function tj(e){return"term"in e&&null!=e.term}function tH(e){return"inclusive"in e&&null!=e.inclusive}var tK=["Int8","Int16","Int32","Int64","Int128","Int256","UInt8","UInt16","UInt32","UInt64","UInt128","UInt256","Float32","Float64"];async function tz({field:e,metadata:t,databaseName:a,tableName:n,connectionId:r}){let i=e.split("."),s="";for(let e of i){s=s?`${s}.${e}`:e;let i=await t.getColumn({databaseName:a,tableName:n,column:s,connectionId:r});if(i)return i}}var tQ=class{constructor({metadata:e,databaseName:t,tableName:a,connectionId:n}){this.metadata=e,this.databaseName=t,this.tableName=a,this.connectionId=n}translateField(e,t){return e===tP?d(t.implicitColumnExpression,()=>"event"):`'${e}'`}async getFieldType(e){let t=await tz({field:e,metadata:this.metadata,databaseName:this.databaseName,tableName:this.tableName,connectionId:this.connectionId}),a=e.split(".").slice(t?t.name.split(".").length:0).join(".");if(!t)return{isArray:!1,type:null};let n=t$(t.type),r="array"===n;return r&&tA(t.type)&&(n=tA(t.type)),{isArray:r,type:n,fieldPostfix:a,column:t.name}}operator(e){switch(e){case"NOT":case"AND NOT":return"AND NOT";case"OR NOT":return"OR NOT";case"&&":case"<implicit>":case"AND":return"AND";case"||":case"OR":return"OR";default:throw Error(`Unexpected operator. ${e}`)}}async eq(e,t,a,n){let{isArray:r}=await this.getFieldType(e);return`${this.translateField(e,n)} ${r?a?"does not contain":"contains":a?"is not":"is"} ${t}`}async isNotNull(e,t,a){let{isArray:n,type:r,fieldPostfix:i,column:s}=await this.getFieldType(e);return s&&n&&("map"===r||"json"===r)&&i?`${this.translateField(s,a)} ${t?`does not contain an element with non-null ${i}`:`contains an element with non-null ${i}`}`:`${this.translateField(e,a)} ${t?"is null":"is not null"}`}async gte(e,t,a){return`${this.translateField(e,a)} is greater than or equal to ${t}`}async lte(e,t,a){return`${this.translateField(e,a)} is less than or equal to ${t}`}async lt(e,t,a){return`${this.translateField(e,a)} is less than ${t}`}async gt(e,t,a){return`${this.translateField(e,a)} is greater than ${t}`}async fieldSearch(e,t,a,n,r,i){let s=t.trim().match(/\s/)?`"${t}"`:t;if(e===tP){let t=!i.implicitColumnExpression;return`${this.translateField(e,i)} ${n&&r?a?"does not contain":"contains":n?a?"does not end with":"ends with":r?a?"does not start with":"starts with":t?a?"does not have whole word":"has whole word":a?"does not contain":"contains"} ${s}`}{let{isArray:t,type:n,column:r,fieldPostfix:o}=await this.getFieldType(e),l=t&&("map"===n||"json"===n),u=l&&r?r:e;return`${this.translateField(u,i)} ${l?a?`does not contain an element with key ${o} and value`:`contains an element with key ${o} and value`:t&&"bool"!==n&&"number"!==n?a?"does not contain an element containing":"contains an element containing":a?"does not contain":"contains"} ${s}`}}async range(e,t,a,n,r,i="both"){let s="both"===i||"left"===i?t:`${t} (exclusive)`,o="both"===i||"right"===i?a:`${a} (exclusive)`;return`${e} ${n?"is not":"is"} between ${s} and ${o}`}},tG=t.ia=l=class{constructor(){l.prototype.__init4.call(this)}__init4(){this.NOT_FOUND_QUERY="(1 = 0)"}operator(e){switch(e){case"NOT":case"AND NOT":return"AND NOT";case"OR NOT":return"OR NOT";case"&&":case"<implicit>":case"AND":return"AND";case"||":case"OR":return"OR";default:throw Error(`Unexpected operator. ${e}`)}}async eq(e,t,a,n){let{column:r,columnJSON:i,found:s,propertyType:o,isArray:l,mapKey:u,mapKeyIndexExpression:c,arrayMapKeyExpression:m,kvItemsExpression:d}=await this.getColumnForField(e,n);if(!s)return this.NOT_FOUND_QUERY;if(r&&l)return tY({column:r,mapKey:m,term:t,propertyType:o,isNegatedField:a,exactMatch:!0});if(d&&"string"===o){let e=N.default.format("has(??, concat(?, ?, ?))",[d.columnName,d.mapKey,d.separator,t]);if(""===t){let t=N.default.format("NOT mapContains(??, ?)",[d.mapColumn,d.mapKey]);return a?`(NOT ${e} AND ${N.default.format("mapContains(??, ?)",[d.mapColumn,d.mapKey])})`:`(${e} OR ${t})`}return`(${a?"NOT ":""}${e})`}let p=c&&!a?` AND ${c}`:"";if("bool"===o){let e=`${t}`.trim().toLowerCase();return N.default.format(`(? ${a?"!":""}= ?${p})`,[tW(r,u),"true"===e?1:"false"===e?0:parseInt(e)])}return"number"===o?N.default.format(`(${r} ${a?"!":""}= CAST(?, 'Float64')${p})`,[t]):"json"===o?N.default.format(`(${f([i,"optionalAccess",e=>e.string])} ${a?"!":""}= ?${p})`,[t]):N.default.format(`(${r} ${a?"!":""}= ?${p})`,[t])}async isNotNull(e,t,a){let{column:n,columnJSON:r,found:i,propertyType:s,mapKeyIndexExpression:o,isArray:l,arrayMapKeyExpression:u}=await this.getColumnForField(e,a);if(!i)return this.NOT_FOUND_QUERY;let c=o&&!t?` AND ${o}`:"";if(n&&l&&("map"===s||"json"===s)&&u){let e="map"===s?N.default.format("el[?]",[u]):N.default.format("el.??",[u]);return N.default.format(`${t?"NOT ":""}arrayExists(el -> notEmpty(toString(${e})) = 1, ?)`,[N.default.raw(n)])}return"json"!==s||l?`notEmpty(${n}) ${t?"!":""}= 1${c}`:`notEmpty(${f([r,"optionalAccess",e=>e.string])}) ${t?"!":""}= 1${c}`}async gte(e,t,a){let{column:n,columnJSON:r,found:i,propertyType:s,isArray:o,mapKeyIndexExpression:l}=await this.getColumnForField(e,a);if(!i)return this.NOT_FOUND_QUERY;if(o)throw Error(">= comparison is not supported for Array-type fields");let u=l?` AND ${l}`:"";return"json"===s?N.default.format(`(${f([r,"optionalAccess",e=>e.number])} >= ?${u})`,[t]):N.default.format(`(${n} >= ?${u})`,[t])}async lte(e,t,a){let{column:n,columnJSON:r,found:i,propertyType:s,isArray:o,mapKeyIndexExpression:l}=await this.getColumnForField(e,a);if(!i)return this.NOT_FOUND_QUERY;if(o)throw Error("<= comparison is not supported for Array-type fields");let u=l?` AND ${l}`:"";return"json"===s?N.default.format(`(${f([r,"optionalAccess",e=>e.number])} <= ?${u})`,[t]):N.default.format(`(${n} <= ?${u})`,[t])}async lt(e,t,a){let{column:n,columnJSON:r,found:i,propertyType:s,isArray:o,mapKeyIndexExpression:l}=await this.getColumnForField(e,a);if(!i)return this.NOT_FOUND_QUERY;if(o)throw Error("< comparison is not supported for Array-type fields");let u=l?` AND ${l}`:"";return"json"===s?N.default.format(`(${f([r,"optionalAccess",e=>e.number])} < ?${u})`,[t]):N.default.format(`(${n} < ?${u})`,[t])}async gt(e,t,a){let{column:n,columnJSON:r,found:i,propertyType:s,isArray:o,mapKeyIndexExpression:l}=await this.getColumnForField(e,a);if(!i)return this.NOT_FOUND_QUERY;if(o)throw Error("> comparison is not supported for Array-type fields");let u=l?` AND ${l}`:"";return"json"===s?N.default.format(`(${f([r,"optionalAccess",e=>e.number])} > ?${u})`,[t]):N.default.format(`(${n} > ?${u})`,[t])}attemptToParseNumber(e){let t=Number(e);return Number.isNaN(t)?e:t}tokenizeTerm(e){return e.split(/[ -/:-@[-`{-~\t\n\r]+/).filter(e=>e.length>0)}termHasSeparators(e){return null!=e.match(/[ -/:-@[-`{-~\t\n\r]+/)}async range(e,t,a,n,r,i="both"){let{column:s,found:o,mapKeyIndexExpression:l,isArray:u}=await this.getColumnForField(e,r);if(!o)return this.NOT_FOUND_QUERY;if(u)throw Error("range comparison is not supported for Array-type fields");let c=l&&!n?` AND ${l}`:"",m="*"===t,d="*"===a;if(m&&d)return this.isNotNull(e,n,r);if(!m&&!d&&"both"===i)return N.default.format(`(${s} ${n?"NOT ":""}BETWEEN ? AND ?${c})`,[this.attemptToParseNumber(t),this.attemptToParseNumber(a)]);let p=[];return m||p.push(N.default.format(`${s} ${"both"===i||"left"===i?">=":">"} ?`,[this.attemptToParseNumber(t)])),d||p.push(N.default.format(`${s} ${"both"===i||"right"===i?"<=":"<"} ?`,[this.attemptToParseNumber(a)])),n?`(NOT (${p.join(" AND ")})${c})`:`(${p.join(" AND ")}${c})`}};function tY({column:e,mapKey:t,term:a,isNegatedField:n,propertyType:r,exactMatch:i}){let s=n?"NOT ":"";if("number"===r)return N.default.format(`${s}has(?, CAST(?, 'Float64'))`,[N.default.raw(e),a]);if("bool"===r){let t=`${a}`.trim().toLowerCase(),n="true"===t?1:"false"===t?0:a;return N.default.format(`${s}has(?, ?)`,[N.default.raw(e),n])}if("map"===r){if(!t)throw Error(`Map key expression is required for searching column ${e}. Try '${e}.key:value'`);return i?N.default.format(`${s}arrayExists(el -> el[?] = ?, ?)`,[t,a,N.default.raw(e)]):N.default.format(`${s}arrayExists(el -> el[?] ILIKE ?, ?)`,[t,`%${tU(a)}%`,N.default.raw(e)])}if("json"===r){if(!t)throw Error(`Map key expression is required for searching column ${e}. Try '${e}.key:value'`);return i?N.default.format(`${s}arrayExists(el -> toString(el.??) = ?, ?)`,[t,a,N.default.raw(e)]):N.default.format(`${s}arrayExists(el -> toString(el.??) ILIKE ?, ?)`,[t,`%${tU(a)}%`,N.default.raw(e)])}let o="string"===r?"el":N.default.format("toString(el)",[N.default.raw(e)]);return i&&"string"===r?N.default.format(`${s}has(?, ?)`,[N.default.raw(e),a]):i?N.default.format(`${s}arrayExists(el -> ${o} = ?, ?)`,[a,N.default.raw(e)]):N.default.format(`${s}arrayExists(el -> ${o} ILIKE ?, ?)`,[`%${tU(a)}%`,N.default.raw(e)])}function tZ(e){let t=[],a=0;for(;a<e.length;){if(/\s/.test(e[a])){a++;continue}if("-"===e[a]&&">"===e[a+1]){t.push("->"),a+=2;continue}if(":"===e[a]&&":"===e[a+1]){t.push("::"),a+=2;continue}if("(),.".includes(e[a])){t.push(e[a]),a++;continue}if("'"===e[a]||'"'===e[a]){let n=e[a],r="";for(a++;a<e.length&&e[a]!==n;)"\\"===e[a]?(r+=d(e[a+1],()=>""),a+=2):(r+=e[a],a++);a++,t.push(`'${r}'`);continue}if(/\w/.test(e[a])){let n="";for(;a<e.length&&/\w/.test(e[a]);)n+=e[a],a++;t.push(n);continue}return null}return t}function tJ(e){let t,a=0,n=t=>!(a>=e.length)&&e[a]===t&&(a++,!0),r=()=>e[a++];if(!n("arrayMap")||!n("("))return;if("("===e[a]){if(a++,!(t=r())||!n(")"))return}else if(!(t=r()))return;if(!n("->")||!n("concat")||!n("(")||!n(t)||!n(".")||!n("1")||!n(","))return;let i=r();if(!i||!i.startsWith("'")||!n(","))return;let s=i.slice(1,-1);if(!(!n(t)||!n(".")||!n("2")||!n(")")||!n(",")))return{lambdaVar:t,separator:s,pos:a}}function tX(e){let t=tZ(e);if(!t)return;let a=tJ(t);if(!a)return;let n=a.pos,r=e=>!(n>=t.length)&&t[n]===e&&(n++,!0),i=t[n++];if(i&&!(!r("::")||!r("Array")||!r("(")||!r("Tuple")||!r("(")||!r("String")||!r(",")||!r("String")||!r(")")||!r(")")||!r(")"))&&n===t.length)return{mapColumn:i,separator:a.separator}}function t0(e){let t=tZ(e);if(!t)return;let a=tJ(t);if(!a)return;let n=a.pos,r=e=>!(n>=t.length)&&t[n]===e&&(n++,!0),i=()=>t[n++];if(!r("CAST")||!r("("))return;let s=i();if(!s||!r(","))return;let o=i();if(!(!o||!o.startsWith("'")||"Array(Tuple(String,String))"!==o.slice(1,-1).replace(/\s+/g,""))&&!(!r(")")||!r(")"))&&n===t.length)return{mapColumn:s,separator:a.separator}}var t1=[tX,t0];function t2(e,t,a){return!(e.type!==t||"text"===t&&f([a,"optionalAccess",e=>e.tokenizer])&&f([nS,"call",t=>t(e),"optionalAccess",e=>e.type])!==a.tokenizer)}async function t6({metadata:e,databaseName:t,tableName:a,connectionId:n}){let r=new Map;try{let[i,s,o,l]=await Promise.all([e.getServerVersion({connectionId:n}),e.getColumns({databaseName:t,tableName:a,connectionId:n}),e.getSkipIndices({databaseName:t,tableName:a,connectionId:n}).catch(()=>[]),e.isClickHouseCloud({connectionId:n}).catch(()=>!1)]);return function(e,t,a,n,r){let i=h.d.call(void 0,e,n),s=h.c.call(void 0,e,[26,5,0,0]);for(let e of t.filter(e=>(i&&"ALIAS"===e.default_type||"MATERIALIZED"===e.default_type)&&e.default_expression)){let t;for(let a of t1)if(t=a(e.default_expression))break;if(!t)continue;let n=tB(e.name),i=tB(e.default_expression),o=a.find(e=>{if(!t2(e,"text",{tokenizer:"array"})||"array"!==f([nS,"call",t=>t(e),"optionalAccess",e=>e.type]))return!1;let t=tB(e.expression);return t===n||t===i});if(o){let a=r.get(t.mapColumn);a||(a={},r.set(t.mapColumn,a)),a.kv={columnName:e.name,indexName:o.name,separator:t.separator,useHasAny:s,mapColumn:t.mapColumn}}}}(i,s,o,l,r),function(e,t,a){let n="mapKeys(";for(let r of t.filter(e=>e.expression.startsWith(n)&&t2(e,"text",{tokenizer:"array"}))){let t=r.expression.slice(n.length,-1),i=e.find(e=>e.name===t&&"Map(LowCardinality(String), String)"===e.type);if(i){let e=a.get(t);e||(e={},a.set(t,e)),e.key={indexName:r.name,mapColumn:i.name}}}}(s,o,r),r}catch(e){console.warn("Error building KV items lookup:",e)}return r}var t4=class extends tG{constructor({metadata:e,databaseName:t,tableName:a,connectionId:n,implicitColumnExpression:r,bodyExpression:i,useTextIndexForImplicitColumn:s}){super(),this.metadata=e,this.databaseName=t,this.tableName=a,this.implicitColumnExpression=r,this.bodyExpression=i,this.connectionId=n,this.useTextIndexForImplicitColumn=d(s,()=>"auto"),this.skipIndicesPromise=this.metadata.getSkipIndices({databaseName:t,tableName:a,connectionId:n}).catch(e=>(console.error("Error fetching skip indices:",e),[])),this.enableTextIndexPromise=this.metadata.getSetting({settingName:"enable_full_text_index",connectionId:n}).then(e=>"1"===e).catch(e=>(console.warn("Error fetching enable_full_text_index setting:",e),!1)),this.textIndexInfoLookupPromise=this.buildTextIndexInfoLookup()}buildTextIndexInfoLookup(){return t6({metadata:this.metadata,databaseName:this.databaseName,tableName:this.tableName,connectionId:this.connectionId})}async fieldSearch(e,t,a,n,r,i){let s=e===tP,{column:o,columnJSON:l,found:u,propertyType:c,isArray:m,mapKey:d,mapKeyIndexExpression:p,arrayMapKeyExpression:g}=await this.getColumnForField(e,i);if(!u)return this.NOT_FOUND_QUERY;let h=!p||a||s&&i.isNegatedAndParenthesized?"":` AND ${p}`;if(m)return tY({column:o,mapKey:g,term:t,propertyType:c,isNegatedField:a,exactMatch:!1});if("bool"===c){let e=`${t}`.trim().toLowerCase();return N.default.format(`(? ${a?"!":""}= ?${h})`,[tW(o,d),"true"===e?1:"false"===e?0:parseInt(e)])}if("number"===c)return N.default.format(`(? ${a?"!":""}= CAST(?, 'Float64')${h})`,[tW(o,d),t]);if("json"===c)return N.default.format(`(${f([l,"optionalAccess",e=>e.string])} ${a?"NOT ":""}ILIKE ?${h})`,[`%${tU(t)}%`]);if(0===t.length)return"(1=1)";if(s){let e=!i.implicitColumnExpression&&!i.bodyExpression;if(n||r)return N.default.format(`(lower(?) ${a?"NOT ":""}LIKE lower(?))`,[N.default.raw(o),`${n?"%":""}${tU(t)}${r?"%":""}`]);if(e){let e=!1,n=!1;if("enabled"===this.useTextIndexForImplicitColumn){e=!0;let t=await this.findTextIndex(o);t&&(n=t.indexHasLower)}else if("auto"===this.useTextIndexForImplicitColumn){let t=await this.enableTextIndexPromise?await this.findTextIndex(o):void 0;t&&"splitByNonAlpha"===f([nS,"call",e=>e(t.index),"optionalAccess",e=>e.type])&&(e=!0,n=t.indexHasLower)}if(e){let e=this.tokenizeTerm(t),r=this.termHasSeparators(t),i=n?`lower(${o})`:o,s=E.chunk.call(void 0,e,50),l=s.map(e=>n?N.default.format("hasAllTokens(?, lower(?))",[N.default.raw(i),e.join(" ")]):N.default.format("hasAllTokens(?, ?)",[N.default.raw(i),e.join(" ")]));return r||s.length>1?`(${a?"NOT (":""}${[...l,N.default.format("(lower(?) LIKE lower(?))",[N.default.raw(o),`%${tU(t)}%`])].join(" AND ")}${a?")":""})`:`(${a?"NOT ":""}${l.join(" AND ")})`}let r=this.termHasSeparators(t),i=await this.findBloomFilterTokensIndex(o);if(i.found){let e=this.isLowerExpression(i.indexExpression)?N.default.format("tokens(lower(?))",[t]):N.default.format("tokens(?)",[t]);return r?`(${a?"NOT (":""}${[`hasAll(${i.indexExpression}, ${e})`,N.default.format("(lower(?) LIKE lower(?))",[N.default.raw(o),`%${tU(t)}%`])].join(" AND ")}${a?")":""})`:`(${a?"NOT ":""}hasAll(${i.indexExpression}, ${e}))`}if(!r)return N.default.format(`(${a?"NOT ":""}hasToken(lower(?), lower(?)))`,[N.default.raw(o),t]);{let e=this.tokenizeTerm(t);return`(${a?"NOT (":""}${[...e.map(e=>N.default.format("hasToken(lower(?), lower(?))",[N.default.raw(o),e])),N.default.format("(lower(?) LIKE lower(?))",[N.default.raw(o),`%${tU(t)}%`])].join(" AND ")}${a?")":""})`}}}return N.default.format(`(${o} ${a?"NOT ":""}? ?${h})`,[N.default.raw("ILIKE"),`%${tU(t)}%`])}async buildColumnExpressionFromField(e){let t=await this.metadata.getColumn({databaseName:this.databaseName,tableName:this.tableName,column:e,connectionId:this.connectionId});if(t){let a={found:!0,columnType:t.type,columnExpression:t.name},n;try{n=await this.metadata.getMaterializedColumnsLookupTable({databaseName:this.databaseName,tableName:this.tableName,connectionId:this.connectionId})}catch(e){console.debug("Error in getMaterializedColumnsLookupTable",e),n=new Map}let r=(()=>{for(let[t,a]of n.entries())if(a===e)return{materializedTarget:t,materializedName:a}})();if(r){let e=tV(r.materializedTarget);e&&(a.mapKeyIndexExpression=`indexHint(${e})`)}return a}let a=await tz({field:e,metadata:this.metadata,databaseName:this.databaseName,tableName:this.tableName,connectionId:this.connectionId});if(a){let t=a.name.split("."),n=e.split(".").slice(t.length).join(".");if(a.type.startsWith("Map")){let e=f([a,"access",e=>e.type,"access",e=>e.match,"call",e=>e(/,\s+(\w+)\)$/),"optionalAccess",e=>e[1]]),t=await g([await this.textIndexInfoLookupPromise,"optionalAccess",async e=>e.get,"call",async e=>e(a.name)]);return{found:!0,columnExpression:N.default.format("??[?]",[a.name,n]),mapKeyIndexExpression:`indexHint(${tV(`${a.name}['${n}']`)})`,columnType:d(e,()=>"Unknown"),mapKey:n,...t?{textIndexInfo:{kv:t.kv,key:t.key}}:{}}}if(a.type.startsWith("JSON"))return{found:!0,columnExpression:"",columnExpressionJSON:{string:N.default.format("toString(??)",[e]),number:N.default.format("dynamicType(??) in (?) and ??",[e,tK,e])},columnType:"JSON"};if("String"===a.type){let e=n.split(".");return{found:!0,columnExpression:N.default.format(`JSONExtractString(??, ${Array(e.length).fill("?").join(",")})`,[a.name,...e]),columnType:"String"}}if(a.type.startsWith("Array"))return{found:!0,columnType:a.type,columnExpression:a.name,arrayMapKeyExpression:n};throw Error("Unsupported column type for prefix match")}return{found:!0,columnExpression:e,columnType:"Unknown"}}isLowerExpression(e){return/\blower\s*\(/i.test(e)}async findTextIndex(e){let t=await this.skipIndicesPromise;if(!t||0===t.length)return;let a=t.find(t=>"text"===t.type&&this.indexCoversColumn(t.expression,e));if(!a)return;let n=tB(a.expression)!==tB(e)&&this.isLowerExpression(a.expression);return{index:a,indexHasLower:n}}async findBloomFilterTokensIndex(e){try{let t=await this.skipIndicesPromise;if(!t||0===t.length)return{found:!1};for(let a of t.filter(e=>"bloom_filter"===e.type)){let t=tf.parseTokensExpression(a.expression);if(t.hasTokens&&this.indexCoversColumn(t.innerExpression,e))return{found:!0,indexExpression:a.expression}}return{found:!1}}catch(e){return console.warn("Failed to fetch skip indices:",e),{found:!1}}}indexCoversColumn(e,t){let a=tB(e),n=tB(t);if(a===n)return!0;let r=a.match(/\w+/g),i=f([n,"access",e=>e.match,"call",e=>e(/\w+/),"optionalAccess",e=>e[0]]);return!!(i&&r&&r.includes(i))}async getColumnForField(e,t){let a=t.implicitColumnExpression||this.implicitColumnExpression||t.bodyExpression||this.bodyExpression;if(e===tP&&!a)throw Error("Can not search bare text without an implicit column set.");let n=e===tP?a:e,r=!t.implicitColumnExpression&&!t.bodyExpression;if(e===tP&&r){let e=a4(n);return{column:e.length>1?`concatWithSeparator(';',${e.join(",")})`:n,columnJSON:void 0,propertyType:"string",found:!0}}let i=await this.buildColumnExpressionFromField(n),{type:s,isArray:o}=tv(i.columnType);return{column:i.columnExpression,columnJSON:f([i,"optionalAccess",e=>e.columnExpressionJSON]),propertyType:d(s,()=>void 0),isArray:o,found:i.found,mapKey:i.mapKey,mapKeyIndexExpression:i.mapKeyIndexExpression,arrayMapKeyExpression:o?i.arrayMapKeyExpression:void 0,kvItemsExpression:f([i,"access",e=>e.textIndexInfo,"optionalAccess",e=>e.kv])&&i.mapKey?{...i.textIndexInfo.kv,mapKey:i.mapKey}:void 0}}};async function t3(e,t,a){let n="-"===e.field[0]?e.field.slice(1):e.field,r="-"===e.field[0],i=e.field===tP;if(tj(e)){let s=tF(e.term);if(i&&"-"===e.prefix&&(r=!0),i||"-"!==e.prefix||(s=e.prefix+tF(e.term)),e.quoted&&!i)return t.eq(n,s,r,a);if(!e.quoted&&"*"===s)return t.isNotNull(n,r,a);if(!e.quoted&&">="===s.substring(0,2))return r?t.lt(n,s.slice(2),a):t.gte(n,s.slice(2),a);if(!e.quoted&&"<="===s.substring(0,2))return r?t.gt(n,s.slice(2),a):t.lte(n,s.slice(2),a);if(!e.quoted&&">"===s[0])return r?t.lte(n,s.slice(1),a):t.gt(n,s.slice(1),a);if(!e.quoted&&"<"===s[0])return r?t.gte(n,s.slice(1),a):t.lt(n,s.slice(1),a);let o=!1,l=!1;return e.quoted||"*"!==s[0]||(o=!0,s=s.slice(1)),e.quoted||"*"!==s[s.length-1]||(l=!0,s=s.slice(0,-1)),t.fieldSearch(n,s,r,o,l,a)}if(tH(e))return t.range(n,e.term_min,e.term_max,r,a,e.inclusive);throw Error(`Unexpected Node type. ${e}`)}function t5(e,t){if(!t.field||!t.parenthesized||t.field===tP)return e;{let a=f([t,"access",e=>e.field,"optionalAccess",e=>e.startsWith,"call",e=>e("-")])?t.field.slice(1):t.field;return{...e,implicitColumnExpression:a,...t9(t)?{isNegatedAndParenthesized:!0}:{}}}}function t9(e){return e.parenthesized&&f([e,"access",e=>e.field,"optionalAccess",e=>e.startsWith,"call",e=>e("-")])}async function t7(e,t,a){if(tj(e)||tH(e))return await t3(e,t,a);if("right"in e&&null!=e.right){let n=t.operator(e.operator,a),r=e.parenthesized,i=t5(a,e);return`${t9(e)?"NOT ":""}${r?"(":""}${"start"in e&&e.start?`${e.start} `:""}${await t7(e.left,t,i)} ${n} ${await t7(e.right,t,i)}${r?")":""}`}if("left"in e&&null!=e.left&&!("right"in e&&null!=e.right)){let n=e.parenthesized,r=t5(a,e);return`${t9(e)?"NOT ":""}${n?"(":""}${null!=e.start?`${e.start} `:""}${await t7(e.left,t,r)}${n?")":""}`}return""}async function t8(e,t){return await t7(e,t,{})}var ae=class{constructor(e,t){this.conditions=[],this.searchQ=e,this.serializer=t}setSerializer(e){return this.serializer=e,this}getSerializer(){return this.serializer}async genSearchQuery(){if(!this.searchQ)return"";let e=tD(this.searchQ);return await t8(e,this.serializer)}and(e){return e&&e.trim()&&this.conditions.push(`(${e})`),this}async build(){let e=await this.genSearchQuery();return this.searchQ&&this.and(e),this.conditions.join(" AND ")}};async function at({query:e,metadata:t,tableConnection:a}){try{let{tableName:n,databaseName:r,connectionId:i}=a,s=tD(e);if(s&&n&&r&&i){let e=new tQ({metadata:t,tableName:n,databaseName:r,connectionId:i});return await t7(s,e,{})}}catch(t){console.warn("Parse failure",e,t)}return`Message containing ${e}`}var aa=["sqlstring","regex","csv","lucene"],an=e=>e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),ar=e=>e.replace(/\\/g,"\\\\").replace(/"/g,'\\"');function ai(e,t){switch(t){case"sqlstring":return 0===e.length?"NULL":e.map(e=>`'${a2(e)}'`).join(", ");case"regex":{if(0===e.length)return".*";let t=e.map(an);return 1===t.length?t[0]:`(${t.join("|")})`}case"csv":return e.join(",");case"lucene":return 0===e.length?'("")':`(${e.map(e=>`"${ar(e)}"`).join(" OR ")})`;default:throw Error(`Unknown variable format '${t}'`)}}var as=["filter","conditionalAll"],ao=e=>as.includes(e),al=RegExp(`^${$.Xa}`),au=RegExp(`^(${$.Xa})(?::([a-zA-Z][a-zA-Z0-9_]*))?$`),ac=["--","#"];function am(e,t){if(ac.some(a=>e.startsWith(a,t))){let a=e.indexOf(`
  675. `,t);return a<0?e.length:a}if(e.startsWith("/*",t)){let a=e.indexOf("*/",t+2);return a<0?e.length:a+2}return t}var ad=e=>void 0!==e&&/[A-Za-z0-9_]/.test(e);function ap(e,t){let a=0,n=!1,r=!1;for(let i=t;i<e.length;i++){let t=e.charAt(i);if('"'===t&&!n&&!a6(e,i)){r=!r;continue}if("'"===t&&!r&&!a6(e,i)){n=!n;continue}if(!(n||r)){if("("===t)a++;else if(")"===t&&0==--a)return i}}return -1}function af(e,t,{onMalformed:a="throw"}={}){let n=[...t].sort((e,t)=>t.length-e.length),r=[],i="",s=()=>{i.length>0&&(r.push({kind:"text",text:i}),i="")},o=!1,l=!1,u=0;for(;u<e.length;){if(!o&&!l){let t=am(e,u);if(t>u){i+=e.slice(u,t),u=t;continue}}if("$"!==e.charAt(u)){let t=e.charAt(u);'"'!==t||o||a6(e,u)?"'"!==t||l||a6(e,u)||(o=!o):l=!l,i+=t,u++;continue}let t=o||l;if(e.startsWith("$__",u)){let o=u+3,l=n.find(t=>e.startsWith(t,o)&&!ad(e.charAt(o+t.length)||void 0));if(null==l){i+="$__",u=o;continue}let c=o+l.length;if("("!==e.charAt(c)){s(),r.push({kind:"macro",name:l,args:[],raw:e.slice(u,c),inStringLiteral:t}),u=c;continue}let m=ap(e,c);if(m<0){if("throw"===a)throw new S.a;i+=e.slice(u,c),u=c;continue}s(),r.push({kind:"macro",name:l,args:a4(e.slice(c+1,m)),raw:e.slice(u,m+1),inStringLiteral:t}),u=m+1;continue}if("{"===e.charAt(u+1)){let a=e.indexOf("}",u+2),n=a>0?e.slice(u+2,a).match(au):null;if(n){s(),r.push({kind:"braced",name:n[1],format:n[2],raw:e.slice(u,a+1),inStringLiteral:t}),u=a+1;continue}i+="$",u++;continue}let c=e.slice(u+1).match(al);if(c){s(),r.push({kind:"bare",name:c[0],raw:`$${c[0]}`,inStringLiteral:t}),u+=1+c[0].length;continue}i+="$",u++}return s(),r}function ag(e,t){return af(e,t.macroNames).map(e=>{if("text"===e.kind)return e.text;if("macro"!==e.kind)return t.expandReference(e);let a=function(e,t){if(ao(e))switch(e){case"filter":return t-1;case"conditionalAll":return 1;default:throw Error("Unexpected macro name in variableNameArgIndex")}}(e.name,e.args.length),n=e.args.map((e,n)=>n===a?e:ag(e,t));return t.expandMacro({...e,args:n})}).join("")}var ah=new Map(Object.entries({sql:{defaultFormat:"sqlstring",escapeRegexForLiteral:e=>a2(e)},lucene:{defaultFormat:"lucene",disableMacros:!0},promql:{defaultFormat:"regex",disableMacros:!0,escapeRegexForLiteral:e=>e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}}));function ay(e){let t=ah.get(e);if(!t)throw Error(`Unknown template language '${e}'.`);return t}var ab=e=>`(1=1 /** no values selected for variable '${e}' */)`;function a_(e){let t=e.trim(),a=t.startsWith("$")?t.slice(1):t;return $.Ya.test(a)?a:void 0}function a$(e,t){let a=t[t.length-1].trim(),n=a.startsWith("$")?a_(a):void 0;if(null!=n)return n;let r=$.Ya.test(a)?a:"name",i="conditionalAll"===e?`$__conditionalAll(<condition>, $${r})`:1===t.length?`$__filter($${r})`:`$__filter(<expression>, $${r})`;throw new(0,S.b)(e,`Macro '$__${e}' requires its variable argument to be written as a reference, as in ${i} \u2014 got '${a}'.`)}function aS(e,t,a){let n=e.variables.find(e=>e.name===a);if(!n){let n=e.variables.map(e=>e.name);throw new(0,S.c)(t,a,n,`Macro '$__${t}' references unknown variable '${a}'. Available variables: ${n.length>0?n.join(", "):"(none)"}.`)}return n}function aA(e,t){if("macro"===e.kind)return"filter"===e.name?function(e,t){if(e.length<1||e.length>2)throw new(0,S.b)("filter",`Macro 'filter' expects 1-2 argument(s), but got ${e.length}`);let a=a$("filter",e),n=aS(t,"filter",a),r;if(2===e.length)r=e[0];else{if(!n.expression)throw new(0,S.b)("filter",`Macro '$__filter($${a})' requires the variable's filter expression, which is not available \u2014 pass it explicitly, e.g. $__filter(<expression>, $${a}).`);r=`toString(${n.expression})`}return 0===n.values.length?ab(a):`(${r} IN (${ai(n.values,"sqlstring")}))`}(e.args,t):function(e,t){if(2!==e.length)throw new(0,S.b)("conditionalAll",`Macro 'conditionalAll' expects 2 argument(s), but got ${e.length}`);let a=a$("conditionalAll",e);return 0===aS(t,"conditionalAll",a).values.length?ab(a):`(${e[0]})`}(e.args,t);let a=t.variables.find(t=>t.name===e.name);if(!a)return e.raw;let n="braced"===e.kind?e.format:void 0;if(null!=n&&!aa.includes(n))throw Error(`Unknown variable format '${n}' in '${e.raw}'. Expected one of: ${aa.join(", ")}.`);let r=ay(t.inputLanguage),i=d(n,()=>r.defaultFormat),s=ai(a.values,i);return"regex"===i&&r.escapeRegexForLiteral?r.escapeRegexForLiteral(s):s}function av(e,t){return"text"===e.kind?e.text:"macro"===e.kind?e.raw:aA(e,t)}function aE(e,t){if("text"===e.kind||"macro"===e.kind)return;let a="braced"===e.kind?e.format:void 0,n=ay(t.inputLanguage);if("lucene"===d(a,()=>n.defaultFormat))return f([t,"access",e=>e.variables,"access",e=>e.find,"call",t=>t(t=>t.name===e.name),"optionalAccess",e=>e.values])}function ax(e,t){return"lucene"===t.inputLanguage?function(e,t){let a;if(!e.some(e=>null!=aE(e,t)))return e.map(e=>av(e,t)).join("");let n="",r=[];for(let t of e){if("text"===t.kind){n+=tO(t.text);continue}let e=`__hdx_sentinel_${r.length}`;r.push({token:t,sentinel:e,offset:n.length}),n+=e}try{a=w.default.parse(n)}catch(a){return e.map(e=>av(e,t)).join("")}let i=new Map;!function e(t,a){if(null!=t){if("termLocation"in t)return void a.set(t.termLocation.start.offset+ +!!t.quoted,t);"left"in t&&(e(t.left,a),"right"in t&&e(t.right,a))}}(a,i);let s="",o=0;for(let e of r){let a=function(e,t,a,n,r){let i=aE(e.token,n);if(null==i)return;let s=a.get(e.offset);if(null==s||s.term!==e.sentinel||!s.quoted||s.field===tP||null==s.fieldLocation)return;let o=s.fieldLocation.start.offset;if(o<r)return;let l=e.offset+e.sentinel.length;if('"'!==t.charAt(l))return;let u=s.field.startsWith("-"),c=tL(u?s.field.slice(1):s.field);if(""===c)return;let m={start:o,end:l+1};return 0===i.length?{...m,text:`${u?"-":""}${c}:("")`}:{...m,text:`${u?"NOT ":""}(${i.map(e=>`${c}:"${ar(e)}"`).join(" OR ")})`}}(e,n,i,t,o);a?(s+=tL(n.slice(o,a.start))+a.text,o=a.end):(s+=tL(n.slice(o,e.offset))+av(e.token,t),o=e.offset+e.sentinel.length)}return s+tL(n.slice(o))}(af(e,as,{onMalformed:"skip"}),t):ay(t.inputLanguage).disableMacros?af(e,as,{onMalformed:"skip"}).map(e=>av(e,t)).join(""):ag(e,{macroNames:as,expandMacro:e=>aA(e,t),expandReference:e=>aA(e,t)})}var aw=(e,t)=>"string"==typeof e?t(e,"sql"):e.map(e=>({...e,valueExpression:t(e.valueExpression,d(e.valueExpressionLanguage,()=>"sql")),...e.aggCondition?{aggCondition:t(e.aggCondition,d(e.aggConditionLanguage,()=>"lucene"))}:{}}));function aN(e,t){let a;return{...e,select:aw(e.select,t),...e.where?{where:t(e.where,d(e.whereLanguage,()=>"sql"))}:{},...e.having?{having:t(e.having,d(e.havingLanguage,()=>"sql"))}:{},...null!=e.groupBy?{groupBy:aw(e.groupBy,t)}:{},...null!=e.orderBy?{orderBy:(a=e.orderBy,"string"==typeof a?t(a,"sql"):a.map(e=>({...e,valueExpression:t(e.valueExpression,"sql")})))}:{}}}function aT(e){let{variables:t}=e;return null==t?e:{...aN(e,(e,a)=>ax(e,{variables:t,inputLanguage:a})),variables:void 0}}function aI(e){let t=[],a=(e,a,n,r)=>{let i=a_(a);if(null!=i)return t.push({name:i,kind:"macro",inStringLiteral:n,guardedBy:r,raw:`$__${e}`}),i},n=(e,r)=>{for(let i of af(e,as,{onMalformed:"skip"}))if("text"!==i.kind){if("macro"!==i.kind){t.push({name:i.name,kind:i.kind,format:"braced"===i.kind?i.format:void 0,inStringLiteral:i.inStringLiteral,guardedBy:r,raw:i.raw});continue}if(ao(i.name))switch(i.name){case"filter":{let[e,t]=i.args;null!=t?n(e,d(a("filter",t,i.inStringLiteral,r),()=>r)):null!=e&&a("filter",e,i.inStringLiteral,r);break}case"conditionalAll":{let[e,t]=i.args,s=null!=t?a("conditionalAll",t,i.inStringLiteral,r):void 0;null!=e&&n(e,d(s,()=>r));break}default:i.name}}};return n(e),t}function ak(e){return[...new Set(e.map(e=>e.raw))].join(", ")}function aC(e,t,{subject:a="SQL",language:n="sql"}={}){let r=[],i=[],s=aI(e);if(null!=t&&aq(e))try{ax(e,{variables:t,inputLanguage:n})}catch(e){e instanceof S.b&&r.push(e.message)}if(0===s.length)return{errors:r,warnings:i};let o=s.filter(e=>"macro"===e.kind),l=s.filter(e=>"macro"!==e.kind);if(null==t)return o.length>0&&r.push(`${a} uses ${ak(o)}, but no variables are available here.`),l.length>0&&i.push(`${a} references ${ak(l)}, but no variables are available here.`),{errors:r,warnings:i};let u=new Set(t.map(e=>e.name)),c=t.length>0?t.map(e=>e.name).join(", "):"(none)",m=l.filter(e=>!u.has(e.name));m.length>0&&i.push(`${a} references unknown variable ${ak(m)}. Available variables: ${c}.`);let p=ay(n);if(p.disableMacros&&o.length>0){let[{name:e}]=o;i.push("promql"===n?`${ak(o)} has no meaning in a PromQL expression \u2014 it is left as written and sent to Prometheus verbatim. Reference the variable directly, as in {<label>=~"$${e}"}.`:`${ak(o)} has no meaning in a Lucene expression \u2014 it is left as written and matched as literal text. Switch this input to SQL, or reference the variable directly, as in <field>:$${e}.`)}let f=l.filter(e=>{let t;return u.has(e.name)&&(null==e.format||(t=e.format,aa.includes(t)))});if("sql"===n){let e=f.filter(e=>"sqlstring"===d(e.format,()=>p.defaultFormat)&&e.inStringLiteral);if(e.length>0){let[{name:t}]=e;r.push(`${ak(e)} is wrapped in quotes, but the default sqlstring format already quotes each value. Did you mean to use $__filter(<expression>, $${t}) or \${${t}:csv} instead?`)}let t=f.filter(e=>"sqlstring"===d(e.format,()=>p.defaultFormat)&&!e.inStringLiteral&&e.guardedBy!==e.name);if(t.length>0){let[{name:e}]=t;i.push(`${ak(t)} has no valid empty-selection value \u2014 it renders as NULL before anything is selected. Prefer $__filter(<expression>, $${e}) or $__conditionalAll(<condition>, $${e}) so the query stays valid when no values are selected.`)}}if("promql"===n){let e=f.filter(e=>"regex"===d(e.format,()=>p.defaultFormat)&&!e.inStringLiteral);if(e.length>0){let[{name:t}]=e;i.push(`${ak(e)} expands to a regular expression, which is only valid inside a quoted matcher value. Wrap it as {<label>=~"$${t}"}, or use \${${t}:csv} to interpolate the values as written.`)}}return{errors:r,warnings:i}}function aR(e){return Array.from(new Set(aI(e).map(e=>e.name)))}function aq(e){return af(e,as,{onMalformed:"skip"}).some(e=>"macro"===e.kind)}function aM(e,t){let a,n=new Set("configType"in e&&"sql"===e.configType?aR(e.sqlTemplate):"configType"in e&&"promql"===e.configType?aR(e.promqlExpression):(a=[],aN(e,e=>(a.push(...aI(e)),e)),a).map(e=>e.name));return t.filter(e=>n.has(e.name))}function aO(e,t,a,n){if(t.length<a||t.length>n){let r=a===n?`${a}`:`${a}-${n}`;throw new(0,S.b)(e,`Macro '${e}' expects ${r} argument(s), but got ${t.length}`)}}var aF=e=>`toDate(fromUnixTimestamp64Milli(${e}))`,aL=e=>`toDateTime(fromUnixTimestamp64Milli(${e}))`,aD=e=>`fromUnixTimestamp64Milli(${e})`,aU=[{name:"fromTime",minArgs:0,maxArgs:0,description:"Start of the selected time range, as a DateTime.",replace:()=>aL(nF("startDateMilliseconds"))},{name:"toTime",minArgs:0,maxArgs:0,description:"End of the selected time range, as a DateTime.",replace:()=>aL(nF("endDateMilliseconds"))},{name:"fromTime_ms",minArgs:0,maxArgs:0,description:"Start of the selected time range, as a millisecond-precision DateTime64.",replace:()=>aD(nF("startDateMilliseconds"))},{name:"toTime_ms",minArgs:0,maxArgs:0,description:"End of the selected time range, as a millisecond-precision DateTime64.",replace:()=>aD(nF("endDateMilliseconds"))},{name:"timeFilter",minArgs:1,maxArgs:1,description:"Filters the given DateTime column to the selected time range (inclusive of both ends).",replace:e=>{aO("timeFilter",e,1,1);let[t]=e;return`${t} >= ${aL(nF("startDateMilliseconds"))} AND ${t} <= ${aL(nF("endDateMilliseconds"))}`}},{name:"timeFilter_ms",minArgs:1,maxArgs:1,description:"Filters the given millisecond-precision DateTime64 column to the selected time range.",replace:e=>{aO("timeFilter_ms",e,1,1);let[t]=e;return`${t} >= ${aD(nF("startDateMilliseconds"))} AND ${t} <= ${aD(nF("endDateMilliseconds"))}`}},{name:"dateFilter",minArgs:1,maxArgs:1,description:"Filters the given Date column to the selected time range.",replace:e=>{aO("dateFilter",e,1,1);let[t]=e;return`${t} >= ${aF(nF("startDateMilliseconds"))} AND ${t} <= ${aF(nF("endDateMilliseconds"))}`}},{name:"dateTimeFilter",minArgs:2,maxArgs:2,description:"Filters the given Date and DateTime columns to the selected time range, for tables partitioned on a date.",replace:e=>{aO("dateTimeFilter",e,2,2);let[t,a]=e,n=`(${t} >= ${aF(nF("startDateMilliseconds"))} AND ${t} <= ${aF(nF("endDateMilliseconds"))})`,r=`(${a} >= ${aL(nF("startDateMilliseconds"))} AND ${a} <= ${aL(nF("endDateMilliseconds"))})`;return`${n} AND ${r}`}},{name:"dt",minArgs:2,maxArgs:2,description:"Short alias for $__dateTimeFilter(dateCol, timeCol).",replace:e=>{aO("dt",e,2,2);let[t,a]=e,n=`(${t} >= ${aF(nF("startDateMilliseconds"))} AND ${t} <= ${aF(nF("endDateMilliseconds"))})`,r=`(${a} >= ${aL(nF("startDateMilliseconds"))} AND ${a} <= ${aL(nF("endDateMilliseconds"))})`;return`${n} AND ${r}`}},{name:"timeInterval",minArgs:1,maxArgs:1,description:"Buckets the provided DateTime column to the chart granularity, for the time axis of a time-series chart.",replace:e=>{aO("timeInterval",e,1,1);let[t]=e;return`toStartOfInterval(toDateTime(${t}), INTERVAL ${nF("intervalSeconds")} second)`}},{name:"timeInterval_ms",minArgs:1,maxArgs:1,description:"Buckets the provided millisecond-precision column to the chart granularity.",replace:e=>{aO("timeInterval_ms",e,1,1);let[t]=e;return`toStartOfInterval(toDateTime64(${t}, 3), INTERVAL ${nF("intervalMilliseconds")} millisecond)`}},{name:"interval_s",minArgs:0,maxArgs:0,description:"The chart granularity, in seconds.",replace:()=>nF("intervalSeconds")}],aV="Applies all broadcasted dashboard filters to this tile, as a single predicate. Expands to 1=1 when none apply. Requires a source selection for the tile.",aW="The selected source's table, fully qualified. Requires a source selection for the tile.",aB=t.Ja=[...aU.map(({name:e,minArgs:t,maxArgs:a,description:n})=>({name:e,minArgs:t,maxArgs:a,description:n})),{name:"filters",minArgs:0,maxArgs:0,description:aV},{name:"sourceTable",minArgs:0,maxArgs:1,description:aW},...Object.values($.a).map(e=>({name:`sourceTable(${e})`,minArgs:0,maxArgs:0,description:`The selected metrics source's ${e} table, fully qualified.`}))],aP=t.Ka=[{name:"filter",minArgs:1,maxArgs:2,description:"$__filter(<expression>, $<variable>) — matches the expression against the variable's selected values. Expands to 1=1 when nothing is selected, so the query stays valid. The recommended way to use a variable in SQL."},{name:"conditionalAll",minArgs:2,maxArgs:2,description:"$__conditionalAll(<condition>, $<variable>) — applies the condition only while the variable has a selection, and expands to 1=1 otherwise. Use it for operators IN cannot express, such as NOT IN or LIKE."}],aj=t.La=["filters","sourceTable"],aH=t.Ma=["timeFilter","timeFilter_ms","dateFilter","dateTimeFilter","dt","fromTime","toTime","fromTime_ms","toTime_ms"],aK=t.Na=["timeInterval","timeInterval_ms","interval_s"];function az(e,t){return aZ(e,t).length>0}function aQ(e){try{return!az(e,"filters")&&!aq(e)}catch(e){return e instanceof S.a||console.log("unexpected error in isMissingFiltersMacro",e),!1}}function aG(e){return aj.filter(t=>az(e,t))}function aY(e){return aZ(e,"sourceTable").map(e=>e.args.length)}function aZ(e,t){let a=RegExp(`\\$__${t}\\b`,"g"),n=[];for(let t of e.matchAll(a)){let a=t.index,r=a+t[0].length,{args:i,length:s}=function(e){if(!e.startsWith("("))return{args:[],length:0};let t=ap(e,0);return t<0?{args:[],length:-1}:{args:a4(e.slice(1,t)),length:t+1}}(e.slice(r));if(s<0)throw new S.a;n.push({full:e.slice(a,r+s),args:i})}return n}function aJ(e,t){let{from:a,metricTables:n,variables:r}=e,i=new Map([...aU,{name:"filters",minArgs:0,maxArgs:0,description:aV,replace:()=>t||"(1=1 /** no filters applied */)"},{name:"sourceTable",minArgs:0,maxArgs:1,description:aW,replace:e=>{if(aO("sourceTable",e,0,1),!a)throw new(0,S.b)("sourceTable","Macro '$__sourceTable' requires a source to be selected");if(0===e.length&&n)throw new(0,S.b)("sourceTable","Macro '$__sourceTable(metricType)' requires a metricType when a metrics source is selected");if(0===e.length&&!a.tableName)throw new(0,S.b)("sourceTable","Macro '$__sourceTable' requires a source with a table to be selected when no arguments are provided");if(0===e.length)return`\`${a.databaseName}\`.\`${a.tableName}\``;if(!n)throw new(0,S.b)("sourceTable","Macro '$__sourceTable(metricType)' with a metric type argument requires a metrics source to be selected");let t=$.b.safeParse(e[0]);if(!t.success)throw new(0,S.b)("sourceTable",`Macro '$__sourceTable(metricType)' invalid argument '${e[0]}'. Expected a valid metrics data type (${Object.values($.a).join(", ")}).`);let r=t.data,i=n[r];if(!i)throw new(0,S.b)("sourceTable",`Macro '$__sourceTable(metricType)': No table configured for metric type '${r}'.`);return`\`${a.databaseName}\`.\`${i}\``}}].map(e=>[e.name,e])),s=r&&{variables:r,inputLanguage:"sql"},o=[...i.keys(),...s?as:[]];return ag(e.sqlTemplate,{macroNames:o,expandMacro:e=>{let t=i.get(e.name);return t?t.replace(e.args):aA(e,s)},expandReference:e=>s?aA(e,s):e.raw})}function aX(e){return null!=e&&Number.isInteger(e)&&e>0}var a0="u">typeof window&&"u">typeof window.document,a1=t.Wa="u">typeof u&&null!=u.versions&&null!=u.versions.node,a2=e=>e.replace(/\\/g,"\\\\").replace(/'/g,"''");function a6(e,t){let a=0;for(let n=t-1;n>=0&&"\\"===e[n];n--)a++;return a%2==1}function a4(e){let t=0,a=0,n=!1,r=!1,i=[],s="";for(let o=0;o<=e.length;o++){let l=o===e.length?",":e[o];if('"'===l&&!n&&!a6(e,o)){r=!r,s+=l;continue}if("'"===l&&!r&&!a6(e,o)){n=!n,s+=l;continue}if(!n&&!r&&("("===l?t++:")"===l?t--:"["===l?a++:"]"===l&&a--),","!==l||0!==t||0!==a||n||r)s+=l;else{let e=s.trim();e&&i.push(e),s=""}}return i}function a3(e){return a4(e)[0]}function a5(e){if(!e)return null;let t=e.replace(/^Nullable\((.*)\)$/i,"$1").trim();if(/^Date(?:32)?$/i.test(t))return{kind:"date",precision:-1};if(/^DateTime$/i.test(t)||/^DateTime\('[^']*'\)$/i.test(t))return{kind:"datetime",precision:0};let a=t.match(/^DateTime64\(\s*(\d+)\s*(?:,[^)]*)?\)$/i);return a?{kind:"datetime64",precision:parseInt(a[1],10)}:null}async function a9({timestampValueExpression:e,metadata:t,databaseName:a,tableName:n,connectionId:r}){let i=a4(e);if(i.length<=1)return d(i[0],()=>e);if(!a||!n)return i[0];let s=[];for(let e of i){let i;try{i=await t.getColumn({databaseName:a,tableName:n,column:e,connectionId:r})}catch(e){continue}let o=a5(f([i,"optionalAccess",e=>e.type]));o&&"date"!==o.kind&&s.push({token:e,...o})}return 0===s.length?(console.warn(`pickBucketTimestampColumn: no DateTime/DateTime64 column found in "${e}"; falling back to the first token. Buckets may collapse if the column is Date-typed.`),i[0]):(s.sort((e,t)=>t.precision-e.precision),s[0].token)}var a7=e=>{if(!e.includes("."))return!1;let t=!1,a=!1,n=!1,r=[],i="";for(let s of e)if("'"!==s||t||a){if(n)continue;'"'!==s||a?"`"!==s||t?"."!==s||t||a?i+=s:(r.push(i),i=""):(a=!a,i+=s):(t=!t,i+=s)}else n=!n;return t||a||r.push(i),!r.some(e=>0===e.trim().length)&&r.filter(e=>e.trim().length>0&&isNaN(Number(e))&&!(e.startsWith("'")&&e.endsWith("'"))).length>1};function a8(e){let t=[],a=!1,n=!1,r="",i=(e,a)=>{a7(e)&&t.push({index:a-e.length,expr:e}),r=""},s=0,o=!1;for(;s<e.length;){let t=e.charAt(s);if("'"!==t||a||n)'"'!==t||n?"`"!==t||a?/[\s{},+*/[\]]/.test(t)?(o=!1,i(r,s)):"()".includes(t)&&!o?i(r,s):(":"===t&&(o=!0),r+=t):(n=!n,r+=t):(a=!a,r+=t);else{for(;s<e.length&&e.charAt(s)!==t;)s++;r=""}s++}return i(r,s),t}function ne(e){let t=a8(e),a=new Map,n=e,r=0,i=0;for(let{expr:e,index:s}of t){let t=`__hdx_json_replacement_${i++}`;a.set(t,e);let o=s+r;n=n.slice(0,o)+t+n.slice(o+e.length),r+=t.length-e.length}return{sqlWithReplacements:n,replacements:a}}var nt=((r=nt||{}).FifteenSecond="15 second",r.ThirtySecond="30 second",r.OneMinute="1 minute",r.FiveMinute="5 minute",r.TenMinute="10 minute",r.FifteenMinute="15 minute",r.ThirtyMinute="30 minute",r.OneHour="1 hour",r.TwoHour="2 hour",r.SixHour="6 hour",r.TwelveHour="12 hour",r.OneDay="1 day",r.TwoDay="2 day",r.SevenDay="7 day",r.ThirtyDay="30 day",r);function na(e){let t=0,a;if(0===e.length)return t;for(a=0;a<e.length;a++)t=(t<<5)-t+e.charCodeAt(a)|0;return t}function nn(e,t=60){let a=e[0].getTime(),n=Math.ceil(Math.floor((e[1].getTime()-a)/1e3)/t);return n<=15?"15 second":n<=30?"30 second":n<=60?"1 minute":n<=300?"5 minute":n<=900?"15 minute":n<=1800?"30 minute":n<=3600?"1 hour":n<=7200?"2 hour":n<=21600?"6 hour":n<=43200?"12 hour":n<=86400?"1 day":n<=172800?"2 day":n<=604800?"7 day":"30 day"}function nr(e){let[t,a]=e.split(" "),n=Number.parseInt(t);switch(a){case"second":return n;case"minute":return 60*n;case"hour":return 60*n*60;case"day":return 60*n*1440;default:return 0}}function ni(e,t){let[a,n]=t.split(" "),r=Number.parseInt(a),i=Math.floor;switch(n){case"second":return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),i(e.getUTCSeconds()/r)*r));case"minute":return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),i(e.getUTCMinutes()/r)*r));case"hour":return new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),i(e.getUTCHours()/r)*r));case"day":return new Date(1e3*(i(e.getTime()/1e3/60/60/24/r)*r)*86400);default:return e}}var ns=e=>{let t=null,a=null;try{return t=e(),[a,t]}catch(e){return[a=e,t]}},no=t.mb=e=>{let[t,a]=ns(()=>JSON.parse(e));return a},nl={normal:{"12h":"MMM d h:mm:ss a","24h":"MMM d HH:mm:ss"},short:{"12h":"MMM d h:mma","24h":"MMM d HH:mm"},withMs:{"12h":"MMM d h:mm:ss.SSS a","24h":"MMM d HH:mm:ss.SSS"},withYear:{"12h":"MMM d yyyy h:mm:ss a","24h":"MMM d yyyy HH:mm:ss"},time:{"12h":"h:mm:ss a","24h":"HH:mm:ss"}},nu=t.nb=(e,{isUTC:t=!1,format:a="normal",clock:n="12h"})=>{let r=nl[a][n];return t?v.formatInTimeZone.call(void 0,e,"Etc/UTC",r):A.format.call(void 0,e,r)};function nc(e){return null!=e&&("string"==typeof e?e.trim().length>0:e.length>0)}var nm=e=>{if(!(!e||0===e.length))return"string"==typeof e?a4(e)[0]:e[0]},nd=t.vb=e=>{let t=e.trim().toUpperCase();return t.endsWith("DESC")?e.slice(0,t.lastIndexOf("DESC")).trim():t.endsWith("ASC")?e.slice(0,t.lastIndexOf("ASC")).trim():e},np=t.wb=e=>{let t=nm(e.orderBy);if(!t||null==e.timestampValueExpression)return!1;let a="string"==typeof t?nd(t):t.valueExpression;return a4(e.timestampValueExpression).some(e=>a.includes(e))},nf=t.xb=e=>{let t=nm(e);return!!t&&!("string"==typeof t?t.trim().toUpperCase().endsWith("DESC"):"DESC"===t.ordering)};function ng(e){if(1!==a4(e).length)return;let t=e.match(/(toStartOf\w+)\s*\(/);if(t){if(""!==e.substring(0,t.index).trim())return;let[a,n]=t,r=e.indexOf(a)+a.length,i=e.lastIndexOf(")"),s=a4(e.substring(r,i)),o=s[0];if(null==o)return void console.error(`Failed to parse column argument from ${e}`);let l=s.length>1?`, ${s.slice(1).join(", ")}`:"";return{function:n.trim(),columnArgument:o,formattedRemainingArgs:l}}}function nh(e,t){if(!t||!e)return e;let a=[e];for(let n of a4(t)){let t=ng(n);if(n===e.trim()||n.startsWith("toUnixTimestamp")&&n.includes(e)||n.startsWith("toDateTime")&&n.includes(e))break;t&&t.columnArgument===e.trim()&&a.push(n)}return a.join(", ")}function ny([e,t],a){let n=ni(e,a),r=ni(t,a);if(r.getTime()<t.getTime()){let e=nr(a);r=A.add.call(void 0,r,{seconds:e})}return[n,r]}function nb(e){let t=e.trim().endsWith(";")?e.trim().slice(0,-1):e.trim(),a=t.toUpperCase().indexOf("SETTINGS");if(-1===a)return[t,void 0];let n=t.substring(a).trim();return[t.substring(0,a).trim(),n]}function n_(e){let t=e.trim();if(""===t)return;let a=Number(t);return Number.isFinite(a)?a:void 0}function n$(e){return f([e,"optionalAccess",e=>e.length])?e.filter(({setting:e,value:t})=>e.length&&t.length).map(({setting:e,value:t})=>`${e} = ${d(n_(t),()=>`'${t}'`)}`).join(", "):void 0}function nS({typeFull:e}){let t=e.match(/^\s*text\s*\((.+)\)\s*$/);if(!t)return void console.error(`Invalid text index type ${e}.`);let a=t[1].trim(),n=nA(d(f([a4,"call",e=>e(a),"access",e=>e.map,"call",e=>e(e=>{let[t,a]=e.split("=").map(e=>e.trim());return{key:t,value:a}}),"access",e=>e.find,"call",e=>e(e=>"tokenizer"===e.key),"optionalAccess",e=>e.value]),()=>""));if(!n)return void console.error(`Invalid tokenizer argument in index type ${e}: ${n}`,a,a4(a));let r=n.split("(")[0].trim(),i=n.substring(n.indexOf("(")+1,n.lastIndexOf(")")).trim();switch(r){case"splitByNonAlpha":return{type:"splitByNonAlpha"};case"array":return{type:"array"};case"ngrams":return i?{type:"ngrams",n:Number.parseInt(i,10)}:{type:"ngrams",n:3};case"sparseGrams":{let e=i.split(",").map(e=>e.trim()).filter(e=>!!e),t={type:"sparseGrams",minLength:3,maxLength:10};return e.length>=1&&(t.minLength=Number.parseInt(e[0],10)),e.length>=2&&(t.maxLength=Number.parseInt(e[1],10)),e.length>=3&&(t.minCutoffLength=Number.parseInt(e[2],10)),t}case"splitByString":{if(!i)return{type:"splitByString",separators:[" "]};let e=e=>{for(let{pattern:t,replacement:a}of[{pattern:/\\a/g,replacement:"a"},{pattern:/\\b/g,replacement:"b"},{pattern:/\\e/g,replacement:"e"},{pattern:/\\f/g,replacement:"\f"},{pattern:/\\n/g,replacement:`
  676. `},{pattern:/\\r/g,replacement:"\r"},{pattern:/\\t/g,replacement:" "},{pattern:/\\v/g,replacement:"\v"},{pattern:/\\0/g,replacement:"\0"},{pattern:/\\\\/g,replacement:"\\"},{pattern:/\\'/g,replacement:"'"},{pattern:/\\"/g,replacement:'"'},{pattern:/\\`/g,replacement:"`"},{pattern:/\\\//g,replacement:"/"},{pattern:/\\=/g,replacement:"="}])e=e.replace(t,a);return e},t=i.match(/\[(.*)\]/);if(!t)return{type:"splitByString",separators:[" "]};let a=t[1],n=[],r="",s=!1,o="";for(let t=0;t<a.length;t++){let i=a[t];if("'"!==i&&'"'!==i||s){if(i===o&&s)("\\"!==a[t-1]||"\\"===a[t-2])&&(s=!1,o="");else if(","===i&&!s){let t=r.trim();if(t){let a=e(t.replace(/^['"]|['"]$/g,""));n.push(a)}r="";continue}}else s=!0,o=i;r+=i}let l=r.trim();if(l){let t=e(l.replace(/^['"]|['"]$/g,""));n.push(t)}return{type:"splitByString",separators:n}}default:console.error(`Unknown tokenizer ${r} in type ${e}.`);return}}var nA=e=>e.replace(/^["'`]|["'`]$/g,"");function nv(e){let t=a4(d(f([e,"access",e=>e.engine_full,"access",e=>e.match,"call",e=>e(/Distributed\((.+)\)$/),"optionalAccess",e=>e[1]]),()=>""));return t.length<3?void console.error(`Failed to parse engine arguments for Distributed table: ${e.engine_full}`):{cluster:nA(t[0]),database:nA(t[1]),table:nA(t[2])}}function nE(e){return"line"===e||"stacked_bar"===e||"number"===e}var nx=t.Lb=e=>"metric"===e||"log"===e||"trace"===e;function nw(e){try{return{sql:aJ(e)}}catch(e){return{error:e instanceof Error?e:Error(String(e))}}}function nN(e,t){return{isTimeSeries:nT(e.displayType),hasInterval:t.includes(nC.intervalMilliseconds.name)||t.includes(nC.intervalSeconds.name),hasTimeFilter:t.includes(nC.startDateMilliseconds.name)&&t.includes(nC.endDateMilliseconds.name)}}var nT=e=>"line"===e||"stacked_bar"===e,nI=e=>{let t=d(e.granularity,()=>"auto");return nr("auto"===t&&e.dateRange?nn(e.dateRange):t)},nk=((i=nk||{}).startDateMilliseconds="startDateMilliseconds",i.endDateMilliseconds="endDateMilliseconds",i.intervalSeconds="intervalSeconds",i.intervalMilliseconds="intervalMilliseconds",t.a=i),nC=t.b={startDateMilliseconds:{name:"startDateMilliseconds",type:"Int64",description:"start of the dashboard date range, in milliseconds since epoch",get:e=>e.dateRange?e.dateRange[0].getTime():void 0},endDateMilliseconds:{name:"endDateMilliseconds",type:"Int64",description:"end of the dashboard date range, in milliseconds since epoch",get:e=>e.dateRange?e.dateRange[1].getTime():void 0},intervalSeconds:{name:"intervalSeconds",type:"Int64",description:"time bucket size in seconds",get:nI},intervalMilliseconds:{name:"intervalMilliseconds",type:"Int64",description:"time bucket size in milliseconds",get:e=>1e3*nI(e)}},nR=t.c={line:[nC.startDateMilliseconds,nC.endDateMilliseconds,nC.intervalSeconds,nC.intervalMilliseconds],stacked_bar:[nC.startDateMilliseconds,nC.endDateMilliseconds,nC.intervalSeconds,nC.intervalMilliseconds],table:[nC.startDateMilliseconds,nC.endDateMilliseconds],pie:[nC.startDateMilliseconds,nC.endDateMilliseconds],bar:[nC.startDateMilliseconds,nC.endDateMilliseconds],number:[nC.startDateMilliseconds,nC.endDateMilliseconds],search:[],heatmap:[],markdown:[],event_patterns:[]},nq=`SELECT
  677. toStartOfInterval(TimestampTime, INTERVAL {intervalSeconds:Int64} second) AS ts, -- (Timestamp column)
  678. ServiceName, -- (Group name column)
  679. count() -- (Series value column)
  680. FROM $__sourceTable
  681. WHERE TimestampTime >= fromUnixTimestamp64Milli ({startDateMilliseconds:Int64})
  682. AND TimestampTime < fromUnixTimestamp64Milli ({endDateMilliseconds:Int64})
  683. AND $__filters
  684. GROUP BY ServiceName, ts`,nM=t.d=`WHERE TimestampTime >= fromUnixTimestamp64Milli ({startDateMilliseconds:Int64})
  685. AND TimestampTime <= fromUnixTimestamp64Milli ({endDateMilliseconds:Int64})
  686. AND $__filters`,nO=t.e={line:nq,stacked_bar:nq,table:nM,pie:nM,bar:nM,number:nM,search:"",heatmap:"",markdown:"",event_patterns:""};function nF(e){return`{${nC[e].name}:${nC[e].type}}`}t.a=nk,t.b=nC,t.c=nR,t.d=nM,t.e=nO,t.f=nF,t.g=q,t.h=U,t.i=B,t.j=K,t.k=z,t.l=Q,t.m=G,t.n=Y,t.o=Z,t.p=function(e){return{...e,operator:ea[e.operator]}},t.q=en,t.r=eo,t.s=eu,t.t=ep,t.u=eN,t.v=eI,t.w=function(e){for(let{fn:t,argsInner:a}of function(e){let t=[],a=e.length,n=0,r=(t,n)=>{let r=t+1;for(;r<a;){let t=e[r];if("\\"===t&&r+1<a){r+=2;continue}if(t===n)return r+1;r++}return a};for(;n<a;){let i=e[n];if("'"===i||'"'===i||"`"===i){n=r(n,i);continue}if(!(0===n||!eQ(e[n-1]))||!eQ(i)){n++;continue}let s=n;for(;s<a&&eQ(e[s]);)s++;let o=e.substring(n,s);if(!o.startsWith("toStartOf")){n=s;continue}let l=s;for(;l<a&&eG(e[l]);)l++;if("("!==e[l]){n=s;continue}let u=l+1,c=1,m=u;for(;m<a&&c>0;){let t=e[m];if("'"===t||'"'===t||"`"===t){m=r(m,t);continue}if("("===t)c++;else if(")"===t&&0==--c)break;m++}if(0!==c)break;t.push({fn:o,argsInner:e.substring(u,m)}),n=m+1}return t}(e)){if(t in eK)return eK[t];if("toStartOfInterval"===t){let e=a4(a);if(e.length<2)continue;let t=function(e){let t=[],a="";for(let n of e)eG(n)?(a&&t.push(a),a=""):a+=n;if(a&&t.push(a),t.length<3||"INTERVAL"!==t[0].toUpperCase())return;let n=Number.parseInt(t[1],10);if(!Number.isFinite(n)||n<=0||String(n)!==t[1])return;let r=t[2].toLowerCase();if(r.endsWith("s")&&(r=r.slice(0,-1)),ez.has(r))return`${n} ${r}`}(e[1]);if(t)return t}}},t.x=eY,t.y=eZ,t.z=e3,t.A=e9,t.B=e8,t.C=te,t.D=ta,t.E=tn,t.F=3e6,t.G=tr,t.H=tp,t.I=tf,t.J=tg,t.K=function(e){return{databaseName:d(f([e,"optionalAccess",e=>e.from,"optionalAccess",e=>e.databaseName]),()=>""),tableName:d(f([e,"optionalAccess",e=>e.from,"optionalAccess",e=>e.tableName]),()=>""),connectionId:d(f([e,"optionalAccess",e=>e.connection]),()=>"")}},t.L=function(e){return{databaseName:d(f([e,"optionalAccess",e=>e.from,"optionalAccess",e=>e.databaseName]),()=>""),tableName:d(f([e,"optionalAccess",e=>e.from,"optionalAccess",e=>e.tableName]),()=>""),connectionId:d(f([e,"optionalAccess",e=>e.connection]),()=>""),metadataMVs:e&&($.ub.call(void 0,e)||$.vb.call(void 0,e))?e.metadataMaterializedViews:void 0}},t.M=ty,t.N=tb,t.O=t_,t.P=t$,t.Q=tS,t.R=tA,t.S=tv,t.T=tx,t.U=tw,t.V=tN,t.W=tT,t.X=function(e){let t=e instanceof Error?e.message:String(d(e,()=>""));return/Unknown (expression|identifier)|UNKNOWN_IDENTIFIER|Missing columns|NO_SUCH_COLUMN_IN_TABLE|There is no column|cannot be resolved/i.test(t)},t.Y=e=>{let t=new I.Parser,a=a4(e);return f([a,"optionalAccess",e=>e.length])?a.flatMap(e=>{try{let a=/\b[a-zA-Z0-9_]+\[([0-9]+|'[^']*')\]/g,n=e.match(a)||[],r=e.replace(a,"''").replace(/\.:[a-zA-Z0-9]+/g,""),i=/\b[a-zA-Z0-9_]+\.[a-zA-Z0-9_.]+/g,s=r.match(i)||[],o=r.replace(i,"''"),l=t.columnList(`select ${o}`).map(e=>e.split("::")[2]);return[...new Set([...l,...s,...n])]}catch(t){return console.error("Error parsing column references from key",t,e),[]}}):[]},t.Z=tI,t._=tk,t.$=tC,t.aa=function(e){if(null==e||!e.sql)return{};try{let t=tC(e),[a]=nb(t),{sqlWithReplacements:n,replacements:r}=ne(a);try{return tR(n,r)}catch(t){let e=function(e){let t=0,a=!1,n=!1,r=!1,i=-1,s=e=>null!=e&&/[A-Za-z0-9_]/.test(e),o=(t,a)=>e.slice(t,t+a.length).toUpperCase()===a&&!s(e[t-1])&&!s(e[t+a.length]);for(let s=0;s<e.length;s++){let l=e[s];if(a){"'"===l&&(a=!1);continue}if(n){'"'===l&&(n=!1);continue}if(r){"`"===l&&(r=!1);continue}if("-"===l&&"-"===e[s+1]){let t=e.indexOf(`
  687. `,s+2);if(-1===t)break;s=t;continue}if("/"===l&&"*"===e[s+1]){let t=e.indexOf("*/",s+2);if(-1===t)break;s=t+1;continue}if("'"===l){a=!0;continue}if('"'===l){n=!0;continue}if("`"===l){r=!0;continue}if("("===l){t++;continue}if(")"===l){t--;continue}if(0===t){if(-1===i)o(s,"SELECT")&&(s=(i=s+6)-1);else if(o(s,"FROM"))return e.slice(i,s).trim()}}return null}(n);if(null==e)throw t;return tR(`SELECT ${e} FROM __hdx_alias_src`,r)}}catch(t){console.error("Error parsing alias map with JSON removed",t,"for query",e)}return{}},t.ba=tq,t.ca=function(e){return f([tq,"call",t=>t(e,["date"]),"optionalAccess",e=>e[0]])},t.da=function(e){return tq(e,["number"])},t.ea=tO,t.fa=tL,t.ga=tD,t.ha=tP,t.ia=tG,t.ja=tX,t.ka=t0,t.la=t2,t.ma=t6,t.na=t4,t.oa=t8,t.pa=ae,t.qa=at,t.ra=aa,t.sa=ai,t.ta=as,t.ua=am,t.va=ap,t.wa=af,t.xa=ag,t.ya=aA,t.za=ax,t.Aa=aN,t.Ba=aT,t.Ca=function(e){let{variables:t}=e;return null==t?e:{...e,promqlExpression:ax(e.promqlExpression,{variables:t,inputLanguage:"promql"}),variables:void 0}},t.Da=aI,t.Ea=aC,t.Fa=aR,t.Ga=aq,t.Ha=aM,t.Ia=function(e,t){if(!f([t,"optionalAccess",e=>e.length]))return;let a=aM(e,t);return 0===a.length?void 0:`This tile references ${a.map(e=>`$${e.name}`).join(", ")}. Alerts run with every dashboard variable in its empty state, not the values selected here.`},t.Ja=aB,t.Ka=aP,t.La=aj,t.Ma=aH,t.Na=aK,t.Oa=az,t.Pa=aQ,t.Qa=aG,t.Ra=aY,t.Sa=aJ,t.Ta=60,t.Ua=aX,t.Va=a0,t.Wa=a1,t.Xa=function(e){return e.split(",").map(e=>e.trim()).filter(e=>e.length>0)},t.Ya=a2,t.Za=a6,t._a=a4,t.$a=a3,t.ab=a5,t.bb=a9,t.cb=a7,t.db=a8,t.eb=ne,t.fb=nt,t.gb=na,t.hb=nn,t.ib=nr,t.jb=ni,t.kb=function(e,t,a){let n=[],r=ni(e,a),i=nr(a);for(;r<t;)n.push(r),r=A.add.call(void 0,r,{seconds:i});return n},t.lb=ns,t.mb=no,t.nb=nu,t.ob=function(e,t,a=[],n=[]){let r={version:"0.1.0",name:e.name,tags:e.tags.length>0?e.tags:void 0,tiles:[]},i=(e,a,r)=>{let i=$.Qa.strip().parse(structuredClone(e)),s=i.config;return _.h.call(void 0,s)?s.source=d(a.find(e=>e.id===s.source),()=>({name:""})).name:_.f.call(void 0,s)&&(s.connection=d(r.find(e=>e.id===s.connection),()=>({name:""})).name,s.source&&(s.source=d(f([a,"access",e=>e.find,"call",e=>e(e=>e.id===s.source),"optionalAccess",e=>e.name]),()=>""))),(e=>{let a=e.onClick;if(!a||"external"===a.type||"id"!==a.target.mode)return;let r=a.target.id,i="search"===a.type?f([t,"access",e=>e.find,"call",e=>e(e=>e.id===r),"optionalAccess",e=>e.name]):f([n,"access",e=>e.find,"call",e=>e(e=>e.id===r),"optionalAccess",e=>e.name]);null==i||""===i?delete e.onClick:e.onClick={...a,target:{mode:"id",id:i}}})(s),i},s=(e,t)=>{let a=$._a.strip().parse(structuredClone(e));if(a.source=d(f([t,"access",e=>e.find,"call",t=>t(t=>t.id===e.source),"optionalAccess",e=>e.name]),()=>""),f([e,"access",e=>e.appliesToSourceIds,"optionalAccess",e=>e.length])){let n=e.appliesToSourceIds.map(e=>f([t,"access",e=>e.find,"call",t=>t(t=>t.id===e),"optionalAccess",e=>e.name])).filter(e=>!!e&&e.length>0);a.appliesToSourceIds=n.length>0?n:void 0}else a.appliesToSourceIds=void 0;return a};for(let n of e.tiles)r.tiles.push(i(n,t,a));if(e.filters)for(let a of(r.filters=[],d(e.filters,()=>[])))r.filters.push(s(a,t));return e.containers&&(r.containers=structuredClone(e.containers)),null!=e.savedQuery&&(r.savedQuery=e.savedQuery,r.savedQueryLanguage=d(e.savedQueryLanguage,()=>null)),e.savedFilterValues&&e.savedFilterValues.length>0&&(r.savedFilterValues=structuredClone(e.savedFilterValues)),r},t.pb=function(e){let t={name:e.name,tiles:[],tags:d(e.tags,()=>[])},a=e=>structuredClone(e),n=e=>structuredClone(e);for(let n of e.tiles)t.tiles.push(a(n));if(e.filters)for(let a of(t.filters=[],e.filters))t.filters.push(n(a));return e.containers&&(t.containers=structuredClone(e.containers)),null!=e.savedQuery&&(t.savedQuery=e.savedQuery,t.savedQueryLanguage=d(e.savedQueryLanguage,()=>null)),e.savedFilterValues&&e.savedFilterValues.length>0&&(t.savedFilterValues=structuredClone(e.savedFilterValues)),t},t.qb=nc,t.rb=function(e){let t=structuredClone(E.omit.call(void 0,e,["granularity"]));if(aX(t.seriesLimit)&&null==f([t,"access",e=>e.limit,"optionalAccess",e=>e.limit])&&(t.limit={limit:t.seriesLimit}),delete t.seriesLimit,!nc(t.orderBy)&&null!=f([t,"access",e=>e.limit,"optionalAccess",e=>e.limit])&&Array.isArray(t.select)&&t.select.length>0&&"string"==typeof t.groupBy){let e=t.select[0];f([e,"access",e=>e.alias,"optionalAccess",e=>e.trim,"call",e=>e()])||(e.alias="Value"),t.orderBy=[{valueExpression:`"${e.alias.trim().replace(/"/g,'""')}"`,ordering:"DESC"},...f([t,"access",e=>e.groupBy,"optionalAccess",e=>e.trim,"call",e=>e()])?[{valueExpression:t.groupBy,ordering:"ASC"}]:[]]}return t},t.sb=function(e){let t=E.omit.call(void 0,e,["granularity","groupBy"]);return f([e,"access",e=>e.formulas,"optionalAccess",e=>e.length])?{...t,showOperandSeries:!1}:t},t.tb=function(e){let t=structuredClone(E.omit.call(void 0,e,["granularity"]));return t.limit||(t.limit={limit:200}),t.groupBy&&"string"==typeof t.groupBy&&!t.orderBy&&(t.orderBy=t.groupBy),t},t.ub=nm,t.vb=nd,t.wb=np,t.xb=nf,t.yb=ng,t.zb=nh,t.Ab=ny,t.Bb=function(e,t){return e[0].getTime()===t[0].getTime()&&e[1].getTime()===t[1].getTime()},t.Cb=nb,t.Db=n_,t.Eb=n$,t.Fb=nS,t.Gb=function(e){if(!e)return;let t=Object.entries(e).filter(e=>null!=e[1]&&""!==e[1].trim()).map(([e,t])=>({name:e,sql:{sql:t,params:{}},isSubquery:!1}));return t.length>0?t:void 0},t.Hb=nv,t.Ib=nE,t.Jb=function(e){return"line"===e||"stacked_bar"===e||"number"===e},t.Kb=e=>"line"===e||"stacked_bar"===e||"table"===e||"number"===e,t.Lb=nx,t.Mb=function(e){return!1},t.Nb=function(e){let t=[],a=[];if(!_.f.call(void 0,e))return{errors:t,warnings:a};nE(e.displayType)||t.push(`Display type ${e.displayType} does not support raw SQL alerts.`);let{sql:n}=nw(e);if(null!=n){let r=nN(e,n);r.isTimeSeries&&!r.hasInterval&&t.push("SQL used for alerts must include an interval parameter or macro."),r.hasTimeFilter||a.push("SQL used for alerts should include start and end date parameters or macros.")}return{errors:t,warnings:a}},t.Ob=function(e,{isDashboardTile:t=!1}={}){let a=[],n=[];if(!_.f.call(void 0,e)||!e.sqlTemplate.trim())return{errors:a,warnings:n};let r=new Set,i=(e,t)=>{a.push(e),null!=t&&r.add(t)};try{let s=nw(e);if(null!=s.sql){let t=nN(e,s.sql);t.isTimeSeries&&!t.hasInterval&&a.push("SQL must include an interval parameter or macro (e.g. $__interval_s) for this display type."),t.hasTimeFilter||n.push("SQL should include start and end date parameters or macros (e.g. $__timeFilter) so this chart respects the selected time range.")}let o=aC(e.sqlTemplate,e.variables,{subject:"SQL",language:"sql"});if(a.push(...o.errors),n.push(...o.warnings),t&&(az(e.sqlTemplate,"sourceTable")||n.push("SQL should include the $__sourceTable macro so this tile queries its configured source."),aQ(e.sqlTemplate)&&n.push("SQL should include the $__filters macro so dashboard filters apply to this tile.")),e.from){let t=aY(e.sqlTemplate),a=!!e.metricTables;t.some(e=>e>0)&&!a&&i("SQL uses $__sourceTable(<metricType>) but the selected source is not a metrics source — use a bare $__sourceTable instead.","sourceTable"),t.some(e=>0===e)&&a&&i("SQL uses a bare $__sourceTable but the selected source is a metrics source — specify a metric type, e.g. $__sourceTable(gauge).","sourceTable")}else{let t=aG(e.sqlTemplate);t.length>0&&(a.push(`SQL uses ${t.map(e=>`$__${e}`).join(" and ")} but no source is selected \u2014 select a source so ${t.length>1?"these macros":"this macro"} can resolve correctly.`),t.forEach(e=>r.add(e)))}let{error:l}=s;if(null!=l){let e=l instanceof S.a,t=l instanceof S.b&&r.has(l.macro);e||t||a.includes(l.message)||a.push(l.message)}}catch(e){if(e instanceof S.a)return{errors:a,warnings:n};console.error("Unexpected error validating raw SQL chart config",e)}return{errors:a,warnings:n}},t.Pb=nT,t.Qb=x.default,t.Rb=ek,t.Sb=eC,t.Tb=eR,t.Ub=eL,t.Vb=function(e){if("sql_ast"===e.type)return!1;let t=eL([e]).filters,a=Object.keys(t);if(1!==a.length||/\b(?:NOT|AND|OR)\b/i.test(a[0])||1!==ek(t).length)return!1;let n=+!!t[a[0]].range;return function(e){let t=0,a=!1,n=0;for(let r=0;r<e.length;r++){let i=e.charAt(r);if(eM(e,r)){if(a){let t=eO(e,r);if(t.skip){r=t.next;continue}}a=!a;continue}if(!a){if("("===i){n++;continue}if(")"===i){n>0&&n--;continue}n>0||" AND "===e.slice(r,r+5).toUpperCase()&&(t++,r+=4)}}return t}(e.condition)===n},t.Wb=eU,t.Xb=function(e){let t=[];return e.forEach((e,a)=>{if("lucene"!==e.type&&"sql"!==e.type)return;let n=e.condition;n.trim()&&(eU(n,e.type)||t.push({index:a,language:e.type,condition:n}))}),t},t.Yb=function(e,t){if(!f([e,"optionalAccess",e=>e.trim,"call",e=>e()]))return null;let a=d(t,()=>"lucene");return"lucene"!==a&&"sql"!==a||eU(e,a)?null:{language:a,query:e}},t.Zb=function(e){let t=[],a=ej(e).map(e=>({...e,values:[]}));for(let n of e){let e=d(n.where,()=>"");if(!e.trim())continue;let r=d(n.whereLanguage,()=>"sql");if("lucene"!==r&&"sql"!==r)continue;let i=eH(n,a);i.error?t.push({filterId:n.id,filterName:n.name,language:r,where:e,detail:i.error}):eU(i.where,r)||t.push({filterId:n.id,filterName:n.name,language:r,where:e})}return t},t._b=eV,t.$b=eW,t.ac=eB,t.bc=function(e){return eW(e)||eB(e)},t.cc=eP,t.dc=function(e){let t=[],a=new Set;for(let n of d(e,()=>[])){if(!eB(n))continue;let e=eP(n);!e||a.has(e)||(a.add(e),t.push({filter:n,name:e}))}return t},t.ec=ej,t.fc=eH,t.gc=function(e,t){let a=d(e.where,()=>""),n=d(e.whereLanguage,()=>"sql");if(null==t||!a.trim()||"sql"!==n)return[];let r=new Set(t.filter(e=>0===e.values.length).map(e=>e.name));return 0===r.size?[]:Array.from(new Set(aI(a).filter(e=>"macro"!==e.kind&&e.guardedBy!==e.name&&"regex"!==d(e.format,()=>"sqlstring")&&r.has(e.name)).map(e=>e.name)))},t.hc=function({value:e,otherFilters:t}){let a=d(e,()=>"").trim();if(!a)return"Variable name is required";if(a.length>$.Za)return`Variable name must be ${$.Za} characters or fewer`;if(!$.Ya.test(a))return"Variable names must start with a letter and may contain only letters, numbers, and underscores";let n=t.find(e=>eB(e)&&eP(e)===a);if(n)return`This variable name is used by another filter on this dashboard (${n.name})`}}}]);