-
QSQL – Names in subphrases
Hi Team,
I have a question regarding the namespace resolution in QSQL subphrases.
In the language doc: https://code.kx.com/q/basics/qsql/#names-in-subphrases , it mentions that
- A name in a subphrase is resolved (in order) as the name of
- column or key name
- local name in (or argument of) the encapsulating function
- global name in the current working namespace not necessarily the space in which the function was defined
Could you help explain why the space in which the function was defined was skipped? Aka why not
- column or key name
- local name in (or argument of) the encapsulating function
- names in the space in which function was defined
- global name in the current working namespace
The following code illustrates that: indeed, the namespace in which the function was defined is skipped.
Because, if we call my_func in the update clause, q will complain with: ‘my_func.
Instead, if we call with .test.my_func, it works ok.
system “d .test”; my_func: { (`a`b`c!`aa`ba`ca)[x] }; my_main: {[t] show my_func; /tbl: update my_func each col1 from t; / NOT work tbl: update .test.my_func each col1 from t; / work OK tbl }; system “d .”; t: ([] col1: `a`a`b`c`b`a`d; col2: 1 2 3 4 5 6 7); show .test.my_main[t]; exit 0;
However, this feature is not that intuitive. I believe it makes sense for a user to define a helper function within a namespace and use that directly in subsequent “main” functions.
Would you please explain the reason behind the current rule of “Names in subphrases”? Thanks.
- A name in a subphrase is resolved (in order) as the name of
Sorry, there were no replies found.
Log in to reply.