@finos/legend-data-cube
Version:
372 lines • 19.4 kB
JavaScript
/**
* Copyright (c) 2020-present, Goldman Sachs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { TailwindCSSPalette } from '@finos/legend-art';
import { DATE_FORMAT, PRIMITIVE_TYPE, } from '@finos/legend-graph';
import { guaranteeNonNullable, IllegalStateError, UnsupportedOperationError, formatDate, } from '@finos/legend-shared';
export var DataCubeFunction;
(function (DataCubeFunction) {
// relation
DataCubeFunction["EXTEND"] = "meta::pure::functions::relation::extend";
DataCubeFunction["FILTER"] = "meta::pure::functions::relation::filter";
DataCubeFunction["GROUP_BY"] = "meta::pure::functions::relation::groupBy";
DataCubeFunction["LIMIT"] = "meta::pure::functions::relation::limit";
DataCubeFunction["PIVOT"] = "meta::pure::functions::relation::pivot";
DataCubeFunction["SELECT"] = "meta::pure::functions::relation::select";
DataCubeFunction["SLICE"] = "meta::pure::functions::relation::slice";
DataCubeFunction["SORT"] = "meta::pure::functions::relation::sort";
DataCubeFunction["OVER"] = "meta::pure::functions::relation::over";
// generic
DataCubeFunction["CAST"] = "meta::pure::functions::lang::cast";
DataCubeFunction["FROM"] = "meta::pure::mapping::from";
// sort
DataCubeFunction["ASCENDING"] = "meta::pure::functions::relation::ascending";
DataCubeFunction["DESCENDING"] = "meta::pure::functions::relation::descending";
DataCubeFunction["ABS"] = "meta::pure::functions::math::abs";
// filter
DataCubeFunction["AND"] = "meta::pure::functions::boolean::and";
DataCubeFunction["OR"] = "meta::pure::functions::boolean::or";
DataCubeFunction["NOT"] = "meta::pure::functions::boolean::not";
DataCubeFunction["TO_LOWERCASE"] = "meta::pure::functions::string::toLower";
DataCubeFunction["CONTAINS"] = "meta::pure::functions::string::contains";
DataCubeFunction["ENDS_WITH"] = "meta::pure::functions::string::endsWith";
DataCubeFunction["EQUAL"] = "meta::pure::functions::boolean::equal";
DataCubeFunction["GREATER_THAN"] = "meta::pure::functions::boolean::greaterThan";
DataCubeFunction["GREATER_THAN_OR_EQUAL"] = "meta::pure::functions::boolean::greaterThanEqual";
DataCubeFunction["IN"] = "meta::pure::functions::collection::in";
DataCubeFunction["IS_EMPTY"] = "meta::pure::functions::collection::isEmpty";
DataCubeFunction["LESS_THAN"] = "meta::pure::functions::boolean::lessThan";
DataCubeFunction["LESS_THAN_OR_EQUAL"] = "meta::pure::functions::boolean::lessThanEqual";
DataCubeFunction["STARTS_WITH"] = "meta::pure::functions::string::startsWith";
// aggregate
DataCubeFunction["AVERAGE"] = "meta::pure::functions::math::average";
DataCubeFunction["COUNT"] = "meta::pure::functions::collection::count";
DataCubeFunction["DISTINCT"] = "meta::pure::functions::collection::distinct";
DataCubeFunction["FIRST"] = "meta::pure::functions::collection::first";
DataCubeFunction["JOIN_STRINGS"] = "meta::pure::functions::string::joinStrings";
DataCubeFunction["LAST"] = "meta::pure::functions::collection::last";
DataCubeFunction["MAX"] = "meta::pure::functions::collection::max";
DataCubeFunction["MIN"] = "meta::pure::functions::collection::min";
DataCubeFunction["SUM"] = "meta::pure::functions::math::sum";
DataCubeFunction["STANDARD_DEVIATION_POPULATION"] = "meta::pure::functions::math::stdDevPopulation";
DataCubeFunction["STANDARD_DEVIATION_SAMPLE"] = "meta::pure::functions::math::stdDevSample";
DataCubeFunction["UNIQUE_VALUE_ONLY"] = "meta::pure::functions::collection::uniqueValueOnly";
DataCubeFunction["VARIANCE_POPULATION"] = "meta::pure::functions::math::variancePopulation";
DataCubeFunction["VARIANCE_SAMPLE"] = "meta::pure::functions::math::varianceSample";
// PERCENTILE = 'meta::pure::functions::math::percentile',
})(DataCubeFunction || (DataCubeFunction = {}));
export var DataCubeNumberScale;
(function (DataCubeNumberScale) {
DataCubeNumberScale["BASIS_POINT"] = "Basis Points (bp)";
DataCubeNumberScale["PERCENT"] = "Percent (%)";
DataCubeNumberScale["THOUSANDS"] = "Thousands (k)";
DataCubeNumberScale["MILLIONS"] = "Millions (m)";
DataCubeNumberScale["BILLIONS"] = "Billions (b)";
DataCubeNumberScale["TRILLIONS"] = "Trillions (t)";
DataCubeNumberScale["AUTO"] = "Auto (k/m/b/t)";
})(DataCubeNumberScale || (DataCubeNumberScale = {}));
export var DataCubeFont;
(function (DataCubeFont) {
// sans-serif
DataCubeFont["ARIAL"] = "Arial";
DataCubeFont["ROBOTO"] = "Roboto";
DataCubeFont["ROBOTO_CONDENSED"] = "Roboto Condensed";
// serif
DataCubeFont["TIMES_NEW_ROMAN"] = "Times New Roman";
DataCubeFont["GEORGIA"] = "Georgia";
DataCubeFont["ROBOTO_SERIF"] = "Roboto Serif";
// monospace
DataCubeFont["JERBRAINS_MONO"] = "Jetbrains Mono";
DataCubeFont["ROBOTO_MONO"] = "Roboto Mono";
DataCubeFont["UBUNTU_MONO"] = "Ubuntu Mono";
})(DataCubeFont || (DataCubeFont = {}));
export var DataCubeFontTextAlignment;
(function (DataCubeFontTextAlignment) {
DataCubeFontTextAlignment["CENTER"] = "center";
DataCubeFontTextAlignment["LEFT"] = "left";
DataCubeFontTextAlignment["RIGHT"] = "right";
})(DataCubeFontTextAlignment || (DataCubeFontTextAlignment = {}));
export var DataCubeFontCase;
(function (DataCubeFontCase) {
DataCubeFontCase["LOWERCASE"] = "lowercase";
DataCubeFontCase["UPPERCASE"] = "uppercase";
DataCubeFontCase["CAPITALIZE"] = "capitalize";
})(DataCubeFontCase || (DataCubeFontCase = {}));
export var DataCubeFontFormatUnderlineVariant;
(function (DataCubeFontFormatUnderlineVariant) {
DataCubeFontFormatUnderlineVariant["SOLID"] = "solid";
DataCubeFontFormatUnderlineVariant["DASHED"] = "dashed";
DataCubeFontFormatUnderlineVariant["DOTTED"] = "dotted";
DataCubeFontFormatUnderlineVariant["DOUBLE"] = "double";
DataCubeFontFormatUnderlineVariant["WAVY"] = "wavy";
})(DataCubeFontFormatUnderlineVariant || (DataCubeFontFormatUnderlineVariant = {}));
export var DataCubeColumnKind;
(function (DataCubeColumnKind) {
DataCubeColumnKind["MEASURE"] = "Measure";
DataCubeColumnKind["DIMENSION"] = "Dimension";
})(DataCubeColumnKind || (DataCubeColumnKind = {}));
export var DataCubeOperationAdvancedValueType;
(function (DataCubeOperationAdvancedValueType) {
DataCubeOperationAdvancedValueType["COLUMN"] = "COLUMN";
DataCubeOperationAdvancedValueType["VOID"] = "VOID";
// PARAMETER
})(DataCubeOperationAdvancedValueType || (DataCubeOperationAdvancedValueType = {}));
export var DataCubeQueryAggregateOperator;
(function (DataCubeQueryAggregateOperator) {
DataCubeQueryAggregateOperator["SUM"] = "sum";
DataCubeQueryAggregateOperator["AVERAGE"] = "avg";
DataCubeQueryAggregateOperator["COUNT"] = "count";
DataCubeQueryAggregateOperator["MIN"] = "min";
DataCubeQueryAggregateOperator["MAX"] = "max";
DataCubeQueryAggregateOperator["UNIQUE"] = "uniq";
DataCubeQueryAggregateOperator["FIRST"] = "first";
DataCubeQueryAggregateOperator["LAST"] = "last";
// MEDIAN = 'median',
DataCubeQueryAggregateOperator["VARIANCE_POPULATION"] = "var";
DataCubeQueryAggregateOperator["VARIANCE_SAMPLE"] = "var_sample";
DataCubeQueryAggregateOperator["STANDARD_DEVIATION_POPULATION"] = "std";
DataCubeQueryAggregateOperator["STANDARD_DEVIATION_SAMPLE"] = "std_sample";
// STANDARD_ERROR = 'stderr',
// NULL = 'null',
// ssq
// countvalid
// countnull
// uniqunstrict
// minmagnitude
// maxmagnitude
// commonprefix
// commonprefixunstrict
DataCubeQueryAggregateOperator["JOIN_STRINGS"] = "strjoin";
// strjoinuniq
// splitjoin
// daterange
// wavg
// wstderr
// wsum
// custom
})(DataCubeQueryAggregateOperator || (DataCubeQueryAggregateOperator = {}));
export var DataCubeQueryClientSideAggregateOperator;
(function (DataCubeQueryClientSideAggregateOperator) {
DataCubeQueryClientSideAggregateOperator["SUM"] = "sum";
DataCubeQueryClientSideAggregateOperator["AVERAGE"] = "avg";
DataCubeQueryClientSideAggregateOperator["MEDIAN"] = "median";
DataCubeQueryClientSideAggregateOperator["COUNT"] = "count";
DataCubeQueryClientSideAggregateOperator["MIN"] = "min";
DataCubeQueryClientSideAggregateOperator["MAX"] = "max";
DataCubeQueryClientSideAggregateOperator["VARIANCE_POPULATION"] = "var";
DataCubeQueryClientSideAggregateOperator["VARIANCE_SAMPLE"] = "var_sample";
DataCubeQueryClientSideAggregateOperator["STANDARD_DEVIATION_POPULATION"] = "std";
DataCubeQueryClientSideAggregateOperator["STANDARD_DEVIATION_SAMPLE"] = "std_sample";
})(DataCubeQueryClientSideAggregateOperator || (DataCubeQueryClientSideAggregateOperator = {}));
export var DataCubeQueryFilterOperator;
(function (DataCubeQueryFilterOperator) {
DataCubeQueryFilterOperator["LESS_THAN"] = "<";
DataCubeQueryFilterOperator["LESS_THAN_OR_EQUAL"] = "<=";
DataCubeQueryFilterOperator["EQUAL"] = "=";
DataCubeQueryFilterOperator["NOT_EQUAL"] = "!=";
DataCubeQueryFilterOperator["GREATER_THAN"] = ">";
DataCubeQueryFilterOperator["GREATER_THAN_OR_EQUAL"] = ">=";
DataCubeQueryFilterOperator["IN"] = "in";
DataCubeQueryFilterOperator["NOT_IN"] = "not in";
DataCubeQueryFilterOperator["IS_NULL"] = "is null";
DataCubeQueryFilterOperator["IS_NOT_NULL"] = "is not null";
// string ONLY
DataCubeQueryFilterOperator["EQUAL_CASE_INSENSITIVE"] = "= (case-insensitive)";
DataCubeQueryFilterOperator["NOT_EQUAL_CASE_INSENSITIVE"] = "!= (case-insensitive)";
DataCubeQueryFilterOperator["IN_CASE_INSENSITIVE"] = "in (case-insensitive)";
DataCubeQueryFilterOperator["NOT_IN_CASE_INSENSITIVE"] = "not in (case-insensitive)";
DataCubeQueryFilterOperator["CONTAIN"] = "contains";
DataCubeQueryFilterOperator["CONTAIN_CASE_INSENSITIVE"] = "contains (case-insensitive)";
DataCubeQueryFilterOperator["NOT_CONTAIN"] = "does not contain";
DataCubeQueryFilterOperator["START_WITH"] = "starts with";
DataCubeQueryFilterOperator["START_WITH_CASE_INSENSITIVE"] = "starts with (case-insensitive)";
DataCubeQueryFilterOperator["NOT_START_WITH"] = "does not start with";
DataCubeQueryFilterOperator["END_WITH"] = "ends with";
DataCubeQueryFilterOperator["END_WITH_CASE_INSENSITIVE"] = "ends with (case-insensitive)";
DataCubeQueryFilterOperator["NOT_END_WITH"] = "does not end with";
// column
DataCubeQueryFilterOperator["LESS_THAN_COLUMN"] = "< value in column";
DataCubeQueryFilterOperator["LESS_THAN_OR_EQUAL_COLUMN"] = "<= value in column";
DataCubeQueryFilterOperator["EQUAL_COLUMN"] = "= value in column";
DataCubeQueryFilterOperator["EQUAL_CASE_INSENSITIVE_COLUMN"] = "= (case-insensitive) value in column";
DataCubeQueryFilterOperator["NOT_EQUAL_COLUMN"] = "!= value in column";
DataCubeQueryFilterOperator["NOT_EQUAL_CASE_INSENSITIVE_COLUMN"] = "!= (case-insensitive) value in column";
DataCubeQueryFilterOperator["GREATER_THAN_COLUMN"] = "> value in column";
DataCubeQueryFilterOperator["GREATER_THAN_OR_EQUAL_COLUMN"] = ">= value in column";
// TODO?: having, having in aggregate, between
})(DataCubeQueryFilterOperator || (DataCubeQueryFilterOperator = {}));
export var DataCubeQueryFilterGroupOperator;
(function (DataCubeQueryFilterGroupOperator) {
DataCubeQueryFilterGroupOperator["AND"] = "and";
DataCubeQueryFilterGroupOperator["OR"] = "or";
})(DataCubeQueryFilterGroupOperator || (DataCubeQueryFilterGroupOperator = {}));
export var DataCubeQuerySortDirection;
(function (DataCubeQuerySortDirection) {
DataCubeQuerySortDirection["ASCENDING"] = "Ascending";
DataCubeQuerySortDirection["DESCENDING"] = "Descending";
})(DataCubeQuerySortDirection || (DataCubeQuerySortDirection = {}));
export var DataCubeColumnPinPlacement;
(function (DataCubeColumnPinPlacement) {
DataCubeColumnPinPlacement["LEFT"] = "Left";
DataCubeColumnPinPlacement["RIGHT"] = "Right";
})(DataCubeColumnPinPlacement || (DataCubeColumnPinPlacement = {}));
export var DataCubeColumnDataType;
(function (DataCubeColumnDataType) {
DataCubeColumnDataType["NUMBER"] = "Numeric";
DataCubeColumnDataType["TEXT"] = "Text";
DataCubeColumnDataType["DATE"] = "Date";
DataCubeColumnDataType["TIME"] = "Time";
})(DataCubeColumnDataType || (DataCubeColumnDataType = {}));
export var DataCubeGridMode;
(function (DataCubeGridMode) {
DataCubeGridMode["STANDARD"] = "Standard";
DataCubeGridMode["MULTIDIMENSIONAL"] = "Multidimensional";
})(DataCubeGridMode || (DataCubeGridMode = {}));
export var DataCubeClientModelOption;
(function (DataCubeClientModelOption) {
DataCubeClientModelOption["ROW_DATA"] = "rowData";
DataCubeClientModelOption["COLUMN_DEFS"] = "columnDefs";
DataCubeClientModelOption["LOADING"] = "loading";
})(DataCubeClientModelOption || (DataCubeClientModelOption = {}));
export var DataCubeTitleBarMenuItems;
(function (DataCubeTitleBarMenuItems) {
DataCubeTitleBarMenuItems["VIEW_SOURCE"] = "View Source";
DataCubeTitleBarMenuItems["RESET_TO_LATEST_SAVE"] = "Reset to Latest Save";
DataCubeTitleBarMenuItems["UPDATE_INFO"] = "Update Info...";
DataCubeTitleBarMenuItems["DELETE_DATACUBE"] = "Delete DataCube...";
DataCubeTitleBarMenuItems["SEE_DOCUMENTATION"] = "See Documentation";
DataCubeTitleBarMenuItems["ABOUT"] = "About";
DataCubeTitleBarMenuItems["UNDO"] = "Undo";
DataCubeTitleBarMenuItems["REDO"] = "Redo";
DataCubeTitleBarMenuItems["SETTINGS"] = "Settings...";
})(DataCubeTitleBarMenuItems || (DataCubeTitleBarMenuItems = {}));
export var DataCubeOpenEditorSource;
(function (DataCubeOpenEditorSource) {
DataCubeOpenEditorSource["STATUS_BAR"] = "Status Bar";
DataCubeOpenEditorSource["GRID_MENU"] = "Grid Menu";
})(DataCubeOpenEditorSource || (DataCubeOpenEditorSource = {}));
export const PIVOT_COLUMN_NAME_VALUE_SEPARATOR = '__|__';
export const TREE_COLUMN_VALUE_SEPARATOR = '__/__';
export const DEFAULT_LAMBDA_VARIABLE_NAME = 'x';
export const DEFAULT_REPORT_NAME = 'New Report';
export const DEFAULT_TREE_COLUMN_SORT_DIRECTION = DataCubeQuerySortDirection.ASCENDING;
export const DEFAULT_PIVOT_STATISTIC_COLUMN_NAME = 'Total';
export const DEFAULT_PIVOT_COLUMN_SORT_DIRECTION = DataCubeQuerySortDirection.ASCENDING;
export const DEFAULT_ROOT_AGGREGATION_COLUMN_VALUE = '[ROOT]';
export const DEFAULT_URL_LABEL_QUERY_PARAM = 'dataCube.linkLabel';
export const DEFAULT_MISSING_VALUE_DISPLAY_TEXT = '';
export const DEFAULT_GRID_LINE_COLOR = TailwindCSSPalette.neutral[300];
export const DEFAULT_ROW_HIGHLIGHT_BACKGROUND_COLOR = '#d7e0eb';
export const DEFAULT_COLUMN_WIDTH = 300;
export const DEFAULT_COLUMN_MIN_WIDTH = 50;
export const DEFAULT_COLUMN_MAX_WIDTH = undefined;
export const DEFAULT_GRID_MODE = DataCubeGridMode.STANDARD;
export const DEFAULT_FONT_FAMILY = DataCubeFont.ROBOTO;
export const DEFAULT_FONT_SIZE = 11;
export const DEFAULT_FONT_BOLD = false;
export const DEFAULT_FONT_ITALIC = false;
export const DEFAULT_FONT_CASE = undefined;
export const DEFAULT_FONT_UNDERLINED = undefined;
export const DEFAULT_FONT_STRIKETHROUGH = false;
export const DEFAULT_TEXT_ALIGN = DataCubeFontTextAlignment.LEFT;
export const DEFAULT_FOREGROUND_COLOR = TailwindCSSPalette.black;
export const DEFAULT_BACKGROUND_COLOR = TailwindCSSPalette.transparent;
export const DEFAULT_ROW_BACKGROUND_COLOR = TailwindCSSPalette.white;
export const DEFAULT_NEGATIVE_FOREGROUND_COLOR = TailwindCSSPalette.red[500];
export const DEFAULT_ZERO_FOREGROUND_COLOR = TailwindCSSPalette.neutral[400];
export const DEFAULT_ERROR_FOREGROUND_COLOR = TailwindCSSPalette.blue[600];
// settings
export const TAB_SIZE = 2;
export const DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
export const TYPEAHEAD_SEARCH_MINIMUM_SEARCH_LENGTH = 3;
export const TYPEAHEAD_SEARCH_LIMIT = 10;
export const EMPTY_VALUE_PLACEHOLDER = '(None)';
// --------------------------------- UTILITIES ---------------------------------
export function _defaultPrimitiveTypeValue(type) {
switch (type) {
case PRIMITIVE_TYPE.STRING:
return '';
case PRIMITIVE_TYPE.BOOLEAN:
return false;
case PRIMITIVE_TYPE.BYTE:
return btoa('');
case PRIMITIVE_TYPE.NUMBER:
case PRIMITIVE_TYPE.DECIMAL:
case PRIMITIVE_TYPE.FLOAT:
case PRIMITIVE_TYPE.INTEGER:
case PRIMITIVE_TYPE.BINARY:
return 0;
case PRIMITIVE_TYPE.DATE:
case PRIMITIVE_TYPE.STRICTDATE:
return formatDate(new Date(Date.now()), DATE_FORMAT);
case PRIMITIVE_TYPE.DATETIME:
return formatDate(new Date(Date.now()), DATE_TIME_FORMAT);
default:
throw new UnsupportedOperationError(`Can't generate value for type '${type}'`);
}
}
export function getFilterOperation(operator, operators) {
return guaranteeNonNullable(operators.find((op) => op.operator === operator), `Can't find filter operation '${operator}'`);
}
export function getAggregateOperation(operator, aggregateOperations) {
return guaranteeNonNullable(aggregateOperations.find((op) => op.operator === operator), `Can't find aggregate operation '${operator}'`);
}
export function getDataType(type) {
switch (type) {
case PRIMITIVE_TYPE.NUMBER:
case PRIMITIVE_TYPE.INTEGER:
case PRIMITIVE_TYPE.DECIMAL:
case PRIMITIVE_TYPE.FLOAT:
return DataCubeColumnDataType.NUMBER;
case PRIMITIVE_TYPE.DATE:
case PRIMITIVE_TYPE.STRICTDATE:
return DataCubeColumnDataType.DATE;
case PRIMITIVE_TYPE.DATETIME:
return DataCubeColumnDataType.TIME;
case PRIMITIVE_TYPE.STRING:
default:
return DataCubeColumnDataType.TEXT;
}
}
export function ofDataType(type, dataTypes) {
return dataTypes.includes(getDataType(type));
}
export function isDimensionalGridMode(gridMode) {
return gridMode === DataCubeGridMode.MULTIDIMENSIONAL;
}
export function isPrimitiveType(type) {
return [
PRIMITIVE_TYPE.NUMBER,
PRIMITIVE_TYPE.INTEGER,
PRIMITIVE_TYPE.DECIMAL,
PRIMITIVE_TYPE.FLOAT,
PRIMITIVE_TYPE.DATE,
PRIMITIVE_TYPE.STRICTDATE,
PRIMITIVE_TYPE.DATETIME,
PRIMITIVE_TYPE.STRING,
PRIMITIVE_TYPE.BOOLEAN,
].includes(type);
}
export function isPivotResultColumnName(columnName) {
return columnName.includes(PIVOT_COLUMN_NAME_VALUE_SEPARATOR);
}
export function getPivotResultColumnBaseColumnName(columnName) {
if (!isPivotResultColumnName(columnName)) {
throw new IllegalStateError(`Column '${columnName}' is not a pivot result column`);
}
return columnName.substring(columnName.lastIndexOf(PIVOT_COLUMN_NAME_VALUE_SEPARATOR) +
PIVOT_COLUMN_NAME_VALUE_SEPARATOR.length);
}
//# sourceMappingURL=DataCubeQueryEngine.js.map