public function add($column, $operator, $value, $conjunction = 'AND')
    {
        if (!in_array($operator, self::$arithmeticOperator)) {
            throw new InvalidArgumentException('Invalid arithmetic operator (allowed: ' . implode(', ', self::$arithmeticOperator) . ')');
        }

        if (!in_array($conjunction, self::$logicOperator)) {
            throw new InvalidArgumentException('Invalid logic operator (allowed: ' . implode(', ', self::$logicOperator) . ')');
        }

        if ($operator == 'IN' && is_array($value)) {
            $expr = new Condition\In($column, $value, $conjunction);
        } elseif (($operator == '=' || $operator == 'IS') && $value === null) {
            $expr = new Condition\Nil($column, $conjunction);
        } elseif (($operator == '!=' || $operator == 'IS NOT') && $value === null) {
            $expr = new Condition\NotNil($column, $conjunction);
        } else {
            $expr = new Condition\Basic($column, $operator, $value, $conjunction);
        }

        return $this->addExpression($expr);
    }