A MODULE with the LIBRARY option defines a related set of functions meant to be used as a query library (see the LIBRARY function and BUILD action discussions). There are several restrictions on what may be included in a query library. They are:
It may not contain side-effect actions (like OUTPUT or BUILD)
It may not contain definitions with workflow services attached to them (such as PERSIST, STORED, SUCCESS, etc.)
It may only EXPORT:
And may NOT export:
Actions (like OUTPUT or BUILD)
TRANSFORM functions
Other MODULE structures
MACRO definitions
Example:
EXPORT filterDataset(STRING search, BOOLEAN onlyOldies) := MODULE
f := namesTable; //local to the "g" definition
SHARED g := IF (onlyOldies, f(age >= 65), f);
//SHARED = visible only within the structure
EXPORT included := g(surname != search);
EXPORT excluded := g(surname = search);
//EXPORT = visible outside the structure
END;
filtered := filterDataset('Halliday', TRUE);
OUTPUT(filtered.included,,NAMED('Included'));
OUTPUT(filtered.excluded,,NAMED('Excluded'));
//same result, different coding style:
EXPORT filterDataset(BOOLEAN onlyOldies) := MODULE
f := namesTable;
SHARED g := IF (onlyOldies, f(age >= 65), f);
EXPORT included(STRING search) := g(surname <> search);
EXPORT excluded(STRING search) := g(surname = search);
END;
filtered := filterDataset(TRUE);
OUTPUT(filtered.included('Halliday'),,NAMED('Included'));
OUTPUT(filterDataset(true).excluded('Halliday'),,NAMED('Excluded'));
//VIRTUAL examples
Mod1 := MODULE,VIRTUAL //a fully abstract module
EXPORT val := 1;
EXPORT func(INTEGER sc) := val * sc;
END;
Mod2 := MODULE(Mod1) //instance
EXPORT val := 3; //a concete member, overriding default value
//while func remains abstract
END;
Mod3 := MODULE(Mod1) //a fully concete instance
EXPORT func(INTEGER sc) := val + sc; //overrides inherited func
END;
OUTPUT(Mod2.func(5)); //result is 15
OUTPUT(Mod3.func(5)); //result is 6
//FORWARD example
EXPORT MyModule := MODULE, FORWARD
EXPORT INTEGER foo := bar;
EXPORT INTEGER bar := 42;
END;
MyModule.foo;
See Also: FUNCTION Structure, Definition Visibility, INTERFACE Structure, LIBRARY, BUILD