netmap: Fix string escape in PlacementPolicy.String() #207

Merged
fyrchik merged 1 commit from fyrchik/frostfs-sdk-go:fix-parser into master 2024-03-01 15:02:07 +00:00
2 changed files with 12 additions and 3 deletions

View file

@ -940,10 +940,14 @@ func operationFromString(s string) (op netmap.Operation) {
return
}
// escapeString returns single quote wrapped string if it contains special
// characters '-' and whitespace.
// escapeString returns single quote wrapped string.
// Wrapping rules must be kept in sync with QueryLexer.g4.
// Currently only ASCII letters, digits and underscore can be parsed without quotes.
func escapeString(s string) string {
if strings.ContainsAny(s, " -\t") {
for _, r := range s {
if 'a' <= r && r <= 'z' || 'A' <= r && r <= 'Z' || '0' <= r && r <= '9' || r == '_' {
Review

I have benchmarked strings.ContainsAny, regexp and this.
regexp was twice as slow
strings.ContainsAny was less readable (good luck counting symbols)
this is maintainable and obvious

I have benchmarked `strings.ContainsAny`, regexp and this. regexp was twice as slow strings.ContainsAny was less readable (good luck counting symbols) this is maintainable and obvious
continue
}
return "'" + s + "'"
}
return s

View file

@ -36,6 +36,11 @@ FILTER City EQ SPB AND SSD EQ true OR City EQ SPB AND Rating GE 5 AS SPBSSD`,
SELECT 1 IN City FROM SPBSSD AS SPB
FILTER NOT (NOT (City EQ SPB) AND SSD EQ true OR City EQ SPB AND Rating GE 5) AS SPBSSD`,
`REP 1 IN FNODE
CBF 1
SELECT 1 FROM F AS FNODE
FILTER Node EQ '10.78.8.11' AS F`,
`UNIQUE
REP 1
REP 1`,