Browse Source

feat: Add MID/SUBSTR function support

Signed-off-by: Pranav C <pranavxc@gmail.com>
pull/448/head
Pranav C 3 years ago
parent
commit
1b9f1bafcd
  1. 16
      packages/nc-gui/components/project/spreadsheet/components/editColumn/formulaOptions.vue
  2. 1
      packages/nocodb/src/lib/dataMapper/lib/sql/functionMappings/mssql.ts
  3. 3
      packages/nocodb/src/lib/dataMapper/lib/sql/functionMappings/mysql.ts
  4. 1
      packages/nocodb/src/lib/dataMapper/lib/sql/functionMappings/pg.ts
  5. 3
      packages/nocodb/src/lib/dataMapper/lib/sql/functionMappings/sqlite.ts

16
packages/nc-gui/components/project/spreadsheet/components/editColumn/formulaOptions.vue

@ -61,7 +61,7 @@
<script>
import NcAutocompleteTree from '@/helpers/NcAutocompleteTree'
import { getWordUntilCaret, insertAtCursor } from '@/helpers'
import {getWordUntilCaret, insertAtCursor} from '@/helpers'
import debounce from 'debounce'
import jsep from 'jsep'
@ -87,7 +87,9 @@ export default {
'SEARCH',
'INT',
'RIGHT',
'LEFT'
'LEFT',
'SUBSTR',
'MID'
],
availableBinOps: ['+', '-', '*', '/'],
autocomplete: false,
@ -99,9 +101,9 @@ export default {
computed: {
suggestionsList() {
return [
...this.availableFunctions.map(fn => ({ text: fn, type: 'function' })),
...this.meta.columns.map(c => ({ text: c._cn, type: 'column', c })),
...this.availableBinOps.map(op => ({ text: op, type: 'op' }))
...this.availableFunctions.map(fn => ({text: fn, type: 'function'})),
...this.meta.columns.map(c => ({text: c._cn, type: 'column', c})),
...this.availableBinOps.map(op => ({text: op, type: 'op'}))
]
},
acTree() {
@ -113,7 +115,7 @@ export default {
}
},
created() {
this.formula = this.value ? { ...this.value } : {}
this.formula = this.value ? {...this.value} : {}
},
methods: {
async save() {
@ -215,7 +217,7 @@ export default {
this.$set(this.formula, 'value', insertAtCursor(this.$refs.input.$el.querySelector('input'), text, len))
}
},
_handleInputDeb: debounce(async function(self) {
_handleInputDeb: debounce(async function (self) {
await self.handleInput()
}, 250),
handleInputDeb() {

1
packages/nocodb/src/lib/dataMapper/lib/sql/functionMappings/mssql.ts

@ -49,6 +49,7 @@ const mssql = {
INT: (args: MapFnArgs) => {
return args.knex.raw(`CASE WHEN ISNUMERIC(${args.fn(args.pt.arguments[0]).toQuery()}) = 1 THEN FLOOR(${args.fn(args.pt.arguments[0]).toQuery()}) ELSE 0 END${args.colAlias}`)
},
MID:'SUBSTR'
}
export default mssql;

3
packages/nocodb/src/lib/dataMapper/lib/sql/functionMappings/mysql.ts

@ -19,7 +19,8 @@ const mysql2 = {
},
RIGHT:(args: MapFnArgs)=> {
return args.knex.raw(`SUBSTR(${args.fn(args.pt.arguments[0])},-${args.fn(args.pt.arguments[1])})${args.colAlias}`)
}
},
MID:'SUBSTR'
}

1
packages/nocodb/src/lib/dataMapper/lib/sql/functionMappings/pg.ts

@ -15,6 +15,7 @@ const pg = {
// todo: correction
return args.knex.raw(`REGEXP_REPLACE(COALESCE(${args.fn(args.pt.arguments[0])}::character varying, '0'), '[^0-9]+|\\.[0-9]+' ,'')${args.colAlias}`)
},
MID: 'SUBSTR'
}

3
packages/nocodb/src/lib/dataMapper/lib/sql/functionMappings/sqlite.ts

@ -31,7 +31,8 @@ const sqlite3 = {
},
RIGHT:(args: MapFnArgs)=> {
return args.knex.raw(`SUBSTR(${args.fn(args.pt.arguments[0])},-${args.fn(args.pt.arguments[1])})${args.colAlias}`)
}
},
MID:'SUBSTR'
}

Loading…
Cancel
Save