48 def double(name: String, strict: Boolean = true, primary_key: Boolean = false): Column[Double] = |
48 def double(name: String, strict: Boolean = true, primary_key: Boolean = false): Column[Double] = |
49 new Column_Double(name, strict, primary_key) |
49 new Column_Double(name, strict, primary_key) |
50 def string(name: String, strict: Boolean = true, primary_key: Boolean = false): Column[String] = |
50 def string(name: String, strict: Boolean = true, primary_key: Boolean = false): Column[String] = |
51 new Column_String(name, strict, primary_key) |
51 new Column_String(name, strict, primary_key) |
52 def bytes(name: String, strict: Boolean = true, primary_key: Boolean = false): Column[Bytes] = |
52 def bytes(name: String, strict: Boolean = true, primary_key: Boolean = false): Column[Bytes] = |
53 new Column_Bytes(name, strict, primary_key) |
53 new Column_Bytes(name, strict, primary_key, "BLOB") // SQL standard |
|
54 def bytea(name: String, strict: Boolean = true, primary_key: Boolean = false): Column[Bytes] = |
|
55 new Column_Bytes(name, strict, primary_key, "BYTEA") // PostgreSQL |
54 } |
56 } |
55 |
57 |
56 abstract class Column[+A] private[SQL]( |
58 abstract class Column[+A] private[SQL]( |
57 val name: String, val strict: Boolean, val primary_key: Boolean) |
59 val name: String, val strict: Boolean, val primary_key: Boolean) |
58 extends Function[ResultSet, A] |
60 extends Function[ResultSet, A] |
87 } |
89 } |
88 |
90 |
89 class Column_Long private[SQL](name: String, strict: Boolean, primary_key: Boolean) |
91 class Column_Long private[SQL](name: String, strict: Boolean, primary_key: Boolean) |
90 extends Column[Long](name, strict, primary_key) |
92 extends Column[Long](name, strict, primary_key) |
91 { |
93 { |
92 def sql_type: String = "INTEGER" |
94 def sql_type: String = "BIGINT" |
93 def apply(rs: ResultSet): Long = rs.getLong(name) |
95 def apply(rs: ResultSet): Long = rs.getLong(name) |
94 } |
96 } |
95 |
97 |
96 class Column_Double private[SQL](name: String, strict: Boolean, primary_key: Boolean) |
98 class Column_Double private[SQL](name: String, strict: Boolean, primary_key: Boolean) |
97 extends Column[Double](name, strict, primary_key) |
99 extends Column[Double](name, strict, primary_key) |
98 { |
100 { |
99 def sql_type: String = "REAL" |
101 def sql_type: String = "DOUBLE PRECISION" |
100 def apply(rs: ResultSet): Double = rs.getDouble(name) |
102 def apply(rs: ResultSet): Double = rs.getDouble(name) |
101 } |
103 } |
102 |
104 |
103 class Column_String private[SQL](name: String, strict: Boolean, primary_key: Boolean) |
105 class Column_String private[SQL](name: String, strict: Boolean, primary_key: Boolean) |
104 extends Column[String](name, strict, primary_key) |
106 extends Column[String](name, strict, primary_key) |
109 val s = rs.getString(name) |
111 val s = rs.getString(name) |
110 if (s == null) "" else s |
112 if (s == null) "" else s |
111 } |
113 } |
112 } |
114 } |
113 |
115 |
114 class Column_Bytes private[SQL](name: String, strict: Boolean, primary_key: Boolean) |
116 class Column_Bytes private[SQL]( |
|
117 name: String, strict: Boolean, primary_key: Boolean, val sql_type: String) |
115 extends Column[Bytes](name, strict, primary_key) |
118 extends Column[Bytes](name, strict, primary_key) |
116 { |
119 { |
117 def sql_type: String = "BLOB" |
|
118 def apply(rs: ResultSet): Bytes = |
120 def apply(rs: ResultSet): Bytes = |
119 { |
121 { |
120 val bs = rs.getBytes(name) |
122 val bs = rs.getBytes(name) |
121 if (bs == null) Bytes.empty else Bytes(bs) |
123 if (bs == null) Bytes.empty else Bytes(bs) |
122 } |
124 } |