diff --git a/qb/token.go b/qb/token.go index fc68f53..68e0b9d 100644 --- a/qb/token.go +++ b/qb/token.go @@ -22,51 +22,101 @@ func (t TokenBuilder) Eq() Cmp { return t.cmp(eq, nil) } +// EqValue produces token(column)=? +func (t TokenBuilder) EqValue() Cmp { + return t.valueCmp(eq, "") +} + // EqNamed produces token(column)=token(?) with a custom parameter name. func (t TokenBuilder) EqNamed(names ...string) Cmp { return t.cmp(eq, names) } +// EqValueNamed produces token(column)=? with a custom parameter name. +func (t TokenBuilder) EqValueNamed(name string) Cmp { + return t.valueCmp(eq, name) +} + // Lt produces token(column)token(?). func (t TokenBuilder) Gt() Cmp { return t.cmp(gt, nil) } +// GtValue produces token(column)>?. +func (t TokenBuilder) GtValue() Cmp { + return t.valueCmp(gt, "") +} + // GtNamed produces token(column)>token(?) with a custom parameter name. func (t TokenBuilder) GtNamed(names ...string) Cmp { return t.cmp(gt, names) } +// GtValueNamed produces token(column)>? with a custom parameter name. +func (t TokenBuilder) GtValueNamed(name string) Cmp { + return t.valueCmp(gt, name) +} + // GtOrEq produces token(column)>=token(?). func (t TokenBuilder) GtOrEq() Cmp { return t.cmp(geq, nil) } +// GtOrEqValue produces token(column)>=?. +func (t TokenBuilder) GtOrEqValue() Cmp { + return t.valueCmp(geq, "") +} + // GtOrEqNamed produces token(column)>=token(?) with a custom parameter name. func (t TokenBuilder) GtOrEqNamed(names ...string) Cmp { return t.cmp(geq, names) } +// GtOrEqValueNamed produces token(column)>=? with a custom parameter name. +func (t TokenBuilder) GtOrEqValueNamed(name string) Cmp { + return t.valueCmp(geq, name) +} + func (t TokenBuilder) cmp(op op, names []string) Cmp { s := names if s == nil { @@ -78,3 +128,14 @@ func (t TokenBuilder) cmp(op op, names []string) Cmp { value: Fn("token", s...), } } + +func (t TokenBuilder) valueCmp(op op, name string) Cmp { + if name == "" { + name = "token" + } + return Cmp{ + op: op, + column: fmt.Sprint("token(", strings.Join(t, ","), ")"), + value: param(name), + } +} diff --git a/qb/token_test.go b/qb/token_test.go index 03560af..4ac6c53 100644 --- a/qb/token_test.go +++ b/qb/token_test.go @@ -70,6 +70,56 @@ func TestToken(t *testing.T) { S: "token(a,b)>=token(?,?)", N: []string{"c", "d"}, }, + { + C: Token("a", "b").EqValue(), + S: "token(a,b)=?", + N: []string{"token"}, + }, + { + C: Token("a", "b").EqValueNamed("c"), + S: "token(a,b)=?", + N: []string{"c"}, + }, + { + C: Token("a", "b").LtValue(), + S: "token(a,b)?", + N: []string{"token"}, + }, + { + C: Token("a", "b").GtValueNamed("c"), + S: "token(a,b)>?", + N: []string{"c"}, + }, + { + C: Token("a", "b").GtOrEqValue(), + S: "token(a,b)>=?", + N: []string{"token"}, + }, + { + C: Token("a", "b").GtOrEqValueNamed("c"), + S: "token(a,b)>=?", + N: []string{"c"}, + }, } buf := bytes.Buffer{}