Add "orderrow" and "order" parameters to order result
This commit is contained in:
parent
e1603e19bf
commit
57aca37a5f
29
database.go
29
database.go
|
@ -83,6 +83,8 @@ type ViewsRequest struct {
|
||||||
url string
|
url string
|
||||||
ref string
|
ref string
|
||||||
ua string
|
ua string
|
||||||
|
orderrow string
|
||||||
|
order string
|
||||||
}
|
}
|
||||||
|
|
||||||
type RequestResultRow struct {
|
type RequestResultRow struct {
|
||||||
|
@ -91,14 +93,11 @@ type RequestResultRow struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *Database) request(request *ViewsRequest) (resultRows []*RequestResultRow, e error) {
|
func (db *Database) request(request *ViewsRequest) (resultRows []*RequestResultRow, e error) {
|
||||||
filterString, parameters := request.buildFilter()
|
statement, parameters := request.buildStatement()
|
||||||
// Fix to use array as varargs
|
|
||||||
namedArgs := make([]interface{}, len(parameters))
|
namedArgs := make([]interface{}, len(parameters))
|
||||||
for i, v := range parameters {
|
for i, v := range parameters {
|
||||||
namedArgs[i] = v
|
namedArgs[i] = v
|
||||||
}
|
}
|
||||||
// Query
|
|
||||||
statement := request.buildStatement(filterString)
|
|
||||||
rows, e := db.sqlDB.Query(statement, namedArgs...)
|
rows, e := db.sqlDB.Query(statement, namedArgs...)
|
||||||
if e != nil {
|
if e != nil {
|
||||||
return
|
return
|
||||||
|
@ -124,24 +123,34 @@ func (db *Database) request(request *ViewsRequest) (resultRows []*RequestResultR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (request *ViewsRequest) buildStatement(filters string) (statement string) {
|
func (request *ViewsRequest) buildStatement() (statement string, parameters []sql.NamedArg) {
|
||||||
|
filters, parameters := request.buildFilter()
|
||||||
if len(filters) > 0 {
|
if len(filters) > 0 {
|
||||||
filters = " where " + filters + " "
|
filters = " where " + filters + " "
|
||||||
} else {
|
} else {
|
||||||
filters = " "
|
filters = " "
|
||||||
}
|
}
|
||||||
|
orderrow := "first"
|
||||||
|
order := "ASC"
|
||||||
|
if strings.ToLower(request.orderrow) == "second" {
|
||||||
|
orderrow = "second"
|
||||||
|
}
|
||||||
|
if strings.ToUpper(request.order) == "DESC" {
|
||||||
|
order = "DESC"
|
||||||
|
}
|
||||||
|
orderstatement := " ORDER BY " + orderrow + " " + order
|
||||||
switch request.view {
|
switch request.view {
|
||||||
case PAGES:
|
case PAGES:
|
||||||
statement = "SELECT url as first, count(*) as second from views" + filters + "group by url;"
|
statement = "SELECT url as first, count(*) as second from views" + filters + "group by first" + orderstatement + ";"
|
||||||
return
|
return
|
||||||
case REFERRERS:
|
case REFERRERS:
|
||||||
statement = "SELECT ref as first, count(*) as second from views" + filters + "group by ref;"
|
statement = "SELECT ref as first, count(*) as second from views" + filters + "group by first" + orderstatement + ";"
|
||||||
return
|
return
|
||||||
case USERAGENTS:
|
case USERAGENTS:
|
||||||
statement = "SELECT useragent as first, count(*) as second from views" + filters + "group by useragent;"
|
statement = "SELECT useragent as first, count(*) as second from views" + filters + "group by first" + orderstatement + ";"
|
||||||
return
|
return
|
||||||
case USERAGENTNAMES:
|
case USERAGENTNAMES:
|
||||||
statement = "SELECT substr(useragent, 1, pos-1) as first, COUNT(*) from (SELECT *, instr(useragent,' ') AS pos FROM views)" + filters + "group by first;"
|
statement = "SELECT substr(useragent, 1, pos-1) as first, COUNT(*) as second from (SELECT *, instr(useragent,' ') AS pos FROM views)" + filters + "group by first" + orderstatement + ";"
|
||||||
return
|
return
|
||||||
case HOURS, DAYS, WEEKS, MONTHS:
|
case HOURS, DAYS, WEEKS, MONTHS:
|
||||||
format := ""
|
format := ""
|
||||||
|
@ -155,7 +164,7 @@ func (request *ViewsRequest) buildStatement(filters string) (statement string) {
|
||||||
case MONTHS:
|
case MONTHS:
|
||||||
format = "%Y-%m"
|
format = "%Y-%m"
|
||||||
}
|
}
|
||||||
statement = "SELECT strftime('" + format + "', time, 'localtime') as first, count(*) as second from views" + filters + "group by first;"
|
statement = "SELECT strftime('" + format + "', time, 'localtime') as first, count(*) as second from views" + filters + "group by first" + orderstatement + ";"
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
2
main.go
2
main.go
|
@ -131,6 +131,8 @@ func requestStats(w http.ResponseWriter, r *http.Request) {
|
||||||
url: queries.Get("url"),
|
url: queries.Get("url"),
|
||||||
ref: queries.Get("ref"),
|
ref: queries.Get("ref"),
|
||||||
ua: queries.Get("ua"),
|
ua: queries.Get("ua"),
|
||||||
|
orderrow: queries.Get("orderrow"),
|
||||||
|
order: queries.Get("order"),
|
||||||
})
|
})
|
||||||
if e != nil {
|
if e != nil {
|
||||||
fmt.Println("Database request failed:", e)
|
fmt.Println("Database request failed:", e)
|
||||||
|
|
Reference in New Issue