Open falsaffa opened 1 year ago
I had a similar problem in a DB (SQLite), where I have FK to UUIDs
I have a table where the FK can be NULL (not linked to any parent record), and passing a uuid.Nil caused a FK constraint violation.
It seems to me more logic that a uuid.Nil is stored as NULL in a database. But It's only my personal use case... so not sure at all.
Is there any plan for this feature, specifically the IsZero
method?
I'm using upper/db (relevant code here), but I believe this would be similar in other ORMs. Having an IsZero() bool
method would allow deferring a PK UUID to be generated at the database where that belongs:
...Insert(Resource{Code: "code"}) // ID is the zero-value of uuid.UUID
while currently, the application always needs to handle the UUID, because otherwise it is set as 00000000-0000-0000-0000-000000000000
in the database, failing the second time because it already exists:
...Insert(Resource{ID: uuid.New(), Code: "code"})
Please tell me if I can help with this, I can make a PR soon if it would be handled by a maintainer.
Summary
Suggest adding a couple helper functions.
IsZero
IsZero()
allows uuid to support theNullable
interface and interface better with existing code. It can be as simple as:This is particularly important when interfacing UUID with the existing ORM libraries. Heck,
IsZero()
is even used by the reflect package too!ToNullUUID
Another helper function that is used by this null package (and is quite convenient) are to-null values from the original primitives. So in the case of
uuid.UUID
anduuuid.NullUUID
, adding the following helper function.That way we don't have to write the following code:
This is particularly useful when combined with existing libraries such as ORMs. Casting to
uuid.NullUUID
is common.