Sql real

use "debug"

class SQLReal is SQLType
  """
  The internal class which represents a Float (F64)
  """
  var _v: CBoxedArray = CBoxedArray
  var _err: SQLReturn val = SQLSuccess

  new create() => _v.alloc(30)

  fun \nodoc\ ref get_boxed_array(): CBoxedArray => _v
  fun \nodoc\ ref set_boxed_array(v': CBoxedArray) => _v = v'

  fun \nodoc\ ref get_err(): SQLReturn val => _err
  fun \nodoc\ ref set_err(err': SQLReturn val) => _err = err'

  fun ref write(f64: F64): Bool =>
    """
    Write an F64 to this buffer as a string. The string will fit
    as we defined the buffer to be characters on initialization.

    Will return true if written and verification succeeds.

    Will return false if the string is too long for the buffer or
    the readback doesn't match for some other reason.
    """
    _write(f64.string())

  fun ref read(): F64 ? =>
    """
    Read the value of the buffer and convert it into an F64.

    This function is partial just in case the string version
    that comes from the database is not within the F64 range.

    NOTE: SQLite does not enforce type limits, so if you use
    that specific ODBC driver, this is something that must be
    verified.
    """
    if (get_boxed_array().is_null()) then
      error
    else
      _v.string().f64()?
    end