]> git.mxchange.org Git - mailer.git/blobdiff - inc/db/lib-mysql3.php
Earning subscriptions introduced (unfinished):
[mailer.git] / inc / db / lib-mysql3.php
index 7a33983a1ec2d59cb71e9ae08a518dc84280d4c5..a86d391cd93988d3f24674d3c130a2a36f2a6c05 100644 (file)
@@ -119,7 +119,7 @@ function SQL_QUERY ($sqlString, $F, $L, $enableCodes = true) {
                } // END - if
 
                // Append debug line
-               appendLineToFile(getCachePath() . 'mysql.log', $F . '(LINE=' . $L . '|NUM=' . SQL_NUMROWS($result) . '|AFFECTED=' . SQL_AFFECTEDROWS() . '|QUERYTIME:' . $queryTime . '): ' . str_replace("\r", '', str_replace("\n", ' ', $GLOBALS['last_sql'])));
+               appendLineToFile(getCachePath() . 'mysql.log', basename($F) . '|LINE=' . $L . '|NUM=' . (is_resource($result) ? SQL_NUMROWS($result) : 'false') . '|AFFECTED=' . SQL_AFFECTEDROWS() . '|QUERYTIME:' . $queryTime . '): ' . str_replace("\r", '', str_replace("\n", ' ', $GLOBALS['last_sql'])));
        } // END - if
 
        // Count DB hits
@@ -216,7 +216,7 @@ function SQL_RESULT ($resource, $row, $field = '0') {
 // SQL connect
 function SQL_CONNECT ($host, $login, $password, $F, $L) {
        // Try to connect
-       $linkResource = mysql_connect($host, $login, $password) or addFatalMessage(__FUNCTION__, __LINE__, $F . ' (' . $L . '):' . mysql_error());
+       $linkResource = mysql_connect($host, $login, $password) or debug_report_bug(__FUNCTION__, __LINE__, $F . ' (' . $L . '):' . mysql_error());
 
        // Set the link resource
        SQL_SET_LINK($linkResource);
@@ -228,7 +228,7 @@ function SQL_SELECT_DB ($dbName, $F, $L) {
        if (!SQL_IS_LINK_UP()) return false;
 
        // Return the result
-       return mysql_select_db($dbName, SQL_GET_LINK()) or addFatalMessage(__FUNCTION__, __LINE__, $F . ' (' . $L . '):' . mysql_error());
+       return mysql_select_db($dbName, SQL_GET_LINK()) or debug_report_bug(__FUNCTION__, __LINE__, $F . ' (' . $L . '):' . mysql_error());
 }
 
 // SQL close link
@@ -239,8 +239,7 @@ function SQL_CLOSE ($F, $L) {
        } // END - if
 
        // Close database link and forget the link
-       $close = mysql_close(SQL_GET_LINK())
-               or addFatalMessage(__FUNCTION__, __LINE__, $F . ' (' . $L . '):'.mysql_error());
+       $close = mysql_close(SQL_GET_LINK()) or debug_report_bug(__FUNCTION__, __LINE__, $F . ' (' . $L . '):'.mysql_error());
 
        // Close link
        SQL_SET_LINK(null);
@@ -296,6 +295,9 @@ function SQL_INSERTID () {
 function SQL_ESCAPE ($str, $secureString = true, $strip = true) {
        // Do we have cache?
        if (!isset($GLOBALS['sql_escapes'][''.$str.''])) {
+               // Prepare the string here
+               $str = SQL_PREPARE_SQL_STRING($str);
+
                // Secure string first? (which is the default behaviour!)
                if ($secureString === true) {
                        // Then do it here
@@ -361,16 +363,16 @@ function SQL_ALTER_TABLE ($sql, $F, $L, $enableCodes = true) {
        $result = false;
 
        // Determine index/fulltext/unique word
-       $noIndex = (
-       (
-               strpos($sql, 'INDEX') === false
-       ) && (
-               strpos($sql, 'KEY') === false
-       ) && (
-               strpos($sql, 'FULLTEXT') === false
-       ) && (
-               strpos($sql, 'UNIQUE') === false
-       )
+       $isAlterIndex = (
+               (
+                       isInString('INDEX', $sql)
+               ) && (
+                       isInString('KEY', $sql)
+               ) && (
+                       isInString('FULLTEXT', $sql)
+               ) && (
+                       isInString('UNIQUE', $sql)
+               )
        );
 
        // Extract table name
@@ -378,10 +380,10 @@ function SQL_ALTER_TABLE ($sql, $F, $L, $enableCodes = true) {
        $tableName = str_replace('`', '', $tableArray[2]);
 
        // Debug log
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sql=' . $sql . ',tableName=' . $tableName);
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sql=' . $sql . ',tableName=' . $tableName . ',tableArray=<pre>' . print_r($tableArray, true) . '</pre>,isAlterIndex=' . intval($isAlterIndex));
 
        // Shall we add/drop?
-       if (((strpos($sql, 'ADD') !== false) || (strpos($sql, 'DROP') !== false) || (strpos($sql, 'CHANGE') !== false)) && ($noIndex === true)) {
+       if (((isInString('ADD', $sql)) || (isInString('DROP', $sql)) || (isInString('CHANGE', $sql))) && ($isAlterIndex === false)) {
                // Try two columns, one should fix
                foreach (array(4,5) as $idx) {
                        // If an entry is not set, abort here
@@ -392,58 +394,54 @@ function SQL_ALTER_TABLE ($sql, $F, $L, $enableCodes = true) {
                        } // END - if
 
                        // And column name as well
-                       $columnName = str_replace('`', '', $tableArray[$idx]);
-
-                       // Get column information
-                       $result = SQL_QUERY_ESC("SHOW COLUMNS FROM `%s` LIKE '%s'",
-                               array($tableName, $columnName), __FUNCTION__, __LINE__);
+                       $columnName = $tableArray[$idx];
 
                        // Debug log
-                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'columnName=' . $columnName . ',idx=' . $idx . ',sql=' . $sql . ',hasZeroNums=' . intval(SQL_HASZERONUMS($result)));
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'columnName=' . $columnName . ',idx=' . $idx . ',sql=' . $sql . ',hasZeroNums=' . intval(isSqlTableColumnFound($tableName, $columnName)));
 
                        // Do we have no entry on ADD or an entry on DROP/CHANGE?
-                       // 123               4       43    3      4           4          32    23           4       4     3    3      4            4          32    23                4       43    3      4              4          3    3         321
-                       if (((SQL_HASZERONUMS($result)) && (strpos($sql, 'ADD') !== false)) || ((!SQL_HASZERONUMS($result)) && (strpos($sql, 'DROP') !== false)) || ((!SQL_HASZERONUMS($result)) && (strpos($sql, 'CHANGE') !== false) && ($idx == 4))) {
+                       if (((!isSqlTableColumnFound($tableName, $columnName)) && (isInString('ADD', $sql))) || ((isSqlTableColumnFound($tableName, $columnName)) && ((isInString('DROP', $sql)) || ((isInString('CHANGE', $sql)) && ($idx == 4) && ((!isSqlTableColumnFound($tableName, $tableArray[5])) || ($columnName == $tableArray[5])))))) {
                                // Do the query
                                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Executing: ' . $sql);
                                $result = SQL_QUERY($sql, $F, $L, false);
 
                                // Skip further attempt(s)
                                break;
-                       //       1234                5       54    4      5           5          43    34                5       54    4      5            5          43    3      4              4          32    2                    21
-                       } elseif ((((!SQL_HASZERONUMS($result)) && (strpos($sql, 'ADD') !== false)) || ((!SQL_HASZERONUMS($result)) && (strpos($sql, 'DROP') !== false)) || (strpos($sql, 'CHANGE') !== false)) && ($columnName != 'KEY')) {
+                       } elseif ((((isSqlTableColumnFound($tableName, $columnName)) && (isInString('ADD', $sql))) || ((!isSqlTableColumnFound($tableName, $columnName)) && ((isInString('DROP', $sql))) || (isInString('CHANGE', $sql)))) && ($columnName != 'KEY')) {
                                // Abort here because it is alreay there
                                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Skipped: sql=' . $sql . ',columnName=' . $columnName . ',idx=' . $idx);
                                break;
-                       } elseif ((SQL_HASZERONUMS($result)) && (strpos($sql, 'DROP') !== false)) {
+                       } elseif ((!isSqlTableColumnFound($tableName, $columnName)) && (isInString('DROP', $sql))) {
                                // Abort here because we tried to drop a column which is not there (never created maybe)
                                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'No drop: ' . $sql);
                                break;
                        } elseif ($columnName != 'KEY') {
                                // Something didn't fit, we better log it
-                               logDebugMessage(__FUNCTION__, __LINE__, 'Possible problem: ' . $sql . ',hasZeroNums=' . intval(SQL_HASZERONUMS($result)) . '');
+                               logDebugMessage(__FUNCTION__, __LINE__, 'Possible problem: ' . $sql . ',hasZeroNums=' . intval(isSqlTableColumnFound($tableName, $columnName)) . '');
                        }
                } // END - foreach
-       } elseif ((getTableType() == 'InnoDB') && (strpos($sql, 'FULLTEXT') !== false)) {
-               // Skip this query silently
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("Skipped FULLTEXT: sql=%s,tableName=%s,hasZeroNums=%d,file=%s,line=%s", $sql, $tableName, intval((is_bool($result)) ? 0 : SQL_HASZERONUMS($result)), $F, $L));
-       } elseif ($noIndex === false) {
-               // And column name as well
-               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableArray=<pre>' . print_r($tableArray, true) . '</pre>');
+       } elseif ((getTableType() == 'InnoDB') && (isInString('FULLTEXT', $sql))) {
+               // Skip this query silently because InnoDB does not understand fulltext indexes
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("Skipped FULLTEXT: sql=%s,tableName=%s,hasZeroNums=%d,file=%s,line=%s", $sql, $tableName, intval((is_bool($result)) ? 0 : isSqlTableColumnFound($columnName)), $F, $L));
+       } elseif ($isAlterIndex === true) {
+               // And column name as well without backticks
                $keyName = str_replace('`', '', $tableArray[5]);
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'keyName=' . $keyName . ',tableArray=<pre>' . print_r($tableArray, true) . '</pre>');
 
                // Is this "UNIQUE" or so? FULLTEXT has been handled the elseif() block above
-               if (in_array(strtoupper($keyName), array('INDEX', 'UNIQUE', 'KEY', 'FULLTEXT'))) {
+               if (in_array(strtoupper($tableArray[4]), array('INDEX', 'UNIQUE', 'KEY', 'FULLTEXT'))) {
                        // Init loop
-                       $begin = 1; $keyName = ',';
-                       while (strpos($keyName, ',') !== false) {
+                       $begin = 1;
+                       $keyName = ',';
+                       while (isInString(',', $keyName)) {
                                // Use last
+                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'keyName=' . $keyName . 'begin=' . $begin . ' - BEFORE');
                                $keyName = str_replace('`', '', $tableArray[count($tableArray) - $begin]);
-                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $keyName . '----------------' . $begin);
+                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'keyName=' . $keyName . 'begin=' . $begin . ' - BETWEEN');
 
                                // Remove brackes
                                $keyName = str_replace('(', '', str_replace(')', '', $keyName));
-                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $keyName . '----------------' . $begin);
+                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'keyName=' . $keyName . 'begin=' . $begin . ' - AFTER');
 
                                // Continue
                                $begin++;
@@ -451,9 +449,14 @@ function SQL_ALTER_TABLE ($sql, $F, $L, $enableCodes = true) {
                } // END - if
 
                // Shall we run it?
-               if (!isSqlTableIndexAdded($tableName, $tableArray[3])) {
-                       // Send it to the SQL_QUERY() function
-                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $sql);
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ', tableArray[3]=' . $tableArray[3] . ',keyName=' . $keyName);
+               if (($tableArray[3] == 'ADD') && (!isSqlTableIndexFound($tableName, $keyName))) {
+                       // Send it to the SQL_QUERY() function to add it
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sql=' . $sql . ' - ADDING!');
+                       $result = SQL_QUERY($sql, $F, $L, $enableCodes);
+               } elseif (($tableArray[3] == 'DROP') && (isSqlTableIndexFound($tableName, $keyName))) {
+                       // Send it to the SQL_QUERY() function to drop it
+                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sql=' . $sql . ' - DROPPING!');
                        $result = SQL_QUERY($sql, $F, $L, $enableCodes);
                } else {
                        // Not executed
@@ -472,7 +475,7 @@ function SQL_ALTER_TABLE ($sql, $F, $L, $enableCodes = true) {
 // Getter for SQL link
 function SQL_GET_LINK () {
        // Init link
-       $link = null;
+       $link = NULL;
 
        // Is it in the globals?
        if (isset($GLOBALS['sql_link'])) {
@@ -539,74 +542,93 @@ function SQL_HASZEROAFFECTED () {
 function SQL_PREPARE_SQL_STRING ($sqlString, $enableCodes = true) {
        // Is it already cached?
        if (!isset($GLOBALS['sql_strings'][$sqlString])) {
-               // Compile config+expression code
-               $sqlString2 = FILTER_COMPILE_EXPRESSION_CODE(FILTER_COMPILE_CONFIG($sqlString));
+               // Compile URI codes+config+expression code
+               $sqlString2 = FILTER_COMPILE_EXPRESSION_CODE(FILTER_COMPILE_CONFIG(compileUriCode($sqlString)));
 
                // Do final compilation
                $GLOBALS['sql_strings'][$sqlString] = doFinalCompilation($sqlString2, false, $enableCodes);
-               //die($sqlString.'<br />'.$sqlString2.'<br />'.$GLOBALS['sql_strings'][$sqlString]);
        } // END - if
 
        // Return it
        return $GLOBALS['sql_strings'][$sqlString];
 }
 
+// Creates a MySQL TIMESTAMP compatible string from given Uni* timestamp
+function SQL_EPOCHE_TO_TIMESTAMP ($timestamp) {
+       return generateDateTime($timestamp, 7);
+}
+
 // Check if there is a SQL table created
-function isSqlTableCreated ($table) {
+function isSqlTableCreated ($tableName) {
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ' - ENTERED!');
        // Do we have cache?
-       if (!isset($GLOBALS[__FUNCTION__][$table])) {
+       if (!isset($GLOBALS[__FUNCTION__][$tableName])) {
                // Check if the table is there
                $result = SQL_QUERY_ESC("SHOW TABLES FROM `{?__DB_NAME?}` WHERE `Tables_in_{?__DB_NAME?}`='{?_MYSQL_PREFIX?}_%s'",
-                       array($table), __FILE__, __LINE__);
+                       array($tableName), __FILE__, __LINE__);
 
                // Is there an entry?
-               $GLOBALS[__FUNCTION__][$table] = (SQL_NUMROWS($result) == 1);
+               $GLOBALS[__FUNCTION__][$tableName] = (SQL_NUMROWS($result) == 1);
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',numRows=' . intval($GLOBALS[__FUNCTION__][$tableName]));
+       } // END - if
+
+       // Return cache
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',result=' . intval($GLOBALS[__FUNCTION__][$tableName]) . ' - EXIT!');
+       return $GLOBALS[__FUNCTION__][$tableName];
+}
+
+// Is a table column there?
+function isSqlTableColumnFound ($tableName, $columnName) {
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',columnName=' . $columName . ' - ENTERED!');
+       // Do we have cache?
+       if (!isset($GLOBALS[__FUNCTION__][$tableName][$columnName])) {
+               // And column name as well
+               $columnName = str_replace('`', '', $columnName);
+
+               // Get column information
+               $result = SQL_QUERY_ESC("SHOW COLUMNS FROM `%s` LIKE '%s'",
+                       array($tableName, $columnName), __FUNCTION__, __LINE__);
+
+               // Determine it
+               $GLOBALS[__FUNCTION__][$tableName][$columnName] = (!SQL_HASZERONUMS($result));
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',columnName=' . $columnName . ',hasZeroNums=' . intval(SQL_HASZERONUMS($result)) . ',numRows=' . intval($GLOBALS[__FUNCTION__][$tableName][$columnName]));
+
+               // Free result
+               SQL_FREERESULT($result);
        } // END - if
 
        // Return cache
-       return $GLOBALS[__FUNCTION__][$table];
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',columnName=' . $columName . ',result=' . intval($GLOBALS[__FUNCTION__][$tableName][$columnName]) . ' - EXIT!');
+       return $GLOBALS[__FUNCTION__][$tableName][$columnName];
 }
 
-// Checks depending on the mode if the table is there
-function isSqlTableIndexAdded ($tableName, $mode) {
+// Checks depending on the mode if the index is there
+function isSqlTableIndexFound ($tableName, $keyName) {
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',columnName=' . $keyName . ' - ENTERED!');
        // Do we have cache?
-       if (!isset($GLOBALS[__FUNCTION__][$tableName][$mode])) {
+       if (!isset($GLOBALS[__FUNCTION__][$tableName][$keyName])) {
                // Show indexes
                $result = SQL_QUERY_ESC("SHOW INDEX FROM `%s`", array($tableName), __FUNCTION__, __LINE__);
 
-               // Non-skipping is default for ADD
-               $GLOBALS[__FUNCTION__][$tableName][$mode] = false;
-
-               // But should we DROP?
-               if ($mode == 'DROP') {
-                       // Then skip if nothing found
-                       $GLOBALS[__FUNCTION__][$tableName][$mode] = true;
-                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Going to drop key ' . $keyName);
-               } // END - if
+               // The column is not found by default
+               $GLOBALS[__FUNCTION__][$tableName][$keyName] = false;
 
                // Walk through all
                while ($content = SQL_FETCHARRAY($result)) {
-                       // Is it found?
-                       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'columnName='.$keyName.',content=<pre>' . print_r($content, true) . '</pre>');
-                       if (($content['Key_name'] == $keyName) && ($mode == 'ADD')) {
-                               // Skip this query!
-                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("ADD: Skiped: %s", $sql));
-                               $GLOBALS[__FUNCTION__][$tableName][$mode] = true;
-                               break;
-                       } elseif (($content['Key_name'] == $keyName) && ($mode == 'DROP')) {
-                               // Don't skip this!
-                               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("DROP: Not skiped: %s", $sql));
-                               $GLOBALS[__FUNCTION__][$tableName][$mode] = false;
-                               break;
-                       }
+                       // Add all entries for better caching behavior
+                       $GLOBALS[__FUNCTION__][$tableName][$content['Key_name']] = true;
                } // END - while
 
                // Free result
                SQL_FREERESULT($result);
+       } else {
+               // Cache used
+               //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',columnName=' . $keyName . ',result=' . intval($GLOBALS[__FUNCTION__][$tableName][$keyName]) . ' - CACHE!');
        } // END - if
 
        // Return cache
-       return $GLOBALS[__FUNCTION__][$tableName][$mode];
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableName=' . $tableName . ',columnName=' . $keyName . ',result=' . intval($GLOBALS[__FUNCTION__][$tableName][$keyName]) . ' - EXIT!');
+       return $GLOBALS[__FUNCTION__][$tableName][$keyName];
 }
 
 // [EOF]