mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-22 05:15:29 +09:00
Fix handling of empty string with default value in INSERT/UPDATE queries
This commit is contained in:
parent
c588d02a22
commit
ee1ea9729c
1 changed files with 33 additions and 12 deletions
|
|
@ -41,14 +41,20 @@ class VariableBase
|
||||||
}
|
}
|
||||||
elseif ($this->var && Query::isValidVariable($args[$this->var], $this instanceof ColumnWrite))
|
elseif ($this->var && Query::isValidVariable($args[$this->var], $this instanceof ColumnWrite))
|
||||||
{
|
{
|
||||||
$this->filterValue($args[$this->var]);
|
|
||||||
if ($args[$this->var] instanceof EmptyString || $args[$this->var] instanceof NullValue)
|
if ($args[$this->var] instanceof EmptyString || $args[$this->var] instanceof NullValue)
|
||||||
{
|
{
|
||||||
|
$this->filterValue('');
|
||||||
$value = strval($args[$this->var]);
|
$value = strval($args[$this->var]);
|
||||||
$is_expression = true;
|
$is_expression = true;
|
||||||
}
|
}
|
||||||
|
elseif ($args[$this->var] === '')
|
||||||
|
{
|
||||||
|
$this->filterValue($args[$this->var]);
|
||||||
|
list($is_expression, $value) = $this->getDefaultValue();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
$this->filterValue($args[$this->var]);
|
||||||
$value = $args[$this->var];
|
$value = $args[$this->var];
|
||||||
$is_expression = false;
|
$is_expression = false;
|
||||||
}
|
}
|
||||||
|
|
@ -267,8 +273,15 @@ class VariableBase
|
||||||
{
|
{
|
||||||
if ($this->var && Query::isValidVariable($args[$this->var], $this instanceof ColumnWrite))
|
if ($this->var && Query::isValidVariable($args[$this->var], $this instanceof ColumnWrite))
|
||||||
{
|
{
|
||||||
$is_expression = false;
|
if ($args[$this->var] === '')
|
||||||
$value = $args[$this->var];
|
{
|
||||||
|
list($is_expression, $value) = $this->getDefaultValue();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$is_expression = false;
|
||||||
|
$value = $args[$this->var];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
elseif ($this->default !== null)
|
elseif ($this->default !== null)
|
||||||
{
|
{
|
||||||
|
|
@ -341,48 +354,56 @@ class VariableBase
|
||||||
*/
|
*/
|
||||||
public function filterValue($value)
|
public function filterValue($value)
|
||||||
{
|
{
|
||||||
|
// Don't apply a filter if there is no variable.
|
||||||
|
$column = isset($this->column) ? $this->column : $this->name;
|
||||||
|
$filter = isset($this->filter) ? $this->filter : '';
|
||||||
|
if (strval($value) === '')
|
||||||
|
{
|
||||||
|
$filter = '';
|
||||||
|
}
|
||||||
|
|
||||||
// Apply filters.
|
// Apply filters.
|
||||||
switch (isset($this->filter) ? $this->filter : '')
|
switch ($filter)
|
||||||
{
|
{
|
||||||
case 'email':
|
case 'email':
|
||||||
case 'email_address':
|
case 'email_address':
|
||||||
if (!preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/', $value))
|
if (!preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/', $value))
|
||||||
{
|
{
|
||||||
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $this->column . ' must contain a valid e-mail address');
|
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $column . ' must contain a valid e-mail address');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'homepage':
|
case 'homepage':
|
||||||
case 'url':
|
case 'url':
|
||||||
if (!preg_match('/^(http|https)+(:\/\/)+[0-9a-z_-]+\.[^ ]+$/i', $value))
|
if (!preg_match('/^(http|https)+(:\/\/)+[0-9a-z_-]+\.[^ ]+$/i', $value))
|
||||||
{
|
{
|
||||||
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $this->column . ' must contain a valid URL');
|
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $column . ' must contain a valid URL');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'userid':
|
case 'userid':
|
||||||
case 'user_id':
|
case 'user_id':
|
||||||
if (!preg_match('/^[a-zA-Z]+([_0-9a-zA-Z]+)*$/', $value))
|
if (!preg_match('/^[a-zA-Z]+([_0-9a-zA-Z]+)*$/', $value))
|
||||||
{
|
{
|
||||||
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $this->column . ' must contain a valid user ID');
|
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $column . ' must contain a valid user ID');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'number':
|
case 'number':
|
||||||
case 'numbers':
|
case 'numbers':
|
||||||
if (!preg_match('/^(-?)[0-9]+(,\-?[0-9]+)*$/', is_array($value) ? implode(',', $value) : $value))
|
if (!preg_match('/^(-?)[0-9]+(,\-?[0-9]+)*$/', is_array($value) ? implode(',', $value) : $value))
|
||||||
{
|
{
|
||||||
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $this->column . ' must contain a valid number');
|
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $column . ' must contain a valid number');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'alpha':
|
case 'alpha':
|
||||||
if (!ctype_alpha($value))
|
if (!ctype_alpha($value))
|
||||||
{
|
{
|
||||||
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $this->column . ' must contain only alphabets');
|
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $column . ' must contain only alphabets');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'alnum':
|
case 'alnum':
|
||||||
case 'alpha_number':
|
case 'alpha_number':
|
||||||
if (!ctype_alnum($value))
|
if (!ctype_alnum($value))
|
||||||
{
|
{
|
||||||
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $this->column . ' must contain only alphanumeric characters');
|
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $column . ' must contain only alphanumeric characters');
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -391,11 +412,11 @@ class VariableBase
|
||||||
$length = is_scalar($value) ? iconv_strlen($value, 'UTF-8') : (is_countable($value) ? count($value) : 1);
|
$length = is_scalar($value) ? iconv_strlen($value, 'UTF-8') : (is_countable($value) ? count($value) : 1);
|
||||||
if (isset($this->minlength) && $this->minlength > 0 && $length < $this->minlength)
|
if (isset($this->minlength) && $this->minlength > 0 && $length < $this->minlength)
|
||||||
{
|
{
|
||||||
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $this->column . ' must contain no less than ' . $this->minlength . ' characters');
|
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $column . ' must contain no less than ' . $this->minlength . ' characters');
|
||||||
}
|
}
|
||||||
if (isset($this->maxlength) && $this->maxlength > 0 && $length > $this->maxlength)
|
if (isset($this->maxlength) && $this->maxlength > 0 && $length > $this->maxlength)
|
||||||
{
|
{
|
||||||
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $this->column . ' must contain no more than ' . $this->minlength . ' characters');
|
throw new \Rhymix\Framework\Exceptions\QueryError('Variable ' . $this->var . ' for column ' . $column . ' must contain no more than ' . $this->minlength . ' characters');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue