diff --git a/dsl/src/main/scala/com.crobox.clickhouse/dsl/column/TypeCastFunctions.scala b/dsl/src/main/scala/com.crobox.clickhouse/dsl/column/TypeCastFunctions.scala index 33dd0a43..62cde457 100644 --- a/dsl/src/main/scala/com.crobox.clickhouse/dsl/column/TypeCastFunctions.scala +++ b/dsl/src/main/scala/com.crobox.clickhouse/dsl/column/TypeCastFunctions.scala @@ -80,6 +80,13 @@ trait TypeCastFunctions { self: Magnets => extends TypeCastColumn[Double](tableColumn) with Reinterpretable + case class BigDecimal(tableColumn: ConstOrColMagnet[_], + orZero: Boolean = false, + orDefault: Option[BigDecimal] = None, + orNull: Boolean = false) + extends TypeCastColumn[BigDecimal](tableColumn) + with Reinterpretable + case class Uuid(tableColumn: ConstOrColMagnet[_], orZero: Boolean = false, orDefault: Option[Uuid] = None, @@ -184,13 +191,21 @@ trait TypeCastFunctions { self: Magnets => Float32(tableColumn, orDefault = Option(value)) def toFloat32OrNull(tableColumn: ConstOrColMagnet[_]): Float32 = Float32(tableColumn, orNull = true) def toFloat32OrZero(tableColumn: ConstOrColMagnet[_]): Float32 = Float32(tableColumn, orZero = true) - def toFloat64(tableColumn: ConstOrColMagnet[_]): Float64 = Float64(tableColumn) + + def toFloat64(tableColumn: ConstOrColMagnet[_]): Float64 = Float64(tableColumn) def toFloat64OrDefault(tableColumn: ConstOrColMagnet[_], value: Double): Float64 = Float64(tableColumn, orDefault = Option(value)) def toFloat64OrNull(tableColumn: ConstOrColMagnet[_]): Float64 = Float64(tableColumn, orNull = true) def toFloat64OrZero(tableColumn: ConstOrColMagnet[_]): Float64 = Float64(tableColumn, orZero = true) + def toBigDecimal(tableColumn: ConstOrColMagnet[_]): BigDecimal = BigDecimal(tableColumn) + + def toBigDecimalOrDefault(tableColumn: ConstOrColMagnet[_], value: BigDecimal): BigDecimal = + BigDecimal(tableColumn, orDefault = Option(value)) + def toBigDecimalOrNull(tableColumn: ConstOrColMagnet[_]): BigDecimal = BigDecimal(tableColumn, orNull = true) + def toBigDecimalOrZero(tableColumn: ConstOrColMagnet[_]): BigDecimal = BigDecimal(tableColumn, orZero = true) + def toDate(tableColumn: ConstOrColMagnet[_]): DateRep = DateRep(tableColumn) def toDateOrDefault(tableColumn: ConstOrColMagnet[_], value: DateTime): DateRep = diff --git a/dsl/src/main/scala/com.crobox.clickhouse/dsl/language/TypeCastFunctionTokenizer.scala b/dsl/src/main/scala/com.crobox.clickhouse/dsl/language/TypeCastFunctionTokenizer.scala index b028b534..a33cad16 100644 --- a/dsl/src/main/scala/com.crobox.clickhouse/dsl/language/TypeCastFunctionTokenizer.scala +++ b/dsl/src/main/scala/com.crobox.clickhouse/dsl/language/TypeCastFunctionTokenizer.scala @@ -34,6 +34,7 @@ trait TypeCastFunctionTokenizer { case c: Int64 => tknz(c.tableColumn.column, ColumnType.Int64, c.orZero, c.orNull, c.orDefault) case c: Float32 => tknz(c.tableColumn.column, ColumnType.Float32, c.orZero, c.orNull, c.orDefault) case c: Float64 => tknz(c.tableColumn.column, ColumnType.Float64, c.orZero, c.orNull, c.orDefault) + case c: BigDecimal => tknz(c.tableColumn.column, ColumnType.Float64, c.orZero, c.orNull, c.orDefault) case c: DateRep => tknz(c.tableColumn.column, ColumnType.Date, c.orZero, c.orNull, c.orDefault) case c: DateTimeRep => tknz(c.tableColumn.column, ColumnType.DateTime, c.orZero, c.orNull, c.orDefault) case c: Uuid => tknz(c.tableColumn.column, ColumnType.UUID, c.orZero, c.orNull, c.orDefault)