File size: 1,346 Bytes
9afbea6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import fetch from 'node-fetch';
import { TeaQLClient, QueryParser } from '../../../../src';
import { Q } from '../../ts-lib-core/src/generated/Q';

// 1. Initialize TFP Client, pointing to the Rust backend
const client = new TeaQLClient({
  baseUrl: 'http://127.0.0.1:3001',
  fetch: fetch as any
});

// 2. Prepare request context
const ctx = { client };

async function runDynamicExamples() {
  try {
    console.log("=== Dynamic String Query Examples ===");

    // Example A: Dynamic filtering query
    const filterQuery = 'Q.tasks().withNameContaining("bug")';
    console.log(`[Execution]: ${filterQuery}`);
    
    // Parse the string DSL into AST and execute (pass entry object Q)
    const filterRequest = QueryParser.parse(filterQuery, Q);
    const filterResult = await filterRequest.executeForList(ctx);
    console.log("Result:", filterResult);

    // Example B: Dynamic aggregation and grouping
    const userQueryStr = 'Q.tasks().withNameContaining("bug").facetByStatusAs("statusFacet", Q.taskStatuses().count())';
    console.log(`\n[Execution]: ${userQueryStr}`);
    
    const aggRequest = QueryParser.parse(userQueryStr, Q);
    const aggResult = await aggRequest.executeForList(ctx);
    console.log("Result:", aggResult);

  } catch (err) {
    console.error("Query execution failed:", err);
  }
}

runDynamicExamples();