-// 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
- reportBug(__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
-
- // Is this is a simple array?
- if ((is_array($columns[0])) && (isset($columns[0]['column']))) {
- // Begin with SQL query
- $sql = 'SELECT ';
-
- // No, it comes from XML, so get it back from it
- $sql .= getSqlPartFromXmlArray($columns);
-
- // Finalize it
- $sql .= " FROM `{?_MYSQL_PREFIX?}_%s` WHERE `%s`='%s' LIMIT 1";
- } else {
- // Yes, 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
- $isAlterIndex = (
- (
- isInString('INDEX', $sql)
- ) || (
- isInString('KEY', $sql)
- ) || (
- isInString('FULLTEXT', $sql)
- ) || (
- isInString('UNIQUE', $sql)
- )
- );
-
- // Extract table name
- $tableArray = explode(' ', $sql);
- $tableName = str_replace('`', '', $tableArray[2]);
-
- // Debug log
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sql=' . $sql . ',tableName=' . $tableName . ',tableArray=<pre>' . print_r($tableArray, TRUE) . '</pre>,isAlterIndex=' . intval($isAlterIndex));
-
- // Shall we add/drop?
- 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
- if (!isset($tableArray[$idx])) {
- // Debug log this
- logDebugMessage(__FUNCTION__, __LINE__, 'columnName=' . $columnName . ',idx=' . $idx . ',sql=' . $sql . ' is missing!');
- break;
- } // END - if
-
- // And column name as well
- $columnName = $tableArray[$idx];
-
- // Debug log
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'columnName=' . $columnName . ',idx=' . $idx . ',sql=' . $sql . ',hasZeroNums=' . intval(ifSqlColumnExists($tableName, $columnName)));
-
- // Is there no entry on ADD or an entry on DROP/CHANGE?
- if (((!ifSqlColumnExists($tableName, $columnName)) && (isInString('ADD', $sql))) || ((ifSqlColumnExists($tableName, $columnName)) && ((isInString('DROP', $sql)) || ((isInString('CHANGE', $sql)) && ($idx == 4) && ((!ifSqlColumnExists($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;
- } elseif ((((ifSqlColumnExists($tableName, $columnName)) && (isInString('ADD', $sql))) || ((!ifSqlColumnExists($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 ((!ifSqlColumnExists($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(ifSqlColumnExists($tableName, $columnName)) . '');
- }
- } // END - foreach
- } 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 : ifSqlColumnExists($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($tableArray[4]), array('INDEX', 'UNIQUE', 'KEY', 'FULLTEXT'))) {
- // Init loop
- $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=' . $keyName . 'begin=' . $begin . ' - BETWEEN');
-
- // Remove brackes
- $keyName = str_replace(array('(', ')'), array('', ''), $keyName);
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'keyName=' . $keyName . 'begin=' . $begin . ' - AFTER');
-
- // Continue
- $begin++;
- } // END while
- } // END - if
-
- // Shall we run it?
- //* 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
- //* 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;