⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adodb-datadict.inc.php

📁 Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。 它通过snmpget来获取数据
💻 PHP
📖 第 1 页 / 共 2 页
字号:
		}		return $sql;	}		/**	 * Rename one column	 *	 * Some DBM's can only do this together with changeing the type of the column (even if that stays the same, eg. mysql)	 * @param string $tabname table-name	 * @param string $oldcolumn column-name to be renamed	 * @param string $newcolumn new column-name	 * @param string $flds='' complete column-defintion-string like for AddColumnSQL, only used by mysql atm., default=''	 * @return array with SQL strings	 */	function RenameColumnSQL($tabname,$oldcolumn,$newcolumn,$flds='')	{		$tabname = $this->TableName ($tabname);		if ($flds) {			list($lines,$pkey) = $this->_GenFields($flds);			list(,$first) = each($lines);			list(,$column_def) = split("[\t ]+",$first,2);		}		return array(sprintf($this->renameColumn,$tabname,$this->NameQuote($oldcolumn),$this->NameQuote($newcolumn),$column_def));	}			/**	 * Drop one column	 *	 * Some DBM's can't do that on there own, you need to supply the complete defintion of the new table,	 * to allow, recreating the table and copying the content over to the new table	 * @param string $tabname table-name	 * @param string $flds column-name and type for the changed column	 * @param string $tableflds='' complete defintion of the new table, eg. for postgres, default ''	 * @param array/string $tableoptions='' options for the new table see CreateTableSQL, default ''	 * @return array with SQL strings	 */	function DropColumnSQL($tabname, $flds, $tableflds='',$tableoptions='')	{		$tabname = $this->TableName ($tabname);		if (!is_array($flds)) $flds = explode(',',$flds);		$sql = array();		$alter = 'ALTER TABLE ' . $tabname . $this->dropCol . ' ';		foreach($flds as $v) {			$sql[] = $alter . $this->NameQuote($v);		}		return $sql;	}		function DropTableSQL($tabname)	{		return array (sprintf($this->dropTable, $this->TableName($tabname)));	}		function RenameTableSQL($tabname,$newname)	{		return array (sprintf($this->renameTable, $this->TableName($tabname),$this->TableName($newname)));	}			/*	 Generate the SQL to create table. Returns an array of sql strings.	*/	function CreateTableSQL($tabname, $flds, $tableoptions=false)	{		if (!$tableoptions) $tableoptions = array();				list($lines,$pkey) = $this->_GenFields($flds, true);				$taboptions = $this->_Options($tableoptions);		$tabname = $this->TableName ($tabname);		$sql = $this->_TableSQL($tabname,$lines,$pkey,$taboptions);				$tsql = $this->_Triggers($tabname,$taboptions);		foreach($tsql as $s) $sql[] = $s;				return $sql;	}		function _GenFields($flds,$widespacing=false)	{		if (is_string($flds)) {			$padding = '     ';			$txt = $flds.$padding;			$flds = array();			$flds0 = Lens_ParseArgs($txt,',');			$hasparam = false;			foreach($flds0 as $f0) {				$f1 = array();				foreach($f0 as $token) {					switch (strtoupper($token)) {					case 'CONSTRAINT':					case 'DEFAULT': 						$hasparam = $token;						break;					default:						if ($hasparam) $f1[$hasparam] = $token;						else $f1[] = $token;						$hasparam = false;						break;					}				}				$flds[] = $f1;							}		}		$this->autoIncrement = false;		$lines = array();		$pkey = array();		foreach($flds as $fld) {			$fld = _array_change_key_case($fld);					$fname = false;			$fdefault = false;			$fautoinc = false;			$ftype = false;			$fsize = false;			$fprec = false;			$fprimary = false;			$fnoquote = false;			$fdefts = false;			$fdefdate = false;			$fconstraint = false;			$fnotnull = false;			$funsigned = false;						//-----------------			// Parse attributes			foreach($fld as $attr => $v) {				if ($attr == 2 && is_numeric($v)) $attr = 'SIZE';				else if (is_numeric($attr) && $attr > 1 && !is_numeric($v)) $attr = strtoupper($v);								switch($attr) {				case '0':				case 'NAME': 	$fname = $v; break;				case '1':				case 'TYPE': 	$ty = $v; $ftype = $this->ActualType(strtoupper($v)); break;								case 'SIZE': 									$dotat = strpos($v,'.'); if ($dotat === false) $dotat = strpos($v,',');								if ($dotat === false) $fsize = $v;								else {									$fsize = substr($v,0,$dotat);									$fprec = substr($v,$dotat+1);								}								break;				case 'UNSIGNED': $funsigned = true; break;				case 'AUTOINCREMENT':				case 'AUTO':	$fautoinc = true; $fnotnull = true; break;				case 'KEY':				case 'PRIMARY':	$fprimary = $v; $fnotnull = true; break;				case 'DEF':				case 'DEFAULT': $fdefault = $v; break;				case 'NOTNULL': $fnotnull = $v; break;				case 'NOQUOTE': $fnoquote = $v; break;				case 'DEFDATE': $fdefdate = $v; break;				case 'DEFTIMESTAMP': $fdefts = $v; break;				case 'CONSTRAINT': $fconstraint = $v; break;				} //switch			} // foreach $fld						//--------------------			// VALIDATE FIELD INFO			if (!strlen($fname)) {				if ($this->debug) ADOConnection::outp("Undefined NAME");				return false;			}						$fid = strtoupper(preg_replace('/^`(.+)`$/', '$1', $fname));			$fname = $this->NameQuote($fname);						if (!strlen($ftype)) {				if ($this->debug) ADOConnection::outp("Undefined TYPE for field '$fname'");				return false;			} else {				$ftype = strtoupper($ftype);			}						$ftype = $this->_GetSize($ftype, $ty, $fsize, $fprec);						if ($ty == 'X' || $ty == 'X2' || $ty == 'B') $fnotnull = false; // some blob types do not accept nulls						if ($fprimary) $pkey[] = $fname;						// some databases do not allow blobs to have defaults			if ($ty == 'X') $fdefault = false;						//--------------------			// CONSTRUCT FIELD SQL			if ($fdefts) {				if (substr($this->connection->databaseType,0,5) == 'mysql') {					$ftype = 'TIMESTAMP';				} else {					$fdefault = $this->connection->sysTimeStamp;				}			} else if ($fdefdate) {				if (substr($this->connection->databaseType,0,5) == 'mysql') {					$ftype = 'TIMESTAMP';				} else {					$fdefault = $this->connection->sysDate;				}			} else if (strlen($fdefault) && !$fnoquote)				if ($ty == 'C' or $ty == 'X' or 					( substr($fdefault,0,1) != "'" && !is_numeric($fdefault)))					if (strlen($fdefault) != 1 && substr($fdefault,0,1) == ' ' && substr($fdefault,strlen($fdefault)-1) == ' ') 						$fdefault = trim($fdefault);					else if (strtolower($fdefault) != 'null')						$fdefault = $this->connection->qstr($fdefault);			$suffix = $this->_CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned);						if ($widespacing) $fname = str_pad($fname,24);			$lines[$fid] = $fname.' '.$ftype.$suffix;						if ($fautoinc) $this->autoIncrement = true;		} // foreach $flds				return array($lines,$pkey);	}	/*		 GENERATE THE SIZE PART OF THE DATATYPE			$ftype is the actual type			$ty is the type defined originally in the DDL	*/	function _GetSize($ftype, $ty, $fsize, $fprec)	{		if (strlen($fsize) && $ty != 'X' && $ty != 'B' && strpos($ftype,'(') === false) {			$ftype .= "(".$fsize;			if (strlen($fprec)) $ftype .= ",".$fprec;			$ftype .= ')';		}		return $ftype;	}			// return string must begin with space	function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint)	{			$suffix = '';		if (strlen($fdefault)) $suffix .= " DEFAULT $fdefault";		if ($fnotnull) $suffix .= ' NOT NULL';		if ($fconstraint) $suffix .= ' '.$fconstraint;		return $suffix;	}		function _IndexSQL($idxname, $tabname, $flds, $idxoptions)	{		$sql = array();				if ( isset($idxoptions['REPLACE']) || isset($idxoptions['DROP']) ) {			$sql[] = sprintf ($this->dropIndex, $idxname);			if ( isset($idxoptions['DROP']) )				return $sql;		}				if ( empty ($flds) ) {			return $sql;		}				$unique = isset($idxoptions['UNIQUE']) ? ' UNIQUE' : '';			$s = 'CREATE' . $unique . ' INDEX ' . $idxname . ' ON ' . $tabname . ' ';				if ( isset($idxoptions[$this->upperName]) )			$s .= $idxoptions[$this->upperName];				if ( is_array($flds) )			$flds = implode(', ',$flds);		$s .= '(' . $flds . ')';		$sql[] = $s;				return $sql;	}		function _DropAutoIncrement($tabname)	{		return false;	}		function _TableSQL($tabname,$lines,$pkey,$tableoptions)	{		$sql = array();				if (isset($tableoptions['REPLACE']) || isset ($tableoptions['DROP'])) {			$sql[] = sprintf($this->dropTable,$tabname);			if ($this->autoIncrement) {				$sInc = $this->_DropAutoIncrement($tabname);				if ($sInc) $sql[] = $sInc;			}			if ( isset ($tableoptions['DROP']) ) {				return $sql;			}		}		$s = "CREATE TABLE $tabname (\n";		$s .= implode(",\n", $lines);		if (sizeof($pkey)>0) {			$s .= ",\n                 PRIMARY KEY (";			$s .= implode(", ",$pkey).")";		}		if (isset($tableoptions['CONSTRAINTS'])) 			$s .= "\n".$tableoptions['CONSTRAINTS'];				if (isset($tableoptions[$this->upperName.'_CONSTRAINTS'])) 			$s .= "\n".$tableoptions[$this->upperName.'_CONSTRAINTS'];				$s .= "\n)";		if (isset($tableoptions[$this->upperName])) $s .= $tableoptions[$this->upperName];		$sql[] = $s;				return $sql;	}		/*		GENERATE TRIGGERS IF NEEDED		used when table has auto-incrementing field that is emulated using triggers	*/	function _Triggers($tabname,$taboptions)	{		return array();	}		/*		Sanitize options, so that array elements with no keys are promoted to keys	*/	function _Options($opts)	{		if (!is_array($opts)) return array();		$newopts = array();		foreach($opts as $k => $v) {			if (is_numeric($k)) $newopts[strtoupper($v)] = $v;			else $newopts[strtoupper($k)] = $v;		}		return $newopts;	}		/*	"Florian Buzin [ easywe ]" <florian.buzin#easywe.de>		This function changes/adds new fields to your table. You don't	have to know if the col is new or not. It will check on its own.	*/	function ChangeTableSQL($tablename, $flds, $tableoptions = false)	{		// check table exists		$cols = &$this->MetaColumns($tablename);		if ( empty($cols)) { 			return $this->CreateTableSQL($tablename, $flds, $tableoptions);		}				// already exists, alter table instead		list($lines,$pkey) = $this->_GenFields($flds);		$alter = 'ALTER TABLE ' . $this->TableName($tablename);		foreach ( $lines as $id => $v ) {			if ( isset($cols[$id]) && is_object($cols[$id]) ) {							$flds = Lens_ParseArgs($v,',');								//  We are trying to change the size of the field, if not allowed, simply ignore the request.				if ($flds && in_array(strtoupper(substr($flds[0][1],0,4)),$this->invalidResizeTypes4)) continue;	 	 						$sql[] = $alter . $this->alterCol . ' ' . $v;			} else {				$sql[] = $alter . $this->addCol . ' ' . $v;			}		}				return $sql;	}} // class?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -