dbType = $dbType; $this->extractType($dbType); $this->extractLimit($dbType); if ($defaultValue !== null) $this->extractDefault($defaultValue); } /** * Extracts the PHP type from DB type. * * @param string $dbType * DB type * @return string */ protected function extractOraType($dbType) { if (strpos($dbType, 'FLOAT') !== false) return 'double'; if (strpos($dbType, 'NUMBER') !== false || strpos($dbType, 'INTEGER') !== false) { if (strpos($dbType, '(') && preg_match('/\((.*)\)/', $dbType, $matches)) { $values = explode(',', $matches[1]); if (isset($values[1]) and (((int) $values[1]) > 0)) return 'double'; else return 'integer'; } else return 'double'; } else return 'string'; } /** * Extracts the PHP type from DB type. * * @param string $dbType * DB type */ protected function extractType($dbType) { $this->type = $this->extractOraType($dbType); } /** * Extracts size, precision and scale information from column's DB type. * * @param string $dbType * the column's DB type */ protected function extractLimit($dbType) { if (strpos($dbType, '(') && preg_match('/\((.*)\)/', $dbType, $matches)) { $values = explode(',', $matches[1]); $this->size = $this->precision = (int) $values[0]; if (isset($values[1])) $this->scale = (int) $values[1]; } } /** * Extracts the default value for the column. * The value is typecasted to correct PHP type. * * @param mixed $defaultValue * the default value obtained from metadata */ protected function extractDefault($defaultValue) { if (stripos($defaultValue, 'timestamp') !== false) { $this->defaultValue = null; } else { $this->defaultValue = $this->typecast($defaultValue); } } }