Skip to content

howcrazy/filterxorm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FilterXorm

zh-CN

FilterXorm is a tool for xorm to build filter conditions.

Like this (col1 = v1 AND (col2 >= v2 OR col2 < v3) AND (col3 = v4 OR col3 = v5)):

filterxorm.And(
    col1.Eq(v1),
    filterxorm.Or(
        col2.Gte(v2),
        col2.Lt(v3),
    )
    filterxorm.Or(
        col3.Eq(v4),
        col3.Eq(v5),
    )
)

Of course flow style is supported ((col1 = v1 AND col2 = v2) AND col3 = v3):

col1.Eq(v1).And(col2.Eq(v2)).And(col3.Eq(v3))

Or (col1 = v1 AND col2 = v2 AND col3 = v3):

col1.Eq(v1).And(col2.Eq(v2), col3.Eq(v3))

Or in different columns col1 = col2:

col1.Eq(col2)

Default function

  • col.Eq(v): col = v
  • col.Ne(v): col <> v
  • col.Gt(v): col > v
  • col.Gte(v): col >= v
  • col.Lt(v): col < v
  • col.Lte(v): col <= v
  • col.In(ve): col in (v)
  • col.Between(v1, v2) or col.Between([]T{v1, v2}): col >= v1 AND col <= v2
  • col.Outside(v1, v2) or col.Outside([]T{v1, v2}): col < v1 AND col > v2
  • string only: col.Like(s): col LIKE s
  • string only: col.Startswith(s): col LIKE s%
  • string only: col.Endswith(s): col LIKE %s
  • string only: col.Contains(s): col LIKE %s%

Usage

Model is:

type Sample struct{
    Id   int    `xorm:"pk autoincr"`
    Name string `xorm:"user_name VARCHAR(128)"`
}

First, Get column Field

tSample := filterxorm.NewTable(new(Sample))
fId := tSample.GetField("Id")
fName := tSample.GetField("Name")

Or get a table struct:

type TSample struct{
    *filterxorm.Table
}

func NewSampleTable() *TSample {
    return &TSample{Table: filterxorm.NewTable(new(Sample))}
}
func (tb *TSample) Id() *filterxorm.Field   { return tb.Field() }
func (tb *TSample) Name() *filterxorm.Field { return tb.Field() }

tSample := NewSampleTable()
fId := tSample.Id()
fName := tSample.Name()

Then, build the condition:

condi := filterxorm.Or(
    fId.Between(1, 10),
    fName.Eq("tom"),
).Build(engine)

Don't forget Build(*xorm.Engine)

After above step, we get ready to filter:

sess := engine.NewSession()
defer sess.Close()

items := make([]Sample, 0)
err := sess.Where(condi.CondiStr(), condi.Values()...).
    Find(&items)

Or:

sess := engine.NewSession()
defer sess.Close()

err := condi.Where(sess).Find(&items)

Or use new auto session (the session will close auto after query end):

var err error
condi.Do(func(sess *xorm.Session) {
    err = sess.Find(&items)
})

About

Build conditions for xorm's "Where" method

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages