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