From 5bc1364cdb42eb6af97cb3a362760111ad91be75 Mon Sep 17 00:00:00 2001 From: Todd Gruben Date: Thu, 23 Sep 2021 11:05:05 -0500 Subject: [PATCH] wip --- pg/protocol.go | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/pg/protocol.go b/pg/protocol.go index 29dd62638..3ea85ec1f 100644 --- a/pg/protocol.go +++ b/pg/protocol.go @@ -302,9 +302,16 @@ func (p *Portal) Bind() { } func (p *Portal) Parse(data []byte) { p.queryStart = time.Now() - b := bytes.Trim(data, "\x00") - vprint.VV("PARSE RAW: (%v) (%d)", string(b), len(b)) - if strings.Contains(string(b), "EXTRACT") { + queryStr := string(bytes.Trim(data, "\x00")) + vprint.VV("PARSE RAW: (%v) (%d)", queryStr, len(queryStr)) + if strings.HasPrefix(queryStr, "[") { + p.sql = queryStr + p.Name = "PQL" + p.pgspecial = pgPassOn + p.Add(message.ParseOK) + return + } + if strings.Contains(queryStr, "EXTRACT") { // had to add this hack because the vitis parser doesn't handle... /* SELECT pid as id, @@ -315,14 +322,14 @@ func (p *Portal) Parse(data []byte) { */ p.pgspecial = pgQueryTime p.Name = "SELECT" - p.sql = string(b) + p.sql = queryStr p.Add(message.ParseOK) return } - if len(b) > 2 { + if len(queryStr) > 2 { - query, err := p.mapper.MapSQL(string(b)) + query, err := p.mapper.MapSQL(queryStr) if err != nil { vprint.VV("Parse Err: '%v'", err) } else { @@ -393,14 +400,14 @@ func (p *Portal) Parse(data []byte) { } } } - p.sql = string(b) + p.sql = queryStr case sql.SQLTypeBegin: // Ignore BEGIN p.pgspecial = pgBegin case sql.SQLTypeShow: p.Name = "SHOW" p.pgspecial = pgPassOn - p.sql = string(b) + p.sql = queryStr } } }