1- import { AgentType , ISemanticModel } from " @metad/contracts"
2- import { DataSourceOptions , Syntax } from " @metad/ocap-core"
3- import { isNil , omit } from " lodash"
4- import { SemanticModel } from " ../../core/entities/internal"
5- import { NgmDSCoreService } from " ./core.service"
1+ import { AgentType , ISemanticModel } from ' @metad/contracts'
2+ import { DataSourceOptions , Syntax } from ' @metad/ocap-core'
3+ import { isNil , omit } from ' lodash'
4+ import { SemanticModel } from ' ../../core/entities/internal'
5+ import { NgmDSCoreService } from ' ./core.service'
66
77export const OCAP_AGENT_TOKEN = 'OCAP_AGENT_TOKEN'
88export const OCAP_DATASOURCE_TOKEN = 'OCAP_DATASOURCE_TOKEN'
99export const OCAP_MODEL_TOKEN = 'OCAP_MODEL_TOKEN'
1010
1111export function getSemanticModelKey ( model : ISemanticModel ) {
12- return model . id
12+ return model . id
1313}
1414
1515export function registerModel ( model : SemanticModel , dsCoreService : NgmDSCoreService ) {
16- const modelKey = getSemanticModelKey ( model )
17- const agentType = isNil ( model . dataSource )
18- ? AgentType . Wasm
19- : model . dataSource . useLocalAgent
20- ? AgentType . Local
21- : AgentType . Server
22- const dialect =
23- model . dataSource ?. type ?. type === 'agent'
24- ? 'sqlite'
25- : agentType === AgentType . Wasm
26- ? 'duckdb'
27- : model . dataSource ?. type ?. type
28- const catalog = agentType === AgentType . Wasm ? model . catalog || 'main' : model . catalog
29- const semanticModel = {
30- ...omit ( model , 'indicators' ) ,
31- name : modelKey ,
32- catalog,
33- dialect,
34- agentType,
35- settings : {
36- dataSourceInfo : model . dataSource ?. options ?. data_source_info as string
37- } as any ,
38- schema : {
39- ...( model . options ?. schema ?? { } ) ,
40- indicators : model . indicators
41- }
42- } as DataSourceOptions
16+ const modelKey = getSemanticModelKey ( model )
17+ const agentType = isNil ( model . dataSource )
18+ ? AgentType . Wasm
19+ : model . dataSource . useLocalAgent
20+ ? AgentType . Local
21+ : AgentType . Server
22+ const dialect =
23+ model . dataSource ?. type ?. type === 'agent'
24+ ? 'sqlite'
25+ : agentType === AgentType . Wasm
26+ ? 'duckdb'
27+ : model . dataSource ?. type ?. type
28+ const catalog = agentType === AgentType . Wasm ? model . catalog || 'main' : model . catalog
29+ const semanticModel = {
30+ ...omit ( model , 'indicators' ) ,
31+ key : modelKey ,
32+ catalog,
33+ dialect,
34+ agentType,
35+ settings : {
36+ dataSourceInfo : model . dataSource ?. options ?. data_source_info as string
37+ } as any ,
38+ schema : {
39+ ...( model . options ?. schema ?? { } ) ,
40+ indicators : model . indicators
41+ }
42+ } as DataSourceOptions
4343
44- if ( model . dataSource ?. type ?. protocol ?. toUpperCase ( ) === 'SQL' ) {
45- semanticModel . settings = semanticModel . settings
46- ? { ...semanticModel . settings }
47- : {
48- ignoreUnknownProperty : true
49- }
50- semanticModel . settings . dataSourceId = model . dataSource . id
51- }
44+ if ( model . dataSource ?. type ?. protocol ?. toUpperCase ( ) === 'SQL' ) {
45+ semanticModel . settings = semanticModel . settings
46+ ? { ...semanticModel . settings }
47+ : {
48+ ignoreUnknownProperty : true
49+ }
50+ semanticModel . settings . dataSourceId = model . dataSource . id
51+ }
5252
53- if ( model . type === 'XMLA' ) {
54- semanticModel . syntax = Syntax . MDX
55- if ( model . dataSource ?. type ?. protocol ?. toUpperCase ( ) === 'SQL' ) {
56- dsCoreService . registerModel ( {
57- ...semanticModel ,
58- /**
59- * Corresponding name of schema in olap engine:
60- * ```xml
61- * <root name="Semantic Model Name">
62- * <Cube name="Sales">
63- * ...
64- * ```
65- */
66- catalog : model . name ,
67- settings : {
68- ...( semanticModel . settings ?? { } ) ,
69- /**
70- * Corresponding id of XmlaConnection in olap engine:
71- */
72- dataSourceInfo : model . id
73- } as any
74- } )
75- } else {
76- dsCoreService . registerModel ( {
77- ...semanticModel ,
78- settings : {
79- ...semanticModel . settings ,
80- dataSourceInfo : model . dataSource ?. options ?. data_source_info
81- } as any
82- } )
83- }
84- } else {
85- dsCoreService . registerModel ( {
86- ...semanticModel ,
87- syntax : Syntax . SQL ,
88- settings : {
89- ...semanticModel . settings ,
90- dataSourceInfo : model . dataSource ?. options ?. data_source_info
91- } as any
92- } )
93- }
53+ if ( model . type === 'XMLA' ) {
54+ semanticModel . syntax = Syntax . MDX
55+ if ( model . dataSource ?. type ?. protocol ?. toUpperCase ( ) === 'SQL' ) {
56+ dsCoreService . registerModel ( {
57+ ...semanticModel ,
58+ /**
59+ * Corresponding name of schema in olap engine:
60+ * ```xml
61+ * <root name="Semantic Model Name">
62+ * <Cube name="Sales">
63+ * ...
64+ * ```
65+ */
66+ catalog : model . name ,
67+ settings : {
68+ ...( semanticModel . settings ?? { } ) ,
69+ /**
70+ * Corresponding id of XmlaConnection in olap engine:
71+ */
72+ dataSourceInfo : model . id
73+ } as any
74+ } )
75+ } else {
76+ dsCoreService . registerModel ( {
77+ ...semanticModel ,
78+ settings : {
79+ ...semanticModel . settings ,
80+ dataSourceInfo : model . dataSource ?. options ?. data_source_info
81+ } as any
82+ } )
83+ }
84+ } else {
85+ dsCoreService . registerModel ( {
86+ ...semanticModel ,
87+ syntax : Syntax . SQL ,
88+ settings : {
89+ ...semanticModel . settings ,
90+ dataSourceInfo : model . dataSource ?. options ?. data_source_info
91+ } as any
92+ } )
93+ }
9494
95- return semanticModel
96- }
95+ return semanticModel
96+ }
0 commit comments