with sql_system, sql_boolean_pkg, sql_standard; use sql_system, sql_boolean_pkg; package sql_char_pkg is subtype sql_char_length is natural range 1 .. maxchrlen; subtype sql_unpadded_length is natural range 0 .. maxchrlen; type sql_char_not_null is new sql_standard. char; type sql_char (length : sql_char_length) is limited private; function null_sql_char return sql_char; function with_null_base (value : sql_char_not_null) return sql_char; function without_null_base (value : sql_char) return sql_char_not_null; function without_null_unpadded_base (value : sql_char) return sql_char_not_null; function to_string (value : sql_char_not_null) return string; function to_string (value : sql_char) return string; function to_unpadded_string (value : sql_char_not_null) return string; function to_unpadded_string (value : sql_char) return string; function to_sql_char_not_null (value : string) return sql_char_not_null; function to_sql_char (value : string) return sql_char; function unpadded_length (value : sql_char) return sql_unpadded_length; procedure assign (left : out sql_char; right : sql_char); function substring (value : sql_char; start, length : sql_char_length) return sql_char; function "&" (left, right : sql_char) return sql_char; function equals (left, right : sql_char) return boolean_with_unknown; function not_equals (left, right : sql_char) return boolean_with_unknown; function "<" (left, right : sql_char) return boolean_with_unknown; function ">" (left, right : sql_char) return boolean_with_unknown; function "<=" (left, right : sql_char) return boolean_with_unknown; function ">=" (left, right : sql_char) return boolean_with_unknown; function is_null (value : sql_char) return boolean; function not_null (value : sql_char) return boolean; function "=" (left, right : sql_char) return boolean; function ">" (left, right : sql_char) return boolean; function "<" (left, right : sql_char) return boolean; function "<=" (left, right : sql_char) return boolean; function ">=" (left, right : sql_char) return boolean; generic type with_null_type is limited private; type without_null_type is array (positive range <>) of sql_standard. character_type; with function with_null_base (value : sql_char_not_null) return with_null_type is <>; with function without_null_base (value : with_null_type) return sql_char_not_null is <>; with function without_null_unpadded_base (value : with_null_type) return sql_char_not_null is <>; package sql_char_ops is function with_null (value : without_null_type) return with_null_type; function without_null (value : with_null_type) return without_null_type; function without_null_unpadded (value : with_null_type) return without_null_type; end sql_char_ops; private type sql_char (length : sql_char_length) is record is_null : boolean := true; unpadded_length : sql_unpadded_length; text : sql_char_not_null (1 .. length); end record; end sql_char_pkg;