-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
blocking select
#31
Comments
On Tue, Jul 24, 2018 at 01:39:28AM -0700, Vincent Bernardoff wrote:
It seems to me that selecting an empty table blocks, it is possible to have an option type returned in case the table is empty or something?
Haven't looked at it enough maybe but I can't find an easy solution to avoid (lwt-)blocking on an empty table.
Do you have a minimal test case for this? I haven't been able to reproduce it
with
Sqlexpr_sqlite.Make(Sqlexpr_concurrency.Id),
Sqlexpr_sqlite.Make(Sqlexpr_concurrency.Lwt), nor
Sqlexpr_sqlite_lwt
with the following code, adapted from the example:
(* ocamlfind ocamlopt -package sqlexpr,sqlexpr.ppx,lwt.ppx -o example example.ml -thread -linkpkg *)
module Sqlexpr = Sqlexpr_sqlite.Make(Sqlexpr_concurrency.Lwt)
module S = Sqlexpr
let init_db db =
S.execute db
[%sqlinit "CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY,
login TEXT UNIQUE,
password TEXT NON NULL,
name TEXT,
email TEXT
);"]
let fold_users db f acc =
S.fold db f acc [%sqlc "SELECT @s{login}, @s{password}, @s?{email} FROM users"]
let insert_user db ~login ~password ?name ?email () =
S.insert db
[%sqlc"INSERT INTO users(login, password, name, email)
VALUES(%s, %s, %s?, %s?)"]
login password name email
let () =
Lwt_main.run @@
let db = S.open_db "example.db" in
let%lwt () = init_db db in
let%lwt l1 = fold_users db (fun l (login, _, _) -> Lwt.return @@ login :: l) [] in
let%lwt l2 = S.select db [%sqlc "SELECT @s{login} FROM users"] in
Printf.printf "%d users\n%!" @@ List.length l1;
assert (l1 = []);
assert (l2 = []);
Lwt.return_unit
let auto_init_db, check_db, auto_check_db = [%sqlcheck "sqlite"]
getting:
$ ./example
0 users
$
…--
Mauricio Fernández
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It seems to me that selecting an empty table blocks, it is possible to have an option type returned in case the table is empty or something?
Haven't looked at it enough maybe but I can't find an easy solution to avoid (lwt-)blocking on an empty table.
The text was updated successfully, but these errors were encountered: