"AUTO_INCREMENT", 'pk' => "PRIMARY KEY", 'unsigned' => "UNSIGNED", ]; } public function databaseName() : string { return $this->database; } public function schemaTable(ConnectionAdapter $parent, $databaseName, string $tableName) /* : ? object */ { return Table::repository(Repository::DEFAULT_ALIAS, $parent)->where($this->escapeIdentifier('table_schema', AdapterInterface::IDENTIFIER_FIELD), $databaseName)->loadOneFromField($this->escapeIdentifier('table_name', AdapterInterface::IDENTIFIER_FIELD), $tableName); } public function mapFieldType(FieldDefinition $field, bool $typeOnly = false) : string { $type = $field->type; $length = $field->length; if ( is_a($type, Entity\Field\Date::class, true) ) { $type = "DATE"; } elseif ( is_a($type, Entity\Field\Time::class, true) ) { $type = "TIME"; } elseif ( is_a($type, \DateTime::class, true) ) { $type = "DATETIME"; } switch($type) { case "bool": $type = "TINYINT"; $length = 1; break; case "array": case "string": if ($length && $length <= 255) { $type = "VARCHAR"; break; } elseif (! $length || ( $length <= 65535 ) ) { $type = "TEXT"; } elseif ( $length <= 16777215 ) { $type = "MEDIUMTEXT"; } elseif ($length <= 4294967295) { $type = "LONGTEXT"; } else { throw new \Exception("A column with size bigger than 4GB cannot be created."); } # Length is unnecessary on TEXT fields unset($length); break; case "float": $type = "DOUBLE"; break; default: $type = strtoupper($type); break; } return $typeOnly ? $type : $type . ( isset($length) ? "($length" . ( ! empty($precision) ? ",$precision" : "" ) . ")" : "" ); } }