summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/dialect/pgdialect/parser.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/dialect/pgdialect/parser.go')
-rw-r--r--vendor/github.com/uptrace/bun/dialect/pgdialect/parser.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/vendor/github.com/uptrace/bun/dialect/pgdialect/parser.go b/vendor/github.com/uptrace/bun/dialect/pgdialect/parser.go
index 08f4727db..c0a6299d9 100644
--- a/vendor/github.com/uptrace/bun/dialect/pgdialect/parser.go
+++ b/vendor/github.com/uptrace/bun/dialect/pgdialect/parser.go
@@ -105,3 +105,39 @@ func (p *pgparser) ReadRange(ch byte) ([]byte, error) {
return p.buf, nil
}
+
+func (p *pgparser) ReadJSON() ([]byte, error) {
+ p.Unread()
+
+ c, err := p.ReadByte()
+ if err != nil {
+ return nil, err
+ }
+
+ p.buf = p.buf[:0]
+
+ depth := 0
+ for {
+ switch c {
+ case '{':
+ depth++
+ case '}':
+ depth--
+ }
+
+ p.buf = append(p.buf, c)
+
+ if depth == 0 {
+ break
+ }
+
+ next, err := p.ReadByte()
+ if err != nil {
+ return nil, err
+ }
+
+ c = next
+ }
+
+ return p.buf, nil
+}