MCPcopy Create free account
hub / github.com/uptrace/bun / readNext

Method readNext

dialect/pgdialect/array_parser.go:55–119  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

53}
54
55func (p *arrayParser) readNext() error {
56 ch := p.p.Read()
57 if ch == 0 {
58 return io.EOF
59 }
60
61 switch ch {
62 case '}', ']':
63 return io.EOF
64 case '"':
65 b, err := p.p.ReadSubstring(ch)
66 if err != nil {
67 return err
68 }
69
70 if p.p.Peek() == ',' {
71 p.p.Advance()
72 }
73
74 p.elem = b
75 return nil
76 case '[', '(':
77 rng, err := p.p.ReadRange(ch)
78 if err != nil {
79 return err
80 }
81
82 if p.p.Peek() == ',' {
83 p.p.Advance()
84 }
85
86 p.elem = rng
87 return nil
88 default:
89 if ch == '{' && p.isJson {
90 json, err := p.p.ReadJSON()
91 if err != nil {
92 return err
93 }
94
95 for {
96 if p.p.Peek() == ',' || p.p.Peek() == ' ' {
97 p.p.Advance()
98 } else {
99 break
100 }
101 }
102
103 p.elem = json
104 return nil
105 } else {
106 lit := p.p.ReadLiteral(ch)
107 if bytes.Equal(lit, []byte("NULL")) {
108 lit = nil
109 }
110
111 if p.p.Peek() == ',' {
112 p.p.Advance()

Callers 1

NextMethod · 0.95

Calls 7

ReadMethod · 0.80
ReadSubstringMethod · 0.80
PeekMethod · 0.80
AdvanceMethod · 0.80
ReadRangeMethod · 0.80
ReadJSONMethod · 0.80
ReadLiteralMethod · 0.80

Tested by

no test coverage detected