UNPKG

@finos/legend-data-cube

Version:
372 lines 19.4 kB
/** * 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