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

📄 adodb-datadict.inc.php

📁 asterisk 計費模塊
💻 PHP
📖 第 1 页 / 共 2 页
字号:
	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=array())	{		list($lines,$pkey,$idxs) = $this->_GenFields($flds, true);		// genfields can return FALSE at times		if ($lines == null) $lines = array();				$taboptions = $this->_Options($tableoptions);		$tabname = $this->TableName ($tabname);		$sql = $this->_TableSQL($tabname,$lines,$pkey,$taboptions);				// ggiunta - 2006/10/12 - KLUDGE:        // if we are on autoincrement, and table options includes REPLACE, the        // autoincrement sequence has already been dropped on table creation sql, so        // we avoid passing REPLACE to trigger creation code. This prevents        // creating sql that double-drops the sequence        if ($this->autoIncrement && isset($taboptions['REPLACE']))        	unset($taboptions['REPLACE']);		$tsql = $this->_Triggers($tabname,$taboptions);		foreach($tsql as $s) $sql[] = $s;				if (is_array($idxs)) {			foreach($idxs as $idx => $idxdef) {				$sql_idxs = $this->CreateIndexSql($idx, $tabname,  $idxdef['cols'], $idxdef['opts']);				$sql = array_merge($sql, $sql_idxs);			}		}		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 'INDEX':						$f1['INDEX'] = '';						// fall through intentionally					case 'CONSTRAINT':					case 'DEFAULT': 						$hasparam = $token;						break;					default:						if ($hasparam) $f1[$hasparam] = $token;						else $f1[] = $token;						$hasparam = false;						break;					}				}				// 'index' token without a name means single column index: name it after column				if (array_key_exists('INDEX', $f1) && $f1['INDEX'] == '') {					$f1['INDEX'] = isset($f0['NAME']) ? $f0['NAME'] : $f0[0];					// check if column name used to create an index name was quoted					if (($f1['INDEX'][0] == '"' || $f1['INDEX'][0] == "'" || $f1['INDEX'][0] == "`") &&						($f1['INDEX'][0] == substr($f1['INDEX'], -1))) {						$f1['INDEX'] = $f1['INDEX'][0].'idx_'.substr($f1['INDEX'], 1, -1).$f1['INDEX'][0];					}					else						$f1['INDEX'] = 'idx_'.$f1['INDEX'];				}				// reset it, so we don't get next field 1st token as INDEX...				$hasparam = false;				$flds[] = $f1;							}		}		$this->autoIncrement = false;		$lines = array();		$pkey = array();		$idxs = 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;			$findex = '';			$funiqueindex = 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':                // a primary key col can be non unique in itself (if key spans many cols...)				case 'PRIMARY':	$fprimary = $v; $fnotnull = true; /*$funiqueindex = 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;				// let INDEX keyword create a 'very standard' index on column				case 'INDEX': $findex = $v; break;				case 'UNIQUE': $funiqueindex = true; 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;						// build list of indexes			if ($findex != '') {				if (array_key_exists($findex, $idxs)) {					$idxs[$findex]['cols'][] = ($fname);					if (in_array('UNIQUE', $idxs[$findex]['opts']) != $funiqueindex) {						if ($this->debug) ADOConnection::outp("Index $findex defined once UNIQUE and once not");					}					if ($funiqueindex && !in_array('UNIQUE', $idxs[$findex]['opts']))						$idxs[$findex]['opts'][] = 'UNIQUE';				}				else				{					$idxs[$findex] = array();					$idxs[$findex]['cols'] = array($fname);					if ($funiqueindex)						$idxs[$findex]['opts'] = array('UNIQUE');					else						$idxs[$findex]['opts'] = array();				}			}			//--------------------			// 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 ($fdefault !== false && !$fnoquote) {				if ($ty == 'C' or $ty == 'X' or 					( substr($fdefault,0,1) != "'" && !is_numeric($fdefault))) {					if (($ty == 'D' || $ty == 'T') && strtolower($fdefault) != 'null') {						// convert default date into database-aware code						if ($ty == 'T')						{							$fdefault = $this->connection->DBTimeStamp($fdefault);						}						else						{							$fdefault = $this->connection->DBDate($fdefault);						}					}					else					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);						// add index creation			if ($widespacing) $fname = str_pad($fname,24);						 // check for field names appearing twice            if (array_key_exists($fid, $lines)) {            	 ADOConnection::outp("Field '$fname' defined twice");            }						$lines[$fid] = $fname.' '.$ftype.$suffix;						if ($fautoinc) $this->autoIncrement = true;		} // foreach $flds				return array($lines,$pkey,$idxs);	}	/**		 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)	{	global $ADODB_FETCH_MODE;			$save = $ADODB_FETCH_MODE;		$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;		if ($this->connection->fetchMode !== false) $savem = $this->connection->SetFetchMode(false);				// check table exists		$save_handler = $this->connection->raiseErrorFn;		$this->connection->raiseErrorFn = '';		$cols = $this->MetaColumns($tablename);		$this->connection->raiseErrorFn = $save_handler;				if (isset($savem)) $this->connection->SetFetchMode($savem);		$ADODB_FETCH_MODE = $save;				if ( empty($cols)) { 			return $this->CreateTableSQL($tablename, $flds, $tableoptions);		}				if (is_array($flds)) {		// Cycle through the update fields, comparing		// existing fields to fields to update.		// if the Metatype and size is exactly the		// same, ignore - by Mark Newham			$holdflds = array();			foreach($flds as $k=>$v) {				if ( isset($cols[$k]) && is_object($cols[$k]) ) {					// If already not allowing nulls, then don't change					$obj = $cols[$k];					if (isset($obj->not_null) && $obj->not_null)						$v = str_replace('NOT NULL','',$v);					$c = $cols[$k];					$ml = $c->max_length;					$mt = $this->MetaType($c->type,$ml);					if ($ml == -1) $ml = '';					if ($mt == 'X') $ml = $v['SIZE'];					if (($mt != $v['TYPE']) ||  $ml != $v['SIZE']) {						$holdflds[$k] = $v;					}				} else {					$holdflds[$k] = $v;				}					}			$flds = $holdflds;		}			// already exists, alter table instead		list($lines,$pkey,$idxs) = $this->_GenFields($flds);		// genfields can return FALSE at times		if ($lines == null) $lines = array();		$alter = 'ALTER TABLE ' . $this->TableName($tablename);		$sql = array();		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)) {					echo "<h3>$this->alterCol cannot be changed to $flds currently</h3>";					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 + -