/mql

Clojure library for querying map data structures

Primary LanguageClojure

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.