dt-sql-parser icon indicating copy to clipboard operation
dt-sql-parser copied to clipboard

Feat/benchmark

Open JackWang032 opened this issue 1 year ago • 1 comments

Support benchmark for all languages

使用

运行基准测试命令

 pnpm run benchmark

终端中选择对应需要基准性能测试的SQL语言

配置信息

在benchmark/run.ts中维护配置信息

type TestFile = {
    /** Benchmark Name */
    name: string;
    /** Test sql name */
    sqlFileName: string;
    /** Test run times */
    loopTimes?: number;
    /** Test method name of parser */
    testTypes: string[];
    /** Exclude languages */
    excludes?: Language[];
    /** Include languages */
    includes?: Language[];
};

const testFiles: TestFile[] = [
    {
        name: 'Query Collection (100 Rows)',
        sqlFileName: 'select.sql',
        loopTimes: 3,
        testTypes: ['validate', 'getAllTokens'],
        excludes: ['plsql', 'postgresql'],
    },
    {
        name: 'Select All Entities',
        sqlFileName: 'select.sql',
        loopTimes: 1,
        testTypes: ['getAllEntities'],
        includes: ['hive'],
    },
    {
        name: 'Create Table (100 Rows)',
        sqlFileName: 'create.sql',
        loopTimes: 3,
        testTypes: ['validate', 'getAllTokens'],
        excludes: ['plsql', 'postgresql'],
    },
];

注意点

默认对testTypes中的方法传入的参数为对应语言的sql字符串,如需自定义参数,在/benchmark/data/目录下新建params.json文件进行配置,如需取默认的sql参数,则可传入$sql,可参考如下

{
    "create": {
        "validate": ["$sql"],
        "getAllTokens": ["$sql"],
        "getAllEntities": ["$sql", { "lineNumber": 8, "column": 1 }]
    },
    "select": {
        "validate": ["$sql"],
        "getAllTokens": ["$sql"],
        "getAllEntities": ["$sql", { "lineNumber": 8, "column": 1 }]
    }
}

image

运行结果

image

默认不保存每次的测试结果,测试结果信息会保存在/benchmark/reports/xxx.benchmark.md,以下是一次结果案例 image

JackWang032 avatar Mar 19 '24 07:03 JackWang032

#247

HaydenOrz avatar Mar 19 '24 07:03 HaydenOrz

@HaydenOrz @liuxy0551 新增了传入参数方式,看下是否符合场景

JackWang032 avatar May 31 '24 08:05 JackWang032