in backend/encoding.js [579:654]
_appendValue(value, repetitions = 1) {
if (repetitions <= 0) return
if (this.state === 'empty') {
this.state = (value === null ? 'nulls' : (repetitions === 1 ? 'loneValue' : 'repetition'))
this.lastValue = value
this.count = repetitions
} else if (this.state === 'loneValue') {
if (value === null) {
this.flush()
this.state = 'nulls'
this.count = repetitions
} else if (value === this.lastValue) {
this.state = 'repetition'
this.count = 1 + repetitions
} else if (repetitions > 1) {
this.flush()
this.state = 'repetition'
this.count = repetitions
this.lastValue = value
} else {
this.state = 'literal'
this.literal = [this.lastValue]
this.lastValue = value
}
} else if (this.state === 'repetition') {
if (value === null) {
this.flush()
this.state = 'nulls'
this.count = repetitions
} else if (value === this.lastValue) {
this.count += repetitions
} else if (repetitions > 1) {
this.flush()
this.state = 'repetition'
this.count = repetitions
this.lastValue = value
} else {
this.flush()
this.state = 'loneValue'
this.lastValue = value
}
} else if (this.state === 'literal') {
if (value === null) {
this.literal.push(this.lastValue)
this.flush()
this.state = 'nulls'
this.count = repetitions
} else if (value === this.lastValue) {
this.flush()
this.state = 'repetition'
this.count = 1 + repetitions
} else if (repetitions > 1) {
this.literal.push(this.lastValue)
this.flush()
this.state = 'repetition'
this.count = repetitions
this.lastValue = value
} else {
this.literal.push(this.lastValue)
this.lastValue = value
}
} else if (this.state === 'nulls') {
if (value === null) {
this.count += repetitions
} else if (repetitions > 1) {
this.flush()
this.state = 'repetition'
this.count = repetitions
this.lastValue = value
} else {
this.flush()
this.state = 'loneValue'
this.lastValue = value
}
}
}