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 ( CREATE TABLE Persons (
PersonID int NOT NULL AUTO_INCREMENT, PersonID int NOT NULL AUTO_INCREMENT,
CreatedAt datetime, CreatedAt datetime,
Age float, Age float DEFAULT 20 NOT NULL,
LastName varchar(255), LastName varchar(255),
FirstName varchar(255), FirstName varchar(255),
Address varchar(255), Address varchar(255),

View File

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

View File

@ -243,11 +243,13 @@ class SqlServerIntegration extends Sql implements DatasourcePlus {
if (typeof name !== "string") { if (typeof name !== "string") {
continue continue
} }
const isAuto = !!autoColumns.find(col => col === name)
const required = !!requiredColumns.find(col => col === name)
schema[name] = { schema[name] = {
autocolumn: !!autoColumns.find(col => col === name), autocolumn: isAuto,
name: name, name: name,
constraints: { constraints: {
presence: requiredColumns.find(col => col === name), presence: required && !isAuto,
}, },
...convertSqlType(def.DATA_TYPE), ...convertSqlType(def.DATA_TYPE),
externalType: 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) { if (column.Key === "PRI" && primaryKeys.indexOf(column.Key) === -1) {
primaryKeys.push(columnName) primaryKeys.push(columnName)
} }
const constraints = { const hasDefault = column.Default != null
presence: column.Null !== "YES",
}
const isAuto: boolean = const isAuto: boolean =
typeof column.Extra === "string" && typeof column.Extra === "string" &&
(column.Extra === "auto_increment" || (column.Extra === "auto_increment" ||
column.Extra.toLowerCase().includes("generated")) column.Extra.toLowerCase().includes("generated"))
const required = column.Null !== "YES"
const constraints = {
presence: required && !isAuto && !hasDefault,
}
schema[columnName] = { schema[columnName] = {
name: columnName, name: columnName,
autocolumn: isAuto, autocolumn: isAuto,

View File

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