Skip to content
/ mql Public
forked from sivajag/mql

Clojure library for querying map data structures

Notifications You must be signed in to change notification settings

rberger/mql

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 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