RQL · the RowFold Query Language

What the builder was saying all along.

Every saved view in RowFold is already a query. RQL prints it as a sentence — the same rows, the same engine, in words you can read, diff and paste into a message. It is never the first way to build anything, and never required.

Live in every workspace
A { } control and the search box · reads only, no write verbs · builders unchanged

A receipt, not a source file

You build a view the way you always do — filter chips, a sort, some columns. Press the braces and the same thing is written down:

Invoices
  where Status is not Paid and Due in last 30 days
  sort by Due asc

Same view, same rows, same engine. Nothing was replaced and nothing new ran — this is a printout of a decision you already made, which is why it opens read-only and why most people will never open it at all.

{ }RQL
It is on, and there is nothing to switch on.

That button sits on the view toolbar beside Filter and Sort, on every table in every workspace, from today. The other door needs no button at all — type a clause into the grid’s search box and it takes it.

Both appear wherever you can already reshape the view: any admin, and anyone on a personal view of their own. Pressing it reads — there are no write verbs in the language, so the worst it can do is show you a sentence.

You never start from an empty box

Two things hand you a statement already written.

  • The filter bar you were already using prints one — press the braces and your chips, your sort and your layout are written down.
  • The search box takes one. Type a clause instead of a term and it lands as ordinary filter chips.

Which matters for a reason that has nothing to do with convenience. “Won deals this quarter” does not say which date it means — a deal has a created date, a closed date and a paid date, and something has to choose. Every other product makes that choice invisibly. Printed as a statement, the choice is a word you can see and change:

Deals
  where Stage is Won
  during Created in this quarter vs previous   ← its guess. yours to change.

Fifteen keystrokes, and the rest is Tab

The honest measure of “is it easy to write” is how many keystrokes are not Tab. The grammar is keyword-led so that at every position the legal next thing is a short, typed list — and that list is the visual builder's own dropdown, rendered inline. Same eligibility rules, same source, so autocomplete is never a second opinion about what the server can run.

After a Date fieldbefore after in last between is empty
After a Number> < >= <= between
After a Selectis in — then that field's actual options
After group byonly fields the database can group on
After sum ofonly numeric fields
After havingonly the aliases you declared in show

Names in the text, ids underneath. Rename a field and every mention of it re-prints — forty saved reports do not break.

Two doors, pointing opposite ways

The { } control on the view toolbar opens the panel that reads a query back. The grid search box you already use is the other door: type a clause instead of a term and the magnifier becomes braces, in place, with nothing moving. Press enter and it lands as ordinary filter chips.

It flips only when a clause keyword starts what you typed and it parses — so a customer genuinely called “Where & Sons Ltd” is still just a search, and the failure direction is always back to searching.

Say what no builder can

This is the part that is not convenience. RowFold's engine already compares periods, breaks a report down two ways at once, walks a relationship without a bridging column, and filters groups rather than records. No single screen of controls can offer all four at once. One sentence can:

Orders
  where Status is Won and Amount > 10000
  and {Company.Region} is "North West"
  during Closed in this quarter vs previous
  group by {Company.Region} across Stage
  show sum of Amount as Revenue
  having Revenue > 50000
  sort by Revenue desc   limit 20

One grammar, so you learn it once — but not one surface yet. A view carries the table, the where and the sort by, and a view is where the braces open today; the period, the second axis, the measures, the having and the limit are the report half of the same sentence. The grammar reads all of it and the panel prints all of it. Write a clause a view cannot carry and it comes back named, one line per clause — which is the third promise below, and worth checking rather than believing.

It tells you what it will do, before it does it

Press compile and it does not answer valid or invalid. It tells you what is about to happen — and most of that is good news, so it is not written like an apology:

Warning

Margin is a Formula, so this term can't compile to SQL. The run will sample — and say so.

Plan

3 of 4 terms pushed to the database.

period narrows first ceiling 20,000 sampled · and says so

This is the same discipline as the rest of the product: a read that hit its ceiling says it sampled rather than presenting a prefix as an answer. RQL just says it before you spend the time.

What it will not do

  • It never writes. There are no create, update or delete verbs and there will not be. RQL narrows to a set; the bulk bar you already have acts on it.
  • It never becomes the only way. Every visual builder stays exactly where it is. There is one small control on the toolbar and one clause you can type into search, and most people will use neither.
  • It never quietly drops a clause. Write something a view has no control for and applying it says so, by name, instead of keeping the half it understood and telling you nothing.
  • It never shows you what you cannot see. Completion is trimmed to your permissions on the server, per request, and a name you may not see is refused with the same message as a name that does not exist.

Not built yet

The grammar covers more than the product yet exposes. These are specified and not shipped, and this page will say so until they are.

  • Opening a report or a dashboard tile as a statement. The printer already reads one; there is no control on those pages yet.
  • Ask carrying the statement it is about to apply, behind the same braces, so an answer can be checked rather than trusted.
  • Plain English writing one. Say what you want, read back the statement, change the word you disagree with.
  • Editing the trailing with { } block. It prints; applying it is not offered, because a mistyped binding renders the wrong field rather than returning the wrong rows.