Fix for default values with NOT NULL requirements being intepreted as requiring values in the frontend, presence check is now ignored if a default or auto value is found.

This commit is contained in:
mike12345567 2023-04-14 17:56:17 +01:00
parent 80a5768e06
commit 09ccac12ae
5 changed files with 18 additions and 11 deletions

View File

@ -3,7 +3,7 @@ USE main;
CREATE TABLE Persons (
PersonID int NOT NULL AUTO_INCREMENT,
CreatedAt datetime,
Age float,
Age float DEFAULT 20 NOT NULL,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),

View File

@ -8,6 +8,7 @@ CREATE TABLE Persons (
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Belfast',
Age INTEGER DEFAULT 20 NOT NULL,
Type person_job
);
CREATE TABLE Tasks (

View File

@ -243,11 +243,13 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
if (typeof name !== "string") {
continue
}
const isAuto = !!autoColumns.find(col => col === name)
const required = !!requiredColumns.find(col => col === name)
schema[name] = {
autocolumn: !!autoColumns.find(col => col === name),
autocolumn: isAuto,
name: name,
constraints: {
presence: requiredColumns.find(col => col === name),
presence: required && !isAuto,
},
...convertSqlType(def.DATA_TYPE),
externalType: def.DATA_TYPE,

View File

@ -229,13 +229,15 @@ class MySQLIntegration extends Sql implements DatasourcePlus {
if (column.Key === "PRI" && primaryKeys.indexOf(column.Key) === -1) {
primaryKeys.push(columnName)
}
const constraints = {
presence: column.Null !== "YES",
}
const hasDefault = column.Default != null
const isAuto: boolean =
typeof column.Extra === "string" &&
(column.Extra === "auto_increment" ||
column.Extra.toLowerCase().includes("generated"))
const required = column.Null !== "YES"
const constraints = {
presence: required && !isAuto && !hasDefault,
}
schema[columnName] = {
name: columnName,
autocolumn: isAuto,

View File

@ -262,15 +262,17 @@ class PostgresIntegration extends Sql implements DatasourcePlus {
column.identity_start ||
column.identity_increment
)
const constraints = {
presence: column.is_nullable === "NO",
}
const hasDefault =
const hasDefault = column.column_default != null
const hasNextVal =
typeof column.column_default === "string" &&
column.column_default.startsWith("nextval")
const isGenerated =
column.is_generated && column.is_generated !== "NEVER"
const isAuto: boolean = hasDefault || identity || isGenerated
const isAuto: boolean = hasNextVal || identity || isGenerated
const required = column.is_nullable === "NO"
const constraints = {
presence: required && !hasDefault && !isGenerated,
}
tables[tableName].schema[columnName] = {
autocolumn: isAuto,
name: columnName,