npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

sqlparser-devexpress

v2.5.1

Published

SQLParser is a JavaScript library that converts SQL `WHERE` clauses into a structured **Abstract Syntax Tree (AST)** and transforms them into DevExpress filter format. It removes inline parameters while preserving them as dynamic variables for flexible qu

Readme

SQLParser

SQLParser is a JavaScript library that converts SQL WHERE clauses into a structured Abstract Syntax Tree (AST) and transforms them into DevExpress filter format. It removes inline parameters while preserving them as dynamic variables for flexible query processing.

Features

  • AST-Based Query Processing: Parses WHERE clauses and generates a structured AST.
  • Supports Dynamic Parameters: Identifies and extracts placeholders ({param}) for dynamic resolution.
  • Parameter Cleanup: Removes inline parameters while maintaining their structure.
  • DevExpress-Compatible Output: Converts parsed SQL conditions into the DevExpress filter format.
  • Short-Circuit Optimization: By default, eliminates value = value expressions for DevExpress compatibility (can be disabled for performance optimization).
  • Separation of Concerns: Generate AST once, then use it for multiple state updates.

Installation

npm install sqlparser-devexpress

Example Workflow

Step 1: Input SQL

WHERE OrderID = {CustomerOrders.OrderID} AND Status IN (1, 3)

Step 2: Generate AST

import { convertSQLToAst } from "sqlparser-devexpress";

const sqlQuery = "OrderID = {CustomerOrders.OrderID} AND Status IN (1, 3)";
const { ast, variables } = convertSQLToAst(sqlQuery, true); // Enable logs

AST Output

{
  "type": "logical",
  "operator": "AND",
  "left": {
    "type": "comparison",
    "field": "OrderID",
    "operator": "=",
    "value": {
      "type": "placeholder",
      "value": "CustomerOrders.OrderID"
    }
  },
  "right": {
    "type": "comparison",
    "field": "Status",
    "operator": "in",
    "value": {
      "type": "value",
      "value": [1, 3]
    }
  }
}

Extracted Variables

The parser identifies placeholders within the SQL query and extracts them for dynamic value resolution.

Example Output:

[
  "CustomerOrders.OrderID"
]

These extracted variables can be used to fetch the corresponding state values in the application. You can store them in a Record<string, any>, where the key is the placeholder name, and the value is the resolved data from the application's state.

Step 3: Convert AST to DevExpress Format

import { convertAstToDevextreme } from "sqlparser-devexpress";

const sampleState = {
    "CustomerOrders.OrderID": 76548
};

const devexpressFilter = convertAstToDevextreme(ast, sampleState, true); // Short-circuit enabled (default)

console.log("DevExpress Filter:", JSON.stringify(devexpressFilter, null, 2));

DevExpress Filter Output

[
  ["OrderID", "=", 76548],
  "and",
  [
    ["Status", "=", 1],
    "or",
    ["Status", "=", 3]
  ]
]

API Reference

convertSQLToAst(filterString, enableConsoleLogs = false)

  • Input: SQL WHERE clause as a string.
  • Output: An object { ast } where:
    • ast: The parsed Abstract Syntax Tree.
  • Example:
    const { ast } = convertSQLToAst("OrderID = {CustomerOrders.OrderID} AND Status IN (1, 3)");

convertAstToDevextreme(ast, state, shortCircuit = true)

  • Input:
    • ast: The AST generated from convertSQLToAst().
    • state: An object containing values for placeholders.
    • shortCircuit: (Optional, default true) Enables short-circuiting of value = value expressions for DevExpress compatibility.
  • Output: DevExpress filter array.
  • Example:
    const devexpressFilter = convertAstToDevextreme(ast, sampleState, false); // Disables short-circuiting

DevExtreme with React Example

To see an example of how to use sqlparser-devexpress with DevExtreme DataGrid in React, check out the live example on CodeSandbox:

DevExtreme DataGrid with SQL Filter Example

In this example, SQL WHERE clauses are parsed into an Abstract Syntax Tree (AST) and then transformed into a DevExpress-compatible filter format that is used directly in the DataGrid component for filtering data.

Roadmap

  • Support for additional SQL operators and functions.
  • Improved error handling and validation.

Contributing

Contributions are welcome! Feel free to open issues or submit pull requests.

License

MIT