/** * Populates the given DatabaseObject with dummy data * * @param DatabaseObject $obj * @return void */ protected function populate(DatabaseObject &$obj) { $meta = $obj->meta(); $key = $meta->getKey(); $fields = $meta->getColumnMap(); foreach ($fields as $property => $field) { if ($field == $key && isset($obj->{$property})) { continue; } $def = $meta->getColumnDefinition($field); $type = strtolower(Params::generic($def, 'native_type')); switch ($type) { case 'int': case 'integer': case 'float': case 'currency': case 'decimal': case 'double': case 'real': case 'tinyint': case 'short': case 'long': $obj->{$property} = mt_rand(0, 100); break; case 'date': case 'datetime': case 'timestamp': // Fuzz two weeks around now $window = 1209600; // 14 days * 24 hours * 60 minutes * 60 seconds $time = time() - $window / 2 + mt_rand(0, $window); if ($type == 'date') { $lt = localtime($time, true); $time = mktime(0, 0, 0, $lt['tm_mday'], $lt['tm_mon'] + 1, $lt['tm_year'] + 1900); $lt = null; } $obj->{$property} = $time; break; case 'time': // range is +- 838:59:59, but since this populate thing // isn't really all it could be anyhow, let's just do // positive values $obj->{$property} = mt_rand(1, 839 * 60 * 60 - 1); break; case 'var_string': $obj->{$property} = 'dummy string content ' . uniqid(); break; default: $obj->{$property} = uniqid(); break; } } }
/** * Builds the needed SQL fragment to update or insert fields. * * @param bindByName boolean whether to generate named bind parameters, true by * default. * @param glue mixed if set to null, than an array of columns is returned, * otherwise glue is used to implode the array and a string is returned. * The default is to implode on ', '. * * @return string like "col1=:?, col2=:?" or "col1=:col1, col2=:col2" */ public function getFieldSetSQL($cols = null, $bindByName = true, $glue = ', ') { if (!isset($cols)) { $cols = $this->getAutomaticColumns(); } $set = array(); foreach ($cols as $column) { if ($this->isManualColumn($column)) { continue; } if ($bindByName) { $value = ":{$column}"; } else { $value = '?'; } $def = $this->getColumnDefinition($column); switch (strtolower(Params::generic($def, 'native_type'))) { case 'time': $value = "SEC_TO_TIME({$value})"; break; case 'date': case 'datetime': case 'timestamp': $value = "FROM_UNIXTIME({$value})"; break; } array_push($set, "`{$column}`={$value}"); } if ($glue) { return implode($glue, $set); } else { return $set; } }
public function testGeneric() { $generic = array('existingkey' => 23); $this->assertTrue(23 == Params::generic($generic, 'existingkey'), 'finds key'); $this->assertTrue('default' == Params::generic($generic, 'badkey', 'default'), 'gets default'); }