Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search for
  Advanced Search

Re: [Fwd: Re: [Pljava-dev] char with trailing space, PreparedStatement.setObject



Tom Lane wrote:
Thomas Hallgren <thomas(at)tada(dot)se> writes:
so why does it make a difference to use varchar instead of text?

It's a question of type resolution rules.  text is the preferred string
type so it "wins" in cross-type situations, in particular
	char_value = text_value
will be interpreted as
	char_value::text text_eq text_value
varchar is not only not a preferred type, it doesn't even have any
comparison ops of its own (it depends on text's ops).  Therefore given
	char_value = varchar_value
the parser is faced with the alternative interpretations
	char_value::text text_eq varchar_value::text
	char_value char_eq varchar_value::char
and it will prefer the latter because it has fewer casts.
See
http://www.postgresql.org/docs/8.1/static/typeconv.html
particularly rules 10.2.3b and 3c.  The upshot of all this
is that a parameter specified as "text" dominates any comparison
to other string datatypes, whereas one specified as "varchar"
does not.  Yeah, it's a bit grotty, but it gets the job done
and it's not an area we're likely to change much.

			regards, tom lane
Hmm, OK. I checked my code and I don't use any specific type. Instead, I use SPI_getargtypeid(ePlan, idx) on the prepared query and the pgType->typinput function of the type that corresponds to the returned oid. Perhaps the SPI_getargtypeid should return varchar for all text types?

Regards,
Thomas Hallgren





Home | Main Index | Thread Index

Privacy Policy | PostgreSQL Archives hosted by Command Prompt, Inc. | Designed by tinysofa
Copyright © 1996 – 2008 PostgreSQL Global Development Group