Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions column.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,9 @@ type Column interface {

// In creates Condition for "column IN (values[0], values[1] ...)". Type for values is column's one or other Column.
In(values ...interface{}) Condition

// IntersectJSON creates Condition for "column @> value". The value is a JSON string.
IntersectJSON(data string) Condition
}

type aliasedColumn interface {
Expand Down Expand Up @@ -319,6 +322,10 @@ func (left *columnImpl) In(val ...interface{}) Condition {
return newInCondition(left, val...)
}

func (left *columnImpl) IntersectJSON(data string) Condition {
return newIntersectJSONCondition(left, data)
}

func (b ColumnList) serialize(bldr *builder) {
first := true
for _, column := range b {
Expand Down Expand Up @@ -403,6 +410,10 @@ func (left *errorColumn) In(val ...interface{}) Condition {
return newInCondition(left, val...)
}

func (left *errorColumn) IntersectJSON(data string) Condition {
return newIntersectJSONCondition(left, data)
}

type aliasColumn struct {
column Column
alias string
Expand Down Expand Up @@ -475,3 +486,7 @@ func (left *aliasColumn) Between(lower, higher interface{}) Condition {
func (left *aliasColumn) In(val ...interface{}) Condition {
return newInCondition(left, val...)
}

func (left *aliasColumn) IntersectJSON(data string) Condition {
return newIntersectJSONCondition(left, data)
}
22 changes: 22 additions & 0 deletions condition.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,3 +207,25 @@ func (c *inCondition) columns() []Column {
}
return list
}

type intersectJSONCondition struct {
left Column
data serializable
}

func newIntersectJSONCondition(left Column, data string) Condition {
return &intersectJSONCondition{
left: left,
data: toLiteral(data),
}
}

func (c *intersectJSONCondition) serialize(bldr *builder) {
bldr.AppendItem(c.left)
bldr.Append(" @> ")
bldr.AppendItem(c.data)
}

func (c *intersectJSONCondition) columns() []Column {
return []Column{c.left}
}
4 changes: 4 additions & 0 deletions sqlfunc.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,10 @@ func (left *sqlFuncImpl) In(vals ...interface{}) Condition {
return newInCondition(left, vals...)
}

func (left *sqlFuncImpl) IntersectJSON(data string) Condition {
return newIntersectJSONCondition(left, data)
}

func (m *sqlFuncImpl) columns() []Column {
return m.args
}