scenario.ts 8.5 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 55
}

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

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

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

69 70 71 72 73 74 75 76 77 78 79
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"
    }),
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
    "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],
102
        operator: FilterOperator.NOTEQUAL,
103
        value: "true"
104 105 106 107 108 109 110 111 112 113
    }),
    "dim:7" : new Filter({
        target: dims[7],
        operator: FilterOperator.EQUAL,
        value: "1"
    })
};

const clauses: { [key: string]: Clause }  = {
    "view0dim7": new Clause({filters: [filters["dim:7"]]}),
114 115 116 117
    "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"]]}),
118
    "view0dim0": new Clause({filters: [filters["dim:0:0"], filters["dim:0:1"]]}),
119
    "view7dim5": new Clause({filters: [filters["dim:5"]]})
120 121
};

122 123 124 125 126 127 128 129
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({
130
    name: "sub:0",
131 132 133 134 135 136 137 138
    dataType: "integer",
    parent: dims[0],
    relation: RelationType.DAY
});

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

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

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

199 200 201 202 203
const aggrView = new View({
    metrics: [mets[0], mets[1], mets[6]],
    dimensions: [],
    materialized: false,
    origin: false,
204
    childViews: [views[0], views[2], views[4]]
205 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
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: [],
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
    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]],
255 256
    materialized: false,
    origin: false,
257 258
    childViews: [views[0]],
    clauses: [clauses.view0ge, clauses.view0le]
259 260
});

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

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

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

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

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

export const engineScenario: EngineScenario = {
303 304 305 306
    metrics: mets,
    dimensions: dims,
    wrongMet: wrongMet,
    wrongDim: wrongDim,
307
    subDimensions: subdims,
308
    views: views
309 310 311 312 313 314 315 316
};

export const adapterScenario: AdapterScenario = {
    materializedView: views[0],
    noSelectionView: noSelView,
    withSelectionView: withSelView,
    subDimensionView: subDimView,
    join4View: join4View,
317
    dateView: dateView,
318 319 320 321
    aggrView: aggrView,
    clauseView: clauseView,
    multiFilterView: multiFilterView,
    multiClauseView: multiClauseView,
322 323
    notEqualView: notEqualView,
    gtltView: gtltView,
324 325
    geleView: geleView,
    notMatchFilterView: notMatchFilterView
326
};
327 328 329 330

export const dataCtrlScenario: DataCtrlScenario = {
    wrongMet: { metrics: [wrongMet], dimensions: [dims[0]] },
    wrongDim: { metrics: [mets[0]], dimensions: [wrongDim] },
331 332
    correct: { metrics: [mets[0]], dimensions: [dims[0]] },
    clausal: { metrics: [mets[0]], dimensions: [dims[7]] }
333
};