SQLBuilder\Driver\BaseDriver::deflate PHP Метод

deflate() публичный Метод

For pgsql and mysql sql statement, we use TRUE or FALSE for boolean type. FOr sqlite sql statement: we use 1 or 0 for boolean type.
public deflate ( $value, SQLBuilder\ArgumentArray $args = NULL )
$args SQLBuilder\ArgumentArray
    public function deflate($value, ArgumentArray $args = NULL)
    {
        if ($this->alwaysBindValues) {
            if ($value instanceof Raw) {
                return $value->__toString();
            } elseif ($value instanceof Bind) {
                if ($args) {
                    $args->bind($value);
                }
                return $value->getMarker();
            } elseif ($value instanceof ParamMarker) {
                if ($args) {
                    $args->bind(new Bind($value->getMarker(), NULL));
                }
                return $value->getMarker();
            } else {
                $bind = $this->allocateBind($value);
                if ($args) {
                    $args->bind($bind);
                }
                return $bind->getMarker();
            }
        }
        if ($value === NULL) {
            return 'NULL';
        } elseif ($value === true) {
            return 'TRUE';
        } elseif ($value === false) {
            return 'FALSE';
        } elseif (is_integer($value)) {
            return intval($value);
        } elseif (is_float($value)) {
            return floatval($value);
        } elseif (is_string($value)) {
            return $this->quote($value);
        } elseif (is_callable($value)) {
            return call_user_func($value);
        } elseif (is_object($value)) {
            if ($value instanceof Bind) {
                if ($args) {
                    $args->bind($value);
                }
                if ($this->paramMarkerType === self::QMARK_PARAM_MARKER) {
                    return '?';
                } elseif ($this->paramMarkerType === self::NAMED_PARAM_MARKER) {
                    return $value->getMarker();
                } else {
                    return $value->getMarker();
                }
            } elseif ($value instanceof ParamMarker) {
                if ($args) {
                    $args->bind(new Bind($value->getMarker(), NULL));
                }
                if ($this->paramMarkerType === self::QMARK_PARAM_MARKER) {
                    return '?';
                } elseif ($this->paramMarkerType === self::NAMED_PARAM_MARKER) {
                    return $value->getMarker();
                } else {
                    return $value->getMarker();
                }
                return $value->getMarker();
            } elseif ($value instanceof Unknown) {
                return 'UNKNOWN';
            } else {
                if ($value instanceof DateTime) {
                    // convert DateTime object into string
                    // return $this->quote($value->format(DateTime::ISO8601));
                    return $this->quote($value->format(DateTime::ATOM));
                    // sqlite use ATOM format
                } elseif ($value instanceof ToSqlInterface) {
                    return $value->toSql($this, $args);
                } elseif ($value instanceof Raw) {
                    return $value->__toString();
                } else {
                    throw new LogicException('Unsupported class: ' . get_class($value));
                }
            }
        } elseif (is_array($value)) {
            // error_log("LazyRecord: deflating array type value", 0);
            return $value[0];
        } else {
            throw new LogicException('BaseDriver::deflate: Unsupported variable type');
        }
        return $value;
    }

Usage Example

Пример #1
0
 public function toSql(BaseDriver $driver, ArgumentArray $args)
 {
     // XXX: $pat can be a Bind object
     $isBind = $this->pat instanceof Bind;
     $pat = $isBind ? $this->pat->getValue() : $this->pat;
     switch ($this->criteria) {
         case Criteria::CONTAINS:
             $pat = '%' . $pat . '%';
             break;
         case Criteria::STARTS_WITH:
             $pat = $pat . '%';
             break;
         case Criteria::ENDS_WITH:
             $pat = '%' . $pat;
             break;
         case Criteria::EXACT:
             $pat = $pat;
             break;
         default:
             $pat = '%' . $pat . '%';
             break;
     }
     if ($isBind) {
         $this->pat->setValue($pat);
     } else {
         $this->pat = $pat;
     }
     return $this->exprStr . ' LIKE ' . $driver->deflate($this->pat, $args);
 }
All Usage Examples Of SQLBuilder\Driver\BaseDriver::deflate