[TYPO3-core] BLOBs and Oracle ...again

Martin Kutschker Martin.Kutschker at n0spam-blackbox.net
Mon Jul 17 14:48:41 CEST 2006


Hi!

I noticed again an issue with BLOBs in Oracle.

ADOdb (and this DBAL) handles BLOBs in INSERT and UPDATES transparently (by 
using the proper PHP query flags). But there are issues when you use the 
BLOB field in the WHERE clause. You cannot do a simple "blobfield = value" 
comparison. It's usually pointless as Oracle expects Binary-LOBs to contain 
*real* binary data (eg images).

The problem can be noticed with the index search. The crawler tries to load 
the indexer configurion (in class.crawler.php, methods crawler_init and 
processDatamap_afterDatabaseOperations) but fails because the field 
alternative_source_pid is a BLOB. I think it is just another pid value and 
should therefore be an int.

This is the statement with the problem:

$indexingConfigurations = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows(
	'uid',
	'index_config',
	'hidden=0
		AND (starttime=0 OR starttime<='.time().')
		AND set_id=0
		AND type=1
		AND table2index='.
$GLOBALS['TYPO3_DB']->fullQuoteStr($table,'index_config').'
		AND (
			(alternative_source_pid ='.
$GLOBALS['TYPO3_DB']->fullQuoteStr('','index_config').
				AND pid='.intval($currentRecord['pid']).'
			)
			OR (
				alternative_source_pid='.
$GLOBALS['TYPO3_DB']->fullQuoteStr($currentRecord['pid'],'index_config').'
			)
		)
		AND records_indexonchange=1'.
		t3lib_BEfunc::deleteClause('index_config')
)

It may be possible to use a BLOB in WHERE with the proper SQL casting etc, 
but it I really think we should simply change this column definition. I see 
no reason in usung a BLOB here. *

I am for changing this column right now (4.0.x) and getting rid of all 
other BLOBs in 4.1 that contain no real binary data. **

Masi

* One part of the WHERE clause compares with ''. This has to be changed so 
that 0 takes the role of '' (no alt. pid).

** Any remaining Mysql TEXT columns should be CLOBs.



More information about the TYPO3-team-core mailing list