From 09fe45b09cc9dff7a0d62feeb055e3e66eb6d07b Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 20 Feb 2024 23:56:11 +0530 Subject: [PATCH] mysql: added a helper to compare UUID strings with uuid_to_bin --- mysql/literal.go | 15 ++++++++++++++- mysql/literal_test.go | 10 ++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/mysql/literal.go b/mysql/literal.go index 1c69c31..3c7c07a 100644 --- a/mysql/literal.go +++ b/mysql/literal.go @@ -1,8 +1,10 @@ package mysql import ( - "github.com/go-jet/jet/v2/internal/jet" + "fmt" "time" + + "github.com/go-jet/jet/v2/internal/jet" ) // Keywords @@ -55,6 +57,17 @@ var String = jet.String // value can be any uuid type with a String method var UUID = jet.UUID +// UUIDToBin takes ay object with a String method and calls StringUUIDToBin. +func UUIDToBin(str fmt.Stringer) StringExpression { + return StringUUIDToBin(str.String()) +} + +// StringUUIDToBin is a helper function that calls "uuid_to_bin" function on the passed value. +func StringUUIDToBin(str string) StringExpression { + fn := Func("uuid_to_bin", String(str)) + return StringExp(fn) +} + // Date creates new date literal func Date(year int, month time.Month, day int) DateExpression { return CAST(jet.Date(year, month, day)).AS_DATE() diff --git a/mysql/literal_test.go b/mysql/literal_test.go index fb96641..d5831b6 100644 --- a/mysql/literal_test.go +++ b/mysql/literal_test.go @@ -4,6 +4,8 @@ import ( "math" "testing" "time" + + "github.com/google/uuid" ) func TestBool(t *testing.T) { @@ -81,3 +83,11 @@ func TestTimestamp(t *testing.T) { assertSerialize(t, Timestamp(2010, time.March, 30, 10, 15, 30), `TIMESTAMP(?)`, "2010-03-30 10:15:30") assertSerialize(t, TimestampT(time.Now()), `TIMESTAMP(?)`) } + +func TestUUIDToBin(t *testing.T) { + assertSerialize(t, UUIDToBin(uuid.Nil), `uuid_to_bin(?)`, uuid.Nil.String()) +} + +func TestStringUUIDToBin(t *testing.T) { + assertSerialize(t, StringUUIDToBin(uuid.Nil.String()), `uuid_to_bin(?)`, uuid.Nil.String()) +}