适用于低代码平台的多数据源适配方法及系统转让专利

申请号 : CN202410039393.0

文献号 : CN117555920B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴浩然朱晶晶王卿

申请人 : 冠骋信息技术(苏州)有限公司

摘要 :

本发明提供一种适用于低代码平台的多数据源适配方法和系统,涉及数据处理领域,包括通过基础语法生成器对输入参数对应的标准输入数据进行解析,生成基础语句;如果标准输入数据中包含过滤条件部分,使用条件表达式解析器对过滤条件部分进行解析,提取过滤语句,和基础语句组成中间语言;初始化数据库语言翻译器、结果集转换器,通过数据库语言翻译器将中间语言映射成目标语言,由数据库语言执行器执行目标语言;执行目标语言完成时,获得目标数据库的原始结果集,根据原始结果集的列名、列数据类型和数据类型映射配置,创建中间数据结构,通过输出数据格式化器转变成输出参数。

权利要求 :

1.适用于低代码平台的多数据源适配方法,其特征在于,包括:

通过基础语法生成器对所获取的输入参数对应的标准输入数据进行解析,生成基础语句;判断所述标准输入数据中是否包含过滤条件,如果包含,使用条件表达式解析器对所述过滤条件进行解析,生成条件语法树,提取过滤语句,将所述基础语句和所述过滤语句组合,构成中间语言;

读取预设的目标数据库的类型配置,初始化与所述目标数据库对应的数据库语言翻译器、结果集转换器,通过所述数据库语言翻译器将所述中间语言映射成所述目标数据库的目标语言,由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言;

所述数据库语言执行器执行所述目标语言完成时,获得所述目标数据库的原始结果集,根据所述原始结果集的列名、列数据类型和预设的数据类型映射配置,使用所述结果集转换器创建中间数据结构,基于所述中间数据结构将所述原始结果集映射成中间数据结果集,通过输出数据格式化器将所述中间数据结果集转变成输出参数。

2.根据权利要求1所述的方法,其特征在于,通过基础语法生成器对所获取的输入参数对应的标准输入数据进行解析,生成基础语句;判断所述标准输入数据中是否包含过滤条件部分,如果包含,使用条件表达式解析器对所述过滤条件部分进行解析,生成条件语法树,提取过滤语句,将所述基础语句和所述过滤语句组合,构成中间语言包括:使用输入数据格式化器对输入参数进行格式化,得到标准输入数据;所述标准输入数据中的基础数据部分通过基础语法生成器,解析生成基础语句;

判断所述标准输入数据中是否包含过滤条件,如果包含,使用条件表达式解析器中的分词解析器对所述过滤条件进行解析,划分词法单元,经过条件表达式解析器中的语法分析器对所述词法单元进行处理,生成条件语法树;

对所述条件语法树进行合并和优化,提取过滤语句,将所述基础语句和所述过滤语句组合,构成中间语言。

3.根据权利要求2所述的方法,其特征在于,使用条件表达式解析器中的分词解析器对所述过滤条件部分进行解析,划分词法单元,经过条件表达式解析器中的语法分析器对所述词法单元进行处理,生成条件语法树,包括:根据所述过滤条件的类型,根据比较操作、逻辑操作和函数表达式定义正则表达式,分词解析器根据所述正则表达式,对所述过滤条件进行解析,拆分成词法单元;

根据过滤条件的组合方式,制定语法规则,为每种所述语法规则设置对应的解析单元,所述解析单元构成语法分析器,每种所述解析单元处理对应的词法单元;

如果所述词法单元包含嵌套结构,所述解析单元根据语法规则调用其他解析单元,通过所述解析单元的递归调用,创建相应类型的语法树节点,所述语法树节点组合成条件语法树,其中,所述语法树节点包括:比较操作节点、逻辑操作节点和函数表达式节点。

4.根据权利要求3所述的方法,其特征在于,对所述条件语法树进行合并和优化,提取过滤语句,包括:遍历所述条件语法树的全部节点,将重复含义的节点删除;

识别比较操作节点和逻辑操作节点,相邻的同类型节点合并成一个节点,删除其他节点;对于逻辑操作节点,根据预设的优化规则和逻辑判断,删除不可达的逻辑操作节点;

识别函数表达式节点,计算函数表达式对应的函数值,用所述函数值替代所述函数表达式节点;

根据数据库的索引信息,对全部节点进行重新组织,使节点的顺序和所述索引信息对应;

通过遍历优化后的条件语法树的全部节点,提取节点操作片段,根据语法规则,将所述节点操作片段组合成条件语句片段,所有所述条件语句片段组合成过滤语句。

5.根据权利要求1所述的方法,其特征在于,通过所述数据库语言翻译器将所述中间语言映射成所述目标数据库的目标语言,由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言包括:遍历所述中间语言的过滤语句对应的条件语法树,对所述条件语法树中每个节点生成对应的所述目标数据库的查询语句片段;

基于每个目标数据库对应的预设映射规则,并且结合所述条件语法树中每个节点的节点类型,并结合所述目标数据库的语法规范,将所述查询语句片段映射为所述目标数据库的目标语言;

由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言。

6.根据权利要求5所述的方法,其特征在于,基于每个目标数据库对应的预设映射规则,并且结合所述条件语法树中每个节点的节点类型,并结合所述目标数据库的语法规范,将所述查询语句片段映射为所述目标数据库的目标语言包括:若所述条件语法树中节点类型为SELECT类型,根据所述目标数据库的语法规范,构建SELECT语句片段,将所述SELECT语句片段中的列名映射到目标数据库的列名;

若所述条件语法树中节点类型为FROM类型,根据所述目标数据库的语法规范,构建FROM语句片段,并将所述FROM语句片段的表名映射到到目标数据库的表名,并处理任何JOIN操作,确保联接条件正确映射;

若所述条件语法树中节点类型为WHERE类型,根据所述目标数据库的语法规范,构建WHERE语句片段,并将所述WHERE语句片段的操作符、列名和语句值映射到目标数据库的等效项。

7.根据权利要求1所述的方法,其特征在于,所述数据库语言执行器执行所述目标语言完成时,获得所述目标数据库的原始结果集,还包括:发生执行错误时,根据所述目标数据库类型配置初始化的错误码转换器,将所述执行错误对应的错误信息映射成中间错误信息,再通过输出数据格式化器转变成输出参数。

8.适用于低代码平台的多数据源适配系统,用于实现前述权利要求1至7中任一项所述的适用于低代码平台的多数据源适配方法,其特征在于,包括:第一单元,用于通过基础语法生成器对所获取的输入参数对应的标准输入数据进行解析,生成基础语句;判断所述标准输入数据中是否包含过滤条件部分,如果包含,使用条件表达式解析器对所述过滤条件部分进行解析,生成条件语法树,提取过滤语句,将所述基础语句和过滤语句组合,构成中间语言;

第二单元,用于读取预设的目标数据库的类型配置,初始化与所述目标数据库对应的数据库语言翻译器、结果集转换器,通过所述数据库语言翻译器将所述中间语言映射成所述目标数据库的目标语言,由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言;

第三单元,用于所述数据库语言执行器执行所述目标语言完成时,获得所述目标数据库的原始结果集,根据所述原始结果集的列名、列数据类型和预设的数据类型映射配置,使用所述结果集转换器创建中间数据结构,基于所述中间数据结构将所述原始结果集映射成中间数据结果集,通过输出数据格式化器将所述中间数据结果集转变成输出参数。

9.一种电子设备,其特征在于,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器被配置为调用所述存储器存储的指令,以执行权利要求1至7中任意一项所述的方法。

10.一种计算机可读存储介质,其上存储有计算机程序指令,其特征在于,所述计算机程序指令被处理器执行时实现权利要求1至7中任意一项所述的方法。

说明书 :

适用于低代码平台的多数据源适配方法及系统

技术领域

[0001] 本发明涉及数据处理技术,尤其涉及一种适用于低代码平台的多数据源适配方法和系统。

背景技术

[0002] 低代码平台由于其能够快速构建应用的特点,目前已在各行各业都有了较为广泛的使用。低代码平台创建应用的常规做法是依赖大量的可视化配置和少量的代码开发来完成应用的构建。随着需求的不断迭代,目前具备竞争力的低代码平台需要能够支持多种数据源的部署,来应对不同使用方对数据库类型的偏好问题;
[0003] CN201810675736.7,公开了一种智能适配多数据源的实现方法,涉及数据源处理的技术领域,包括以下步骤:步骤1.配置数据源的关键信息;步骤2.根据需操控的数据源的关键信息定义调用方法的方法名;步骤3.将调用方法的方法名和数据源的关键信息进行匹配,根据匹配结果确定该调用方法使用的数据源。该方法通过在项目工程中的配置文件里配置数据源信息,便于随时更改数据源信息,避免了开发过程中,需要一一设置每个调用方法操控的数据源,通过智能解析每个调用方法操控的数据源,减少了代码冗余性,提高了开发效率,又易于维护;
[0004] CN202111476466.5,公开了基于动态多数据源的数据库适配装置及方法,属于数据库技术领域,要解决的技术问题为如何解决动态对接多源数据执行开发复杂度高。包括:内存数据库,用于存储数据源信息;数据库关键字库,用于存储已适配数据库类型的所有关键字;语法差异库,用于存储语法差异,所述语法差异为关系型数据库之间语法内容的差异;语法适配器,用于基于数据库信息获取数据库类型,并基于数据库类型对SQL语句进行语法解析和转换,得到适配SQL语句;SQL执行器,所述SQL执行器与所述语法适配器交互,用于基于数据库类型加载驱动对应的数据库,数据库执行适配SQL语句后,输出执行结果;
[0005] 综上所述,现有技术主要是通过不同方法的调用、通过对语句关键信息的差异的平衡以及在不同数据源版本之间切换,来处理多数据源的适配,存在开发成本高,新增差异扩展不便的缺点,本发明的应用至少能够解决现有技术的部分问题。

发明内容

[0006] 本发明实施例提供一种适用于低代码平台的多数据源适配方法和系统,至少能够解决现有技术中部分问题。
[0007] 本发明实施例的第一方面,
[0008] 提供一种适用于低代码平台的多数据源适配的方法,包括:
[0009] 通过基础语法生成器对所获取的输入参数对应的标准输入数据进行解析,生成基础语句;判断所述标准输入数据中是否包含过滤条件部分,如果包含,使用条件表达式解析器对所述过滤条件部分进行解析,生成条件语法树,提取过滤语句,将所述基础语句和过滤语句组合,构成中间语言;
[0010] 读取预设的目标数据库的类型配置,初始化与所述目标数据库对应的数据库语言翻译器、结果集转换器,通过所述数据库语言翻译器将所述中间语言映射成所述目标数据库的目标语言,由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言;
[0011] 所述数据库语言执行器执行所述目标语言完成时,获得所述目标数据库的原始结果集,根据所述原始结果集的列名、列数据类型和预设的数据类型映射配置,使用所述结果集转换器创建中间数据结构,基于所述中间数据结构将所述原始结果集映射成中间数据结果集,通过输出数据格式化器将所述中间数据结果集转变成输出参数。
[0012] 在一种可选的实施例中,
[0013] 使用输入数据格式化器对输入参数进行格式化,得到标准输入数据;所述标准输入数据中的基础数据部分通过基础语法生成器,解析生成基础语句;
[0014] 判断所述标准输入数据中是否包含过滤条件部分,如果包含,使用条件表达式解析器中的分词解析器对所述过滤条件部分进行解析,划分词法单元,经过条件表达式解析器中的语法分析器对所述词法单元进行处理,生成条件语法树;
[0015] 对所述条件语法树进行合并和优化,提取过滤语句,将所述基础语句和过滤语句组合,构成中间语言。
[0016] 在一种可选的实施例中,
[0017] 使用条件表达式解析器中的分词解析器对所述过滤条件部分进行解析,划分词法单元,经过条件表达式解析器中的语法分析器对所述词法单元进行处理,生成条件语法树,包括:
[0018] 根据所述过滤条件的类型,对比较操作、逻辑操作和函数表达式定义正则表达式,分词解析器根据所述正则表达式,对所述过滤条件部分进行解析,拆分成词法单元;
[0019] 根据过滤条件的组合方式,制定语法规则,为每种所述语法规则设置对应的解析单元,所述解析单元构成语法分析器,每种所述解析单元处理对应的词法单元;
[0020] 如果所述词法单元包含嵌套结构,所述解析单元根据语法规则调用其他解析单元,通过所述解析单元的递归调用,创建相应类型的语法树节点,所述语法树节点组合成条件语法树,其中,所述语法树节点包括:比较操作节点、逻辑操作节点和函数表达式节点。
[0021] 在一种可选的实施例中,
[0022] 对所述条件语法树进行合并和优化,提取过滤语句,包括:
[0023] 遍历所述条件语法树的全部节点,将重复含义的节点删除;
[0024] 识别比较操作节点和逻辑操作节点,相邻的同类型节点合并成一个节点,删除其他节点;对于逻辑操作节点,根据预设的优化规则和逻辑判断,删除不可达的所述逻辑操作节点;
[0025] 识别函数表达式节点,计算函数表达式对应的函数值,用所述函数值替代所述函数表达式节点;
[0026] 根据数据库的索引信息,对全部节点进行重新组织,使节点的顺序和所述索引信息对应;
[0027] 通过遍历优化后的条件语法树的全部节点,提取节点操作片段,根据语法规则,将所述节点操作片段组合成条件语句片段,所有所述条件语句片段组合成过滤语句。
[0028] 在一种可选的实施例中,
[0029] 通过所述数据库语言翻译器将所述中间语言映射成所述目标数据库的目标语言,由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言包括:
[0030] 遍历所述中间语言的过滤语句对应的条件语法树,对所述条件语法树中每个节点生成对应的所述目标数据库的查询语句片段;
[0031] 基于每个目标数据库对应的预设映射规则,并且结合所述条件语法树中每个节点的节点类型,并结合所述目标数据库的语法规范,将所述查询语句片段映射为所述目标数据库的目标语言;
[0032] 由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言。
[0033] 在一种可选的实施方式中,
[0034] 基于每个目标数据库对应的预设映射规则,并且结合所述条件语法树中每个节点的节点类型,并结合所述目标数据库的语法规范,将所述查询语句片段映射为所述目标数据库的目标语言包括:
[0035] 若所述条件语法树中节点类型为SELECT类型,根据所述目标数据库的语法规范,构建SELECT语句片段,将所述SELECT语句片段中的列名映射到目标数据库的列名;
[0036] 若所述条件语法树中节点类型为FROM类型,根据所述目标数据库的语法规范,构建FROM语句片段,并将所述FROM语句片段的表名映射到到目标数据库的表名,并处理任何JOIN操作,确保联接条件正确映射;
[0037] 若所述条件语法树中节点类型为WHERE类型,根据所述目标数据库的语法规范,构建WHERE语句片段,并将所述WHERE语句片段的操作符、列名和语句值映射到目标数据库的等效项。
[0038] 在一种可选的实施例中,
[0039] 所述数据库语言执行器执行所述目标语言完成时,获得所述目标数据库的原始结果集,还包括:
[0040] 发生执行错误时,根据所述目标数据库类型配置初始化的错误码转换器,将所述执行错误对应的错误信息映射成中间错误信息,再通过输出数据格式化器转变成输出参数。
[0041] 本发明实施例的第二方面,
[0042] 提供一种适用于低代码平台的多数据源适配系统,包括:
[0043] 第一单元,用于通过基础语法生成器对所获取的输入参数对应的标准输入数据进行解析,生成基础语句;判断所述标准输入数据中是否包含过滤条件部分,如果包含,使用条件表达式解析器对所述过滤条件部分进行解析,生成条件语法树,提取过滤语句,将所述基础语句和过滤语句组合,构成中间语言;
[0044] 第二单元,用于读取预设的目标数据库的类型配置,初始化与所述目标数据库对应的数据库语言翻译器、结果集转换器,通过所述数据库语言翻译器将所述中间语言映射成所述目标数据库的目标语言,由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言;
[0045] 第三单元,用于所述数据库语言执行器执行所述目标语言完成时,获得所述目标数据库的原始结果集,根据所述原始结果集的列名、列数据类型和预设的数据类型映射配置,使用所述结果集转换器创建中间数据结构,基于所述中间数据结构将所述原始结果集映射成中间数据结果集,通过输出数据格式化器将所述中间数据结果集转变成输出参数。
[0046] 本发明实施例的第三方面,
[0047] 提供一种电子设备,包括:
[0048] 处理器;
[0049] 用于存储处理器可执行指令的存储器;
[0050] 其中,所述处理器被配置为调用所述存储器存储的指令,以执行前述所述的方法。
[0051] 本发明实施例的第四方面,
[0052] 提供一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现前述所述的方法。
[0053] 在本发明的实施例中,确保输入参数的规范性和一致性,可以提高系统的稳定性;使用条件表达式解析器对过滤条件进行解析,提高了条件表达式的处理效率和准确性;通过分词解析器和语法分析器的协同工作,使表达式解析器能够解析和理解复杂的过滤条件,可以更清楚的构建条件语法树;通过减少了语法树的冗余,提高了查询语句的简洁性;
重新组织节点顺序,使得节点的顺序与数据库索引信息相对应,有助于优化数据库查询的性能;针对函数表达式节点的计算,提高执行效率;通过读取配置信息,实现了目标数据库类型的可配置性,用户通过可配置的方式轻松更改目标数据库类型;通过映射规则,将中间语言的查询语句映射为目标数据库的语法规范,以提高查询性能;使用结果集转换器进行数据类型映射和转换,解决了数据库差异性带来的数据类型不一致问题;创建中间数据结构,有助于在系统内部保持数据的一致性;通过错误码转换器,实现不同目标数据库的错误码与中间标准错误码的映射,提供了标准化的错误码处理机制;通过中间错误信息的映射和格式化,使错误发生时返回的信息结构一致,提高了可维护性和可读性;通过引入错误码转换器和中间错误信息的映射,更容易适应未来可能引入的新的目标数据库类型。

附图说明

[0054] 图1为本发明实施例适用于低代码平台的多数据源适配方法的流程示意图;
[0055] 图2为本发明实施例适用于低代码平台的多数据源适配系统的结构示意图。

具体实施方式

[0056] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0057] 下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
[0058] 图1为本发明实施例适用于低代码平台的多数据源适配方法的流程示意图,如图1所示,所述方法包括:
[0059] S101.通过基础语法生成器对所获取的输入参数对应的标准输入数据进行解析,生成基础语句;判断所述标准输入数据中是否包含过滤条件部分,如果包含,使用条件表达式解析器对所述过滤条件部分进行解析,生成条件语法树,提取过滤语句,将所述基础语句和过滤语句组合,构成中间语言;
[0060] 所述基础语句具体是指数据库的主要关键字及基本语法形式,是数据库操作语句的最基本单元,包含:查询语句 (SELECT),插入语句 (INSERT),更新语句(UPDATE),删除语句 (DELETE),不包含条件语句(WHERE);基础语句满足基本的数据库操作需求;
[0061] 使用输入数据格式化器判断输入参数是否缺失,在需要时填充默认值,并通过参数校验、格式化、类型转换的方式,确保输入参数的规范性和一致性,得到标准输入数据;
[0062] 通过基础语法生成器对标准输入数据进行解析,根据操作语句单元,确定操作类型选择对应的基础语句相应的基础模板,包括查询模板、插入模板、删除模板、更新模板,提取基础数据部分,融合进模板内,生成基础语句。
[0063] 通过判断是否存在条件关键字或特定标识来判断标准输入数据中是否包含过滤条件部分,如果存在过滤条件部分,使用条件表达式解析器对过滤条件部分进行解析,拆解成词法单元,并构建条件语法树,从条件语法树中提取过滤语句,将生成的基础语句和提取的过滤语句进行组合,构建中间语言,更方便的与各目标数据库的数据库语言进行映射;
[0064] 在本实施例中,确保输入参数的规范性和一致性,可以提高系统的稳定性;通过定义基本的语法规范,实现对标准输入数据的解析,使适应不同类型的基础数据;使用条件表达式解析器对过滤条件进行解析,提高了条件表达式的处理效率和准确性;将基础语句和过滤语句组合成中间语句,为后续的处理提供了统一的输入格式,提高了灵活型和可适配性。
[0065] 在一种可选的实施例中,
[0066] 使用输入数据格式化器对输入参数进行格式化,得到标准输入数据;所述标准输入数据中的基础数据部分通过基础语法生成器,解析生成基础语句;
[0067] 判断所述标准输入数据中是否包含过滤条件部分,如果包含,使用条件表达式解析器中的分词解析器对所述过滤条件部分进行解析,划分词法单元,经过条件表达式解析器中的语法分析器对所述词法单元进行处理,生成条件语法树;
[0068] 对所述条件语法树进行合并和优化,提取过滤语句,将所述基础语句和过滤语句组合,构成中间语言。
[0069] 接收原始输入参数,校验参数的合法性和完整性,给缺失值的参数填充默认值,对参数进行格式化和必要的类型转换,使输入参数形式和结构上统一;使用基础语法生成器对经过格式化后的标准输入数据进行解析,分析操作类型,适配类型模板,从标准输入数据中提取基础数据部分,将基础数据融合进类型模板中生成基础语句,基础语句包括操作类型、表名、字段名;
[0070] 检查标准输入数据中是否包含过滤条件,如果没有包含过滤条件,则直接应用基础语句;
[0071] 如果包含过滤条件,将过滤条件部分传递给条件表达式解析器,其中的分词解析器对过滤条件进行扫描,依据设定好的中间语法规则将其拆分成词法单元,词法单元包含字段名、操作符、数值等,将词法单元传递给其中的语法分析器,依据设定的各种语法规则,将词法单元通过解析函数构建成条件语法树节点,直到词法单元全部构建完成,获得条件语法树;
[0072] 对条件语法树进行合并与优化,精简语法树结构,清理冗余节点,提升后续处理的效率,从中优化后的语法树中提取出过滤语句,将基础语句和过滤语句组合在一起,形成中间语言。
[0073] 在本实施例中,通过分词解析器和语法分析器的协同工作,使表达式解析器能够解析和理解复杂的过滤条件,可以更清楚的构建条件语法树;通过条件语法树的合并与优化,可以精简节点,提升执行效率;基础语句和过滤语句的组合可以提高后续映射目标语言的方便程度,具有较好的兼容性和可执行性。
[0074] 在一种可选的实施例中,
[0075] 使用条件表达式解析器中的分词解析器对所述过滤条件部分进行解析,划分词法单元,经过条件表达式解析器中的语法分析器对所述词法单元进行处理,生成条件语法树,包括:
[0076] 根据所述过滤条件的类型,对比较操作、逻辑操作和函数表达式定义正则表达式,分词解析器根据所述正则表达式,对所述过滤条件部分进行解析,拆分成词法单元;
[0077] 根据过滤条件的组合方式,制定语法规则,为每种所述语法规则设置对应的解析单元,所述解析单元构成语法分析器,每种所述解析单元处理对应的词法单元;
[0078] 如果所述词法单元包含嵌套结构,所述解析单元根据语法规则调用其他解析单元,通过所述解析单元的递归调用,创建相应类型的语法树节点,所述语法树节点组合成条件语法树,其中,所述语法树节点包括:比较操作节点、逻辑操作节点和函数表达式节点。
[0079] 所述解析单元具体是指根据不同语法规则制定的,可以在语法解析过程中负责处理对应语法规则的模块、组件和方法,解析单元根据对应类型的语法规则将词法单元组合成语法树的节点;
[0080] 针对比较操作、逻辑操作和函数表达式,为每个类型定义相应的正则表达式,对于比较操作,定义正则表达式来匹配字段名、比较符和字段值的结构;对于逻辑操作,定义正则表达式来匹配逻辑运算符和两个条件的结构;对于函数表达式,定义正则表达式来匹配函数名和参数的结构;
[0081] 使用正则表达式进行分词解析,将过滤条件拆分成词法单元,词法单元包括字段名、比较符、字段值、逻辑运算符、括号等;
[0082] 定义语法规则,其表明不同类型的词法单元组合成语法树结构的方式,同时定义条件语法树的节点,包括比较操作节点、逻辑操作节点和函数表达式节点;
[0083] 为每个语法规则定义解析单元,负责处理对应类型的语法结构,解析单元包括比较操作解析单元、逻辑操作解析单元和函数表达式解析单元;当词法单元存在嵌套结构,即一种类型的词法单元中还包含一种或者多种类型的词法单元,需要在解析单元中根据语法规则调用其他解析单元,组合成相应类型的语法树节点,构建更高层次的语法结构,通过递归调用逐步构建条件语法树。
[0084] 在本实施例中,使用正则表达式进行分词解析,确保对比较操作、逻辑操作和函数表达式的精确匹配;制定清晰的语法规则,使得语法树的构建更具可维护性和可扩展性;解析单元的定义和语法规则对应,使解析过程的逻辑结构清晰,易于理解和修改;使用递归调用的方式处理嵌套结构,使条件语法树能够灵活地处理多层次的条件组合,为处理不同类型的条件提供了一致的方式,提高了重用性。
[0085] 在一种可选的实施例中,
[0086] 对所述条件语法树进行合并和优化,提取过滤语句,包括:
[0087] 遍历所述条件语法树的全部节点,将重复含义的节点删除;
[0088] 识别比较操作节点和逻辑操作节点,相邻的同类型节点合并成一个节点,删除其他节点;对于逻辑操作节点,根据预设的优化规则和逻辑判断,删除不可达的所述逻辑操作节点;
[0089] 识别函数表达式节点,计算函数表达式对应的函数值,用所述函数值替代所述函数表达式节点;
[0090] 根据数据库的索引信息,对全部节点进行重新组织,使节点的顺序和所述索引信息对应;
[0091] 通过遍历优化后的条件语法树的全部节点,提取节点操作片段,根据语法规则,将所述节点操作片段组合成条件语句片段,所有所述条件语句片段组合成过滤语句。
[0092] 从条件语法树的根节点开始,使用深度优先遍历算法进行遍历,确保可以完整遍历条件语法树;在遍历过程中,通过比较节点的内容和类型,识别并删除具有重复含义的节点,以减少语法树的冗余;
[0093] 对于比较操作节点,可以将相邻的节点合并,形成一个更简洁的比较操作节点;对于逻辑操作节点,根据预设的优化规则和逻辑判断,删除不可达的逻辑操作节点,确保逻辑表达式的简洁性;识别函数表达式节点,计算函数表达式对应的函数值,使用计算得到的函数值替代原始的函数表达式节点,减少在执行过程中的计算负担;
[0094] 根据数据库的索引信息,对节点进行重新组织,使得节点的顺序和索引信息对应,有助于优化数据库查询的性能,使得查询过滤更符合索引的使用;
[0095] 遍历优化后的条件语法树的全部节点,根据语法规则,提取每个节点的比较操作、逻辑操作和函数调用操作组成节点操作片段,将提取的节点操作片段根据语法规则组合成条件语句片段,所有条件语句片段组合成过滤语句。
[0096] 在本实施例中,通过识别和删除具有相同含义的节点,减少了语法树的冗余,提高了查询语句的简洁性;重新组织节点顺序,使得节点的顺序与数据库索引信息相对应,有助于优化数据库查询的性能,减少了查询的时间复杂度;合并相邻的同类型节点,删除不可达的逻辑操作节点,使得逻辑表达式更为简洁,提高了条件语法树的可读性和执行效率;针对函数表达式节点的计算,避免了在执行时重复计算,提高执行效率;通过提取节点操作片段和组合成条件语句片段,实现了对条件语法树更精细的优化,使得生成的过滤语句更为精准。
[0097] S102.读取预设的目标数据库的类型配置,初始化与所述目标数据库对应的数据库语言翻译器、结果集转换器,通过所述数据库语言翻译器将所述中间语言映射成所述目标数据库的目标语言,由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言;
[0098] 所述目标数据库的类型配置具体是指包含目标数据库的相关信息的配置文件、环境变量或其他形式,包括:数据库类型或名称,连接地址、端口、用户名和密码,驱动程序地址,其他的配置信息。
[0099] 通过配置文件、环境变量或其他配置方式,读取用户指定的目标数据库类型、连接信息以及其他配置信息,解析读取到的配置信息,获取数据库的类型以及连接需要相关配置信息;
[0100] 根据解析得到的数据库类型,初始化相应的数据库语言翻译器,优选地,使用程序反射机制或者工厂模式动态创建数据库语言翻译器,同时初始化对应数据库类型的结果集转换器;
[0101] 使用多数据源通用的数据库语言执行器,根据所述类型配置中的信息,连接目标数据库,执行生成的目标语言,实现对目标数据库的操作;
[0102] 在本实施例中,通过读取配置信息,实现了目标数据库类型的可配置性,用户通过可配置的方式轻松更改目标数据库类型;动态创建数据库语言翻译器,能够根据配置在运行时选择性地初始化对应类型的数据库组件;
[0103] 在一种可选的实施例中,
[0104] 通过所述数据库语言翻译器将所述中间语言映射成所述目标数据库的目标语言,由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言包括:
[0105] 遍历所述中间语言的过滤语句对应的条件语法树,对所述条件语法树中每个节点生成对应的所述目标数据库的查询语句片段;
[0106] 基于每个目标数据库对应的预设映射规则,并且结合所述条件语法树中每个节点的节点类型,并结合所述目标数据库的语法规范,将所述查询语句片段映射为所述目标数据库的目标语言;
[0107] 由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言。
[0108] 对比较操作节点,提取节点中的字段名、比较操作符和字段值,根据提取的信息生成目标数据库的查询语句片段;
[0109] 对逻辑操作节点,根据逻辑操作的类型,决定生成相应的逻辑连接关系,递归处理左右子节点,获取其生成的查询语句片段;
[0110] 通过遍历中间语言的过滤语句对应的条件语法树的全部节点,对每个节点,生成对应的目标数据库的查询语句片段,使用预设的映射规则,将每个查询语句片段映射为目标数据库的目标语言;
[0111] 将字段名、比较操作符、逻辑操作符和函数表达式转换为目标数据库的语法规范,根据目标数据库的语法规范和节点类型,进行语法调整和优化;
[0112] 使用预设的数据库语言执行器连接到目标数据库,优选地,使用开源的数据库语句执行工具jdbcTemplate;
[0113] 将映射后的目标语言查询语句传递给数据库语言执行器,在目标数据库上执行。
[0114] 在本实施例中,通过映射规则,将中间语言的查询语句映射为目标数据库的语法规范,这不仅包括字段名、比较操作符等的映射,还涉及语法结构的调整和优化,以提高查询性能;使用递归遍历条件语法树,处理每个节点,生成相应的查询语句片段,使系统能够有效地处理复杂的条件表达式,保证查询语句的准确性和完整性;利用数据库语言执行器连接到目标数据库,执行映射后的查询语句,确保系统能够有效地与目标数据库进行交互,执行查询操作并返回结果。
[0115] 在一种可选的实施方式中,
[0116] 基于每个目标数据库对应的预设映射规则,并且结合所述条件语法树中每个节点的节点类型,并结合所述目标数据库的语法规范,将所述查询语句片段映射为所述目标数据库的目标语言包括:
[0117] 若所述条件语法树中节点类型为SELECT类型,根据所述目标数据库的语法规范,构建SELECT语句片段,将所述SELECT语句片段中的列名映射到目标数据库的列名;
[0118] 若所述条件语法树中节点类型为FROM类型,根据所述目标数据库的语法规范,构建FROM语句片段,并将所述FROM语句片段的表名映射到到目标数据库的表名,并处理任何JOIN操作,确保联接条件正确映射;
[0119] 若所述条件语法树中节点类型为WHERE类型,根据所述目标数据库的语法规范,构建WHERE语句片段,并将所述WHERE语句片段的操作符、列名和语句值映射到目标数据库的等效项。
[0120] 示例性地,将原始查询语句解析为条件语法树(或AST),这可以通过使用解析器或语法分析器来完成。将条件语法树表示成一种数据结构,以便于后续的操作。遍历条件语法树的每个节点,检查其节点类型。
[0121] 如果节点类型为SELECT类型,根据目标数据库的语法规范构建SELECT语句片段。映射SELECT语句片段中的列名,将其转换为目标数据库的列名。根据需要,可以处理SELECT语句中的聚合函数、别名等。其中,对于每个选取的列,根据预设映射规则,将原始数据库中的列名映射到目标数据库中的列名,这需要一个映射字典或配置文件来执行映射。如果SELECT语句中包含聚合函数(例如SUM、COUNT、AVG等),则需要相应地将聚合函数映射到目标数据库的等效函数,不同的数据库可能有不同的聚合函数名称和语法。如果原始查询中使用了列的别名,需要将这些别名映射到目标数据库的别名。别名通常用于提供更具可读性的结果集。生成目标数据库中的SELECT语句片段时,将这些别名应用到相应的列上。
[0122] 如果节点类型为FROM类型,根据目标数据库的语法规范构建FROM语句片段。映射FROM语句片段中的表名,将其转换为目标数据库的表名。处理任何JOIN操作,确保JOIN条件正确映射。其中,从条件语法树中的FROM节点中提取所需信息,包括涉及的表、可能的JOIN操作、联接条件等;对于每个涉及的表,根据预设映射规则,将原始数据库中的表名映射到目标数据库中的表名。检查FROM节点中是否包含JOIN操作,如果有,需要处理这些JOIN操作,遍历JOIN操作列表,对每个JOIN操作执行以下步骤:
[0123] a. 映射JOIN条件:根据预设映射规则,将JOIN操作中的联接条件中的表名和列名映射到目标数据库的等效项。
[0124] b. 映射JOIN类型:根据目标数据库的语法规范,将原始数据库中的JOIN类型(如INNER JOIN、LEFT JOIN等)映射到目标数据库的JOIN类型。
[0125] c. 构建JOIN子句:根据映射后的表名、联接条件和JOIN类型,构建目标数据库的JOIN子句。
[0126] 如果节点类型为WHERE类型,根据目标数据库的语法规范构建WHERE语句片段。映射WHERE语句片段中的操作符、列名和语句值,将其转换为目标数据库的等效项。考虑如何处理复杂的条件,例如嵌套条件和逻辑运算符(AND、OR等)。其中,从条件语法树中的WHERE节点中提取所需信息,包括条件表达式、操作符、列名和语句值。对于每个操作符(如=、<、>、!=等),根据预设映射规则,将原始数据库中的操作符映射到目标数据库的等效项,操作符映射可能包括文本替换或映射字典。如果WHERE条件包含嵌套条件或逻辑运算符(如AND、OR等),则需要递归处理这些条件;对于嵌套条件,可以使用递归算法来构建嵌套的目标数据库WHERE语句片段;对于逻辑运算符,需要将其映射到目标数据库的等效运算符,并根据需要添加括号以确保条件的正确解析顺序。
[0127] 将构建好的SELECT、FROM和WHERE语句片段组合成目标查询语句。确保语法正确性,符合目标数据库的语法规范。将构建的目标查询语句发送到目标数据库执行。
[0128] 此外,预设映射规则可以包括一个映射字典或配置文件,其中定义了原始数据库和目标数据库之间的映射关系。这可以包括列名映射、表名映射、数据类型映射等信息。对于JOIN操作的处理,需要检查JOIN条件,并确保将连接条件正确映射到目标数据库的表和列名,这涉及到表别名的处理和JOIN类型的映射。在映射列名、表名和操作符时,需要考虑目标数据库的命名约定和区分大小写等规则。如果目标数据库支持不同的SQL方言(例如MySQL、PostgreSQL、Oracle等),则需要根据目标数据库的具体方言调整映射规则和语法构建步骤。
[0129] 本申请实施例可以在不同的数据库系统之间迁移查询或跨数据库查询,而无需手动重写查询语句;通过自动化地将查询语句转换为目标数据库的语法,可以节省开发和维护工作量;开发人员无需手动逐一调整每个查询,而是依赖预设的映射规则和语法转换。通过根据目标数据库的语法规范构建查询语句片段,这些技术确保了生成的查询语句在目标数据库上具有正确的语法结构;对于公司或应用程序中使用多种不同数据库系统的情况,本申请的实施例允许查询和数据操作在不同数据库之间无缝集成,而不会出现不一致性或数据丢失。
[0130] S103.所述数据库语言执行器执行所述目标语言完成时,获得所述目标数据库的原始结果集,根据所述原始结果集的列名、列数据类型和预设的数据类型映射配置,使用所述结果集转换器创建中间数据结构,基于所述中间数据结构将所述原始结果集映射成中间数据结果集,通过输出数据格式化器将所述中间数据结果集转变成输出参数。
[0131] 从目标数据库中获得执行查询后的原始结果集,所述结果集包括列名和每行相应列的数据,遍历原始结果集的每一行数据,对每个数据项进行处理,根据预设的数据类型映射配置,将原始结果集中的每个数据项转换为中间数据结构中的对应数据类型,保存数据;
[0132] 根据原始结果集的列名、列数据类型创建中间数据结构,并设置默认值,将原始结果集映射成对应的中间数据,每个中间数据结构对应原始结果集的一行数据,构成具备中间数据结构的结果集;
[0133] 利用输出数据格式化器对中间数据结果集进行格式化,以生成最终的输出参数,将格式化后的输出参数返回给调用方,完成整个查询和结果处理过程;
[0134] 在本实施例中,使用结果集转换器进行数据类型映射和转换,确保了从不同数据库中获取的原始结果集能够在中间数据结构中得到一致的表达,解决了数据库差异性带来的数据类型不一致问题;创建中间数据结构,有助于在系统内部保持数据的一致性;利用输出数据格式化器确保了输出参数的一致性,使得不同数据库类型的查询结果能够以相同格式返回给调用方;在数据类型映射和转换的过程中,系统可以处理不同数据库中可能存在的差异,确保数据的完整性和准确性。
[0135] 在一种可选的实施例中,
[0136] 所述数据库语言执行器执行所述目标语言完成时,获得所述目标数据库的原始结果集,还包括:
[0137] 发生执行错误时,根据所述目标数据库类型配置初始化的错误码转换器,将所述执行错误对应的错误信息映射成中间错误信息,再通过输出数据格式化器转变成输出参数。
[0138] 检查执行是否发生错误,如果发生错误:
[0139] 使用目标数据库类型配置初始化的错误码转换器,将目标数据库返回的错误码映射成中间错误码,通过这一步骤将不同数据库的错误码转换成预设的统一错误码,通过中间错误码通过查询或者自动映射的手段,得到具体的错误信息,包括错误码转换器中预定义的错误信息,或者根据错误码动态生成的信息;使用输出数据格式化器,将中间错误信息格式化成适当的输出格式,返回给调用方。
[0140] 在本实施例中,通过错误码转换器,实现不同目标数据库的错误码与中间标准错误码的映射,提供了标准化的错误码处理机制;通过中间错误信息的映射和格式化,确保了系统对错误信息的统一处理和输出,使错误发生时返回的信息结构一致,提高了可维护性和可读性;错误码转换器中预设的中间错误信息,提供了灵活性,使系统能够根据不同数据库类型和需求进行错误处理的定制;通过引入错误码转换器和中间错误信息的映射,更容易适应未来可能引入的新的目标数据库类型。
[0141] 图2为本发明实施例适用于低代码平台的多数据源适配系统的结构示意图,如图2所示,所述系统包括:
[0142] 第一单元,用于通过基础语法生成器对所获取的输入参数对应的标准输入数据进行解析,生成基础语句;判断所述标准输入数据中是否包含过滤条件部分,如果包含,使用条件表达式解析器对所述过滤条件部分进行解析,生成条件语法树,提取过滤语句,将所述基础语句和过滤语句组合,构成中间语言;
[0143] 第二单元,用于读取预设的目标数据库的类型配置,初始化与所述目标数据库对应的数据库语言翻译器、结果集转换器,通过所述数据库语言翻译器将所述中间语言映射成所述目标数据库的目标语言,由预设的数据库语言执行器连接所述目标数据库,执行所述目标语言;
[0144] 第三单元,用于所述数据库语言执行器执行所述目标语言完成时,获得所述目标数据库的原始结果集,根据所述原始结果集的列名、列数据类型和预设的数据类型映射配置,使用所述结果集转换器创建中间数据结构,基于所述中间数据结构将所述原始结果集映射成中间数据结果集,通过输出数据格式化器将所述中间数据结果集转变成输出参数。
[0145] 本发明实施例的第三方面,
[0146] 提供一种电子设备,包括:
[0147] 处理器;
[0148] 用于存储处理器可执行指令的存储器;
[0149] 其中,所述处理器被配置为调用所述存储器存储的指令,以执行前述所述的方法。
[0150] 本发明实施例的第四方面,
[0151] 提供一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现前述所述的方法。
[0152] 本发明可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本发明的各个方面的计算机可读程序指令。
[0153] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。