11package data
22
33import (
4+ "encoding/json"
45 "fmt"
56
67 "github.com/TanmoySG/wunderDB/internal/filter"
@@ -9,12 +10,20 @@ import (
910 "github.com/TanmoySG/wunderDB/pkg/schema"
1011 "github.com/TanmoySG/wunderDB/pkg/utils/maps"
1112 er "github.com/TanmoySG/wunderDB/pkg/wdb/errors"
13+ "github.com/spyzhov/ajson"
1214)
1315
1416const (
1517 defaultPrimaryKeyField = "recordId"
1618)
1719
20+ var (
21+ JsonPathQuery QueryType = "jsonpath"
22+ EvaluateQuery QueryType = "evaluate"
23+ )
24+
25+ type QueryType string
26+
1827type Data struct {
1928 Data map [model.Identifier ]* model.Record
2029 Schema model.Schema
@@ -69,6 +78,7 @@ func (d Data) Read(filters interface{}) (map[model.Identifier]*model.Record, *er
6978 filteredData := f .Filter (* d .PrimaryKey , d .Data )
7079 return filteredData , nil
7180 }
81+
7282 return d .Data , nil
7383}
7484
@@ -127,6 +137,48 @@ func (d Data) Delete(filters interface{}) *er.WdbError {
127137 return & er .FilterMissingError
128138}
129139
140+ func (d Data ) Query (query string , mode QueryType ) (interface {}, * er.WdbError ) {
141+
142+ jsonData , err := json .Marshal (d .Data )
143+ if err != nil {
144+ return nil , nil
145+ }
146+
147+ var queryResultNodes []* ajson.Node
148+ var queryResults []interface {}
149+
150+ root , err := ajson .Unmarshal (jsonData )
151+ if err != nil {
152+ return nil , nil
153+ }
154+
155+ switch mode {
156+ case JsonPathQuery :
157+ jpqResult , err := root .JSONPath (query )
158+ if err != nil {
159+ fmt .Println ("ths" , err )
160+ }
161+ queryResultNodes = jpqResult
162+ case EvaluateQuery :
163+ evqResult , err := ajson .Eval (root , query )
164+ if err != nil {
165+ fmt .Println ("thsd" , err )
166+ }
167+
168+ queryResultNodes = []* ajson.Node {evqResult }
169+ }
170+
171+ for _ , node := range queryResultNodes {
172+ marshaledNode , err := ajson .Marshal (node )
173+ if err != nil {
174+ return nil , nil
175+ }
176+ queryResults = append (queryResults , string (marshaledNode ))
177+ }
178+
179+ return queryResults , nil
180+ }
181+
130182func (d Data ) getPrimaryKey (recordId model.Identifier , data interface {}) model.Identifier {
131183 primaryKeyValue := recordId .String ()
132184
0 commit comments