<?php
 
/**
 
 * @package DATA
 
 */
 
 
/**
 
 * SQL type representation.
 
 * 
 
 * Right now there will be no support for arbitrary size math
 
 * operations, but these will be supported by the member
 
 * functions in the corresponding classes. Outboxing into native
 
 * php types and doing the math operations outside is discouraged.
 
 * 
 
 * All classes will provide __toString() functionality for automatic
 
 * outboxing into string representation. This will allow character
 
 * types to be used in the usual string context without having to
 
 * explicitly outbox the value.
 
 * 
 
 */
 
abstract class DATA_SQLType {
 
    /**
 
     * Flags the type to nullable or not nullable.
 
     * @var boolean
 
     */
 
    private $nullable;
 
    
 
    /**
 
     * Flags the value as null.
 
     * @var boolean
 
     */
 
    private $isnull;
 
    
 
    /**
 
     * Internal constructor. Sets the type to nullable or not nullable.
 
     * 
 
     * @param boolean $nullable True if the type is nullable.
 
     * @param boolean $isnull True if the initial value is null.
 
     */
 
    protected function __construct($nullable, $isnull) {
 
        $this->nullable = $nullable;
 
        $this->isnull = false;
 
        if ($isnull) $this->setNull();
 
    }
 
    
 
    /**
 
     * Automatically outboxes the value into a native php string.
 
     * 
 
     * @return string String representation of the value.
 
     */
 
    abstract public function __toString();
 
    
 
    /**
 
     * Indicates if this type is nullable.
 
     * 
 
     * @return boolean True if the type is nullable.
 
     */
 
    public function isNullable() {
 
        return $this->nullable;
 
    }
 
    
 
    /**
 
     * Indicates if this value is null.
 
     * 
 
     * Optionally, can be used statically passing the value by parameter.
 
     * 
 
     * @return boolean True if the value is null.
 
     */
 
    public function isNull() {
 
        if (isset($this)) {
 
            return $this->isnull;
 
        }
 
        $value = func_get_arg(0);
 
        if ($value instanceof DATA_SQLType) {
 
            return $value->isNull();
 
        } else {
 
            return is_null($value);
 
        }
 
    }
 
    
 
    /**
 
     * Nulls this value.
 
     * 
 
     * Throws {@link DATA_NotNullable}.
 
     */
 
    public function setNull() {
 
        if (!$this->nullable) {
 
            throw new DATA_NotNullable();
 
        }
 
        $this->isnull = true;
 
    }
 
    
 
    /**
 
     * Internally flag the value as not null.
 
     */
 
    protected function setNotNull() {
 
        $this->isnull = false;
 
    }
 
    
 
    /**
 
     * Outboxes the value into a php native value.
 
     * 
 
     * @return mixed Php native value.
 
     */
 
    public function outbox() {
 
        if ($this->isnull) return null;
 
        else return $this->__toString();
 
    }
 
}
 
?>
 
 
 |