You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Column definitions should be non-nullable for native non pointer types.
When creating new tables the columns for non-pointer types are nullable in the database (at least for MariaDB). In the case that inserts/updates only goes through the API this is can be negated in terms a data integrity issue - but this cannot be guaranteed and it will certainly cause problems with the API to assign nulls to non-nilable fields.
I also would prefer that a non-pointer type is not nullable by default. This makes sense for data integrity.
However there is a counter-example with the Null* types in database/sql (e.g. NullString, NullBool, etc). These are not pointers but are clearly nullable.
There are two possible solutions:
If a field is not a pointer type, AND it does not implement sql.Scanner, then it should default to "not null" in the create table statement. Such a field will not correctly handle a null value anyway.
Provide an option on ColumnMap, something like columnMap.SetNullable(false). Then I can do whatever I want regardless.
I think both solutions should be done.
Currently I am just using columnMap.SetSqlCreate() and specifying it all manually.
Column definitions should be non-nullable for native non pointer types.
When creating new tables the columns for non-pointer types are nullable in the database (at least for MariaDB). In the case that inserts/updates only goes through the API this is can be negated in terms a data integrity issue - but this cannot be guaranteed and it will certainly cause problems with the API to assign nulls to non-nilable fields.
From the performance end it may be implementation specific but mysql is faster with non-nullable columns (http://stackoverflow.com/questions/471367/when-to-use-null-in-mysql-tables).
This is addressed in the createTable of https://github.com/jmoiron/modl/blob/master/dbmap.go#L180 and is dependant on the ColumnMap here https://github.com/jmoiron/modl/blob/master/tablemap.go#L295 .
The text was updated successfully, but these errors were encountered: