[geeklog-devel] Fwd: MSSQL Class - SQL Coding

Randy Kolenko Randy.Kolenko at nextide.ca
Fri May 29 08:55:30 EDT 2009


In the long run:

http://www.geeklog.net/filemgmt/index.php?id=757
Write new plugins with a database abstraction layer.


Failing that, writing simple standard/portable sql should probably be sufficient for 95% of the plugins out there.

We also have the ability to do an array with the key as the db layer
$sql['mssql'] 
$sql['mysql'] to differentiate different sql statements -- so this will have to be checked in to for improvements when postgres goes into play.

-randy



> -----Original Message-----
> From: Sami Barakat [mailto:furiousdog at gmail.com] 
> Sent: May-29-09 8:51 AM
> To: Geeklog Development
> Subject: Re: [geeklog-devel] Fwd: MSSQL Class - SQL Coding
> 
> 
> Just a rather random idea that poped into my head (but will 
> probably be too hard to implement....)
> 
> If you are wanting to add support for various databases why 
> not take the same approach as support for languages. Say for 
> instance the english language file has all the strings set to 
> variable which are then used in the code. When wanting to 
> make a translation you just copy this file and start 
> translating. The core will then pick up the new language file 
> and use that. The same may be possible for sql strings. Then 
> when support is added for a new database all that needs to be 
> done is translate the file to the required syntax for that 
> database and create the database class. Is this even possible?
> 
> Geeklog is probably too far down the line to even try to 
> implement this as its a very large change not only to the 
> core but to all the plugins. But just an idea...
> 
> Sami
> 
> 2009/5/28 ȘϮⱥȵіṥʟɑ√ <yankees26an at gmail.com>:
> > Hey,
> >
> > Just of the top of my head, a nice thing to do would be to pass the 
> > sql to dbError(). If you don't, then pgSQL will have to run 
> an extra 
> > function call to sniff out the last execution query, which 
> wastes some 
> > precious cycles. Also you should preferably use timestamp 
> instead of 
> > datetime because timestamp is ansi sql, while datetime is MySQL's 
> > little invention. :P Those two things arent critical, but 
> the next one 
> > is, which has been mentioned.. Avoid any variations of REPLACE like 
> > the plague. Seriously :P It's only supported by MySQL, and while it 
> > may make MySQL queries a hair faster, it will make msssql and pgsql 
> > queries alot slower because they dont support it.
> >
> > Your best bet is to just code ANSI SQL compliant code. If 
> you've only 
> > been used to Mysql, it can be very tempting to cheat, but 
> it will pay 
> > off in the end ;) On Thu, May 28, 2009 at 4:45 PM, Dirk Haun 
> > <dirk at haun-online.de> wrote:
> >>
> >> I dug out Randy's old post (below) for Tim, who asked for 
> advice on 
> >> writing DBMS-agnostic SQL requests.
> >>
> >> Shouldn't this be on the wiki? It could serve as the basis for a 
> >> "guide on writing SQL requests", to which Stan would 
> surely want to 
> >> add a few Postgres Gotchas ...
> >>
> >> ---------------- Anfang Weiterleitung ----------------
> >> Betreff: [geeklog-devel] MSSQL Class - SQL Coding
> >> Gesendet: Donnerstag, 23. März 2006 8:53 Uhr
> >> Von: Randy Kolenko <randy at nextide.ca>
> >> An: geeklog-devel at lists.geeklog.net
> >>
> >>
> >> "GOTCHAs" within GL and plugin SQL coding:
> >>
> >> - Stray away from DB_save.  Use the appropritate Update or Insert 
> >> statements as necessary.  Although this works in the MSSQL 
> class, its 
> >> not a standard SQL call.
> >>
> >> -Avoid REPLACE INTO at all costs.  While DB_save approximates this 
> >> functionality, it only uses one primary key to match the incoming 
> >> columns and data against rather than ALL incoming primary key 
> >> columns.  Just use an update or delete + insert combination to 
> >> perform the REPLACE INTO functionality.
> >>
> >> -While very handy, LIMIT is not a standard sql statement.  
However a 
> >> statement such as :
> >>      select * from table LIMIT 1
> >> will be translated into:
> >>      selet TOP 1 * from table
> >> And will not incurr any in-code overhead to approximate the limit 
> >> command.
> >>
> >> LIMIT-ing your result sets like this:
> >>     select * from table LIMIT 100,10
> >> to pick off the 100th to 109th rows is absolutelly not 
> supported by 
> >> sql server and there is no equivalent.  While handy for 
> paging, the 
> >> LIMIT approximation for this scenario is handled in the 
> MSSQL class 
> >> code and thus may not perform as quickly on extremely LARGE result 
> >> sets.
> >>
> >> -Ensure all selected columns show up in the group by 
> clause - there 
> >> are a few instances of missing columns in group by 
> clauses.  Mysql is 
> >> a little more forgiving than SQL server is.
> >>
> >> - Note that '' (single quotes with nothing between them) does not 
> >> represent NULL in SQL server. The triggers I've implemented are to 
> >> cleanse any data that appears to be null and replace the empty 
> >> varchar data with NULL.
> >>  This
> >> way, when PHP tests empty() on a column, it returns empty properly.
> >>
> >>
> >> _______________________________________________
> >> geeklog-devel mailing list
> >> geeklog-devel at lists.geeklog.net 
> >> http://lists.geeklog.net/listinfo/geeklog-devel
> >>
> >>
> >> ----------------- Ende Weiterleitung -----------------
> >>
> >> --
> >> http://www.geeklog.net/
> >> http://geeklog.info/
> >>
> >> _______________________________________________
> >> geeklog-devel mailing list
> >> geeklog-devel at lists.geeklog.net 
> >> http://eight.pairlist.net/mailman/listinfo/geeklog-devel
> >
> >
> >
> > --
> > Warmly,
> >
> > Stanislav
> >
> >
> >
> > _______________________________________________
> > geeklog-devel mailing list
> > geeklog-devel at lists.geeklog.net 
> > http://eight.pairlist.net/mailman/listinfo/geeklog-devel
> >
> >
> _______________________________________________
> geeklog-devel mailing list
> geeklog-devel at lists.geeklog.net 
> http://eight.pairlist.net/mailman/listinfo/geeklog-devel
> 


More information about the geeklog-devel mailing list