On this page:
define-alias
let-alias
6.2.8.1 Entity aliases
6.2.8.2 Attribute and expression aliases
Version: 4.1.0.4
6.2.8 Aliases

Aliases are Snooze’s mechanism for letting you to refer to individual instances of an entity or expression within a query.

You can introduce aliases for entities, attributes or expressions using the following forms (see below for examples):

(define-alias id expr)

Introduces an alias for expr using the same scoping rules as define.

(let-alias ([id expr] ...) body-expr ...)

Like define-alias but uses the same scoping rules as let.

6.2.8.1 Entity aliases

It is sometimes necessary to refer to more than one instance of an entity within a query. Snooze lets you do this by defining aliases for entities. For example:

  (define-alias father person)

  

  ; Luke's father:

  (find-one

   (sql (select #:what  father

                #:from  (inner person

                               father

                               (= person.father-id father.id))

                #:where (= person.name "Luke"))))

6.2.8.2 Attribute and expression aliases

It is sometimes useful to assign an alias to an attribute or expression.

For example, if you are #:ordering on an expression, SQL 97 requires you to add the same expression to your #:what clause. The only way to do this is to alias the expression:

  ; All people and BMIs, ordered by BMI:

  (let-alias ([bmi (/ person.weight person.height)])

    (find-all

     (sql (select #:what  (person bmi)

                  #:from  person

                  #:order ((asc bmi))))))