egison-3.2.10: lib/core/database.egi
;;;
;;; Database.egi
;;;
(define $database-table
(algebraic-data-matcher
{<database-table string string>}))
(define $database-name
(lambda [$data]
(match data database-table
{[<database-table $n _> n]})))
(define $table-name
(lambda [$data]
(match data database-table
{[<database-table _ $n> n]})))
;;
;; Generate SQL
;;
(define $simple-select
(lambda [$whats $table-name $wheres]
{@"select " @(concat (insert-between whats ", ")) @" from " @table-name @" " @(simple-where wheres)}))
(define $simple-where
(lambda [$wheres]
(letrec {[$loop-fn (lambda [$wheres]
(match wheres (list [string something])
{[<nil> ""]
[<cons [$key $val] $rs>
{{@key @" = " @val} @(loop-fn rs)}]}))]}
(match (loop-fn wheres) (list string)
{[<nil> ""]
[<cons $wc $wcs> {@"where " @(concat (insert-between {wc @wcs} " and "))}]}))))