- // Return it
- return $GLOBALS['sql_escapes'][''.$str.''];
-}
-
-// SELECT query string from table, columns and so on... ;-)
-function SQL_RESULT_FROM_ARRAY ($table, $columns, $idRow, $id, $F, $L) {
- // Is columns an array?
- if (!is_array($columns)) {
- // No array
- debug_report_bug(__FUNCTION__, __LINE__, sprintf("columns is not an array. %s != array, file=%s, line=%s",
- gettype($columns),
- basename($F),
- $L
- ));
-
- // Abort here with 'false'
- return false;
- } // END - if
-
- // Prepare the SQL statement
- $sql = "SELECT `".implode("`,`", $columns)."` FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`='%s' LIMIT 1";
-
- // Return the result
- return SQL_QUERY_ESC($sql,
- array(
- $table,
- $idRow,
- bigintval($id),
- ), $F, $L
- );
-}
-
-// ALTER TABLE wrapper function
-function SQL_ALTER_TABLE ($sql, $F, $L, $enableCodes = true) {
- // Abort if link is down
- if (!SQL_IS_LINK_UP()) return false;
-
- // This is the default result...
- $result = false;
-
- // Determine index/fulltext/unique word
- $noIndex = (
- (
- strpos($sql, 'INDEX') === false
- ) && (
- strpos($sql, 'KEY') === false
- ) && (
- strpos($sql, 'FULLTEXT') === false
- ) && (
- strpos($sql, 'UNIQUE') === false
- )
- );
-
- // Extract table name
- $tableArray = explode(' ', $sql);
- $tableName = str_replace('`', '', $tableArray[2]);
-
- // Shall we add/drop?
- if (((strpos($sql, 'ADD') !== false) || (strpos($sql, 'DROP') !== false) || (strpos($sql, 'CHANGE') !== false)) && ($noIndex === true)) {
- // Try two columns, one should fix
- foreach (array(4,5) as $idx) {
- // 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__);
-
- // Debug log
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'columnName=' . $columnName . ',idx=' . $idx . ',sql=' . $sql . ',hasZeroNums=' . intval(SQL_HASZERONUMS($result)));
-
- // 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 == 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')) {
- // Abort here because it is alreay there
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Skipped: ' . $sql);
- break;
- } elseif ($columnName != 'KEY') {
- // Something didn't fit, we better log it
- logDebugMessage(__FUNCTION__, __LINE__, 'Possible problem: ' . $sql . ',hasZeroNums=' . intval(SQL_HASZERONUMS($result)) . '');
- }
- } // END - foreach
- } elseif ((getConfig('_TABLE_TYPE') == 'InnoDB') && (strpos($sql, 'FULLTEXT') !== false)) {
- // Skip this query silently
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("Skipped FULLTEXT: sql=%s,columnName=%s,idx=%d,hasZeroNums=%d,file=%s,line=%s", $sql, $columnName, $idx, intval(SQL_HASZERONUMS($result)), $F, $L));
- } elseif ($noIndex === false) {
- // And column name as well
- //* DEBUG: */ debugOutput(__LINE__.':tableArray=<pre>' . print_r($tableArray, true) . '</pre>');
- $keyName = str_replace('`', '', $tableArray[5]);
-
- // Is this "UNIQUE" or so? FULLTEXT has been handled the elseif() block above
- if (in_array(strtoupper($keyName), array('INDEX', 'UNIQUE', 'KEY', 'FULLTEXT'))) {
- // Init loop
- $begin = 1; $keyName = ',';
- while (strpos($keyName, ',') !== false) {
- // Use last
- $keyName = str_replace('`', '', $tableArray[count($tableArray) - $begin]);
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $keyName . '----------------' . $begin);
-
- // Remove brackes
- $keyName = str_replace('(', '', str_replace(')', '', $keyName));
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $keyName . '----------------' . $begin);
-
- // Continue
- $begin++;
- } // END while
- } // END - if
-
- // Show indexes
- $result = SQL_QUERY_ESC("SHOW INDEX FROM `%s`", array($tableName), __FUNCTION__, __LINE__);
-
- // Non-skipping is default for ADD
- $skip = false;
-
- // But should we DROP?
- if ($tableArray[3] == 'DROP') {
- // Then skip if nothing found!
- $skip = true;
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Going to drop key ' . $keyName);
- } // END - if
-
- // Walk through all
- while ($content = SQL_FETCHARRAY($result)) {
- // Is it found?
- //* DEBUG: */ debugOutput(__LINE__.':columnName='.$keyName.',content=<pre>' . print_r($content, true) . '</pre>');
- if (($content['Key_name'] == $keyName) && ($tableArray[3] == 'ADD')) {
- // Skip this query!
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("ADD: Skiped: %s", $sql));
- $skip = true;
- break;
- } elseif (($content['Key_name'] == $keyName) && ($tableArray[3] == 'DROP')) {
- // Don't skip this!
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("DROP: Not skiped: %s", $sql));
- $skip = false;
- break;
- }
- } // END - while
-
- // Free result
- SQL_FREERESULT($result);
-
- // Shall we run it?
- if ($skip === false) {
- // Send it to the SQL_QUERY() function
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $sql);
- $result = SQL_QUERY($sql, $F, $L, $enableCodes);
- } else {
- // Not executed
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Not executed: ' . $sql);
- }
- } else {
- // Other ALTER TABLE query
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $sql);
- $result = SQL_QUERY($sql, $F, $L, $enableCodes);
- }
-
- // Return result
- return $result;
-}
-
-// Getter for SQL link
-function SQL_GET_LINK () {
- // Init link
- $link = null;
-
- // Is it in the globals?
- if (isset($GLOBALS['sql_link'])) {
- // Then take it
- $link = $GLOBALS['sql_link'];
- } // END - if