(* Define record types for the query outputs *) type post_summary = { id: int; title: string; content: string; date: string; } type post = { id: int; title: string; content: string; date: string; tags: string; url: string; } type comment = { id: int; content: string; date: string; tags: string; url: string; } module Query = struct let poasts = [%rapper get_many {sql| SELECT @int{id}, @string{title}, @string{content}, @string{date} FROM Posts ORDER BY id DESC LIMIT 100 |sql} record_out] ;; let poast = [%rapper get_opt {sql| SELECT @int{id}, @string{title}, @string{content}, @string{date}, @string{tags}, @string{url} FROM Posts WHERE id = %int{post_id} |sql} record_out] ;; let comment = [%rapper get_opt {sql| SELECT @int{id}, @string{content}, @string{date}, @string{tags}, @string{url} FROM Comments WHERE id = %int{id} |sql} record_out] ;; let user_comments = [%rapper get_opt {sql| SELECT @int{id}, @string{content}, @string{date}, @string{tags}, @string{url} FROM Comments WHERE author = %string{username} |sql} record_out] ;; let post_comments = [%rapper get_opt {sql| SELECT @int{id}, @string{content}, @string{date}, @string{tags}, @string{url} FROM Comments WHERE post_id = %int{post_id} |sql} record_out] ;; let comment_children = [%rapper get_opt {sql| SELECT @int{id}, @string{content}, @string{date}, @string{tags}, @string{url} FROM Comments WHERE parent= %int{post_id} |sql} record_out] ;; end let get_poasts conn = Query.poasts conn let get_poast post_id conn = Query.poast ~post_id conn (* db.exec("PRAGMA journal_mode = WAL"); *) (* db.exec("PRAGMA foreign_keys = ON"); *) (* db.exec("PRAGMA cache_size = -8000"); // 8MB cache *) (* db.exec("PRAGMA temp_store = MEMORY"); *) (* db.exec("PRAGMA synchronous = NORMAL"); *) (* db.exec("PRAGMA mmap_size = 30000000000"); // 30GB memory map *)