// Set the link resource
SQL_SET_LINK($linkResource);
-
- // Destroy cache
- unset($GLOBALS['is_sql_link_up']);
}
// SQL select database
// Close link
SQL_SET_LINK(null);
- // Destroy cache
- unset($GLOBALS['is_sql_link_up']);
-
// Return the result
return $close;
}
} // 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))) {
+ // 123 4 43 3 4 4 32 23 4 43 3 4 4 32 23 4 43 3 4 4 3 3 3 3 4 4321
+ if (((!isSqlTableColumnFound($tableName, $columnName)) && (strpos($sql, 'ADD') !== false)) || ((isSqlTableColumnFound($tableName, $columnName)) && (strpos($sql, 'DROP') !== false)) || ((isSqlTableColumnFound($tableName, $columnName)) && (strpos($sql, 'CHANGE') !== false) && ($idx == 4) && (!isSqlTableColumnFound($tableName, $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')) {
+ // 1234 5 54 4 5 5 43 34 5 54 4 5 5 43 3 4 4 32 2 21
+ } elseif ((((isSqlTableColumnFound($tableName, $columnName)) && (strpos($sql, 'ADD') !== false)) || ((isSqlTableColumnFound($tableName, $columnName)) && (strpos($sql, 'DROP') !== false)) || (strpos($sql, 'CHANGE') !== false)) && ($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)) && (strpos($sql, 'DROP') !== false)) {
// 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));
+ // 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 ($noIndex === false) {
// And column name as well
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'tableArray=<pre>' . print_r($tableArray, true) . '</pre>');
} // END - if
// Shall we run it?
- if (!isSqlTableIndexAdded($tableName, $tableArray[3])) {
+ if (!isSqlTableIndexAdded($tableName, $tableArray[3], $keyName)) {
// Send it to the SQL_QUERY() function
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, $sql);
$result = SQL_QUERY($sql, $F, $L, $enableCodes);
// Set it
$GLOBALS['sql_link'] = $link;
+
+ // Re-init cache
+ $GLOBALS['is_sql_link_up'] = is_resource($link);
}
// Checks if the link is up
}
// Check if there is a SQL table created
-function isSqlTableCreated ($table) {
+function isSqlTableCreated ($tableName) {
// 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' LIMIT 1",
- array($table), __FILE__, __LINE__);
+ $result = SQL_QUERY_ESC("SHOW TABLES FROM `{?__DB_NAME?}` WHERE `Tables_in_{?__DB_NAME?}`='{?_MYSQL_PREFIX?}_%s'",
+ 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
+ return $GLOBALS[__FUNCTION__][$tableName];
+}
+
+// Is a table column there?
+function isSqlTableColumnFound ($tableName, $columnName) {
+ // 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];
+ return $GLOBALS[__FUNCTION__][$tableName][$columnName];
}
// Checks depending on the mode if the table is there
-function isSqlTableIndexAdded ($tableName, $mode) {
+function isSqlTableIndexAdded ($tableName, $mode, $keyName) {
// Do we have cache?
if (!isset($GLOBALS[__FUNCTION__][$tableName][$mode])) {
// Show indexes
// 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);
+ $GLOBALS[__FUNCTION__][$tableName][$mode] = true;
} // END - if
// Walk through all