Expand description
Name, type and overload resolution, subquery binding, and the bound logical plan.
Rank 10 in the layer rule. See xtask/layers.toml and spec/18-package-layout.md.
The binder is the pass that turns what someone wrote into what it means. A parse tree says
SELECT x FROM t, and only the binder can say which table t is, which column x is, what
type it has, and therefore what the query does. Everything after this point works on the
answer rather than on the question: the optimizer never resolves a name and the executor never
decides a type.
There are two entry points and the difference between them is what they can return. bind
takes a statement that produces rows and gives back a rudb_plan::Plan, which is what an
optimizer and an executor want. bind_statement takes any statement and gives back a
Bound, which is a plan for a query and a resolved catalog operation for CREATE TABLE,
DROP TABLE and INSERT. DDL is not a plan node, for the reason statement.rs gives.
What it does not do yet is subqueries, window functions, WITH, and every statement outside
those four. Each of those is an error naming what was written rather than a silently wrong
plan, which is the rule the whole front end follows.
Structs§
- Create
Table - A bound
CREATE TABLE. - Drop
Table - A bound
DROP TABLE. - Insert
- A bound
INSERT. - Parameters
- What a prepared statement was handed, by identifier.
Enums§
- Bound
- One statement, bound.
Functions§
- bind
- Binds a parsed statement against a catalog.
- bind_
sql - Parses and binds one query, which is the whole front end in one call.
- bind_
statement - Binds one parsed statement against a catalog.
- bind_
statement_ sql - Parses and binds one statement, which is the whole front end in one call.
- bind_
statement_ with - Binds one parsed statement against a catalog, with values for its parameters.
- bind_
with - Binds a parsed query against a catalog, with values for its parameters.