Skip to main content
Version: 7.0

NESTEDSESSION operator

The NESTEDSESSION operator creates an action that executes the other action in a nested session.

Syntax

NESTEDSESSION [SINGLE] action

Description

The NESTEDSESSION operator creates an action that executes the other action in a nested session. Applying changes inside the nested session copies them back into the surrounding session rather than committing to the database.

Parameters

  • SINGLE

    Optional keyword. If the NESTEDSESSION is itself called inside an apply transaction, this flag is propagated to the inner action: changes to stored properties used by it are flushed incrementally during the transaction instead of being batched at the end of the apply.

  • action

    A context-dependent action operator that defines an action to be executed in the nested session.

Examples

testNestedSession ()  {
NESTEDSESSION {
name(Sku s) <- 'aaa';
// in fact, the changes will not be applied to the database, but to the "upper" session
APPLY;
}

MESSAGE (GROUP SUM 1 IF name(Sku s) == 'aaa'); // returns all rows
CANCEL;
// returns NULL if there was no Sku named aaa in the database before
MESSAGE (GROUP SUM 1 IF name(Sku s) == 'aaa');

}

FORM sku
OBJECTS s = Sku PANEL
PROPERTIES(s) id, name
;
newNestedSession() {
NESTEDSESSION {
NEW s = Sku {
// shows the form, but any changes in it will not be applied to the database,
// but will be saved in the "upper session" session
SHOW sku OBJECTS s = s;
}
}
}

// SINGLE — only meaningful when NESTEDSESSION is itself executed inside an apply transaction
recalcNested () {
APPLY {
NESTEDSESSION SINGLE {
// changes here are flushed incrementally during the outer apply
name(Sku s) <- 'recalculated';
}
}
}