scenario.ts 8.71 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
 * Copyright (C) 2017 Centro de Computacao Cientifica e Software Livre
 * Departamento de Informatica - Universidade Federal do Parana
 *
 * This file is part of blendb.
 *
 * blendb is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * blendb is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with blendb.  If not, see <http://www.gnu.org/licenses/>.
 */

21
import { ConfigParser } from "../src/util/configParser";
22
23
24
import { Metric } from "../src/core/metric";
import { Dimension } from "../src/core/dimension";
import { View } from "../src/core/view";
25
26
import { Filter, FilterOperator } from "../src/core/filter";
import { Clause } from "../src/core/clause";
27
import { AggregationType, RelationType } from "../src/common/types";
28
import { Query} from "../src/common/query";
29
30
31
32
33

interface EngineScenario {
    metrics: Metric[];
    dimensions: Dimension[];
    subDimensions: Dimension[];
34
35
    wrongMet: Metric;
    wrongDim: Dimension;
36
37
38
39
40
41
42
43
44
45
    views: View[];
}

interface AdapterScenario {
    materializedView: View;
    noSelectionView: View;
    withSelectionView: View;
    subDimensionView: View;
    join4View: View;
    dateView: View;
46
    aggrView: View;
47
48
49
50
    clauseView: View;
    multiFilterView: View;
    multiClauseView: View;
    notEqualView: View;
51
52
    gtltView: View;
    geleView: View;
53
    notMatchFilterView: View;
54
    notOriginCount: View;
55
56
}

57
58
59
60
interface DataCtrlScenario {
    wrongMet: Query;
    wrongDim: Query;
    correct: Query;
61
    clausal: Query;
62
}
63

64
65
66
67
68
const config = ConfigParser.parse("config/test.yaml");

const mets = config.metrics;
const dims = config.dimensions;
const views = config.views;
69

70
71
72
73
74
75
76
77
78
79
80
const filters: { [key: string]: Filter } = {
    "dim:0:0" : new Filter({
        target: dims[0],
        operator: FilterOperator.EQUAL,
        value: "2017-01-02"
    }),
    "dim:0:1" : new Filter({
        target: dims[0],
        operator: FilterOperator.EQUAL,
        value: "2017-01-03"
    }),
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
    "dim:0:gt" : new Filter({
        target: dims[0],
        operator: FilterOperator.GREATER,
        value: "2017-01-02"
    }),
    "dim:0:lt" : new Filter({
        target: dims[0],
        operator: FilterOperator.LOWER,
        value: "2017-01-04"
    }),
    "dim:0:ge" : new Filter({
        target: dims[0],
        operator: FilterOperator.GREATEREQ,
        value: "2017-01-02"
    }),
    "dim:0:le" : new Filter({
        target: dims[0],
        operator: FilterOperator.LOWEREQ,
        value: "2017-01-04"
    }),
    "dim:5" : new Filter({
        target: dims[5],
103
        operator: FilterOperator.NOTEQUAL,
104
        value: "true"
105
106
107
108
109
110
111
112
113
114
    }),
    "dim:7" : new Filter({
        target: dims[7],
        operator: FilterOperator.EQUAL,
        value: "1"
    })
};

const clauses: { [key: string]: Clause }  = {
    "view0dim7": new Clause({filters: [filters["dim:7"]]}),
115
116
117
118
    "view0gt": new Clause({filters: [filters["dim:0:gt"]]}),
    "view0lt": new Clause({filters: [filters["dim:0:lt"]]}),
    "view0ge": new Clause({filters: [filters["dim:0:ge"]]}),
    "view0le": new Clause({filters: [filters["dim:0:le"]]}),
119
    "view0dim0": new Clause({filters: [filters["dim:0:0"], filters["dim:0:1"]]}),
120
    "view7dim5": new Clause({filters: [filters["dim:5"]]})
121
122
};

123
124
125
126
127
128
129
130
const wrongMet = new Metric({
    name: "met:11",
    aggregation: AggregationType.COUNT,
    dataType: "integer"
});
const wrongDim = new Dimension({ name: "dim:11", dataType: "integer" });

const subdimAux = new Dimension({
131
    name: "sub:0",
132
133
134
135
136
137
138
139
    dataType: "integer",
    parent: dims[0],
    relation: RelationType.DAY
});

const subdims = [
    subdimAux,
    new Dimension({
140
        name: "sub:1",
141
        dataType: "integer",
142
        parent: dims[1],
143
144
145
        relation: RelationType.DAY
    }),
    new Dimension({
146
        name: "sub:2",
147
148
149
150
151
        dataType: "integer",
        parent: subdimAux,
        relation: RelationType.DAY
    }),
    new Dimension({
152
        name: "sub:3",
153
154
155
156
157
        dataType: "integer",
        parent: null,
        relation: RelationType.DAY
    }),
    new Dimension({
158
        name: "sub:4",
159
160
161
162
163
164
165
166
        dataType: "integer",
        parent: dims[1],
        relation: RelationType.DAY
    })
];

const dateSubDim = [
    new Dimension ({
167
        name: "dim:0:month",
168
        dataType: "integer",
169
        parent: dims[0],
170
171
172
        relation: RelationType.MONTH
    }),
    new Dimension ({
173
        name: "dim:0:day",
174
        dataType: "integer",
175
        parent: dims[0],
176
177
178
        relation: RelationType.DAY
    }),
    new Dimension ({
179
        name: "dim:0:year",
180
        dataType: "integer",
181
        parent: dims[0],
182
183
184
        relation: RelationType.YEAR
    }),
    new Dimension ({
185
        name: "dim:0:dow",
186
        dataType: "integer",
187
        parent: dims[0],
188
189
190
191
192
193
194
195
        relation: RelationType.DAYOFWEEK
    }),
];

const dateView = new View({
    metrics: [],
    dimensions: dateSubDim,
    materialized: false,
196
    origin: false,
197
    childViews: [views[0]]
198
199
});

200
201
202
203
204
const aggrView = new View({
    metrics: [mets[0], mets[1], mets[6]],
    dimensions: [],
    materialized: false,
    origin: false,
205
    childViews: [views[0], views[2], views[4]]
206
207
});

208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
const clauseView = new View({
    metrics: [mets[0], mets[1], mets[2]],
    dimensions: [dims[0]],
    materialized: false,
    origin: false,
    childViews: [views[0]],
    clauses: [clauses.view0dim7]
});

const multiFilterView = new View({
    metrics: [mets[0], mets[1]],
    dimensions: [dims[0]],
    materialized: false,
    origin: false,
    childViews: [views[0]],
    clauses: [clauses.view0dim0]
});

const multiClauseView = new View({
    metrics: [mets[0], mets[1]],
    dimensions: [dims[0]],
    materialized: false,
    origin: false,
    childViews: [views[0]],
    clauses: [clauses.view0dim0, clauses.view0dim7]
});

const notEqualView = new View({
    metrics: [],
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
    dimensions: [dims[4], dims[5]],
    materialized: false,
    origin: false,
    childViews: [views[7]],
    clauses: [clauses.view7dim5]
});

const gtltView = new View({
    metrics: [],
    dimensions: [dims[0]],
    materialized: false,
    origin: false,
    childViews: [views[0]],
    clauses: [clauses.view0gt, clauses.view0lt]
});

const geleView = new View({
    metrics: [],
    dimensions: [dims[0]],
256
257
    materialized: false,
    origin: false,
258
259
    childViews: [views[0]],
    clauses: [clauses.view0ge, clauses.view0le]
260
261
});

262
263
264
265
266
267
268
269
270
const notMatchFilterView = new View({
    metrics: [mets[0]],
    dimensions: [dims[0]],
    materialized: false,
    origin: false,
    childViews: [views[0]],
    clauses: [clauses.view7dim5]
});

271
272
const subDimView = new View({
    metrics: [mets[0]],
273
    dimensions: [subdims[0], subdims[1], dims[7], dims[8]],
274
    materialized: false,
275
    origin: false,
276
    childViews: [views[0], views[1], views[4]]
277
278
279
});

const join4View = new View({
280
281
    metrics: [mets[0], mets[1], mets[2], mets[3], mets[4], mets[5]],
    dimensions: [dims[2], dims[7], dims[8]],
282
    materialized: false,
283
    origin: false,
284
    childViews: [views[0], views[1], views[2], views[4]]
285
286
287
288
289
290
});

const noSelView = new View({
    metrics: [mets[0], mets[3]],
    dimensions: [],
    materialized: false,
291
    origin: false,
292
    childViews: [views[0], views[1]]
293
294
295
});

const withSelView = new View({
296
297
    metrics: [mets[0], mets[1]],
    dimensions: [dims[7], dims[8]],
298
    materialized: false,
299
    origin: false,
300
    childViews: [views[0], views[4]]
301
302
});

303
304
305
306
307
308
309
const notOriginCount = new View({
    metrics: [mets[5], mets[6], mets[7]],
    dimensions: [dims[2]],
    materialized: true,
    origin: false
});

310
export const engineScenario: EngineScenario = {
311
312
313
314
    metrics: mets,
    dimensions: dims,
    wrongMet: wrongMet,
    wrongDim: wrongDim,
315
    subDimensions: subdims,
316
    views: views
317
318
319
320
321
322
323
324
};

export const adapterScenario: AdapterScenario = {
    materializedView: views[0],
    noSelectionView: noSelView,
    withSelectionView: withSelView,
    subDimensionView: subDimView,
    join4View: join4View,
325
    dateView: dateView,
326
327
328
329
    aggrView: aggrView,
    clauseView: clauseView,
    multiFilterView: multiFilterView,
    multiClauseView: multiClauseView,
330
331
    notEqualView: notEqualView,
    gtltView: gtltView,
332
    geleView: geleView,
333
334
    notMatchFilterView: notMatchFilterView,
    notOriginCount: notOriginCount
335
};
336
337
338
339

export const dataCtrlScenario: DataCtrlScenario = {
    wrongMet: { metrics: [wrongMet], dimensions: [dims[0]] },
    wrongDim: { metrics: [mets[0]], dimensions: [wrongDim] },
340
341
    correct: { metrics: [mets[0]], dimensions: [dims[0]] },
    clausal: { metrics: [mets[0]], dimensions: [dims[7]] }
342
};