public function typeToString(DataType $type) { if ($type->getId() == DataType::IP) { return 'varchar(19)'; } if ($type->getId() == DataType::IP_RANGE) { return 'varchar(41)'; } return $type->getName(); }
public function typeToString(DataType $type) { switch ($type->getId()) { case DataType::BIGINT: return 'INTEGER'; case DataType::BINARY: return 'BLOB'; } return parent::typeToString($type); }
public function typeToString(DataType $type) { if ($type->getId() == DataType::BINARY) { return 'BLOB'; } if ($type->getId() == DataType::HSTORE) { return 'TEXT'; } if ($type->getId() == DataType::UUID) { return 'CHAR(4)'; } return parent::typeToString($type); }
public function typeToString(DataType $type) { if ($type->getId() == DataType::BINARY) { return 'BYTEA'; } if (defined('POSTGRES_IP4_ENABLED')) { if ($type->getId() == DataType::IP) { return 'ip4'; } if ($type->getId() == DataType::IP_RANGE) { return 'ip4r'; } } return parent::typeToString($type); }
/** * @throws ObjectNotFoundException * @return DBTable **/ public function getTableInfo($table) { static $types = ['time' => DataType::TIME, 'date' => DataType::DATE, 'timestamp' => DataType::TIMESTAMP, 'timestamptz' => DataType::TIMESTAMPTZ, 'timestamp with time zone' => DataType::TIMESTAMPTZ, 'bool' => DataType::BOOLEAN, 'int2' => DataType::SMALLINT, 'int4' => DataType::INTEGER, 'int8' => DataType::BIGINT, 'numeric' => DataType::NUMERIC, 'float4' => DataType::REAL, 'float8' => DataType::DOUBLE, 'varchar' => DataType::VARCHAR, 'bpchar' => DataType::CHAR, 'text' => DataType::TEXT, 'bytea' => DataType::BINARY, 'ip4' => DataType::IP, 'inet' => DataType::IP, 'ip4r' => DataType::IP_RANGE, 'hstore' => DataType::HSTORE, 'uuid' => DataType::UUID, 'json' => DataType::JSON, 'jsonb' => DataType::JSONB, 'tsvector' => null, 'ltree' => null]; try { $res = pg_meta_data($this->link, $table); } catch (BaseException $e) { throw new ObjectNotFoundException("unknown table '{$table}'"); } $table = new DBTable($table); foreach ($res as $name => $info) { Assert::isTrue(array_key_exists($info['type'], $types), 'unknown type "' . $types[$info['type']] . '" found in column "' . $name . '"'); if (empty($types[$info['type']])) { continue; } $column = new DBColumn(DataType::create($types[$info['type']])->setNull(!$info['not null']), $name); $table->addColumn($column); } return $table; }
/** * @return DialectString * FIXME: DBI-result, method works only for PostgreSQL. * Research how to generate series of values in MySQL and implement * this. **/ private function getSeriesGenerator($start, $stop, $step = null) { if (!$step) { $result = SQLFunction::create('generate_series', DBValue::create($start)->castTo(DataType::create(DataType::INTEGER)->getName()), DBValue::create($stop)->castTo(DataType::create(DataType::INTEGER)->getName())); } else { $result = SQLFunction::create('generate_series', DBValue::create($start)->castTo(DataType::create(DataType::INTEGER)->getName()), DBValue::create($stop)->castTo(DataType::create(DataType::INTEGER)->getName()), DBValue::create($step)->castTo(DataType::create(DataType::INTEGER)->getName())); } return $result; }
public function getTableInfo($table) { static $types = ['tinyint' => DataType::SMALLINT, 'smallint' => DataType::SMALLINT, 'int' => DataType::INTEGER, 'mediumint' => DataType::INTEGER, 'bigint' => DataType::BIGINT, 'double' => DataType::DOUBLE, 'decimal' => DataType::NUMERIC, 'char' => DataType::CHAR, 'varchar' => DataType::VARCHAR, 'text' => DataType::TEXT, 'tinytext' => DataType::TEXT, 'mediumtext' => DataType::TEXT, 'date' => DataType::DATE, 'time' => DataType::TIME, 'timestamp' => DataType::TIMESTAMP, 'datetime' => DataType::TIMESTAMP, 'set' => null, 'enum' => null, 'year' => null]; try { $result = $this->queryRaw('SHOW COLUMNS FROM ' . $table); } catch (BaseException $e) { throw new ObjectNotFoundException("unknown table '{$table}'"); } $table = new DBTable($table); while ($row = mysqli_fetch_array($result)) { $name = strtolower($row['Field']); $matches = []; $info = ['type' => null, 'extra' => null]; if (preg_match('~(\\w+)(\\((\\d+?)\\)){0,1}\\s*(\\w*)~', strtolower($row['Type']), $matches)) { $info['type'] = $matches[1]; $info['size'] = $matches[3]; $info['extra'] = $matches[4]; } Assert::isTrue(array_key_exists($info['type'], $types), 'unknown type "' . $types[$info['type']] . '" found in column "' . $name . '"'); if (empty($types[$info['type']])) { continue; } $column = DBColumn::create(DataType::create($types[$info['type']])->setUnsigned(strtolower($info['extra']) == 'unsigned')->setNull(strtolower($row['Null']) == 'yes'), $name)->setAutoincrement(strtolower($row['Extra']) == 'auto_increment')->setPrimaryKey(strtolower($row['Key']) == 'pri'); if ($row['Default']) { $column->setDefault($row['Default']); } $table->addColumn($column); } return $table; }