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 🙏

© 2026 – Pkg Stats / Ryan Hefner

querybuilder-sql-adapter

v2.0.0

Published

Convert SQL WHERE clauses to react-querybuilder RuleGroupType

Readme

querybuilder-sql-adapter

npm version npm downloads License GitHub stars

Turning SQL WHERE Clauses into React QueryBuilder Rules — Introducing querybuilder-sql-adapter

In modern UI platforms that allow users to build complex filters or queries, it’s common to use visual query builders — drag-and-drop UIs that abstract away the raw SQL or backend logic. One popular and powerful library for this is react-querybuilder. But what happens when you already have SQL WHERE clauses and want to visualize or edit them?

That’s exactly the gap this project aims to fill.

Why This Was Needed

In many internal admin tools or no-code platforms, users often write or are provided with SQL WHERE clauses. Developers want to: Parse an existing SQL expression Visualize it in a frontend UI Allow editing using a builder like react-querybuilder

However, react-querybuilder doesn’t natively support converting SQL strings into its RuleGroupType format — and while it provides utilities to generate SQL from rules, the reverse transformation (SQL → rules) was missing.

This project solves that.

What This Project Does

The querybuilder-sql-adapter:

  • Parses SQL WHERE clauses using node-sql-parser
  • Transforms the AST into RuleGroupType format used by react-querybuilder
  • Supports nested expressions, CASE WHEN, COALESCE, IS NULL, BETWEEN, math expressions, and more

Example

const whereClause = `
(
  (field1 + field2 * 2 < 100 OR status IN ('active', 'pending'))
  AND field3 IS NOT NULL
  AND discount BETWEEN 10 AND 50
  AND name LIKE 'A%'
  AND COALESCE(price, CASE WHEN category = 'electronics' THEN 99 ELSE 49 END) = 99
  AND field4 IS NULL
  AND score > COALESCE(discounted_price, CASE WHEN field5 = 'gold' THEN 200 ELSE 100 END)
)
`;

const ruleGroup = parseWhereClauseToRuleGroup(whereClause, fieldSources);

console.log('Parsed RuleGroup:', JSON.stringify(ruleGroup, null, 2));

{
  "combinator": "and",
  "rules": [
    {
      "combinator": "and",
      "rules": [
        {
          "combinator": "and",
          "rules": [
            {
              "combinator": "and",
              "rules": [
                {
                  "combinator": "and",
                  "rules": [
                    {
                      "combinator": "and",
                      "rules": [
                        {
                          "combinator": "or",
                          "rules": [
                            {
                              "field": "(field1 + (field2 * 2))",
                              "operator": "<",
                              "value": 100
                            },
                            {
                              "field": "status",
                              "operator": "in",
                              "value": [
                                "active",
                                "pending"
                              ]
                            }
                          ]
                        },
                        {
                          "field": "field3",
                          "operator": "notNull",
                          "value": null
                        }
                      ]
                    },
                    {
                      "field": "discount",
                      "operator": "between",
                      "value": [
                        10,
                        50
                      ]
                    }
                  ]
                },
                {
                  "field": "name",
                  "operator": "like",
                  "value": "A%"
                }
              ]
            },
            {
              "field": "COALESCE(price, CASE WHEN (category = 'electronics') THEN 99 ELSE 49 END)",
              "operator": "=",
              "value": 99
            }
          ]
        },
        {
          "field": "field4",
          "operator": "null",
          "value": null
        }
      ]
    },
    {
      "field": "score",
      "operator": ">",
      "value": "COALESCE(discounted_price, CASE WHEN (field5 = 'gold') THEN 200 ELSE 100 END)"
    }
  ]
}

Internals

The utility walks the parsed SQL AST and recursively transforms expressions into RuleGroupType rules. It handles:

  • Logical operators: AND, OR
  • Math: field1 + field2 * 3
  • Functions: COALESCE, IFNULL, etc.
  • Null checks: IS NULL, IS NOT NULL
  • Conditional logic: CASE WHEN ... THEN ... END
  • Literal handling: strings, numbers, booleans

Try It Out

npm install querybuilder-sql-adapter

Check out the repository on GitHub: querybuilder-sql-adapter