-
Notifications
You must be signed in to change notification settings - Fork 2
/
SqlType.scala
47 lines (40 loc) · 1.84 KB
/
SqlType.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package org.datatools.bigdatatypes.basictypes
import org.datatools.bigdatatypes.basictypes.SqlType.{SqlBool, SqlDate, SqlDecimal, SqlDouble, SqlFloat, SqlInt, SqlLong, SqlString, SqlStruct, SqlTimestamp}
import org.datatools.bigdatatypes.basictypes.SqlTypeMode.*
/** Abstract representation of the type of a generic SQL database */
enum SqlType {
/** @return the [[SqlTypeMode]] of this SqlType
*/
def mode: SqlTypeMode
/** Promotes the type to a new mode if the conversion makes sense. e.g:
* [[List[Option[String] ] ]] and [[Option[List[String] ] ]] should be SqlString(Repeated)
*
* @param mode the mode we want to convert to
* @return a new [[SqlType]] with the mode
*/
def changeMode(mode: SqlTypeMode): SqlType =
if (this.mode.isValidConversion(mode))
this match {
case SqlInt(_) => SqlInt(mode)
case SqlLong(_) => SqlLong(mode)
case SqlFloat(_) => SqlFloat(mode)
case SqlDouble(_) => SqlDouble(mode)
case SqlDecimal(_) => SqlDecimal(mode)
case SqlBool(_) => SqlBool(mode)
case SqlString(_) => SqlString(mode)
case SqlTimestamp(_) => SqlTimestamp(mode)
case SqlDate(_) => SqlDate(mode)
case SqlStruct(records, _) => SqlStruct(records, mode)
}
else this
case SqlInt(mode: SqlTypeMode = Required)
case SqlLong(mode: SqlTypeMode = Required)
case SqlFloat(mode: SqlTypeMode = Required)
case SqlDouble(mode: SqlTypeMode = Required)
case SqlDecimal(mode: SqlTypeMode = Required)
case SqlBool(mode: SqlTypeMode = Required)
case SqlString(mode: SqlTypeMode = Required)
case SqlTimestamp(mode: SqlTypeMode = Required)
case SqlDate(mode: SqlTypeMode = Required)
case SqlStruct(records: List[(String, SqlType)], mode: SqlTypeMode = Required)
}