30 $this->doctrineTypeMapping = array(
31 'smallint' =>
'smallint',
33 'integer' =>
'integer',
36 'varchar' =>
'string',
37 'character' =>
'string',
39 'decimal' =>
'decimal',
42 'timestamp' =>
'datetime',
53 if ( ! isset($field[
'length'])) {
54 if (array_key_exists(
'default', $field)) {
57 $field[
'length'] =
false;
62 $fixed = (isset($field[
'fixed'])) ? $field[
'fixed'] :
false;
64 return $fixed ? ($length ?
'CHAR(' . $length .
')' :
'CHAR(255)')
65 : ($length ?
'VARCHAR(' . $length .
')' :
'VARCHAR(255)');
143 if ( ! empty($columnDef[
'autoincrement'])) {
144 $autoinc =
' GENERATED BY DEFAULT AS IDENTITY';
158 if (isset($fieldDeclaration[
'version']) && $fieldDeclaration[
'version'] ==
true) {
159 return "TIMESTAMP(0) WITH DEFAULT";
162 return 'TIMESTAMP(0)';
213 return "SELECT DISTINCT c.tabschema, c.tabname, c.colname, c.colno,
214 c.typename, c.default, c.nulls, c.length, c.scale,
215 c.identity, tc.type AS tabconsttype, k.colseq
216 FROM syscat.columns c
217 LEFT JOIN (syscat.keycoluse k JOIN syscat.tabconst tc
218 ON (k.tabschema = tc.tabschema
219 AND k.tabname = tc.tabname
221 ON (c.tabschema = k.tabschema
222 AND c.tabname = k.tabname
223 AND c.colname = k.colname)
224 WHERE UPPER(c.tabname) = UPPER('" . $table .
"') ORDER BY c.colno";
229 return "SELECT NAME FROM SYSIBM.SYSTABLES WHERE TYPE = 'T'";
245 return "SELECT NAME, TEXT FROM SYSIBM.SYSVIEWS";
250 return "SELECT NAME, COLNAMES, UNIQUERULE FROM SYSIBM.SYSINDEXES WHERE TBNAME = UPPER('" . $table .
"')";
255 return "SELECT TBNAME, RELNAME, REFTBNAME, DELETERULE, UPDATERULE, FKCOLNAMES, PKCOLNAMES ".
256 "FROM SYSIBM.SYSRELS WHERE TBNAME = UPPER('".$table.
"')";
261 return "CREATE VIEW ".$name.
" AS ".$sql;
266 return "DROP VIEW ".$name;
281 return "CREATE DATABASE ".$database;
286 return "DROP DATABASE ".$database.
";";
311 return 'VALUES CURRENT DATE';
321 return 'VALUES CURRENT TIME';
332 return "VALUES CURRENT TIMESTAMP";
357 if (isset($options[
'indexes'])) {
358 $indexes = $options[
'indexes'];
360 $options[
'indexes'] = array();
362 $sqls = parent::_getCreateTableSQL($tableName, $columns, $options);
364 foreach ($indexes as $index => $definition) {
380 $queryParts = array();
381 foreach ($diff->addedColumns AS $fieldName => $column) {
382 $queryParts[] =
'ADD COLUMN ' . $this->
getColumnDeclarationSQL($column->getQuotedName($this), $column->toArray());
385 foreach ($diff->removedColumns AS $column) {
386 $queryParts[] =
'DROP COLUMN ' . $column->getQuotedName($this);
389 foreach ($diff->changedColumns AS $columnDiff) {
391 $column = $columnDiff->column;
392 $queryParts[] =
'ALTER ' . ($columnDiff->oldColumnName) .
' '
396 foreach ($diff->renamedColumns AS $oldColumnName => $column) {
397 $queryParts[] =
'RENAME ' . $oldColumnName .
' TO ' . $column->getQuotedName($this);
400 if (count($queryParts) > 0) {
401 $sql[] =
'ALTER TABLE ' . $diff->name .
' ' . implode(
" ", $queryParts);
406 if ($diff->newName !==
false) {
407 $sql[] =
'RENAME TABLE TO ' . $diff->newName;
415 if (isset($field[
'notnull']) && $field[
'notnull'] && !isset($field[
'default'])) {
416 if (in_array((
string)$field[
'type'], array(
"Integer",
"BigInteger",
"SmallInteger"))) {
417 $field[
'default'] = 0;
418 }
else if((
string)$field[
'type'] ==
"DateTime") {
419 $field[
'default'] =
"00-00-00 00:00:00";
420 }
else if ((
string)$field[
'type'] ==
"Date") {
421 $field[
'default'] =
"00-00-00";
422 }
else if((
string)$field[
'type'] ==
"Time") {
423 $field[
'default'] =
"00:00:00";
425 $field[
'default'] =
'';
429 unset($field[
'default']);
430 if (isset($field[
'version']) && $field[
'version']) {
431 if ((
string)$field[
'type'] !=
"DateTime") {
432 $field[
'default'] =
"1";
436 return parent::getDefaultValueDeclarationSQL($field);
448 return 'INSERT INTO ' . $tableName .
' (' . $identifierColumnName .
') VALUES (DEFAULT)';
453 return "DECLARE GLOBAL TEMPORARY TABLE";
464 return "SESSION." . $tableName;
469 if ($limit ===
null && $offset ===
null) {
473 $limit = (int)$limit;
474 $offset = (int)(($offset)?:0);
477 $sql =
'SELECT db22.* FROM (SELECT ROW_NUMBER() OVER() AS DC_ROWNUM, db21.* '.
478 'FROM (' . $query .
') db21) db22 WHERE db22.DC_ROWNUM BETWEEN ' . ($offset+1) .
' AND ' . ($offset+$limit);
492 if ($startPos ==
false) {
493 return 'LOCATE(' . $substr .
', ' . $str .
')';
495 return 'LOCATE(' . $substr .
', ' . $str .
', '.$startPos.
')';
514 return 'SUBSTR(' . $value .
', ' . $from .
')';
516 return 'SUBSTR(' . $value .
', ' . $from .
', ' . $len .
')';
540 return strtoupper($column);
545 return ' WITH RR USE AND KEEP UPDATE LOCKS';
550 return 'SELECT 1 FROM sysibm.sysdummy1';
static notSupported($method)