Skip to content

sivajag/mql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Inspired by http://github.com/MrHus/rql

What is mql

mql is clojure library to query map data structures

Usage

Given a map

(def m {:cid { :visits { :id-1 { :last-ts "1284166000040" :first-ts "1274166000000" :duration "40"} :id-2 { :last-ts "1274166000040" :first-ts "1274166000000" :duration "40"} :id-3 { :last-ts "1264166000040" :first-ts "1274166000000" :duration "40"}}

   :promo{
          :id-1 {:promo "p2"}
          :id-2 {:promo "p1"}}
   
   :purchase {
              :id-1
              {:order-id "order-id-1"
               :total-dollars "970.00"
               :purchase? "true",
               :merchant-total-dollars "1000.00"}
              :id-3
              {:order-id "order-id-2"
               :total-dollars "1000.00"
               :purchase? ""
               :merchant-total-dollars "1000.00"}}}})

Select: simple select

       (select [:cid :promo] m)  

will return

       {:id-1 {:promo "p2"} :id-2 {:promo "p1"}} 

Select: with filtering

      (select [:cid :purchase] (where [* :total-dollars] :gt 980) m) 

will return

      {:id-1
          {:order-id "order-id-1"
           :total-dollars "970.00"
           :purchase? "true",
           :merchant-total-dollars "1000.00"}}

You can use :gt, :lt, :ge, :le and :eq as logical operator in where clause. In where clause for key-seq you can use * if a key is dynamic. The last key in where clause key-seq should not be *.

Limitations:

  • There could be only one * in Where Clause
  • Select clause cannot have * now

License

Copyright (C) 2010 Siva Jagadeesan

Distributed under the Eclipse Public License, the same as Clojure.

About

Clojure library for querying map data structures

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published