48 require_once 
'MDB2/Driver/Reverse/Common.php';
 
   66         MYSQLI_NOT_NULL_FLAG        => 
'not_null',
 
   67         MYSQLI_PRI_KEY_FLAG         => 
'primary_key',
 
   68         MYSQLI_UNIQUE_KEY_FLAG      => 
'unique_key',
 
   69         MYSQLI_MULTIPLE_KEY_FLAG    => 
'multiple_key',
 
   70         MYSQLI_BLOB_FLAG            => 
'blob',
 
   71         MYSQLI_UNSIGNED_FLAG        => 
'unsigned',
 
   72         MYSQLI_ZEROFILL_FLAG        => 
'zerofill',
 
   73         MYSQLI_AUTO_INCREMENT_FLAG  => 
'auto_increment',
 
   74         MYSQLI_TIMESTAMP_FLAG       => 
'timestamp',
 
   75         MYSQLI_SET_FLAG             => 
'set',
 
   78         MYSQLI_GROUP_FLAG           => 
'group_by' 
   87         MYSQLI_TYPE_DECIMAL     => 
'decimal',
 
   89         MYSQLI_TYPE_TINY        => 
'tinyint',
 
   90         MYSQLI_TYPE_SHORT       => 
'int',
 
   91         MYSQLI_TYPE_LONG        => 
'int',
 
   92         MYSQLI_TYPE_FLOAT       => 
'float',
 
   93         MYSQLI_TYPE_DOUBLE      => 
'double',
 
   95         MYSQLI_TYPE_TIMESTAMP   => 
'timestamp',
 
   96         MYSQLI_TYPE_LONGLONG    => 
'bigint',
 
   97         MYSQLI_TYPE_INT24       => 
'mediumint',
 
   98         MYSQLI_TYPE_DATE        => 
'date',
 
   99         MYSQLI_TYPE_TIME        => 
'time',
 
  100         MYSQLI_TYPE_DATETIME    => 
'datetime',
 
  101         MYSQLI_TYPE_YEAR        => 
'year',
 
  102         MYSQLI_TYPE_NEWDATE     => 
'date',
 
  103         MYSQLI_TYPE_ENUM        => 
'enum',
 
  104         MYSQLI_TYPE_SET         => 
'set',
 
  105         MYSQLI_TYPE_TINY_BLOB   => 
'tinyblob',
 
  106         MYSQLI_TYPE_MEDIUM_BLOB => 
'mediumblob',
 
  107         MYSQLI_TYPE_LONG_BLOB   => 
'longblob',
 
  108         MYSQLI_TYPE_BLOB        => 
'blob',
 
  109         MYSQLI_TYPE_VAR_STRING  => 
'varchar',
 
  110         MYSQLI_TYPE_STRING      => 
'char',
 
  111         MYSQLI_TYPE_GEOMETRY    => 
'geometry',
 
  131         $result = $db->loadModule(
'Datatype', null, 
true);
 
  135         $table = $db->quoteIdentifier($table, 
true);
 
  136         $query = 
"SHOW COLUMNS FROM $table LIKE ".$db->quote($field_name);
 
  142             $column = array_change_key_case($column, CASE_LOWER);
 
  143             $column[
'name'] = $column[
'field'];
 
  144             unset($column[
'field']);
 
  146                 if ($db->options[
'field_case'] == CASE_LOWER) {
 
  147                     $column[
'name'] = strtolower($column[
'name']);
 
  149                     $column[
'name'] = strtoupper($column[
'name']);
 
  152                 $column = array_change_key_case($column, $db->options[
'field_case']);
 
  154             if ($field_name == $column[
'name']) {
 
  155                 $mapped_datatype = $db->datatype->mapNativeDatatype($column);
 
  156                 if (PEAR::IsError($mapped_datatype)) {
 
  157                     return $mapped_datatype;
 
  159                 list(
$types, $length, $unsigned, $fixed) = $mapped_datatype;
 
  161                 if (empty($column[
'null']) || $column[
'null'] !== 
'YES') {
 
  165                 if (array_key_exists(
'default', $column)) {
 
  166                     $default = $column[
'default'];
 
  167                     if (is_null($default) && $notnull) {
 
  171                 $autoincrement = 
false;
 
  172                 if (!empty($column[
'extra']) && $column[
'extra'] == 
'auto_increment') {
 
  173                     $autoincrement = 
true;
 
  176                 $definition[0] = array(
 
  177                     'notnull' => $notnull,
 
  178                     'nativetype' => preg_replace(
'/^([a-z]+)[^a-z].*/i', 
'\\1', $column[
'type'])
 
  180                 if (!is_null($length)) {
 
  181                     $definition[0][
'length'] = $length;
 
  183                 if (!is_null($unsigned)) {
 
  184                     $definition[0][
'unsigned'] = $unsigned;
 
  186                 if (!is_null($fixed)) {
 
  187                     $definition[0][
'fixed'] = $fixed;
 
  189                 if ($default !== 
false) {
 
  190                     $definition[0][
'default'] = $default;
 
  192                 if ($autoincrement !== 
false) {
 
  193                     $definition[0][
'autoincrement'] = $autoincrement;
 
  195                 foreach (
$types as $key => $type) {
 
  196                     $definition[$key] = $definition[0];
 
  197                     if ($type == 
'clob' || $type == 
'blob') {
 
  198                         unset($definition[$key][
'default']);
 
  200                     $definition[$key][
'type'] = $type;
 
  201                     $definition[$key][
'mdb2type'] = $type;
 
  208             'it was not specified an existing table column', __FUNCTION__);
 
  229         $table = $db->quoteIdentifier($table, 
true);
 
  230         $query = 
"SHOW INDEX FROM $table /*!50002 WHERE Key_name = %s */";
 
  231         $index_name_mdb2 = $db->getIndexName($index_name);
 
  232         $result = $db->queryRow(sprintf(
$query, $db->quote($index_name_mdb2)));
 
  236             $index_name = $index_name_mdb2;
 
  238         $result = $db->query(sprintf(
$query, $db->quote($index_name)));
 
  243         $definition = array();
 
  245             $row = array_change_key_case(
$row, CASE_LOWER);
 
  246             $key_name = 
$row[
'key_name'];
 
  248                 if ($db->options[
'field_case'] == CASE_LOWER) {
 
  249                     $key_name = strtolower($key_name);
 
  251                     $key_name = strtoupper($key_name);
 
  254             if ($index_name == $key_name) {
 
  255                 if (!
$row[
'non_unique']) {
 
  257                         'it was not specified an existing table index', __FUNCTION__);
 
  259                 $column_name = 
$row[
'column_name'];
 
  261                     if ($db->options[
'field_case'] == CASE_LOWER) {
 
  262                         $column_name = strtolower($column_name);
 
  264                         $column_name = strtoupper($column_name);
 
  267                 $definition[
'fields'][$column_name] = array(
 
  268                     'position' => $colpos++
 
  270                 if (!empty(
$row[
'collation'])) {
 
  271                     $definition[
'fields'][$column_name][
'sorting'] = (
$row[
'collation'] == 
'A' 
  272                         ? 
'ascending' : 
'descending');
 
  277         if (empty($definition[
'fields'])) {
 
  279                 'it was not specified an existing table index', __FUNCTION__);
 
  302         $table = $db->quoteIdentifier($table, 
true);
 
  303         $query = 
"SHOW INDEX FROM $table /*!50002 WHERE Key_name = %s */";
 
  304         if (strtolower($constraint_name) != 
'primary') {
 
  305             $constraint_name_mdb2 = $db->getIndexName($constraint_name);
 
  306             $result = $db->queryRow(sprintf(
$query, $db->quote($constraint_name_mdb2)));
 
  310                 $constraint_name = $constraint_name_mdb2;
 
  313         $result = $db->query(sprintf(
$query, $db->quote($constraint_name)));
 
  318         $definition = array();
 
  320             $row = array_change_key_case(
$row, CASE_LOWER);
 
  321             $key_name = 
$row[
'key_name'];
 
  323                 if ($db->options[
'field_case'] == CASE_LOWER) {
 
  324                     $key_name = strtolower($key_name);
 
  326                     $key_name = strtoupper($key_name);
 
  329             if ($constraint_name == $key_name) {
 
  330                 if (
$row[
'non_unique']) {
 
  332                         $constraint_name . 
' is not an existing table constraint', __FUNCTION__);
 
  334                 if (
$row[
'key_name'] == 
'PRIMARY') {
 
  335                     $definition[
'primary'] = 
true;
 
  337                     $definition[
'unique'] = 
true;
 
  339                 $column_name = 
$row[
'column_name'];
 
  341                     if ($db->options[
'field_case'] == CASE_LOWER) {
 
  342                         $column_name = strtolower($column_name);
 
  344                         $column_name = strtoupper($column_name);
 
  347                 $definition[
'fields'][$column_name] = array(
 
  348                     'position' => $colpos++
 
  350                 if (!empty(
$row[
'collation'])) {
 
  351                     $definition[
'fields'][$column_name][
'sorting'] = (
$row[
'collation'] == 
'A' 
  352                         ? 
'ascending' : 
'descending');
 
  357         if (empty($definition[
'fields'])) {
 
  359                 $constraint_name . 
' is not an existing table constraint', __FUNCTION__);
 
  386         $query = 
'SELECT trigger_name, 
  387                          event_object_table AS table_name, 
  388                          action_statement AS trigger_body, 
  389                          action_timing AS trigger_type, 
  390                          event_manipulation AS trigger_event 
  391                     FROM information_schema.triggers 
  392                    WHERE trigger_name = '. $db->quote($trigger, 
'text');
 
  394             'trigger_name'    => 
'text',
 
  395             'table_name'      => 
'text',
 
  396             'trigger_body'    => 
'text',
 
  397             'trigger_type'    => 
'text',
 
  398             'trigger_event'   => 
'text',
 
  404         $def[
'trigger_comment'] = 
'';
 
  405         $def[
'trigger_enabled'] = 
true;
 
  439         if (!is_object($resource)) {
 
  441                 'Could not generate result resource', __FUNCTION__);
 
  445             if ($db->options[
'field_case'] == CASE_LOWER) {
 
  446                 $case_func = 
'strtolower';
 
  448                 $case_func = 
'strtoupper';
 
  451             $case_func = 
'strval';
 
  454         $count = @mysqli_num_fields($resource);
 
  457             $res[
'num_fields'] = $count;
 
  460         $db->loadModule(
'Datatype', null, 
true);
 
  461         for ($i = 0; $i < $count; $i++) {
 
  462             $tmp = @mysqli_fetch_field($resource);
 
  465             foreach ($this->flags as $const => $means) {
 
  466                 if ($tmp->flags & $const) {
 
  471                 $flags.= 
'default_' . rawurlencode($tmp->def);
 
  476                 'table'  => $case_func($tmp->table),
 
  477                 'name'   => $case_func($tmp->name),
 
  478                 'type'   => isset($this->types[$tmp->type])
 
  479                     ? $this->types[$tmp->type] : 
'unknown',
 
  481                 'length' => $tmp->length,
 
  484             $mdb2type_info = $db->datatype->mapNativeDatatype(
$res[$i]);
 
  486                return $mdb2type_info;
 
  488             $res[$i][
'mdb2type'] = $mdb2type_info[0][0];
 
  490                 $res[
'order'][
$res[$i][
'name']] = $i;
 
  493                 $res[
'ordertable'][
$res[$i][
'table']][
$res[$i][
'name']] = $i;