外部代码片段

DataQL 允许在查询中混合其它查询语言,一个典型的场景是把 SQL 语句混合在 DataQL 查询中。例如:

  1. var dataSet = @@sql(item_code) <%
  2. select * from category where co_code = :item_code
  3. %>
  4. return dataSet() => [
  5. { "id","name","code","body" }
  6. ]

定义一个外部执行片段需要使用 @@xxxx<% ….. %> 语法。其中 xxxx 为片段执行器名称。在 <%%> 之间编写外部代码片段。

DataQL 查询在遇到定义外部片段时,会将其转转换成为 Udf 形态。因此执行外部代码片段和执行函数调用是相同的。

上面执行 SQL 的例子中,@@sql 表示这个外部片段执行器的名字是 sql。在创建 DataQL 查询环境时需要注册这个执行器:

  1. DataQL dataQL = Hasor.create().build().getInstance(DataQL.class);
  2. dataQL.addFragmentProcess("sql", ...); //注册外部代码片段执行器

提示

一个外部代码片段执行器需要实现 net.hasor.dataql.FragmentProcess 接口。更多信息请参考开发手册。