]> git.mxchange.org Git - mailer.git/blobdiff - inc/db/lib-mysql3.php
Final fixes for SQL_ALTER_TABLE() wrapper, INSERT INTO queries are still not wrapped...
[mailer.git] / inc / db / lib-mysql3.php
index 512bdf43d9df9b32b28345794bf577a1cf927f06..d7f8aa6c5802436dde681a88166b2aab84669d75 100644 (file)
@@ -179,7 +179,11 @@ function SQL_FETCHARRAY($res, $nr=0, $remove_numerical=true) {
 }
 
 // SQL result
-function SQL_RESULT ($res, $row, $field) {
+function SQL_RESULT ($res, $row, $field = 0) {
+       // Is $res valid?
+       if (!is_resource($res)) return false;
+
+       // Run the result command and return the result
        $result = mysql_result($res, $row, $field);
        return $result;
 }
@@ -327,7 +331,7 @@ function SQL_RESULT_FROM_ARRAY ($table, $columns, $idRow, $id, $F, $L) {
        } // END  - if
 
        // Prepare the SQL statement
-       $sql = "SELECT `".implode("`, `", $columns)."` FROM `{!_MYSQL_PREFIX!}_%s` WHERE ``='%s' LIMIT 1";
+       $sql = "SELECT `".implode("`,`", $columns)."` FROM `{!_MYSQL_PREFIX!}_%s` WHERE ``='%s' LIMIT 1";
 
        // Return the result
        return SQL_QUERY_ESC($sql,
@@ -344,30 +348,83 @@ function SQL_ALTER_TABLE ($sql, $F, $L) {
        $result = false;
 
        // Determine index/fulltext/unique word
-       //         12     3             3         2    2     3                3         2    2     3              3         21
-       $noIndex = ((eregi("INDEX", $sql) == false) && (eregi("FULLTEXT", $sql) == false) && (eregi("UNIQUE", $sql) == false));
+       //         12    3             3         2    2    3                3         2    2    3              3         21
+       $noIndex = ((ereg("INDEX", $sql) == false) && (ereg("FULLTEXT", $sql) == false) && (ereg("UNIQUE", $sql) == false));
 
-       // Shall we add/drop?
-       if (((eregi("ADD", $sql) > 0) || (eregi("DROP", $sql) > 0)) && ($noIndex)) {
-               // Extract table name
-               $tableArray = explode(" ", $sql);
-               $tableName = str_replace("`", "", $tableArray[2]);
+       // Extract table name
+       $tableArray = explode(" ", $sql);
+       $tableName = str_replace("`", "", $tableArray[2]);
 
+       // Shall we add/drop?
+       if (((ereg("ADD", $sql)) || (ereg("DROP", $sql))) && ($noIndex)) {
                // And column name as well
                $columnName = str_replace("`", "", $tableArray[4]);
 
                // Get column information
                $result = SQL_QUERY_ESC("SHOW COLUMNS FROM %s LIKE '%s'",
-                       array($tableName, $columnName), $F, $L);
+                       array($tableName, $columnName), __FILE__, __LINE__);
 
                // Do we have no entry on ADD or an entry on DROP?
-               // 123           4       4     3    3     4           4    32    23           4       4     3    3     4            4    321
-               if (((SQL_NUMROWS($result) == 0) && (eregi("ADD", $sql) > 0)) || ((SQL_NUMROWS($result) == 1) && (eregi("DROP", $sql) > 0))) {
+               // 123           4       4     3    3    4           432    23           4       4     3    3    4            4321
+               if (((SQL_NUMROWS($result) == 0) && (ereg("ADD", $sql))) || ((SQL_NUMROWS($result) == 1) && (ereg("DROP", $sql)))) {
                        // Do the query
+                       //* DEBUG: */ print __LINE__.":".$sql."<br />\n";
+                       $result = SQL_QUERY($sql, $F, $L, false);
+               } // END - if
+       } elseif ((constant('_TABLE_TYPE') == "InnoDB") && (ereg("FULLTEXT", $sql))) {
+               // Skip this query silently
+               //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Skipped FULLTEXT: sql=%s,file=%s,line=%s", $sql, $F, $L));
+       } elseif (!$noIndex) {
+               // And column name as well
+               $columnName = str_replace("`", "", $tableArray[4]);
+
+               // Is this "UNIQUE" or so? FULLTEXT has been handled the elseif() block above
+               if (in_array(strtoupper($columnName), array("INDEX", "UNIQUE", "KEY", "FULLTEXT"))) {
+                       // Init loop
+                       $begin = 1; $columnName = ",";
+                       while (strpos($columnName, ",") !== false) {
+                               // Use last
+                               $columnName = str_replace("`", "", $tableArray[count($tableArray) - $begin]);
+                               //* DEBUG: */ print __LINE__.":".$columnName."----------------".$begin."<br />\n";
+
+                               // Remove brackes
+                               $columnName = str_replace("(", "", str_replace(")", "", $columnName));
+                               //* DEBUG: */ print __LINE__.":".$columnName."----------------".$begin."<br />\n";
+
+                               // Continue
+                               $begin++;
+                       } // END while
+               } // END - if
+
+               // Show indexes
+               $result = SQL_QUERY_ESC("SHOW INDEX FROM %s",
+                       array($tableName), __FILE__, __LINE__);
+
+               // Walk through all
+               $skip = false;
+               while ($content = SQL_FETCHARRAY($result)) {
+                       // Is it found?
+                       //* DEBUG: */ print "<pre>".print_r($content, true)."</pre>";
+                       if (($content['Column_name'] == $columnName) || ($content['Key_name'] == $columnName)) {
+                               // Skip this query!
+                               //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Skiped: %s", $sql));
+                               $skip = true;
+                               break;
+                       } // END - if
+               } // END - while
+
+               // Free result
+               SQL_FREERESULT($result);
+
+               // Shall we run it?
+               if (!$skip) {
+                       // Send it to the SQL_QUERY() function
+                       /* DEBUG: */ print __LINE__.":".$sql."<br />\n";
                        $result = SQL_QUERY($sql, $F, $L, false);
                } // END - if
        } else {
-               // Send it to the SQL_QUERY() function
+               // Other ALTER TABLE query
+               /* DEBUG: */ print __LINE__.":".$sql."<br />\n";
                $result = SQL_QUERY($sql, $F, $L, false);
        }