Type checking

Started by Don Yalmost 20 years ago2 messagesgeneral
Jump to latest
#1Don Y
pgsql@DakotaCom.Net

Hi,

I have several user defined types with particular restraints
upon the data they represent. If I have crafted my foo_in()
function to ensure that these constraints are always satisfied
*before* allowing a datum into the database AND I have designed
my casts to be similarly vigilant, is there any OTHER way that
data can creep into the database that is noncompliant?

I.e., if I have a bunch of functions defined as taking an
argument of type "foo", is there any way the user can pass
a value to these functions WITHOUT it going through my
gatekeepers (foo_in(), foo_from_baz(), etc.)? Obviously,
the reason for my question is to verify that the functions
that take foo arguments need not be concerned with verifying
that their arguments are, in fact, compliant with the rules
defined (enforced) for that type.

E.g., if the foo type excludes the value '0', can I write
a routine inverse(foo) that computes 1/x for any value of
x without testing for x==0?

<grimace> Am I being clear enough about the question I am
asking? :-/

Thanks!
--don

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Don Y (#1)
Re: Type checking

Don Y <pgsql@DakotaCom.Net> writes:

I.e., if I have a bunch of functions defined as taking an
argument of type "foo", is there any way the user can pass
a value to these functions WITHOUT it going through my
gatekeepers (foo_in(), foo_from_baz(), etc.)?

No, not if foo is a separate type. Postgres has absolutely no knowledge
of the internal representation of a base type, and will never manipulate
it except through the routines you supply.

regards, tom lane