Пример #1
0
 public function Create()
 {
     $sql = 'CREATE TABLE ' . pdoMap_Database_Request_Adapters_MySQL_Builder::escapeTable($this->name, $this->database) . ' (' . "\n";
     $opt = '';
     foreach ($this->fields as $field) {
         $sql .= pdoMap_Database_Request_Adapters_MySQL_Builder::escapeEntity($field->name) . ' ';
         switch ($field->type) {
             case pdoMap_Mapping_Metadata_Field::FIELD_TYPE_PK:
                 $sql .= 'INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ';
                 break;
             case pdoMap_Mapping_Metadata_Field::FIELD_TYPE_FK:
                 $sql .= 'INT(10) UNSIGNED NOT NULL';
                 $opt .= 'INDEX(' . pdoMap_Database_Request_Adapters_MySQL_Builder::escapeEntity($field->name) . '), ' . "\n";
                 break;
             case pdoMap_Mapping_Metadata_Field::FIELD_TYPE_TEXT:
                 if (isset($field->size)) {
                     $sql .= 'VARCHAR(' . $field->size . ')';
                 } else {
                     $sql .= 'TEXT';
                 }
                 break;
             case pdoMap_Mapping_Metadata_Field::FIELD_TYPE_INT:
                 switch ($field->size) {
                     case 'tiny':
                         $sql .= 'TINYINT';
                         break;
                     case 'small':
                         $sql .= 'SMALLINT';
                         break;
                     case 'medium':
                         $sql .= 'MEDIUMINT';
                         break;
                     case 'big':
                         $sql .= 'BIGINT';
                         break;
                     default:
                         $sql .= 'INT(10)';
                 }
                 break;
             case pdoMap_Mapping_Metadata_Field::FIELD_TYPE_FLOAT:
                 $sql .= 'FLOAT';
                 break;
             case pdoMap_Mapping_Metadata_Field::FIELD_TYPE_ENUM:
                 $sql .= 'ENUM(';
                 foreach ($field->values as $val) {
                     $sql .= pdoMap_Database_Request_Adapters_MySQL_Builder::escapeValue($val) . ', ';
                 }
                 $sql = substr($sql, 0, strlen($sql) - 2) . ')';
                 break;
             case pdoMap_Mapping_Metadata_Field::FIELD_TYPE_DATE:
                 $sql .= 'TIMESTAMP';
                 break;
             default:
                 throw new Exception('Unknown field type ' . $field->type . ' for ' . $field->name . ' on table ' . $this->name);
                 break;
         }
         if ($field->isIndex) {
             $opt .= 'INDEX(' . pdoMap_Database_Request_Adapters_MySQL_Builder::escapeEntity($field->name) . '), ' . "\n";
         }
         if ($field->isNull) {
             $sql .= ' NULL ';
         } else {
             $sql .= ' NOT NULL ';
         }
         if ($field->default) {
             if (substr($field->default, 0, 1) == '*') {
                 $sql .= ' DEFAULT ' . substr($field->default, 1);
             } else {
                 $sql .= ' DEFAULT ' . pdoMap_Database_Request_Adapters_MySQL_Builder::escapeValue($field->default);
             }
         }
         $sql .= ' COMMENT \'*' . $field->bind . ':' . $field->comment . '\', ' . "\n";
     }
     $sql .= $opt;
     $sql = substr($sql, 0, strlen($sql) - 3) . ')  ENGINE = INNODB;';
     return pdoMap::database()->Request($this->database, $sql);
 }
Пример #2
0
 public function escapeValue($value)
 {
     return pdoMap_Database_Request_Adapters_MySQL_Builder::escapeValue($value);
 }