with sql_exceptions; package body sql_boolean_pkg is null_value_error : exception renames sql_exceptions. null_value_error; function "not" (left : boolean_with_unknown) return boolean_with_unknown is begin case left is when true => return false; when false => return true; when unknown => return unknown; end case; end; function "and" (left, right : boolean_with_unknown) return boolean_with_unknown is begin if (left = false) or (right = false) then return false; elsif (left = unknown) or (right = unknown) then return unknown; else return true; end if; end "and"; function "or" (left, right : boolean_with_unknown) return boolean_with_unknown is begin if (left = true) or (right = true) then return true; elsif (left = unknown) or (right = unknown) then return unknown; else return false; end if; end "or"; function "xor" (left, right : boolean_with_unknown) return boolean_with_unknown is begin return (left and not right) or (not left and right); end "xor"; function to_boolean (left : boolean_with_unknown) return boolean is begin if left = unknown then raise null_value_error; else return (left = true); end if; end to_boolean; function is_true (left : boolean_with_unknown) return boolean is begin return (left = true); end is_true; function is_false (left : boolean_with_unknown) return boolean is begin return (left = false); end is_false; function is_unknown (left : boolean_with_unknown) return boolean is begin return (left = unknown); end is_unknown; end sql_boolean_pkg;