MCPcopy Create free account
hub / github.com/GitbookIO/micro-analytics / Query

Function Query

database/sqlite/query/query.go:14–61  ·  view source on GitHub ↗

Wrapper for querying a Database struct

(db *sql.DB, timeRange *database.TimeRange)

Source from the content-addressed store, hash-verified

12
13// Wrapper for querying a Database struct
14func Query(db *sql.DB, timeRange *database.TimeRange) (*database.Analytics, error) {
15 // Query
16 queryBuilder := sq.
17 Select("time", "event", "path", "ip", "platform", "refererDomain", "countryCode").
18 From("visits")
19
20 // Add time constraints if timeRange provided
21 if timeRange != nil {
22 if !timeRange.Start.Equal(time.Time{}) {
23 timeQuery := fmt.Sprintf("time >= %d", timeRange.Start.Unix())
24 queryBuilder = queryBuilder.Where(timeQuery)
25 }
26 if !timeRange.End.Equal(time.Time{}) {
27 timeQuery := fmt.Sprintf("time <= %d", timeRange.End.Unix())
28 queryBuilder = queryBuilder.Where(timeQuery)
29 }
30 }
31
32 query, _, err := queryBuilder.ToSql()
33 if err != nil {
34 return nil, err
35 }
36
37 // Exec query
38 rows, err := db.Query(query)
39 if err != nil {
40 return nil, err
41 }
42 defer rows.Close()
43
44 analytics := database.Analytics{}
45 for rows.Next() {
46 analytic := database.Analytic{}
47 var analyticTime int64
48 rows.Scan(&analyticTime,
49 &analytic.Event,
50 &analytic.Path,
51 &analytic.Ip,
52 &analytic.Platform,
53 &analytic.RefererDomain,
54 &analytic.CountryCode)
55
56 analytic.Time = time.Unix(analyticTime, 0).UTC()
57 analytics.List = append(analytics.List, analytic)
58 }
59
60 return &analytics, nil
61}

Callers

nothing calls this directly

Calls 1

QueryMethod · 0.65

Tested by

no test coverage detected