$l) if(substr($l,0,2)=='--') unset($fl[$n]); $fl = explode(";\n", implode("\n",$fl)); unset($fl[count($fl)-1]); foreach($fl as $sql) { if(empty($sql)) continue; if(!DBexecute($sql,0)) { $error = ''; return false; } } return true; } function DBstart() { /* TODO *//* start transaction */ // lock_db_access(); /* check DBselect & DBexecute */ } function DBend($result) { /* end transaction *//* TODO */ if($result) { // OK /* commit TODO */ } else { // FAIL /* rollback TODO */ } // unlock_db_access(); /* check DBselect & DBexecute */ } /* NOTE: LIMIT and OFFSET records Example: select 6-15 row. MySQL: SELECT a FROM tbl LIMIT 5,10 SELECT a FROM tbl LIMIT 10 OFFSET 5 PostgreSQL: SELECT a FROM tbl LIMIT 10 OFFSET 5 Oracle: SELECT a FROM tbe WHERE ROWNUM < 15 // ONLY < 15 SELECT * FROM (SELECT ROWNUM as RN, * FROM tbl) WHERE RN BETWEEN 6 AND 15 */ function &DBselect($query, $limit='NO') { global $DB, $DB_TYPE; COpt::savesqlrequest($query); $result = false; switch($DB_TYPE) { case "MYSQL": if(is_numeric($limit)) { $query .= ' limit '.intval($limit); } $result=mysql_query($query,$DB); if(!$result) { error("Error in query [$query] [".mysql_error()."]"); } break; case "POSTGRESQL": if(is_numeric($limit)) { $query .= ' limit '.intval($limit); } if(!($result = pg_query($DB,$query))) { error("Error in query [$query] [".pg_last_error()."]"); } break; case "ORACLE": if(is_numeric($limit)) { $query = 'select * from ('.$query.') where rownum<'.intval($limit); } $stid=OCIParse($DB,$query); if(!$stid) { $e=@ocierror(); error("SQL error [".$e["message"]."] in [".$e["sqltext"]."]"); } $result=@OCIExecute($stid); if(!$result) { $e=ocierror($stid); error("SQL error [".$e["message"]."] in [".$e["sqltext"]."]"); } else { $result = $stid; } break; case "SQLITE3": lock_db_access(); if(!($result = sqlite3_query($DB,$query))) { error("Error in query [$query] [".sqlite3_error($DB)."]"); } else { $data = array(); while($row = sqlite3_fetch_array($result)) { foreach($row as $id => $name) { if(!strstr($id,'.')) continue; $ids = explode('.',$id); $row[array_pop($ids)] = $row[$id]; unset($row[$id]); } $data[] = $row; } sqlite3_query_close($result); $result = &$data; } unlock_db_access(); break; } return $result; } function DBexecute($query, $skip_error_messages=0) { global $DB,$DB_TYPE; COpt::savesqlrequest($query); $result = false; switch($DB_TYPE) { case "MYSQL": $result=mysql_query($query,$DB); if(!$result) { error("Error in query [$query] [".mysql_error()."]"); } break; case "POSTGRESQL": if(!($result = pg_query($DB,$query))) { error("Error in query [$query] [".pg_last_error()."]"); } break; case "ORACLE": $result = DBselect($query); if(!$result) { $e = ocierror($stid); error("SQL error [".$e["message"]."] in [".$e["sqltext"]."]"); } break; case "SQLITE3": lock_db_access(); $result = sqlite3_exec($DB, $query); if(!$result) { error("Error in query [$query] [".sqlite3_error($DB)."]"); } unlock_db_access(); break; } return $result; } function DBfetch(&$cursor) { global $DB_TYPE; $result = false; switch($DB_TYPE) { case "MYSQL": $result = mysql_fetch_array($cursor); break; case "POSTGRESQL": $result = pg_fetch_array($cursor); break; case "ORACLE": if(ocifetchinto($cursor, $row, OCI_ASSOC+OCI_NUM+OCI_RETURN_NULLS)) { $result = array(); $keys = (array_keys($row)); foreach ($keys as $k) $result[strtolower($k)] = $row[$k]; } break; case "SQLITE3": if($cursor) { $result = array_shift($cursor); if(is_null($result)) $result = false; } break; } return $result; } /* string value prepearing */ if(isset($DB_TYPE) && $DB_TYPE == "ORACLE") { function zbx_dbstr($var) { return "'".ereg_replace('\'','\'\'',$var)."'"; } } else { function zbx_dbstr($var) { return "'".addslashes($var)."'"; } } function zbx_dbconcat($params) { global $DB_TYPE; switch($DB_TYPE) { case "SQLITE3": return implode(' || ',$params); default: return 'CONCAT('.implode(',',$params).')'; } } function DBid2nodeid($id_name) { global $DB_TYPE; switch($DB_TYPE) { case "MYSQL": $odiv = 'div'; break; default: $odiv = '/'; } return '('.$id_name.' '.$odiv.' 100000000000000)'; } function id2nodeid($id_var) { return (int)bcdiv("$id_var","100000000000000"); } function get_dbid($table,$field) { global $ZBX_CURNODEID; if(!isset($ZBX_CURNODEID)) init_nodes(); /* $row=DBfetch(DBselect("select max($field) as id from $table where ".DBid2nodeid($field)." in (".$ZBX_CURNODEID.")")); if($row && !is_null($row["id"])) { return bcadd($row["id"],1); } else { return bcadd(bcmul($ZBX_CURNODEID,"100000000000000"),1); }*/ $found = false; do { $row = DBfetch(DBselect("select nextid from ids where nodeid=$ZBX_CURNODEID and table_name='$table' and field_name='$field'")); if(!$row || is_null($row["nextid"])) { $row=DBfetch(DBselect("select max($field) as id from $table where ".DBid2nodeid($field)." in (".$ZBX_CURNODEID.")")); if(!$row || is_null($row["id"])) { DBexecute("insert into ids (nodeid,table_name,field_name,nextid) values ($ZBX_CURNODEID,'$table','$field',".bcadd(bcmul($ZBX_CURNODEID,"100000000000000"),1).")"); } else { DBexecute("insert into ids (nodeid,table_name,field_name,nextid) values ($ZBX_CURNODEID,'$table','$field',".$row["id"].")"); } continue; } else { $ret1 = $row["nextid"]; DBexecute("update ids set nextid=nextid+1 where nodeid=$ZBX_CURNODEID and table_name='$table' and field_name='$field'"); $row = DBfetch(DBselect("select nextid from ids where nodeid=$ZBX_CURNODEID and table_name='$table' and field_name='$field'")); if(!$row || is_null($row["nextid"])) { /* Should never be here */ continue; } else { $ret2 = $row["nextid"]; if(bccomp(bcadd($ret1,1),$ret2) ==0) { $found = true; } } } } while(false == $found); return $ret2; } ?>