diff --git a/pagequery.go b/pagequery.go index 0665fd4..7759a6d 100644 --- a/pagequery.go +++ b/pagequery.go @@ -1,10 +1,8 @@ package f5 -/* import ( "fmt" ) -*/ type LinkOp int32 @@ -130,3 +128,93 @@ func (this *PageQueryOne) IgnoreEmpy() *PageQueryOne { this.ignoreEmpty = true return this } + + +func (this *PageQueryOne) And() PageQueryFilter { + this.linkOp = LK_AND + return this +} + +func (this *PageQueryOne) Or() PageQueryFilter { + this.linkOp = LK_OR + return this +} + +func (this *PageQueryOne) Not() PageQueryFilter { + this.not = true + return this +} + +func (this *PageQueryOne) GenSql() string { + if this.ignoreEmpty && this.val == "" { + return " " + } + sql := "" + switch this.cond { + case QC_LIKE: + sql = fmt.Sprintf("%s LIKE '%%%s%%'", this.fieldName, this.val) + case QC_EQ: + sql = fmt.Sprintf("%s = '%s'", this.fieldName, this.val) + case QC_LT: + sql = fmt.Sprintf("%s < '%s'", this.fieldName, this.val) + case QC_LE: + sql = fmt.Sprintf("%s <= '%s'", this.fieldName, this.val) + case QC_GT: + sql = fmt.Sprintf("%s > '%s'", this.fieldName, this.val) + case QC_GE: + sql = fmt.Sprintf("%s >= '%s'", this.fieldName, this.val) + case QC_CUSTOM: + sql = fmt.Sprintf("%s", this.val) + default: + panic("page query cond error") + } + if this.not { + sql = fmt.Sprintf( "NOT (%s) ", sql) + } + switch this.linkOp { + case LK_AND: + sql = fmt.Sprintf( "AND (%s) ", sql) + case LK_OR: + sql = fmt.Sprintf(" OR (%s) ", sql) + default: + panic("page query linkOp error") + } + return sql +} + +func (this *PageQueryComp) And() PageQueryFilter { + this.linkOp = LK_AND + return this +} + +func (this *PageQueryComp) Or() PageQueryFilter { + this.linkOp = LK_OR + return this +} + +func (this *PageQueryComp) Not() PageQueryFilter { + this.not = true + return this +} + +func (this *PageQueryComp) GenSql() string { + if len(this.subFilters) <= 0 { + return " " + } + sql := "" + for _, filter := range this.subFilters { + sql += filter.GenSql() + } + if this.not { + sql = fmt.Sprintf( "NOT (%s) ", sql) + } + switch this.linkOp { + case LK_AND: + sql = fmt.Sprintf( "AND (%s) ", sql) + case LK_OR: + sql = fmt.Sprintf(" OR (%s) ", sql) + default: + panic("page query linkOp error") + } + return sql +}