Re: [HACKERS] Validating problem in the isn contrib module

2009-03-06 Thread Bernd Helmle
--On Freitag, März 06, 2009 02:26:12 +0100 Andreas 'ads' Scherbaum 
adsm...@wars-nicht.de wrote:



test=# select is_valid('978-3-937514-69-6'::isbn13);
ERROR:  invalid check digit for ISBN number: 978-3-937514-69-6,
should be 7 ROW 1: select is_valid('978-3-937514-69-6'::isbn13);


According to the docs, this is intended behavior. If you want to validate 
those values later or yourself, you have to use the weak mode:



#= SELECT isn_weak(true);
isn_weak
--
t

#= SELECT is_valid('978-3-937514-69-6'::isbn13);
is_valid
--
f

#= SELECT is_valid('978-3-937514-69-7'::isbn13);
is_valid
--
t

--
 Thanks

   Bernd

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Validating problem in the isn contrib module

2009-03-06 Thread Andreas 'ads' Scherbaum
On Fri, 06 Mar 2009 00:32:40 +0100 Bernd Helmle wrote:

 --On Freitag, März 06, 2009 02:26:12 +0100 Andreas 'ads' Scherbaum 
 adsm...@wars-nicht.de wrote:
 
  test=# select is_valid('978-3-937514-69-6'::isbn13);
  ERROR:  invalid check digit for ISBN number: 978-3-937514-69-6,
  should be 7 ROW 1: select is_valid('978-3-937514-69-6'::isbn13);
 
 According to the docs, this is intended behavior. If you want to validate 
 those values later or yourself, you have to use the weak mode:

No.
Straight from the source:

-- isn_weak(boolean) - Sets the weak input mode.
-- This function is intended for testing use only!


The validator function should use the weak mode for itself to return
'f' in case of invalid input. It cannot be the users job to make sure a
validator function is working as expected.


Bye

-- 
Andreas 'ads' Scherbaum
German PostgreSQL User Group
European PostgreSQL User Group - Board of Directors

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Validating problem in the isn contrib module

2009-03-06 Thread Andreas 'ads' Scherbaum
On Fri, 6 Mar 2009 07:14:20 +0100 A. Kretschmer wrote:

 Nice advertisement for your book...

Actually the example is copypaste from the .tex file ;-)


Bye

-- 
Andreas 'ads' Scherbaum
German PostgreSQL User Group
European PostgreSQL User Group - Board of Directors

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Validating problem in the isn contrib module

2009-03-06 Thread Gregory Stark
Andreas 'ads' Scherbaum adsm...@wars-nicht.de writes:

 The validator function should use the weak mode for itself to return
 'f' in case of invalid input. It cannot be the users job to make sure a
 validator function is working as expected.

Well the input function is being called before the validator function ever
gets a chance to act. The validator function receives an already-formed isbn13
datum.

Is there an is_valid() which takes text input? Perhaps there should be --
though I think it would have to be isbn_is_valid() or something like that.

-- 
  Gregory Stark
  EnterpriseDB  http://www.enterprisedb.com
  Ask me about EnterpriseDB's RemoteDBA services!

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Validating problem in the isn contrib module

2009-03-06 Thread Andreas 'ads' Scherbaum
On Fri, 06 Mar 2009 10:50:41 + Gregory Stark wrote:

 Andreas 'ads' Scherbaum adsm...@wars-nicht.de writes:
 
  The validator function should use the weak mode for itself to return
  'f' in case of invalid input. It cannot be the users job to make sure a
  validator function is working as expected.
 
 Well the input function is being called before the validator function ever
 gets a chance to act. The validator function receives an already-formed isbn13
 datum.

That's the problem.


 Is there an is_valid() which takes text input? Perhaps there should be --
 though I think it would have to be isbn_is_valid() or something like that.

I think that's the intention of the is_valid() function. However it's
not working. And yes, a moe descriptive name would be fine.


Bye

-- 
Andreas 'ads' Scherbaum
German PostgreSQL User Group
European PostgreSQL User Group - Board of Directors

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Validating problem in the isn contrib module

2009-03-06 Thread Bernd Helmle
--On Freitag, März 06, 2009 11:32:14 +0100 Andreas 'ads' Scherbaum 
adsm...@wars-nicht.de wrote:



No.
Straight from the source:

-- isn_weak(boolean) - Sets the weak input mode.
-- This function is intended for testing use only!


The validator function should use the weak mode for itself to return
'f' in case of invalid input. It cannot be the users job to make sure a
validator function is working as expected.



I don't see anything that's not already documented. is_valid() checks the 
presence of the invalid (!) marker only. It looks like the author never 
intended is_valid() to be a check wether this ISBN is semantically 
correct, this is done by the input routines before.


I agree that the naming is a little bit misleading.

--
 Thanks

   Bernd

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Validating problem in the isn contrib module

2009-03-06 Thread Andreas 'ads' Scherbaum
On Fri, 06 Mar 2009 12:44:31 +0100 Bernd Helmle wrote:

 --On Freitag, März 06, 2009 11:32:14 +0100 Andreas 'ads' Scherbaum 
 adsm...@wars-nicht.de wrote:
 
 I don't see anything that's not already documented. is_valid() checks the 
 presence of the invalid (!) marker only. It looks like the author never 
 intended is_valid() to be a check wether this ISBN is semantically 
 correct, this is done by the input routines before.

So this function is useless. If the syntax is valid, the check is
already done and is_valid() returns true. If the syntax is invalid, PG
will raise an error even before this function returns. The invalid
marker is not checked at all.

This leads back to my initial question: intended behaviour or just a
bug? And how can one validate an ISBN without raising an error?


Bye

-- 
Andreas 'ads' Scherbaum
German PostgreSQL User Group
European PostgreSQL User Group - Board of Directors

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Validating problem in the isn contrib module

2009-03-06 Thread Gregory Stark

Andreas 'ads' Scherbaum adsm...@wars-nicht.de writes:

 So this function is useless. If the syntax is valid, the check is
 already done and is_valid() returns true. If the syntax is invalid, PG
 will raise an error even before this function returns. The invalid
 marker is not checked at all.

This seems pretty clearly explained in the documentation. 

  When you insert invalid numbers in a table using the weak mode, the number
  will be inserted with the corrected check digit, but it will be displayed with
  an exclamation mark (!) at the end, for example 0-11-000322-5!. This invalid
  marker can be checked with the is_valid function and cleared with the
  make_valid function.

  You can also force the insertion of invalid numbers even when not in the weak
  mode, by appending the ! character at the end of the number.

 This leads back to my initial question: intended behaviour or just a
 bug? And how can one validate an ISBN without raising an error?



-- 
  Gregory Stark
  EnterpriseDB  http://www.enterprisedb.com
  Ask me about EnterpriseDB's 24x7 Postgres support!

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Validating problem in the isn contrib module

2009-03-06 Thread Tom Lane
Andreas 'ads' Scherbaum adsm...@wars-nicht.de writes:
 This leads back to my initial question: intended behaviour or just a
 bug? And how can one validate an ISBN without raising an error?

Judging from the comments, is_valid (and the internal validity bit)
were a bad design decision that the author later regretted, but felt
he couldn't change for compatibility reasons.  I'm not sure why not
... we make bigger incompatible changes than that all the time.

The way to validate an ISBN is exactly the same as it is for every
other data type: feed the string to the input function and see if
it throws an error.

regards, tom lane

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Validating problem in the isn contrib module

2009-03-06 Thread Andreas 'ads' Scherbaum
On Fri, 06 Mar 2009 10:27:52 -0500 Tom Lane wrote:

 Judging from the comments, is_valid (and the internal validity bit)
 were a bad design decision that the author later regretted, but felt
 he couldn't change for compatibility reasons.  I'm not sure why not
 ... we make bigger incompatible changes than that all the time.

Looks a bit ugly and the way this module handles the input is unusual.


 The way to validate an ISBN is exactly the same as it is for every
 other data type: feed the string to the input function and see if
 it throws an error.

For the record here's a function which validates a text if it contains
an ISBN-13, similar functions are possible for the other datatypes
defined by isn:


CREATE OR REPLACE FUNCTION validate_isbn13(TEXT)
  RETURNS BOOLEAN
AS $$
DECLARE
  isbn_nr ALIAS FOR $1;
  weak_status BOOLEAN;
  isbn_status BOOLEAN;
BEGIN

  -- make sure weak mode is off
  weak_status := isn_weak(FALSE);
  -- this will either return 'true' or throw an exception
  isbn_status := is_valid(isbn_nr::isbn13);
  weak_status := isn_weak(weak_status);

  RETURN isbn_status;

  EXCEPTION
-- handle (only) the exception which is thrown by is_valid()
WHEN invalid_text_representation THEN
RETURN false;
END;
$$
LANGUAGE 'plpgsql';


Bye

-- 
Andreas 'ads' Scherbaum
German PostgreSQL User Group
European PostgreSQL User Group - Board of Directors

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Validating problem in the isn contrib module

2009-03-05 Thread A. Kretschmer
In response to Andreas 'ads' Scherbaum :
 
 Hello all,
 
 
 test=# select is_valid('978-3-937514-69-7'::isbn13);
  is_valid
 --
  t
 (1 row)

Nice advertisement for your book...

Andreas
-- 
Andreas Kretschmer
Kontakt:  Heynitz: 035242/47150,   D1: 0160/7141639 (mehr: - Header)
GnuPG-ID:   0x3FFF606C, privat 0x7F4584DA   http://wwwkeys.de.pgp.net

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers