# README
🔎 gorm-odata-filtering
This package provides a way to filter gorm objects with an OData filter.
It builds the correct gorm query based on an odata filter string.
It creates a Syntax Tree
based on the input query string using go-syntax-tree and uses that tree to build the correct gorm query.
To make sure that object expansion works (e.g. metadata/name eq 'some-value'
) it makes use of the following 2 dependencies:
📋 Example
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
gormodata "github.com/bramca/gorm-odata-filtering"
)
type MockModel struct {
ID string
Name string
TestValue string
Metadata *Metadata `gorm:"foreignKey:MetadataID"`
MetadataID *uuid.UUID
}
type Metadata struct {
ID uuid.UUID
Name string
}
func main() {
db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
db.AutoMigrate(&MockModel{}, &Metadata{})
queryString := "name eq 'test' and (contains(testValue,'testvalue') or contains(metadata/name,'test-metadata'))"
var result []MockModel
dbQuery, err := gormodata.BuildQuery(queryString, db, gormodata.SQLite)
if err != nil {
panic(err)
}
dbQuery.Find(&result)
}