[TYPO3-english] TYPO3 4.3.0-dev with Oracle

Ries van Twisk typo3 at rvt.dds.nl
Sun May 3 01:02:48 CEST 2009


On May 2, 2009, at 5:17 PM, David Bruchmann wrote:

> ----- Ursprüngliche Nachricht -----
> Von:        Ries van Twisk <typo3 at rvt.dds.nl>
> Gesendet:   Samstag, 2. Mai 2009 23:45:44
> An:         TYPO3 English <typo3-english at lists.netfielders.de>
> CC:
> Betreff:    Re: [TYPO3-english] TYPO3 4.3.0-dev with Oracle
>
>>
>> MySQL allows this mixing of field name cases while most, of not
>> all database change the case it to all uppercase (DB2 I believe) or
>> all lowercase (PostgerSQL).
>>
>> So this query:
>>
>> SELECT MyField FROM table;
>>
>> Might return a different field name cases in your result sets.
>>
>> Even TYPO3 core is not solid and uses mixed cases, which is IMHO not
>> playing really nice.
>>
>
> Hy Ries,
>
> tt_content is a good example for camelcase-fieldnames.
> In Kickstarter I remember that all fieldnames have to be lowercase,  
> but
> perhaps I remember wrong.
>
> Im wondering that authors of dbal and adodb didn't took care on that
> case-point or did that "feature" resist due to historical reasons?

I believe that DBAL does some extensive query parsing and can connect  
to multipel DB's (quite nice).

The PDO extension I wrote was  a lot faster and made a couple of small  
assumptions, DBAL is 'smarter' but much slower. I personally
use one DB most of the times...

I had to make a mapping table for SELECT statements that maps the  
lower/uppercase version to something that is expected by the application

This mapping table is very simple and looks like this :

$fcm['be_groups']['groupmods'] = 'groupMods';
$fcm['be_groups']['locktodomain'] = 'lockToDomain';
$fcm['be_groups']['tsconfig'] = 'TSconfig';
$fcm['be_users']['realname'] = 'realName';
$fcm['be_users']['usermods'] = 'userMods';
....
...

Here you can see that for the table be_groups we have a field  
locktodomain,
from PostgreSQL this is mapped back to lockToDomain.

Out of PostgreSQL we get

$row['locktodomain']

Then we re-map it back to

$row['lockToDomain']

So you can access to value again with the module/extension/core

$value=$row['lockToDomain'];


There where also issues with quoting of integer,
in MySQL you can do this

INSERT INTO table (myIntegerField) VALUES ('23');

MySQL casts the string ('23') automagickly to a integer (it's bogus  
that MySQL accepts a string as a integer)
, you see that many extension quote strings wrong... Not sure anymore  
about core.
This quoating of strings is a problem in other DB's

For this I also wrote a field type mapper that figure out under runtime
the typo3 of a specific field.

For PostgreSQL this is implemented as (the result is cached):

         protected function getFieldTypesSQL() {
                 return 'SELECT column_name,data_type FROM  
information_schema.columns WHERE table_name=%s';
         }

Then the field type mapper takes care of quoting the field correctly,

for this fullQuoteArray(..) needed to get overwritten (using XLASS)  
and re-routed to
the correct responsible for the current DB


other problems are with SQLite that core doesn't close a resource  
after it was used,
for SQLite this is a problem...

THis was also fairly easy to be solved by tracking the number of open  
resources
and close them as soon as it needed to be released.


For my exercise I also write a migration tool that could create DB  
tables
and insert data straight into PostgreSQL PostgreSQL.
Then I could just switch my installation using a BE command and then
run under PostgreSQL.


if Xavier is interested, I am more then happy to send him my current  
work


Ries






More information about the TYPO3-english mailing list