github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/vent/types/sql_table.go (about) 1 package types 2 3 import ( 4 "fmt" 5 ) 6 7 // SQLTable contains the structure of a SQL table, 8 type SQLTable struct { 9 Name string 10 Columns []*SQLTableColumn 11 // Map of channel name -> columns to be sent as payload on that channel 12 NotifyChannels map[string][]string 13 columns map[string]*SQLTableColumn 14 } 15 16 func (table *SQLTable) GetColumn(columnName string) *SQLTableColumn { 17 if table.columns == nil { 18 table.columns = make(map[string]*SQLTableColumn, len(table.Columns)) 19 for _, column := range table.Columns { 20 table.columns[column.Name] = column 21 } 22 } 23 return table.columns[columnName] 24 } 25 26 // SQLTableColumn contains the definition of a SQL table column, 27 // the Order is given to be able to sort the columns to be created 28 type SQLTableColumn struct { 29 Name string 30 Type SQLColumnType 31 Primary bool 32 // Length of variable column type where applicable 0 indicates variable/unbounded length 33 Length int 34 } 35 36 func (col *SQLTableColumn) String() string { 37 primaryString := "" 38 if col.Primary { 39 primaryString = " (primary)" 40 } 41 lengthString := "" 42 if col.Length != 0 { 43 lengthString = fmt.Sprintf(" (length %d)", col.Length) 44 } 45 return fmt.Sprintf("SQLTableColumn{%s%s: %v%s}", 46 col.Name, primaryString, col.Type, lengthString) 47 } 48 49 func (col *SQLTableColumn) Equals(otherCol *SQLTableColumn) bool { 50 columnA := *col 51 columnB := *otherCol 52 return columnA == columnB 53 } 54 55 // UpsertDeleteQuery contains query and values to upsert or delete row data 56 type UpsertDeleteQuery struct { 57 Query string 58 Values string 59 Pointers []interface{} 60 } 61 62 type SQLNames struct { 63 Tables SQLTableNames 64 Columns SQLColumnNames 65 } 66 67 var DefaultSQLNames = SQLNames{ 68 Tables: DefaultSQLTableNames, 69 Columns: DefaultSQLColumnNames, 70 } 71 72 type SQLTableNames struct { 73 Log string 74 Dictionary string 75 Block string 76 Tx string 77 ChainInfo string 78 } 79 80 var DefaultSQLTableNames = SQLTableNames{ 81 Log: "_vent_log", 82 Dictionary: "_vent_dictionary", 83 Block: "_vent_block", 84 Tx: "_vent_tx", 85 ChainInfo: "_vent_chain", 86 } 87 88 type SQLColumnNames struct { 89 // log 90 Id string 91 TimeStamp string 92 TableName string 93 EventName string 94 EventFilter string 95 Height string 96 TxHash string 97 Action string 98 DataRow string 99 SqlStmt string 100 SqlValues string 101 // dictionary 102 ColumnName string 103 ColumnType string 104 ColumnLength string 105 PrimaryKey string 106 ColumnOrder string 107 // chain info 108 BurrowVersion string 109 ChainID string 110 // context 111 TxIndex string 112 EventIndex string 113 EventType string 114 BlockHeader string 115 TxType string 116 Envelope string 117 Events string 118 Result string 119 Receipt string 120 Origin string 121 Exception string 122 } 123 124 var DefaultSQLColumnNames = SQLColumnNames{ 125 // log 126 Id: "_id", 127 TimeStamp: "_timestamp", 128 TableName: "_tablename", 129 EventName: "_eventname", 130 EventFilter: "_eventfilter", 131 Height: "_height", 132 TxHash: "_txhash", 133 Action: "_action", 134 DataRow: "_datarow", 135 SqlStmt: "_sqlstmt", 136 SqlValues: "_sqlvalues", 137 // dictionary, 138 ColumnName: "_columnname", 139 ColumnType: "_columntype", 140 ColumnLength: "_columnlength", 141 PrimaryKey: "_primarykey", 142 ColumnOrder: "_columnorder", 143 // chain info, 144 BurrowVersion: "_burrowversion", 145 ChainID: "_chainid", 146 // context, 147 TxIndex: "_txindex", 148 EventIndex: "_eventindex", 149 EventType: "_eventtype", 150 BlockHeader: "_blockheader", 151 TxType: "_txtype", 152 Envelope: "_envelope", 153 Events: "_events", 154 Result: "_result", 155 Receipt: "_receipt", 156 Origin: "_origin", 157 Exception: "_exception", 158 } 159 160 // labels for column mapping 161 const ( 162 // event related 163 EventNameLabel = "eventName" 164 EventTypeLabel = "eventType" 165 EventIndexLabel = "eventIndex" 166 167 // block related 168 ChainIDLabel = "chainID" 169 BlockHeightLabel = "height" 170 TxIndexLabel = "txIndex" 171 172 // transaction related 173 TxTxHashLabel = "txHash" 174 )