tapioca icon indicating copy to clipboard operation
tapioca copied to clipboard

ActiveRecord Column DSL: Support ActiveRecord::Type::Json and ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Jsonb

Open marknuzz opened this issue 1 year ago • 3 comments

I was surprised to see that both json and jsonb columns in postgres are mapped as T.untyped despite having popular usage. I couldn't find any discussions about this when searching the issues.

json => ActiveRecord::Type::Json jsonb => ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Jsonb

Question for maintainers: Are there any known gotchas for implementing this in a straightforward way compared to other types? I have some concerns here because it seems like if it isn't implemented there was a good reason for that, but I couldn't find a mention of that anywhere.

marknuzz avatar Sep 22 '24 00:09 marknuzz

I don't think using ActiveRecord::Type:: in a signature makes sense for setters and getters. Playing around a little bit I think we could do T::Hash[T.untyped, T.untyped] instead for json columns, it seems to be automatically serialized/deserialized. I assume it's similar for Postgres.

KaanOzkan avatar Sep 24 '24 17:09 KaanOzkan

Yeah sorry it wasn't clear. ActiveRecord::Type::Json is the type used internally by ActiveRecord and the type that the compiler would be implementing. The signature output would be a form of T::Hash.

marknuzz avatar Sep 25 '24 04:09 marknuzz

JSON/JSONB columns also can contain arrays, strings, and floats as I understand it.

alex-tan avatar Oct 08 '24 17:10 alex-tan