exactnumeric.scala

来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 66 行

SCALA
66
字号
/*                     __                                               *\**     ________ ___   / /  ___     Scala API                            ****    / __/ __// _ | / /  / _ |    (c) 2003-2006, LAMP/EPFL             ****  __\ \/ /__/ __ |/ /__/ __ |                                         **** /____/\___/_/ |_/____/_/ | |                                         ****                          |/                                          **\*                                                                      */// $Id: ExactNumeric.scala 9043 2006-10-24 14:46:55Z dubochet $package scala.dbc.datatype;/** A type category for all SQL types that store constant-precision  * numbers.  */abstract class ExactNumeric[Type](  override val nativeTypeId: DataType.Id) extends datatype.Numeric[Type](nativeTypeId) {    def isEquivalent(datatype: DataType) = datatype match {    case dt: ExactNumeric[_] =>      (nativeTypeId == dt.nativeTypeId &&       precisionRadix == dt.precisionRadix &&       precision == dt.precision &&       scale == dt.scale &&       signed == dt.signed)    case _ =>      false  }    def isSubtypeOf(datatype: DataType) = datatype match {    case dt: ExactNumeric[_] =>      (nativeTypeId == dt.nativeTypeId &&       precisionRadix == dt.precisionRadix &&       precision <= dt.precision &&       scale <= dt.scale &&       signed == dt.signed)    case _ =>      false  }  /** The number of digits used after the decimal point. */  def scale: Int;  /** A SQL-99 compliant string representation of the type.   * <h3>Compatibility notice</h3> This method assumes that an integer   * uses 32 bits, a small 16 and a big 64. This is not defined in the   * standard but is usually the case.   */  override def sqlString: java.lang.String = Tuple3(precisionRadix,precision,scale) match {    case Tuple3(2,16,0) => "SMALLINT"    case Tuple3(2,32,0) => "INTEGER"    case Tuple3(2,64,0) => "BIGINT"    case Tuple3(2,java.lang.Integer.MAX_VALUE,0) => "BIGINT"    case Tuple3(2,p,s) =>      throw exception.UnsupportedFeature("SQL-99 does not support an exact numeric type with a binary defined precision other than 16, 32 and 64 bits");    case Tuple3(10,p,0) => "NUMERIC (" + p.toString() + ")"    case Tuple3(10,p,s) => "NUMERIC (" + p.toString() + ", " + s.toString() + ")"    case Tuple3(pr,_,_) =>      throw exception.UnsupportedFeature("SQL-99 does not support the precision of an exact numeric type to be defined in a radix other than 2 or 10");  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?