[hibernate-dev] Hibernate ORM SQL generation

Steve Ebersole steve at hibernate.org
Sat Aug 22 14:16:59 EDT 2015


I got that initial refactoring pushed to my fork...

On Fri, Aug 21, 2015 at 3:51 PM Steve Ebersole <steve at hibernate.org> wrote:

> Just a heads up that I started a major refactoring of the antlr4 poc
> project in preparation for starting to look at this next sql-gen step.
>
> First I am making it into a multi-module project.  We will have the
> hql-parser module, but then also an orm-sql-gen module to be able to play
> with that part.  This makes sure we are not blending orm concerns into the
> pure hql parser.
>
> Also, I started working on splitting the "semantic query" model out into a
> separate module as well.  There are a few reasons for this.  I wont go into
> them all here.  The main one being that HQL is just one producer of this
> semantic model.   Rather than another long name I went with the acronym SQM
> (Semantic Query Model) here.  The top package being org.hibernate.sqm.
>
> These changes already illustrated some tighter couplings then I had
> intended, so it was a good exercise.  I'll push once I get those couplings
> cleaned up.
>
> On Fri, Aug 21, 2015 at 2:35 PM andrea boriero <dreborier at gmail.com>
> wrote:
>
>> I haven't seen it, I'm going to read it.
>>
>> On 21 August 2015 at 16:54, Steve Ebersole <steve at hibernate.org> wrote:
>>
>>> http://www.antlr2.org/article/1170602723163/treewalkers.html
>>>
>>> Not sure if y'all have seen this.  Its an old article advocating manual
>>> tree walking (what we are facing here) over using generated tree walkers.
>>>
>>>
>>>
>>> On Wed, Aug 19, 2015 at 12:27 PM Steve Ebersole <steve at hibernate.org>
>>> wrote:
>>>
>>>> I agree.  Its my biggest hang up with regard to using Antlr 4.
>>>> Actually, its my only hang up with Antlr 4, but its a huge one.
>>>>
>>>> On Tue, Aug 18, 2015 at 9:30 AM andrea boriero <dreborier at gmail.com>
>>>> wrote:
>>>>
>>>>> yes Steve I'm more familiar with Antlr4 ( but not 3) and I gave a look
>>>>> at your poc.
>>>>>
>>>>> Apart some problems to fully understand the semantic model (due to my
>>>>> lack of a complete knowledge of the domain problem),
>>>>> I agree with you about the simplicity and elegance of  the grammar
>>>>> for HQL recognition and semantic model building.
>>>>>
>>>>> What I don't like it's the necessity to build our own semantic model
>>>>> walker/s in order to produce the final SQL.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On 14 August 2015 at 16:32, Steve Ebersole <steve at hibernate.org>
>>>>> wrote:
>>>>>
>>>>>> We've had a few discussions about this in the past.  As 5.0 is getting
>>>>>> close to Final (next week), its time to start contemplating our next
>>>>>> major
>>>>>> tasks.  The consensus pick for that has been the idea of a "unified
>>>>>> SQL
>>>>>> generation engine" along with a shared project for the semantic
>>>>>> analysis of
>>>>>> HQL/JPQL (and recently it was decided to include JPA Criteria
>>>>>> interpretation here as well).
>>>>>>
>>>>>> The central premise is this.  Take the roughly 6 or 7 different
>>>>>> top-level
>>>>>> ways Hibernate generates SQL and combine that into one "engine" based
>>>>>> on
>>>>>> the input of a "semantic tree".  The mentioned HQL/JPQL/Criteria
>>>>>> shared
>>>>>> project will be one producer of such semantic trees.  Others would
>>>>>> include
>>>>>> persisters (for insert/update/delete requests) and loaders (for load
>>>>>> requests).
>>>>>>
>>>>>> We have a lot of tasks for this overall goal still remaining.
>>>>>>
>>>>>> We still have to finalize the design for the HQL/JPQL/Criteria to
>>>>>> semantic
>>>>>> tree translator.  One option is to proceed with the Antlr 4 based
>>>>>> approach
>>>>>> I started a PoC for.  John has been helping me some lately with
>>>>>> that.  The
>>>>>> first task here is to come to a consensus whether Antlr 4 is the way
>>>>>> we
>>>>>> want to proceed here.  We've been over the pros and cons before in
>>>>>> detail.
>>>>>> In summary, there is a lot to love with Antlr 4.  Our grammar for HQL
>>>>>> recognition and semantic tree building is very simple and elegant
>>>>>> imo.  The
>>>>>> drawback is clearly the lack of tree walking, meaning that we are
>>>>>> responsible for writing by hand our walker for the semantic tree.  In
>>>>>> fact
>>>>>> multiple, since each consumer (orm, ogm, search) would need to write
>>>>>> their
>>>>>> own.  And if we decide to build another AST while walking the semantic
>>>>>> tree, we'd end up having to hand-write yet another walker for those.
>>>>>>
>>>>>> What I mean by that last part is that there are 2 ways we might
>>>>>> choose to
>>>>>> deal with the semantic tree.  For the purpose of discussion, let's
>>>>>> look at
>>>>>> the ORM case.  The first approach is to simply generate the SQL as we
>>>>>> walk
>>>>>> the semantic tree; this would be a 2 phase interpretation approach
>>>>>> (input
>>>>>> -> semantic tree -> SQL).  That works in many cases.  However it
>>>>>> breaks
>>>>>> down in other cases.  This is exactly the approach our existing HQL
>>>>>> translator uses.  The other approach is to use a 3-phase translation
>>>>>> (input
>>>>>> -> semantic-tree -> semantic-SQL-tree(s) -> SQL).  This gives a hint
>>>>>> to one
>>>>>> of the major problems.  One source "semantic" query will often
>>>>>> correspond
>>>>>> to multiple SQL queries; that is hard to manage in the 2-phase
>>>>>> approach.
>>>>>> And not to mention integrating things like follow-on fetches and other
>>>>>> enhancements we want to gain from this.  My vote is definitely for 3
>>>>>> or
>>>>>> more phases of interpretation.  The problem is that this is exactly
>>>>>> where
>>>>>> Antlr 4 sort of falls down.
>>>>>>
>>>>>> So first things first... we need to decide on Antlr 3 versus Antlr 4
>>>>>> (versus some other parser solution).
>>>>>>
>>>>>> Next, on the ORM side (every "backend" can decide this individually)
>>>>>> we
>>>>>> need to decide on the approach for semantic-tree to SQL translation,
>>>>>> which
>>>>>> somewhat depends on the Antlr 3 versus Antlr 4 decision.
>>>>>>
>>>>>> We really need to decide these things ASAP and get moving on them as
>>>>>> soon
>>>>>> as ORM 5.0 is finished.
>>>>>>
>>>>>> Also, this is a massive undertaking with huge gain potentials for not
>>>>>> just
>>>>>> ORM.  As such we need to understand who will be working on this.
>>>>>> Sanne,
>>>>>> Gunnar... I know y'all have a vested interest and a desire to work on
>>>>>> it.
>>>>>> John, I know the same is true for you.  Andrea?  Have you had a
>>>>>> chance to
>>>>>> look over the poc and/or get more familiar with Antlr?
>>>>>>
>>>>> _______________________________________________
>>>>>> hibernate-dev mailing list
>>>>>> hibernate-dev at lists.jboss.org
>>>>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>>>>>
>>>>>
>>>>>
>>


More information about the hibernate-dev mailing list