CN117033348A - Sql转换方法、装置、计算机设备和存储介质 - Google Patents
Sql转换方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN117033348A CN117033348A CN202311069057.2A CN202311069057A CN117033348A CN 117033348 A CN117033348 A CN 117033348A CN 202311069057 A CN202311069057 A CN 202311069057A CN 117033348 A CN117033348 A CN 117033348A
- Authority
- CN
- China
- Prior art keywords
- sql
- dialect
- database
- type
- target
- 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
- 238000006243 chemical reaction Methods 0.000 title claims abstract description 142
- 238000000034 method Methods 0.000 title claims abstract description 55
- 230000000977 initiatory effect Effects 0.000 claims abstract description 17
- 230000006870 function Effects 0.000 claims description 113
- 230000005856 abnormality Effects 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 18
- 230000014509 gene expression Effects 0.000 claims description 14
- 238000013507 mapping Methods 0.000 claims description 11
- 230000009466 transformation Effects 0.000 claims description 11
- 238000000605 extraction Methods 0.000 claims description 10
- 238000004458 analytical method Methods 0.000 abstract description 8
- 230000002159 abnormal effect Effects 0.000 description 11
- 239000000284 extract Substances 0.000 description 10
- 238000010586 diagram Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 5
- 238000013523 data management Methods 0.000 description 3
- 238000011426 transformation method Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- OKTJSMMVPCPJKN-UHFFFAOYSA-N Carbon Chemical compound [C] OKTJSMMVPCPJKN-UHFFFAOYSA-N 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 229910021389 graphene Inorganic materials 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
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/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
- G06F16/212—Schema design and management with details for data modelling support
-
- 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/22—Indexing; Data structures therefor; Storage structures
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/253—Grammatical analysis; Style critique
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种SQL转换方法、装置、计算机设备、存储介质和计算机程序产品。所述方法包括:获取原生SQL,对原生SQL进行解析,得到语法树对象集合,通过方言组件,获取应用程序的数据源连接信息,基于数据源连接信息确定数据库类型,以及确定数据库类型对应的数据库方言实例;通过数据库方言实例,将原生SQL的语法结构解析转换为语法树对象集合的目标项的数据结构,并将目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL,基于转换后的SQL,向数据库发起网络请求。通过采用本方法,可以在读取数据库的结构后,可对应不同的数据库解析生成对应方言类型的函数,实现不同数据库之间的切换,提高编译完成的SQL的通用性,提高使用效率。
Description
技术领域
本申请涉及数据库技术领域,特别是涉及一种SQL转换方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
数据库方言(Database Language)指用于表示数据库结构和性质的一组语法规则和数据结构,是数据库理论中的重要概念之一,用来构建各种类型的数据库,包括关系型数据库和非关系型数据库;开发人员在开发应用程序时,通过会用到多种类型的数据库,因此,应用程序需要支持在不同数据库类型之间进行切换的能力。
相关技术中,针对不同的数据库,数据库厂商所编写的SQL语言本身就存在差异性(不同SQL语言表述、适用语法等存在差异性,有些还可能存在数据库厂商自定义的字段、函数和表名等),如果需要实现不同数据库之间切换,为了实现SQL语言的兼容性,还需要编写多套与业务无关的代码,导致代码的通用性较差。
发明内容
基于此,有必要针对上述技术问题,提供一种能够保证代码文件的通用性的SQL转换方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种SQL转换方法。所述方法包括:
获取原生SQL,对所述原生SQL进行解析,得到语法树对象集合,所述原生SQL是应用程序在运行的情况下生成的;
通过方言组件,获取所述应用程序的数据源连接信息,基于所述数据源连接信息确定数据库类型,以及确定所述数据库类型对应的数据库方言实例;
通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL;
如果确定转换正常,则基于所述转换后的SQL,向数据库发起网络请求。
在其中一个实施例中,所述获取原生SQL,包括:
通过方言组件,获取目标数据报文;
解析所述目标数据报文,得到所述目标数据报文包含的原生SQL。
在其中一个实施例中,所述通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL,包括:
如果确定所述原生SQL的语句类型为数据定义语言类型,则通过所述数据库方言实例,将所述原生SQL的语法结构转换为所述语法树对象集合的SQL查询指令集的数据结构,并基于所述SQL查询指令集的数据结构以及字段类型映射向量表,进行数据库字段类型的定义转换,得到目标方言类型的mySQL字段定义;
基于目标方言类型的mySQL字段定义,得到目标方言类型的转换后的SQL。
在其中一个实施例中,所述通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL,包括:
如果确定所述原生SQL的语句类型为数据查询语言类型,则通过所述数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于所述SQL查询指令集的数据结构,提取SQL表达式的数据结构,解析函数名,基于功能向量表进行函数转换,得到目标方言类型的函数;
基于所述目标方言类型的函数,得到目标方言类型的转换后的SQL。
在其中一个实施例中,所述通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL,包括:
如果确定所述原生SQL的语句类型为数据查询语言类型,则通过所述数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于所述SQL查询指令集的数据结构,提取SQL限量查询的数据结构,基于分页模版转换表,进行分页转换,得到目标方言类型的分页;
基于所述目标方言类型的分页,得到目标方言类型的转换后的SQL。
在其中一个实施例中,所述通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL,包括:
如果确定所述原生SQL的语句类型为数据定义语言类型,则通过所述数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于所述SQL查询指令集的数据结构,提取SQL表达式的数据结构,解析函数名,基于功能向量表进行函数转换,得到目标方言类型的函数;
基于所述SQL查询指令集的数据结构,提取SQL限量查询的数据结构,基于分页模版转换表,进行分页转换,得到目标方言类型的分页;
基于所述目标方言类型的函数以及所述目标方言类型的分页,得到目标方言类型的转换后的SQL。
在其中一个实施例中,所述方法还包括:
如果确定转换异常,则生成异常提示信息,并输出所述异常提示信息.
在其中一个实施例中,所述基于所述转换后的SQL,向数据库发起网络请求,包括:
将所述转换后的SQL发送至目标驱动组件,并通过所述目标驱动组件,基于所述转换后的SQL,向数据库发起网络请求。
第二方面,本申请还提供了一种SQL转换装置。所述装置包括:
第一获取模块,用于获取原生SQL,对所述原生SQL进行解析,得到语法树对象集合,所述原生SQL是应用程序在运行的情况下生成的;
第二获取模块,用于通过方言组件,获取所述应用程序的数据源连接信息,基于所述数据源连接信息确定数据库类型,以及确定所述数据库类型对应的数据库方言实例;
提取模块,用于通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL;
请求模块,用于如果确定转换正常,则基于所述转换后的SQL,向数据库发起网络请求。
在其中一个实施例中,第一获取模块,具体用于:
通过方言组件,获取目标数据报文;
解析所述目标数据报文,得到所述目标数据报文包含的原生SQL。
在其中一个实施例中,所述提取模块,具体用于:
如果确定所述原生SQL的语句类型为数据定义语言类型,则通过所述数据库方言实例,将所述原生SQL的语法结构转换为所述语法树对象集合的SQL查询指令集的数据结构,并基于所述SQL查询指令集的数据结构以及字段类型映射向量表,进行数据库字段类型的定义转换,得到目标方言类型的mySQL字段定义;
基于目标方言类型的mySQL字段定义,得到目标方言类型的转换后的SQL。
在其中一个实施例中,所述提取模块,具体用于:
如果确定所述原生SQL的语句类型为数据查询语言类型,则通过所述数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于所述SQL查询指令集的数据结构,提取SQL表达式的数据结构,解析函数名,基于功能向量表进行函数转换,得到目标方言类型的函数;
基于所述目标方言类型的函数,得到目标方言类型的转换后的SQL。
在其中一个实施例中,所述提取模块,具体用于:如果确定所述原生SQL的语句类型为数据查询语言类型,则通过所述数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于所述SQL查询指令集的数据结构,提取SQL限量查询的数据结构,基于分页模版转换表,进行分页转换,得到目标方言类型的分页;
基于所述目标方言类型的分页,得到目标方言类型的转换后的SQL。
在其中一个实施例中,所述提取模块,具体用于:如果确定所述原生SQL的语句类型为数据定义语言类型,则通过所述数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于所述SQL查询指令集的数据结构,提取SQL表达式的数据结构,解析函数名,基于功能向量表进行函数转换,得到目标方言类型的函数;
基于所述SQL查询指令集的数据结构,提取SQL限量查询的数据结构,基于分页模版转换表,进行分页转换,得到目标方言类型的分页;
基于所述目标方言类型的函数以及所述目标方言类型的分页,得到目标方言类型的转换后的SQL。
在其中一个实施例中,所述装置还包括:
生成模块,用于如果确定转换异常,则生成异常提示信息,并输出所述异常提示信息.
在其中一个实施例中,所述请求模块,具体用于:将所述转换后的SQL发送至目标驱动组件,并通过所述目标驱动组件,基于所述转换后的SQL,向数据库发起网络请求。
第三方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取原生SQL,对所述原生SQL进行解析,得到语法树对象集合,所述原生SQL是应用程序在运行的情况下生成的;
通过方言组件,获取所述应用程序的数据源连接信息,基于所述数据源连接信息确定数据库类型,以及确定所述数据库类型对应的数据库方言实例;
通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL;
如果确定转换正常,则基于所述转换后的SQL,向数据库发起网络请求。
第四方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取原生SQL,对所述原生SQL进行解析,得到语法树对象集合,所述原生SQL是应用程序在运行的情况下生成的;
通过方言组件,获取所述应用程序的数据源连接信息,基于所述数据源连接信息确定数据库类型,以及确定所述数据库类型对应的数据库方言实例;
通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL;
如果确定转换正常,则基于所述转换后的SQL,向数据库发起网络请求。
第五方面,本申请还提供了一种计算机程序产品。所述计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取原生SQL,对所述原生SQL进行解析,得到语法树对象集合,所述原生SQL是应用程序在运行的情况下生成的;
通过方言组件,获取所述应用程序的数据源连接信息,基于所述数据源连接信息确定数据库类型,以及确定所述数据库类型对应的数据库方言实例;
通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL;
如果确定转换正常,则基于所述转换后的SQL,向数据库发起网络请求。
上述SQL转换方法、装置、计算机设备、存储介质和计算机程序产品,该方法包括:获取原生SQL,对原生SQL进行解析,得到语法树对象集合,原生SQL是应用程序在运行的情况下生成的;通过方言组件,获取应用程序的数据源连接信息,基于数据源连接信息确定数据库类型,以及确定数据库类型对应的数据库方言实例;通过数据库方言实例,将原生SQL的语法结构解析转换为语法树对象集合的目标项的数据结构,并将目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL;如果确定转换正常,则基于转换后的SQL,向数据库发起网络请求。通过采用本方法,可以在读取数据库的结构后,可以对应不同的数据库解析生成对应方言类型的函数,实现不同数据库之间的切换,提高编译完成的SQL的通用性,提高使用效率。
附图说明
图1为一个实施例中SQL转换方法的流程示意图;
图2为一个实施例中拦截原生SQL步骤的流程示意图;
图3为一个实施例中得到目标方言类型的转换后的SQL步骤的流程示意图;
图4为一个实施例中得到目标方言类型的转换后的SQL步骤的流程示意图;
图5为一个实施例中得到目标方言类型的转换后的SQL步骤的流程示意图;
图6为一个实施例中得到目标方言类型的转换后的SQL步骤的流程示意图;
图7为另一个实施例中SQL转换方法的流程示意图;
图8为一个实施例中SQL转换装置的结构框图;
图9为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,提供了一种SQL转换方法,本实施例以该方法应用于数据库客户端进行举例说明,可以理解的是,数据库系统可以包括多个数据库客户端以及与该数据客户端对应的数据库服务器,即数据库设备;数据库服务器用于存储数据,数据库客户端与数据库服务器之间可以通过网络进行通信。数据库客户端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑等,数据库服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。本实施例中,如图1所示,以应用于数据库客户端为例进行举例说明,该SQL转换方法包括以下步骤:
步骤102,获取原生SQL,对原生SQL进行解析,得到语法树对象集合。
其中,原生SQL是应用程序在运行的情况下生成的;该原生sql(Native SQL)是指使用关系型数据库管理系统(RDBMS)进行数据管理和查询的语言。语法数对象集合可以是st集合(Sql Select Query集合),语法树对象集合包含的内容可以是如下表1所示:
表1
具体地,其他通信设备可以与数据库设备之间进行包含原生SQL的数据报文的交互。在其他通信设设备发送原生SQL之前,数据库客户端可以使用关系型数据库管理系统进行数据管理和查询的语言,即获取一个或者多个原生SQL,并对每一个原生SQL进行解析处理,得到各个原生SQL分别对应的语法数对象集合(可记为Sql Select Query对象集合)。
步骤104,通过方言组件,获取应用程序的数据源连接信息,基于数据源连接信息确定数据库类型,以及确定数据库类型对应的数据库方言实例。
其中,应用程序可以是使用上述实施例的数据库设备的应用程序,即数据都存储至数据库设备的应用程序,或者是在数据库客户端上运行的应用程序等等;应用程序的数据源连接信息可以是用于表征该应用程序所使用的数据库类型的连接信息;在一个示例中,mysql的数据源连接信息可以是:jdbc:mysql://IP:port等等。
具体地,数据库客户端可以获取应用程序所使用的数据库设备对应的数据源连接信息,并通过方言组件,基于数据源连接信息确定所使用的数据库设备的数据库类型,基于确定出的数据库类型,确定对应的数据库方言实例,数据库客户端还可以对确定出的数据库方言实例进行初始化,得到初始化后的数据库方言实例。该数据库方言实例可以包括多种语法树对象,例如可以包括用于描述字段的列表的语法树对象,即SQL Select Items;还可以包括用于描述函数的语法树对象,即SQL Expr数据结构(SQL表达式的数据结构);还可以包括用于描述分页的语法数对象,即SQL Limit数据结构(SQL限量查询的数据结构)等等。
步骤106,通过数据库方言实例,将原生SQL的语法结构解析转换为语法树对象集合的目标项的数据结构,并将目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL。
其中,将原生SQL的语法结构解析转换为语法树对象集的目标项的数据结构,可以是描述字段的列表的SQL Select Items(SQL查询指令集)的语法树对象,表示原生SQL的字段定义,转换向量表可以是包括多种类型的数据库中的各个字段定义的对应关系,还可以包括多种类型的数据库中的函数的对应关系以及多种类型的数据库中的分页模板的对应关系。
具体地,数据库客户端可以通过数据库方言实例,确定原生SQL的语法结构,并将该原生SQL的语法结构转换为,语法树对象集合包含目标项对应的数据结构,并基于目标方言类型、目标项的数据结构以及该目标项的数据结构对应的转换向量表进行转换计算,得到目标方言类型的转换后的SQL。
在一个示例中,数据库客户端确定出的语法树对象集合包含目标项对应的数据结构可以是用于描述字段的列表的SQL Select Items的语法树对象,这样,数据库客户端确定该字段的列表的SQL Select Items的语法树对象对应的转换向量表可以包括多种方言类型的字段类型定义,这样,数据库客户端可以基于用于描述字段的列表的SQL SelectItems的语法树对象以及目标方言类型,在多种方言类型的字段类型定义进行查询以及转换,得到目标方言类型的转换后的SQL。
步骤108,如果确定转换正常,则基于转换后的SQL,向数据库发起网络请求。
具体地,数据库客户端可以确定基于转换向量表得到的转换后的SQL是否正常;如果数据库客户端确定基于转换向量表进行的转换正常,且得到的转换后的SQL也正常,则数据库客户端可以基于转换后的SQL,即目标方言类型的SQL,向数据库设备发起网络请求。在一个示例中,网络请求可以是数据库的查询请求、数据库的建表请求,或者还可以是数据库的删表请求等等。
上述SQL转换方法中,获取原生SQL,对原生SQL进行解析,得到语法树对象集合,原生SQL是应用程序在运行的情况下生成的;通过方言组件,获取应用程序的数据源连接信息,基于数据源连接信息确定数据库类型,以及确定数据库类型对应的数据库方言实例;通过数据库方言实例,将原生SQL的语法结构解析转换为语法树对象集合的目标项的数据结构,并将目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL;如果确定转换正常,则基于转换后的SQL,向数据库发起网络请求。通过采用本方法,可以在读取数据库的结构后,可以对应不同的数据库解析生成对应方言类型的语,实现不同数据库之间的切换,提高编译完成的SQL的通用性,提高使用效率。
在一个实施例中,如图2所示,步骤102“获取原生SQL”的具体处理过程,包括:
步骤202,通过方言组件,获取目标数据报文。
步骤204,解析目标数据报文,得到目标数据报文包含的原生SQL。
其中,目标配置文件可以是应用程序的代码文件,也可以是应用程序的预先配置的配置文件,目标配置文件还可以是代码文件。
具体地,数据库客户端可以通过使用方言组件,在目标配置文件中读取目标数据报文,对目标数据报文进行解析,得到目标数据报文携带的原生SQL;数据库客户端还可以读取代码文件中的原生SQL。
本实施例中,通过方言组件读取目标数据报文,以及对目标数据报文进行解析,得到目标数据报文包含的原生SQL,可以保证原生SQL的获取效率,以及提升原生SQL的通用性。
在一个实施例中,如图3所示,步骤106“通过数据库方言实例,将原生SQL的语法结构解析转换为语法树对象集合的目标项的数据结构,并将目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL”的具体处理过程,包括:
步骤302,如果确定原生SQL的语句类型为数据定义语言类型,则通过数据库方言实例,将原生SQL的语法结构转换为语法树对象集合的SQL查询指令集的数据结构,并基于SQL查询指令集的数据结构以及字段类型映射向量表,进行数据库字段类型的定义转换,得到目标方言类型的mySQL字段定义。
其中,对数据库设备进行处理的SQL语句可以包含多种语句类型,ddl类型可以是数据定义语言(Data Definition Language),用于描述数据库中要存储的现实世界实体的语言。字段类型映射向量表包括多种方言类型的字段类型定义,例如可以包括多种方言类型的字段类型定义以及各方言类型的字段类型定义之间的对应关系,例如针对于目标字段类型定义,类型映射向量表可以包括第一方言类型的目标字段类型定义,以及第二方言类型的目标字段类型定义,还可以包括其他各种方言类型的目标字段类型定义。
在一个示例中,字段类型映射向量表可以是TypeMappings向量表,其中可以包括多种方言类型,例如可以包括SQLiteDialect、AccessDialect、ExcelDialect、TextDialect、ParadoxDialect以及CobolDialect,各种字段类型定义可以包括:t_BIGINT、t_BINARY、t_BIT、t_BLOB以及t_BOOLEAN,可以包括各种字段类型在各种方言类型下方言表示形式,例如,针对于t_BIGINT字段,其对应的各种方言表示形式,即各种方言字段类型定义可以分别包括:bigint、integer、bigint、bigint、integer以及bigint,分别对应于上述描述各种方言类型。
具体地,数据库客户端可以在确定应用程序所使用的数据库设备对应的原生SQL的语句类型是数据定义语言类型的情况下,数据库客户端可以通过数据库方言实例,对原生SQL的语法结构进行转换,具体可以是将原生SQL的语法结构转换为,解析该原生SQL得到的语法树对象集合中对应项的数据结构;例如在原生SQL的语句类型是数据定义语言类型的情况下,语法树对象集合包含的对应项的数据结构可以是SQL Select Items的数据结构,数据库客户端可以将原生SQL的语法结构转换为SQL Select Items的数据结构,并基于SQL Select Items的数据结构和字段类型映射向量表以及数据库设备对应的目标方言类型,进行数据库字段类型的定义转换,即在类型映射向量表中查询目标方言类型表示形式下的目标字段,得到目标方言类型的MySQL字段定义。
步骤304,基于目标方言类型的mySQL字段定义,得到目标方言类型的转换后的SQL。
具体地,数据库客户端可以通过转换后得到的目标方言类型的MySQL字段定义,得到目标方言类型的转换后的SQL。
本实施例中,基于SQL Select Items的数据结构进行字段类型定义转换,提升SQL的通用性,提高SQL的使用效率。
在一个实施例中,如图4所示,步骤106“通过数据库方言实例,将原生SQL的语法结构解析转换为语法树对象集合的目标项的数据结构,并将目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL”的具体处理过程,包括:
步骤402,如果确定原生SQL的语句类型为数据查询语言类型,则通过数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构。
其中,dql类型可以是数据查询语言(Data Query Language)类型,即原生SQL对应的语句类型可以是数据查询语言(Data Query Language)类型。
具体地,数据库客户端可以确定应用程序所使用的数据库的类型,如果数据库客户端确定应用程序所使用的数据库的类型为数据查询语言类型,则数据库客户端可以通过该数据库类型对应的数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构。
数据库客户端可以在确定应用程序所使用的数据库设备对应的原生SQL的语句类型是dql类型的情况下,数据库客户端可以通过数据库方言实例,对原生SQL的语法结构进行转换,具体可以是将原生SQL的语法结构转换为,解析该原生SQL得到的语法树对象集合中对应项的数据结构;例如在原生SQL的语句类型是dql类型的情况下,语法树对象集合包含的对应项(目标项)的数据结构可以是SQL Select Items的数据结构以及SQL Expr数据结构。
步骤404,基于SQL查询指令集的数据结构,提取SQL表达式的数据结构,解析函数名,基于功能向量表进行函数转换,得到目标方言类型的函数。
其中,功能向量表可以是存储有多种函数。功能向量表包括多种方言类型的函数,例如可以包括多种方言类型的函数以及各方言类型的函数之间的对应关系,例如针对于目标函数,功能向量表可以包括第一方言类型的目标函数,以及第二方言类型的目标函数,还可以包括其他各种方言类型的目标函数。
具体地,数据库客户端可以通过数据库方言实例,从解析出的语法树对象集中提取的SQL SELECT ITEMS的数据结构中进行提取,得到SQL Expr数据结构;这样,数据库客户端可以进一步确定语法树对象集合包含的对应项的数据结构可以是SQL Expr数据结构;数据库客户端可以将原生SQL的语法结构转换为SQL Expr数据结构,并基于SQL Expr数据结构确定目标函数,基于目标函数、功能向量表以及数据库设备对应的目标方言类型,进行数据库函数类型的转换,即在功能向量表中查询目标方言类型表示形式下的目标函数,得到目标方言类型的函数。
步骤406,基于目标方言类型的函数,得到目标方言类型的转换后的SQL。
具体地,数据库客户端可以基于目标方言类型的函数,对原生SQL中的函数进行替换,即将原生SQL中的函数替换为目标方言类型的函数,得到转换后的目标方言类型的SQL。
本实施例中,基于SQL Expr数据结构以及包含多种方言类型对应的函数映射表进行函数转换,提升SQL的通用性,提高SQL的使用效率。
在一个实施例中,如图5所示,步骤106“通过数据库方言实例,将原生SQL的语法结构解析转换为语法树对象集合的目标项的数据结构,并将目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL”的具体处理过程,包括:
步骤502,如果确定原生SQL的语句类型为数据查询语言类型,则通过数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构。
其中,dql类型可以是数据查询语言(Data QueryLanguage)类型。
具体地,数据库客户端可以确定应用程序所使用的数据库的类型,如果数据库客户端确定应用程序所使用的数据库的类型为数据查询语言类型,则数据库客户端可以通过该数据库类型对应的数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构。
数据库客户端可以在确定应用程序所使用的数据库设备对应的原生SQL的语句类型是dql类型的情况下,数据库客户端可以通过数据库方言实例,对原生SQL的语法结构进行转换,具体可以是将原生SQL的语法结构转换为,解析该原生SQL得到的语法树对象集合中对应项的数据结构;例如在原生SQL的语句类型是dql类型的情况下,语法树对象集合包含的对应项(目标项)的数据结构可以是SQL Select Items的数据结构以及SQL Limit数据结构。
步骤504,基于SQL查询指令集的数据结构,提取SQL限量查询的数据结构,基于分页模版转换表,进行分页转换,得到目标方言类型的分页。
其中,分页模版转换表可以存储有多种分页模版。分页模版转换表包括多种方言类型的分页模版,例如可以包括多种方言类型的分页模版以及各方言类型的分页模版之间的对应关系,例如针对于目标分页模版,分页模版转换表可以包括第一方言类型的目标分页模版,以及第二方言类型的目标分页模版,还可以包括其他各种方言类型的目标分页模版。
具体地,数据库客户端可以通过数据库方言实例,从解析出的语法树对象集中提取的SQL SELECT ITEMS的数据结构中进行提取,得到SQL Limit数据结构;这样,数据库客户端可以进一步确定语法树对象集合包含的对应项的数据结构可以是SQL Limit数据结构;数据库客户端可以将原生SQL的语法结构转换为SQL Limit数据结构,并基于SQL Limit数据结构确定目标分页模板(即原生SQL的分页模板),数据库客户端可以基于目标分页模板、分页模版转换表以及数据库设备对应的目标方言类型,进行数据库的分页模版转换,即在分页模版转换表中查询目标方言类型表示形式下的目标分页模版,得到目标方言类型的分页。
步骤506,基于目标方言类型的分页,得到目标方言类型的转换后的SQL。
具体地,数据库客户端可以基于目标方言类型的分页模版,对原生SQL中的分页模版进行替换,即将原生SQL中的分页模版替换为目标方言类型的分页模版,得到转换后的目标方言类型的SQL。
本实施例中,基于SQL Select Items的数据结构以及SQL Limit数据结构进行分页模板的转换,提升SQL的通用性,提高SQL的使用效率。
在一个实施例中,如图6所示,步骤106“通过数据库方言实例,将原生SQL的语法结构解析转换为语法树对象集合的目标项的数据结构,并将目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL”的具体处理过程,包括:
步骤602,如果确定原生SQL的语句类型为数据定义语言类型,则通过数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构。
其中,dql类型可以是数据查询语言(Data Query Language)类型。
具体地,数据库客户端可以在确定应用程序所使用的数据库设备对应的原生SQL的语句类型是dql类型的情况下,数据库客户端可以通过数据库方言实例,对原生SQL的语法结构进行转换,具体可以是将原生SQL的语法结构转换为,解析该原生SQL得到的语法树对象集合中对应项的数据结构;例如在原生SQL的语句类型是dql类型的情况下,语法树对象集合包含的对应项(目标项)的数据结构可以是SQL Select Items的数据结构、SQL Expr数据结构以及SQL Limit数据结构。
步骤604,基于SQL查询指令集的数据结构,提取SQL表达式的数据结构,解析函数名,基于功能向量表进行函数转换,得到目标方言类型的函数。
具体地,数据库客户端可以通过数据库方言实例,从解析出的语法树对象集中提取的SQL SELECT ITEMS的数据结构中进行提取,得到SQL Expr数据结构;数据库客户端可以将原生SQL的语法结构转换为SQL Expr数据结构,并基于SQL Expr数据结构确定目标函数,基于目标函数、功能向量表以及数据库设备对应的目标方言类型,进行数据库函数类型的转换,即在功能向量表中查询目标方言类型表示形式下的目标函数,得到目标方言类型的函数。
步骤606,基于SQL查询指令集的数据结构,提取SQL限量查询的数据结构,基于分页模版转换表,进行分页转换,得到目标方言类型的分页。
具体地,数据库客户端可以通过数据库方言实例,从解析出的语法树对象集中提取的SQL SELECT ITEMS的数据结构中进行提取,得到SQL Limit数据结构;这样,数据库客户端可以进一步确定语法树对象集合包含的对应项的数据结构可以是SQL Limit数据结构;数据库客户端可以将原生SQL的语法结构转换为SQL Limit数据结构,并基于SQL Limit数据结构确定目标分页模板(即原生SQL的分页模板),数据库客户端可以基于目标分页模板、分页模版转换表以及数据库设备对应的目标方言类型,进行数据库的分页模版转换,即在分页模版转换表中查询目标方言类型表示形式下的目标分页模版,得到目标方言类型的分页。
步骤608,基于目标方言类型的函数以及目标方言类型的分页,得到目标方言类型的转换后的SQL。
数据库客户端可以基于目标方言类型的分页以及目标方言类型的函数,对原生SQL中的分页模版进行替换,以及对原生SQL中函数进行替换,即将原生SQL中的分页模版替换为目标方言类型的分页模版以及将原生SQL中的函数替换为目标方言类型的函数,得到转换后的目标方言类型的SQL。
本实施例中,基于SQL SELECT ITEMS的数据结构、SQL Expr数据结构以及SQLLimit数据结构,进行函数转换以及分页模板的转换,提升SQL的通用性,提高SQL的使用效率。
在一个实施例中,该SQL转换方法还包括:
如果确定转换异常,则生成异常提示信息,并输出异常提示信息。
其中,异常提示信息可以是用于提示数据库的运维人员或者是使用人员,当前数据库发生异常情况的提示信息。
具体地,数据库客户端在确定当前转换发生异常的情况下,可以生成异常提示信息,并向数据库对应的中间件发送该异常提示信息,用于使对应的数据库运维人员基于异常提示信息,进行异常处理。
本实施例中,通过输出异常信息,可以及时提示异常情况,保证数据库的高可用性以及可靠性。
在一个示例中,步骤“基于转换后的SQL,向数据库发起网络请求”的具体实现方式包括:
将转换后的SQL发送至目标驱动组件,并通过目标驱动组件,基于转换后的SQL,向数据库发起网络请求。
其中,目标驱动组件可以是中间件,可以是多种类型的中间件,本申请对中间件的具体类型以及目标驱动组件的具体类型并不做具体限定,本领域技术人员可以基于实际应用场景确定。中间件(Middleware)可以是提供系统软件和应用软件之间连接的软件,用于实现软件各部件之间的数据交互。例如,中间件可以是ORM中间件,可以是mybatis,或者是beetlsql。
具体地,数据库客户端可以将目标方言类型的转换后的SQL发送至目标驱动组件,目标驱动组件可以在接收到该目标方言类型的转换后的SQL后,基于该转换后的SQL,向数据库发起网络请求。例如,目标驱动组件可以对转换后的SQL进行解析,确定目标指令,并将目标指令发送至数据库设备,以使数据库设备在接收到该目标指令后,可以对数据库设备执行该目标指令对应的目标操作。
在一个示例中,数据库客户端可以通过方言组件,拦截ORM中间件向数据库发送的原生SQL,也就是说,数据库客户端可以在ORM中间件与数据库的通信链路上进行拦截,得到ORM中间件向数据库发送的原生SQL。在一个示例中,数据库客户端可以基于ORM中间件的通信地址进行拦截,具体拦截过程可以包括:数据库客户端可以通过方言组件,基于ORM中间件的通信地址确定为源地址,以及基于数据库的通信地址确定目的地址,基于源地址以及目的地址,对原生SQL进行拦截,得到源地址为ORM中间件的通信地址,以及目的地址为数据库的通信地址的原生SQL。
以下,如图7所示,结合一个具体实施例,详细描述上述SQL转换方法的具体执行过程:
数据库方言(Database Language)是表示数据库结构和性质的语法规则和数据结构,用来构建各种类型的数据库,包括关系型数据库和非关系型数据库,如以E-R图表示的数据库、基于9NF的图数据库等。本实施例中提供的数据库方言,可以是针对不同数据库的语法规则完成相应的数据结构设计及转换逻辑,通常包括一组表示数据关系和性质的语法规则,以及在数据库中定义上述数据的实体、属性、关系、查询和操作的规则。
关系型数据库方言包括一组用于表示表格和数据的语法规则,如CREATE TABLE、INSERT、UPDATE、DELETE语句等等,其中涉及到的数据库不限于db2,oracle,mysql,DM,高斯等项目中的关系数据库及国产数据库。由于数据库中使用mysql的通用语法,各springdata jpa,mybatis等ORM中间件均能正常解析。基于此,本实施例中的方言组件在ORM中间件向数据库发送报文前,拦截报文,解析得到原生SQL以及基于数据源连接信息确定数据库类型,然后由mysql语义转换为对应数据库类型的方言表示形式,最后将转换后的sql向数据库发送,即发起网络请求。通过采用mysql通用语法作为各数据库的中间语言,又由于spring data jpa,mybatis等支持mysql语法,因此可以实现方言组件与ORM中间件的解耦。本实施例中的方言组件的实现不依赖任何ORM中间件应用程序接口(API),是轻量级的量级的JAR(Java Archive,Java归档)包。
针对于多种不同类型的数据库,现有技术中需要一个统一工具实现对不同类型的数据库的操作,例如可以支持原生sql进行数据管理和查询,在原生sql下扩展了功能,比如分页,函数,存储字段类型等,以及进行以下项功能转换:创建跨数据库的分页SQL,根据当前方言生成当前数据库的分页SQL;创建跨数据库的建表和删表DDL语句,根据当前数据库方言生成相应的DDL语句以及创建跨数据库的SQL函数,根据当前数据库方言生成对应的SQL函数片段。具体地,不同类型的数据库的扩展存储字段类型定义不一样,比如mysqlvarchar与oracle Varchar2均是对字符串类型的定义。
S01,各应用系统使用各自的中间件(比如mybatis)读取代码或配置文件中原生sql。具体地,应用程序运行过程中,数据库客户端可以通过不同的ORM中间件读取代码配置文件或预先配置的配置文件中的原生SQL。数据库客户端可以通过方言组件拦截ORM中间件向数据库发送的原生SQL,并读取ORM中间件将要发送的SQL;数据库客户端可以通过方言组件对原生SQL进行解析,得到st集合。
S02,方言工具拦截中间件向mysql发送的sql报文,并解析原生sql,解析生成SqlSelect Query对象集合st,然后根据数据库配置或链接地址实例方言对象。具体地,数据库客户端可以获取应用程序的数据源连接信息,根据数据源连接信息,方言组件可以确定当前的数据库类型,方言组件可以对相应的数据库方言实例进行初始化,实例可以包括三类数据结构,对应《DatabaseDialects.xls》中的分页模板“Paginations”、字段类型“TypeMappings”以及函数定义“Functions”。
在一个示例中,oralce的数据源连接信息可以是:jdbc:oracle:thin:IP:port
S03,方言工具从st集合中取SQL Select Items数据结构,然后根据TypeMappings向量表进行数据库字段类型定义转换。具体地,数据库客户端可以通过方言工具(方言组件)以及数据库方言实例,从st集合中提取SQLSelectItems数据结构,然后根据TypeMappings向量表进行数据库字段类型定义转换。也就是将mySQL字段定义转译成相应方言的字段定义。如果转换正常,将转换后的SQL返回至ORM中间件,ORM中间件可以基于接收到的转换后的SQL向数据库发起网络请求。
S04,方言工具从SQLSelectItems数据结构中提取SQL Expr数据结构,解析函数名,然后根据Functions向量表进行函数转换。具体地,数据库方言实例,可以从SQL SelectItems数据结构中提取SQL Expr数据结构,解析函数名,然后根据Functions向量表进行函数转换,将mySQL语法定义的函数转译成相应方言对应数据库的函数定义。如果转换正常,将转换后的SQL返回至ORM中间件,ORM中间件可以基于接收到的转换后的SQL向数据库发起网络请求。
S05,方言工具从SQL Select Items数据结构中提取SQL Limit数据结构,根据Paginations分页模板表进行分页转换。具体地,数据库客户端通过数据库方言实例,从SQLSelect Items数据结构中提取SQL Limit数据结构。根据Paginations分页模板表进行分页转换,将mySQL语法定义的分页模板转译成相应方言对应数据库的分页语义。如果转换正常,将转换后的SQL返回至ORM中间件,ORM中间件可以基于接收到的转换后的SQL向数据库发起网络请求。本实施例中可以收集81种数据库,对不同数据库的分页进行模板设置,在原生SQL转换时,进行分页模板替换。
S06,判断是否转换正常,如果转换异常,则提示转换异常,生成异常提示信息,并将异常提示信息发送至相应的ORM中间件,以使开发人员基于异常提示信息执行相应地异常处理策略。
本实施例中所提供的SQL转换方法,可以从Java方法创建DDL,也就是基于Java方法配置来创建DDL,还可以在运行期修改配置。数据库客户端可以基于数据库生成实体类源码,读取数据库结构,生成注解风格的实体类POJO,可以提高开发人员的编码效率。分页:提供跨数据库的分页方法。函数变换:对不同的数据库解析成对应方言的函数,只需使用mysql语法约定的函数,方言组件尽量完成不同数据库函数的替换,可以实现一次SQL编写,不同数据库能正常运行。类型变换:对不同的数据库字段类型,提供与Java类型的互相变换。保留字检查:提供数据库保留字检查功能,支持下定义保留字,在自定义函数或存储过程,函数名或过程名可以是预先配置好的,方言组件在转译这些函数时,跳过数据库内置函数检查,可以实现避免提示“XXX函数在XXX数据库不支持”的消息,保证用户体验。
应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的SQL转换方法的SQL转换装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个SQL转换装置实施例中的具体限定可以参见上文中对于SQL转换方法的限定,在此不再赘述。
在一个实施例中,如图8所示,提供了一种SQL转换装置800,包括:
第一获取模块802,用于获取原生SQL,对原生SQL进行解析,得到语法树对象集合,原生SQL是应用程序在运行的情况下生成的;
第二获取模块804,用于通过方言组件,获取应用程序的数据源连接信息,基于数据源连接信息确定数据库类型,以及确定数据库类型对应的数据库方言实例;
提取模块806,用于通过数据库方言实例,将原生SQL的语法结构解析转换为语法树对象集合的目标项的数据结构,并将目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL;
请求模块808,用于如果确定转换正常,则基于转换后的SQL,向数据库发起网络请求。
在其中一个实施例中,第一获取模块,具体用于:
通过方言组件,获取目标数据报文;
解析目标数据报文,得到目标数据报文包含的原生SQL。
在其中一个实施例中,提取模块,具体用于:
如果确定原生SQL的语句类型为数据定义语言类型,则通过数据库方言实例,将原生SQL的语法结构转换为语法树对象集合的SQL查询指令集的数据结构,并基于SQL查询指令集的数据结构以及字段类型映射向量表,进行数据库字段类型的定义转换,得到目标方言类型的mySQL字段定义;
基于目标方言类型的mySQL字段定义,得到目标方言类型的转换后的SQL。
在其中一个实施例中,提取模块,具体用于:
如果确定原生SQL的语句类型为数据查询语言类型,则通过数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于SQL查询指令集的数据结构,提取SQL表达式的数据结构,解析函数名,基于功能向量表进行函数转换,得到目标方言类型的函数;
基于目标方言类型的函数,得到目标方言类型的转换后的SQL。
在其中一个实施例中,提取模块,具体用于:如果确定原生SQL的语句类型为数据查询语言类型,则通过数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于SQL查询指令集的数据结构,提取SQL限量查询的数据结构,基于分页模版转换表,进行分页转换,得到目标方言类型的分页;
基于目标方言类型的分页,得到目标方言类型的转换后的SQL。
在其中一个实施例中,提取模块,具体用于:如果确定原生SQL的语句类型为数据定义语言类型,则通过数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于SQL查询指令集的数据结构,提取SQL表达式的数据结构,解析函数名,基于功能向量表进行函数转换,得到目标方言类型的函数;
基于SQL查询指令集的数据结构,提取SQL限量查询的数据结构,基于分页模版转换表,进行分页转换,得到目标方言类型的分页;
基于目标方言类型的函数以及目标方言类型的分页,得到目标方言类型的转换后的SQL。
在其中一个实施例中,装置还包括:
生成模块,用于如果确定转换异常,则生成异常提示信息,并输出异常提示信息.
在其中一个实施例中,请求模块,具体用于:将转换后的SQL发送至目标驱动组件,并通过目标驱动组件,基于转换后的SQL,向数据库发起网络请求。
上述SQL转换装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储方言相关数据。该计算机设备的网络接口用于与外部的数据库客户端通过网络连接通信。该计算机程序被处理器执行时以实现一种SQL转换方法。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种SQL转换方法,其特征在于,所述方法包括:
获取原生SQL,对所述原生SQL进行解析,得到语法树对象集合,所述原生SQL是应用程序在运行的情况下生成的;
通过方言组件,获取所述应用程序的数据源连接信息,基于所述数据源连接信息确定数据库类型,以及确定所述数据库类型对应的数据库方言实例;
通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL;
如果确定转换正常,则基于所述转换后的SQL,向数据库发起网络请求。
2.根据权利要求1所述的方法,其特征在于,所述获取原生SQL,包括:
通过方言组件,获取目标数据报文;
解析所述目标数据报文,得到所述目标数据报文包含的原生SQL。
3.根据权利要求1所述的方法,其特征在于,所述通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL,包括:
如果确定所述原生SQL的语句类型为数据定义语言类型,则通过所述数据库方言实例,将所述原生SQL的语法结构转换为所述语法树对象集合的SQL查询指令集的数据结构,并基于所述SQL查询指令集的数据结构以及字段类型映射向量表,进行数据库字段类型的定义转换,得到目标方言类型的mySQL字段定义;
基于目标方言类型的mySQL字段定义,得到目标方言类型的转换后的SQL。
4.根据权利要求3所述的方法,其特征在于,所述通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL,包括:
如果确定所述原生SQL的语句类型为数据查询语言类型,则通过所述数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于所述SQL查询指令集的数据结构,提取SQL表达式的数据结构,解析函数名,基于功能向量表进行函数转换,得到目标方言类型的函数;
基于所述目标方言类型的函数,得到目标方言类型的转换后的SQL。
5.根据权利要求3所述的方法,其特征在于,所述通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL,包括:
如果确定所述原生SQL的语句类型为数据查询语言类型,则通过所述数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于所述SQL查询指令集的数据结构,提取SQL限量查询的数据结构,基于分页模版转换表,进行分页转换,得到目标方言类型的分页;
基于所述目标方言类型的分页,得到目标方言类型的转换后的SQL。
6.根据权利要求3所述的方法,其特征在于,所述通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL,包括:
如果确定所述原生SQL的语句类型为数据定义语言类型,则通过所述数据库方言实例,从语法树对象集中提取SQL查询指令集的数据结构;
基于所述SQL查询指令集的数据结构,提取SQL表达式的数据结构,解析函数名,基于功能向量表进行函数转换,得到目标方言类型的函数;
基于所述SQL查询指令集的数据结构,提取SQL限量查询的数据结构,基于分页模版转换表,进行分页转换,得到目标方言类型的分页;
基于所述目标方言类型的函数以及所述目标方言类型的分页,得到目标方言类型的转换后的SQL。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述方法还包括:
如果确定转换异常,则生成异常提示信息,并输出所述异常提示信息。
8.根据权利要求1所述的方法,其特征在于,所述基于所述转换后的SQL,向数据库发起网络请求,包括:
将所述转换后的SQL发送至目标驱动组件,并通过所述目标驱动组件,基于所述转换后的SQL,向数据库发起网络请求。
9.一种SQL转换装置,其特征在于,所述装置包括:
第一获取模块,用于获取原生SQL,对所述原生SQL进行解析,得到语法树对象集合,所述原生SQL是应用程序在运行的情况下生成的;
第二获取模块,用于通过方言组件,获取所述应用程序的数据源连接信息,基于所述数据源连接信息确定数据库类型,以及确定所述数据库类型对应的数据库方言实例;
提取模块,用于通过数据库方言实例,将所述原生SQL的语法结构解析转换为所述语法树对象集合的目标项的数据结构,并将所述目标项的数据结构与转换向量表进行转换,得到目标方言类型的转换后的SQL;
请求模块,用于如果确定转换正常,则基于所述转换后的SQL,向数据库发起网络请求。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311069057.2A CN117033348A (zh) | 2023-08-23 | 2023-08-23 | Sql转换方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311069057.2A CN117033348A (zh) | 2023-08-23 | 2023-08-23 | Sql转换方法、装置、计算机设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117033348A true CN117033348A (zh) | 2023-11-10 |
Family
ID=88637172
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311069057.2A Pending CN117033348A (zh) | 2023-08-23 | 2023-08-23 | Sql转换方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117033348A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117349332A (zh) * | 2023-12-06 | 2024-01-05 | 宁波港信息通信有限公司 | 一种应用程序编程接口api的生成方法、装置和电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108710662A (zh) * | 2018-05-14 | 2018-10-26 | 上海跬智信息技术有限公司 | 语言转换方法和装置、存储介质、数据查询系统和方法 |
CN111061757A (zh) * | 2019-12-19 | 2020-04-24 | 用友网络科技股份有限公司 | 数据库的语言转换方法、装置、电子设备及存储介质 |
CN114090613A (zh) * | 2021-11-19 | 2022-02-25 | 恒生电子股份有限公司 | 程序语句转换方法、装置、设备及存储介质 |
CN114764558A (zh) * | 2021-01-14 | 2022-07-19 | 京东科技控股股份有限公司 | 一种sql方言转换方法、装置、系统及存储介质 |
CN116226170A (zh) * | 2023-03-14 | 2023-06-06 | 上海亘岩网络科技有限公司 | 一种数据库语句转换方法、装置、电子设备及存储介质 |
US20230185781A1 (en) * | 2021-12-09 | 2023-06-15 | Datametica Solutions Private Limited | System and method for data warehouse migration |
-
2023
- 2023-08-23 CN CN202311069057.2A patent/CN117033348A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108710662A (zh) * | 2018-05-14 | 2018-10-26 | 上海跬智信息技术有限公司 | 语言转换方法和装置、存储介质、数据查询系统和方法 |
CN111061757A (zh) * | 2019-12-19 | 2020-04-24 | 用友网络科技股份有限公司 | 数据库的语言转换方法、装置、电子设备及存储介质 |
CN114764558A (zh) * | 2021-01-14 | 2022-07-19 | 京东科技控股股份有限公司 | 一种sql方言转换方法、装置、系统及存储介质 |
CN114090613A (zh) * | 2021-11-19 | 2022-02-25 | 恒生电子股份有限公司 | 程序语句转换方法、装置、设备及存储介质 |
US20230185781A1 (en) * | 2021-12-09 | 2023-06-15 | Datametica Solutions Private Limited | System and method for data warehouse migration |
CN116226170A (zh) * | 2023-03-14 | 2023-06-06 | 上海亘岩网络科技有限公司 | 一种数据库语句转换方法、装置、电子设备及存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117349332A (zh) * | 2023-12-06 | 2024-01-05 | 宁波港信息通信有限公司 | 一种应用程序编程接口api的生成方法、装置和电子设备 |
CN117349332B (zh) * | 2023-12-06 | 2024-03-01 | 宁波港信息通信有限公司 | 一种应用程序编程接口api的生成方法、装置和电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8959106B2 (en) | Class loading using java data cartridges | |
US8447744B2 (en) | Extensibility platform using data cartridges | |
US11269694B2 (en) | Automated API code generation | |
US10558434B2 (en) | Rule-based automatic class generation from a JSON message | |
Bikakis et al. | The XML and semantic web worlds: technologies, interoperability and integration: a survey of the state of the art | |
US8103705B2 (en) | System and method for storing text annotations with associated type information in a structured data store | |
US8438190B2 (en) | Generating web services from business intelligence queries | |
US20170068891A1 (en) | System for rapid ingestion, semantic modeling and semantic querying over computer clusters | |
US10437564B1 (en) | Object mapping and conversion system | |
CN109710220B (zh) | 关系型数据库查询方法、装置、设备及存储介质 | |
Euzenat et al. | Ontology alignments: an ontology management perspective | |
US11954605B2 (en) | Systems and methods for intelligent labeling of instance data clusters based on knowledge graph | |
CN117033348A (zh) | Sql转换方法、装置、计算机设备和存储介质 | |
US20190391977A1 (en) | System for rapid ingestion, semantic modeling and semantic querying over computer clusters | |
CN114356971A (zh) | 数据处理方法、装置以及系统 | |
US9129035B2 (en) | Systems, methods, and apparatus for accessing object representations of data sets | |
Albarrak et al. | Translating relational & object-relational database models into OWL models | |
US11704099B1 (en) | Discovering matching code segments according to index and comparative similarity | |
US10853366B2 (en) | Cooperative expression visitors | |
Mahmoud et al. | Using semantic web technologies to improve the extract transform load model | |
CN116451795B (zh) | 一种量子线路图处理方法、装置及电子设备和存储介质 | |
Garg et al. | Study on JSON, its Uses and Applications in Engineering Organizations | |
CN115168365B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
JP2002287961A (ja) | 業務アプリケーション開発システム及び方法 | |
Comyn-Wattiau et al. | Query-Based Reverse Engineering of Graph Databases–From Program to Model |
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 |