quick-find-internal.ss
#lang scheme/base

(require scheme/contract
         "era/era.ss"
         (prefix-in sql: (only-in "sql/sql-lang.ss"
                                  attr or in null? =))
         (prefix-in sql: (only-in "sql/sql-struct.ss"
                                  expression?
                                  attribute-alias?
                                  attribute-alias-attribute)))

; Procedures -------------------------------------

; attribute any -> sql-expr
(define (quick-find-expression alias value)
  (cond [(void? value)      #t]
        [(list? value)      (sql:in alias value)]
        [(procedure? value) (value alias)]
        [(not value)        (if (boolean-type? (attribute-type (sql:attribute-alias-attribute alias)))
                                (sql:or (sql:null? alias)
                                        (sql:= alias #f))
                                (sql:null? alias))]
        [else               (sql:= alias value)]))

; Provide statements -----------------------------

(provide/contract
 [quick-find-expression (-> sql:attribute-alias? any/c sql:expression?)])