Search Postgresql Archives

Re: array/function question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Joshua Berry escribió:

> Inputs:
> A: an array of integers. for example: { 1, 2, 3, 4, 7 }
> B: an array of integers. for example: { 1, 4, 8, 9 }
>
> Returns
> C: an array of bools the same dimensions as Array A. In this example: { 
> true, false, false, false, true, false }
>
> Effectively, this function would use Array A as a set of boolean tests  
> to exercise on Array B. The result array will have the save number of  
> elements as array A.

I think this is much easier to write in PL/Perl than PL/pgSQL.  Trivial
in fact.  Your example is flawed though (three falses instead of two) ...
I think it looks like this:

create or replace function is_element_present(int[], int[]) returns bool[] language plperl as $$ 
  $a = shift;
  $b = shift;
  if ($a =~ /{(.*)}/) {
     @a = split /,/, $1
  }
  if ($b =~ /{(.*)}/) {
     @b = split /,/, $1
  }
  for my $k (@b) {
    $h{$k} = 1;
  }
  @c = map { if (defined $h{$_}) { 1 } else { 0 }  } @a;
  return \@c;
$$;

Hmm, well, the fact that PL/Perl passes arrays as string kinda sucks --
fixing that takes half the code of the function!

alvherre=# select is_element_present('{1,2,3,4,7}', '{1,4,8,9}');
 is_element_present 
--------------------
 {t,f,f,t,f}
(1 fila)


-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux