CN115794858A - 查询语句处理方法、装置、设备及存储介质 - Google Patents
查询语句处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115794858A CN115794858A CN202211442424.4A CN202211442424A CN115794858A CN 115794858 A CN115794858 A CN 115794858A CN 202211442424 A CN202211442424 A CN 202211442424A CN 115794858 A CN115794858 A CN 115794858A
- Authority
- CN
- China
- Prior art keywords
- query statement
- target
- database
- component file
- leaf node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种查询语句处理方法、装置、设备及存储介质,可以应用于计算机领域和大数据领域。该方法包括:根据从第一组件文件中提取得到的源查询语句,构建第一组件文件树,其中,第一组件文件树包括存储有源查询语句的第一叶子节点;利用与源查询语句对应的第二语法映射规则,更新第一叶子节点中的源查询语句,得到适用于对目标数据库执行数据库操作的目标查询语句;以及根据目标查询语句和第一叶子节点之间的对应关系,更新第一组件文件树中的第一叶子节点,得到适用于在目标数据库中执行的第二组件文件。
Description
技术领域
本公开涉及计算机领域和大数据领域,尤其涉及一种查询语句处理方法、装置、设备、存储介质和程序产品。
背景技术
随着科技的快速发展,越来越多的企业通过构建大型数据管理系统以用于业务数据的存储、查询、分析等操作,以进一步从业务数据中挖掘商业价值,满足企业的业务发展需求。但随着业务数据量的不断增长,业务数据的数据结构呈现复杂化、多样化的特点,同时海量的业务数据存储于具有不同数据结构的数据库(即异构数据库)中,而异构数据库之间,通常需要转译查询语句才能够实现针对业务数据进行存储、查询、分析等操作,而转译查询语句的处理过程通常操作较为复杂,且转译后的查询语句准确率和执行效率通常较低,与这将降低相关业务数据的分析效率,无法满足实际的用户需求。
发明内容
鉴于上述问题,本公开提供了查询语句处理方法、装置、设备、存储介质和程序产品。
根据本公开的第一个方面,提供了一种查询语句处理方法,包括:
根据从第一组件文件中提取得到的源查询语句,构建第一组件文件树,其中,上述第一组件文件树包括存储有上述源查询语句的第一叶子节点;
利用与上述源查询语句对应的第二语法映射规则,更新上述第一叶子节点中的源查询语句,得到适用于对目标数据库执行数据库操作的目标查询语句;以及
根据上述目标查询语句和上述第一叶子节点之间的对应关系,更新上述第一组件文件树中的第一叶子节点,得到适用于在上述目标数据库中执行的第二组件文件。
根据本公开的实施例,利用与上述源查询语句对应的第二语法映射规则,更新上述第一叶子节点中的源查询语句包括:
将上述第一叶子节点中的源查询语句与语法映射规则表中的候选规则节点进行匹配,得到与上述源查询语句中的目标关键字匹配的目标规则节点,其中,上述目标规则节点关联存储有上述目标关键字和上述第二语法映射规则;以及
利用上述目标规则节点中的第二语法映射规则,更新上述源查询语句中的第一语法映射规则,得到上述目标查询语句。
根据本公开的实施例,上述查询语句处理方法还包括:
根据上述源查询语句中的目标关键字和目标数据库标识,从预设数据库指令池中,筛选出与上述目标关键字对应的目标数据库指令,其中,上述目标数据库指令适用于对上述目标数据库执行数据库操作;以及
将上述目标数据库指令,确定为与上述源查询语句对应的目标查询语句。
根据本公开的实施例,在将上述第一叶子节点中的源查询语句与语法映射规则表中的候选规则节点进行匹配后,得到的匹配结果表征上述语法映射规则表中的候选规则节点与上述源查询语句中的目标关键字不匹配的情况下,上述查询语句处理方法还包括:
根据上述源查询语句中的目标关键字和目标数据库标识,从预设数据库指令池中,确定与上述目标关键字对应的目标数据库指令,其中,上述目标数据库指令适用于对上述目标数据库执行数据库操作;
根据上述目标数据库指令的目标数据库指令标识,更新上述第一组件文件树中,与上述目标数据库指令对应的第一叶子节点,得到更新后的新的第一组件文件树。
根据本公开的实施例,上述第一叶子节点中的源查询语句具有表征源数据库的数据库类型的源数据库标识;
根据上述目标查询语句和上述第一叶子节点之间的对应关系,更新上述第一组件文件树中的第一叶子节点包括:
将与上述第一叶子节点对应的目标查询语句,以及目标数据库标识,添加至上述第一叶子节点中,得到更新后的第二组件文件树,其中,上述目标数据库标识表征上述目标数据库的数据库类型;以及
根据上述第二组件文件树,生成上述第二组件文件。
根据本公开的实施例,根据上述目标查询语句和上述第一叶子节点之间的对应关系,更新上述第一组件文件树中的第一叶子节点还包括:
利用与上述第一叶子节点对应的目标查询语句,替换上述第一组件文件中上述第一叶子节点各自的源查询语句,得到更新后的候选第二组件文件树;
根据上述候选第二组件文件树,生成候选第二组件文件;以及
对上述候选第二组件文件添加目标数据库标识,得到上述第二组件文件,其中,上述目标数据库标识表征上述目标数据库的数据库类型。
根据本公开的实施例,上述查询语句处理方法还包括:
执行上述第二组件文件中的目标查询语句;
在检测到上述第二组件文件中,包含有的兼容节点的情况下,根据上述兼容节点中的兼容源查询语句,以及目标数据库标识,从兼容查询语句库中筛选出与上述兼容源查询语句对应的兼容目标查询语句;以及
执行上述兼容目标查询语句;
其中,上述兼容节点仅存储上述兼容源查询语句。
根据本公开的实施例,上述第一组件文件包括N个,N为正整数;
上述查询语句处理方法还包括:
根据N个上述第一组件文件各自的文件层级标识,构建第一项目文件树,其中,上述文件层级标识表征上述第一组件文件的项目层级属性信息,上述第一项目文件树中,与上述项目层级属性信息对应的叶子节点,存储有具有上述项目层级属性信息的第一组件文件;以及
利用与上述第一组件文件对应的第二组件文件,更新上述第一项目文件树中的叶子节点,得到更新后的第二项目文件树。
本公开的第二个方面还提供了一种查询语句处理装置,包括:
第一构建模块,用于根据从第一组件文件中提取得到的源查询语句,构建第一组件文件树,其中,上述第一组件文件树包括存储有上述源查询语句的第一叶子节点;
第一更新模块,用于利用与上述源查询语句对应的第二语法映射规则,更新上述第一叶子节点中的源查询语句,得到适用于对目标数据库执行数据库操作的目标查询语句;以及
第二更新模块,用于根据上述目标查询语句和上述第一叶子节点之间的对应关系,更新上述第一组件文件树中的第一叶子节点,得到适用于在上述目标数据库中执行的第二组件文件。
本公开的第三方面提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述查询语句处理方法。
本公开的第四方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述查询语句处理方法。
本公开的第五方面还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述查询语句处理方法。
根据本公开提供的查询语句处理方法、装置、设备、介质和程序产品,由于根据第一组件文件中提取得到的源查询语句,构建与第一组件文件的文件架构相同的第一组件文件树,可以清晰、准确地筛选出第一组件文件中的源查询语句,并利用第二语法映射规则,更新第一叶子节点中的源查询语句,从而在保留第一组件文件的文件架构的同时,将源查询语句替换为目标查询语句,进而可以在保持第一组件文件架构的同时,根据第二组件文件中的目标查询语句执行针对目标数据库的数据库操作,至少省略了按照第一组件文件的文件架构重新部署目标查询语句的操作步骤,实现提升针对目标数据库的数据库操作效率。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的查询语句处理方法、装置的应用场景图;
图2示意性示出了根据本公开实施例的查询语句处理方法的流程图;
图3示意性示出了根据本公开实施例的查询语句处理方法的流程图;
图4示意性示出了根据本公开另一实施例的查询语句处理方法的流程图;
图5示意性示出了根据本公开又一实施例的查询语句处理方法的流程图;
图6示意性示出了根据本公开实施例的查询语句处理装置的结构框图;
图7示意性示出了根据本公开实施例的适于实现查询语句处理方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
在本公开的技术方案中,所涉及的数据(如包括但不限于用户个人信息)的收集、存储、使用、加工、传输、提供、公开和应用等处理,均符合相关法律法规的规定,采取了必要保密措施,且不违背公序良俗。
相关技术中针对异构数据库的查询语句转译方法,通常基于以下逻辑实现查询语句的转译,即读取源SQL(Structured Query Language,结构化查询语句,也称查询语句)代码和数据库类型,编译该代码以得到其中的关键字和语法逻辑;读取目标数据库类型;根据源数据库类型和目标数据库类型查找转译逻辑,获取与编译得到的语法逻辑对应的目标数据库类型和目标数据库类型查找转译逻辑;按照目标数据库中的语法逻辑组合源SQL代码,生成目标SQL代码。
在发明人实现本公开的发明构思过程中,发现异构数据库查询语句转译方法存在以下问题。
SQL的提取问题:在项目的改造实践中,需要将SQL语句从存量程序(例如Mapper.xml)中提出出来,然后再进行转译。对于中大型的数据库系统而言,该提取过程难以被自动执行,通常需要人工提取,耗费时间和精力,也较容易出错。相关技术中也没有提供相关的机制可以对系统结构比较复杂的项目,自动化提取SQL语句。
SQL语句模板的问题:从程序中提取出的SQL语句,其实是一种包含在Mybatis映射器的各种元素(比如insert、update)内的SQL语句模板,在程序实际运行时再通过动态向SQL语句模板传递参数的方式将其填充成一个完成的SQL语句,然后将其传递至数据库执行。因此在对它进行转译处理时会出现报错、执行缓慢等技术问题。
SQL语句转译范围的问题:在现实的需求中,对于两个异构数据库语法词法相同或可兼容的部分,仍需要转译,这就会增加代码的负载程度和代码量,同时增加查询语句的转译时长,降低数据库操作执行效率。
特例SQL语句处理的问题:部分数据库的语法规则难以映射到另一个异构数据库中的查询数据中,这就会导致难以实现用查询语句的简单转译来实现异构数据库之间的数据库操作同步。
转译后的SQL语句回写至程序的问题:转译后的SQL语句不仅仅需要像现有技术一样将其输出展示出来,还需要自动回写回相应的组件文件(例如Mapper.xml格式文件)中,同时需要系统在运行时自动识别并调用组件文件中相应的SQL语句实现业务功能,同时还需要保持存量程序的结构性和可读性,以免对后续的维护工作带来负担。
项目的自动化构建部署的问题:在完成整个异构数据库语句自动提取转译回写后,还需要将其自动编译、构建并部署到相应的库中,以便于供流水线系统将其部署到相应的系统环境中,而相关技术中并没有提供相应的技术启示。
本公开的实施例提供了一种查询语句处理方法,包括:
根据从第一组件文件中提取得到的源查询语句,构建第一组件文件树,其中,第一组件文件树包括存储有源查询语句的第一叶子节点;利用与源查询语句对应的第二语法映射规则,更新第一叶子节点中的源查询语句,得到适用于对目标数据库执行数据库操作的目标查询语句;以及根据目标查询语句和第一叶子节点之间的对应关系,更新第一组件文件树中的第一叶子节点,得到适用于在目标数据库中执行的第二组件文件。
根据本公开的实施例,根据第一组件文件中提取得到的源查询语句,构建与第一组件文件的文件架构相同的第一组件文件树,可以清晰、准确地筛选出第一组件文件中的源查询语句,并利用第二语法映射规则,更新第一叶子节点中的源查询语句,从而在保留第一组件文件的文件架构的同时,将源查询语句替换为目标查询语句,进而可以在保持第一组件文件架构的同时,根据第二组件文件中的目标查询语句执行针对目标数据库的数据库操作,至少省略了按照第一组件文件的文件架构重新部署目标查询语句的操作步骤,提升了针对目标数据库的数据库操作效率。
图1示意性示出了根据本公开实施例的查询语句处理方法、装置的应用场景图。
如图1所示,根据该实施例的应用场景100可以包括第一终端设备101、第二终端设备102、第三终端设备103、网络104和服务器105。网络104用以在第一终端设备101、第二终端设备102、第三终端设备103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用第一终端设备101、第二终端设备102、第三终端设备103中的至少一个通过网络104与服务器105交互,以接收或发送消息等。第一终端设备101、第二终端设备102、第三终端设备103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
第一终端设备101、第二终端设备102、第三终端设备103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对用户利用第一终端设备101、第二终端设备102、第三终端设备103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
需要说明的是,本公开实施例所提供的查询语句处理方法一般可以由服务器105执行。相应地,本公开实施例所提供的查询语句处理装置一般可以设置于服务器105中。本公开实施例所提供的查询语句处理方法也可以由不同于服务器105且能够与第一终端设备101、第二终端设备102、第三终端设备103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的查询语句处理装置也可以设置于不同于服务器105且能够与第一终端设备101、第二终端设备102、第三终端设备103和/或服务器105通信的服务器或服务器集群中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
以下将基于图1描述的场景,通过图2~图5对公开实施例的查询语句处理方法进行详细描述。
图2示意性示出了根据本公开实施例的查询语句处理方法的流程图。
如图2所示,该实施例的查询语句处理方法包括操作S210~操作S230。
在操作S210,根据从第一组件文件中提取得到的源查询语句,构建第一组件文件树,其中,第一组件文件树包括存储有源查询语句的第一叶子节点。
根据本公开的实施例,第一组件文件可以包括存储有查询语句、应用程序代码、服务资源控制指令等信息的文件,该第一组件文件的文件格式例如可以是.xml格式,但不仅限于此,还可以包括.java格式、.py格式等任意格式,本公开的实施例对第一组件文件的文件格式不做限定。
应该理解的是,第一组件文件中的查询语句、应用程序代码等信息可以按照预设的文件框架(也称组件层级结构)存储,可以通过按照文件框架执行第一组件文件中的查询语句等信息,从而实现调用系统中的服务资源。
根据本公开的实施例,第一组件文件树可以指将第一组件中的源查询语句按照文件框架存储,源查询语句可以存储在第一组件文件树中的叶子节点中,从而使源查询语句具有与第一组件文件中相同的组件层级结构。
在操作S220,利用与源查询语句对应的第二语法映射规则,更新第一叶子节点中的源查询语句,得到适用于对目标数据库执行数据库操作的目标查询语句。
根据本公开的实施例,第二语法映射规则可以是与目标数据库的数据库类型对应的语法规则,例如可以包括目标数据库对应的正则表达式等。
应该理解的是,源查询语句可以基于与源数据库对应的第一语法映射规则编辑得到,利用第二语法映射规则更新源查询语句的第一语法映射规则,即可以得到目标查询语句。
在操作S230,根据目标查询语句和第一叶子节点之间的对应关系,更新第一组件文件树中的第一叶子节点,得到适用于在目标数据库中执行的第二组件文件。
根据本公开的实施例,根据第一组件文件中提取得到的源查询语句,构建与第一组件文件的文件架构相同的第一组件文件树,可以清晰、准确地筛选出第一组件文件中的源查询语句,并利用第二语法映射规则,更新第一叶子节点中的源查询语句,从而在保留第一组件文件的文件架构的同时,将源查询语句替换为目标查询语句,进而可以在保持第一组件文件架构的同时,根据第二组件文件中的目标查询语句执行针对目标数据库的数据库操作,至少省略了按照第一组件文件的文件架构重新部署目标查询语句的操作步骤,提升了针对目标数据库的数据库操作效率。
根据本公开的实施例,第一组件文件包括N个,N为正整数。
查询语句处理方法还可以包括如下操作:
根据N个第一组件文件各自的文件层级标识,构建第一项目文件树,其中,文件层级标识表征第一组件文件的项目层级属性信息,第一项目文件树中,与项目层级属性信息对应的叶子节点,存储有具有项目层级属性信息的第一组件文件;以及利用与第一组件文件对应的第二组件文件,更新第一项目文件树中的叶子节点,得到更新后的第二项目文件树。
根据本公开的实施例,用于调用系统服务或者控制系统执行操作的项目文件可以包含有N个第一组件文件,该N个第一组件文件可以按照各自的项目层级属性信息,存储于相应的存储路径中,从而可以根据按照各自项目层级属性信息的存储的N个第一组件文件,在系统中调用复杂的系统服务等。
根据本公开的实施例,第二组件文件可以通过相同的文件层级标识与对应的第一组件文件形成对应关系,从而可以在得到更新后的第二组件文件后,利用第二组件文件来更新第一项目文件树中的叶子节点,使得到的更新后的第二项目文件树可以对目标数据库中执行相应的数据库操作。
需要说明的是,可以利用第二组件文件替换第一组件文件,从而实现更新第一项目文件树的叶子节点,但不仅限于此,还可以将第一组件文件与第二组件文件按照预设规则进行文件融合等方式实现更新第一项目文件树的叶子节点,或者将第二组件文件节点添加至第一项目文件树的叶子节点中。本公开的实施例对更新第一项目文件树的叶子节点的具体方式不做限定,只要能够满足更新后的第二项目文件树中的叶子节点至少包含有部分第二组件文件即可,本领域技术人员可以根据实际需求对更新的方式进行选择。
图3示意性示出了根据本公开实施例的查询语句处理方法的流程图。
如图3所示,操作S220中,利用与源查询语句对应的第二语法映射规则,更新第一叶子节点中的源查询语句可以包括操作S310~操作S320。
在操作S310,将第一叶子节点中的源查询语句与语法映射规则表中的候选规则节点进行匹配,得到与源查询语句中的目标关键字匹配的目标规则节点,其中,目标规则节点关联存储有目标关键字和第二语法映射规则。
在操作S320,利用目标规则节点中的第二语法映射规则,更新源查询语句中的第一语法映射规则,得到目标查询语句。
根据本公开的实施例,语法映射规则表中的候选规则节点,应至少存储有与目标数据库类型对应的第二语法映射规则,以及与该第二语法映射规则对应的目标关键字。从而可以利用源查询语句遍历语法映射规则表中的候选规则节点,在匹配到目标关键字的情况下,确定目标规则节点,从而实现利用目标规则节点中的第二语法映射规则更新源查询语句的第一语法映射规则,进而可以生成目标查询语句。
需要说明的是,本公开的实施例中对于每个第一叶子节点中的源查询语句的数量不做限定,可以是一个或多个。同时对于每个源查询语句中目标关键字的数量不做限定,本公开的实施例对此不再赘述。
根据本公开的实施例,查询语句处理方法还包括如下操作:
根据源查询语句中的目标关键字和目标数据库标识,从预设数据库指令池中,筛选出与目标关键字对应的目标数据库指令,其中,目标数据库指令适用于对目标数据库执行数据库操作;以及将目标数据库指令,确定为与源查询语句对应的目标查询语句。
根据本公开的实施例,预设数据库指令池可以包含有适用于对目标数据库执行数据库操作的候选数据库指令,该些候选数据库指令可以通过目标关键字和/或目标数据库标识与源查询语句关联。通过筛选出与目标关键字对应的目标数据库指令,可以至少部分解决相关技术中,目标数据库提供的第二语法映射规则,无法实现源查询语句的数据库操作功能的缺陷,从而可以利用目标数据库指令作为目标查询语句,以及时更新第一组件文件中的源查询语句,从而提升异构数据库的查询语句转译的效率。
应该理解的是,目标数据库指令可以以任何方式编辑形成,例如基于Python等编程语言编辑得到目标数据库指令,本公开的实施例对目标数据库指令的具体编辑方式不做限定。
根据本公开的实施例,在将第一叶子节点中的源查询语句与语法映射规则表中的候选规则节点进行匹配后,得到的匹配结果表征语法映射规则表中的候选规则节点与源查询语句中的目标关键字不匹配的情况下,查询语句处理方法还可以包括如下操作:
根据源查询语句中的目标关键字和目标数据库标识,从预设数据库指令池中,确定与目标关键字对应的目标数据库指令,其中,目标数据库指令适用于对目标数据库执行数据库操作;根据目标数据库指令的目标数据库指令标识,更新第一组件文件树中,与目标数据库指令对应的第一叶子节点,得到更新后的新的第一组件文件树。
根据本公开的实施例,在源查询语句中的目标关键字遍历语法映射规则表中的候选规则节点后,无法得到与该目标关键字匹配的目标规则节点的情况下,可以确定目标数据库中没有可以与第一语法映射规则相同或相应的第二语法映射规则。由此可以确定无法通过语法映射规则的更新来直接生成对目标数据库操作的目标查询语句。
因此,通过从预设数据库指令池中确定目标数据库指令,并根据目标数据库指令标识更新对应的第一叶子节点,可以使更新后的第一叶子节点具有该目标数据库指令标识,进而可以使第二组件文件中包含有该目标数据库指令标识,这样可以在执行第二组件文件时,可以根据目标数据库指令标识调用目标数据库指令,以实现对目标数据库执行数据库操作。
根据本公开的实施例,利用与源查询语句对应的目标数据库标识来调用目标数据库指令,从而实现对目标数据库执行数据库操作,不仅可以至少部分解决相关技术中,目标数据库提供的第二语法映射规则,无法实现源查询语句的数据库操作功能的缺陷,还可以进一步减少第二组件文件所占用的数据容量,减少存储空间,从而进一步提升系统执行数据库操作的执行效率。
应该理解的是,本实施例中的预设数据库指令池以及目标数据库指令可以具有与上述实施例中的预设数据库指令池以及目标数据库指令具有相同或相应的技术属性,本公开的实施例不再赘述。
根据本公开的实施例,第一叶子节点中的源查询语句具有表征源数据库的数据库类型的源数据库标识。
操作S230中,根据目标查询语句和第一叶子节点之间的对应关系,更新第一组件文件树中的第一叶子节点可以包括如下操作:
将与第一叶子节点对应的目标查询语句,以及目标数据库标识,添加至第一叶子节点中,得到更新后的第二组件文件树,其中,目标数据库标识表征目标数据库的数据库类型;以及根据第二组件文件树,生成第二组件文件。
根据本公开的实施例,将目标查询语句和目标数据库标识添加至第一叶子节点中,可以使更新后得到的第二组件文件树中的第二叶子节点中,同时包含有源查询语句和目标查询语句,并分别以源数据库标识和目标数据库标识来分别标记,从而可以在执行第二组件文件的过程中,根据相关技术中的调用接口识别相连接的数据库类型,并根据识别得到的数据库类型,从第二组件文件中调用对于该数据库类型对应的源查询语句或目标查询语句,提升对异构数据库执行数据库操作的兼容性与灵活性,提升系统的运行效率。
根据本公开的实施例,操作S230中,根据目标查询语句和第一叶子节点之间的对应关系,更新第一组件文件树中的第一叶子节点还可以包括如下操作:
利用与第一叶子节点对应的目标查询语句,替换第一组件文件中第一叶子节点各自的源查询语句,得到更新后的候选第二组件文件树;根据候选第二组件文件树,生成候选第二组件文件;以及对候选第二组件文件添加目标数据库标识,得到第二组件文件,其中,目标数据库标识表征目标数据库的数据库类型。
根据本公开的实施例,在更新第一叶子节点各自的源查询语句时,可以针对不同格式的第一组件文件确定不同的源查询语句更新方式,例如针对.xml格式等相似文件格式的第一组件文件,可以将与.xml格式对应的第一组件文件树中的第一叶子节点中添加目标查询语句和目标数据库标识。针对.py、.java、.groovy格式格式等相似文件格式的第一组件文件,由于该类文件格式的第一组件文件中查询语句的格式没有严格限定,可以利用目标查询语句替换源查询语句,以避免更新后的目标查询语句与源查询语句的对应关系难以确定,减少目标查询语句出现报错的概率,提升后续系统运行效率。
需要说明的是,本公开的实施例中根据目标查询语句更新第一叶子节点的具体实施方式可以基于上述第一组件文件的格式进行选择,但不仅限于此,本领域技术人员可以基于实际需求,确定第一组件文件树中的第一叶子节点的更新方式,本公开的实施例对此不做限定。
图4示意性示出了根据本公开另一实施例的查询语句处理方法的流程图。
如图4所示,该实施例的查询语句处理方法还包括操作S410~操作S430。
在操作S410,执行第二组件文件中的目标查询语句。
在操作S420,在检测到第二组件文件中包含有的兼容节点的情况下,根据兼容节点中的兼容源查询语句,以及目标数据库标识,从兼容查询语句库中筛选出与兼容源查询语句对应的兼容目标查询语句。
在操作S430,执行兼容目标查询语句;其中,兼容节点仅存储兼容源查询语句。
根据本公开的实施例,兼容源查询语句可以与对应的兼容目标查询语句具有相同的数据库执行功能,且分别在各自对应的数据库类型的数据库中,即分别在源数据库和目标数据库中,执行相同的数据库操作。
应该理解的是,在上述实施例中对第一组件文件树的第一叶子节点进行更新的过程中,可以在检测到第一叶子节点中的源查询语句为兼容源查询语句,即检测到该源查询语句具有对应的兼容目标查询语句的情况下,可以不从语法映射规则表中筛选目标规则节点,从而省略了遍历语法映射规则表,以及更新第一叶子节点的操作步骤,提升针对第一组件文件的更新效率,同时减少更新第一叶子节点的更新错误率。
需要说明的是,结合上书实施例中的查询语句处理方法,在执行第二组件文件时,在检测到源查询语句对应的目标数据库指令和/或目标数据库指令标识的情况下,可以调用相应的目标数据库指令以对目标数据库执行数据库操作。
根据本公开提供的查询语句处理方法,以下将结合具体实施例来说明本公开提供的查询语句处理方法的整体过程。
本公开实施例中的查询语句处理方法可以分为语法映射规则的配置阶段、代码自动生成阶段、程序运行验证阶段。
语法映射规则的配置阶段的具体流程参考如下内容。
在语法映射规则的配置阶段,需要首先确定兼容源查询语句对应的兼容目标查询语句。
兼容查询语句可以包括在项目程序中,对于异构数据库各自的语法或词法不同的情形下,针对不同数据库类型的数据库同时存在同语义的SQL语句(查询语句)。项目程序运行时(即第二组件文件运行时)可以根据实际连接的数据库类型,自动判断执行兼容源查询语句或对应的兼容目标查询语句。
根据后续预先配置的databaseIdProvider接口,同时将其注册到Mybatis的上下文环境中可以实现自动判断执行兼容源查询语句或对应的兼容目标查询语句(或目标数据库指令),以替代默认设置。项目程序可以通过Mybatis的SqlSessionFactory(单个数据库映射关系经过编译后的内存镜像)获取databaseId,并判断出对应的数据库类型,从而可以执行兼容源查询语句或兼容目标查询语句。该方式较为适用于利用目标数据库指令作为与源查询语句对应的目标查询语句的情况。
或者还可以在映射器(Mapper)中利用Mybatis通过databaseId来控制执行兼容源查询语句或兼容目标查询语句,以实现可通过词法或语法规则进行直接替换的情形,例如可以基于源数据库中的sysdate函数替换目标数据库中的中的now函数。
同时,在语法映射规则的配置阶段,还需要配置好语法映射规则表。该语法映射规则表中的候选规则节点可以包含有第一语法映射规则(源数据库的正则表达式)、目标关键字和第二语法映射规则(目标数据库的正则表达式)。从而可以在后续第一叶子节点的更新过程中,先将源查询语句解析成类似语法树的解析结构,然后对该语法树的目标关键字和语法映射规则表中的目标关键字进行匹配。如果匹配到目标规则节点,则根据源数据库的正则表达式或目标数据库的正则表达式对该目标查询语句或源查询语句进行替换。在一条查询语句对应有多个目标规则节点的情况下,可以逐一对其进行匹配替换即可。
本阶段还会构建出一个支持多种数据库类型数据库的组件,类似于MutliDBUtils.jar的公共组件,该组件中包含两个部分:一个部分用于替代默认设置,例如可以基于的atabaseIdProvider接口来替代默认设置,以兼容多种数据库类型的数据库。另一部分为注册到当前Spring框架环境中的databaseId,以便项目程序运行时判别当前连接的数据库类型。还可以包含一些程序改写的公共算法和模块,比如目标数据库中用于替换源数据库的用户变量机制的通用迭代算法指令(即目标数据库指令)等。
代码自动生成阶段的具体流程参考如下内容。
本阶段会根据上述语法映射规则的配置阶段配置的语法映射规则进行自动分析和生成,可以包含有组件级的代码自动重写和程序级的代码自动重写功能,并自动对自动生成后的代码进行构建。
同时在语法映射规则的配置阶段,需要先配置项目源代码目录和目标路径,以及源数据库和目标数据库各自的数据库类型(可以通过databaseId表征各自的数据库类型)。然后自动将源目录(第一项目文件的文件目录)中的程序文件(第一组件文件)拷贝到目标目录,并根据配置的源数据库的databaseId和目标数据库的databaseId自动加载第一语法映射规则或第二语法映射规则。
此外还需要对项目文件分析,即多个第一组件文件进行分析,将项目文件的各层级的第一组件文件构建为第一项目文件树,该第一项目文件树的根节点可以是项目根路径,该第一项目文件树的叶子节点可以是各层级的第一组件文件。
项目文件分析需要对该第一项目文件树进行遍历分析:首先筛选出所有第一叶子节点中的pom文件(pom,Project Object Model的简称,是Maven项目中的文件,具有.xml格式)节点集合。然后对每一个pom文件进行解析,按照默认约定或者配置信息,将该第一组件文件的源代码、配置信息、资源文件路径,以及该pom文件构建出一个组件文件子树(即第一组件文件树)。
然后遍历每一个第一组件文件树,并依次执行以下操作:
重写每一个第一组件文件树中的pom文件,主要是在pom文件中增加上一阶段中输出的MutliDBUtils.jar组件的依赖。
遍历第一组件文件树的所有第一叶子节点,对包含查询语句代码的四类文件进行筛选处理,例如可以筛选出具有.xml、.java、.groovy、.py等文件格式的第一组件文件。
对于.xml格式文件,首先读取文件头来判别该第一组件文件是否为有效的mybatis文件。如不是,则跳过;否则进行下面处理。将该xml格式的第一组件文件读取到内存中,并将mybatis的映射器解析成xml树,即第一组件文件树,从该xml树中提取mybtis的四类节点(即数据库操作select、insert、update、delete四个数据库操作类型)的第一叶子节点,也成为SQL节点。
对每一个第一叶子节点,首先提取其中的查询语句模板,即源查询语句。然后进行如下操作:
根据语法映射规则表,对源查询语句进行正则表达式匹配,如未匹配上,则视为兼容源查询语句,直接跳过。
如该源查询语句匹配有目标规则节点,则在原第一叶子节点上添加源数据库厂商标识databaseId。
将该第一叶子节点按照第二语法映射规则,进行正则表达式替换后生成目标数据库的目标查询语句。
使用该新生成的目标查询语句、源数据库类型标识databaseId、以及原第一叶子节点的其他信息,构建新的第一叶子节点(第二叶子节点),并将该新的第一叶子节点添加到内存中第一组件文件树的第一叶子节点之后。
对每一个第一叶子节点处理完毕后,可以构建得到第二组件文件树,从而可以利用内存中的第二组件文件树覆盖第一组件文件树,并生成新的第二组件文件。
对于.java格式的第一组件文件,以文件为维度加载成一个单向链表,每行为一个节点。然后判断该.java格式的第一组件文件中是否包含源查询语句,判断的逻辑为是否包含四类数据库操作标识(select、insert、update、delete)开头的内置字符串。如不包含,则直接跳过,否则进行如下处理:
由于源查询语句在.java格式的第一组件文件中可能会有跨行的情况,首先要按内置字符串标识跨行提取出完整的源查询语句,并记录下该源查询语句的链表节点区段,然后基于该链表节点区段作为第一组件文件树的第一叶子节点。
基于上述相同或相似的方法,针对每个第一叶子节点中的源查询数据,利用语法映射规则表进行匹配,在没有匹配到目标规则节点时,可以将其确定为兼容源查询语句。对于匹配到目标规则节点的源查询语句,可以替换正则表达式,以生成目标查询语句。
将该源查询语句和目标查询语句添加固定模式的兼容判断逻辑后,覆盖单链表中的该该源查询语句的链表节点区段,即更新第一叶子节点。然后重写文件头,引入MutliDBUtils.jar组件中定义的databaseId,即引入目标数据库标识。之后可以使用内存中更新后的单链表,即基于第二组件文件树生成的第二组件文件覆盖原第一组件文件文件。
需要说明的是,可以利用与.java格式的第一组件文件的处理方法相似或相应的方法,处理.groovy和.py格式的第一组件文件。
在对每一个第一组件文件进行更新后,可以得到对应的第二组件文件,然后可以将各个第二组件文件安装到本地maven仓库或者部署到远端maven库中。
图5示意性示出了根据本公开又一实施例的查询语句处理方法的流程图。
程序运行验证阶段的具体流程可以参考图5以及如下内容。
如图5所示,在步骤S510,可以识别当前连接的数据库的数据库类型。例如可以基于识别得到的数据库厂商标识(即目标数据库类型标识)databaseid来确定数据库类型,然后将识别到的databaseid注入到Spring框架环境中。
在步骤S520,可以识别更新得到的第二项目文件(根据更新后的第二项目文件树生成的第二项目文件)中第二组件文件的文件格式。然后根据识别得到的文件格式,启动对应的数据库访问模式。
识别得到第二组件文件为.xml格式文件的情况下,通过Mybatis访问数据库的模式执行步骤S531~操作S534。
例如,在步骤S531,首先通过第二组件文件中,与第二叶子节点对应的第二叶子节点标识定位到映射器中的相应的第二叶子节点。
在步骤S532,判断第二叶子节点中是否存在与目标数据库类型标识对应的目标查询语句。
在步骤S532判断结果为是的情况下,执行步骤S533,执行目标查询语句。
在步骤S532判断结果为否的情况下,执行步骤S534,查询与源查询语句对应的目标数据库指令和/或兼容目标查询语句。
然后执行步骤S533,执行目标查询语句。即可以目标数据库指令和/或兼容目标查询语句。
识别得到第二组件文件为.java格式文件的情况下,通过JDBC(Java DataBaseConnectivity,Java数据库连接技术)访问数据库的模式,运行时主要是通过在程序运行时在分支中根据Spring框架启动时注入到环境中的目标数据库标识来判断执行相应的目标查询语句,即可以参考执行步骤S541~操作S544。
例如,在步骤S541,定位第二组件文件中的第二叶子节点。
在步骤S542,判断第二叶子节点中是否存在兼容源查询语句。
在步骤S542的判断结果为是的情况下,执行步骤S543,调用与兼容源查询语句对应的兼容目标查询语句。
执行步骤S544,执行兼容目标查询语句。
在步骤S542的判断结果为否的情况下,执行步骤S545,调用第二叶子节点中的目标查询语句。
然后执行步骤544,执行目标查询语句。
基于步骤S533和步骤544的执行结果,可以执行步骤S550,返回查询语句执行结果。
数据库操作执行完毕后,这两种模式都会将执行结果返回给应用层代码,从而继续执行后续的业务逻辑。
根据本公开的实施例,通过将项目组件进行智能化、自动流水线化更新,可以让用户只需要集中精力于异构数据库的语法差异以形成语法映射规则,其他易出错的简单分析和手工操作主要交给代码自动生成操作步骤,从而提升查询语句的转译效率,以及系统中数据库操作执行的整体效率。
基于上述查询语句处理方法,本公开还提供了一种查询语句处理装置。以下将结合图6对该装置进行详细描述。
图6示意性示出了根据本公开实施例的查询语句处理装置的结构框图。
如图6所示,该实施例的查询语句处理装置600包括第一构建模块610、第一更新模块620和第二更新模块630。
第一构建模块610用于根据从第一组件文件中提取得到的源查询语句,构建第一组件文件树,其中,第一组件文件树包括存储有源查询语句的第一叶子节点。
第一更新模块620用于利用与源查询语句对应的第二语法映射规则,更新第一叶子节点中的源查询语句,得到适用于对目标数据库执行数据库操作的目标查询语句。
第二更新模块630用于根据目标查询语句和第一叶子节点之间的对应关系,更新第一组件文件树中的第一叶子节点,得到适用于在目标数据库中执行的第二组件文件。
根据本公开的实施例,第一更新模块包括:规则匹配单元和第一更新单元。
规则匹配单元用于将第一叶子节点中的源查询语句与语法映射规则表中的候选规则节点进行匹配,得到与源查询语句中的目标关键字匹配的目标规则节点,其中,目标规则节点关联存储有目标关键字和第二语法映射规则。
第一更新单元用于利用目标规则节点中的第二语法映射规则,更新源查询语句中的第一语法映射规则,得到目标查询语句。
根据本公开的实施例,查询语句处理装置还包括:第一筛选模块和第一确定模块。
第一筛选模块用于根据源查询语句中的目标关键字和目标数据库标识,从预设数据库指令池中,筛选出与目标关键字对应的目标数据库指令,其中,目标数据库指令适用于对目标数据库执行数据库操作。
第一确定模块用于将目标数据库指令,确定为与源查询语句对应的目标查询语句。
根据本公开的实施例,在将第一叶子节点中的源查询语句与语法映射规则表中的候选规则节点进行匹配后,得到的匹配结果表征语法映射规则表中的候选规则节点与源查询语句中的目标关键字不匹配的情况下,查询语句处理装置还包括:第二确定模块和第三更新模块。
第二确定模块用于根据源查询语句中的目标关键字和目标数据库标识,从预设数据库指令池中,确定与目标关键字对应的目标数据库指令,其中,目标数据库指令适用于对目标数据库执行数据库操作。
第三更新模块用于根据目标数据库指令的目标数据库指令标识,更新第一组件文件树中,与目标数据库指令对应的第一叶子节点,得到更新后的新的第一组件文件树。
根据本公开的实施例,第一叶子节点中的源查询语句具有表征源数据库的数据库类型的源数据库标识。
第二更新模块包括:第二更新单元和第一生成单元。
第二更新单元用于将与第一叶子节点对应的目标查询语句,以及目标数据库标识,添加至第一叶子节点中,得到更新后的第二组件文件树,其中,目标数据库标识表征目标数据库的数据库类型。
第一生成单元用于根据第二组件文件树,生成第二组件文件。
根据本公开的实施例,第二更新模块还包括:第三更新单元、第二生成单元和第四更新单元。
第三更新单元用于利用与第一叶子节点对应的目标查询语句,替换第一组件文件中第一叶子节点各自的源查询语句,得到更新后的候选第二组件文件树。
第二生成单元用于根据候选第二组件文件树,生成候选第二组件文件。
第四更新单元用于对候选第二组件文件添加目标数据库标识,得到第二组件文件,其中,目标数据库标识表征目标数据库的数据库类型。
根据本公开的实施例,查询语句处理装置还包括:查询语句执行模块、第二筛选模块和兼容目标查询语句执行模块。
查询语句执行模块用于执行第二组件文件中的目标查询语句。
第二筛选模块用于在检测到第二组件文件中,包含有的兼容节点的情况下,根据兼容节点中的兼容源查询语句,以及目标数据库标识,从兼容查询语句库中筛选出与兼容源查询语句对应的兼容目标查询语句。
兼容目标查询语句执行模块用于执行兼容目标查询语句;其中,兼容节点仅存储兼容源查询语句。
根据本公开的实施例,第一组件文件包括N个,N为正整数。
查询语句处理装置还包括:第二构建模块和第四更新模块。
第二构建模块用于根据N个第一组件文件各自的文件层级标识,构建第一项目文件树,其中,文件层级标识表征第一组件文件的项目层级属性信息,第一项目文件树中,与项目层级属性信息对应的叶子节点,存储有具有项目层级属性信息的第一组件文件。
第四更新模块用于利用与第一组件文件对应的第二组件文件,更新第一项目文件树中的叶子节点,得到更新后的第二项目文件树。
根据本公开的实施例,第一构建模块610、第一更新模块620和第二更新模块630中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,第一构建模块610、第一更新模块620和第二更新模块630中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,第一构建模块610、第一更新模块620和第二更新模块630中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
需要说明的是,本公开的实施例中查询语句处理装置部分与本公开的实施例中查询语句处理方法部分是相对应的,查询语句处理装置部分的描述具体参考查询语句处理部分,在此不再赘述。
图7示意性示出了根据本公开实施例的适于实现查询语句处理方法的电子设备的方框图。
如图7所示,根据本公开实施例的电子设备700包括处理器701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。处理器701例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器701还可以包括用于缓存用途的板载存储器。处理器701可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 703中,存储有电子设备700操作所需的各种程序和数据。处理器701、ROM702以及RAM 703通过总线704彼此相连。处理器701通过执行ROM 702和/或RAM 703中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 702和RAM 703以外的一个或多个存储器中。处理器701也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备700还可以包括输入/输出(I/O)接口705,输入/输出(I/O)接口705也连接至总线704。电子设备700还可以包括连接至I/O接口705的以下部件中的一项或多项:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 702和/或RAM 703和/或ROM 702和RAM 703以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的方法。
在该计算机程序被处理器701执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分709被下载和安装,和/或从可拆卸介质711被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被处理器701执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
Claims (12)
1.一种查询语句处理方法,包括:
根据从第一组件文件中提取得到的源查询语句,构建第一组件文件树,其中,所述第一组件文件树包括存储有所述源查询语句的第一叶子节点;
利用与所述源查询语句对应的第二语法映射规则,更新所述第一叶子节点中的源查询语句,得到适用于对目标数据库执行数据库操作的目标查询语句;以及
根据所述目标查询语句和所述第一叶子节点之间的对应关系,更新所述第一组件文件树中的第一叶子节点,得到适用于在所述目标数据库中执行的第二组件文件。
2.根据权利要求1所述的方法,其中,利用与所述源查询语句对应的第二语法映射规则,更新所述第一叶子节点中的源查询语句包括:
将所述第一叶子节点中的源查询语句与语法映射规则表中的候选规则节点进行匹配,得到与所述源查询语句中的目标关键字匹配的目标规则节点,其中,所述目标规则节点关联存储有所述目标关键字和所述第二语法映射规则;以及
利用所述目标规则节点中的第二语法映射规则,更新所述源查询语句中的第一语法映射规则,得到所述目标查询语句。
3.根据权利要求2所述的方法,还包括:
根据所述源查询语句中的目标关键字和目标数据库标识,从预设数据库指令池中,筛选出与所述目标关键字对应的目标数据库指令,其中,所述目标数据库指令适用于对所述目标数据库执行数据库操作;以及
将所述目标数据库指令,确定为与所述源查询语句对应的目标查询语句。
4.根据权利要求2所述的方法,在将所述第一叶子节点中的源查询语句与语法映射规则表中的候选规则节点进行匹配后,得到的匹配结果表征所述语法映射规则表中的候选规则节点与所述源查询语句中的目标关键字不匹配的情况下,所述查询语句处理方法还包括:
根据所述源查询语句中的目标关键字和目标数据库标识,从预设数据库指令池中,确定与所述目标关键字对应的目标数据库指令,其中,所述目标数据库指令适用于对所述目标数据库执行数据库操作;
根据所述目标数据库指令的目标数据库指令标识,更新所述第一组件文件树中,与所述目标数据库指令对应的第一叶子节点,得到更新后的新的第一组件文件树。
5.根据权利要求1至4中任一项所述的方法,其中,所述第一叶子节点中的源查询语句具有表征源数据库的数据库类型的源数据库标识;
根据所述目标查询语句和所述第一叶子节点之间的对应关系,更新所述第一组件文件树中的第一叶子节点包括:
将与所述第一叶子节点对应的目标查询语句,以及目标数据库标识,添加至所述第一叶子节点中,得到更新后的第二组件文件树,其中,所述目标数据库标识表征所述目标数据库的数据库类型;以及
根据所述第二组件文件树,生成所述第二组件文件。
6.根据权利要求1至4中任一项所述的方法,其中,根据所述目标查询语句和所述第一叶子节点之间的对应关系,更新所述第一组件文件树中的第一叶子节点还包括:
利用与所述第一叶子节点对应的目标查询语句,替换所述第一组件文件中所述第一叶子节点各自的源查询语句,得到更新后的候选第二组件文件树;
根据所述候选第二组件文件树,生成候选第二组件文件;以及
对所述候选第二组件文件添加目标数据库标识,得到所述第二组件文件,其中,所述目标数据库标识表征所述目标数据库的数据库类型。
7.根据权利要求1所述的方法,还包括:
执行所述第二组件文件中的目标查询语句;
在检测到所述第二组件文件中包含有的兼容节点的情况下,根据所述兼容节点中的兼容源查询语句,以及目标数据库标识,从兼容查询语句库中筛选出与所述兼容源查询语句对应的兼容目标查询语句;以及
执行所述兼容目标查询语句;
其中,所述兼容节点仅存储所述兼容源查询语句。
8.根据权利要求1所述的方法,其中,所述第一组件文件包括N个,N为正整数;
所述查询语句处理方法还包括:
根据N个所述第一组件文件各自的文件层级标识,构建第一项目文件树,其中,所述文件层级标识表征所述第一组件文件的项目层级属性信息,所述第一项目文件树中,与所述项目层级属性信息对应的叶子节点,存储有具有所述项目层级属性信息的第一组件文件;以及
利用与所述第一组件文件对应的第二组件文件,更新所述第一项目文件树中的叶子节点,得到更新后的第二项目文件树。
9.一种查询语句处理装置,包括:
第一构建模块,用于根据从第一组件文件中提取得到的源查询语句,构建第一组件文件树,其中,所述第一组件文件树包括存储有所述源查询语句的第一叶子节点;
第一更新模块,用于利用与所述源查询语句对应的第二语法映射规则,更新所述第一叶子节点中的源查询语句,得到适用于对目标数据库执行数据库操作的目标查询语句;以及
第二更新模块,用于根据所述目标查询语句和所述第一叶子节点之间的对应关系,更新所述第一组件文件树中的第一叶子节点,得到适用于在所述目标数据库中执行的第二组件文件。
10.一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行根据权利要求1~8中任一项所述的方法。
11.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~8中任一项所述的方法。
12.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现根据权利要求1~8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211442424.4A CN115794858A (zh) | 2022-11-17 | 2022-11-17 | 查询语句处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211442424.4A CN115794858A (zh) | 2022-11-17 | 2022-11-17 | 查询语句处理方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115794858A true CN115794858A (zh) | 2023-03-14 |
Family
ID=85438667
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211442424.4A Pending CN115794858A (zh) | 2022-11-17 | 2022-11-17 | 查询语句处理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115794858A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117931095A (zh) * | 2024-03-21 | 2024-04-26 | 腾讯科技(深圳)有限公司 | 地图数据存储方法、装置、电子设备和存储介质 |
-
2022
- 2022-11-17 CN CN202211442424.4A patent/CN115794858A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117931095A (zh) * | 2024-03-21 | 2024-04-26 | 腾讯科技(深圳)有限公司 | 地图数据存储方法、装置、电子设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10102229B2 (en) | Validating data integrations using a secondary data store | |
US8392880B2 (en) | Rapid application development for database-aware applications | |
US11080305B2 (en) | Relational log entry instituting system | |
US11429365B2 (en) | Systems and methods for automated retrofitting of customized code objects | |
US11023500B2 (en) | Systems and methods for code parsing and lineage detection | |
US10977011B2 (en) | Structured development for web application frameworks | |
US10452628B2 (en) | Data analysis schema and method of use in parallel processing of check methods | |
WO2022089188A1 (zh) | 一种代码处理方法、装置、设备及介质 | |
US20150261507A1 (en) | Validating sql queries in a report | |
US20210182035A1 (en) | Rapid Code Compiling System | |
CN115599386A (zh) | 代码生成方法、装置、设备及存储介质 | |
CN116560683A (zh) | 软件更新方法、装置、设备及存储介质 | |
US20200097260A1 (en) | Software application developer tools platform | |
CN115794858A (zh) | 查询语句处理方法、装置、设备及存储介质 | |
US20240078171A1 (en) | Techniques for model artifact validation | |
CN112650526B (zh) | 版本一致性的检测方法、装置、电子设备和介质 | |
US10223086B2 (en) | Systems and methods for code parsing and lineage detection | |
US10831473B2 (en) | Locating business rules in application source code | |
US11720553B2 (en) | Schema with methods specifying data rules, and method of use | |
US11119761B2 (en) | Identifying implicit dependencies between code artifacts | |
US11599354B2 (en) | Detecting misconfiguration and/or bug(s) in large service(s) using correlated change analysis | |
CN113762702A (zh) | 工作流部署方法、装置、计算机系统和可读存储介质 | |
Zhong et al. | Burner: Recipe automatic generation for HPC container based on domain knowledge graph | |
US20240177029A1 (en) | Adaptable and explainable application modernization disposition | |
KR100656559B1 (ko) | Bibd 방법론을 이용하는 프로그램 자동 개발 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |