Browse Source
Merge pull request #4221 from Budibase/fix/sql-4179-3196
Various SQL/table fixes
master
Michael Drury
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with
58 additions and
21 deletions
-
packages/builder/src/components/backend/DataTable/modals/CreateEditColumn.svelte
-
packages/builder/src/components/integration/AccessLevelSelect.svelte
-
packages/builder/src/constants/backend/index.js
-
packages/server/src/api/controllers/row/ExternalRequest.ts
-
packages/server/src/api/controllers/table/utils.js
-
packages/server/src/constants/index.js
-
packages/server/src/integrations/utils.ts
|
|
|
@ -22,8 +22,10 @@ |
|
|
|
RelationshipTypes, |
|
|
|
ALLOWABLE_STRING_OPTIONS, |
|
|
|
ALLOWABLE_NUMBER_OPTIONS, |
|
|
|
ALLOWABLE_JSON_OPTIONS, |
|
|
|
ALLOWABLE_STRING_TYPES, |
|
|
|
ALLOWABLE_NUMBER_TYPES, |
|
|
|
ALLOWABLE_JSON_TYPES, |
|
|
|
SWITCHABLE_TYPES, |
|
|
|
} from "constants/backend" |
|
|
|
import { getAutoColumnInformation, buildAutoColumn } from "builderStore/utils" |
|
|
|
@ -236,6 +238,11 @@ |
|
|
|
ALLOWABLE_NUMBER_TYPES.indexOf(field.type) !== -1 |
|
|
|
) { |
|
|
|
return ALLOWABLE_NUMBER_OPTIONS |
|
|
|
} else if ( |
|
|
|
originalName && |
|
|
|
ALLOWABLE_JSON_TYPES.indexOf(field.type) !== -1 |
|
|
|
) { |
|
|
|
return ALLOWABLE_JSON_OPTIONS |
|
|
|
} else if (!external) { |
|
|
|
return [ |
|
|
|
...Object.values(fieldDefinitions), |
|
|
|
|
|
|
|
@ -1,16 +1,14 @@ |
|
|
|
<script> |
|
|
|
import { Label, Select } from "@budibase/bbui" |
|
|
|
import { permissions, roles } from "stores/backend" |
|
|
|
import { onMount } from "svelte" |
|
|
|
import { Roles } from "constants/backend" |
|
|
|
|
|
|
|
export let query |
|
|
|
export let saveId |
|
|
|
export let label |
|
|
|
|
|
|
|
$: updateRole(roleId, saveId) |
|
|
|
$: getPermissions(query) |
|
|
|
|
|
|
|
let roleId, loaded |
|
|
|
let roleId, loaded, fetched |
|
|
|
|
|
|
|
async function updateRole(role, id) { |
|
|
|
roleId = role |
|
|
|
@ -26,19 +24,23 @@ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
onMount(async () => { |
|
|
|
if (!query || !query._id) { |
|
|
|
async function getPermissions(queryToFetch) { |
|
|
|
if (fetched?._id === queryToFetch?._id) { |
|
|
|
return |
|
|
|
} |
|
|
|
fetched = queryToFetch |
|
|
|
if (!queryToFetch || !queryToFetch._id) { |
|
|
|
roleId = Roles.BASIC |
|
|
|
loaded = true |
|
|
|
return |
|
|
|
} |
|
|
|
try { |
|
|
|
roleId = (await permissions.forResource(query._id))["read"] |
|
|
|
roleId = (await permissions.forResource(queryToFetch._id))["read"] |
|
|
|
} catch (err) { |
|
|
|
roleId = Roles.BASIC |
|
|
|
} |
|
|
|
loaded = true |
|
|
|
}) |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
{#if loaded} |
|
|
|
|
|
|
|
@ -148,20 +148,23 @@ export const RelationshipTypes = { |
|
|
|
} |
|
|
|
|
|
|
|
export const ALLOWABLE_STRING_OPTIONS = [FIELDS.STRING, FIELDS.OPTIONS] |
|
|
|
|
|
|
|
export const ALLOWABLE_STRING_TYPES = ALLOWABLE_STRING_OPTIONS.map( |
|
|
|
opt => opt.type |
|
|
|
) |
|
|
|
|
|
|
|
export const ALLOWABLE_NUMBER_OPTIONS = [FIELDS.NUMBER, FIELDS.BOOLEAN] |
|
|
|
|
|
|
|
export const ALLOWABLE_NUMBER_TYPES = ALLOWABLE_NUMBER_OPTIONS.map( |
|
|
|
opt => opt.type |
|
|
|
) |
|
|
|
|
|
|
|
export const SWITCHABLE_TYPES = ALLOWABLE_NUMBER_TYPES.concat( |
|
|
|
ALLOWABLE_STRING_TYPES |
|
|
|
) |
|
|
|
export const ALLOWABLE_JSON_OPTIONS = [FIELDS.JSON, FIELDS.ARRAY] |
|
|
|
export const ALLOWABLE_JSON_TYPES = ALLOWABLE_JSON_OPTIONS.map(opt => opt.type) |
|
|
|
|
|
|
|
export const SWITCHABLE_TYPES = [ |
|
|
|
...ALLOWABLE_STRING_TYPES, |
|
|
|
...ALLOWABLE_NUMBER_TYPES, |
|
|
|
...ALLOWABLE_JSON_TYPES, |
|
|
|
] |
|
|
|
|
|
|
|
export const IntegrationTypes = { |
|
|
|
POSTGRES: "POSTGRES", |
|
|
|
|
|
|
|
@ -525,7 +525,7 @@ module External { |
|
|
|
const linkTable = this.getTable(tableId) |
|
|
|
// @ts-ignore
|
|
|
|
const linkPrimary = linkTable.primary[0] |
|
|
|
const rows = related[key].rows || [] |
|
|
|
const rows = related[key]?.rows || [] |
|
|
|
const found = rows.find( |
|
|
|
(row: { [key: string]: any }) => |
|
|
|
row[linkPrimary] === relationship.id || |
|
|
|
|
|
|
|
@ -8,7 +8,11 @@ const { |
|
|
|
const { isEqual } = require("lodash/fp") |
|
|
|
const { AutoFieldSubTypes, FieldTypes } = require("../../../constants") |
|
|
|
const { inputProcessing } = require("../../../utilities/rowProcessor") |
|
|
|
const { USERS_TABLE_SCHEMA, SwitchableTypes } = require("../../../constants") |
|
|
|
const { |
|
|
|
USERS_TABLE_SCHEMA, |
|
|
|
SwitchableTypes, |
|
|
|
CanSwitchTypes, |
|
|
|
} = require("../../../constants") |
|
|
|
const { |
|
|
|
isExternalTable, |
|
|
|
breakExternalTableId, |
|
|
|
@ -340,6 +344,23 @@ exports.foreignKeyStructure = (keyName, meta = null) => { |
|
|
|
return structure |
|
|
|
} |
|
|
|
|
|
|
|
exports.areSwitchableTypes = (type1, type2) => { |
|
|
|
if ( |
|
|
|
SwitchableTypes.indexOf(type1) === -1 && |
|
|
|
SwitchableTypes.indexOf(type2) === -1 |
|
|
|
) { |
|
|
|
return false |
|
|
|
} |
|
|
|
for (let option of CanSwitchTypes) { |
|
|
|
const index1 = option.indexOf(type1), |
|
|
|
index2 = option.indexOf(type2) |
|
|
|
if (index1 !== -1 && index2 !== -1 && index1 !== index2) { |
|
|
|
return true |
|
|
|
} |
|
|
|
} |
|
|
|
return false |
|
|
|
} |
|
|
|
|
|
|
|
exports.hasTypeChanged = (table, oldTable) => { |
|
|
|
if (!oldTable) { |
|
|
|
return false |
|
|
|
@ -350,7 +371,7 @@ exports.hasTypeChanged = (table, oldTable) => { |
|
|
|
continue |
|
|
|
} |
|
|
|
const newType = table.schema[key].type |
|
|
|
if (oldType !== newType && SwitchableTypes.indexOf(oldType) === -1) { |
|
|
|
if (oldType !== newType && !exports.areSwitchableTypes(oldType, newType)) { |
|
|
|
return true |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -45,13 +45,16 @@ exports.FieldTypes = { |
|
|
|
INTERNAL: "internal", |
|
|
|
} |
|
|
|
|
|
|
|
exports.SwitchableTypes = [ |
|
|
|
exports.FieldTypes.STRING, |
|
|
|
exports.FieldTypes.OPTIONS, |
|
|
|
exports.FieldTypes.NUMBER, |
|
|
|
exports.FieldTypes.BOOLEAN, |
|
|
|
exports.CanSwitchTypes = [ |
|
|
|
[exports.FieldTypes.JSON, exports.FieldTypes.ARRAY], |
|
|
|
[exports.FieldTypes.STRING, exports.FieldTypes.OPTIONS], |
|
|
|
[exports.FieldTypes.BOOLEAN, exports.FieldTypes.NUMBER], |
|
|
|
] |
|
|
|
|
|
|
|
exports.SwitchableTypes = exports.CanSwitchTypes.reduce((prev, current) => |
|
|
|
prev ? prev.concat(current) : current |
|
|
|
) |
|
|
|
|
|
|
|
exports.RelationshipTypes = { |
|
|
|
ONE_TO_MANY: "one-to-many", |
|
|
|
MANY_TO_ONE: "many-to-one", |
|
|
|
|
|
|
|
@ -157,6 +157,7 @@ function copyExistingPropsOver( |
|
|
|
if ( |
|
|
|
existingTableSchema[key].type === FieldTypes.LINK || |
|
|
|
existingTableSchema[key].type === FieldTypes.OPTIONS || |
|
|
|
existingTableSchema[key].type === FieldTypes.ARRAY || |
|
|
|
((!table.schema[key] || table.schema[key].type === FieldTypes.NUMBER) && |
|
|
|
existingTableSchema[key].type === FieldTypes.BOOLEAN) |
|
|
|
) { |
|
|
|
|