1
0
mirror of https://gitlab.com/bramw/baserow.git synced 2024-11-21 23:37:55 +00:00
bramw_baserow/web-frontend/modules/database/formula/functions.js

2607 lines
46 KiB
JavaScript

import { Registerable } from '@baserow/modules/core/registry'
export class BaserowFunctionDefinition extends Registerable {
getDescription() {
throw new Error(
'Not implemented error. This method should return the functions description.'
)
}
getSyntaxUsage() {
throw new Error(
'Not implemented error. This method should return a string showing the syntax ' +
'of the function.'
)
}
getExamples() {
throw new Error(
'Not implemented error. This method should return list of strings showing ' +
'example usage of the function.'
)
}
getFormulaType() {
throw new Error(
'Not implemented error. This method should return the baserow formula type ' +
'string of the function.'
)
}
isOperator() {
return false
}
getOperator() {
return ''
}
isRollupCompatible(targetFieldType) {
return false
}
}
export class BaserowUpper extends BaserowFunctionDefinition {
static getType() {
return 'upper'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.upperDescription')
}
getSyntaxUsage() {
return ['upper(text)']
}
getExamples() {
return ["upper('a') = 'A'"]
}
getFormulaType() {
return 'text'
}
}
export class BaserowLower extends BaserowFunctionDefinition {
static getType() {
return 'lower'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.lowerDescription')
}
getSyntaxUsage() {
return ['lower(text)']
}
getExamples() {
return ["lower('A') = 'a'"]
}
getFormulaType() {
return 'text'
}
}
export class BaserowSplitPart extends BaserowFunctionDefinition {
static getType() {
return 'split_part'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.splitPartDescription')
}
getSyntaxUsage() {
return ['split_part(text, delimiter, position)']
}
getExamples() {
return ["split_part('John, Jane, Michael', ', ', 2) = 'Jane'"]
}
getFormulaType() {
return 'text'
}
}
export class BaserowConcat extends BaserowFunctionDefinition {
static getType() {
return 'concat'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.concatDescription')
}
getSyntaxUsage() {
return ['concat(any, any, ...)']
}
getExamples() {
return ["concat('A', 1, 1=2) = 'A1false'"]
}
getFormulaType() {
return 'text'
}
}
export class BaserowAdd extends BaserowFunctionDefinition {
static getType() {
return 'add'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.addDescription')
}
getSyntaxUsage() {
return [
'number + number',
'text + text',
'date + duration',
'duration + duration',
'duration + date',
'add(number, number)',
]
}
getExamples() {
return ['1+1 = 2', "'a' + 'b' = 'ab'"]
}
getFormulaType() {
return 'special'
}
isOperator() {
return true
}
getOperator() {
return '+'
}
}
export class BaserowMinus extends BaserowFunctionDefinition {
static getType() {
return 'minus'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.minusDescription')
}
getSyntaxUsage() {
return [
'number - number',
'minus(number, number)',
'date - date',
'date - duration',
'duration - duration',
]
}
getExamples() {
return ['3-1 = 2']
}
getFormulaType() {
return 'special'
}
isOperator() {
return true
}
getOperator() {
return '-'
}
}
export class BaserowMultiply extends BaserowFunctionDefinition {
static getType() {
return 'multiply'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.multiplyDescription')
}
getSyntaxUsage() {
return [
'number * number',
'multiply(number, number)',
'multiply(duration, number)',
'multiply(number, duration)',
]
}
getExamples() {
return ['2*5 = 10']
}
getFormulaType() {
return 'number'
}
isOperator() {
return true
}
getOperator() {
return '*'
}
}
export class BaserowDivide extends BaserowFunctionDefinition {
static getType() {
return 'divide'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.divideDescription')
}
getSyntaxUsage() {
return [
'number / number',
'divide(number, number)',
'divide(duration, number)',
]
}
getExamples() {
return ['10/2 = 5']
}
getFormulaType() {
return 'number'
}
isOperator() {
return true
}
getOperator() {
return '/'
}
}
export class BaserowEqual extends BaserowFunctionDefinition {
static getType() {
return 'equal'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.equalDescription')
}
getSyntaxUsage() {
return ['any = any', 'equal(any, any)']
}
getExamples() {
return ['1=1', "'a' = 'a'"]
}
getFormulaType() {
return 'boolean'
}
isOperator() {
return true
}
getOperator() {
return '='
}
}
export class BaserowHasOption extends BaserowFunctionDefinition {
static getType() {
return 'has_option'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.hasOptionDescription')
}
getSyntaxUsage() {
return [
'has_option(multiple select, text)',
'has_option(lookup(link row, single select), text)',
]
}
getExamples() {
return [
"has_option(field('multiple select'), 'option_a')",
"has_option(lookup(field('link row'), field('single select')), 'option_a')",
]
}
getFormulaType() {
return 'boolean'
}
isOperator() {
return true
}
}
export class BaserowIf extends BaserowFunctionDefinition {
static getType() {
return 'if'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.ifDescription')
}
getSyntaxUsage() {
return ['if(bool, any, any)']
}
getExamples() {
return ["if(field('text field') = 'on', 'it is on', 'it is off')"]
}
getFormulaType() {
return 'boolean'
}
}
export class BaserowToText extends BaserowFunctionDefinition {
static getType() {
return 'totext'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.toTextDescription')
}
getSyntaxUsage() {
return ['totext(any)']
}
getExamples() {
return ["totext(10) = '10'"]
}
getFormulaType() {
return 'text'
}
}
export class BaserowDatetimeFormat extends BaserowFunctionDefinition {
static getType() {
return 'datetime_format'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.datetimeFormatDescription')
}
getSyntaxUsage() {
return ['datetime_format(date, text)']
}
getExamples() {
return ["datetime_format(field('date field'), 'YYYY')"]
}
getFormulaType() {
return 'date'
}
}
export class BaserowDatetimeFormatTz extends BaserowFunctionDefinition {
static getType() {
return 'datetime_format_tz'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.datetimeFormatTzDescription')
}
getSyntaxUsage() {
return ['datetime_format_tz(date, text, text)']
}
getExamples() {
return [
"datetime_format_tz(field('date field'), 'YYYY-MM-DD HH24:MI', 'Europe/Amsterdam')",
]
}
getFormulaType() {
return 'date'
}
}
export class BaserowEncodeUri extends BaserowFunctionDefinition {
static getType() {
return 'encode_uri'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.encodeUriDescription')
}
getSyntaxUsage() {
return ['encode_uri(text)']
}
getExamples() {
return [
"encode_uri('http://example.com/wiki/Señor') = 'http://example.com/wiki/Se%c3%b1or'",
]
}
getFormulaType() {
return 'text'
}
}
export class BaserowEncodeUriComponent extends BaserowFunctionDefinition {
static getType() {
return 'encode_uri_component'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.encodeUriComponentDescription')
}
getSyntaxUsage() {
return ['encode_uri_component(text)']
}
getExamples() {
return ["encode_uri_component('Hello World') = 'Hello%20World'"]
}
getFormulaType() {
return 'text'
}
}
export class BaserowToNumber extends BaserowFunctionDefinition {
static getType() {
return 'tonumber'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.toNumberDescription')
}
getSyntaxUsage() {
return ['tonumber(text)']
}
getExamples() {
return ["tonumber('10') = 10"]
}
getFormulaType() {
return 'number'
}
}
export class BaserowField extends BaserowFunctionDefinition {
static getType() {
return 'field'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.fieldDescription')
}
getSyntaxUsage() {
return ["field('a field name')"]
}
getExamples() {
return ["field('my text field') = 'flag'"]
}
getFormulaType() {
return 'special'
}
}
export class BaserowLookup extends BaserowFunctionDefinition {
static getType() {
return 'lookup'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.lookupDescription')
}
getSyntaxUsage() {
return ["lookup('a link row field name', 'field name in other the table')"]
}
getExamples() {
return [
"lookup('link row field', 'first name') = lookup('link row field', 'last name')",
]
}
getFormulaType() {
return 'special'
}
}
export class BaserowIsBlank extends BaserowFunctionDefinition {
static getType() {
return 'isblank'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.isBlankDescription')
}
getSyntaxUsage() {
return ['isblank(any)']
}
getExamples() {
return ["isblank('10') "]
}
getFormulaType() {
return 'boolean'
}
}
export class BaserowDurationToSeconds extends BaserowFunctionDefinition {
static getType() {
return 'toseconds'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.durationToSecondsDescription')
}
getSyntaxUsage() {
return ['toseconds(duration)']
}
getExamples() {
return ["toseconds(duration('10 minutes'))"]
}
getFormulaType() {
return 'number'
}
}
export class BaserowSecondsToDuration extends BaserowFunctionDefinition {
static getType() {
return 'toduration'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.secondsToDurationDescription')
}
getSyntaxUsage() {
return ['toduration(number)']
}
getExamples() {
return ['toduration(60)']
}
getFormulaType() {
return 'duration'
}
}
export class BaserowIsNull extends BaserowFunctionDefinition {
static getType() {
return 'is_null'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.isNullDescription')
}
getSyntaxUsage() {
return ['is_null(any)']
}
getExamples() {
return ["is_null('10') "]
}
getFormulaType() {
return 'boolean'
}
}
export class BaserowT extends BaserowFunctionDefinition {
static getType() {
return 't'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.tDescription')
}
getSyntaxUsage() {
return ['t(any)']
}
getExamples() {
return ['t(10)']
}
getFormulaType() {
return 'text'
}
}
export class BaserowNot extends BaserowFunctionDefinition {
static getType() {
return 'not'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.notDescription')
}
getSyntaxUsage() {
return ['not(boolean)']
}
getExamples() {
return ['not(true) = false', 'not(10=2) = true']
}
getFormulaType() {
return 'boolean'
}
}
export class BaserowGreaterThan extends BaserowFunctionDefinition {
static getType() {
return 'greater_than'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.greaterThanDescription')
}
getSyntaxUsage() {
return ['any > any']
}
getExamples() {
return [
'1 > 2 = false',
"if(field('a') > field('b'), 'a is bigger', 'b is bigger or equal')",
]
}
getFormulaType() {
return 'boolean'
}
isOperator() {
return true
}
getOperator() {
return '>'
}
}
export class BaserowGreaterThanOrEqual extends BaserowFunctionDefinition {
static getType() {
return 'greater_than_or_equal'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.greaterThanOrEqualDescription')
}
getSyntaxUsage() {
return ['any >= any']
}
getExamples() {
return [
'1 >= 1 = true',
"if(field('a') >= field('b'), 'a is bigger or equal', 'b is smaller')",
]
}
getFormulaType() {
return 'boolean'
}
isOperator() {
return true
}
getOperator() {
return '>='
}
}
export class BaserowLessThan extends BaserowFunctionDefinition {
static getType() {
return 'less_than'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.lessThanDescription')
}
getSyntaxUsage() {
return ['any < any']
}
getExamples() {
return [
'2 < 1 = false',
"if(field('a') < field('b'), 'a is smaller', 'b is bigger or equal')",
]
}
getFormulaType() {
return 'boolean'
}
isOperator() {
return true
}
getOperator() {
return '<'
}
}
export class BaserowLessThanOrEqual extends BaserowFunctionDefinition {
static getType() {
return 'less_than_or_equal'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.lessThanOrEqualDescription')
}
getSyntaxUsage() {
return ['any <= any']
}
getExamples() {
return [
'1 <= 1 = true',
"if(field('a') <= field('b'), 'a smaller', 'b is greater than or equal')",
]
}
getFormulaType() {
return 'boolean'
}
isOperator() {
return true
}
getOperator() {
return '<='
}
}
export class BaserowNow extends BaserowFunctionDefinition {
static getType() {
return 'now'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.nowDescription')
}
getSyntaxUsage() {
return ['now()']
}
getExamples() {
return ['now() > todate("2021-12-12 13:00:00", "YYYY-MM-DD HH24:MI:SS")']
}
getFormulaType() {
return 'date'
}
}
export class BaserowToday extends BaserowFunctionDefinition {
static getType() {
return 'today'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.todayDescription')
}
getSyntaxUsage() {
return ['today()']
}
getExamples() {
return ['today() > todate("2021-12-12", "YYYY-MM-DD")']
}
getFormulaType() {
return 'date'
}
}
export class BaserowToDate extends BaserowFunctionDefinition {
static getType() {
return 'todate'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.toDateDescription')
}
getSyntaxUsage() {
return ['todate(text, text)']
}
getExamples() {
return ["todate('20210101', 'YYYYMMDD')"]
}
getFormulaType() {
return 'date'
}
}
export class BaserowToDateTz extends BaserowFunctionDefinition {
static getType() {
return 'todate_tz'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.toDateTzDescription')
}
getSyntaxUsage() {
return ['todate_tz(text, text, text)']
}
getExamples() {
return ["todate_tz('20210101', 'YYYYMMDD', 'Europe/Amsterdam')"]
}
getFormulaType() {
return 'date'
}
}
export class BaserowDay extends BaserowFunctionDefinition {
static getType() {
return 'day'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.dayDescription')
}
getSyntaxUsage() {
return ['day(date)']
}
getExamples() {
return ["day(todate('20210101', 'YYYYMMDD')) = 1"]
}
getFormulaType() {
return 'date'
}
}
export class BaserowDateDiff extends BaserowFunctionDefinition {
static getType() {
return 'date_diff'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.dateDiffDescription')
}
getSyntaxUsage() {
return ['date_diff(text, date, date)']
}
getExamples() {
return [
"date_diff('yy', todate('2000-01-01', 'YYYY-MM-DD'), todate('2020-01-01'," +
" 'YYYY-MM-DD')) = 20",
]
}
getFormulaType() {
return 'date'
}
}
export class BaserowAnd extends BaserowFunctionDefinition {
static getType() {
return 'and'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.andDescription')
}
getSyntaxUsage() {
return ['and(boolean, boolean)']
}
getExamples() {
return [
'and(true, false) = false',
'true && true = true',
"and(field('first test'), field('second test'))",
]
}
getFormulaType() {
return 'boolean'
}
getOperator() {
return '&&'
}
}
export class BaserowOr extends BaserowFunctionDefinition {
static getType() {
return 'or'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.orDescription')
}
getSyntaxUsage() {
return ['or(boolean, boolean)']
}
getExamples() {
return [
'or(true, false) = true',
'and(true, true) = true',
"or(field('first test'), field('second test'))",
]
}
getFormulaType() {
return 'boolean'
}
}
export class BaserowDateInterval extends BaserowFunctionDefinition {
static getType() {
return 'date_interval'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.dateIntervalDescription')
}
getSyntaxUsage() {
return ['date_interval(text)']
}
getExamples() {
return ["date_interval('1 year')", "date_interval('2 seconds')"]
}
getFormulaType() {
return 'duration'
}
}
export class BaserowReplace extends BaserowFunctionDefinition {
static getType() {
return 'replace'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.replaceDescription')
}
getSyntaxUsage() {
return ['replace(text, text, text)']
}
getExamples() {
return ['replace("test a b c test", "test", "1") = "1 a b c 1"']
}
getFormulaType() {
return 'text'
}
}
export class BaserowSearch extends BaserowFunctionDefinition {
static getType() {
return 'search'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.searchDescription')
}
getSyntaxUsage() {
return ['search(text, text)']
}
getExamples() {
return [
'search("test a b c test", "test") = 1',
'search("none", "test") = 0',
]
}
getFormulaType() {
return 'text'
}
}
export class BaserowRowId extends BaserowFunctionDefinition {
static getType() {
return 'row_id'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.rowIdDescription')
}
getSyntaxUsage() {
return ['row_id()']
}
getExamples() {
return ['concat("Row ", row_id())']
}
getFormulaType() {
return 'special'
}
}
export class BaserowLength extends BaserowFunctionDefinition {
static getType() {
return 'length'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.lengthDescription')
}
getSyntaxUsage() {
return ['length(text)']
}
getExamples() {
return ['length("abc") = 3']
}
getFormulaType() {
return 'text'
}
}
export class BaserowReverse extends BaserowFunctionDefinition {
static getType() {
return 'reverse'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.reverseDescription')
}
getSyntaxUsage() {
return ['reverse(text)']
}
getExamples() {
return ['reverse("abc") = "cba"']
}
getFormulaType() {
return 'text'
}
}
export class BaserowNotEqual extends BaserowFunctionDefinition {
static getType() {
return 'not_equal'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.notEqualDescription')
}
getSyntaxUsage() {
return ['any != any', 'not_equal(any, any)']
}
getExamples() {
return ['1!=2', "'a' != 'b'"]
}
getFormulaType() {
return 'boolean'
}
isOperator() {
return true
}
getOperator() {
return '!='
}
}
export class BaserowCount extends BaserowFunctionDefinition {
static getType() {
return 'count'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.countDescription')
}
getSyntaxUsage() {
return ['count(array)']
}
getExamples() {
return ["count(field('my link row field'))"]
}
getFormulaType() {
return 'array'
}
isRollupCompatible(targetFieldType) {
return true
}
}
export class BaserowContains extends BaserowFunctionDefinition {
static getType() {
return 'contains'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.containsDescription')
}
getSyntaxUsage() {
return ['contains(text,text)']
}
getExamples() {
return ['contains("test", "e") = true']
}
getFormulaType() {
return 'text'
}
}
export class BaserowLeft extends BaserowFunctionDefinition {
static getType() {
return 'left'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.leftDescription')
}
getSyntaxUsage() {
return ['left(text, number)']
}
getExamples() {
return [
'left("abcde", 2) = "ab"',
'left("abcde", -2) = "abc"',
'when_empty(left("abcd", 1/0), "error") = "error"',
]
}
getFormulaType() {
return 'text'
}
}
export class BaserowRight extends BaserowFunctionDefinition {
static getType() {
return 'right'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.rightDescription')
}
getSyntaxUsage() {
return ['right(text, number)']
}
getExamples() {
return [
'right("abcde", 2) = "de"',
'right("abcde", -2) = "cde"',
'when_empty(right("abcd", 1/0), "error") = "error"',
]
}
getFormulaType() {
return 'text'
}
}
export class BaserowTrim extends BaserowFunctionDefinition {
static getType() {
return 'trim'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.trimDescription')
}
getSyntaxUsage() {
return ['trim(text)']
}
getExamples() {
return ['trim(" abc ") = "abc"']
}
getFormulaType() {
return 'text'
}
}
export class BaserowRegexReplace extends BaserowFunctionDefinition {
static getType() {
return 'regex_replace'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.regexReplaceDescription')
}
getSyntaxUsage() {
return ['regex_replace(text, regex text, replacement text)']
}
getExamples() {
return ['regex_replace("abc", "a", "1") = "1bc"']
}
getFormulaType() {
return 'text'
}
}
export class BaserowLink extends BaserowFunctionDefinition {
static getType() {
return 'link'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.linkDescription')
}
getSyntaxUsage() {
return ['link(text, text)']
}
getExamples() {
return ["link('http://your-text-here.com', 'label')"]
}
getFormulaType() {
return 'link'
}
}
export class BaserowButton extends BaserowFunctionDefinition {
static getType() {
return 'button'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.buttonDescription')
}
getSyntaxUsage() {
return ['button(text, text)']
}
getExamples() {
return ["button('http://your-text-here.com', 'your-label')"]
}
getFormulaType() {
return 'link'
}
}
export class BaserowGetLinkUrl extends BaserowFunctionDefinition {
static getType() {
return 'get_link_url'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.getLinkUrlDescription')
}
getSyntaxUsage() {
return ['get_link_url(link)']
}
getExamples() {
return [
"get_link_url(field('formula link field')) = 'http://your-text-here.com'",
]
}
getFormulaType() {
return 'link'
}
}
export class BaserowGetLinkLabel extends BaserowFunctionDefinition {
static getType() {
return 'get_link_label'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.getLinkLabelDescription')
}
getSyntaxUsage() {
return ['get_link_label(button)']
}
getExamples() {
return ["get_link_label(field('formula button field')) = 'your-label'"]
}
getFormulaType() {
return 'link'
}
}
export class BaserowGreatest extends BaserowFunctionDefinition {
static getType() {
return 'greatest'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.greatestDescription')
}
getSyntaxUsage() {
return ['greatest(number, number)']
}
getExamples() {
return ['greatest(1,2) = 2']
}
getFormulaType() {
return 'number'
}
}
export class BaserowRound extends BaserowFunctionDefinition {
static getType() {
return 'round'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.roundDescription')
}
getSyntaxUsage() {
return ['round(number, number)']
}
getExamples() {
return [
'round(1.12345,2) = 1.12',
'round(1234.5678, -2) = 1200',
'round(1234.11111, 2.999) = 1234.11',
'round(1234.11111, 1/0) = NaN',
'round(1234.11111, tonumber("invalid number")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowPower extends BaserowFunctionDefinition {
static getType() {
return 'power'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.powerDescription')
}
getSyntaxUsage() {
return ['power(number, number)']
}
getExamples() {
return [
'power(3, 2) = 9',
'power(25, 0.5) = 5.0',
'power(-2.001, 3) = -8.012',
'power(1/0, 2) = NaN',
'power(1234.11111, 1/0) = NaN',
'power(1234.11111, tonumber("invalid number")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowLog extends BaserowFunctionDefinition {
static getType() {
return 'log'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.logDescription')
}
getSyntaxUsage() {
return ['log(number, number)']
}
getExamples() {
return [
'log(3, 9) = 2',
'log(125.000, 5) = 0.333',
'log(-8.000, 3) = NaN',
'log(1/0, -2) = NaN',
'log(1234.11111, 1/0) = NaN',
'log(1234.11111, tonumber("invalid number")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowMod extends BaserowFunctionDefinition {
static getType() {
return 'mod'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.modDescription')
}
getSyntaxUsage() {
return ['mod(number, number)']
}
getExamples() {
return [
'mod(5, 2) = 1',
'mod(5, 1.5) = 0.5',
'mod(-5.001, 1.5) = -0.501',
'mod(-3, 2) = -1',
'mod(3, -2) = 1',
'mod(-3, -2) = -1',
'mod(1, 0) = NaN',
'mod(4, tonumber("invalid number")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowAbs extends BaserowFunctionDefinition {
static getType() {
return 'abs'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.absDescription')
}
getSyntaxUsage() {
return ['abs(number)']
}
getExamples() {
return [
'abs(1.49) = 1.49',
'abs(1.51) = 1.51',
'abs(-1.51) = 1.51',
'abs(-1.49) = 1.49',
'abs(1/0) = NaN',
'abs(tonumber("invalid")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowExp extends BaserowFunctionDefinition {
static getType() {
return 'exp'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.expDescription')
}
getSyntaxUsage() {
return ['exp(number)']
}
getExamples() {
return [
'exp(1.000) = 2.718',
'exp(0) = 1',
'exp(-1.00) = 0.37',
'exp(1/0) = NaN',
'exp(tonumber("invalid")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowEven extends BaserowFunctionDefinition {
static getType() {
return 'even'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.evenDescription')
}
getSyntaxUsage() {
return ['even(number)']
}
getExamples() {
return [
'even(2) = true',
'even(2.5) = false',
'even(5) = false',
'even(1/0) = false',
'even(tonumber("invalid")) = false',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowOdd extends BaserowFunctionDefinition {
static getType() {
return 'odd'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.oddDescription')
}
getSyntaxUsage() {
return ['odd(number)']
}
getExamples() {
return [
'odd(2) = false',
'odd(2.5) = false',
'odd(5) = true',
'odd(1/0) = false',
'odd(tonumber("invalid")) = false',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowLn extends BaserowFunctionDefinition {
static getType() {
return 'ln'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.lnDescription')
}
getSyntaxUsage() {
return ['ln(number)']
}
getExamples() {
return [
'ln(2.718) = 1.000',
'ln(9.0) = 2.2',
'ln(2.00) = 0.69',
'ln(-1) = NaN',
'ln(1/0) = NaN',
'ln(tonumber("invalid")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowSign extends BaserowFunctionDefinition {
static getType() {
return 'sign'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.signDescription')
}
getSyntaxUsage() {
return ['sign(number)']
}
getExamples() {
return [
'sign(2.1234) = 1',
'sign(-9.0) = -1',
'sign(0) = 0',
'sign(1/0) = NaN',
'sign(tonumber("invalid")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowSqrt extends BaserowFunctionDefinition {
static getType() {
return 'sqrt'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.sqrtDescription')
}
getSyntaxUsage() {
return ['sqrt(number)']
}
getExamples() {
return [
'sqrt(9) = 3',
'sqrt(2.00) = 1.41',
'sqrt(-4) = NaN',
'sqrt(1/0) = NaN',
'sqrt(tonumber("invalid")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowFloor extends BaserowFunctionDefinition {
static getType() {
return 'floor'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.floorDescription')
}
getSyntaxUsage() {
return ['floor(number)']
}
getExamples() {
return [
'floor(1.49) = 1',
'floor(1.51) = 1',
'floor(-1.51) = -2',
'floor(-1.49) = -2',
'floor(1/0) = NaN',
'floor(tonumber("invalid")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowCeil extends BaserowFunctionDefinition {
static getType() {
return 'ceil'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.ceilDescription')
}
getSyntaxUsage() {
return ['ceil(number)']
}
getExamples() {
return [
'ceil(1.49) = 2',
'ceil(1.51) = 2',
'ceil(-1.51) = -1',
'ceil(-1.49) = -1',
'ceil(1/0) = NaN',
'ceil(tonumber("invalid")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowTrunc extends BaserowFunctionDefinition {
static getType() {
return 'trunc'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.truncDescription')
}
getSyntaxUsage() {
return ['trunc(number)']
}
getExamples() {
return [
'trunc(1.49) = 1',
'trunc(1.51) = 1',
'trunc(-1.51) = -1',
'trunc(-1.49) = -1',
'trunc(1/0) = NaN',
'trunc(tonumber("invalid")) = NaN',
]
}
getFormulaType() {
return 'number'
}
}
export class BaserowIsNaN extends BaserowFunctionDefinition {
static getType() {
return 'is_nan'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.isNanDescription')
}
getSyntaxUsage() {
return ['is_nan(number)']
}
getExamples() {
return ['is_nan(1 / 0) = true', 'is_nan(1) = false']
}
getFormulaType() {
return 'number'
}
}
export class BaserowWhenNaN extends BaserowFunctionDefinition {
static getType() {
return 'when_nan'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.whenNanDescription')
}
getSyntaxUsage() {
return ['when_nan(number, fallback)']
}
getExamples() {
return ['when_nan(1 / 0, 4) = 4', 'when_nan(1, 4) = 1']
}
getFormulaType() {
return 'number'
}
}
export class BaserowLeast extends BaserowFunctionDefinition {
static getType() {
return 'least'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.leastDescription')
}
getSyntaxUsage() {
return ['least(number, number)']
}
getExamples() {
return ['least(1,2) = 1']
}
getFormulaType() {
return 'number'
}
}
export class BaserowMonth extends BaserowFunctionDefinition {
static getType() {
return 'month'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.monthDescription')
}
getSyntaxUsage() {
return ['month(date)']
}
getExamples() {
return ['month(todate("2021-12-12", "YYYY-MM-DD")) = 12']
}
getFormulaType() {
return 'date'
}
}
export class BaserowYear extends BaserowFunctionDefinition {
static getType() {
return 'year'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.yearDescription')
}
getSyntaxUsage() {
return ['year(date)']
}
getExamples() {
return ['year(field("my date"))']
}
getFormulaType() {
return 'date'
}
}
export class BaserowSecond extends BaserowFunctionDefinition {
static getType() {
return 'second'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.secondDescription')
}
getSyntaxUsage() {
return ['second(date)']
}
getExamples() {
return ['second(field("dates")) == 2']
}
getFormulaType() {
return 'date'
}
}
export class BaserowWhenEmpty extends BaserowFunctionDefinition {
static getType() {
return 'when_empty'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.whenEmptyDescription')
}
getSyntaxUsage() {
return ['when_empty(any, same type as the first)']
}
getExamples() {
return ['when_empty(field("a"), "default")']
}
getFormulaType() {
return 'special'
}
}
export class BaserowAny extends BaserowFunctionDefinition {
static getType() {
return 'any'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.anyDescription')
}
getSyntaxUsage() {
return ['any(boolean values from a lookup() or field())']
}
getExamples() {
return ['any(field("my lookup") = "test")']
}
getFormulaType() {
return 'array'
}
isRollupCompatible(targetFieldType) {
return true
}
}
export class BaserowEvery extends BaserowFunctionDefinition {
static getType() {
return 'every'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.everyDescription')
}
getSyntaxUsage() {
return ['every(boolean values from a lookup() or field())']
}
getExamples() {
return ['every(field("my lookup") = "test")']
}
getFormulaType() {
return 'array'
}
isRollupCompatible(targetFieldType) {
return true
}
}
export class BaserowMax extends BaserowFunctionDefinition {
static getType() {
return 'max'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.maxDescription')
}
getSyntaxUsage() {
return ['max(numbers/text/date from a lookup() or field())']
}
getExamples() {
return [
'max(lookup("link field", "number field"))',
'max(lookup("link field", "date field"))',
'max(field("lookup field"))',
'max(field("link field with text primary field"))',
]
}
getFormulaType() {
return 'array'
}
isRollupCompatible(targetFieldType) {
return true
}
}
export class BaserowMin extends BaserowFunctionDefinition {
static getType() {
return 'min'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.minDescription')
}
getSyntaxUsage() {
return ['min(numbers/test/dates from a lookup() or field())']
}
getExamples() {
return [
'min(lookup("link field", "number field"))',
'min(lookup("link field", "date field"))',
'min(field("lookup field"))',
'min(field("link field with text primary field"))',
]
}
getFormulaType() {
return 'array'
}
isRollupCompatible(targetFieldType) {
return true
}
}
export class BaserowJoin extends BaserowFunctionDefinition {
static getType() {
return 'join'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.joinDescription')
}
getSyntaxUsage() {
return ['join(text from lookup() or field(), text)']
}
getExamples() {
return [
'join(lookup("link field", "number field"), "_")',
'join(field("lookup field"), field("different lookup field"))',
'join(field("link field with text primary field"), ",")',
]
}
getFormulaType() {
return 'array'
}
}
export class BaserowStddevPop extends BaserowFunctionDefinition {
static getType() {
return 'stddev_pop'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.stddevPopDescription')
}
getSyntaxUsage() {
return ['stddev_pop(numbers from lookup() or field())']
}
getExamples() {
return [
'stddev_pop(lookup("link field", "number field"))',
'stddev_pop(field("lookup field"))',
'stddev_pop(field("link field with number primary field"))',
]
}
getFormulaType() {
return 'array'
}
isRollupCompatible(targetFieldType) {
return true
}
}
export class BaserowStddevSample extends BaserowFunctionDefinition {
static getType() {
return 'stddev_sample'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.stddevSampleDescription')
}
getSyntaxUsage() {
return ['stddev_sample(numbers from lookup() or field())']
}
getExamples() {
return [
'stddev_sample(lookup("link field", "number field"))',
'stddev_sample(field("lookup field"))',
'stddev_sample(field("link field with number primary field"))',
]
}
getFormulaType() {
return 'array'
}
isRollupCompatible(targetFieldType) {
return true
}
}
export class BaserowVarianceSample extends BaserowFunctionDefinition {
static getType() {
return 'variance_sample'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.varianceSampleDescription')
}
getSyntaxUsage() {
return ['variance_sample(numbers from lookup() or field())']
}
getExamples() {
return [
'variance_sample(lookup("link field", "number field"))',
'variance_sample(field("lookup field"))',
'variance_sample(field("link field with number primary field"))',
]
}
getFormulaType() {
return 'array'
}
isRollupCompatible(targetFieldType) {
return true
}
}
export class BaserowVariancePop extends BaserowFunctionDefinition {
static getType() {
return 'variance_pop'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.variancePopDescription')
}
getSyntaxUsage() {
return ['variance_pop(numbers from lookup() or field())']
}
getExamples() {
return [
'variance_pop(lookup("link field", "number field"))',
'variance_pop(field("lookup field"))',
'variance_pop(field("link field with number primary field"))',
]
}
getFormulaType() {
return 'array'
}
isRollupCompatible(targetFieldType) {
return true
}
}
export class BaserowAvg extends BaserowFunctionDefinition {
static getType() {
return 'avg'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.avgDescription')
}
getSyntaxUsage() {
return ['avg(numbers from lookup() or field())']
}
getExamples() {
return [
'avg(lookup("link field", "number field"))',
'avg(field("lookup field"))',
'avg(field("link field with number primary field"))',
]
}
getFormulaType() {
return 'array'
}
isRollupCompatible(targetFieldType) {
return true
}
}
export class BaserowSum extends BaserowFunctionDefinition {
static getType() {
return 'sum'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.sumDescription')
}
getSyntaxUsage() {
return ['sum(numbers from lookup() or field())']
}
getExamples() {
return [
'sum(lookup("link field", "number field"))',
'sum(field("lookup field"))',
'sum(field("link field with number primary field"))',
]
}
getFormulaType() {
return 'array'
}
isRollupCompatible(targetFieldType) {
return true
}
}
export class BaserowFilter extends BaserowFunctionDefinition {
static getType() {
return 'filter'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.filterDescription')
}
getSyntaxUsage() {
return [
'filter(an expression involving lookup() or field(a link/lookup field),' +
' boolean)',
]
}
getExamples() {
return [
'sum(filter(lookup("link field", "number field"), lookup("link field", "number' +
' field") > 10))',
'filter(field("lookup field"), contains(field("lookup field"), "a"))',
'filter(field("link field") + "a", length(field("link field")) > 10")',
]
}
getFormulaType() {
return 'array'
}
}
export class BaserowGetFileVisibleName extends BaserowFunctionDefinition {
static getType() {
return 'get_file_visible_name'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.getFileVisibleNameDescription')
}
getSyntaxUsage() {
return ['get_file_visible_name(a file)']
}
getExamples() {
return ['get_file_visible_name(index(field("File field"), 0))']
}
getFormulaType() {
return 'single_file'
}
}
export class BaserowGetFileMimeType extends BaserowFunctionDefinition {
static getType() {
return 'get_file_mime_type'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.getFileMimeTypeDescription')
}
getSyntaxUsage() {
return ['get_file_mime_type(a file)']
}
getExamples() {
return ['get_file_mime_type(index(field("File field"), 0))']
}
getFormulaType() {
return 'single_file'
}
}
export class BaserowGetFileCount extends BaserowFunctionDefinition {
static getType() {
return 'get_file_count'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.getFileCountDescription')
}
getSyntaxUsage() {
return ['get_file_count(a file field)']
}
getExamples() {
return ['get_file_count(field("File field"))']
}
getFormulaType() {
return 'array'
}
}
export class BaserowGetFileSize extends BaserowFunctionDefinition {
static getType() {
return 'get_file_size'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.getFileSizeDescription')
}
getSyntaxUsage() {
return ['get_file_size(a file)']
}
getExamples() {
return ['get_file_size(index(field("File field"), 0))']
}
getFormulaType() {
return 'single_file'
}
}
export class BaserowGetImageWidth extends BaserowFunctionDefinition {
static getType() {
return 'get_image_width'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.getImageWidthDescription')
}
getSyntaxUsage() {
return ['get_image_width(a file)']
}
getExamples() {
return ['get_image_width(index(field("File field"), 0))']
}
getFormulaType() {
return 'single_file'
}
}
export class BaserowGetImageHeight extends BaserowFunctionDefinition {
static getType() {
return 'get_image_height'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.getImageHeightDescription')
}
getSyntaxUsage() {
return ['get_image_height(a file)']
}
getExamples() {
return ['get_image_height(index(field("File field"), 0))']
}
getFormulaType() {
return 'single_file'
}
}
export class BaserowIsImage extends BaserowFunctionDefinition {
static getType() {
return 'is_image'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.getIsImageDescription')
}
getSyntaxUsage() {
return ['is_image(a file)']
}
getExamples() {
return ['is_image(index(field("File field"), 0))']
}
getFormulaType() {
return 'single_file'
}
}
export class BaserowIndex extends BaserowFunctionDefinition {
static getType() {
return 'index'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.indexDescription')
}
getSyntaxUsage() {
return ['index(a file field, a number)']
}
getExamples() {
return ['index(field("File field"), 0)']
}
getFormulaType() {
return 'special'
}
}
export class BaserowToUrl extends BaserowFunctionDefinition {
static getType() {
return 'tourl'
}
getDescription() {
const { i18n } = this.app
return i18n.t('formulaFunctions.getToUrlDescription')
}
getSyntaxUsage() {
return ['to_url(any)']
}
getExamples() {
return ['to_url("www.baserow.io")']
}
getFormulaType() {
return 'url'
}
}