172 |
172 |
173 class Statement private[SQL](val db: Database, val rep: PreparedStatement) |
173 class Statement private[SQL](val db: Database, val rep: PreparedStatement) |
174 { |
174 { |
175 stmt => |
175 stmt => |
176 |
176 |
177 def set_bool(i: Int, x: Boolean) { rep.setBoolean(i, x) } |
177 object bool |
178 def set_bool(i: Int, x: Option[Boolean]) |
178 { |
179 { |
179 def update(i: Int, x: Boolean) { rep.setBoolean(i, x) } |
180 if (x.isDefined) set_bool(i, x.get) |
180 def update(i: Int, x: Option[Boolean]) |
181 else rep.setNull(i, java.sql.Types.BOOLEAN) |
181 { |
182 } |
182 if (x.isDefined) update(i, x.get) |
183 |
183 else rep.setNull(i, java.sql.Types.BOOLEAN) |
184 def set_int(i: Int, x: Int) { rep.setInt(i, x) } |
184 } |
185 def set_int(i: Int, x: Option[Int]) |
185 } |
186 { |
186 object int |
187 if (x.isDefined) set_int(i, x.get) |
187 { |
188 else rep.setNull(i, java.sql.Types.INTEGER) |
188 def update(i: Int, x: Int) { rep.setInt(i, x) } |
189 } |
189 def update(i: Int, x: Option[Int]) |
190 |
190 { |
191 def set_long(i: Int, x: Long) { rep.setLong(i, x) } |
191 if (x.isDefined) update(i, x.get) |
192 def set_long(i: Int, x: Option[Long]) |
192 else rep.setNull(i, java.sql.Types.INTEGER) |
193 { |
193 } |
194 if (x.isDefined) set_long(i, x.get) |
194 } |
195 else rep.setNull(i, java.sql.Types.BIGINT) |
195 object long |
196 } |
196 { |
197 |
197 def update(i: Int, x: Long) { rep.setLong(i, x) } |
198 def set_double(i: Int, x: Double) { rep.setDouble(i, x) } |
198 def update(i: Int, x: Option[Long]) |
199 def set_double(i: Int, x: Option[Double]) |
199 { |
200 { |
200 if (x.isDefined) update(i, x.get) |
201 if (x.isDefined) set_double(i, x.get) |
201 else rep.setNull(i, java.sql.Types.BIGINT) |
202 else rep.setNull(i, java.sql.Types.DOUBLE) |
202 } |
203 } |
203 } |
204 |
204 object double |
205 def set_string(i: Int, x: String) { rep.setString(i, x) } |
205 { |
206 def set_string(i: Int, x: Option[String]): Unit = set_string(i, x.orNull) |
206 def update(i: Int, x: Double) { rep.setDouble(i, x) } |
207 |
207 def update(i: Int, x: Option[Double]) |
208 def set_bytes(i: Int, bytes: Bytes) |
208 { |
209 { |
209 if (x.isDefined) update(i, x.get) |
210 if (bytes == null) rep.setBytes(i, null) |
210 else rep.setNull(i, java.sql.Types.DOUBLE) |
211 else rep.setBinaryStream(i, bytes.stream(), bytes.length) |
211 } |
212 } |
212 } |
213 def set_bytes(i: Int, bytes: Option[Bytes]): Unit = set_bytes(i, bytes.orNull) |
213 object string |
214 |
214 { |
215 def set_date(i: Int, date: Date): Unit = db.set_date(stmt, i, date) |
215 def update(i: Int, x: String) { rep.setString(i, x) } |
216 def set_date(i: Int, date: Option[Date]): Unit = set_date(i, date.orNull) |
216 def update(i: Int, x: Option[String]): Unit = update(i, x.orNull) |
217 |
217 } |
|
218 object bytes |
|
219 { |
|
220 def update(i: Int, bytes: Bytes) |
|
221 { |
|
222 if (bytes == null) rep.setBytes(i, null) |
|
223 else rep.setBinaryStream(i, bytes.stream(), bytes.length) |
|
224 } |
|
225 def update(i: Int, bytes: Option[Bytes]): Unit = update(i, bytes.orNull) |
|
226 } |
|
227 object date |
|
228 { |
|
229 def update(i: Int, date: Date): Unit = db.update_date(stmt, i, date) |
|
230 def update(i: Int, date: Option[Date]): Unit = update(i, date.orNull) |
|
231 } |
218 |
232 |
219 def execute(): Boolean = rep.execute() |
233 def execute(): Boolean = rep.execute() |
220 def execute_query(): Result = new Result(this, rep.executeQuery()) |
234 def execute_query(): Result = new Result(this, rep.executeQuery()) |
221 |
235 |
222 def close(): Unit = rep.close |
236 def close(): Unit = rep.close |
374 { |
388 { |
375 override def toString: String = name |
389 override def toString: String = name |
376 |
390 |
377 def sql_type(T: SQL.Type.Value): SQL.Source = SQL.sql_type_sqlite(T) |
391 def sql_type(T: SQL.Type.Value): SQL.Source = SQL.sql_type_sqlite(T) |
378 |
392 |
379 def set_date(stmt: SQL.Statement, i: Int, date: Date): Unit = |
393 def update_date(stmt: SQL.Statement, i: Int, date: Date): Unit = |
380 if (date == null) stmt.set_string(i, null: String) |
394 if (date == null) stmt.string(i) = (null: String) |
381 else stmt.set_string(i, date_format(date)) |
395 else stmt.string(i) = date_format(date) |
382 |
396 |
383 def date(res: SQL.Result, column: SQL.Column): Date = |
397 def date(res: SQL.Result, column: SQL.Column): Date = |
384 date_format.parse(res.string(column)) |
398 date_format.parse(res.string(column)) |
385 |
399 |
386 def insert_permissive(table: SQL.Table, sql: SQL.Source = ""): SQL.Source = |
400 def insert_permissive(table: SQL.Table, sql: SQL.Source = ""): SQL.Source = |
447 override def toString: String = name |
461 override def toString: String = name |
448 |
462 |
449 def sql_type(T: SQL.Type.Value): SQL.Source = SQL.sql_type_postgresql(T) |
463 def sql_type(T: SQL.Type.Value): SQL.Source = SQL.sql_type_postgresql(T) |
450 |
464 |
451 // see https://jdbc.postgresql.org/documentation/head/8-date-time.html |
465 // see https://jdbc.postgresql.org/documentation/head/8-date-time.html |
452 def set_date(stmt: SQL.Statement, i: Int, date: Date): Unit = |
466 def update_date(stmt: SQL.Statement, i: Int, date: Date): Unit = |
453 if (date == null) stmt.rep.setObject(i, null) |
467 if (date == null) stmt.rep.setObject(i, null) |
454 else stmt.rep.setObject(i, OffsetDateTime.from(date.to_utc.rep)) |
468 else stmt.rep.setObject(i, OffsetDateTime.from(date.to_utc.rep)) |
455 |
469 |
456 def date(res: SQL.Result, column: SQL.Column): Date = |
470 def date(res: SQL.Result, column: SQL.Column): Date = |
457 { |
471 { |