-
Notifications
You must be signed in to change notification settings - Fork 100
/
sqlutil.go
116 lines (105 loc) · 3.22 KB
/
sqlutil.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package queries
import (
"fmt"
"strings"
"time"
"github.com/google/uuid"
runtimev1 "github.com/rilldata/rill/proto/gen/rill/runtime/v1"
"github.com/rilldata/rill/runtime/drivers"
)
var ErrExportNotSupported = fmt.Errorf("exporting is not supported")
func quoteName(name string) string {
return fmt.Sprintf("\"%s\"", name)
}
func escapeDoubleQuotes(column string) string {
return strings.ReplaceAll(column, "\"", "\"\"")
}
func safeName(name string) string {
if name == "" {
return name
}
return quoteName(escapeDoubleQuotes(name))
}
func tempName(prefix string) string {
return prefix + strings.ReplaceAll(uuid.New().String(), "-", "")
}
func convertToDruidTimeFloorSpecifier(specifier runtimev1.TimeGrain) string {
switch specifier {
case runtimev1.TimeGrain_TIME_GRAIN_MILLISECOND:
return "PT0.001S"
case runtimev1.TimeGrain_TIME_GRAIN_SECOND:
return "PT1S"
case runtimev1.TimeGrain_TIME_GRAIN_MINUTE:
return "PT1M"
case runtimev1.TimeGrain_TIME_GRAIN_HOUR:
return "PT1H"
case runtimev1.TimeGrain_TIME_GRAIN_DAY:
return "P1D"
case runtimev1.TimeGrain_TIME_GRAIN_WEEK:
return "P1W"
case runtimev1.TimeGrain_TIME_GRAIN_MONTH:
return "P1M"
case runtimev1.TimeGrain_TIME_GRAIN_QUARTER:
return "P3M"
case runtimev1.TimeGrain_TIME_GRAIN_YEAR:
return "P1Y"
}
panic(fmt.Errorf("unconvertable time grain specifier: %v", specifier))
}
func toTimeGrain(val string) runtimev1.TimeGrain {
switch strings.ToUpper(val) {
case "MILLISECOND":
return runtimev1.TimeGrain_TIME_GRAIN_MILLISECOND
case "SECOND":
return runtimev1.TimeGrain_TIME_GRAIN_SECOND
case "MINUTE":
return runtimev1.TimeGrain_TIME_GRAIN_MINUTE
case "HOUR":
return runtimev1.TimeGrain_TIME_GRAIN_HOUR
case "DAY":
return runtimev1.TimeGrain_TIME_GRAIN_DAY
case "WEEK":
return runtimev1.TimeGrain_TIME_GRAIN_WEEK
case "MONTH":
return runtimev1.TimeGrain_TIME_GRAIN_MONTH
case "QUARTER":
return runtimev1.TimeGrain_TIME_GRAIN_QUARTER
case "YEAR":
return runtimev1.TimeGrain_TIME_GRAIN_YEAR
default:
panic(fmt.Errorf("unconvertable time grain specifier: %v", val))
}
}
func addInterval(t time.Time, timeGrain runtimev1.TimeGrain) time.Time {
switch timeGrain {
case runtimev1.TimeGrain_TIME_GRAIN_MILLISECOND:
t = t.Truncate(time.Millisecond)
return t.Add(time.Millisecond)
case runtimev1.TimeGrain_TIME_GRAIN_SECOND:
t = t.Truncate(time.Second)
return t.Add(time.Second)
case runtimev1.TimeGrain_TIME_GRAIN_MINUTE:
t = t.Truncate(time.Minute)
return t.Add(time.Minute)
case runtimev1.TimeGrain_TIME_GRAIN_HOUR:
t = t.Truncate(time.Hour)
return t.Add(time.Hour)
case runtimev1.TimeGrain_TIME_GRAIN_DAY:
t = t.Truncate(time.Hour * 24)
return t.Add(time.Hour * 24)
case runtimev1.TimeGrain_TIME_GRAIN_WEEK:
t = t.Truncate(time.Hour * 24 * 7)
return t.Add(time.Hour * 24 * 7)
case runtimev1.TimeGrain_TIME_GRAIN_MONTH:
t = time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location())
return t.AddDate(0, 1, 0)
case runtimev1.TimeGrain_TIME_GRAIN_YEAR:
t = time.Date(t.Year(), time.January, 1, 0, 0, 0, 0, t.Location())
return t.AddDate(1, 0, 0)
default:
return t
}
}
func escapeMetricsViewTable(d drivers.Dialect, mv *runtimev1.MetricsViewSpec) string {
return d.EscapeTable(mv.Database, mv.DatabaseSchema, mv.Table)
}