scenario.ts 8.23 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 54
}

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

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

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

68 69 70 71 72 73 74 75 76 77 78
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"
    }),
79 80 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"
    }),
    "dim:5" : new Filter({
        target: dims[5],
101
        operator: FilterOperator.NOTEQUAL,
102
        value: "true"
103 104 105 106 107 108 109 110 111 112
    }),
    "dim:7" : new Filter({
        target: dims[7],
        operator: FilterOperator.EQUAL,
        value: "1"
    })
};

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

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

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

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

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

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

260 261
const subDimView = new View({
    metrics: [mets[0]],
262
    dimensions: [subdims[0], subdims[1], dims[7], dims[8]],
263
    materialized: false,
264
    origin: false,
265
    childViews: [views[0], views[1], views[4]]
266 267 268
});

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

const noSelView = new View({
    metrics: [mets[0], mets[3]],
    dimensions: [],
    materialized: false,
280
    origin: false,
281
    childViews: [views[0], views[1]]
282 283 284
});

const withSelView = new View({
285 286
    metrics: [mets[0], mets[1]],
    dimensions: [dims[7], dims[8]],
287
    materialized: false,
288
    origin: false,
289
    childViews: [views[0], views[4]]
290 291 292
});

export const engineScenario: EngineScenario = {
293 294 295 296
    metrics: mets,
    dimensions: dims,
    wrongMet: wrongMet,
    wrongDim: wrongDim,
297
    subDimensions: subdims,
298
    views: views
299 300 301 302 303 304 305 306
};

export const adapterScenario: AdapterScenario = {
    materializedView: views[0],
    noSelectionView: noSelView,
    withSelectionView: withSelView,
    subDimensionView: subDimView,
    join4View: join4View,
307
    dateView: dateView,
308 309 310 311
    aggrView: aggrView,
    clauseView: clauseView,
    multiFilterView: multiFilterView,
    multiClauseView: multiClauseView,
312 313 314
    notEqualView: notEqualView,
    gtltView: gtltView,
    geleView: geleView
315
};
316 317 318 319

export const dataCtrlScenario: DataCtrlScenario = {
    wrongMet: { metrics: [wrongMet], dimensions: [dims[0]] },
    wrongDim: { metrics: [mets[0]], dimensions: [wrongDim] },
320 321
    correct: { metrics: [mets[0]], dimensions: [dims[0]] },
    clausal: { metrics: [mets[0]], dimensions: [dims[7]] }
322
};