summaryrefslogtreecommitdiff
path: root/classes
diff options
context:
space:
mode:
authorRobert Treat2014-02-22 18:45:37 +0000
committerRobert Treat2014-02-22 18:45:37 +0000
commit8ebf7562291f7018dedfa1ebb47290bb77b86087 (patch)
tree5fe9ebd6ed56c721e55523093835417609102228 /classes
parent6ea25f2fb443e76480b993c3ef3aefbe774769c9 (diff)
Improve support for handling IN / named params in functions
Based on work by Bert Thomas <bthomas@brothom.nl>
Diffstat (limited to 'classes')
-rwxr-xr-xclasses/database/Postgres.php9
-rw-r--r--classes/database/Postgres83.php33
2 files changed, 40 insertions, 2 deletions
diff --git a/classes/database/Postgres.php b/classes/database/Postgres.php
index 4ab71646..1d72db0e 100755
--- a/classes/database/Postgres.php
+++ b/classes/database/Postgres.php
@@ -4112,14 +4112,19 @@ class Postgres extends ADODB_base {
$sql = "
SELECT
- pc.oid AS prooid, proname, pg_catalog.pg_get_userbyid(proowner) AS proowner,
+ pc.oid AS prooid, proname,
+ pg_catalog.pg_get_userbyid(proowner) AS proowner,
nspname as proschema, lanname as prolanguage, procost, prorows,
pg_catalog.format_type(prorettype, NULL) as proresult, prosrc,
probin, proretset, proisstrict, provolatile, prosecdef,
pg_catalog.oidvectortypes(pc.proargtypes) AS proarguments,
proargnames AS proargnames,
pg_catalog.obj_description(pc.oid, 'pg_proc') AS procomment,
- proconfig
+ proconfig,
+ (select array_agg( (select typname from pg_type pt
+ where pt.oid = p.oid) ) from unnest(proallargtypes) p)
+ AS proallarguments,
+ proargmodes
FROM
pg_catalog.pg_proc pc, pg_catalog.pg_language pl,
pg_catalog.pg_namespace pn
diff --git a/classes/database/Postgres83.php b/classes/database/Postgres83.php
index 3ac4f789..ce0416b9 100644
--- a/classes/database/Postgres83.php
+++ b/classes/database/Postgres83.php
@@ -322,6 +322,39 @@ class Postgres83 extends Postgres84 {
return 0;
}
+ // Function functions
+
+ /**
+ * Returns all details for a particular function
+ * @param $func The name of the function to retrieve
+ * @return Function info
+ */
+ function getFunction($function_oid) {
+ $this->clean($function_oid);
+
+ $sql = "
+ SELECT
+ pc.oid AS prooid, proname, pg_catalog.pg_get_userbyid(proowner) AS proowner,
+ nspname as proschema, lanname as prolanguage, procost, prorows,
+ pg_catalog.format_type(prorettype, NULL) as proresult, prosrc,
+ probin, proretset, proisstrict, provolatile, prosecdef,
+ pg_catalog.oidvectortypes(pc.proargtypes) AS proarguments,
+ proargnames AS proargnames,
+ pg_catalog.obj_description(pc.oid, 'pg_proc') AS procomment,
+ proconfig
+ FROM
+ pg_catalog.pg_proc pc, pg_catalog.pg_language pl,
+ pg_catalog.pg_namespace pn
+ WHERE
+ pc.oid = '{$function_oid}'::oid AND pc.prolang = pl.oid
+ AND pc.pronamespace = pn.oid
+ ";
+
+ return $this->selectSet($sql);
+ }
+
+
+ // Capabilities
function hasQueryKill() { return false; }
function hasDatabaseCollation() { return false; }
function hasAlterSequenceStart() { return false; }