Browse Source

refactor: use SqlFactory from nocodb-sdk package (#1750)

Signed-off-by: Pranav C <pranavxc@gmail.com>
pull/1759/head
Pranav C 3 years ago committed by GitHub
parent
commit
cea2b4ad73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      packages/nc-gui/components/project/functionTab/functionQuery.vue
  2. 5
      packages/nc-gui/components/project/spreadsheet/public/xcForm.vue
  3. 5
      packages/nc-gui/components/project/spreadsheet/public/xcTable.vue
  4. 4
      packages/nc-gui/components/project/sqlClient.vue
  5. 4
      packages/nc-gui/components/project/tableTabs/columns.vue
  6. 1224
      packages/nc-gui/helpers/sqlUi/MssqlUi.js
  7. 1262
      packages/nc-gui/helpers/sqlUi/MysqlUi.js
  8. 746
      packages/nc-gui/helpers/sqlUi/OracleUi.js
  9. 1851
      packages/nc-gui/helpers/sqlUi/PgUi.js
  10. 59
      packages/nc-gui/helpers/sqlUi/SqlUiFactory.js
  11. 1004
      packages/nc-gui/helpers/sqlUi/SqliteUi.js
  12. 6
      packages/nc-gui/helpers/sqlUi/index.js
  13. 2
      packages/nocodb/src/__tests__/restv2.test.ts
  14. 2
      packages/nocodb/src/lib/dataMapper/lib/sql/BaseModelSqlv2.ts
  15. 3
      packages/nocodb/src/lib/dataMapper/lib/sql/conditionV2.ts
  16. 2
      packages/nocodb/src/lib/dataMapper/lib/sql/formulav2/formulaQueryBuilderv2.ts
  17. 3
      packages/nocodb/src/lib/dataMapper/lib/sql/sortV2.ts
  18. 3
      packages/nocodb/src/lib/noco-models/Column.ts
  19. 3
      packages/nocodb/src/lib/noco-models/Filter.ts
  20. 3
      packages/nocodb/src/lib/noco-models/GalleryView.ts
  21. 3
      packages/nocodb/src/lib/noco-models/HookFilter.ts
  22. 10
      packages/nocodb/src/lib/noco-models/Model.ts
  23. 2
      packages/nocodb/src/lib/noco/common/BaseApiBuilder.ts
  24. 2
      packages/nocodb/src/lib/noco/meta/NcMetaMgr.ts
  25. 4
      packages/nocodb/src/lib/noco/meta/api/columnApis.ts
  26. 3
      packages/nocodb/src/lib/noco/meta/api/metaDiffApis.ts
  27. 3
      packages/nocodb/src/lib/noco/meta/api/projectApis.ts
  28. 3
      packages/nocodb/src/lib/noco/meta/api/publicApis/publicMetaApis.ts
  29. 2
      packages/nocodb/src/lib/noco/meta/handlersv2/ncCreateLookup.ts
  30. 3
      packages/nocodb/src/lib/noco/upgrader/jobs/ncProjectUpgraderV2_0090000.ts
  31. 2
      packages/nocodb/src/lib/sqlMgr/code/models/xc/BaseModelXcMeta.ts
  32. 1341
      packages/nocodb/src/lib/sqlUi/MssqlUi.ts
  33. 1282
      packages/nocodb/src/lib/sqlUi/MysqlUi.ts
  34. 947
      packages/nocodb/src/lib/sqlUi/OracleUi.ts
  35. 1970
      packages/nocodb/src/lib/sqlUi/PgUi.ts
  36. 70
      packages/nocodb/src/lib/sqlUi/SqlUiFactory.ts
  37. 1114
      packages/nocodb/src/lib/sqlUi/SqliteUi.ts
  38. 39
      packages/nocodb/src/lib/sqlUi/UITypes.ts
  39. 8
      packages/nocodb/src/lib/sqlUi/index.ts
  40. 6
      packages/nocodb/src/lib/templateParser/NcTemplateParser.ts

5
packages/nc-gui/components/project/functionTab/functionQuery.vue

@ -73,11 +73,10 @@
<script>
import { mapGetters, mapActions } from 'vuex'
import { SqlUiFactory } from 'nocodb-sdk'
import MonacoEditor from '../../monaco/Monaco'
import dlgLabelSubmitCancel from '../../utils/dlgLabelSubmitCancel'
import { SqlUI } from '../../../helpers/sqlUi/SqlUiFactory'
export default {
components: { MonacoEditor, dlgLabelSubmitCancel },
data() {
@ -244,7 +243,7 @@ export default {
},
watch: {},
created() {
this.sqlUi = SqlUI.create(this.nodes.dbConnection)
this.sqlUi = SqlUiFactory.create(this.nodes.dbConnection)
},
mounted() {
this.loadFunction()

5
packages/nc-gui/components/project/spreadsheet/public/xcForm.vue

@ -229,13 +229,12 @@
import { validationMixin } from 'vuelidate'
import { required, minLength } from 'vuelidate/lib/validators'
import { ErrorMessages, isVirtualCol, RelationTypes, UITypes } from 'nocodb-sdk'
import { ErrorMessages, isVirtualCol, RelationTypes, UITypes, SqlUiFactory } from 'nocodb-sdk'
import form from '../mixins/form'
import VirtualHeaderCell from '../components/virtualHeaderCell'
import HeaderCell from '../components/headerCell'
import VirtualCell from '../components/virtualCell'
import EditableCell from '../components/editableCell'
import { SqlUI } from '../../../../helpers/sqlUi'
export default {
name: 'XcForm',
@ -273,7 +272,7 @@ export default {
sqlUiLoc() {
// todo: replace with correct client
return this.client && SqlUI.create({ client: this.client })
return this.client && SqlUiFactory.create({ client: this.client })
}
},
watch: {

5
packages/nc-gui/components/project/spreadsheet/public/xcTable.vue

@ -125,14 +125,13 @@
<script>
/* eslint-disable camelcase */
import { ErrorMessages } from 'nocodb-sdk'
import { ErrorMessages, SqlUiFactory } from 'nocodb-sdk'
import spreadsheet from '../mixins/spreadsheet'
import ApiFactory from '../apis/apiFactory'
import FieldsMenu from '../components/fieldsMenu'
import SortListMenu from '../components/sortListMenu'
import ColumnFilterMenu from '../components/columnFilterMenu'
import XcGridView from '../views/xcGridView'
import { SqlUI } from '@/helpers/sqlUi'
import CsvExportImport from '~/components/project/spreadsheet/components/moreActions'
export default {
@ -247,7 +246,7 @@ export default {
},
sqlUi() {
// todo: replace with correct client
return SqlUI.create({ client: this.client })
return SqlUiFactory.create({ client: this.client })
},
queryParams() {
return {

4
packages/nc-gui/components/project/sqlClient.vue

@ -325,11 +325,11 @@ import { VueTreeList, Tree, TreeNode } from 'vue-tree-list'
import { Splitpanes, Pane } from 'splitpanes'
import sqlRightClickOptions from '../../helpers/sqlRightClickOptions'
import dlgLabelSubmitCancel from '../utils/dlgLabelSubmitCancel.vue'
import { SqlUI } from '../../helpers/sqlUi/SqlUiFactory'
import Utils from '../../helpers/Utils'
import MonacoSqlEditor from '../monaco/MonacoSqlEditor'
import {SqlUiFactory} from "nocodb-sdk";
export default {
components: {
@ -447,7 +447,7 @@ export default {
console.log('Failed to load previously opened query collections', e)
}
this.sqlUi = SqlUI.create(this.nodes.dbConnection)
this.sqlUi = SqlUiFactory.create(this.nodes.dbConnection)
console.log('------------', this.nodes)
this.editors = this.$store.state.sqlClient.editors.map(editor => ({ ...editor }))
this.checkClipboardForQuery(this.$store.state.sqlClient.clipboardQuery)

4
packages/nc-gui/components/project/tableTabs/columns.vue

@ -709,10 +709,10 @@
<script>
import { mapGetters, mapActions } from 'vuex'
import JSON5 from 'json5'
import { SqlUiFactory } from 'nocodb-sdk'
import addRelationDlg from '../dlgs/dlgAddRelation.vue'
import dlgLabelSubmitCancel from '../../utils/dlgLabelSubmitCancel.vue'
import { SqlUI } from '../../../helpers/sqlUi/SqlUiFactory'
import jsonToColumn from './columnActions/jsonToColumn'
import uiTypes from '@/components/project/spreadsheet/helpers/uiTypes'
@ -1271,7 +1271,7 @@ export default {
},
watch: {},
async created() {
this.sqlUi = SqlUI.create(this.nodes.dbConnection)
this.sqlUi = SqlUiFactory.create(this.nodes.dbConnection)
try {
this.loading = true

1224
packages/nc-gui/helpers/sqlUi/MssqlUi.js

File diff suppressed because it is too large Load Diff

1262
packages/nc-gui/helpers/sqlUi/MysqlUi.js

File diff suppressed because it is too large Load Diff

746
packages/nc-gui/helpers/sqlUi/OracleUi.js

@ -1,746 +0,0 @@
export class OracleUi {
static getNewTableColumns() {
return [
{
column_name: 'id',
dt: 'integer',
dtx: 'integer',
ct: 'int(11)',
nrqd: false,
rqd: true,
ck: false,
pk: true,
un: false,
ai: false,
cdf: null,
clen: null,
np: null,
ns: null,
dtxp: '',
dtxs: '',
altered: 1,
uidt: 'ID',
uip: '',
uicn: ''
},
{
column_name: 'title',
dt: 'varchar',
dtx: 'specificType',
ct: 'varchar(45)',
nrqd: true,
rqd: false,
ck: false,
pk: false,
un: false,
ai: false,
cdf: null,
clen: 45,
np: null,
ns: null,
dtxp: '45',
dtxs: '',
altered: 1,
uidt: 'SingleLineText',
uip: '',
uicn: ''
}
]
}
static getNewColumn(suffix) {
return {
column_name: 'title' + suffix,
dt: 'integer',
dtx: 'specificType',
ct: 'integer(11)',
nrqd: true,
rqd: false,
ck: false,
pk: false,
un: false,
ai: false,
cdf: null,
clen: 45,
np: null,
ns: null,
// data_type_x_specific: ' ',
dtxp: '11',
dtxs: ' ',
altered: 1,
uidt: 'Number',
uip: '',
uicn: ''
}
}
static getDefaultLengthForDatatype(type) {
switch (type) {
default:
return ''
}
}
static getDefaultLengthIsDisabled(type) {
switch (type) {
case 'integer':
return true
case 'bfile':
case 'binary rowid':
case 'binary double':
case 'binary_float':
case 'blob':
case 'canoical':
case 'cfile':
case 'char':
case 'clob':
case 'content pointer':
case 'contigous array':
case 'date':
case 'decimal':
case 'double precision':
case 'float':
case 'interval day to second':
case 'interval year to month':
case 'lob pointer':
case 'long':
case 'long raw':
case 'named collection':
case 'named object':
case 'nchar':
case 'nclob':
case 'number':
case 'nvarchar2':
case 'octet':
case 'oid':
case 'pointer':
case 'raw':
case 'real':
case 'ref':
case 'ref cursor':
case 'rowid':
case 'signed binary integer':
case 'smallint':
case 'table':
case 'time':
case 'time with tz':
case 'timestamp':
case 'timestamp with local time zone':
case 'timestamp with local tz':
case 'timestamp with timezone':
case 'timestamp with tz':
case 'unsigned binary integer':
case 'urowid':
case 'varchar':
case 'varchar2':
case 'varray':
case 'varying array':
return false
}
}
static getDefaultValueForDatatype(type) {
switch (type) {
default:
return ''
}
}
static getDefaultScaleForDatatype(type) {
switch (type) {
case 'integer':
case 'bfile':
case 'binary rowid':
case 'binary double':
case 'binary_float':
case 'blob':
case 'canoical':
case 'cfile':
case 'char':
case 'clob':
case 'content pointer':
case 'contigous array':
case 'date':
case 'decimal':
case 'double precision':
case 'float':
case 'interval day to second':
case 'interval year to month':
case 'lob pointer':
case 'long':
case 'long raw':
case 'named collection':
case 'named object':
case 'nchar':
case 'nclob':
case 'number':
case 'nvarchar2':
case 'octet':
case 'oid':
case 'pointer':
case 'raw':
case 'real':
case 'ref':
case 'ref cursor':
case 'rowid':
case 'signed binary integer':
case 'smallint':
case 'table':
case 'time':
case 'time with tz':
case 'timestamp':
case 'timestamp with local time zone':
case 'timestamp with local tz':
case 'timestamp with timezone':
case 'timestamp with tz':
case 'unsigned binary integer':
case 'urowid':
case 'varchar':
case 'varchar2':
case 'varray':
case 'varying array':
return ' '
}
}
static colPropAIDisabled(col, columns) {
// console.log(col);
if (col.dt === 'int4' ||
col.dt === 'integer' ||
col.dt === 'bigint' ||
col.dt === 'smallint') {
for (let i = 0; i < columns.length; ++i) {
if (columns[i].column_name !== col.column_name && columns[i].ai) {
return true
}
}
return false
} else {
return true
}
}
static colPropUNDisabled(col) {
return true
}
static onCheckboxChangeAI(col) {
console.log(col)
if (col.dt === 'int' || col.dt === 'bigint' || col.dt === 'smallint' || col.dt === 'tinyint') {
col.altered = col.altered || 2
}
}
static showScale(columnObj) {
return false
}
static removeUnsigned(columns) {
for (let i = 0; i < columns.length; ++i) {
if (columns[i].altered === 1 && (!(columns[i].dt === 'int' ||
columns[i].dt === 'bigint' ||
columns[i].dt === 'tinyint' ||
columns[i].dt === 'smallint' ||
columns[i].dt === 'mediumint'))) {
columns[i].un = false
console.log('>> resetting unsigned value', columns[i].column_name)
}
console.log(columns[i].column_name)
}
}
static columnEditable(colObj) {
return colObj.table_name !== '_evolutions' || colObj.table_name !== 'nc_evolutions'
}
static extractFunctionName(query) {
const reg = /^\s*CREATE\s+(?:OR\s+REPLACE\s*)?\s*FUNCTION\s+(?:[\w\d_]+\.)?([\w_\d]+)/i
const match = query.match(reg)
return match && match[1]
}
static extractProcedureName(query) {
const reg = /^\s*CREATE\s+(?:OR\s+REPLACE\s*)?\s*PROCEDURE\s+(?:[\w\d_]+\.)?([\w_\d]+)/i
const match = query.match(reg)
return match && match[1]
}
static splitQueries(query) {
/***
* we are splitting based on semicolon
* there are mechanism to escape semicolon within single/double quotes(string)
*/
return query.match(/\b("[^"]*;[^"]*"|'[^']*;[^']*'|[^;])*;/g)
}
static onCheckboxChangeAU(col) {
console.log(col)
col.altered = col.altered || 2
}
/**
* if sql statement is SELECT - it limits to a number
* @param args
* @returns {string|*}
*/
sanitiseQuery(args) {
let q = args.query.trim().split(';')
if (q[0].startsWith('Select')) {
q = q[0] + ` LIMIT 0,${args.limit ? args.limit : 100};`
} else if (q[0].startsWith('select')) {
q = q[0] + ` LIMIT 0,${args.limit ? args.limit : 100};`
} else if (q[0].startsWith('SELECT')) {
q = q[0] + ` LIMIT 0,${args.limit ? args.limit : 100};`
} else {
return args.query
}
return q
}
getColumnsFromJson(json, tn) {
const columns = []
try {
if (typeof json === 'object' && !Array.isArray(json)) {
const keys = Object.keys(json)
for (let i = 0; i < keys.length; ++i) {
switch (typeof json[keys[i]]) {
case 'number':
if (Number.isInteger(json[keys[i]])) {
columns.push({
dp: null,
tn,
column_name: keys[i],
cno: keys[i],
dt: 'int',
np: 10,
ns: 0,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: '11',
dtxs: 0,
altered: 1
})
} else {
columns.push({
dp: null,
tn,
column_name: keys[i],
cno: keys[i],
dt: 'float',
np: 10,
ns: 2,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: '11',
dtxs: 2,
altered: 1
})
}
break
case 'string':
if (json[keys[i]].length <= 255) {
columns.push({
dp: null,
tn,
column_name: keys[i],
cno: keys[i],
dt: 'varchar',
np: 45,
ns: 0,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: '45',
dtxs: 0,
altered: 1
})
} else {
columns.push({
dp: null,
tn,
column_name: keys[i],
cno: keys[i],
dt: 'text',
np: null,
ns: 0,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: null,
dtxs: 0,
altered: 1
})
}
break
case 'boolean':
columns.push({
dp: null,
tn,
column_name: keys[i],
cno: keys[i],
dt: 'boolean',
np: 3,
ns: 0,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: '1',
dtxs: 0,
altered: 1
})
break
case 'object':
columns.push({
dp: null,
tn,
column_name: keys[i],
cno: keys[i],
dt: 'json',
np: 3,
ns: 0,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: null,
dtxs: 0,
altered: 1
})
break
default:
break
}
}
}
} catch (e) {
console.log('Error in getColumnsFromJson', e)
}
return columns
}
static colPropAuDisabled(col) {
return true
}
static getAbstractType(col) {
switch ((col.dt || col.dt).toLowerCase()) {
case 'integer':
return 'integer'
case 'bfile':
case 'binary rowid':
case 'binary double':
case 'binary_float':
return 'string'
case 'blob':
return 'blob'
case 'canoical':
case 'cfile':
case 'char':
case 'clob':
case 'content pointer':
case 'contigous array':
return 'string'
case 'date':
return 'date'
case 'decimal':
case 'double precision':
case 'float':
return 'float'
case 'interval day to second':
case 'interval year to month':
return 'string'
case 'lob pointer':
return 'string'
case 'long':
return 'integer'
case 'long raw':
return 'string'
case 'named collection':
case 'named object':
case 'nchar':
case 'nclob':
return 'string'
case 'nvarchar2':
case 'octet':
case 'oid':
case 'pointer':
case 'raw':
return 'string'
case 'real':
case 'number':
return 'float'
case 'ref':
case 'ref cursor':
case 'rowid':
case 'signed binary integer':
return 'string'
case 'smallint':
return 'integer'
case 'table':
return 'string'
case 'time':
case 'time with tz':
return 'time'
case 'timestamp':
case 'timestamp with local time zone':
case 'timestamp with local tz':
case 'timestamp with timezone':
case 'timestamp with tz':
return 'datetime'
case 'unsigned binary integer':
case 'urowid':
case 'varchar':
case 'varchar2':
return 'string'
case 'varray':
case 'varying array':
return 'string'
}
}
static getUIType(col) {
switch (this.getAbstractType(col)) {
case 'integer':
return 'Number'
case 'boolean':
return 'Checkbox'
case 'float':
return 'Decimal'
case 'date':
return 'Date'
case 'datetime':
return 'CreateTime'
case 'time':
return 'Time'
case 'year':
return 'Year'
case 'string':
return 'SingleLineText'
case 'text':
return 'LongText'
case 'blob':
return 'Attachment'
case 'enum':
return 'SingleSelect'
case 'set':
return 'MultiSelect'
case 'json':
return 'LongText'
}
}
static getDataTypeForUiType(col) {
const colProp = {}
switch (col.uidt) {
case 'ID':
colProp.dt = 'integer'
colProp.pk = true
colProp.un = true
colProp.ai = true
colProp.rqd = true
break
case 'ForeignKey':
colProp.dt = 'varchar'
break
case 'SingleLineText':
colProp.dt = 'varchar'
break
case 'LongText':
colProp.dt = 'clob'
break
case 'Attachment':
colProp.dt = 'clob'
break
case 'Checkbox':
colProp.dt = 'tinyint'
colProp.dtxp = 1
break
case 'MultiSelect':
colProp.dt = 'varchar2'
break
case 'SingleSelect':
colProp.dt = 'varchar2'
break
case 'Collaborator':
colProp.dt = 'varchar'
break
case 'Date':
colProp.dt = 'varchar'
break
case 'Year':
colProp.dt = 'year'
break
case 'Time':
colProp.dt = 'time'
break
case 'PhoneNumber':
colProp.dt = 'varchar'
colProp.validate = { func: ['isMobilePhone'], args: [''], msg: ['Validation failed : Invalid Mobile Format'] }
break
case 'Email':
colProp.dt = 'varchar'
colProp.validate = { func: ['isEmail'], args: [''], msg: ['Validation failed : Invalid Email Format'] }
break
case 'URL':
colProp.dt = 'varchar'
colProp.validate = { func: ['isURL'], args: [''], msg: ['Validation failed : Invalid URL Format'] }
break
case 'Number':
colProp.dt = 'integer'
break
case 'Decimal':
colProp.dt = 'decimal'
break
case 'Currency':
colProp.dt = 'decimal'
colProp.validate = { func: ['isCurrency'], args: [''], msg: ['Validation failed : Invalid Currency Format'] }
break
case 'Percent':
colProp.dt = 'double'
break
case 'Duration':
colProp.dt = 'integer'
break
case 'Rating':
colProp.dt = 'float'
break
case 'Formula':
colProp.dt = 'varchar'
break
case 'Rollup':
colProp.dt = 'varchar'
break
case 'Count':
colProp.dt = 'integer'
break
case 'Lookup':
colProp.dt = 'varchar'
break
case 'DateTime':
colProp.dt = 'timestamp'
break
case 'CreateTime':
colProp.dt = 'timestamp'
break
case 'LastModifiedTime':
colProp.dt = 'timestamp'
break
case 'AutoNumber':
colProp.dt = 'integer'
break
case 'Barcode':
colProp.dt = 'varchar'
break
case 'Button':
colProp.dt = 'varchar'
break
default:
colProp.dt = 'varchar'
break
}
return colProp
}
static getUnsupportedFnList() {
return []
}
}
// module.exports = PgUiHelp;
/**
* @copyright Copyright (c) 2021, Xgene Cloud Ltd
*
* @author Naveen MR <oof1lab@gmail.com>
* @author Pranav C Balan <pranavxc@gmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

1851
packages/nc-gui/helpers/sqlUi/PgUi.js

File diff suppressed because it is too large Load Diff

59
packages/nc-gui/helpers/sqlUi/SqlUiFactory.js

@ -1,59 +0,0 @@
import { MysqlUi } from './MysqlUi'
import { PgUi } from './PgUi'
import { MssqlUi } from './MssqlUi'
import { OracleUi } from './OracleUi'
import { SqliteUi } from './SqliteUi'
// import {YugabyteUi} from "./YugabyteUi";
// import {TidbUi} from "./TidbUi";
// import {VitessUi} from "./VitessUi";
export class SqlUI {
static create(connectionConfig) {
if (connectionConfig.client === 'mysql' || connectionConfig.client === 'mysql2') {
// if (connectionConfig.meta.dbtype === "tidb")
// return Tidb;
// if (connectionConfig.meta.dbtype === "vitess")
// return Vitess;
console.log('- - - -In Mysql UI')
return MysqlUi
}
if (connectionConfig.client === 'sqlite3') { return SqliteUi }
if (connectionConfig.client === 'mssql') { return MssqlUi }
if (connectionConfig.client === 'oracledb') { return OracleUi }
if (connectionConfig.client === 'pg') {
// if (connectionConfig.meta.dbtype === "yugabyte")
// return Yugabyte;
return PgUi
}
throw new Error('Database not supported')
}
}
/**
* @copyright Copyright (c) 2021, Xgene Cloud Ltd
*
* @author Naveen MR <oof1lab@gmail.com>
* @author Pranav C Balan <pranavxc@gmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

1004
packages/nc-gui/helpers/sqlUi/SqliteUi.js

File diff suppressed because it is too large Load Diff

6
packages/nc-gui/helpers/sqlUi/index.js

@ -1,6 +0,0 @@
export * from './MysqlUi'
export * from './PgUi'
export * from './MssqlUi'
export * from './OracleUi'
export * from './SqliteUi'
export * from './SqlUiFactory'

2
packages/nocodb/src/__tests__/restv2.test.ts

@ -5,7 +5,7 @@ import request from 'supertest';
import { Noco } from '../lib';
import NcConfigFactory from '../lib/utils/NcConfigFactory';
import UITypes from '../lib/sqlUi/UITypes';
import { UITypes } from 'nocodb-sdk';
const knex = require('knex');

2
packages/nocodb/src/lib/dataMapper/lib/sql/BaseModelSqlv2.ts

@ -4,7 +4,6 @@ import _ from 'lodash';
import Model from '../../../noco-models/Model';
import { XKnex } from '../..';
import LinkToAnotherRecordColumn from '../../../noco-models/LinkToAnotherRecordColumn';
import UITypes from '../../../sqlUi/UITypes';
import RollupColumn from '../../../noco-models/RollupColumn';
import LookupColumn from '../../../noco-models/LookupColumn';
import DataLoader from 'dataloader';
@ -25,6 +24,7 @@ import {
isSystemColumn,
RelationTypes,
SortType,
UITypes,
ViewTypes
} from 'nocodb-sdk';
import formSubmissionEmailTemplate from '../../../noco/common/formSubmissionEmailTemplate';

3
packages/nocodb/src/lib/dataMapper/lib/sql/conditionV2.ts

@ -1,5 +1,4 @@
import Filter from '../../../noco-models/Filter';
import UITypes from '../../../sqlUi/UITypes';
import LinkToAnotherRecordColumn from '../../../noco-models/LinkToAnotherRecordColumn';
import { QueryBuilder } from 'knex';
import { XKnex } from '../..';
@ -9,7 +8,7 @@ import genRollupSelectv2 from './genRollupSelectv2';
import RollupColumn from '../../../noco-models/RollupColumn';
import formulaQueryBuilderv2 from './formulav2/formulaQueryBuilderv2';
import FormulaColumn from '../../../noco-models/FormulaColumn';
import { RelationTypes } from 'nocodb-sdk';
import { RelationTypes, UITypes } from 'nocodb-sdk';
// import LookupColumn from '../../../noco-models/LookupColumn';
export default async function conditionV2(

2
packages/nocodb/src/lib/dataMapper/lib/sql/formulav2/formulaQueryBuilderv2.ts

@ -1,13 +1,13 @@
import jsep from 'jsep';
import mapFunctionName from '../mapFunctionName';
import Model from '../../../../noco-models/Model';
import UITypes from '../../../../sqlUi/UITypes';
import genRollupSelectv2 from '../genRollupSelectv2';
import RollupColumn from '../../../../noco-models/RollupColumn';
import FormulaColumn from '../../../../noco-models/FormulaColumn';
import { XKnex } from '../../..';
import LinkToAnotherRecordColumn from '../../../../noco-models/LinkToAnotherRecordColumn';
import LookupColumn from '../../../../noco-models/LookupColumn';
import { UITypes } from 'nocodb-sdk';
// todo: switch function based on database

3
packages/nocodb/src/lib/dataMapper/lib/sql/sortV2.ts

@ -1,14 +1,13 @@
import { QueryBuilder } from 'knex';
import { XKnex } from '../..';
import Sort from '../../../noco-models/Sort';
import UITypes from '../../../sqlUi/UITypes';
import LinkToAnotherRecordColumn from '../../../noco-models/LinkToAnotherRecordColumn';
import genRollupSelectv2 from './genRollupSelectv2';
import RollupColumn from '../../../noco-models/RollupColumn';
import LookupColumn from '../../../noco-models/LookupColumn';
import formulaQueryBuilderv2 from './formulav2/formulaQueryBuilderv2';
import FormulaColumn from '../../../noco-models/FormulaColumn';
import { RelationTypes } from 'nocodb-sdk';
import { RelationTypes, UITypes } from 'nocodb-sdk';
export default async function sortV2(
sortList: Sort[],

3
packages/nocodb/src/lib/noco-models/Column.ts

@ -1,4 +1,3 @@
import UITypes from '../sqlUi/UITypes';
import FormulaColumn from './FormulaColumn';
import LinkToAnotherRecordColumn from './LinkToAnotherRecordColumn';
import LookupColumn from './LookupColumn';
@ -7,7 +6,7 @@ import SingleSelectColumn from './SingleSelectColumn';
import MultiSelectColumn from './MultiSelectColumn';
import Model from './Model';
import NocoCache from '../noco-cache/NocoCache';
import { ColumnType } from 'nocodb-sdk';
import { ColumnType, UITypes } from 'nocodb-sdk';
import {
CacheDelDirection,
CacheGetType,

3
packages/nocodb/src/lib/noco-models/Filter.ts

@ -1,7 +1,6 @@
import Noco from '../../lib/noco/Noco';
import Model from './Model';
import Column from './Column';
import UITypes from '../sqlUi/UITypes';
import {
CacheDelDirection,
CacheGetType,
@ -9,7 +8,7 @@ import {
MetaTable
} from '../utils/globals';
import View from './View';
import { FilterType } from 'nocodb-sdk';
import { FilterType, UITypes } from 'nocodb-sdk';
import NocoCache from '../noco-cache/NocoCache';
export default class Filter {

3
packages/nocodb/src/lib/noco-models/GalleryView.ts

@ -1,8 +1,7 @@
import Noco from '../noco/Noco';
import { CacheGetType, CacheScope, MetaTable } from '../utils/globals';
import { GalleryColumnType, GalleryType } from 'nocodb-sdk';
import { GalleryColumnType, GalleryType, UITypes } from 'nocodb-sdk';
import View from './View';
import UITypes from '../sqlUi/UITypes';
import NocoCache from '../noco-cache/NocoCache';
export default class GalleryView implements GalleryType {

3
packages/nocodb/src/lib/noco-models/HookFilter.ts

@ -1,7 +1,6 @@
import Noco from '../../lib/noco/Noco';
import Model from './Model';
import Column from './Column';
import UITypes from '../sqlUi/UITypes';
import {
CacheDelDirection,
CacheGetType,
@ -9,7 +8,7 @@ import {
MetaTable
} from '../utils/globals';
import View from './View';
import { FilterType } from 'nocodb-sdk';
import { FilterType, UITypes } from 'nocodb-sdk';
import NocoCache from '../noco-cache/NocoCache';
export default class Filter {

10
packages/nocodb/src/lib/noco-models/Model.ts

@ -8,9 +8,9 @@ import {
ModelTypes,
TableReqType,
TableType,
UITypes,
ViewTypes
} from 'nocodb-sdk';
import UITypes from '../sqlUi/UITypes';
import {
CacheDelDirection,
CacheGetType,
@ -425,12 +425,8 @@ export default class Model implements TableType {
);
await ncMeta.metaDelete(null, null, MetaTable.MODELS, this.id);
await NocoCache.del(
`${CacheScope.MODEL}:${this.project_id}:${this.id}`
);
await NocoCache.del(
`${CacheScope.MODEL}:${this.project_id}:${this.title}`
);
await NocoCache.del(`${CacheScope.MODEL}:${this.project_id}:${this.id}`);
await NocoCache.del(`${CacheScope.MODEL}:${this.project_id}:${this.title}`);
return true;
}

2
packages/nocodb/src/lib/noco/common/BaseApiBuilder.ts

@ -32,7 +32,7 @@ import ncModelsOrderUpgrader from './jobs/ncModelsOrderUpgrader';
import ncParentModelTitleUpgrader from './jobs/ncParentModelTitleUpgrader';
import ncRemoveDuplicatedRelationRows from './jobs/ncRemoveDuplicatedRelationRows';
import xcMetaDiffSync from './handlers/xcMetaDiffSync';
import UITypes from '../../sqlUi/UITypes';
import { UITypes } from 'nocodb-sdk';
const log = debug('nc:api:base');

2
packages/nocodb/src/lib/noco/meta/NcMetaMgr.ts

@ -37,9 +37,9 @@ import { packageVersion } from 'nc-help';
import NcMetaIO, { META_TABLES } from './NcMetaIO';
import { promisify } from 'util';
import NcTemplateParser from '../../templateParser/NcTemplateParser';
import UITypes from '../../sqlUi/UITypes';
import { defaultConnectionConfig } from '../../utils/NcConfigFactory';
import xcMetaDiff from './handlers/xcMetaDiff';
import { UITypes } from 'nocodb-sdk';
const randomID = customAlphabet('1234567890abcdefghijklmnopqrstuvwxyz_', 10);
const XC_PLUGIN_DET = 'XC_PLUGIN_DET';

4
packages/nocodb/src/lib/noco/meta/api/columnApis.ts

@ -1,6 +1,5 @@
import { Request, Response, Router } from 'express';
import Model from '../../../noco-models/Model';
import UITypes from '../../../sqlUi/UITypes';
import ProjectMgrv2 from '../../../sqlMgr/v2/ProjectMgrv2';
import Base from '../../../noco-models/Base';
import Column from '../../../noco-models/Column';
@ -20,7 +19,8 @@ import {
isVirtualCol,
LinkToAnotherRecordType,
RelationTypes,
TableType
TableType,
UITypes
} from 'nocodb-sdk';
import Audit from '../../../noco-models/Audit';
import SqlMgrv2 from '../../../sqlMgr/v2/SqlMgrv2';

3
packages/nocodb/src/lib/noco/meta/api/metaDiffApis.ts

@ -4,7 +4,7 @@ import ncMetaAclMw from '../helpers/ncMetaAclMw';
import Model from '../../../noco-models/Model';
import Project from '../../../noco-models/Project';
import NcConnectionMgrv2 from '../../common/NcConnectionMgrv2';
import { isVirtualCol, ModelTypes, RelationTypes } from 'nocodb-sdk';
import { isVirtualCol, ModelTypes, RelationTypes, UITypes } from 'nocodb-sdk';
import { Router } from 'express';
import Base from '../../../noco-models/Base';
import ModelXcMetaFactory from '../../../sqlMgr/code/models/xc/ModelXcMetaFactory';
@ -13,7 +13,6 @@ import LinkToAnotherRecordColumn from '../../../noco-models/LinkToAnotherRecordC
import { getUniqueColumnAliasName } from '../helpers/getUniqueName';
import NcHelp from '../../../utils/NcHelp';
import getTableNameAlias, { getColumnNameAlias } from '../helpers/getTableName';
import UITypes from '../../../sqlUi/UITypes';
import mapDefaultPrimaryValue from '../helpers/mapDefaultPrimaryValue';
import { Tele } from 'nc-help';
import getColumnUiType from '../helpers/getColumnUiType';

3
packages/nocodb/src/lib/noco/meta/api/projectApis.ts

@ -1,6 +1,6 @@
import { Request, Response } from 'express';
import Project from '../../../noco-models/Project';
import { ModelTypes, ProjectListType } from 'nocodb-sdk';
import { ModelTypes, ProjectListType, UITypes } from 'nocodb-sdk';
import { PagedResponseImpl } from '../helpers/PagedResponse';
import syncMigration from '../helpers/syncMigration';
@ -11,7 +11,6 @@ import NcHelp from '../../../utils/NcHelp';
import Base from '../../../noco-models/Base';
import NcConnectionMgrv2 from '../../common/NcConnectionMgrv2';
import getTableNameAlias, { getColumnNameAlias } from '../helpers/getTableName';
import UITypes from '../../../sqlUi/UITypes';
import LinkToAnotherRecordColumn from '../../../noco-models/LinkToAnotherRecordColumn';
import ncMetaAclMw from '../helpers/ncMetaAclMw';
import ProjectUser from '../../../noco-models/ProjectUser';

3
packages/nocodb/src/lib/noco/meta/api/publicApis/publicMetaApis.ts

@ -2,8 +2,7 @@ import { Request, Response, Router } from 'express';
import catchError, { NcError } from '../../helpers/catchError';
import View from '../../../../noco-models/View';
import Model from '../../../../noco-models/Model';
import UITypes from '../../../../sqlUi/UITypes';
import { ErrorMessages, LinkToAnotherRecordType } from 'nocodb-sdk';
import { ErrorMessages, LinkToAnotherRecordType, UITypes } from 'nocodb-sdk';
import Column from '../../../../noco-models/Column';
import Base from '../../../../noco-models/Base';
import Project from '../../../../noco-models/Project';

2
packages/nocodb/src/lib/noco/meta/handlersv2/ncCreateLookup.ts

@ -1,6 +1,6 @@
import { NcContextV2 } from '../NcMetaMgrv2';
import Column from '../../../noco-models/Column';
import UITypes from '../../../sqlUi/UITypes';
import { UITypes } from 'nocodb-sdk';
export default async function(this: NcContextV2, { args }: any) {
if (

3
packages/nocodb/src/lib/noco/upgrader/jobs/ncProjectUpgraderV2_0090000.ts

@ -4,10 +4,9 @@ import User from '../../../noco-models/User';
import Project from '../../../noco-models/Project';
import ProjectUser from '../../../noco-models/ProjectUser';
import Model from '../../../noco-models/Model';
import { ModelTypes, ViewTypes } from 'nocodb-sdk';
import { ModelTypes, UITypes, ViewTypes } from 'nocodb-sdk';
import Column from '../../../noco-models/Column';
import LinkToAnotherRecordColumn from '../../../noco-models/LinkToAnotherRecordColumn';
import UITypes from '../../../sqlUi/UITypes';
import NcHelp from '../../../utils/NcHelp';
import { substituteColumnAliasWithIdInFormula } from '../../meta/helpers/formulaHelpers';
import RollupColumn from '../../../noco-models/RollupColumn';

2
packages/nocodb/src/lib/sqlMgr/code/models/xc/BaseModelXcMeta.ts

@ -1,6 +1,6 @@
import BaseRender from '../../BaseRender';
import UITypes from '../../../../sqlUi/UITypes';
import mapDefaultPrimaryValue from '../../../../noco/meta/helpers/mapDefaultPrimaryValue';
import { UITypes } from 'nocodb-sdk';
abstract class BaseModelXcMeta extends BaseRender {
protected abstract _getAbstractType(column: any): any;

1341
packages/nocodb/src/lib/sqlUi/MssqlUi.ts

File diff suppressed because it is too large Load Diff

1282
packages/nocodb/src/lib/sqlUi/MysqlUi.ts

File diff suppressed because it is too large Load Diff

947
packages/nocodb/src/lib/sqlUi/OracleUi.ts

@ -1,947 +0,0 @@
export class OracleUi {
static getNewTableColumns(): any[] {
return [
{
column_name: 'id',
dt: 'integer',
dtx: 'integer',
ct: 'int(11)',
nrqd: false,
rqd: true,
ck: false,
pk: true,
un: false,
ai: false,
cdf: null,
clen: null,
np: null,
ns: null,
dtxp: '',
dtxs: '',
altered: 1,
uidt: 'ID',
uip: '',
uicn: ''
},
{
column_name: 'title',
dt: 'varchar',
dtx: 'specificType',
ct: 'varchar(45)',
nrqd: true,
rqd: false,
ck: false,
pk: false,
un: false,
ai: false,
cdf: null,
clen: 45,
np: null,
ns: null,
dtxp: '45',
dtxs: '',
altered: 1,
uidt: 'SingleLineText',
uip: '',
uicn: ''
}
// {
// column_name:"created_at",
// dt: "timestamp",
// dtx: "specificType",
// ct: "varchar(45)",
// nrqd: true,
// rqd: false,
// ck: false,
// pk: false,
// un: false,
// ai: false,
// cdf: 'CURRENT_TIMESTAMP',
// clen: 45,
// np: null,
// ns: null,
// dtxp: '',
// dtxs: ''
// },
// {
// column_name:"updated_at",
// dt: "timestamp",
// dtx: "specificType",
// ct: "varchar(45)",
// nrqd: true,
// rqd: false,
// ck: false,
// pk: false,
// un: false,
// ai: false,
// cdf: 'CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP',
// clen: 45,
// np: null,
// ns: null,
// dtxp: '',
// dtxs: ''
// }
];
}
static getNewColumn(suffix) {
return {
column_name: 'title' + suffix,
dt: 'integer',
dtx: 'specificType',
ct: 'integer(11)',
nrqd: true,
rqd: false,
ck: false,
pk: false,
un: false,
ai: false,
cdf: null,
clen: 45,
np: null,
ns: null,
// data_type_x_specific: ' ',
dtxp: '11',
dtxs: ' ',
altered: 1,
uidt: 'Number',
uip: '',
uicn: ''
};
}
// static getDefaultLengthForDatatype(type) {
// switch (type) {
// case "int":
// return 11;
// break;
// case "tinyint":
// return 1;
// break;
// case "smallint":
// return 5;
// break;
//
// case "mediumint":
// return 9;
// break;
// case "bigint":
// return 20;
// break;
// case "bit":
// return 64;
// break;
// case "boolean":
// return '';
// break;
// case "float":
// return 12;
// break;
// case "decimal":
// return 10;
// break;
// case "double":
// return 22;
// break;
// case "serial":
// return 20;
// break;
// case "date":
// return '';
// break;
// case "datetime":
// case "timestamp":
// return 6;
// break;
// case "time":
// return '';
// break;
// case "year":
// return '';
// break;
// case "char":
// return 255;
// break;
// case "varchar":
// return 45;
// break;
// case "nchar":
// return 255;
// break;
// case "text":
// return '';
// break;
// case "tinytext":
// return '';
// break;
// case "mediumtext":
// return '';
// break;
// case "longtext":
// return ''
// break;
// case "binary":
// return 255;
// break;
// case "varbinary":
// return 65500;
// break;
// case "blob":
// return '';
// break;
// case "tinyblob":
// return '';
// break;
// case "mediumblob":
// return '';
// break;
// case "longblob":
// return '';
// break;
// case "enum":
// return '\'a\',\'b\'';
// break;
// case "set":
// return '\'a\',\'b\'';
// break;
// case "geometry":
// return '';
// case "point":
// return '';
// case "linestring":
// return '';
// case "polygon":
// return '';
// case "multipoint":
// return '';
// case "multilinestring":
// return '';
// case "multipolygon":
// return '';
// case "json":
// return ''
// break;
//
// }
//
// }
static getDefaultLengthForDatatype(type) {
switch (type) {
default:
return '';
}
}
static getDefaultLengthIsDisabled(type): any {
switch (type) {
case 'integer':
return true;
case 'bfile':
case 'binary rowid':
case 'binary double':
case 'binary_float':
case 'blob':
case 'canoical':
case 'cfile':
case 'char':
case 'clob':
case 'content pointer':
case 'contigous array':
case 'date':
case 'decimal':
case 'double precision':
case 'float':
case 'interval day to second':
case 'interval year to month':
case 'lob pointer':
case 'long':
case 'long raw':
case 'named collection':
case 'named object':
case 'nchar':
case 'nclob':
case 'number':
case 'nvarchar2':
case 'octet':
case 'oid':
case 'pointer':
case 'raw':
case 'real':
case 'ref':
case 'ref cursor':
case 'rowid':
case 'signed binary integer':
case 'smallint':
case 'table':
case 'time':
case 'time with tz':
case 'timestamp':
case 'timestamp with local time zone':
case 'timestamp with local tz':
case 'timestamp with timezone':
case 'timestamp with tz':
case 'unsigned binary integer':
case 'urowid':
case 'varchar':
case 'varchar2':
case 'varray':
case 'varying array':
return false;
}
}
static getDefaultValueForDatatype(type) {
switch (type) {
default:
return '';
}
}
static getDefaultScaleForDatatype(type): any {
switch (type) {
case 'integer':
case 'bfile':
case 'binary rowid':
case 'binary double':
case 'binary_float':
case 'blob':
case 'canoical':
case 'cfile':
case 'char':
case 'clob':
case 'content pointer':
case 'contigous array':
case 'date':
case 'decimal':
case 'double precision':
case 'float':
case 'interval day to second':
case 'interval year to month':
case 'lob pointer':
case 'long':
case 'long raw':
case 'named collection':
case 'named object':
case 'nchar':
case 'nclob':
case 'number':
case 'nvarchar2':
case 'octet':
case 'oid':
case 'pointer':
case 'raw':
case 'real':
case 'ref':
case 'ref cursor':
case 'rowid':
case 'signed binary integer':
case 'smallint':
case 'table':
case 'time':
case 'time with tz':
case 'timestamp':
case 'timestamp with local time zone':
case 'timestamp with local tz':
case 'timestamp with timezone':
case 'timestamp with tz':
case 'unsigned binary integer':
case 'urowid':
case 'varchar':
case 'varchar2':
case 'varray':
case 'varying array':
return ' ';
}
}
static colPropAIDisabled(col, columns) {
// console.log(col);
if (
col.dt === 'int4' ||
col.dt === 'integer' ||
col.dt === 'bigint' ||
col.dt === 'smallint'
) {
for (let i = 0; i < columns.length; ++i) {
if (columns[i].cn !== col.cn && columns[i].ai) {
return true;
}
}
return false;
} else {
return true;
}
}
static colPropUNDisabled(_col) {
// console.log(col);
return true;
// if (col.dt === 'int' ||
// col.dt === 'tinyint' ||
// col.dt === 'smallint' ||
// col.dt === 'mediumint' ||
// col.dt === 'bigint') {
// return false;
// } else {
// return true;
// }
}
static onCheckboxChangeAI(col) {
console.log(col);
if (
col.dt === 'int' ||
col.dt === 'bigint' ||
col.dt === 'smallint' ||
col.dt === 'tinyint'
) {
col.altered = col.altered || 2;
}
// if (!col.ai) {
// col.dtx = 'specificType'
// } else {
// col.dtx = ''
// }
}
static showScale(_columnObj) {
return false;
}
static removeUnsigned(columns) {
for (let i = 0; i < columns.length; ++i) {
if (
columns[i].altered === 1 &&
!(
columns[i].dt === 'int' ||
columns[i].dt === 'bigint' ||
columns[i].dt === 'tinyint' ||
columns[i].dt === 'smallint' ||
columns[i].dt === 'mediumint'
)
) {
columns[i].un = false;
console.log('>> resetting unsigned value', columns[i].cn);
}
console.log(columns[i].cn);
}
}
static columnEditable(colObj) {
return colObj.tn !== '_evolutions' || colObj.tn !== 'nc_evolutions';
}
static extractFunctionName(query) {
const reg = /^\s*CREATE\s+(?:OR\s+REPLACE\s*)?\s*FUNCTION\s+(?:[\w\d_]+\.)?([\w_\d]+)/i;
const match = query.match(reg);
return match && match[1];
}
static extractProcedureName(query) {
const reg = /^\s*CREATE\s+(?:OR\s+REPLACE\s*)?\s*PROCEDURE\s+(?:[\w\d_]+\.)?([\w_\d]+)/i;
const match = query.match(reg);
return match && match[1];
}
static splitQueries(query) {
/***
* we are splitting based on semicolon
* there are mechanism to escape semicolon within single/double quotes(string)
*/
return query.match(/\b("[^"]*;[^"]*"|'[^']*;[^']*'|[^;])*;/g);
}
static onCheckboxChangeAU(col) {
console.log(col);
// if (1) {
col.altered = col.altered || 2;
// }
// if (!col.ai) {
// col.dtx = 'specificType'
// } else {
// col.dtx = ''
// }
}
/**
* if sql statement is SELECT - it limits to a number
* @param args
* @returns {string|*}
*/
sanitiseQuery(args) {
let q = args.query.trim().split(';');
if (q[0].startsWith('Select')) {
q = q[0] + ` LIMIT 0,${args.limit ? args.limit : 100};`;
} else if (q[0].startsWith('select')) {
q = q[0] + ` LIMIT 0,${args.limit ? args.limit : 100};`;
} else if (q[0].startsWith('SELECT')) {
q = q[0] + ` LIMIT 0,${args.limit ? args.limit : 100};`;
} else {
return args.query;
}
return q;
}
getColumnsFromJson(json, tn) {
const columns = [];
try {
if (typeof json === 'object' && !Array.isArray(json)) {
const keys = Object.keys(json);
for (let i = 0; i < keys.length; ++i) {
switch (typeof json[keys[i]]) {
case 'number':
if (Number.isInteger(json[keys[i]])) {
columns.push({
dp: null,
tn,
cn: keys[i],
cno: keys[i],
dt: 'int',
np: 10,
ns: 0,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: '11',
dtxs: 0,
altered: 1
});
} else {
columns.push({
dp: null,
tn,
cn: keys[i],
cno: keys[i],
dt: 'float',
np: 10,
ns: 2,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: '11',
dtxs: 2,
altered: 1
});
}
break;
case 'string':
if (json[keys[i]].length <= 255) {
columns.push({
dp: null,
tn,
cn: keys[i],
cno: keys[i],
dt: 'varchar',
np: 45,
ns: 0,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: '45',
dtxs: 0,
altered: 1
});
} else {
columns.push({
dp: null,
tn,
cn: keys[i],
cno: keys[i],
dt: 'text',
np: null,
ns: 0,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: null,
dtxs: 0,
altered: 1
});
}
break;
case 'boolean':
columns.push({
dp: null,
tn,
cn: keys[i],
cno: keys[i],
dt: 'boolean',
np: 3,
ns: 0,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: '1',
dtxs: 0,
altered: 1
});
break;
case 'object':
columns.push({
dp: null,
tn,
cn: keys[i],
cno: keys[i],
dt: 'json',
np: 3,
ns: 0,
clen: null,
cop: 1,
pk: false,
nrqd: false,
rqd: false,
un: false,
ct: 'int(11) unsigned',
ai: false,
unique: false,
cdf: null,
cc: '',
csn: null,
dtx: 'specificType',
dtxp: null,
dtxs: 0,
altered: 1
});
break;
default:
break;
}
}
}
} catch (e) {
console.log('Error in getColumnsFromJson', e);
}
return columns;
}
static colPropAuDisabled(_col) {
return true;
}
static getAbstractType(col): any {
switch ((col.dt || col.dt).toLowerCase()) {
case 'integer':
return 'integer';
case 'bfile':
case 'binary rowid':
case 'binary double':
case 'binary_float':
return 'string';
case 'blob':
return 'blob';
case 'canoical':
case 'cfile':
case 'char':
case 'clob':
case 'content pointer':
case 'contigous array':
return 'string';
case 'date':
return 'date';
case 'decimal':
case 'double precision':
case 'float':
return 'float';
case 'interval day to second':
case 'interval year to month':
return 'string';
case 'lob pointer':
return 'string';
case 'long':
return 'integer';
case 'long raw':
return 'string';
case 'named collection':
case 'named object':
case 'nchar':
case 'nclob':
return 'string';
case 'nvarchar2':
case 'octet':
case 'oid':
case 'pointer':
case 'raw':
return 'string';
case 'real':
case 'number':
return 'float';
case 'ref':
case 'ref cursor':
case 'rowid':
case 'signed binary integer':
return 'string';
case 'smallint':
return 'integer';
case 'table':
return 'string';
case 'time':
case 'time with tz':
return 'time';
case 'timestamp':
case 'timestamp with local time zone':
case 'timestamp with local tz':
case 'timestamp with timezone':
case 'timestamp with tz':
return 'datetime';
case 'unsigned binary integer':
case 'urowid':
case 'varchar':
case 'varchar2':
return 'string';
case 'varray':
case 'varying array':
return 'string';
}
}
static getUIType(col): any {
switch (this.getAbstractType(col)) {
case 'integer':
return 'Number';
case 'boolean':
return 'Checkbox';
case 'float':
return 'Decimal';
case 'date':
return 'Date';
case 'datetime':
return 'CreateTime';
case 'time':
return 'Time';
case 'year':
return 'Year';
case 'string':
return 'SingleLineText';
case 'text':
return 'LongText';
case 'blob':
return 'Attachment';
case 'enum':
return 'SingleSelect';
case 'set':
return 'MultiSelect';
case 'json':
return 'LongText';
}
}
static getDataTypeForUiType(col) {
const colProp: any = {};
switch (col.uidt) {
case 'ID':
colProp.dt = 'integer';
colProp.pk = true;
colProp.un = true;
colProp.ai = true;
colProp.rqd = true;
break;
case 'ForeignKey':
colProp.dt = 'varchar';
break;
case 'SingleLineText':
colProp.dt = 'varchar';
break;
case 'LongText':
colProp.dt = 'clob';
break;
case 'Attachment':
colProp.dt = 'clob';
break;
case 'Checkbox':
colProp.dt = 'tinyint';
colProp.dtxp = 1;
break;
case 'MultiSelect':
colProp.dt = 'varchar2';
break;
case 'SingleSelect':
colProp.dt = 'varchar2';
break;
case 'Collaborator':
colProp.dt = 'varchar';
break;
case 'Date':
colProp.dt = 'varchar';
break;
case 'Year':
colProp.dt = 'year';
break;
case 'Time':
colProp.dt = 'time';
break;
case 'PhoneNumber':
colProp.dt = 'varchar';
colProp.validate = {
func: ['isMobilePhone'],
args: [''],
msg: ['Validation failed : Invalid Mobile Format']
};
break;
case 'Email':
colProp.dt = 'varchar';
colProp.validate = {
func: ['isEmail'],
args: [''],
msg: ['Validation failed : Invalid Email Format']
};
break;
case 'URL':
colProp.dt = 'varchar';
colProp.validate = {
func: ['isURL'],
args: [''],
msg: ['Validation failed : Invalid URL Format']
};
break;
case 'Number':
colProp.dt = 'integer';
break;
case 'Decimal':
colProp.dt = 'decimal';
break;
case 'Currency':
colProp.dt = 'decimal';
colProp.validate = {
func: ['isCurrency'],
args: [''],
msg: ['Validation failed : Invalid Currency Format']
};
break;
case 'Percent':
colProp.dt = 'double';
break;
case 'Duration':
colProp.dt = 'integer';
break;
case 'Rating':
colProp.dt = 'float';
break;
case 'Formula':
colProp.dt = 'varchar';
break;
case 'Rollup':
colProp.dt = 'varchar';
break;
case 'Count':
colProp.dt = 'integer';
break;
case 'Lookup':
colProp.dt = 'varchar';
break;
case 'DateTime':
colProp.dt = 'timestamp';
break;
case 'CreateTime':
colProp.dt = 'timestamp';
break;
case 'LastModifiedTime':
colProp.dt = 'timestamp';
break;
case 'AutoNumber':
colProp.dt = 'integer';
break;
case 'Barcode':
colProp.dt = 'varchar';
break;
case 'Button':
colProp.dt = 'varchar';
break;
default:
colProp.dt = 'varchar';
break;
}
return colProp;
}
static getUnsupportedFnList() {
return [];
}
}
// module.exports = PgUiHelp;
/**
* @copyright Copyright (c) 2021, Xgene Cloud Ltd
*
* @author Naveen MR <oof1lab@gmail.com>
* @author Pranav C Balan <pranavxc@gmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

1970
packages/nocodb/src/lib/sqlUi/PgUi.ts

File diff suppressed because it is too large Load Diff

70
packages/nocodb/src/lib/sqlUi/SqlUiFactory.ts

@ -1,70 +0,0 @@
import { MysqlUi } from './MysqlUi';
import { PgUi } from './PgUi';
import { MssqlUi } from './MssqlUi';
import { OracleUi } from './OracleUi';
import { SqliteUi } from './SqliteUi';
// import {YugabyteUi} from "./YugabyteUi";
// import {TidbUi} from "./TidbUi";
// import {VitessUi} from "./VitessUi";
export class SqlUiFactory {
static create(connectionConfig) {
// connectionConfig.meta = connectionConfig.meta || {};
// connectionConfig.meta.dbtype = connectionConfig.meta.dbtype || "";
if (
connectionConfig.client === 'mysql' ||
connectionConfig.client === 'mysql2'
) {
// if (connectionConfig.meta.dbtype === "tidb")
// return Tidb;
// if (connectionConfig.meta.dbtype === "vitess")
// return Vitess;
console.log('- - - -In Mysql UI');
return MysqlUi;
}
if (connectionConfig.client === 'sqlite3') {
return SqliteUi;
}
if (connectionConfig.client === 'mssql') {
return MssqlUi;
}
if (connectionConfig.client === 'oracledb') {
return OracleUi;
}
if (connectionConfig.client === 'pg') {
// if (connectionConfig.meta.dbtype === "yugabyte")
// return Yugabyte;
return PgUi;
}
throw new Error('Database not supported');
}
}
/**
* @copyright Copyright (c) 2021, Xgene Cloud Ltd
*
* @author Naveen MR <oof1lab@gmail.com>
* @author Pranav C Balan <pranavxc@gmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

1114
packages/nocodb/src/lib/sqlUi/SqliteUi.ts

File diff suppressed because it is too large Load Diff

39
packages/nocodb/src/lib/sqlUi/UITypes.ts

@ -1,39 +0,0 @@
enum UITypes {
ID = 'ID',
LinkToAnotherRecord = 'LinkToAnotherRecord',
ForeignKey = 'ForeignKey',
Lookup = 'Lookup',
SingleLineText = 'SingleLineText',
LongText = 'LongText',
Attachment = 'Attachment',
Checkbox = 'Checkbox',
MultiSelect = 'MultiSelect',
SingleSelect = 'SingleSelect',
Collaborator = 'Collaborator',
Date = 'Date',
Year = 'Year',
Time = 'Time',
PhoneNumber = 'PhoneNumber',
Email = 'Email',
URL = 'URL',
Number = 'Number',
Decimal = 'Decimal',
Currency = 'Currency',
Percent = 'Percent',
Duration = 'Duration',
Rating = 'Rating',
Formula = 'Formula',
Rollup = 'Rollup',
Count = 'Count',
DateTime = 'DateTime',
CreateTime = 'CreateTime',
LastModifiedTime = 'LastModifiedTime',
AutoNumber = 'AutoNumber',
Geometry = 'Geometry',
JSON = 'JSON',
SpecificDBType = 'SpecificDBType',
Barcode = 'Barcode',
Button = 'Button'
}
export default UITypes;

8
packages/nocodb/src/lib/sqlUi/index.ts

@ -1,8 +0,0 @@
// todo: move to a common library
export * from './MysqlUi';
export * from './PgUi';
export * from './MssqlUi';
export * from './OracleUi';
export * from './SqliteUi';
export * from './SqlUiFactory';

6
packages/nocodb/src/lib/templateParser/NcTemplateParser.ts

@ -4,9 +4,9 @@ import {
OracleUi,
PgUi,
SqliteUi,
SqlUiFactory
} from '../sqlUi';
import UITypes from '../sqlUi/UITypes';
SqlUiFactory,
UITypes
} from 'nocodb-sdk';
export default class NcTemplateParser {
sqlUi:

Loading…
Cancel
Save