safing-portmaster/base/database/query
2025-02-25 11:48:16 +01:00
..
condition-and.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition-bool.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition-error.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition-exists.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition-float.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition-int.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition-not.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition-or.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition-regex.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition-string.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition-stringslice.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition.go Restructure modules () 2024-08-09 18:15:48 +03:00
condition_test.go Restructure modules () 2024-08-09 18:15:48 +03:00
operators.go Restructure modules () 2024-08-09 18:15:48 +03:00
operators_test.go Restructure modules () 2024-08-09 18:15:48 +03:00
parser.go Restructure modules () 2024-08-09 18:15:48 +03:00
parser_test.go Restructure modules () 2024-08-09 18:15:48 +03:00
query.go Add SQLite database storage backend 2025-02-25 11:48:16 +01:00
query_test.go Restructure modules () 2024-08-09 18:15:48 +03:00
README.md Restructure modules () 2024-08-09 18:15:48 +03:00

Query

Control Flow

  • Grouping with ( and )
  • Chaining with and and or
    • NO mixing! Be explicit and use grouping.
  • Negation with not
    • in front of expression for group: not (...)
    • inside expression for clause: name not matches "^King "

Selectors

Supported by all feeders:

  • root level field: field
  • sub level field: field.sub
  • array/slice/map access: map.0
  • array/slice/map length: map.#

Please note that some feeders may have other special characters. It is advised to only use alphanumeric characters for keys.

Operators

Name Textual Req. Type Internal Type Compared with
Equals == int int64 ==
GreaterThan > int int64 >
GreaterThanOrEqual >= int int64 >=
LessThan < int int64 <
LessThanOrEqual <= int int64 <=
FloatEquals f== float float64 ==
FloatGreaterThan f> float float64 >
FloatGreaterThanOrEqual f>= float float64 >=
FloatLessThan f< float float64 <
FloatLessThanOrEqual f<= float float64 <=
SameAs sameas, s== string string ==
Contains contains, co string string strings.Contains()
StartsWith startswith, sw string string strings.HasPrefix()
EndsWith endswith, ew string string strings.HasSuffix()
In in string string for loop with ==
Matches matches, re string string regexp.Regexp.Matches()
Is is bool* bool ==
Exists exists, ex any n/a n/a

*accepts strings: 1, t, T, true, True, TRUE, 0, f, F, false, False, FALSE

Escaping

If you need to use a control character within a value (ie. not for controlling), escape it with \. It is recommended to wrap a word into parenthesis instead of escaping control characters, when possible.

Location Characters to be escaped
Within parenthesis (") ", \
Everywhere else (, ), ", \, \t, \r, \n, (space)