sql-name-mapper.md
July 23, 2026 ยท View on GitHub
SqlNameMapper converts Scala field names to SQL column names. Three implementations are built in: SnakeCase (default, converts firstName to first_name), Identity (no change), and Custom (arbitrary function).
Core API
The simplified structural shape of SqlNameMapper is:
sealed trait SqlNameMapper extends (String => String)
object SqlNameMapper {
case object SnakeCase extends SqlNameMapper
case object Identity extends SqlNameMapper
final case class Custom(f: String => String) extends SqlNameMapper
}
Usage
Call a mapper like a function:
import zio.blocks.sql.SqlNameMapper
SqlNameMapper.SnakeCase("firstName")
SqlNameMapper.SnakeCase("userID")
SqlNameMapper.Identity("firstName")
val upper = SqlNameMapper.Custom(_.toUpperCase)
upper("firstName")
Use a custom mapper when deriving codecs:
import zio.blocks.sql.{DbCodec, DbCodecDeriver, SqlNameMapper}
import zio.blocks.schema.Schema
case class Order(orderId: Int, totalAmount: BigDecimal)
object Order { given schema: Schema[Order] = Schema.derived }
// Use UPPERCASE column names instead of snake_case
val upperDeriver = DbCodecDeriver.withColumnNameMapper(SqlNameMapper.Custom(_.toUpperCase))
val codec: DbCodec[Order] = Order.schema.deriving(upperDeriver).derive
codec.columns
Key Points
For full control over individual field names, use @Modifier.rename("column_name") on specific fields without changing the global mapper. It takes precedence over any SqlNameMapper in use.