You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							121 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							121 lines
						
					
					
						
							3.2 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								  V4.50 6 July 2004  (c) 2000-2005 John Lim (jlim@natsoft.com.my). All rights reserved.
							 | 
						|
								  Released under both BSD license and Lesser GPL library license. 
							 | 
						|
								  Whenever there is any discrepancy between the two licenses, 
							 | 
						|
								  the BSD license will take precedence.
							 | 
						|
									
							 | 
						|
								  Set tabs to 4 for best viewing.
							 | 
						|
								  
							 | 
						|
								  Modified from datadict-generic.inc.php for sapdb by RalfBecker-AT-outdoor-training.de
							 | 
						|
								*/
							 | 
						|
								
							 | 
						|
								// security - hide paths
							 | 
						|
								if (!defined('ADODB_DIR')) die();
							 | 
						|
								
							 | 
						|
								class ADODB2_sapdb extends ADODB_DataDict {
							 | 
						|
									
							 | 
						|
									var $databaseType = 'sapdb';
							 | 
						|
									var $seqField = false;	
							 | 
						|
									var $renameColumn = 'RENAME COLUMN %s.%s TO %s';
							 | 
						|
								 	
							 | 
						|
								 	function ActualType($meta)
							 | 
						|
									{
							 | 
						|
										switch($meta) {
							 | 
						|
										case 'C': return 'VARCHAR';
							 | 
						|
										case 'XL':
							 | 
						|
										case 'X': return 'LONG';
							 | 
						|
										
							 | 
						|
										case 'C2': return 'VARCHAR UNICODE';
							 | 
						|
										case 'X2': return 'LONG UNICODE';
							 | 
						|
										
							 | 
						|
										case 'B': return 'LONG';
							 | 
						|
											
							 | 
						|
										case 'D': return 'DATE';
							 | 
						|
										case 'T': return 'TIMESTAMP';
							 | 
						|
										
							 | 
						|
										case 'L': return 'BOOLEAN';
							 | 
						|
										case 'I': return 'INTEGER';
							 | 
						|
										case 'I1': return 'FIXED(3)';
							 | 
						|
										case 'I2': return 'SMALLINT';
							 | 
						|
										case 'I4': return 'INTEGER';
							 | 
						|
										case 'I8': return 'FIXED(20)';
							 | 
						|
										
							 | 
						|
										case 'F': return 'FLOAT(38)';
							 | 
						|
										case 'N': return 'FIXED';
							 | 
						|
										default:
							 | 
						|
											return $meta;
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function MetaType($t,$len=-1,$fieldobj=false)
							 | 
						|
									{
							 | 
						|
										if (is_object($t)) {
							 | 
						|
											$fieldobj = $t;
							 | 
						|
											$t = $fieldobj->type;
							 | 
						|
											$len = $fieldobj->max_length;
							 | 
						|
										}
							 | 
						|
										static $maxdb_type2adodb = array(
							 | 
						|
											'VARCHAR'	=> 'C',
							 | 
						|
											'CHARACTER'	=> 'C',
							 | 
						|
											'LONG'		=> 'X',		// no way to differ between 'X' and 'B' :-(
							 | 
						|
											'DATE'		=> 'D',
							 | 
						|
											'TIMESTAMP'	=> 'T',
							 | 
						|
											'BOOLEAN'	=> 'L',
							 | 
						|
											'INTEGER'	=> 'I4',
							 | 
						|
											'SMALLINT'	=> 'I2',
							 | 
						|
											'FLOAT'		=> 'F',
							 | 
						|
											'FIXED'		=> 'N',
							 | 
						|
										);
							 | 
						|
										$type = isset($maxdb_type2adodb[$t]) ? $maxdb_type2adodb[$t] : 'C';
							 | 
						|
								
							 | 
						|
										// convert integer-types simulated with fixed back to integer
							 | 
						|
										if ($t == 'FIXED' && !$fieldobj->scale && ($len == 20 || $len == 3)) {
							 | 
						|
											$type = $len == 20 ? 'I8' : 'I1';
							 | 
						|
										}
							 | 
						|
										if ($fieldobj->auto_increment) $type = 'R';
							 | 
						|
								
							 | 
						|
										return $type;
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									// return string must begin with space
							 | 
						|
									function _CreateSuffix($fname,$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned)
							 | 
						|
									{	
							 | 
						|
										$suffix = '';
							 | 
						|
										if ($funsigned) $suffix .= ' UNSIGNED';
							 | 
						|
										if ($fnotnull) $suffix .= ' NOT NULL';
							 | 
						|
										if ($fautoinc) $suffix .= ' DEFAULT SERIAL';
							 | 
						|
										elseif (strlen($fdefault)) $suffix .= " DEFAULT $fdefault";
							 | 
						|
										if ($fconstraint) $suffix .= ' '.$fconstraint;
							 | 
						|
										return $suffix;
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function AddColumnSQL($tabname, $flds)
							 | 
						|
									{
							 | 
						|
										$tabname = $this->TableName ($tabname);
							 | 
						|
										$sql = array();
							 | 
						|
										list($lines,$pkey) = $this->_GenFields($flds);
							 | 
						|
										return array( 'ALTER TABLE ' . $tabname . ' ADD (' . implode(', ',$lines) . ')' );
							 | 
						|
									}
							 | 
						|
									
							 | 
						|
									function AlterColumnSQL($tabname, $flds)
							 | 
						|
									{
							 | 
						|
										$tabname = $this->TableName ($tabname);
							 | 
						|
										$sql = array();
							 | 
						|
										list($lines,$pkey) = $this->_GenFields($flds);
							 | 
						|
										return array( 'ALTER TABLE ' . $tabname . ' MODIFY (' . implode(', ',$lines) . ')' );
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									function DropColumnSQL($tabname, $flds)
							 | 
						|
									{
							 | 
						|
										$tabname = $this->TableName ($tabname);
							 | 
						|
										if (!is_array($flds)) $flds = explode(',',$flds);
							 | 
						|
										foreach($flds as $k => $v) {
							 | 
						|
											$flds[$k] = $this->NameQuote($v);
							 | 
						|
										}
							 | 
						|
										return array( 'ALTER TABLE ' . $tabname . ' DROP (' . implode(', ',$flds) . ')' );
							 | 
						|
									}	
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								?>
							 |