@@ -163,133 +163,3 @@ func (c *Converter) columnName(column string) string {
163163 }
164164 return fmt .Sprintf (`%q->>'%s'` , c .nestedColumn , column )
165165}
166-
167- /*
168- type Converter struct {
169- nestedColumn string
170- nestedExemptions []string
171- }
172-
173- func NewConverter(options ...Option) *Converter {
174- converter := &Converter{}
175- for _, option := range options {
176- option(converter)
177- }
178- return converter
179- }
180-
181- func (c *Converter) Convert(filter []byte) (conditions string, values []any, err error) {
182- expr, err := c.parse(filter)
183- if err != nil {
184- return "", nil, fmt.Errorf("failed to parse filter: %w", err)
185- }
186- conditions, values, err = expr.ToPostgresWhereClause()
187- if err != nil {
188- return "", nil, fmt.Errorf("failed to convert expression to where clause: %w", err)
189- }
190- return
191- }
192-
193- type expression interface {
194- ToPostgresWhereClause() (string, []any, error)
195- }
196-
197- type compoundExpression struct {
198- expressions []expression
199- operator string
200- }
201-
202- func (e compoundExpression) ToPostgresWhereClause() (string, []any, error) {
203- values := []any{}
204- conditions := []string{}
205- for _, expr := range e.expressions {
206- condition, value, err := expr.ToPostgresWhereClause()
207- if err != nil {
208- return "", nil, fmt.Errorf("failed to convert expression to where clause: %w", err)
209- }
210- conditions = append(conditions, condition)
211- values = append(values, value...)
212- }
213- return "(" + strings.Join(conditions, " AND ") + ")", values, nil
214- }
215-
216- type scalarExpression struct {
217- column string
218- operator string
219- value string
220- }
221-
222- func (e scalarExpression) ToPostgresWhereClause() (string, []any, error) {
223- return fmt.Sprintf(`"%s" %s ?`, e.column, e.operator), []any{e.value}, nil
224- }
225-
226- func (c *Converter) parse(input []byte) (expression, error) {
227- raw := map[string]any{}
228- err := json.Unmarshal(input, &raw)
229- if err != nil {
230- return nil, fmt.Errorf("failed to unmarshal input: %w", err)
231- }
232- root := compoundExpression{
233- expressions: []expression{},
234- operator: "AND",
235- }
236- for key, value := range raw {
237- expr := convertToExpression(key, value, key)
238- if expr == nil {
239- return nil, fmt.Errorf("failed to convert expression")
240- }
241- root.expressions = append(root.expressions, expr)
242- }
243-
244- if root.operator != "AND" {
245- return nil, fmt.Errorf("root operator must be AND")
246- }
247- return root, nil
248- }
249-
250- func convertToExpression(key string, value any, currentColumn string) expression {
251- switch value := value.(type) {
252- case int:
253- case int64:
254- case float64:
255- case string:
256- switch key {
257- case "$gt":
258- return &scalarExpression{
259- column: currentColumn,
260- operator: ">",
261- value: value,
262- }
263- case "$gte":
264- return &scalarExpression{
265- column: currentColumn,
266- operator: ">=",
267- value: value,
268- }
269- case "$lt":
270- return &scalarExpression{
271- column: currentColumn,
272- operator: "<",
273- value: value,
274- }
275- case "$lte":
276- return &scalarExpression{
277- column: currentColumn,
278- operator: "<=",
279- value: value,
280- }
281- case "$eq":
282- fallthrough
283- default:
284- return &scalarExpression{
285- column: currentColumn,
286- operator: "=",
287- value: value,
288- }
289- }
290- case map[string]any:
291- return convertToExpression(key, value, key)
292- }
293- return nil
294- }
295- */
0 commit comments