MechanicalRabbit / FunSQL.jl

Julia library for compositional construction of SQL queries
https://mechanicalrabbit.github.io/FunSQL.jl
Other
144 stars 5 forks source link

Define: add new columns to a specific position #56

Open xitology opened 5 months ago

xitology commented 5 months ago

Currently, Define adds any new columns at the end of the current column list. This is fine as the default behavior, but it should be possible to insert them at the beginning or at any particular position.

Definitions that are replacing existing columns currently retain their positions. It should be possible to re-position them as if they are new columns.

clarkevans commented 4 months ago

Databricks "ADD COLUMN" has two options:

FIRST If specified the column will be added as the first column of the table, or the field will be added as the first field of in the containing struct. AFTER identifier If specified the column or field will be added immediately after the field or column identifier.

xitology commented 4 months ago

I'm thinking of the following interface:

  1. @funsql define(x => f()): if x already present, preserve its position, otherwise, add it to the end. This is the current behavior.
  2. @funsql define(x => f(), after = true): add or move x to the end.
  3. @funsql define(x => f(), after = y): add or move x to the next position after field y, an error if y does not exist.
  4. @funsql define(x => f(), before = true): add or move x to the beginning.
  5. @funsql define(x => f(), before = y): add or more x to the position right before y, an error if y does not exist.
  6. before and after cannot be both set.