mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-12-15 03:36:37 +00:00
66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
|
package sql3util
|
||
|
|
||
|
import "strings"
|
||
|
|
||
|
// NamedArg splits an named arg into a key and value,
|
||
|
// around an equals sign.
|
||
|
// Spaces are trimmed around both key and value.
|
||
|
func NamedArg(arg string) (key, val string) {
|
||
|
key, val, _ = strings.Cut(arg, "=")
|
||
|
key = strings.TrimSpace(key)
|
||
|
val = strings.TrimSpace(val)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Unquote unquotes a string.
|
||
|
//
|
||
|
// https://sqlite.org/lang_keywords.html
|
||
|
func Unquote(val string) string {
|
||
|
if len(val) < 2 {
|
||
|
return val
|
||
|
}
|
||
|
fst := val[0]
|
||
|
lst := val[len(val)-1]
|
||
|
rst := val[1 : len(val)-1]
|
||
|
if fst == '[' && lst == ']' {
|
||
|
return rst
|
||
|
}
|
||
|
if fst != lst {
|
||
|
return val
|
||
|
}
|
||
|
var old, new string
|
||
|
switch fst {
|
||
|
default:
|
||
|
return val
|
||
|
case '`':
|
||
|
old, new = "``", "`"
|
||
|
case '"':
|
||
|
old, new = `""`, `"`
|
||
|
case '\'':
|
||
|
old, new = `''`, `'`
|
||
|
}
|
||
|
return strings.ReplaceAll(rst, old, new)
|
||
|
}
|
||
|
|
||
|
// ParseBool parses a boolean.
|
||
|
//
|
||
|
// https://sqlite.org/pragma.html#syntax
|
||
|
func ParseBool(s string) (b, ok bool) {
|
||
|
if len(s) == 0 {
|
||
|
return false, false
|
||
|
}
|
||
|
if s[0] == '0' {
|
||
|
return false, true
|
||
|
}
|
||
|
if '1' <= s[0] && s[0] <= '9' {
|
||
|
return true, true
|
||
|
}
|
||
|
switch strings.ToLower(s) {
|
||
|
case "true", "yes", "on":
|
||
|
return true, true
|
||
|
case "false", "no", "off":
|
||
|
return false, true
|
||
|
}
|
||
|
return false, false
|
||
|
}
|