func KeyFromWhere(wh interface{}) schema.Key {
	switch n := wh.(type) {
	case *rel.SqlWhere:
		return KeyFromWhere(n.Expr)
	case *expr.BinaryNode:
		if len(n.Args) != 2 {
			u.Warnf("need more args? %#v", n.Args)
			return nil
		}
		in, ok := n.Args[0].(*expr.IdentityNode)
		if !ok {
			u.Warnf("not identity? %T", n.Args[0])
			return nil
		}
		// This only allows for    identity = value
		// NOT:      identity = expr(identity, arg)
		//
		switch valT := n.Args[1].(type) {
		case *expr.NumberNode:
			return NewKeyCol(in.Text, valT.Float64)
		case *expr.StringNode:
			return NewKeyCol(in.Text, valT.Text)
		//case *expr.FuncNode:
		default:
			u.Warnf("not supported arg? %#v", valT)
		}
	default:
		u.Warnf("not supported node type? %#v", n)
	}
	return nil
}
// Given a Where expression, lets try to create a key which
//  requires form    `idenity = "value"`
//
Given a Where expression, lets try to create a key which
requires form    `idenity = "value"`
// Given a Where expression lets try to create a key which // requires form ` idenity = " value " ` //
func KeyFromWhere(wh interface{}) schema.Key {
	switch n := wh.(type) {
	case *rel.SqlWhere:
		return KeyFromWhere(n.Expr)
	case *expr.BinaryNode:
		if len(n.Args) != 2 {
			u.Warnf("need more args? %#v", n.Args)
			return nil
		}
		in, ok := n.Args[0].(*expr.IdentityNode)
		if !ok {
			u.Warnf("not identity? %T", n.Args[0])
			return nil
		}
		switch valT := n.Args[1].(type) {
		case *expr.NumberNode:
			return NewKeyCol(in.Text, valT.Float64)
		case *expr.StringNode:
			return NewKeyCol(in.Text, valT.Text)
		case *expr.FuncNode:
		default:
			u.Warnf("not supported arg? %#v", valT)
		}
	default:
		u.Warnf("not supported node type? %#v", n)
	}
	return nil
}
func KeyFromWhere ( wh interface { } ) schema . Key { switch n := wh . ( type ) { case * rel . SqlWhere : return KeyFromWhere ( n . Expr ) case * expr . BinaryNode : if len ( n . Args ) != 2 { u . Warnf ( " " , n . Args ) return nil } in , ok := n . Args [ 0 ] . ( * expr . IdentityNode ) if ! ok { u . Warnf ( " " , n . Args [ 0 ] ) return nil } switch valT := n . Args [ 1 ] . ( type ) { case * expr . NumberNode : return NewKeyCol ( in . Text , valT . Float64 ) case * expr . StringNode : return NewKeyCol ( in . Text , valT . Text ) default : u . Warnf ( " " , valT ) } default : u . Warnf ( " " , n ) } return nil }
Given a Where expression, lets try to create a key which
requires form    `idenity = "value"`
Given a Where expression lets try to create a key which requires form ` idenity = " value " `
// This only allows for    identity = value // NOT:      identity = expr(identity, arg) // //case *expr.FuncNode: