Terry
Terry

Reputation: 519

string query in a function in kdb

func:{[query] value query};

query is part of my function. I have add some like delete xxx, yyyy from (value query) and some manipulation. I am not sure why when I don't use value "query", the function doesn't work. It said it cannot find the table. So I have to use value query in the function and query is a parameter. I need to pass "select from tab" to the function.

My questions is: how do I send if the filter is a string too?

func["select from tab where a="abc""] <<< this does not work

How can I make string inside a string work?

Also, not sure why if I do

func["select from tab where date = max date"]  it did not work due to length error
but func["100#select from tab where date = max date"] it works ?

The whole function is

getTable:{[query]loadHDB[];.Q.view date where date < .z.D-30;tab:(delete xxxx,yyyyy,sub,ID,subID,tID,subTID,text,gID from((value query)));remove[];update {";"sv @[s;where (s:";"vs x) like "cId=*";:;enlist""]}each eData from (update {";"sv @[s;where (s:";"vs x) like "AId=*";:;enlist""]}each eData from tab)}; 


remove:{[]delete tab from `.};
loadHDB:{[]value "\\l /hdb};

Upvotes: 0

Views: 4270

Answers (2)

Connor Gervin
Connor Gervin

Reputation: 946

You can escape the quotes using backslash http://code.kx.com/wiki/Reference/BackSlash#escape

func["select from tab where a like \"abc\""] 

Edit:

If tab is a HDB table then this length error could point to a column length issue (which 100# is avoiding). What does the following return?

q)checkPartition:{[dt] a!{c!{count get x} each ` sv' x,/:c:({x where not x like "*#"} key[x])except `.d}each a:(` sv' d,/:key[d:hsym `$string dt])};
q)check:checkPartition last date
q)(where{1<count distinct value x}each check)#check

Upvotes: 4

Chromozorz
Chromozorz

Reputation: 461

I like using -3! and also -1 to print the result. If you know what your query should look like if executed from the console then after you construct your string, use -1 to print the string. It should print the query as how it would be executed by the console.

    q)stst:-3!
    q)"select max age by user from tab where col1 like ",stst"Hello"
    "select max age by user from tab where col1 like \"Hello\""
    q)/then to view how it will be executed, use -1
    q)-1"select max age by user from tab where col1 like ",stst"Hello";
    select max age by user from tab where col1 like "Hello"
    q)/looks good

Upvotes: 1

Related Questions