module suggestion added by rien on Fri Nov 22 21:07:24 2013


(use srfi-1)   ; partition
(use srfi-13)  ; string-join string-prefix?
(use (prefix regex regex:))    ; string-split-fields
(import (prefix sql-de-lite sql:))



;;;; ----------------------------------------

; (set! *db* (open-database "/Users/user1/Documents/scheme/my.db"))

(module global (export open-db)
  (import scheme chicken)
  (use (prefix sql-de-lite sql:))
  (define (open-db)
    (sql:open-database "/Users/user1/Documents/scheme/my.db")))

(import global)
(set! *db* (open-db))

(module queries (export new-note-with-title new-note-fti)
  (import scheme)

  ;;; FTI = full text index

  (define new-note-with-title
    ;; INPUTS: title
    "INSERT INTO notes(title) VALUES (?);")

  (define new-note-fti
    ;; INPUTS: note-id, title
    "INSERT INTO fulltext(docid,title) VALUES (?,?);")

)

(module tagnotes ()
  (import scheme chicken)
  (use srfi-1 srfi-13 (prefix sql-de-lite sql:) (prefix regex regex:) (prefix queries query:) global)

  ;; make-title "title" -> "title"
  ;; make-title ""      -> "untitled"
  (define (make-title title) (if (string=? title "") "untitled" title))

  (define (last-id) (sql:last-insert-rowid *db*))

  (define (insert insert-query . args)
    (let ((stmt (sql:sql *db* insert-query)))
      (apply sql:exec (cons stmt args))))

  (define (new-note title)
    (insert query:new-note-with-title title)
    (insert query:new-note-fti (last-id) title))

  (define (match-words s)
    (regex:split-string-fields "[a-z]+" s))

  (define (commafy-tokens tokens)
    (string-join (string-split tokens " ") ","))

  #;(define (search token-string)
    (let ((comma-tokens (commafy-tokens token-string)))
      ))
)