12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package govaluate
- import (
- "bytes"
- )
- /*
- Holds a series of "transactions" which represent each token as it is output by an outputter (such as ToSQLQuery()).
- Some outputs (such as SQL) require a function call or non-c-like syntax to represent an expression.
- To accomplish this, this struct keeps track of each translated token as it is output, and can return and rollback those transactions.
- */
- type expressionOutputStream struct {
- transactions []string
- }
- func (this *expressionOutputStream) add(transaction string) {
- this.transactions = append(this.transactions, transaction)
- }
- func (this *expressionOutputStream) rollback() string {
- index := len(this.transactions) - 1
- ret := this.transactions[index]
- this.transactions = this.transactions[:index]
- return ret
- }
- func (this *expressionOutputStream) createString(delimiter string) string {
- var retBuffer bytes.Buffer
- var transaction string
- penultimate := len(this.transactions) - 1
- for i := 0; i < penultimate; i++ {
- transaction = this.transactions[i]
- retBuffer.WriteString(transaction)
- retBuffer.WriteString(delimiter)
- }
- retBuffer.WriteString(this.transactions[penultimate])
- return retBuffer.String()
- }
|