diff options
author | Nils Adermann <naderman@naderman.de> | 2014-02-02 16:34:55 +0100 |
---|---|---|
committer | Nils Adermann <naderman@naderman.de> | 2014-02-02 16:34:55 +0100 |
commit | 38af79dd30f87c3016a2f85d3343bb5f9bb5de7c (patch) | |
tree | 2447c1f35c2eedfcaa1b60c9c151d3df61e027fb /phpBB/phpbb/db/tools.php | |
parent | 8a6b961c54ea117ada9a85044840975d050c91b7 (diff) | |
parent | a59d6e94a5bc30e99be5535632ccf2046817dd30 (diff) | |
download | forums-38af79dd30f87c3016a2f85d3343bb5f9bb5de7c.tar forums-38af79dd30f87c3016a2f85d3343bb5f9bb5de7c.tar.gz forums-38af79dd30f87c3016a2f85d3343bb5f9bb5de7c.tar.bz2 forums-38af79dd30f87c3016a2f85d3343bb5f9bb5de7c.tar.xz forums-38af79dd30f87c3016a2f85d3343bb5f9bb5de7c.zip |
Merge remote-tracking branch 'github-nickvergessen/ticket/11201' into develop
* github-nickvergessen/ticket/11201: (50 commits)
[ticket/11201] Remove empty calls section from .yml
[ticket/11201] Split template file into multiple files
[ticket/11201] Remove dependency from types on the manager
[ticket/11201] Rename profilefields class to manager
[ticket/11201] Fix parameter description
[ticket/11201] Use !== null, its faster
[ticket/11201] Also translate profile fields in UCP and ACP
[ticket/11201] Add parameters and variables to profile field class
[ticket/11201] Add commas on last array entry
[ticket/11201] Allow translation of profile field name and explanation
[ticket/11201] Fix some variable names
[ticket/11201] Add tables to constructor in tests
[ticket/11201] Add a method to return the translated full name of the type
[ticket/11201] Remove db depending code from field class
[ticket/11201] Add variables to classes and add constructor doc blocks
[ticket/11201] Update copyright in class file
[ticket/11201] Add visibility and remove unused variable
[ticket/11201] Add some commas at the last array entry
[ticket/11201] Cast some variables to integer
[ticket/11201] Inject table names rather then using constants
...
Conflicts:
phpBB/config/services.yml
Diffstat (limited to 'phpBB/phpbb/db/tools.php')
-rw-r--r-- | phpBB/phpbb/db/tools.php | 106 |
1 files changed, 60 insertions, 46 deletions
diff --git a/phpBB/phpbb/db/tools.php b/phpBB/phpbb/db/tools.php index 4360c89ac3..65098b643b 100644 --- a/phpBB/phpbb/db/tools.php +++ b/phpBB/phpbb/db/tools.php @@ -1474,52 +1474,7 @@ class tools } // Get type - if (strpos($column_data[0], ':') !== false) - { - list($orig_column_type, $column_length) = explode(':', $column_data[0]); - if (!is_array($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'])) - { - $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'], $column_length); - } - else - { - if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'])) - { - switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][0]) - { - case 'div': - $column_length /= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][1]; - $column_length = ceil($column_length); - $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length); - break; - } - } - - if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'])) - { - switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][0]) - { - case 'mult': - $column_length *= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][1]; - if ($column_length > $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][2]) - { - $column_type = $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][3]; - } - else - { - $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length); - } - break; - } - } - } - $orig_column_type .= ':'; - } - else - { - $orig_column_type = $column_data[0]; - $column_type = $this->dbms_type_map[$this->sql_layer][$column_data[0]]; - } + list($column_type, $orig_column_type) = $this->get_column_type($column_data[0]); // Adjust default value if db-dependent specified if (is_array($column_data[1])) @@ -1695,6 +1650,65 @@ class tools } /** + * Get the column's database type from the type map + * + * @param string $column_map_type + * @return array column type for this database + * and map type without length + */ + function get_column_type($column_map_type) + { + if (strpos($column_map_type, ':') !== false) + { + list($orig_column_type, $column_length) = explode(':', $column_map_type); + if (!is_array($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'])) + { + $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'], $column_length); + } + else + { + if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'])) + { + switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][0]) + { + case 'div': + $column_length /= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['rule'][1]; + $column_length = ceil($column_length); + $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length); + break; + } + } + + if (isset($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'])) + { + switch ($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][0]) + { + case 'mult': + $column_length *= $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][1]; + if ($column_length > $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][2]) + { + $column_type = $this->dbms_type_map[$this->sql_layer][$orig_column_type . ':']['limit'][3]; + } + else + { + $column_type = sprintf($this->dbms_type_map[$this->sql_layer][$orig_column_type . ':'][0], $column_length); + } + break; + } + } + } + $orig_column_type .= ':'; + } + else + { + $orig_column_type = $column_map_type; + $column_type = $this->dbms_type_map[$this->sql_layer][$column_map_type]; + } + + return array($column_type, $orig_column_type); + } + + /** * Add new column */ function sql_column_add($table_name, $column_name, $column_data, $inline = false) |