MDL-26351 add support for postgresql running with standard_conforming_strings
authorPetr Skoda <commits@skodak.org>
Sat, 12 Feb 2011 15:16:52 +0000 (16:16 +0100)
committerPetr Skoda <commits@skodak.org>
Sat, 12 Feb 2011 15:16:52 +0000 (16:16 +0100)
lib/ddl/postgres_sql_generator.php

index 1961137..240a67b 100644 (file)
@@ -56,6 +56,8 @@ class postgres_sql_generator extends sql_generator {
     public $rename_key_sql = null; //SQL sentence to rename one key (PostgreSQL doesn't support this!)
                                           //TABLENAME, OLDKEYNAME, NEWKEYNAME are dynamically replaced
 
+    protected $strd_strings = null;  // '' or \' quotes
+
     /**
      * Reset a sequence to the id field of a table.
      * @param string $table name of table or xmldb_table object
@@ -404,6 +406,24 @@ class postgres_sql_generator extends sql_generator {
         return $results;
     }
 
+    public function addslashes($s) {
+        // Postgres is gradually switching to ANSY quotes, we need to check what is expected
+        if (!isset($this->std_strings)) {
+            $this->std_strings = ($this->mdb->get_field_sql("select setting from pg_settings where name = 'standard_conforming_strings'") === 'on');
+        }
+
+        if ($this->std_strings) {
+            $s = str_replace("'",  "''", $s);
+        } else {
+            // do not use php addslashes() because it depends on PHP quote settings!
+            $s = str_replace('\\','\\\\',$s);
+            $s = str_replace("\0","\\\0", $s);
+            $s = str_replace("'",  "\\'", $s);
+        }
+
+        return $s;
+    }
+
 /**
  * Given one xmldb_table returns one string with the sequence of the table
  * in the table (fetched from DB)