* -------------------------------------------------------------------- *
* Kurzbeschreibung : SQL-Funktionen fuer Queries *
* -------------------------------------------------------------------- *
- * $Revision:: $ *
- * $Date:: $ *
- * $Tag:: 0.2.1-FINAL $ *
- * $Author:: $ *
- * -------------------------------------------------------------------- *
* Copyright (c) 2003 - 2009 by Roland Haeder *
- * Copyright (c) 2009 - 2013 by Mailer Developer Team *
+ * Copyright (c) 2009 - 2016 by Mailer Developer Team *
* For more information visit: http://mxchange.org *
* *
* This program is free software; you can redistribute it and/or modify *
// Add an SQL to the list
function addSql ($sql) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("sql=%s, count=%d", $sql, countSqls()));
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf('sql=%s, count=%d', $sql, countSqls()));
array_push($GLOBALS['sqls']['generic'], $sql);
}
if (isSqlsInitialized()) {
// Then count it
$count = count($GLOBALS['sqls']);
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("count=%d", $count));
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf('count=%d', $count));
} // END - if
// Return it
}
// Checks whether the SQLs array is filled
-function isSqlsValid () {
+function ifSqlsRegistered () {
//* DEBUG: */ debugOutput(__FUNCTION__ . ':' . intval(isSqlsInitialized()) . '/' . countSqls() . '/' . getCurrentExtensionName());
return (
(
// "Unset" the link
unsetSqlLinkUp(__FUNCTION__, __LINE__);
- // Do this only if link is down
- assert(!isSqlLinkUp());
-
// Is the configuration data set?
if ((!empty($GLOBALS['mysql']['host'])) && (!empty($GLOBALS['mysql']['login'])) && (!empty($GLOBALS['mysql']['dbase']))) {
// Remove cache
// Is the file readable?
if (!isFileReadable($FQFN)) {
// Not found, which is bad
- reportBug(__FUNCTION__, __LINE__, sprintf("SQL dump %s/%s.sql is not readable.", $path, $dumpName));
+ reportBug(__FUNCTION__, __LINE__, sprintf('SQL dump %s/%s.sql is not readable.', $path, $dumpName));
} // END - if
// Then read it
// Escape all data
foreach ($data as $key => $value) {
+ //* DEBUG: */ logDebugMessage(basename($file) . '/' . __FUNCTION__, $line . '/' . __LINE__, 'key=' . $key . ',value=' . $value . ',run=' . intval($run) . ',strip=' . intval($strip) . ',secure=' . intval($secure));
$dataSecured[$key] = sqlEscapeString($value, $secure, $strip);
+ //* DEBUG: */ logDebugMessage(basename($file) . '/' . __FUNCTION__, $line . '/' . __LINE__, 'dataSecured[key]=' . $dataSecured[$key]);
} // END - foreach
// Generate query
// 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",
+ reportBug(__FUNCTION__, __LINE__, sprintf('columns is not an array. %s != array, file=%s, line=%s',
gettype($columns),
basename($file),
$line
} // 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 : ifSqlTableColumnExists($columnName)), $file, $line));
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf('Skipped FULLTEXT: sql=%s,tableName=%s,hasZeroNums=%d,file=%s,line=%s', $sql, $tableName, intval((is_bool($result)) ? 0 : ifSqlTableColumnExists($columnName)), $file, $line));
} elseif ($isAlterIndex === TRUE) {
// And column name as well without backticks
$keyName = str_replace('`', '', $tableArray[5]);
}
// Setter for link
+// Do *not* add debug lines here. This will cause and endless loop
function setSqlLink ($file, $line, $link) {
- //* DEBUG: */ logDebugMessage($file . ':' . __FUNCTION__, $line . ':' . __LINE__, 'link[]=' . gettype($link) . ' - ENTERED!');
// Is this a resource or null?
- if ((ifFatalErrorsDetected()) && (isInstallationPhase())) {
+ if ((ifFatalErrorsDetected()) && (isInstaller())) {
// This may happen in installation phase
- //* DEBUG: */ logDebugMessage($file . ':' . __FUNCTION__, $line . ':' . __LINE__, 'Some fatal errors detected in installation phase.');
return;
- } elseif ((!is_resource($link)) && (!is_null($link))) {
+ } elseif ((!is_resource($link)) && (!is_null($link)) && (!$link instanceof mysqli)) {
// This should never happen!
- reportBug($file . ':' . __FUNCTION__, $line . ':' . __LINE__, sprintf("Type of link is not resource or null, type=%s", gettype($link)));
+ reportBug($file . ':' . __FUNCTION__, $line . ':' . __LINE__, sprintf('Type of link is not resource, null or mysqli class, type=%s', gettype($link)));
} // END - if
// Set it
$GLOBALS['__sql_link'] = $link;
// Re-init cache
- $GLOBALS['__is_sql_link_up'] = is_resource($link);
- //* DEBUG: */ logDebugMessage($file . ':' . __FUNCTION__, $line . ':' . __LINE__, '__is_sql_link_up=' . intval($GLOBALS['__is_sql_link_up']) . ' - EXIT!');
+ $GLOBALS['__is_sql_link_up'] = ((function_exists('isValidSqlLink')) && (isValidSqlLink($link)));
}
// Checks if the link is up
// Is there cached this?
if (!isset($GLOBALS['__is_sql_link_up'])) {
// Something bad went wrong
- reportBug(__FUNCTION__, __LINE__, 'Called before SQL_SET_LINK() was called!');
+ reportBug(__FUNCTION__, __LINE__, 'Called before setSqlLink() was called!');
} // END - if
// Return the result
}
// Wrapper function to make code more readable
-function ifSqlHasZeroNums ($result) {
+function ifSqlHasZeroNumRows ($result) {
// Just pass it through
return (sqlNumRows($result) === 0);
}
// Is it already cached?
if (!isset($GLOBALS['sql_strings']['' . $sqlString . ''])) {
// Preserve escaping and compile URI codes+config+expression code
- $sqlString2 = FILTER_COMPILE_EXPRESSION_CODE(FILTER_COMPILE_CONFIG($sqlString));
+ $sqlString2 = str_replace(chr(92), '{BACKLASH}', $sqlString);
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlString2=' . $sqlString2);
+ $sqlString2 = FILTER_COMPILE_EXPRESSION_CODE(FILTER_COMPILE_CONFIG($sqlString2));
// Debug message
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlString2=' . $sqlString2);
- // Do final compilation and revert {ESCAPE}
+ // Do final compilation and revert {BACKSLASH}
$GLOBALS['sql_strings']['' . $sqlString . ''] = doFinalCompilation($sqlString2, FALSE, $enableCodes);
+ $GLOBALS['sql_strings']['' . $sqlString . ''] = str_replace('{BACKLASH}', chr(92), $GLOBALS['sql_strings']['' . $sqlString . '']);
} else {
// Log message
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlString=' . $sqlString . ' - CACHE!');
}
// Debug message
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlString=' . $sqlString . ',enableCodes=' . intval($enableCodes) . ',sql_strings=' . $GLOBALS['sql_strings']['' . $sqlString . ''] . ' - EXIT!');
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'sqlString=' . $sqlString . ',enableCodes=' . intval($enableCodes) . ',returned sql_string=' . $GLOBALS['sql_strings']['' . $sqlString . ''] . ' - EXIT!');
// Return it
return $GLOBALS['sql_strings']['' . $sqlString . ''];
array($tableName), __FUNCTION__, __LINE__);
// Is a link there?
- if (!is_resource($result)) {
+ if (!isValidSqlResult($result)) {
// Is installation phase?
- if (isInstallationPhase()) {
+ if (isInstaller()) {
// Then silently abort here
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'result[]=' . gettype($result) . ',isLinkUp=' . intval(isSqlLinkUp()) . ',tableName=' . $tableName . ' - Returning FALSE ...');
return FALSE;
if (!ifSqlTableExists($tableName)) {
// Then abort here
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Table ' . $tableName . ' does not exist, columnName=' . $columnName . ',forceFound=' . intval($forceFound));
- return (($forceFound === FALSE) && (isInstallationPhase()));
+ return (($forceFound === FALSE) && (isInstaller()));
} // END - if
// Get column information
), __FUNCTION__, __LINE__);
// Is a link there?
- if (!is_resource($result)) {
+ if (!isValidSqlResult($result)) {
// Is installation phase?
- if (isInstallationPhase()) {
+ if (isInstaller()) {
// Then silently abort here
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'result[]=' . gettype($result) . ',isLinkUp=' . intval(isSqlLinkUp()) . ',tableName=' . $tableName . ',columnName=' . $columnName . ' - Returning FALSE ...');
return $forceFound;
} // END - if
// Determine it
- $doesExist = (!ifSqlHasZeroNums($result));
+ $doesExist = (!ifSqlHasZeroNumRows($result));
// Free result
sqlFreeResult($result);
if (!ifSqlTableExists($tableName)) {
// Then abort here
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Table ' . $tableName . ' does not exist, keyName=' . $keyName . ',forceFound=' . intval($forceFound));
- return (($forceFound === FALSE) && (isInstallationPhase()));
+ return (($forceFound === FALSE) && (isInstaller()));
} // END - if
// Show indexes
$result = sqlQueryEscaped("SHOW INDEX FROM `%s`", array($tableName), __FUNCTION__, __LINE__);
// Is a link there?
- if (!is_resource($result)) {
+ if (!isValidSqlResult($result)) {
// Is installation phase?
- if (isInstallationPhase()) {
+ if (isInstaller()) {
// Then silently abort here
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'result[]=' . gettype($result) . ',isLinkUp=' . intval(isSqlLinkUp()) . ',tableName=' . $tableName . ',keyName=' . $keyName . ' - Returning FALSE ...');
return $forceFound;
$result = sqlQuery('SHOW ENGINES', __FUNCTION__, __LINE__);
// Are there entries? (Bad if not)
- if (!ifSqlHasZeroNums($result)) {
+ if (!ifSqlHasZeroNumRows($result)) {
// Load all and check for active entries
while ($content = sqlFetchArray($result)) {
// Debug message
return $engines;
}
+// "Getter" for result from given table and field/type LIKEs
+function sqlGetResultFromLikeColumnsType ($tableName, $field, $type) {
+ // The table should be there
+ assert(ifSqlTableExists($tableName));
+
+ // Default no field set
+ $fieldSql = '';
+ if (!empty($field)) {
+ // Then use it
+ $fieldSql = "`Field` LIKE '" . $field . "' AND";
+ } // END - if
+
+ // Show them
+ return sqlQueryEscaped("SHOW COLUMNS FROM
+ `{?_MYSQL_PREFIX?}_%s`
+WHERE
+ " . $fieldSql . "
+ `Type` LIKE '%s%%'",
+ array(
+ $tableName,
+ $type
+ ), __FUNCTION__, __LINE__
+ );
+}
+
+// Log SQL errors to debug.log in installation phase or call reportBug()
+function logSqlError ($file, $line, $message) {
+ // Remember plain error in last_sql_error
+ setSqlError($file, $line, $message);
+
+ // Is login set?
+ if (!empty($GLOBALS['mysql']['login'])) {
+ // Secure login name in message
+ $message = str_replace($GLOBALS['mysql']['login'], '***', $message);
+ } // END - if
+
+ // Is database password set?
+ if (!empty($GLOBALS['mysql']['password'])) {
+ // Secure password in message
+ $message = str_replace($GLOBALS['mysql']['password'], '***', $message);
+ } // END - if
+
+ // Is database name set?
+ if (!empty($GLOBALS['mysql']['dbase'])) {
+ // Secure database name in message
+ $message = str_replace($GLOBALS['mysql']['dbase'], '***', $message);
+ } // END - if
+
+ // Is there installation phase?
+ if (isInstaller()) {
+ /*
+ * In installation phase, we don't want SQL errors abort e.g. connection
+ * tests, so just log it away.
+ */
+ logDebugMessage($file, $line, $message);
+ } else {
+ // Regular mode, then call reportBug()
+ reportBug($file, $line, $message);
+ }
+}
+
// [EOF]
?>