Skip to content

Commit

Permalink
Expose more current query
Browse files Browse the repository at this point in the history
- Fix README.md typo
- Refactor code naming
  • Loading branch information
benjamin658 committed Nov 7, 2018
1 parent 75a0cb3 commit 0a5011a
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 45 deletions.
23 changes: 19 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ query := builder.
From("measurement").
Where("time", ">", "2018-11-01T06:33:57.503Z").
OrBrackets(
// Passing the new builder as the param
// Passing a new builder as the param
New().
Where("time", "<", "2018-11-02T09:35:25Z").
Or("tag", "=", "t"),
Expand Down Expand Up @@ -208,9 +208,24 @@ query := builder.
Asc().
GetQueryStruct()
// query.limit == 100
// query.offset == 100
// query.order == "ASC"
/*
type CurrentQuery struct {
Measurement string
Where Tag
And []Tag
Or []Tag
WhereBrackets QueryBuilder
AndBrackets []QueryBuilder
OrBrackets []QueryBuilder
Fields []string
GroupBy string
Limit uint
Offset uint
Order string
IsLimitSet bool
IsOffsetSet bool
}
*/
```
## License
Expand Down
94 changes: 53 additions & 41 deletions query_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,33 +37,39 @@ type Tag struct {

// Query Query struct
type Query struct {
measurement string
fields []string
where Tag
and []Tag
or []Tag
groupWhere QueryBuilder
groupAnd []QueryBuilder
groupOr []QueryBuilder
groupBy string
order string
limit uint
_limit bool
offset uint
_offset bool
fill interface{}
measurement string
fields []string
where Tag
and []Tag
or []Tag
whereBrackets QueryBuilder
andBrackets []QueryBuilder
orBrackets []QueryBuilder
groupBy string
order string
limit uint
_limit bool
offset uint
_offset bool
fill interface{}
}

// CurrentQuery Get current query
type CurrentQuery struct {
Measurement string
Fields []string
GroupBy string
Limit uint
Offset uint
Order string
IsLimitSet bool
IsOffsetSet bool
Measurement string
Where Tag
And []Tag
Or []Tag
WhereBrackets QueryBuilder
AndBrackets []QueryBuilder
OrBrackets []QueryBuilder
Fields []string
GroupBy string
Limit uint
Offset uint
Order string
IsLimitSet bool
IsOffsetSet bool
}

// New New QueryBuilder
Expand Down Expand Up @@ -108,19 +114,19 @@ func (q *Query) Or(key string, op string, value interface{}) QueryBuilder {

// WhereBrackets WHERE (...)
func (q *Query) WhereBrackets(builder QueryBuilder) QueryBuilder {
q.groupWhere = builder
q.whereBrackets = builder
return q
}

// AndBrackets AND (...)
func (q *Query) AndBrackets(builder QueryBuilder) QueryBuilder {
q.groupAnd = append(q.groupAnd, builder)
q.andBrackets = append(q.andBrackets, builder)
return q
}

// OrBrackets OR (...)
func (q *Query) OrBrackets(builder QueryBuilder) QueryBuilder {
q.groupOr = append(q.groupOr, builder)
q.orBrackets = append(q.orBrackets, builder)
return q
}

Expand Down Expand Up @@ -165,14 +171,20 @@ func (q *Query) Asc() QueryBuilder {
// GetQueryStruct Get query struct
func (q *Query) GetQueryStruct() CurrentQuery {
return CurrentQuery{
Measurement: q.measurement,
Fields: q.fields,
GroupBy: q.groupBy,
Limit: q.limit,
Offset: q.offset,
Order: q.order,
IsLimitSet: q._limit,
IsOffsetSet: q._offset,
Measurement: q.measurement,
Where: q.where,
And: q.and,
Or: q.or,
WhereBrackets: q.whereBrackets,
AndBrackets: q.andBrackets,
OrBrackets: q.orBrackets,
Fields: q.fields,
GroupBy: q.groupBy,
Limit: q.limit,
Offset: q.offset,
Order: q.order,
IsLimitSet: q._limit,
IsOffsetSet: q._offset,
}
}

Expand Down Expand Up @@ -227,15 +239,15 @@ func (q *Query) buildWhere() string {
andCriteria := make([]string, 0)
orCriteria := make([]string, 0)

if q.where != (Tag{}) || q.groupWhere != nil {
if q.where != (Tag{}) || q.whereBrackets != nil {
if q.where != (Tag{}) {
buffer.WriteString("WHERE ")
whereCriteria = getCriteriaTemplate(q.where)
buffer.WriteString(whereCriteria)
buffer.WriteString(" ")
} else if q.groupWhere != nil {
} else if q.whereBrackets != nil {
buffer.WriteString("WHERE (")
buffer.WriteString(strings.Replace(q.groupWhere.Build(), "WHERE ", "", 1))
buffer.WriteString(strings.Replace(q.whereBrackets.Build(), "WHERE ", "", 1))
buffer.WriteString(") ")
}

Expand Down Expand Up @@ -263,16 +275,16 @@ func (q *Query) buildWhere() string {
buffer.WriteString(" ")
}

if q.groupAnd != nil {
for _, g := range q.groupAnd {
if q.andBrackets != nil {
for _, g := range q.andBrackets {
buffer.WriteString("AND (")
buffer.WriteString(strings.Replace(g.Build(), "WHERE ", "", 1))
buffer.WriteString(") ")
}
}

if q.groupOr != nil {
for _, g := range q.groupOr {
if q.orBrackets != nil {
for _, g := range q.orBrackets {
buffer.WriteString("OR (")
buffer.WriteString(strings.Replace(g.Build(), "WHERE ", "", 1))
buffer.WriteString(") ")
Expand Down

0 comments on commit 0a5011a

Please sign in to comment.