CN110765159B - 对象解析方法、装置、存储介质及设备 - Google Patents
对象解析方法、装置、存储介质及设备 Download PDFInfo
- Publication number
- CN110765159B CN110765159B CN201911061670.3A CN201911061670A CN110765159B CN 110765159 B CN110765159 B CN 110765159B CN 201911061670 A CN201911061670 A CN 201911061670A CN 110765159 B CN110765159 B CN 110765159B
- Authority
- CN
- China
- Prior art keywords
- plan
- global
- generating
- target object
- head
- 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/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Operations Research (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了对象解析方法、装置、存储介质及设备。该方法包括:生成目标对象的对象头对应的第一计划,将第一计划作为目标对象的临时全局计划,加入到全局计划缓存中,生成目标对象的对象体对应的第二计划,将第二计划和第一计划合并成为目标对象的完整全局计划。本发明实施例通过采用上述技术方案,将目标对象的计划生成过程进行分离,先只生成目标对象的对象头的计划,该计划可作为临时的全局计划被使用,从而可以适用于对象间相互引用情况的对象解析。
Description
技术领域
本发明实施例涉及数据库技术领域,尤其涉及对象解析方法、装置、存储介质及设备。
背景技术
数据库系统中,在分析执行语句时,如果遇到对象,则需要对对象进行解析,包括获取对象的计划。
在实际应用时,经常会存在这样一种场景,如当对象1使用对象2中的变量或方法,我们称对象1对对象2进行了引用,其中,对象1是引用对象,对象2是被引用对象,如果对象1和对象2彼此都使用了对方的变量或方法,我们称两者相互引用。目前,通常的引用对象的计划生成的方法是,对象A如果引用对象B,会在生成对象A的计划之前,先把对象B的计划全部生成出来,最后生成对象A的计划,但如果对象B也引用对象A,由于对象A未解析完毕,对象A的计划尚未生成,那么生成对象B的计划时无法生成,导致对象相互引用的计划都生成不了的问题。
因此,目前亟需一种适用于相互引用对象的解析方案。
发明内容
本发明实施例提供了对象解析方法、装置、存储介质及设备,可以优化现有的对象解析方案。
第一方面,本发明实施例提供了一种对象解析方法,包括:
生成目标对象的对象头对应的第一计划;
将所述第一计划作为所述目标对象的临时全局计划,加入到全局计划缓存中;
生成所述目标对象的对象体对应的第二计划;
将所述第二计划和所述第一计划合并成为所述目标对象的完整全局计划。
第二方面,本发明实施例提供了一种对象解析装置,包括:
第一计划生成模块,用于生成目标对象的对象头对应的第一计划;
第一缓存加入模块,用于将所述第一计划作为所述目标对象的临时全局计划,加入到全局计划缓存中;
第二计划生成模块,用于生成所述目标对象的对象体对应的第二计划;
第二缓存加入模块,用于将所述第二计划和所述第一计划合并成为所述目标对象的完整全局计划。
第三方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例提供的对象解析方法。
第四方面,本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例提供的对象解析方法。
本发明实施例中提供的对象解析方案,生成目标对象的对象头对应的第一计划,将第一计划作为所述目标对象的临时全局计划,加入到全局计划缓存中,生成目标对象的对象体对应的第二计划,在全局计划缓存中将第二计划和第一计划合并成为目标对象的完整全局计划。通过采用上述技术方案,将目标对象的计划生成过程进行分离,先只生成目标对象的对象头的计划,该计划可作为临时的全局计划被使用,之后再生成目标对象的对象体的计划,得到完整的全局计划,若另一对象对目标对象进行引用,而目标对象又同时引用该另一对象时,则不需要等待对方的完整全局计划生成,基于被引用对象的临时全局计划,即可完成自身全局计划的构建,从而可以适用于对象间相互引用情况的对象解析。
附图说明
图1为本发明实施例提供的一种对象引用示意图;
图2为本发明实施例提供的又一种对象引用示意图;
图3为本发明实施例提供的一种对象解析方法的流程示意图;
图4为本发明实施例提供的一种对象的计划缓存结构示意图;
图5为本发明实施例提供的又一种对象解析方法的流程示意图;
图6为本发明实施例提供的另一种对象引用示意图;
图7为本发明实施例提供的一种对象的缓存结构的分析结构和对象登记流程示意图;
图8为本发明实施例提供的一种对象体类型示意图;
图9为本发明实施例提供的再一种对象引用示意图;
图10为本发明实施例提供的一种对象解析装置的结构框图;
图11为本发明实施例提供的一种计算机设备的结构框图。
具体实施方式
下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
在更加详细地讨论示例性实施例之前,先举例说明一种对象相互引用的场景。假设对象object01中存在两种方法f1和f11,对象object02中存在两种方法f2和f22,如下:
对象object01的方法f1中引用对象object02的方法f2,对象object02的方法f2中引用对象object01的方法f11,这样对象的计划生成形成了闭环。在执行对象object01的方法f1时,在解析object01时,去解析object02,解析object02过程中又去解析object01,往往陷入死循环。
为了更具体的说明,下面举例两种场景:对象A的对象头和对象体分别为A1和A2;对象B的对象头和对象体分别为B1和B2。A1→B2表示A1引用了B2。对于数据库中的对象,引用是引用另一个对象的变量和方法。引用对象头就只是引用变量,引用对象头和对象体就是引用对象体的方法。下面为了便于理解,以只是引用变量为例进行说明。
场景一、图1为本发明实施例提供的一种对象引用示意图,在对象体中出现相互引用(简称对象体中相互引用)。A2→B1表示A2引用了B1,B2→A1表示B2引用了A1。在解析对象A时,由于A2引用了B1,相关技术中,需要先生成B的完整计划,再生成A的完整计划,但是由于B2引用了A1,所以,按照相关技术的方案,又需要生成A的完整计划,所以形成了死循环。
场景二、图2为本发明实施例提供的又一种对象引用示意图,两者中的一个的对象头中出现相互引用(简称:对象头和对象体中相互引用)。A1→B1表示A1引用了B1,B2→A1表示B2引用了A1。在解析对象A时,由于A1引用了B1,相关技术中,需要先生成B的完整计划,再生成A的完整计划,但是由于B2引用了A1,所以,按照相关技术的方案,又需要生成A的完整计划,所以形成了死循环。
为了解决上述问题,本发明实施例中,将一个对象的计划生成过程进行分离,先只生成对象头的计划,该计划可作为临时的全局计划被使用,之后,再生成对象体的计划,得到完整的全局计划,若该对象与另一对象出现相互引用的情况,则不需要等待对方的完整全局计划生成,基于被引用对象的临时全局计划,即可完成自身全局计划的构建。
图3为本发明实施例提供的一种对象解析方法的流程示意图,该方法可以由对象解析装置执行,其中该装置可由软件和/或硬件实现,一般可集成在计算机设备中。如图3所示,该方法包括:
步骤301、生成目标对象的对象头对应的第一计划。
示例性的,目标对象可以是数据库系统中当前待解析的对象或当前访问的对象。在分析执行语句时,如果遇到对象,就要对该对象进行解析,此时的该对象可理解为目标对象;在生成某个对象的计划过程中,发现该对象引用了另一个对象,被引用对象也需要被解析,此时的被引用对象也可以理解为目标对象。
示例性的,对象的计划一般以缓存形式存在,图4为本发明实施例提供的一种对象的计划缓存结构示意图,对象的计划缓存可称为object_info,是对象的包含了总计划npln(总计划下有对象链表object_info_lst)、对象方法的变量和方法的执行的逻辑计划(描述信息)和物理计划(描述信息)、语义分析信息和缓存项等内容的结构。
本步骤中,生成目标对象的对象头对应的第一计划,可包括解析目标对象的对象头定义,填充目标对象的计划缓存的部分逻辑计划以及登记分析信息,形成第一计划。当然,在生成第一计划时,上述操作仅作为示意性说明,还可能涉及其他操作,本发明实施例不作具体限定。
步骤302、将第一计划作为目标对象的临时全局计划,加入到全局计划缓存中。
示例性的,第一计划是目标对象的不完整的计划,欠缺了对象体计划的部分,也就是说,对象体的部分被空置处理了。可将第一计划作为临时全局计划加入到全局计划缓存中,若存在其他对象对目标对象进行引用,则不需要等待目标对象的完整计划的生成,直接基于全局计划缓存中的临时全局计划即可实现对目标对象的引用,进而完成自身的计划的生成。
步骤303、生成目标对象的对象体对应的第二计划。
示例性的,本发明实施例中对目标对象的对象体的第二计划的生成时机不做限定。例如,可以在将第一计划加入全局计划缓存中后,就生成第二计划;也可以在引用目标对象的其他对象完成相应的计划生成过程后,再生成第二计划。
本步骤中,生成目标对象的对象体对应的第二计划可包括基于第一计划对目标对象的对象体进行检查、语法解析、语义解析等,形成第二计划。当然,在生成第二计划时,上述操作仅作为示意性说明,还可能涉及其他操作,本发明实施例不作具体限定。
步骤304、将第二计划和第一计划合并成为目标对象的完整全局计划。
示例性的,可将第二计划填充到临时全局计划中,将临时全局计划中缺失的部分补充完整,从而得到完整全局计划。可以基于第一计划和第二计划构造完整的逻辑计划,逻辑计划生成完毕后,再生成物理计划,最终得到完整的计划缓存。
本发明实施例中提供的对象解析方案,生成目标对象的对象头对应的第一计划,将第一计划作为所述目标对象的临时全局计划,加入到全局计划缓存中,生成目标对象的对象体对应的第二计划,在全局计划缓存中将第二计划和第一计划合并成为目标对象的完整全局计划。通过采用上述技术方案,将目标对象的计划生成过程进行分离,先只生成目标对象的对象头的计划,该计划可作为临时的全局计划被使用,之后再生成目标对象的对象体的计划,得到完整的全局计划,若另一对象对目标对象进行引用,而目标对象又同时引用该另一对象时,则不需要等待对方的完整全局计划生成,基于被引用对象的临时全局计划,即可完成自身全局计划的构建,从而可以适用于对象间相互引用情况的对象解析。
针对上述场景一,通过采用本发明的技术方案,计划的生成步骤可以是:先将对象A视为目标对象,生成对象A的头A1的计划,并将A1的计划作为A的计划,随即将不完整的A的计划加入全局计划缓存,因为A2引用了B1,所以生成对象A的体A2的计划之前,要先生成对象的B的计划,此时再将对象B视为新的目标对象,生成对象B的头B1的计划,并将B1的计划作为B的计划,随即将不完整的B的计划加入全局计划缓存,随后,再生成A的体A2的计划,至此A1和A2的计划都成功生成,A拥有了完整的计划,最后,再生成对象B的体B2的计划,至此,B1和B2都成功生成,B拥有了完整的计划,计划生成的顺序可以简单记为A1、B1、A2和B2。可见,通过采用本发明实施例的技术方案,可以是适用于对象体中相互引用的场景。
针对上述场景二,通过采用本发明的技术方案,计划的生成步骤可以是:先将对象A视为目标对象,生成对象A的头A1的计划,但因为A1引用了对象B,所以在生成A1的计划前,要先生成对象的B的头B1的计划,此时,将对象B视为新的目标对象,生成B1的计划,并将B1的计划作为B的计划,随即将不完整的B的计划加入全局计划缓存,再生成对象A的头A1的计划,并将A1的计划作为A的计划,随即将不完整的A的计划加入全局计划缓存,随后生成对象B的体B2的计划,因为B2引用到了A1,所以要先生成A1的计划再生成B2的计划,但因为A1的已经生成,并已加入全局计划缓存中,所以A1的计划可以直接使用,生成B2的计划,得到完整的B的计划并加入全局计划缓存,最后,再生成对象的A的体A2的计划,得到完整的A的计划,并加入全局计划缓存,至此,对象A和B的完整计划已生成,计划生成顺序是B1、A1、B2和A2。可见,通过采用本发明实施例的技术方案,可以是适用于对象头和对象体中相互引用的场景。
图5为本发明实施例提供的又一种对象解析方法的流程示意图,在上述各可选实施例基础上进行优化。
示例性的,所述生成目标对象的对象头对应的第一计划,包括:若目标对象的对象头引用第一对象,则生成所述第一对象的对象头对应的第三计划,将所述第三计划作为所述第一对象的临时全局计划,加入到全局计划缓存中;基于所述全局计划缓存中的所述第一对象的临时全局计划,生成所述目标对象的对象头对应的第一计划。
进一步的,在所述生成所述第一对象的对象头对应的第三计划之后,还包括:将所述第一对象的对象体登记到所述目标对象对应的第一记录中;相应的,在所述生成所述目标对象的对象头对应的第一计划之后,还包括:根据所述第一记录生成所述第一对象的对象体对应的第四计划,将所述第四计划和所述第三计划合并成为所述第一对象的完整全局计划。
进一步的,所述生成所述目标对象的对象体对应的第二计划,包括:若所述目标对象的对象体引用第二对象,则生成所述第二对象的对象头对应的第五计划,将所述第五计划作为所述第二对象的临时全局计划,加入到全局计划缓存中;基于所述全局计划缓存中的所述第二对象的临时全局计划,生成所述目标对象的对象体对应的第二计划。
进一步的,在所述生成所述第二对象的对象头对应的第五计划之后,还包括:将所述第二对象的对象体登记到所述目标对象对应的第二记录中;相应的,在所述生成所述目标对象的对象体对应的第二计划之后,还包括:根据所述第二记录生成所述第二对象的对象体对应的第六计划,将所述第六计划和所述第五计划合并成为所述第二对象的完整全局计划。
可选的,该方法可包括:
步骤501、确定目标对象。
步骤502、判断目标对象是否引用第一对象,若是,则执行步骤503;否则,执行步骤507。
步骤503、生成第一对象的对象头对应的第三计划,将第三计划作为第一对象的临时全局计划,加入到全局计划缓存中。
示例性的,可认为第一对象处于递归状态,即对于第一对象的对象头,也可能存在引用其他对象的情况(如引用第三对象),此时,可以将第一对象视为新的目标对象,在生成第一对象的对象头对应的第三计划之前,先生成第三对象的对象头的计划,并将该计划作为第三对象的临时全局计划,加入到全局计划缓存中,以便在生成第一对象的对象头计划时进行引用。换句话说,当目标对象的对象头引用了一个新的对象时,就可以将该新的对象视为新的目标对象,并针对新的目标对象重复执行步骤502以及后续的步骤。
步骤504、将第一对象的对象体登记到目标对象对应的第一记录中。
示例性的,第一记录中可以记录目标对象的对象头所引用的被引用对象,这些被引用对象的对象头计划已生成,而对象体计划未生成,需要在后续步骤中生成这些被引用对象的对象体计划。
步骤505、基于全局计划缓存中的第一对象的临时全局计划,生成目标对象的对象头对应的第一计划。
可选的,步骤504和步骤505的顺序也可以互换,也可以并行完成。
步骤506、根据第一记录生成所述第一对象的对象体对应的第四计划,将第四计划和所述第三计划合并成为第一对象的完整全局计划,执行步骤508。
示例性的,可以查询第一记录,逐一生成第一记录中记录的各对象的对象体对应的计划。
步骤507、生成目标对象的对象头对应的第一计划。
步骤508、判断目标对象的对象体是否引用第二对象,若是,则执行步骤509;否则,执行步骤513。
步骤509、生成第二对象的对象头对应的第五计划,将第五计划作为第二对象的临时全局计划,加入到全局计划缓存中。
可选的,当目标对象的对象体引用了一个新的对象时,就可以将该新的对象视为新的目标对象,并针对新的目标对象重复执行步骤502以及后续的步骤。
步骤510、将第二对象的对象体登记到目标对象对应的第二记录中。
步骤511、基于全局计划缓存中的第二对象的临时全局计划,生成目标对象的对象体对应的第二计划。
可选的,步骤510和步骤511的顺序也可以互换,也可以并行完成。
步骤512、根据第二记录生成第二对象的对象体对应的第六计划,将第六计划和第五计划合并成为第二对象的完整全局计划。
步骤513、生成目标对象的对象体对应的第二计划。
步骤514、将第二计划和第一计划合并成为目标对象的完整全局计划。
本发明实施例提供的对象解析方法,在将目标对象的计划生成过程进行分离的基础上,还充分考虑了目标对象的对象头或对象体引用其他对象的情况,将被引用对象的计划生成过程也分为对象头计划的生成和对象体计划的生成,在生成对象头计划之后,可以将对应的对象体进行登记,在后续步骤中再生成对应的对象体的计划,可以更好地适用于对象间相互引用情况的对象解析。
为了便于理解,下面结合附图进行进一步说明,图6为本发明实施例提供的另一种对象引用示意图,为了准确区分当前对象(目标对象)和被引用对象。在上述图中,把正在处理过程中的当前对象的头和体都加上前缀X。如果X头未引用其他对象,则直接生成X头的计划。如果X头引用了其他对象,则X头的计划生成流程:先生成头引用对象的头计划,再生成X头的计划,同时将头引用对象体登记下来,最后生成头的引用对象体的计划。如果X体未引用其他对象,则直接生成X体的计划。如果X体引用了其他对象,则X体的计划生成流程:先生成被引用对象的头计划,再生成X体的计划,将被引用对象体登记下来,最后生成被引用对象的体的计划。头和体生成计划的顺序:1->2->3->4->5->6。
在上述实施例基础上,在所述将所述第六计划和所述第五计划合并成为所述第二对象的完整全局计划之后,还可包括:将所述第一对象和所述第二对象的完整全局计划登记到所述目标对象的完整全局计划中的总计划的对象计划链表中。这样设置的好处在于,完善目标对象的完整全局计划中的总计划的对象计划链表npln->object_info_lst。
在上述实施例基础上,若在生成第四计划时,所述第一对象的对象体引用所述目标对象,则基于所述全局计划缓存中的所述第一计划,生成所述第四计划;若在生成第六计划时,所述第二对象的对象体引用所述目标对象,则基于所述全局计划缓存中的所述目标对象的完整全局计划,生成所述第六计划。这样设置的好处在于,可以更好地适用于对象间相互引用情况的对象解析。
在本发明实施例中,完全解析是获取对象完整的逻辑描述和物理描述,最终生成的描述整合在计划缓存结构object_info中,并且会将该结构缓存到系统全局计划缓存中。部分解析是只对对象头进行解析的逻辑,生成不完整的计划,部分解析只需要编译获取对象头信息且加入缓存,而完全解析会获取完整计划且会进行object_info的缓存。对对象内成员进行访问时,需要对访问对象和引用的对象都进行完全解析。分析执行语句时,如果遇到对象,要获取对象的计划。在执行时,对象的计划缓存object_info是先加到全局缓存后再进行构建的。对于相互引用的对象,在解析对象时必定会形成环。当最终形成计划需要再次得到自己的计划缓存描述时,从全局缓存中得到当前正在分析的对象的描述object_info后直接返回,不会形成循环调用。
示例性的,获取引用对象和被引用对象的object_info都按以下步骤进行:
第一步、分析对象头,初步生成不完整的计划object_info,此时的object_info上只登记对象头的临时语法语义分析信息,具体的:
(1)生成分析结构pha的子层分析结构pha_tmp1用来解析当前访问对象。
图7为本发明实施例提供的一种对象的缓存结构的分析结构和对象登记流程示意图。根据对象头的定义语法解析获取模式,预生成object_info,会预生成逻辑计划的总体信息、物理计划的总体信息、缓存项信息记到object_info上,且总计划中登记当前object_info,总计划只是用来存放object_info。
(2)预先将对象的计划添加到分析结构pha的子层分析结构pha_tmp1->object_info_lst。
(3)解析对象头定义,填充对象的object_info的部分逻辑计划,object_info上登记分析信息。
解析对象头定义的过程中,由于先引用的对象要先加到全局缓存中。例如对象A引用了对象B,那么B头(对象B的对象头)要先解析,先生成B头的计划并加入全局缓存,再来解析A头(对象A的对象头),生成A头的计划并加入全局缓存,同时登记B体(对象B的对象体),只要对象头中引用到了其它的新对象n,那么就对新对象n遵循第一步到第四步,最终将对象n的pha_tmpn和它的object_info登记到pha_tmp n-1->unusable_object_info_lst(也即对象n-1对应的第一记录)。
第二步、将预生成访问对象的object_info(含不完整的逻辑计划)加到全局缓存。
第三步、分析对象体。
图8为本发明实施例提供的一种对象体类型示意图,对象体有4种类型,一是头的引用对象的体1,二是引用对象的体2,三是体的引用对象的体3,四是既不是引用对象,也不是被引用对象的体4。
a.解析对象体前,递归解析对象头时pha_tmp1中登记的对象体。未解析的对象体都登记在unusable_object_info_lst中(其他情况下,解析过的对象体都登记在object_info_lst)。unusable_object_info_lst中会登记头引用的对象的体,例如被引用对象体1。如果该头引用的对象体没有引用其他对象,例如X体4,那么该头引用的对象体就需要完全解析。即解析对象体后生成物理计划。根据对象头分析信息对对象体进行检查、语法解析、语义解析并构造完整的逻辑计划。逻辑计划生成好后,再生成物理计划。然后执行b 2)步骤。如果该头引用的对象体又引用了别的对象体。例如x体2。然后执行b 1)。
b.解析对象体。例如对象体2或4,根据对象体的类型的不同,执行不同的操作。
1)如果分析的对象体是引用对象,例如引用对象2,那么需要先分析被引用对象。只要对象体中引用到了其它的新对象n(可以理解的是,这里的n与第一步中的n可以不同),那么就对新对象n遵循第一步到第四步,最终将对象的object_info和pha_tmpn登记到pha_tmpn-1->unusable_object_info_lst(也即对象n-1对应的第二记录),例如体3。当被引用对象的头计划已经生成,并加入到了全局缓存后,对引用对象体进行完全解析。然后执行c步骤。
2)如果分析的对象体不是引用对象,也没有被引用,例如当前对象体4,那么就需要完全解析,即解析对象体后生成物理计划。对对象体进行检查、语法解析、语义解析并构造完整的逻辑计划,逻辑计划生成好后,再生成物理计划。然后执行e步骤。
c.解析对象体后,递归解析对象体pha_tmp1中刚新登记的unusable_object_info_lst。例如新登记了体3。
这里对于类似场景一和场景二中相互引用的对象A和对象B,在解析A对象->B对象->A对象时必定会形成环。当最终形成环需要再次得到A的描述时,A的object_info还没生成完(A对象体的还没有生成),可以从全局缓存中得到A的object_info(第一步中生成的,也即A的临时全局计划)后,且将A的对象体加到pha_tmp2->unusable_object_info_lst直接返回,不会形成循环调用。
d.全部解析生成物理计划之后,还要将引用到的其它临时登记的object_info访问链表pha_tmpn->object_info_lst登记到被引用对象的总计划中的对象链表npln->object_info_lst中。例如,解析B时,pha_tmp2->object_info_lst中的A加到B的计划中,B的计划生成;解析A时,pha_tmp1->object_info_lst中的B加到A的计划中,A的计划生成。
e.完全解析完成后,pha_tmpn释放。
第四步,访问对象解析完登记到最上层pha->object_info_lst。完整的计划object_info已经生成且都加到全局缓存中。
A和B的计划全部生成,而且各自的object_info都是完整的。
为了更具体的说明,下面结合具体例子进行说明,图9为本发明实施例提供的再一种对象引用示意图,该图中示出了object01和object02之间的引用关系:
第一次执行语句select object01.f1(3)时,第一次解析到object01
第一步.{
用pha_tmp1解析,预生成object01的object_info。
登记下object01的字典信息。
根据对象头的定义语法语义解析object01的对象头,将object01的对象头的分析信息记到object_info上。
}
第二步.object01对象的object_info加到全局缓存。
第三步.由于object01的上一层pha_tmp1没有登记对象体,又因为对象头不处于递归解析状态,所以可以继续构造完整信息。故解析object01对象体,解析过程中引用到object02,因此要先解析object02,重复上述{}内的过程,{}中只会对object02的对象头进行解析并生成计划,不会继续对object02对象体进行解析。只要登记object02的object_info和pha_tmp2到pha_tmp1上。
object02加到pha_tmp1->object_info_lst.
object01的对象体完全解析完毕后,递归解析对象体时pha_tmp1中新登记的object_info_lst:object02。
解析object02对象体的过程中,也会将引用到的其它object_info(object01)临时登记到总计划中的对象链表中(执行时有用)又引用了object01,已有object01的object_info缓存,可以直接使用。只用加到pha_tmp2->object_info_lst。
object02完成逻辑计划和物理计划后,pha_tmp2->object_info_lst中的object01加到object02的计划中。object02的计划生成。
object01完成逻辑计划。
object01再生成物理计划。
pha_tmp1->object_info_lst中的object02加到object01的计划中。
这样object01和object02的计划全部生成。object01的计划中有object02,object02的计划中又有object01。
具体实现如下:
图10为本发明实施例提供的一种对象解析装置的结构框图,该装置可由软件和/或硬件实现,一般可集成在计算机设备中,可通过执行对象解析方法来进行对象解析。如图10所示,该装置包括:
第一计划生成模块1001,用于生成目标对象的对象头对应的第一计划;
第一缓存加入模块1002,用于将所述第一计划作为所述目标对象的临时全局计划,加入到全局计划缓存中;
第二计划生成模块1003,用于生成所述目标对象的对象体对应的第二计划;
第二缓存加入模块1004,用于将所述第二计划和所述第一计划合并成为所述目标对象的完整全局计划。
本发明实施例中提供的对象解析装置,生成目标对象的对象头对应的第一计划,将第一计划作为所述目标对象的临时全局计划,加入到全局计划缓存中,生成目标对象的对象体对应的第二计划,在全局计划缓存中将第二计划和第一计划合并成为目标对象的完整全局计划。通过采用上述技术方案,将目标对象的计划生成过程进行分离,先只生成目标对象的对象头的计划,该计划可作为临时的全局计划被使用,之后再生成目标对象的对象体的计划,得到完整的全局计划,若另一对象对目标对象进行引用,而目标对象又同时引用该另一对象时,则不需要等待对方的完整全局计划生成,基于被引用对象的临时全局计划,即可完成自身全局计划的构建,从而可以适用于对象间相互引用情况的对象解析。
可选的,所述生成目标对象的对象头对应的第一计划,包括:
若目标对象的对象头引用第一对象,则生成所述第一对象的对象头对应的第三计划,将所述第三计划作为所述第一对象的临时全局计划,加入到全局计划缓存中;
基于所述全局计划缓存中的所述第一对象的临时全局计划,生成所述目标对象的对象头对应的第一计划。
可选的,该装置还包括:
第一登记模块,用于在所述生成所述第一对象的对象头对应的第三计划之后,将所述第一对象的对象体登记到所述目标对象对应的第一记录中;
第三计划生成模块,用于在所述生成所述目标对象的对象头对应的第一计划之后,根据所述第一记录生成所述第一对象的对象体对应的第四计划,将所述第四计划和所述第三计划合并成为所述第一对象的完整全局计划。
可选的,所述生成所述目标对象的对象体对应的第二计划,包括:
若所述目标对象的对象体引用第二对象,则生成所述第二对象的对象头对应的第五计划,将所述第五计划作为所述第二对象的临时全局计划,加入到全局计划缓存中;
基于所述全局计划缓存中的所述第二对象的临时全局计划,生成所述目标对象的对象体对应的第二计划。
可选的,该装置还包括:
第二登记模块,用于在所述生成所述第二对象的对象头对应的第五计划之后,将所述第二对象的对象体登记到所述目标对象对应的第二记录中;
第四计划生成模块,用于在所述生成所述目标对象的对象体对应的第二计划之后,根据所述第二记录生成所述第二对象的对象体对应的第六计划,将所述第六计划和所述第五计划合并成为所述第二对象的完整全局计划。
可选的,该装置还包括:
第三登记模块,用于在所述将所述第六计划和所述第五计划合并成为所述第二对象的完整全局计划之后,将所述第一对象和所述第二对象的完整全局计划登记到所述目标对象的完整全局计划中的总计划的对象计划链表中。
可选的,该装置还包括:若在生成第四计划时,所述第一对象的对象体引用所述目标对象,则基于所述全局计划缓存中的所述第一计划,生成所述第四计划;若在生成第六计划时,所述第二对象的对象体引用所述目标对象,则基于所述全局计划缓存中的所述目标对象的完整全局计划,生成所述第六计划。
本发明实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行对象解析方法,该方法包括:
生成目标对象的对象头对应的第一计划;
将所述第一计划作为所述目标对象的临时全局计划,加入到全局计划缓存中;
生成所述目标对象的对象体对应的第二计划;
将所述第二计划和所述第一计划合并成为所述目标对象的完整全局计划。
存储介质——任何的各种类型的存储器设备或存储设备。术语“存储介质”旨在包括:安装介质,例如CD-ROM、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如DRAM、DDRRAM、SRAM、EDORAM,兰巴斯(Rambus)RAM等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等。存储介质可以还包括其它类型的存储器或其组合。另外,存储介质可以位于程序在其中被执行的第一计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到第一计算机系统。第二计算机系统可以提供程序指令给第一计算机用于执行。术语“存储介质”可以包括可以驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的对象解析操作,还可以执行本发明任意实施例所提供的对象解析方法中的相关操作。
本发明实施例提供了一种计算机设备,该计算机设备中可集成本发明实施例提供的对象解析装置。图11为本发明实施例提供的一种计算机设备的结构框图。计算机设备1100可以包括:存储器1101,处理器1102及存储在存储器1101上并可在处理器运行的计算机程序,所述处理器1102执行所述计算机程序时实现如本发明实施例所述的对象解析方法。
本发明实施例提供的计算机设备,将目标对象的计划生成过程进行分离,先只生成目标对象的对象头的计划,该计划可作为临时的全局计划被使用,之后再生成目标对象的对象体的计划,得到完整的全局计划,若另一对象对目标对象进行引用,而目标对象又同时引用该另一对象时,则不需要等待对方的完整全局计划生成,基于被引用对象的临时全局计划,即可完成自身全局计划的构建,从而可以适用于对象间相互引用情况的对象解析。
上述实施例中提供的对象解析装置、存储介质以及计算机设备可执行本发明任意实施例所提供的对象解析方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的对象解析方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (8)
1.一种对象解析方法,其特征在于,包括:
生成目标对象的对象头对应的第一计划;
将所述第一计划作为所述目标对象的临时全局计划,加入到全局计划缓存中;
生成所述目标对象的对象体对应的第二计划;
将所述第二计划和所述第一计划合并成为所述目标对象的完整全局计划;
其中,所述生成目标对象的对象头对应的第一计划,包括:
若目标对象的对象头引用第一对象,则生成所述第一对象的对象头对应的第三计划,将所述第三计划作为所述第一对象的临时全局计划,加入到全局计划缓存中;
基于所述全局计划缓存中的所述第一对象的临时全局计划,生成所述目标对象的对象头对应的第一计划;
其中,在所述生成所述第一对象的对象头对应的第三计划之后,还包括:
将所述第一对象的对象体登记到所述目标对象对应的第一记录中;
相应的,在所述生成所述目标对象的对象头对应的第一计划之后,还包括:
根据所述第一记录生成所述第一对象的对象体对应的第四计划,将所述第四计划和所述第三计划合并成为所述第一对象的完整全局计划;
其中,若在生成第四计划时,所述第一对象的对象体引用所述目标对象,则基于所述全局计划缓存中的所述第一计划,生成所述第四计划。
2.根据权利要求1所述的方法,其特征在于,所述生成所述目标对象的对象体对应的第二计划,包括:
若所述目标对象的对象体引用第二对象,则生成所述第二对象的对象头对应的第五计划,将所述第五计划作为所述第二对象的临时全局计划,加入到全局计划缓存中;
基于所述全局计划缓存中的所述第二对象的临时全局计划,生成所述目标对象的对象体对应的第二计划。
3.根据权利要求2所述的方法,其特征在于,在所述生成所述第二对象的对象头对应的第五计划之后,还包括:
将所述第二对象的对象体登记到所述目标对象对应的第二记录中;
相应的,在所述生成所述目标对象的对象体对应的第二计划之后,还包括:
根据所述第二记录生成所述第二对象的对象体对应的第六计划,将所述第六计划和所述第五计划合并成为所述第二对象的完整全局计划。
4.根据权利要求3所述的方法,其特征在于,在所述将所述第六计划和所述第五计划合并成为所述第二对象的完整全局计划之后,还包括:
将所述第一对象和所述第二对象的完整全局计划登记到所述目标对象的完整全局计划中的总计划的对象计划链表中。
5.根据权利要求4所述的方法,其特征在于,
若在生成第六计划时,所述第二对象的对象体引用所述目标对象,则基于所述全局计划缓存中的所述目标对象的完整全局计划,生成所述第六计划。
6.一种对象解析装置,其特征在于,包括:
第一计划生成模块,用于生成目标对象的对象头对应的第一计划;
第一缓存加入模块,用于将所述第一计划作为所述目标对象的临时全局计划,加入到全局计划缓存中;
第二计划生成模块,用于生成所述目标对象的对象体对应的第二计划;
第二缓存加入模块,用于将所述第二计划和所述第一计划合并成为所述目标对象的完整全局计划;
其中,所述生成目标对象的对象头对应的第一计划,包括:
若目标对象的对象头引用第一对象,则生成所述第一对象的对象头对应的第三计划,将所述第三计划作为所述第一对象的临时全局计划,加入到全局计划缓存中;
基于所述全局计划缓存中的所述第一对象的临时全局计划,生成所述目标对象的对象头对应的第一计划;
其中,该装置还包括:
第一登记模块,用于在所述生成所述第一对象的对象头对应的第三计划之后,将所述第一对象的对象体登记到所述目标对象对应的第一记录中;
第三计划生成模块,用于在所述生成所述目标对象的对象头对应的第一计划之后,根据所述第一记录生成所述第一对象的对象体对应的第四计划,将所述第四计划和所述第三计划合并成为所述第一对象的完整全局计划;其中,若在生成第四计划时,所述第一对象的对象体引用所述目标对象,则基于所述全局计划缓存中的所述第一计划,生成所述第四计划。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5任一项所述的方法。
8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911061670.3A CN110765159B (zh) | 2019-11-01 | 2019-11-01 | 对象解析方法、装置、存储介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911061670.3A CN110765159B (zh) | 2019-11-01 | 2019-11-01 | 对象解析方法、装置、存储介质及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110765159A CN110765159A (zh) | 2020-02-07 |
CN110765159B true CN110765159B (zh) | 2022-08-12 |
Family
ID=69335918
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911061670.3A Active CN110765159B (zh) | 2019-11-01 | 2019-11-01 | 对象解析方法、装置、存储介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110765159B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1856783A (zh) * | 2002-07-26 | 2006-11-01 | 罗恩·埃弗里特 | 使用参考与一般数据项关联的数据管理结构 |
CN101082932A (zh) * | 2006-06-01 | 2007-12-05 | 国际商业机器公司 | 管理信息技术系统的方法和系统 |
CN101183418A (zh) * | 2007-12-25 | 2008-05-21 | 北京大学 | 一种Windows隐蔽性恶意软件检测方法 |
CN101441561A (zh) * | 2007-11-23 | 2009-05-27 | 国际商业机器公司 | 基于上下文模型生成面向服务架构的策略的方法和装置 |
CN102763422A (zh) * | 2010-02-23 | 2012-10-31 | 微软公司 | 用于无设备的增强的现实与交互的投影仪和深度相机 |
CN102799660A (zh) * | 2012-07-04 | 2012-11-28 | 北京中电华大电子设计有限责任公司 | 一种java卡对象管理方法 |
JP5157364B2 (ja) * | 2007-10-23 | 2013-03-06 | セイコーエプソン株式会社 | 接合対象物のアライメント方法、これを用いた部品接合方法および部品接合装置 |
CN105474166A (zh) * | 2013-03-15 | 2016-04-06 | 先进元素科技公司 | 用于有目的计算的方法和系统 |
CN110083617A (zh) * | 2019-05-05 | 2019-08-02 | 上海达梦数据库有限公司 | 一种ddl语句的处理方法、装置、电子设备和介质 |
-
2019
- 2019-11-01 CN CN201911061670.3A patent/CN110765159B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1856783A (zh) * | 2002-07-26 | 2006-11-01 | 罗恩·埃弗里特 | 使用参考与一般数据项关联的数据管理结构 |
CN101082932A (zh) * | 2006-06-01 | 2007-12-05 | 国际商业机器公司 | 管理信息技术系统的方法和系统 |
JP5157364B2 (ja) * | 2007-10-23 | 2013-03-06 | セイコーエプソン株式会社 | 接合対象物のアライメント方法、これを用いた部品接合方法および部品接合装置 |
CN101441561A (zh) * | 2007-11-23 | 2009-05-27 | 国际商业机器公司 | 基于上下文模型生成面向服务架构的策略的方法和装置 |
CN101183418A (zh) * | 2007-12-25 | 2008-05-21 | 北京大学 | 一种Windows隐蔽性恶意软件检测方法 |
CN102763422A (zh) * | 2010-02-23 | 2012-10-31 | 微软公司 | 用于无设备的增强的现实与交互的投影仪和深度相机 |
CN102799660A (zh) * | 2012-07-04 | 2012-11-28 | 北京中电华大电子设计有限责任公司 | 一种java卡对象管理方法 |
CN105474166A (zh) * | 2013-03-15 | 2016-04-06 | 先进元素科技公司 | 用于有目的计算的方法和系统 |
CN110083617A (zh) * | 2019-05-05 | 2019-08-02 | 上海达梦数据库有限公司 | 一种ddl语句的处理方法、装置、电子设备和介质 |
Non-Patent Citations (1)
Title |
---|
基于Windows7的木马可生存性关键技术的研究与实现;蔡永建;《中国优秀硕士学位论文全文数据库 信息科技辑》;20111215;I138-38 * |
Also Published As
Publication number | Publication date |
---|---|
CN110765159A (zh) | 2020-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Basu et al. | Rigorous component-based system design using the BIP framework | |
US9177021B2 (en) | Relational query planning for non-relational data sources | |
CN102981947B (zh) | 一种测试中准备数据的方法及系统 | |
US20060248515A1 (en) | Sound transaction-based reduction without cycle detection | |
CN106611044B (zh) | 一种sql优化方法及设备 | |
CN107704511B (zh) | 一种sql优化方法及设备 | |
JP2018505506A (ja) | 機械ベースの命令編集 | |
CN114547208B (zh) | 用于全链路追踪事务的方法及原生分布式数据库 | |
JP2003233499A (ja) | 複数の意味レベルによるアスペクト指向プログラミングのための方法 | |
CN110765159B (zh) | 对象解析方法、装置、存储介质及设备 | |
CN111723249A (zh) | 一种实现数据处理的方法、装置、计算机存储介质及终端 | |
US20160306856A1 (en) | Lockless open collection data structure | |
Meyer et al. | Weak conformance between process models and synchronized object life cycles | |
CN112789602A (zh) | 软件故障的反向调试 | |
US20170235795A1 (en) | System and method for recursively iterating over a loosely associated data structure | |
Kahlon et al. | Semantic reduction of thread interleavings in concurrent programs | |
US8607204B2 (en) | Method of analyzing single thread access of variable in multi-threaded program | |
Lahav | Verification under causally consistent shared memory | |
Schink | sql-schema-comparer: Support of multi-language refactoring with relational databases | |
CN116302919A (zh) | 一种多语言可扩展的代码依赖解析模型及解析方法 | |
US11636113B2 (en) | Method for performing multi-caching on data sources of same type and different types by using cluster-based processing system and device using the same | |
CN112907198B (zh) | 业务状态流转维护方法、装置及电子设备 | |
Jackson et al. | Toward a generic and extensible merge operator | |
CN118550546B (zh) | 一种Python项目依赖冲突检测和解决方法及装置 | |
Durisic et al. | Co-Evolution of Meta-Modeling Syntax and Informal Semantics in Domain-Specific Modeling Environments—A Case Study of AUTOSAR |
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 |