Extract binary_parameters handle logic into public methods for external use (#20043)

Этот коммит содержится в:
Miguel de la Cruz
2022-04-21 15:59:54 +02:00
коммит произвёл GitHub
родитель 2576556c8b
Коммит 6608f3a9ca
6 изменённых файлов: 21 добавлений и 17 удалений

Просмотреть файл

@@ -35,7 +35,7 @@ func (jss SqlJobStore) Save(job *model.Job) (*model.Job, error) {
return nil, errors.Wrap(err, "failed marshalling job data")
}
if jss.IsBinaryParamEnabled() {
jsonData = jss.AppendBinaryFlag(jsonData)
jsonData = AppendBinaryFlag(jsonData)
}
query := jss.getQueryBuilder().
Insert("Jobs").
@@ -60,7 +60,7 @@ func (jss SqlJobStore) UpdateOptimistically(job *model.Job, currentStatus string
return false, errors.Wrap(jsonErr, "failed to encode job's data to JSON")
}
if jss.IsBinaryParamEnabled() {
dataJSON = jss.AppendBinaryFlag(dataJSON)
dataJSON = AppendBinaryFlag(dataJSON)
}
query, args, err := jss.getQueryBuilder().
Update("Jobs").

Просмотреть файл

@@ -33,7 +33,7 @@ func (s SqlLinkMetadataStore) Save(metadata *model.LinkMetadata) (*model.LinkMet
return nil, errors.Wrap(err, "could not serialize metadataBytes to JSON")
}
if s.IsBinaryParamEnabled() {
metadataBytes = s.AppendBinaryFlag(metadataBytes)
metadataBytes = AppendBinaryFlag(metadataBytes)
}
query := s.getQueryBuilder().

Просмотреть файл

@@ -44,7 +44,7 @@ func (me SqlSessionStore) Save(session *model.Session) (*model.Session, error) {
}
if me.IsBinaryParamEnabled() {
jsonProps = me.AppendBinaryFlag(jsonProps)
jsonProps = AppendBinaryFlag(jsonProps)
}
query, args, err := me.getQueryBuilder().
@@ -268,7 +268,7 @@ func (me SqlSessionStore) UpdateProps(session *model.Session) error {
return errors.Wrap(err, "failed marshalling session props")
}
if me.IsBinaryParamEnabled() {
jsonProps = me.AppendBinaryFlag(jsonProps)
jsonProps = AppendBinaryFlag(jsonProps)
}
query, args, err := me.getQueryBuilder().
Update("Sessions").

Просмотреть файл

@@ -9,7 +9,6 @@ import (
dbsql "database/sql"
"fmt"
"log"
"net/url"
"path/filepath"
"strconv"
"strings"
@@ -338,22 +337,13 @@ func (ss *SqlStore) computeBinaryParam() (bool, error) {
return false, nil
}
url, err := url.Parse(*ss.settings.DataSource)
if err != nil {
return false, err
}
return url.Query().Get("binary_parameters") == "yes", nil
return DSNHasBinaryParam(*ss.settings.DataSource)
}
func (ss *SqlStore) IsBinaryParamEnabled() bool {
return ss.isBinaryParam
}
// AppendBinaryFlag updates the byte slice to work using binary_parameters=yes.
func (ss *SqlStore) AppendBinaryFlag(buf []byte) []byte {
return append([]byte{0x01}, buf...)
}
func (ss *SqlStore) getCurrentSchemaVersion() (string, error) {
var version string
err := ss.GetMasterX().Get(&version, "SELECT Value FROM Systems WHERE Name='Version'")

Просмотреть файл

@@ -233,7 +233,7 @@ func (us SqlUserStore) UpdateNotifyProps(userID string, props map[string]string)
return errors.Wrap(err, "failed marshalling session props")
}
if us.IsBinaryParamEnabled() {
buf = us.AppendBinaryFlag(buf)
buf = AppendBinaryFlag(buf)
}
if _, err := us.GetMasterX().Exec(`UPDATE Users

Просмотреть файл

@@ -5,6 +5,7 @@ package sqlstore
import (
"database/sql"
"net/url"
"strconv"
"strings"
"unicode"
@@ -156,3 +157,16 @@ func (l *morphWriter) Write(in []byte) (int, error) {
mlog.Debug(string(in))
return len(in), nil
}
func DSNHasBinaryParam(dsn string) (bool, error) {
url, err := url.Parse(dsn)
if err != nil {
return false, err
}
return url.Query().Get("binary_parameters") == "yes", nil
}
// AppendBinaryFlag updates the byte slice to work using binary_parameters=yes.
func AppendBinaryFlag(buf []byte) []byte {
return append([]byte{0x01}, buf...)
}