[TYPO3-core] FYI: bitwise & is not portable SQL

Martin Kutschker Martin.Kutschker at n0spam-blackbox.net
Wed Dec 13 12:07:24 CET 2006


Martin Kutschker schrieb:
> Karsten Dambekalns schrieb:
> 
>> Hi.
>>
>> On 09.11.2006, at 09:05, Dmitry Dulepov wrote:
>>
>> As I write in that thread on the dev list I am working on fixing this 
>> in DBAL. I have not yet found a way to not use & at all in that case. 
>> If anybody has an idea, please tell me...
> 
> For this special case: [NOTE: page permission check]
> 
> Make the Core function so that the code that generates the query can 
> easily be changed in an XCLASS. Make DBAL test explicitely for Oracle an 
> run the query directly, so no SQL parsing code interferes with BITAND().

Currently ADOdb has a few helper functions for generating stuff like 
IFNULL(a,b) in a portable way, but nothing to help avoiding the Oracle 
bitwise AND problem.

I suggest to add a bitwise AND helper to t3lib_db (and possible map the 
ADOdb helpers as well).

// $a and $b must be properly escaped and quuoted by the caller!
function sql_bitand($table,$a,$b) {
   return '('.$a.' & '.$b.')';
}

DBAL simply has to check if $table is mapped to Oracle:

function sql_bitand($table,$a,$b) {
   if (is_oracle($table) {
     return 'BITAND('.$a.','.$b.')';
   } else {
     parent::sql_bitand($table,$a,$b);
   }
}

This is a bugger for Mysql, but portable DB access means we have to use 
kludges sometimes.

Masi


More information about the TYPO3-team-core mailing list