This repository has been archived by the owner on May 13, 2022. It is now read-only.
/
sql_table.go
174 lines (158 loc) · 3.82 KB
/
sql_table.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package types
import (
"fmt"
)
// SQLTable contains the structure of a SQL table,
type SQLTable struct {
Name string
Columns []*SQLTableColumn
// Map of channel name -> columns to be sent as payload on that channel
NotifyChannels map[string][]string
columns map[string]*SQLTableColumn
}
func (table *SQLTable) GetColumn(columnName string) *SQLTableColumn {
if table.columns == nil {
table.columns = make(map[string]*SQLTableColumn, len(table.Columns))
for _, column := range table.Columns {
table.columns[column.Name] = column
}
}
return table.columns[columnName]
}
// SQLTableColumn contains the definition of a SQL table column,
// the Order is given to be able to sort the columns to be created
type SQLTableColumn struct {
Name string
Type SQLColumnType
Primary bool
// Length of variable column type where applicable 0 indicates variable/unbounded length
Length int
}
func (col *SQLTableColumn) String() string {
primaryString := ""
if col.Primary {
primaryString = " (primary)"
}
lengthString := ""
if col.Length != 0 {
lengthString = fmt.Sprintf(" (length %d)", col.Length)
}
return fmt.Sprintf("SQLTableColumn{%s%s: %v%s}",
col.Name, primaryString, col.Type, lengthString)
}
func (col *SQLTableColumn) Equals(otherCol *SQLTableColumn) bool {
columnA := *col
columnB := *otherCol
return columnA == columnB
}
// UpsertDeleteQuery contains query and values to upsert or delete row data
type UpsertDeleteQuery struct {
Query string
Values string
Pointers []interface{}
}
type SQLNames struct {
Tables SQLTableNames
Columns SQLColumnNames
}
var DefaultSQLNames = SQLNames{
Tables: DefaultSQLTableNames,
Columns: DefaultSQLColumnNames,
}
type SQLTableNames struct {
Log string
Dictionary string
Block string
Tx string
ChainInfo string
}
var DefaultSQLTableNames = SQLTableNames{
Log: "_vent_log",
Dictionary: "_vent_dictionary",
Block: "_vent_block",
Tx: "_vent_tx",
ChainInfo: "_vent_chain",
}
type SQLColumnNames struct {
// log
Id string
TimeStamp string
TableName string
EventName string
EventFilter string
Height string
TxHash string
Action string
DataRow string
SqlStmt string
SqlValues string
// dictionary
ColumnName string
ColumnType string
ColumnLength string
PrimaryKey string
ColumnOrder string
// chain info
BurrowVersion string
ChainID string
// context
TxIndex string
EventIndex string
EventType string
BlockHeader string
TxType string
Envelope string
Events string
Result string
Receipt string
Origin string
Exception string
}
var DefaultSQLColumnNames = SQLColumnNames{
// log
Id: "_id",
TimeStamp: "_timestamp",
TableName: "_tablename",
EventName: "_eventname",
EventFilter: "_eventfilter",
Height: "_height",
TxHash: "_txhash",
Action: "_action",
DataRow: "_datarow",
SqlStmt: "_sqlstmt",
SqlValues: "_sqlvalues",
// dictionary,
ColumnName: "_columnname",
ColumnType: "_columntype",
ColumnLength: "_columnlength",
PrimaryKey: "_primarykey",
ColumnOrder: "_columnorder",
// chain info,
BurrowVersion: "_burrowversion",
ChainID: "_chainid",
// context,
TxIndex: "_txindex",
EventIndex: "_eventindex",
EventType: "_eventtype",
BlockHeader: "_blockheader",
TxType: "_txtype",
Envelope: "_envelope",
Events: "_events",
Result: "_result",
Receipt: "_receipt",
Origin: "_origin",
Exception: "_exception",
}
// labels for column mapping
const (
// event related
EventNameLabel = "eventName"
EventTypeLabel = "eventType"
EventIndexLabel = "eventIndex"
// block related
ChainIDLabel = "chainID"
BlockHeightLabel = "height"
TxIndexLabel = "txIndex"
// transaction related
TxTxHashLabel = "txHash"
)