From 728ac31fc2eba4a8fd599105cd852c0ed388a072 Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Fri, 29 Jan 2021 08:07:13 -0800 Subject: [PATCH] Have explicit :text option for a String column take priority over :size option on PostgreSQL (Fixes #1750) --- CHANGELOG | 2 ++ lib/sequel/adapters/shared/postgres.rb | 6 ++++-- spec/adapters/postgres_spec.rb | 5 +++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index f59ed42e19..d91fda150d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,7 @@ === master +* Have explicit :text option for a String column take priority over :size option on PostgreSQL (jeremyevans) (#1750) + * Support a :skip_invalid option in auto_validations plugin for not adding errors to a column that already has an error (jeremyevans) * Support a :skip_invalid option in validation_helpers for not adding an error to a column that already has an error (jeremyevans) diff --git a/lib/sequel/adapters/shared/postgres.rb b/lib/sequel/adapters/shared/postgres.rb index 1083aee305..2ec57b7fd7 100644 --- a/lib/sequel/adapters/shared/postgres.rb +++ b/lib/sequel/adapters/shared/postgres.rb @@ -1500,9 +1500,11 @@ def type_literal_generic_integer(column) # disallowed or there is a size specified, use the varchar type. # Otherwise use the text type. def type_literal_generic_string(column) - if column[:fixed] + if column[:text] + :text + elsif column[:fixed] "char(#{column[:size]||255})" - elsif column[:text] == false or column[:size] + elsif column[:text] == false || column[:size] "varchar(#{column[:size]||255})" else :text diff --git a/spec/adapters/postgres_spec.rb b/spec/adapters/postgres_spec.rb index 2ad13eb106..3939981b42 100644 --- a/spec/adapters/postgres_spec.rb +++ b/spec/adapters/postgres_spec.rb @@ -235,6 +235,11 @@ proc{@db.create_table(:some_table, :temp => true, :on_commit => :unsupported){text :name}}.must_raise(Sequel::Error) end + it "should not use a size for text columns" do + @db.create_table(:tmp_dolls){String :description, text: true, size: :long} + @db.tables.must_include :tmp_dolls + end + it "should create an unlogged table" do @db.create_table(:unlogged_dolls, :unlogged => true){text :name} end if DB.server_version >= 90100