KumbiaPHP  beta2
Framework PHP
 Todo Estructuras de Datos Namespaces Archivos Funciones Variables Páginas
oracle.php
Ir a la documentación de este archivo.
1 <?php
24 require_once CORE_PATH . 'libs/db/adapters/pdo.php';
25 
33 class DbPdoOracle extends DbPDO
34 {
35 
39  protected $db_rbdm = "oci";
40 
45  const TYPE_INTEGER = "INTEGER";
46 
51  const TYPE_DATE = "DATE";
52 
57  const TYPE_VARCHAR = "VARCHAR2";
58 
63  const TYPE_DECIMAL = "DECIMAL";
64 
69  const TYPE_DATETIME = "DATETIME";
70 
75  const TYPE_CHAR = "CHAR";
76 
81  public function initialize()
82  {
83  $this->pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false);
84  $this->exec("alter session set nls_date_format = 'YYYY-MM-DD'");
85  $this->begin();
86  }
87 
94  public function limit($sql, $number)
95  {
96  if (!is_numeric($number) || $number < 0) {
97  return $sql;
98  }
99  if (eregi("ORDER[\t\n\r ]+BY", $sql)) {
100  if (stripos($sql, "WHERE")) {
101  return eregi_replace("ORDER[\t\n\r ]+BY", "AND ROWNUM <= $number ORDER BY", $sql);
102  } else {
103  return eregi_replace("ORDER[\t\n\r ]+BY", "WHERE ROWNUM <= $number ORDER BY", $sql);
104  }
105  } else {
106  if (stripos($sql, "WHERE")) {
107  return "$sql AND ROWNUM <= $number";
108  } else {
109  return "$sql WHERE ROWNUM <= $number";
110  }
111  }
112  }
113 
120  public function drop_table($table, $if_exists=true)
121  {
122  if ($if_exists) {
123  if ($this->table_exists($table)) {
124  return $this->query("DROP TABLE $table");
125  } else {
126  return true;
127  }
128  } else {
129  return $this->query("DROP TABLE $table");
130  }
131  }
132 
146  public function create_table($table, $definition, $index=array())
147  {
148  $create_sql = "CREATE TABLE $table (";
149  if (!is_array($definition)) {
150  new KumbiaException("Definici&oacute;n invalida para crear la tabla '$table'");
151  return false;
152  }
153  $create_lines = array();
154  $index = array();
155  $unique_index = array();
156  $primary = array();
157  //$not_null = "";
158  //$size = "";
159  foreach ($definition as $field => $field_def) {
160  if (isset($field_def['not_null'])) {
161  $not_null = $field_def['not_null'] ? 'NOT NULL' : '';
162  } else {
163  $not_null = "";
164  }
165  if (isset($field_def['size'])) {
166  $size = $field_def['size'] ? '(' . $field_def['size'] . ')' : '';
167  } else {
168  $size = "";
169  }
170  if (isset($field_def['index'])) {
171  if ($field_def['index']) {
172  $index[] = "INDEX($field)";
173  }
174  }
175  if (isset($field_def['unique_index'])) {
176  if ($field_def['unique_index']) {
177  $index[] = "UNIQUE($field)";
178  }
179  }
180  if (isset($field_def['primary'])) {
181  if ($field_def['primary']) {
182  $primary[] = "$field";
183  }
184  }
185  if (isset($field_def['auto'])) {
186  if ($field_def['auto']) {
187  $this->query("CREATE SEQUENCE {$table}_{$field}_seq START WITH 1");
188  }
189  }
190  if (isset($field_def['extra'])) {
191  $extra = $field_def['extra'];
192  } else {
193  $extra = "";
194  }
195  $create_lines[] = "$field " . $field_def['type'] . $size . ' ' . $not_null . ' ' . $extra;
196  }
197  $create_sql.= join(',', $create_lines);
198  $last_lines = array();
199  if (count($primary)) {
200  $last_lines[] = 'PRIMARY KEY(' . join(",", $primary) . ')';
201  }
202  if (count($index)) {
203  $last_lines[] = join(',', $index);
204  }
205  if (count($unique_index)) {
206  $last_lines[] = join(',', $unique_index);
207  }
208  if (count($last_lines)) {
209  $create_sql.= ',' . join(',', $last_lines) . ')';
210  }
211  return $this->query($create_sql);
212  }
213 
219  function list_tables()
220  {
221  return $this->fetch_all("SELECT table_name FROM all_tables");
222  }
223 
229  public function last_insert_id($table='', $primary_key='')
230  {
234  if ($table && $primary_key) {
235  $sequence = $table . "_" . $primary_key . "_seq";
236  $value = $this->fetch_one("SELECT $sequence.CURRVAL FROM dual");
237  return $value[0];
238  }
239  return false;
240  }
241 
248  function table_exists($table, $schema='')
249  {
250  $num = $this->fetch_one("SELECT COUNT(*) FROM ALL_TABLES WHERE TABLE_NAME = '" . strtoupper($table) . "'");
251  return $num[0];
252  }
253 
260  public function describe_table($table, $schema='')
261  {
265  $describe = $this->fetch_all("SELECT LOWER(ALL_TAB_COLUMNS.COLUMN_NAME) AS FIELD, LOWER(ALL_TAB_COLUMNS.DATA_TYPE) AS TYPE, ALL_TAB_COLUMNS.DATA_LENGTH AS LENGTH, (SELECT COUNT(*) FROM ALL_CONS_COLUMNS WHERE TABLE_NAME = '" . strtoupper($table) . "' AND ALL_CONS_COLUMNS.COLUMN_NAME = ALL_TAB_COLUMNS.COLUMN_NAME AND ALL_CONS_COLUMNS.POSITION IS NOT NULL) AS KEY, ALL_TAB_COLUMNS.NULLABLE AS ISNULL FROM ALL_TAB_COLUMNS WHERE ALL_TAB_COLUMNS.TABLE_NAME = '" . strtoupper($table) . "'");
266  $final_describe = array();
267  foreach ($describe as $key => $value) {
268  $final_describe[] = array(
269  "Field" => $value["field"],
270  "Type" => $value["type"],
271  "Null" => $value["isnull"] == "Y" ? "YES" : "NO",
272  "Key" => $value["key"] == 1 ? "PRI" : ""
273  );
274  }
275  return $final_describe;
276  }
277 
278 }