基于SQL的代码转换方法、装置、设备及介质
文献发布时间:2024-04-18 20:00:50
技术领域
本申请涉及软件技术领域,尤其涉及一种基于SQL的代码转换方法、装置、设备及介质。
背景技术
随着业务需求的不断提高,一些传统的商业数据库已经不能适应目前的数据处理要求。比如其相对于现代的开源数据库管理系统而言,性能和可扩展性的劣势十分明显;且传统的商业数据库的可靠性较差,易发生数据泄露和安全漏洞;同时使用伴随着支付高昂的许可费用和维护费用。
为了避免上述问题,现有的业务处理逐渐向表现更加优异的开源数据库进行转型,但转型过程中需进行代码的转换,由于代码转换过程靠人工实现,导致进度缓慢,且浪费了大量的人力物力,无法提高开发效率。
发明内容
本申请提供一种基于SQL的代码转换方法、装置、设备及介质,用以解决现有技术中的人工代码转换无法提高开发效率的问题。
第一方面,本申请提供一种基于SQL的代码转换方法,所述方法包括:
获取SQL查询语句,所述SQL查询语句包括SELECT子句、FROM子句以及WHERE子句;
根据所述SQL查询语句和预设的第一正则表达式,获取拆分结果,所述拆分结果包括SELECT子句对应的查询字段、FROM子句对应的表名、WHERE子句对应的条件表达式;
根据所述拆分结果和预设的映射关系,将所述条件表达式转换为目标语言的逻辑表达式,所述映射关系用于指示所述条件表达式与所述目标语言的转换关系;
根据所述查询字段、表名以及所述逻辑表达式,基于所述目标语言执行查询操作,并获取查询结果。
在一种可能的实现方式中,所述根据所述拆分结果和预设的映射关系,将所述条件表达式转换为目标语言的逻辑表达式,包括:
根据预设的第二正则表达式,获取所述条件表达式中的至少一个逻辑运算符,并获取每个所述逻辑运算符位置前对应连接的子表达式,所述逻辑运算符是按照从预设排列顺序依次进行获取的;
根据所述映射关系,将每个所述子表达式转换为对应的所述目标语言的子逻辑表达式;
根据所述子逻辑表达式和所述逻辑运算符的排列顺序,获取所述目标语言的逻辑表达式。
在一种可能的实现方式中,所述根据所述映射关系,将每个所述子表达式转换为对应的所述目标语言的子逻辑表达式,包括:
根据所述第二正则表达式,获取每个所述子表达式中的条件字段、运算符号以及所述条件字段的值;其中,所述第二正则表达式包括第一分组、第二分组以及第三分组,所述第一分组用于识别所述条件字段,所述第二分组用于识别所述运算符号,所述第三分组用于识别所述条件字段的值;
根据所述映射关系,分别获取每个所述子表达式中条件字段、运算符号和所述条件字段的值对应的所述目标语言的子逻辑表达式。
在一种可能的实现方式中,所述根据所述映射关系,分别获取每个所述子表达式中条件字段、运算符号和所述条件字段的值对应的所述目标语言的子逻辑表达式,包括:
判断所述条件字段的值是否为目标格式,所述目标格式包括数字、字符串或字段名;
若是,则根据所述映射关系、条件字段、运算符号以及所述条件字段的值,获取匹配的所述目标语言的子逻辑表达式。
在一种可能的实现方式中,若所述条件字段的值不是目标格式,则所述方法还包括:
获取生成所述SQL查询语句的数据库信息;
根据所述数据库信息,获取匹配的方言转化表,其中,所述数据库与所述方言转化表为一一对应的关系;
根据所述方言转化表和所述条件字段的值,获取所述条件字段的值匹配的目标语言,所述方言转化表用于指示所述条件字段的值与所述目标语言的对应关系。
在一种可能的实现方式中,所述基于所述目标语言执行查询操作,并获取查询结果,包括:
根据所述表名,获取待查询数据;
遍历所述待查询数据,获取使得所述逻辑表达式为真的子数据,所述子数据用于指示所述查询字段对应的值;
根据所述子数据,获取查询结果,所述查询结果包含至少一条所述子数据。
在一种可能的实现方式中,所述根据所述表名,获取候选查询数据,包括:
获取所述表名对应的源数据;
将所述源数据转化为目标数据容器对应的存储格式,并存储进入所述目标数据容器,所述存储格式用于指示将所述源数据对应为多个键值对的形式;
将所述目标数据容器中的源数据作为所述待查询数据。
第二方面,本申请提供一种基于SQL的代码转换装置,所述装置包括:
获取模块,用于获取SQL查询语句,所述SQL查询语句包括SELECT子句、FROM子句以及WHERE子句;
所述获取模块还用于,根据所述SQL查询语句和预设的第一正则表达式,获取拆分结果,所述拆分结果包括SELECT子句对应的查询字段、FROM子句对应的表名、WHERE子句对应的条件表达式;
处理模块,用于根据所述拆分结果和预设的映射关系,将所述条件表达式转换为目标语言的逻辑表达式,所述映射关系用于指示所述条件表达式与所述目标语言的转换关系;
所述处理模块还用于,根据所述查询字段、表名以及所述逻辑表达式,基于所述目标语言执行查询操作,并获取查询结果。
第三方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如第一方面任意一项所述的方法。
第四方面,本申请提供一种电子设备,包括:至少一个处理器和存储器;其中,
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如第一方面任一项所述的方法。
本申请提供的基于SQL的代码转换方法、装置、设备及介质,通过获取SQL查询语句,并通过正则表达式进行拆分,获取SQL查询语句中对应的查询字段、表名和条件表达式,进一步基于预设的映射关系,对条件表达式进行拆分和转换,得到对应目标语言的逻辑表达式。根据查询字段、表名以及逻辑表达式,基于目标语言执行查询操作,获取查询结果。该方法不需人工编码就可实现SQL代码的转换,有效提高开发效率,并且成本低、简单高效,节省了人力物力。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为本申请实施例提供的基于SQL的代码转换方法流程图一;
图2为本申请实施例提供的基于SQL的代码转换方法流程图二;
图3为本申请实施例提供的基于SQL的代码转换方法流程图三;
图4为本申请实施例提供的基于SQL的代码转换方法流程图四;
图5为本发明实施例提供的一种基于SQL的代码转换装置图;
图6为本发明实施例提供的电子设备的硬件示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
由于一些传统的数据库,例如Oracle等,具有一些不可忽略的劣势,导致不再合适新的软件开发的浪潮。例如,成本高昂:在使用这些数据库时,需要支付高昂的许可费用和维护费用,相比之下,一些开源数据库管理系统可以提供费用较低的许可模式,使得开发团队可以在降低成本的同时实现类似的功能;技术过时:传统的数据库相对于现代的开源解决方案来说,它的技术已经相对过时,现代开源数据库管理系统提供了更好的性能、可扩展性和灵活性,它们通过持续的创新,可以满足不断增长的数据需求和新兴技术的挑战;安全问题:传统数据库易发生安全漏洞和数据泄露事件,这对于使用者来说是一个严重的担忧,而开源数据库管理系统可以提供更高的安全性。此外,云原生应用开发作为当前的趋势,其强调在云环境中构建和部署应用程序,然而,传统的数据库在云原生环境中也可能面临一些挑战,例如传统数据库需要昂贵的硬件和资源来满足其性能需求,这增加了在云环境中的成本和复杂性。
因此,目前的软件开发越来越多的选择向新的开源数据库进行转型,但在转型过程中不可避免的需要进行代码转换,通常以人工编程方式实现代码的转换,但这种方式使得进度缓慢,且浪费了大量的人力物力,导致无法提高开发效率。
针对上述问题,本申请提供一种基于SQL的代码转换方法,获取待转换的SQL查询语句,通过正则表达式对其进行拆分,得到查询字段、表名和条件表达式,并进一步对SQL查询语句中的条件表达式进行解析和转换,以得到目标语言可执行的逻辑表达式,并基于表名和查询字段,执行目标语言下的数据查询操作,并返回查询结果。该方法不需人工编码就可实现代码转换,使得开发效率有效提高,且成本低、简单高效,同时易于扩展,快速获得效益。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图1为本申请实施例提供的基于SQL的代码转换方法流程图一。如图1所示,该方法包括:
S101、获取SQL查询语句,所述SQL查询语句包括SELECT子句、FROM子句以及WHERE子句。
在本步骤中,标准的SQL查询语句至少包括“SELECT...”、“FROM...”、“WHERE...”三部分。其中,SELECT子句是SQL查询语句的核心部分,用于执行要从数据库中检索的数据列,可以在SELECT子句中列出要查询的字段。FROM子句用于指定查询的数据来源表,可以在FROM子句中指定要查询的表名或表的别名,查询就会从指定的表中检索数据,WHERE子句用于指定查询的筛选条件,可以使用各种条件运算符过滤满足特定条件的数据行。应理解,SQL查询语句来自于SQL脚本,SQL脚本包括一个或多个待转换的SQL查询语句。
S102、根据所述SQL查询语句和预设的第一正则表达式,获取拆分结果,所述拆分结果包括SELECT子句对应的查询字段、FROM子句对应的表名、WHERE子句对应的条件表达式。
在本步骤中,基于上述SQL查询语句的构成,可以对应通过一个正则表达式对每个子句进行拆分,获取拆分结果。即通过第一正则表达式获取SQL查询语句中的查询字段、表名和条件表达式,应理解,该第一正则表达式可以用于对SQL查询语句进行识别和拆分。
具体的,通过第一正则表达式获取查询字段,例如,查询字段可以是某个表中的字段,也可以表示存在记录的一个值。通过第一正则表达式获取的表名,表名对应查询的数据来源表,示例性的,当表名对应的表有别名时,可以获取表的别名,以通过别名进行查询。需要注意的是,如果某个表没有别名,则默认取用固定的符号进行代替,为了防止冲突或混乱,脚本中最多智能有一个不带别名的表,否则可以进行报错。通过第一正则表达式获取的条件表达式,可以得到判断逻辑规则的条件,即查询的筛选条件。
上述识别拆分的过程通过正则表达式进行实现,即表示无需借助各种词法、语法分析器,十分便捷。通过识别匹配获取多个分组内容,第一分组内容可以为SELECT后面的查询字段,第二分组内容可以为FROM后面查询的表名或别名,第三个分组内容可以为WHERE后面的条件表达式。示例性的,如需判断子查询,则要在对应的部分进行递归处理,同时设置递归的层级限制,避免程序进行不良循环。
S103、根据所述拆分结果和预设的映射关系,将所述条件表达式转换为目标语言的逻辑表达式,所述映射关系用于指示所述条件表达式与所述目标语言的转换关系。
在本步骤中,根据拆分结果中的条件表达式,需要对条件表达式进一步解析转换,得到可执行的目标语言的逻辑表达式。映射关系可以对条件表达式进行转换,即将条件表达式中的运算符号转换为目标语言中可以使用的运算符号,将SQL查询语句中的条件表达式中的子条件表达式转换为目标语言中的子逻辑表达式。
应理解,条件表达式中可以包含多个子条件表达式,并通过运算符号进行连接,例如AND或OR。对应的,当条件表达式包含多个子条件表达式时,示例性的,可以通过正则表达式进一步进行识别拆分,获取每个子条件表达式,再对每个子条件表达式进行转换,得到子逻辑表达式,再对每个子逻辑表达式进行连接,形成逻辑表达式。
S104、根据所述查询字段、表名以及所述逻辑表达式,基于所述目标语言执行查询操作,并获取查询结果。
在本步骤中,在获取转换的逻辑表达式后,将查询字段、表名对应的数据以及逻辑表达式作为执行数据查询操作的入参,以作为执行引擎接口的参数进行调用,从而进行查询操作,并获取查询结果。示例性的,可以选择一种动态语言来作为执行引擎。例如,若目标语言为JAVA,则可以选择用ScriptEngine等进行执行,在此不作限制。
本实施例提供的基于SQL的代码转换方法,通过获取SQL查询语句,并通过正则表达式进行拆分,获取SQL查询语句中对应的查询字段、表名和条件表达式,进一步基于预设的映射关系,对条件表达式进行拆分和转换,得到对应目标语言的逻辑表达式。根据查询字段、表名以及逻辑表达式,基于目标语言执行查询操作,获取查询结果。该方法不需人工编码就可实现SQL代码的转换,有效提高开发效率,并且成本低、简单高效,节省了人力物力。
图2为本申请实施例提供的基于SQL的代码转换方法流程图二。如图2所示,在图1实施例的基础上,将条件表达式转换为逻辑表达式的过程进行详细说明,该方法包括:
S201、根据预设的第二正则表达式,获取所述条件表达式中的至少一个逻辑运算符,并获取每个所述逻辑运算符位置前对应连接的子表达式,所述逻辑运算符是按照从预设排列顺序依次进行获取的。
在本步骤中,根据预设的第二正则表达式,通过其分组捕获功能,可以获得条件表达式中连接子条件表达式的逻辑运算符和各个子条件表达式。一般单个条件表达式可以拆分为3-4个部分,然后再进一步对这几个部分分别进行转换。第二正则表达式可以对条件表达式进行中的子条件表达式进行识别拆分,进一步的,还可以对子表达式进一步进行识别和拆分,以便基于映射关系进行转换。
需要说明的是,获取到转换的子逻辑表达式后,需要组合成为逻辑表达式。因此,在获取条件表达式中的逻辑运算符时,以预设排列顺序依次进行获取,以便按照预设顺序进行组合。
示例性的,若条件表达式为“o.name='XXX部门'and e.organ_id=o.id ande.title='高级工程师”,则识别到的第一个逻辑运算符and前的子条件表达式“o.name='XXX部门'”,为了与逻辑运算符进行对应,可以在子条件表达式后连接逻辑运算符,即该子条件表达式也可以为“o.name='XXX部门'and”。
S202、根据所述映射关系,将每个所述子表达式转换为对应的所述目标语言的子逻辑表达式。
在本步骤中,根据获取的每个子表达式,基于映射关系将其转换为对应的目标语言的子逻辑表达式。其中,映射关系包括对子表达式中的条件字段、运算符号和条件字段的值分别转换为目标语言的对应关系。
S203、根据所述子逻辑表达式和所述逻辑运算符的排列顺序,获取所述目标语言的逻辑表达式。
在本步骤中,按照逻辑运算符的排列顺序,可以对子逻辑表达式依次进行拼接。
示例性的,在前述步骤中,由于子条件表达式中包含后面连接的逻辑运算符,在依次对子条件表达式进行转换时,若判断当前处理的子条件表达式存在逻辑运算符,可以同时将该逻辑运算符转换为目标语言的逻辑运算符,并且以此为处理相邻下一个子条件表达式的标志,判断是否存在下一个待处理的子条件表达式,若当前已经为最后一个子条件表达式,则结束条件表达式的转换。对应的,条件表达式依次进行转换后,可以根据逻辑运算符的排列顺序、或根据处理顺序,依次进行组合,得到对应的逻辑表达式。
本实施例提供的基于SQL的代码转换方法,通过正则表达式识别拆分条件表达式中的子条件表达式,并分别对子条件表达式进行转换,获取目标语言的子逻辑表达式,根据逻辑运算符的排列顺序,获取逻辑表达式。该方法基于预设的正则表达式进行转换语句的识别,实现方法简单,成本低,有利于提高开发效率。
图3为本申请实施例提供的基于SQL的代码转换方法流程图三。如图3所示,在图2实施例的基础上,将每个所述子表达式转换为对应的所述目标语言的子逻辑表达式的过程进行详细说明,该方法包括:
S301、根据所述第二正则表达式,获取每个所述子表达式中的条件字段、运算符号以及所述条件字段的值。
其中,所述第二正则表达式包括第一分组、第二分组以及第三分组,所述第一分组用于识别所述条件字段,所述第二分组用于识别所述运算符号,所述第三分组用于识别所述条件字段的值。
示例性的,以“o.name='XXX部门'and”为例,通过第一分组可以获取示例中的条件字段“o.name”,通过第二分组可以获取示例中的运算符号“=”,通过第三分组获取示例中条件字段的值“'XXX部门'”。
具体的,预设正则表达式为以下内容:
([.w]+)s*((?i)=|>|<|>=|<=|in|between|like|iss+not|is)s*([.w]+|'[%.wsu4e00-
u9fa5]+'|([',.wsu4e00-u9fa5]+))s*((?i)and|or)*
对应地,通过([.w]+)该分组获取“o.name”;通过((?i)=|>|<|>=|<=|in|between|like|iss+not|is)该分组获取“=”;通过([.w]+|'[%.wsu4e00-u9fa5]+'|([',.wsu4e00-u9fa5]+))该分组获取“'XXX部门'”,其中u4e00-u9fa5表示可以匹配中文。此外,通过((?i)and|or)*可以识别后面连接的逻辑运算符AND或OR,因此可以获取到示例中的“and”,对于最后一个条件表达式来说,可以设置获取到的值为NULL。
S302、判断所述条件字段的值是否为目标格式,所述目标格式包括数字、字符串或字段名。
S303、若是,则根据所述映射关系、条件字段、运算符号以及所述条件字段的值,获取匹配的所述目标语言的子逻辑表达式。
在本步骤中,判断条件字段的值是否为目标格式的目的在于,识别条件字段的值为非目标格式时,即可能由于不同的数据库编写格式的差异化,需要进一步针对具体数据库的方言进行转换。
当条件字段的值为目标格式时,则可以根据射关系、条件字段、运算符号以及所述条件字段的值,获取匹配的所述目标语言的子逻辑表达式。
示例性的,在识别获取子条件表达式中各部分内容后,在前述示例中,当“o.name='XXX部门'and”转换的目标语言为JAVA时,“o.name”可以转换为${o.name},此处增加${}是为了标记该值是条件字段值,需要动态从数据集中获取。“'XXX部门'”为文字,则不进行处理。“=”可以转换为“==”,其中SQL中的“=、>、<、>=、<=”除了“=”需要转成“==”外,其他不需要再转换。此处需要注意的是“IN、BETWEEN、LIKE、IS”这种符号需要特别处理,针对性的预定义函数来代表相应的操作。运算符号的转换关系如表1所示:
表1
对于逻辑运算符“and”,可以转换为“&&”。此外,OR可以转换成“||”。
S304、若否,则获取生成所述SQL查询语句的数据库信息。
S305、根据所述数据库信息,获取匹配的方言转化表,其中,所述数据库与所述方言转化表为一一对应的关系。
S306、根据所述方言转化表和所述条件字段的值,获取所述条件字段的值匹配的目标语言,所述方言转化表用于指示所述条件字段的值与所述目标语言的对应关系。
需要说明的是,当条件字段的值不是目标格式时,即为非数字、非字符串,也不是表中的字段名时,则视为SQL函数进行转换。为了能够支持不同的数据库,可以首先确定SQL查询语句具体针对哪一个数据库进行编写,在获取到该数据库信息后,可以匹配获取对应的方言转换表。方言转换表包括对应的数据库的函数与目标语言函数的对应关系,在做SQL转换前,可以针对不同的数据库预先配置对应的方言转换表。
示例性的,以将Oracle SQL脚本中的函数转换为Javascript的函数为例,转换关系如
表2所示:
表2
S307、根据所述映射关系、条件字段、运算符号以及所述值匹配的目标语言,获取匹配的所述目标语言的子逻辑表达式。
在本步骤中,在获取到条件字段的值匹配的目标语言后,基于映射关系对条件字段和运算符号进行转换,从而组成子逻辑表达式。
根据获取的多个子逻辑表达式,形成了可以执行的目标语言的逻辑表达式,从而可以用于对数据查询的逻辑判断。基于前述示例“o.name='XXX部门'and e.organ_id=o.id and e.title='高级工程师'”,转换后的最终逻辑表达式为:“(${o.name}=='XXX部门')&&(${e.organ_id}==${o.id})&&(${e.title}=='高级工程师')”,其中,${...}大括号中的部分为变量,即数据集合中某条数据的字段值,便于动态判断每一条数据。
本实施例提供的基于SQL的代码转换方法,通过正则表达式识别获取子表达式中的条件字段、运算符号以及条件字段的值,并根据映射关系对子表达式中的各部分进行转换得到子逻辑表达式。若字段的值不是目标格式,则需进一步根据SQL查询语句对应的数据库的方言转换表进行转换。该方法通过对条件表达式中的子表达式进行转换,设计简单、易于实现,不涉及复杂的词法分析和语法分析过程,简化了转换流程,提高了开发效率。
图4为本申请实施例提供的基于SQL的代码转换方法流程图四。如图4所示,在图3实施例的基础上,对基于目标语言执行查询操作的过程进行详细说明,该方法包括:
S401、获取SQL查询语句中的表名以及条件表达式对应的逻辑表达式。
在本步骤中,对于表名、条件表达式的获取过程,以及条件表达式转换为目标语言的逻辑表达式的过程,在前述实施例中已进行说明,在此不做赘述。
S402、根据所述表名,获取待查询数据。
在本步骤中,SQL查询语句中的表名,则是对应为包含查询的数据源的表,SQL查询语句中可以包括一个或多个表名。为了便于对数据源进行存储和查找,可以通过合适的数据结构进行存储,以支持存储多种类型的数据,并能够存储为具有映射关系的数据集合,从而能够实现快速查找。
示例性的,获取所述表名对应的源数据;
将所述源数据转化为目标数据容器对应的存储格式,并存储进入所述目标数据容器,所述存储格式用于指示将所述源数据对应为多个键值对的形式;
将所述目标数据容器中的源数据作为所述待查询数据。
可选的,上述目标数据容器可以为Map,其为一种基于哈希表的数据结构,具有双列存储的特点,即包括多组键值对的数据集合。在本实施例中,可以以表中的属性名作为键,对应的属性值作为值,从而得到执行逻辑表达式依赖的参数信息。当对应查询多个表名对应的表时,可以在存入Map时,将表名作为前缀,以表名和属性名同时作为键,从而起到对不同表的数据进行区分的作用。
需要说明的是,为了使得逻辑表达式适配当前执行引擎,可以对逻辑表达式进行格式化,得到符合当前执行引擎的格式。例如,逻辑表达式中包含变量的${},格式化后只留下变量名本身。
S403、遍历所述待查询数据,获取使得所述逻辑表达式为真的子数据,所述子数据用于指示所述查询字段对应的值。
S404、根据所述子数据,获取查询结果,所述查询结果包含至少一条所述子数据。
需要说明的是,逻辑表达式的执行是一个判断的过程,得到的判断结果为一个布尔类型。当结果为TRUE时,则当前处理的数据集合中数据满足逻辑表达式中的条件,将满足条件的数据放入结果集中。应理解,当SQL查询语句中的查询字段表示选择所有字段时,则将查询的整条数据放入结果集中;当查询字段包括具体的一个或多个字段时,则将这些字段对应的值放入结果集中。当结果为FALSE时,表示当前数据不满足条件。在处理完一条数据时,判断数据集合中数据是否已遍历完,若否,则继续执行循环判断下一条数据。在遍历完待查询的数据集合时,获取到的结果集则为查询数据的结果,上述数据集合包括SQL查询语句中一个或多个表名对应的表的数据。
本实施例提供的基于SQL的代码转换方法,通过遍历表名对应的表的数据,执行逻辑表达式的判断,将满足条件的数据放入结果集中。并在遍历前将数据存储为具有映射关系的数据形式。该方法简化了数据存储和查询,易于数据的处理和判断的执行。
图5为本发明实施例提供的一种基于SQL的代码转换装置图。如图5所示,该装置50包括:获取模块501和处理模块502。
获取模块501,用于获取SQL查询语句,所述SQL查询语句包括SELECT子句、FROM子句以及WHERE子句;
所述获取模块501还用于,根据所述SQL查询语句和预设的第一正则表达式,获取拆分结果,所述拆分结果包括SELECT子句对应的查询字段、FROM子句对应的表名、WHERE子句对应的条件表达式;
处理模块502,用于根据所述拆分结果和预设的映射关系,将所述条件表达式转换为目标语言的逻辑表达式,所述映射关系用于指示所述条件表达式与所述目标语言的转换关系;
所述处理模块502还用于,根据所述查询字段、表名以及所述逻辑表达式,基于所述目标语言执行查询操作,并获取查询结果。
图6为本发明实施例提供的电子设备的硬件示意图。如图6所示,本实施例提供的电子设备60包括:至少一个处理器601和存储器602。该设备60还包括通信部件603。其中,处理器601、存储器602以及通信部件603通过总线604连接。
在具体实现过程中,至少一个处理器601执行所述存储器602存储的计算机执行指令,使得至少一个处理器601执行如上方法。
处理器601的具体实现过程可参见上述方法实施例,其实现原理和技术效果类似,本实施例此处不再赘述。
在上述的图6所示的实施例中,应理解,处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速存储器(Random Access Memory,RAM),也可能还包括非易失性存储器(Non-volatile Memory,NVM),例如至少一个磁盘存储器。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上所述的方法。
上述可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。可读存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的可读存储介质耦合至处理器,从而使处理器能够从该可读存储介质读取信息,且可向该可读存储介质写入信息。当然,可读存储介质也可以是处理器的组成部分。处理器和可读存储介质可以位于专用集成电路(Application Specific IntegratedCircuits,简称:ASIC)中。当然,处理器和可读存储介质也可以作为分立组件存在于设备中。
所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段,并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求书来限制。
- 用于热交换器的管配置、包括所述管配置的热交换器、包括所述热交换器的流体加热系统及其制造方法
- 用于热交换器的挡板组合件、包括所述挡板组合件的热交换器、包括所述热交换器的流体加热系统及其制造方法
- 热交换器及具备该热交换器的排气热回收装置
- 热交换器和使用该热交换器的空气调节机
- 热交换器以及用于制造热交换器的方法
- 用于热交换器板的固持装置、用于热交换器板的垫圈布置、具有边缘部分的热交换器板和板式热交换器
- 热交换器用钎焊片、热交换器用钎焊片的接合结构和热交换器用钎焊片的接合方法、以及热交换器