protected function buildTable() { $query = 'UPDATE ' . $this->table . ' SET' . PHP_EOL; $fields = array(); foreach ($this->data as $field => $value) { $fields[] = Query::enclose($field) . ' = ' . $value; } $query .= implode(', ' . PHP_EOL, $fields); return $query; }
public function getCreateSQL($data, array $options = array()) { extract($this->meta); $query = false; $field_data = array(); $value_data = array(); $parameters = array(); $non_parameter_aware = array_key_exists('non_parameter', $options); $non_parameters = array_key_exists('non_parameter', $options) ? $options['non_parameter'] : array(); foreach ($fields as $name => $field_options) { if (!is_array($field_options)) { $field_options = array('type' => $field_options); } if (array_key_exists($name, $data)) { $type = array_key_exists('type', $field_options) ? $field_options['type'] : 'string'; $field_data[] = '`' . $name . '`'; $do_add = true; $just_add = false; $value = null; switch (true) { case $non_parameter_aware && preg_match(REGEX_SQL_FUNCTION, strtoupper($data[$name])): $do_add = false; $just_add = true; $value = $data[$name]; break; case substr($type, 0, 8) == 'password': if (!is_null($data[$name])) { if (is_null($value)) { $value = $data[$name]; } } break; case $type == 'lastmodified': $do_add = false; break; case $type == 'dateadded': $do_add = false; $just_add = true; $value = 'NOW()'; break; case in_array($name, $non_parameters): $do_add = false; $just_add = true; $value = $data[$name]; break; default: $value = $data[$name]; break; } if ($do_add) { $parameters[':' . $name] = $value; $value_data[] = ':' . $name; } else { if ($just_add) { $value_data[] = $value; } } } } if (count($field_data)) { if (count($value_data) == count($field_data)) { $field_str = implode(', ', $field_data); $value_str = implode(', ', $value_data); $query = 'INSERT INTO ' . $this->getSource() . " ({$field_str}) VALUES ({$value_str})"; if (!empty($options['on_duplicate'])) { if (is_array($options['on_duplicate'])) { $temp = array(); //This is potentially buggy if name isn't a simple string... foreach ($options['on_duplicate'] as $name => $value) { $parameters[':update_' . $name] = $value; $temp[] = Query::enclose($name) . ' = :update_' . $name; } $query .= ' ON DUPLICATE KEY UPDATE ' . implode(', ', $temp); //Use this for fields that get's changed in process(); } else { if (array_key_exists($options['on_duplicate'], $fields)) { $query .= ' ON DUPLICATE KEY UPDATE ' . Query::enclose($options['on_duplicate']) . ' = :' . $options['on_duplicate']; } else { $query .= ' ON DUPLICATE KEY UPDATE ' . $options['on_duplicate']; } } } else { if (!empty($options['ignore'])) { $query = preg_replace('/^INSERT /', 'INSERT IGNORE ', $query); } } } else { throw new Exception('Insert Query Fields and Values don\'t match'); } } return array($query, count($parameters) ? $parameters : false); }
function join($type, $table, $conditions, array $options = array()) { $this->query = false; $type = strtoupper($type); if (!in_array($type, array('RIGHT', 'LEFT', 'INNER', 'OUTER'))) { throw new Exception('Unsupported Join Type'); } if (!is_array($conditions)) { $conditions = array($conditions); } if (!array_key_exists($type, $this->joins)) { $this->joins[$type] = array(); } if ($table instanceof Query) { $table = $table->__toString(); if (array_key_exists('alias', $options)) { $table = '(' . $table . ') AS ' . Query::enclose($options['alias']); } else { trigger_error('Joined sub queries should have aliases', E_USER_ERROR); } } else { $table = Query::getTable($table); if (array_key_exists('alias', $options)) { $table = Query::enclose($table) . ' AS ' . Query::enclose($options['alias']); } } if (array_key_exists($table, $this->joins[$type])) { $this->joins[$type][$table] = array_merge($this->joins[$type][$table], $conditions); } else { $this->joins[$type][$table] = $conditions; } return $this; }