public function findWhere($keys, $values) { $tag = "EntityDAO: findWhere()"; Log::notice("{$tag}: ({$keys}, {$values})"); $blueprint = $this->blueprint; $timezone_offset = $this->timezone_offset_select; $blueprintKey = $this->tableName(); $query = new EntityQuery($blueprint, $timezone_offset); if (!is_array($keys) && !is_array($values)) { // convert non-array arguments into single element arrays $keys = array($keys); $values = array($values); } else { if (is_array($keys) && !is_array($values) || count($keys) != count($values)) { throw new Exception("Length of (key,value) arguments do not match"); } } try { for ($i = 0; $i < count($keys); $i++) { $key = $keys[$i]; $value = $values[$i]; $field = $blueprint->get($key); switch ($field->getDataType()) { case "int": $query->where("{$blueprintKey}.{$key}={$value}"); break; case "datetime": case "time": $query->where("{$blueprintKey}.{$key}=CONVERT_TZ('{$value}', '{$timezone_offset}', '" . BPTimezone::UTC . "')"); break; default: $query->where("{$blueprintKey}.{$key}='{$value}'"); break; } } } catch (Exception $e) { Log::error("{$tag}: Field [{$key}] is not defined by [" . $blueprint->getKey() . "]"); throw $e; } try { $sql = new DatabaseQuery($query->toString()); $sql->doQuery(); $matches = array(); $num_rows = $sql->get_num_rows(); Log::debug("{$tag}: Found {$num_rows} matches"); for ($i = 0; $i < $sql->get_num_rows(); $i++) { $row = $sql->get_next_row(); $entity = new Entity($blueprint); $entity->setId($row->id); $entity->setModified($row->modified); foreach ($blueprint->fields() as $field) { $key = $field->getKey(); $value = $row->{$key}; if ($field->isForeignKey()) { $foreignValueColumn = str_replace(".", "_", $field->getForeignValue()); $foreignValue = $row->{$foreignValueColumn}; $entity->setForeignValue($key, $foreignValue); } switch ($field->getDataType()) { case "binary": if (get_magic_quotes_gpc()) { $value = stripslashes($str); } $lengthKey = $key . "_length"; $length = $row->{$lengthKey}; $entity->length($key, $length); break; } $entity->set($key, $value); } $matches[] = $entity; } return $matches; } catch (Exception $e) { Log::error("{$tag}: [" . $sql->err_code . "] " . $sql->err_message); throw $e; } }
private static function prepareData(Blueprint $blueprint, $where = NULL, array $filters = NULL) { $tag = "EntityExporter::prepareData()"; Log::notice("{$tag}"); /* // BUILD QUERY */ $query = new EntityQuery($blueprint); // WHERE if ($where != NULL) { $query->where($where); } // FILTERS if ($filters != NULL) { foreach ($filters as $key => $value) { if (ereg("^filter_(.+)_(.+)", $key, $regs)) { $filter_field = $regs[1]; $filter_type = $regs[2]; $field = $blueprint->get($filter_field); switch ($field->getDataType()) { case "string": switch ($filter_type) { case "like": $query->where("{$filter_field} LIKE '%{$value}%'"); break; case "equals": $query->where("{$filter_field}='{$value}'"); break; } break; case "int": switch ($filter_type) { case "equals": $query->where("{$filter_field}={$value}"); break; case "min": $query->where("{$filter_field}>={$value}"); break; case "max": $query->where("{$filter_field}<={$value}"); } break; case "decimal": switch ($filter_type) { case "equals": $query->where("{$filter_field}='{$value}'"); break; case "min": $query->where("{$filter_field}>='{$value}'"); break; case "max": $query->where("{$filter_field}<='{$value}'"); } break; case "date": case "datetime": switch ($filter_type) { case "equals": $query->where("{$filter_field}='{$value}'"); break; case "min": $query->where("{$filter_field}>='{$value}'"); break; case "max": $query->where("{$filter_field}<='{$value}'"); } break; case "enum": switch ($filter_type) { case "like": $query->where("{$filter_field} LIKE '%{$value}%'"); break; case "equals": $query->where("{$filter_field}='{$value}'"); break; } break; } // END: switch($field->getDataType()) } // END: if(ereg("^filter_(.+)_(.+)", $key, $regs)) } // END: foreach($filters as $key=>$value) } // END: if($filters != NULL) // Execute Query $sql = new DatabaseQuery($query->toString()); try { $sql->doQuery(); $num_rows = $sql->get_num_rows(); Log::debug("{$tag}: Exporting {$num_rows} rows"); return $sql; } catch (Exception $e) { Log::error("{$tag}: [" . $sql->err_code . "] " . $sql->err_message); throw $e; } }
echo "time = " . $access->get("time") . "<br/>"; echo "<br/>"; echo "<strong>Forcing update in session timezone: {$session_timezone_offset}</strong><br/><br/>"; // Update the Access (force Session timezone) unset($accessDAO); $accessDAO = new EntityDAO($accessBP, $session_timezone_offset); $access->set("time", date("Y-m-d H:i:s")); $access->set("description", "Updated Timezone (with forced session timezone) Test"); $accessDAO->update($access); echo "Updated Access with id {$access_id}<br/>"; echo "<br/>"; unset($access); // Load Access with EntityQuery $accessQuery = new EntityQuery($accessBP); $accessQuery->where("Access.id={$access_id}"); echo "QUERY:<br/>" . $accessQuery->toString() . "<br/><br/>"; $sql = new DatabaseQuery($accessQuery->toString()); $sql->doQuery(); echo "Selected Access with id {$access_id}<br/>"; $row = $sql->get_next_row(); $modified = $row->modified; $time = $row->time; echo "modified = {$modified}<br/>"; echo "time = {$time}<br/>"; echo "<br/>"; unset($row); unset($sql); unset($accessQuery); } catch (Exception $e) { echo "Caught: " . $e->getMessage() . "<br/><br/>"; }