PEAR2_DB_Pl2Method › PEAR2_DB_Pl2Method-0.1.0/php/PEAR2/DB/Pl2Method/Driver/Pgsql.php
- PEAR2_DB_Pl2Method-0.1.0/
- doc/
- pear2.php.net/
- PEAR2_DB_Pl2Method/
- examples/
- examples/
- examples/
- PEAR2_DB_Pl2Method/
- pear2.php.net/
- php/
- PEAR2/
- Autoload.php
- DB/
- Pl2Method/
- Pl2Method.php
- Exception.php
- MultiErrors/
- MultiErrors.php
- PEAR2/
- doc/
- package.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php
/**
* PEAR2\DATABASE\Pl2Method\Driver\Pgsql
*
* PHP version 5
*
* @category DB
* @package PEAR2_DATABASE_Pl2Method
* @author Ivo nascimento <ivo@o8o.com.br>
* @copyright 2011 Your Name
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
* @version SVN: $Id$
* @link http://svn.php.net/repository/pear2/PEAR2_DATABASE_Pl2Method
*/
/**
* PostgreSQL Driver class for PEAR2_DATABASE_Pl2Method
*
* @category Database
* @package PEAR2_DATABASE_Pl2Method
* @author Ivo Nascimento <handle@php.net>
* @copyright 2011 Your Name
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
* @link http://svn.php.net/repository/pear2/PEAR2_DATABASE_Pl2Method
*/
namespace PEAR2\DB\Pl2Method\Driver;
class Pgsql extends \PEAR2\DB\Pl2Method\SGDBDriver
{
public function __construct(\PDO $conn)
{
parent::__construct($conn);
}
public function __get($val)
{
$this->SCHEMA = $val;
$this->conn->query("set search_path to {$this->SCHEMA};");
return $this;
}
public function __call($fct,$values)
{
/* if (isset($values) && $values[0]==self::_INFO)
return $this->getSPInfo($fct);
if ( $this->checkParam($fct,$values) )
*/ return $this->getSP($fct,$this->specParam($values));
// else
// throw new Exception("Tipo dos Argumentos não conferem com parametros esperados.",1000);
}
private function specParam(Array $P)
{
$retorno = Array();
foreach ($P as $idx => $param)
{
$nvalue = $this->formatValue($param);
$retorno[]= $nvalue;
}
$retorno = implode(',',$retorno);
return $retorno;
}
private function getSP($spname,$paramstr)
{
$sqlpl ="select * from {$this->SCHEMA}.$spname ( {$paramstr});";
$this->statment = $this->conn->query($sqlpl);
return $this->statment;
}
private function checkParam($fct, $values)
{
return $this->validateData($fct, $values, $this->getSPInfo($fct));
}
public function getSPInfo($spname)
{
$sqlstr = "SELECT n.nspname as \"Schema\",
p.proname as \"Name\",
CASE WHEN p.proretset THEN 'setof ' ELSE '' END ||
pg_catalog.format_type(p.prorettype, NULL) as \"Result data type\",
CASE WHEN proallargtypes IS NOT NULL THEN
pg_catalog.array_to_string(ARRAY(
SELECT
CASE
WHEN p.proargmodes[s.i] = 'i' THEN ''
WHEN p.proargmodes[s.i] = 'o' THEN 'OUT '
WHEN p.proargmodes[s.i] = 'b' THEN 'INOUT '
END ||
CASE
WHEN COALESCE(p.proargnames[s.i], '') = '' THEN ''
ELSE p.proargnames[s.i] || ' '
END ||
pg_catalog.format_type(p.proallargtypes[s.i], NULL)
FROM
pg_catalog.generate_series(1, pg_catalog.array_upper(p.proallargtypes, 1)) AS s(i)
), ', ')
ELSE
pg_catalog.array_to_string(ARRAY(
SELECT
CASE
WHEN COALESCE(p.proargnames[s.i+1], '') = '' THEN ''
ELSE p.proargnames[s.i+1] || ' '
END ||
pg_catalog.format_type(p.proargtypes[s.i], NULL)
FROM
pg_catalog.generate_series(0, pg_catalog.array_upper(p.proargtypes, 1)) AS s(i)
), ', ')
END AS \"Argument data types\"
FROM pg_catalog.pg_proc p
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE p.prorettype <> 'pg_catalog.cstring'::pg_catalog.regtype
AND (p.proargtypes[0] IS NULL
OR p.proargtypes[0] <> 'pg_catalog.cstring'::pg_catalog.regtype)
AND NOT p.proisagg
AND p.proname ~ '^({$spname})$'
AND pg_catalog.pg_function_is_visible(p.oid)
ORDER BY 1, 2, 3, 4;";
$this->Info = $this->PDO->query($sqlstr);//"select * from soma2(10,20);");
return $this->Info->fetch(PDO::FETCH_NUM);
}
}
EOF
