@514labs/moose-lib 0.6.527 → 0.6.528
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browserCompatible.d.mts +2 -2
- package/dist/browserCompatible.d.ts +2 -2
- package/dist/browserCompatible.js +393 -2
- package/dist/browserCompatible.js.map +1 -1
- package/dist/browserCompatible.mjs +389 -2
- package/dist/browserCompatible.mjs.map +1 -1
- package/dist/compilerPlugin.js +2 -1
- package/dist/compilerPlugin.js.map +1 -1
- package/dist/compilerPlugin.mjs +2 -1
- package/dist/compilerPlugin.mjs.map +1 -1
- package/dist/dmv2/index.d.mts +2 -2
- package/dist/dmv2/index.d.ts +2 -2
- package/dist/dmv2/index.js +393 -2
- package/dist/dmv2/index.js.map +1 -1
- package/dist/dmv2/index.mjs +389 -2
- package/dist/dmv2/index.mjs.map +1 -1
- package/dist/{index-k_kpRxE3.d.mts → index-BTIlwBBZ.d.mts} +13 -2
- package/dist/{index-7uxZbwmY.d.ts → index-w7pvlv3c.d.ts} +13 -2
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +394 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +390 -2
- package/dist/index.mjs.map +1 -1
- package/dist/moose-runner.js +36 -3
- package/dist/moose-runner.js.map +1 -1
- package/dist/moose-runner.mjs +36 -3
- package/dist/moose-runner.mjs.map +1 -1
- package/dist/{view-BCWJcLF6.d.mts → query-client-6YrlC3Df.d.mts} +420 -80
- package/dist/{view-BCWJcLF6.d.ts → query-client-6YrlC3Df.d.ts} +420 -80
- package/dist/testing/index.d.mts +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.js +10 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/index.mjs +10 -1
- package/dist/testing/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { af as TypedBase, O as OlapTable, L as LifeCycle, ag as Column, ae as QueryClient, a6 as sql, ah as RowPolicyOptions, a4 as RawValue, a7 as Sql, a as OlapConfig, ai as TypiaValidators, V as View, C as ClickHouseEngines, b as OlapDictionary } from './query-client-6YrlC3Df.mjs';
|
|
2
2
|
import { IJsonSchemaCollection } from 'typia';
|
|
3
3
|
import { Client } from '@temporalio/client';
|
|
4
4
|
import { JWTPayload } from 'jose';
|
|
@@ -1262,6 +1262,17 @@ declare function getSelectRowPolicies(): Map<string, SelectRowPolicy>;
|
|
|
1262
1262
|
* @returns The SelectRowPolicy instance or undefined if not found
|
|
1263
1263
|
*/
|
|
1264
1264
|
declare function getSelectRowPolicy(name: string): SelectRowPolicy | undefined;
|
|
1265
|
+
/**
|
|
1266
|
+
* Get all registered OLAP dictionaries.
|
|
1267
|
+
* @returns A Map of dictionary name to OlapDictionary instance
|
|
1268
|
+
*/
|
|
1269
|
+
declare function getOlapDictionaries(): Map<string, OlapDictionary<any>>;
|
|
1270
|
+
/**
|
|
1271
|
+
* Get a registered OLAP dictionary by name.
|
|
1272
|
+
* @param name - The name of the dictionary
|
|
1273
|
+
* @returns The OlapDictionary instance or undefined if not found
|
|
1274
|
+
*/
|
|
1275
|
+
declare function getOlapDictionary(name: string): OlapDictionary<any> | undefined;
|
|
1265
1276
|
|
|
1266
1277
|
/**
|
|
1267
1278
|
* @module dmv2
|
|
@@ -1303,4 +1314,4 @@ type SimpleAggregated<AggregationFunction extends string, ArgType = any> = {
|
|
|
1303
1314
|
_argType?: ArgType;
|
|
1304
1315
|
};
|
|
1305
1316
|
|
|
1306
|
-
export {
|
|
1317
|
+
export { MOOSE_RLS_USER as $, type Aggregated as A, getWorkflows as B, ConsumptionApi as C, type DeadLetterModel as D, type EgressConfig as E, type FrameworkApp as F, getWorkflow as G, getWebApps as H, IngestApi as I, getWebApp as J, getView as K, getViews as L, MaterializedView as M, getMaterializedView as N, getMaterializedViews as O, getSelectRowPolicies as P, getSelectRowPolicy as Q, getOlapDictionaries as R, type SimpleAggregated as S, Task as T, getOlapDictionary as U, type ApiUtil as V, Workflow as W, type ConsumptionUtil as X, type MooseUtils as Y, MooseClient as Z, MOOSE_RLS_ROLE as _, Stream as a, MOOSE_RLS_SETTING_PREFIX as a0, type RowPoliciesConfig as a1, buildRowPolicyOptionsFromClaims as a2, WorkflowClient as a3, getTemporalClient as a4, ApiHelpers as a5, ConsumptionHelpers as a6, joinQueries as a7, type ConsumerConfig as a8, type TransformConfig as a9, type TaskContext as aa, type TaskConfig as ab, type IngestPipelineConfig as ac, type MaterializedViewConfig as ad, type StreamConfig as b, type DeadLetter as c, DeadLetterQueue as d, type IngestConfig as e, Api as f, type ApiConfig as g, IngestPipeline as h, SqlResource as i, SelectRowPolicy as j, type SelectRowPolicyConfig as k, ETLPipeline as l, type ETLPipelineConfig as m, WebApp as n, type WebAppConfig as o, type WebAppHandler as p, getTables as q, getTable as r, getStreams as s, getStream as t, getIngestApis as u, getIngestApi as v, getApis as w, getApi as x, getSqlResources as y, getSqlResource as z };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { af as TypedBase, O as OlapTable, L as LifeCycle, ag as Column, ae as QueryClient, a6 as sql, ah as RowPolicyOptions, a4 as RawValue, a7 as Sql, a as OlapConfig, ai as TypiaValidators, V as View, C as ClickHouseEngines, b as OlapDictionary } from './query-client-6YrlC3Df.js';
|
|
2
2
|
import { IJsonSchemaCollection } from 'typia';
|
|
3
3
|
import { Client } from '@temporalio/client';
|
|
4
4
|
import { JWTPayload } from 'jose';
|
|
@@ -1262,6 +1262,17 @@ declare function getSelectRowPolicies(): Map<string, SelectRowPolicy>;
|
|
|
1262
1262
|
* @returns The SelectRowPolicy instance or undefined if not found
|
|
1263
1263
|
*/
|
|
1264
1264
|
declare function getSelectRowPolicy(name: string): SelectRowPolicy | undefined;
|
|
1265
|
+
/**
|
|
1266
|
+
* Get all registered OLAP dictionaries.
|
|
1267
|
+
* @returns A Map of dictionary name to OlapDictionary instance
|
|
1268
|
+
*/
|
|
1269
|
+
declare function getOlapDictionaries(): Map<string, OlapDictionary<any>>;
|
|
1270
|
+
/**
|
|
1271
|
+
* Get a registered OLAP dictionary by name.
|
|
1272
|
+
* @param name - The name of the dictionary
|
|
1273
|
+
* @returns The OlapDictionary instance or undefined if not found
|
|
1274
|
+
*/
|
|
1275
|
+
declare function getOlapDictionary(name: string): OlapDictionary<any> | undefined;
|
|
1265
1276
|
|
|
1266
1277
|
/**
|
|
1267
1278
|
* @module dmv2
|
|
@@ -1303,4 +1314,4 @@ type SimpleAggregated<AggregationFunction extends string, ArgType = any> = {
|
|
|
1303
1314
|
_argType?: ArgType;
|
|
1304
1315
|
};
|
|
1305
1316
|
|
|
1306
|
-
export {
|
|
1317
|
+
export { MOOSE_RLS_USER as $, type Aggregated as A, getWorkflows as B, ConsumptionApi as C, type DeadLetterModel as D, type EgressConfig as E, type FrameworkApp as F, getWorkflow as G, getWebApps as H, IngestApi as I, getWebApp as J, getView as K, getViews as L, MaterializedView as M, getMaterializedView as N, getMaterializedViews as O, getSelectRowPolicies as P, getSelectRowPolicy as Q, getOlapDictionaries as R, type SimpleAggregated as S, Task as T, getOlapDictionary as U, type ApiUtil as V, Workflow as W, type ConsumptionUtil as X, type MooseUtils as Y, MooseClient as Z, MOOSE_RLS_ROLE as _, Stream as a, MOOSE_RLS_SETTING_PREFIX as a0, type RowPoliciesConfig as a1, buildRowPolicyOptionsFromClaims as a2, WorkflowClient as a3, getTemporalClient as a4, ApiHelpers as a5, ConsumptionHelpers as a6, joinQueries as a7, type ConsumerConfig as a8, type TransformConfig as a9, type TaskContext as aa, type TaskConfig as ab, type IngestPipelineConfig as ac, type MaterializedViewConfig as ad, type StreamConfig as b, type DeadLetter as c, DeadLetterQueue as d, type IngestConfig as e, Api as f, type ApiConfig as g, IngestPipeline as h, SqlResource as i, SelectRowPolicy as j, type SelectRowPolicyConfig as k, ETLPipeline as l, type ETLPipelineConfig as m, WebApp as n, type WebAppConfig as o, type WebAppHandler as p, getTables as q, getTable as r, getStreams as s, getStream as t, getIngestApis as u, getIngestApi as v, getApis as w, getApi as x, getSqlResources as y, getSqlResource as z };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export { JWT, Key } from './browserCompatible.mjs';
|
|
2
2
|
import * as _clickhouse_client from '@clickhouse/client';
|
|
3
3
|
import { KafkaJS } from '@514labs/kafka-javascript';
|
|
4
|
-
import {
|
|
5
|
-
export { A as Aggregated, f as Api, g as ApiConfig,
|
|
4
|
+
import { Y as MooseUtils, Z as MooseClient, M as MaterializedView } from './index-BTIlwBBZ.mjs';
|
|
5
|
+
export { A as Aggregated, f as Api, g as ApiConfig, a5 as ApiHelpers, V as ApiUtil, C as ConsumptionApi, a6 as ConsumptionHelpers, X as ConsumptionUtil, c as DeadLetter, D as DeadLetterModel, d as DeadLetterQueue, l as ETLPipeline, m as ETLPipelineConfig, E as EgressConfig, F as FrameworkApp, I as IngestApi, e as IngestConfig, h as IngestPipeline, _ as MOOSE_RLS_ROLE, a0 as MOOSE_RLS_SETTING_PREFIX, $ as MOOSE_RLS_USER, a1 as RowPoliciesConfig, j as SelectRowPolicy, k as SelectRowPolicyConfig, S as SimpleAggregated, i as SqlResource, a as Stream, b as StreamConfig, T as Task, n as WebApp, o as WebAppConfig, p as WebAppHandler, W as Workflow, a3 as WorkflowClient, a2 as buildRowPolicyOptionsFromClaims, x as getApi, w as getApis, v as getIngestApi, u as getIngestApis, N as getMaterializedView, O as getMaterializedViews, R as getOlapDictionaries, U as getOlapDictionary, P as getSelectRowPolicies, Q as getSelectRowPolicy, z as getSqlResource, y as getSqlResources, t as getStream, s as getStreams, r as getTable, q as getTables, a4 as getTemporalClient, K as getView, L as getViews, J as getWebApp, H as getWebApps, G as getWorkflow, B as getWorkflows, a7 as joinQueries } from './index-BTIlwBBZ.mjs';
|
|
6
6
|
import http from 'http';
|
|
7
|
-
import {
|
|
8
|
-
export {
|
|
7
|
+
import { a7 as Sql, O as OlapTable, ag as Column, ae as QueryClient, ak as DataType } from './query-client-6YrlC3Df.mjs';
|
|
8
|
+
export { j as COMPLEX_KEY_LAYOUTS, w as ClickHouseAlias, m as ClickHouseByteSize, x as ClickHouseCodec, l as ClickHouseDecimal, t as ClickHouseDefault, C as ClickHouseEngines, f as ClickHouseExternalSource, n as ClickHouseFixedStringSize, o as ClickHouseFloat, p as ClickHouseInt, q as ClickHouseJson, an as ClickHouseLineString, v as ClickHouseMaterialized, ao as ClickHouseMultiLineString, aq as ClickHouseMultiPolygon, s as ClickHouseNamedTuple, al as ClickHousePoint, ap as ClickHousePolygon, k as ClickHousePrecision, am as ClickHouseRing, u as ClickHouseTTL, y as DateTime, z as DateTime64, B as DateTime64String, A as DateTimeString, _ as Decimal, D as DictionaryColumnConfig, d as DictionaryLayout, e as DictionaryLifetime, h as ExecutableExternalSource, E as ExternalSource, F as FixedString, G as Float32, I as Float64, H as HttpExternalSource, a1 as IdentifierBrandedString, $ as Insertable, K as Int16, N as Int32, Q as Int64, J as Int8, L as LifeCycle, r as LowCardinality, g as MongodbExternalSource, M as MysqlExternalSource, a2 as NonIdentifierBrandedString, a as OlapConfig, b as OlapDictionary, c as OlapDictionaryConfig, P as PostgresqlExternalSource, a4 as RawValue, R as RedisExternalSource, ah as RowPolicyOptions, i as S3ExternalSource, S as S3QueueTableSettings, a5 as SqlTemplateTag, T as TableConstraint, X as UInt16, Y as UInt32, Z as UInt64, U as UInt8, a3 as Value, V as View, W as WithDefault, ac as createClickhouseParameter, ab as getValueFromParameter, ad as mapToClickHouseType, a0 as quoteIdentifier, a6 as sql, a9 as toQuery, aa as toQueryPreview, a8 as toStaticQuery } from './query-client-6YrlC3Df.mjs';
|
|
9
9
|
import { IsTuple } from 'typia/lib/typings/IsTuple';
|
|
10
10
|
import { Readable } from 'node:stream';
|
|
11
11
|
import { z } from 'zod';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export { JWT, Key } from './browserCompatible.js';
|
|
2
2
|
import * as _clickhouse_client from '@clickhouse/client';
|
|
3
3
|
import { KafkaJS } from '@514labs/kafka-javascript';
|
|
4
|
-
import {
|
|
5
|
-
export { A as Aggregated, f as Api, g as ApiConfig,
|
|
4
|
+
import { Y as MooseUtils, Z as MooseClient, M as MaterializedView } from './index-w7pvlv3c.js';
|
|
5
|
+
export { A as Aggregated, f as Api, g as ApiConfig, a5 as ApiHelpers, V as ApiUtil, C as ConsumptionApi, a6 as ConsumptionHelpers, X as ConsumptionUtil, c as DeadLetter, D as DeadLetterModel, d as DeadLetterQueue, l as ETLPipeline, m as ETLPipelineConfig, E as EgressConfig, F as FrameworkApp, I as IngestApi, e as IngestConfig, h as IngestPipeline, _ as MOOSE_RLS_ROLE, a0 as MOOSE_RLS_SETTING_PREFIX, $ as MOOSE_RLS_USER, a1 as RowPoliciesConfig, j as SelectRowPolicy, k as SelectRowPolicyConfig, S as SimpleAggregated, i as SqlResource, a as Stream, b as StreamConfig, T as Task, n as WebApp, o as WebAppConfig, p as WebAppHandler, W as Workflow, a3 as WorkflowClient, a2 as buildRowPolicyOptionsFromClaims, x as getApi, w as getApis, v as getIngestApi, u as getIngestApis, N as getMaterializedView, O as getMaterializedViews, R as getOlapDictionaries, U as getOlapDictionary, P as getSelectRowPolicies, Q as getSelectRowPolicy, z as getSqlResource, y as getSqlResources, t as getStream, s as getStreams, r as getTable, q as getTables, a4 as getTemporalClient, K as getView, L as getViews, J as getWebApp, H as getWebApps, G as getWorkflow, B as getWorkflows, a7 as joinQueries } from './index-w7pvlv3c.js';
|
|
6
6
|
import http from 'http';
|
|
7
|
-
import {
|
|
8
|
-
export {
|
|
7
|
+
import { a7 as Sql, O as OlapTable, ag as Column, ae as QueryClient, ak as DataType } from './query-client-6YrlC3Df.js';
|
|
8
|
+
export { j as COMPLEX_KEY_LAYOUTS, w as ClickHouseAlias, m as ClickHouseByteSize, x as ClickHouseCodec, l as ClickHouseDecimal, t as ClickHouseDefault, C as ClickHouseEngines, f as ClickHouseExternalSource, n as ClickHouseFixedStringSize, o as ClickHouseFloat, p as ClickHouseInt, q as ClickHouseJson, an as ClickHouseLineString, v as ClickHouseMaterialized, ao as ClickHouseMultiLineString, aq as ClickHouseMultiPolygon, s as ClickHouseNamedTuple, al as ClickHousePoint, ap as ClickHousePolygon, k as ClickHousePrecision, am as ClickHouseRing, u as ClickHouseTTL, y as DateTime, z as DateTime64, B as DateTime64String, A as DateTimeString, _ as Decimal, D as DictionaryColumnConfig, d as DictionaryLayout, e as DictionaryLifetime, h as ExecutableExternalSource, E as ExternalSource, F as FixedString, G as Float32, I as Float64, H as HttpExternalSource, a1 as IdentifierBrandedString, $ as Insertable, K as Int16, N as Int32, Q as Int64, J as Int8, L as LifeCycle, r as LowCardinality, g as MongodbExternalSource, M as MysqlExternalSource, a2 as NonIdentifierBrandedString, a as OlapConfig, b as OlapDictionary, c as OlapDictionaryConfig, P as PostgresqlExternalSource, a4 as RawValue, R as RedisExternalSource, ah as RowPolicyOptions, i as S3ExternalSource, S as S3QueueTableSettings, a5 as SqlTemplateTag, T as TableConstraint, X as UInt16, Y as UInt32, Z as UInt64, U as UInt8, a3 as Value, V as View, W as WithDefault, ac as createClickhouseParameter, ab as getValueFromParameter, ad as mapToClickHouseType, a0 as quoteIdentifier, a6 as sql, a9 as toQuery, aa as toQueryPreview, a8 as toStaticQuery } from './query-client-6YrlC3Df.js';
|
|
9
9
|
import { IsTuple } from 'typia/lib/typings/IsTuple';
|
|
10
10
|
import { Readable } from 'node:stream';
|
|
11
11
|
import { z } from 'zod';
|
package/dist/index.js
CHANGED
|
@@ -487,6 +487,7 @@ __export(index_exports, {
|
|
|
487
487
|
Api: () => Api,
|
|
488
488
|
ApiHelpers: () => ApiHelpers,
|
|
489
489
|
BadRequestError: () => BadRequestError,
|
|
490
|
+
COMPLEX_KEY_LAYOUTS: () => COMPLEX_KEY_LAYOUTS,
|
|
490
491
|
CSV_DELIMITERS: () => CSV_DELIMITERS,
|
|
491
492
|
ClickHouseEngines: () => ClickHouseEngines,
|
|
492
493
|
ConsumptionApi: () => ConsumptionApi,
|
|
@@ -509,6 +510,7 @@ __export(index_exports, {
|
|
|
509
510
|
MaterializedView: () => MaterializedView,
|
|
510
511
|
MooseCache: () => MooseCache,
|
|
511
512
|
MooseClient: () => MooseClient,
|
|
513
|
+
OlapDictionary: () => OlapDictionary,
|
|
512
514
|
OlapTable: () => OlapTable,
|
|
513
515
|
QueryClient: () => QueryClient,
|
|
514
516
|
RETRY_FACTOR_PRODUCER: () => RETRY_FACTOR_PRODUCER,
|
|
@@ -561,6 +563,8 @@ __export(index_exports, {
|
|
|
561
563
|
getMooseClients: () => getMooseClients,
|
|
562
564
|
getMooseUtils: () => getMooseUtils,
|
|
563
565
|
getMooseUtilsFromRequest: () => getMooseUtilsFromRequest,
|
|
566
|
+
getOlapDictionaries: () => getOlapDictionaries,
|
|
567
|
+
getOlapDictionary: () => getOlapDictionary,
|
|
564
568
|
getSelectRowPolicies: () => getSelectRowPolicies,
|
|
565
569
|
getSelectRowPolicy: () => getSelectRowPolicy,
|
|
566
570
|
getSqlResource: () => getSqlResource,
|
|
@@ -791,6 +795,7 @@ var quoteIdentifier = (name) => {
|
|
|
791
795
|
};
|
|
792
796
|
var isTable = (value) => typeof value === "object" && value !== null && "kind" in value && value.kind === "OlapTable";
|
|
793
797
|
var isView = (value) => typeof value === "object" && value !== null && "kind" in value && value.kind === "View";
|
|
798
|
+
var isDictionary = (value) => typeof value === "object" && value !== null && "kind" in value && value.kind === "OlapDictionary";
|
|
794
799
|
var isColumn = (value) => typeof value === "object" && value !== null && !("kind" in value) && "name" in value && "annotations" in value;
|
|
795
800
|
function sqlImpl(strings, ...values) {
|
|
796
801
|
return new Sql(strings, values);
|
|
@@ -817,7 +822,7 @@ var Sql = class _Sql {
|
|
|
817
822
|
);
|
|
818
823
|
}
|
|
819
824
|
const valuesLength = rawValues.reduce(
|
|
820
|
-
(len, value) => len + (instanceofSql(value) ? value.values.length : isColumn(value) || isTable(value) || isView(value) ? 0 : 1),
|
|
825
|
+
(len, value) => len + (instanceofSql(value) ? value.values.length : isColumn(value) || isTable(value) || isView(value) || isDictionary(value) ? 0 : 1),
|
|
821
826
|
0
|
|
822
827
|
);
|
|
823
828
|
this.values = new Array(valuesLength);
|
|
@@ -864,6 +869,14 @@ var Sql = class _Sql {
|
|
|
864
869
|
this.strings[pos] += `\`${child.name}\``;
|
|
865
870
|
}
|
|
866
871
|
this.strings[pos] += rawString;
|
|
872
|
+
} else if (isDictionary(child)) {
|
|
873
|
+
if (/\b(?:FROM|JOIN)\s*$/i.test(this.strings[pos])) {
|
|
874
|
+
console.warn(
|
|
875
|
+
`OlapDictionary '${child.getQualifiedName()}' interpolated after FROM/JOIN in sql tag. Dictionaries render as string literals (e.g. 'db.dict_name') for use with dictGet(), not as table identifiers. ClickHouse dictionaries cannot be queried directly with FROM/JOIN.`
|
|
876
|
+
);
|
|
877
|
+
}
|
|
878
|
+
this.strings[pos] += `'${child.getQualifiedName().replace(/'/g, "''")}'`;
|
|
879
|
+
this.strings[pos] += rawString;
|
|
867
880
|
} else {
|
|
868
881
|
this.values[pos++] = child;
|
|
869
882
|
this.strings[pos] = rawString;
|
|
@@ -1205,7 +1218,8 @@ function createRegistryFrom(existing) {
|
|
|
1205
1218
|
webApps: toTrackingMap(existing?.webApps),
|
|
1206
1219
|
materializedViews: toTrackingMap(existing?.materializedViews),
|
|
1207
1220
|
views: toTrackingMap(existing?.views),
|
|
1208
|
-
selectRowPolicies: toTrackingMap(existing?.selectRowPolicies)
|
|
1221
|
+
selectRowPolicies: toTrackingMap(existing?.selectRowPolicies),
|
|
1222
|
+
olapDictionaries: toTrackingMap(existing?.olapDictionaries)
|
|
1209
1223
|
};
|
|
1210
1224
|
}
|
|
1211
1225
|
var moose_internal = {
|
|
@@ -1245,6 +1259,10 @@ var moose_internal = {
|
|
|
1245
1259
|
selectRowPolicies: new MutationTrackingMap(
|
|
1246
1260
|
void 0,
|
|
1247
1261
|
markRegistryMutated
|
|
1262
|
+
),
|
|
1263
|
+
olapDictionaries: new MutationTrackingMap(
|
|
1264
|
+
void 0,
|
|
1265
|
+
markRegistryMutated
|
|
1248
1266
|
)
|
|
1249
1267
|
};
|
|
1250
1268
|
var defaultRetentionPeriod = 60 * 60 * 24 * 7;
|
|
@@ -1277,6 +1295,7 @@ var loadIndex = async () => {
|
|
|
1277
1295
|
registry.materializedViews.clear();
|
|
1278
1296
|
registry.views.clear();
|
|
1279
1297
|
registry.selectRowPolicies.clear();
|
|
1298
|
+
registry.olapDictionaries.clear();
|
|
1280
1299
|
const outDir = getOutDir();
|
|
1281
1300
|
const compiledDir = path4.isAbsolute(outDir) ? outDir : path4.join(import_process.default.cwd(), outDir);
|
|
1282
1301
|
Object.keys(require.cache).forEach((key) => {
|
|
@@ -3179,6 +3198,369 @@ var LifeCycle = /* @__PURE__ */ ((LifeCycle2) => {
|
|
|
3179
3198
|
return LifeCycle2;
|
|
3180
3199
|
})(LifeCycle || {});
|
|
3181
3200
|
|
|
3201
|
+
// src/dmv2/sdk/olapDictionary.ts
|
|
3202
|
+
var COMPLEX_KEY_LAYOUTS = /* @__PURE__ */ new Set([
|
|
3203
|
+
"COMPLEX_KEY_HASHED",
|
|
3204
|
+
"COMPLEX_KEY_SPARSE_HASHED",
|
|
3205
|
+
"COMPLEX_KEY_HASHED_ARRAY",
|
|
3206
|
+
"COMPLEX_KEY_CACHE",
|
|
3207
|
+
"COMPLEX_KEY_SSD_CACHE",
|
|
3208
|
+
"COMPLEX_KEY_DIRECT"
|
|
3209
|
+
]);
|
|
3210
|
+
function dataTypeToString(dataType) {
|
|
3211
|
+
if (typeof dataType === "string") {
|
|
3212
|
+
return dataType;
|
|
3213
|
+
}
|
|
3214
|
+
if (typeof dataType === "object" && dataType !== null) {
|
|
3215
|
+
if ("nullable" in dataType) {
|
|
3216
|
+
const inner = dataTypeToString(
|
|
3217
|
+
dataType.nullable
|
|
3218
|
+
);
|
|
3219
|
+
return `Nullable(${inner})`;
|
|
3220
|
+
}
|
|
3221
|
+
if ("elementType" in dataType) {
|
|
3222
|
+
const arr = dataType;
|
|
3223
|
+
const inner = dataTypeToString(arr.elementType);
|
|
3224
|
+
return arr.elementNullable ? `Array(Nullable(${inner}))` : `Array(${inner})`;
|
|
3225
|
+
}
|
|
3226
|
+
if ("name" in dataType && "values" in dataType) {
|
|
3227
|
+
const d = dataType;
|
|
3228
|
+
const entries = d.values.map(
|
|
3229
|
+
(v) => v.value.String !== void 0 ? `'${v.name}' = '${v.value.String}'` : `'${v.name}' = ${v.value.Int ?? 0}`
|
|
3230
|
+
).join(", ");
|
|
3231
|
+
return `${d.name}(${entries})`;
|
|
3232
|
+
}
|
|
3233
|
+
}
|
|
3234
|
+
throw new Error(
|
|
3235
|
+
`OlapDictionary: unsupported column data type for dictionary attribute: ${JSON.stringify(dataType)}. Dictionaries only support scalar value types (strings, integers, floats, booleans, dates, Nullable wrappers, Array wrappers, and Enum types).`
|
|
3236
|
+
);
|
|
3237
|
+
}
|
|
3238
|
+
function buildDictionaryColumns(columns, overrides) {
|
|
3239
|
+
return columns.map((col) => {
|
|
3240
|
+
const override = overrides?.[col.name] ?? {};
|
|
3241
|
+
const result = {
|
|
3242
|
+
name: col.name,
|
|
3243
|
+
typeString: dataTypeToString(col.data_type)
|
|
3244
|
+
};
|
|
3245
|
+
if (override.defaultValue !== void 0)
|
|
3246
|
+
result.defaultValue = override.defaultValue;
|
|
3247
|
+
if (override.expression !== void 0)
|
|
3248
|
+
result.expression = override.expression;
|
|
3249
|
+
if (override.isInjective !== void 0)
|
|
3250
|
+
result.isInjective = override.isInjective;
|
|
3251
|
+
if (override.isHierarchical !== void 0)
|
|
3252
|
+
result.isHierarchical = override.isHierarchical;
|
|
3253
|
+
if (override.isObjectId !== void 0)
|
|
3254
|
+
result.isObjectId = override.isObjectId;
|
|
3255
|
+
if (override.comment !== void 0) result.comment = override.comment;
|
|
3256
|
+
return result;
|
|
3257
|
+
});
|
|
3258
|
+
}
|
|
3259
|
+
function serializeLifetime(lifetime) {
|
|
3260
|
+
if (typeof lifetime === "number") {
|
|
3261
|
+
if (!Number.isFinite(lifetime) || lifetime < 0 || !Number.isInteger(lifetime)) {
|
|
3262
|
+
throw new Error(
|
|
3263
|
+
`OlapDictionary: lifetime must be a finite non-negative integer (got ${lifetime}).`
|
|
3264
|
+
);
|
|
3265
|
+
}
|
|
3266
|
+
if (lifetime === 0) {
|
|
3267
|
+
return { type: "STATIC" };
|
|
3268
|
+
}
|
|
3269
|
+
return { type: "SINGLE", seconds: lifetime };
|
|
3270
|
+
}
|
|
3271
|
+
if (!Number.isFinite(lifetime.min) || !Number.isFinite(lifetime.max) || !Number.isInteger(lifetime.min) || !Number.isInteger(lifetime.max) || lifetime.min < 0 || lifetime.max < lifetime.min) {
|
|
3272
|
+
throw new Error(
|
|
3273
|
+
`OlapDictionary: lifetime range must use finite non-negative integers with min <= max (got min=${lifetime.min}, max=${lifetime.max}).`
|
|
3274
|
+
);
|
|
3275
|
+
}
|
|
3276
|
+
if (lifetime.min === 0 && lifetime.max === 0) {
|
|
3277
|
+
return { type: "STATIC" };
|
|
3278
|
+
}
|
|
3279
|
+
if (lifetime.min === lifetime.max) {
|
|
3280
|
+
return { type: "SINGLE", seconds: lifetime.min };
|
|
3281
|
+
}
|
|
3282
|
+
return { type: "RANGE", min: lifetime.min, max: lifetime.max };
|
|
3283
|
+
}
|
|
3284
|
+
function serializeLayout(layout) {
|
|
3285
|
+
const { type, ...rest } = layout;
|
|
3286
|
+
const snakeCaseFields = {};
|
|
3287
|
+
for (const [key, value] of Object.entries(rest)) {
|
|
3288
|
+
if (value === void 0) continue;
|
|
3289
|
+
const snake = key.replace(/([A-Z])/g, "_$1").toLowerCase();
|
|
3290
|
+
snakeCaseFields[snake] = value;
|
|
3291
|
+
}
|
|
3292
|
+
return { type, ...snakeCaseFields };
|
|
3293
|
+
}
|
|
3294
|
+
function externalTypeToRust(type) {
|
|
3295
|
+
const mapping = {
|
|
3296
|
+
http: "HTTP",
|
|
3297
|
+
clickhouse: "CLICK_HOUSE",
|
|
3298
|
+
mysql: "MYSQL",
|
|
3299
|
+
postgresql: "POSTGRESQL",
|
|
3300
|
+
redis: "REDIS",
|
|
3301
|
+
mongodb: "MONGODB",
|
|
3302
|
+
executable: "EXECUTABLE",
|
|
3303
|
+
s3: "S3"
|
|
3304
|
+
};
|
|
3305
|
+
return mapping[type];
|
|
3306
|
+
}
|
|
3307
|
+
function serializeExternalSource(ext) {
|
|
3308
|
+
const { type, ...rest } = ext;
|
|
3309
|
+
const inner = {
|
|
3310
|
+
source_type: externalTypeToRust(type)
|
|
3311
|
+
};
|
|
3312
|
+
for (const [key, value] of Object.entries(rest)) {
|
|
3313
|
+
inner[key] = value;
|
|
3314
|
+
}
|
|
3315
|
+
return {
|
|
3316
|
+
type: "EXTERNAL",
|
|
3317
|
+
externalSource: inner
|
|
3318
|
+
};
|
|
3319
|
+
}
|
|
3320
|
+
function serializeSource(config) {
|
|
3321
|
+
if (config.sourceTable !== void 0) {
|
|
3322
|
+
const table = config.sourceTable;
|
|
3323
|
+
if (table instanceof OlapTable) {
|
|
3324
|
+
return {
|
|
3325
|
+
type: "TABLE",
|
|
3326
|
+
table: table.generateTableName(),
|
|
3327
|
+
database: table.config.database,
|
|
3328
|
+
...config.invalidateQuery !== void 0 ? { invalidateQuery: config.invalidateQuery } : {}
|
|
3329
|
+
};
|
|
3330
|
+
} else {
|
|
3331
|
+
return {
|
|
3332
|
+
type: "TABLE",
|
|
3333
|
+
table: table.name,
|
|
3334
|
+
database: table.database,
|
|
3335
|
+
...config.invalidateQuery !== void 0 ? { invalidateQuery: config.invalidateQuery } : {}
|
|
3336
|
+
};
|
|
3337
|
+
}
|
|
3338
|
+
}
|
|
3339
|
+
if (config.sourceQuery !== void 0) {
|
|
3340
|
+
return {
|
|
3341
|
+
type: "QUERY",
|
|
3342
|
+
query: toStaticQuery(config.sourceQuery),
|
|
3343
|
+
...config.invalidateQuery !== void 0 ? { invalidateQuery: config.invalidateQuery } : {}
|
|
3344
|
+
};
|
|
3345
|
+
}
|
|
3346
|
+
if (config.externalSource !== void 0) {
|
|
3347
|
+
return serializeExternalSource(config.externalSource);
|
|
3348
|
+
}
|
|
3349
|
+
throw new Error(
|
|
3350
|
+
"OlapDictionary: no source configured (unreachable after validation)"
|
|
3351
|
+
);
|
|
3352
|
+
}
|
|
3353
|
+
var OlapDictionary = class {
|
|
3354
|
+
/** @internal */
|
|
3355
|
+
kind = "OlapDictionary";
|
|
3356
|
+
/** Dictionary name */
|
|
3357
|
+
name;
|
|
3358
|
+
/** User configuration */
|
|
3359
|
+
config;
|
|
3360
|
+
/** Compiler-injected columns (name + type from T) */
|
|
3361
|
+
_columns;
|
|
3362
|
+
/** Serialized column list (DictionaryColumn JSON objects) */
|
|
3363
|
+
serializedColumns;
|
|
3364
|
+
constructor(name, config, _schema, columns) {
|
|
3365
|
+
if (_schema === void 0 || columns === void 0) {
|
|
3366
|
+
throw new Error(
|
|
3367
|
+
"Supply the type param T so that the schema is inserted by the compiler plugin."
|
|
3368
|
+
);
|
|
3369
|
+
}
|
|
3370
|
+
this.name = name;
|
|
3371
|
+
this.config = config;
|
|
3372
|
+
this._columns = columns;
|
|
3373
|
+
const sourcesSet = [
|
|
3374
|
+
config.sourceTable !== void 0,
|
|
3375
|
+
config.sourceQuery !== void 0,
|
|
3376
|
+
config.externalSource !== void 0
|
|
3377
|
+
].filter(Boolean).length;
|
|
3378
|
+
if (sourcesSet === 0) {
|
|
3379
|
+
throw new Error(
|
|
3380
|
+
`OlapDictionary '${name}': exactly one of sourceTable, sourceQuery, or externalSource must be set (none provided).`
|
|
3381
|
+
);
|
|
3382
|
+
}
|
|
3383
|
+
if (sourcesSet > 1) {
|
|
3384
|
+
throw new Error(
|
|
3385
|
+
`OlapDictionary '${name}': exactly one of sourceTable, sourceQuery, or externalSource must be set (${sourcesSet} provided).`
|
|
3386
|
+
);
|
|
3387
|
+
}
|
|
3388
|
+
if (config.sourceQuery !== void 0 && !config.sourceTables?.length) {
|
|
3389
|
+
throw new Error(
|
|
3390
|
+
`OlapDictionary '${name}': sourceQuery requires sourceTables to be set for dependency tracking.`
|
|
3391
|
+
);
|
|
3392
|
+
}
|
|
3393
|
+
if (config.sourceQuery !== void 0) {
|
|
3394
|
+
if (!toStaticQuery(config.sourceQuery).trim()) {
|
|
3395
|
+
throw new Error(
|
|
3396
|
+
`OlapDictionary '${name}': sourceQuery must not be blank.`
|
|
3397
|
+
);
|
|
3398
|
+
}
|
|
3399
|
+
}
|
|
3400
|
+
if (!config.primaryKey.length) {
|
|
3401
|
+
throw new Error(
|
|
3402
|
+
`OlapDictionary '${name}': primaryKey must contain at least one column name.`
|
|
3403
|
+
);
|
|
3404
|
+
}
|
|
3405
|
+
if (!COMPLEX_KEY_LAYOUTS.has(config.layout.type)) {
|
|
3406
|
+
if (config.primaryKey.length !== 1) {
|
|
3407
|
+
throw new Error(
|
|
3408
|
+
`OlapDictionary '${name}': layout '${config.layout.type}' requires exactly 1 primary key column (got ${config.primaryKey.length}). Use a COMPLEX_KEY_* layout for string or multi-column keys.`
|
|
3409
|
+
);
|
|
3410
|
+
}
|
|
3411
|
+
}
|
|
3412
|
+
this.serializedColumns = buildDictionaryColumns(
|
|
3413
|
+
columns,
|
|
3414
|
+
config.columns
|
|
3415
|
+
);
|
|
3416
|
+
if (!config.metadata?.source) {
|
|
3417
|
+
const stack = new Error().stack;
|
|
3418
|
+
const sourceInfo = getSourceFileFromStack(stack);
|
|
3419
|
+
if (sourceInfo) {
|
|
3420
|
+
this.config.metadata = {
|
|
3421
|
+
...config.metadata,
|
|
3422
|
+
source: { file: sourceInfo }
|
|
3423
|
+
};
|
|
3424
|
+
}
|
|
3425
|
+
}
|
|
3426
|
+
const olapDictionaries = getMooseInternal().olapDictionaries;
|
|
3427
|
+
if (!isClientOnlyMode() && olapDictionaries.has(name)) {
|
|
3428
|
+
throw new Error(`OlapDictionary with name '${name}' already exists`);
|
|
3429
|
+
}
|
|
3430
|
+
olapDictionaries.set(name, this);
|
|
3431
|
+
}
|
|
3432
|
+
/**
|
|
3433
|
+
* Returns the qualified dictionary name for use in dictGet calls.
|
|
3434
|
+
* Format: `database.name` if database is set, otherwise just `name`.
|
|
3435
|
+
*/
|
|
3436
|
+
getQualifiedName() {
|
|
3437
|
+
if (this.config.database) {
|
|
3438
|
+
return `${this.config.database}.${this.name}`;
|
|
3439
|
+
}
|
|
3440
|
+
return this.name;
|
|
3441
|
+
}
|
|
3442
|
+
/**
|
|
3443
|
+
* Formats key arguments for use in dictGet/dictHas SQL functions.
|
|
3444
|
+
* Strings are treated as SQL identifiers, numbers as literals.
|
|
3445
|
+
*/
|
|
3446
|
+
formatKeyArgs(keys) {
|
|
3447
|
+
if (keys.length !== this.config.primaryKey.length) {
|
|
3448
|
+
throw new Error(
|
|
3449
|
+
`OlapDictionary '${this.name}': expected ${this.config.primaryKey.length} key argument(s) but got ${keys.length}.`
|
|
3450
|
+
);
|
|
3451
|
+
}
|
|
3452
|
+
const parts = keys.map((k) => {
|
|
3453
|
+
if (typeof k === "object" && "strings" in k) {
|
|
3454
|
+
return toStaticQuery(k);
|
|
3455
|
+
}
|
|
3456
|
+
if (typeof k === "string") {
|
|
3457
|
+
return `\`${k.replace(/`/g, "``")}\``;
|
|
3458
|
+
}
|
|
3459
|
+
return String(k);
|
|
3460
|
+
});
|
|
3461
|
+
return parts.length === 1 ? parts[0] : `(${parts.join(", ")})`;
|
|
3462
|
+
}
|
|
3463
|
+
/**
|
|
3464
|
+
* Generates a `dictGet('dict', 'attr', key)` SQL fragment.
|
|
3465
|
+
*
|
|
3466
|
+
* @param attr - The attribute (column) name to retrieve
|
|
3467
|
+
* @param keys - Key expression(s). Strings are treated as column identifiers.
|
|
3468
|
+
*
|
|
3469
|
+
* @example
|
|
3470
|
+
* ```typescript
|
|
3471
|
+
* sql`SELECT ${ProductDict.get("ProductName", "product_id")} AS name FROM ...`
|
|
3472
|
+
* // → SELECT dictGet('db.dict_products', 'ProductName', `product_id`) AS name FROM ...
|
|
3473
|
+
* ```
|
|
3474
|
+
*/
|
|
3475
|
+
get(attr, ...keys) {
|
|
3476
|
+
if (!keys.length) {
|
|
3477
|
+
throw new Error(
|
|
3478
|
+
`OlapDictionary.get('${attr}'): at least one key argument is required.`
|
|
3479
|
+
);
|
|
3480
|
+
}
|
|
3481
|
+
const qualifiedName = this.getQualifiedName().replace(/'/g, "''");
|
|
3482
|
+
const escapedAttr = attr.replace(/'/g, "''");
|
|
3483
|
+
const keyExpr = this.formatKeyArgs(keys);
|
|
3484
|
+
return sql.raw(`dictGet('${qualifiedName}', '${escapedAttr}', ${keyExpr})`);
|
|
3485
|
+
}
|
|
3486
|
+
/**
|
|
3487
|
+
* Generates a `dictGetOrDefault('dict', 'attr', key, default)` SQL fragment.
|
|
3488
|
+
*
|
|
3489
|
+
* @param attr - The attribute (column) name to retrieve
|
|
3490
|
+
* @param defaultVal - The default value if the key is not found
|
|
3491
|
+
* @param keys - Key expression(s)
|
|
3492
|
+
*/
|
|
3493
|
+
getOrDefault(attr, defaultVal, ...keys) {
|
|
3494
|
+
if (!keys.length) {
|
|
3495
|
+
throw new Error(
|
|
3496
|
+
`OlapDictionary.getOrDefault('${attr}'): at least one key argument is required.`
|
|
3497
|
+
);
|
|
3498
|
+
}
|
|
3499
|
+
const qualifiedName = this.getQualifiedName().replace(/'/g, "''");
|
|
3500
|
+
const escapedAttr = attr.replace(/'/g, "''");
|
|
3501
|
+
const keyExpr = this.formatKeyArgs(keys);
|
|
3502
|
+
let defaultExpr;
|
|
3503
|
+
if (typeof defaultVal === "object" && "strings" in defaultVal) {
|
|
3504
|
+
defaultExpr = toStaticQuery(defaultVal);
|
|
3505
|
+
} else if (typeof defaultVal === "string") {
|
|
3506
|
+
defaultExpr = `'${defaultVal.replace(/'/g, "''")}'`;
|
|
3507
|
+
} else {
|
|
3508
|
+
defaultExpr = String(defaultVal);
|
|
3509
|
+
}
|
|
3510
|
+
return sql.raw(
|
|
3511
|
+
`dictGetOrDefault('${qualifiedName}', '${escapedAttr}', ${keyExpr}, ${defaultExpr})`
|
|
3512
|
+
);
|
|
3513
|
+
}
|
|
3514
|
+
/**
|
|
3515
|
+
* Generates a `dictHas('dict', key)` SQL fragment.
|
|
3516
|
+
*
|
|
3517
|
+
* @param keys - Key expression(s)
|
|
3518
|
+
*
|
|
3519
|
+
* @example
|
|
3520
|
+
* ```typescript
|
|
3521
|
+
* sql`SELECT * FROM source WHERE ${ProductDict.has("product_id")}`
|
|
3522
|
+
* // → SELECT * FROM source WHERE dictHas('db.dict_products', `product_id`)
|
|
3523
|
+
* ```
|
|
3524
|
+
*/
|
|
3525
|
+
has(...keys) {
|
|
3526
|
+
if (!keys.length) {
|
|
3527
|
+
throw new Error(
|
|
3528
|
+
`OlapDictionary.has(): at least one key argument is required.`
|
|
3529
|
+
);
|
|
3530
|
+
}
|
|
3531
|
+
const qualifiedName = this.getQualifiedName().replace(/'/g, "''");
|
|
3532
|
+
const keyExpr = this.formatKeyArgs(keys);
|
|
3533
|
+
return sql.raw(`dictHas('${qualifiedName}', ${keyExpr})`);
|
|
3534
|
+
}
|
|
3535
|
+
/**
|
|
3536
|
+
* Serializes this dictionary to the JSON format expected by the Rust CLI.
|
|
3537
|
+
* @internal
|
|
3538
|
+
*/
|
|
3539
|
+
toJson() {
|
|
3540
|
+
const source = serializeSource(this.config);
|
|
3541
|
+
const result = {
|
|
3542
|
+
name: this.name,
|
|
3543
|
+
source,
|
|
3544
|
+
primaryKey: this.config.primaryKey,
|
|
3545
|
+
columns: this.serializedColumns,
|
|
3546
|
+
layout: serializeLayout(this.config.layout),
|
|
3547
|
+
lifetime: serializeLifetime(this.config.lifetime),
|
|
3548
|
+
settings: this.config.settings ?? {},
|
|
3549
|
+
lifeCycle: this.config.lifeCycle ?? "FULLY_MANAGED" /* FULLY_MANAGED */
|
|
3550
|
+
};
|
|
3551
|
+
if (this.config.database !== void 0)
|
|
3552
|
+
result.database = this.config.database;
|
|
3553
|
+
if (this.config.clusterName !== void 0)
|
|
3554
|
+
result.clusterName = this.config.clusterName;
|
|
3555
|
+
if (this.config.invalidateQuery !== void 0)
|
|
3556
|
+
result.invalidateQuery = this.config.invalidateQuery;
|
|
3557
|
+
if (this.config.comment !== void 0) result.comment = this.config.comment;
|
|
3558
|
+
if (this.config.metadata !== void 0)
|
|
3559
|
+
result.metadata = this.config.metadata;
|
|
3560
|
+
return result;
|
|
3561
|
+
}
|
|
3562
|
+
};
|
|
3563
|
+
|
|
3182
3564
|
// src/dmv2/sdk/webApp.ts
|
|
3183
3565
|
var RESERVED_MOUNT_PATHS = [
|
|
3184
3566
|
"/admin",
|
|
@@ -3389,6 +3771,12 @@ function getSelectRowPolicies() {
|
|
|
3389
3771
|
function getSelectRowPolicy(name) {
|
|
3390
3772
|
return getMooseInternal().selectRowPolicies.get(name);
|
|
3391
3773
|
}
|
|
3774
|
+
function getOlapDictionaries() {
|
|
3775
|
+
return getMooseInternal().olapDictionaries;
|
|
3776
|
+
}
|
|
3777
|
+
function getOlapDictionary(name) {
|
|
3778
|
+
return getMooseInternal().olapDictionaries.get(name);
|
|
3779
|
+
}
|
|
3392
3780
|
|
|
3393
3781
|
// src/index.ts
|
|
3394
3782
|
init_commons();
|
|
@@ -5258,6 +5646,7 @@ function createQueryHandler(config) {
|
|
|
5258
5646
|
Api,
|
|
5259
5647
|
ApiHelpers,
|
|
5260
5648
|
BadRequestError,
|
|
5649
|
+
COMPLEX_KEY_LAYOUTS,
|
|
5261
5650
|
CSV_DELIMITERS,
|
|
5262
5651
|
ClickHouseEngines,
|
|
5263
5652
|
ConsumptionApi,
|
|
@@ -5280,6 +5669,7 @@ function createQueryHandler(config) {
|
|
|
5280
5669
|
MaterializedView,
|
|
5281
5670
|
MooseCache,
|
|
5282
5671
|
MooseClient,
|
|
5672
|
+
OlapDictionary,
|
|
5283
5673
|
OlapTable,
|
|
5284
5674
|
QueryClient,
|
|
5285
5675
|
RETRY_FACTOR_PRODUCER,
|
|
@@ -5332,6 +5722,8 @@ function createQueryHandler(config) {
|
|
|
5332
5722
|
getMooseClients,
|
|
5333
5723
|
getMooseUtils,
|
|
5334
5724
|
getMooseUtilsFromRequest,
|
|
5725
|
+
getOlapDictionaries,
|
|
5726
|
+
getOlapDictionary,
|
|
5335
5727
|
getSelectRowPolicies,
|
|
5336
5728
|
getSelectRowPolicy,
|
|
5337
5729
|
getSqlResource,
|