<div dir="ltr"><div><font face="monospace, monospace" size="4">Page 48 of the manual mentions an interesting syntax for:</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">- "computed table names" - eg: `{{c}}` </font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">- "computed column names" - eg: `{c}`</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">...both of kind `Name`.</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">Also, pages 13 and 15 mention syntax for:</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">- field names - eg: `#X` </font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">- record field projection - eg: `e.c`</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">---</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">I'm attempting create a simple demo using this syntax.</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">The demo should define a function (eg `table_to_xml aTable aField`) which accepts a table name and a field name.</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">Then this function is called using different table names and field names, to run some SQL queries and generate some XML. </font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">I haven't found any concrete examples of this sort of thing in the manual or online, so the following is just a wild guess:</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  (* INCORRECT/tableToXml.ur *)</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  table t1 : { F1 : string }</font></div><div><font face="monospace, monospace" size="4">  table t2 : { F2 : string }</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  fun table_to_xml </font></div><div><font face="monospace, monospace" size="4">    aTable       (** OK? **)</font></div><div><font face="monospace, monospace" size="4">    aField       (** OK? **)</font></div><div><font face="monospace, monospace" size="4">  = </font></div><div><font face="monospace, monospace" size="4">    queryX1 </font></div><div><font face="monospace, monospace" size="4">      ( SELECT {aField}     (** OK? **)</font></div><div><font face="monospace, monospace" size="4">        FROM  {{aTable}} )  (** OK? **)      </font></div><div><font face="monospace, monospace" size="4">      ( fn r => </font></div><div><font face="monospace, monospace" size="4">          <xml></font></div><div><font face="monospace, monospace" size="4">            {[r.{aField}]}    (** Q (1) **)</font></div><div><font face="monospace, monospace" size="4">            <br/></font></div><div><font face="monospace, monospace" size="4">          </xml> ) </font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  fun main () =</font></div><div><font face="monospace, monospace" size="4">    t1x <- table_to_xml t1 #F1  (** Q (2) **)</font></div><div><font face="monospace, monospace" size="4">    ;</font></div><div><font face="monospace, monospace" size="4">    t2x <- table_to_xml t2 #F2  (** Q (2) **)</font></div><div><font face="monospace, monospace" size="4">    ;</font></div><div><font face="monospace, monospace" size="4">    return </font></div><div><font face="monospace, monospace" size="4">    <xml><body></font></div><div><font face="monospace, monospace" size="4">      Table 1:<br/></font></div><div><font face="monospace, monospace" size="4">      {t1x} </font></div><div><font face="monospace, monospace" size="4">      <br/><br/></font></div><div><font face="monospace, monospace" size="4">      Table 2:<br/></font></div><div><font face="monospace, monospace" size="4">      {t2x}</font></div><div><font face="monospace, monospace" size="4">    </body></xml></font></div><div><span style="font-family:monospace,monospace"><font size="4"><br></font></span></div><div><font size="4"><span style="font-family:monospace,monospace">This is of course giving compile errors.</span><br></font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">---</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">My two main questions (flagged with comments in the code above) are:</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">Question (1):</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  ( fn r => <xml> {[r.{aField}]} <br/> </xml> ) </font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">The part `r.{aField}` in the body of the anonymous function above appears to be incorrect. </font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">What is the correct way to use `aField` (the actual parameter of the function `table_to_xml`, which calls `queryX1`) in the body of this anonymous function definition?</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">---</font></div><div><font face="monospace, monospace" size="4"> </font></div><div><font face="monospace, monospace" size="4">Question (2):</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  t1x <- table_to_xml t1 #F1 ;</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">The syntax for the field name `#F1` in the function call above appears to be incorrect (and the syntax for the table name `t1` might also be incorrect!). </font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">What is the correct way to pass the table name `t1` and the field name `F1` to this function call?</font></div><div><font size="4"><br></font></div><div><font face="monospace, monospace" size="4">---</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">By the way, as a test, I initially did an even simpler demo using *constant* table names and field names, and that worked fine - eg:</font></div><div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  (* CORRECT/tableToXml.ur *)</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  table t1 : { F1 : string }</font></div><div><font face="monospace, monospace" size="4">  table t2 : { F2 : string }</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  fun t1_to_xml () = </font></div><div><font face="monospace, monospace" size="4">    queryX1 </font></div><div><font face="monospace, monospace" size="4">      ( SELECT t1.F1 FROM t1 )</font></div><div><font face="monospace, monospace" size="4">      ( fn r => <xml>{[r.F1]}<br/></xml> )</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  fun t2_to_xml () = </font></div><div><font face="monospace, monospace" size="4">    queryX1 </font></div><div><font face="monospace, monospace" size="4">      ( SELECT t2.F2 FROM t2 )</font></div><div><font face="monospace, monospace" size="4">      ( fn r => <xml>{[r.F2]}<br/></xml> )</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  fun main () =</font></div><div><font face="monospace, monospace" size="4">    t1x <- t1_to_xml ();</font></div><div><font face="monospace, monospace" size="4">    t2x <- t2_to_xml ();</font></div><div><font face="monospace, monospace" size="4">    return </font></div><div><font face="monospace, monospace" size="4">    <xml><body></font></div><div><font face="monospace, monospace" size="4">      Table 1:<br/></font></div><div><font face="monospace, monospace" size="4">      {t1x} </font></div><div><font face="monospace, monospace" size="4">      <br/><br/></font></div><div><font face="monospace, monospace" size="4">      Table 2:<br/></font></div><div><font face="monospace, monospace" size="4">      {t2x}</font></div><div><font face="monospace, monospace" size="4">    </body></xml></font></div></div><div><font size="4"><br></font></div><div><font face="monospace, monospace" size="4">---</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">So I'm looking for examples of using "computed table names" and "computed field names" - specifically the syntax to use in the following situations:</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">(1) a field name argument `aField` captured in a closure and used in a field projection `{[r.{aField}]}` inside an anonymous function passed to another function `queryX1` - eg:</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  queryX1 </font></div><div><font face="monospace, monospace" size="4">    ( SELECT ... ) </font></div><div><font face="monospace, monospace" size="4">    ( fn r => <xml> {[r.{aField}]} <br/> </xml> )</font></div><div><font face="monospace, monospace" size="4">                      ^^^^^^^^^^</font></div><div><font face="monospace, monospace" size="4">(2) table name and field name arguments `t1` and `#F1` passed to a function invocation - eg:</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">  t1x <- table_to_xml t1 #F1 ;</font></div><div><font face="monospace, monospace" size="4">                      ^^ ^^^</font></div><div><font face="monospace, monospace" size="4">Thanks for any help!</font></div><div><font face="monospace, monospace" size="4"><br></font></div><div><font face="monospace, monospace" size="4">###</font></div><div><br></div></div>