Example #1
0
 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;
 }
Example #2
0
 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);
 }
Example #3
0
 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;
 }