/** * Builds a basic query, returns string. * * @see http://api.drupal.org/api/function/db_query/6 * * @param $query * A string containing an SQL query. * @param ... * A variable number of arguments which are substituted into the query * using printf() syntax. Instead of a variable number of query arguments, * you may also pass a single array containing the query arguments. * * Valid %-modifiers are: %s, %d, %f, %b (binary data, do not enclose * in '') and %%. * * NOTE: using this syntax will cast NULL and FALSE values to decimal 0, * and TRUE values to decimal 1. * * @return * String of query that would have been run */ function my_return_query_string($query) { $args = func_get_args(); array_shift($args); $query = db_prefix_tables($query); if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax $args = $args[0]; } _db_query_callback($args, TRUE); $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query); return $query; }
function db_query($sql) { $args = func_get_args(); array_shift($args); if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax $args = $args[0]; } _db_query_callback($args, TRUE); $sql = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $sql); $result = @mysql_query($sql) or die('MySQL Error:<br />' . mysql_error()); return $result; }
function db_query($query) { global $quert_count; ++$quert_count; db_connect(); $args = func_get_args(); array_shift($args); if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax $args = $args[0]; } _db_query_callback($args, TRUE); $query = preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query); //echo $query; return _db_query($query); }
/** * 單純要組 SQL String 用 */ function db_query_string($db, $query) { $args = array_slice(func_get_args(), 2); if (isset($args[0]) and is_array($args[0])) { // 'All arguments in one array' syntax $args = $args[0]; } _db_query_callback($args, TRUE); return preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $query); }
/** * Compute the weekly summaries for the week starting at the given timestamp. * * @param $timestamp * UNIX timestamp indicating the last time weekly stats were processed. */ function project_usage_process_weekly($timestamp) { watchdog('project_usage', 'Starting to process weekly usage data.'); $time_0 = time(); // Get all the weeks since we last ran. $weeks = project_usage_get_weeks_since($timestamp); // Skip the last entry since it's the current, incomplete week. $count = count($weeks) - 1; for ($i = 0; $i < $count; $i++) { $start = $weeks[$i]; $end = $weeks[$i + 1]; $date = format_date($start, 'custom', 'Y-m-d'); $time_1 = time(); // Try to compute the usage tallies per project and per release. If there // is a problem--perhaps some rows existed from a previous, incomplete // run that are preventing inserts, throw a watchdog error. $sql = "INSERT INTO {project_usage_week_project} (nid, timestamp, tid, count) SELECT pid, %d, tid, COUNT(DISTINCT site_key) FROM {project_usage_day} WHERE timestamp >= %d AND timestamp < %d AND pid <> 0 GROUP BY pid, tid"; $query_args = array($start, $start, $end); $result = db_query($sql, $query_args); $time_2 = time(); _db_query_callback($query_args, TRUE); $substitutions = array('!date' => $date, '%query' => preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $sql), '!projects' => format_plural(db_affected_rows(), '1 project', '@count projects'), '!delta' => format_interval($time_2 - $time_1)); if (!$result) { watchdog('project_usage', 'Query failed inserting weekly project tallies for !date, query: %query (!delta).', $substitutions, WATCHDOG_ERROR); } else { watchdog('project_usage', 'Computed weekly project tallies for !date for !projects (!delta).', $substitutions); } $sql = "INSERT INTO {project_usage_week_release} (nid, timestamp, count) SELECT nid, %d, COUNT(DISTINCT site_key) FROM {project_usage_day} WHERE timestamp >= %d AND timestamp < %d AND nid <> 0 GROUP BY nid"; $query_args = array($start, $start, $end); $result = db_query($sql, $query_args); $time_3 = time(); _db_query_callback($query_args, TRUE); $substitutions = array('!date' => $date, '!releases' => format_plural(db_affected_rows(), '1 release', '@count releases'), '%query' => preg_replace_callback(DB_QUERY_REGEXP, '_db_query_callback', $sql), '!delta' => format_interval($time_3 - $time_2)); if (!$result) { watchdog('project_usage', 'Query failed inserting weekly release tallies for !date, query: %query (!delta).', $substitutions, WATCHDOG_ERROR); } else { watchdog('project_usage', 'Computed weekly release tallies for !date for !releases (!delta).', $substitutions); } } // Remove any tallies that have aged out. $time_4 = time(); $project_life = variable_get('project_usage_life_weekly_project', PROJECT_USAGE_YEAR); db_query("DELETE FROM {project_usage_week_project} WHERE timestamp < %d", $now - $project_life); $time_5 = time(); $substitutions = array('!rows' => format_plural(db_affected_rows(), '1 old weekly project row', '@count old weekly project rows'), '!delta' => format_interval($time_5 - $time_4)); watchdog('project_usage', 'Removed !rows (!delta).', $substitutions); $release_life = variable_get('project_usage_life_weekly_release', 26 * PROJECT_USAGE_WEEK); db_query("DELETE FROM {project_usage_week_release} WHERE timestamp < %d", $now - $release_life); $time_6 = time(); $substitutions = array('!rows' => format_plural(db_affected_rows(), '1 old weekly release row', '@count old weekly release rows'), '!delta' => format_interval($time_6 - $time_5)); watchdog('project_usage', 'Removed !rows (!delta).', $substitutions); watchdog('project_usage', 'Completed weekly usage data processing (total time: !delta).', array('!delta' => format_interval($time_6 - $time_0))); }