Documentation
¶
Index ¶
- Constants
- Variables
- type DatabaseField
- type Error
- type FieldType
- type Filter
- type Method
- type NonDatabaseField
- type Query
- func (q *Query) AddORFilters(fn func(query *Query)) *Query
- func (q *Query) AddQueryDbFieldMapping(queryName string, dbField DatabaseField) *Query
- func (q *Query) AddQueryField(queryName string) *Query
- func (q *Query) AddQueryFields(queryNames ...string) *Query
- func (q *Query) AddQueryFilter(queryName string, m Method, value interface{}) *Query
- func (q *Query) AddQuerySortBy(querySortBy string, desc bool) *Query
- func (q *Query) AddQueryValidation(NameAndTags string, v ValidationFunc) *Query
- func (q *Query) AllowNonDatabaseFields(filters map[string]NonDatabaseField) *Query
- func (q *Query) Args(tables ...string) []interface{}
- func (q *Query) GetQueryFilter(queryName string) (*Filter, error)
- func (q *Query) HaveQueryField(queryName string) bool
- func (q *Query) HaveQueryFieldsOnAnyTables(tables ...string) bool
- func (q *Query) HaveQueryFieldsOnTable(table string) bool
- func (q *Query) HaveQueryFilter(queryName string) bool
- func (q *Query) HaveQueryFiltersOnAnyTables(tables ...string) bool
- func (q *Query) HaveQueryFiltersOnTable(table string) bool
- func (q *Query) HaveQuerySortBy(querySortBy string) bool
- func (q *Query) HaveQuerySortByOnAnyTables(tables ...string) bool
- func (q *Query) HaveQuerySortByOnTable(table string) bool
- func (q *Query) IgnoreUnknownFilters(i bool) *Query
- func (q *Query) LIMIT() string
- func (q *Query) OFFSET() string
- func (q *Query) ORDER() string
- func (q *Query) Order() string
- func (q *Query) Parse() (err error)
- func (q *Query) RemoveQueryFilter(name string) error
- func (q *Query) RemoveQueryValidation(NameAndOrTags string) error
- func (q *Query) SELECT(tables ...string) string
- func (q *Query) SQL(table string) string
- func (q *Query) Select(tables ...string) string
- func (q *Query) SetDelimiterIN(d string) *Query
- func (q *Query) SetDelimiterOR(d string) *Query
- func (q *Query) SetPage(page int) *Query
- func (q *Query) SetPageSize(pageSize int) *Query
- func (q *Query) SetQueryDbFieldsMap(m QueryDatabaseMap) *Query
- func (q *Query) SetUrlQuery(query url.Values) *Query
- func (q *Query) SetUrlString(Url string) error
- func (q *Query) SetValidations(v Validations) *Query
- func (q *Query) UsesAnyTables(tables ...string) bool
- func (q *Query) UsesTable(table string) bool
- func (q *Query) WHERE(tables ...string) string
- func (q *Query) Where(tables ...string) string
- type QueryDatabaseMap
- type Sort
- type StateOR
- type ValidationFunc
- type Validations
Examples ¶
Constants ¶
const ( FieldTypeJson = "json" FieldTypeObject = "object" FieldTypeInt = "int" FieldTypeBool = "bool" FieldTypeCustom = "custom" FieldTypeFloat = "float" FieldTypeString = "string" FieldTypeTime = "time" FieldTypeObjectArray = "objectarray" FieldTypeIntArray = "intarray" FieldTypeStringArray = "stringarray" FieldTypeFloatArray = "floatarray" )
const NULL = "NULL"
NULL constant
Variables ¶
var ( ErrRequired = NewError("required") ErrBadFormat = NewError("bad format") ErrEmptyValue = NewError("empty value") ErrUnknownMethod = NewError("unknown method") ErrNotInScope = NewError("not in scope") ErrSimilarNames = NewError("similar names of keys are not allowed") ErrMethodNotAllowed = NewError("method are not allowed") ErrFilterNotAllowed = NewError("filter are not allowed") ErrFilterNotFound = NewError("filter not found") ErrValidationNotFound = NewError("validation not found") )
Errors list:
Functions ¶
This section is empty.
Types ¶
type DatabaseField ¶
func (DatabaseField) IsSortable ¶ added in v2.1.2
func (df DatabaseField) IsSortable() bool
type Error ¶
type Error struct {
// contains filtered or unexported fields
}
Error special rqp.Error type
type Filter ¶
type Filter struct { Key string // key from URL (eg. "id[eq]") ParameterizedName string // after applying enhancements to allow nesting QueryName string // name of filter, takes from Key (eg. "id") Method Method // compare method, takes from Key (eg. EQ) Value interface{} OR StateOR DbField DatabaseField }
Filter represents a filter defined in the query part of URL
type NonDatabaseField ¶ added in v2.1.4
type Query ¶
type Query struct { QueryFields []string Page int PageSize int Sorts []Sort Filters []*Filter Error error // contains filtered or unexported fields }
Query the main struct of package
func NewParse ¶
func NewParse(q url.Values, v Validations, qdbm QueryDatabaseMap) (*Query, error)
NewParse creates new Query instance and Parse it
func NewQV ¶
func NewQV(q url.Values, v Validations, qdbm QueryDatabaseMap) *Query
NewQV creates new Query instance with parameters
func (*Query) AddORFilters ¶
AddORFilters adds multiple filter into one `OR` statement inside parenteses. E.g. (firstname ILIKE ? OR lastname ILIKE ?)
Example ¶
q := New().AddQueryFilter("test", EQ, "ok") q.AddORFilters(func(query *Query) { query.AddQueryFilter("firstname", ILIKE, "*hello*") query.AddQueryFilter("lastname", ILIKE, "*hello*") }) q.SQL("table") // SELECT * FROM table WHERE test = ? AND (firstname ILIKE ? OR lastname ILIKE ?)
Output:
func (*Query) AddQueryDbFieldMapping ¶
func (q *Query) AddQueryDbFieldMapping(queryName string, dbField DatabaseField) *Query
func (*Query) AddQueryField ¶
AddField adds field to SELECT statement
func (*Query) AddQueryFields ¶ added in v2.0.5
AddFields adds fields to SELECT statement
func (*Query) AddQueryFilter ¶
AddFilter adds a filter to Query
func (*Query) AddQuerySortBy ¶
AddQuerySortBy adds an ordering rule to Query
func (*Query) AddQueryValidation ¶
func (q *Query) AddQueryValidation(NameAndTags string, v ValidationFunc) *Query
AddValidation adds a validation to Query
func (*Query) AllowNonDatabaseFields ¶ added in v2.1.4
func (q *Query) AllowNonDatabaseFields(filters map[string]NonDatabaseField) *Query
set behavior for Parser to not raise ErrFilterNotAllowed for these undefined filters or not
func (*Query) GetQueryFilter ¶
GetFilter returns filter by name
func (*Query) HaveQueryField ¶
HaveQueryField returns true if request asks for specified field
func (*Query) HaveQueryFieldsOnAnyTables ¶
HaveQueryFieldsOnAnyTables returns true if request asks for a field on ANY of specified tables
func (*Query) HaveQueryFieldsOnTable ¶
HaveQueryFieldsOnTable returns true if request asks for a field on the specified table
func (*Query) HaveQueryFilter ¶
HaveFilter returns true if request contains some filter
func (*Query) HaveQueryFiltersOnAnyTables ¶
HaveQueryFiltersOnAnyTables returns true if request filters by a field on ANY of specified tables
func (*Query) HaveQueryFiltersOnTable ¶
HaveQueryFiltersOnTable returns true if request filters by a field on the specified table
func (*Query) HaveQuerySortBy ¶
HaveSortBy returns true if request contains sorting by specified in by field name
func (*Query) HaveQuerySortByOnAnyTables ¶
HaveQuerySortByOnAnyTables returns true if request sorts by a field on ANY of specified tables
func (*Query) HaveQuerySortByOnTable ¶
HaveQuerySortByOnTable returns true if request sorts by a field on the specified table
func (*Query) IgnoreUnknownFilters ¶
IgnoreUnknownFilters set behavior for Parser to raise ErrFilterNotAllowed to undefined filters or not
func (*Query) ORDER ¶
ORDER returns words ORDER BY with list of elements for sorting you can use +/- prefix to specify direction of sorting (+ is default, apsent is +)
Return example: ` ORDER BY id DESC, email`
func (*Query) Order ¶
Order returns list of elements for ORDER BY statement you can use +/- prefix to specify direction of sorting (+ is default) return example: `id DESC, email`
func (*Query) Parse ¶
Parse parses the query of URL as query you can use standart http.Request query by r.URL.Query()
func (*Query) RemoveQueryFilter ¶
RemoveFilter removes the filter by name
func (*Query) RemoveQueryValidation ¶
RemoveValidation remove a validation from Query You can provide full name of filter with tags or only name of filter: RemoveValidation("id:int") and RemoveValidation("id") are equal
func (*Query) SELECT ¶
SELECT returns word SELECT with fields from Filter "fields" separated by comma (",") from URL-Query or word SELECT with star ("*") if nothing provided
Return examples:
When "fields" empty or not provided: `SELECT *`.
When "fields=id,email": `SELECT id, email`.
func (*Query) Select ¶
Select returns elements list separated by comma (",") for querying in SELECT statement or a star ("*") if nothing provided
Return examples:
When "fields" empty or not provided: `*`
When "fields=id,email": `id, email`
func (*Query) SetDelimiterIN ¶
SetDelimiterIN sets delimiter for values of filters
func (*Query) SetDelimiterOR ¶
SetDelimiterOR sets delimiter for OR filters in query part of URL
func (*Query) SetPageSize ¶
func (*Query) SetQueryDbFieldsMap ¶
func (q *Query) SetQueryDbFieldsMap(m QueryDatabaseMap) *Query
func (*Query) SetUrlQuery ¶
SetUrlQuery change url in the Query for parsing uses when you need provide Query from http.HandlerFunc(w http.ResponseWriter, r *http.Request) you can do q.SetUrlValues(r.URL.Query())
func (*Query) SetUrlString ¶
SetUrlString change url in the Query for parsing uses when you would like to provide raw URL string to parsing
func (*Query) SetValidations ¶
func (q *Query) SetValidations(v Validations) *Query
SetValidations change validations rules for the instance
func (*Query) UsesAnyTables ¶
UsesAnyTables returns true if the query uses a database field on ANY of the tables
type QueryDatabaseMap ¶ added in v2.1.4
type QueryDatabaseMap map[string]DatabaseField
type ValidationFunc ¶
type ValidationFunc func(value interface{}) error
ValidationFunc represents validator for Filters
func In ¶
func In(values ...any) ValidationFunc
func MinMax ¶
func MinMax(min, max int) ValidationFunc
MinMax validation if value between or equal min and max
func Multi ¶
func Multi(values ...ValidationFunc) ValidationFunc
Multi multiple validation func usage: Multi(Min(10), Max(100))
func NotEmpty ¶
func NotEmpty() ValidationFunc
NotEmpty validation if string value length more then 0
type Validations ¶
type Validations map[string]ValidationFunc
Validations type replacement for map. Used in NewParse(), NewQV(), SetValidations()