From 55d6ce6b7b99f1025a23334c4281fad50428e35a Mon Sep 17 00:00:00 2001 From: Jhoni Conzatti Date: Tue, 24 Feb 2026 08:18:33 -0300 Subject: [PATCH 1/2] improv suport datetimeoffset column --- dialects/postgresql/builder.go | 2 ++ dialects/postgresql/builder_test.go | 2 +- dialects/sqlite/builder.go | 2 ++ dialects/sqlite/builder_test.go | 3 ++- dialects/sqlserver/builder.go | 2 ++ dialects/sqlserver/builder_test.go | 2 +- internal/testutils/fake.go | 7 +++++++ schema/column.go | 1 + 8 files changed, 18 insertions(+), 3 deletions(-) diff --git a/dialects/postgresql/builder.go b/dialects/postgresql/builder.go index 9d16d68..7f8436b 100644 --- a/dialects/postgresql/builder.go +++ b/dialects/postgresql/builder.go @@ -53,6 +53,8 @@ func (sb *postgresqlBuilder) ColumnTypeAsString(columnType schema.ColumnType) st return "DOUBLE PRECISION" case schema.Binary: return "BYTEA" + case schema.DateTimeOffSet: + return "TIMESTAMPZ(6)" default: return "VARCHAR" } diff --git a/dialects/postgresql/builder_test.go b/dialects/postgresql/builder_test.go index 6a18f44..efdd33a 100644 --- a/dialects/postgresql/builder_test.go +++ b/dialects/postgresql/builder_test.go @@ -43,7 +43,7 @@ func TestCreateTable(t *testing.T) { userTable := testutils.FakeUserTable(t) expectedSQL := "CREATE TABLE \"user\" (\"id\" BIGSERIAL NOT NULL,\"email\" VARCHAR(80) NOT NULL,\"name\" VARCHAR(50) NOT NULL," + - "\"password_hash\" VARCHAR(256),\"active\" SMALLINT,\"created_at\" TIMESTAMP(6),\"user_master\" BIGINT,\"master_user_id\" BIGINT," + + "\"password_hash\" VARCHAR(256),\"active\" SMALLINT,\"created_at\" TIMESTAMP(6),\"updated_at\" TIMESTAMPZ(6),\"user_master\" BIGINT,\"master_user_id\" BIGINT," + "\"licence_price\" NUMERIC(17,2),\"relevance\" DOUBLE PRECISION,\"photo\" BYTEA,\"any\" VARCHAR,PRIMARY KEY (\"id\",\"email\"));" returnedSQL := sqlBuilder.CreateTable(userTable) testutils.AssertEqualWithLabel(t, expectedSQL, returnedSQL, "SQLBuilder.CreateTable") diff --git a/dialects/sqlite/builder.go b/dialects/sqlite/builder.go index 8c2093c..0f2ab52 100644 --- a/dialects/sqlite/builder.go +++ b/dialects/sqlite/builder.go @@ -79,6 +79,8 @@ func (sb *sqliteBuilder) ColumnTypeAsString(columnType schema.ColumnType) string return "REAL" case schema.Binary: return "BLOB" + case schema.DateTimeOffSet: + return "DATETIME" default: return "TEXT" } diff --git a/dialects/sqlite/builder_test.go b/dialects/sqlite/builder_test.go index 51aaff0..acc5a5c 100644 --- a/dialects/sqlite/builder_test.go +++ b/dialects/sqlite/builder_test.go @@ -23,7 +23,8 @@ func TestCreateTable(t *testing.T) { userTable := testutils.FakeUserTable(t) expectedSQL := "CREATE TABLE \"user\" (\"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\"email\" TEXT NOT NULL,\"name\" TEXT NOT NULL," + - "\"password_hash\" TEXT,\"active\" INTEGER,\"created_at\" DATETIME,\"user_master\" INTEGER,\"master_user_id\" INTEGER,\"licence_price\" REAL,\"relevance\" REAL,\"photo\" BLOB,\"any\" TEXT);" + "\"password_hash\" TEXT,\"active\" INTEGER,\"created_at\" DATETIME,\"updated_at\" DATETIME,\"user_master\" INTEGER," + + "\"master_user_id\" INTEGER,\"licence_price\" REAL,\"relevance\" REAL,\"photo\" BLOB,\"any\" TEXT);" returnedSQL := sqlBuilder.CreateTable(userTable) testutils.AssertEqualWithLabel(t, expectedSQL, returnedSQL, "SQLBuilder.CreateTable") diff --git a/dialects/sqlserver/builder.go b/dialects/sqlserver/builder.go index a0aa235..ddaa2d8 100644 --- a/dialects/sqlserver/builder.go +++ b/dialects/sqlserver/builder.go @@ -75,6 +75,8 @@ func (sb *sqlserverBuilder) ColumnTypeAsString(columnType schema.ColumnType) str return "FLOAT" case schema.Binary: return "VARBINARY(MAX)" + case schema.DateTimeOffSet: + return "DATETIMEOFFSET(6)" default: return "VARCHAR" } diff --git a/dialects/sqlserver/builder_test.go b/dialects/sqlserver/builder_test.go index 169a5a5..9112d3d 100644 --- a/dialects/sqlserver/builder_test.go +++ b/dialects/sqlserver/builder_test.go @@ -23,7 +23,7 @@ func TestCreateTable(t *testing.T) { userTable := testutils.FakeUserTable(t) expectedSQL := "CREATE TABLE [user] ([id] BIGINT NOT NULL IDENTITY (1, 1),[email] VARCHAR(80) NOT NULL,[name] VARCHAR(50) NOT NULL," + - "[password_hash] VARCHAR(256),[active] BIT,[created_at] DATETIME2(6),[user_master] BIGINT,[master_user_id] BIGINT," + + "[password_hash] VARCHAR(256),[active] BIT,[created_at] DATETIME2(6),[updated_at] DATETIMEOFFSET(6),[user_master] BIGINT,[master_user_id] BIGINT," + "[licence_price] MONEY,[relevance] FLOAT,[photo] VARBINARY(MAX),[any] VARCHAR,CONSTRAINT [PK_user] PRIMARY KEY ([id],[email]));" returnedSQL := sqlBuilder.CreateTable(userTable) testutils.AssertEqualWithLabel(t, expectedSQL, returnedSQL, "SQLBuilder.CreateTable") diff --git a/internal/testutils/fake.go b/internal/testutils/fake.go index 79e7694..1c90bc5 100644 --- a/internal/testutils/fake.go +++ b/internal/testutils/fake.go @@ -86,6 +86,13 @@ func FakeUserTable(t *testing.T) schema.Table { NotNull: false, AutoIncrement: false, }, + schema.NewColumnParams{ + Name: "updated_at", + Type: schema.DateTimeOffSet, + PrimaryKey: false, + NotNull: false, + AutoIncrement: false, + }, schema.NewColumnParams{ Name: "user_master", Type: schema.Integer, diff --git a/schema/column.go b/schema/column.go index f081065..1b64889 100644 --- a/schema/column.go +++ b/schema/column.go @@ -10,6 +10,7 @@ const ( Decimal Boolean Binary + DateTimeOffSet ) type NewColumnParams struct { From 8a52a0c6ba4975ee2f93f4363d69ce39188a207f Mon Sep 17 00:00:00 2001 From: Jhoni Conzatti Date: Tue, 24 Feb 2026 08:26:22 -0300 Subject: [PATCH 2/2] generic builder test adjust --- internal/builder_generic_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/builder_generic_test.go b/internal/builder_generic_test.go index c574b4b..854ea19 100644 --- a/internal/builder_generic_test.go +++ b/internal/builder_generic_test.go @@ -15,7 +15,7 @@ func TestCreateTable(t *testing.T) { userTable := testutils.FakeUserTable(t) expectedSQL := "CREATE TABLE \"user\" (\"id\" <>,\"email\" <>,\"name\" <>,\"password_hash\" <>," + - "\"active\" <>,\"created_at\" <>,\"user_master\" <>,\"master_user_id\" <>," + + "\"active\" <>,\"created_at\" <>,\"updated_at\" <>,\"user_master\" <>,\"master_user_id\" <>," + "\"licence_price\" <>,\"relevance\" <>,\"photo\" <>,\"any\" <>,PRIMARY KEY (\"id\",\"email\"));" returnedSQL := sqlBuilder.CreateTable(userTable) testutils.AssertEqualWithLabel(t, expectedSQL, returnedSQL, "SQLBuilder.CreateTable")