Skip to content

Instantly share code, notes, and snippets.

@justinbmeyer
Last active March 8, 2018 17:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save justinbmeyer/f3019547c8bb8d492502b908303a8aba to your computer and use it in GitHub Desktop.
Save justinbmeyer/f3019547c8bb8d492502b908303a8aba to your computer and use it in GitHub Desktop.
can-query progress

Basics

queryA = new BasicQuery({
    filter: new BasicQuery.And({name: "Justin", age: 35}),
    page: new BasicQuery.PageRange(0, Infinity)
    sort: "name asc"
})

queryB = new BasicQuery({
    filter: new And({name: "Justin"}),
    page: new BasicQuery.PageRange(0, Infinity)
    sort: "name asc"
})

set.isSubset(queryA, queryB) //-> true

Current problems:

  • You have to build this yourself.
  • It assumes OR

Enum

var makeEnum = require("can-query/types/make-enum");
Colors = makeEnum(["red","green", "blue"])

var redGreen = new Colors(["red","green"]);
var blue = new Colors(["blue");

set.union(redGreen, blue) //-> set.UNIVERSAL 
// THIS SHOULD ACTUALLY BE:
set.union(redGreen, blue) //-> new Colors(["red", "green", "blue"])
// OTHERWISE; we can't really do `memberOf`?

Once you have Colors:

queryA = new BasicQuery({
    filter: new BasicQuery.And({
      name: "Justin",
      colors: new Colors(["red"])
    })
})

queryB = new BasicQuery({
    filter: new BasicQuery.And({
      name: "Justin",
      colors: new Colors(["blue"])
    })
})

set.union(queryA, queryB) //-> 
//new BasicQuery({
//    filter: new BasicQuery.And({
//      name: "Justin",
//      colors: new Colors(["red","blue"])
//    })
//})

Not

queryA = set.UNIVERSAL

queryB = new BasicQuery({
    filter: new BasicQuery.And({
      name: "Justin",
    })
})

set.difference(queryA, queryB) //->
// new BasicQuery({
//    filter: new BasicQuery.And({
//      name: new BasicQuery.Not("Justin"),
//    })
// })

Basic Query

  • created mostly as experiement
  • How do we feed in types, and what transformations are allowed?
  • Where does index and such go?
var query = new Query({
    logic: {
        And: And,
        Or: Or,
        Not: Not
    },
    schema: {
        colors: Colors
    }
});
@justinbmeyer
Copy link
Author


Number 
String 

{
    filter: {
        name: "Justin",
        status: "red"
    }
}

Colors = makeEnum(["red","green", "blue"])


Todo = DefineMap.extend({
    id: {identity: true},
    
    status: {Type: Color},
    complete: {Type: Boolean}
})

var algebra = new Query(Todo, function(){}, function(){})

var p1 = {
    filter: {
        name: "Justin",
        status: "red"
    }
};
p2 = {
    filter: {
        name: "Justin",
        status: "green"
    }
};


{
    name: {$eq: "justin"},
    name: "justin"
    name: {EQUAL: "justin"}
}

NOT()

defineComarison( Primitive, Primitive, {

})

algebra.union(p1, p2) = function(){

    query1 = new BasicQuery({
        filter: new BasicQuery.And({name: "Justin", color: new Color()}),
        page: new BasicQuery.PageRange(0, Infinity)
        sort: "name asc"
    })
    query2 = new BasicQuery({
        filter: new BasicQuery.And({name: "Justin", age: 35}),
        page: new BasicQuery.PageRange(0, Infinity)
        sort: "name asc"
    })

    return set.union(query1, query2)
}




new Color(["red","green"]) //-> SET OF COLOR 

"red" -> memberOf()



Color.memberOf("red") //-> 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment