[rt-devel] Behaviour correction for SB-0.88 (improves Oracle support)
    Brook Schofield 
    brooksch at mac.com
       
    Thu Jul 17 08:20:44 EDT 2003
    
    
  
On Thursday, July 17, 2003, at 07:35  PM, Paul Wagland wrote:
> Figured I would chime in... I can't say whether the change is correct 
> or
> not, will look into testing this next Monday... off to Frankfurt for 
> the REM
> concert in the meantime ;-)
The issue isn't whether the change is correct or not - its whether the 
SQL that is generated gives the same result set as previous 
implementations (or a result set the same as the MySQL or PostgreSQL 
implementations - which wasn't the case).
This change to the distinct code does not change the result set 
returned - but does improve the SQL generated.
This also made it easier for me to make the next change to SB-0.88 - in 
that changing the order of the building of the SQL removed the syntax 
problems with the SQL generated for Oracle.
The only issue I could see creeping up is the ($key IS NULL or $key = 
'') change - as that may not be portable between other databases. This 
is due to the differences between CLOB and VARCHAR2 in Oracle (this has 
been detailed in a previous post of mine).
> But with postgres, this statement appears to be true:
This SQL isn't generated for PostgreSQL. Only Oracle uses the nested 
SELECT DISTINCT to avoid the problem of being unable to perform a 
DISTINCT on a table with a CLOB column type.
I believe that the previous code would have generated an excessive 
amount of SELECT DISTINCT queries when they are unnecessary.
> Here is the explain texts for these. (We have 18 queues, 1 of which is
> disabled). Mind you, this probably won't make a huge difference in the
> interface... but every little bit helps I guess...
Since this improvement is present in all queries - there would be an 
improvement by not needing a DISTINCT. Remember that this change would 
only modify the SQL for PostgreSQL/MySQL from:
SELECT DISTINCT main.* FROM Queues main WHERE (main.Disabled = '0')
to:
SELECT main.* FROM Queues main WHERE (main.Disabled = '0')
which should result in very little cost saving - but a much bigger 
improvement for Oracle users. Not that there are any Oracle users (or 
at least not many - because support is not complete).
BTW:	There are many other SQL queries that were generated using an 
unnecessary DISTINCT - so there will be savings by removing this when 
it isn't necessary - especially on large datasets most useful for 
installations which have large numbers of users.
Additional Oracle support is still on the way!
-Brook
    
    
More information about the Rt-devel
mailing list