On 05/30/2012 11:47 AM, Adrian Crum wrote:
> 
> On 5/30/2012 4:30 PM, Adam Heath wrote:
>> On 05/30/2012 02:46 AM, Adrian Crum wrote:
>>> On 5/29/2012 5:49 AM, Adam Heath wrote:
>>>> On 05/25/2012 01:22 AM, Adam Heath wrote:
>>>>> On 05/25/2012 12:26 AM, Jacques Le Roux wrote:
>>>>>> From: "Jacques Le Roux"<jacques.le.r...@les7arts.com>
>>>>>>> From: "Adam Heath"<doo...@brainfood.com>
>>>>>>>> On 05/24/2012 04:05 PM, Jacques Le Roux wrote:
>>>>>>>>> From: "Adam Heath"<doo...@brainfood.com>
>>>>>>>>>> On 05/24/2012 10:18 AM, Adam Heath wrote:
>>>>>>>>>> The idea was that you would parse the sqlCondition once, in a
>>>>>>>>>> static
>>>>>>>>>> {} block somewhere, then at runtime, just build that map. This
>>>>>>>>>> builds-upon the map/list idea inherent in ofbiz.
>>>>>>>>>>
>>>>>>>>>> I also had plans that you could store sql strings into a
>>>>>>>>>> properties
>>>>>>>>>> file somewhere, so that they could possibly be changed by the
>>>>>>>>>> end-user
>>>>>>>>>> without having to recompile.
>>>>>>>>>>
>>>>>>>>>> I need to revisit the "SELECT a.partyId, b.* EXCLUDE(partyId)
>>>>>>>>>> FROM
>>>>>>>>>> Party a LEFT JOIN PartyContactMech b USING (partyId)", now
>>>>>>>>>> that ofbiz
>>>>>>>>>> better supports conditions on the join clauses, esp. when
>>>>>>>>>> combining
>>>>>>>>>> views into other views.
>>>>>>>>> Thanks for the explanation,
>>>>>>>>>
>>>>>>>>> So should we not rather create a Jira with all the needed in a
>>>>>>>>> patch
>>>>>>>>> until this is finished?
>>>>>>>>> Or maybe a branch would be easier?
>>>>>>>>>
>>>>>>>>> Still with the slim-down idea in mind and as objective.
>>>>>>>> I like the slimdown, but tbh, I would like to see the
>>>>>>>> framework/sql
>>>>>>>> stuff used more than it is(0 right now). Andrew Zeneski was an
>>>>>>>> original requestor for something that parsed sql into
>>>>>>>> EntityCondition. I took his suggestion, but went further, to
>>>>>>>> allow
>>>>>>>> CREATE VIEW AS SELECT to work.
>>>>>>>>
>>>>>>>> I've noticed that there aren't that many view definitions in
>>>>>>>> ofbiz.
>>>>>>>> As I've been deprecating all this code recently, I've noticed
>>>>>>>> java
>>>>>>>> code doing nested loop kinda-stuff, instead of just doing a
>>>>>>>> view. I'm
>>>>>>>> guessing because view-xml is verbose and not how people actually
>>>>>>>> think.
>>>>>>>>
>>>>>>>> However, with what I committed, you can define the view using
>>>>>>>> a SQL
>>>>>>>> syntax, which is then backed by a DynamicViewEntity.
>>>>>>>>
>>>>>>>> I've seen rather impressive speedups just rewriting code to a
>>>>>>>> single
>>>>>>>> SQL query, instead of java loops; the database can be rather
>>>>>>>> efficient. So making view writing simpler is a laudable goal.
>>>>>>> Great, but still, why not a branch as long as it's not finished?
>>>>>>>
>>>>>>> Also something which I think is pretty neat in the principle (I
>>>>>>> still
>>>>>>> did not review the code) and would speed up views:
>>>>>>> https://issues.apache.org/jira/browse/OFBIZ-4041
>>>>>>>
>>>>>>> Jacques
>>>>>> BTW another stuff that could be part of this branch
>>>>>> https://issues.apache.org/jira/browse/OFBIZ-3575
>>>>> Ok, I suppose. This weekend I'll create such a branch to
>>>>> fix/improve the view system. This will also attempt to fix the
>>>>> reverse
>>>>> cache clearing issues.
>>>> branches/improved-entityengine-features-20120528
>>>>
>>>> Also see 1343540, which adds a README that has some things that we
>>>> might want to implement in the branch.
>>> Adam,
>>>
>>> I commented on the commit, but you didn't reply, so I will try again
>>> in this thread.
>> I saw, but didn't really think it needed a comment.  I guess I should
>> have given an affirmative response, instead of no response.  I assumed
>> that no response is not negative(yeah, that's a double negative).
>>
>>> If you don't mind, I would like to clean up the EntityConditionVisitor
>>> interface so it looks more like a conventional visitor pattern.
>> I'm down to whatever other people for, within reason.  Tbh, I'm
>> currently tweaking EntityFieldValue, which is used by
>> ModelViewEntity.ViewEntityCondition, in a hackish way; it means I'm
>> having to tweak the visitor pattern, which sucks.
>>
>> I'm the one who added the visitor pattern all those ages ago(goes back
>> to svn.ofbiz.org timeframe); I'd be fine with ripping it completely
>> out, as we(brainfood) don't use it anywhere.
> 
> I need to reacquaint myself with the entity engine code. I was
> thinking the visitor pattern could be used to construct the SQL string
> instead of the complicated if-then-else code spread across a number of
> classes. We could use different visitors for different databases.

Yes, that was my original thought.  However, I don't think it's that
simple anymore.  I've got a much better understanding of the entity
system since I wrote the visitor stuff.

I'd actually like to see my generic sql code be used to represent
entitymodel, then add sql<->sql conversion code.  I have an xslt that
can read *all* entitymodel.xml and convert it to entitymodel.sql, or
entitymodel.java.  I used the former to verify that my sql parsing was
featureful enough.

> From my perspective, the entity engine implementation seems a bit
> tangled, and I was trying to come up with a strategy to simplify things.

It's not too bad, imho; just has some issues with view abstraction
that can't be currently represented.  It's getting much closer to not
having to do raw sql anymore thru jdbc.

>>> Also, I was wondering if we could add some timing metrics to the
>>> entity engine. Maybe keep an average query time per entity, and throw
>>> an exception when the average exceeds a configurable threshold. This
>>> would facilitate server overload management.
>> There is already code that does that, when a query takes a long time.
> 
> I don't see any code that does that.

I've seen lines in the log file where queries take too long.
GenericDAO.selectListIteratorByCondition() has an example for that,
but it's not done in select().

Reply via email to