Skip to content

feat: expression-based filtering and computed columns via ex-mode #55

Description

@mpryor

Summary

Extend ex-mode (:) with expression support for complex filters and computed columns, enabling queries like latency > 500 && status != 200.

Problem

Current filtering is regex-based on a single column at a time. There's no way to express compound conditions (e.g. "show rows where latency > 500 AND status is not 200") or create computed columns (e.g. "response_time / 1000").

Features

  • Expression-based filtering: :filter latency > 500 && status != 200
  • Computed columns: :add-column duration_s = latency / 1000
  • Support basic arithmetic, comparison, and logical operators
  • String functions (contains, startswith, len, upper/lower)
  • Access columns by name in expressions

Technical Considerations

  • Keep the expression language simple — this is not SQL or Python, it's a lightweight DSL
  • Could use Python's ast.literal_eval or a simple expression parser
  • Should integrate with the existing ex-mode command system
  • Alternatively, consider a subset of Python expressions (like VisiData) or SQL WHERE clauses (like lnav)

Related

  • Inspired by lnav's SQLite queries and VisiData's Python expressions
  • Complements existing regex-based filtering (f, F, e, E)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions