CN110866029B - sql语句构建方法、装置、服务器及可读存储介质 - Google Patents
sql语句构建方法、装置、服务器及可读存储介质 Download PDFInfo
- Publication number
- CN110866029B CN110866029B CN201910962686.5A CN201910962686A CN110866029B CN 110866029 B CN110866029 B CN 110866029B CN 201910962686 A CN201910962686 A CN 201910962686A CN 110866029 B CN110866029 B CN 110866029B
- Authority
- CN
- China
- Prior art keywords
- variable
- node
- source data
- expression
- target source
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例公开一种sql语句构建方法、装置、服务器及可读存储介质,在所述方法中,通过解析获取到的配置文件,获得配置文件中的目标源数据,进一步的获取目标源数据中包含的变量以及变量表达式,并基于获取到的变量及变量表达式构建映射变量层级树,生成与映射变量层级树对应的sql语句。通过上述方式,能够获取各种动态执行可能的sql语句,保证生成的sql覆盖所有的动态执行情况下生成的sql。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种sql语句构建方法、装置、服务器及可读存储介质。
背景技术
随着科学技术的不断发展,业务系统能够实现的功能越来越复杂,以支付宝的业务系统为例,能够实现在线支付、转账、查询等功能。为了对业务系统进行分析时,可以采用通过数据血缘的方法,即确定业务请求涉及到的数据落入到了哪些数据库、表、字段中。通常数据血缘可以根据对sql语句进行解析得到,因此,如何获取生成sql的实现访问表、列,确保生成sql的有效性是至关重要的。
发明内容
本说明书实施例提供及一种sql语句构建方法、装置、服务器及可读存储介质。
第一方面,本说明书实施例提供一种sql语句构建方法,包括:
获取用于配置数据库访问层的配置文件,所述配置文件中包含有目标源数据;
解析所述配置文件,获取所述目标源数据中包含的变量以及变量表达式;
基于所述目标源数据中包含的变量以及变量表达式,构建变量映射层级树;
基于所述变量映射层级树,生成与所述变量映射层级树对应的sql语句。
第二方面,本说明书实施例提供一种sql语句构建装置,包括:
第一获取模块,用于获取用于配置数据库访问层的配置文件,所述配置文件中包含有目标源数据;
第二获取模块,用于解析所述配置文件,获取所述目标源数据中包含的变量以及变量表达式;
构建模块,用于基于所述目标源数据中包含的变量以及变量表达式,构建变量映射层级树;
语句生成模块,用于基于所述变量映射层级树,生成与所述变量映射层级树对应的sql语句。
第三方面,本说明书实施例提供一种服务器,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行上述任一项所述方法的步骤。
第四方面,本说明书实施例提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项所述方法的步骤。
本说明书实施例有益效果如下:
在本说明书实施例提供的sql语句构建方法中,通过对获取到的用于配置数据访问层的配置文件进行解析,获取配置文件中的目标源数据包含的变量以及变量表达式,并基于目标源数据中包含的变量以及变量表达式,构建变量映射层级树,基于变量映射层级树,生成sql语句。上述方案中,通过构建变量映射层级树的方式,能够清楚且准确的刻画变量之间的层级关系,且变量映射层级树中包含了目标源数据中的所有变量,因此生成的sql语句能够较好的还原目标源数据中原有的操作语句,与目标源数据的匹配度更高,实现了使用静态代码获取各种动态执行可能的sql语句,保证生成的sql覆盖所有的动态执行情况下生成的sql。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本说明书实施例第一方面提供的一种sql语句构建方法的流程图;
图2为本说明书实施例示出的变量映射层级树的示意图;
图3为本说明书实施例第二方面提供的sql语句构建装置的示意图;
图4为本说明书实施例第三方面提供的服务器的示意图。
具体实施方式
为了更好的理解上述技术方案,下面通过附图以及具体实施例对本说明书实施例的技术方案做详细的说明,应当理解本说明书实施例以及实施例中的具体特征是对本说明书实施例技术方案的详细的说明,而不是对本说明书技术方案的限定,在不冲突的情况下,本说明书实施例以及实施例中的技术特征可以相互组合。
第一方面,本说明书实施例提供一种sql语句构建方法,如图1所示,为本说明书实施例提供的sql语句构建方法的流程图,该方法包括以下步骤:
步骤S11:获取用于配置数据库访问层的配置文件,所述配置文件中包含有目标源数据;
步骤S12:解析所述配置文件,获取所述目标源数据中包含的变量以及变量表达式;
步骤S13:基于所述目标源数据中包含的变量以及变量表达式,构建变量映射层级树;
步骤S14:基于所述变量映射层级树,生成与所述变量映射层级树对应的sql语句。
本说明书实施例中的方法,可以应用于系统的服务器中,为了便于说明,这里以业务系统为例,业务系统可以涉及多个子系统,多个子系统之间可以协同作用来实现各种业务请求,业务系统中包含有多个数据库,用于存储业务相关的各类数据。
配置文件为用于配置数据库访问层的配置文件,通过配置文件的源代码可以实现数据源、sql语句、字段映射关系等的配置、访问。例如,如果使用MyBatis来配置数据库时,配置文件可以为MyBatis的Mapper.xml文件。当然,如果使用其他方式来配置数据库,如JDBC(Java DataBase Connectivity,java数据库连接)、Hibernate等,配置文件可以为相应方式的配置文件,这里不做限定。为了便于说明,本说明书实施例中以基于MyBatis配置数据库为例,来对本说明书提供的sql语句构建方法进行说明。
配置文件中包含有目标源数据,目标源数据可以提供对数据库进行操作的各种指令。举例来讲,在配置文件为MyBatis的Mapper.xml文件时,目标源数据可以为配置文件中的SqlSource。具体的,目标源数据中可以包含有各种类型的节点标签,例如,SqlSource中可以包含有trim节点标签、choose节点标签、foreach节点标签、if节点标签等。节点标签下包含有要操作的变量以及对应的变量表达式,变量表达式可以是条件表达式、赋值表达式等。目标源数据中可以包括一个或一个以上的变量以及变量表达式。通过对配置文件进行解析,可以将目标源数据中包含的所有变量以及对应的变量表达式提取出来。
进一步的,基于目标源数据中的变量以及变量表达式,构建变量映射层级树。变量映射层级树可以反映变量之间的关联,将变量之间的层级关系以变量映射层级树的形式表示出来。本说明书实施例中,变量映射层级树的构建可以根据实际需要进行选择,例如逐层构建层级树,或者先确定层级树的每个分支,然后将所有分支关联到根节点以构建层级树,这里不做限定。变量映射层级树可以覆盖目标源数据中的所有变量,变量映射层级树的节点可以包括用于表征变量的节点以及用于表征变量值的取值节点。
变量映射层级树构建好之后,基于变量映射层级树可以得到树结构中所有变量以及变量值的信息,即获取到了目标源数据中访问数据库列表的信息,进一步的,对得到的变量以及变量值的信息进行sql语句拼接,得到与目标源数据对应的完整sql语句。
上述方案中,在目标源数据中提取出与数据库列表信息相关的变量及变量表达式,通过构建变量映射层级树来确定拼接sql语句的变量层级关系,由于变量映射层级树能够包含目标源数据中所有的变量,能够获取生成sql的实现访问表、列,因此确保了生成sql的有效性,以及保证了生成的sql语句的高保真性,最大限度的保留了目标源数据中的信息。
本说明书实施例中,获取目标源数据中包含的变量以及变量表达式可以通过以下方式实现:解析所述配置文件,确定所述目标源数据的类型,以及确定所述目标源数据中的N个节点标签,N为正整数;基于所述目标源数据的类型,对所述N个节点标签进行遍历,得到与每个节点标签对应的变量以及变量表达式。
在具体实施过程中,配置文件中可以有多个部分组成,例如,在Mapper.xml文件中包括MappedStatement,MappedStatement中又包括SqlSource。为了获取目标源数据SqlSource,通过解析配置文件获得MappedStatement,再获取其中的SqlSource。在一个配置文件中,可以包含一个或多个目标源数据,以多个目标源是数据为例,多个目标源数的类型可以相同,与可以不同。本说明书实施例中,目标源数据的类型包括:动态源数据(DynamicSqlSource)、静态源数据(StaticSqlSource)、原始源数据(RawSqlSource)。
目标源数据的类型可以通过不同源数据的属性来判断,例如,在MyBtatisd配置文件的代码中,如果select/update等标签体中包含有标签节点的,可以认为是动态源数据;如果仅包含有“$”,或者仅包含有“$”“#”的,认为是静态源数据;如果仅包含有“#”的,认为是原始源数据。
目标源数据中包含有节点标签,节点标签可以为预设标签集合中的元素,例如预设标签集合中包含有if、choose、foreach等标签。以目标源数据为sqlsource为例,sqlsource代码中包含有sqlnode,sqlnode即为节点标签,sqlnode可以使预先定义好的,例如,将sqlsource中的if、foreach等预先定义为sqlnode。这样,在解析配置文件时,可以准确的将节点标签进行定位,将目标源数据包含的N个节点标签解析出来。进一步的,通过对每个节点标签的遍历,得到每个节点标签的变量以及变量表达式。
对于不同类型的目标源数据,变量以及变量表达式的获取方式可以存在不同。本说明书实施例中的方案,对于每种类型的目标源数据,采用各自的获取方式来获取对应节点标签下的变量以及变量表达式。
本说明书实施例中,变量以及变量表达式的可以基于不同类型的目标源数据进行获取,例如,静态源数据的处理以“${”开始,以“}”结束的部分,用OGNL(Object GraphNavigation Language,对象图导航语言)表达式取出引用的变量及常量,用于生成变量映射层级树使用。同理,原始源数据将以“#{”开始,以“}”结束的部分用OGNL表达式取出引用的变量及常量,用于生成变量映射层级树使用。
在具体实施过程中,在所述目标源数据的类型为动态源数据类型时,所述遍历每个节点标签,得到与所述每个节点标签对应的变量以及变量表达式,包括:针对所述每个节点标签,基于该节点标签的属性,在所述目标源数据中确定出与该节点标签对应的变量以及变量表达式。
本说明书实施例中,动态源数据中可以包含有多个节点标签,例如,动态源数据包含有if节点标签和foreach节点标签。在节点标签的遍历过程中,依次处理每个节点标签,例如,首先处理if节点标签,在sqlsource中定位到if节点标签所在位置。例如,动态源数据中包含有以下语句:<if test=“offset!=null”>,则该语句中的if即为节点标签,test=“offset!=null”为动态sqlsource的条件。接下来,处理foreach节点标签,在sqlsource中定位到foreach节点标签所在位置,例如,foreach节点标签所在位置处的动态源数据的语句为<foreach collection=“list”item=“biz_code”open=“{“close=”}”separator=“,”>,则该语句中的foreach即为节点标签,后面的collection=“list”item=“biz_code”open=“{“close=”}”separator=“,”为动态sql拼装属性。
进一步的,根据每个节点标签的属性,确定出对应的变量以及变量表达式。举例来讲,if节点标签存在有test属性,test的属性值是一个符合OGNL要求的判断表达式。foreach节点标签包含有collection属性、item属性、index属性等,其中collection为需要遍历的数组或集合,item为元素的局部变量名,index为元素在数组或集合中的索引下标。
沿用上面的例子,在处理if节点标签时,根据test的属性,获取test属性中的OGNL表达式,提取出对应的变量以及变量表达式,在上面的<if test=“offset!=null”>中,与if节点标签对应的变量为offset,变量表达式为offset!=null。
通过这种方式,在遍历每个节点标签后,便可得到目标源数据中包含的所有节点标签对应的变量以及变量表达式。另外,对于静态目源数据和原始源数据的变量以及变量表达式的提取,提取过程与动态源数据中的变量以及变量表达式的提取过程类似,这里就不再赘述了。
在提取目标源数据中包含的所有变量及对应的变量表达式之后,便可以构建变量映射层级树。在具体实施过程中,变量映射层级树可以采用以下方式构建:针对每个节点标签,基于该节点标签的变量表达式,为该变量表达式对应的变量构建变量节点;为每个变量节点构建赋值节点,并将所述每个变量节点对应的赋值节点作为所述每个变量节点的子节点;为每个赋值节点赋值,并将所述每个变量节点连接到根节点,以构建所述变量映射层级树。
在具体实施过程中,构建变量映射层级树时,可以先针对每个变量以及变量表达式,构建一组变量映射,一组变量映射包括一个变量对应的变量节点与赋值节点之间的映射关系,其中,赋值节点为变量节点的子节点。对于提取到的多个变量,则构建多组变量映射,将多组变量映射中的第一级节点,即变量节点连接到根节点上,以完成变量映射层级树的构建。
本说明书实施例中,变量节点的类型可以包括映射类型、数组类型,还可以包括其他类型。为变量创建哪种类型的节点,是基于对应的变量表达式来确定,本说明书实施例中,在某个节点标签的变量表达式为依赖归属表达式时,为该变量表达式对应的变量构建映射类型节点(VarMapNode);在某个节点标签的变量表达式为数组表达式时,为该变量表达式对应的变量构建数组类型节点(VarArrayNode)。当然还可以创建其他类型节点,例如变量表达式为方法调用表达式时,创建方法类型节点(VarMethodNode)。
需要说明的是,提取到的变量可以包含有层级关系,以上述foreach节点标签语句<foreach collection=“list”item=“biz_code”open=“{“close=”}”separator=“,”>为例,提取到的变量为list数组中的biz_code变量,那么在构建该组变量映射时,先为list构建一个数组类型节点,在list节点的下一层级为biz_code构建一个映射类型节点,其中,list节点为biz_code节点的父节点。
为变量创建好变量节点之后,为每个变量创建赋值节点(VarEvalNode),为赋值节点的赋值可以通过实际需要进行设置,例如将预先设置好的值添加到赋值节点中,或者根据变量表达式为赋值节点赋值。本说明书实施例中,通过以下方式为赋值节点赋值:基于构建所述每个变量节点所用的变量表达式,确定所述每个变量节点的变量值;基于所述每个变量节点的变量值,为所述每个赋值节点赋值。
在具体实施例过程中,基于变量表达式确定变量值可以采用穷举法,针对一个变量,根据该变量对应的变量表达式进行正则匹配,在预设的数据库中按照一定顺序进行取值,如果取到的值符合变量表达式的条件,则将该值作为该变量节点的变量值,添加到该变量对应的赋值节点中,如果取到的值不符合变量表达式的条件,则在预设的数据库中选取下一个值,直到选取的值满足该变量表达式的条件。
为了便于对变量映射层级树的构建进行说明,请参考下面的例子,在该实施例中,目标源数据为:
在构建上述目标源数据的变量映射层级树时,首先解析目标源数据,确定目标源数据中的节点标签,在具体实施过程中,可以逐行在目标源数据中定位节点标签,然后确定该节点标签下的变量及变量表达式。举例来讲,通过逐行检测目标源数据,首先定位到WHERE节点标签处,获取WHERE节点标签下的变量,分别为dimType、startDate、endDate,接下来定位到foreach节点标签处,获取到的变量为list数组中的biz_code,然后定位到if节点标签出,获取变量offset。通过上述方式,得到上述目标源数据包含的所有变量。
进一步的,为每个变量构建变量节点,在MyBatis中,对“#{}”的处理方法为将所有传入的参数作为一个字符串来处理,对于变量表达式中包含有“#{}”的变量,构建映射类型节点,由于foreach中的list为数组,则为list创建数组类型节点,为biz_code创建映射类型节点。
接下来,为每个变量构建赋值节点,并赋值。在上面的例子中,需要分别为变量dimType、startDate、endDate、biz_code、offset创建赋值节点。在为赋值节点赋值时,可以根据变量各自对应的表达式来获取变量值。举例来讲,变量dimType通过“#{}”传入字符串作为变量值,变量值可以在预设的数据库中进行选取,例如,在预设的数据库中取出字符串AA,若AA满足变量dimType的条件,则将AA作为dimType的值。得到变量值之后,将变量值添加到dimType对应的赋值节点中。这样,每个变量节点和对应的赋值节点就可以看作是一组变量映射。
进一步的,将每一组变量映射中的变量节点关联到根节点上,就可以得到变量映射层级树。请参考图2,为基于上述目标源数据构建的变量映射层级树的示意图。其中,图2中的A表示VarArrayNode,M表示VarMapNode,E表示VarEvalNode。
在得到变量映射层级树之后,基于变量映射层级树,生成完整的sql语句。具体点的,sql语句的生成可以采用以下方式实现:基于所述变量映射层级树,生成目标数据表,所述目标数据表以键值形式存储所述目标源数据中包含的每个变量以及与所述每个变量对应的变量值;基于所述目标数据表,生成所述sql语句。
本说明书实施例,构建好变量映射层级树后,将变量映射层级树中的赋值节点中的值逐层上传,在根节点处形成目标数据表,该目标数据表以键值对的形式存储各个变量以及变量值。可见,在构建好变量映射层级树之后,能够从根节点处快速的得到构建sql语句所需的目标数据表,提高了sql语句的生成效率。仍沿用上面的例子,假如各个赋值节点对应的变量值分别为,dimType的变量值为AA、startDate的变量值为2018、endDate的变量值为2019、biz_code的变量值为b、offset的变量值为1,那么根节点处生成的数据表如表1所示:
表1
其中,由于list为数组,因此,list对应的键值为一数据表,其中包含有biz_code变量,且biz_code的变量值为b,list对应的数据表还可以包括其他变量以及变量值,可以通过循环处理过程得到,这里就不在举例了。
本说明书实施例中,在得到目标数据表之后,基于目标数据表进行sql语句拼接,得到完成的sql语句,sql语句的拼接可以根据实际需要进行设置,例如,可以采用MybatisApi来实现,或者采用其他方式,在这里不做限定。进一步的,在得到完整的sql语句之后,可以进一步的对sql语句进行解析,由于sql语句中涵盖了目标源数据中所有的变量,因此,sql语句能够最大限度的保留了目标源数据中的信息,实现了sql的高保真性,能够有效仿真出业务系统实际运行时对数据操作的sql语句。同时,对本说明书实施例生成的sql语句进行解析能够得到更完整的字段血缘关系。
第二方面,基于同一发明构思,本说明书实施例提供一种sql语句构建装置,请参考图3,包括:
第一获取模块31,用于获取用于配置数据库访问层的配置文件,所述配置文件中包含有目标源数据;
第二获取模块32,用于解析所述配置文件,获取所述目标源数据中包含的变量以及变量表达式;
构建模块33,用于基于所述目标源数据中包含的变量以及变量表达式,构建变量映射层级树;
语句生成模块34,用于基于所述变量映射层级树,生成与所述变量映射层级树对应的sql语句。
在一种可选实现方式中,第二获取模块32,还用于:
解析所述配置文件,确定所述目标源数据的类型,以及确定所述目标源数据中的N个节点标签,N为正整数;
基于所述目标源数据的类型,对所述N个节点标签进行遍历,得到与每个节点标签对应的变量以及变量表达式。
在一种可选实现方式中,目标源数据的类型包括动态源数据类型、静态源数据类型以及原始源数据类型。
在一种可选实现方式中,在所述目标源数据的类型为所述动态源数据类型时,第二获取模块32,还用于:
针对所述每个节点标签,基于该节点标签的属性,在所述目标源数据中确定出与该节点标签对应的变量以及变量表达式。
在一种可选实现方式中,构建模块33,用于:
针对每个节点标签,基于该节点标签的变量表达式,为该变量表达式对应的变量构建变量节点;
为每个变量节点构建赋值节点,并将所述每个变量节点对应的赋值节点作为所述每个变量节点的子节点;
为每个赋值节点赋值,并将所述每个变量节点连接到根节点,以构建所述变量映射层级树。
在一种可选实现方式中,构建模块33,还用于:
在某个节点标签的变量表达式为依赖归属表达式时,为该变量表达式对应的变量构建映射类型节点;
在某个节点标签的变量表达式为数组表达式时,为该变量表达式对应的变量构建数组类型节点。
在一种可选实现方式中,构建模块33,还用于:
基于构建所述每个变量节点所用的变量表达式,确定所述每个变量节点的变量值;
基于所述每个变量节点的变量值,为所述每个赋值节点赋值。
在一种可选实现方式中,语句生成模块34,用于:
基于所述变量映射层级树,生成目标数据表,所述目标数据表以键值对形式存储所述目标源数据中包含的每个变量以及与所述每个变量对应的变量值;
基于所述目标数据表,生成所述sql语句。
关于上述装置,其中各个模块的具体功能已经在本发明实施例提供的sql语句构建方法的实施例中进行了详细描述,此处将不做详细阐述说明。
第三方面,基于与前述实施例中sql语句构建方法同样的发明构思,本发明还提供一种服务器,如图4所示,包括存储器404、处理器402及存储在存储器404上并可在处理器402上运行的计算机程序,所述处理器402执行所述程序时实现前文所述sql语句构建方法的任一方法的步骤。
其中,在图4中,总线架构(用总线400来代表),总线400可以包括任意数量的互联的总线和桥,总线400将包括由处理器402代表的一个或多个处理器和存储器404代表的存储器的各种电路链接在一起。总线400还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口406在总线400和接收器401和发送器403之间提供接口。接收器401和发送器403可以是同一个元件,即收发机,提供用于在传输介质上与各种其他装置通信的单元。处理器402负责管理总线400和通常的处理,而存储器404可以被用于存储处理器402在执行操作时所使用的数据。
第四方面,基于与前述实施例中基于sql语句构建方法的发明构思,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前文所述基于sql语句构建方法的任一方法的步骤。
本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的设备。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令设备的制造品,该指令设备实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (16)
1.一种sql语句构建方法,所述方法包括:
获取用于配置数据库访问层的配置文件,所述配置文件中包含有目标源数据;
解析所述配置文件,获取所述目标源数据中包含的变量以及变量表达式,包括:确定所述目标源数据中的N个节点标签,N为正整数;
基于所述目标源数据中包含的变量以及变量表达式,构建变量映射层级树,包括:针对每个节点标签,基于该节点标签的变量表达式,为该变量表达式对应的变量构建变量节点;为每个变量节点构建赋值节点,并将所述每个变量节点对应的赋值节点作为所述每个变量节点的子节点;为每个赋值节点赋值,并将所述每个变量节点连接到根节点,以构建所述变量映射层级树;
基于所述变量映射层级树,生成与所述变量映射层级树对应的sql语句。
2.根据权利要求1所述的方法,所述解析所述配置文件,获取所述目标源数据中包含的变量以及变量表达式,包括:
解析所述配置文件,确定所述目标源数据的类型,以及确定所述目标源数据中的N个节点标签,N为正整数;
基于所述目标源数据的类型,对所述N个节点标签进行遍历,得到与每个节点标签对应的变量以及变量表达式。
3.根据权利要求2所述的方法,所述目标源数据的类型包括动态源数据类型、静态源数据类型以及原始源数据类型。
4.根据权利要求3所述的方法,在所述目标源数据的类型为所述动态源数据类型时,所述对所述N个节点标签进行遍历,得到与每个节点标签对应的变量以及变量表达式,包括:
针对所述每个节点标签,基于该节点标签的属性,在所述目标源数据中确定出与该节点标签对应的变量以及变量表达式。
5.根据权利要求1所述的方法,所述针对每个节点标签,基于该节点标签的变量表达式,为该变量表达式对应的变量构建变量节点,包括:
在某个节点标签的变量表达式为依赖归属表达式时,为该变量表达式对应的变量构建映射类型节点;
在某个节点标签的变量表达式为数组表达式时,为该变量表达式对应的变量构建数组类型节点。
6.根据权利要求1所述的方法,所述为每个赋值节点赋值,包括:
基于构建所述每个变量节点所用的变量表达式,确定所述每个变量节点的变量值;
基于所述每个变量节点的变量值,为所述每个赋值节点赋值。
7.根据权利要求1所述的方法,所述基于所述变量映射层级树,生成与所述变量映射层级树对应的sql语句,包括:
基于所述变量映射层级树,生成目标数据表,所述目标数据表以键值对形式存储所述目标源数据中包含的每个变量以及与所述每个变量对应的变量值;
基于所述目标数据表,生成所述sql语句。
8.一种sql语句构建装置,所述装置包括:
第一获取模块,用于获取用于配置数据库访问层的配置文件,所述配置文件中包含有目标源数据;
第二获取模块,用于解析所述配置文件,获取所述目标源数据中包含的变量以及变量表达式,包括:确定所述目标源数据中的N个节点标签,N为正整数;
构建模块,用于基于所述目标源数据中包含的变量以及变量表达式,构建变量映射层级树,包括:针对每个节点标签,基于该节点标签的变量表达式,为该变量表达式对应的变量构建变量节点;为每个变量节点构建赋值节点,并将所述每个变量节点对应的赋值节点作为所述每个变量节点的子节点;为每个赋值节点赋值,并将所述每个变量节点连接到根节点,以构建所述变量映射层级树;
语句生成模块,用于基于所述变量映射层级树,生成与所述变量映射层级树对应的sql语句。
9.根据权利要求8所述的装置,所述第二获取模块,还用于:
解析所述配置文件,确定所述目标源数据的类型,以及确定所述目标源数据中的N个节点标签,N为正整数;
基于所述目标源数据的类型,对所述N个节点标签进行遍历,得到与每个节点标签对应的变量以及变量表达式。
10.根据权利要求9所述的装置,所述目标源数据的类型包括动态源数据类型、静态源数据类型以及原始源数据类型。
11.根据权利要求10所述的装置,在所述目标源数据的类型为所述动态源数据类型时,所述第二获取模块,还用于:
针对所述每个节点标签,基于该节点标签的属性,在所述目标源数据中确定出与该节点标签对应的变量以及变量表达式。
12.根据权利要求8所述的装置,所述构建模块,还用于:
在某个节点标签的变量表达式为依赖归属表达式时,为该变量表达式对应的变量构建映射类型节点;
在某个节点标签的变量表达式为数组表达式时,为该变量表达式对应的变量构建数组类型节点。
13.根据权利要求8所述的装置,所述构建模块,还用于:
基于构建所述每个变量节点所用的变量表达式,确定所述每个变量节点的变量值;
基于所述每个变量节点的变量值,为所述每个赋值节点赋值。
14.根据权利要求8所述的装置,所述语句生成模块,用于:
基于所述变量映射层级树,生成目标数据表,所述目标数据表以键值对形式存储所述目标源数据中包含的每个变量以及与所述每个变量对应的变量值;
基于所述目标数据表,生成所述sql语句。
15.一种服务器,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现权利要求1-7任一项所述方法的步骤。
16.一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现权利要求1-7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910962686.5A CN110866029B (zh) | 2019-10-11 | 2019-10-11 | sql语句构建方法、装置、服务器及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910962686.5A CN110866029B (zh) | 2019-10-11 | 2019-10-11 | sql语句构建方法、装置、服务器及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110866029A CN110866029A (zh) | 2020-03-06 |
CN110866029B true CN110866029B (zh) | 2022-08-09 |
Family
ID=69652721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910962686.5A Active CN110866029B (zh) | 2019-10-11 | 2019-10-11 | sql语句构建方法、装置、服务器及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110866029B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113676437B (zh) * | 2020-05-14 | 2023-08-18 | 中国移动通信集团云南有限公司 | 参数获取方法、参数设置方法以及装置 |
CN111858280B (zh) * | 2020-07-16 | 2024-02-27 | 中国工商银行股份有限公司 | 一种sql信息处理方法、装置、设备及系统 |
CN112541335B (zh) * | 2020-12-24 | 2023-09-01 | 北京百度网讯科技有限公司 | 生成解读文本的方法、装置、电子设备及存储介质 |
CN112948418A (zh) * | 2021-02-25 | 2021-06-11 | 平安普惠企业管理有限公司 | 动态查询方法、装置、设备及存储介质 |
CN113656436A (zh) * | 2021-08-25 | 2021-11-16 | 成都航空职业技术学院 | 一种动态生成sql语句的方法 |
CN115080599B (zh) * | 2022-07-25 | 2022-11-25 | 成都烽顺科技有限公司 | 一种数据库查询sql字段血缘关系生成方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1881208A (zh) * | 2005-06-14 | 2006-12-20 | 联想(北京)有限公司 | 动态结构化查询语言语句的构造方法 |
CN101593180A (zh) * | 2008-05-30 | 2009-12-02 | 国际商业机器公司 | 将sparql查询转化成sql查询的方法和装置 |
CN108959496A (zh) * | 2018-06-26 | 2018-12-07 | 南京汇银迅信息技术有限公司 | 基于动态代理的跨数据库访问方法及抽象数据访问方法 |
CN109582662A (zh) * | 2018-10-26 | 2019-04-05 | 西安居正知识产权运营管理有限公司 | 一种管理系统数据库的动态建库方法 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7574652B2 (en) * | 2002-06-20 | 2009-08-11 | Canon Kabushiki Kaisha | Methods for interactively defining transforms and for generating queries by manipulating existing query data |
AU2002953555A0 (en) * | 2002-12-23 | 2003-01-16 | Canon Kabushiki Kaisha | Method for presenting hierarchical data |
US6836778B2 (en) * | 2003-05-01 | 2004-12-28 | Oracle International Corporation | Techniques for changing XML content in a relational database |
US7912628B2 (en) * | 2006-03-03 | 2011-03-22 | Inrix, Inc. | Determining road traffic conditions using data from multiple data sources |
TW201113731A (en) * | 2009-10-15 | 2011-04-16 | Inst Information Industry | Data query method, data query system and computer readable and writable recording medium |
US8645346B2 (en) * | 2011-06-16 | 2014-02-04 | Microsoft Corporation | Composable SQL query generation |
US20130117288A1 (en) * | 2011-11-08 | 2013-05-09 | Microsoft Corporation | Dynamically typed query expressions |
CN104657440B (zh) * | 2015-01-30 | 2020-05-15 | 欧阳江 | 结构化查询语句生成系统及方法 |
US10360236B2 (en) * | 2015-09-25 | 2019-07-23 | International Business Machines Corporation | Replicating structured query language (SQL) in a heterogeneous replication environment |
CN105446743A (zh) * | 2015-12-12 | 2016-03-30 | 天津南大通用数据技术股份有限公司 | 一种自动生成sql语句的系统及方法 |
US10962945B2 (en) * | 2017-09-27 | 2021-03-30 | Johnson Controls Technology Company | Building management system with integration of data into smart entities |
CN108121542B (zh) * | 2017-11-17 | 2021-07-06 | 广东睿江云计算股份有限公司 | 一种基于MyBatis的SQL语句的配置方法、系统 |
CN109446279A (zh) * | 2018-10-15 | 2019-03-08 | 顺丰科技有限公司 | 基于neo4j大数据血缘关系管理方法、系统、设备及存储介质 |
-
2019
- 2019-10-11 CN CN201910962686.5A patent/CN110866029B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1881208A (zh) * | 2005-06-14 | 2006-12-20 | 联想(北京)有限公司 | 动态结构化查询语言语句的构造方法 |
CN101593180A (zh) * | 2008-05-30 | 2009-12-02 | 国际商业机器公司 | 将sparql查询转化成sql查询的方法和装置 |
CN108959496A (zh) * | 2018-06-26 | 2018-12-07 | 南京汇银迅信息技术有限公司 | 基于动态代理的跨数据库访问方法及抽象数据访问方法 |
CN109582662A (zh) * | 2018-10-26 | 2019-04-05 | 西安居正知识产权运营管理有限公司 | 一种管理系统数据库的动态建库方法 |
Non-Patent Citations (2)
Title |
---|
Native XQuery processing in oracle XMLDB;Zhen Hua Liu;《Proceedings of the 2005 ACM SIGMOD international conference on Management of data June 2005》;20050614;828–833 * |
一种可扩展的XQuery-SQL转换模型EXSM的设计与实现;龙冠卿;《中国优秀硕士学位论文全文数据库 信息科技辑》;20070315;I138-880 * |
Also Published As
Publication number | Publication date |
---|---|
CN110866029A (zh) | 2020-03-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110866029B (zh) | sql语句构建方法、装置、服务器及可读存储介质 | |
CN110309196A (zh) | 区块链数据存储和查询方法、装置、设备及存储介质 | |
CN110032575A (zh) | 数据查询方法、装置、设备和存储介质 | |
CN112800095B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN107798017B (zh) | 分布式数据库中的执行计划信息生成方法和系统 | |
CN113238740B (zh) | 代码生成方法、代码生成装置、存储介质及电子设备 | |
CN113010183B (zh) | 一种代码转换方法及装置 | |
CN109614312A (zh) | 测试用例生成方法、装置、电子设备及存储介质 | |
Lehmann et al. | Managing geospatial linked data in the GeoKnow project | |
CN116795859A (zh) | 数据分析方法、装置、计算机设备和存储介质 | |
CN115599386A (zh) | 代码生成方法、装置、设备及存储介质 | |
CN118363569A (zh) | 一种基于SpringBoot、mybatis框架实现数据库国产化改造的方法、系统、设备及存储介质 | |
CN110806973A (zh) | 一种接口报文的自动生成方法及装置 | |
US11055275B2 (en) | Database revalidation using parallel distance-based groups | |
US10003492B2 (en) | Systems and methods for managing data related to network elements from multiple sources | |
CN115130043B (zh) | 基于数据库的数据处理方法、装置、设备及存储介质 | |
CN111221860A (zh) | 基于大数据的混合查询优化方法及装置 | |
CN115455006A (zh) | 数据处理方法、数据处理装置、电子设备及存储介质 | |
CN112287005B (zh) | 一种数据处理方法、装置、服务器及介质 | |
US12039266B2 (en) | Methods and system for the extraction of properties of variables using automatically detected variable semantics and other resources | |
Dyer et al. | Boa: An enabling language and infrastructure for ultra-large-scale msr studies | |
CN110019177A (zh) | 规则存储的方法和装置 | |
CN110471708B (zh) | 基于可重用组件的配置项获取的方法及装置 | |
CN112988778A (zh) | 一种处理数据库查询脚本的方法和装置 | |
CN110489608A (zh) | 一种电子证照目录管理系统及方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |