scenario.ts 8.96 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
    "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"
    }),
101 102 103 104 105
    "dim:2" : new Filter({
        target: dims[2],
        operator: FilterOperator.NOTEQUAL,
        value: "1"
    }),
106 107
    "dim:5" : new Filter({
        target: dims[5],
108
        operator: FilterOperator.NOTEQUAL,
109
        value: "true"
110 111 112 113 114 115 116 117 118 119
    }),
    "dim:7" : new Filter({
        target: dims[7],
        operator: FilterOperator.EQUAL,
        value: "1"
    })
};

const clauses: { [key: string]: Clause }  = {
    "view0dim7": new Clause({filters: [filters["dim:7"]]}),
120 121 122 123
    "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"]]}),
124
    "view0dim0": new Clause({filters: [filters["dim:0:0"], filters["dim:0:1"]]}),
125
    "view9dim2": new Clause({filters: [filters["dim:2"]]}),
126
    "view7dim5": new Clause({filters: [filters["dim:5"]]})
127 128
};

129
const wrongMet = new Metric({
130
    name: "met:-1",
131 132 133 134 135 136
    aggregation: AggregationType.COUNT,
    dataType: "integer"
});
const wrongDim = new Dimension({ name: "dim:11", dataType: "integer" });

const subdimAux = new Dimension({
137
    name: "sub:0",
138 139 140 141 142 143 144 145
    dataType: "integer",
    parent: dims[0],
    relation: RelationType.DAY
});

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

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

const dateView = new View({
    metrics: [],
    dimensions: dateSubDim,
    materialized: false,
202
    origin: false,
203
    childViews: [views[0]]
204 205
});

206
const aggrView = new View({
207
    metrics: [mets[0], mets[1], mets[6], mets[10], mets[11]],
208 209 210
    dimensions: [],
    materialized: false,
    origin: false,
211
    childViews: [views[0], views[2], views[3], views[4], views[7], views[8]]
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 237 238 239 240 241 242
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: [],
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
    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]],
262 263
    materialized: false,
    origin: false,
264 265
    childViews: [views[0]],
    clauses: [clauses.view0ge, clauses.view0le]
266 267
});

268 269 270 271 272 273 274 275 276
const notMatchFilterView = new View({
    metrics: [mets[0]],
    dimensions: [dims[0]],
    materialized: false,
    origin: false,
    childViews: [views[0]],
    clauses: [clauses.view7dim5]
});

277 278
const subDimView = new View({
    metrics: [mets[0]],
279
    dimensions: [subdims[0], subdims[1], dims[7], dims[8]],
280
    materialized: false,
281
    origin: false,
282
    childViews: [views[0], views[1], views[4]]
283 284 285
});

const join4View = new View({
286 287
    metrics: [mets[0], mets[1], mets[2], mets[3], mets[4], mets[5]],
    dimensions: [dims[2], dims[7], dims[8]],
288
    materialized: false,
289
    origin: false,
290
    childViews: [views[0], views[1], views[2], views[4]]
291 292 293 294 295 296
});

const noSelView = new View({
    metrics: [mets[0], mets[3]],
    dimensions: [],
    materialized: false,
297
    origin: false,
298
    childViews: [views[0], views[1]]
299 300 301
});

const withSelView = new View({
302 303
    metrics: [mets[0], mets[1]],
    dimensions: [dims[7], dims[8]],
304
    materialized: false,
305
    origin: false,
306
    childViews: [views[0], views[4]]
307 308
});

309 310 311 312
const notOriginCount = new View({
    metrics: [mets[5], mets[6], mets[7]],
    dimensions: [dims[2]],
    materialized: true,
313 314
    origin: false,
    clauses: [clauses.view9dim2]
315 316
});

317
export const engineScenario: EngineScenario = {
318 319 320 321
    metrics: mets,
    dimensions: dims,
    wrongMet: wrongMet,
    wrongDim: wrongDim,
322
    subDimensions: subdims,
323
    views: views
324 325 326 327 328 329 330 331
};

export const adapterScenario: AdapterScenario = {
    materializedView: views[0],
    noSelectionView: noSelView,
    withSelectionView: withSelView,
    subDimensionView: subDimView,
    join4View: join4View,
332
    dateView: dateView,
333 334 335 336
    aggrView: aggrView,
    clauseView: clauseView,
    multiFilterView: multiFilterView,
    multiClauseView: multiClauseView,
337 338
    notEqualView: notEqualView,
    gtltView: gtltView,
339
    geleView: geleView,
340 341
    notMatchFilterView: notMatchFilterView,
    notOriginCount: notOriginCount
342
};
343 344 345 346

export const dataCtrlScenario: DataCtrlScenario = {
    wrongMet: { metrics: [wrongMet], dimensions: [dims[0]] },
    wrongDim: { metrics: [mets[0]], dimensions: [wrongDim] },
347 348
    correct: { metrics: [mets[0]], dimensions: [dims[0]] },
    clausal: { metrics: [mets[0]], dimensions: [dims[7]] }
349
};