9.4 Fragment processors
FragmentProcess executes external blocks in @@name(...)<% ... %>. DataQL supplies raw block text and named parameters; the extension interprets and executes them. This example implements a text template.
Implement the processor
package com.example.dataway;
import java.util.Map;
import net.hasor.dataql.domain.Hints;
import net.hasor.dataql.kernel.FragmentProcess;
public class TemplateFragment implements FragmentProcess {
@Override
public Object runFragment(Hints hints, Map<String, Object> parameters, String fragmentString) {
String result = fragmentString.trim();
for (Map.Entry<String, Object> entry : parameters.entrySet()) {
result = result.replace("{{" + entry.getKey() + "}}", String.valueOf(entry.getValue()));
}
return result;
}
}
Register the processor
config is the application’s DatawayConfig; apply these settings before creating Dataway.
import com.example.dataway.TemplateFragment;
config.fragment("template", TemplateFragment::new);
Call from a script
var greeting = @@template(name)<%Hello, {{name}}!%>;
return greeting('Dataway');
Returns "Hello, Dataway!". name is a formal fragment parameter, available through parameters.get("name"). fragmentString contains the text between <% and %>.
Usage notes
runFragment receives Hints, a parameter Map and raw text. The default batchRunFragment calls it for each parameter set; override it for native batching.
The supplier provides a processor during fragment lookup. Shared instances must support concurrent calls. Custom fragments are available within DataQL scripts; console script types remain defined by ApiScriptType.
The SQL executor implements the same interface and registers fragments such as selectSql and updateSql through the FragmentProcessFactory SPI. See SQL executor for setup.