public function where( $column, $equality = '', $value = '', Closure $callback = null, $boolean = null ) {

		if ( $equality ) {
			$this->assert_comparator( $equality );
		}

		if ( is_array( $column ) ) {

			$where = Where::for_clause();

			foreach ( $column as $col => $val ) {
				$where->qAnd( $this->generate_where_tag( $col, true, $val ) );
			}

		} else {
			$where = $this->generate_where_tag( $column, $equality, $value );
		}

		if ( $callback ) {
			$_where      = $this->where;
			$this->where = $where;
			$callback( $this );
			$this->where = $_where;
		}

		if ( $this->where->is_empty() && ! $where->is_for_clause() ) {
			$this->where = $where;
		} else {
			$boolean = $boolean ?: 'and';
			$boolean = 'q' . ucfirst( $boolean );
			$this->where->{$boolean}( $where );
		}

		return $this;
	}