C:/lib/adodb/drivers/adodb-sapdb.inc.php Quellcode

adodb-sapdb.inc.php
gehe zur Dokumentation dieser Datei
1 <?php
2 /*
3 V5.19dev ??-???-2014 (c) 2000-2014 John Lim (jlim#natsoft.com). All rights reserved.
4  Released under both BSD license and Lesser GPL library license.
5  Whenever there is any discrepancy between the two licenses,
6  the BSD license will take precedence.
7 Set tabs to 4 for best viewing.
8 
9  Latest version is available at http://adodb.sourceforge.net
10 
11  SAPDB data driver. Requires ODBC.
12 
13 */
14 
15 // security - hide paths
16 if (!defined('ADODB_DIR')) die();
17 
18 if (!defined('_ADODB_ODBC_LAYER')) {
19  include(ADODB_DIR."/drivers/adodb-odbc.inc.php");
20 }
21 if (!defined('ADODB_SAPDB')){
22 define('ADODB_SAPDB',1);
23 
24 class ADODB_SAPDB extends ADODB_odbc {
25  var $databaseType = "sapdb";
26  var $concat_operator = '||';
27  var $sysDate = 'DATE';
28  var $sysTimeStamp = 'TIMESTAMP';
29  var $fmtDate = "'Y-m-d'";
30  var $fmtTimeStamp = "'Y-m-d H:i:s'";
31  var $hasInsertId = true;
32  var $_bindInputArray = true;
33 
34  function ADODB_SAPDB()
35  {
36  //if (strncmp(PHP_OS,'WIN',3) === 0) $this->curmode = SQL_CUR_USE_ODBC;
37  $this->ADODB_odbc();
38  }
39 
40  function ServerInfo()
41  {
42  $info = ADODB_odbc::ServerInfo();
43  if (!$info['version'] && preg_match('/([0-9.]+)/',$info['description'],$matches)) {
44  $info['version'] = $matches[1];
45  }
46  return $info;
47  }
48 
49  function MetaPrimaryKeys($table)
50  {
51  $table = $this->Quote(strtoupper($table));
52 
53  return $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table AND mode='KEY' ORDER BY pos");
54  }
55 
56  function MetaIndexes ($table, $primary = FALSE, $owner = false)
57  {
58  $table = $this->Quote(strtoupper($table));
59 
60  $sql = "SELECT INDEXNAME,TYPE,COLUMNNAME FROM INDEXCOLUMNS ".
61  " WHERE TABLENAME=$table".
62  " ORDER BY INDEXNAME,COLUMNNO";
63 
64  global $ADODB_FETCH_MODE;
65  $save = $ADODB_FETCH_MODE;
66  $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
67  if ($this->fetchMode !== FALSE) {
68  $savem = $this->SetFetchMode(FALSE);
69  }
70 
71  $rs = $this->Execute($sql);
72  if (isset($savem)) {
73  $this->SetFetchMode($savem);
74  }
75  $ADODB_FETCH_MODE = $save;
76 
77  if (!is_object($rs)) {
78  return FALSE;
79  }
80 
81  $indexes = array();
82  while ($row = $rs->FetchRow()) {
83  $indexes[$row[0]]['unique'] = $row[1] == 'UNIQUE';
84  $indexes[$row[0]]['columns'][] = $row[2];
85  }
86  if ($primary) {
87  $indexes['SYSPRIMARYKEYINDEX'] = array(
88  'unique' => True, // by definition
89  'columns' => $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table AND mode='KEY' ORDER BY pos"),
90  );
91  }
92  return $indexes;
93  }
94 
95  function MetaColumns ($table)
96  {
97  global $ADODB_FETCH_MODE;
98  $save = $ADODB_FETCH_MODE;
99  $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
100  if ($this->fetchMode !== FALSE) {
101  $savem = $this->SetFetchMode(FALSE);
102  }
103  $table = $this->Quote(strtoupper($table));
104 
105  $retarr = array();
106  foreach($this->GetAll("SELECT COLUMNNAME,DATATYPE,LEN,DEC,NULLABLE,MODE,\"DEFAULT\",CASE WHEN \"DEFAULT\" IS NULL THEN 0 ELSE 1 END AS HAS_DEFAULT FROM COLUMNS WHERE tablename=$table ORDER BY pos") as $column)
107  {
108  $fld = new ADOFieldObject();
109  $fld->name = $column[0];
110  $fld->type = $column[1];
111  $fld->max_length = $fld->type == 'LONG' ? 2147483647 : $column[2];
112  $fld->scale = $column[3];
113  $fld->not_null = $column[4] == 'NO';
114  $fld->primary_key = $column[5] == 'KEY';
115  if ($fld->has_default = $column[7]) {
116  if ($fld->primary_key && $column[6] == 'DEFAULT SERIAL (1)') {
117  $fld->auto_increment = true;
118  $fld->has_default = false;
119  } else {
120  $fld->default_value = $column[6];
121  switch($fld->type) {
122  case 'VARCHAR':
123  case 'CHARACTER':
124  case 'LONG':
125  $fld->default_value = $column[6];
126  break;
127  default:
128  $fld->default_value = trim($column[6]);
129  break;
130  }
131  }
132  }
133  $retarr[$fld->name] = $fld;
134  }
135  if (isset($savem)) {
136  $this->SetFetchMode($savem);
137  }
138  $ADODB_FETCH_MODE = $save;
139 
140  return $retarr;
141  }
142 
143  function MetaColumnNames($table)
144  {
145  $table = $this->Quote(strtoupper($table));
146 
147  return $this->GetCol("SELECT columnname FROM COLUMNS WHERE tablename=$table ORDER BY pos");
148  }
149 
150  // unlike it seems, this depends on the db-session and works in a multiuser environment
151  function _insertid($table,$column)
152  {
153  return empty($table) ? False : $this->GetOne("SELECT $table.CURRVAL FROM DUAL");
154  }
155 
156  /*
157  SelectLimit implementation problems:
158 
159  The following will return random 10 rows as order by performed after "WHERE rowno<10"
160  which is not ideal...
161 
162  select * from table where rowno < 10 order by 1
163 
164  This means that we have to use the adoconnection base class SelectLimit when
165  there is an "order by".
166 
167  See http://listserv.sap.com/pipermail/sapdb.general/2002-January/010405.html
168  */
169 
170 };
171 
172 
173 class ADORecordSet_sapdb extends ADORecordSet_odbc {
174 
175  var $databaseType = "sapdb";
176 
177  function ADORecordSet_sapdb($id,$mode=false)
178  {
179  $this->ADORecordSet_odbc($id,$mode);
180  }
181 }
182 
183 } //define
184 ?>




Korrekturen, Hinweise und Ergänzungen

Bitte scheuen Sie sich nicht und melden Sie, was auf dieser Seite sachlich falsch oder irreführend ist, was ergänzt werden sollte, was fehlt usw. Dazu bitte oben aus dem Menü Seite den Eintrag Support Forum wählen. Es ist eine kostenlose Anmeldung erforderlich, um Anmerkungen zu posten. Unpassende Postings, Spam usw. werden kommentarlos entfernt.