/** * Writes all data of the defined Value to the XmlWriter. * * You can write it in 3 different ways: * * - <$name type="..." value="..." /> * Is created if $short is boolean TRUE. * * If $short is FALSE you can write in the following 2 ways: * * - <$name type="...">$value</$name> * Is created if $separateElements is boolean FALSE. * - <$name><Type>...</Type><Value>$value</Value></$name> * Is created if $separateElements is boolean TRUE. * * @param \XMLWriter $w The XmlWriter to use. * @param mixed $value The value to write. * @param string $name The name of the element to write * @param boolean $short Use the short notation? (type and value as attributes) * @param boolean $separateElements Write type and value in separate elements, if $short is FALSE */ public static function WriteTypedXmlValue(\XMLWriter $w, $value, string $name, bool $short = true, bool $separateElements = false) { if (!$value instanceof Type) { $value = new Type($value); } $v = null; $t = null; switch ($value->getType()) { case Type::PHP_ARRAY: $v = \serialize($value->getValue()); $t = Type::PHP_ARRAY; break; case Type::PHP_BOOLEAN: $v = $value->getValue() ? 'true' : 'false'; $t = Type::PHP_BOOLEAN; break; case Type::PHP_DOUBLE: case Type::PHP_FLOAT: case Type::PHP_INTEGER: $v = $value->getValue(); $t = $value->getType(); break; case Type::PHP_NULL: $v = ''; $t = Type::PHP_NULL; break; case Type::PHP_RESOURCE: # Ignore some resources break; case Type::PHP_STRING: $v = $value->getValue(); $t = Type::PHP_STRING; break; case Type::PHP_UNKNOWN: $v = $value->getStringValue(); $t = Type::PHP_STRING; break; default: $v = \serialize($value->getValue()); $t = $value->getType(); break; } if (!\is_null($t) && !\is_null($v)) { $w->startElement($name); if ($short) { $w->writeAttribute('type', $t); $w->writeAttribute('value', $v); } else { if ($separateElements) { $w->writeElement('type', $t); $w->writeElement('value', $v); } else { $w->writeAttribute('type', $t); $w->text($v); } } $w->endElement(); } }
/** * Obtain DBMS specific SQL code portion needed to declare a generic type * field to be used in statements like CREATE TABLE. * * @param string $name name the field to be declared. * @param array $field associative array with the name of the properties * of the field being declared as array indexes. Currently, the types * of supported field properties are as follows: * * length * Integer value that determines the maximum length of the text * field. If this argument is missing the field should be * declared to have the longest length allowed by the DBMS. * * default * Text value to be used as default for this field. * * notnull * Boolean flag that indicates whether this field is constrained * to not be set to null. * charset * Text value with the default CHARACTER SET for this field. * collation * Text value with the default COLLATION for this field. * unique * unique constraint * check * column check constraint * * @return string DBMS specific SQL code portion that should be used to declare the column. */ public function getColumnDeclarationSql($name, array $field) { $default = $this->getDefaultValueDeclarationSql($field); $charset = isset($field['charset']) && $field['charset'] ? ' ' . $this->getColumnCharsetDeclarationSql($field['charset']) : ''; $collation = isset($field['collation']) && $field['collation'] ? ' ' . $this->getColumnCollationDeclarationSql($field['collation']) : ''; $notnull = isset($field['notnull']) && $field['notnull'] ? ' NOT NULL' : ''; $unique = isset($field['unique']) && $field['unique'] ? ' ' . $this->getUniqueFieldDeclarationSql() : ''; $check = isset($field['check']) && $field['check'] ? ' ' . $field['check'] : ''; $typeDecl = Type::getType($field['type'])->getSqlDeclaration($field, $this); return '`' . $name . '` ' . $typeDecl . $charset . $default . $notnull . $unique . $check . $collation; }
/** * @covers Geissler\Converter\Model\Type::getType * */ public function testGetType() { $this->assertInstanceOf($this->class, $this->object->setArticle()); $this->assertEquals('article', $this->object->getType()); }