mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-06-19 00:16:56 +02:00
formatting
This commit is contained in:
parent
4820ee5c02
commit
ffcb54d88f
@ -12,21 +12,24 @@
|
|||||||
* by the Free Software Foundation; either version 2.1 of the License, or *
|
* by the Free Software Foundation; either version 2.1 of the License, or *
|
||||||
* any later version. *
|
* any later version. *
|
||||||
\**************************************************************************/
|
\**************************************************************************/
|
||||||
|
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
class db {
|
class db
|
||||||
var $Debug = false;
|
{
|
||||||
var $Home = "/u01/app/oracle/product/8.0.4";
|
var $Debug = False;
|
||||||
|
var $Home = '/u01/app/oracle/product/8.0.4';
|
||||||
var $Remote = 1;
|
var $Remote = 1;
|
||||||
/* Due to a strange error with Oracle 8.0.5, Apache and PHP3.0.6
|
/* Due to a strange error with Oracle 8.0.5, Apache and PHP3.0.6
|
||||||
you don't need to set the ENV - on my system Apache
|
you don't need to set the ENV - on my system Apache
|
||||||
will change to a zombie, if I don't set this to FALSE!
|
will change to a zombie, if I don't set this to FALSE!
|
||||||
If unsure try it out, if it works. */
|
If unsure try it out, if it works. */
|
||||||
|
/* Milosch - omg, you aren't using 3.0.6 are you? */
|
||||||
var $OraPutEnv = true;
|
var $OraPutEnv = true;
|
||||||
|
|
||||||
var $Database = "";
|
var $Database = '';
|
||||||
var $User = "";
|
var $User = '';
|
||||||
var $Password = "";
|
var $Password = '';
|
||||||
|
|
||||||
var $Link_ID = 0;
|
var $Link_ID = 0;
|
||||||
var $Query_ID = 0;
|
var $Query_ID = 0;
|
||||||
@ -34,63 +37,74 @@ class db {
|
|||||||
var $Row;
|
var $Row;
|
||||||
|
|
||||||
var $Errno = 0;
|
var $Errno = 0;
|
||||||
var $Error = "";
|
var $Error = '';
|
||||||
var $ora_no_next_fetch=false;
|
var $ora_no_next_fetch = False;
|
||||||
|
|
||||||
|
|
||||||
/* copied from db_mysql for completeness */
|
/* copied from db_mysql for completeness */
|
||||||
/* public: identification constant. never change this. */
|
/* public: identification constant. never change this. */
|
||||||
var $type = "oracle";
|
var $type = 'oracle';
|
||||||
var $revision = "1.2";
|
var $revision = '1.2';
|
||||||
|
|
||||||
var $Halt_On_Error = "yes"; ## "yes" (halt with message), "no" (ignore errors quietly), "report" (ignore errror, but spit a warning)
|
var $Halt_On_Error = 'yes'; ## 'yes' (halt with message), 'no' (ignore errors quietly), 'report' (ignore errror, but spit a warning)
|
||||||
|
|
||||||
/* public: constructor */
|
/* public: constructor */
|
||||||
function db($query = "") {
|
function db($query = '')
|
||||||
|
{
|
||||||
$this->query($query);
|
$this->query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* public: some trivial reporting */
|
/* public: some trivial reporting */
|
||||||
function link_id() {
|
function link_id()
|
||||||
|
{
|
||||||
return $this->Link_ID;
|
return $this->Link_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
function query_id() {
|
function query_id()
|
||||||
|
{
|
||||||
return $this->Query_ID;
|
return $this->Query_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
function connect() {
|
function connect()
|
||||||
|
{
|
||||||
## see above why we do this
|
## see above why we do this
|
||||||
if ($this->OraPutEnv) {
|
if ($this->OraPutEnv)
|
||||||
|
{
|
||||||
PutEnv("ORACLE_SID=$this->Database");
|
PutEnv("ORACLE_SID=$this->Database");
|
||||||
PutEnv("ORACLE_HOME=$this->Home");
|
PutEnv("ORACLE_HOME=$this->Home");
|
||||||
}
|
}
|
||||||
if ( 0 == $this->Link_ID ) {
|
if ( 0 == $this->Link_ID )
|
||||||
if($this->Debug) {
|
{
|
||||||
printf("<br>Connect()ing to $this->Database...<br>\n");
|
if($this->Debug)
|
||||||
|
{
|
||||||
|
printf('<br>Connecting to ' . $this->Database . "...<br>\n");
|
||||||
}
|
}
|
||||||
if($this->Remote) {
|
if($this->Remote)
|
||||||
if($this->Debug) {
|
{
|
||||||
|
if($this->Debug)
|
||||||
|
{
|
||||||
printf("<br>connect() $this->User/******@$this->Database.world<br>\n");
|
printf("<br>connect() $this->User/******@$this->Database.world<br>\n");
|
||||||
}
|
}
|
||||||
if($GLOBALS['phpgw_info']['server']['db_persistent'])
|
if($GLOBALS['phpgw_info']['server']['db_persistent'])
|
||||||
{
|
{
|
||||||
$this->Link_ID=ora_plogon("$this->User/$this->Password@$this->Database","");
|
$this->Link_ID = ora_plogon("$this->User/$this->Password@$this->Database","");
|
||||||
/************** (comment by SSilk)
|
/************** (comment by SSilk)
|
||||||
this dosn't work on my system:
|
this dosn't work on my system:
|
||||||
$this->Link_ID=ora_plogon("$this->User@$this->Database.world","$this->Password");
|
$this->Link_ID = ora_plogon("$this->User@$this->Database.world","$this->Password");
|
||||||
***************/
|
***************/
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$this->Link_ID=ora_logon("$this->User/$this->Password@$this->Database","");
|
$this->Link_ID = ora_logon("$this->User/$this->Password@$this->Database","");
|
||||||
/************** (comment by SSilk)
|
/************** (comment by SSilk)
|
||||||
this dosn't work on my system:
|
this dosn't work on my system:
|
||||||
$this->Link_ID=ora_logon("$this->User@$this->Database.world","$this->Password");
|
$this->Link_ID=ora_logon("$this->User@$this->Database.world","$this->Password");
|
||||||
***************/
|
***************/
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
if($this->Debug) {
|
else
|
||||||
|
{
|
||||||
|
if($this->Debug)
|
||||||
|
{
|
||||||
printf("<br>connect() $this->User, $this->Password <br>\n");
|
printf("<br>connect() $this->User, $this->Password <br>\n");
|
||||||
}
|
}
|
||||||
if($GLOBALS['phpgw_info']['server']['db_persistent'])
|
if($GLOBALS['phpgw_info']['server']['db_persistent'])
|
||||||
@ -103,17 +117,22 @@ class db {
|
|||||||
$this->Link_ID=ora_logon("$this->User","$this->Password");
|
$this->Link_ID=ora_logon("$this->User","$this->Password");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($this->Debug) {
|
if($this->Debug)
|
||||||
|
{
|
||||||
printf("<br>connect() Link_ID: $this->Link_ID<br>\n");
|
printf("<br>connect() Link_ID: $this->Link_ID<br>\n");
|
||||||
}
|
}
|
||||||
if (!$this->Link_ID) {
|
if (!$this->Link_ID)
|
||||||
$this->halt("connect() Link-ID == false " .
|
{
|
||||||
"($this->Link_ID), ora_".($GLOBALS['phpgw_info']['server']['db_persistent']?'p':'')."logon failed");
|
$this->halt('connect() Link-ID == false '
|
||||||
} else {
|
. "($this->Link_ID), ora_".($GLOBALS['phpgw_info']['server']['db_persistent']?'p':'').'logon failed');
|
||||||
//echo "commit on<p>";
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//echo 'commit on<p>';
|
||||||
ora_commiton($this->Link_ID);
|
ora_commiton($this->Link_ID);
|
||||||
}
|
}
|
||||||
if($this->Debug) {
|
if($this->Debug)
|
||||||
|
{
|
||||||
printf("<br>connect() Obtained the Link_ID: $this->Link_ID<br>\n");
|
printf("<br>connect() Obtained the Link_ID: $this->Link_ID<br>\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -129,32 +148,38 @@ class db {
|
|||||||
## You can also make extensive use of ->disconnect()!
|
## You can also make extensive use of ->disconnect()!
|
||||||
## The unused QueryIDs will be recycled sometimes.
|
## The unused QueryIDs will be recycled sometimes.
|
||||||
|
|
||||||
function query($Query_String) {
|
function query($Query_String)
|
||||||
|
{
|
||||||
/* No empty queries, please, since PHP4 chokes on them. */
|
/* No empty queries, please, since PHP4 chokes on them. */
|
||||||
if ($Query_String == "")
|
if ($Query_String == '')
|
||||||
|
{
|
||||||
/* The empty query string is passed on from the constructor,
|
/* The empty query string is passed on from the constructor,
|
||||||
* when calling the class without a query, e.g. in situations
|
* when calling the class without a query, e.g. in situations
|
||||||
* like these: '$db = new DB_Sql_Subclass;'
|
* like these: '$db = new DB_Sql_Subclass;'
|
||||||
*/
|
*/
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
$this->connect();
|
$this->connect();
|
||||||
$this->lastQuery=$Query_String;
|
$this->lastQuery=$Query_String;
|
||||||
|
|
||||||
if (!$this->Query_ID) {
|
if (!$this->Query_ID)
|
||||||
$this->Query_ID= ora_open($this->Link_ID);
|
{
|
||||||
|
$this->Query_ID = ora_open($this->Link_ID);
|
||||||
}
|
}
|
||||||
if($this->Debug) {
|
if($this->Debug)
|
||||||
|
{
|
||||||
printf("Debug: query = %s<br>\n", $Query_String);
|
printf("Debug: query = %s<br>\n", $Query_String);
|
||||||
printf("<br>Debug: Query_ID: %d<br>\n", $this->Query_ID);
|
printf("<br>Debug: Query_ID: %d<br>\n", $this->Query_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!@ora_parse($this->Query_ID,$Query_String)) {
|
if(!@ora_parse($this->Query_ID,$Query_String))
|
||||||
|
{
|
||||||
$this->Errno=ora_errorcode($this->Query_ID);
|
$this->Errno=ora_errorcode($this->Query_ID);
|
||||||
$this->Error=ora_error($this->Query_ID);
|
$this->Error=ora_error($this->Query_ID);
|
||||||
$this->halt("<BR>ora_parse() failed:<BR>$Query_String<BR><small>Snap & paste this to sqlplus!</SMALL>");
|
$this->halt("<BR>ora_parse() failed:<BR>$Query_String<BR><small>Snap & paste this to sqlplus!</SMALL>");
|
||||||
} elseif (!@ora_exec($this->Query_ID)) {
|
}
|
||||||
|
elseif (!@ora_exec($this->Query_ID))
|
||||||
|
{
|
||||||
$this->Errno=ora_errorcode($this->Query_ID);
|
$this->Errno=ora_errorcode($this->Query_ID);
|
||||||
$this->Error=ora_error($this->Query_ID);
|
$this->Error=ora_error($this->Query_ID);
|
||||||
$this->halt("<BR>\n$Query_String\n<BR><small>Snap & paste this to sqlplus!</SMALL>");
|
$this->halt("<BR>\n$Query_String\n<BR><small>Snap & paste this to sqlplus!</SMALL>");
|
||||||
@ -162,82 +187,107 @@ class db {
|
|||||||
|
|
||||||
$this->Row=0;
|
$this->Row=0;
|
||||||
|
|
||||||
if(!$this->Query_ID) {
|
if(!$this->Query_ID)
|
||||||
$this->halt("Invalid SQL: ".$Query_String);
|
{
|
||||||
|
$this->halt('Invalid SQL: '.$Query_String);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->Query_ID;
|
return $this->Query_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
function next_record() {
|
function next_record()
|
||||||
|
{
|
||||||
if (!$this->no_next_fetch &&
|
if (!$this->no_next_fetch &&
|
||||||
0 == ora_fetch($this->Query_ID)) {
|
0 == ora_fetch($this->Query_ID))
|
||||||
if ($this->Debug) {
|
{
|
||||||
|
if ($this->Debug)
|
||||||
|
{
|
||||||
printf("<br>next_record(): ID: %d,Rows: %d<br>\n",
|
printf("<br>next_record(): ID: %d,Rows: %d<br>\n",
|
||||||
$this->Query_ID,$this->num_rows());
|
$this->Query_ID,$this->num_rows());
|
||||||
}
|
}
|
||||||
$this->Row +=1;
|
$this->Row +=1;
|
||||||
|
|
||||||
$errno=ora_errorcode($this->Query_ID);
|
$errno=ora_errorcode($this->Query_ID);
|
||||||
if(1403 == $errno) { # 1043 means no more records found
|
if(1403 == $errno)
|
||||||
$this->Errno=0;
|
{ # 1043 means no more records found
|
||||||
$this->Error="";
|
$this->Errno = 0;
|
||||||
|
$this->Error = '';
|
||||||
$this->disconnect();
|
$this->disconnect();
|
||||||
$stat=0;
|
$stat=0;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$this->Error=ora_error($this->Query_ID);
|
$this->Error=ora_error($this->Query_ID);
|
||||||
$this->Errno=$errno;
|
$this->Errno=$errno;
|
||||||
if($this->Debug) {
|
if($this->Debug)
|
||||||
printf("<br>%d Error: %s",
|
{
|
||||||
|
printf('<br>%d Error: %s',
|
||||||
$this->Errno,
|
$this->Errno,
|
||||||
$this->Error);
|
$this->Error);
|
||||||
}
|
}
|
||||||
$stat=0;
|
$stat=0;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$this->no_next_fetch=false;
|
$this->no_next_fetch=false;
|
||||||
for($ix=0;$ix<ora_numcols($this->Query_ID);$ix++) {
|
for($ix=0;$ix<ora_numcols($this->Query_ID);$ix++)
|
||||||
|
{
|
||||||
$col=strtolower(ora_columnname($this->Query_ID,$ix));
|
$col=strtolower(ora_columnname($this->Query_ID,$ix));
|
||||||
$value=ora_getcolumn($this->Query_ID,$ix);
|
$value=ora_getcolumn($this->Query_ID,$ix);
|
||||||
$this->Record[ "$col" ] = $value;
|
$this->Record[ "$col" ] = $value;
|
||||||
# echo"<b>[$col]</b>: $value <br>\n";
|
# echo"<b>[$col]</b>: $value <br>\n";
|
||||||
}
|
}
|
||||||
$stat=1;
|
$stat=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $stat;
|
return $stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
## seek() works only for $pos - 1 and $pos
|
## seek() works only for $pos - 1 and $pos
|
||||||
## Perhaps I make a own implementation, but my
|
## Perhaps I make a own implementation, but my
|
||||||
## opinion is, that this should be done by PHP3
|
## opinion is, that this should be done by PHP3
|
||||||
function seek($pos) {
|
function seek($pos)
|
||||||
if ($this->Row - 1 == $pos) {
|
{
|
||||||
|
if($this->Row - 1 == $pos)
|
||||||
|
{
|
||||||
$this->no_next_fetch=true;
|
$this->no_next_fetch=true;
|
||||||
} elseif ($this->Row == $pos ) {
|
}
|
||||||
|
elseif ($this->Row == $pos )
|
||||||
|
{
|
||||||
## do nothing
|
## do nothing
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$this->halt("Invalid seek(): Position is cannot be handled by API.<BR>".
|
$this->halt("Invalid seek(): Position is cannot be handled by API.<BR>".
|
||||||
"Difference too big. Wanted: $pos Current pos: $this->Row");
|
"Difference too big. Wanted: $pos Current pos: $this->Row");
|
||||||
}
|
}
|
||||||
if ($Debug) echo "<BR>Debug: seek = $pos<BR>";
|
if($Debug)
|
||||||
|
{
|
||||||
|
echo "<BR>Debug: seek = $pos<BR>";
|
||||||
|
}
|
||||||
$this->Row=$pos;
|
$this->Row=$pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
function lock($table, $mode = "write") {
|
function lock($table, $mode = 'write')
|
||||||
if ($mode == "write") {
|
{
|
||||||
|
if ($mode == 'write')
|
||||||
|
{
|
||||||
$result = ora_do($this->Link_ID, "lock table $table in row exclusive mode");
|
$result = ora_do($this->Link_ID, "lock table $table in row exclusive mode");
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$result = 1;
|
$result = 1;
|
||||||
}
|
}
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function unlock() {
|
function unlock()
|
||||||
return ora_do($this->Link_ID, "commit");
|
{
|
||||||
|
return ora_do($this->Link_ID, 'commit');
|
||||||
}
|
}
|
||||||
|
|
||||||
function metadata($table,$full=false) {
|
function metadata($table,$full=false)
|
||||||
|
{
|
||||||
$count = 0;
|
$count = 0;
|
||||||
$id = 0;
|
$id = 0;
|
||||||
$res = array();
|
$res = array();
|
||||||
@ -249,34 +299,34 @@ class db {
|
|||||||
*
|
*
|
||||||
* - full is false (default):
|
* - full is false (default):
|
||||||
* $result[]:
|
* $result[]:
|
||||||
* [0]["table"] table name
|
* [0]['table'] table name
|
||||||
* [0]["name"] field name
|
* [0]['name'] field name
|
||||||
* [0]["type"] field type
|
* [0]['type'] field type
|
||||||
* [0]["len"] field length
|
* [0]['len'] field length
|
||||||
* [0]["flags"] field flags ("NOT NULL", "INDEX")
|
* [0]['flags'] field flags ('NOT NULL', 'INDEX')
|
||||||
* [0]["format"] precision and scale of number (eg. "10,2") or empty
|
* [0]['format'] precision and scale of number (eg. '10,2') or empty
|
||||||
* [0]["index"] name of index (if has one)
|
* [0]['index'] name of index (if has one)
|
||||||
* [0]["chars"] number of chars (if any char-type)
|
* [0]['chars'] number of chars (if any char-type)
|
||||||
*
|
*
|
||||||
* - full is true
|
* - full is true
|
||||||
* $result[]:
|
* $result[]:
|
||||||
* ["num_fields"] number of metadata records
|
* ['num_fields'] number of metadata records
|
||||||
* [0]["table"] table name
|
* [0]['table'] table name
|
||||||
* [0]["name"] field name
|
* [0]['name'] field name
|
||||||
* [0]["type"] field type
|
* [0]['type'] field type
|
||||||
* [0]["len"] field length
|
* [0]['len'] field length
|
||||||
* [0]["flags"] field flags ("NOT NULL", "INDEX")
|
* [0]['flags'] field flags ('NOT NULL', 'INDEX')
|
||||||
* [0]["format"] precision and scale of number (eg. "10,2") or empty
|
* [0]['format'] precision and scale of number (eg. '10,2') or empty
|
||||||
* [0]["index"] name of index (if has one)
|
* [0]['index'] name of index (if has one)
|
||||||
* [0]["chars"] number of chars (if any char-type)
|
* [0]['chars'] number of chars (if any char-type)
|
||||||
* ["meta"][field name] index of field named "field name"
|
* ['meta'][field name] index of field named 'field name'
|
||||||
* The last one is used, if you have a field name, but no index.
|
* The last one is used, if you have a field name, but no index.
|
||||||
* Test: if (isset($result['meta']['myfield'])) {} ...
|
* Test: if (isset($result['meta']['myfield'])) {} ...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$this->connect();
|
$this->connect();
|
||||||
|
|
||||||
## This is a RIGHT OUTER JOIN: "(+)", if you want to see, what
|
## This is a RIGHT OUTER JOIN: '(+)', if you want to see, what
|
||||||
## this query results try the following:
|
## this query results try the following:
|
||||||
## $table = new Table; $db = new my_DB_Sql; # you have to make
|
## $table = new Table; $db = new my_DB_Sql; # you have to make
|
||||||
## # your own class
|
## # your own class
|
||||||
@ -291,34 +341,52 @@ class db {
|
|||||||
" AND T.table_name=UPPER('$table') ORDER BY T.column_id");
|
" AND T.table_name=UPPER('$table') ORDER BY T.column_id");
|
||||||
|
|
||||||
$i=0;
|
$i=0;
|
||||||
while ($this->next_record()) {
|
while ($this->next_record())
|
||||||
$res[$i]["table"] = $this->Record[table_name];
|
{
|
||||||
$res[$i]["name"] = strtolower($this->Record[column_name]);
|
$res[$i]['table'] = $this->Record[table_name];
|
||||||
$res[$i]["type"] = $this->Record[data_type];
|
$res[$i]['name'] = strtolower($this->Record[column_name]);
|
||||||
$res[$i]["len"] = $this->Record[data_length];
|
$res[$i]['type'] = $this->Record[data_type];
|
||||||
if ($this->Record[index_name]) $res[$i]["flags"] = "INDEX ";
|
$res[$i]['len'] = $this->Record[data_length];
|
||||||
$res[$i]["flags"] .= ( $this->Record[nullable] == 'N') ? '' : 'NOT NULL';
|
if ($this->Record[index_name])
|
||||||
$res[$i]["format"]= (int)$this->Record[data_precision].",".
|
{
|
||||||
(int)$this->Record[data_scale];
|
$res[$i]['flags'] = 'INDEX ';
|
||||||
if ("0,0"==$res[$i]["format"]) $res[$i]["format"]='';
|
}
|
||||||
$res[$i]["index"] = $this->Record[index_name];
|
$res[$i]['flags'] .= ( $this->Record['nullable'] == 'N') ? '' : 'NOT NULL';
|
||||||
$res[$i]["chars"] = $this->Record[char_col_decl_length];
|
$res[$i]['format']= (int)$this->Record['data_precision'].','.
|
||||||
if ($full) {
|
(int)$this->Record[data_scale];
|
||||||
$j=$res[$i]["name"];
|
if ('0,0'==$res[$i]['format'])
|
||||||
$res["meta"][$j] = $i;
|
{
|
||||||
$res["meta"][strtoupper($j)] = $i;
|
$res[$i]['format']='';
|
||||||
|
}
|
||||||
|
$res[$i]['index'] = $this->Record[index_name];
|
||||||
|
$res[$i]['chars'] = $this->Record[char_col_decl_length];
|
||||||
|
if ($full)
|
||||||
|
{
|
||||||
|
$j=$res[$i]['name'];
|
||||||
|
$res['meta'][$j] = $i;
|
||||||
|
$res['meta'][strtoupper($j)] = $i;
|
||||||
|
}
|
||||||
|
if ($full)
|
||||||
|
{
|
||||||
|
$res['meta'][$res[$i]['name']] = $i;
|
||||||
}
|
}
|
||||||
if ($full) $res["meta"][$res[$i]["name"]] = $i;
|
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
if ($full) $res["num_fields"]=$i;
|
if ($full)
|
||||||
# $this->disconnect();
|
{
|
||||||
|
$res['num_fields']=$i;
|
||||||
|
}
|
||||||
|
# $this->disconnect();
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
## THIS FUNCTION IS UNSTESTED!
|
## THIS FUNCTION IS UNSTESTED!
|
||||||
function affected_rows() {
|
function affected_rows()
|
||||||
if ($Debug) echo "<BR>Debug: affected_rows=". ora_numrows($this->Query_ID)."<BR>";
|
{
|
||||||
|
if ($Debug)
|
||||||
|
{
|
||||||
|
echo '<BR>Debug: affected_rows='. ora_numrows($this->Query_ID).'<BR>';
|
||||||
|
}
|
||||||
return ora_numrows($this->Query_ID);
|
return ora_numrows($this->Query_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -328,45 +396,60 @@ class db {
|
|||||||
## will work with it.
|
## will work with it.
|
||||||
##
|
##
|
||||||
## Also, for a qualified replacement you need to parse the
|
## Also, for a qualified replacement you need to parse the
|
||||||
## selection, cause this will fail: "SELECT id, from FROM ...").
|
## selection, cause this will fail: 'SELECT id, from FROM ...').
|
||||||
## "FROM" is - as far as I know a keyword in Oracle, so it can
|
## 'FROM' is - as far as I know a keyword in Oracle, so it can
|
||||||
## only be used in this way. But you have been warned.
|
## only be used in this way. But you have been warned.
|
||||||
function num_rows() {
|
function num_rows()
|
||||||
|
{
|
||||||
$curs=ora_open($this->Link_ID);
|
$curs=ora_open($this->Link_ID);
|
||||||
|
|
||||||
## this is the important part and it is also the HACK!
|
## this is the important part and it is also the HACK!
|
||||||
if (eregi("^[[:space:]]*SELECT[[:space:]]",$this->lastQuery) ) {
|
if (eregi("^[[:space:]]*SELECT[[:space:]]",$this->lastQuery) )
|
||||||
$from_pos = strpos(strtoupper($this->lastQuery),"FROM");
|
{
|
||||||
$q = "SELECT count(*) ". substr($this->lastQuery, $from_pos);
|
$from_pos = strpos(strtoupper($this->lastQuery),'FROM');
|
||||||
|
$q = 'SELECT count(*) '. substr($this->lastQuery, $from_pos);
|
||||||
|
|
||||||
ORA_parse($curs,$q);
|
ORA_parse($curs,$q);
|
||||||
ORA_exec($curs);
|
ORA_exec($curs);
|
||||||
ORA_fetch($curs);
|
ORA_fetch($curs);
|
||||||
if ($Debug) echo "<BR>Debug: num_rows=". ORA_getcolumn($curs,0)."<BR>";
|
if ($Debug)
|
||||||
|
{
|
||||||
|
echo '<BR>Debug: num_rows='. ORA_getcolumn($curs,0).'<BR>';
|
||||||
|
}
|
||||||
return(ORA_getcolumn($curs,0));
|
return(ORA_getcolumn($curs,0));
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$this->halt("Last Query was not a SELECT: $this->lastQuery");
|
$this->halt("Last Query was not a SELECT: $this->lastQuery");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function num_fields() {
|
function num_fields()
|
||||||
if ($Debug) echo "<BR>Debug: num_fields=". ora_numcols($this->Query_ID) . "<BR>";
|
{
|
||||||
|
if ($Debug)
|
||||||
|
{
|
||||||
|
echo '<BR>Debug: num_fields='. ora_numcols($this->Query_ID) . '<BR>';
|
||||||
|
}
|
||||||
return ora_numcols($this->Query_ID);
|
return ora_numcols($this->Query_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
function nf() {
|
function nf()
|
||||||
|
{
|
||||||
return $this->num_rows();
|
return $this->num_rows();
|
||||||
}
|
}
|
||||||
|
|
||||||
function np() {
|
function np()
|
||||||
|
{
|
||||||
print $this->num_rows();
|
print $this->num_rows();
|
||||||
}
|
}
|
||||||
|
|
||||||
function f($Name) {
|
function f($Name)
|
||||||
|
{
|
||||||
return $this->Record[$Name];
|
return $this->Record[$Name];
|
||||||
}
|
}
|
||||||
|
|
||||||
function p($Name) {
|
function p($Name)
|
||||||
|
{
|
||||||
print $this->Record[$Name];
|
print $this->Record[$Name];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,74 +464,83 @@ class db {
|
|||||||
if(!@ora_parse($Query_ID,"SELECT $seq_name.NEXTVAL FROM DUAL"))
|
if(!@ora_parse($Query_ID,"SELECT $seq_name.NEXTVAL FROM DUAL"))
|
||||||
{
|
{
|
||||||
// There is no such sequence yet, then create it
|
// There is no such sequence yet, then create it
|
||||||
if(!@ora_parse($Query_ID,"CREATE SEQUENCE $seq_name")
|
if(!@ora_parse($Query_ID,"CREATE SEQUENCE $seq_name") ||
|
||||||
||
|
!@ora_exec($Query_ID))
|
||||||
!@ora_exec($Query_ID)
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
$this->halt("<BR> nextid() function - unable to create sequence");
|
$this->halt('<BR> nextid() function - unable to create sequence');
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ora_parse($Query_ID,"SELECT $seq_name.NEXTVAL FROM DUAL");
|
@ora_parse($Query_ID,"SELECT $seq_name.NEXTVAL FROM DUAL");
|
||||||
}
|
}
|
||||||
if (!@ora_exec($Query_ID)) {
|
if (!@ora_exec($Query_ID))
|
||||||
|
{
|
||||||
$this->halt("<BR>ora_exec() failed:<BR>nextID function");
|
$this->halt("<BR>ora_exec() failed:<BR>nextID function");
|
||||||
}
|
}
|
||||||
if (@ora_fetch($Query_ID) ) {
|
if (@ora_fetch($Query_ID) )
|
||||||
|
{
|
||||||
$next_id = ora_getcolumn($Query_ID, 0);
|
$next_id = ora_getcolumn($Query_ID, 0);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
$next_id = 0;
|
$next_id = 0;
|
||||||
}
|
}
|
||||||
if ( Query_ID > 0 ) {
|
if ( Query_ID > 0 )
|
||||||
|
{
|
||||||
ora_close(Query_ID);
|
ora_close(Query_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $next_id;
|
return $next_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
function disconnect() {
|
function disconnect()
|
||||||
if($this->Debug) {
|
{
|
||||||
|
if($this->Debug)
|
||||||
|
{
|
||||||
echo "Debug: Disconnecting $this->Query_ID...<br>\n";
|
echo "Debug: Disconnecting $this->Query_ID...<br>\n";
|
||||||
}
|
}
|
||||||
if ( $this->Query_ID < 1 ) {
|
if ( $this->Query_ID < 1 )
|
||||||
|
{
|
||||||
echo "<B>Warning</B>: disconnect(): Cannot free ID $this->Query_ID\n";
|
echo "<B>Warning</B>: disconnect(): Cannot free ID $this->Query_ID\n";
|
||||||
# return();
|
# return();
|
||||||
}
|
}
|
||||||
ora_close($this->Query_ID);
|
ora_close($this->Query_ID);
|
||||||
$this->Query_ID=0;
|
$this->Query_ID=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* private: error handling */
|
/* private: error handling */
|
||||||
function halt($msg) {
|
function halt($msg)
|
||||||
if ($this->Halt_On_Error == "no")
|
{
|
||||||
|
if ($this->Halt_On_Error == 'no')
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$this->haltmsg($msg);
|
$this->haltmsg($msg);
|
||||||
|
|
||||||
if ($this->Halt_On_Error != "report")
|
if ($this->Halt_On_Error != 'report')
|
||||||
die("Session halted.");
|
{
|
||||||
|
die('Session halted.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function haltmsg($msg) {
|
function haltmsg($msg)
|
||||||
|
{
|
||||||
printf("<b>Database error:</b> %s<br>\n", $msg);
|
printf("<b>Database error:</b> %s<br>\n", $msg);
|
||||||
printf("<b>Oracle Error</b>: %s (%s)<br>\n",
|
printf("<b>Oracle Error</b>: %s (%s)<br>\n",
|
||||||
$this->Errno,
|
$this->Errno,
|
||||||
$this->Error);
|
$this->Error);
|
||||||
}
|
}
|
||||||
|
|
||||||
function table_names() {
|
function table_names()
|
||||||
|
{
|
||||||
$this->connect();
|
$this->connect();
|
||||||
$this->query("
|
$this->query('SELECT table_name,tablespace_name FROM user_tables');
|
||||||
SELECT table_name,tablespace_name
|
|
||||||
FROM user_tables");
|
|
||||||
$i=0;
|
$i=0;
|
||||||
while ($this->next_record())
|
while ($this->next_record())
|
||||||
{
|
{
|
||||||
$info[$i]["table_name"] =$this->Record["table_name"];
|
$info[$i]['table_name'] = $this->Record['table_name'];
|
||||||
$info[$i]["tablespace_name"]=$this->Record["tablespace_name"];
|
$info[$R]['tablespace_name'] = $this->Record['tablespace_name'];
|
||||||
$i++;
|
$i++;
|
||||||
}
|
}
|
||||||
return $info;
|
return $info;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -748,6 +748,5 @@
|
|||||||
return lang('showing x',$total_records);
|
return lang('showing x',$total_records);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} // End of nextmatchs class
|
||||||
// End of nextmatchs class
|
|
||||||
?>
|
?>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user