2 rcs_id('$Id: PearDB_oci8.php,v 1.12 2006-12-22 00:27:37 rurban Exp $');
5 * Oracle extensions for the Pear DB backend.
6 * @author: Philippe.Vanhaesendonck@topgame.be
9 require_once('lib/WikiDB/backend/PearDB_pgsql.php');
11 class WikiDB_backend_PearDB_oci8
12 extends WikiDB_backend_PearDB_pgsql
17 function WikiDB_backend_PearDB_oci8($dbparams) {
18 // Backend constructor
19 $this->WikiDB_backend_PearDB($dbparams);
21 // Empty strings are NULLS
22 $this->_expressions['notempty'] = "IS NOT NULL";
23 $this->_expressions['iscontent'] = "DECODE(DBMS_LOB.GETLENGTH(content), NULL, 0, 0, 0, 1)";
27 // - No persistent conections (I don't like them)
28 $dbh->setOption('persistent', false);
29 // - Set lowercase compatibility option
30 // - Set numrows as well -- sure why this is needed, but some queries
31 // are triggering DB_ERROR_NOT_CAPABLE
32 $dbh->setOption('portability',
33 DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_NULL_TO_EMPTY | DB_PORTABILITY_NUMROWS);
39 // Do nothing here -- Leave that for the DBA
40 // Cost Based Optimizer tuning vary from version to version
45 * Lock all tables we might use.
47 function _lock_tables($write_lock=true) {
50 // Not sure if we really need to lock tables here, the Oracle row
51 // locking mechanism should be more than enough
52 // For the time being, lets stay on the safe side and lock...
54 // Next line is default behaviour, so just skip it
55 // $dbh->query("SET TRANSACTION READ WRITE");
56 foreach ($this->_table_names as $table) {
57 $dbh->query("LOCK TABLE $table IN EXCLUSIVE MODE");
60 // Just ensure read consistency
61 $dbh->query("SET TRANSACTION READ ONLY");
66 return base64_encode($s);
69 function _unquote($s) {
70 return base64_decode($s);
75 class WikiDB_backend_PearDB_oci8_search
76 extends WikiDB_backend_PearDB_search
78 // If we want case insensitive search, one need to create a Context
79 // Index on the CLOB. While it is very efficient, it requires the
80 // Intermedia Text option, so let's stick to the 'simple' thing
81 // Note that this does only an exact fulltext search, not using MATCH or LIKE.
82 function _fulltext_match_clause($node) {
83 if ($this->isStoplisted($node))
86 $exactword = $node->_sql_quote($node->word);
87 return ($this->_case_exact
88 ? "pagename LIKE '$page' OR DBMS_LOB.INSTR(content, '$exactword') > 0"
89 : "LOWER(pagename) LIKE '$page' OR DBMS_LOB.INSTR(content, '$exactword') > 0");
93 // $Log: not supported by cvs2svn $
96 // (c-file-style: "gnu")
101 // c-hanging-comment-ender-p: nil
102 // indent-tabs-mode: nil