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  )