Index: multichoice.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/quiz/multichoice.module,v
retrieving revision 1.52
diff -u -r1.52 multichoice.module
--- multichoice.module	1 Dec 2007 13:15:02 -0000	1.52
+++ multichoice.module	2 Dec 2007 08:31:23 -0000
@@ -685,11 +685,11 @@
  */
 function multichoice_get_report($nid, $vid, $rid) {
   $result = db_query("SELECT *, " .
-                     "IFNULL((SELECT 1 FROM {quiz_multichoice_user_answers} ua WHERE question_nid = nid AND question_vid = vid AND result_id = %d AND ua.answer_id = ma.answer_id),0) as user_answer, " .
+                     "IFNULL((SELECT 1 FROM {quiz_multichoice_user_answers} AS ua WHERE question_nid = nid AND question_vid = vid AND result_id = %d AND ua.answer_id = ma.answer_id),0) as user_answer, " .
                      "(SELECT is_correct FROM {quiz_node_results_answers} WHERE question_nid = nid AND question_vid = vid AND result_id = %d) as question_correct " .
                      "FROM {node} " .
                      "LEFT JOIN {node_revisions} USING (nid, vid) " .
-                     "LEFT JOIN {quiz_multichoice_answers} ma USING (nid, vid)" .
+                     "LEFT JOIN {quiz_multichoice_answers} AS ma USING (nid, vid)" .
                      "WHERE nid = %d AND vid = %d", $rid, $rid, $nid, $vid);
   if ($result) {
     $question = new stdClass();
Index: quiz.install
===================================================================
RCS file: /cvs/drupal/contributions/modules/quiz/quiz.install,v
retrieving revision 1.13
diff -u -r1.13 quiz.install
--- quiz.install	29 Nov 2007 08:02:49 -0000	1.13
+++ quiz.install	2 Dec 2007 08:31:23 -0000
@@ -128,8 +128,20 @@
   db_query('DROP TABLE {quiz_node_result_options}');
   db_query('DROP TABLE {quiz_node_results_answers}');
   
-  // delete from nodes and node_revisions
-  db_query('DELETE FROM node, node_revisions USING node LEFT JOIN node_revisions USING (nid) WHERE type IN ("quiz")');
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      // delete from nodes and node_revisions
+      db_query('DELETE FROM {node}, {node_revisions} USING node LEFT JOIN {node_revisions} USING (nid) WHERE type IN ("quiz")');
+      break; 
+	case 'pgsql':
+      db_query("DROP sequence {quiz_node_properties}_property_id_seq;");
+      db_query("DROP sequence {quiz_node_result_options}_option_id_seq;");
+      db_query("DROP sequence {quiz_node_results}_result_id_seq;");
+      db_query("DELETE FROM {node_revisions} AS nr USING {node} AS n WHERE n.nid=nr.nid and n.\"type\" IN ('quiz');");
+      db_query("DELETE FROM {node} WHERE \"type\" IN ('quiz');");
+      break;
+  }
 
   variable_del('quiz_name');
   variable_del('quiz_default_close');
Index: quiz.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/quiz/quiz.module,v
retrieving revision 1.109
diff -u -r1.109 quiz.module
--- quiz.module	1 Dec 2007 13:15:02 -0000	1.109
+++ quiz.module	2 Dec 2007 08:31:25 -0000
@@ -404,7 +404,7 @@
 function quiz_get_number_of_questions($vid, $nid) {
   return db_result(db_query("SELECT count(*) + " .
                             "(SELECT number_of_random_questions FROM {quiz_node_properties} WHERE vid = %d AND nid = %d) " .
-                            "FROM {quiz_node_relationship} qnr " .
+                            "FROM {quiz_node_relationship} AS qnr " .
                             "WHERE qnr.parent_vid = %d " .
                             "AND qnr.parent_nid = %d " .
                             "AND question_status = %d",
@@ -647,12 +647,12 @@
  */
 function quiz_load($node) {
   $quiz_vid  = $node->vid;
-  $additions = db_fetch_object(db_query('SELECT qnp.* FROM {quiz_node_properties} qnp WHERE qnp.vid = %d AND qnp.nid = %d ORDER BY qnp.property_id DESC', $quiz_vid, $node->nid));
+  $additions = db_fetch_object(db_query('SELECT qnp.* FROM {quiz_node_properties} AS qnp WHERE qnp.vid = %d AND qnp.nid = %d ORDER BY qnp.property_id DESC', $quiz_vid, $node->nid));
   $results   = db_query('
     SELECT nr.nid, qnr.question_status 
-  FROM {quiz_node_relationship} qnr 
-  INNER JOIN {node_revisions} nr ON (qnr.parent_vid = nr.vid AND qnr.parent_nid = nr.nid)
-  WHERE qnr.parent_vid = %d AND qnr.parent_nid', $quiz_vid, $node->nid);
+  FROM {quiz_node_relationship} AS qnr 
+  INNER JOIN {node_revisions} AS nr ON (qnr.parent_vid = nr.vid AND qnr.parent_nid = nr.nid)
+  WHERE qnr.parent_vid = %d AND qnr.parent_nid is NOT NULL', $quiz_vid, $node->nid);
   while ($question = db_fetch_object($results)) {
     $additions->status[$question->child_nid] = $question->status;
   }
@@ -825,13 +825,13 @@
   global $user;
   $results = array();
   $dbresult = db_query("SELECT
-                          n.nid nid,
-                          n.title title,
-                          u.name name,
-                          qnrs.result_id result_id,
+                          n.nid AS nid,
+                          n.title AS title,
+                          u.name AS name,
+                          qnrs.result_id AS result_id,
                           qnrs.time_start,
                           qnrs.time_end
-                        FROM {node} n, {quiz_node_properties} qnp, {quiz_node_results} qnrs, {users} u
+                        FROM {node} AS n, {quiz_node_properties} AS qnp, {quiz_node_results} AS qnrs, {users} AS u
                         WHERE
                           n.type = 'quiz'
                             AND
@@ -1134,7 +1134,7 @@
   // but only perform this check if it is a registered user.
   if ($user->uid) {
     $passed = db_result(db_query("SELECT result_id " .
-                                 "FROM {quiz_node_results} qnrs " .
+                                 "FROM {quiz_node_results} AS qnrs " .
                                  "INNER JOIN {quiz_node_properties} USING (vid, nid) " .
                                  "WHERE qnrs.vid = %d AND qnrs.nid = %d AND qnrs.uid =%d " .
                                  "AND score >= pass_rate", $quiz->vid, $quiz->nid, $user->uid));
@@ -1188,7 +1188,7 @@
  */
 function quiz_calculate_score($quiz, $rid) {
   if ($quiz->pass_rate > 0) {
-    $score = db_fetch_array(db_query("SELECT count(*) as question_count, sum(is_correct) as num_correct " .
+    $score = db_fetch_array(db_query("SELECT count(*) AS question_count, sum(is_correct) AS num_correct " .
                                 "FROM {quiz_node_results_answers} " .
                                 "WHERE result_id = %d", $rid));
     if ($score['question_count'] > 0) {
@@ -1197,7 +1197,7 @@
   }
   else {
     $score = db_fetch_array(db_query("SELECT " .
-                                     "(SELECT count(*) FROM {quiz_node_results_answers} WHERE result_id = %d) as question_count," .
+                                     "(SELECT count(*) FROM {quiz_node_results_answers} WHERE result_id = %d) AS question_count," .
                                      "(SELECT option_summary " .
                                      "FROM {quiz_multichoice_user_answers} " .
                                      "LEFT JOIN {quiz_multichoice_answers} USING (answer_id) " .
@@ -1220,7 +1220,7 @@
   $questions = array();
 
   // Get required questions first.
-  $result = db_query("SELECT child_nid nid, child_vid vid FROM {quiz_node_relationship} WHERE parent_vid = %d AND parent_nid = %d AND question_status = %d", $quiz->vid, $quiz->nid, QUESTION_ALWAYS);
+  $result = db_query("SELECT child_nid AS nid, child_vid AS vid FROM {quiz_node_relationship} WHERE parent_vid = %d AND parent_nid = %d AND question_status = %d", $quiz->vid, $quiz->nid, QUESTION_ALWAYS);
   while ($question_node = db_fetch_array($result)) {
     $questions[] = $question_node;
   }
@@ -1260,15 +1260,15 @@
 
       // Get all published questions with one of the allowed term ids.
       $result = db_query_range("SELECT n.nid, n.vid " .
-                               "FROM {node} n " .
-                               "INNER JOIN {term_node} tn USING (nid)".
+                               "FROM {node} AS n " .
+                               "INNER JOIN {term_node} AS tn USING (nid)".
                                "WHERE n.status = 1 AND tn.tid IN ($term_ids) ".
                                "AND n.type IN ('". implode("','", _quiz_get_question_types()) ."') ".
                                "ORDER BY RAND()", 0, $num_random);
     }
     else {
       // Select random question from assigned pool.
-      $result = db_query_range("SELECT child_nid nid, child_vid vid FROM {quiz_node_relationship} WHERE parent_vid = %d AND parent_nid = %d AND question_status = %d ORDER BY RAND()", $quiz->vid, $quiz->nid, QUESTION_RANDOM, 0, $quiz->number_of_random_questions);
+      $result = db_query_range("SELECT child_nid AS nid, child_vid AS vid FROM {quiz_node_relationship} WHERE parent_vid = %d AND parent_nid = %d AND question_status = %d ORDER BY RAND()", $quiz->vid, $quiz->nid, QUESTION_RANDOM, 0, $quiz->number_of_random_questions);
     }
     while ($question_node = db_fetch_array($result)) {
       $questions[] = $question_node;
@@ -1484,9 +1484,9 @@
 
   $result = db_query('
     SELECT DISTINCT question.nid, question.vid, question.type, nr.body, nr.format, qnr.question_status
-    FROM {node} question
-    INNER JOIN {node_revisions} nr ON question.nid = nr.nid
-    LEFT JOIN {quiz_node_relationship} qnr
+    FROM {node} AS question
+    INNER JOIN {node_revisions} AS nr ON question.nid = nr.nid
+    LEFT JOIN {quiz_node_relationship} AS qnr
       ON nr.vid = qnr.child_vid
       AND qnr.parent_vid = %d 
       AND qnr.question_status != %d 
@@ -1650,12 +1650,12 @@
 
   $result = db_query('
     SELECT DISTINCT question.nid, question.vid, question.type, nr.body, nr.format
-    FROM {node} question
-    LEFT JOIN {node_revisions} nr ON (question.nid = nr.nid)
+    FROM {node} AS question
+    LEFT JOIN {node_revisions} AS nr ON (question.nid = nr.nid)
     WHERE question.status = 1
     AND (question.vid NOT IN
       (SELECT DISTINCT qnr.child_vid
-      FROM {quiz_node_relationship} qnr
+      FROM {quiz_node_relationship} AS qnr
       WHERE qnr.parent_vid = %d
       AND qnr.question_status != '. QUESTION_NEVER .'))
     '. $where_sql, $quiz_vid
@@ -1913,13 +1913,13 @@
 function _quiz_get_results($nid = '', $uid = 0) {
   $results = array();
   $args = array();
-  $sql = "SELECT n.nid nid,
-                 n.title title,
-                 u.name name,
-                 qnrs.result_id result_id,
+  $sql = "SELECT n.nid AS nid,
+                 n.title AS title,
+                 u.name AS name,
+                 qnrs.result_id AS result_id,
                  qnrs.time_start,
                  qnrs.time_end
-          FROM {node} n, {quiz_node_properties} qnp, {quiz_node_results} qnrs, {users} u
+          FROM {node} AS n, {quiz_node_properties} AS qnp, {quiz_node_results} AS qnrs, {users} AS u
           WHERE
             n.type = 'quiz'
               AND
@@ -1948,7 +1948,7 @@
  * Quiz Results User.
  */
 function quiz_user_results() {
-  $result = db_fetch_object(db_query('SELECT qnp.nid FROM {quiz_node_properties} qnp, {quiz_node_results} qnrs WHERE qnrs.nid = qnp.nid AND qnrs.result_id = %d', arg(2)));
+  $result = db_fetch_object(db_query('SELECT qnp.nid FROM {quiz_node_properties} AS qnp, {quiz_node_results} AS qnrs WHERE qnrs.nid = qnp.nid AND qnrs.result_id = %d', arg(2)));
   if ($result->nid) {
     $quiz = node_load($result->nid);
     $questions = _quiz_get_answers(arg(2));
@@ -1965,7 +1965,7 @@
  * Quiz Results Admin.
  */
 function quiz_admin_results() {
-  $result = db_fetch_object(db_query('SELECT qnp.nid FROM {quiz_node_properties} qnp, {quiz_node_results} qnrs WHERE qnrs.nid = qnp.nid AND qnrs.result_id = %d', arg(2)));
+  $result = db_fetch_object(db_query('SELECT qnp.nid FROM {quiz_node_properties} AS qnp, {quiz_node_results} AS qnrs WHERE qnrs.nid = qnp.nid AND qnrs.result_id = %d', arg(2)));
   if ($result->nid) {
     $quiz = node_load($result->nid);
     $questions = _quiz_get_answers(arg(2));
Index: multichoice.install
===================================================================
RCS file: /cvs/drupal/contributions/modules/quiz/multichoice.install,v
retrieving revision 1.3
diff -u -r1.3 multichoice.install
--- multichoice.install	29 Nov 2007 19:14:11 -0000	1.3
+++ multichoice.install	2 Dec 2007 08:31:23 -0000
@@ -40,7 +40,39 @@
       break;
 
     case 'pgsql':
-	
+
+      /**
+      * Stores correct answers for multichoice quiz.
+      */
+      // Create the quiz node user answers multichoice table
+      db_query("CREATE TABLE {quiz_multichoice_user_answers} (
+        question_nid INT_UNSIGNED NOT NULL,
+        question_vid INT_UNSIGNED NOT NULL,
+        result_id INT_UNSIGNED NOT NULL,
+        answer_id INT_UNSIGNED NOT NULL,
+        PRIMARY KEY(result_id, question_nid, question_vid, answer_id)
+      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");	  
+
+      /**
+      * Stores user answers for multichoice quiz.
+      */
+      // Create the quiz node answers multichoice table
+      db_query("CREATE TABLE {quiz_multichoice_answers} (
+        answer_id INT_UNSIGNED NOT NULL ,
+        nid INT_UNSIGNED NOT NULL,
+        vid INT_UNSIGNED NOT NULL,
+        answer varchar(255) NOT NULL,
+        feedback TEXT,
+        result_option INT_UNSIGNED DEFAULT 0,
+        is_correct smallint_unsigned DEFAULT 0,
+        PRIMARY KEY(answer_id)
+      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");	
+      db_query("CREATE sequence {quiz_multichoice_user_answers}_question_nid_seq;");
+      db_query("CREATE sequence {quiz_multichoice_answers}_answer_id_seq;");
+      db_query("CREATE function ifnull (text, text) returns text AS '
+                select coalesce($1, $2) AS result language 'sql';");
+      db_query("CREATE function ifnull (int4, int4) returns int4 AS '
+                select coalesce($1, $2) AS result language 'sql';");
       break;
 	  
   }
@@ -61,9 +93,22 @@
   // Erase any saved variable settings from the database.
   db_query("DELETE FROM {variable} WHERE name LIKE '%s%%'", 'multichoice_');
   
-  // Delete from nodes and node_revisions.
-  db_query('DELETE FROM node, node_revisions, quiz_node_question_properties USING node LEFT JOIN node_revisions USING (nid) LEFT JOIN {quiz_node_question_properties} USING (nid) WHERE type IN ("multichoice")');
-
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      // delete from nodes and node_revisions
+      db_query('DELETE FROM {node}, {node_revisions}, {quiz_node_question_properties} USING node LEFT JOIN {node_revisions} USING (nid) LEFT JOIN {quiz_node_question_properties} USING (nid) WHERE type IN ("multichoice")');
+      break;
+    case 'pgsql':
+      db_query("DELETE FROM {node_revisions} AS nr USING {node} AS n WHERE n.nid=nr.nid and n.\"type\" IN ('multichoice');");
+      db_query("DELETE FROM {quiz_node_question_properties} AS np USING {node} AS n WHERE n.nid=np.nid and n.\"type\" IN ('multichoice');");
+      db_query("DELETE FROM {node} WHERE \"type\" IN ('multichoice');");
+      db_query("DROP sequence {quiz_multichoice_user_answers}_question_nid_seq;");
+      db_query("DROP sequence {quiz_multichoice_answers}_answer_id_seq;");
+      db_query("drop function ifnull (text, text);");
+      db_query("drop function ifnull (int4, int4);");
+      break;
+  }	 
   // Truncate the cache so users don't run into any unexpected errors.
   cache_clear_all('variables', 'cache');
   
Index: CHANGELOG.txt
===================================================================
RCS file: /cvs/drupal/contributions/modules/quiz/CHANGELOG.txt,v
retrieving revision 1.6
diff -u -r1.6 CHANGELOG.txt
--- CHANGELOG.txt	1 Dec 2007 13:13:50 -0000	1.6
+++ CHANGELOG.txt	2 Dec 2007 08:31:22 -0000
@@ -13,6 +13,7 @@
 - Various Interface enhancements
 - Various Bugfixes
 - Code cleanup
+- Added support for Postgre SQL
 
 2007-06-13
 ----------
