CN114218256B - 访问语句处理方法、装置、设备及存储介质 - Google Patents
访问语句处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114218256B CN114218256B CN202210154365.4A CN202210154365A CN114218256B CN 114218256 B CN114218256 B CN 114218256B CN 202210154365 A CN202210154365 A CN 202210154365A CN 114218256 B CN114218256 B CN 114218256B
- Authority
- CN
- China
- Prior art keywords
- field
- self
- data table
- target
- increment
- 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
-
- 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
- G06F16/2282—Tablespace storage structures; Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种访问语句处理方法、装置、设备及存储介质,其中,该方法包括:接收针对目标数据库的访问语句,访问语句包括:目标数据库中待访问数据表的标识,剔除待访问数据表中的自增非业务字段,得到目标字段,对目标字段执行访问语句对应的数据操作。本申请通过将自增非业务字段剔除,使得待访问数据表能够保证实现自增非业务字段对应功能,同时还可以成功被访问,避免访问出错。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种访问语句处理方法、装置、设备及存储介质。
背景技术
PostgreSQL是一种特性非常齐全的自由软件的对象关系型数据库管理系统,在PostgreSQL数据库系统开发完成上线之后,往往因为审计或者数据同步需求等原因需要增加一些非业务字段。
相关技术中,在PostgreSQL数据库系统上线后,往往根据业务需求直接在PostgreSQL数据库系统中增加一些非业务字段。然而,该方式具有很强的侵入性,可能导致未明确定义字段的访问语句运行时因为字段不匹配而出错。
发明内容
本申请的目的在于,针对上述现有技术中的不足,提供一种访问语句处理方法、装置、设备及存储介质,以使待访问数据表能够保证实现自增非业务字段对应功能,同时还可以成功被访问,避免访问出错。
为实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请一实施例提供了一种访问语句处理方法,包括:
接收针对目标数据库的访问语句,所述访问语句包括:所述目标数据库中待访问数据表的标识;
剔除所述待访问数据表中的自增非业务字段,得到目标字段;
对所述目标字段执行所述访问语句对应的数据操作。
可选地,所述剔除所述待访问数据表中的自增字段,得到目标字段,包括:
从所述目标数据库的内核表中确定所述待访问数据表的所有表字段;所述内核表中存储有:所述目标数据库中所有数据表的所有表字段的字段名;
从所述目标数据库的内核扩展表中确定所述待访问数据表的自增非业务字段;所述内核扩展表中存储有:所述所有数据表的所有自增非业务字段的字段名;
从所述待访问数据表的所有表字段中剔除所述待访问数据表的自增非业务字段,得到所述目标字段。
可选地,所述从所述目标数据库的内核扩展表中确定所述待访问数据表的自增非业务字段之前,所述方法还包括:
确定每个数据表的自增字段;
将所述每个数据表的自增字段中的隐藏自增字段作为所述每个数据表的自增非业务字段;
将所述每个数据表的自增非业务字段的字段名添加至所述目标数据库的内核扩展表中。
可选地,所述将所述每个数据表的自增字段中的隐藏自增字段为所述每个数据表的自增非业务字段之前,所述方法还包括:
判断所述每个数据表的自增字段是否具有扩展标记;
若所述每个数据表的自增字段中的目标自增字段具有所述扩展标记,且所述目标自增字段的所述扩展标记的标记值为预设标记值,则确定所述目标自增字段为所述隐藏自增字段。
可选地,所述方法还包括:
在所述每个数据表的语法树上创建所述自增字段的语法节点,所述自增字段的语法节点中定义了:所述自增字段的字段信息。
可选地,所述访问语句为数据插入语句,所述对所述目标字段执行所述访问语句对应的数据操作,包括:
从所述访问语句中确定所述目标字段的字段值;
向所述待访问数据表中的所述目标字段插入所述字段值。
可选地,所述访问语句为数据查询语句,所述对所述目标字段执行所述访问语句对应的数据操作,包括:
将所述待访问数据表中所述目标字段的字段值进行推送。
第二方面,本申请另一实施例提供了一种访问语句处理装置,包括:
接收模块,用于接收针对目标数据库的访问语句,所述访问语句包括:所述目标数据库中待访问数据表的标识;
处理模块,用于剔除所述待访问数据表中的自增非业务字段,得到目标字段;
执行模块,用于对所述目标字段执行所述访问语句对应的数据操作。
可选地,所述处理模块,具体用于:
从所述目标数据库的内核表中确定所述待访问数据表的所有表字段;所述内核表中存储有:所述目标数据库中所有数据表的所有表字段的字段名;
从所述目标数据库的内核扩展表中确定所述待访问数据表的自增非业务字段;所述内核扩展表中存储有:所述所有数据表的所有自增非业务字段的字段名;
从所述待访问数据表的所有表字段中剔除所述待访问数据表的自增非业务字段,得到所述目标字段。
可选地,所述处理模块,还用于:
确定每个数据表的自增字段;
将所述每个数据表的自增字段中的隐藏自增字段作为所述每个数据表的自增非业务字段;
将所述每个数据表的自增非业务字段的字段名添加至所述目标数据库的内核扩展表中。
可选地,所述处理模块,还用于:
判断所述每个数据表的自增字段是否具有扩展标记;
若所述每个数据表的自增字段中的目标自增字段具有所述扩展标记,且所述目标自增字段的所述扩展标记的标记值为预设标记值,则确定所述目标自增字段为所述隐藏自增字段。
可选地,所述处理模块,还用于:
在所述每个数据表的语法树上创建所述自增字段的语法节点,所述自增字段的语法节点中定义了:所述自增字段的字段信息。
可选地,所述访问语句为数据插入语句,所述执行模块,具体用于:
从所述访问语句中确定所述目标字段的字段值;
向所述待访问数据表中的所述目标字段插入所述字段值。
可选地,所述访问语句为数据查询语句,所述执行模块,具体用于:
将所述待访问数据表中所述目标字段的字段值进行推送。
第三方面,本申请另一实施例提供了一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的计算机程序,当所述电子设备运行时,所述处理器与所述存储器之间通过所述总线通信,所述处理器执行所述计算机程序,以执行如第一方面任一项所述的方法。
第四方面,本申请另一实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如第一方面任一项所述的方法。
本申请的有益效果是:
本申请实施例提供的一种访问语句处理方法、装置、设备及存储介质,其中,该方法包括:接收针对目标数据库的访问语句,访问语句包括:目标数据库中待访问数据表的标识,剔除待访问数据表中的自增非业务字段,得到目标字段,对目标字段执行访问语句对应的数据操作。本申请通过将自增非业务字段剔除,使得待访问数据表能够保证实现自增非业务字段对应功能,同时还可以成功被访问,避免访问出错。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的访问语句处理方法的流程示意图一;
图2为本申请实施例提供的访问语句处理方法的流程示意图二;
图3为本申请实施例提供的访问语句处理方法的流程示意图三;
图4为本申请实施例提供的访问语句处理方法的流程示意图四;
图5为本申请实施例提供的访问语句处理方法的流程示意图五;
图6为本申请实施例提供的访问语句处理装置的结构示意图;
图7为本申请实施例提供的电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。
在PostgreSQL数据库系统上线后,向PostgreSQL数据库系统中增加非业务字段,具有非常强的侵入性,可能会导致未明确定义字段的访问语句,如数据插入语句(insertinto table1 values(1,2,3))、数据查询语句(select *)等运行时因为字段不匹配而出错,table1表示表1,以insert into table1 values(1,2,3)为例,这是因为:该语句未明确定义表1(table1)中的字段,在insert into table1 values(1,2,3)运行时,由于表1(table1)中原有三个字段,增加了非业务字段,如table1的主键、自动更新时间戳字段,table1现有四个字段,而由于字段值(values)仍然为三个,这样,现有的字段数和字段值数不匹配,导致访问出错。
有鉴于此,本申请提供了一种访问语句处理方法,通过将自增非业务字段剔除,在数据库内核中实现隐藏自增非业务字段,使其默认不可见,使得待访问数据表能够保证实现自增非业务字段对应功能,同时还可以成功被访问,避免访问出错。
下面结合几个具体实施例对本申请提供的访问语句处理方法进行详细说明。
图1为本申请实施例提供的访问语句处理方法的流程示意图一,本实施例的执行主体可以为电子设备,例如服务端设备。
如图1所示,该方法包括:
S101、接收针对目标数据库的访问语句。
访问语句包括:目标数据库中待访问数据表的标识,目标数据库可以为PostgreSQL数据库,待访问数据表可以为目标数据库中任意一个数据表,目标数据库中存储有多个数据表。
客户端可以向服务端发送针对目标数据库的访问语句,相应地,服务端接收客户端发送的该访问语句,其中,服务端存储有目标数据库,服务端可以为PostgreSQL服务端。
在本申请其中一个实施例中,该客户端可以通过如下方式中的任意一种向服务端发送针对目标数据库的访问语句,该方式包括但不限于:Java数据库连接(Java DatabaseConnectivity,JDBC)、开放数据库互连(Open Database Connectivity,ODBC)、libpq接口。
需要说明的是,该访问语句可以为增删查改语句中的任意一种,也就是说,在目标数据库上线之后,还可以对目标数据库中的待访问数据表执行增删查改操作。
S102、剔除待访问数据表中的自增非业务字段,得到目标字段。
在目标数据库上线之后,基于一些需求,需要向该目标数据库中待访问数据表中增加一些自增非业务字段,自增非业务字段为与待访问数据表的业务不相关的功能字段。其中,自增非业务字段例如可以包括:待访问数据表的主键字段和自动更新时间戳字段。
服务端接收到针对目标数据库的访问语句之后,可确定待访问数据表中的所有表字段和自增非业务字段,然后将自增非业务字段从所有表字段中剔除,得到目标字段,其中,待访问数据表的所有表字段可以包括:待访问数据表的业务字段和自增非业务字段,待访问数据表的业务字段可以为:待访问数据表的列字段。
S103、对目标字段执行访问语句对应的数据操作。
将待访问数据表中的自增非业务字段剔除之后,即可对目标字段执行访问语句对应的数据操作,例如访问语句为增删查改语句,那么对目标字段执行访问语句对应的数据操作可以为:对目标字段执行增删查改操作。
在本实施例的访问语句处理方法中,接收针对目标数据库的访问语句,访问语句包括:目标数据库中待访问数据表的标识,剔除待访问数据表中的自增非业务字段,得到目标字段,对目标字段执行访问语句对应的数据操作。本申请通过将自增非业务字段剔除,使得待访问数据表能够保证实现自增非业务字段对应功能,同时还可以成功被访问,避免访问出错。
可选地,访问语句为数据插入语句,下面结合图2对本方案进行说明,图2为本申请实施例提供的访问语句处理方法的流程示意图二,如图2所示,该方法包括:
S101、接收针对目标数据库的访问语句。
S102、剔除待访问数据表中的自增非业务字段,得到目标字段。
接收客户端发送的针对目标数据库的访问语句,其中,该访问语句为数据插入语句,该访问语句中包括目标数据库中待访问数据表的标识,服务端根据待访问数据表的标识,确定待访问数据表中的所有表字段和自增非业务字段,并将自增非业务字段从所有表字段中剔除,得到目标字段。
相应地,对目标字段执行访问语句对应的数据操作,包括步骤S201-S202。
S201、从访问语句中确定目标字段的字段值。
S202、向待访问数据表中的目标字段插入字段值。
其中,访问语句为数据插入语句,访问语句中还可以包括:待插入的字段值,然后向待访问数据表中的目标字段插入该字段值。
作为一种示例,数据插入语句可以为insert into table_1 values(1,2,3),待访问数据表为table1,PostgreSQL服务端接收该语句,PostgreSQL服务端中的SQL语法解析模块可以对该语句进行分析,若分析确定语句未明确定义table1中的待访问字段(table1后面没有用括号列出具体的字段),PostgreSQL服务端中的重写(rewrite)模块检查该语句中没有列出的待访问字段是否定义了字段值,若该语句中定义了字段值,则判断table1的所有表字段的数量与该语句中定义的字段值的数量是否匹配,若不匹配,则将自增非业务字段从所有表字段中剔除,得到目标字段,并将该语句中定义的字段值插入目标字段中,也即将字段值1,2,3依次插入目标字段中。
可选地,以自增非业务字段为自动更新时间戳字段为例,还可以动态构建自增非业务字段的字段节点,并将该字段节点的字段添加至待访问数据表的待访问字段中,这样,该语句则变成了insert into table_1(c1,c2,c3,ltaut) values(1,1,1,current_timestamp),待访问字段的字段名包括c1,c2,c3,ltaut,目标字段的字段名为c1,c2,c3,即table1中的第一列、第二列、第三列,ltaut为自动更新时间戳字段的字段名,1,1,1分别为第一列的字段值、第二列的字段值、第三列的字段值,current_timestamp为ltaut的字段值,表示更新时间为当前时间戳(current_timestamp),需要说明的是,在table1中存在数据更新时,自动更新时间戳字段的字段值会自动更新。
在本申请其中一个实施例中,若分析确定语句明确定义table1中的字段,如该语句为insert into table1(c1,c2,c3,c4) values(1,1,1,1),也可以向字段c1,c2,c3,c4中分别插入字段值1,1,1,1。
在本实施例的访问语句处理方法中,自增非业务字段在特性和普通字段一样支持创建索引和唯一索引,但是默认不可见,使得待访问数据表在能够保证在数据更新时自动更新时间戳字段的字段值更新,同时还可插入数据,无需维护,实现了无侵入的跟踪变更。
可选地,访问语句为数据查询语句,下面结合图3对本方案进行说明,图3为本申请实施例提供的访问语句处理方法的流程示意图三,如图3所示,该方法包括:
S101、接收针对目标数据库的访问语句。
S102、剔除待访问数据表中的自增非业务字段,得到目标字段。
接收客户端发送的针对目标数据库的访问语句,其中,该访问语句为数据查询语句,该访问语句中包括目标数据库中待访问数据表的标识,服务端根据待访问数据表的标识,确定待访问数据表中的所有表字段和自增非业务字段,并将自增非业务字段从所有表字段中剔除,得到目标字段。
相应地,对目标字段执行访问语句对应的数据操作,包括步骤S301。
S301、将待访问数据表中目标字段的字段值进行推送。
其中,访问语句为数据查询语句,剔除自增非业务字段得到目标字段之后,可以将待访问数据表中目标字段的字段值推送客户端。
作为一种示例,数据查询语句可以为select * from table_1,待访问数据表为table1,PostgreSQL服务端接收该语句,PostgreSQL服务端中的SQL语法解析模块可以对该语句进行分析,若分析确定语句未明确定义table1中的字段(table1后面没有用括号列出具体的字段),则剔除待访问数据表中的自增非业务字段,然后将目标字段的字段值进行推送,这样,即可将自增非业务字段进行隐藏,服务端过滤掉这些隐藏资源,进而客户端无感知。
在本申请其中一个实施例中,若分析确定语句明确定义table1中的字段,如该语句为select c1,c2,c3,c4,也可以将字段c1,c2,c3,c4的字段值进行推送。
在本实施例的访问语句处理方法中,自增非业务字段在特性和普通字段一样支持创建索引和唯一索引,但是默认不可见,使得待访问数据表在能够保证实现自增非业务字段对应的功能,同时还可以查询数据,无需维护,实现了无侵入的跟踪变更。
下面结合图4实施例对步骤S102,剔除待访问数据表中的自增非业务字段,得到目标字段的一种可能实现方式进行说明。
图4为本申请实施例提供的访问语句处理方法的流程示意图四,如图4所示,剔除待访问数据表中的自增非业务字段,得到目标字段,包括:
S401、从目标数据库的内核表中确定待访问数据表的所有表字段。
S402、从目标数据库的内核扩展表中确定待访问数据表的自增非业务字段。
S403、从待访问数据表的所有表字段中剔除待访问数据表的自增非业务字段,得到目标字段。
其中,内核表中存储有:目标数据库中所有数据表的所有表字段的字段名,内核扩展表中存储有:所有数据表的所有自增非业务字段的字段名。
根据待访问数据表的标识,从目标数据库的内核表中确定待访问数据表的所有表字段的字段名,并从目标数据库的内核扩展表中确定待访问数据表的自增非业务字段的字段名,然后从待访问数据表的所有表字段中剔除待访问数据表的自增非业务字段,其中,待访问数据表的所有表字段可以包括:待访问数据表的业务字段和自增非业务字段,待访问数据表的业务字段可以为:待访问数据表的列字段,如前述示例c1,c2,c3,c4。
需要说明的是,内核表中还可以包括:待访问数据库的所有表字段的字段信息,例如字段类型、字段长度、字段值等,内核扩展表中还可以包括:自增非业务字段的字段值。在实际运行时,需要加载内核表和内核扩展表,内核表和内核扩展表是原子性逻辑。
可选地,S402、从目标数据库的内核扩展表中确定待访问数据表的自增非业务字段之前,该方法还包括:
确定每个数据表的自增字段;将每个数据表的自增字段中的隐藏自增字段作为每个数据表的自增非业务字段;将每个数据表的自增非业务字段的字段名添加至目标数据库的内核扩展表中。
其中,每个数据表的自增字段包括自增业务字段和自增非业务字段,自增业务字段例如可以包括:自增列字段,自增业务字段通常是和业务相关的,自增非业务字段为与待访问数据表的业务不相关的功能字段。
为避免在进行数据访问时,由于自增非业务字段造成访问出错,因此在确定每个数据表的自增字段后,将每个数据表的自增字段中的隐藏自增字段作为每个数据表的自增非业务字段,其中,隐藏自增字段可以是预先设置的功能字段,例如:待访问数据表的主键字段和自动更新时间戳字段。
然后将每个数据表的自增非业务字段的字段名添加至目标数据库的内核扩展表中,其中,目标数据库的内核扩展表中存储有:所有数据表的所有自增非业务字段的字段名,另外,内核扩展表中具有所有数据表的存储空间,所以可将每个数据表的所有自增非业务字段的字段名添加至每个数据表对应的存储空间。
在图3实施例的基础上,图5为本申请实施例提供的访问语句处理方法的流程示意图五,如图5所示,将每个数据表的自增字段中的隐藏自增字段为每个数据表的自增非业务字段之前,该方法还包括:
S501、判断每个数据表的自增字段是否具有扩展标记。
S502、若每个数据表的自增字段中的目标自增字段具有扩展标记,且目标自增字段的扩展标记的标记值为预设标记值,则确定目标自增字段为隐藏自增字段。
判断每个数据表的自增字段是否具有扩展标记,该扩展标记为自增非业务字段的标记,若每个数据表的自增字段中的目标自增字段具有扩展标记,再判断目标自增字段的扩展标记的标记值是否为预设标记值,预设标记值用于指示自增非业务字段被隐藏,若目标自增字段的扩展标记的标记值为预设标记值,则确定目标自增字段为隐藏自增字段,其中,预设标记值可以为1。
需要说明的是,自增非业务字段被隐藏的标记指的是自增非业务字段被设置为在处理访问语句时被隐藏(默认不可见),也就是说,通过设置权限来使自增非业务字段默认不可见。
以自增非业务字段包括主键和自动更新时间戳字段为例,实现代码如下:
CATALOG(lt_attri_ext,9901,ArrtiExtRelationId) # 定义内核扩展表lt_attri_ext
{
Oid relid; /* OID of relation */ # 关系的对象标识(ObjectIdentifier,OID),即主键
NameData colname; /* column name */ #自增非业务字段的字段名
int16 infomask1; /* bit1: auto_primary_key,bit2: on update_current_timestamp*/ #自增非业务字段的扩展标记,16位存储,
} FormData_lt_attri_ext; # 定义结束
在上述代码实现中,扩展标记的标记值的第一位1表示隐藏主键,第二位1表示自动更新时间戳,则主键字段和自动更新时间戳字段为隐藏自增字段,主键字段和自动更新时间戳字段的字段名均存储在内核扩展表lt_attri_ext中;若扩展标记的标记值的第一位和第二位均为0,表示主键字段和自动更新时间戳字段不是隐藏自增字段,则主键字段和自动更新时间戳字段的字段名均不会存储在内核扩展表lt_attri_ext中。
在本实施例中,预先设置扩展标记以及扩展标记的标记值,在判断字段是否为隐藏自增字段时,通过扩展标记和扩展标记的标记值来确定字段是否为隐藏自增字段。这样,可根据实际需求通过调整该标记值来进行隐藏自增字段的设置,灵活有效。
可选地,该方法还包括:
在每个数据表的语法树上创建自增字段的语法节点,自增字段的语法节点中定义了:自增字段的字段信息。
需要说明的是,在对目标数据库进行增删查改时,需要在目标数据库的每个数据表的语法树上创建每个数据表的自增字段的语法节点,语法节点用于对自增字段进行语法支持,语法节点中定义了:自增字段的字段信息,其中,自增字段的字段信息包括但不限于:字段类型、字段长度、字段值。如此,在语法树上创建了自增字段的语法节点,这样程序运行时可识别自增字段。
以自增字段为自动更新时间戳字段(with update current_timestamp)为例,语法节点名为OptWithUpdateExt;其定义为:/* lightdb extent with update current_timestamp */,实现代码如下:
OptWithUpdateExt: # 定义自动更新时间戳语法元素逻辑概念
WITH_UPDATE_CURRENTTIMESTAMP # 关键字,防止被当做标识符使用
{
ColumnDef *n = makeNode(ColumnDef); # 在语法节点下创建一个列定义(ColumnDef)节点
Constraint *cn = makeNode(Constraint); # 创建一个约束(Constraint)节点
cn->contype = CONSTR_DEFAULT; # 约束类型为默认值
cn->raw_expr=makeSQLValueFunction(SVFOP_ current_timestamp,-1,@1); #约束的表达式为SQL值类型函数,取值为当前系统时间戳
cn->update_timestamp = AUT_WITH_UPDATE; # 表示该约束为自动更新时间戳
n->colname = makeLtautName(); # ColumnDef的字段名为ltaut
n->typeName = SystemTypeName("timestamp"); #ltaut字段的数据类型为timestamp类型
n->update_timestamp = AUT_WITH_UPDATE; #该字段为具有自动更新时间戳特性;
$$ = (Node *)n;
}
需要说明的是,语法树上还包括运行(CreateStmt)节点,CreateStmt节点的处理中包含OptWithUpdateExt定义,并在实际运行时如果存在该定义,则将其转变为一个字段,字段名为ltaut,类型为timestamp,默认值为current_timestamp,添加到ColumnDefList。
作为一种示例,实现代码如下:
CREATE OptTemp TABLE IF_P NOT EXISTS qualified_name
'('OptTableElementList ')' OptInherit OptFirstPartitionSpec
table_access_method_clause
OptWith OptWithUpdateExt OnCommitOption OptTableSpace
OptSecondPartitionSpec OptWithPrimaryKeyExt
if ($15 == NULL) # 第15个元素(从1开始)即OptWithUpdateExt为空(即不包含),表示没有定义自动更新时间戳字段
{
n->tableElts = $9; # 原有逻辑,即明确定义的表字段列表OptTableElementList
} else
{
n->tableElts = lappend($9,$15); # 如果不为空,则把第15个即OptWithUpdateExt添加到明确定义的表字段中
}
其中,CREATE OptTemp表示创建表的定义语句,OptWithUpdateExt表示扩展的自动更新时间戳属性定义,if else伪代码表示在OptWithUpdateExt不为空时将OptWithUpdateExt节点作为字段添加到数据表的表字段中。
图6为本申请实施例提供的访问语句处理装置的结构示意图,该装置可以集成在电子设备中。如图6所示,该装置包括:
接收模块601,用于接收针对目标数据库的访问语句,所述访问语句包括:所述目标数据库中待访问数据表的标识;
处理模块602,用于剔除所述待访问数据表中的自增非业务字段,得到目标字段;
执行模块603,用于对所述目标字段执行所述访问语句对应的数据操作。
可选地,所述处理模块602,具体用于:
从所述目标数据库的内核表中确定所述待访问数据表的所有表字段;所述内核表中存储有:所述目标数据库中所有数据表的所有表字段的字段名;
从所述目标数据库的内核扩展表中确定所述待访问数据表的自增非业务字段;所述内核扩展表中存储有:所述所有数据表的所有自增非业务字段的字段名;
从所述待访问数据表的所有表字段中剔除所述待访问数据表的自增非业务字段,得到所述目标字段。
可选地,所述处理模块602,还用于:
确定每个数据表的自增字段;
将所述每个数据表的自增字段中的隐藏自增字段作为所述每个数据表的自增非业务字段;
将所述每个数据表的自增非业务字段的字段名添加至所述目标数据库的内核扩展表中。
可选地,所述处理模块602,还用于:
判断所述每个数据表的自增字段是否具有扩展标记;
若所述每个数据表的自增字段中的目标自增字段具有所述扩展标记,且所述目标自增字段的所述扩展标记的标记值为预设标记值,则确定所述目标自增字段为所述隐藏自增字段。
可选地,所述处理模块602,还用于:
在所述每个数据表的语法树上创建所述自增字段的语法节点,所述自增字段的语法节点中定义了:所述自增字段的字段信息。
可选地,所述访问语句为数据插入语句,所述执行模块603,具体用于:
从所述访问语句中确定所述目标字段的字段值;
向所述待访问数据表中的所述目标字段插入所述字段值。
可选地,所述访问语句为数据查询语句,所述执行模块603,具体用于:
将所述待访问数据表中所述目标字段的字段值进行推送。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
图7为本申请实施例提供的电子设备的结构示意图,如图7所示,该电子设备包括:处理器701、存储器702和总线703,所述存储器702存储有所述处理器701可执行的计算机程序,当所述电子设备运行时,所述处理器701与所述存储器702之间通过所述总线703通信,所述处理器701执行所述计算机程序,以执行上述方法实施例。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考方法实施例中的对应过程,本申请中不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。
Claims (10)
1.一种访问语句处理方法,其特征在于,包括:
接收针对目标数据库的访问语句,所述访问语句包括:所述目标数据库中待访问数据表的标识,所述访问语句为增删查改语句中的任意一种;
剔除所述待访问数据表中的自增非业务字段,得到目标字段,所述自增非业务字段为与所述待访问数据表的业务不相关的功能字段;
对所述目标字段执行所述访问语句对应的数据操作。
2.根据权利要求1所述的方法,其特征在于,所述剔除所述待访问数据表中的自增字段,得到目标字段,包括:
从所述目标数据库的内核表中确定所述待访问数据表的所有表字段;所述内核表中存储有:所述目标数据库中所有数据表的所有表字段的字段名;
从所述目标数据库的内核扩展表中确定所述待访问数据表的自增非业务字段;所述内核扩展表中存储有:所述所有数据表的所有自增非业务字段的字段名;
从所述待访问数据表的所有表字段中剔除所述待访问数据表的自增非业务字段,得到所述目标字段。
3.根据权利要求2所述的方法,其特征在于,所述从所述目标数据库的内核扩展表中确定所述待访问数据表的自增非业务字段之前,所述方法还包括:
确定每个数据表的自增字段;
将所述每个数据表的自增字段中的隐藏自增字段作为所述每个数据表的自增非业务字段;
将所述每个数据表的自增非业务字段的字段名添加至所述目标数据库的内核扩展表中。
4.根据权利要求3所述的方法,其特征在于,所述将所述每个数据表的自增字段中的隐藏自增字段为所述每个数据表的自增非业务字段之前,所述方法还包括:
判断所述每个数据表的自增字段是否具有扩展标记;
若所述每个数据表的自增字段中的目标自增字段具有所述扩展标记,且所述目标自增字段的所述扩展标记的标记值为预设标记值,则确定所述目标自增字段为所述隐藏自增字段。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述每个数据表的语法树上创建所述自增字段的语法节点,所述自增字段的语法节点中定义了:所述自增字段的字段信息。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述访问语句为数据插入语句,所述对所述目标字段执行所述访问语句对应的数据操作,包括:
从所述访问语句中确定所述目标字段的字段值;
向所述待访问数据表中的所述目标字段插入所述字段值。
7.根据权利要求1-5任一项所述的方法,其特征在于,所述访问语句为数据查询语句,所述对所述目标字段执行所述访问语句对应的数据操作,包括:
将所述待访问数据表中所述目标字段的字段值进行推送。
8.一种访问语句处理装置,其特征在于,包括:
接收模块,用于接收针对目标数据库的访问语句,所述访问语句包括:所述目标数据库中待访问数据表的标识,所述访问语句为增删查改语句中的任意一种;
处理模块,用于剔除所述待访问数据表中的自增非业务字段,得到目标字段,所述自增非业务字段为与所述待访问数据表的业务不相关的功能字段;
执行模块,用于对所述目标字段执行所述访问语句对应的数据操作。
9.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的计算机程序,当所述电子设备运行时,所述处理器与所述存储器之间通过所述总线通信,所述处理器执行所述计算机程序,以执行如权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210154365.4A CN114218256B (zh) | 2022-02-21 | 2022-02-21 | 访问语句处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210154365.4A CN114218256B (zh) | 2022-02-21 | 2022-02-21 | 访问语句处理方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114218256A CN114218256A (zh) | 2022-03-22 |
CN114218256B true CN114218256B (zh) | 2022-05-27 |
Family
ID=80708969
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210154365.4A Active CN114218256B (zh) | 2022-02-21 | 2022-02-21 | 访问语句处理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114218256B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114610959B (zh) * | 2022-05-12 | 2022-08-16 | 恒生电子股份有限公司 | 数据处理方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063479A (zh) * | 2010-12-22 | 2011-05-18 | 北京中电普华信息技术有限公司 | 一种控制数据访问权限的方法和系统 |
CN103177016A (zh) * | 2011-12-22 | 2013-06-26 | 北京新媒传信科技有限公司 | 关系型数据库访问方法和装置 |
CN103970758A (zh) * | 2013-01-29 | 2014-08-06 | 鸿富锦精密工业(深圳)有限公司 | 数据库访问系统及方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8346714B1 (en) * | 2009-12-17 | 2013-01-01 | Teradota Us, Inc. | Transactiontime and validtime timestamping in an enterprise active data warehouse |
US9208212B2 (en) * | 2012-12-17 | 2015-12-08 | Sap Ag | Field extensibility in a multi-tenant environment with columnar database support |
CN112287644B (zh) * | 2020-09-30 | 2024-01-30 | 成都新潮传媒集团有限公司 | 一种数据提交方法、装置、计算机设备和可读存储介质 |
-
2022
- 2022-02-21 CN CN202210154365.4A patent/CN114218256B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102063479A (zh) * | 2010-12-22 | 2011-05-18 | 北京中电普华信息技术有限公司 | 一种控制数据访问权限的方法和系统 |
CN103177016A (zh) * | 2011-12-22 | 2013-06-26 | 北京新媒传信科技有限公司 | 关系型数据库访问方法和装置 |
CN103970758A (zh) * | 2013-01-29 | 2014-08-06 | 鸿富锦精密工业(深圳)有限公司 | 数据库访问系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114218256A (zh) | 2022-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112118232B (zh) | 报文协议解析方法及装置 | |
US10621211B2 (en) | Language tag management on international data storage | |
CN110555030B (zh) | 一种sql语句的处理方法和装置 | |
CN109388523B (zh) | 一种基于二进制日志文件恢复MySQL数据库的方法 | |
US10489493B2 (en) | Metadata reuse for validation against decentralized schemas | |
CN113760971B (zh) | 用于检索图数据库的数据的方法、计算设备和存储介质 | |
CN113420026B (zh) | 数据库表结构变更方法、装置、设备及存储介质 | |
CN112015722A (zh) | 数据库管理方法、数据血缘分析方法以及相关装置 | |
CN104320312A (zh) | 网络应用安全测试工具及模糊测试用例生成方法和系统 | |
CN114218256B (zh) | 访问语句处理方法、装置、设备及存储介质 | |
US9053207B2 (en) | Adaptive query expression builder for an on-demand data service | |
CN109815240A (zh) | 用于管理索引的方法、装置、设备和存储介质 | |
CN113760948A (zh) | 一种数据查询的方法及装置 | |
CN110909168A (zh) | 知识图谱的更新方法和装置、存储介质及电子装置 | |
CN115543402A (zh) | 一种基于代码提交的软件知识图谱增量更新方法 | |
CN113282555A (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN108694172B (zh) | 信息输出方法和装置 | |
WO2020024778A1 (zh) | xml文件批量修改方法、系统、设备和计算机可读存储介质 | |
CN102591859B (zh) | 一种重用行业标准格式文件的方法及相关装置 | |
CN114116720A (zh) | 一种数据库的在线管理方法、装置、设备及存储介质 | |
Le Zou et al. | On synchronizing with web service evolution | |
CN114281842A (zh) | 一种数据库分表查询的方法及设备 | |
US10866993B2 (en) | Managing online help information in a data center | |
US20180248775A1 (en) | Certification tool gap analyzer | |
CN115688711B (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 |