source: branches/comu-ver2/data/module/adodb/drivers/adodb-sapdb.inc.php @ 18701

Revision 18701, 5.0 KB checked in by nanasess, 14 years ago (diff)

Copyright の更新(#601)

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Id Revision Date
  • Property svn:mime-type set to text/x-httpd-php
Line 
1<?php
2/*
3v4.992 10 Nov 2009  (c) 2000-2010 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.
7Set 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
16if (!defined('ADODB_DIR')) die();
17
18if (!defined('_ADODB_ODBC_LAYER')) {
19    include(ADODB_DIR."/drivers/adodb-odbc.inc.php");
20}
21if (!defined('ADODB_SAPDB')){
22define('ADODB_SAPDB',1);
23
24class 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'";   /// used by DBDate() as the default date format used by the database
30    var $fmtTimeStamp = "'Y-m-d H:i:s'"; /// used by DBTimeStamp as the default timestamp fmt.
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)
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
173class  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?>
Note: See TracBrowser for help on using the repository browser.