Added compatibility operators for PostgreSQL as resource script (thanks to Ries van...
authorXavier Perseguers <typo3@perseguers.ch>
Wed, 28 Oct 2009 13:26:30 +0000 (13:26 +0000)
committerXavier Perseguers <typo3@perseguers.ch>
Wed, 28 Oct 2009 13:26:30 +0000 (13:26 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Extensions/dbal/trunk@25943 735d13b6-9817-0410-8766-e36946ffe9aa

typo3/sysext/dbal/ChangeLog
typo3/sysext/dbal/ext_conf_template.txt [new file with mode: 0644]
typo3/sysext/dbal/lib/class.tx_dbal_tsparserext.php [new file with mode: 0644]
typo3/sysext/dbal/res/README [new file with mode: 0644]
typo3/sysext/dbal/res/postgresql/postgresql-compatibility.sql [new file with mode: 0644]

index e31f78f..670d06f 100644 (file)
@@ -1,3 +1,8 @@
+2009-10-28  Xavier Perseguers  <typo3@perseguers.ch>
+
+       * Added compatibility operators for PostgreSQL as resource script (thanks to Ries van Twisk)
+       * Added message in Enterprise Manager to let users know compatibility scripts may need to be run
+
 2009-10-27  Xavier Perseguers  <typo3@perseguers.ch>
 
        * Follow-up of changeset 25876: Using tx_dbal_sqlengine instead of t3lib_sqlengine for sample handlers
diff --git a/typo3/sysext/dbal/ext_conf_template.txt b/typo3/sysext/dbal/ext_conf_template.txt
new file mode 100644 (file)
index 0000000..1403261
--- /dev/null
@@ -0,0 +1,3 @@
+  # cat=basic; type=user[EXT:dbal/lib/class.tx_dbal_tsparserext.php:tx_dbal_tsparserext->displayMessage];
+Compatibility=
+
diff --git a/typo3/sysext/dbal/lib/class.tx_dbal_tsparserext.php b/typo3/sysext/dbal/lib/class.tx_dbal_tsparserext.php
new file mode 100644 (file)
index 0000000..eafa103
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Xavier Perseguers <typo3@perseguers.ch>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*  A copy is found in the textfile GPL.txt and important notices to the license
+*  from the author is found in LICENSE.txt distributed with these scripts.
+*
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+
+/**
+ * Class that renders fields for the Extension Manager configuration.
+ *
+ * $Id$
+ * @author Xavier Perseguers <typo3@perseguers.ch>
+ *
+ * @package TYPO3
+ * @subpackage dbal
+ */
+class tx_dbal_tsparserext {
+
+       /**
+        * Renders a message for EM.
+        * 
+        * @param array $params
+        * @param t3lib_tsStyleConfig $tsObj
+        * @return string
+        */
+       function displayMessage(array &$params, t3lib_tsStyleConfig $tsObj) {
+               $out = '
+                       <div>
+                               <div class="typo3-message message-information">
+                                       <div class="message-header">PostgreSQL</div>
+                                       <div class="message-body">
+                                               If you use a PostgreSQL database, make sure to run SQL scripts located in<br />
+                                               <tt>' . t3lib_extMgm::extPath('dbal') . 'res/postgresql/</tt><br />
+                                               to ensure best compatibility with TYPO3.
+                                       </div>
+                               </div>
+                       </div>
+               ';
+
+               return $out;
+       }
+
+}
+
+
+if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/dbal/lib/class.tx_dbal_tsparserext.php']) {
+       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/dbal/lib/class.tx_dbal_tsparserext.php']);
+}
+
+?>
\ No newline at end of file
diff --git a/typo3/sysext/dbal/res/README b/typo3/sysext/dbal/res/README
new file mode 100644 (file)
index 0000000..a8e9266
--- /dev/null
@@ -0,0 +1 @@
+This directory contains various resources for supported DBMS. They may be useful to solve some edge-cases not yet supported in either TYPO3 or DBAL.
diff --git a/typo3/sysext/dbal/res/postgresql/postgresql-compatibility.sql b/typo3/sysext/dbal/res/postgresql/postgresql-compatibility.sql
new file mode 100644 (file)
index 0000000..6e1605a
--- /dev/null
@@ -0,0 +1,71 @@
+-- Add Compatibility operators
+--
+-- SQL below solves a particular case where in the search option in the list module (and possible other modules)
+-- integers types are compared against text types. While this is perfectly 'valid' in MySQL, this is not valid in PostgreSQL.
+--
+-- An example of such SQL generated by TYPO3 is (see "uid" LIKE '%Old%'):
+-- SELECT count(*)                     
+-- FROM "tx_rvtcouponfeeds_programnames"                       
+-- WHERE "pid" = 100 AND ("uid" LIKE '%Old%' OR "programname" LIKE '%Old%' OR "programurl" LIKE '%Old%')
+-- 
+-- The functions add compatibility operators for PostgreSQL to make sure comparison is possible and the SQL doesn't return an error.
+--
+-- $Id$
+-- R. van Twisk <typo3@rvt.dds.nl>
+
+
+CREATE OR REPLACE FUNCTION t3compat_operator_like(t text, i integer) RETURNS boolean AS
+$BODY$
+BEGIN
+       RETURN t LIKE i;
+END
+$BODY$
+LANGUAGE 'plpgsql' VOLATILE
+COST 1;
+
+CREATE OR REPLACE FUNCTION t3compat_operator_like(i integer, t text) RETURNS boolean AS
+$BODY$
+BEGIN
+       RETURN i::text LIKE t;
+END
+$BODY$
+LANGUAGE 'plpgsql' VOLATILE
+COST 1;
+
+CREATE OR REPLACE FUNCTION t3compat_operator_eq(t text, i integer) RETURNS boolean AS
+$BODY$
+BEGIN
+       RETURN i::text=t;
+END
+$BODY$
+LANGUAGE 'plpgsql' VOLATILE
+COST 1;
+
+CREATE OR REPLACE FUNCTION t3compat_operator_eq(i integer, t text) RETURNS boolean AS
+$BODY$
+BEGIN
+       RETURN i::text=t;
+END
+$BODY$
+LANGUAGE 'plpgsql' VOLATILE
+COST 1;
+
+-- Operator for LIKE
+CREATE OPERATOR ~~ (PROCEDURE = t3compat_operator_like, LEFTARG = integer, RIGHTARG = text);
+CREATE OPERATOR ~~ (PROCEDURE = t3compat_operator_like, LEFTARG = text, RIGHTARG = integer);
+-- Operator for Equality
+CREATE OPERATOR = (PROCEDURE = t3compat_operator_eq, LEFTARG = integer, RIGHTARG = text);
+CREATE OPERATOR = (PROCEDURE = t3compat_operator_eq, LEFTARG = text, RIGHTARG = integer);
+
+
+-- Remove Compatibility operators
+--
+--DROP OPERATOR ~~ (integer,text);
+--DROP OPERATOR ~~ (text,integer);
+--DROP OPERATOR = (integer,text);
+--DROP OPERATOR = (text,integer);
+--DROP FUNCTION t3compat_operator_like(integer, text);
+--DROP FUNCTION t3compat_operator_like(text, integer);
+--DROP FUNCTION t3compat_operator_eq(integer, text);
+--DROP FUNCTION t3compat_operator_eq(text, integer);
+